/* ═════════════════════════════════════════════════════════════════════════
   SELF-HOSTED TYPEFACES — every family themes/fonts.mjs can select, plus the
   raw-template fallback pair and the worked example's own faces.

   WHY (owner decision, 2026-08-10): these used to come from fonts.googleapis.com
   / fonts.gstatic.com on every page of every client site. That was
     (1) a coin-flip ship gate — factory/tools/qa.mjs counts ANY failed resource
         as a blocking console error, so a gstatic hiccup failed a clean build
         (it did: a gstatic 404 failed a meridian run that passed on retry);
     (2) a render-blocking third-party hop — extra DNS + TLS + round trip on the
         critical path before any text paints;
     (3) every visitor's IP disclosed to Google, on storefronts selling into a
         regulated vertical.

   BUG GUARD: do not reintroduce a remote font URL here or in any page head.
   factory/build.mjs::localizeFonts() strips remote font references from every
   built site and then FAILS THE BUILD if one survives.

   HOW TO READ A BLOCK
     - Variable families ship ONE woff2 per subset with a font-weight RANGE, so
       every weight the CSS asks for comes from the real face — no clamping and
       no faux-bold synthesis. Barlow / Barlow Condensed / Marcellus have no
       variable cut on Google Fonts and ship discrete statics.
     - unicode-range is Google's own latin / latin-ext split, unchanged: the
       glyph coverage shipped here is byte-identical to what these sites already
       downloaded, so this change cannot regress a glyph. latin-ext only
       downloads when a page actually uses a latin-ext codepoint.
     - font-display: swap on every face, DELIBERATELY, not 'optional'. optional
       makes the first view's typeface a coin flip, and a coin flip is exactly
       the class of bug this file exists to remove — QA renders and measures
       these pages. The '<Family> Fallback' faces below make the swap a repaint
       instead of a reflow (metric overrides computed from the real font tables,
       typography-and-layout-math.md §3), so swap costs no layout shift.
     - The '<Family> Fallback' faces carry NO font-display, on purpose. They are
       local()-only: there is no download, so there is no block/swap timer for
       the descriptor to configure. A font-display there would read as "this
       fallback is fetched", which is the opposite of why it exists. The budget
       gate in typography-and-layout-math.md §20 counts downloadable faces.
     - Filenames are content-hashed: font caches are immutable/1yr and are busted
       by RENAME. Re-subsetting a family MUST change its filename.

   MANIFEST.json records the exact css2 query, sha256, byte count, font-table
   metrics and verified licence for every family — it is the regeneration recipe,
   and a re-run of it must reproduce the same hashes for the same font version.
   Every family's licence was verified against google/fonts METADATA.pb and ships
   in licenses/.
   ═════════════════════════════════════════════════════════════════════════ */

/* ── Schibsted Grotesk — OFL — pair scientific-modern (display) ──
   source: https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400..900&display=swap
   licence: brand_assets/fonts/licenses/schibstedgrotesk-OFL.txt (google/fonts ofl/schibstedgrotesk) */
