Решили: PlateButton заливается градиентом, когда задан второй цвет; рисуется ВЕЕРОМ из центра
(центральная вершина плюс углы восьмиугольника). Одна раскладка вершин обслуживает оба типа:
линейному градиенту цвет вершины даёт проекция на ось, радиальному — расстояние до центра.
Заготовки (.gm-fill--down/up/left/right/radial) меняют только режим: цвета приходят ролями и у всех
заготовок одни и те же.
Почему: Painter2D градиента не умеет вовсе — один fillColor на фигуру; USS градиентных функций
не знает. Отвергнута альтернатива «пять наборов цветов под пять заготовок»: набор, размноженный по
вариантам, расходится за месяц, а спрошено было ровно обратное — «цвета градиента одни и те же,
различается лишь то, откуда он идёт и его тип».
Заодно пересмотрен бесплашечный вариант меню, проживший полдня. Числа рефов предупреждали: без плашки строку держит только кегль, поэтому он и уехал в потолок коридора. У плашечных рефов наоборот — строку держит плашка, а текст внутри мелкий (Guildrun 1.53% высоты экрана, AoW4 1.25% против наших 2.8%).
Сказано: «И я бы хотел все-таки под кнопками какие-то бэкграунды. Глянь в особенности стиль Guildrun. […] То что есть разные заготовленные градиенты - нам тоже такое надо. Т.е. цвета градиента одни и те же. различается лишь то, откуда он и идет и его тип (радиальынй и тп)» и «UI СЛИШКОМ гигантский» (04.08.2026, сессия ca460396).
Грабли:
- Ключи интерфейса живут в коллекции
UI, аContentLocalizationпишет вContent. Наш редакторный помощник существует для контента, и егоSetValueзавёл семь ключейui.mainmenu.*не в ту таблицу. Признак —GetValueвернул «нет ключа» там, где греп по диску ключ показывал. Откат:RemoveEntryпо всем таблицам плюсSharedData.RemoveKey, и только потом запись вUI. ui.mainmenu.settingsсуществует в ОБЕИХ коллекциях — и до моей правки тоже. Один ключ с двумя владельцами; какая таблица играет в рантайме, из этого не выводится. Разбор отложен, но факт зафиксирован.- Пустое EN-значение нельзя заполнять русским. Первый заход подставил в
enрусские подписи — логика «нет перевода, возьму что есть» тихо портит вторую локаль. Регистр чужого перевода поднимать можно, содержимое — нет. - Значения custom-свойств переживают смену псевдокласса: второй цвет сбрасывается ЯВНО, когда правило его не задаёт, иначе пластина тащит градиент из состояния, где он был, в состояние со сплошной заливкой.
Владелец правды: Assets/_Project/Scripts/UI/Components/PlateButton.cs (веер и режимы),
блок «ЗАГОТОВКИ ЗАЛИВКИ» в components.uss, роли --gm-color-surface-*-far в tokens.semantic.uss.