/**
 * Do not edit directly, this file was auto-generated.
 */

:root {
  --ink-200: #C6CBD3; /** Powers text.body. Lc 75 body floor against base. */
  --ink-300: #A8AEB8; /** Powers text.secondary. Lc 60 content floor against base. */
  --ink-400: #8A9099; /** Powers text.muted. Lc 42 against base, a label band deliberately below the body floor. Label only, never running copy. */
  --ink-600: #3A3E45; /** Strong hairline. Powers border.strong. Lc 8.7 against base. Structural. */
  --ink-700: #24262B; /** Default hairline. Powers border. Structural. */
  --ink-800: #1C1F24; /** Lifted surface. Powers bg.lifted. Structural. */
  --ink-900: #141619; /** Raised surface. Powers bg.raised. Structural, carried at its designed lightness. */
  --ink-950: #0B0C0E; /** Base ground. Powers bg.base. Identity anchor, not solved. */
  --ink-990: #060709; /** Sunken ground, one perceptual step below base. Powers bg.sunken for terminal, log, and call-tail surfaces. Generated to match the depth of the deepest terminal ground used across the fourteen explorations, keeping the cool ink hue. */
  --ink-000: #FFFFFF; /** Powers text.primary and bg.inverted. Lc 106 against base. Identity anchor. */
  --red-300: #FF8A78; /** Alert type. Powers status.alert. Lc 59 against base, content floor. Type stop. Optional nudge to #FF907D reaches Lc 61 if every content stop must strictly clear 60. */
  --red-500: #FF3131; /** Brand red. Powers brand. Lc 41 against base, a fill contrast, not a type contrast. Fill only, never type. Identity anchor. */
  --blue-300: #7FAEFF; /** Link on dark. Powers link. Lc 60 against base, content floor. Type stop. */
  --blue-500: #3D7BFF; /** Interactive blue. Powers interactive. Lc 38 against base, a fill contrast, not a type contrast. Fill only, never type. Identity anchor. */
  --blue-700: #2148E0; /** Link on paper. Powers link.on-paper. Lc 88 against white, well above the 75 body floor. Used only on bg.inverted. */
  --yellow-500: #FFD426; /** Progress yellow. Powers status.progress. Lc 83 against base. Identity anchor. Loud, use sparingly. */
  --scrim: rgba(11, 12, 14, 0.86); /** Overlay scrim. Composes bg.base at opacity.5. Sticky-edge fades and modal grounds. Precomputed from a colour and an opacity step; see README. */
  --focus-ring: rgba(61, 123, 255, 0.30); /** Focus glow. Composes interactive at opacity.3. */
  --fill-brand: rgba(255, 49, 49, 0.06); /** Faint brand tint. Composes brand at opacity.1. Chip and badge grounds. */
  --fill-interactive: rgba(61, 123, 255, 0.06); /** Faint interactive tint. Composes interactive at opacity.1. Selection and hover grounds. */
  --duration-120: 120ms; /** Micro. Hover tints, small state flips. */
  --duration-180: 180ms; /** Control. Buttons, links, focusable controls. */
  --duration-300: 300ms; /** Card. Panel and card transitions. Corrects the old spec's 240ms, which ran in no exploration; the real cluster was .28 to .32s. */
  --duration-500: 500ms; /** Reveal. Scroll reveals and the headline entrance. Corrects the old spec's 520ms, which ran nowhere; .5s ran in ten files. */
  --duration-800: 800ms; /** Entrance. The long headline entrances, .7 to .82s in the sprint, previously unnamed. */
  --easing-standard: cubic-bezier(0.2, 0.7, 0.3, 1); /** House ease out, enter and settle. The curve on the live console; the sprint pages used bare ease, which was the drift. */
  --easing-linear: linear; /** Continuous loops, sweeps, progress. Used in nine files. */
  --easing-symmetric: ease-in-out; /** Pulses and breathing that return to origin. Used in nine files. */
  --dur-pulse: 1400ms; /** STATE PULSE, a separate band between the transition scale (120 to 800ms, one shot) and the ambient scale (24 to 60s, background life). A 1.2 to 1.6s heartbeat for a status lamp that must be noticed: saving, busy, error. Pair with easing.symmetric, which returns to origin, and gate it with prefers-reduced-motion. Never animate a control with this (that is the transition scale) and never set background life with it (that is ambient). First needed by 2eightz-docs, which stood it in as --pulse-dur; the landing's marquee-dur before the ambient scale was the same pattern. */
  --ambient-slow: 60s; /** AMBIENT LOOP, not a transition. Slowest peripheral motion: a long marquee, a drifting field. Never use to animate a control; the transition scale (120 to 800ms) is for that. */
  --ambient-medium: 40s; /** AMBIENT LOOP. The default continuous loop, a scroller row or a slow sweep. */
  --ambient-fast: 24s; /** AMBIENT LOOP. A quicker peripheral loop where 40s reads as static. */
  --opacity-1: 0.06; /** Faint tint. Absorbs observed alphas .015 to .08. Used by fill-brand and fill-interactive. */
  --opacity-2: 0.14; /** Subtle fill. Absorbs .10 to .16. */
  --opacity-3: 0.3; /** Visible veil, focus. Absorbs .28 to .45. Used by focus-ring. */
  --opacity-4: 0.55; /** Scrim. Absorbs .50 to .72. */
  --opacity-5: 0.86; /** Heavy scrim. Absorbs .86 to .94. Used by scrim. */
  --space-2: 2px; /** Half step. Hairline gaps. */
  --space-4: 4px; /** Base unit. */
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px; /** The most common spacing in the explorations. The old ad hoc 14px snaps here. */
  --space-20: 20px;
  --space-24: 24px;
  --space-32: 32px;
  --space-40: 40px;
  --space-48: 48px;
  --space-64: 64px; /** Top of the fixed scale. Larger section rhythm stays fluid with clamp() and uses this as its floor. */
  --font-stack-sans: 'Archivo', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; /** Sans primitive stack. Archivo, the chosen display and body face. */
  --font-stack-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace; /** Mono primitive stack. IBM Plex Mono, the chosen mono face. */
  --size-label: 0.6875rem; /** 11px. Mono labels, readouts, metadata. */
  --size-caption: 0.8125rem; /** 13px. Fine print, captions. */
  --size-body: 1rem; /** 16px. Running copy. */
  --size-lede: 1.125rem; /** 18px. Lede and emphasis. */
  --size-h3: clamp(1.25rem, 2vw, 1.5rem); /** Small headings, fluid 20 to 24px. */
  --size-h2: clamp(1.75rem, 3.5vw, 2.5rem); /** Section headings, fluid 28 to 40px. */
  --size-h1: clamp(2.5rem, 6vw, 4rem); /** Page headings, fluid 40 to 64px. */
  --size-display: clamp(3.25rem, 8vw, 6.5rem); /** Hero display, fluid 52 to 104px. */
  --weight-regular: 400; /** Body. */
  --weight-medium: 500; /** Mono labels, subtle emphasis. */
  --weight-semibold: 600; /** Small headings, strong body. */
  --weight-bold: 700; /** Section headings. */
  --weight-display: 800; /** Display and hero. The heaviest weight used; 900 was an extraction over-reach and is not tokenised. */
  --leading-display: 0.95; /** Display and hero, tight. */
  --leading-tight: 1.1; /** Headings. */
  --leading-body: 1.5; /** Running copy. */
  --leading-relaxed: 1.62; /** Long-form body. */
  --tracking-display: -0.02em; /** Display and hero. Inside the observed range of -0.01 to -0.02; the guidelines' -0.035em was barely used in practice. */
  --tracking-tight: -0.01em; /** Headings. */
  --tracking-normal: 0; /** Body. */
  --tracking-label: 0.16em; /** Mono uppercase labels, wide tracking. */
  --bg-base: var(--ink-950); /** Page ground. */
  --bg-sunken: var(--ink-990); /** Deeper ground for terminal, log, and call-tail surfaces. */
  --bg-raised: var(--ink-900); /** Cards, panels, table bodies. */
  --bg-lifted: var(--ink-800); /** A panel on a panel, hover raise. */
  --bg-inverted: var(--ink-000); /** Paper. Tags, plates, inverted sections, Satori and print output. Type on this surface uses the on-inverted roles, not the dark-first text roles. */
  --border: var(--ink-700); /** Default 1px rule, near universal in the explorations. */
  --border-strong: var(--ink-600); /** Hot, hover, or active rule. */
  --text-primary: var(--ink-000); /** Headlines, emphasis, maximum contrast. */
  --text-body: var(--ink-200); /** Running copy. Lc 75 against base. */
  --text-secondary: var(--ink-300); /** Supporting copy, descriptions. Lc 60 against base. */
  --text-muted: var(--ink-400); /** LABEL ONLY. Mono labels, timestamps, metadata, lamp text. Lc 42 against base, below the Lc 75 body floor. Never set running copy in this. Reading the name alone, reach for text-secondary or text-body for prose. */
  --brand: var(--red-500); /** The mark, identity fills, brand surfaces. TWO LAYERS. On the brand layer (landing pages, decks, the mark) it carries the page at display scale: the wordmark and the hero headline may be set in brand red, because large display clears contrast and red is the identity. In the product layer (console, tools, dashboards) it is FILL ONLY, never type; alert type uses status.alert. Interactive type is never brand red on either layer; that is link on dark or link-on-inverted on paper. See README, dark-first and the two layers. */
  --interactive: var(--blue-500); /** Button fills, focus rings, selection. FILL ONLY, never type; interactive type uses link on dark or link-on-inverted on paper. */
  --link: var(--blue-300); /** Links and interactive type on dark surfaces. */
  --text-primary-on-inverted: var(--ink-950); /** Headlines and emphasis on bg-inverted (paper). ink.950 measures Lc 108 on white, maximum. INVERTED SUBSET: the system is dark-first; only this named subset has on-inverted roles, most roles have no inverted twin. See README. */
  --text-body-on-inverted: var(--ink-600); /** Running copy on paper. ink.600 measures Lc 99 on white, clearing the 75 body floor. The kept ramp has no stop near 75 on its dark side (ink.400 is Lc 65 on white, under floor), so paper body runs higher contrast than dark body. INVERTED SUBSET. */
  --text-muted-on-inverted: var(--ink-300); /** LABEL ONLY on paper. ink.300 measures Lc 49 on white, a label band below body. Never running copy. INVERTED SUBSET. */
  --border-on-inverted: var(--ink-200); /** Hairline rule on paper. ink.200 measures Lc 32 on white, a light rule. INVERTED SUBSET. */
  --link-on-inverted: var(--blue-700); /** Links and interactive type on paper. blue.700 measures Lc 88 on white, above the body floor. This is the interactive.text.on-inverted role, renamed from link-on-paper so the inverted subset shares one suffix. INVERTED SUBSET. */
  --status-live: var(--ink-000); /** Running, shipped, nominal, complete. A lit lamp. There is no green; live is white. */
  --status-progress: var(--yellow-500); /** Building, pending, unsaved, needs review. */
  --status-alert: var(--red-300); /** Failed, blocked, destructive. */
  --status-idle: var(--ink-400); /** Registered, not started, archived, watching, and killed. Killed is a resting state reached by decision, so it reads grey and idle, not red. */
  --status-shared: var(--blue-300); /** Shared with a named group: the middle visibility rung between private (status-idle, grey) and public (status-live, white). Its own role, not an alias of link, so a visibility lamp and a link can diverge even though both resolve to blue.300 today. Blue already carries inside, you can act in this system, and this is a type stop, not a fill, so it can be read as a label; blue.300 meets the Lc 60 content floor on base and reads clearly between grey and white. Visibility is an access state, not a lifecycle status, but it is grouped with the status roles because the visibility lamp draws all three of its states from here. First needed by 2eightz-docs, which stood it in as --vis-members over var(--link); see README, when you need a token the system does not have. NAMING: the product calls this state members; the token is named shared for the general concept. A future session hunting for a members visibility colour should land here, so the mapping is stated rather than left to guess that the token is unused. */
  --ease: var(--easing-standard); /** Default easing alias. Reach for this. */
  --dur-control: var(--duration-180); /** Default control transition. */
  --dur-reveal: var(--duration-500); /** Default reveal transition. */
  --font-display: var(--font-stack-sans); /** Display and headings. Archivo. The swap point closed on 2026-08-09: the incumbent won across two specimen sheets on the sustained reading and room index tests. Still the swap point if a display face is ever rechosen, but it is a decision now, not a default. */
  --font-body: var(--font-stack-sans); /** Running copy. Archivo, the same face as display, chosen 2026-08-09. Split from display here if the two ever diverge. */
  --font-mono: var(--font-stack-mono); /** Labels, data, readouts. IBM Plex Mono, chosen 2026-08-09. */
}
