/* Self-hosted, subsetted WOFF2. No CDN — privacy, and one fewer connection on
   the critical path. Files are fetched by `node web/fetch-fonts.mjs`; if any is
   missing the stack falls through to the metric-matched local fallbacks below,
   so the site never renders unstyled. */

@font-face {
  font-family: 'Archivo';
  src: url('/_a/fonts/archivo-latin.woff2') format('woff2');
  font-weight: 400 900;
  font-stretch: 62% 125%;
  font-style: normal;
  font-display: swap;
  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: 'Archivo';
  src: url('/_a/fonts/archivo-latin-ext.woff2') format('woff2');
  font-weight: 400 900;
  font-stretch: 62% 125%;
  font-display: swap;
  unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, 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';
  src: url('/_a/fonts/inter-latin.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  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';
  src: url('/_a/fonts/inter-latin-ext.woff2') format('woff2');
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, 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';
  src: url('/_a/fonts/inter-cyrillic.woff2') format('woff2');
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: 'Newsreader';
  src: url('/_a/fonts/newsreader-latin.woff2') format('woff2');
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Newsreader';
  src: url('/_a/fonts/newsreader-latin-ext.woff2') format('woff2');
  font-weight: 200 800;
  font-display: swap;
  unicode-range: U+0100-02AF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Arabic and Devanagari get real self-hosted Noto subsets: they are small
   enough (~160 KB / ~120 KB) and system coverage is unreliable. They extend the
   'Inter' family so the :lang() rules in styles.css need no extra plumbing. */
@font-face { font-family: 'Inter'; src: url('/_a/fonts/noto-arabic.woff2') format('woff2'); font-weight: 100 900; font-display: swap; unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF; }
@font-face { font-family: 'Inter'; src: url('/_a/fonts/noto-devanagari.woff2') format('woff2'); font-weight: 100 900; font-display: swap; unicode-range: U+0900-097F, U+A830-A839, U+1CD0-1CF9, U+200C-200D, U+20A8, U+25CC; }

/* CJK is NOT self-hosted. Google splits Noto Sans JP/KR into ~120 numbered
   range files; shipping them would cost several MB for two locales. Japanese
   and Korean devices ship excellent system faces, so styles.css routes those
   locales to a local stack instead. */

/* Metric-matched fallbacks so a missing WOFF2 shifts layout as little as
   possible while the real face loads (or forever, if the fetch never ran). */
@font-face {
  font-family: 'Archivo Fallback';
  src: local('Arial Narrow'), local('Helvetica Neue'), local('Segoe UI'), local('Roboto');
  size-adjust: 97%;
  ascent-override: 96%;
  descent-override: 24%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback';
  src: local('Helvetica Neue'), local('Segoe UI'), local('Roboto'), local('Arial');
  size-adjust: 100%;
  ascent-override: 96.5%;
  descent-override: 24%;
  line-gap-override: 0%;
}
