/* ============================================================================
   webfonts.css — единый источник @font-face для всех страниц (self-host)
   ============================================================================
   Причина: GDPR / LG München 2022 — Google Fonts запрещены на боевых страницах
   (передают IP посетителей без согласия). До 2026-07-16 index.html / install.html
   тянули fonts.googleapis.com напрямую + style.css делал @import того же. Собрано
   в один файл — landing и install подключают через <link rel="stylesheet">,
   style.css делает @import того же (единственный источник, никакого drift'а).

   Приёмка (постоянная):
   - DevTools Network фильтр fonts.g на index.html/install.html/app.html = 0
   - grep 'fonts.googleapis\\|fonts.gstatic' по деплою = 0
   - pre_promote_check gate self-host-fonts зелёный

   Владелец файла: CC-T. При добавлении веса/начертания — сюда, не в html.
   Unicode-range взяты из Google Fonts CSS response (совместимость 1:1).
   font-display: 300/400/500 = swap (текстовые основные), 600/700 = optional
   (заголовки/акценты, не блочат paint).
============================================================================ */

/* ═══ JetBrains Mono — 5 весов × 2 subsets (latin + cyrillic) ═══ */

@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-cyrillic-300-normal.woff2') format('woff2');
  font-weight: 300; font-style: normal; font-display: swap;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-latin-300-normal.woff2') format('woff2');
  font-weight: 300; font-style: normal; font-display: swap;
  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';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-cyrillic-400-normal.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
  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';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-cyrillic-500-normal.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
  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';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-cyrillic-600-normal.woff2') format('woff2');
  font-weight: 600; font-style: normal; font-display: optional;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff2') format('woff2');
  font-weight: 600; font-style: normal; font-display: optional;
  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';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-cyrillic-700-normal.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: optional;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: optional;
  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;
}

/* ═══ Noto Sans 400/500 — latin + latin-ext (latin-ext = IPA + modifiers) ═══
   IPA-глифы немецкой транскрипции (ˈʃpʁɛçən) живут в latin-ext U+0100-02BA.
   До 2026-07-16 --font-ipa ссылался на Noto Sans, но локально его не было —
   транскрипции рендерились фоллбэком. С этой правкой рендер станет корректным
   (правильные штрихи в ʁ, форма ɛ, длина ː). Тонкое визуальное изменение —
   ожидаемое.
*/
@font-face {
  font-family: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-latin-400-normal.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
  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: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-latin-ext-400-normal.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
  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: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-latin-500-normal.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
  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: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-latin-ext-500-normal.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
  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;
}

/* ═══ Noto Sans combining diacritical marks (U+0300-036F) ═══
   Cloud-review followup 2026-07-16 v627 fonts review: latin-ext subset содержит
   только U+0304/0308/0329 из combining-диапазона. Транскрипции в базе используют
   ещё как минимум:
   - U+032F (non-syllabic breve, aɪ̯ / aːɐ̯) — 31% слов (1007/3223, пример: Abfahrt /ˈapfaːɐ̯t/)
   - U+0361 (tie bar, аффрикаты t͡s)
   Отдельный subset через pyftsubset полного NotoSans (github.com/notofonts) —
   112 глифов, ~5.4KB × 2 веса = ~11KB.
*/
@font-face {
  font-family: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-combining-marks-400-normal.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
  unicode-range: U+0300-036F;
}
@font-face {
  font-family: 'Noto Sans';
  src: url('/fonts/noto-sans/noto-sans-combining-marks-500-normal.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
  unicode-range: U+0300-036F;
}
