/* ============================================================
   FRONTLINE FORGE — DESIGN SYSTEM · TOKENS (candidate app)
   ------------------------------------------------------------
   The app's port of the marketing site's token layer
   (site/src/styles/tokens/*.css): VARIABLES only — no layout,
   no reset, no component rule. Light-only, multi-theme, exactly
   as on the site.

   Values are COPIED from the site, never re-invented: colors.css,
   typography.css, fonts.css, radius.css, shadows.css,
   spacing.css and motion.css are the source of truth. When the
   site moves, this file follows.

   PER-SPACE THEMING (ADR 0014)
   The site switches its track sub-themes with [data-theme] on a
   wrapper, decided by the page/route. The app has no routes: the
   Exam space decides, so the switch rides body[data-space],
   posted and removed by the single orchestrator applyActiveSpace
   in src/dashboard.js. Space -> theme mapping:
     asvab      -> general (cold steel)
     sift       -> sift    (olive)
     afoqt-tbas -> afoqt   (aviation gold)
     astb-e     -> astb    (navy blue)
   Outside any space (no data-space on body — e.g. the space
   choice screen for a fresh guest), the general theme applies.

   /!\ CSS RESOLUTION TRAP (learned from Pilote Militaire's
   pm-tokens.css l.15-18): a custom property resolves on the
   element where it is DECLARED, and children inherit the already
   substituted value. Every role that references a track variable
   (--accent*, --accent-on-ink*, --wash*, --text-accent,
   --border-accent, --focus-ring, --ring-focus, --glow-accent,
   --surface-wash, --border-wash) must be REDECLARED on body[data-space]
   — where the track variables exist — and not only on :root.
   Declaring them once on :root would freeze them on the general
   theme forever.
   ============================================================ */

/* ============================================================
   FONTS — self-hosted woff2, latin + latin-ext subsets.
   Copied from site/public/fonts/ into fonts/ at the app root;
   this file lives in css/, hence the ../fonts/ base.
   Space Grotesk = display face (600/700), Geist = body & UI
   (400/500/600/700), Geist Mono = numbers / stats (400/500).
   ============================================================ */

