/*
 * TOKENS BELOW ARE DECLARED AND NOT YET CONSUMED (LO-10).
 *
 * This is expected for a design system ported ahead of the pages that use it, and none of them
 * are dead: each was checked against .planning/ROADMAP.md before being kept, and each has a
 * named consumer in an upcoming phase or plan. Recorded here so Phase 8 cleanup has the list,
 * and so unused tokens cannot silently accumulate values that were never validated against a
 * real rendering — --ink-faint is already one that is wrong for its most obvious use (see its
 * note). Not yet struck from this list: plan 02-01 only DECLARES the hero tokens below; no
 * markup consumes any of them until 02-02/02-03 actually run.
 *
 *   --fs-hero                Plan 02-02 — hero H1 ("Newsreader 60px small-caps", ROADMAP Phase 2 SC-2)
 *   --hero-height             \
 *   --hero-text-width          \
 *   --hero-pad                  } Plan 02-02 — the hero component (geometry; added by 02-01)
 *   --hero-eyebrow              /
 *   --hero-nav-link            /
 *   --hero-tagline             /
 *   --hero-scrim               /
 *   --hero-starfield-opacity  /
 *   --fs-h2-band       Still unconsumed after plan 02-03: no heading in this plan's credibility
 *                      band is a rendered <h2> (the band carries eyebrow labels, a plain
 *                      paragraph, pills, and a list — no heading element at all), so there is
 *                      no genuine consumer yet. Left on this list rather than struck, pending
 *                      whichever later plan actually renders a heading inside a dark/credibility
 *                      band.
 *   --fs-body-sm       Still 15.5px, still below the site's 16px body floor, still unconsumed.
 *                      Plan 02-03 needed a sub-17px secondary size in exactly this
 *                      neighbourhood (the credibility band's career-line list, the stat grid's
 *                      sign-off note) and could not reach for this token — 15.5px fails the
 *                      floor. Both were built at a literal 16px instead. This token's value
 *                      needs a decision at Phase 8 (raise it to 16px, or re-scope it to
 *                      exempted component chrome only) before anything adopts it.
 *   --fs-pill          Phase 3 — credential pills (ROADMAP Phase 3 SC-2)
 *   --fs-caption       Phase 3+ — captions, field hints, metadata lines
 *   --measure-body     Phase 3/4 — long-form editorial measure (bio, cornerstone pages)
 *   --radius-inner     Phase 6 — surfaces nested inside a 12px --radius-card container
 *   --shadow-portrait  Phase 3 — the specified portrait shadow (SC-2)
 *   --ink-faint        non-text only; see the constraint note on the token itself
 *
 * Known duplication to reconcile at Phase 8, NOT silently now: several components carry literal
 * handoff font sizes (CredentialPill 12px, FormField 13px, ExpertiseCard 15px/13.5px) that are
 * at or near --fs-pill / --fs-caption / --fs-body-sm. Swapping the literals for the tokens
 * would change some rendered values (--fs-body-sm is 15.5px, the cards are 15px), so it is a
 * design decision against the approved handoff rather than a refactor.
 */
