/* Self-hosted brand typefaces the single source (tokens/fonts/).
   Consumers serve the woff2 at their /fonts/ root (//tokens:fonts) and
   import this sheet as @flightlines/tokens/fonts.css (dist/fonts.css: this file
   plus the metric-matched fallback faces fonts-css.mjs computes); urls are
   absolute /fonts/ so any same-origin surface works.
   Same-origin + preloaded = no third-party DNS and no Google ping per page load.
   font-display is set per face by ROLE: the body/UI fonts use `swap` (paint copy
   immediately in the fallback and swap when ready readability first, a FOUT we
   accept on body text); the brand WORDMARK uses `block` (a mark must never flash
   the wrong face, so hold-it-invisible-then-paint preload makes the block window
   imperceptible). Latin-only subsets add more @font-face declarations if
   non-Latin script support becomes a requirement. */

/* Geist (body / UI) */
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/geist-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/geist-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/geist-latin-600-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/geist-latin-700-normal.woff2') format('woff2');
}

/* Geist Mono (code / monospace ticks) */
@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/geist-mono-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/geist-mono-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/geist-mono-latin-600-normal.woff2') format('woff2');
}

/* Space Grotesk (brand wordmark display-only)
   font-display: BLOCK, not swap a brand mark must never paint a fallback and then
   POP to the brand face; hold it invisible for a beat instead. Weight 500 is the ONLY
   weight the wordmark renders (.fl-wordmark), so it ships as a ~4KB subset of just the
   latin letters in "flightlines" and is preloaded in each surface's index.html the
   block window is then imperceptible: the wordmark paints straight in Space Grotesk,
   no fallback, no pop. 600/700 stay full-latin (no surface renders them today). */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: block;
  src: url('/fonts/space-grotesk-wordmark-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  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: block;
  src: url('/fonts/space-grotesk-latin-700-normal.woff2') format('woff2');
}

/* Metric-matched fallback faces (GENERATED by tokens/fonts-css.mjs from the
   Geist 400 and Geist Mono 400 woff2; DO NOT EDIT). On Linux (no Arial/Courier New) local()
   misses and the stack falls through to the generic, un-matched: acceptable, the real font
   still loads. */

@font-face {
  font-family: "Geist Fallback";
  src: local('Arial'), local('ArialMT');
  ascent-override: 95.9379%;
  descent-override: 28.1609%;
  line-gap-override: 0%;
  size-adjust: 104.7553%;
}

@font-face {
  font-family: "Geist Mono Fallback";
  src: local('Courier New'), local('CourierNewPSMT');
  ascent-override: 100.5164%;
  descent-override: 29.5048%;
  size-adjust: 99.9837%;
}

