/* tokens.css — GENERATED by Outerface's themes/build-css.mjs. Do not hand-edit.
 *
 * Mode: base-night → single
 * Source: Outerface's themes/documents/*.ColorTheme.json (and the site's own documents),
 *         derived through themes/derive.mjs: the one derivation, not a copy.
 *
 * Two tokens are lifted here rather than taken at rest, both for WCAG 2.1 AA
 * (EN 301 549 / BFSG — a launch blocker, not a preference): --text-muted is
 * floored at 4.5:1 for body copy, --border-bright at 3:1 for the focus ring
 * (1.4.11). Both are no-ops on a document that already passes. The documents
 * themselves are never changed.
 */

/* SINGLE — this site wears Base Night (base-night) and nothing else.
 * Zero JS: no picker, no media query, no runtime derivation. The page is
 * correctly themed before a single byte of script has run, which is what
 * an agent reading the rendered HTML and a visitor with JS off both get.
 */
:root {
  color-scheme: dark;

  /* House constants — not theme data; identical under every theme. */
  /* design.md: default tracking is tighter than the framework default — loose reads
     decorative, tight reads confident */
  --tracking-tight: -0.011em;
  /* the line length long-form copy is set to; editorial register, not full-bleed text */
  --measure: 68ch;
  --radius: 8px;
  --radius-lg: 14px;
  --space-1: 0.5rem;
  --space-2: 1rem;
  --space-3: 1.5rem;
  --space-4: 2.5rem;
  --space-5: 4rem;
  --space-6: 6rem;
  /* design.md: under 200ms, ease-out, done */
  --motion-duration: 160ms;
  --motion-ease: cubic-bezier(0, 0, 0.2, 1);

  /* ── Surfaces ──────────────────────────────────────────────────
       The elevation ladder. `surface-high` is the derived rung-3 midpoint of surface and
       surface-lift; nothing is drawn on surface-lift itself.
     */
  /* Canvas — The ground everything else sits on. */
  --bg: #000000;
  /* Canvas 2 — First elevation step above the ground — panels, cards, sidebars. */
  --surface: #141414;
  /* Canvas 3 — The middle rung of the elevation ladder — computed, not stored. · derived:
     mix(surface, surface-lift, .5) */
  --surface-high: #1D1D1D;
  /* Canvas 4 — Top of the elevation ladder — the highest a surface sits. */
  --surface-lift: #262626;
  /* Terminal — The terminal's own canvas, and the chrome around it. */
  --terminal: #000000;
  /* Border — Normal line weight — rules and dividers. */
  --border: #1F1F1F;
  /* Border Focus — Emphasised line weight — focus rings, active edges, and a widget's own
     perimeter. · SITE-DERIVED floor: this token is the widget perimeter AND the focus ring,
     and WCAG 2.1 1.4.11 sets 3:1 for both. Lifted against the ground it is worst on. A
     no-op on all 13 documents today (dbo-contracts#7 fixed them at rest) — it is here so a
     pasted or future theme cannot reintroduce an EN 301 549 / BFSG defect. */
  --border-bright: #7A7A7A;
  /* Field — The well a text field or search box is sunk into. */
  --input: #1D1D1D;
  /* Selected — The ground behind a selected row or chosen list item. */
  --highlight: #FFFFFF;
  /* Scrim — The wash laid over content this theme does not own — video, a photo, a foreign
     surface. · derived: the theme's own darkest token, so a light theme does not scrim with
     its page color */
  --scrim: #000000;

  /* ── Accents ─────────────────────────────────────────────────── */
  /* Primary — The colour the product is about — where the eye goes. */
  --accent: #FFFFFF;
  /* Primary Bright — Louder sibling of Primary. */
  --accent-bright: #FFFFFF;
  /* Primary Dim — Recessive accent, clamped to a 1.8–3.2:1 contrast band — framing and
     rules, never louder than body text. */
  --accent-dim: #48484A;
  /* Primary — The colour the product is about — where the eye goes. · SITE-DERIVED floor:
     `--accent` used as TEXT, lifted to WCAG 1.4.3's 3:1 large-text bar against the ground
     it is worst on. `--accent` itself is unchanged and stays the fill. */
  --accent-on-bg: #FFFFFF;
  /* Primary — The colour the product is about — where the eye goes. · SITE-DERIVED floor:
     `--accent` used as SMALL TEXT (WCAG 1.4.3, 4.5:1) — the showcase's column-label tone.
     Separate from `--accent-on-bg` (3:1, large text) for the reason above. */
  --accent-text: #FFFFFF;
  /* Secondary — The second voice. */
  --secondary: #C7C7CC;
  /* Secondary Bright — Louder sibling of Secondary. */
  --secondary-bright: #E5E5EA;
  /* Link — Web draws a hyperlink in this. Absent means Primary. · derived: falls back to
     accent — no document on disk stores one yet */
  --link: #FFFFFF;

  /* ── Semantics ───────────────────────────────────────────────── */
  /* Success — Additions, passing state. */
  --success: #30D158;
  /* Success Bright — Louder sibling of Success, floored so it never renders quieter. */
  --success-bright: #5BE07D;
  /* Warning — In-flight, uncommitted state. */
  --warning: #F59E0B;
  /* Error — Deletions, failure. */
  --error: #E5484D;
  /* Error Bright — Louder sibling of Error, floored so it never renders quieter. */
  --error-bright: #FF6369;
  /* Gold — A third semantic voice — not info. ANSI slots 3 and 6. */
  --gold: #F5C518;
  /* Success — Additions, passing state. · SITE-DERIVED floor: `--success` used as SMALL
     TEXT (WCAG 1.4.3, 4.5:1) — see `--accent-text` above. */
  --success-text: #30D158;
  /* Error — Deletions, failure. · SITE-DERIVED floor: `--error` used as SMALL TEXT (WCAG
     1.4.3, 4.5:1) — see `--accent-text` above. */
  --error-text: #E64F54;

  /* ── Text ──────────────────────────────────────────────────────
       Ink tiers. `text-muted` is the one that fails silently, so it is the one with a
       floor.
     */
  /* Body — Body text — the ink most content is set in. */
  --text-primary: #FFFFFF;
  /* Strong — The loudest step in the text ramp. */
  --text-bright: #FFFFFF;
  /* Secondary — Quieter than Body, still fully readable. */
  --text-secondary: #C7C7CC;
  /* Muted — The quietest readable step — verify contrast with maths, not by eye. ·
     SITE-DERIVED band: floored at 4.5:1 (WCAG 2.1 AA body copy / BFSG), capped at the
     primary tier so "muted" stays muted. Moves exactly one of 13 documents. */
  --text-muted: #9A9A9A;
  /* Code — Inline code and monospace runs inside prose. */
  --text-code: #C7C7CC;
  /* Selection — The caret and the wash behind selected text — the ink, not the ground. */
  --text-selection: #FFFFFF;
  /* Placeholder — Ghost text in an empty field. */
  --text-placeholder: #9A9A9A;

  /* ── Over a scrim ──────────────────────────────────────────────
       A card or a headline over media the site does not own — the pattern
       @copperdesign/lazy-video-backgrounds makes a house default. The contract derives the
       TYPE color; the accent drawn there was measured failing on 6 of 10 themes and is
       lifted here.
     */
  /* On Scrim — Body ink for type sitting on a Scrim rather than on Canvas. */
  --text-on-scrim: #FFFFFF;
  /* derived: mix(scrim, on-scrim, .62) */
  --on-scrim-quiet: #9E9E9E;
  /* derived: mix(scrim, on-scrim, .42) */
  --on-scrim-quietest: #6B6B6B;
  /* SITE-DERIVED: `onScrim()`, floored at the 3:1 WCAG 1.4.11 non-text bar against the
     worst pixel a 72%-opacity card can present over white footage. */
  --accent-on-scrim: #FFFFFF;
  /* SITE-DERIVED: as above. */
  --secondary-on-scrim: #C7C7CC;

  /* ── Ink on a filled ground ────────────────────────────────────
       For type drawn ON one of the fills above — a CTA button, a release-note pill, a
       badge. Never store one of these; the fill is fixed by meaning, so the author has no
       lever to reach the floor with.
     */
  /* inkOn(): 4.5:1 against the fill */
  --ink-on-accent: #000000;
  /* SITE-DERIVED: `inkOn()` against the HOVER fill. `--ink-on-accent` is derived against
     `accents.accent` and is wrong on `accents.accentBright` for every theme whose bright
     sibling is darker than its accent — which is every light theme. */
  --ink-on-accent-bright: #000000;
  /* inkOn() */
  --ink-on-secondary: #000000;
  /* inkOn() */
  --ink-on-success: #000000;
  /* inkOn() */
  --ink-on-warning: #000000;
  /* inkOn() */
  --ink-on-error: #000000;

  /* ── Typography ────────────────────────────────────────────────
       SITE-MAINTAINED and identical across all 14 themes: a theme changes color, never
       type. The documents' own `typography` blocks are not read — the site bundles no font
       files, so a named face it has not loaded would silently fall back (most of them to
       Georgia).
     */
  /* site-maintained; not derived from the theme document */
  --font-display: Inter, system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
  /* site-maintained; not derived from the theme document */
  --font-body: Inter, system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
  /* site-maintained; not derived from the theme document */
  --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace;
}

/* prefers-reduced-motion — honored once, here, so every consumer of the
 * motion tokens inherits it instead of each stylesheet remembering to.
 * design.md treats this as part of the AA floor, not a nicety.
 */
@media (prefers-reduced-motion: reduce) {
  :root { --motion-duration: 0.01ms; }
}
