/**
 * Canonical visual tokens and theme roles.
 * No selectors or component presentation belong in this file.
 */

:root {
  color-scheme: dark;

  --neutral-0: oklch(1 0 0);
  --neutral-50: oklch(0.985 0 0);
  --neutral-100: oklch(0.97 0 0);
  --neutral-200: oklch(0.922 0 0);
  --neutral-300: oklch(0.87 0 0);
  --neutral-400: oklch(0.708 0 0);
  --neutral-500: oklch(0.556 0 0);
  --neutral-600: oklch(0.439 0 0);
  --neutral-700: oklch(0.371 0 0);
  --neutral-800: oklch(0.269 0 0);
  --neutral-900: oklch(0.205 0 0);
  --neutral-950: oklch(0.145 0 0);
  --neutral-1000: oklch(0 0 0);

  --petroleum-50: #edf5f0;
  --petroleum-100: #deede4;
  --petroleum-200: #bddbcb;
  --petroleum-300: #a0d1b9;
  --petroleum-400: #83c8ac;
  --petroleum-500: #3c8a72;
  --petroleum-600: #155e52;
  --petroleum-700: #10493f;
  --petroleum-800: #123d34;
  --petroleum-900: #16342c;
  --petroleum-950: #10241e;

  --background: #101715;
  --surface: #18211e;
  --surface-subtle: #1d2923;
  --surface-muted: #26352d;
  --field-background: var(--surface);
  --foreground: #edf2eb;
  --foreground-strong: #ffffff;
  --foreground-soft: #c4d0c7;
  --muted-foreground: #a5b3aa;
  --border: #33423a;
  --border-strong: #798b80;
  --primary: var(--foreground);
  --primary-foreground: var(--background);
  --navigation-active-background: #1f2927;
  --navigation-active-foreground: var(--neutral-0);
  --navigation-active-border: var(--border-strong);

  --brand: var(--petroleum-400);
  --brand-hover: var(--petroleum-300);
  --brand-active: var(--petroleum-200);
  --brand-subtle: var(--petroleum-950);
  --brand-border: var(--petroleum-500);
  --brand-foreground: var(--petroleum-950);
  --ring: var(--brand);
  --ring-soft: color-mix(in oklch, var(--ring) 22%, transparent);
  --link: var(--brand);
  --reading-accent: var(--foreground-soft);

  --info: oklch(0.69 0.12 240);
  --success: oklch(0.7 0.13 155);
  --warning: oklch(0.78 0.13 82);
  --destructive: oklch(0.68 0.17 25);
  --status-available: oklch(0.68 0.13 305);
  --academic-honor: oklch(0.68 0.13 305);
  --destructive-soft: color-mix(in oklab, var(--destructive) 12%, var(--surface));
  --destructive-border: color-mix(in oklab, var(--destructive) 58%, var(--border));

  --component-foundation: oklch(0.7 0.09 70);
  --component-disciplinary: oklch(0.68 0.1 215);
  --component-consolidation: oklch(0.67 0.1 345);
  --component-free-choice: oklch(0.68 0.11 295);
  --component-leveling: oklch(0.67 0.1 160);

  --status-aprobada-bg: color-mix(in oklab, var(--success) 18%, var(--surface));
  --status-aprobada-border: color-mix(in oklab, var(--success) 72%, var(--foreground));
  --status-aprobada-text: color-mix(in oklab, var(--success) 68%, var(--neutral-0));
  --status-cursando-bg: color-mix(in oklab, var(--info) 18%, var(--surface));
  --status-cursando-border: color-mix(in oklab, var(--info) 78%, var(--foreground));
  --status-cursando-text: color-mix(in oklab, var(--info) 64%, var(--neutral-0));
  --status-disponible-bg: color-mix(in oklab, var(--status-available) 18%, var(--surface));
  --status-disponible-border: color-mix(in oklab, var(--status-available) 76%, var(--foreground));
  --status-disponible-text: color-mix(in oklab, var(--status-available) 62%, var(--neutral-0));
  --status-bloqueada-bg: var(--surface-subtle);
  --status-bloqueada-border: var(--border-strong);
  --status-bloqueada-text: var(--muted-foreground);
  --status-reprobada-bg: color-mix(in oklab, var(--destructive) 18%, var(--surface));
  --status-reprobada-border: color-mix(in oklab, var(--destructive) 76%, var(--foreground));
  --status-reprobada-text: color-mix(in oklab, var(--destructive) 64%, var(--neutral-0));
  --status-pendiente-bg: color-mix(in oklab, var(--warning) 12%, var(--surface));
  --status-pendiente-border: color-mix(in oklab, var(--warning) 58%, var(--border-strong));
  --status-pendiente-text: color-mix(in oklab, var(--warning) 58%, var(--foreground));

  --relation-prerequisite: var(--success);
  --relation-alternative: oklch(0.68 0.13 305);
  --relation-corequisite: var(--info);
  --relation-unlocks: oklch(0.69 0.12 340);
  --relation-conditional: oklch(0.68 0.1 300);

  --shadow-sm: 0 1px 2px color-mix(in oklch, var(--neutral-1000) 28%, transparent);
  --shadow-md: 0 14px 36px color-mix(in oklch, var(--neutral-1000) 34%, transparent);
  --shadow-lg: 0 28px 72px color-mix(in oklch, var(--neutral-1000) 46%, transparent);
  --radius-xs: 4px;
  --radius-sm: 6px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 12px;
  --radius-full: 9999px;
  --font-size-page-title: 1.375rem;
  --font-size-section-title: clamp(1.375rem, 1.8vw, 1.5rem);
  --font-size-control: 0.9375rem;
  --font-body: "Source Sans 3", "Segoe UI", system-ui, sans-serif;
  --font-heading: "Source Serif 4", Georgia, serif;
  --font-mono: "Geist Mono", ui-monospace, monospace;
  --font-assessment-interface: "Geist", "Segoe UI", sans-serif;
  --font-assessment-mono: "Geist Mono", monospace;
  --font-assessment-scientific: "Latin Modern Roman", Georgia, serif;
  --assessment-figure-paper: var(--neutral-0);
  --assessment-figure-ink: #1d3141;
  --assessment-background: #141c28;
  --assessment-surface: #1b2735;
  --assessment-muted: #233142;
  --assessment-foreground: #e7edf5;
  --assessment-secondary: #a4b2c5;
  --assessment-scientific-ink: #e4edf5;
  --assessment-border: #415267;
  --assessment-primary: #85adff;
  --assessment-primary-foreground: #101b2d;
  --assessment-saved-background: #16372e;
  --assessment-saved-border: #397e67;
  --assessment-saved-foreground: #a6dfc4;
  --assessment-panel-shadow: 0 12px 38px rgb(0 0 0 / 6%);
  --assessment-navigation-shadow: 0 14px 38px rgb(0 0 0 / 8%);
  --assessment-mobile-shadow: 0 18px 48px rgb(0 0 0 / 18%);
  --content-max-width-readable: 760px;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.25rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --control-height-xs: 30px;
  --control-height-sm: 34px;
  --control-height: 36px;
  --control-height-field: 40px;
  --control-height-extended: 42px;
  --control-height-touch: 44px;
  --icon-control-size-xs: 22px;
  --icon-control-size-sm: 26px;
  --status-dot-diameter-sm: 7px;
  --status-dot-diameter: 8px;
  --transition-fast: 120ms ease;
  --transition-normal: 180ms ease;
}

