/* ============================================
   PARASYN — SELF-HOSTED FONTS
   Replaces the Google Fonts CDN links (fonts.googleapis.com /
   fonts.gstatic.com). Files live in ./fonts/, same folder as every other
   site asset, so they load with zero network dependency, just like
   site.css itself.

   Why: on file:// access (no HTTP connection-keepalive, no browser
   preconnect priming), the Google Fonts CDN round-trip timing varies
   load to load. Even with font-display:optional (which prevents a
   visible mid-render swap), an unlucky slow/failed fetch means the
   *entire page view* renders in the fallback system font instead of
   the real one - which looks like "the header text size/weight
   changed", inconsistently, unrelated to which page or its content.
   That matched the exact symptom reported: unstable, not tied to any
   specific page. Self-hosting removes the race condition entirely -
   the font file is local, loads with the same reliability as the CSS
   that requests it.

   Source: each file is the unmodified latin-subset woff2 from the
   official @fontsource npm packages (Bunny/Fontsource's standard
   redistribution of these font families), pulled to cover exactly the
   weights actually used in the generator scripts - no extra weights,
   no extra families. Open Sans weight 900, requested by
   operational-technology-cybersecurity.html's CSS, has no real 900 cut
   in this family (same is true on Google Fonts itself) - browsers fall
   back to synthesized bold-on-800, identical behaviour to before this
   change, not a regression.
   ============================================ */

@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-600-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./fonts/ibm-plex-sans-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/ibm-plex-sans-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./fonts/ibm-plex-sans-latin-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./fonts/ibm-plex-mono-latin-300-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./fonts/ibm-plex-mono-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/ibm-plex-mono-latin-500-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./fonts/open-sans-latin-300-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./fonts/open-sans-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./fonts/open-sans-latin-700-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./fonts/open-sans-latin-800-normal.woff2') format('woff2');
}
