/* Reading Room faces, self-hosted — PLAN-DESIGN-ROLLOUT-2026-09 §4.
 *
 * Latin subsets from Google Fonts (all SIL Open Font License 1.1), four files,
 * 132.9 KB total against the plan's 180 KB budget:
 *   newsreader-latin.woff2          58.2 KB  roman, variable wght 400-500
 *   newsreader-italic-latin.woff2   24.4 KB  italic 400
 *   plex-sans-latin.woff2           40.2 KB  variable wght 400-600
 *   plex-mono-500-latin.woff2       10.1 KB  500 only
 * Newsreader is requested WITHOUT its optical-size axis: with it, the roman
 * file alone was 131.8 KB and the set 239.6 KB. The cost is that headlines
 * render at the default optical size rather than the display cut.
 *
 * Paths are absolute (/static/…): this file is both concatenated into
 * design-system.bundle.css (in static/css/) and linked on its own by the
 * standalone pages, and a relative url() cannot be right for both.
 *
 * `@font-face` is inert until something names the family, so declaring these
 * site-wide downloads nothing on a page that does not use them. Only
 * `html.rr-theme` (tokens/reading-room.css) switches the site's
 * --font-sans / --font-display / --font-mono to them.
 *
 * The "… Fallback" faces are the system font scaled to the web font's
 * metrics (size-adjust + ascent/descent overrides, computed against the real
 * Georgia / Arial / Courier New with English letter frequencies), so the
 * swap from fallback to web font moves almost nothing: the plan's CLS < 0.05.
 * Regenerate them if a font file changes.
 */
@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url('/static/fonts/reading-room/newsreader-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: 'Newsreader';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/static/fonts/reading-room/newsreader-italic-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: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url('/static/fonts/reading-room/plex-sans-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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/static/fonts/reading-room/plex-mono-500-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: 'Newsreader Fallback';
  src: local('Georgia');
  size-adjust: 96.04%;
  ascent-override: 76.53%;
  descent-override: 27.59%;
  line-gap-override: 0.0%;
}
@font-face {
  font-family: 'IBM Plex Sans Fallback';
  src: local('Arial');
  size-adjust: 101.25%;
  ascent-override: 101.23%;
  descent-override: 27.16%;
  line-gap-override: 0.0%;
}
@font-face {
  font-family: 'IBM Plex Mono Fallback';
  src: local('Courier New');
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.5%;
  line-gap-override: 0.0%;
}
