Решили: цвет текста — ВТОРАЯ ОСЬ поверх роли. Роль (их восемь) задаёт гарнитуру и кегль, метка
(их пять: приглушённый, латунь, прирост, убыль, опасность) меняет только цвет и кладётся на любую
роль вторым классом. Метки живут в новом ярусе utilities/, импортируемом ПОСЛЕДНИМ.
Почему: витрина показывала восемь ролей в покое и молчала о наложениях — красный текст жил в
семи местах дерева и не был виден нигде. Предложение считать каждое цветовое состояние отдельным
«дочерним шрифтом» отвергли: восемь ролей на пять цветов дают сорок восемь записей и возвращают ту
самую болезнь, из-за которой роль и состояние делили одну ось у кнопок
(role-and-state-must-not-share-an-axis).
Наследования классов в USS нет (@extend не существует), поэтому механизм ровно один — композиция.
Разбор заодно показал, что цветовых токенов текста объявлено ЧЕТЫРНАДЦАТЬ, из них
--gm-color-text-action не занят ни одним правилом (снят), а warning, text-ghost,
text-on-accent живут только в дев-консоли и пикере. disabled-text — не метка, а состояние: у
него своя ось.
Третьей сущностью признан СЛОВАРЬ подсказки (gm-kw--*): там цвет кодирует категорию понятия, а не
назначение текста и не его состояние. Шесть категорий на пять цветов — --behaviour и --other
сегодня неотличимы; факт виден на кадре, вердикта пока нет.
Сказано: «Ты тут точно все 8 шрифтов вывела? Где тот же красный, например? Или их больше? Ты же понимаешь, еще раз, что каждое новое состояние текста (будто то капс, иной цвет или чет такое) - это новый шрифт? Дочерний, да (можно же и нужно ли их делать таковыми?), но отдельный» (06.08.2026, сессия e32de921).
Грабли: метка равна по специфичности правилу роли (.gm-text--danger против
.gm-tooltip__desc), а при равенстве в USS выигрывает импортированный ПОЗЖЕ. Первый прогон витрины
показал «опасность» на теле подсказки неотличимой от покоя ровно поэтому: components/text.uss
стоял до components/tooltip.uss. Утилита обязана быть последней в каскаде — иначе она срабатывает
через раз, по алфавиту имени файла. Двух классов в селекторе тут не хватило бы: метка ложится на
любую из восьми ролей.
Вторая, мельче: у словаря перечислять модификаторы в Variants не нужно — образец показывает все
шесть категорий одной строкой (иначе не видно, различимы ли они рядом), и список вариантов дал семь
одинаковых ячеек.
Владелец правды: UiTextTone в UiComponentRegistry, utilities/text-tones.uss,
тесты UiTextToneGateTests, порядок ярусов — UiStateGateTests.Порядок_ярусов_темы_не_менялся.