[data-theme="light"] {
  color-scheme: light;
  --assessment-background: #f8fafc;
  --assessment-surface: #ffffff;
  --assessment-muted: oklch(0.955 0.008 255);
  --assessment-foreground: oklch(0.22 0.025 258);
  --assessment-secondary: oklch(0.49 0.028 258);
  --assessment-scientific-ink: var(--assessment-figure-ink);
  --assessment-border: oklch(0.89 0.012 255);
  --assessment-primary: oklch(0.51 0.18 260);
  --assessment-primary-foreground: oklch(0.985 0 0);
  --assessment-saved-background: #ecfdf5;
  --assessment-saved-border: #a7f3d0;
  --assessment-saved-foreground: #047857;
  --assessment-panel-shadow: 0 12px 38px rgb(41 56 82 / 6%);
  --assessment-navigation-shadow: 0 14px 38px rgb(41 56 82 / 8%);
  --assessment-mobile-shadow: 0 18px 48px rgb(15 23 42 / 18%);

  --background: #f7f5ef;
  --surface: var(--neutral-0);
  --surface-subtle: #f0f1e9;
  --surface-muted: #e8ece4;
  --field-background: var(--surface);
  --foreground: #1f2927;
  --foreground-strong: #111b18;
  --foreground-soft: #3f5047;
  --muted-foreground: #59645f;
  --border: #d7ded5;
  --border-strong: #7d8c83;
  --primary: var(--foreground);
  --primary-foreground: var(--neutral-0);
  --navigation-active-border: var(--navigation-active-background);
  --brand: var(--petroleum-600);
  --brand-hover: var(--petroleum-700);
  --brand-active: var(--petroleum-800);
  --brand-subtle: var(--petroleum-50);
  --brand-border: var(--petroleum-500);
  --brand-foreground: var(--neutral-0);
  --ring: var(--brand);
  --link: var(--brand);
  --reading-accent: var(--navigation-active-background);
  --info: oklch(0.47 0.11 240);
  --success: oklch(0.45 0.11 155);
  --warning: oklch(0.45 0.09 82);
  --destructive: oklch(0.5 0.17 25);

  --component-foundation: oklch(0.52 0.09 70);
  --component-disciplinary: oklch(0.49 0.1 215);
  --component-consolidation: oklch(0.5 0.1 345);
  --component-free-choice: oklch(0.5 0.11 295);
  --component-leveling: oklch(0.49 0.1 160);

  --status-aprobada-bg: color-mix(in oklab, var(--success) 10%, var(--surface));
  --status-aprobada-border: oklch(0.48 0.11 155);
  --status-aprobada-text: oklch(0.38 0.1 155);
  --status-cursando-bg: color-mix(in oklab, var(--info) 10%, var(--surface));
  --status-cursando-border: oklch(0.49 0.12 240);
  --status-cursando-text: oklch(0.39 0.11 240);
  --status-disponible-bg: color-mix(in oklab, var(--status-available) 9%, var(--surface));
  --status-disponible-border: oklch(0.51 0.12 305);
  --status-disponible-text: oklch(0.4 0.11 305);
  --status-bloqueada-bg: var(--surface-subtle);
  --status-bloqueada-border: var(--border-strong);
  --status-bloqueada-text: var(--neutral-600);
  --status-reprobada-bg: color-mix(in oklab, var(--destructive) 9%, var(--surface));
  --status-reprobada-border: oklch(0.52 0.16 25);
  --status-reprobada-text: oklch(0.42 0.14 25);
  --status-pendiente-bg: color-mix(in oklab, var(--warning) 10%, var(--surface));
  --status-pendiente-border: oklch(0.58 0.1 82);
  --status-pendiente-text: oklch(0.41 0.08 82);

  --relation-prerequisite: oklch(0.45 0.11 155);
  --relation-alternative: oklch(0.48 0.12 305);
  --relation-corequisite: oklch(0.47 0.11 240);
  --relation-unlocks: oklch(0.49 0.12 340);
  --relation-conditional: oklch(0.48 0.1 300);
  --shadow-sm: 0 1px 2px color-mix(in oklch, var(--neutral-1000) 7%, transparent);
  --shadow-md: 0 14px 36px color-mix(in oklch, var(--neutral-1000) 10%, transparent);
  --shadow-lg: 0 28px 72px color-mix(in oklch, var(--neutral-1000) 16%, transparent);
}

/* Touch layouts retain the same controls with adequate target size. */
@media (max-width: 900px), (any-pointer: coarse) {
  :root {
    --control-height-xs: 44px;
    --control-height-sm: 44px;
    --control-height: 44px;
    --control-height-field: 44px;
    --control-height-extended: 44px;
    --font-size-control: 1rem;
  }
}
