/*
 * Inter, self hosted.
 *
 * Inter is what the purchased template uses: app.css declares it fifteen times, and
 * every measurement in docs/template-tokens.md was tuned against it. An earlier version
 * of this file shipped IBM Plex, which came from mockup/hub-admin.html. That prototype
 * defines which screens exist, not how they look. See CLAUDE.md house rule 9.
 *
 * Served from disk because the Content Security Policy is font-src 'self' with no
 * external origins. Latin subset only.
 */

@font-face {
  font-family: 'Inter';
  font-style: normal;
  /* One variable file covers 400 to 700. Google served byte identical files for
     each static weight, so shipping them separately was 147 KB of duplicate. */
  font-weight: 400 700;
  font-display: swap;
  src: url('fonts/Inter-var.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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/*
 * Newsreader, self hosted. The display face for the public marketing pages and for
 * nothing else. `--font-display` is declared in css/components/public.css, scoped to the
 * public page frame, and it is deliberately NOT in tokens.css: that file is identical in
 * every app by design and a marketing serif is not a suite token.
 *
 * TWO STATIC FACES, weights 500 and 600, and that is the whole of what is shipped.
 *
 * Upstream Newsreader is a variable font with a wght axis AND an OPTICAL SIZE axis, which
 * is why this is not shipped the way Inter is above. opsz changes the letterforms with the
 * rendered size, so a headline and the paragraph under it drawn from one variable file are
 * two different typefaces on one page. Both faces below are instanced at the family's own
 * default, opsz 18, with fvar dropped, so the shapes are fixed and nothing can pick a
 * different one.
 *
 * Built from the upstream OFL release, google/fonts ofl/newsreader/Newsreader[opsz,wght].ttf
 * version 1.003, pinned at opsz 18 and the weight and then subset to the latin range below.
 * 24 KB each. Google's own stylesheet was not used: it serves ONE file for both weights,
 * which is the variable font again.
 *
 * Served from disk because the Content Security Policy is font-src 'self' with no external
 * origins. Latin subset only, the same range Inter carries above.
 */

@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('fonts/Newsreader-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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('fonts/Newsreader-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+2074, U+20AC, U+2122, U+2191,
    U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
