/* GENERATED by tools/build-tokens.sh — edit the layer files, not this. v0.3.0 */
/*
 * NEXPLEXUS Design Tokens — Layer 1: Primitives
 * THE single brand-swap point. A future brand lock (e.g. Ink & Champagne
 * navy #0B1B30, or the 3rd direction) edits values HERE only.
 * Consumers never reference these directly — use the semantic layer
 * bound by nx-theme-*.css (--nx-bg, --nx-surface-*, --nx-accent, ...).
 */
:root {
  /* ── Ink family (warm near-black) ─────────────────────────── */
  --nx-ink-0: #0A0D14;
  --nx-ink-1: #10141D;
  --nx-ink-2: #161B26;
  --nx-ink-3: #1E2430;
  --nx-hairline: #262B36;
  --nx-hairline-strong: #323949;

  /* ── Champagne family ─────────────────────────────────────── */
  --nx-champagne: #C8A87C;
  --nx-champagne-hi: #E2CFA8;
  --nx-champagne-deep: #8B7355;

  /* ── Paper (editorial light contexts) ─────────────────────── */
  --nx-paper: #F5F0EB;
  --nx-paper-1: #EDE6DD;

  /* ── Reserved status ──────────────────────────────────────── */
  /* on-air: live / armed / recording ONLY. Never decorative, never
   * color alone — always shape + pulse (war room kill-condition).
   * #FF9F1C (not #FFB021) keeps it separable from --nx-warn. */
  --nx-onair: #FF9F1C;
  /* LOCKED by war room 2026-07-11: all verified ≥4.5:1 on ink-1 as text */
  --nx-ok: #34D399;
  /* warn shifted yellow (amber-300) so on-air owns the orange-amber band */
  --nx-warn: #FCD34D;
  --nx-danger: #F87171;
  --nx-info: #60A5FA;

  /* ── Division accents (lifted from nexplexus.com @theme) ──── */
  --nx-division-creative: #F97316;
  --nx-division-realestate: #0D9488;
  --nx-division-live: #FF4D4D;
  --nx-division-digital: #00D4FF;
  --nx-division-studios: #A855F7;
  --nx-division-sports: #22C55E;
  --nx-division-technology: #F59E0B;
  --nx-division-capital: #3B82F6;

  /* ── Typefaces (stable internal names; faces swap in nx-fonts) ─ */
  /* LOCKED 2026-07-11: NX Display = Fraunces (wght 340/580, never <20px,
   * never in dense data views); NX Sans = Geist; NX Mono = JetBrains Mono. */
  --nx-font-display: "NX Display", Georgia, "Times New Roman", serif;
  --nx-font-sans: "NX Sans", system-ui, -apple-system, sans-serif;
  --nx-font-mono: "NX Mono", ui-monospace, "SF Mono", monospace;

  /* ── Type ramp (workshop: 12/13/14/16/18/22 px; lh 1.4 body, 1.1 display) ── */
  --nx-text-xs: 0.75rem;
  --nx-text-s: 0.8125rem;
  --nx-text-m: 0.875rem; /* Control Room body */
  --nx-text-base: 1rem; /* Marquee body — 16px step restored per synthesis §Adopted */
  --nx-text-l: 1.125rem;
  --nx-text-xl: 1.375rem;
  --nx-display-s: clamp(1.75rem, 1.2rem + 2vw, 2.5rem);
  --nx-display-m: clamp(2.25rem, 1.5rem + 3.5vw, 4rem);
  --nx-display-l: clamp(3rem, 2rem + 5vw, 5.5rem);
  --nx-display-xl: clamp(3.5rem, 2rem + 7vw, 7.5rem);
  /* Tracking registers — one token per job (v0.3.0 split; 0.18em everywhere
   * read luxury-fashion, not infrastructure) */
  --nx-tracking-eyebrow: 0.12em; /* Marquee editorial eyebrow */
  --nx-tracking-label: 0.04em; /* Control Room data labels / table th */
  --nx-tracking-cta: 0.08em; /* pill CTA */
  --nx-tracking-timecode: 0.06em;
  /* Display voice — taut cut. Axes fill Slot 1's open axis sub-slot
   * (faces/weights unchanged from the 2026-07-11 lock). */
  --nx-leading-display: 1.0;
  --nx-leading-body: 1.4;
  --nx-tracking-display: -0.011em; /* optical for Fraunces @ opsz 144, not noth.in's −0.01 */
  --nx-display-axes: "opsz" 144, "SOFT" 0, "WONK" 0;

  /* ── Space scale (4px base) ────────────────────────────────── */
  /* [CREATIVE SLOT 3: base unit + Control Room density multiplier] */
  --nx-space-1: 0.25rem;
  --nx-space-2: 0.5rem;
  --nx-space-3: 0.75rem;
  --nx-space-4: 1rem;
  --nx-space-6: 1.5rem;
  --nx-space-8: 2rem;
  --nx-space-12: 3rem;
  --nx-space-16: 4rem;
  --nx-space-24: 6rem;
  --nx-space-32: 8rem;
  --nx-space-48: 12rem;
  /* Marquee section rhythm — whitespace-is-the-layout tokens. Marquee ONLY:
   * Control Room keeps density 0.75; an ops console that adds air shows
   * fewer rows, and rows are the product. */
  --nx-section: clamp(6rem, 10vw, 12rem);
  --nx-section-tight: clamp(3rem, 5vw, 6rem);
  /* Hairline discipline: dividers are 1px, never thicker. A thick rule is
   * a decoration. */
  --nx-hairline-w: 1px;

  /* ── Radius (workshop: Marquee 12 / Control Room 4) ───────── */
  --nx-radius-s: 4px;
  --nx-radius-m: 12px;
  --nx-radius-l: 16px;
  --nx-radius-pill: 999px;

  /* ── Motion (workshop: 120 micro / 200 standard / 280 entrance;
   *    Control Room hard-capped at --nx-dur-fast, state-change only) ── */
  --nx-dur-fast: 120ms;
  --nx-dur-med: 200ms;
  --nx-dur-slow: 280ms;
  --nx-ease-out: cubic-bezier(0.22, 1, 0.36, 1);

  /* ── Motion — Layer 2: nx-motion extensions (additive, v0.3.0) ──────
   * Built on --nx-dur-fast/med/slow + --nx-ease-out; never redefine those.
   * Marquee: full vocabulary. Control Room: state-change only at
   * --nx-dur-fast — MUST NOT reference the tokens below.
   * Entrance/scene are for choreographed reveals only, never for
   * hover/focus/toggle (those stay on fast/med/slow). */
  --nx-dur-entrance: 360ms; /* single-element reveal */
  --nx-dur-scene: 480ms; /* page/section-level transition */
  --nx-stagger-step: 60ms; /* delay between siblings in a reveal group */
  --nx-stagger-max-items: 8; /* beyond this, batch — no 20-item cascades */
  --nx-reveal-distance: 12px; /* reveal travel. Small. Editorial, not theatrical. */
  --nx-ease-scene: cubic-bezier(0.65, 0, 0.35, 1); /* symmetric, page swaps */
  --nx-ease-emphasis: cubic-bezier(0.34, 1.56, 0.64, 1); /* slight overshoot, CTA-only */
}
/*
 * NEXPLEXUS — Theme: MARQUEE (public / client surfaces)
 * Editorial serif display, champagne-on-ink, generous whitespace.
 * Scope: whole app via <html data-nx-theme="marquee">,
 * or a subtree via class .nx-theme-marquee.
 */
