/*
  tokens.css — the ONLY file in this project allowed to contain color
  literals (hex / rgb / hsl). Every other stylesheet must reference these
  custom properties instead of writing a literal color.

  PALETTE RULE: every color below is either (a) neutral gray, R=G=B, or
  (b) sampled from the real brand assets with recorded provenance. No
  invented hues. See the provenance block before each sampled group.
*/

:root {
  /* ---------------------------------------------------------------
     Neutral ramp — UI chrome, text, borders. R=G=B on every stop.
     --gray-1000 is the sampled brand background (see below); the rest
     of the ramp is derived from it at even steps for interface use.
     --------------------------------------------------------------- */
  --gray-1000: #090909;
  --gray-950: #0c0c0c;
  --gray-900: #101010;
  --gray-850: #151515;
  --gray-800: #1a1a1a;
  --gray-700: #262626;
  --gray-600: #323232;
  --gray-500: #575757;
  --gray-450: #6e6e6e;
  --gray-400: #7d7d7d;
  --gray-300: #9e9e9e;
  --gray-200: #c6c6c6;
  --gray-100: #e7e7e7;
  --gray-50: #f5f5f5;
  --white: #ffffff;
  --black: #000000;

  /* ---------------------------------------------------------------
     PROVENANCE — sampled 2026-09-29 from brand/LOGO AUTONOMOUS PNG.png
     (2000x2000, PNG colortype 6 / truecolor+alpha, bit depth 8, fully
     opaque flattened lockup on its native backdrop):
       k-means (k=6, opaque-only) cluster 1 → 94.12% of pixels,
       centroid (9,9,9), snapped to real pixel (0,0) = #090909.
     That value is --gray-1000 / --bg above (chroma 0, so it also
     satisfies the old achromatic rule — it just happens to be real).

     Brand blue — sampled from brand/LOGO AUTONOMOUS PNG...png (2000x2000,
     colortype 6, mostly alpha=0; verified zero-alpha pixels are pure
     black (0,0,0) — no stray-color premultiplication fringing risk, so
     derived raster assets use a premultiplied-alpha resize; see
     scripts/build.mjs comments / src/assets/icon-*.png provenance).
     k-means (k=6) over the 2295 sampled opaque pixels, each stop
     snapped to its nearest real pixel:
       cluster → weight  → pixel      → hex
       1       → 20.87%  → (1059,971) → #034ae4  (deepest)
       2       → 30.24%  → (850,936)  → #0e63f8  (dominant / primary)
       3       → 16.38%  → (1089,711) → #2a7ffa
       4       → 13.51%  → (1047,685) → #499af9
       5       →  9.93%  → (998,674)  → #6cb5f9
       6       →  9.06%  → (923,699)  → #8dcdf9  (lightest highlight)
     --------------------------------------------------------------- */
  --brand-blue-600: #034ae4;
  --brand-blue-500: #0e63f8;
  --brand-blue-400: #2a7ffa;
  --brand-blue-300: #499af9;
  --brand-blue-200: #6cb5f9;
  --brand-blue-100: #8dcdf9;

  /* Semantic surface + text */
  --bg: var(--gray-1000);
  --bg-elevated: var(--gray-950);
  --surface: var(--gray-900);
  --surface-raised: var(--gray-850);
  --surface-hover: var(--gray-800);
  --border: var(--gray-700);
  --border-strong: var(--gray-600);
  --border-hairline: rgba(245, 245, 245, 0.08);

  --text: var(--gray-50);
  --text-muted: var(--gray-300);
  --text-dim: var(--gray-400);
  --text-faint: var(--gray-500);

  /* Emphasis / accent — the real brand blue, used for interactive and
     "live/verified" states. Neutral gray still means inert/unconfirmed;
     brand blue means active, stated, or live — a semantic pairing with
     the register (see components.css .ca-state-dot, .pulse-dot). */
  --accent: var(--brand-blue-500);
  --accent-strong: var(--brand-blue-600);
  --accent-dim: var(--brand-blue-100);
  --inert: var(--gray-500);
  --inert-border: var(--gray-600);

  /* Glow + overlay washes — brand blue at low alpha for interactive
     glow, neutral for generic scrims. */
  --glow-soft: rgba(14, 99, 248, 0.1);
  --glow-medium: rgba(14, 99, 248, 0.18);
  --glow-strong: rgba(14, 99, 248, 0.3);
  --scrim: rgba(9, 9, 9, 0.72);
  --shadow-elevated: rgba(0, 0, 0, 0.6);
  --hairline-on-dark: rgba(255, 255, 255, 0.1);
  /* Decorative grid line for the hero scene floor — derived from
     --brand-blue-500 at low alpha, not an independently sampled color. */
  --grid-line: rgba(14, 99, 248, 0.16);

  /* Motion */
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --dur-fast: 160ms;
  --dur-base: 320ms;
  --dur-slow: 620ms;

  /* Radius + spacing scale */
  --radius-sm: 10px;
  --radius-md: 16px;
  --radius-lg: 24px;
  --radius-pill: 999px;
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-9: 96px;

  --tap-min: 48px;
  --content-max: 1180px;
}

@media (prefers-color-scheme: light) {
  /* The product is designed dark-first; light system preference does not
     change tokens yet (no light theme has been specified). Reserved. */
}
