/*
 * fonts.css — Manifold self-hosted web fonts
 *
 * All 7 families bundled as latin-subset woff2 (one-time maintainer task;
 * these are committed static assets, NOT generated by manifold build).
 *
 * Four IBM Plex faces are preloaded in index.html with crossorigin to
 * eliminate cold-reload flash for the default theme. All other weights
 * and families load on first use (font-display: swap — shows system
 * fallback instantly, swaps when the font arrives from local disk).
 *
 * Unicode range: latin + common punctuation/symbols/currency (Google Fonts
 * "latin" subset). Hinting stripped (--no-hinting): modern screens don't
 * benefit from it, and it shaves ~10% off file size.
 *
 * License: each family ships its own OFL.txt alongside these woff2 files.
 *
 * ── THE WEIGHT RAMP, AND WHY IT IS SIX STEPS (#75, 2026-08-07) ──────────────
 *
 * The themes declare four weight tokens — regular 400, medium 500, semibold
 * 600, bold 700 — and the Style panel's Text weight control shifts that whole
 * set by ±100, so a card can be asked for anything from 300 to 800. Every one
 * of those has to be a real face or the control silently does nothing.
 *
 * It used to do nothing. Before this change every bundled family topped out at
 * 600 (Orbitron at 700), so `bold` resolved to the same face as `semibold` and
 * `mt-weight-bold` had never once painted a different pixel from
 * `mt-weight-semibold` — 75 elements on Karl's dashboard asked for 700 and got
 * 600. Measured in the browser, not inferred: `document.fonts.load('700 40px
 * "IBM Plex Sans Condensed"')` returned the 600 face.
 *
 * So 31 faces were added to fill 300–800 for every family. Each came from the
 * SAME upstream this file already names for that family, at the same tag where
 * one is pinned, because metrics drift between releases and a 700 drawn from a
 * different release than its 600 shows up as a jump nobody can place:
 *
 *   IBM Plex Sans / Sans Condensed / Mono   static faces, IBM/plex, pinned tags
 *   JetBrains Mono                          static faces, JetBrains v2.304
 *   Barlow Condensed, DM Mono               static faces, google/fonts
 *   Inter, Rubik, Nunito, Source Serif 4,
 *   Orbitron                                instanced from the google/fonts
 *                                           variable at each weight
 *
 * TWO GAPS THAT CANNOT BE FILLED, said out loud so nobody re-derives them:
 *
 *   * The IBM Plex families stop at 700 upstream. There is no 800. In the
 *     Bolder tier the semibold and bold tokens therefore both land on 700 —
 *     a real collision, visible only on the default theme's own faces, and
 *     the reason the Bolder tier reads as slightly flatter at the top.
 *   * DM Mono ships 300/400/500 and nothing above. Its semibold and bold both
 *     resolve to 500 in every tier. A card whose Numbers slot pins DM Mono
 *     will not respond to Text weight above medium.
 *
 * Regenerate with tools/font_convert.py; it matches this file's subsetting
 * flags exactly. Nothing renders until the @font-face block is pasted below.
 */

