/* arayofcode design system — fonts.css
 *
 * Self-hosted, latin-subset, variable-weight woff2 (SPEC §4).
 * URLs are relative to this file: serve fonts.css from the same directory
 * as the woff2 files.
 *
 * The *Fallback faces are metric-adjusted local fonts (size-adjust /
 * ascent-override / descent-override computed from the real font tables)
 * so text laid out before the webfont arrives occupies the same space —
 * no layout shift on font load.
 *
 * size-adjust is the ratio of mean advance width over [a-z + space]
 * between the webfont and its local stand-in; ascent/descent/line-gap are
 * the webfont's own metrics divided by that ratio. Regenerate with the
 * same method if a face is ever swapped.
 *
 * Newsreader ships with an optical-size axis; both files here are
 * instanced to opsz=16 (text) and subset to latin, which takes the pair
 * from 279KB to 79KB. The weight axis (400..600) is preserved.
 */

/* Newsreader — body and headings. 400 & 600 from one variable file.
   A reading serif: the identity is a notebook, not a terminal. */
@font-face {
  font-family: "Newsreader";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("newsreader-latin.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;
}

/* Italic carries real weight in this system — the correction mark, the
   standfirst, blockquotes — so it is a true italic, not a synthesised
   oblique. Also variable 400..600. */
@font-face {
  font-family: "Newsreader";
  font-style: italic;
  font-weight: 400 600;
  font-display: swap;
  src: url("newsreader-italic-latin.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;
}

/* JetBrains Mono — margin annotations, metadata, code, figure labels.
   400 & 500 from one variable file. */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("jetbrains-mono-latin.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;
}

/* Archivo Narrow — stage labels and slide furniture only. Condensed
   signage, so a timeline reads as a record rather than as prose.
   400 & 700 from one variable file. */
@font-face {
  font-family: "Archivo Narrow";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("archivo-narrow-latin.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;
}

/* Metric-adjusted fallbacks. Each local stand-in is chosen for shape
   class, not just availability: Georgia for a text serif, Arial Narrow
   for a condensed grotesque, Courier New for mono. */
@font-face {
  font-family: "Newsreader Fallback";
  src: local("Georgia");
  size-adjust: 97.2369%;
  ascent-override: 75.5886%;
  descent-override: 27.2530%;
  line-gap-override: 0%;
}

@font-face {
  font-family: "JetBrains Mono Fallback";
  src: local("Courier New");
  size-adjust: 99.9837%;
  ascent-override: 102.0166%;
  descent-override: 30.0049%;
  line-gap-override: 0%;
}

@font-face {
  font-family: "Archivo Narrow Fallback";
  src: local("Arial Narrow");
  size-adjust: 100.4124%;
  ascent-override: 103.0749%;
  descent-override: 31.0719%;
  line-gap-override: 0%;
}
