/* Self-hosted replacement for the Google Fonts CSS + gstatic round trip.
 * Previously every page carried:
 *   <link rel="preconnect" href="https://fonts.googleapis.com">
 *   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 *   <link href="https://fonts.googleapis.com/css2?family=...&display=swap" rel="stylesheet">
 * That's a serial chain the browser cannot shortcut: DNS + TLS to
 * fonts.googleapis.com, fetch its CSS (render-blocking), parse it, THEN
 * discover the actual font URLs and repeat DNS + TLS to fonts.gstatic.com
 * before a single glyph can paint. This file collapses both hops onto the
 * app's own origin (already open) — the exact @font-face rules Google would
 * have served, fetched once with a real Safari UA so this is the same latin
 * subset a Safari/iPad visitor would have gotten, and only the subset: the
 * "latin-ext" and "vietnamese" blocks Google also serves are dropped, they
 * are near the same size as "latin" and this app has no non-latin content.
 *
 * Only the axis combinations actually used across the five templates are
 * included:
 *   - Quicksand normal, weights 400-700 (one variable file covers the
 *     range — Google serves the identical URL for 400/500/600/700, this
 *     is not four separate downloads).
 *   - Fraunces italic, weights 500-600, optical-size axis 9..144
 *     (login/index/error/report/stats all use one or both of these).
 *   - Fraunces normal, weight 600 only, opsz 9..144 (login/error/report/
 *     stats use this; index.html does not — see AGENTS.md "Fonts").
 * If a future page needs a weight/style outside these, re-run the curl
 * recipe in docs/PERF.md for the new @family=... query and add a block.
 *
 * URLs carry ?v=1 (a fonts.css-local version, independent of APP_VERSION)
 * so they hit app.py's 1-year immutable Cache-Control rule for
 * /static/fonts/ — see the _cache_static docstring. Bump the query value
 * here (and nowhere else) if a font file under this path is ever replaced.
 */

@font-face {
  font-family: 'Quicksand';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/static/fonts/quicksand-latin-wght.woff2?v=1') 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: 'Fraunces';
  font-style: italic;
  font-weight: 500 600;
  font-display: swap;
  src: url('/static/fonts/fraunces-latin-ital-wght.woff2?v=1') 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: 'Fraunces';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/static/fonts/fraunces-latin-w600.woff2?v=1') 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;
}
