/*
 * Material Design 3 Component Library
 * Comprehensive MD3 components for DATIM Generator
 *
 * Components included:
 * - Buttons (filled, outlined, text, icon)
 * - Cards (filled, elevated, outlined)
 * - Text Fields
 * - Progress indicators (circular, linear)
 * - Chips
 * - Dialogs
 * - Navigation
 */

/* ========================================
 * BUTTONS
 * ======================================== */

/* Base button styles */
.md3-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--md-sys-spacing-sm);
  padding: 10px 24px;
  border-radius: var(--md-sys-shape-corner-full);
  font-family: var(--md-sys-typescale-label-large-font);
  font-size: var(--md-sys-typescale-label-large-size);
  font-weight: var(--md-sys-typescale-label-large-weight);
  letter-spacing: var(--md-sys-typescale-label-large-tracking);
  line-height: var(--md-sys-typescale-label-large-line-height);
  text-decoration: none;
  border: none;
  cursor: pointer;
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
  position: relative;
  overflow: hidden;
  user-select: none;
  white-space: nowrap;
}

.md3-button:disabled {
  cursor: not-allowed;
  opacity: var(--md-sys-state-disabled-opacity);
}

/* Filled button (primary) */
.md3-button-filled {
  background-color: var(--md-sys-color-primary);
  color: var(--md-sys-color-on-primary);
  box-shadow: var(--md-sys-elevation-0);
}

.md3-button-filled:hover:not(:disabled) {
  box-shadow: var(--md-sys-elevation-1);
  background-color: color-mix(in srgb, var(--md-sys-color-primary) 92%, white);
}

.md3-button-filled:active:not(:disabled) {
  box-shadow: var(--md-sys-elevation-0);
}

/* Outlined button */
.md3-button-outlined {
  background-color: transparent;
  color: var(--md-sys-color-primary);
  border: 1px solid var(--md-sys-color-outline);
}

.md3-button-outlined:hover:not(:disabled) {
  background-color: color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent);
  border-color: var(--md-sys-color-primary);
}

.md3-button-outlined:active:not(:disabled) {
  background-color: color-mix(in srgb, var(--md-sys-color-primary) 12%, transparent);
}

/* Text button */
.md3-button-text {
  background-color: transparent;
  color: var(--md-sys-color-primary);
  padding: 10px 12px;
}

.md3-button-text:hover:not(:disabled) {
  background-color: color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent);
}

.md3-button-text:active:not(:disabled) {
  background-color: color-mix(in srgb, var(--md-sys-color-primary) 12%, transparent);
}

/* Icon button */
.md3-icon-button {
  width: 48px;
  height: 48px;
  padding: 0;
  border-radius: var(--md-sys-shape-corner-full);
  background-color: transparent;
  color: var(--md-sys-color-on-surface-variant);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  cursor: pointer;
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
}

.md3-icon-button:hover:not(:disabled) {
  background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);
}

/* ========================================
 * CARDS
 * ======================================== */

/* Base card */
.md3-card {
  background-color: var(--md-sys-color-surface-container);
  border-radius: var(--md-sys-shape-corner-medium);
  padding: var(--md-sys-spacing-md);
  transition: all 0.3s cubic-bezier(0.2, 0, 0, 1);
  position: relative;
  overflow: hidden;
}

/* Filled card */
.md3-card-filled {
  background-color: var(--md-sys-color-surface-container-highest);
  box-shadow: var(--md-sys-elevation-0);
}

/* Elevated card */
.md3-card-elevated {
  background-color: var(--md-sys-color-surface-container-low);
  box-shadow: var(--md-sys-elevation-1);
}

.md3-card-elevated:hover {
  box-shadow: var(--md-sys-elevation-2);
}

/* Outlined card */
.md3-card-outlined {
  background-color: var(--md-sys-color-surface);
  border: 1px solid var(--md-sys-color-outline-variant);
  box-shadow: var(--md-sys-elevation-0);
}

/* Card content areas */
.md3-card-header {
  margin-bottom: var(--md-sys-spacing-md);
}

.md3-card-title {
  font-family: var(--md-sys-typescale-headline-small-font);
  font-size: var(--md-sys-typescale-headline-small-size);
  font-weight: var(--md-sys-typescale-headline-small-weight);
  line-height: var(--md-sys-typescale-headline-small-line-height);
  color: var(--md-sys-color-on-surface);
  margin: 0;
}

