/* Colour tokens — light and dark share ONE set of semantic names. Loaded into the `tokens` layer (see css/layers.css).

   1. SEMANTIC TOKENS  The only colour interface for new code. Named by role (surface / text / border / schedule), never by hue
                       or shade. Each is defined twice: the light value (identical to the original colour) and its dark value.
   2. LEGACY ALIASES   The old role-suffixed names (--paper-bg, --ink-text, --cell-course-bg …) now point at the semantic tokens,
                       so the legacy stylesheets keep working unchanged. Do not use them in new code.
   3. DEPRECATED PALETTE  --c-<hex>-<role>: tokens named after the literal colour they started as. They have no semantic role yet.
                       Where a pair is identical to a semantic token it is an alias; the rest keep their literal light/dark pair
                       until the component that uses them is migrated and given a semantic name.
   Change the dark look by editing a `:root[data-theme="dark"]` block only. No raw colours anywhere else. */
@layer tokens {

  /* ---- 1. semantic tokens ---- */
  :root {
    /* surface */
    --surface-page: #f3f5f9;
    --surface-panel: #ffffff;
    --surface-accent-soft: #eff4ff;
    --surface-success-soft: #edf8f2;
    --surface-danger-soft: #fff0f1;
    --surface-warning-soft: #fff7e7;
    --surface-emphasis: #17243d;
    --surface-accent: #2258d5;
    --surface-warning-strong: #b45309;
    --surface-live: #0f766e;
    --surface-live-soft: #e3f5f1;
    --surface-live-band: rgba(15, 118, 110, 0.1);
    --surface-subtle: #f8fafd;
    --surface-muted: #f1f5f9;
    --surface-info-soft: #eff6ff;
    --surface-hover: #f4f7fc;
    --surface-skip-link: #17243d;
    --overlay-scrim: rgba(23, 36, 61, 0.44);
    /* text */
    --text-primary: #17243d;
    --text-secondary: #5f6c82;
    --text-accent: #2258d5;
    --text-success: #19745b;
    --text-danger: #b33448;
    --text-warning: #8d5915;
    --text-live: #0b5f58;
    --text-on-accent: #ffffff;
    --text-on-warning-strong: #ffffff;
    --text-on-skip-link: #ffffff;
    /* border */
    --border-default: #e0e6f0;
    --border-accent: #2258d5;
    --border-emphasis: #17243d;
    --border-live: #0f766e;
    --focus-ring-color: #1d4ed8;
    --focus-ring-color-soft: #759bf0;
    /* schedule */
    --sched-course-bg: #dbe7ff;
    --sched-course-fg: #1e3a8a;
    --sched-exam-bg: #fde9b8;
    --sched-exam-fg: #5b3a00;
    --sched-makeup-bg: #fcd5db;
    --sched-makeup-fg: #7a1f31;
    --sched-software-bg: #e6dcfd;
    --sched-software-fg: #3d1d8a;
    --sched-free-bg: #f1f7f3;
    --sched-free-fg: #2f6b52;
    --sched-unknown-bg: #eceff4;
    --sched-unknown-fg: #545f74;
    --sched-unknown-line: #d5dae3;
    --sched-live-bg: #0f766e;
    --sched-live-fg: #ffffff;
    /* elevation */
    --shadow-color: rgba(23, 36, 61, 0.12);
    --shadow-color-strong: rgba(23, 36, 61, 0.22);
  }
  :root[data-theme="dark"] {
    /* surface */
    --surface-page: #0f1623;
    --surface-panel: #182131;
    --surface-accent-soft: #1c2a4a;
    --surface-success-soft: #14302a;
    --surface-danger-soft: #3b1e27;
    --surface-warning-soft: #3a2c14;
    --surface-emphasis: #3a66d8;
    --surface-accent: #3a66d8;
    --surface-warning-strong: #f2b862;
    --surface-live: #0f766e;
    --surface-live-soft: #12332f;
    --surface-live-band: rgba(45, 212, 191, 0.14);
    --surface-subtle: #1a202b;
    --surface-muted: #181e28;
    --surface-info-soft: #1e242e;
    --surface-hover: #1a202a;
    --surface-skip-link: #e8edf7;
    --overlay-scrim: rgba(2, 5, 12, 0.72);
    /* text */
    --text-primary: #e8edf7;
    --text-secondary: #9aa7bd;
    --text-accent: #8fb0ff;
    --text-success: #5fd3aa;
    --text-danger: #ff93a3;
    --text-warning: #f2b862;
    --text-live: #7eead9;
    --text-on-accent: #ffffff;
    --text-on-warning-strong: #2a1d05;
    --text-on-skip-link: #0f1623;
    /* border */
    --border-default: #2e3b52;
    --border-accent: #5b84ee;
    --border-emphasis: #e8edf7;
    --border-live: #2dd4bf;
    --focus-ring-color: #8fb0ff;
    --focus-ring-color-soft: #3d5ead;
    /* schedule */
    --sched-course-bg: #243f7a;
    --sched-course-fg: #dbe7ff;
    --sched-exam-bg: #5a4310;
    --sched-exam-fg: #fde9b8;
    --sched-makeup-bg: #6a2536;
    --sched-makeup-fg: #ffd4dc;
    --sched-software-bg: #43307a;
    --sched-software-fg: #e6dcfd;
    --sched-free-bg: #15251f;
    --sched-free-fg: #7fcfae;
    --sched-unknown-bg: #1f2735;
    --sched-unknown-fg: #9aa7bd;
    --sched-unknown-line: #2e3b52;
    --sched-live-bg: #2dd4bf;
    --sched-live-fg: #04302b;
    /* elevation */
    --shadow-color: rgba(0, 0, 0, 0.5);
    --shadow-color-strong: rgba(0, 0, 0, 0.62);
  }

  /* ---- 2. legacy aliases (named palette) ---- */
  :root {
    --bg-bg: var(--surface-page);
    --paper-bg: var(--surface-panel);
    --softblue-bg: var(--surface-accent-soft);
    --softgreen-bg: var(--surface-success-soft);
    --softred-bg: var(--surface-danger-soft);
    --softamber-bg: var(--surface-warning-soft);
    --ink-bg: var(--surface-emphasis);
    --blue-bg: var(--surface-accent);
    --badge-alert-bg: var(--surface-warning-strong);
    --live-bg: var(--surface-live);
    --live-soft-bg: var(--surface-live-soft);
    --live-band-bg: var(--surface-live-band);
    --skip-bg: var(--surface-skip-link);
    --scrim: var(--overlay-scrim);
    --ink-text: var(--text-primary);
    --muted-text: var(--text-secondary);
    --blue-text: var(--text-accent);
    --green-text: var(--text-success);
    --red-text: var(--text-danger);
    --amber: var(--text-warning);
    --live-text: var(--text-live);
    --badge-fg: var(--text-on-accent);
    --badge-alert-fg: var(--text-on-warning-strong);
    --skip-fg: var(--text-on-skip-link);
    --line-border: var(--border-default);
    --blue-border: var(--border-accent);
    --ink-border: var(--border-emphasis);
    --live-border: var(--border-live);
    --focus-color: var(--focus-ring-color);
    --cell-course-bg: var(--sched-course-bg);
    --cell-course-fg: var(--sched-course-fg);
    --cell-exam-bg: var(--sched-exam-bg);
    --cell-exam-fg: var(--sched-exam-fg);
    --cell-makeup-bg: var(--sched-makeup-bg);
    --cell-makeup-fg: var(--sched-makeup-fg);
    --cell-software-bg: var(--sched-software-bg);
    --cell-software-fg: var(--sched-software-fg);
    --cell-free-bg: var(--sched-free-bg);
    --cell-free-fg: var(--sched-free-fg);
    --cell-unknown-bg: var(--sched-unknown-bg);
    --cell-unknown-fg: var(--sched-unknown-fg);
    --cell-unknown-line: var(--sched-unknown-line);
    --cell-live-bg: var(--sched-live-bg);
    --cell-live-fg: var(--sched-live-fg);
    --badge-bg: var(--surface-accent);
    --bg: var(--surface-page);
    --paper: var(--surface-panel);
    --ink: var(--text-primary);
    --muted: var(--text-secondary);
    --line: var(--border-default);
    --blue: var(--text-accent);
    --softblue: var(--surface-accent-soft);
    --green: var(--text-success);
    --softgreen: var(--surface-success-soft);
    --red: var(--text-danger);
    --softred: var(--surface-danger-soft);
    --softamber: var(--surface-warning-soft);
  }

  /* ---- 3. deprecated palette: aliases ---- */
  :root {
  }

  /* ---- 3. deprecated palette: literal light / dark pairs ---- */
  :root {
    --c-000000-bg: #000000;
    --c-10b981-bg: #10b981;
    --c-10b981-text: #10b981;
    --c-152945-border: #152945;
    --c-15803d-text: #15803d;
    --c-17243d-bg: #17243d;
    --c-194abe-bg: #194abe;
    --c-1d4ed8-bg: #1d4ed8;
    --c-1d4ed8-border: #1d4ed8;
    --c-1d4ed8-text: #1d4ed8;
    --c-1e1b4b-text: #1e1b4b;
    --c-1e40af-text: #1e40af;
    --c-204781-text: #204781;
    --c-243b62-bg: #243b62;
    --c-2563eb-bg: #2563eb;
    --c-2563eb-border: #2563eb;
    --c-2563eb-text: #2563eb;
    --c-2d5899-text: #2d5899;
    --c-2e1065-text: #2e1065;
    --c-315a98-text: #315a98;
    --c-334155-text: #334155;
    --c-374151-text: #374151;
    --c-37765c-text: #37765c;
    --c-3a4963-text: #3a4963;
    --c-4338ca-text: #4338ca;
    --c-444444-text: #444444;
    --c-475569-text: #475569;
    --c-485870-text: #485870;
    --c-4c1d95-text: #4c1d95;
    --c-51816d-text: #3f6f5b;
    --c-546786-text: #546786;
    --c-56627a-text: #56627a;
    --c-581c87-text: #581c87;
    --c-5b21b6-text: #5b21b6;
    --c-6b21a8-text: #6b21a8;
    --c-6b7280-text: #6b7280;
    --c-6d28d9-text: #6d28d9;
    --c-6d572f-text: #6d572f;
    --c-725625-text: #725625;
    --c-747c8d-text: #606879;
    --c-764b08-text: #764b08;
    --c-78531b-text: #78531b;
    --c-79a0ed-bg: #79a0ed;
    --c-7c3aed-bg: #7c3aed;
    --c-7c3aed-border: #7c3aed;
    --c-7c3aed-text: #7c3aed;
    --c-7e22ce-text: #7e22ce;
    --c-80521b-text: #80521b;
    --c-80551c-text: #80551c;
    --c-818cf8-border: #818cf8;
    --c-835813-text: #835813;
    --c-83a3e5-border: #83a3e5;
    --c-86efac-border: #86efac;
    --c-885916-text: #885916;
    --c-8991a1-text: #656d7e;
    --c-8a5915-text: #8a5915;
    --c-90b0f4-border: #90b0f4;
    --c-922d41-text: #922d41;
    --c-92400e-text: #92400e;
    --c-93c5fd-border: #93c5fd;
    --c-94b0e7-border: #94b0e7;
    --c-983249-text: #983249;
    --c-991b1b-text: #991b1b;
    --c-9d174d-text: #9d174d;
    --c-9d2f45-text: #9d2f45;
    --c-9fbced-border: #9fbced;
    --c-a855f7-bg: #a855f7;
    --c-a855f7-border: #a855f7;
    --c-a9bde8-border: #a9bde8;
    --c-adc3ed-border: #adc3ed;
    --c-adc4f6-border: #adc4f6;
    --c-b3d6c3-border: #b3d6c3;
    --c-b45309-text: #b45309;
    --c-b4c9f5-border: #b4c9f5;
    --c-b91c1c-text: #b91c1c;
    --c-bbf7d0-border: #bbf7d0;
    --c-bdd9cc-border: #bdd9cc;
    --c-bfdbfe-border: #bfdbfe;
    --c-c2410c-text: #c2410c;
    --c-c4b5fd-border: #c4b5fd;
    --c-c7d2fe-border: #c7d2fe;
    --c-d2d7df-border: #d2d7df;
    --c-d3ad67-bg: #d3ad67;
    --c-d3dbe9-border: #d3dbe9;
    --c-d4e1f8-border: #d4e1f8;
    --c-d6ac60-border: #d6ac60;
    --c-d6e2fa-border: #d6e2fa;
    --c-d8ae62-border: #d8ae62;
    --c-d8b4fe-border: #d8b4fe;
    --c-d9848f-border: #d9848f;
    --c-da8c9b-bg: #da8c9b;
    --c-dabc86-border: #dabc86;
    --c-dbe9e1-border: #dbe9e1;
    --c-dca64a-border: #dca64a;
    --c-dceddf-bg: #dceddf;
    --c-dcfce7-bg: #dcfce7;
    --c-ddd6fe-border: #ddd6fe;
    --c-df8a99-border: #df8a99;
    --c-e0e7ff-bg: #e0e7ff;
    --c-e1e5eb-bg: #e1e5eb;
    --c-e2e8f0-bg: #e2e8f0;
    --c-e2e8f0-border: #e2e8f0;
    --c-e3edff-bg: #e3edff;
    --c-e5e7eb-border: #e5e7eb;
    --c-e7acb4-border: #e7acb4;
    --c-e7dce1-border: #e7dce1;
    --c-e8c57e-border: #e8c57e;
    --c-e9d5ff-border: #e9d5ff;
    --c-e9f0ff-bg: #e9f0ff;
    --c-e9f6ee-bg: #e9f6ee;
    --c-ede5fd-bg: #ede5fd;
    --c-ede9fe-bg: #ede9fe;
    --c-ede9fe-border: #ede9fe;
    --c-edf3fc-bg: #edf3fc;
    --c-edf3ff-bg: #edf3ff;
    --c-eef0f4-bg: #eef0f4;
    --c-eef2f8-bg: #eef2f8;
    --c-eef2ff-bg: #eef2ff;
    --c-eff3fa-bg: #eff3fa;
    --c-eff7f2-bg: #eff7f2;
    --c-f0cbd3-border: #f0cbd3;
    --c-f0f3f8-border: #f0f3f8;
    --c-f0f7ff-bg: #f0f7ff;
    --c-f0fdf4-bg: #f0fdf4;
    --c-f1f4f9-bg: #f1f4f9;
    --c-f1f4f9-border: #f1f4f9;
    --c-f2f5fb-bg: #f2f5fb;
    --c-f3e8ff-bg: #f3e8ff;
    --c-f3e8ff-border: #f3e8ff;
    --c-f3f4f6-bg: #f3f4f6;
    --c-f3f6fc-bg: #f3f6fc;
    --c-f4f6fa-bg: #f4f6fa;
    --c-f59e0b-border: #f59e0b;
    --c-f5dfb3-bg: #f5dfb3;
    --c-f5f0ff-bg: #f5f0ff;
    --c-f5f3ff-bg: #f5f3ff;
    --c-f5f6f8-bg: #f5f6f8;
    --c-f6f8fb-bg: #f6f8fb;
    --c-f6f8fc-bg: #f6f8fc;
    --c-f6fbf8-bg: #f6fbf8;
    --c-f7fbf8-bg: #f7fbf8;
    --c-f8f9fb-bg: #f8f9fb;
    --c-f8fafc-bg: #f8fafc;
    --c-f9ecd1-bg: #f9ecd1;
    --c-f9fafc-bg: #f9fafc;
    --c-faf5ff-bg: #faf5ff;
    --c-faf7fc-bg: #faf7fc;
    --c-faf8ff-bg: #faf8ff;
    --c-fafafd-bg: #fafafd;
    --c-fafbfc-bg: #fafbfc;
    --c-fafbfd-bg: #fafbfd;
    --c-fbf8ff-bg: #fbf8ff;
    --c-fbf9ff-bg: #fbf9ff;
    --c-fbfcff-bg: #fbfcff;
    --c-fbfefc-bg: #fbfefc;
    --c-fce1e6-bg: #fce1e6;
    --c-fcfaff-bg: #fcfaff;
    --c-fcfdff-bg: #fcfdff;
    --c-fde68a-border: #fde68a;
    --c-fdf2f8-bg: #fdf2f8;
    --c-fdfaff-bg: #fdfaff;
    --c-fecaca-border: #fecaca;
    --c-fed7aa-border: #fed7aa;
    --c-fee2e2-bg: #fee2e2;
    --c-fef3c7-bg: #fef3c7;
    --c-ffd4d9-bg: #ffd4d9;
    --c-ffedd5-bg: #ffedd5;
    --c-fff0c9-bg: #fff0c9;
    --c-fff4df-bg: #fff4df;
    --c-fff8e9-bg: #fff8e9;
    --c-fffaf0-bg: #fffaf0;
  }
  :root[data-theme="dark"] {
    --c-000000-bg: #000000;
    --c-10b981-bg: #10b981;
    --c-10b981-text: #4ec090;
    --c-152945-border: #405676;
    --c-15803d-text: #6ebc80;
    --c-17243d-bg: #060a12;
    --c-194abe-bg: #1343b6;
    --c-1d4ed8-bg: #1746d0;
    --c-1d4ed8-border: #1d4ed8;
    --c-1d4ed8-text: #7ba5ff;
    --c-1e1b4b-text: #b9bdf1;
    --c-1e40af-text: #7ea4fe;
    --c-204781-text: #84a9e1;
    --c-243b62-bg: #000000;
    --c-2563eb-bg: #1d5ae1;
    --c-2563eb-border: #2563eb;
    --c-2563eb-text: #78a6ff;
    --c-2d5899-text: #81a9e6;
    --c-2e1065-text: #bdb0ff;
    --c-315a98-text: #83a9e3;
    --c-334155-text: #9dacc0;
    --c-374151-text: #a1abbb;
    --c-37765c-text: #80b59d;
    --c-3a4963-text: #99a8c2;
    --c-4338ca-text: #929eff;
    --c-444444-text: #a8a8a8;
    --c-475569-text: #9ba9bc;
    --c-485870-text: #9aa9c0;
    --c-4c1d95-text: #ae94fe;
    --c-51816d-text: #89b3a0;
    --c-546786-text: #97a9c6;
    --c-56627a-text: #9da8bf;
    --c-581c87-text: #bd90ef;
    --c-5b21b6-text: #ac93fe;
    --c-6b21a8-text: #bf8afd;
    --c-6b7280-text: #a1a8b5;
    --c-6d28d9-text: #ac93ff;
    --c-6d572f-text: #b9a581;
    --c-725625-text: #bea47a;
    --c-747c8d-text: #a1a8b7;
    --c-764b08-text: #c89f70;
    --c-78531b-text: #c4a174;
    --c-79a0ed-bg: #4f7cdd;
    --c-7c3aed-bg: #752fe3;
    --c-7c3aed-border: #7c3aed;
    --c-7c3aed-text: #ac93ff;
    --c-7e22ce-text: #bc8bfe;
    --c-80521b-text: #ca9e72;
    --c-80551c-text: #c89f72;
    --c-818cf8-border: #4a4eb4;
    --c-835813-text: #c8a06c;
    --c-83a3e5-border: #4a66a4;
    --c-86efac-border: #034122;
    --c-885916-text: #ca9f6c;
    --c-8991a1-text: #a1a8b6;
    --c-8a5915-text: #cb9e6b;
    --c-90b0f4-border: #5672b2;
    --c-922d41-text: #e68893;
    --c-92400e-text: #df926e;
    --c-93c5fd-border: #1a3e63;
    --c-94b0e7-border: #5973a6;
    --c-983249-text: #e68896;
    --c-991b1b-text: #f28378;
    --c-9d174d-text: #f17e9d;
    --c-9d2f45-text: #ea8692;
    --c-9fbced-border: #637eac;
    --c-a855f7-bg: #9b5be0;
    --c-a855f7-border: #6b01ae;
    --c-a9bde8-border: #6d7fa7;
    --c-adc3ed-border: #2d3b57;
    --c-adc4f6-border: #2c3a5b;
    --c-b3d6c3-border: #273e32;
    --c-b45309-text: #e68f5f;
    --c-b4c9f5-border: #2c3955;
    --c-b91c1c-text: #fd7a6d;
    --c-bbf7d0-border: #0d3a22;
    --c-bdd9cc-border: #293c33;
    --c-bfdbfe-border: #24364c;
    --c-c2410c-text: #f5835f;
    --c-c4b5fd-border: #3e3262;
    --c-c7d2fe-border: #2e3450;
    --c-d2d7df-border: #32353a;
    --c-d3ad67-bg: #b88a2e;
    --c-d3dbe9-border: #2f343d;
    --c-d4e1f8-border: #2a3240;
    --c-d6ac60-border: #966f1c;
    --c-d6e2fa-border: #2a3240;
    --c-d8ae62-border: #98711f;
    --c-d8b4fe-border: #462c5d;
    --c-d9848f-border: #974955;
    --c-da8c9b-bg: #c4566b;
    --c-dabc86-border: #4d390f;
    --c-dbe9e1-border: #2a332e;
    --c-dca64a-border: #996a04;
    --c-dceddf-bg: #2d5a47;
    --c-dcfce7-bg: #012f19;
    --c-ddd6fe-border: #342f48;
    --c-df8a99-border: #9d4e5e;
    --c-e0e7ff-bg: #161c36;
    --c-e1e5eb-bg: #3b4558;
    --c-e2e8f0-bg: #131923;
    --c-e2e8f0-border: #2d3035;
    --c-e3edff-bg: #172135;
    --c-e5e7eb-border: #2f3032;
    --c-e7acb4-border: #563036;
    --c-e7dce1-border: #373033;
    --c-e8c57e-border: #4a3501;
    --c-e9d5ff-border: #392c46;
    --c-e9f0ff-bg: #1c2434;
    --c-e9f6ee-bg: #1e242e;
    --c-ede5fd-bg: #231933;
    --c-ede9fe-bg: #231d34;
    --c-ede9fe-border: #2f2c39;
    --c-edf3fc-bg: #1b212c;
    --c-edf3ff-bg: #1e242f;
    --c-eef0f4-bg: #141a24;
    --c-eef2f8-bg: #181e28;
    --c-eef2ff-bg: #1e242f;
    --c-eff3fa-bg: #191f2a;
    --c-eff7f2-bg: #1b212b;
    --c-f0cbd3-border: #452e33;
    --c-f0f3f8-border: #2b2d30;
    --c-f0f7ff-bg: #1e242e;
    --c-f0fdf4-bg: #232934;
    --c-f1f4f9-bg: #181e28;
    --c-f1f4f9-border: #2a2c2f;
    --c-f2f5fb-bg: #1a1f2a;
    --c-f3e8ff-bg: #281b34;
    --c-f3e8ff-border: #322b39;
    --c-f3f4f6-bg: #151b25;
    --c-f3f6fc-bg: #1a202b;
    --c-f4f6fa-bg: #181e29;
    --c-f59e0b-border: #a46802;
    --c-f5dfb3-bg: #a67c2b;
    --c-f5f0ff-bg: #292333;
    --c-f5f3ff-bg: #1f252f;
    --c-f5f6f8-bg: #161c27;
    --c-f6f8fb-bg: #191f29;
    --c-f6f8fc-bg: #1a202a;
    --c-f6fbf8-bg: #1b212c;
    --c-f7fbf8-bg: #1b212c;
    --c-f8f9fb-bg: #191e29;
    --c-f8fafc-bg: #191f2a;
    --c-f9ecd1-bg: #2d2000;
    --c-f9fafc-bg: #191f2a;
    --c-faf5ff-bg: #1f2530;
    --c-faf7fc-bg: #1b212c;
    --c-faf8ff-bg: #1d232e;
    --c-fafafd-bg: #1a202b;
    --c-fafbfc-bg: #191f29;
    --c-fafbfd-bg: #1a202a;
    --c-fbf8ff-bg: #1e242e;
    --c-fbf9ff-bg: #1d232e;
    --c-fbfcff-bg: #1c212c;
    --c-fbfefc-bg: #1c222d;
    --c-fce1e6-bg: #30151c;
    --c-fcfaff-bg: #1d232d;
    --c-fcfdff-bg: #1b212c;
    --c-fde68a-border: #3a3002;
    --c-fdf2f8-bg: #1e242f;
    --c-fdfaff-bg: #1d232e;
    --c-fecaca-border: #4a2a2b;
    --c-fed7aa-border: #452d0c;
    --c-fee2e2-bg: #321517;
    --c-fef3c7-bg: #302701;
    --c-ffd4d9-bg: #b04a5c;
    --c-ffedd5-bg: #331f01;
    --c-fff0c9-bg: #332600;
    --c-fff4df-bg: #32260b;
    --c-fff8e9-bg: #312918;
    --c-fffaf0-bg: #212832;
  }
}
