/* ==========================================================================
   GodSend — fonts.css: the two brand faces, self-hosted, and nothing else
   --------------------------------------------------------------------------
   Loaded by BOTH document heads, immediately before tokens.css:

       partials/head.ejs         fonts.css → tokens.css → theme.css → admin.css → …
       partials/public-head.ejs  fonts.css → tokens.css → public.css

   WHY SELF-HOSTED. `helmet`'s default CSP permits neither a third-party
   stylesheet origin nor a third-party font origin, so a Google Fonts <link>
   is blocked on the first deploy and the page falls back to a system face
   with no error anyone sees. A nested @import is worse still: it serialises
   behind its parent sheet and cannot be preloaded, costing two render-
   blocking round trips even where it is allowed. Every byte here is
   same-origin. See public/fonts/README.md for provenance and licences —
   American Captain Eternal is proprietary and is here on the owner's
   confirmed licence, which is recorded in that file and nowhere else.

   THIS FILE REPLACED THE SERIF. Until 2026-09-05 it declared Source Serif 4,
   Broadsheet's voice, which had already been retired from every surface. The
   two serif woff2 files stay on disk, unreferenced, until the owner rules on
   deleting them.

   THE PUBLIC PAGES NOW LOAD A WEB FONT, which reverses a standing ruling.
   The old public head carried the comment "no web font", on a real argument:
   these pages open on cellular inside an in-app webview and are held to a
   stricter budget than the admin. That budget is still respected, three ways —
   `font-display: swap` so text paints immediately in the fallback and never
   blocks first paint; the Latin subset only, so the display face is 36 KB and
   each Lato face about 23 KB; and `preload` on the two faces the first screen
   actually uses (the display face and Lato 400) in public-head.ejs, so they
   are in flight with the stylesheet rather than after it. The bold and italic
   Lato faces are NOT preloaded: they are below the fold or absent entirely.
   ========================================================================== */

/* THE DISPLAY FACE — headings, the choices, every control label.
   Declared at 400 because that is genuinely its weight class: the face is
   heavy by drawing, not by weight, and its OS/2 usWeightClass reads 400.
   Nothing should ever ask it for 700 — with synthesis off (below) that
   silently gets the same face, and with synthesis on it would get a smeared
   one. Rules use `font-weight: 400` against this family and say so. */
@font-face {
  font-family: "American Captain";
  src: url("/fonts/american-captain-eternal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* THE TEXT FACE — running copy, tables, forms, every figure.
   Two upright weights and one true italic. 400 and 700 are the only weights
   any rule asks for; 900 exists upstream and is deliberately not shipped. */
@font-face {
  font-family: "Lato";
  src: url("/fonts/lato-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Lato";
  src: url("/fonts/lato-700.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* The true italic is loaded so nothing anywhere synthesises an oblique. */
@font-face {
  font-family: "Lato";
  src: url("/fonts/lato-400-italic.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

/* No faux bold, no faux italic, on either family. For Lato this is a quality
   floor — the real 700 and the real italic are both loaded above. For the
   display face it is load-bearing: it ships in one weight, and a heading that
   asked for 700 would otherwise be double-struck by the engine. */
:root {
  font-synthesis-weight: none;
  font-synthesis-style: none;
}