:root[data-nx-theme="marquee"],
.nx-theme-marquee {
  --nx-bg: var(--nx-ink-0);
  --nx-surface-1: var(--nx-ink-1);
  --nx-surface-2: var(--nx-ink-2);
  --nx-surface-3: var(--nx-ink-3);
  --nx-line: var(--nx-hairline);
  --nx-line-strong: var(--nx-hairline-strong);

  --nx-text: var(--nx-paper);
  /* ≈5.2:1 on ink-0 — WCAG AA. Was #6B6560 (≈3.4:1, failed AA); guarded by
   * check-gates Gate 4. */
  --nx-text-muted: #8A837B;
  --nx-text-faint: #3D3A37; /* decorative/disabled ONLY — never running text */

  --nx-accent: var(--nx-champagne);
  --nx-accent-hi: var(--nx-champagne-hi);
  --nx-accent-deep: var(--nx-champagne-deep);

  --nx-status-live: var(--nx-onair);
  --nx-status-ok: var(--nx-ok);
  --nx-status-warn: var(--nx-warn);
  --nx-status-danger: var(--nx-danger);
  --nx-status-info: var(--nx-info);

  --nx-focus: var(--nx-champagne-hi);
  --nx-selection: color-mix(in srgb, var(--nx-accent) 28%, transparent);

  --nx-radius: var(--nx-radius-m);
  --nx-density: 1;

  color-scheme: dark;
}

/* Paper context — light editorial sections inside Marquee
 * (decks, Coast Collectors, print-adjacent moments).
 * [CREATIVE SLOT 8: paper-context rules] */
[data-nx-theme="marquee"] .nx-context-paper,
.nx-theme-marquee .nx-context-paper {
  --nx-bg: var(--nx-paper);
  --nx-surface-1: var(--nx-paper-1);
  --nx-surface-2: #E4DCD1;
  --nx-surface-3: #DAD1C4;
  --nx-line: #D8CFC2;
  --nx-line-strong: #C4B9A9;
  --nx-text: var(--nx-ink-0);
  --nx-text-muted: #5C564E;
  --nx-text-faint: #948C80;
  --nx-accent: var(--nx-champagne-deep);
  --nx-accent-hi: var(--nx-champagne);
  color-scheme: light;
  background: var(--nx-bg);
  color: var(--nx-text);
}
/*
 * NEXPLEXUS — Theme: CONTROL ROOM (internal ops)
 * Dense, dark, mono timecode, on-air amber status semantics.
 * Scope: whole app via <html data-nx-theme="controlroom">,
 * or a subtree via class .nx-theme-controlroom.
 */
:root[data-nx-theme="controlroom"],
.nx-theme-controlroom {
  --nx-bg: var(--nx-ink-0);
  --nx-surface-1: var(--nx-ink-1);
  --nx-surface-2: var(--nx-ink-2);
  --nx-surface-3: var(--nx-ink-3);
  --nx-line: var(--nx-hairline);
  --nx-line-strong: var(--nx-hairline-strong);

  --nx-text: #E7E2DA;
  --nx-text-muted: #8B857C;
  --nx-text-faint: #565149;

  --nx-accent: var(--nx-champagne);
  --nx-accent-hi: var(--nx-champagne-hi);
  --nx-accent-deep: var(--nx-champagne-deep);

  --nx-status-live: var(--nx-onair);
  --nx-status-ok: var(--nx-ok);
  --nx-status-warn: var(--nx-warn);
  --nx-status-danger: var(--nx-danger);
  --nx-status-info: var(--nx-info);

  --nx-focus: var(--nx-champagne-hi);
  --nx-selection: color-mix(in srgb, var(--nx-accent) 28%, transparent);

  --nx-radius: var(--nx-radius-s);
  --nx-density: 0.75; /* compact: multiply paddings by this (32px rows vs 44px) */

  color-scheme: dark;
}
