/* Self-hosted Google-font substitutes (Inter, Source Serif 4) — latin +
   latin-ext subsets only. Downloaded from fonts.gstatic.com (see git log
   for the css2 URL); same rationale as the Bootstrap/jQuery vendor
   assets: no external origins, identical rendering in every
   environment (Cloudflare Fonts rewrote these on the tunnel host,
   making Fly and tunnel render different font stacks).

   Both families are VARIABLE fonts (Inter wght 100-900, Source Serif 4
   wght 200-900 + opsz), so one file per family/subset serves every
   weight. Until 2026-09-03 the same bytes were checked in three times
   under weight-specific names and preloaded three times each: a cold load
   fetched ~610KB of fonts where ~220KB carries everything, and the serif
   arrived so late that the navbar reflowed when it landed. Declare a
   weight RANGE here, never one face per weight, and keep the preload list
   in templates/oscar/layout.html to one file per face used above the fold.

   font-display is BLOCK everywhere (UAT feedback: never show a
   fallback-font swap). The "... Fallback" faces at the bottom make the
   block period itself shift-free: they are the local system fonts with
   size-adjust / ascent / descent overrides matched to the real metrics,
   so the invisible layout during the block period — and the swap, should
   a slow load ever outlast the 3s block cap — has the same line widths
   and heights as the final text. Metrics: Inter and Source Serif 4 from
   the files themselves (fontTools); Arial and Georgia from the capsize
   metrics dataset; size-adjust = xWidthAvg(font)/xWidthAvg(fallback),
   overrides = metric / size-adjust. Referenced from project.css via the
   --jc-sans / --jc-serif stacks, right after the real family. */

/* Inter — variable, wght 100-900 */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: block;
  src: url("fonts/inter-variable-latin-ext.1ad231aac0a8.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: 100 900;
  font-display: block;
  src: url("fonts/inter-variable-latin.260c81a4759b.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;
}

/* Source Serif 4 — variable, wght 200-900 (opsz auto) */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 200 900;
  font-display: block;
  src: url("fonts/source-serif-4-variable-latin-ext.33ba75072ebc.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 Serif 4';
  font-style: normal;
  font-weight: 200 900;
  font-display: block;
  src: url("fonts/source-serif-4-variable-latin.e9192c2fe0a3.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;
}

/* Source Serif 4 italic — static 400 (the footer tagline) */
@font-face {
  font-family: 'Source Serif 4';
  font-style: italic;
  font-weight: 400;
  font-display: block;
  src: url("fonts/source-serif-4-400-italic-latin-ext.91d86f08c90d.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 Serif 4';
  font-style: italic;
  font-weight: 400;
  font-display: block;
  src: url("fonts/source-serif-4-400-italic-latin.c43c9461f66c.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 local fallbacks (see header). Inter: ascent 1984,
   descent 494, upm 2048; Arial xWidthAvg 904/2048 vs Inter 0.4741em.
   Source Serif 4: ascent 1036, descent 335, upm 1000, xWidthAvg 476;
   Georgia xWidthAvg 899/2048. Systems without Arial/Georgia (most Linux,
   Android) skip these faces and fall through the stack as before. */
@font-face {
  font-family: 'Inter Fallback';
  src: local('Arial');
  size-adjust: 107.06%;
  ascent-override: 90.49%;
  descent-override: 22.53%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Source Serif 4 Fallback';
  src: local('Georgia');
  size-adjust: 108.44%;
  ascent-override: 95.54%;
  descent-override: 30.89%;
  line-gap-override: 0%;
}
