Решили: цвет текста — ВТОРАЯ ОСЬ поверх роли. Роль (их восемь) задаёт гарнитуру и кегль, метка (их пять: приглушённый, латунь, прирост, убыль, опасность) меняет только цвет и кладётся на любую роль вторым классом. Метки живут в новом ярусе 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.Порядок_ярусов_темы_не_менялся.