/* ═══════════════════════════════════════════════════════════════════════════
   SELF-HOSTED FONTS — F-306. These used to come from fonts.googleapis.com.

   WHY THEY MOVED. Search Console, 2026-09-11: "LCP issue: longer than 2.5s
   (mobile)", ONE url group, 13,403 urls, group LCP 2.8s. The LCP element is
   the H1 — text, not a photo — so this is nothing like F-110's listing hero.
   A text LCP is gated by when the page can paint at all, and every page was
   doing this first:

       <link href="https://fonts.googleapis.com/css2?..." rel="stylesheet">

   A RENDER-BLOCKING STYLESHEET ON A THIRD-PARTY ORIGIN. Nothing paints until a
   DNS lookup, a TLS handshake and a round trip to a host the browser has never
   spoken to all complete — then a SECOND origin (fonts.gstatic.com) for the
   files themselves. Measured on /services.html: TTFB 490ms, first paint
   1272ms. On a p75 phone connection that third-party round trip alone is
   routinely 300-600ms, and 300ms is the whole gap to the 2.5s threshold.

   WHAT GOOGLE ACTUALLY SERVED, read off the font tables rather than assumed:
   DM Sans is a VARIABLE font (wght axis 100-1000), so the five separate
   @font-face blocks the css2 API emits for 300/400/500/600/700 all point at
   ONE file. Declared here as a single face with a weight RANGE, which is what
   it is. Bebas Neue is static 400. Four files, 77,856 bytes, of which a normal
   visitor downloads 50,700 (latin) — latin-ext carries the diacritics that
   turn up in NEPA surnames and downloads only when a glyph needs it.

   FILENAMES ARE CONTENT-HASHED and /fonts/* is immutable in netlify.toml. A
   new cut of a font is a new filename, so the year-long cache can never serve
   a stale one.

   font-display: swap is kept deliberately. It is what lets the H1 paint in the
   fallback face immediately, which IS the LCP — the swap to Bebas happens
   after and does not move it.
   ═══════════════════════════════════════════════════════════════════════════ */
@font-face{
  font-family:'Bebas Neue';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url(/fonts/bebas-neue-latin.a7c90c89.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:'Bebas Neue';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url(/fonts/bebas-neue-latin-ext.16c95ce4.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:'DM Sans';
  font-style:normal;
  font-weight:100 1000;
  font-display:swap;
  src:url(/fonts/dm-sans-latin.9fea608a.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:'DM Sans';
  font-style:normal;
  font-weight:100 1000;
  font-display:swap;
  src:url(/fonts/dm-sans-latin-ext.a5d38fe9.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;
}

/* ── WHY ITS OWN FILE, AND NOT jjnre-ui.css ─────────────────────────────────
   The faces went into jjnre-ui.css first, because its own header says it is
   "Loaded LAST in <head> on every public page". Checked rather than believed:
   SEVEN pages do not link it — 404, crm, deal-room, join, sign,
   _academy-harness and docs/jjnre-policy-drafts — and every one of them DID
   link Google Fonts. They would have shipped with no font declaration at all
   and fallen back to the system sans, which is a visual regression nobody
   would have attributed to an LCP change.

   So this is a 1:1 replacement for the link that was removed: same position in
   the head, same page set, one source of truth, and no page silently in or out
   of scope depending on which other stylesheet it happens to load. */
