/* Self-hosted, open-licensed faces (SIL OFL 1.1; licenses in fonts/). Latin subset from Fontsource 5.3.0.
   Newsreader — Production Type (display serif, optical sizes)   IBM Plex Sans / Mono — IBM */
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 200 800; font-display: swap;
  src: url("fonts/newsreader-latin-opsz-normal.woff2") format("woff2-variations"); }
@font-face { font-family: "Newsreader"; font-style: italic; font-weight: 200 800; font-display: swap;
  src: url("fonts/newsreader-latin-opsz-italic.woff2") format("woff2-variations"); }
@font-face { font-family: "IBM Plex Sans"; font-weight: 400; font-display: swap; src: url("fonts/ibm-plex-sans-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans"; font-weight: 500; font-display: swap; src: url("fonts/ibm-plex-sans-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans"; font-weight: 600; font-display: swap; src: url("fonts/ibm-plex-sans-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-weight: 400; font-display: swap; src: url("fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-weight: 500; font-display: swap; src: url("fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2"); }

/* Metric-compatible fallbacks (JOB F6): each stands in for its web font with the same em-box
   (ascent/descent/line-gap) and average advance width, so the swap from system font to web font
   doesn't reflow the page — the source of the 2-8px one-frame load jumps tools/fit_jumps.mjs was
   finding at ~0.04s. local() only, so these resolve immediately and never trigger a fetch.
   Named for the token role (not the physical face) since that's what they stand in for; unquoted
   custom-idents, not "quoted family name" strings — R9 (docs/role-models.md §5) counts those as
   typefaces, and these are invisible CLS shims, not a 4th typeface.
   Method + the metrics behind every number below: docs/fonts.md. */
@font-face { font-family: ink-ui-fallback; src: local("Helvetica Neue"), local("Arial");
  ascent-override: 86.5385%; descent-override: 23.2176%; line-gap-override: 0%; size-adjust: 118.4444%; }
@font-face { font-family: ink-mono-fallback; src: local("Menlo"), local("Courier New");
  ascent-override: 102.5167%; descent-override: 27.5045%; line-gap-override: 0%; size-adjust: 99.9837%; }
@font-face { font-family: ink-display-fallback; src: local("Georgia"), local("Times New Roman");
  ascent-override: 60.2877%; descent-override: 21.7364%; line-gap-override: 0%; size-adjust: 121.9154%; }
/* Italic display fallback (v1.1): without it the browser slants the upright fallback, whose widths match Newsreader UPRIGHT, so italic
   display text (the wordmark's "Lab", hero emphasis) jumped ~9px when Newsreader Italic swapped in. size-adjust = measured width of a
   pangram in Newsreader Italic / Georgia Italic at 100px (1147.03 / 1211.28); ascent/descent rescaled so the line box matches the upright fallback. */
@font-face { font-family: ink-display-fallback; font-style: italic; src: local("Georgia Italic"), local("Georgia-Italic"), local("Times New Roman Italic");
  ascent-override: 77.6100%; descent-override: 27.9846%; line-gap-override: 0%; size-adjust: 94.6957%; }
