/* assets/css/fonts.css
 *
 * Build Spec v3.0, 00-system/03-design-tokens.md section 2, and the correction
 * appended to it on 31 August 2026.
 *
 * IBM PLEX IS REMOVED AT v3.0. It is a competent, cold and extremely common
 * default and it reads as a template choice. The three families below replace
 * it: Archivo for display, Instrument Sans for body, JetBrains Mono for data.
 * All three are SIL Open Font License 1.1.
 *
 * SELF-HOSTED woff2, latin subset, in /assets/fonts/. There is no runtime
 * request to fonts.googleapis.com or fonts.gstatic.com, which is why the CSP
 * in .htaccess needs no font-src exception. This rule carries forward from
 * v2.0 unchanged and it is the reason the CSP is as tight as it is.
 *
 * @font-face is render-blocking whichever file it sits in, so this stays a
 * small separate stylesheet rather than being folded into tokens.css.
 *
 * ---------------------------------------------------------------------------
 * FIXED 2026-08-31, Phase 1 step 1. THE FILES ARE HERE AND THE NAMES WERE
 * WRONG.
 *
 * The previous version of this file said the binaries did not exist yet and
 * pointed at archivo-latin.woff2, instrument-sans-latin.woff2 and
 * jetbrains-mono-latin.woff2. All three of those filenames are wrong. The
 * files that exist are the "-var-" ones below, placed in assets/fonts/ on
 * 31 August. Every stack was therefore silently falling through to
 * ui-sans-serif and the site was not being seen in its own typefaces.
 *
 *   archivo-var-latin.woff2           wght 100-900, wdth 62-125    82 KB
 *   instrument-sans-var-latin.woff2   wght 400-700, wdth 75-100    55 KB
 *   jetbrains-mono-var-latin.woff2    wght 100-800                 38 KB
 *
 * 175 KB total, kerning and ligatures retained, tnum retained on the mono.
 *
 * THEY ARE DECLARED AS VARIABLE FACES, not as separate weight files. That is
 * the whole point: --width-display drives Archivo's wdth axis at 108 for
 * headings, and the v2.0 archivo-expanded-latin.woff2 was a STATIC Expanded
 * instance pinned at width 125 with no wdth axis at all, so the token was
 * inert against it. 90-migration/93 item 2.
 *
 * The src list names woff2-variations first and plain woff2 second. A browser
 * that does not recognise the first format string skips that entry and takes
 * the second, and both entries point at the same file, so the face loads
 * either way. Doc 03 specifies the variations form; the second entry is
 * insurance, not a second download.
 *
 * The latin subset DELIBERATELY EXCLUDES U+2014, THE EM DASH. Key Business
 * Rule 8. If one ever reaches the copy it renders as a missing glyph, which
 * is a free extra tripwire on top of the greps.
 * ---------------------------------------------------------------------------
 *
 * House rule: no em dash characters.
 */

@font-face {
  font-family: 'Archivo';
  src: url('/assets/fonts/archivo-var-latin.woff2') format('woff2-variations'),
       url('/assets/fonts/archivo-var-latin.woff2') format('woff2');
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Instrument Sans';
  src: url('/assets/fonts/instrument-sans-var-latin.woff2') format('woff2-variations'),
       url('/assets/fonts/instrument-sans-var-latin.woff2') format('woff2');
  font-weight: 400 700;
  font-stretch: 75% 100%;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('/assets/fonts/jetbrains-mono-var-latin.woff2') format('woff2-variations'),
       url('/assets/fonts/jetbrains-mono-var-latin.woff2') format('woff2');
  font-weight: 100 800;
  font-style: normal;
  font-display: swap;
}
