/* ═══════════════════════════════════════════════════════════════════════════════════════════════
   THE VALLEY STANDARD · v2 · one vocabulary, imported never copied
   Served at https://luyml.com/design/valley-2.css from LUYML/site/valley/design/. Owner: DESIGNER.
   Policy, adoption, the gate: LUYML/design/README.md. The rules a machine refuses: LUYML/design/KIT.md.

   WHAT CHANGED FROM v1 (2026-09-05 night, his order: "a kit for ginko that holds"). v1 was 25 tokens
   of structure and no colour, no spacing, no depth; uni beside it held 140 tokens under 25 prefixes.
   Both were written and then ignored. v2 is the grammar for the axes v1 left out, and every token is
   one of two classes, marked on its line so a gate can read the class off the file:
     FIXED  never redefined anywhere. A property that writes one has left the standard.
     SLOT   a name the standard owns and a value the property owns. Every adopter sets every SLOT,
            once, in one file named livery-*.css, and nowhere else. A room may set exactly one slot,
            --v-light, under its own [data-light] scope: rooms have their own light, never their own rules.
   Values are addressed, not nicknamed: a colour is an element (ground, surface, field, fill, go, line,
   stop, scrim) with its on- pair, so text can only be asked for on the ground it was made for. The livery
   values must sit inside the tone zones in KIT.md (OKLCH lightness bands measured off Ginko's own
   livery); the gate computes them. Nothing in this file is a value someone liked.
   ═══════════════════════════════════════════════════════════════════════════════════════════════ */
