/* =====================================================================
   LONGITUDE HEALTH — TOKEN LAYER
   =====================================================================

   THIS IS THE ONLY FILE IN THE BUILD THAT CONTAINS A COLOUR VALUE.
   No other stylesheet, no inline style, no SVG attribute and no script
   may carry a hex triple, an rgb() or an rgba(). Everything else refers
   to a token here. A palette pass is an edit to LAYER 1 of this file and
   nothing else.

   WHY THAT RULE IS ABSOLUTE, MEASURED ON THE SOURCE CONCEPT:
   concept-10-common-ground.html carried 12 tokens and 28 DISTINCT COLOUR
   VALUES THAT WERE NOT TOKENS. The largest was the body-text colour,
   appearing in six rules with no comment anywhere. A palette pass that
   edited :root would have moved 12 values and left 28 behind, and every
   check that reads a token would have reported success.

   VERIFICATION IS A RENDERED READ, NEVER A TOKEN READ. The check that
   this file actually governs the page is: perturb a token, count the
   elements whose computed colour moved AND the canvas pixels that moved.
   A token that reads back correctly while nothing on screen moved is the
   failure this layer exists to prevent.

   THREE LAYERS, AND THE ORDER MATTERS:
     LAYER 1  RAW PALETTE   — the brand values. Hex lives here and nowhere
                              else. This is what a palette pass edits.
     LAYER 2  ROLE PAIRS    — ground/on pairs. No new values, only names
                              for jobs. This is what components consume.
     LAYER 3  DERIVED       — alpha and state variants, expressed as
                              color-mix() of a LAYER 1 token so they follow
                              their parent instead of freezing a triple.

   COMPONENTS SHOULD CONSUME LAYER 2, NOT LAYER 1. Reaching past a role
   pair to the raw value is how the two got welded together in the first
   place.
   ===================================================================== */

