/* ==========================================================================
   Self-hosted web fonts.

   Why this file exists
   --------------------
   The site used to pull these three families from fonts.googleapis.com with
   `font-display=swap`. `swap` paints text in a fallback face immediately and then
   re-lays it out when the real face arrives. On the homepage that reflow moved
   the hero and everything under it, and it was the last remaining source of
   layout shift once the async-CSS problem was fixed (measured: CLS 0.065 with
   the fonts, 0.0008 with them blocked).

   `optional` is the only display mode that never swaps: the browser gets a very
   short block period, and if the face is not ready by then it renders the
   fallback for the whole page load instead of swapping mid-life. A font can
   therefore never change the layout after first paint.

   Because the fonts now come from our own origin they are usually fast enough to
   win that short race; the <link rel="preload"> in each page head makes that
   reliable. Keep the preloads in sync when adding or removing a face here.

   All three families are SIL Open Font License 1.1.
   ========================================================================== */

/* Work Sans is served as a variable font covering wght 100-900, so one file
   covers the 400/500/600 weights the UI actually uses. */
@font-face {
  font-family: 'Work Sans';
  font-style: normal;
  font-weight: 400 600;
  font-display: optional;
  src: url('/assets/fonts/work-sans-400.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;
}

/* Barlow Condensed ships as static per-weight instances from Google Fonts.
   700/800 are the display weights; 600 backs the section headings. */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: optional;
  src: url('/assets/fonts/barlow-condensed-600.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;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: optional;
  src: url('/assets/fonts/barlow-condensed-700.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;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: optional;
  src: url('/assets/fonts/barlow-condensed-800.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;
}

/* IBM Plex Mono backs the eyebrows, crumbs and small mono labels. */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: optional;
  src: url('/assets/fonts/ibm-plex-mono-500.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;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: optional;
  src: url('/assets/fonts/ibm-plex-mono-600.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;
}

/* No metric-matched fallback faces here on purpose. With `optional` the browser
   never swaps a face in mid-load, so a fallback can never reflow the page - an
   adjusted fallback would add no CLS benefit, only extra bytes and a second set
   of family names to keep in sync across every font-family stack. The generic
   `sans-serif` / `monospace` keywords already in those stacks stay as they are. */

