/* ============================================================================
   INTER — SELF-HOSTED IN assets/, DECLARED HERE  (v0.80, rev 74 Phase 0)

   Inter v5.3.0, Latin subset, four static WOFF2 faces (400 / 600 / 700 / 800), served
   from ../assets/ as files. From v0.43 to v0.79 these faces were inlined in the
   dashboard as ~97 KB of base64 so the page was one self-contained file; that
   property was deliberately retired at rev 74 (§5 of the architecture scope —
   route (a), the author's decision, 31 August 2026), so the bytes now live once
   in assets/ and are cached across every page of the coming split instead of
   being re-parsed per document. There is still no Google Fonts link and no CDN:
   self-hosted was the brief, and files of ours are as self-hosted as base64 was.

   The url() paths are RELATIVE TO THIS FILE, so they resolve from anywhere this
   sheet is linked — dash/ during development, the site root when deployed.

   `font-display:swap` on every face: the fallback renders immediately and Inter
   replaces it. The alternative, `block`, hides the numbers for up to three seconds
   on a slow connection — on a page whose entire purpose is a figure a reader wants
   right now, invisible text is worse than the wrong text.

   ⚠ ONLY THE DECLARED WEIGHTS EXIST. Ask for one that is not here and the browser
   SYNTHESISES it by smearing the nearest outlines, which is the exact look that makes
   a good face read as a cheap one. The harness walks the computed styles to keep every
   declaration on one of the four (`interIsSelfHosted.noWeightIsSynthesised`).

   ⚠ v1.60 (rev 155, D2/T-01): 800 JOINS, AND NOTHING USES IT YET. The redesign's hero
   figures are set in 800 from Phase 2; the face is added at Phase 1 so the weight exists
   before the first rule asks for it, rather than shipping a rule and a synthesised bold
   together. Until then the declaration costs NOTHING on the wire: a browser fetches a
   @font-face only when a rule actually uses the family at that weight, so the 24,400
   bytes A-9 budgets for are a PHASE 2 cost, not a Phase 1 one.

   ⚠ AND IT IS DELIBERATELY NOT PRELOADED (T-07, Kyle, 18 September 2026). The three
   weights in use are preloaded; preloading a face nothing renders would download 24 KB
   on every page for no paint, and would make A-10 (CLS 0.0000 at 1440 and 375) harder
   to reason about rather than easier. The preload is added in the same rev as the first
   rule that sets 800, so the two can be measured together.

   ⚠ PROVENANCE, MEASURED NOT ASSUMED. All four files are byte-identical to the latin
   subset in `@fontsource/inter@5.3.0` — SHA-256 checked on 400, 600 and 700 against the
   faces already here before the 800 was taken from the same package, so the new face
   comes from the same cut as its siblings rather than from a different build of Inter
   that happens to share a version number.
     inter-400  8909904a…  23,664 B      inter-700  6f56409f…  24,356 B
     inter-600  f9a06e79…  24,452 B      inter-800  a7d0a50f…  24,400 B

   ⚠ LICENCE — SIL Open Font License 1.1. Self-hosting is expressly permitted; the
   licence requires that the copyright notice and licence travel WITH the font, which
   is what this comment is. It is a condition, not a courtesy.

     Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter)
     This Font Software is licensed under the SIL Open Font License, Version 1.1.
     This licence is available with a FAQ at: https://scripts.sil.org/OFL

   ============================================================================ */
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url(../assets/inter-400.woff2) format('woff2');
}
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url(../assets/inter-600.woff2) format('woff2');
}
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url(../assets/inter-700.woff2) format('woff2');
}
@font-face{
  font-family:'Inter';
  font-style:normal;
  font-weight:800;
  font-display:swap;
  src:url(../assets/inter-800.woff2) format('woff2');
}