@font-face {
  /* latin-ext */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/geist-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/geist-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/geist-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/geist-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/geist-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/geist-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/geist-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/geist-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/geist-mono-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/geist-mono-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/geist-mono-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/geist-mono-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/space-grotesk-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/space-grotesk-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  /* latin-ext */
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/space-grotesk-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  /* latin */
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/space-grotesk-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ============================================================
   PRIMITIVES + SEMANTIC ALIASES (site/src/styles/tokens/colors.css)
   ============================================================ */

:root {
  color-scheme: light;

  /* ---- Cold neutrals / paper (near-white surfaces) ---- */
  --paper-0:   #FFFFFF;
  --paper-25:  #FBFCFD;   /* page background */
  --paper-50:  #F5F8FA;
  --paper-100: #EDF1F5;
  --slate-200: #DEE4EA;   /* light hairlines */
  --slate-300: #C4CCD5;
  --slate-400: #97A2AD;   /* faint text */
  --slate-500: #6B7682;
  --slate-600: #4B5763;   /* secondary text */
  --slate-700: #343E48;
  --white:     #FFFFFF;

  /* ---- Navy-ink (reads "almost black" — titles / structure) ---- */
  --navy-950: #091420;
  --navy-900: #0F1E2E;   /* primary INK */
  --navy-800: #152A3D;
  --navy-700: #1D384F;
  --navy-600: #284A66;

  /* ---- Cold steel / titanium (GENERAL theme accent) ---- */
  --steel-700: #234150;
  --steel-600: #2F5266;   /* general accent — AA 8.2:1 on white */
  --steel-500: #3C6275;
  --steel-400: #5E8499;
  --steel-100: #E6EDF1;

  /* ---- Raw per-track colours (AA accents on white) ---- */
  --afoqt-accent: #946B14;   /* aviation gold / deep amber — AA 4.9:1 */
  --afoqt-wash:   #F7EFD8;   /* cream / pale gold wash */
  --astb-accent:  #1C3D5A;   /* deep navy blue — AA 11:1 */
  --astb-wash:    #DCE8F3;   /* pale blue wash */
  --sift-accent:  #3E4F25;   /* olive / deep green — AA 8.7:1 */
  --sift-wash:    #E2E8D5;   /* pale khaki wash */

  /* ---- Muted statuses (AA fg on white + soft wash) ---- */
  --success:      #2E7D52;  --success-soft: #E7F3EC;
  --warning:      #8A6510;  --warning-soft: #FAF1DC;
  --danger:       #BC3B2C;  --danger-soft:  #FBE9E6;
  --info:         #2A6699;  --info-soft:    #E7F0F8;

  /* ---- Surfaces ---- */
  --surface-page:   var(--paper-25);
  --surface-raised: var(--paper-50);
  --surface-card:   var(--white);
  --surface-inset:  var(--paper-50);
  --surface-ink:    var(--navy-900);

  /* ---- Text (on light) ---- */
  --text-primary:   var(--navy-900);
  --text-secondary: #4B5763;
  --text-muted:     #79858F;
  --text-on-accent: #FFFFFF;

  /* ---- Text on navy ---- */
  --text-on-ink:           #EAF1F6;
  --text-on-ink-secondary: #A9BAC8;
  --text-on-ink-muted:     #7F92A2;

  /* ---- Borders / hairlines ---- */
  --border-subtle:  rgba(15, 30, 46, 0.08);
  --border-default: rgba(15, 30, 46, 0.12);
  --border-strong:  rgba(15, 30, 46, 0.20);
  --border-on-ink:  rgba(255, 255, 255, 0.16);

  /* ---- GENERAL THEME (default): steel on near-white ----
     Also the out-of-space fallback: a body without data-space
     keeps exactly these values. */
  --accent:        var(--steel-600);
  --accent-hover:  #284756;
  --accent-active: #203A47;
  --accent-soft:   rgba(47, 82, 102, 0.10);
  --wash:          #F1F5F8;
  --wash-border:   rgba(47, 82, 102, 0.14);
  --focus-ring:    rgba(47, 82, 102, 0.45);

  /* Roles derived from the accent — see the resolution trap above:
     these are redeclared on body[data-space]. */
  --text-accent:   var(--accent);
  --border-accent: var(--accent);
  --surface-wash:  var(--wash);
  --border-wash:   var(--wash-border);

  /* ---- ACCENT ON INK ----
     The dashboard's sidebar is the app's ink zone, and the accents
     above are tuned for AA on WHITE: navy on navy would vanish. The
     site solved this already — site/src/styles/tokens/colors.css
     l.146-167, [data-zone="ink"]: the accent keeps its hue and
     brightens. These are those exact values, copied like the rest of
     this file. (They happen to coincide with Pilote Militaire's
     on-dark track hues — the two design systems brighten the same
     base hues to the same place. The source of truth here is the
     FF site, not PM.)
     Default = general theme = brightened steel; redeclared on
     body[data-space] below, per the resolution trap. */
  --accent-on-ink:       var(--steel-400);
  --accent-on-ink-hover: #7497AC;
  --accent-on-ink-soft:  rgba(94, 132, 153, 0.16);
  --accent-on-ink-line:  rgba(94, 132, 153, 0.42);
}

/* ============================================================
   TYPOGRAPHY (site/src/styles/tokens/typography.css)
   ============================================================ */

:root {
  --font-display: 'Space Grotesk', 'Geist', system-ui, sans-serif;
  --font-sans:    'Geist', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono:    'Geist Mono', ui-monospace, 'SF Mono', Menlo, monospace;

  /* Display / heading sizes */
  --text-display: 5rem;     /* 80 — max */
  --text-h1: 3.25rem;       /* 52 */
  --text-h2: 2.5rem;        /* 40 */
  --text-h3: 1.625rem;      /* 26 */
  --text-h4: 1.25rem;       /* 20 */

  /* Body / UI sizes */
  --text-xs:   0.75rem;     /* 12 */
  --text-sm:   0.875rem;    /* 14 */
  --text-base: 1rem;        /* 16 */
  --text-md:   1.0625rem;   /* 17 — body */
  --text-lg:   1.1875rem;   /* 19 */
  --text-xl:   1.375rem;    /* 22 */

  /* Weights */
  --weight-regular:  400;
  --weight-medium:   500;
  --weight-semibold: 600;
  --weight-bold:     700;
  --weight-black:    800;

  /* Leading */
  --leading-tight:   1.05;
  --leading-snug:    1.18;
  --leading-normal:  1.5;
  --leading-relaxed: 1.65;

  /* Tracking */
  --tracking-display: -0.02em;
  --tracking-tight:   -0.012em;
  --tracking-normal:  0;
  --tracking-wide:    0.04em;
  --tracking-label:   0.16em;    /* UPPERCASE eyebrows / labels */
}

/* ============================================================
   RADIUS (site/src/styles/tokens/radius.css)
   ============================================================ */

:root {
  --radius-xs:   3px;
  --radius-sm:   6px;
  --radius-md:   10px;   /* buttons, inputs */
  --radius-lg:   16px;   /* cards */
  --radius-xl:   24px;   /* large panels */
  --radius-2xl:  32px;
  --radius-pill: 999px;  /* badges / tags only */
  --radius-full: 50%;
}

/* ============================================================
   SPACING (site/src/styles/tokens/spacing.css)
   ============================================================ */

:root {
  --space-0:  0;
  --space-1:  0.25rem;  /* 4  */
  --space-2:  0.5rem;   /* 8  */
  --space-3:  0.75rem;  /* 12 */
  --space-4:  1rem;     /* 16 */
  --space-5:  1.25rem;  /* 20 */
  --space-6:  1.5rem;   /* 24 */
  --space-8:  2rem;     /* 32 */
  --space-10: 2.5rem;   /* 40 */
  --space-12: 3rem;     /* 48 */
  --space-16: 4rem;     /* 64 */
  --space-20: 5rem;     /* 80 */
  --space-24: 6rem;     /* 96 */
  --space-32: 8rem;     /* 128 */

  --container-max:    1240px;
  --container-narrow: 760px;
  --gutter:    clamp(1.25rem, 4vw, 4rem);
  --section-y: clamp(4rem, 8vw, 8rem);
}

/* ============================================================
   ELEVATION (site/src/styles/tokens/shadows.css)
   ============================================================ */

:root {
  --shadow-sm: 0 1px 2px rgba(15, 30, 46, 0.06);
  --shadow-md: 0 8px 24px rgba(15, 30, 46, 0.09);
  --shadow-lg: 0 24px 60px rgba(15, 30, 46, 0.12);
  --shadow-xl: 0 40px 90px rgba(15, 30, 46, 0.16);
  --shadow-ink: 0 24px 60px rgba(0, 0, 0, 0.40);

  /* Accent-derived — redeclared on body[data-space] (resolution trap). */
  --glow-accent: 0 10px 30px var(--accent-soft);
  --ring-focus:  0 0 0 3px var(--focus-ring);

  --inset-hairline: inset 0 0 0 1px var(--border-subtle);
}

/* ============================================================
   MOTION (site/src/styles/tokens/motion.css)
   ============================================================ */

:root {
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out:      cubic-bezier(0.16, 1, 0.3, 1);   /* primary easing */
  --ease-in:       cubic-bezier(0.4, 0, 1, 1);

  --duration-fast:   140ms;
  --duration-base:   240ms;
  --duration-slow:   420ms;
  --duration-slower: 640ms;

  --transition-colors: color var(--duration-fast) var(--ease-standard),
                        background-color var(--duration-fast) var(--ease-standard),
                        border-color var(--duration-fast) var(--ease-standard);
  --transition-transform: transform var(--duration-base) var(--ease-out);
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}

/* ============================================================
   TRACK SUB-THEMES — the site's [data-theme] blocks, kept as-is
   so a wrapper can carry a theme independently of the space.
   ============================================================ */

[data-theme="general"] {
  --accent: var(--steel-600); --accent-hover: #284756; --accent-active: #203A47;
  --accent-soft: rgba(47,82,102,0.10);
  --wash: #F1F5F8; --wash-border: rgba(47,82,102,0.14);
  --focus-ring: rgba(47,82,102,0.45);
}

/* AFOQT — U.S. Air Force officer & pilot selection */
[data-theme="afoqt"] {
  --accent: var(--afoqt-accent); --accent-hover: #7E5C10; --accent-active: #694C0C;
  --accent-soft: rgba(148,107,20,0.12);
  --wash: var(--afoqt-wash); --wash-border: rgba(148,107,20,0.20);
  --focus-ring: rgba(148,107,20,0.45);
}

/* ASTB-E — U.S. Navy / Marine Corps / Coast Guard aviation selection */
[data-theme="astb"] {
  --accent: var(--astb-accent); --accent-hover: #16314A; --accent-active: #11283C;
  --accent-soft: rgba(28,61,90,0.10);
  --wash: var(--astb-wash); --wash-border: rgba(28,61,90,0.18);
  --focus-ring: rgba(28,61,90,0.45);
}

/* SIFT — U.S. Army aviation selection */
[data-theme="sift"] {
  --accent: var(--sift-accent); --accent-hover: #33421D; --accent-active: #283515;
  --accent-soft: rgba(62,79,37,0.12);
  --wash: var(--sift-wash); --wash-border: rgba(62,79,37,0.18);
  --focus-ring: rgba(62,79,37,0.45);
}

/* ============================================================
   SPACE IDENTITY (ADR 0014)
   ------------------------------------------------------------
   Each space carries its Selection's track colours under
   --track-* names. The component selectors let the space
   switcher and the space choice screen tint every option with
   ITS OWN space's colours, independently of which space is
   active — the same mechanism as Pilote Militaire's
   .dash-space-* selectors.

   Raw values are the site's [data-theme] blocks above, per the
   ADR 0014 mapping.
   ============================================================ */

/* asvab -> general theme (cold steel). ASVAB deliberately shares
   the general identity, exactly as on the marketing site. */
body[data-space="asvab"],
.dash-space-switcher[data-space="asvab"],
.dash-space-option[data-space="asvab"],
.dash-space-choice__card[data-space="asvab"] {
  --track-accent:        var(--steel-600);
  --track-accent-hover:  #284756;
  --track-accent-active: #203A47;
  --track-accent-soft:   rgba(47, 82, 102, 0.10);
  --track-wash:          #F1F5F8;
  --track-wash-border:   rgba(47, 82, 102, 0.14);
  --track-focus-ring:    rgba(47, 82, 102, 0.45);
  /* On ink (sidebar): brightened hue, per [data-zone="ink"] on the site. */
  --track-on-ink:        var(--steel-400);
  --track-on-ink-hover:  #7497AC;
  --track-on-ink-soft:   rgba(94, 132, 153, 0.16);
  --track-on-ink-line:   rgba(94, 132, 153, 0.42);
}

/* sift -> sift theme (olive) */
body[data-space="sift"],
.dash-space-switcher[data-space="sift"],
.dash-space-option[data-space="sift"],
.dash-space-choice__card[data-space="sift"] {
  --track-accent:        var(--sift-accent);
  --track-accent-hover:  #33421D;
  --track-accent-active: #283515;
  --track-accent-soft:   rgba(62, 79, 37, 0.12);
  --track-wash:          var(--sift-wash);
  --track-wash-border:   rgba(62, 79, 37, 0.18);
  --track-focus-ring:    rgba(62, 79, 37, 0.45);
  --track-on-ink:        #9DB06B;
  --track-on-ink-hover:  #B0C083;
  --track-on-ink-soft:   rgba(157, 176, 107, 0.18);
  --track-on-ink-line:   rgba(157, 176, 107, 0.45);
}

/* afoqt-tbas -> afoqt theme (aviation gold) */
body[data-space="afoqt-tbas"],
.dash-space-switcher[data-space="afoqt-tbas"],
.dash-space-option[data-space="afoqt-tbas"],
.dash-space-choice__card[data-space="afoqt-tbas"] {
  --track-accent:        var(--afoqt-accent);
  --track-accent-hover:  #7E5C10;
  --track-accent-active: #694C0C;
  --track-accent-soft:   rgba(148, 107, 20, 0.12);
  --track-wash:          var(--afoqt-wash);
  --track-wash-border:   rgba(148, 107, 20, 0.20);
  --track-focus-ring:    rgba(148, 107, 20, 0.45);
  --track-on-ink:        #D7A93E;
  --track-on-ink-hover:  #E2BB5C;
  --track-on-ink-soft:   rgba(215, 169, 62, 0.18);
  --track-on-ink-line:   rgba(215, 169, 62, 0.45);
}

/* astb-e -> astb theme (navy blue) */
body[data-space="astb-e"],
.dash-space-switcher[data-space="astb-e"],
.dash-space-option[data-space="astb-e"],
.dash-space-choice__card[data-space="astb-e"] {
  --track-accent:        var(--astb-accent);
  --track-accent-hover:  #16314A;
  --track-accent-active: #11283C;
  --track-accent-soft:   rgba(28, 61, 90, 0.10);
  --track-wash:          var(--astb-wash);
  --track-wash-border:   rgba(28, 61, 90, 0.18);
  --track-focus-ring:    rgba(28, 61, 90, 0.45);
  --track-on-ink:        #6E9CC4;
  --track-on-ink-hover:  #87AFD2;
  --track-on-ink-soft:   rgba(110, 156, 196, 0.18);
  --track-on-ink-line:   rgba(110, 156, 196, 0.48);
}

/* Inside a resolved space, the accent IS the space's track — resolved on the
   body, where --track-* has just been declared. This block is the resolution
   trap fix: without it the roles below would keep the general-theme values
   computed on :root. */
body[data-space="asvab"],
body[data-space="sift"],
body[data-space="afoqt-tbas"],
body[data-space="astb-e"] {
  --accent:        var(--track-accent);
  --accent-hover:  var(--track-accent-hover);
  --accent-active: var(--track-accent-active);
  --accent-soft:   var(--track-accent-soft);
  --wash:          var(--track-wash);
  --wash-border:   var(--track-wash-border);
  --focus-ring:    var(--track-focus-ring);

  --text-accent:   var(--track-accent);
  --border-accent: var(--track-accent);
  --surface-wash:  var(--track-wash);
  --border-wash:   var(--track-wash-border);

  --accent-on-ink:       var(--track-on-ink);
  --accent-on-ink-hover: var(--track-on-ink-hover);
  --accent-on-ink-soft:  var(--track-on-ink-soft);
  --accent-on-ink-line:  var(--track-on-ink-line);

  --glow-accent:   0 10px 30px var(--track-accent-soft);
  --ring-focus:    0 0 0 3px var(--track-focus-ring);
}
