/* #566 — self-hosted webfonts. No third-party font CDN.
 *
 * Until this file existed, index.html pulled Fraunces and Nunito from
 * https://fonts.googleapis.com, which handed Google the IP address of every
 * visitor — parents and children's therapists included — on every page load.
 * That is the same class of third-party disclosure the project already
 * refuses for IP geolocation (Security:IpGeolocation is off by default; see
 * docs/compliance/security-audit-ip-logging.md §8 and #564). It also broke
 * session-recording fidelity: rrweb cannot read cssRules off a cross-origin
 * sheet, so every snapshot logged "Error inlining remote css file" and
 * replayed without the app's own typography.
 *
 * The .woff2 files next to this stylesheet are byte-for-byte what
 * fonts.gstatic.com was serving for the exact query index.html used
 * (Fraunces v38, Nunito v32, fetched 2026-08-06), so rendering is
 * unchanged — same binaries, same unicode-ranges, same font-display.
 *
 * WHY SO FEW FILES. Both families are VARIABLE fonts. Google's css2 reply
 * listed 35 @font-face blocks, but the URLs behind them resolve to only a
 * handful of distinct binaries: every roman weight of Fraunces (400/500/600/
 * 700) pointed at one identical file per subset, and likewise for Nunito.
 * Verified by md5 — the per-weight file and the file Google serves for
 * `wght@400..700` are the same bytes. So the roman faces below declare the
 * weight RANGE 400-700 against that single variable file, which is exactly
 * what Google does for a range request. The italic is different: the app
 * only ever asked for italic 500, and Google answered with a smaller
 * instance pinned at 500, so that one keeps a single weight value.
 *
 * WHAT WAS DROPPED. Google also served `cyrillic`, `cyrillic-ext` and
 * `vietnamese` subsets. This is a Greek app; none of that text appears, and
 * the combining marks those ranges carry (U+0304, U+0308, U+0329) are also
 * present in the latin/latin-ext ranges kept below. Dropping them saves
 * ~250 KB across the three apps and cannot change what renders.
 *
 * WHAT IS NOT HERE, AND WHY IT IS NOT A REGRESSION. Neither family ships a
 * Greek subset — not in the CDN reply, and not upstream either (the
 * google/fonts METADATA.pb for both lists only latin, latin-ext, menu and
 * vietnamese). So Greek text was ALREADY being drawn by the system fallback
 * in the font-family stack, never by Fraunces or Nunito. Shipping a Greek
 * face here would change the app's appearance rather than preserve it, so
 * this change deliberately does not. The stale comment in app.css that
 * claimed "Nunito has full Greek glyph coverage in the loaded subset" has
 * been corrected in place.
 *
 * Licences: SIL Open Font License 1.1, vendored beside the binaries as
 * OFL-Fraunces.txt and OFL-Nunito.txt.
 */

/* ---------------------------------------------------------------- Fraunces */

@font-face {
    font-family: 'Fraunces';
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url('fraunces-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: 'Fraunces';
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url('fraunces-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;
}

@font-face {
    font-family: 'Fraunces';
    font-style: italic;
    font-weight: 500;
    font-display: swap;
    src: url('fraunces-italic-500-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: 'Fraunces';
    font-style: italic;
    font-weight: 500;
    font-display: swap;
    src: url('fraunces-italic-500-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;
}

/* ------------------------------------------------------------------ Nunito */

@font-face {
    font-family: 'Nunito';
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url('nunito-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: 'Nunito';
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url('nunito-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;
}
