/* ══════════════════════════════════════════════════════════════════════════
   Self-hosted webfonts — the SINGLE source of these @font-face rules.
   ──────────────────────────────────────────────────────────────────────────
   Three pages need them (index.html, login.html, dev.html) and each has its own
   stylesheet, so this file exists to stop the same block being pasted into all
   three and then drifting.

   build.js does two things with it:
     - emits it verbatim as web/dist/fonts.css, which login.html and dev.html link
     - PREPENDS it to web/dist/core.css, so the main app still gets its fonts
       without paying an extra request on the critical path

   So: edit here, never in core.css/fonts.css (both generated), and never by
   copying into login.css or dev.css.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Fonts: self-hosted ─────────────────────────────────────────────────────
   These @font-face rules replace a render-blocking <link> to
   fonts.googleapis.com. That link cost TWO serialized round trips to a
   third-party origin before any text could paint in the real font: one for the
   CSS, and only then could the browser discover the woff2 URLs inside it. Now
   the files are same-origin, and index.html <link rel=preload>s the latin one
   so it starts downloading in parallel with this stylesheet.

   Outfit is a VARIABLE font: every weight the app uses (300–800) comes from one
   file per subset, so self-hosting costs 2 requests / 47 KB rather than the six
   static faces the weight list implies.

   Inter was dropped entirely. It was 4 more weights on the critical path for
   two rules: a fallback position in --font-family below (so it only rendered if
   Outfit failed) and one email-composer rule. Both now fall through to the
   system sans-serif, which is what the fallback slot was always for.

   Still NOT an @import: that cannot be seen by the preload scanner and only
   starts downloading once this stylesheet has been fetched and parsed, adding
   the serialized round trip back. The old import also pulled JetBrains Mono,
   which nothing applies — the only mono rule here is `var(--font-mono,
   monospace)` and --font-mono is never defined. */

@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 300 800;   /* variable axis — one file serves the whole range */
  font-display: swap;
  src: url('/static/fonts/outfit-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: 'Outfit';
  font-style: normal;
  font-weight: 300 800;
  font-display: swap;
  src: url('/static/fonts/outfit-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;
}
