/* Pchol — self-hosted faces. Build spec §1.2.
   Mirrors exactly what fonts.googleapis.com served on 20 Aug 2026, with local URLs:
   same variable files, same discrete font-weight declarations, same unicode-ranges.
   The weight declarations are deliberate. Archivo is 300–400 only; the design's
   font-weight:700 spans render with synthetic bold, and widening the range here
   would silently change approved type. Subset: latin + latin-ext (EN build).
   RU build needs cyrillic cuts of Playfair/Manrope/JetBrains — build spec §4.1. */

/* Commissioner — replaced Archivo as the body face, 21 Aug 2026. Archivo survives in exactly
   one place: the shared footer credit component, which takes its face as a prop and is a
   cross-project signature.

   ONE variable file per subset. Google serves the same woff2 for 300, 400 and 500 — verified
   by checksum — so three discrete cuts would ship the same bytes three times.

   THE RANGE IS 300–500 ON PURPOSE. Three display spans set font-weight:700 on this face and
   render with SYNTHETIC bold; they did the same under Archivo 300–400 and the appearance is
   approved. Commissioner's variable axis runs 100–900, so widening this range would silently
   turn those three spans into real Commissioner Bold. Do not widen it without a design call.

   Cyrillic cuts ship because Commissioner carries Cyrillic: the same file serves EN and RU,
   which is why the Manrope plan was dropped. */

