/* Self-hosted Geist font faces. Replaces the render-blocking
   fonts.googleapis.com stylesheet + fonts.gstatic.com font fetch.
   Each weight is served from a same-origin /fonts/*.woff2 file, so the
   browser can start the request immediately (no cross-origin DNS/TLS
   handshake) and it is covered by the app's own Content-Security-Policy
   (font-src 'self'). font-display: swap avoids blocking text paint while
   the font loads; the 400 weight is additionally <link rel="preload">ed
   from each entry head so it lands before first paint in the common case. */

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

@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/geist-500.woff2') format('woff2');
}

@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/geist-600.woff2') format('woff2');
}

@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/geist-700.woff2') format('woff2');
}

/* Metric-adjusted fallback so text laid out before Geist loads occupies
   (almost) the same box it will occupy after the swap, keeping CLS low.
   Falls back to the local system sans-serif with size/metrics nudged to
   approximate Geist's proportions; use it ahead of system-ui in the app's
   font stack: 'Geist', 'Geist Fallback', system-ui, sans-serif. */
@font-face {
  font-family: 'Geist Fallback';
  src: local('Arial');
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
  size-adjust: 104%;
}