:root {
  /* ── the air, the Group's one status language (FIXED, from v1) ── */
  --v-band-good:          #3A7D44;  /* FIXED */
  --v-band-moderate:      #C9A227;  /* FIXED */
  --v-band-usg:           #C46A1B;  /* FIXED */
  --v-band-unhealthy:     #B3402E;  /* FIXED */
  --v-band-veryunhealthy: #7C3F6D;  /* FIXED */
  --v-band-hazardous:     #6E1423;  /* FIXED */
  --v-air-h: 6px;                   /* FIXED · the sky band at the top edge of every property */

  /* ── the lattice. One unit, the 8 px grid; spacing inherits it rather than choosing its own
        (Carbon's mini unit, Atlassian's base: alignment forces it, not taste). The ladder is
        asymmetric, dense at the bottom where component insides live, sparse at the top where page
        rhythm lives; named by multiplier so the name is the arithmetic. No per-width values: at a
        breakpoint a thing may step up or down the ladder, the ladder does not change. ── */
  --v-unit:   8px;    /* FIXED */
  --v-s-025:  2px;    /* FIXED · ¼ unit */
  --v-s-050:  4px;    /* FIXED · ½ */
  --v-s-100:  8px;    /* FIXED · 1 */
  --v-s-150: 12px;    /* FIXED · 1½ */
  --v-s-200: 16px;    /* FIXED · 2 */
  --v-s-300: 24px;    /* FIXED · 3 */
  --v-s-400: 32px;    /* FIXED · 4 */
  --v-s-500: 40px;    /* FIXED · 5 · a card's outer padding in both Carbon and Atlassian; a missing rung is what collapses two intentions onto one value */
  --v-s-600: 48px;    /* FIXED · 6 */
  --v-s-800: 64px;    /* FIXED · 8 */
  --v-s-1200: 96px;   /* FIXED · 12 */
  --v-col: 1280px;    /* FIXED · one column, stopping here */
  --v-measure: 65ch;  /* FIXED · a reading column */

  /* ── the hand ── */
  --v-tap: 44px;      /* FIXED · every control clears it, and carries a word with its mark */

  /* ── corners, one family ── */
  --v-r-sm: 9px;  --v-r-md: 14px;  --v-r-lg: 22px;  --v-r-pill: 999px;   /* FIXED */

  /* ── lines and marks. A line is never thinner than this on a daily-use surface. Marks are drawn
        by us on one grid, one stroke. (The stroke-as-fraction-of-frame ladder uni carries is NOT
        entered here: its panel question is his to call; KIT.md, NO RUNG.) ── */
  --v-line-w: 1.5px;     /* FIXED */
  --v-mark: 24px;        /* FIXED · the mark's grid */
  --v-mark-stroke: 2px;  /* FIXED */

  /* ── depth is distance. Layers first, then the shadow that renders each: a hard offset in the
        livery's drawn-line colour, never a blur, because a blur is a claim about light and ours is a
        claim about distance. Almost nothing rises: base is the page; 1 is a pressable thing; 2 a
        card or window; 3 the one thing over everything. Pressed goes INTO the surface (inset), the
        commonest depth state and the one a single ladder cannot say. ── */
  --v-lift-0: none;                            /* FIXED · the base layer */
  --v-lift-1: 2px 2px 0 var(--v-line);         /* FIXED */
  --v-lift-2: 6px 6px 0 var(--v-line);         /* FIXED */
  --v-lift-3: 10px 10px 0 var(--v-line);       /* FIXED */
  --v-press:  inset 2px 2px 0 var(--v-line);   /* FIXED · pushed into the surface */

  /* ── motion and focus (FIXED, from v1) ── */
  --v-ease: cubic-bezier(.22,.61,.36,1);  /* FIXED */
  --v-dur: .18s;                          /* FIXED */
  --v-focus: 2px solid currentColor;      /* FIXED */
  --v-focus-offset: 3px;                  /* FIXED */

  /* ── type roles: ratios are the standard, the root and the faces are the property's ── */
  --v-root: 1rem;                                          /* SLOT · the property's body size */
  --v-face: system-ui, sans-serif;                         /* SLOT · the property's face; never left to the browser */
  --v-face-display: var(--v-face);                         /* SLOT */
  --v-step-fine:    calc(var(--v-root) * 0.82);            /* FIXED */
  --v-step-body:    var(--v-root);                         /* FIXED */
  --v-step-lead:    calc(var(--v-root) * 1.25);            /* FIXED */
  --v-step-head:    calc(var(--v-root) * 1.563);           /* FIXED */
  --v-step-title:   calc(var(--v-root) * 1.953);           /* FIXED */
  --v-step-loud:    calc(var(--v-root) * 2.441);           /* FIXED */
  --v-step-voice:   calc(var(--v-root) * 3.052);           /* FIXED */
  --v-step-display: clamp(calc(var(--v-root) * 1.953), 7.4vw, calc(var(--v-root) * 3.052)); /* FIXED */
  --v-step-hero:    calc(var(--v-root) * 3.815);           /* FIXED */

  /* ── MODES (his, 2026-09-05 night: "i think light mode and dark mode is good. youtube has it, instagram has
        it. only netflix doesn't have it"). Both modes; the person chooses. And his own law from the same morning
        holds on this axis as on width: two modes are never two designs. ONE set of roles; the mode swaps what
        fills them. So every colour SLOT has a value per mode, set in the livery under `:root` (light) and under
        `[data-mode="dark"]` (dark), and every contrast law in KIT.md A holds in both. The choice is carried on
        `<html data-mode="light|dark">`, written by the shell from the person's stored choice or, absent one, from
        prefers-color-scheme; a room never sets it. On an emitting panel the dark mode is the panel mostly off, with
        the pictures and the lit thing emitting, which is the version his rule describes. ── */
  color-scheme: light dark;
  --v-modes: light;   /* SLOT · which modes this property OFFERS: light | both. A property says both only when every room it
                         ships takes its ground and text from the roles; until then a dark reading over an unadopted light
                         ground is unreadable, and the shell offers no switch. Measured on the round, 2026-09-05 night. */

  /* ── colour, addressed by element with its on- pair. The values below are placeholders that make
        the grammar render legibly when a livery is missing. A livery sets every one; a slot left unset
        is not an adoption. Zones each must sit in: KIT.md. ── */
  /* THE MEDIUM (his, 2026-09-05 night): "if you try to make paper on a screen, you will fail ... a screen
     isn't made this way ... plus a phone has protective glass. paper is really really dumb. same as cardboard,
     same as anything matte." A screen is emissive, under a specular sheet; paper is reflective. So the elements
     are named for light behind glass, never for print: ground, not paper; on-ground, not ink. The values a
     livery puts here are judged by the zones in KIT.md, and a paper colour (a cream stock, a matte texture)
     is the one thing the zones now refuse to call a ground without his word. */
  --v-ground:       #FAFAFA;  /* SLOT · the page's emitting ground · zone 10 · neutrals are true neutrals, chroma 0 */
  --v-on-ground:    #111111;  /* SLOT · text on the ground · zone 2, ≥ 7:1 */
  --v-on-ground-2:  #444444;  /* SLOT · quiet text on the ground · zone 3–4, ≥ 7:1 (his floor) */
  --v-surface:     #FFFFFF;  /* SLOT · a set area of the ground: a card, a window's mat · zone 10 */
  --v-on-surface:  #111111;  /* SLOT */
  --v-field:       #F4F4F4;  /* SLOT · an input, the search pill · zone 9–10 */
  --v-on-field:    #111111;  /* SLOT */
  --v-on-field-2:  #444444;  /* SLOT · quiet ink on a field (a placeholder) · ≥ 7:1 on field */
  --v-fill:        #DDDDDD;  /* SLOT · the act, a pressable fill · zone 7–8 */
  --v-on-fill:     #111111;  /* SLOT · ≥ 7:1 on fill */
  --v-fill-text:   #444444;  /* SLOT · the act's colour at text grade · ≥ 4.5:1 on paper */
  --v-go:          #333333;  /* SLOT · the forward control on a door, a link · zone 5–6 */
  --v-on-go:       #FFFFFF;  /* SLOT · ≥ 4.5:1 on go */
  --v-go-text:     #333333;  /* SLOT · go at text grade · ≥ 4.5:1 on paper */
  --v-line:        #111111;  /* SLOT · the drawn line and the lift's colour · = ink strength */
  --v-line-quiet:  rgba(0,0,0,.14);  /* SLOT · the hairline */
  --v-stop:        #B3402E;  /* SLOT · stop, recording, the crossing-guard · zone 6 */
  --v-on-stop:     #FFFFFF;  /* SLOT · ≥ 4.5:1 on stop */
  --v-scrim:       rgba(0,0,0,.32);  /* SLOT · the veil under the one thing over everything (an element, so it is addressed, not a literal) */
  --v-light:       var(--v-surface);  /* SLOT · the one thing a ROOM may set, under [data-light] · zone 8–9 */
  --v-room:        color-mix(in srgb, var(--v-light) 52%, var(--v-ground));  /* FIXED · the room's ground, derived */
  --v-lamp:        radial-gradient(96% 52% at 12% 2%, color-mix(in srgb, var(--v-light) 96%, transparent), transparent 58%);  /* FIXED · the room's light as a source, not an even wash; one formula, consolidated from the rooms that each retyped it */
  --v-shine:       rgba(255,255,255,.34);  /* SLOT · the specular on a coated thing (we emit, under glass: a highlight is of the medium; a matte is not) */
  --v-on-art:      #FFFFFF;  /* SLOT · text over a picture; a picture is its own ground, so its text is addressed like any other */
  --v-shade:       #140C06;  /* SLOT · the veil that darkens a picture under its words, mixed to alpha with color-mix, never a literal in a room */

  /* ── pictures and texture ── */
  --v-window: 1 / 1;   /* SLOT · one shape per wall: the aspect ratio every picture is seen through */
  --v-grain: none;     /* SLOT · texture is declared or absent; a livery that has one names its image and amplitude in KIT.md (his: "what texture is used where, what is the noise") */
}