/* Commissioner 300–500 variable — latin */
@font-face {
  font-family: 'Commissioner';
  font-style: normal;
  font-weight: 300 500;
  font-display: swap;
  src: url(./commissioner-var-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;
}
/* Commissioner 300–500 variable — latin-ext */
@font-face {
  font-family: 'Commissioner';
  font-style: normal;
  font-weight: 300 500;
  font-display: swap;
  src: url(./commissioner-var-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* Commissioner 300–500 variable — cyrillic */
@font-face {
  font-family: 'Commissioner';
  font-style: normal;
  font-weight: 300 500;
  font-display: swap;
  src: url(./commissioner-var-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* Commissioner 300–500 variable — cyrillic-ext */
@font-face {
  font-family: 'Commissioner';
  font-style: normal;
  font-weight: 300 500;
  font-display: swap;
  src: url(./commissioner-var-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

/* Bodoni Moda 400 italic — latin-ext */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(./bodoni-moda-400-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Bodoni Moda 400 italic — latin */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(./bodoni-moda-400-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;
}

/* Bodoni Moda 500 italic — latin-ext */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(./bodoni-moda-400-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Bodoni Moda 500 italic — latin */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(./bodoni-moda-400-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;
}

/* Bodoni Moda 400 — latin-ext */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./bodoni-moda-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Bodoni Moda 400 — latin */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./bodoni-moda-400-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;
}

/* Bodoni Moda 500 — latin-ext */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./bodoni-moda-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Bodoni Moda 500 — latin */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./bodoni-moda-400-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;
}

/* Bodoni Moda 600 — latin-ext */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./bodoni-moda-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Bodoni Moda 600 — latin */
@font-face {
  font-family: 'Bodoni Moda';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./bodoni-moda-400-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;
}

/* IBM Plex Mono — replaced Martian Mono across the estate, 20 Aug 2026.
   400 is the only weight the surfaces use (149 declarations); 500 ships because the handoff
   specifies the pair. The cyrillic cuts are here for the RU build, which uses the same face:
   Plex has full Cyrillic, so the estate stays on one mono rather than adding JetBrains. */

/* IBM Plex Mono 400 — latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./ibm-plex-mono-400-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;
}
/* IBM Plex Mono 400 — latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./ibm-plex-mono-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* IBM Plex Mono 400 — cyrillic */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./ibm-plex-mono-400-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* IBM Plex Mono 400 — cyrillic-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./ibm-plex-mono-400-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* IBM Plex Mono 500 — latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./ibm-plex-mono-500-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;
}
/* IBM Plex Mono 500 — latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./ibm-plex-mono-500-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* IBM Plex Mono 500 — cyrillic */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./ibm-plex-mono-500-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* IBM Plex Mono 500 — cyrillic-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./ibm-plex-mono-500-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

/* Archivo 400 — ONE weight, for ONE thing: the shared footer credit component, which takes
   its face as a prop and is a cross-project signature (house standard: 11.5px Archivo at 86%).
   The body face is Commissioner; Archivo anywhere else on this estate is stale. Latin only —
   the credit line is a Latin brand name in every locale. */

/* Archivo 400 — latin */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./archivo-400-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 400 — latin-ext */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./archivo-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Playfair Display — the Russian display face. Bodoni Moda, which sets every display line
   and testimonial on the English pages, has no Cyrillic at all: not in this folder and not
   upstream, since it is a Latin-only revival. Russian text in it would silently fall back to
   a system serif and look nothing like the design. Playfair is the nearest high-contrast
   Didone that ships Cyrillic. Loaded only by the /ru/ pages, so the English side is unchanged
   and pays nothing for it. Latin subsets are included deliberately — Russian copy still
   carries Latin names (Pchol, Kollektiv, IPO), and without them those words would drop back
   to Bodoni mid-sentence. Weight 500 and its italic only: that is all the design uses. */
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-italic-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-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;
}
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./playfair-display-500-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;
}

/* ── Prata ──────────────────────────────────────────────────────────────────────────────
   The display face for both alphabets. A Didone with real Cyrillic, which is what lets one
   typeface set English and Russian - the thing Bodoni Moda could not do, and the reason the
   Russian build used to substitute Playfair Display.

   TWO THINGS PRATA DOES NOT HAVE, both handled rather than hoped about:

   1. ONE WEIGHT. Google ships Prata at 400 only. Headings on this site ask for 500, and a
      browser with no 500 face will SYNTHESISE one - smearing the strokes, which on a Didone
      looks like a rendering fault. Declaring the range 400 500 tells it this face answers both,
      so it scales nothing and fakes nothing.
   2. NO LATIN-EXT. Prata ships latin, cyrillic and cyrillic-ext, so a Czech or Polish name in a
      Kollektiv bio would fall out of the face. No served page uses a latin-ext character today
      (checked, all pages, 2 Sep 2026), but the first one added would silently drop to a system
      serif. Literata stays declared below and sits behind Prata in every stack, so that case
      lands on a face we chose rather than on Times. */

/* Prata 400-500 - latin */
@font-face {
  font-family: 'Prata';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url(./prata-400-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;
}

/* Prata 400-500 - cyrillic */
@font-face {
  font-family: 'Prata';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url(./prata-400-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* Prata 400-500 - cyrillic-ext */
@font-face {
  font-family: 'Prata';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url(./prata-400-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

/* ── Golos Text ─────────────────────────────────────────────────────────────────────────
   The sans voice, replacing Commissioner. Drawn Cyrillic-first by Paratype, which on a site
   that ships both alphabets means the Russian is the designer's first thought rather than an
   extension. Larger x-height than Commissioner, so it reads clearer at the same pixel size -
   which is the actual request: more legible without being bigger again.

   ONE FILE PER SUBSET, WEIGHT RANGE 400-700. Golos Text is variable, so Google's 400 and 700
   downloads are the same bytes - verified identical by cmp across all four subsets, the same
   trap Literata set earlier today. Two rules per subset would make any page using both weights
   fetch the same 37 KB twice. */

/* Golos Text 400-700 - latin */
@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./golos-text-400-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;
}

/* Golos Text 400-700 - latin-ext */
@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./golos-text-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Golos Text 400-700 - cyrillic */
@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./golos-text-400-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* Golos Text 400-700 - cyrillic-ext */
@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./golos-text-400-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

/* ── Alice ─────────────────────────────────────────────────────────────────────────────
   The reading face. Chosen 2 Sep 2026 after Commissioner, Golos Text, Lora and Piazzolla, from
   a nine-way comparison on the live page in both languages. Round, upright, with real character
   in the letterforms, and drawn Cyrillic-first in Russia - its Russian is the more elegant of its
   two alphabets, which on this site is the right way round. Holds on a dark ground because the
   counters stay open. Golos Text sits behind it as the fallback.
   ONE WEIGHT SHIPPED, declared as the range 400-700 so no browser synthesises a bold; the
   reading blocks never ask for one. */
@font-face {
  font-family: 'Alice';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./alice-400-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;
}
@font-face {
  font-family: 'Alice';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./alice-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Alice';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./alice-400-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Alice';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(./alice-400-cyrillic-ext.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}

/* ── Pchol Arrows ───────────────────────────────────────────────────────────────────────
   One 536-byte font, four glyphs, built by _project/build-arrows.py: a hairline shaft with a
   heavier open chevron, so the arrows carry the same thick-and-thin as the Didone instead of
   the stubby uniform strokes Plex Mono and every system font ship.

   It is its OWN family, and it sits FIRST in every font stack on the site. It holds only the
   four arrow codepoints, so for every other character the browser falls straight through to
   the next family and nothing else changes. No markup edits, no JS, nothing to keep in step
   across two languages, and the Unicode glyph is the fallback if the file ever fails.

   WHY NOT SHADOW THE EXISTING FAMILIES. The first version declared this file under the same
   names the text uses - 'IBM Plex Mono' and so on - with a unicode-range for the arrows, on
   the theory that the browser composites faces of one family by range. Measured 2 Sep 2026: it
   worked for Bodoni Moda, whose file has no arrow, and silently did nothing for IBM Plex Mono,
   whose file does. Chrome keeps a run in a face that already holds the glyph and never asks the
   sibling. A separate family, first in the stack, cannot be skipped that way. */
@font-face {
  font-family: 'Pchol Arrows';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(./pchol-arrows-003591a733.woff2) format('woff2');
  unicode-range: U+2190, U+2192, U+2193, U+2197;
}
