/* ══ SCHRIFTEN · BELARO OS ═══════════════════════════════════════════════
   Selbst gehostet. Kein Google, kein CDN, keine Verbindung nach draussen.

   WARUM DIESE DATEI HIER LIEGT — UND NICHT NUR IN belaro-system.css
   ─────────────────────────────────────────────────────────────────
   Die @font-face stehen ab dem 31.08.2026 an ZWEI Orten: hier, und in
   belaro-system.css auf cashflow.belaro.eu. Das ist eine bewusste
   Doppelung, und wer sie spaeter zusammenfuehren will, soll den Grund
   hier finden statt ihn zu erraten.

   CLAUDE.md sagt: Design-System zentral, keine lokalen Duplikate. Die
   Regel ist richtig — fuer Tokens und Komponenten. Fuer die SCHRIFT
   gilt sie nicht, aus einem Grund, der nichts mit Geschmack zu tun hat:

     Die oeffentlichen Seiten von os.belaro.eu holen belaro-system.css
     von cashflow.belaro.eu. Laege die Schriftdefinition NUR dort, dann
     haetten wir die Abhaengigkeit von Google gegen eine Abhaengigkeit
     von einer anderen Property getauscht — und genau die ist der
     Anlass fuer Issue #382. Eine Umstellung, die das Problem nur
     verschiebt, ist keine.

   Die uebrige Abhaengigkeit BLEIBT: Tokens, Komponenten, Typo-Skala und
   der Dunkelmodus kommen weiterhin von cashflow. Was das genau ist,
   steht in #382 aufgezaehlt. Diese Datei loest die Schrift, nicht mehr.

   WELCHE SCHNITTE HIER STEHEN — UND WARUM GERADE DIESE
   ────────────────────────────────────────────────────
   Nicht die, die der alte Google-Link anforderte. Sondern die, die am
   31.08.2026 im Browser als VERLANGT gemessen wurden: berechneter Stil
   auf acht Seiten, vier oeffentlich (/ · /login · /register · /demo)
   und vier hinter dem Login (/dashboard/ · /liquidity · /activities ·
   /history · /admin/).

   Der Unterschied ist kein Detail:

     JetBrains Mono 450   verlangt (.bl-nav__cnt, 14x) — der alte Link
                          forderte ihn NIE an. Der Browser nahm bisher
                          den naechstliegenden Schnitt.
     JetBrains Mono 700   verlangt (.amt auf /dashboard/liquidity) — der
                          alte Link forderte ihn NIE an. Der Browser
                          FETTETE bisher die Regular synthetisch.

   Beides war am Familiennamen nicht zu sehen und in keinem Nachweis
   rot. Wer nur die drei Schnitte des alten Links eingebettet haette,
   haette diesen Fehler festgeschrieben statt ihn zu beheben.

   NICHT EINGEBETTET, obwohl die Datei existiert:
     Newsreader 500   auf acht Seiten nirgends verlangt. Der alte Link
                      forderte ihn trotzdem an — Ladeaufwand ohne
                      Verwender.
   Sie liegt als .ttf und wird gebaut; eingebettet wird sie erst, wenn
   ein Selektor sie verlangt. Ein Schnitt, den niemand anfordert, ist
   Gewicht auf der Leitung.

   ⚠ HIER STAND BIS ZUM 02.09.2026 AUCH Newsreader 700, mit der
   Begruendung „braucht nur der PDF-Pfad, und der laedt TTF ueber
   file://". Das war falsch: Die Fehlerseiten verlangen ihn im Web.
   Gefunden hat es scripts/check-schriftlieferung.py beim ersten Lauf
   (Issue #383) — die Erhebung von Hand hatte acht Seiten angesehen,
   und keine davon war eine Fehlerseite. Der Schnitt ist jetzt
   eingebettet; die Einzelheiten stehen unten beim @font-face.

   font-display: swap  — der Text steht sofort, in der Ersatzschrift,
   und wird ausgetauscht. Das ist die richtige Wahl fuer Fliesstext:
   Ein unsichtbarer Absatz ist schlimmer als ein kurz anders gesetzter.

   Die lokale Rueckfallkette bleibt in den Tokens (--f-mono behaelt
   ui-monospace, SFMono-Regular, monospace). Diese Datei ersetzt die
   Kette nicht, sie stellt ihr etwas voran.

   LIZENZ
   Alle drei Familien stehen unter SIL OFL 1.1. Die Lizenztexte liegen
   als static/fonts/OFL-*.txt und werden mit ausgeliefert — das ist
   Pflicht, nicht Hoeflichkeit. Wer eine Familie entfernt, entfernt
   ihre OFL.txt; wer eine hinzufuegt, bringt ihre mit.

   Gebaut von scripts/fonts-bauen.py aus den variablen Quellen.
   ════════════════════════════════════════════════════════════════════ */

/* ── Hanken Grotesk · die Oberflaechenschrift (--f-ui) ─────────────── */
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/static/fonts/HankenGrotesk-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/static/fonts/HankenGrotesk-Book.woff2') format('woff2');
  font-weight: 450;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/static/fonts/HankenGrotesk-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/static/fonts/HankenGrotesk-SemiBold.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/static/fonts/HankenGrotesk-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ── Newsreader · die Serif fuer Ueberschriften und Zahlen (--f-serif)
      400, 600 UND 700.

      700 KAM AM 02.09.2026 DAZU, und zwar nicht aus einem Wunsch,
      sondern aus einem Befund. Der Kopf oben sagte bis dahin: „700
      braucht nur der PDF-Pfad, und der laedt TTF ueber file://".
      Das war falsch, und die Grundlage war zu schmal — acht Seiten,
      und die Fehlerseiten waren keine davon.

      scripts/check-schriftlieferung.py hat es beim ERSTEN Lauf
      gefunden:

          errors/_base.html  /gibt-es-nicht  HTTP 404
            ✗ Newsreader 700 verlangt (1x, z.B. ... font-display
              text-3xl font-bold), NICHT geladen — der Browser
              faelscht ihn

      Das ist die Marken-Kachel „B" oben auf jeder 403-, 404- und
      500-Seite. Sie stand seit dem 31.08.2026 synthetisch gefettet
      da: gleicher Familienname, falsche Zeichnung.

      Die Lehre gehoert zum Schnitt dazu: Eine Erhebung ueber acht
      Seiten ist keine Erhebung ueber das Produkt. Was ein Waechter
      misst, misst er auf Dauer; was ich einmal von Hand ansehe,
      altert ab dem naechsten Commit. ─────────────────────────────── */
@font-face {
  font-family: 'Newsreader';
  src: url('/static/fonts/Newsreader-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Newsreader';
  src: url('/static/fonts/Newsreader-SemiBold.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Newsreader';
  src: url('/static/fonts/Newsreader-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ── JetBrains Mono · die Ziffernschrift (--f-mono) ─────────────────
      Fuenf Schnitte, nicht drei. 450 und 700 sind die beiden, die der
      alte Google-Link nie anforderte und die der Browser deshalb
      ersetzt bzw. synthetisch gefettet hat. ─────────────────────────── */
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Book.woff2') format('woff2');
  font-weight: 450;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-SemiBold.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