.md3-card-subtitle {
  font-family: var(--md-sys-typescale-body-medium-font);
  font-size: var(--md-sys-typescale-body-medium-size);
  color: var(--md-sys-color-on-surface-variant);
  margin: var(--md-sys-spacing-xs) 0 0 0;
}

.md3-card-content {
  color: var(--md-sys-color-on-surface);
  margin-bottom: var(--md-sys-spacing-md);
}

.md3-card-actions {
  display: flex;
  gap: var(--md-sys-spacing-sm);
  margin-top: var(--md-sys-spacing-md);
}

/* ========================================
 * TEXT FIELDS
 * ======================================== */

.md3-text-field {
  position: relative;
  display: flex;
  flex-direction: column;
  margin-bottom: var(--md-sys-spacing-md);
}

.md3-text-field-input {
  width: 100%;
  padding: 16px;
  border-radius: var(--md-sys-shape-corner-extra-small) var(--md-sys-shape-corner-extra-small) 0 0;
  border: none;
  border-bottom: 1px solid var(--md-sys-color-on-surface-variant);
  background-color: var(--md-sys-color-surface-container-highest);
  color: var(--md-sys-color-on-surface);
  font-family: var(--md-sys-typescale-body-large-font);
  font-size: var(--md-sys-typescale-body-large-size);
  line-height: var(--md-sys-typescale-body-large-line-height);
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
  outline: none;
}

.md3-text-field-input:focus {
  border-bottom-width: 2px;
  border-bottom-color: var(--md-sys-color-primary);
}

.md3-text-field-input:disabled {
  opacity: var(--md-sys-state-disabled-opacity);
  cursor: not-allowed;
}

.md3-text-field-label {
  position: absolute;
  left: 16px;
  top: 16px;
  color: var(--md-sys-color-on-surface-variant);
  font-size: var(--md-sys-typescale-body-large-size);
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
  pointer-events: none;
}

.md3-text-field-input:focus + .md3-text-field-label,
.md3-text-field-input:not(:placeholder-shown) + .md3-text-field-label {
  top: 4px;
  font-size: var(--md-sys-typescale-body-small-size);
  color: var(--md-sys-color-primary);
}

.md3-text-field-helper {
  font-size: var(--md-sys-typescale-body-small-size);
  color: var(--md-sys-color-on-surface-variant);
  margin-top: var(--md-sys-spacing-xs);
  padding: 0 16px;
}

.md3-text-field-error .md3-text-field-input {
  border-bottom-color: var(--md-sys-color-error);
}

.md3-text-field-error .md3-text-field-helper {
  color: var(--md-sys-color-error);
}

/* ========================================
 * PROGRESS INDICATORS
 * ======================================== */

/* Linear progress */
.md3-progress-linear {
  width: 100%;
  height: 4px;
  background-color: var(--md-sys-color-surface-container-highest);
  border-radius: var(--md-sys-shape-corner-full);
  overflow: hidden;
  position: relative;
}

.md3-progress-linear-bar {
  height: 100%;
  background-color: var(--md-sys-color-primary);
  border-radius: var(--md-sys-shape-corner-full);
  transition: width 0.3s cubic-bezier(0.2, 0, 0, 1);
}

.md3-progress-linear-indeterminate .md3-progress-linear-bar {
  animation: md3-progress-indeterminate 2s infinite;
}

@keyframes md3-progress-indeterminate {
  0% {
    width: 0;
    margin-left: 0;
  }
  50% {
    width: 60%;
    margin-left: 20%;
  }
  100% {
    width: 0;
    margin-left: 100%;
  }
}

/* Circular progress */
.md3-progress-circular {
  width: 48px;
  height: 48px;
  display: inline-block;
  position: relative;
}

.md3-progress-circular-spinner {
  width: 100%;
  height: 100%;
  animation: md3-progress-rotate 1.4s linear infinite;
}

.md3-progress-circular-circle {
  stroke: var(--md-sys-color-primary);
  stroke-dasharray: 1, 200;
  stroke-dashoffset: 0;
  stroke-linecap: round;
  animation: md3-progress-dash 1.4s ease-in-out infinite;
}

@keyframes md3-progress-rotate {
  100% {
    transform: rotate(360deg);
  }
}

@keyframes md3-progress-dash {
  0% {
    stroke-dasharray: 1, 200;
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 100, 200;
    stroke-dashoffset: -15;
  }
  100% {
    stroke-dasharray: 100, 200;
    stroke-dashoffset: -125;
  }
}

