/* ============================================================================
   Felix Ihno — self-hosted fonts
   Same-origin, no CDN → reader IP never leaves (matches the privacy posture).
   OFL · latin-subset woff2 (via fontsource). LOAD ORDER: fonts.css → tokens.css → components.css.
   Print pipeline uses Charter (macOS-native, via Typst) — no web file needed here.

   Recommended in each page <head> for the two body fonts (cuts FOUT):
     <link rel="preload" href="fonts/newsreader-var.woff2"     as="font" type="font/woff2" crossorigin>
     <link rel="preload" href="fonts/hanken-grotesk-var.woff2" as="font" type="font/woff2" crossorigin>
   ========================================================================== */

@font-face {
  font-family: 'Newsreader'; font-style: normal; font-weight: 400 700; font-display: swap;
  src: url('fonts/newsreader-var.woff2') format('woff2');
}
@font-face {
  font-family: 'Newsreader'; font-style: italic; font-weight: 400 700; font-display: swap;
  src: url('fonts/newsreader-var-italic.woff2') format('woff2');
}
@font-face {
  font-family: 'Hanken Grotesk'; font-style: normal; font-weight: 400 700; font-display: swap;
  src: url('fonts/hanken-grotesk-var.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 400; font-display: swap;
  src: url('fonts/ibm-plex-mono-400.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 500; font-display: swap;
  src: url('fonts/ibm-plex-mono-500.woff2') format('woff2');
}
