/* GLEE-PALETTE:BEGIN — generated by ops/color_migrate.py. Do not hand-edit. */
:root {
  --c-ink: #000000;
  --c-ink-2: #0a0a0a;
  --c-surface: #0a0a0a;
  --c-surface-2: #111111;
  --c-surface-3: #242424;
  --c-gold: #c9a96b;
  --c-gold-hi: #e4cfa1;
  --c-gold-mid: #d8bc85;
  --c-paper: #f5f5f5;
  --c-paper-hi: #ffffff;
  --c-muted: #b8b8b8;
  --c-muted-2: #707070;
  --c-slate: #a4a4a4;
  --c-ok: #45a862;
  --c-ok-soft: #92d9a9;
  --c-info: #8fd2d6;
  --c-link: #d8bb78;
  --c-violet: #8c5ad2;
  --c-violet-soft: #a86cff;
  --c-warn: #f59c42;
  --c-warn-soft: #e8a87c;
  --c-danger: #d15b5b;
  --c-teal: #3ecfb6;

  /* Shell palette — added 2026-08-25. These are the fallback values baked into
     GLEE_SHELL_CSS (--gs-ink, --gs-ink-2, --gs-muted, --gs-hairline, --gs-panel).
     The shell is injected into every surface on both stacks, so it authors colour
     on pages that never see this file; L8 measured 6 authored colours outside the
     canon on the apex and failed the surface. They belong in the canon because the
     shell IS part of the design system, not a guest on it. */
  --c-shell-ink: #f5f5f5;
  --c-shell-ink-2: #cccccc;
  --c-shell-muted: #9a9a9a;
  --c-shell-muted-2: #707070;
  --c-shell-hairline: #242424;
  --c-shell-panel: #0a0a0a;
  --c-shell-on-gold: #1a1305;
}
/* GLEE-PALETTE:END */

/* GLEE-PRODUCT-LANGUAGE:BEGIN — authored 2026-08-28 from the Captain's
   reference synthesis. These names are deliberately separate from the
   generated pastel canon above: the public GLEE shell uses them to encode
   institutional structure, live evidence, and document mode.
   Gold cannot mean everything. Roles below are exclusive. */
:root {
  --glee-navy-0: #000000;
  --glee-navy-1: #0a0a0a;
  --glee-navy-2: #111111;
  --glee-brass: #d8bb78;
  --glee-brass-hi: #f0d79e;
  --glee-cyan: #74e4e9;
  --glee-ivory: #f5f5f5;
  --glee-graphite: #a4a4a4;
  --glee-serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
  --glee-grid: rgba(116, 228, 233, .045);
}
/* GLEE-PRODUCT-LANGUAGE:END */

/* GLEE-SCALE:BEGIN — generated by ops/token_migrate.py. Do not hand-edit. */
:root {
  /* spacing rhythm — 8-step, tightened per Captain 2026-08-25 */
  --space-2: 2px;
  --space-4: 4px;
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px;
  --space-24: 24px;
  --space-40: 40px;
  --space-64: 64px;
  /* type scale */
  --text-10: 10px;
  --text-11: 11px;
  --text-12: 12px;
  --text-13: 13px;
  --text-14: 14px;
  --text-16: 16px;
  --text-20: 20px;
  --text-28: 28px;
  --text-40: 40px;
  /* corner radii */
  --radius-2: 2px;
  --radius-8: 8px;
  --radius-16: 16px;
  --radius-pill: 999px;
}
/* GLEE-SCALE:END */

