/* ==========================================================================
   Self-hosted font declarations (NON-CRITICAL, async-loaded)
   Fixes CORS issues with external CDN font loading in production/QA.

   This file loads ASYNC (non-render-blocking) — see templates/base.html. It
   holds only the faces that are NOT needed at first paint. The CRITICAL faces
   that must stay render-blocking — the metric-matched 'Inter Fallback' /
   'Satoshi Fallback' (the CLS guard) and the PRELOADED heading family
   ('Satoshi' 700) — live at the TOP of static/css/styles.css instead.
   Paired file: static/css/styles.css.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Inter — Body font ('Inter var', variable, opsz + wght 100-900 preserved).
   Subset into unicode-range slices (Google Fonts ranges; generated with
   fontTools.subset from the InterVariable.woff2 master in static/fonts/inter/,
   which stays in-repo for future re-subsetting but is no longer referenced by
   any CSS), so a page only downloads the scripts it actually renders — an
   English page pulls the ~67KB latin slice instead of the full ~343KB face.

   These faces are ASYNC ON PURPOSE. First paint renders body text in the
   metric-matched 'Inter Fallback' (styles.css, render-blocking), which
   occupies Inter's exact box, so the late swap reflows nothing (CLS 0) —
   and on cold loads (the case PSI/Lantern measures) the font bytes stop
   competing with the LCP hero image for pre-paint bandwidth (the old
   render-blocking full face + preload put 353KB ahead of the hero on PSI's
   simulated mobile connection). A warm cached fonts.css may flip to
   media="all" before first paint and start a slice earlier — still strictly
   better than the always-preloaded full face it replaces. Do NOT move these
   back to styles.css or re-add the preload in base.html —
   tests/unit/test_critical_font_fallbacks.py guards both directions.

   The legacy 'Inter' / 'InterVariable' alias faces were retired: nothing
   references 'InterVariable', and Tailwind's sans stack ('Inter var',
   'Inter', 'Inter Fallback', …) falls through per-character, so 'Inter'
   having no face simply defers to the metric-matched fallback.
   -------------------------------------------------------------------------- */
@font-face {
  font-family: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-latin.4d7c5a7e39a1.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: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-latin-ext.c117511cf3d0.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 var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-cyrillic.ea1a6e1dc81b.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-cyrillic-ext.1800bbc7f988.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

@font-face {
  font-family: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-greek.9848d8569cc7.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}

@font-face {
  font-family: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-greek-ext.fadd1d73e64c.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}

@font-face {
  font-family: 'Inter var';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter/inter-vietnamese.6d0b21e5ad16.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

/* --------------------------------------------------------------------------
   Satoshi — Heading font, Black (900) only. The 700 (Bold) weight is
   above-the-fold + preloaded, so it is critical and lives in styles.css.
   -------------------------------------------------------------------------- */
@font-face {
  font-family: 'Satoshi';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url("../fonts/satoshi/Satoshi-Black.d9749ed5ed84.woff2") format('woff2');
}

/* --------------------------------------------------------------------------
   Merriweather — Serif font (petition body text)
   -------------------------------------------------------------------------- */
@font-face {
  font-family: 'Merriweather';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url("../fonts/merriweather/merriweather-latin.c355ec2df77a.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: 'Merriweather';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url("../fonts/merriweather/merriweather-latin-ext.3591b7c787c0.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;
}

/* --------------------------------------------------------------------------
   Noto Sans — Secondary sans-serif
   -------------------------------------------------------------------------- */
@font-face {
  font-family: 'Noto Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/noto-sans/noto-sans-latin.86d512f8885d.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: 'Noto Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/noto-sans/noto-sans-latin-ext.cd3472cf160e.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;
}

/* --------------------------------------------------------------------------
   Plus Jakarta Sans — Accent sans-serif
   -------------------------------------------------------------------------- */
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans/plus-jakarta-sans-latin.52d04440a9fa.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: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.5ffe46eeb00d.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;
}