/* ============================================================================
   'INTER FALLBACK' — A METRIC TWIN FOR THE FRAME BEFORE INTER ARRIVES  (v2.26, rev 197)

   ⚠ THE SWAP MOVED THE HOMEPAGE, AND THE POST-DEPLOY PROBE SAW IT. `font-display:swap`
   paints the fallback first and Inter replaces it; the fallback was `system-ui` (Segoe UI
   on Windows), whose line box is 1.33em against Inter's 1.21em and whose words are a
   different width. On a cold load where the first paint came before the faces
   (`out/_p197_cls.mjs` on the live site, 2 of 20 at 1440), every line-height:normal row
   on the homepage's panels moved when Inter landed: 0.0024 of CLS, the whole of
   `clsNoWorseThanTheBaselineAt1440`'s failure (0.0044 against 0.0031). Reproduced locally
   by holding the .woff2 files back 300 ms: 0.0044 exactly.
   So the face the page paints first is Arial RESHAPED TO INTER: scaled to Inter's width
   (size-adjust, per weight — Arial Bold for 600–800, which Arial lacks) and given Inter's
   ascent, descent and line gap, so a line is 1.21em in both and a word takes the same
   room. The swap still happens — nobody reads a page in the fallback for longer than
   they did — it just moves nothing. local() only: NOTHING IS DOWNLOADED for these faces,
   and a system without Arial or a metric clone (Android) falls through to system-ui as
   before. Figures: out/_p197_fontmetrics.mjs, in the Chromium the harness drives.
   ============================================================================ */
@font-face{
  font-family:'Inter fallback';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:local('Arial'),local('ArialMT'),local('Arimo'),local('Liberation Sans');
  size-adjust:106.02%;
  ascent-override:91.37%;
  descent-override:22.75%;
  line-gap-override:0%;
}
@font-face{
  font-family:'Inter fallback';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:local('Arial Bold'),local('Arial-BoldMT'),local('Arimo Bold'),local('Liberation Sans Bold');
  size-adjust:101.84%;
  ascent-override:95.12%;
  descent-override:23.68%;
  line-gap-override:0%;
}
@font-face{
  font-family:'Inter fallback';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:local('Arial Bold'),local('Arial-BoldMT'),local('Arimo Bold'),local('Liberation Sans Bold');
  size-adjust:102.77%;
  ascent-override:94.26%;
  descent-override:23.47%;
  line-gap-override:0%;
}
@font-face{
  font-family:'Inter fallback';
  font-style:normal;
  font-weight:800;
  font-display:swap;
  src:local('Arial Bold'),local('Arial-BoldMT'),local('Arimo Bold'),local('Liberation Sans Bold');
  size-adjust:103.91%;
  ascent-override:93.23%;
  descent-override:23.21%;
  line-gap-override:0%;
}

/* ============================================================================
   HAMMERSMITH ONE — RETIRED AT v1.61 (rev 156, D13 / T-03 / U-06)

   The masthead display face joined at v0.88 (rev 82) to set the text wordmark and
   left with it: D13's lockup sets the name as Archivo Black OUTLINED TO SVG, so no
   font file is loaded for it and nothing on the site asks for a display face any
   more. The @font-face, the `--display` token that reached it and the two rules
   that used it are gone in the same rev, which is the condition register U-06 set:
   the face and the licence text that travelled with it (assets/HAMMERSMITH-ONE-OFL.txt)
   leave together, not one before the other. Both are in archive/ verbatim.

   ⚠ THE WORDMARK STILL HAS A LICENCE. Archivo Black is SIL OFL 1.1 (Omnibus-Type,
   2017), and the OFL applies to a derivative outline as it does to the font — so the
   licence text ships in assets/ARCHIVO-BLACK-OFL.txt exactly as Hammersmith's did.
   Neither the Omnibus-Type repository's OFL.txt nor Google Fonts' copy declares a
   Reserved Font Name for it (measured 18 September 2026 — the upstream file is also
   broken, carrying merge-conflict markers; the Google Fonts copy is the clean text),
   so no naming restriction attaches to the artwork. The register's U-06 said it did;
   it does not, and the only consequence is that there is one fewer condition to keep.
   ============================================================================ */