/* ============================================================================
   GLEE CANONICAL DESIGN TOKENS — v1  (2026-07-07)
   ----------------------------------------------------------------------------
   One source of truth for the site's visual language. INTENDED to be loaded last
   on every page so it unifies the palette onto one canon — a flat pastel-on-pure-black
   BIOS system where colour encodes control:
     • ground is pure #000 (never blue-tinted); panels/lines are warm-neutral
     • five control colours, one hex each — gold focus / green action /
       teal move / lavender dream / coral edit
     • mono-first typography; serif reserved for display headings
   Reversible: remove this stylesheet link and pages revert to prior tokens.

   COVERAGE IS A MEASUREMENT, NOT A CLAIM (corrected 2026-08-18).
   This header read "Loaded last on every page" as a flat statement of fact. It was
   true when written and quietly stopped being true: measured 2026-08-18, 23 of the 46
   live public surfaces and 3 of the 4 GLEE Local surfaces do not link this file at all.
   A stale comment is worse than no comment — it is convincing, specific, and wrong,
   and it was believed for months.

   The sentence above now states an INTENT. The current fact is whatever this reports:

     python3 -m glee_pkg.web_verify.palette_drift_sweep   (from the estate root)

   Do not restore the flat claim. If universal coverage is ever achieved, enforce it
   with a test that fails when a live surface drops the link — not with a sentence.
   ============================================================================ */

:root {
  /* ---- type: mono-first; serif for hero display; sans retired -> mono ---- */
  --mono: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
  --sans: var(--mono);   /* the sub-surfaces used a system-ui sans body — collapse to mono */

  /* ---- ground: pure black; panels/lines warm-neutral (red >= blue) ---- */
  --bg: #000000;
  --panel: #0a0a0a;
  --panel2: #111111;
  --surf: #0a0a0a;
  --line: #242424;
  --edge: #242424;
  --edge2: #333333;

  /* ---- text ladder: warm bone, not cool grey ---- */
  --ink: #f5f5f5;
  --mist: #b8b8b8;
  --muted: #b8b8b8;
  --faint: #707070;

  /* ---- the five control colours (pastel encodes control) ---- */
  --sand: #d8c08a;   --sand-hi: #e6d3a2;   /* gold · focus / numbers / brand / building */
  --act:  #93d9ab;                          /* green · action / go / live / verified */
  --move: #8fd2d6;                          /* teal · move / navigation / route-flow */
  --tab:  #b3a5e6;                          /* lavender · dream / tabs / speculative */
  --util: #e8a3ab;                          /* coral · edit / warn */
  --num:  #d8c08a;
  --rose: #dd6d84;                          /* red · stop (pastel-calibrated) */
  --amber:#e6c081;                          /* amber · receipt accent */

  /* ---- sub-surface fork names, remapped by MEANING ---- */
  --gold:   #d8c08a;   /* was #e7c384 */
  --green:  #93d9ab;   /* was #45a862 (deep) */
  --blue:   #8fd2d6;   /* the "blue" role does not exist in the pastel canon -> teal-move */
  --violet: #b3a5e6;   /* was #8c5ad2 (saturated) */
  /* De-hardcoded 2026-08-06 (UVP L8): these three were bare literals in inline
     styles and a JS template. Declared at their existing values, not changed —
     rendering is identical. */
  --violet-soft: #9a86e0;   /* inline emphasis on the opener */
  --bone-hi: #f1e8d0;       /* key-cap highlight */
  --rose-soft: #dca2a2;     /* proof-card boundary note */
  --ground-deep: #04060a;   /* full-bleed game canvas ground */
  --ink-on-act: #06120b;    /* text sitting on --act green */
  --line-cool: #2a2f36;     /* cool-neutral hairline (game chrome) */
  --red:    #dd6d84;   /* was #d15b5b (muddy) */

  /* ---- legacy round-zero aliases (keep-list pages resolve through these) ---- */
  --text: #dcd8cf;
  --text-soft: #dcd8cf;
  --void: #000000;
  --graphite: #100f0c;
  --surface: #100f0c;
  --amber-hot: #e6d3a2;
  --accent: #d8c08a;
  --accent2: #8fd2d6;
  --page-accent: #d8c08a;
  --page-accent-2: #8fd2d6;

  /* ---- round-zero "official" primitives, collapsed to canon ---- */
  --glee-bg: #000000;
  --glee-bg-paper: #100f0c;
  --glee-void-black: #000000;
  --glee-graphite-steel: #100f0c;
  --glee-canvas-bg: #000000;
  --glee-forged-gray: #26282c;
  --glee-line: #26282c;
  --glee-gold: #d8c08a;
  --glee-gold-dim: #b89b63;
  --glee-gold-sem: #d8c08a;
  --glee-amber: #d8c08a;
  --glee-receipt-amber: #e6c081;
  --glee-green: #93d9ab;
  --glee-verified-green: #93d9ab;
  --glee-blue: #8fd2d6;             /* intelligence-blue role -> teal-move */
  --glee-intelligence-blue: #8fd2d6;
  --glee-purple: #b3a5e6;
  --glee-speculative-violet: #b3a5e6;
  --glee-red: #dd6d84;
  --glee-hard-stop-red: #dd6d84;
  --glee-bone: #dcd8cf;
  --glee-bone-white: #dcd8cf;
}

