/*
 * Objexiv CSS tokens — the token-first layer (canon 91 §1, §2b; canon 94).
 *
 * The styling layer is RULED token-first vanilla modern CSS (canon 91 §2b): CSS
 * custom properties are the one source of visual truth, SVG + modern CSS, no CSS
 * framework and no component/UI library (no MUI, no Tailwind/Panda/vanilla-extract
 * — each needs a JS build the Go content layer deliberately avoids). Open Props is
 * the sanctioned token SUPERSET: it is a plain stylesheet of CSS variables, not a
 * build step. It is INTEGRATED and in use (docs/dependencies.md): the pinned
 * self-hosted open-props.min.css (canon 94 §6, no runtime CDN) loads BEFORE this
 * file in the page shell, so its generic --ease-* scale is in scope here. The
 * field's easing tokens (--ease-lift / --ease-glow below) reference Open Props'
 * --ease-out-3 for generic motion. Open Props is NOT required for — and does not
 * replace — the field's own signal tokens below (--ground, --live, the six
 * hands), which are the lights-not-cells identity and are authored here directly;
 * it is the SUPERSET for generic scales, not the identity. Because Open Props is
 * scoped at :where(html) (zero specificity), every :root token below overrides it.
 *
 * THE CHARGED IDENTITY (canon 94, revising file 83 on three points):
 *   1. ONE charged ground — the night/day split and the `data-theme` toggle are
 *      retired (canon 94 §1). There is one identity, one ground: a charged slate
 *      authored in oklch so lightness/chroma tune from one base. Deep enough that
 *      emission reads and current glows (the gift of dark), warmed and lifted with
 *      near-paper ink borrowed from light so it reads as a designed surface, never
 *      a terminal. A single radial ground-wash gives depth without a card anywhere.
 *   2. NO monospace (canon 94 §4) — Chivo Mono read as a terminal, the exact "this
 *      is a readout" signal the product is not. One warm humanist sans (Inter)
 *      carries everything; a reading serif (Source Serif 4) is reserved for the one
 *      thing that deserves weight — a person's actual words.
 *   3. The six hands stay the identity of WHO drew a thing, now one oklch family at
 *      one chroma tuned to the single ground (canon 94 §1, §5).
 *
 * File 83's structural core stands (canon 94 §5): lights not cells, crisp geometry
 * at rest, attachment-and-glow not fences, emission only for what is live, no hand
 * ever drawn, the six hands as the identity of who.
 *
 * Fonts are self-hosted in the production bundle, not a runtime CDN (canon 94 §6):
 * the exploration page used a CDN for review only. The families are named here with
 * a system fallback chain; the bundle step that ships the font files is recorded in
 * docs/dependencies.md. No runtime CDN link belongs in production CSS.
 */

