Решили: дизайн-система получает ВТОРОЙ голос (сериф на всём, что интерфейс произносит) и ВТОРУЮ форму (кнопка-пластина со срезанными углами вместо единственного прямоугольника с рамкой 2px).

Почему: до этого у системы был ровно один силуэт и ровно одна гарнитура на весь текст, кроме .gm-panel__title. Следствие видно на рендере главного меню: заголовок говорит нашей антиквой, а шесть пунктов под ним — гротеском Fira Sans, выбранным как раз за нейтральность, и различаются они между собой только цветом заливки. Экран читался веб-формой, а не игрой. Отвергнуто: (1) вернуть пиксельный набор Honeti — его вывели 25.07 осознанно, проблема не в его отсутствии; (2) оставить одну гарнитуру и добить вид фактурой (тени/градиенты) — UITK не умеет ни box-shadow, ни inset, а растровые подложки — это возврат к тому же 9-slice; (3) третья гарнитура под «акцент» — два голоса читаются как замысел, три как солянка.

Сказано: «А вот наши реальные кнопки, шрифт и прочее - мб и не особо. Будто мы держались за старый стиль когда все делали еще под UI pixel art набор, а по итогу… а по итогу что-то странное у нас щас» (2026-08-02, сессия d2239d53). Порядок работ («шрифты → форма → зачистка хвостов → панели») предложен агентом и утверждён им же дословно: «Да, давай твой порядок».

Грабли:

  • PlateButton наследует Button, а НЕ VisualElement с Clickable: полсотни мест ищут кнопки через Q<Button>(...). Ценой этого стала возня с текстом — базовый TextElement подписывается на generateVisualContent в СВОЁМ конструкторе, то есть раньше наследника, и заливка пластины легла бы поверх надписи. Поэтому подпись переехала в дочерний Label, а text переопределён (свойство виртуальное, UXML-атрибут продолжает работать). Геттер обязан переживать вызов до конструктора наследника.
  • Из-за этого же переезда гарнитура до подписи не доходит НАСЛЕДОВАНИЕМ: правило .unity-text-element бьёт по Label прямо, а прямое сильнее унаследованного. Дочерний класс обязан стоять в списке голосовых селекторов отдельной строкой.
  • CustomStyleProperty<float> читает <number>, а не <length>: --gm-plate-chamfer: 10px молча не резолвится, нужно 10 (та же конвенция, что у --gm-slant-width).
  • Каждое состояние пластины требует ДВУХклассового селектора (.unity-button.gm-plate-button:hover): одноклассовый проигрывает правилам темы Unity, и она дорисовывает прямоугольник под фигурой.
  • Скроллбар был темизирован тремя копиями правил по контейнерам (тело панели, грид инвентаря, консоль) — и список продажи в лавке, не попавший ни в один, рисовал светло-серый скроллбар темы. Свели к одному правилу на контрол; консоль перебивает его своими двухклассовыми.
  • Правка не тронула единый размер диалога (--gm-dialog-width/height): пустота в настройках — цена решения от 27.07 «меню, ESC и настройки — одно окно», а не дефект вёрстки.

Владелец правды: Assets/_Project/UI/Theme/tokens.primitives.uss (гарнитуры), tokens.semantic.uss (роли голосов), components.uss (раздача ролей + секция пластины), Assets/_Project/Scripts/UI/Components/PlateButton.cs.