/* ============================================================
   HardByte — Webfonts  (TWO families, matching hardbyte-gmbh.de)
   Titles .......: MICHROMA — the brand typeface: the logo lockup, and
       the site's title voice (nav, section headers, hub and product-
       line headings, the gallery claim - see tokens/typography.css).
       One weight (400). Never body text, never at display scale.
   Everything ...: INTER — the single text/UI face the live site
       uses. Weight carries the whole hierarchy (400 body →
       800 display). No third font; no monospace.

   THIS IS THE ONLY PLACE FONTS ARE DECLARED. index.html reaches
   them through tokens/styles.css; it carries no font <link> of its own.

   Weight 900 was requested here until 2026-08 and used by nothing
   — verified across tokens, components, guidelines, print and both
   homepage kits. Do not add it back without a caller.

   SELF-HOSTED, and that is a legal choice before it is a performance one: a
   hotlinked Google font sends every visitor's IP to a US server on every page
   view, which is the practice German courts have ruled on. Five .woff2 files live
   in tokens/fonts/ and all five are declared below. No request reaches Google.

   Weights are exactly what the design system uses: Inter 400/600/700/800 and
   Michroma 400, its only weight. Inter 500 is not shipped - the note where its
   face would be says why. Inter 900 is deliberately absent — no rule
   resolves it, so shipping it would cost a download for nothing.

   font-display: swap on every face, so text paints immediately in the fallback
   and re-renders when the woff2 arrives rather than staying invisible. The
   metric-matched "Inter Fallback" face that makes that swap almost invisible is
   NOT here: it is declared in css/site.css, beside the --font-sans stack that
   names it, because it is a consumer-side fallback rather than a brand face.

   MERGED FROM fonts.local.css, 2026-09. The faces were a separate file that this
   one @imported, which put them a fourth level deep in the stylesheet chain
   (index.html -> site.min.css -> styles.css -> fonts.css -> fonts.local.css) and
   cost a serial round trip on a cold cache for nothing - the split was a file
   boundary, not a contract. Both files also pointed at each other for where the
   fallback face lives, and both were wrong.
   ============================================================ */

@font-face {
  font-family: "Michroma";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/michroma-400.woff2") format("woff2");
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/inter-400.woff2") format("woff2");
}
/* Inter 500 is deliberately NOT declared, and its file is not shipped: a full 24KB face for what
   600 does - a weight the sheet already loads and declares 29 times, .g-sub's among them.
   Anything asking for 500 - .nav-menu a and .news-month in css/site.css - renders from 400, which
   is a synthetic-free real face, not a smeared one. To declare it, restore
   fonts/inter-500.woff2 from the history and add its face here. */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("fonts/inter-600.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("fonts/inter-700.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url("fonts/inter-800.woff2") format("woff2");
}