:root {
  /* The one step. Every distance on the field is a multiple (tokens.json spacing). */
  --step: 8px;
  /* The smallest thing a finger can land on. */
  --touch: 44px;
  /* Between two panes in the split state. */
  --pane-gap: 16px;

  /* A person is round. There is no square on the field. */
  --radius-node: 50%;

  /* The weight of a line is the only state it shows (file 77 §3). */
  --line-proposed: 1px;
  --line-accepted: 2.5px;
  --line-faint: 1px;
  --line-ring: 2px;
  --line-ink: 3px;

  /* K-94d — the shape vocabulary's enrichment layer (canon 94 §7: "weight,
     layering, texture, more than a hairline where a hairline is thin; the
     emission and attachment grammar carrying more of the load than a lone
     stroke"). A line is NOT one hairline: it is a weighted CORE over a wider,
     fainter UNDERLAY, so a tie/thread/member-line reads as a charged filament
     with depth, never a single 1px rule. A ring is a crisp CORE with a faint
     concentric AURA. A point of light is a HOT core, a body, and a soft halo —
     three graduated weights, not one flat pip. These are weights and opacities
     only; colour stays the hands / the one charge (oklch tokens), geometry stays
     crisp (lights, not cells), nothing is fenced. */
  --ring-core: 2.4px;        /* the challenge ring's crisp core stroke */
  --ring-aura: 8px;          /* the faint wide aura under the ring — charge, not a second line */
  --ring-aura-alpha: 0.2;    /* the aura is a breath of depth, never a drawn band */
  --tie-core: 1.4px;         /* a filament's bright core */
  --tie-under: 4px;          /* the wider faint underlay the core rides */
  --tie-under-alpha: 0.16;
  --thread-core: 1px;        /* a take's thread to the rim: core */
  --thread-under: 3px;       /* its soft underlay */
  --thread-under-alpha: 0.12;
  --point-core: 2px;         /* a person's hot white-core light */
  --point-body: 4.5px;       /* the hand-coloured body of the light */
  --point-halo: 9px;         /* the soft outer halo (a light, never a hard disc) */
  --spine-core-alpha: 0.3;   /* the takes-column seam's core */
  --spine-aura-alpha: 0.1;   /* its soft widening aura */

  /* Durations the surface's answers take (file 77 §3). */
  --settle: 320ms;
  --fade-nothing: 500ms;
  --lift: 160ms;

  /* The EASINGS of those answers — authored here by REFERENCING Open Props, the
     sanctioned token superset (canon 91 §2b). Open Props loads before this file
     (page shell), so its generic --ease-* scale is in scope; the field names
     the two curves it means instead of scattering the browser's flat `ease`
     keyword across field.css. These shape generic MOTION only (a presence-lift,
     a glow settling in) — NOT the signature breathing/pulse of a live ring,
     which stays its own authored ease-in-out (canon 94 §7). A system fallback
     rides each var() so the surface still animates if the superset is ever
     absent.
       --ease-lift : the challenge's lift-toward-you and the ring's stroke
                     settle — Open Props --ease-out-3, a softer deceleration than
                     the browser's `ease-out` so presence arrives, never snaps.
       --ease-glow : a keyword's ink/glow coming up on hover/focus — the same
                     eased-out curve so the light grows in rather than stepping. */
  --ease-lift: var(--ease-out-3, cubic-bezier(0, 0, 0.3, 1));
  --ease-glow: var(--ease-out-3, cubic-bezier(0, 0, 0.3, 1));

  /* Type (canon 94 §4). No monospace anywhere. One humanist sans carries all
     chrome, takes, labels and counts; a reading serif is reserved for a person's
     actual words (a take, a reading's text), never for chrome. */
  --font-sans: "Inter", system-ui, sans-serif;
  --font-serif: "Source Serif 4", Georgia, serif;
  --take-short: 30px;
  --take-long: 19px;
  --keyword-size: 14px;
  --challenge-words-size: 16px;
  --when-size: 12px;

  /*
   * THE ONE CHARGED GROUND (canon 94 §1). No `data-theme`, no second palette, no
   * toggle. A charged slate authored in oklch: deep enough that emission reads and
   * current glows, warmed and lifted with near-paper ink borrowed from light so it
   * reads as a designed surface, not a terminal.
   */
  --ground: oklch(0.21 0.028 215);        /* the field; nothing sits in a card */
  --ground-deep: oklch(0.16 0.03 220);    /* the vignette, deep at the edges */
  --ground-lift: oklch(0.26 0.03 210);    /* a raised pane in the split state */
  --ink: oklch(0.94 0.012 95);            /* near-paper ink, borrowed from light */
  --ink-quiet: oklch(0.72 0.015 160);     /* the faint weight of a line not yet lit */
  --hair: oklch(0.5 0.02 200 / 0.28);     /* a quiet hairline on the ground */

  /* A single radial ground-wash: lifted at the centre, deep at the edges. Depth
     without a card anywhere (canon 94 §1). */
  --ground-wash: radial-gradient(120% 80% at 50% -10%, var(--ground-lift), var(--ground) 45%, var(--ground-deep) 120%);

  /* THE ONE LOUD CHARGE (canon 94 §1, §2): an electric amber with a white-hot
     core. Ground-relative; it is that a thing is live NOW, never decoration. */
  --live: oklch(0.82 0.17 60);
  --live-hot: oklch(0.95 0.11 75);        /* the white-hot centre of a charge */

  /* THE COOL CHARGE — the MECHANICAL register (canon 94 §2a): object-to-object
     with no person speaking reads cooler and more geometric, a desaturated
     cyan-slate distinct from the warm --live and from the six hands. These are
     the SHIPPED token-layer definitions the mechanical register reads: field.css
     (.register-mechanical) and the island (electric.ts coolColor/coolHotColor)
     consume them; before this they fell back to the hard-coded exploration
     values, so the fallback was load-bearing. Values match the reviewed demo
     (web/island/demo) and the island fallbacks exactly. */
  --live-cool: oklch(0.80 0.09 215);      /* the cool charge on a structural signal */
  --live-cool-hot: oklch(0.90 0.06 210);  /* its brighter core */

  /* The six hands (canon 94 §1, §5): one family, one chroma, tuned to glow on the
     single ground. A person's node and the ink of every stroke they draw; the
     identity of WHO, distinct from the one live charge. */
  --hand-coral: oklch(0.74 0.14 25);
  --hand-saffron: oklch(0.80 0.13 75);
  --hand-leaf: oklch(0.78 0.14 150);
  --hand-teal: oklch(0.80 0.12 195);
  --hand-sky: oklch(0.76 0.13 245);
  --hand-plum: oklch(0.76 0.14 325);

  /* The inside of an accepted reading, at low alpha; the neutral. */
  --enclosure-fill: oklch(0.94 0.012 95 / 0.12);
  /* A private thing seen from outside: its shape, no detail. */
  --closed: oklch(0.34 0.02 210);
}