[data-mode="dark"] {
  /* DARK IS NOT A MIRROR (his, 2026-09-05 night: "dark theme isn't just negative white theme"). Depth cannot invert: a
     surface is raised by being LIGHTER than its ground, so the lifts render as none here and the layer's own tone is the
     depth; pressed is still into the surface, darker. Chroma comes down, because a colour calm on white vibrates on black.
     The extremes pull in: neither the ground nor the text goes to the panel's limit, because white on black halates. The
     placeholders below are neutral (chroma 0) and a livery sets every one of them for dark, too. */
  --v-lift-1: none; --v-lift-2: none; --v-lift-3: none;   /* FIXED · depth is lightness in dark */
  --v-press: inset 2px 2px 0 var(--v-ground);            /* FIXED · pressed into the ground, darker */
  --v-ground: #1B1B1B; --v-on-ground: #DEDEDE; --v-on-ground-2: #B4B4B4; --v-surface: #262626; --v-on-surface: #DEDEDE;
  --v-field: #313131; --v-on-field: #DEDEDE; --v-on-field-2: #B4B4B4; --v-fill: #BDBDBD; --v-on-fill: #161616; --v-fill-text: #CFCFCF;
  --v-go: #A9A9A9; --v-on-go: #1B1B1B; --v-go-text: #CFCFCF; --v-line: #BEBEBE; --v-line-quiet: rgba(222,222,222,.16);
  --v-stop: #C97060; --v-on-stop: #161616; --v-scrim: rgba(0,0,0,.6); --v-shine: rgba(255,255,255,.18); --v-light: var(--v-surface);
  --v-on-art: #FFFFFF; --v-shade: #0A0806;
}  /* SLOT placeholders for dark; a livery sets every one of these too */

/* THE PLACES THAT NEVER MOVE (unchanged from v1): the air strip at the top edge; the bar reading from
   the property to the arm, five worded places at most, the search a short pill that keeps its word;
   the worldmark chip bottom-left; the credit under every photograph; the imprint in every footer. */

:focus-visible { outline: var(--v-focus); outline-offset: var(--v-focus-offset); }
@media (prefers-reduced-motion: reduce) { :root { --v-dur: 0s; } }