/* =====================================================================
   TOKEN-LEVEL DEVIATION REGISTER
   Prefix TOK-, opened 2026-08-17 at C1 and numbered from 1. THE FIRST
   REGISTER ON THE TOKEN LAYER. Every other register in this build is
   PAGE-LOCAL — HOME-, OA-, OO-, ABT-/TEAM-, UTIL-, NAV-, WL- — and a change
   here reaches every page that renders the value, so it belongs where the
   value is defined rather than in any one page's log. New entries are TOK-n
   and are never renumbered.

   TOK-1 · --accent MOVES #696FE8 -> #2B61C9. CLIENT-DIRECTED via Eileen,
   relayed 2026-08-15, specified exactly and ruled 2026-08-17. `--mark` moves
   with it. `--pill` is RETIRED. **`--focus` DELIBERATELY DOES NOT MOVE.**

   THIS SUPERSEDES THE DEFERRED #4E65DC CHANGE, AND THE DEFERRAL IS CLOSED BY
   A CLIENT DECISION — NOT BY THE CONTRAST ARGUMENT BEING RESOLVED. Every
   sheet carrying a "#4E65DC / 2.6959" warning was warning about a value that
   is now never going to ship. Those warnings are historical; the argument
   they made was never settled, it was overtaken.

   ── THE VALUE FORMERLY DESCRIBED AS VIOLET IS NOW BLUE.

   #2B61C9 is a blue. Register prose across this tree — including entries this
   entry supersedes — calls `--accent` "violet". **That prose was NOT swept and
   rewritten in this unit, deliberately.** A reader meeting "violet" in an
   older entry is reading a HISTORICAL DESCRIPTION of the value at that date,
   not a live claim about what renders today. Sweeping it would have touched
   six sheets to restate something this entry states once.

   ── THE CENSUS. 55 RENDERED INSTANCES ACROSS 19 OF 20 PAGES.

   Measured by walking every element on all 20 built pages over localhost,
   testing color, backgroundColor, four border colours, outlineColor,
   textDecorationColor, fill and stroke, plus ::before/::after, resolving the
   effective ground by ancestor walk. Sweep controlled both ways first: a
   known-present value returned 128 elements, a known-absent value returned 0.

   TWO PROBE ARTEFACTS WERE REMOVED AND BOTH WOULD HAVE INFLATED THE COUNT.
   `textDecorationColor` mirrors `currentColor` even where `text-decoration-
   line` is `none`, doubling every text row — it is not a second instance. And
   elements whose OWN background is the accent resolved against themselves,
   returning 1.0000; `.beacon-badge` had to be re-resolved against its parent.
   `div.jf-success` was excluded as display:none, 0x0, on all 20 pages.

     ON LIGHT GROUNDS   34   every one improves; all pass before AND after
       on --paper   3.9310 -> 5.4187
       on --cream   3.6759 -> 5.0671
     **Every light instance now clears SMALL 4.5, not merely LARGE 3.0** — so
     the whole light set stops depending on its size classification.

     ON DARK GROUNDS    21   all 3.5594 -> 2.5821, all failing 3.0
       2 TEXT        a.cta-line on index #film and why-longitude #pivot
       19 DECORATIVE .beacon-badge x6, circle.bd x12, g x1 — ALL aria-hidden

     **Re-counted on the built DOM after the swap: `circle.bd` = 12 and
     `.beacon-badge` = 6 across all 20 pages, and a sweep of EVERY `a.cta-line`
     site-wide returns 9, of which exactly the 2 above fail.** The counts are
     confirmed against the rendered site, not carried from Half A.

   ── "SEVEN LARGE-TEXT INSTANCES" DOES NOT REPRODUCE. IT IS TWO.

   The record held that the deferred change dropped SEVEN large-text instances
   below 3.0, and that a darker value made seven a floor. **Measured: two.**
   The other five were deleted by the rework and our-approach.css records it —
   `.cta-line` on index's #problem (R1), the same on why-longitude's #ecosystem
   (R6), and `.u-domain` x4 on utilities' `.u-domains` (R7). **The "floor" was
   inherited from a roster that no longer exists.** Count the instances, do not
   carry the count.

   ── THE TWO TEXT REGRESSIONS ARE RULED FOR RE-GROUNDING, NOT ACCEPTED.

   `a.cta-line` at 19px/700 on `--plum`, on index #film and why-longitude
   #pivot. Candidates measured on plum, no new token invented:

     --gold        8.2161  PASS     --stone         7.0533  PASS
     --ink-on-dark 8.6943  PASS     --cream         13.0839 PASS
     --slate       3.0421  PASS     --pill-hover    2.8600  FAIL
     --accent NEW  2.5821  FAIL

   **--gold at 8.2161 is the answer and it is not a workaround.** Gold is
   ALREADY this palette's dark-ground accent: `h2.tlw-h2` on our-approach is
   gold on plum at exactly 8.2161, and the beacon badges sit beside it. The
   light-ground CTAs stay `--accent`; the dark-ground CTAs take the colour the
   dark grounds already use. `--ink-on-dark` and `--cream` clear easily but are
   the BODY-TEXT colours on dark — a CTA in body colour stops reading as a
   link. `--slate` clears by 0.0421 and is not a margin worth shipping.

   **⚠ THE RE-GROUNDING IS NOT IN THIS UNIT'S EDIT, AND THAT IS A CONFLICT
   THIS ENTRY RECORDS RATHER THAN RESOLVES.** The ruling asked for the two CTAs
   to be re-grounded; the same dispatch fixed the manifest at MOVED 2 —
   tokens.css and its dist twin. Re-grounding touches `pages/home.css` and
   `pages/why-longitude.css`, which would make it MOVED 6. **Shipped: the token
   change only. The two CTAs render at 2.5821 until the re-grounding lands, and
   that is a KNOWN OPEN FAILURE, not an oversight.** It is one declaration in
   each of two sheets.

   ── THE 19 DECORATIVE INSTANCES ARE ACCEPTED, WITH THE REASONING.

   `.beacon-badge` x6, `circle.bd` x12 and one `g` — ambient dot fields and
   badge discs. **Every one carries aria-hidden="true"**, inherited from its
   container. SC 1.4.11 applies to non-text content REQUIRED TO UNDERSTAND the
   interface; the meaning in each case is carried by the adjacent text — the
   badge letters duplicate their titles' first letters, and the dot fields are
   ambient. **They bind no threshold. This is a judgement recorded as one, not
   a measurement** — the figures are real and the conclusion is a reading of
   what the criterion covers.

   ── ⚠ FOUR TOKENS CARRIED #696FE8. THEY ARE NOW THREE DIFFERENT THINGS.

     --accent  #2B61C9   19 refs,  8 files   MOVED
     --mark    #2B61C9    1 ref              MOVED with it (.dots .sd-m fill)
     --pill    RETIRED    0 refs             see below
     --focus   #696FE8   11 refs,  7 files   **DELIBERATELY UNMOVED**

   **THESE ARE `var()` REFERENCES IN CODE, NOT RENDERED INSTANCES. Different
   noun — 19 references produce the 55 rendered instances above.** The counts
   were first taken as 20 / 12 / 7 and every one was ONE TOO HIGH: raw grep
   matched `var(--accent)` at why-longitude.css:659, `var(--focus)` at
   news.css:421, `var(--pill-hover)` at utilities.css:285 and two more inside
   this file's own header — **all of them prose describing the token, not a
   use of it.** §25, on a unit whose whole subject is a token. Re-derived with
   comment spans stripped. The 55-instance census is unaffected: it was read
   from computed styles in the DOM, where a comment cannot appear.

   They were never derivations — four independent literals that happened to
   share a value, so moving one silently split them. **Nothing warns you.**

   **WHY --focus STAYS, AND THIS IS A DECISION, NOT AN OVERSIGHT.** All twelve
   uses are `outline:3px solid var(--focus)` on `:focus-visible`, across
   header, join-form, accordion, news, why-longitude, our-team and utilities.
   On dark grounds the new value measures **2.5821 against the old 3.5594**. A
   focus indicator is a UI affordance under its own success criterion, not
   brand colour. **Splitting the palette is an aesthetic cost; degrading focus
   visibility is an accessibility regression.** The site now carries two
   related blues by ruling. Anyone "tidying" `--focus` to match `--accent`
   would be trading a visible inconsistency for an invisible barrier.

   **--pill IS RETIRED BECAUSE IT HAD 0 USES, not because it looked unused.**
   Measured across src/css and src/js: `var(--pill)` returns zero. `--pill-hover`
   (#585EDC) is a SEPARATE literal, still live at 7 uses, and is untouched.

   ── ONE GENUINE DERIVATION. IT MOVED, AND IT RENDERS NOWHERE.

   `--photo-glow-accent: color-mix(in srgb, var(--accent) 30%, transparent)` is
   the ONLY token in this file that references `--accent`. It moved with it and
   nothing announced that — the browser now computes it as
   `color-mix(in srgb, #2B61C9 30%, transparent)`.

   **But it has ZERO RENDERED INSTANCES.** Its single use is the `.photo`
   radial-gradient at `components/bands.css:39`, and **`class="…photo…"` appears
   on NO page, built or source.** Controlled before the claim: the same grep
   returns 4 files for `class="band`. `--photo-glow-gold` sits in the same
   declaration and is equally dead. **The one derivation that could have moved
   invisibly moved invisibly and changed nothing, because the band it paints is
   not on the site.** Not deleted here — dead-code removal is R8's business.

   ── TWO STANDING FORECLOSURES ARE REVERSED. ⚠ BY ARITHMETIC, NOT BY MEASUREMENT.

   **9h/9x recorded that NO VIOLET FILL CLEARS 3.0 ON GOLD, and that `--accent`
   was unavailable for `.btn` because white-on-accent failed 4.5 by 0.3331.**
   Both figures move the right way:

     fill on gold    2.3083 -> 3.1819   now clears 3.0
     white label     4.1669 -> 5.7440   now clears 4.5

   **⚠ THESE ARE COMPUTED FROM TOKEN VALUES. THERE IS NO SUCH BUTTON ON THE
   SITE TO MEASURE.** `buttons.css` contains zero gold references, and the only
   three elements rendering a `--gold` background are `.wl-cx-dot` spans on
   why-longitude, which contain no button. **A `.btn` on a gold ground has no
   rendered instance anywhere.** §60 — the figures above are a PREDICTION about
   a component that does not exist yet, and the first draft of this entry
   labelled them a measurement. If such a button is ever built, measure it then;
   do not ship on these numbers.

   **The `--ink` border 9x added to carry the 3:1 boundary is no longer
   load-bearing by that arithmetic — but REMOVING IT IS A SEPARATE DECISION, NOT
   A CONSEQUENCE OF THIS ONE, and it was not removed.** 9h and 9x are not wrong;
   they described a value that no longer ships.

   **WL-25's clamp-floor note and OA-5's warning about `.vm-label` become
   HISTORICAL rather than binding.** That label goes **3.6759 -> 5.0671** and
   now clears SMALL 4.5, so its legality no longer depends on the 21px/700
   floor. The floor remains a typographic decision and should not be lowered
   casually — but lowering it below 18.66 no longer creates an SC failure.
   Marked superseded per the OA-4 / OA-5 / 9ag precedent: the figures stay as
   written, and this entry carries the current ones.

   ── R8 LOSES FIVE INHERITED ITEMS.

   The five pre-existing `--accent` failures on utilities.html — `.acc-cx-dot`
   and `.acc-cx-seg` — are CLOSED. **Measured on their REAL ground, `--cream`,
   not the plum the record implies: 3.6759 -> 5.0671, passing both 3.0 and
   4.5.** R8 inherits them no longer.

   ── R4 IS UNCHANGED AND UNTOUCHED, AND THIS UNIT DID NOT RESOLVE IT.

   The `h1 em` on why-longitude goes **3.9310 -> 5.4187** and now passes by a
   wide margin — but its accessibility half was ALREADY moot, and that was
   never what R4 was about. **The client asked for GOLD, which measures 1.7030
   on paper and fails even 3.0.** R4 stands exactly where it stood: the accent
   is legible and the client wants gold. **No future reader should read this
   unit as having closed it.**

   TOK-2 · THE PILL FILL MOVES TO #2B61C9. `--pill` IS REVIVED AND
   `--pill-hover` MOVES WITH IT. DIRECTOR-RULED, C4, 2026-08-17.

   Second tokens.css authorisation; C1 was the first.

     --pill        REVIVED at #2B61C9   .btn RESTING fill
     --pill-hover  #585EDC -> #2B61C9   .btn:hover ONLY (+ 3 non-pill uses)
     buttons.css:39 resting background repointed var(--pill-hover) -> var(--pill)
     buttons.css:52 hover LEFT on var(--pill-hover), deliberately

   **BOTH TOKENS HOLD ONE VALUE TODAY AND REMAIN SEPARATELY GOVERNED.** That
   is the whole point of the shape: `buttons.css` argues that `--pill` must
   not be folded into `--accent`, "one of those two jobs would otherwise be
   decided for it by a token serving a different purpose". Pointing `.btn` at
   `--accent` would have folded it. This does not — a future change to the
   resting fill or the hover fill no longer decides the other.

   ── ⚠ THE PILLS WERE NEVER `--accent`, SO C1 DID NOT MISS THEM.

   The director reported the pills still reading violet after C1. **They had
   nothing to move.** C1's census swept for `rgb(105,111,232)`; the pills are
   `rgb(88,94,220)` — `--pill-hover`, a separate literal C1 explicitly
   recorded as unaffected. `--accent` moved to hue 219.5 (blue) while the
   pills stayed at hue 237.3 (violet), and that divergence is what was
   visible on screen. **A census is only as complete as the value it sweeps
   for; sweeping one literal exhaustively says nothing about a second.**

   ── THE 84-INSTANCE CENSUS OF #585EDC. REGRESSING INSTANCES: 0.

   All 20 pages, computed styles, nine properties plus ::before/::after,
   ground resolved by ancestor walk with alpha compositing. Controls: a
   known-present value returned 14,142 property hits, a known-absent value 0.

     SPAN.hub-title              color  x46   hub only
     A.btn                       bg     x26   all 20 pages
     A.na-back                   color  x11   11 news pages
     SECTION.band-slate u-quote  bg     x1    utilities

     on --cream   4.5747 -> 5.0671        on --paper   4.8922 -> 5.4187
     white label on fill  5.1858 -> 5.7440   (thr 4.5, PASS -> PASS)

   **Every one of the 84 improves or holds. Zero regressions.** The fill
   fails on `--plum` at BOTH values (2.8600 -> 2.5821), which is why the
   standing foreclosure against `.btn` on `.band-plum` still binds — nothing
   here relaxes it, and no pill currently sits there.

   **THREE MEASUREMENT ARTEFACTS WERE REMOVED, TWO OF THEM REPEATS FROM C1.**
   The first sweep returned **369**, not 84. `outlineColor` reports a value
   where `outline-style:none` (57 dropped); `::before`/`::after` re-report the
   inherited `color`, tripling every text row (456 boxless pseudo-elements
   dropped). Both were already known from C1 and were not carried forward.
   The third was new: the header's translucent ground computes as
   `color(srgb 0.984314 ...)`, whose components are **0-1 floats, not 0-255** —
   read raw they resolve to near-black and produced a plausible-looking but
   wrong 4.0257. **Composited correctly the header ground is
   `rgb(251,248,242)`, identical to the in-page one.** A ratio that looks
   reasonable is not evidence the colour was parsed.

   ── WHY `--pill-hover` MOVES TOO, THOUGH IT IS NOT A PILL FIX.

   It has three consumers that are not pills and not hover states:
   `news.css:103` and `:397` (text colour), `utilities.css:1095`
   (`.band-slate.u-quote` fill), and a decorative wash at
   `stat-arc.css:728`. **Left at #585EDC the site would ship blue accents
   beside violet news text.** The client's direction is purple-to-blue
   site-wide, so the token moves with the rest. Measured: news text
   4.8922 -> 5.4187 (thr 4.5, PASS); the quote band's white label
   5.1858 -> 5.7440 (thr 4.5, PASS).

   ── THE 2026-08-07 HISTORY, BECAUSE IT EXPLAINS THE WHOLE SHAPE.

   The white label measured **4.1669 on `--pill` against 4.5**. Every
   foreground alternative was tested and every one was worse (`--on-fill`
   3.8925, `--ink` 3.5594), so the fix had to come from the background side.

   **THE FIRST PASS SWAPPED THE TWO TOKENS AND MERELY RELOCATED THE FAILURE.**
   Resting took `--pill-hover`, hover took `--pill` — which fixed resting and
   moved the 4.1669 failure onto hover. SC 1.4.3 applies to text in EVERY
   state, so nothing was removed. **And a resting-state contrast sweep could
   not see it, because the sweep never hovers.** Both states then took
   `--pill-hover`, which is why `--pill` reached zero consumers.

   **C4 CLOSES THAT RELOCATION.** Resting takes `--pill` again and hover keeps
   `--pill-hover`, but both tokens now hold #2B61C9, so **there is no longer a
   worse value for the failure to be moved to.** The 4.1669 figure belonged to
   #696FE8 and describes a value neither token carries.

   ── `--pill`'s RETIREMENT IS SUPERSEDED BY A DECISION, NOT CORRECTED.

   **C1 retired it on correct facts** — 0 code refs, browser computing empty,
   verified by live perturbation — and it stayed correct for three
   checkpoints. C1's entry is MARKED, not rewritten: a reader has to be able
   to see the token was genuinely dead, or the revival reads as the reversal
   of a mistake instead of a ruling. The pre-C1 block reserving its
   disposition for a PALETTE-SESSION decision is likewise marked: **that
   condition was MET by a director ruling, not overridden.**

   ── THE NAMING PROBLEM: RECORDED, NOT FIXED.

   `--pill-hover` paints three non-pill, non-hover elements. Its name is now
   accurate for `.btn` and wrong for everything else it touches. **Same class
   of drift as the violet/blue naming note in TOK-1, and handled the same
   way — stated once here, not swept.** A rename is a separate unit. Read the
   `.btn` rules for which state a token governs; never read the name.

   ── ⚠ `--focus` STAYS #696FE8 AND IS NOW THE ONLY VIOLET IN THE TREE.

   Held by C1's ruling. `.btn` matches
   `a:focus-visible{outline:3px solid var(--focus)}`, so **the pill's focus
   ring is deliberately a different hue from the pill.** An outline draws
   OUTSIDE the border box, so its binding partner is the page ground:
   **3.9310 on `--paper`, PASS at 3.0.** Against the fill — inner edge only —
   it goes **1.2445 -> 1.3785, a slight improvement**, because the fill is no
   longer a second hue-237 violet. **The hazard block above `--focus` stays.**
   After C4, #696FE8 appears exactly once in the whole tree.
   ===================================================================== */