/* ---- keep-list pages: glee-visual-site.css scopes its tokens to the body,
        so re-declare them at the same selector (this sheet loads after it). ---- */
body.glee-visual-site {
  --vs-bg: #000000;
  --vs-panel: rgba(16, 15, 12, 0.88);
  --vs-panel-strong: rgba(20, 18, 14, 0.94);
  --vs-line: rgba(216, 192, 138, 0.22);
  --vs-line-soft: rgba(230, 228, 223, 0.12);
  --vs-text: #dcd8cf;
  --vs-dim: #9aa7b0;
  --vs-muted: #6a7882;
  --vs-accent: #d8c08a;    /* was #e7c384 */
  --vs-accent-2: #8fd2d6;  /* was #66ddeb cyan -> teal-move */
  --vs-safe: #93d9ab;      /* was #64d77b */
  --vs-grid: rgba(230, 228, 223, 0.03);
}

/* GLEE-SEMANTIC-LAW:BEGIN — 2026-08-28. Placed after the v1 canon so these
   role names cannot be overwritten by palette aliases. Gold is structure only. */
:root {
  --glee-role-structure: #d8bb78;  /* gold/brass: nav, selected, institutional */
  --glee-role-evidence: #74e4e9;   /* cyan: observation, live signal, verified */
  --glee-role-healthy: #45a862;    /* green: passed / healthy */
  --glee-role-pending: #f59c42;    /* amber: uncertainty / pending / attention */
  --glee-role-failed: #d15b5b;     /* red: failed / unsafe / contradiction */
  --glee-role-document: #f3eee3;   /* ivory: archival proof / long-form folio */
  --glee-folio-ink: #1c1914;       /* graphite on paper */
  --glee-folio-body: #2a261e;      /* long-form proof prose */
  --glee-folio-mark: #0b6e73;      /* cyan evidence mark on ivory */
  --glee-folio-rule: #d8c4a0;      /* brass hairline on paper */
}

/* line-icon base sizing (glee-icons.js) */
.gico{width:1.2em;height:1.2em;display:inline-block;vertical-align:-0.22em;flex:none}

/* ---- ART RULE (changed 2026-08-06 on Captain instruction: "change the rule to
   allow art") -------------------------------------------------------------
   Was: a blanket de-forge that hid decorative imagery on every keep-list page,
   so legal/support pages read flat like the flagship. That rule made art the
   exception and forced any visual language into a fight with the stylesheet.

   Now: art is ALLOWED by default. Flattening is opt-in per page — add
   `glee-flat` to the body when a page genuinely wants no decoration
   (e.g. a dense legal document). Same selectors, inverted default.

   This is what lets the flat BIOS canon and Narrative Geometric Patina be two
   styles in one system rather than rivals. See brand/geometric_patina/. */
body.glee-visual-site.glee-flat .glee-desktop-asset-field,
body.glee-visual-site.glee-flat .glee-art-phoenix,
body.glee-visual-site.glee-flat .glee-art-ghost,
body.glee-visual-site.glee-flat .glee-art-matrix,
body.glee-visual-site.glee-flat .glee-art-floor,
body.glee-visual-site.glee-flat .glee-art-spine,
body.glee-visual-site.glee-flat .page-hero:not(.glee-visual-scene-host)::after,
body.glee-visual-site.glee-flat .hero:not(.glee-visual-scene-host)::after { display: none !important; }

/* The `bios` style is the flat look expressed as tokens, not as a ban on
   imagery. A page can carry art AND the BIOS palette; that combination was
   previously unreachable. */
