/* ------------------------------------------------------------------
   Die Grotesk C — display face for stonecastlepictures.com.
   Klim Type Foundry. Adopted 21 Aug 2026 (eleventh pass); optical
   cut C confirmed 22 Aug. `design-system-spec.md` §3, §5c.

   Subset 24 Aug 2026 from the licensed desktop OTFs. Latin + Latin-1
   + Latin Extended-A + typographic punctuation — 437 of 773 glyphs.
   Kerning (GPOS) intact, plus calt, tnum, frac, ordn.

   C Regular 28.8K · C Black 29.4K = 58.2K.
   With NB International Pro's 64.1K the whole font payload is 122.3K,
   inside the 129.7K §5c states as the budget.

   ⚠ A and B must never be loaded — they are the small-text opticals.
   D is subset in `reserved/` and referenced by nothing; it is the
   prepared fallback if display-xl reads gappy at C (§9 item 24).

   ⚠ LICENCE. Klim's web licence is perpetual, self-hostable and
   subsettable — confirmed in writing, which closed §9 item 21. Two
   receipt details are still unchecked: that the licence held is the
   WEB licence and not desktop-only, and that stonecastlepictures.com
   is the domain on the sales receipt. These files were built from the
   desktop OTFs in ~/Library/Fonts. Local development is fine.
   Nothing here goes to a public URL until those two are confirmed.

   LIGHT AND MEDIUM, 23 Sep 2026 — Klim order 26091151 (receipt dated
   24 Sep NZ time): Die Grotesk Light and Medium, WEB licence, 5,000
   monthly unique users, stonecastlepictures.com. So for these two
   weights both receipt details above ARE confirmed. All four optical
   cuts came in the order as Klim's own WOFF2s, NOT subset (38–52K
   each). C Light 300 and C Medium 500 are declared below; A, B and D
   Light/Medium sit in `reserved/`, referenced by nothing. A declared
   face costs nothing until a rule uses its weight. Klim's optical-size
   sheet: A 10–30px, B 30–60px, C 60–90px, D 90px+.

   ⚠ This file deliberately does NOT declare --font-mono. An earlier
   die-grotesk.css did, without a metrics-matched fallback, and
   docs/fonts-nb-international.md warns about the import-order clash
   that caused. There is no clash to order around any more.
   ------------------------------------------------------------------ */

/* ---------- the face ----------

   Regular 400 and Black 800 are one @font-face family with an explicit
   weight each, so the browser never synthesises either one.

   ⚠ They are NOT one family in the files. Name ID 1 reads
   "Die Grotesk C" and "Die Grotesk C Black", both with subfamily
   "Regular" — so in a desktop app C Black appears as its own family at
   Regular weight, not as the Black of Die Grotesk C. That does not
   reach the web build, because the name below is ours. It will bite in
   Barry's comps, and it is the same shape as the old Proxima trap. */

@font-face {
  font-family: 'Die Grotesk C';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/fonts/die-grotesk-c-light.woff2') format('woff2');
}

@font-face {
  font-family: 'Die Grotesk C';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/die-grotesk-c-regular.woff2') format('woff2');
}

@font-face {
  font-family: 'Die Grotesk C';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/die-grotesk-c-medium.woff2') format('woff2');
}

@font-face {
  font-family: 'Die Grotesk C';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/fonts/die-grotesk-c-black.woff2') format('woff2');
}

/* ---------- Die Grotesk A — the small-text optical ----------

   A Light only, 23 Sep 2026, Barry: "try the right column in Die
   Grotesk A Light" — the home statement's paragraph (HomeStatement.astro,
   .hst__body, 21–30px), inside Klim's 10–30px range for A. Its own
   family name so it can never stand in for a C weight by accident. */

@font-face {
  font-family: 'Die Grotesk A';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/fonts/die-grotesk-a-light.woff2') format('woff2');
}

/* A Medium, same day: "let's try the medium version of Die Grotesk now." */
@font-face {
  font-family: 'Die Grotesk A';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/die-grotesk-a-medium.woff2') format('woff2');
}

/* ---------- Die Grotesk B — the 30–60px optical ----------

   B Light only, 25 Sep 2026 — the hero's paragraph (HomeHeroSquare.astro,
   .hero-sq__p), 30px from tablet up, the bottom of Klim's 30–60px range
   for B. Barry tried B Regular first ("I think I want to try Die Grotesk
   Regular B"), then "let's use the light version of Die Grotesk B."
   Klim's own WOFF2 from order 26091151 — WEB licence confirmed — moved
   out of `reserved/`. The B Regular trial file (built from the desktop
   OTF, no web licence) is deleted; it is in git history if wanted. */

@font-face {
  font-family: 'Die Grotesk B';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/fonts/die-grotesk-b-light.woff2') format('woff2');
}

/* B Medium, 28 Sep 2026 — the About page's founding paragraph
   (AboutHero.astro, .about-origin__p), 21–30px. Barry: "The text ...
   should not be light, but it should be medium." Klim's own WOFF2 from
   order 26091151, WEB licence confirmed, moved out of `reserved/`. */
@font-face {
  font-family: 'Die Grotesk B';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/die-grotesk-b-medium.woff2') format('woff2');
}

/* ---------- metrics-matched fallback ----------

   CLS < 0.1 is a hard ship gate and self-hosting removes the network
   risk in front of font swap, not the swap itself.

   Computed against Arial metrics over a sample of real display copy —
   client names, film titles, the footer sign-off, the hero line. The
   figures reproduce §5c's table exactly (C Regular 90.8%, C Black
   92.4%, ascent 93.0%, descent 20.2%).

   ⚠ Still computed, not observed. §9 item 3 is not closed by this
   file. Re-measure on a built page before trusting the CLS gate. */

@font-face {
  font-family: 'Die Grotesk Fallback';
  font-weight: 400;
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 90.8%;
  ascent-override: 93.0%;
  descent-override: 20.2%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Die Grotesk Fallback';
  font-weight: 800;
  src: local('Arial Bold'), local('Helvetica Neue'), local('Liberation Sans Bold');
  size-adjust: 92.4%;
  ascent-override: 93.0%;
  descent-override: 20.2%;
  line-gap-override: 0%;
}

/* ---------- token ---------- */

:root {
  --font-display: 'Die Grotesk C', 'Die Grotesk Fallback', Arial, sans-serif;
  --font-display-a: 'Die Grotesk A', 'Die Grotesk Fallback', Arial, sans-serif;
  --font-display-b: 'Die Grotesk B', 'Die Grotesk Fallback', Arial, sans-serif;
}

/* ---------- the type scale lives in src/styles/type.css ----------

   This file declares faces and the family token only. The display
   steps, and the .on-film rules that take every proportional face to
   Black 800 over footage, are defined alongside the other six steps
   in type.css so the eight-step scale is readable in one place. */
