/* ═══════════════════════════════════════════════════════════════════════════
 * TRT AI Hub — Fonts (self-hosted, offline-first)
 * ---------------------------------------------------------------------------
 * 4 family stacks exposed via [data-fontfamily="..."] on <html> :
 *
 *   - geist   : Geist Variable + JetBrains Mono Variable        — DS default
 *   - inter   : Inter Variable + JetBrains Mono Variable        — high legibility
 *   - plex    : IBM Plex Sans Variable + IBM Plex Mono (static) — lab register
 *   - system  : system-ui native stack                          — zero download
 *
 * Brand logo : forced to Geist 700 via .font-brand class — never follows the
 * user's selection (see HubRail.tsx).
 *
 * Licence : SIL Open Font License 1.1 (OFL) for Geist, Inter, IBM Plex,
 *           JetBrains Mono. Sources fetched via fontsource at build time —
 *           NEVER at runtime (offline-strict deployment).
 *
 * Unicode-range splitting : the latin file loads first; latin-ext loads
 * lazily only when a glyph in that range is actually rendered (e.g. Polish
 * "ł" or Romanian "ș"). This keeps cold-start payload minimal.
 * ═══════════════════════════════════════════════════════════════════════════ */

/* ── Geist Variable (100..900) ───────────────────────────────────────────── */
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('./geist/geist-var-latin.woff2') format('woff2-variations');
  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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('./geist/geist-var-latin-ext.woff2') format('woff2-variations');
  unicode-range:
    U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,
    U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ── Inter Variable (100..900) ───────────────────────────────────────────── */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('./inter/inter-var-latin.woff2') format('woff2-variations');
  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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('./inter/inter-var-latin-ext.woff2') format('woff2-variations');
  unicode-range:
    U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,
    U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ── IBM Plex Sans Variable (100..700) ───────────────────────────────────── */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  src: url('./ibm-plex/plex-sans-var-latin.woff2') format('woff2-variations');
  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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  src: url('./ibm-plex/plex-sans-var-latin-ext.woff2') format('woff2-variations');
  unicode-range:
    U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,
    U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  src: url('./ibm-plex/plex-sans-var-latin-italic.woff2') format('woff2-variations');
  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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── IBM Plex Mono (static — 400/500/600/700) ────────────────────────────── */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('./ibm-plex/plex-mono-400.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url('./ibm-plex/plex-mono-500.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url('./ibm-plex/plex-mono-600.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url('./ibm-plex/plex-mono-700.woff2') format('woff2');
}

/* ── JetBrains Mono Variable (100..800) ──────────────────────────────────── */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url('./jetbrains-mono/jetbrains-mono-var-latin.woff2') format('woff2-variations');
  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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url('./jetbrains-mono/jetbrains-mono-var-latin-ext.woff2') format('woff2-variations');
  unicode-range:
    U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,
    U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Brand class — used by HubRail.tsx for the "TRT AI Hub" wordmark.
 * Always renders in Geist 700, regardless of [data-fontfamily].
 * ═══════════════════════════════════════════════════════════════════════════ */
.font-brand {
  font-family: 'Geist', system-ui, -apple-system, sans-serif;
  font-weight: 700;
  letter-spacing: -0.02em;
  font-feature-settings: 'ss01' on, 'ss02' on;
}
