/* Шрифты портала: 10 объявлений @font-face на 10 файлов, по одному на файл.
 *
 * ═══ ЗНАК РУБЛЯ НАМЕРЕННО НЕ ЗАЯВЛЕН НИ ОДНОЙ ПОДРЕЗКОЙ (20.08.2026) ═══
 *
 * У трёх объявлений latin-ext (Inter normal, Playfair italic, Playfair normal)
 * диапазон U+20AD-20C0 РАЗРЕЗАН на U+20AD-20BC и U+20BE-20C0. Дырка в один
 * символ — U+20BD, ₽.
 *
 * ЗАЧЕМ. Знак рубля лежал ТОЛЬКО в latin-ext (проверено 20.08.2026 браузером:
 * ширина ₽ под inter-300-n-cyrillic.woff2 совпала с запасным шрифтом, а под
 * inter-300-n-latin-ext.woff2 отличалась; у «П» и «A» — наоборот). Один этот
 * глиф тянул inter-300-n-latin-ext.woff2 — 85 068 Б, самый тяжёлый файл
 * портала — практически на каждую страницу с ценой.
 *
 * Что на странице действительно требует latin-ext, кроме ₽, — НИЧЕГО:
 * замер /msk/catalog 20.08.2026, разбор всех неASCII-символов ответа. Тире
 * U+2014 и точка U+00B7 попадают в latin, звёзды и эмодзи — в системный
 * шрифт. Рубль встречается 61 раз, latin-ext уходил в сеть.
 *
 * ЦЕНА. ₽ рисуется следующим семейством стека (system-ui: Segoe UI, SF,
 * Roboto — гротески того же класса). Владелец посмотрел сравнение 20.08.2026:
 * «знак ₽ вполне норм и ничем не отличим». Остальной текст не меняется:
 * дырка ровно в один код.
 *
 * ЧТО ЭТО НЕ ОТМЕНЯЕТ. latin-ext по-прежнему доступен для того, ради чего он
 * и существует, — диакритики и прочей латиницы. Страница, где такие символы
 * есть, скачает его как раньше; страница, где из всего файла нужен был только
 * рубль, — больше нет.
 *
 * Заперто TestRubleSignIsNotClaimedBySubset.
 *
 * БЫЛО 47 ОБЪЯВЛЕНИЙ НА 10 ФАЙЛОВ (до 08.08.2026). Каждый вес перечислялся
 * отдельной записью — Inter 300..700, Playfair normal 400..900, Playfair
 * italic 400..600 — но src во всех записях одного семейства указывал на ОДИН
 * И ТОТ ЖЕ файл.
 *
 * ЧТО ИМЕННО ЭТО ЛОМАЛО — ЗАМЕРЕНО, А НЕ ВЫВЕДЕНО (08.08.2026, Chromium 148,
 * старый и новый файл подняты рядом на 127.0.0.1:8234 и :8123, замер —
 * ширина одного текста и число непрозрачных пикселей на canvas).
 * Дескриптор font-weight объявляет ДИАПАЗОН, который запись на себя берёт, и
 * браузер зажимает ось wght в этот диапазон. При одиночном значении диапазон
 * вырожден, поэтому:
 *
 *   Inter 100 и 200          рисовались как 300  (ink 3708 вместо 1785)
 *   Inter 800 и 900          рисовались как 700  (ink 6693 вместо 8292)
 *   Playfair italic 700..900 рисовались как 600  (ink 5060 вместо 5637/6797)
 *   всё остальное            рисовалось верно, ширина в ширину
 *
 * То есть расхожая формулировка «на портале нигде нет жирного» ЗАМЕРОМ НЕ
 * ПОДТВЕРДИЛАСЬ: Inter 300..700 и Playfair normal 400..900 старый файл отдавал
 * правильно. Ломались только края оси. На сегодняшней разметке они не
 * использовались: font-extrabold/font-thin/font-extralight не встречаются
 * ни разу, font-black (900) стоит только вместе с font-display, то есть на
 * Playfair normal, а italic — только на font-medium.
 *
 * ПОЧЕМУ ТОГДА ЧИНИМ. Не ради сегодняшнего пикселя, а ради того, что края оси
 * молча недоступны: font-black на основном шрифте или жирный курсив дадут не
 * ошибку, а тихо не тот вес — отказ того же рода, что ловит весь этот проект.
 * Плюс 47 объявлений на 10 файлов — приглашение к рассинхрону: 16 567 байт
 * стало 6 869.
 *
 * ПОЧЕМУ ДИАПАЗОН, А НЕ ДОКАЧКА ФАЙЛОВ. Все десять файлов — переменные
 * шрифты, нужные веса уже лежат на диске. Замер 08.08.2026, разбор таблиц
 * WOFF2 с распаковкой brotli и чтением fvar:
 *
 *   inter-300-n-*.woff2            21 таблица, есть fvar/gvar/HVAR/STAT/avar,
 *                                  ось "wght": min=100 default=400 max=900,
 *                                  9 именованных начертаний
 *   playfairdisplay-400-{n,i}-*    19 таблиц, есть fvar/gvar/HVAR/STAT
 *                                  (avar нет), ось "wght": min=400
 *                                  default=400 max=900, 6 начертаний
 *
 * Имена файлов врут: "inter-300" — это подсеть Google Fonts, названная по
 * весу запроса, а внутри лежит вся ось. Поэтому вес задаётся диапазоном
 * (двумя числами через пробел) — тогда браузер тянет wght через HVAR/gvar,
 * а не рисует псевдожирный синтезом.
 *
 * PLAYFAIR НАЧИНАЕТСЯ С 400, А НЕ С 100. Ось ниже 400 не идёт (min=400 по
 * fvar выше). Объявить "100 900" значило бы пообещать браузеру веса, которых
 * в файле нет; он бы их зажал к 400 молча.
 *
 * unicode-range и font-display перенесены из прежней редакции дословно.
 *
 * ЗАМОК: web/fontscss_test.go — число @font-face обязано равняться числу
 * .woff2 в каталоге, и каждый src обязан указывать на существующий файл.
 * Ровно этот дефект (47 объявлений на 10 файлов) так и ловится.
 */

/* Inter — normal, ось wght 100..900 */

/* cyrillic-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-300-n-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-300-n-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-300-n-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-20BC, U+20BE-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-300-n-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 — italic, ось wght 400..900 */

/* cyrillic */
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-i-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-i-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-20BC, U+20BE-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-i-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 — normal, ось wght 400..900 */

/* cyrillic */
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-n-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-n-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-20BC, U+20BE-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url('/static/fonts/playfairdisplay-400-n-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;
}
