/* Wykeham webfonts — SELF-HOSTED since 14 October 2026 (client decision).
   Newsreader (display/headings, 400; 500 for the nav panel title only — client
   amendment, 10 September 2026, inside the 500 ceiling) and Inter (body/UI,
   400 + 500 only). No weight above 500 is shipped: the ceiling is enforced by
   not having the files.

   WHY THESE ARE NO LONGER AN @import FROM GOOGLE
   Two reasons, and the first is the one that mattered.

   1. PRIVACY. fonts.googleapis.com and fonts.gstatic.com received every
      visitor's IP address on every page load, before any consent, with no
      lawful basis a UK GDPR assessment would be comfortable with. Self-hosting
      removes both origins from the page entirely. The CSP no longer lists
      either, which is the check that keeps it that way.

   2. LATENCY, NOT BYTES. The @import was a dependent chain: resolve
      fonts.googleapis.com, TLS, fetch the CSS, THEN discover the font URLs,
      THEN resolve fonts.gstatic.com and TLS again before a byte of font
      arrives. Four extra round trips on the critical path before first text.
      Served from the same origin the HTML came from, that collapses to zero
      extra connections.

      THE BYTE COUNT IS ESSENTIALLY UNCHANGED, about 175KB for an English
      page, and anyone expecting a large saving should read this: Google
      already subsets by script, and unicode-range already means a browser
      fetches only what it renders. The files below are Google's own latin and
      latin-ext subsets, byte for byte. Cutting further would mean dropping
      Newsreader's optical-size axis, which changes the letterforms the design
      was set in — not a performance decision to take quietly.

   unicode-range IS LOAD-BEARING. Keep it on every face. Without it a browser
   downloads latin-ext as well as latin on an English page, which is 83KB of
   Inter and 84KB of Newsreader nobody reads. The italic Newsreader face is
   listed for <cite> and <em> inside display text and is fetched only if such
   text is actually rendered.

   To refresh: re-fetch the CSS2 URL in the git history of this file with a
   modern browser UA, keep the latin and latin-ext blocks, and re-copy.

   ONE @font-face PER FILE, WITH A WEIGHT RANGE. Google's CSS splits 400 and
   500 into two rules pointing at the SAME variable file. Two rules means two
   font resources, which means the file is fetched TWICE and the preload below
   only ever satisfies one of them — measured: Inter arrived at 55ms from the
   preload and again at 690ms from the CSS, 48KB paid twice. Both families are
   genuine variable fonts (Inter clamps a 700 request to its 500 maximum;
   Newsreader's 700 lands between its 400 and 500 widths), so one rule with
   `font-weight:400 500` is exact, not an approximation. */

/* latin-ext */
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/fonts/inter-normal-400-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/fonts/inter-normal-400-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;
}
/* latin-ext */
@font-face{
  font-family:'Newsreader';
  font-style:italic;
  font-weight:400;
  font-display:swap;
  src:url('/fonts/newsreader-italic-400-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face{
  font-family:'Newsreader';
  font-style:italic;
  font-weight:400;
  font-display:swap;
  src:url('/fonts/newsreader-italic-400-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;
}
/* latin-ext */
@font-face{
  font-family:'Newsreader';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/fonts/newsreader-normal-400-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face{
  font-family:'Newsreader';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/fonts/newsreader-normal-400-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;
}