:root {
  /* Core colour (D-19) */
  --sapphire: #1F3A6D;
  --sapphire-deep: #182A4E;
  --accent: #8A2F2C;
  /* TWO hover maroons, deliberately, both straight from the handoff — do not "reconcile" them
     to one value. They are not the same state at different depths; they apply to different
     properties on different components:
       --accent-hover       #6D2422  link hover TEXT colour   (handoff README "Text link":
                                     "Hover #6D2422 + underline") and the a:hover rule in every
                                     handoff page (`a:hover { color: #6d2422 }`)
       --accent-hover-fill  #7A2A27  primary button hover FILL (handoff README "Primary button":
                                     "Hover: darken fill to #7A2A27")
     They previously sat 68 lines apart in unrelated comment blocks, named --accent-hover and
     --accent-press, so a maintainer changing "the hover maroon" would change one and miss the
     other. Kept adjacent and named for the property each paints. Changing either value is a
     design decision against an approved handoff, not a refactor. */
  --accent-hover: #6D2422;
  --accent-hover-fill: #7A2A27;
  --ink: #1C2230;
  --ink-muted: #565B66;
  /* NON-TEXT ONLY. #8A8F99 measures 3.06:1 on --paper — below the 4.5:1 WCAG 1.4.3 AA floor
     for normal text and below the 3:1 large-text floor is only cleared by a hair, so it must
     never carry copy at any size. It is part of the approved handoff set (a hairline/icon
     neutral), which is why it is kept rather than deleted, but it is currently unused and
     reads as approved to anyone writing Phase 2. Enforced, not just documented: the
     "--ink-faint is never declared as a text colour" assertion in tests/contrast.spec.ts
     fails the build if any stylesheet sets `color` to this token. */
  --ink-faint: #8A8F99;
  --paper: #FAF8F3;
  --paper-raised: #FFFFFF;
  --surface: #F2EFE8;
  --rule: #E4DED2;
  --rule-strong: #D8D2C6;
  /* Interactive control boundary (WCAG 1.4.11). Deliberately NOT --rule/--rule-strong: those
     are decorative hairlines for cards and dividers and measure 1.26:1 / 1.42:1 on --paper,
     which is fine for a bordered box carrying its own text but not for a control whose border
     is the only thing identifying it. An empty input has no fill difference from the page, so
     the border must carry the affordance on its own. Measured: 3.20:1 on --paper, 3.40:1 on
     --paper-raised. Same warm neutral family as --rule-strong, two steps darker. */
  --control-border: #8F8B81;
  --night: #0A1120;

  /* Focus indicator (D-31 / WCAG 2.4.11 + 1.4.11). Two tokens, not one: a single ring colour
     cannot clear 3:1 against both --paper and the dark surfaces this site paints (--sapphire-deep
     footer on every page, --night bands from Phase 2 on). Measured:
       --sapphire  on --paper        10.50:1  (light surfaces)
       --paper     on --sapphire-deep 13.37:1 (footer)
       --paper     on --night         17.76:1 (dark bands / hero)
     The dark-surface ring is selected in global.css by surface (footer, .on-dark), so component
     authors get the correct ring by placing content on a dark surface — not by remembering to
     override the outline colour per element. */
  --focus-ring: var(--sapphire);
  --focus-ring-dark: var(--paper);

  /* Footer-only palette (D-20) — on --sapphire-deep only.
     Maroon is illegible on navy. Never "fix" these back to var(--accent). */
  --footer-name: #FAF8F3;
  --footer-link: #DFE4EE;
  --footer-secondary: #9FB0CF;
  --footer-legal: #8FA1C2;
  --footer-eyebrow: #C98C89;
  --footer-divider: rgba(255, 255, 255, 0.14);

  /* Hero-only palette (plan 02-01) — on the dark hero band only, over `limb.png` + the scrim.
     `--hero-eyebrow` is the SAME hex value as `--footer-eyebrow`, and `--hero-nav-link` /
     `--hero-tagline` are near-neighbours of `--footer-link` / `--footer-secondary`. Do not
     collapse them onto the footer tokens — this is deliberate, for two concrete reasons:
       1. The handoff's hero values are genuinely not the footer's own (compare the literal
          hex below against `--footer-link` / `--footer-secondary` above). Substituting the
          footer tokens for the hero's would silently change the approved comp.
       2. Plan 02-04 measures the hero eyebrow's real contrast over the photograph and may have
          to change it. If that token were shared with the footer, fixing the hero's contrast
          would repaint every footer on the site — a `--hero-*` fix must never leak into
          `--footer-*`, and vice versa.
     Geometry values are the locked hero's own measurements (see C-2/C-3 in
     02-01-PLAN.md <conflicts_to_carry>: 60px H1 / 540px text block, both flagged departures from
     the Locked file, not this plan's invention). One `--hero-scrim` gradient token, not a set of
     `--hero-scrim-*` stops — that keeps the locked composition reviewable as a single value;
     splitting it into six numbers invites someone to tune one stop without seeing the others
     (see C-4). Its stops are Home v1's, deeper than the Locked file's — flagged in the plan. */
  --hero-height: 760px;
  --hero-text-width: 540px;
  --hero-pad: 44px 60px 52px;
  --hero-eyebrow: #C98C89;
  --hero-nav-link: #C9D3E4;
  --hero-tagline: #C3CCDD;
  --hero-scrim: linear-gradient(80deg, rgba(10, 17, 32, 0) 44%, rgba(10, 17, 32, 0.5) 64%, rgba(10, 17, 32, 0.84) 88%);
  /* Structurally present, visually inert. CONTEXT.md requires the star-field to be its own
     layer (not baked into the photograph) so a future image swap does not lose it — but
     `limb.png` already has a faint star-field baked into its own pixels, so rendering a second
     layer at visible density on top of the CURRENT asset would visibly double the stars. Ships
     at opacity 0; becomes a one-value edit the moment a starless replacement image is dropped
     in (see D2 in the phase summary). */
  --hero-starfield-opacity: 0;

  /* Type families. The `* Fallback` faces are the metric-matched local fallbacks declared in
     global.css — they sit between the webfont and the generic fallbacks so the pre-swap render
     occupies the same space as the webfont and `font-display: swap` cannot re-wrap the page. */
  --font-display: 'Newsreader', 'Newsreader Fallback', Georgia, serif;
  --font-body: 'Inter', 'Inter Fallback', system-ui, sans-serif;

  /* Type scale (D-25) */
  --fs-hero: 60px;
  --fs-h1: 54px;
  --fs-h2: 42px;
  --fs-h2-band: 36px;
  --fs-h3: 27px;
  --fs-lead: 26px;
  --fs-stat: 38px;
  --fs-body: 17px;
  --fs-body-sm: 15.5px;
  --fs-eyebrow: 12px;
  --fs-pill: 12px;
  --fs-nav: 14px;
  --fs-caption: 13px;

  /* Line heights */
  --lh-body: 1.72;
  --lh-lead: 1.45;
  --lh-heading: 1.1;

  /* Measure */
  --measure-body: 67ch;
  --measure-intro: 62ch;

  /* Radius (D-29) */
  --radius-card: 12px;
  --radius-control: 7px;
  --radius-inner: 10px;
  --radius-pill: 999px;

  /* Layout (D-26 / D-27) */
  --content-max: 1080px;
  --content-pad: 60px;
  --section-gap: 96px;
  --editorial-gap: 44px;
  --card-gap: 20px;

  /* Shadow */
  --shadow-portrait: 0 18px 44px rgba(24, 42, 78, 0.20);

  /* Motion (D-43) */
  --transition: 150ms ease;

  /* Interaction primitives (plan 01-05) — handoff values not enumerated by plan 02.
     The primary-button hover fill that used to live here as --accent-press moved up beside
     --accent-hover in the core colour block (LO-02); see the note there. */
  --sapphire-tint: rgba(31, 58, 109, 0.06);
  --sapphire-ring: rgba(31, 58, 109, 0.15);
  --hero-outline: rgba(255, 255, 255, 0.5);
}
