/* APP0110 Labs — self-hosted web fonts (wave 1a, 2026-09-19).
   Replaces the render-blocking Google Fonts stylesheet; no third-party origin
   is contacted for type any more. Six files, 104.0 KB, latin subset, SIL OFL
   (licence texts sit next to the fonts). The four *Fallback* faces carry the
   web fonts' own metrics so `font-display: swap` does not move the page.

   Which faces are here and why, where the metric numbers come from, why the
   width-perfect variant was rejected, and the per-page CLS before/after:
   see docs/seo/05-self-hosted-fonts.md. index.html and 404.html declare their
   own inline copies with deliberately different weight semantics — that file
   explains what must stay in step if you edit these rules. */

/* ── Web fonts ── */

@font-face {
  font-family: 'Cinzel';
  font-style: normal;
  font-weight: 500 800;
  font-display: swap;
  src: url(cinzel-var-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;
}

@font-face {
  font-family: 'Orbitron';
  font-style: normal;
  font-weight: 500 900;
  font-display: swap;
  src: url(orbitron-var-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;
}

@font-face {
  font-family: 'Exo 2';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(exo2-var-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;
}

@font-face {
  font-family: 'Rajdhani';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(rajdhani-500-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;
}

@font-face {
  font-family: 'Rajdhani';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(rajdhani-600-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;
}

/* 700 is declared but fetched by one page: 404.html's .lost-links sets weight
   600 and that page's faces are DISCRETE, so 600 resolves up to 700 there. No
   page that links this sheet renders Rajdhani above 600, so declaring it costs
   nothing here and keeps the sheet the superset the F1 gate check compares
   against. */
@font-face {
  font-family: 'Rajdhani';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(rajdhani-700-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 (fixes the font-swap layout shift, T-14) ──
   Each rule re-declares the local fallback with the web font's own metrics so
   the fallback line box measures the same height as a web-font line, to 0.00%.
   Derivation, the rejected width-perfect alternative, and the measured cost
   (Exo 2's 3.6-8.3% width deficit re-wraps some body copy): see
   docs/seo/05-self-hosted-fonts.md. Liberation Serif / Liberation Sans are
   metric-compatible clones of Times New Roman / Arial, so Linux gets the same
   box; platforms with neither fall through to the generic family with no
   override, exactly as they did before this change. */

@font-face {
  font-family: 'Cinzel Fallback';
  src: local('Times New Roman'), local('Liberation Serif');
  size-adjust: 120.61%;
  ascent-override: 80.93%;
  descent-override: 30.84%;
  line-gap-override: 0%;
  unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+2013-2014, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
  font-family: 'Orbitron Fallback';
  src: local('Arial'), local('Liberation Sans');
  size-adjust: 125.54%;
  ascent-override: 80.53%;
  descent-override: 19.36%;
  line-gap-override: 0%;
  unicode-range: U+0020-005D, U+005F-007E, U+00A0-00A3, U+00A8, U+00AF-00B0, U+00B4, U+00B6, U+00B8, U+00BF-00CF, U+00D1-00D7, U+00D9-00DD, U+00DF-00EF, U+00F1-00F7, U+00F9-00FD, U+00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+0308, U+2013-2014, U+2018-2019, U+201C-201D, U+2022, U+2026, U+20AC, U+2212;
}

@font-face {
  font-family: 'Exo 2 Fallback';
  src: local('Arial'), local('Liberation Sans');
  size-adjust: 96.71%;
  ascent-override: 103.30%;
  descent-override: 20.78%;
  line-gap-override: 0%;
  unicode-range: U+000D, U+0020-007E, U+00A0-00AC, U+00AE-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+2009, U+200B, U+2013-2014, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2032-2033, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
  font-family: 'Rajdhani Fallback';
  src: local('Arial'), local('Liberation Sans');
  size-adjust: 84.12%;
  ascent-override: 110.55%;
  descent-override: 41.13%;
  line-gap-override: 0%;
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00A3, U+00A5-00A9, U+00AB, U+00AE-00B1, U+00B4, U+00B6-00B8, U+00BB, U+00BF-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+200B, U+2013-2014, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2039-203A, U+2044, U+20AC, U+2122, U+2212;
}
