Решили: заведён гейт UssAssetLinkTests — каждый url("…") в любом .uss/.tss под _Project/UI обязан вести на существующий файл. Семнадцать битых ссылок починены, текстура зерна главного меню возвращена из истории со своим прежним guid.

Почему: тема переехала «файл на блок, файл на экран», и правила из UI/Theme/ оказались на уровень глубже, в Theme/screens/. Путь ../../Art/… при этом не изменился ни одним символом — и стал указывать в UI/Art/, которой не существует. Отвалились фон и все три логотипа бут-экрана, восемь иконок ленты забега, иконки фильтров, сепаратор и замок. Заметил это Макс, глядя на игру, через несколько дней после переезда.

Инвариант кросс-файловый по своей природе: ссылка живёт в USS, картинка — на диске, а связь между ними ломается ПЕРЕМЕЩЕНИЕМ, в диффе которого не меняется ничего. Ревью такого не ловит: в глаза бросается содержимое правил, а сломался их адрес.

Грабли, и они мои. PanelLinen.png использовали ДВА места: вариант .gm-panel--linen из отменённого регистра «лист» и зерно главного меню .gm-mainmenu__texture. Снося регистр 06.08, я посмотрела на первое и удалила файл — вместе с фоном меню, который к «листу» отношения не имел. Макс отменял регистр, а не фон.

Поймать это было нечем, и в этом суть: гейт мёртвого кода проверяет КЛАССЫ, а .gm-mainmenu__texture живой — у него есть потребитель в разметке. Живой класс, у которого пропала картинка, не видел никто. Отсюда и форма нового гейта: он проверяет не «нужен ли кому-то класс», а «существует ли то, на что правило показывает».

Сказано: «Т.е., а зачем мы убрали то? Нам ведь надо какой-то красивый переход от слабого затемнения к сильному? Я вроде не просил ничего убирать… негде. Изучишь этот момент?» (07.08.2026, сессия e32de921).

Переход, о котором вопрос, при этом цел: его держит EdgeVeil (.gm-mainmenu__veil) с шириной 85% и плато 0.14, выверенными 04–05.08. Ушла только фактура поверх него.

Владелец правды: UssAssetLinkTests, components/*.uss и screens/*.uss (сами ссылки).