/* ── IBM Plex Sans ──────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/IBM/plex (tag: @ibm/plex-sans@1.1.0)
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold)
   Role: --m-font-sans on default/cozy-neutral/deep-sea/leafy-green/
         olive-garden/silver-lining/soft-pastel/vintage-romance/sunset themes
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./IBMPlexSans/IBMPlexSans-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./IBMPlexSans/IBMPlexSans-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./IBMPlexSans/IBMPlexSans-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./IBMPlexSans/IBMPlexSans-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./IBMPlexSans/IBMPlexSans-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── IBM Plex Sans Condensed ────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/IBM/plex (tag: @ibm/plex-sans-condensed@2.0.0)
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold)
   Role: --m-font-display on default and most IBM-family themes
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "IBM Plex Sans Condensed";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./IBMPlexSansCondensed/IBMPlexSansCondensed-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans Condensed";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./IBMPlexSansCondensed/IBMPlexSansCondensed-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans Condensed";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./IBMPlexSansCondensed/IBMPlexSansCondensed-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans Condensed";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./IBMPlexSansCondensed/IBMPlexSansCondensed-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "IBM Plex Sans Condensed";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./IBMPlexSansCondensed/IBMPlexSansCondensed-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── IBM Plex Mono ──────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/IBM/plex (tag: @ibm/plex-mono@2.5.0)
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold)
   Role: --m-font-mono on default and most IBM-family themes
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./IBMPlexMono/IBMPlexMono-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 400;
  font-display: swap;
  src: url('./IBMPlexMono/IBMPlexMono-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 500;
  font-display: swap;
  src: url('./IBMPlexMono/IBMPlexMono-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: swap;
  src: url('./IBMPlexMono/IBMPlexMono-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 700;
  font-display: swap;
  src: url('./IBMPlexMono/IBMPlexMono-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Orbitron ───────────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/theleagueof/orbitron
   Weights loaded: 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold),
                   800 (ExtraBold)
   Note: 400 and 800 are instanced from the google/fonts variable Orbitron
   (weight axis 400–900), because theleagueof's static set does not draw
   them. That is a different source from the 500/600/700 already here, and
   it is the one family in this file where the faces are mixed. Orbitron is
   a display face used by the sunset theme alone, so a small metric
   difference between 400 and 500 shows up on headings on one theme rather
   than across the dashboard. There is no 300: the variable axis starts at
   400, so the Lighter tier's regular token resolves to 400 here.
   Role: --m-font-display on the sunset synthwave theme only
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Orbitron";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./Orbitron/Orbitron-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Orbitron";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./Orbitron/Orbitron-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Orbitron";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./Orbitron/Orbitron-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Orbitron";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./Orbitron/Orbitron-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Orbitron";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./Orbitron/Orbitron-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Inter ──────────────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/rsms/inter (v4.1)
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   Role: --m-font-sans and --m-font-display on raycast + voltagent themes.
   Before Phase 123, these themes silently fell back to system sans because
   Inter was never loaded. Now they render their intended typeface.
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./Inter/Inter-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./Inter/Inter-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./Inter/Inter-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./Inter/Inter-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./Inter/Inter-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./Inter/Inter-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Rubik ──────────────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/googlefonts/rubik
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   Source: variable TTF (wght axis 300–900), instanced to static weights
   via fontTools.varLib.instancer.
   Role: --m-font-sans and --m-font-display on the sentry theme.
   Before Phase 123, sentry silently fell back to system sans.
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./Rubik/Rubik-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./Rubik/Rubik-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./Rubik/Rubik-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./Rubik/Rubik-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./Rubik/Rubik-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./Rubik/Rubik-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── JetBrains Mono ─────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/JetBrains/JetBrainsMono (v2.304)
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   layout-features="*" preserves programming ligatures (fi, fl, ->, =>, etc.)
   Role: --m-font-mono on the raycast theme. Also used wherever the codebase
   previously hardcoded "JetBrains Mono" inline — after the Phase 123 sweep
   those sites route through var(--m-font-mono), so on raycast they get
   JetBrains Mono; on default they get IBM Plex Mono.
   Before Phase 123, raycast silently fell back to system monospace.
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./JetBrainsMono/JetBrainsMono-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Source Serif 4 ─────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/adobe-fonts/source-serif
   License confirmed 2026-06-21 from:
     https://raw.githubusercontent.com/adobe-fonts/source-serif/release/LICENSE.md
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   Role: --m-font-display for "Editorial" look
   Subsetted: latin range, pyftsubset --no-hinting --layout-features="*"
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./SourceSerif4/SourceSerif4-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Nunito ─────────────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/vernnobile/NunitoFont
   License confirmed 2026-06-21 from:
     https://raw.githubusercontent.com/vernnobile/NunitoFont/master/OFL.txt
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   Role: --m-font-sans and --m-font-display for "Soft" look
   Subsetted: instanced from variable font at each weight,
              pyftsubset --no-hinting --layout-features="*"
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./Nunito/Nunito-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./Nunito/Nunito-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./Nunito/Nunito-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./Nunito/Nunito-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./Nunito/Nunito-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Nunito";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('./Nunito/Nunito-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── DM Mono ─────────────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/google/fonts/tree/main/ofl/dmmono
   License confirmed 2026-06-21 from:
     https://github.com/google/fonts/raw/main/ofl/dmmono/OFL.txt
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium)
   Role: --m-font-mono for "Soft", "Code First", and "Modern" looks
   Subsetted: latin range, pyftsubset --no-hinting --layout-features="*"
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "DM Mono";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./DMMono/DMMono-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "DM Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./DMMono/DMMono-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "DM Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./DMMono/DMMono-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Barlow Condensed ────────────────────────────────────────────────────────
   SIL OFL 1.1 — github.com/google/fonts/tree/main/ofl/barlowcondensed
   License confirmed 2026-07-28 from:
     https://github.com/google/fonts/raw/main/ofl/barlowcondensed/OFL.txt
   Weights loaded: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold),
                   700 (Bold), 800 (ExtraBold)
   Role: --m-font-display for the "Narrow" look (Karl asked for it 2026-07-28
         to try out; assign it to other roles from the font picker's role tabs)
   Subsetted: latin range, pyftsubset --no-hinting --layout-features="*"
   Converted with: .venv/bin/python tools/font_convert.py <download>
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Barlow Condensed";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('./BarlowCondensed/BarlowCondensed-Light.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 400;
  font-display: swap;
  src: url('./BarlowCondensed/BarlowCondensed-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 500;
  font-display: swap;
  src: url('./BarlowCondensed/BarlowCondensed-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: 600;
  font-display: swap;
  src: url('./BarlowCondensed/BarlowCondensed-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: swap;
  src: url('./BarlowCondensed/BarlowCondensed-Bold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, 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: swap;
  src: url('./BarlowCondensed/BarlowCondensed-ExtraBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}