@font-face {
  font-family: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url('schibstedgrotesk-latin-ext-400-900-ee9eeb23.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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url('schibstedgrotesk-latin-400-900-4c8b93f4.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Schibsted Grotesk (upem 2048, avgAdv 0.5402).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Schibsted Grotesk Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 103.51%;
  ascent-override: 94.34%;
  descent-override: 24.91%;
  line-gap-override: 0.00%;
}

/* ── Source Sans 3 — OFL — pair scientific-modern (body) ──
   source: https://fonts.googleapis.com/css2?family=Source+Sans+3:wght@200..900&display=swap
   licence: brand_assets/fonts/licenses/sourcesans3-OFL.txt (google/fonts ofl/sourcesans3) */
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url('sourcesans3-latin-ext-200-900-a85a7459.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: 'Source Sans 3';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url('sourcesans3-latin-200-900-7a19a702.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Source Sans 3 (upem 1000, avgAdv 0.4811).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Source Sans 3 Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 92.19%;
  ascent-override: 111.07%;
  descent-override: 43.39%;
  line-gap-override: 0.00%;
}

/* ── Literata — OFL — pair editorial-serif (display) ──
   source: https://fonts.googleapis.com/css2?family=Literata:wght@200..900&display=swap
   licence: brand_assets/fonts/licenses/literata-OFL.txt (google/fonts ofl/literata) */
@font-face {
  font-family: 'Literata';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url('literata-latin-ext-200-900-46792f7c.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: 'Literata';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url('literata-latin-200-900-9adbeac5.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base georgia (upem 2048, avgAdv 0.5314) vs Literata (upem 1000, avgAdv 0.5799).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Literata Fallback';
  src: local("Georgia"), local("Times New Roman"), local("Liberation Serif");
  size-adjust: 109.12%;
  ascent-override: 107.86%;
  descent-override: 28.22%;
  line-gap-override: 0.00%;
}

/* ── Karla — OFL — pair editorial-serif (body) ──
   source: https://fonts.googleapis.com/css2?family=Karla:wght@200..800&display=swap
   licence: brand_assets/fonts/licenses/karla-OFL.txt (google/fonts ofl/karla) */
@font-face {
  font-family: 'Karla';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('karla-latin-ext-200-800-14291dd5.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: 'Karla';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('karla-latin-200-800-cd614fed.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Karla (upem 2000, avgAdv 0.5139).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Karla Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 98.47%;
  ascent-override: 93.12%;
  descent-override: 25.59%;
  line-gap-override: 0.00%;
}

/* ── Sora — OFL — pair geometric-tech (display) + raw-template fallback theme ──
   source: https://fonts.googleapis.com/css2?family=Sora:wght@100..800&display=swap
   licence: brand_assets/fonts/licenses/sora-OFL.txt (google/fonts ofl/sora) */
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('sora-latin-ext-100-800-c163c536.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: 'Sora';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('sora-latin-100-800-fa26406e.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Sora (upem 1000, avgAdv 0.5868).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Sora Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 112.45%;
  ascent-override: 86.26%;
  descent-override: 25.79%;
  line-gap-override: 0.00%;
}

/* ── Manrope — OFL — pair geometric-tech (body) ──
   source: https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap
   licence: brand_assets/fonts/licenses/manrope-OFL.txt (google/fonts ofl/manrope) */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('manrope-latin-ext-200-800-3911b66d.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: 'Manrope';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('manrope-latin-200-800-a30ddcd3.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Manrope (upem 2000, avgAdv 0.5260).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Manrope Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 100.79%;
  ascent-override: 105.76%;
  descent-override: 29.76%;
  line-gap-override: 0.00%;
}

/* ── Bricolage Grotesque — OFL — pair humanist-warm (display) ──
   source: https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@200..800&display=swap
   licence: brand_assets/fonts/licenses/bricolagegrotesque-OFL.txt (google/fonts ofl/bricolagegrotesque) */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('bricolagegrotesque-latin-ext-200-800-e808f16b.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: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('bricolagegrotesque-latin-200-800-a97804dc.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Bricolage Grotesque (upem 1000, avgAdv 0.5325).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Bricolage Grotesque Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 102.04%;
  ascent-override: 91.14%;
  descent-override: 26.46%;
  line-gap-override: 0.00%;
}

/* ── Figtree — OFL — pair humanist-warm (body) ──
   source: https://fonts.googleapis.com/css2?family=Figtree:wght@300..900&display=swap
   licence: brand_assets/fonts/licenses/figtree-OFL.txt (google/fonts ofl/figtree) */
@font-face {
  font-family: 'Figtree';
  font-style: normal;
  font-weight: 300 900;
  font-display: swap;
  src: url('figtree-latin-ext-300-900-bf7828e2.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: 'Figtree';
  font-style: normal;
  font-weight: 300 900;
  font-display: swap;
  src: url('figtree-latin-300-900-4ba7d3d0.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Figtree (upem 1000, avgAdv 0.5222).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Figtree Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 100.07%;
  ascent-override: 94.93%;
  descent-override: 24.98%;
  line-gap-override: 0.00%;
}

/* ── Archivo — OFL — pair swiss-neutral (display) + meridian front end ──
   source: https://fonts.googleapis.com/css2?family=Archivo:wght@100..900&display=swap
   licence: brand_assets/fonts/licenses/archivo-OFL.txt (google/fonts ofl/archivo) */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('archivo-latin-ext-100-900-ff4f17d2.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: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('archivo-latin-100-900-8f704806.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Archivo (upem 1000, avgAdv 0.5258).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Archivo Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 100.76%;
  ascent-override: 87.14%;
  descent-override: 20.84%;
  line-gap-override: 0.00%;
}

/* ── Public Sans — OFL — pair swiss-neutral (body) + raw-template fallback theme ──
   source: https://fonts.googleapis.com/css2?family=Public+Sans:wght@100..900&display=swap
   licence: brand_assets/fonts/licenses/publicsans-OFL.txt (google/fonts ofl/publicsans) */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('publicsans-latin-ext-100-900-3a00a32f.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: 'Public Sans';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('publicsans-latin-100-900-5ed4d31c.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Public Sans (upem 2000, avgAdv 0.5425).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Public Sans Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 103.96%;
  ascent-override: 91.38%;
  descent-override: 21.64%;
  line-gap-override: 0.00%;
}

/* ── Marcellus — OFL — pair luxe-minimal (display) — STATIC, 400 only ──
   source: https://fonts.googleapis.com/css2?family=Marcellus&display=swap
   licence: brand_assets/fonts/licenses/marcellus-OFL.txt (google/fonts ofl/marcellus) */
@font-face {
  font-family: 'Marcellus';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('marcellus-latin-ext-400-1d5a9870.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: 'Marcellus';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('marcellus-latin-400-8a539799.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base georgia (upem 2048, avgAdv 0.5314) vs Marcellus (upem 2048, avgAdv 0.5123).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Marcellus Fallback';
  src: local("Georgia"), local("Times New Roman"), local("Liberation Serif");
  size-adjust: 96.41%;
  ascent-override: 101.04%;
  descent-override: 29.02%;
  line-gap-override: 0.00%;
}

/* ── Jost — OFL — pair luxe-minimal (body) ──
   source: https://fonts.googleapis.com/css2?family=Jost:wght@100..900&display=swap
   licence: brand_assets/fonts/licenses/jost-OFL.txt (google/fonts ofl/jost) */
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('jost-latin-ext-100-900-312ef2b8.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: 'Jost';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('jost-latin-100-900-7726a5cd.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Jost (upem 1000, avgAdv 0.4900).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Jost Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 93.89%;
  ascent-override: 113.96%;
  descent-override: 39.94%;
  line-gap-override: 0.00%;
}

/* ── JetBrains Mono — OFL — pair mono-lab (display) ──
   source: https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@100..800&display=swap
   licence: brand_assets/fonts/licenses/jetbrainsmono-OFL.txt (google/fonts ofl/jetbrainsmono) */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('jetbrainsmono-latin-ext-100-800-79bfdab9.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: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('jetbrainsmono-latin-100-800-18be4527.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base consolas (upem 2048, avgAdv 0.5498) vs JetBrains Mono (upem 1000, avgAdv 0.6000).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'JetBrains Mono Fallback';
  src: local("Consolas"), local("Menlo"), local("DejaVu Sans Mono");
  size-adjust: 109.13%;
  ascent-override: 93.47%;
  descent-override: 27.49%;
  line-gap-override: 0.00%;
}

/* ── Work Sans — OFL — pair mono-lab (body) ──
   source: https://fonts.googleapis.com/css2?family=Work+Sans:wght@100..900&display=swap
   licence: brand_assets/fonts/licenses/worksans-OFL.txt (google/fonts ofl/worksans) */
@font-face {
  font-family: 'Work Sans';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('worksans-latin-ext-100-900-2aa17fc7.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: 'Work Sans';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('worksans-latin-100-900-1dd49afc.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Work Sans (upem 1000, avgAdv 0.5576).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Work Sans Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 106.85%;
  ascent-override: 87.04%;
  descent-override: 22.74%;
  line-gap-override: 0.00%;
}

/* ── Barlow Condensed — OFL — pair condensed-industrial (display) — STATIC ──
   source: https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;600;700;800&display=swap
   licence: brand_assets/fonts/licenses/barlowcondensed-OFL.txt (google/fonts ofl/barlowcondensed) */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('barlowcondensed-latin-ext-500-a6ff9214.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('barlowcondensed-latin-500-460f141e.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('barlowcondensed-latin-ext-600-aef7edf5.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('barlowcondensed-latin-600-215a93c6.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('barlowcondensed-latin-ext-700-9d351bd9.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('barlowcondensed-latin-700-3787a5a4.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('barlowcondensed-latin-ext-800-22539b78.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: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('barlowcondensed-latin-800-2515494e.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arialnarrow (upem 2048, avgAdv 0.4279) vs Barlow Condensed (upem 1000, avgAdv 0.3799).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Barlow Condensed Fallback';
  src: local("Arial Narrow"), local("Liberation Sans Narrow"), local("Arial");
  size-adjust: 88.77%;
  ascent-override: 112.65%;
  descent-override: 22.53%;
  line-gap-override: 0.00%;
}

/* ── Barlow — OFL — pair condensed-industrial (body) — STATIC ──
   source: https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700;800&display=swap
   licence: brand_assets/fonts/licenses/barlow-OFL.txt (google/fonts ofl/barlow) */
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('barlow-latin-ext-400-122b24bc.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: 'Barlow';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('barlow-latin-400-b0a8ad37.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: 'Barlow';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('barlow-latin-ext-500-3facdf66.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: 'Barlow';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('barlow-latin-500-cd759df8.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: 'Barlow';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('barlow-latin-ext-600-b7f099c4.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: 'Barlow';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('barlow-latin-600-4b52ddd4.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: 'Barlow';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('barlow-latin-ext-700-88c786d5.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: 'Barlow';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('barlow-latin-700-2d797dd8.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: 'Barlow';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('barlow-latin-ext-800-1647a6cc.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: 'Barlow';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('barlow-latin-800-231d487a.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Barlow (upem 1000, avgAdv 0.4980).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Barlow Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 95.44%;
  ascent-override: 104.78%;
  descent-override: 20.96%;
  line-gap-override: 0.00%;
}

/* ── Fraunces — OFL — meridian "Field Index" front end (journal.css) ──
   source: https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,100..900&display=swap
   licence: brand_assets/fonts/licenses/fraunces-OFL.txt (google/fonts ofl/fraunces) */
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fraunces-latin-ext-100-900-a2930b27.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: 'Fraunces';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fraunces-latin-100-900-7234ed86.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base georgia (upem 2048, avgAdv 0.5314) vs Fraunces (upem 2000, avgAdv 0.5588).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Fraunces Fallback';
  src: local("Georgia"), local("Times New Roman"), local("Liberation Serif");
  size-adjust: 105.15%;
  ascent-override: 93.01%;
  descent-override: 24.25%;
  line-gap-override: 0.00%;
}

/* ── Familjen Grotesk — OFL — catharos client design reference — display (client's own spec, 2026-08-19) ──
   source: https://fonts.googleapis.com/css2?family=Familjen+Grotesk:wght@400..700&display=swap
   licence: brand_assets/fonts/licenses/familjengrotesk-OFL.txt (google/fonts ofl/familjengrotesk) */
@font-face {
  font-family: 'Familjen Grotesk';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('familjengrotesk-latin-ext-400-700-c53f18ec.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: 'Familjen Grotesk';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('familjengrotesk-latin-400-700-414d5dfe.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Familjen Grotesk (upem 1200, avgAdv 0.487398).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Familjen Grotesk Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 93.39%;
  ascent-override: 109.76%;
  descent-override: 24.09%;
  line-gap-override: 0.00%;
}

/* ── Inter — OFL — catharos client design reference — body (client's own spec, 2026-08-19) ──
   source: https://fonts.googleapis.com/css2?family=Inter:wght@400..700&display=swap
   licence: brand_assets/fonts/licenses/inter-OFL.txt (google/fonts ofl/inter) */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('inter-latin-ext-400-700-34b9c504.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: 'Inter';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('inter-latin-400-700-3100e775.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base arial (upem 2048, avgAdv 0.5219) vs Inter (upem 2048, avgAdv 0.550853).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'Inter Fallback';
  src: local("Arial"), local("Helvetica Neue"), local("Liberation Sans");
  size-adjust: 105.55%;
  ascent-override: 91.78%;
  descent-override: 22.85%;
  line-gap-override: 0.00%;
}

/* ── IBM Plex Mono — OFL — catharos client design reference — data/labels (client's own spec, 2026-08-19) ──
   source: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500;600&display=swap
   licence: brand_assets/fonts/licenses/ibmplexmono-OFL.txt (google/fonts ofl/ibmplexmono) */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('ibmplexmono-latin-ext-500-6bb06407.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('ibmplexmono-latin-ext-600-32057cf5.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('ibmplexmono-latin-500-01d28544.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: 600;
  font-display: swap;
  src: url('ibmplexmono-latin-600-0d1f0b8d.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;
}
/* metric-matched fallback for the swap window: same boxes, zero CLS.
   base consolas (upem 2048, avgAdv 0.5498) vs IBM Plex Mono (upem 1000, avgAdv 0.6).
   Overrides divide by size-adjust because they resolve against the ADJUSTED em. */
@font-face {
  font-family: 'IBM Plex Mono Fallback';
  src: local("Consolas"), local("Menlo"), local("DejaVu Sans Mono");
  size-adjust: 109.13%;
  ascent-override: 93.92%;
  descent-override: 25.20%;
  line-gap-override: 0.00%;
}
