:root{
  /* ============================================================
     THE SUNSET PALETTE — the real brand colours.
     Sampled from the artwork itself (assets/heritage/ILLUSTRATION-SNOWBUS.png
     and SNOWBUS-BRAND-SHEET-23-elements.png) by pixel frequency, not eyeballed.
     Quantised to an 8-step grid; treat the last digit as ±4.

     This replaces the earlier "one signal orange on near-black" reading, which
     came from the identity manual — a corporate artifact — rather than from
     twenty years of actual brand work. The brand is NOT monochrome-plus-accent.
     It is a warm sunset: orange sky, pink cloud, white snow, black ink.
     ============================================================ */
  --sun-orange:#E05000;          /* the sky. 104k px in the panorama — the single most brand colour there is */
  --sun-coral:#F88050;           /* illustrated wordmark fill, warm mid */
  --sun-pink:#E06078;            /* cloud, chalet, city tower */
  --sun-pink-pale:#F8C8C8;       /* snow-shadow, high cloud */
  --sun-ink:#181818;             /* line work, silhouette, ground */
  --sun-snow:#FFFFFF;            /* snow, reversed type */

  /* Line-work greys, from the illustration's own hatching and stipple. */
  --grey-700:#707070;
  --grey-500:#808080;
  --grey-300:#B0B0B0;
  --grey-200:#C8C8C8;
  --grey-100:#E0E0E0;

  /* --- Brand primitives kept for print + the mark ---
     The identity manual's orange has a CMYK build and the mark is drawn in it,
     so it stays specified. On screen the sunset orange governs. */
  --wsb-orange:#F15A22;          /* manual: RGB 241·90·34 · CMYK 0·80·100·0 */
  --wsb-orange-mark:#F0540F;     /* sampled off the shield master itself */
  --wsb-orange-ink:#C94E12;      /* pressed / print-safe darker */
  --wsb-orange-deep:#9E3519;
  --wsb-orange-mid:#EF7D59;
  --wsb-orange-pale:#F7C1B0;
  --wsb-orange-wash:#F9D8CF;
  --wsb-black:#000000;           /* logo + one-colour print only: CMYK 100·100·100·100 */
  --wsb-white:#FFFFFF;
  --wsb-pattern:#F0540F;

  /* Ink ramp. Black IS the ground on this brand — the collateral is stacked
     black panels, not a pale page with dark text. */
  --ink-900:#181818;
  --ink-800:#202020;
  --ink-700:#3A3A3A;
  --ink-600:#444444;
  --ink-500:#6B6B6B;
  --ink-400:#7A7A7A;
  --ink-300:#8D8781;
  --ink-200:#B9B3AC;
  --ink-100:#CFCAC4;

  /* Snow neutrals. */
  --paper-000:#FFFFFF;
  --paper-050:#FAF7F3;
  --paper-100:#F0EBE4;
  --paper-200:#E2DCD3;
  --paper-300:#D6CFC4;

  /* --- THE 2018 FAMILY MATRIX (brand-sheet item 10) ---
     Six pairs, each pairing one constant dark with one accent. The
     one-constant-plus-one-accent structure is the family-palette pattern,
     drawn in 2018. */
  --family-constant:#201C20;
  --family-orange:#F49020;
  --family-red-orange:#EC5420;
  --family-cyan:#08B0D8;
  --family-navy:#002C6C;
  --family-grey:#C8C8C8;
  --family-yellow:#FCEC20;

  /* Manual's complementary / analogue set. Data and status only. */
  --amber-500:#E2900E;
  --amber-300:#E5A74E;
  --amber-100:#F7DCB5;
  --green-500:#0CBA7B;
  --green-300:#21F4A3;
  --green-100:#BDF9E3;
  --magenta-500:#EF0761;
  --magenta-300:#FC3D8B;
  --magenta-100:#FFC0DA;
  --blue-500:#2547A5;
  --blue-300:#527EE2;
  --blue-100:#A5BDF2;
  --lime-500:#63DB1D;
  --steel-500:#71ABB8;

  /* --- WAYFINDING PALETTE ---
     A transit brand has information jobs a corporate identity does not: two
     authorised routes, five pickup cities, a season, departure bands. */
  --route-sea-to-sky:var(--family-cyan);
  --route-airport:var(--family-navy);
  --zone-vancouver:var(--family-cyan);
  --zone-north-shore:var(--family-navy);
  --zone-burnaby:var(--family-yellow);
  --zone-richmond:var(--family-red-orange);
  --schedule-am:var(--steel-500);      /* the rack card tints AM/PM cells steel */
  --schedule-pm:var(--family-navy);
  --season-open:var(--green-500);
  --season-closed:var(--ink-400);

  /* --- Semantic aliases. Compose with these, not the primitives. --- */
  --accent:var(--sun-orange);
  --accent-hover:var(--wsb-orange-ink);
  --accent-quiet:var(--wsb-orange-wash);
  --accent-ring:rgb(224 80 0 / .18);

  /* Illustration layer — legitimate, and a primary layer of this brand. */
  --illus-sky:var(--sun-orange);
  --illus-cloud:var(--sun-pink);
  --illus-cloud-high:var(--sun-pink-pale);
  --illus-warm:var(--sun-coral);
  --illus-line:var(--sun-ink);
  --illus-snow:var(--sun-snow);

  --surface-page:var(--paper-050);
  --surface-card:var(--paper-000);
  --surface-sunken:var(--paper-100);
  --surface-inverse:var(--ink-900);
  --surface-accent:var(--sun-orange);
  --surface-sky:var(--sun-orange);       /* full-bleed sunset band */
  --surface-pink:var(--sun-pink);

  --text-heading:var(--ink-900);
  --text-body:var(--ink-800);
  --text-muted:var(--ink-500);
  --text-faint:var(--ink-300);
  --text-on-inverse:var(--wsb-white);
  --text-on-inverse-muted:var(--ink-100);
  --text-on-inverse-faint:var(--ink-300);
  --text-on-accent:var(--wsb-white);     /* large text only — see readme on-orange rule */
  /* Pure black, not the ink ramp: #181818 on #E05000 lands at exactly 4.5:1,
     which meets AA with zero margin — one nudge to the orange would break it.
     #000000 gives ~4.9:1 and is already a brand value (the manual's logo black). */
  --text-on-accent-small:var(--wsb-black);
  --text-accent:var(--sun-orange);        /* large display type, and on the dark ground */

  /* ACCENT AS INK — ground-aware, because one value cannot serve both.
     The sampled sunset orange is a fill colour: as small text it is 3.95:1 on
     white and 3.33:1 on --paper-100, so every eyebrow and source note on a
     light ground fails AA. Measured alternatives:
       #E05000  3.95 / 3.70 / 3.33   fails everywhere
       #C94E12  4.58 / 4.29 / 3.86   borderline; fails on --paper-100
       #9E3519  7.05 / 6.60 / 5.95   clears AA on all three light grounds
     --accent-ink defaults to the light-ground value; any dark-ground container
     overrides it, exactly as it overrides --heading-color. */
  --text-accent-on-light:var(--wsb-orange-deep);   /* #9E3519 */
  --text-accent-on-dark:var(--sun-coral);          /* #F88050 — 6.93:1 on #181818 */
  --accent-ink:var(--text-accent-on-light);

  --border-hairline:var(--paper-200);
  --border-strong:var(--ink-900);
  --border-on-inverse:rgb(255 255 255 / .13);
  --border-accent:var(--sun-orange);

  --link:var(--sun-orange);
  --link-hover:var(--wsb-orange-ink);
  --link-on-inverse:var(--ink-100);

  --status-ok:var(--green-500);
  --status-pending:var(--amber-500);
  --status-open:var(--sun-orange);
  --status-closed:var(--ink-500);
}
