/* Self-hosted web fonts, all under the SIL Open Font License 1.1 (fonts/*-OFL.txt).
   Load order: tokens.css, then this file, then the page's stylesheet.
   Files are the Google Fonts latin and latin-ext subsets (variable woff2, Fraunces v38, Inter v20,
   JetBrains Mono v24, downloaded 2026-10-15) with Google's unicode ranges.
   The pages preload fonts/fraunces-latin.woff2 and fonts/inter-latin.woff2 (hero H1 and body);
   keep those <link rel="preload"> URLs identical to the src URLs below.
   A renamed or updated font file must get a new file name: /assets/ is cached for a day and
   the deploy only stamps .css and .js references. */

/* ---------- Fraunces (display: H1-H3, brand name), opsz 9-144, weights 600-700 ---------- */
@font-face {
  font-family: Fraunces;
  font-style: normal;
  font-weight: 600 700;
  font-display: swap;
  src: url("/assets/fonts/fraunces-latin-ext.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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: Fraunces;
  font-style: normal;
  font-weight: 600 700;
  font-display: swap;
  src: url("/assets/fonts/fraunces-latin.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;
}

/* ---------- Inter (UI and body), weights 400-700 ---------- */
@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-ext.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-20C4, 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("/assets/fonts/inter-latin.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;
}

/* ---------- JetBrains Mono (printed tickets in the illustrations), weights 400-700 ---------- */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/jetbrains-mono-latin-ext.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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/jetbrains-mono-latin.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 fallbacks ----------
   Shown until the web fonts arrive (font-display: swap). Each is a local system font scaled so its
   average glyph width matches the web font on the hero copy, with the web font's ascent and descent,
   so lines wrap the same way and the hero does not move when the font swaps (CLS).
   Arial and Georgia cover iOS, macOS and Windows (Liberation Sans is metric-compatible with Arial on
   Linux); the Roboto and Noto Serif faces cover Android. A face whose local() font is missing is
   skipped and the next family in the stack is tried.
   Values computed with fontTools from the woff2 files above (Fraunces at wght 600, opsz 40, the
   phone H1 size, on the hero headings; Inter at 400 on the hero copy and at 600 on the uppercase
   kicker, the only semibold hero line that can wrap). Recompute if the font files change. */
@font-face {
  font-family: "Fraunces Fallback";
  font-weight: 600 700;
  src: local("Georgia Bold"), local("Georgia-Bold");
  size-adjust: 90.70%; ascent-override: 107.82%; descent-override: 28.11%; line-gap-override: 0%;
}
@font-face {
  font-family: "Fraunces Fallback Android";
  font-weight: 600 700;
  src: local("Noto Serif Bold"), local("NotoSerif-Bold");
  size-adjust: 91.68%; ascent-override: 106.68%; descent-override: 27.82%; line-gap-override: 0%;
}
@font-face {
  font-family: "Inter Fallback";
  font-weight: 100 549;
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  size-adjust: 106.49%; ascent-override: 90.97%; descent-override: 22.65%; line-gap-override: 0%;
}
@font-face {
  font-family: "Inter Fallback";
  font-weight: 550 900;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 99.19%; ascent-override: 97.67%; descent-override: 24.32%; line-gap-override: 0%;
}
@font-face {
  font-family: "Inter Fallback Android";
  font-weight: 100 549;
  src: local("Roboto"), local("Roboto-Regular");
  size-adjust: 107.20%; ascent-override: 90.37%; descent-override: 22.50%; line-gap-override: 0%;
}
@font-face {
  font-family: "Inter Fallback Android";
  font-weight: 550 900;
  src: local("Roboto Bold"), local("Roboto-Bold");
  size-adjust: 106.94%; ascent-override: 90.59%; descent-override: 22.56%; line-gap-override: 0%;
}
@font-face {
  font-family: "JetBrains Mono Fallback";
  font-weight: 100 549;
  src: local("Courier New"), local("CourierNewPSMT"), local("Droid Sans Mono"), local("DroidSansMono");
  size-adjust: 100%; ascent-override: 102%; descent-override: 30%; line-gap-override: 0%;
}
@font-face {
  font-family: "JetBrains Mono Fallback";
  font-weight: 550 900;
  src: local("Courier New Bold"), local("CourierNewPS-BoldMT"), local("Droid Sans Mono"), local("DroidSansMono");
  size-adjust: 100%; ascent-override: 102%; descent-override: 30%; line-gap-override: 0%;
}

/* The design tokens name the families (tokens.css, generated); the site inserts the fallback faces
   right after each web font. Keep the rest of each stack in step with packages/design-tokens. */
:root {
  --font-ui: Inter, "Inter Fallback", "Inter Fallback Android", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-display: Fraunces, "Fraunces Fallback", "Fraunces Fallback Android", Georgia, "Times New Roman", serif;
  --font-mono: "JetBrains Mono", "JetBrains Mono Fallback", "SF Mono", Menlo, Consolas, monospace;
}
