/* ======================================================================
 * LaunchClass · Design System
 * ----------------------------------------------------------------------
 * Single canonical source for design tokens, reset, base typography.
 * Loaded by every marketing page via /_partials/head.php.
 *
 * Layers:
 *   1. Tokens    (CSS custom properties: colors, layout)
 *   2. Reset     (universal box-sizing + zero default margins/padding)
 *   3. Globals   (html/body defaults, font stack, smoothing)
 *   4. Type      (em normalization — see INVARIANT 25)
 *
 * NOT in this file (intentional — pages may want to override):
 *   - Page-specific layout vars (--bar-h, --nav-h)
 *   - Component CSS (buttons, nav, forms) — those will get their own
 *     stylesheets (or stay inline for now) and load on top of this.
 *
 * Update protocol:
 *   - When a token's value changes, edit this file. Bump cache via
 *     scripts/bump-cache.sh so the ?v=BUILD_VERSION invalidates browsers.
 *   - When a token is added, add it here AND consider whether it's
 *     truly shared. Page-specific tokens stay in the page's inline <style>.
 * ====================================================================== */

/* ── 0. Self-hosted TASA Orbiter ───────────────────────────────────── *
 * Site-wide single font (INVARIANT 24, updated 2026-05-21). Self-hosted
 * under /media/fonts/tasa-orbiter/ — 4 weights × 2 subsets = 8 woff2
 * files (~107 KB total, but unicode-range means a typical English visitor
 * downloads ~17 KB per weight in use, lazily). Identical assets ship to
 * the SPA via the `@fontsource/tasa-orbiter` npm package (Vite hashes &
 * bundles them); the static side just references these paths directly.
 *
 * NO Google Fonts anywhere. NO Instrument Sans / Fira Sans / Bricolage
 * Grotesque / Inter / Instrument Serif anywhere — all retired.
 * TASA Orbiter has DISCRETE weights only (no wdth axis); pick weight via
 * `font-weight: 400|500|600|700`, never `font-variation-settings`.
 * ----------------------------------------------------------------------- */
/* latin-ext */
@font-face {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-ext-400-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-ext-500-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-ext-600-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-ext-700-normal.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;
}
/* latin (default) */
@font-face {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-400-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-500-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-600-normal.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 {
  font-family: 'TASA Orbiter';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url('/media/fonts/tasa-orbiter/tasa-orbiter-latin-700-normal.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;
}

/* ── 1. Tokens ─────────────────────────────────────────────────────── */
:root {
  /* Layout */
  --site-max: 1500px;

  /* Backgrounds (darkest → lighter) */
  --bg:       #05060B;
  --bg2:      #080A14;
  --bg3:      #0C1020;
  --bg-cell:  #0A0D1C;

  /* Borders (lightest → most prominent) */
  --border:     #141C36;
  --border2:    #1E2B52;
  --border-hot: #2B3E7A;

  /* Text (most prominent → faintest) */
  --text:        #EEF2FB;
  --text-muted:  #7C88A8;
  --text-dim:    #3F4968;
  --text-faint:  #222B47;

  /* Brand blue — single family, mirrors SPA `--primary` (HSL 223 100% 59%).
     If you change --blue, change the SPA's --primary in
     app-src/src/styles/global.css too. */
  --blue:       #2f6bff;
  --blue-deep:  #1a4ccc;
  --blue-hi:    #4d83ff;
  --blue-bright:#6f9cff;
  --blue-glow:  rgba(47, 107, 255, 0.38);
  --blue-soft:  rgba(47, 107, 255, 0.12);
  --blue-faint: rgba(47, 107, 255, 0.06);

  /* Status colors */
  --green:      #10B981;
  --green-soft: rgba(16, 185, 129, 0.12);
  --green-dim:  rgba(16, 185, 129, 0.12);  /* alias of --green-soft */
  --amber:      #F59E0B;
  --amber-soft: rgba(245, 158, 11, 0.12);
  --red:        #EF4444;

  /* Accent — used for retired-feature highlights, not primary UI */
  --violet:      #A78BFA;
  --violet-soft: rgba(167, 139, 250, 0.12);

  /* Shared border tones (dark theme) */
  --line:   rgba(255,255,255,0.09);
  --line-2: rgba(255,255,255,0.055);

  /* Shared text tones (dark theme, supplementing --text-* family) */
  --muted: #99A1B4;
  --dim:   #5D6578;

  /* Light-theme tokens (for white-pill nav on dark pages) */
  --paper-line: rgba(10,18,40,0.10);
  --paper:      #F1F3F8;
  --ink:        #0A1228;
  --ink-2:      #444C61;
  --ink-3:      #7B8398;

  /* Max content width */
  --maxw: 1200px;
}

/* ── 2. Reset ──────────────────────────────────────────────────────── */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* ── 3. Globals ────────────────────────────────────────────────────── */
html {
  scroll-behavior: smooth;
}

html,
body {
  background: var(--bg);
}

body {
  font-family: 'TASA Orbiter', system-ui, -apple-system, sans-serif;
  color: var(--text);
  line-height: 1.55;
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* Pages can layer their own backgrounds on top (e.g. gradients) — see
   * checkout.html and thank-you.html for examples. */
}

/* ── 4. Type ──────────────────────────────────────────────────────── */
/* Anything that READS as a heading, label, or CTA — including buttons,
   kickers, uppercase eyebrows, sub-headings, and per-row titles — gets
   the condensed axis (wght 579, wdth 87.9). Body paragraphs stay at the
   defaults (wght 400, wdth 100). Variable axis = same file, no extra
   request. */
h1, h2, h3, h4, h5, h6,
.section-title,
.section-head,
.section__title,
.hero-h1,
.hero__title,
.policy h1, .policy h2,
.learn-letter__title,
.learn-meta__title,
.learn-notes__title,
.learn-modgroup__title,
.module-group__title,
.module-row__title,
.program-card__name,
.program-hero__title,
.account-card__title,
.resume-strip__title,
.nav-profile__menu-name,
.stat__val em,
.kicker,
.label,
.stat__label,
.form-label,
.program-card__cover-label,
.program-card__cta,
.audience-label__sub,
.audience-label__title,
.section-label,
.btn, .btn-ghost, .btn-danger, .btn-sm,
button[type="submit"], button[type="button"][class*="btn"],
.tab, .tab-active,
.pill {
  /* TASA Orbiter has discrete weights only — no wdth axis. Headings/CTAs/
     labels declare font-weight + a tiny letter-spacing tighten. */
  font-weight: 600;
  letter-spacing: -0.005em;
}

/* INVARIANT 25: no italics anywhere. <em> emphasizes via blue color only. */
em {
  font-style: normal;
}