/* ========================================
 * CHIPS
 * ======================================== */

.md3-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--md-sys-spacing-xs);
  padding: 6px 16px;
  border-radius: var(--md-sys-shape-corner-small);
  background-color: var(--md-sys-color-surface-container-low);
  border: 1px solid var(--md-sys-color-outline);
  font-size: var(--md-sys-typescale-label-large-size);
  font-weight: var(--md-sys-typescale-label-large-weight);
  color: var(--md-sys-color-on-surface-variant);
  cursor: pointer;
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
  user-select: none;
}

.md3-chip:hover {
  background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, var(--md-sys-color-surface-container-low));
}

.md3-chip-selected {
  background-color: var(--md-sys-color-secondary-container);
  border-color: transparent;
  color: var(--md-sys-color-on-secondary-container);
}

/* ========================================
 * ALERTS / BANNERS
 * ======================================== */

.md3-alert {
  display: flex;
  gap: var(--md-sys-spacing-md);
  padding: var(--md-sys-spacing-md);
  border-radius: var(--md-sys-shape-corner-medium);
  margin-bottom: var(--md-sys-spacing-md);
}

.md3-alert-info {
  background-color: var(--md-sys-color-info-container);
  color: var(--md-sys-color-on-info-container);
}

.md3-alert-success {
  background-color: var(--md-sys-color-success-container);
  color: var(--md-sys-color-on-success-container);
}

.md3-alert-warning {
  background-color: var(--md-sys-color-warning-container);
  color: var(--md-sys-color-on-warning-container);
}

.md3-alert-error {
  background-color: var(--md-sys-color-error-container);
  color: var(--md-sys-color-on-error-container);
}

/* ========================================
 * DIVIDER
 * ======================================== */

.md3-divider {
  height: 1px;
  background-color: var(--md-sys-color-outline-variant);
  border: none;
  margin: var(--md-sys-spacing-md) 0;
}

/* ========================================
 * LIST
 * ======================================== */

.md3-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.md3-list-item {
  display: flex;
  align-items: center;
  gap: var(--md-sys-spacing-md);
  padding: var(--md-sys-spacing-md);
  border-radius: var(--md-sys-shape-corner-small);
  cursor: pointer;
  transition: background-color 0.2s cubic-bezier(0.2, 0, 0, 1);
}

.md3-list-item:hover {
  background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);
}

.md3-list-item-content {
  flex: 1;
}

.md3-list-item-title {
  font-size: var(--md-sys-typescale-body-large-size);
  font-weight: var(--md-sys-typescale-body-large-weight);
  color: var(--md-sys-color-on-surface);
  margin: 0;
}

.md3-list-item-subtitle {
  font-size: var(--md-sys-typescale-body-medium-size);
  color: var(--md-sys-color-on-surface-variant);
  margin: var(--md-sys-spacing-xs) 0 0 0;
}

/* ========================================
 * NAVIGATION
 * ======================================== */

.md3-nav-bar {
  display: flex;
  gap: var(--md-sys-spacing-sm);
  padding: var(--md-sys-spacing-sm);
  background-color: var(--md-sys-color-surface-container);
  border-radius: var(--md-sys-shape-corner-large);
}

.md3-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--md-sys-spacing-xs);
  padding: var(--md-sys-spacing-sm) var(--md-sys-spacing-md);
  border-radius: var(--md-sys-shape-corner-medium);
  color: var(--md-sys-color-on-surface-variant);
  text-decoration: none;
  font-size: var(--md-sys-typescale-label-medium-size);
  font-weight: var(--md-sys-typescale-label-medium-weight);
  transition: all 0.2s cubic-bezier(0.2, 0, 0, 1);
  cursor: pointer;
  border: none;
  background: transparent;
}

.md3-nav-item:hover {
  background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);
}

.md3-nav-item-active {
  background-color: var(--md-sys-color-secondary-container);
  color: var(--md-sys-color-on-secondary-container);
}

/* ========================================
 * UTILITIES
 * ======================================== */

.md3-elevation-0 { box-shadow: var(--md-sys-elevation-0); }
.md3-elevation-1 { box-shadow: var(--md-sys-elevation-1); }
.md3-elevation-2 { box-shadow: var(--md-sys-elevation-2); }
.md3-elevation-3 { box-shadow: var(--md-sys-elevation-3); }
.md3-elevation-4 { box-shadow: var(--md-sys-elevation-4); }
.md3-elevation-5 { box-shadow: var(--md-sys-elevation-5); }
