/* Lokal ausgelieferte Schriften — kein Aufruf an Google.
   Erzeugt aus: https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600&display=swap
   Zeichensätze: latin, latin-ext */

/* latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 800;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-800-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 800;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/archivo-800-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../Fonts/ibmplexmono-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('../Fonts/ibmplexsans-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ============================================================
   MASSGLEICHE ERSATZSCHRIFTEN

   font-display: swap zeigt den Text sofort in einer Ersatzschrift
   und tauscht ihn spaeter aus. Der Tausch verschiebt das Layout,
   sobald die Ersatzschrift anders breit baut als die Zielschrift.

   NACHGEMESSEN am 07.09.2026 im Browser (canvas measureText bei
   1000 px, deutscher Fliesstext von dieser Seite, mittlere
   Zeichenbreite als Anteil der Schriftgroesse):

       system-ui (Segoe UI)  0,46678   Aufstieg 1,079
       Arial Regular         0,47389   Aufstieg 0,905
       Arial Bold            0,50541   Aufstieg 0,905
       IBM Plex Sans 400     0,47180
       Archivo 700           0,49940

   Vorher stand system-ui an zweiter Stelle der Kette. Der Aufstieg
   lag damit um 19 % daneben, und jeder Block mit
   line-height: normal aenderte beim Tausch seine Hoehe. Gemessen
   auf /blog bei 390 px und gedrosseltem 4G: CLS 0,0238; der Sprung
   traf die Cookie-Box (Hoehe 558 -> 585 px) genau dann, wenn
   ibmplexsans fertig geladen war.

   DIE GEWICHTSANGABE IST PFLICHT — der erste Versuch hatte sie
   nicht. Ohne font-weight gilt fuer eine @font-face-Regel der
   Vorgabewert 400. Die Familie deckte damit nur den Schnitt 400
   ab, und die fette Cookie-Ueberschrift bekam Arial REGULAR statt
   Arial BOLD: 259 statt 280 px Textbreite, also 8 % zu schmal.
   Sie passte in der Ersatzschrift auf eine Zeile und brach mit der
   Webschrift auf zwei um — genau die 27 px, die als Sprung
   uebrigblieben. Darum unten je Schnitt eine eigene Regel, und
   600 aufwaerts auf Arial BOLD gerechnet: Arial hat nur zwei
   echte Schnitte, alles dazwischen erfindet der Browser.

   In den fetten Regeln steht bewusst KEIN local('Arial') als
   letzter Rueckfall. Griffe der, haette die Regel eine
   Gewichtsangabe von 700 und Buchstaben mit der Staerke 400 —
   duenn und trotzdem als passend gemeldet. Fehlt Arial Bold,
   soll stattdessen die naechste Familie der Kette aus tokens.css
   greifen.

   DAS KOSTET KEIN BYTE UND KEINEN AUFRUF: reine Rechenangaben zu
   Schriften, die auf dem Geraet schon liegen. Deshalb ist es hier
   der richtige Hebel und nicht preload — preload wurde am
   04.09.2026 gemessen und war LANGSAMER (Begruendung im Layout
   Default.fluid.html).

   NEU MESSEN mit  node Y:/tmp/cd-breiten.js <url>  wenn eine
   Schriftdatei getauscht wird.
   ============================================================ */

/* --- Archivo ------------------------------------------ */

@font-face {
  font-family: 'Archivo Ersatz';
  font-weight: 400;
  font-style: normal;
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 98.5%;
  ascent-override: 89.14%;
  descent-override: 21.32%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Archivo Ersatz';
  font-weight: 500;
  font-style: normal;
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 100.22%;
  ascent-override: 87.61%;
  descent-override: 20.95%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Archivo Ersatz';
  font-weight: 600;
  font-style: normal;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Liberation Sans Bold');
  size-adjust: 95.76%;
  ascent-override: 91.69%;
  descent-override: 21.93%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Archivo Ersatz';
  font-weight: 700;
  font-style: normal;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Liberation Sans Bold');
  size-adjust: 98.81%;
  ascent-override: 88.86%;
  descent-override: 21.25%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Archivo Ersatz';
  font-weight: 800;
  font-style: normal;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Liberation Sans Bold');
  size-adjust: 103.39%;
  ascent-override: 84.92%;
  descent-override: 20.31%;
  line-gap-override: 0%;
}

/* --- IBM Plex Sans ------------------------------------------ */

@font-face {
  font-family: 'IBM Plex Sans Ersatz';
  font-weight: 400;
  font-style: normal;
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 99.56%;
  ascent-override: 102.95%;
  descent-override: 27.62%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'IBM Plex Sans Ersatz';
  font-weight: 500;
  font-style: normal;
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 101.7%;
  ascent-override: 100.79%;
  descent-override: 27.04%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'IBM Plex Sans Ersatz';
  font-weight: 600;
  font-style: normal;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Liberation Sans Bold');
  size-adjust: 96.65%;
  ascent-override: 106.05%;
  descent-override: 28.45%;
  line-gap-override: 0%;
}

/* --- IBM Plex Mono ---------------------------------------------
   EINE Regel fuer 400 bis 600: Bei einer Festbreitenschrift ist der
   Vorschub in jedem Schnitt gleich. Gemessen sind alle drei exakt
   0,60000 gegen 0,60010 bei Courier New — 0,02 % Abweichung.       */

@font-face {
  font-family: 'IBM Plex Mono Ersatz';
  font-weight: 400 600;
  font-style: normal;
  src: local('Courier New'), local('CourierNewPSMT'), local('Liberation Mono'), local('DejaVu Sans Mono');
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.5%;
  line-gap-override: 0%;
}
