/* Local font-face plumbing for self-hosted fonts.
   Note: Add .woff2 binaries under /assets/fonts to activate. */

/* JetBrains Mono */
@font-face {
  font-family: 'JetBrains Mono';
  src:
    local('JetBrains Mono Bold'),
    local('JetBrainsMono-Bold'),
    url('/assets/fonts/JetBrainsMono-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src:
    local('JetBrains Mono ExtraBold'),
    local('JetBrainsMono-ExtraBold'),
    url('/assets/fonts/JetBrainsMono-ExtraBold.woff2') format('woff2');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src:
    local('JetBrains Mono Regular'),
    local('JetBrainsMono-Regular'),
    url('/assets/fonts/JetBrainsMono-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/*
 * Hack, ONLY FOR THE GLYPHS JETBRAINS MONO DOES NOT HAVE, 2026-10-02.
 *
 * Hack is second in --font-ui, and with font-display: swap a browser draws in the next family
 * while the first is still loading -- so every page load fetched both Hack faces, 209 KB, to
 * render a few frames of text that JetBrains Mono then replaced. Measured on a phone-sized load
 * by WIP/audit/91-load-weight.mjs.
 *
 * The range is every codepoint Hack covers and none of the three JetBrains faces do, computed
 * from the font files with fontTools rather than chosen (U+0000 excluded). Ordinary text never
 * falls in it, so Hack is no longer fetched for it; a glyph only Hack has still finds Hack.
 * Regenerate it from the files if either font is ever replaced.
 */
@font-face {
  font-family: 'Hack';
  src:
    local('Hack Regular'),
    local('Hack-Regular'),
    url('/assets/fonts/Hack-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range:
    U+0132-0133, U+01A4, U+02BB, U+02BD-02C1, U+02C8, U+02CC-02D1, U+0305, U+030D-030E, U+0310-0311,
    U+0313-031A, U+031C-0322, U+0324, U+0329-0335, U+0339-033F, U+0358, U+0361, U+03F4, U+03F6,
    U+0400, U+040D, U+0450, U+045D, U+0462-0463, U+0472-0473, U+0494-0499, U+04A4-04A5, U+04AA-04AD,
    U+04B2-04B3, U+04C0-04C4, U+04C7-04C8, U+04CB-04CC, U+04CF-04D7, U+04DA-04DB, U+04E0-04E3,
    U+04EA-04F3, U+04F6-04F9, U+0510-0511, U+051A-051D, U+0531-0556, U+0559-055F, U+0561-0587,
    U+0589-058A, U+0E3F, U+10D0-10FC, U+2000, U+2002-200A, U+2011-2012, U+2015, U+2017, U+2023,
    U+2025, U+2027, U+202F, U+2031, U+2035-2037, U+2047-2049, U+204B, U+205F, U+207B, U+207D-207E,
    U+208A-208E, U+20A0-20AA, U+20AD, U+20AF-20B3, U+20B5, U+20B7-20B9, U+2126, U+2150-2151,
    U+2153-215F, U+2189, U+219A-219C, U+219F, U+21A1, U+21A4, U+21A8, U+21AB-21AC, U+21AE-21BD,
    U+21BF-21C8, U+21CA-21CF, U+21D5-21DA, U+21DC-21DD, U+21E0-21E4, U+21E6, U+21E9, U+21EB-21FF,
    U+220D, U+2217, U+221B-221D, U+221F-2220, U+222C-222D, U+223A-223B, U+223D, U+2241-2242, U+2244,
    U+2246, U+224A, U+224C, U+224E-2253, U+2255-2256, U+2258-225E, U+2266-2269, U+2274-2279,
    U+227D-2281, U+228A-228B, U+228D, U+229A, U+22B2-22B3, U+22B5, U+22C5, U+22CD, U+22CF, U+22D1,
    U+22DA-22E1, U+22E3-22E9, U+2310, U+2320-2321, U+23AE, U+25A2-25A9, U+25AC-25B1, U+25CD,
    U+25D0-25D3, U+25D6-25E5, U+25EC-25EE, U+25F0-25F5, U+25F7-25FF, U+266A, U+2756, U+2768-276D,
    U+2772-2775, U+2798-279B, U+279F-27AF, U+27B1-27BE, U+27C2, U+27E0, U+2997-2998, U+29EB,
    U+29FA-29FB, U+2A2F, U+2A6A-2A6B, U+2B05-2B0D, U+2B16-2B1A, U+2C7D, U+2E18, U+2E1F, U+2E22-2E25,
    U+2E2E;
}
@font-face {
  font-family: 'Hack';
  src:
    local('Hack Bold'),
    local('Hack-Bold'),
    url('/assets/fonts/Hack-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  /* The same range as the regular face above; see the note there. */
  unicode-range:
    U+0132-0133, U+01A4, U+02BB, U+02BD-02C1, U+02C8, U+02CC-02D1, U+0305, U+030D-030E, U+0310-0311,
    U+0313-031A, U+031C-0322, U+0324, U+0329-0335, U+0339-033F, U+0358, U+0361, U+03F4, U+03F6,
    U+0400, U+040D, U+0450, U+045D, U+0462-0463, U+0472-0473, U+0494-0499, U+04A4-04A5, U+04AA-04AD,
    U+04B2-04B3, U+04C0-04C4, U+04C7-04C8, U+04CB-04CC, U+04CF-04D7, U+04DA-04DB, U+04E0-04E3,
    U+04EA-04F3, U+04F6-04F9, U+0510-0511, U+051A-051D, U+0531-0556, U+0559-055F, U+0561-0587,
    U+0589-058A, U+0E3F, U+10D0-10FC, U+2000, U+2002-200A, U+2011-2012, U+2015, U+2017, U+2023,
    U+2025, U+2027, U+202F, U+2031, U+2035-2037, U+2047-2049, U+204B, U+205F, U+207B, U+207D-207E,
    U+208A-208E, U+20A0-20AA, U+20AD, U+20AF-20B3, U+20B5, U+20B7-20B9, U+2126, U+2150-2151,
    U+2153-215F, U+2189, U+219A-219C, U+219F, U+21A1, U+21A4, U+21A8, U+21AB-21AC, U+21AE-21BD,
    U+21BF-21C8, U+21CA-21CF, U+21D5-21DA, U+21DC-21DD, U+21E0-21E4, U+21E6, U+21E9, U+21EB-21FF,
    U+220D, U+2217, U+221B-221D, U+221F-2220, U+222C-222D, U+223A-223B, U+223D, U+2241-2242, U+2244,
    U+2246, U+224A, U+224C, U+224E-2253, U+2255-2256, U+2258-225E, U+2266-2269, U+2274-2279,
    U+227D-2281, U+228A-228B, U+228D, U+229A, U+22B2-22B3, U+22B5, U+22C5, U+22CD, U+22CF, U+22D1,
    U+22DA-22E1, U+22E3-22E9, U+2310, U+2320-2321, U+23AE, U+25A2-25A9, U+25AC-25B1, U+25CD,
    U+25D0-25D3, U+25D6-25E5, U+25EC-25EE, U+25F0-25F5, U+25F7-25FF, U+266A, U+2756, U+2768-276D,
    U+2772-2775, U+2798-279B, U+279F-27AF, U+27B1-27BE, U+27C2, U+27E0, U+2997-2998, U+29EB,
    U+29FA-29FB, U+2A2F, U+2A6A-2A6B, U+2B05-2B0D, U+2B16-2B1A, U+2C7D, U+2E18, U+2E1F, U+2E22-2E25,
    U+2E2E;
}
