Решили: главное меню перестало быть модалкой (.gm-screen + панель-диалог) и стало колонкой
текста у левой кромки кадра; контраст под ней держит новый контрол EdgeVeil — вершинный градиент
от кромки, а не заливка всего экрана и не PNG.
Почему: текст лежит прямо на живом бою, и яркость под ним меняется каждый кадр — «замерить фон
один раз» становится невозможно, если фон не подготовлен. Отвергнуто три пути. Глобальный scrim
гасит весь кадр, то есть убивает то, ради чего бой за меню и заводится. PNG-градиент требует импорта
ассета, то есть работы в редакторе Макса, и тянется пикселями при смене разрешения. Градиентная
функция в USS отсутствует как класс возможностей — по той же причине свечение загрузочного экрана
лежит файлом. Вершинный градиент даёт всё сразу: тянется на любой размер, красится из палитры через
--gm-veil-color, рисуется кодом. Приём в проекте уже принят — вершинами рисуют PanelFrame и
PlateButton.
Размеры взяты из разбора рефов (Art_Dev/UI Refs/_teardowns/01-main-menu.md) и пересчитаны из долей
720p в наши 1920x1080, потому что прежние в коридоры не попадали: колонка 620px = 32.3% ширины при
потолке рефов 20.5%, шаг пунктов 7.6% высоты при медиане 5.7% и том же кегле, титул к пункту 1.85:1
против худшего рефа 2.0:1.
Сказано: «У нас зря меню все посередине и имеет за собой панель. Это надо для настроек и прочего, но в меню лучше - просто небольшие кнопки-текст без заднего фона и сам фон (например наша битва, что мы временно отказались от неё). Твое мнение?» (04.08.2026, сессия ca460396).
Грабли:
- Ширину вуали задаёт титул, а не колонка пунктов. На
--gm-font-displayзаголовок забирает около 42% ширины экрана — вуаль в 42% кончалась бы ровно под текстом, и её кромка прочиталась бы краем невидимой панели. Поставлено 50%; плотность от этого не страдает, затухание квадратичное. - Затухание обязано быть нелинейным. У линейного глаз ловит излом производной там, где градиент упирается в ноль, — появляется призрачная вертикальная кромка на пустом месте.
- Пластину
PlateButtonмало погасить в базовом состоянии. Свои--gm-plate-*есть у:hover,:active,:focusи:disabled, и незакрытое состояние проявляет прямоугольник ровно там, куда наведут. Модификатор primary заведён СВОЙ (--primaryу меню), а не общий.gm-button--primary: тот вешает заливку двумя классами, и гасить её пришлось бы войной специфичности ради кнопки, у которой заливки нет по замыслу. - Гейт наложений абсолютные элементы не сравнивает, но внутрь заходит — вуаль и штамп версии из сравнений выпадают законно, а вот колонку он проверяет целиком.
Владелец правды: Assets/_Project/Scripts/UI/Components/EdgeVeil.cs,
блок «ГЛАВНОЕ МЕНЮ» в Assets/_Project/UI/Theme/components.uss,
роль --gm-color-menu-shade в tokens.semantic.uss, тест ScreenLayoutOverlapTests.