Решили: типографику задают ДЕВЯТЬ ролей-классов gm-text-* (display, title, subtitle, name,
body, caption, note, label, code) и семь меток gm-text--*; класс экрана держит только раскладку.
Гейт UiTypographyGateTests не даёт правилу вне яруса ролей задавать кегль, гарнитуру или цвет
текста — исключения выписаны поимённо, с причиной.
Почему: перепись нашла 81 правило с кеглем или гарнитурой на 75 классов, и пять пар «кегль + цвет» покрывали 42 из них (body+text — 11 классов, sm+muted — 10, xxs+muted — 10, sm+text — 6, xs+muted — 5). Роли существовали, но были расписаны под каждый экран заново: «тело текста» жило четырьмя именами. Та же болезнь, что была у кнопок с «пунктом главного меню» вместо «кнопки», и вылечена тем же приёмом.
Роль НЕ несёт цвет — только базовый. У мелких ролей встречаются оба варианта (gm-tooltip__meta
тихая, gm-tooltip__line-value нет, при одном кегле), и стоило роли забрать цвет себе, для яркого
понадобилась бы метка «обычный», то есть метка на отсутствие метки. Цена: самый частый случай
(тихая подпись) пишется двумя классами. Взамен у гейта нет исключений по цвету.
Меток семь, а не пять: патина (--accent, «выбрано») и вторая ступень латуни (--value,
«ценность») не сводились к первым пяти без смены вида. Развилка ставилась прямо — «свести и
показать кадром» против «завести две метки»; выбрано второе.
Сказано: «Свести типографику: 75 классов → 8 ролей» и, про экранные классы, «На элементе, два класса в разметке»; про гейт — «Жёстко, со списком исключений» (06.08.2026, сессия e32de921).
Грабли: ЯРУС ГАРНИТУРЫ — ОТДЕЛЬНЫЙ ВЛАДЕЛЕЦ, и по кеглю с цветом его не видно. Групповой
селектор на 15 блоков назначал сериф, и по инвентарю (кегль + цвет) gm-shop__section-title
выглядел как «тело», хотя это антиква. Перевод на .gm-text-body сменил бы гарнитуру молча —
поймано до прогона, но лишь потому, что я вспомнила про этот список. Отсюда девятая роль
gm-text-subtitle (сериф на кегле тела, пятеро жителей) и обязательная чистка яруса: класс,
носящий роль, из него убирается, иначе у гарнитуры два владельца.
Вторая: гейт поймал мой же хвост — я удалила gm-stat__label как «только типографику», а он
адресует подпись в .gm-stat:disabled .gm-stat__label. Пустеющее правило не значит ненужный класс.
Третья, приятная: из тринадцати кадров контактного листа после перевода компонентов изменились только два по делу. Экраны лист не покрывает — их перевод проверен гейтом и компиляцией, глазами нет.
Владелец правды: components/text.uss (роли), utilities/text-tones.uss (метки),
тесты UiTypographyGateTests, UiTextToneGateTests.