/* public/tokens.css — decodED's one token file (Brief 26 Part 1).

   The Assembly design language (docs/design-notes/assembly.md), at the page root, loaded FIRST in
   public/index.html so every surface reads it: the landing, the vanilla report, the shell and the
   twin's cards. The twin's TypeScript reads these values off `document.documentElement` at load
   (src/twin/ui/tokens.ts) and keeps its own literals only as the fallback for Node and the tests.

   Light only: there is no dark mode (Brief 26 §2.5). Data colours never appear in chrome; brand
   colours never encode a value. Tokens are verified by resolved value, never by name.

   Legacy names (`--accent`, `--text-primary`, `--coral`, …) are re-pointed to these in style.css;
   nothing else in decodED may declare a name below. The values are the paid build's
   (decoded-partner-demo@4b332c1, src/index.css, tier 1) — this file is their one home here. */

:root {
  color-scheme: light;

  /* --- Assembly primitives ----------------------------------------------------------------- */
  --cream: #F5F4F1;      /* page ground */
  --surface: #FFFFFF;    /* panels, cards */
  --ink: #2A2A2A;        /* primary text */
  --ink-soft: #62625F;   /* secondary text */
  --ink-faint: #6F6F6B;  /* captions, disabled */
  --green: #235546;      /* acts: primary actions, the active state, the wordmark */
  --orange: #E28F2C;     /* selects: the selection, a signal */
  --on-orange: #FFFFFF;  /* words and icons on an orange ground: always white (Linzie, 3 Nov 2026) */
  --neutral: #CBCAC5;    /* other / no data */
  --emph: #B5322B;       /* the must-read: the answer line, the gap, a chart's picked year (Linzie, 4 Nov 2026, Brief 200) */

  /* --- the six data colours, in fixed order ------------------------------------------------- */
  --denim: #507CA4;
  --brick: #B65F59;
  --teal: #438A8B;
  --berry: #985F7F;
  --sky: #91AFCA;
  --rose: #D29A94;

  /* --- one magnitude ramp, cream → deep denim ----------------------------------------------- */
  --ramp-magnitude-0: #E7EFF3;
  --ramp-magnitude-1: #D9E2EC;
  --ramp-magnitude-2: #A9BFD5;
  --ramp-magnitude-3: #7A9CBE;
  --ramp-magnitude-4: #507CA4;
  --ramp-magnitude-5: #2F4E6E;

  /* --- one less-to-more scale, traffic lights: green → yellow → amber → red, red = most (Linzie, 4 Nov,
     Brief 193). Lightness falls towards red, so the two ends never read alike for colour-blind readers. --- */
  --ramp-less-more-0: #74B97E;
  --ramp-less-more-1: #C2D96E;
  --ramp-less-more-2: #F7D85E;
  --ramp-less-more-3: #EE9D45;
  --ramp-less-more-4: #B5322B;

  /* --- the sun scale, pale → deep yellow: best roofs for solar (Linzie, 4 Nov, Brief 193) --- */
  --ramp-sun-0: #FBF0C0;
  --ramp-sun-1: #F5D86E;
  --ramp-sun-2: #EBC042;
  --ramp-sun-3: #D9A21E;
  --ramp-sun-4: #B88309;

  /* --- one colour per fuel, everywhere (Hartpury's network palette; Linzie, 4 Nov, Brief 193).
     Solar is electricity, so it is the electricity yellow, drawn striped beside it. --- */
  --fuel-gas: #C4527A;
  --fuel-electricity: #E3B84B;
  --fuel-oil: #4A5460;
  /* LPG: its own burnt orange, deeper and redder than the edit orange #E28F2C and the traffic-light #EE9D45
     (Linzie, 5 Nov, Hartpury: LPG looked like oil). */
  --fuel-lpg: #B4531A;
  --fuel-water: #4B9FD6;
  --fuel-waste: #8C6A4E;

  /* --- one risk band ramp, low → very high; no data = neutral -------------------------------- */
  --risk-very-low: #6FA8A6;
  --risk-low: var(--teal);
  --risk-mod-low: var(--sky);
  --risk-moderate: var(--rose);
  --risk-high: var(--brick);
  --risk-very-high: var(--berry);
  --risk-no-data: var(--neutral);

  /* --- confidence ------------------------------------------------------------------------- */
  --conf-estimated: var(--neutral);
  --conf-public: var(--sky);
  --conf-entered: var(--teal);
  --conf-metered: var(--green);

  /* --- Brief 33: the story's card (docs/design-notes/free-flow/) --------------------------- */
  --tile: #EDE8DF;             /* the beige translation tile under a figure */
  --rail-todo: #DED9CF;        /* a rail segment the story has not reached */
  --story-rule: #E3DED4;       /* the hairline between a light card's rows */
  --story-dark-body: #CFE0D6;  /* body text on a dark (green) card */
  --story-dark-tile: #2D634F;  /* a row or tile on a dark card */
  --story-dark-deep: #1A4034;  /* the tally box on a dark card */

  /* --- Brief 35: the flood beat's three zones (an agreed exception to the chart colour rule) --- */
  /* Brief 52 P5 (§4.5, Brief 51 adopted 26 Oct): the new flood blues, one blue family, no purple. */
  --flood-3: #4A90D0;          /* Flood Zone 3, the deeper blue: the highest likelihood */
  --flood-2: #A6C8EA;          /* Flood Zone 2, the pale blue */
  --flood-1: var(--teal);      /* Flood Zone 1, the wash over everywhere else */
  /* Brief 113: the EA chance maps' three blues as the map's tiles draw them (data/surface-water-config.json colours) */
  --flood-high: #17467A;
  --flood-medium: #3F86C8;
  --flood-low: #A6D0F2;
  /* Brief 248 P3: Cold's ice (src/twin/ui/tokens.ts ui.color.cold). */
  --cold-ice: #9CCBEA;
  --cold-shade: #3F6F9E;
  --cold-cycle: #5E97C6;
  --cold-road: #2F5A86;
  --cold-soft: #EEF2F0;

  /* --- Brief 36: the overheating beat's three periods — the roofs and the graph share them (an agreed exception) --- */
  --heat-now: #F2CC5A;         /* hot days a year now (2021–2040): a pale warm yellow */
  --heat-2050: #E8842E;        /* by the 2050s: orange */
  --heat-2070: #B83A1F;        /* by the 2070s: deep red */

  /* --- Brief 50: the landing's two grounds, the twin's ground, the buildings' ink ------------- */
  --forest: #102E2A;           /* the forest landing's ground and its left fade */
  --forest-land: #17382F;      /* the forest landing's land: a step above the ground */
  --forest-sea: #0A1D21;       /* the forest landing's sea: a step below it, cool (Chris: "that coolness") */
  --forest-coast: #2E5A50;     /* the coastline and rivers on the forest map */
  --forest-line: #C8DCD5;      /* the line under the headline on forest */
  --mint: #A9E4CA;             /* the school dots on forest */
  --twin-ground: #F3F7F7;      /* the twin's ground (B7), and the light landing's */
  --substation-secondary: var(--denim); /* Brief 59: a secondary substation on the map */
  --substation-primary: var(--berry);   /* Brief 59: a primary substation on the map */
  --hard-standing: #CDD1D0;    /* inside the site boundary, under the grass: what is not grass or building (Chris, 25 Oct: a step darker than #DDE1E0, to stand off the grass) */
  --mist: #D3E3E8;             /* the light landing's sea: a cool mist, not a pastel green (Chris, 25 Oct) */
  --ink-silhouette: #646A68;   /* a building's outline (B1, about 1.75 px) */
  --ink-crease: #939994;       /* a building's crease (B1, about 0.85 px) */

  /* --- shape ------------------------------------------------------------------------------ */
  --radius-panel: 12px;
  --radius-control: 8px;
  --radius-pill: 999px;

  /* --- motion ----------------------------------------------------------------------------- */
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-gentle: cubic-bezier(0.4, 0, 0.6, 1);
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --duration-instant: 150ms;   /* hover */
  --duration-panel: 180ms;     /* a panel or a card */
  --duration-camera: 600ms;    /* the twin's camera — its own; no Assembly name */

  /* --- the shell's frame -------------------------------------------------------------------- */
  --rail-width: 72px;          /* the module rail (Brief 26 §2.7: its one definition) */
  --card-inset: 16px;          /* the gap between the frame and a floating card */
}
