/* wodii — self-hosted webfonts · single source of truth · 1:1 web/app
 *
 * These WOFF2s are built from the exact TTFs the iOS app bundles
 * (ios-app/Wodii/Resources/Fonts/) by `tools/build-fonts.py`. Do not hand-edit
 * the binaries, and do not swap these for the Google Fonts CDN: the CDN serves
 * different revisions of the same families (Hanken Grotesk 3.013 vs the app's
 * 3.014, JetBrains Mono 2.211 vs 2.305) and serves variable fonts whose
 * interpolated weights are not identical to the designed static masters the
 * app renders. Self-hosting is what keeps app and web visually the same.
 *
 * All four families are OFL 1.1 — see OFL-*.txt alongside the binaries.
 *
 * font-display: swap on the CDN caused a flash of fallback text on every cold
 * load. Same-origin WOFF2 arrives fast enough that `optional`/`swap` is the
 * wrong trade; `block` with the browser's short (~3s) block period plus a
 * preload of the two above-the-fold faces means first paint is already in the
 * real face, with no reflow.
 */

/* ---- display + body: Hanken Grotesk (static cuts, as the app uses) ----
 * One face carries both roles. Fredoka is gone: the iOS app dropped it from
 * the type stack (Typography.swift:88-92 -- "Fredoka is still bundled but no
 * longer part of the type stack"), so the site no longer references it and
 * shipping it was 29,616 bytes of dead weight.
 *
 * These are STATIC cuts. Only 400/500/600/700/800 exist as real files; any
 * other weight is a synthetic transform, which WodiiTheme.swift:104-105
 * forbids. Do not add a weight here without a matching binary.
 */
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/assets/fonts/HankenGrotesk-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/assets/fonts/HankenGrotesk-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/assets/fonts/HankenGrotesk-SemiBold.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/assets/fonts/HankenGrotesk-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/assets/fonts/HankenGrotesk-ExtraBold.woff2') format('woff2');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}

/* ---- mono: JetBrains Mono ---- */
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/assets/fonts/JetBrainsMono-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/assets/fonts/JetBrainsMono-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

/* ---- accent: Instrument Serif Italic ----
 * Italic-only face, matching the app (WodiiFont.accent / WodiiHeadline): the
 * last word of a headline, never a full sentence. Declared here so the web has
 * the face available; no existing site markup uses it yet.
 */
@font-face {
  font-family: 'Instrument Serif';
  src: url('/assets/fonts/InstrumentSerif-Italic.woff2') format('woff2');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
