/* ============================================================
   The three faces, served from this repo.

   WHY SELF-HOSTED. `Layouts/Base.html` used to open with three requests to
   `fonts.googleapis.com` / `fonts.gstatic.com`. Every one of them was
   render-blocking, on the critical path of the first paint, and told Google
   the IP of every person who opened a Datafluvia page — including the
   platform staff pages, which are not public and should not announce
   themselves to a third party. CLAUDE.md already refuses an icon-font CDN;
   the same argument was always true of the text faces and is now applied to
   them.

   The files are the woff2 subsets Google itself serves, downloaded once:

     Montserrat-{Latin,LatinExt}.woff2     35K + 67K  — the app face
     JetBrainsMono-{Latin,LatinExt}.woff2  31K + 11K  — data and identifiers
     FontAwesomeSolid.woff2                155K       — the icon set

   The four TEXT files are VARIABLE within the ranges declared below, which is
   what lets the type scale ask for weight 650 (`--df-weight-display`) instead
   of rounding to a static 600 or 700. The icon face is static by nature.

   THE ICON FACE GOT SMALLER, BY HALF. Material Symbols Outlined was 314K for
   ~3000 glyphs on a variable axis; Font Awesome Solid is 155K for ~2000 on no
   axis at all. Both are more than the 63 glyphs the pack names — subsetting
   either would cut it to ~15K, and the reason not to is that a subset has to
   be rebuilt every time someone adds an icon, silently renders a blank box
   when they forget, and cannot be re-downloaded from upstream to verify.

   LATIN-EXT IS NOT OPTIONAL HERE. Turkish needs ğ ş İ ı Ğ Ş, and only ı and
   the Latin-1 block live in the `latin` subset — ğ (U+011F) and ş (U+015F)
   are in `latin-ext`. Ship only `latin` and every Turkish page falls back to
   the system face mid-word, which is worse than not loading a webfont at all.
   The two `@font-face` rules are the same family and the browser picks per
   codepoint via `unicode-range`.

   `font-display: swap` on the text faces: the fallback stack in
   `--df-font-sans` is a real system face, so showing it for 100ms beats a
   blank page. The ICON face keeps `block`, for a reason that CHANGED with the
   font and still lands in the same place. Under Material Symbols a swap
   period painted the raw ligature ("chevron_right") in the button. Font
   Awesome is addressed by codepoint instead, so the fallback paints the
   Private Use Area in whatever face wins — a tofu box, or on macOS whatever
   Apple has parked at U+F054. `block` shows nothing for up to 3s instead,
   which is the honest state of a button whose icon has not arrived; the
   accessible name is on the button either way, so nothing is lost meanwhile.
   ============================================================ */

/* ---- Montserrat — the app face (400-800) ---- */
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("../../Fonts/Montserrat-LatinExt.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: "Montserrat";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("../../Fonts/Montserrat-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;
}

/* ---- JetBrains Mono — data, identifiers, tokens (400-500) ---- */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("../../Fonts/JetBrainsMono-LatinExt.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: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("../../Fonts/JetBrainsMono-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 Awesome 6 Free Solid — the icon set (§11) ----
   WEIGHT 900 IS NOT A STYLE CHOICE, it is how Font Awesome names its
   families: one family ("Font Awesome 6 Free") with the Solid cut at 900 and
   the Regular cut at 400. `.dp-fa` in `DesignPack/Foundation/Icons.css` asks
   for 900 and must keep asking — at any other weight the browser synthesises
   a fake bold of nothing and every icon disappears.

   NO `unicode-range`, deliberately. The glyphs live in the Private Use Area,
   which no text on the page ever contains, so a `unicode-range` covering it
   would be correct and useless: the browser only fetches a face when it sees
   a codepoint in the declared range, and it sees those codepoints only
   because this file already told it which face draws them. Left off, so the
   fetch happens on first use as it should.

   See `Components/DesignPack/Icons.html` for the name → codepoint map and why
   there are two of them. */
/* 04.10.2026: no longer declared here — Font Awesome's own stylesheet comes
   from the jsDelivr CDN (`Layouts/Base.html`) and declares this face itself.
   The notes above describe the self-hosted setup it replaced. */

/* ---- The document's face ----
   Nothing set one. `Layouts/Dashboard.css` puts it on `.df-app` and
   `Public.css` puts it on `.pub-shell`, so every shell was covered and
   `document.body` still computed to the UA default — `Times` on this machine.
   Which is fine right up to the first text node that is not inside a shell:
   the one that exists today is `dpToastRegion`, deliberately rendered OUTSIDE
   the `body` block so every shell inherits it (see `Layouts/Base.html`), and
   a toast in Times New Roman is not a toast anybody wants to read.

   Declared here rather than in a reset because this is the file that owns
   which faces the product has; `--df-font-sans` still comes from
   `Datafluvia/Tokens.css`, so the face itself is still decided in one place. */
body {
  font-family: var(--df-font-sans);
}