:root{

  /* ---------------------------------------------------------------
     LAYER 1 — RAW PALETTE

     PALETTE CANON IS CLIENT-APPROVED AS OF 2026-08-07. The values below
     are not placeholders and are not expected to move. This supersedes
     the note that stood here, which was written before the confirmation
     landed and described the palette as unconfirmed.

     NO NEW COLOUR VALUE MAY BE INVENTED, DERIVED, TINTED OR INTERPOLATED.
     That covers the obvious case and the quiet ones equally: a lightened
     hover state, a "just slightly darker" rule, a mix of two approved
     values, a value picked to satisfy a contrast target. Approved means
     these values, not this neighbourhood. If a job on the page has no
     token that serves it, THAT IS THE FINDING — report it and stop; it
     is a decision for whoever owns the palette, not a gap to fill in
     passing.

     THE THREE-LAYER STRUCTURE STANDS ON ITS OWN MERITS, NOT ON AN
     EXPECTATION OF CHANGE. Its justification was never that the values
     were provisional. It is that one file holding every colour is what
     makes "no literals outside this file" checkable at all, that role
     pairs stop a ground and a mark being welded to one name, and that
     LAYER 3 expressing alpha as color-mix() of a LAYER 1 token keeps
     derived values FOLLOWING their parent instead of freezing a triple
     that then drifts silently. Confirmation of the palette removes none
     of that. DO NOT COLLAPSE THE LAYERS ON THE GROUNDS THAT THE VALUES
     ARE NOW SETTLED.
     --------------------------------------------------------------- */

  /* grounds and inks */
  --paper:#FBF8F2;
  --cream:#F6F0E6;
  --ink:#292631;

  /* --plum HOLDS --ink's VALUE UNDER A SECOND NAME AND IS NOT REDUNDANT.
     --ink is a foreground that also fills controls; --plum is the problem
     band's ground and nothing else. They are equal at rest and want
     different things the moment either moves. DO NOT COLLAPSE THEM. */
  --plum:#292631;

  --slate:#5E7484;
  --stone:#B8B2AA;
  --white:#FFFFFF;

  /* the muted ink family — ALL FOUR WERE BARE LITERALS IN THE CONCEPT.

     THE AA ITEM THIS BLOCK RECORDED IS CLOSED, AND IT CLOSED BY DELETION
     RATHER THAN BY A COLOUR DECISION. The note here described --ink-muted
     as the colour behind 10 of 16 inherited AA failures, naming two: a
     ruled-label element on cream at 3.1144, and the footer's small print
     on paper at 3.3306, both against 4.5. Neither still exists to be
     measured. The ruled labels and their rules were cut from the home
     page (2026-08-07, client change list); the footer was re-grounded the
     same day and now takes the --on-dark family. That was the last
     outstanding SC 1.4.3 failure on the site. NO VALUE HERE MOVED, AND
     NONE NEEDED TO — do not read this as a palette decision having been
     taken.

     MEASURED 2026-08-07 BY CSSOM, BOTH BUILT PAGES. Counts are var() rule
     references, not computed-colour matches: two tokens can resolve to
     the same value, so a colour match would merge them.
       --ink-body    -> --on-page-body    7 refs (index) / 8 (utilities)
       --ink-muted   -> --on-page-muted   0 refs on EITHER page
       --ink-soft    -> --on-page-soft    2 refs on both
       --ink-on-dark -> --on-dark-body    2 refs on both
     Consumer counts are PER PAGE and the old ones here were not; three of
     the four were stale.

     --ink-muted THEREFORE HAS NO LIVE CONSUMER. It feeds --on-page-muted,
     which nothing references. It is deliberately NOT deleted: whether the
     palette keeps, retires or reassigns a token is a palette-session
     decision, and an unreferenced token costs nothing. Same standing
     reasoning as --pill and --portrait-ring, which are also orphaned.

     A NOTE ON CHECKING THIS. The selector that was deleted is named above
     in prose, so a source-level grep for it MATCHES THIS COMMENT and will
     report it as present. The instrument that answers the question is
     document.querySelectorAll on the built page — the DOM carries no
     comments. It returned 0 on both pages. */
  --ink-body:#4E4A5A;      /* body copy on light */
  --ink-muted:#8B8696;     /* NO LIVE CONSUMER — see the note above */
  --ink-soft:#6E6A78;      /* lockup HEALTH + utility body */
  --ink-on-dark:#C9C4D2;   /* body copy on the plum band, and the footer */

  /* golds */
  --gold:#F0B83F;
  --gold-d:#B8860B;        /* NO LIVE CONSUMER. Retained deliberately: its
                              only selector (.confirm) matched zero elements
                              in the concept. Kept so a palette pass has a
                              slot for it rather than reinventing a value. */

  /* THE ACCENT FAMILY — FOUR TOKENS, ONE VALUE TODAY, FOUR JOBS.
     Split before this build and MUST NOT BE RECOMBINED on the grounds
     that they currently agree. Equal-at-rest is not redundant: a mark on
     a ground, a fill carrying its own label, an indicator crossing two
     grounds, and decorative geometry want different things the moment any
     value moves. */
  --accent:#2B61C9;        /* type accent: .cta-line, h1/h2 em, nav hover */
  /* NEITHER OF THESE TWO NAMES DESCRIBES ITS USE. Superseded at C4,
     2026-08-17: the 2026-08-07 state described here — ".btn takes
     --pill-hover in BOTH states and --pill is referenced by nothing" — no
     longer holds. **.btn resting now takes --pill; .btn:hover still takes
     --pill-hover.** Both tokens hold #2B61C9 today and are SEPARATELY
     GOVERNED, so hover remains a colour no-op while the declarations name
     their roles correctly, which they did not before.

     THE NAMING PROBLEM IS RECORDED, NOT FIXED. --pill-hover still paints
     three NON-PILL, NON-HOVER things: news.css:103 and :397 (text colour)
     and utilities.css:1095 (.band-slate.u-quote fill), plus a decorative
     wash at stat-arc.css:728. Same class of drift as the violet/blue
     naming note in TOK-1. A rename is a separate unit. Read the .btn
     rules in components/buttons.css rather than inferring use from a
     name. See TOK-2. */

  /* --pill HAS ZERO CONSUMERS. Confirmed by live perturbation on both
     built pages 2026-08-07 — setting it to a sentinel moved 0 elements,
     measured against a control that moved 2 before the change and a
     nonexistent token that moved 0. It holds the concept's original
     button violet. DO NOT DELETE OR REPURPOSE IT HERE: whether the
     palette keeps this value, retires it, or assigns it elsewhere is a
     PALETTE-SESSION decision, not a build one. An unreferenced token
     costs nothing; guessing at its disposition does. */
  /* ^ THAT CONDITION WAS MET, NOT OVERRIDDEN. C4 (2026-08-17) reassigns
     --pill on an explicit director ruling with tokens.css authorisation —
     the palette-level decision this block was holding the token open for.
     It is no longer #696FE8 and no longer unreferenced. See TOK-2. */
  /* --pill RETIRED at C1 2026-08-17 — 0 references in code. Was #696FE8,
     one of four independent literals that shared that value. NOT the same
     token as --pill-hover (#585EDC), which is live at 6 refs. See TOK-1. */
  /* ^ SUPERSEDED BY DECISION AT C4, NOT CORRECTED AS AN ERROR. C1's
     retirement was RIGHT ON ITS FACTS — 0 code refs, browser computing
     empty, and it stayed right for three checkpoints. C4 revives the token
     at a new value on a director ruling. Left as written: a reader needs to
     see that the token was genuinely dead, or the revival looks like a
     reversal of a mistake instead of a decision. */
  --pill:#2B61C9;          /* .btn RESTING fill. Revived at C4 2026-08-17. */

  /* ⚠ DO NOT "TIDY" THIS TO MATCH --accent. It is the last #696FE8 in the
     file and it looks like a leftover. It is not — C1 moved --accent to
     #2B61C9 and left this behind BY RULING. #2B61C9 measures 2.5821 on
     --plum against this value's 3.5594, so aligning them would dim every
     focus ring on every dark ground. See TOK-1. */
  --focus:#696FE8;         /* the focus indicator and nothing else */
  --mark:#2B61C9;          /* decorative geometry: badge dots, shatter mark */

  /* .btn's fill in BOTH states, despite the name. Hand-picked, NOT
     derived from --pill by color-mix — a change to --pill does not move
     it and never did. The white label measures 5.1858 on this value at
     14.5px / weight 600, against a 4.5 threshold. Re-measure the label if
     this value moves. */
  --pill-hover:#2B61C9;    /* .btn:hover ONLY. Moved at C4 2026-08-17. */

  /* FORM ERROR. Its own token rather than a reuse of any brand value: an
     error state has a contrast floor of its own (4.5 at 13px on --paper)
     and must be tunable without dragging a brand colour with it. It is
     NEVER the only signal — the message text and aria-invalid carry the
     information; this is the visual reinforcement. Measured 6.1710 on
     --paper. Re-measure if --paper moves. */
  --error:#B3261E;

  /* portrait FPO wash — placeholder only, never a person. Renders only
     if the client photograph fails to load. */
  --fpo-base:#39424C;
  --fpo-hi:#516170;
  --fpo-lo:#2B2934;

  /* ---------------------------------------------------------------
     LAYER 2 — ROLE PAIRS
     --------------------------------------------------------------- */

  /* WHY THESE EXIST. --ink and --cream were each doing TWO JOBS in the
     concept: --ink is body text AND the fill of five stat bubbles, the
     headline backing, the submit control and the utility chips; --cream
     is the members band's ground AND the text colour on three dark bands.
     Today every pairing is ink-on-cream or cream-on-ink, so moving either
     moves both sides of the same ratio and nothing breaks.

     THE MOMENT PALETTE CANON MOVES ONE OF THEM INDEPENDENTLY THERE IS NO
     VALUE THAT SATISFIES BOTH ROLES. That is not a hypothetical: three
     concepts on this engagement hit it independently, and every value
     that fixed the mark destroyed the band. Splitting the ROLE now, while
     the values coincide, costs nothing and is what makes the split
     available later without re-auditing every band.

     A component that needs "the page's foreground" takes --on-page. A
     component that needs "a dark fill's foreground" takes --on-fill.
     They are the same value today and that is fine. */

  --ground-page:var(--paper);     --on-page:var(--ink);
  --ground-alt:var(--cream);      --on-alt:var(--ink);
  --ground-dark:var(--plum);      --on-dark:var(--cream);
  --ground-slate:var(--slate);    --on-slate:var(--cream);
  --ground-fill:var(--ink);       --on-fill:var(--cream);
  --ground-field:var(--white);    --on-field:var(--ink);
                                  --on-pill:var(--white);

  /* secondary foregrounds, per ground */
  --on-page-body:var(--ink-body);
  --on-page-muted:var(--ink-muted);
  --on-page-soft:var(--ink-soft);
  --on-dark-body:var(--ink-on-dark);

  /* ---------------------------------------------------------------
     LAYER 3 — DERIVED
     Every alpha value is a color-mix() of a LAYER 1 token, so it FOLLOWS
     its parent. The concept froze these as rgba() channel triples, which
     meant a palette pass moved the solid colour and left its own
     translucent derivatives behind at the old hue.
     --------------------------------------------------------------- */

  --header-bg:color-mix(in srgb, var(--paper) 90%, transparent);
  --rule-hair:color-mix(in srgb, var(--ink) 14%, transparent);
  --rule-footer:color-mix(in srgb, var(--ink) 20%, transparent);

  /* photo band wash. AN OPAQUE BACKING IS WHAT MAKES CONTRAST
     DETERMINATE ON THIS BAND — see components/stat-arc.css. These are the
     BAND's wash, not a text backing, and must not be reused as one. */
  --photo-wash-a:color-mix(in srgb, var(--slate) 92%, transparent);
  --photo-wash-b:color-mix(in srgb, var(--ink) 90%, transparent);
  --photo-glow-gold:color-mix(in srgb, var(--gold) 25%, transparent);
  --photo-glow-accent:color-mix(in srgb, var(--accent) 30%, transparent);

  --portrait-ring:color-mix(in srgb, var(--cream) 60%, transparent);
  --portrait-label:color-mix(in srgb, var(--cream) 70%, transparent);
  --fpo-hatch:color-mix(in srgb, var(--cream) 5%, transparent);
  --fpo-wash-hi:color-mix(in srgb, var(--stone) 30%, transparent);
  --fpo-wash-lo:color-mix(in srgb, var(--ink) 60%, transparent);
  --fpo-shadow:color-mix(in srgb, var(--ink) 42%, transparent);

  /* ---------------------------------------------------------------
     NON-COLOUR TOKENS
     --------------------------------------------------------------- */

  /* cap-height line of .lg1, measured in Chrome (2.95 x 1.08) */
  --capline:3.19px;

  --serif:Charter,'Iowan Old Style','Palatino Linotype',Georgia,serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:ui-sans-serif,-apple-system,"Segoe UI","Helvetica Neue",Arial,sans-serif;
}
