Решили: типографику задают ДЕВЯТЬ ролей-классов 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.