/* ==========================================================================
   Self-hosted Geist + Geist Mono.

   These replace the Google Fonts <link> that used to sit in every page head.
   Three reasons, in order of how much they matter:

   1. It was the site's ONLY external request. Removing it means the whole thing
      is same-origin, so there is no third-party DNS lookup, no second TLS
      handshake and no render-blocking round trip to another host before any
      text can paint. On a cold connection that was the largest single delay in
      first paint, and it sat directly in front of the LCP element on every page.
   2. It makes the privacy claim simpler and stronger. The site previously had to
      disclose that Google receives a request (and therefore an IP address) when
      a page loads. Now nothing does. privacy.html's fonts paragraph was rewritten
      to match — if the typeface ever changes again, that paragraph is a factual
      claim that has to change with it.
   3. `display: swap` on a third-party host still means a flash of fallback text
      on a slow connection. Same-origin, the swap window is short enough that
      most loads never show it.

   Variable fonts, not static instances: one file covers 400-800 for Geist and
   400-500 for Geist Mono, which is the range styles.css and home.css actually
   use. Four files, 92KB total — smaller than the static cut of the same range
   would have been, and fewer requests.

   Only the `latin` and `latin-ext` subsets are vendored. Google also serves
   cyrillic, cyrillic-ext, vietnamese and symbols2 for these families; none of
   them are reachable from any string on this site. The `unicode-range` values
   below are copied verbatim from Google's own CSS, so a character outside the
   vendored range falls through to the system stack rather than rendering a
   box — it does not silently download anything, because there is nothing left
   to download from.

   Regenerating: fetch the css2 URL with a browser User-Agent (a bare curl gets
   the legacy TTF payload instead of woff2), pull the latin and latin-ext src
   URLs out, and re-download. The gstatic paths carry a version segment (v5, v6)
   that changes when Google reissues the family.
   ========================================================================== */

/* Geist — variable, 400 to 800 */
@font-face {
    font-family: 'Geist';
    font-style: normal;
    font-weight: 400 800;
    font-display: swap;
    src: url('/assets/fonts/geist-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;
}

@font-face {
    font-family: 'Geist';
    font-style: normal;
    font-weight: 400 800;
    font-display: swap;
    src: url('/assets/fonts/geist-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;
}

/* Geist Mono — variable, 400 to 500 */
@font-face {
    font-family: 'Geist Mono';
    font-style: normal;
    font-weight: 400 500;
    font-display: swap;
    src: url('/assets/fonts/geist-mono-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;
}

@font-face {
    font-family: 'Geist Mono';
    font-style: normal;
    font-weight: 400 500;
    font-display: swap;
    src: url('/assets/fonts/geist-mono-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;
}
