/* nova-tokens.css — R0 design-token foundation
 *
 * NOVA visual redesign R0 (Mahir directive, 2026-05-27,
 * UI_REDESIGN_AND_ALIVE_DIRECTIVE.md). Aesthetic = "living-minimal +
 * neon-glassmorphism COMBINED" — near-black canvas, motion-driven life,
 * frosted-glass depth, one cyan pulse + magenta edge accents. Stack-
 * agnostic: consumed by the live HTML pages today and by the Svelte
 * migration (laptop/web/) when it resumes.
 *
 * NAMESPACE: every token is prefixed --nova-* so it cannot collide with
 * existing inline :root tokens on legacy pages (landing.html --bg/--cyan,
 * digital_twin.html --bg/--primary, etc.). R0 changes NOTHING visually;
 * R1+ components opt in by consuming --nova-* explicitly.
 */
:root {
  /* Palette — near-black canvas ramp + cyan primary + magenta secondary edge */
  --nova-bg-0: #05060a;
  --nova-bg-1: #0a0c12;
  --nova-bg-2: #11141d;
  --nova-bg-3: #1a1e2a;
  --nova-text-1: #e6ecf3;
  --nova-text-2: #aab4c2;
  --nova-text-3: #6b7588;
  --nova-pulse: #22d3ee;          /* primary accent: cyan pulse */
  --nova-pulse-soft: #22d3ee33;   /* 20% alpha for halos / breathing */
  --nova-edge: #d946ef;           /* secondary accent: magenta edge */
  --nova-edge-soft: #d946ef33;

  /* Glass-surface tokens — frosted depth panels */
  --nova-glass-bg: rgba(20, 24, 34, 0.55);
  --nova-glass-bg-strong: rgba(20, 24, 34, 0.78);
  --nova-glass-border: rgba(255, 255, 255, 0.08);
  --nova-glass-border-accent: rgba(34, 211, 238, 0.28);
  --nova-blur-sm: blur(8px);
  --nova-blur-md: blur(16px);
  --nova-blur-lg: blur(28px);

  /* Motion tokens — durations + easings for breathe / drift / pulse */
  --nova-motion-breathe: 4200ms;
  --nova-motion-drift: 12000ms;
  --nova-motion-pulse: 1400ms;
  --nova-ease-breathe: cubic-bezier(0.4, 0, 0.2, 1);
  --nova-ease-drift: cubic-bezier(0.65, 0, 0.35, 1);

  /* Radius scale — bottom-out at 0, top-out at full pill */
  --nova-radius-xs: 4px;
  --nova-radius-sm: 8px;
  --nova-radius-md: 14px;
  --nova-radius-lg: 22px;
  --nova-radius-pill: 999px;

  /* Spacing scale — 8px base grid */
  --nova-space-1: 4px;
  --nova-space-2: 8px;
  --nova-space-3: 12px;
  --nova-space-4: 16px;
  --nova-space-5: 24px;
  --nova-space-6: 32px;
  --nova-space-7: 48px;
  --nova-space-8: 64px;

  /* Typography scale — system-stack first, modular 1.25 ramp, opt-in
   * for R1+ consumers. Stack-agnostic (no @import / no Google Fonts
   * fetch — purely declarative). R0 still ships zero visual change;
   * the R1 living-minimal-core slug + a follow-up per-page adoption
   * slug will be the first consumers. */
  --nova-font-sans: -apple-system, BlinkMacSystemFont, 'Inter', 'SF Pro Text', 'Segoe UI', system-ui, sans-serif;
  --nova-font-mono: ui-monospace, SFMono-Regular, 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  --nova-text-size-xs: 11px;
  --nova-text-size-sm: 13px;
  --nova-text-size-base: 15px;
  --nova-text-size-lg: 18px;
  --nova-text-size-xl: 22px;
  --nova-text-size-2xl: 28px;
  --nova-text-size-3xl: 36px;
  --nova-text-size-display: 48px;
  --nova-line-tight: 1.2;
  --nova-line-normal: 1.5;
  --nova-line-relaxed: 1.75;
  --nova-weight-regular: 400;
  --nova-weight-medium: 500;
  --nova-weight-semibold: 600;
  --nova-weight-bold: 700;
  --nova-letter-tight: -0.01em;
  --nova-letter-normal: 0;
  --nova-letter-wide: 0.02em;

  /* Elevation scale — box-shadow ramp for the frosted-glass depth axis
   * of R0 (UI_REDESIGN_AND_ALIVE_DIRECTIVE.md, 2026-05-27). Five outer
   * steps (none → sm → md → lg → glow accent) + one inset for inner-
   * panel recesses. The cyan-tinted `glow` step is the one-cyan-pulse
   * accent rule applied to elevation; magenta edge stays a border
   * accent, not a shadow. R0 ships zero visual change; R1 living-
   * minimal core + R2 glass-depth panels are the first consumers. */
  --nova-elevation-none: none;
  --nova-elevation-sm: 0 1px 2px rgba(0, 0, 0, 0.30);
  --nova-elevation-md: 0 4px 12px rgba(0, 0, 0, 0.40);
  --nova-elevation-lg: 0 12px 32px rgba(0, 0, 0, 0.55);
  --nova-elevation-glow: 0 0 24px rgba(34, 211, 238, 0.28);
  --nova-elevation-inset: inset 0 1px 0 rgba(255, 255, 255, 0.06);

  /* Z-index scale — the layering axis of R0 (UI_REDESIGN_AND_ALIVE_DIRECTIVE.md,
   * 2026-05-27). A single source of truth for stacking order so R1+ glass
   * panels, overlays, the proactive toast cards, and modals layer predictably
   * instead of hand-picking magic integers. Namespaced --nova-z-* per the file
   * NAMESPACE rule (cannot collide with legacy inline :root tokens). R0 ships
   * zero visual change — opt-in; nothing consumes these yet. */
  --nova-z-base: 0;
  --nova-z-raised: 10;
  --nova-z-dropdown: 100;
  --nova-z-sticky: 200;
  --nova-z-overlay: 300;
  --nova-z-modal: 400;
  --nova-z-toast: 500;
  --nova-z-max: 2147483647;

  /* Interaction-state + focus tokens — the feedback axis of R0
   * (UI_REDESIGN_AND_ALIVE_DIRECTIVE.md, 2026-05-27). Hover / active /
   * selected / disabled state layers + a single accessible focus-ring, so
   * R1 living-minimal controls share one source of truth for interaction
   * feedback instead of hand-picking per-component values. The cyan focus-
   * ring reuses the --nova-pulse cyan (34,211,238); neutral state layers
   * reuse the white-alpha pattern of --nova-glass-border. Namespaced --nova-*
   * per the file NAMESPACE rule. R0 ships zero visual change — opt-in;
   * nothing consumes these yet. */
  --nova-state-hover-bg: rgba(255, 255, 255, 0.06);
  --nova-state-active-bg: rgba(255, 255, 255, 0.10);
  --nova-state-selected-bg: rgba(34, 211, 238, 0.14);
  --nova-state-disabled-opacity: 0.45;
  --nova-focus-ring: 0 0 0 2px rgba(34, 211, 238, 0.55);
  --nova-focus-ring-offset: 0 0 0 4px rgba(34, 211, 238, 0.18);

  /* UI-control transition timing — the interaction-timing axis of R0
   * (UI_REDESIGN_AND_ALIVE_DIRECTIVE.md, 2026-05-27). Distinct from the
   * ambient --nova-motion-* loops (breathe / drift / pulse): these are the
   * SHORT durations + easings interactive controls use to animate between the
   * interaction-state layers added in #68 (hover / active / selected / focus).
   * --nova-ease-standard reuses the same curve as --nova-ease-breathe (the
   * standard ease) under a control-semantic name. Namespaced --nova-* per the
   * file NAMESPACE rule. R0 ships zero visual change — opt-in; nothing consumes
   * these yet; R1 living-minimal controls will. */
  --nova-transition-instant: 80ms;
  --nova-transition-fast: 140ms;
  --nova-transition-base: 220ms;
  --nova-transition-slow: 360ms;
  --nova-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --nova-ease-decelerate: cubic-bezier(0, 0, 0.2, 1);
  --nova-ease-accelerate: cubic-bezier(0.4, 0, 1, 1);
}
