/* © 2026 William C. Chesher. All Rights Reserved.
   fonts - spawn's webfonts, SELF-HOSTED, the way glitch does it (glitch/static/fonts.css): local
   woff2, latin subset, font-display: swap, and no request to a third party. A classroom does not
   get to depend on a font CDN being reachable through the district filter.

   spawn's own faces (the spawn brand canvas, 2026-10-09):
     Bricolage Grotesque  display AND voice: the wordmark at 800, headings at 600, reading at 400
     Silkscreen           the pixel: tiny labels only -- step numbers, eyebrows. Never a sentence.
     IBM Plex Mono        the code, knob values
   Licences: fonts/LICENSES.md. */

/* variable: one file carries 200-800 */
@font-face { font-family: "Bricolage Grotesque"; font-style: normal; font-weight: 200 800; font-display: swap;
  src: url(/fonts/bricolage-grotesque-var-latin.woff2) format("woff2"); }

@font-face { font-family: "Silkscreen"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(/fonts/silkscreen-400-latin.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-latin.woff2) format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 600; font-display: swap;
  src: url(/fonts/ibm-plex-mono-600-latin.woff2) format("woff2"); }

/* NO VISIBLE FONT SWAP: the fix sfhsbta.com landed after getting it wrong twice (its fonts.css
   carries the history). swap alone re-lays the page out when the face arrives; optional alone draws
   a whole page view in the fallback when a face misses its window. So: swap, the faces every page
   draws are preloaded in its head, and the fallback is these metric-matched faces, which put a line
   of Arial in the SAME box the webfont will occupy, so the swap moves nothing. Without them the
   fallback was system-ui, which is San Francisco on a Mac and Segoe on Windows: a different width
   on every machine, and every line rewrapped when Bricolage landed.
   size-adjust is matched on advance width over a representative sentence (x-height matching still
   rewraps), and the ascent/descent overrides are divided by it. Bold is matched against Arial Bold,
   since headings and the wordmark sit at 600-800 and a regular face synthesised to bold runs wide.
   Liberation Sans is Arial's metric clone on Linux and Chromebooks: naming only Arial binds to
   nothing there and the adjustment silently does nothing. No mono fallback on purpose:
   ui-monospace already sits within a percent of IBM Plex Mono. */
@font-face { font-family: "Bricolage Fallback"; font-weight: 100 500;
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  size-adjust: 104.93%; ascent-override: 88.63%; descent-override: 25.73%; line-gap-override: 0%; }
@font-face { font-family: "Bricolage Fallback"; font-weight: 600 900;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 102.29%; ascent-override: 90.92%; descent-override: 26.40%; line-gap-override: 0%; }
@font-face { font-family: "Silkscreen Fallback";
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  size-adjust: 148.97%; ascent-override: 69.14%; descent-override: 16.78%; line-gap-override: 0%; }
