/* fonts.css — self-hosted Fraunces (display + body) and Jersey 20 / Jersey 15 (chrome), OFL.
   Files pulled from Google's own subsets by scripts/research/fonts_selfhost.mjs and named by content hash,
   so a swapped file is a new URL (vercel.json caches /assets/* for 24h). No third-party font host. */
@font-face{font-family:"Fraunces";font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/fonts/fraunces-latin.7e744849.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:"Fraunces";font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/fonts/fraunces-latin-ext.e9521563.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"Jersey 20";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jersey20-latin.222e2b84.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:"Jersey 20";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jersey20-latin-ext.cdad422d.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"Jersey 15";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jersey15-latin.244065ac.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:"Jersey 15";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jersey15-latin-ext.c2222da8.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}

/* ── D-14 (92.5.3): metric-matched fallback for Fraunces ─────────────────────
   Every face above ships font-display:swap, which is the right call — text is
   readable immediately — but the swap REFLOWS unless the stand-in occupies the
   same space. This face is a local system serif re-metricked to Fraunces, so
   the moment Fraunces arrives nothing moves.

   The four numbers are MEASURED, never copied. Method and provenance:
   `node scripts/research/font_fallback_metrics.mjs` renders one fixed
   reference string at 1000px in the real self-hosted Fraunces and in the raw
   local fallback, in headless Chromium, and reports the ratios. Measured
   2026-08-25 against "Times New Roman":
     advance width   Fraunces 42617.50  ·  Times New Roman 45886.72
       → size-adjust = 42617.50 / 45886.72 = 92.88%
     ascent          Fraunces 978/1000  → 0.978  / 0.9288 = 105.30%
     descent         Fraunces 255/1000  → 0.255  / 0.9288 =  27.46%
     line gap        Fraunces normal line-height 1233 = 978 + 255 + 0
                     → line gap 0        → 0%
   The overrides are divided by size-adjust on purpose: size-adjust scales the
   overridden metrics too, so the descriptors must be pre-divided for the FINAL
   metric to land on Fraunces's own value. Re-measure with the script above if
   the Fraunces files are ever re-subset — do not hand-edit these.

   src lists several locals: whichever is present wins, and on a platform with
   none of them (Android) the face simply fails to load and the stack below
   falls through to Georgia, exactly as it did before this rule existed. The
   numbers are Times New Roman's; the other locals are metrically the same
   family lineage (Liberation Serif and Nimbus Roman are its metric clones). */
@font-face{font-family:"Fraunces Fallback";font-style:normal;font-weight:100 900;src:local("Times New Roman"), local("Times"), local("Liberation Serif"), local("Nimbus Roman");size-adjust:92.88%;ascent-override:105.30%;descent-override:27.46%;line-gap-override:0%}
