/* ─────────────────────────────────────────────────────────────────────────
 * SELF-HOSTED @font-face — served same-origin from /public/fonts/*.woff2.
 *
 * Loaded via <link rel="stylesheet" href="%PUBLIC_URL%/fonts.css"> in index.html
 * (NOT imported into the webpack CSS): css-loader would try to bundle the
 * url('/fonts/…') refs from src/ and fail. As a static public stylesheet, the
 * paths stay stable so the <link rel="preload"> hints match and the faces load
 * before the app bundle's CSS. URLs are RELATIVE (fonts/…) so they resolve
 * against this file's location, surviving a non-root deploy base.
 *
 * Cabinet Grotesk = Fontshare (free commercial license, self-hosting permitted).
 * JetBrains Mono  = SIL Open Font License.
 * Figtree (body)  = SIL Open Font License — variable (wght 300–900), latin +
 *                   latin-ext subsets with the same unicode-ranges Fontsource ships.
 *                   Replaced Google Sans Flex (Google-CDN-only), so the app now
 *                   has ZERO third-party-CDN font dependencies.
 * Cabinet/JBM weights mirror what the old CDN @import loaded (CG 400/500/700/800/900,
 * JBM 400/500/600/700). font-display:swap keeps text visible during the same-origin load.
 * ───────────────────────────────────────────────────────────────────────── */
@font-face { font-family: 'Cabinet Grotesk'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/CabinetGrotesk-Regular.woff2') format('woff2'); }
@font-face { font-family: 'Cabinet Grotesk'; font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/CabinetGrotesk-Medium.woff2') format('woff2'); }
@font-face { font-family: 'Cabinet Grotesk'; font-style: normal; font-weight: 700; font-display: swap; src: url('fonts/CabinetGrotesk-Bold.woff2') format('woff2'); }
@font-face { font-family: 'Cabinet Grotesk'; font-style: normal; font-weight: 800; font-display: swap; src: url('fonts/CabinetGrotesk-Extrabold.woff2') format('woff2'); }
@font-face { font-family: 'Cabinet Grotesk'; font-style: normal; font-weight: 900; font-display: swap; src: url('fonts/CabinetGrotesk-Black.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/JetBrainsMono-Regular.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/JetBrainsMono-Medium.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/JetBrainsMono-SemiBold.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 700; font-display: swap; src: url('fonts/JetBrainsMono-Bold.woff2') format('woff2'); }

/* Figtree (body/UI sans) — variable, one file covers weights 300–900. Two subsets
   with Fontsource's unicode-ranges so accented chars, µ/°/±, em-dashes, arrows and
   the like resolve instead of tofu-ing to a fallback. */
@font-face {
  font-family: 'Figtree'; font-style: normal; font-weight: 300 900; font-display: swap;
  src: url('fonts/Figtree-Variable-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 {
  font-family: 'Figtree'; font-style: normal; font-weight: 300 900; font-display: swap;
  src: url('fonts/Figtree-Variable-latinExt.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;
}
