/*
 * Nava webfonts — the single source of truth, self-hosted.
 *
 * Every page links this file (`<link rel="stylesheet" href="/assets/fonts.css">`).
 * It is served from /assets, which scripts/build-site.js copies into dist/
 * and the Vite dev server maps to the repo root, so the same URL works in
 * dev, preview and production. When a face changes it changes HERE, once —
 * the same rule tokens.css §1 states for token values.
 *
 * DM SANS IS THE SYSTEM FACE (2026-08-01, founder's call). It replaced the
 * Space Grotesk display + Inter body pair that shipped until this commit;
 * --font-display and --font-brand now both resolve to it, so the display/
 * body distinction is carried by WEIGHT and SIZE, not by a second family.
 * See docs/rules/DESIGN.md §3.
 *
 * SUPREME AND INTER ARE RESERVED. Their faces are declared below and their
 * files live in assets/fonts/, but no rule in the codebase selects them, and
 * @font-face is lazy — a browser fetches a face only when something actually
 * renders in it, so declaring them here costs a visitor nothing. They are
 * kept, not deleted, because each answers a question DM Sans can't:
 *   • Supreme — a display alternative with more character per glyph, if a
 *     marketing surface ever wants a voice distinct from the product UI.
 *   • Inter — the fallback if Nava ever ships Uzbek in CYRILLIC. DM Sans is
 *     Latin-only (verified: zero Cyrillic codepoints in either subset);
 *     Inter has full Cyrillic coverage, though the subset shipped here is
 *     latin + latin-ext only, so that subset would need adding too. Inter
 *     also has real tabular figures (`tnum`), which DM Sans lacks — relevant
 *     if a numeric column ever needs to align exactly.
 * Adopting either for real is a DESIGN.md §3 change, not a local one.
 *
 * Why self-hosted rather than a CDN <link>: Supreme is on Fontshare, not
 * Google Fonts, so the CDN route would put a second third-party origin on
 * every page's critical path — and self-hosting removes the last one, since
 * fonts.googleapis.com was previously a render-path dependency on all 19
 * pages.
 *
 * Licenses: DM Sans — SIL Open Font License 1.1 (Colophon Foundry, designed
 * by Jonny Pinhorn, via Google Fonts). Inter — SIL OFL 1.1 (Rasmus
 * Andersson). Supreme — ITF Free Font License (Indian Type Foundry, via
 * Fontshare); all three permit self-hosted commercial webfont use.
 *
 * DM Sans and Inter are VARIABLE — one file per unicode subset covering the
 * whole weight axis (Google serves identical bytes for every static weight
 * requested; verified by checksum), hence the `font-weight: <min> <max>`
 * ranges rather than one face per weight. Supreme is static, three weights.
 */

/* ---- DM Sans — THE system face (variable, wght 100–1000) ---- */
@font-face {
  font-family: "DM Sans";
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url("/assets/fonts/dmsans-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;
}
/* Uzbek copy in this codebase uses the STRAIGHT ASCII apostrophe (U+0027) for
   o' / g' — 4,632 occurrences across i18n, content and HTML, zero uses of the
   modifier turned comma (U+02BB). That matters because DM Sans has no U+02BB
   glyph in either subset: if the copy ever switches to the typographically
   correct character, it will silently fall back to another font mid-word.
   Check this before any such copy migration. */
@font-face {
  font-family: "DM Sans";
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url("/assets/fonts/dmsans-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;
}

/* ---- MuseoModerno — THE WORDMARK FACE (variable, wght 100–900) ----
   Adopted 2026-08-07 (founder's call) for the "Nava" logotype ONLY — the
   appbar/footer .brand-name and the intro splash .intro-name. Selected via
   --font-wordmark; nothing else references it.

   This is the surviving half of a wider trial: MuseoModerno, Josefin Sans
   and Comfortaa were each tried as the landing page's whole face (display +
   body) and all three were rejected. DM Sans remains THE system face for
   every other glyph on every page — see the note at the top of this file.
   So the display/body distinction is still carried by weight and size, and
   the wordmark is the single deliberate exception.

   LATIN SUBSET ONLY, and that is sufficient by construction: the wordmark
   renders the fixed string "Nava". If this face is ever selected by anything
   with variable copy, latin-ext must be added first — a missing subset does
   not degrade gracefully, it swaps face mid-word. It has no Cyrillic either,
   the same gap as DM Sans (see the Inter note below).
   License: SIL OFL 1.1 (Omnibus-Type, via Google Fonts) — same terms as DM
   Sans; self-hosted commercial use permitted.

   SITE-WIDE as of 2026-08-07. --font-wordmark is declared in
   app/src/styles/tokens.css (the source of truth) and inlined by the five
   static pages. Five rules select it, because three pages predate the shared
   Brand component and hand-roll their own lockup:
     components/Brand.module.css .brandName   (all React pages using <Brand>)
     pages/home/App.module.css   .sidebarBrand
     pages/newuu/App.module.css  .brand
     pages/admin/App.module.css  .brand
     .brand-name                 (inlined in all five static pages)
   Adding a sixth lockup means adding it to that list. */
@font-face {
  font-family: "MuseoModerno";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("/assets/fonts/museomoderno-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;
}

/* ---- Inter — RESERVED (variable, wght 100–900) ----
   The full 100–900 axis, which the site never actually had: the old Google
   <link> requested 400;500;600;700, so anything heavier than Bold was
   browser-synthesized. Subsets here are latin + latin-ext only — Inter's
   Cyrillic is a separate subset that is NOT shipped, so the "Inter covers
   Cyrillic" argument requires adding it first. */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("/assets/fonts/inter-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: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("/assets/fonts/inter-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;
}

/* ---- Supreme — RESERVED (static: regular / medium / bold) ---- */
@font-face {
  font-family: "Supreme";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/supreme-400.woff2") format("woff2");
}
@font-face {
  font-family: "Supreme";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/fonts/supreme-500.woff2") format("woff2");
}
@font-face {
  font-family: "Supreme";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/fonts/supreme-700.woff2") format("woff2");
}
