/* ============================================================================
   fonts.css — самохостинг гарнитур LUMIS. Шаг 0.3 плана (design/IMPLEMENTATION_PLAN.md).
   Конституция §3: --font-display = Wix Madefor Display, --font-text = Onest,
   --font-mono = JetBrains Mono. Имена семейств — дословно из каталога 05 §2.2,
   без суффиксов Variable/Fallback (их положительно сверяет gate.font-catalog.json).

   ФАЙЛЫ. Вариативные woff2 из Google Fonts (CSS API v2, Chrome-UA даёт по одному
   woff2 на сабсет), сабсеты latin / latin-ext / cyrillic, лежат в /static/fonts/.
   cyrillic-ext сознательно не берётся: в продукте нет ни украинского, ни сербского.

   ЗАМЕР ВЕСА (2026-09-16, ровно эти 9 файлов, байты на диске = байты по сети,
   woff2 уже сжат, Content-Encoding поверх не применяется):

     Onest                latin 33 760 · latin-ext 28 452 · cyrillic 15 860  = 78 072 B
     Wix Madefor Display  latin 20 168 · latin-ext 12 464 · cyrillic 13 816  = 46 448 B
     JetBrains Mono       latin 40 404 · latin-ext 15 196 · cyrillic 12 108  = 67 708 B
     ─────────────────────────────────────────────────────────────────────────────
     ВСЕГО 192 228 B = 187.7 КБ

   БЮДЖЕТ КОНСТИТУЦИИ §3.8 — 90 КБ «на первый экран». Честные числа:

     • сумма всех девяти файлов ........................ 187.7 КБ — ПРЕВЫШЕНИЕ ×2.08
     • реально грузится на первый экран RU (unicode-range
       отсекает неиспользованные сабсеты; текст и заголовки —
       Onest + Wix, latin + cyrillic) ...................  81.6 КБ — в бюджете
     • то же на первый экран EN (только latin) .........  52.7 КБ — в бюджете
     • RU + моноширинный на первом экране (хэш, .cursorrules:
       добавляются jetbrains-mono latin + cyrillic) ..... 132.9 КБ — ПРЕВЫШЕНИЕ ×1.48

   Файлы НЕ урезаются и кириллица НЕ выбрасывается (прямое указание шага 0.3):
   это настоящий вес вариативных гарнитур каталога.

   РЕШЕНИЕ ПО ПРЕВЫШЕНИЮ (2026-09-16): выбрана ленивая загрузка JetBrains Mono.
   Три его @font-face вынесены в static/css/fonts-mono.css и подключаются из
   app.js после первой отрисовки, поэтому первый экран RU весит 81.6 КБ, а EN —
   52.7 КБ: MUST §3.8 исполнен без урезания сабсетов. Все четыре числа заведены
   в design/RATCHET.json ("fonts_kb"), потому что храповик комментарии не видит.
   ============================================================================ */

/* ── Onest — основной текст (--font-text) ─────────────────────────────────── */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/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: 100 900;
  font-display: swap;
  src: url('/static/fonts/onest-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: 'Onest';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/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;
}

/* ── Wix Madefor Display — заголовки (--font-display) ─────────────────────── */
@font-face {
  font-family: 'Wix Madefor Display';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/static/fonts/wix-madefor-display-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Wix Madefor Display';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/static/fonts/wix-madefor-display-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: 'Wix Madefor Display';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/static/fonts/wix-madefor-display-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 ───────────────────────────────────────────────────────────
   ТРИ @font-face МОНОШИРИННОГО ПЕРЕЕХАЛИ в static/css/fonts-mono.css и
   грузятся лениво из app.js: с ними первый экран RU весил 132.9 КБ при
   бюджете §3.8 ≤90 КБ, без них — 81.6 КБ. См. шапку fonts-mono.css.
   ──────────────────────────────────────────────────────────────────────────── */

/* ── Метрические фолбэки (конституция §3.8) ───────────────────────────────────
   Отдельные семейства, на которые ссылаются --font-fallback-text и
   --font-fallback-display в tokens.css. Носитель — локальный Arial: он есть
   на Windows и macOS, а там, где его нет, семейство просто не разрешается
   и стек уходит на следующий system-ui — ровно как записано в токене.

   ЧИСЛА ПРИБЛИЖЁННЫЕ, И ЭТО ОГОВОРЕНО. Точный capsize на билде (§3.8) не
   поднят: шага сборки в проекте пока нет. Счёт сделан скриптом по таблицам
   OS/2 + hmtx самих файлов:
     size-adjust       = средняя ширина печатного ASCII (0x20…0x7E) гарнитуры,
                         делённая на ту же среднюю у Arial;
     ascent/descent    = sTypoAscender / |sTypoDescender| (у обеих гарнитур
                         взведён USE_TYPO_METRICS), поделённые на size-adjust;
     line-gap          = sTypoLineGap = 0 у обеих.
   Замеры (upem 1000): Onest asc 970 desc 305 gap 0, ASCII-avg 0.5437;
   Wix Madefor Display asc 1008 desc 252 gap 0, ASCII-avg 0.5601;
   Arial (upem 2048) asc 1854 desc 434 gap 67, ASCII-avg 0.5270.

   Почему не xAvgCharWidth: у Arial это легаси-определение OS/2 v1 (средне-
   взвешенная по строчным, 904/2048 = 0.441), у Onest — современное среднее по
   всем глифам (592/1000 = 0.592). Прямое их деление даёт size-adjust 134 %,
   то есть фолбэк, который на треть крупнее реальной гарнитуры. Среднее по
   одному и тому же набору символов даёт 103 % и 106 % — это и записано. */
@font-face {
  font-family: 'Onest Fallback';
  font-style: normal;
  font-weight: 100 900;
  src: local('Arial');
  size-adjust: 103.19%;
  ascent-override: 94.01%;
  descent-override: 29.56%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Wix Madefor Display Fallback';
  font-style: normal;
  font-weight: 400 800;
  src: local('Arial');
  size-adjust: 106.28%;
  ascent-override: 94.84%;
  descent-override: 23.71%;
  line-gap-override: 0%;
}
