/*
 * Self-hosted webfonts — strict-CSP safe (served same-origin from /assets/fonts/*.woff2,
 * font-src 'self'). No @import, no external CDN. Subsets: latin + cyrillic (Google
 * Fonts per-subset woff2, OFL-licensed). Routed through the --font-* tokens in tokens.css.
 *
 * RE-PINNED 2026-07-08 to the editorial.html comp 1:1 (operator directive): the ONLY
 * web font is Source Serif 4 — exactly as the comp declares («the only web font is
 * "Source Serif 4"»). Interface text and the mono metadata layer use the comp's
 * system stacks (Segoe UI Variable / Cascadia Code first), so no other font files load.
 *
 *  • Source Serif 4 — the editorial display voice: hero headline, answer lede,
 *    verbatim pull-quotes. Variable weight 400–700, latin + cyrillic + cyrillic-ext
 *    (the ext slice carries ₴ and archaic Cyrillic).
 *
 * The Golos Text / IBM Plex Mono woff2 subsets from the pre-1:1 iteration and the
 * e-Ukraine files from the previous design language remain on disk under their
 * licences (OFL / CC-BY-4.0, see NOTICE in src/web/internal-app/fonts/) but are no
 * longer part of the active stacks and are never fetched.
 *
 * AMENDED 2026-07-11 (Правки №7, operator: «топові шрифти» for the new Home Page):
 * Fixel Text (MacPaw, OFL-1.1, native Ukrainian Cyrillic) joins as the
 * LANDING-scoped grotesque — UI voice of the public homepage only, weights
 * 400/500/600. @font-face alone fetches nothing: the app never names the
 * family, so /app still loads Source Serif 4 exclusively and the 2026-07-08
 * comp pin stays intact where it applies. (The Fixel *Display* optical size
 * was dropped after review: its sole use was three 11px caption labels, where
 * a display cut is optically wrong and Text 600 — already loaded — is right.)
 *
 * AMENDED 2026-07-11 (fonts pass): e-Ukraine Head (Дія state face, CC-BY-4.0)
 * was wired as the landing display voice, then REPLACED after review — the
 * operator found the neutral state grotesque «дефолтний якийсь жирний» and
 * asked for a genuinely distinctive, characterful face with italic expression.
 *
 * SUPERSEDED — LANDING DISPLAY = «Playfair Display» (SIL OFL, Google Fonts):
 * a high-contrast editorial Didone with excellent Ukrainian Cyrillic and a
 * true italic. It reads «престиж / юридичне видання / юрфірма» (the premium,
 * characterful register the operator wanted), and its own italic carries the
 * accent phrase in the hero — the typographic variety requested. Fixel Text
 * stays the body/UI grotesque; Source Serif 4 stays scoped to the demo
 * answer-card «law text». e-Ukraine Head remains declared as a fallback in the
 * `--ld-display` stack. Landing-scoped via `--ld-display` in landing.css, so
 * /app is untouched. Playfair carries no attribution burden (OFL); e-Ukraine's
 * CC-BY credit stays in the footer colophon + fonts/NOTICE.md.
 */

/* ===================== Source Serif 4 (editorial display, variable) ===================== */
@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/sourceserif4-cyrillic-ext.woff2") format("woff2");
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/sourceserif4-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/sourceserif4-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;
}

/* ===================== Fixel (landing grotesque, MacPaw, OFL-1.1) =====================
   Full Latin + Cyrillic in each file — no unicode-range slicing needed. */
@font-face {
  font-family: "Fixel Text";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/fixeltext-400.woff2") format("woff2");
}
@font-face {
  font-family: "Fixel Text";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/fonts/fixeltext-500.woff2") format("woff2");
}
@font-face {
  font-family: "Fixel Text";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/fixeltext-600.woff2") format("woff2");
}

/* ===================== Manrope (landing display, SIL OFL) =====================
   Modern geometric grotesque with FULL Cyrillic (incl. Ukrainian Ґ Є І Ї) — the
   self-hostable Cyrillic twin of the Aeonik/General-Sans look from the operator's
   Margin reference (verified: Aeonik is commercial; General Sans has no Cyrillic;
   Manrope is OFL with a complete Cyrillic set). Variable weight 500–800; Google
   Fonts per-subset woff2 (cyrillic + latin). This is the PRIMARY --ld-display face. */
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 500 800;
  font-display: swap;
  src: url("/assets/fonts/manrope-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 500 800;
  font-display: swap;
  src: url("/assets/fonts/manrope-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;
}

/* ===================== e-Ukraine Head (landing display fallback, Diia / Arkfont, CC-BY-4.0) =====================
   The Ukrainian state display face — now a fallback behind Manrope in --ld-display.
   Full Latin + Cyrillic in each file, no unicode-range slicing. */
@font-face {
  font-family: "e-Ukraine Head";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/e-ukraine-head-400.woff2") format("woff2");
}
@font-face {
  font-family: "e-Ukraine Head";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/fonts/e-ukraine-head-500.woff2") format("woff2");
}
@font-face {
  font-family: "e-Ukraine Head";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/fonts/e-ukraine-head-700.woff2") format("woff2");
}

/* ===================== Onest (landing body/UI, SIL OFL) =====================
   Modern geometric grotesque (the krytsia.com body face), landing body + UI.
   Google Fonts per-subset woff2 (cyrillic + latin). #2108 (LCP-2): Onest is a variable font
   (wght 100-900), so one file per subset carries every weight, and a browser downloads every
   distinct URL. Each file is therefore declared once, with the 400-700 range this sheet declared
   before, and a page downloads at most two Onest files. JetBrains Mono 400/500 and Playfair
   Display 600/700 below name one file per subset for the same reason.
   test/fonts-download-each-file-once.test.mjs keeps it so. */
@font-face {
  font-family: "Onest";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/onest-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Onest";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/onest-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 (landing eyebrows/labels, SIL OFL) =====================
   The krytsia.com eyebrow/label voice — uppercase, wide-tracked mono at 12px. */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/jetbrainsmono-400-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/jetbrainsmono-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: "JetBrains Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/fonts/jetbrainsmono-400-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/assets/fonts/jetbrainsmono-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;
}

/* ===================== Playfair Display (landing display, SIL OFL) =====================
   High-contrast editorial Didone — hero + section headings + the italic accent.
   Google Fonts per-subset woff2 (cyrillic + latin), weights 600/700 + italic 600. */
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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: 600;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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: 700;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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: 700;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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: italic;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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: 600;
  font-display: swap;
  src: url("/assets/fonts/playfairdisplay-600-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;
}
