/*
 * Self-hosted web fonts: the app loads this as /app/fonts/fonts.css, the
 * marketing site as /fonts/fonts.css (scripts/build-hosting.mjs copies the
 * folder there; scripts/site-langs.mjs writes the site's <link>).
 *
 * WHY: a Google Fonts <link> sent every visitor's IP address to Google on the
 * first paint, before they had chosen anything. These are the SAME files
 * Google serves (Inter v20, Noto Sans Hebrew v50, Noto Sans Arabic v33,
 * Heebo v28) with Google's own unicode-range, so nothing looks different and
 * no font request leaves this origin.
 *
 * WHICH SUBSETS, measured against each file's glyph table (2026-09-29):
 * - Inter: all seven. Each draws letters no later face has (Greek, Vietnamese,
 *   extended Cyrillic in a lyric), and a subset is downloaded only when the
 *   page draws a character in its range — an unused one costs disk, not bytes.
 * - Noto Sans Hebrew, Heebo: hebrew only. Noto Sans Arabic: arabic only.
 *   Their latin / latin-ext / cyrillic-ext / greek-ext files hold nothing Inter
 *   lacks, so they could never render a glyph behind it. Their math and symbols
 *   files were worse than useless: their ranges cover ♭ ♯ ✓ → ⋯, which neither
 *   file contains, so a page drawing one downloaded them for nothing and drew
 *   the symbol in the system font anyway (as it still does). Their only unique
 *   glyphs are a few combining marks, √ and super/subscript digits, none of
 *   which the app or site text uses.
 * - One rule per subset with a weight RANGE. Google lists 400/500/600/700 as
 *   four rules on ONE variable file (every file here has wght 100–900, read
 *   from its fvar table 2026-10-05; none has opsz), and a range over that file
 *   draws any weight inside it. Inter declares the file's whole axis,
 *   100 900, so a display weight (760) is drawn as asked rather than
 *   clamped to 700. The other three families stay 400 700: nothing asks
 *   them for more, and a Hebrew or Arabic glyph beside a 760 Latin one then
 *   renders at 700, as it always has.
 *   Widening Inter made literal weights outside 400–700 real (they used to
 *   clamp), so every one was pinned to the weight it already drew and
 *   src/styles/__tests__/fontWeights.test.ts keeps new ones out; `b`/`strong`
 *   (UA `bolder`, 900 under a 600 parent) are pinned in global.css.
 * - Order within a family is Google's: where ranges overlap the LAST rule is
 *   tried first, so do not re-sort.
 * - The app's service worker does not precache these (vite.config.ts
 *   globIgnores); it keeps each one the first time a page uses it.
 *
 * App stack: Inter, Noto Sans Hebrew, Noto Sans Arabic (tokens.css
 * --font-sans). Site stack: Inter, Heebo, Noto Sans Arabic (site.css). A family
 * declared here and not named on a page is never downloaded there.
 *
 * TO REFRESH: request Google Fonts' css2 API for
 *   family=<Family>:wght@400;500;600;700&display=swap
 * with a current desktop Chrome User-Agent, save each url() here as
 * <family>-<version>-<subset>.woff2 (a new version is a new name, so no cache
 * can serve a stale file), copy the rules with only src and font-weight
 * changed (Inter 100 900, the rest 400 700), update the preload in
 * index.html and FONT_PRELOAD in
 * scripts/site-langs.mjs, then run node scripts/site-langs.mjs.
 */

/* ── Inter ─────────────────────────────────────────────────────── */
/* cyrillic-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-greek-ext.woff2) format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-greek.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-vietnamese.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;
}
/* latin-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-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-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(inter-v20-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;
}

/* ── Noto Sans Hebrew ──────────────────────────────────────────── */
/* hebrew */
@font-face {
  font-family: 'Noto Sans Hebrew';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(noto-sans-hebrew-v50-hebrew.woff2) format('woff2');
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}

/* ── Noto Sans Arabic ──────────────────────────────────────────── */
/* arabic */
@font-face {
  font-family: 'Noto Sans Arabic';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(noto-sans-arabic-v33-arabic.woff2) format('woff2');
  unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}

/* ── Heebo ─────────────────────────────────────────────────────── */
/* hebrew */
@font-face {
  font-family: 'Heebo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(heebo-v28-hebrew.woff2) format('woff2');
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
