/* Fonts, served from the binary.
 *
 * Two faces as variable fonts rather than four static weights each: one file per family
 * and subset instead of seven, and every weight between the endpoints becomes available
 * rather than only the ones somebody remembered to request. Measured on the axis: the
 * advance width grows monotonically from 100 to 900, so the intermediate weights are the
 * font's own, not the browser's synthesis.
 *
 * Loaded from /assets/fonts rather than from Google Fonts (ARCH-28). A third-party
 * stylesheet on every panel load is a request that leaves the deployment, tells that
 * domain who is using the panel and when, and makes the wordmark fall back to a
 * system face whenever the network is unavailable — which for an operator tool is
 * precisely when it is being used.
 *
 * Inter, Unbounded and JetBrains Mono were declared here as fallbacks and removed: no rule
 * in any of the four surfaces named them, the tokens had been pointed at Geist, and the
 * files were embedded into every binary and served to nobody. A fallback face that is
 * never reached is a second mechanism beside the first (SYSTEM_RULES.md R-1), and it costs
 * 300 KB of every download of the frontend. The stack now falls through to the system
 * grotesque, which is what the fallback was for.
 *
 * Subsets: latin, latin-ext, cyrillic, cyrillic-ext. Greek and Vietnamese are dropped
 * because the interface is Russian and English and neither script appears in either.
 *
 * display: swap — text is readable in a fallback face immediately and reflows once the
 * real one arrives. The alternative, blocking, is a blank panel while a font loads.
 */

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

@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/assets/fonts/geist-mono-var.woff2') format('woff2');
}
