Решили: правку темы считать доехавшей только после ЗАМЕРА резолва в живой панели, а не после успешного импорта: USS с битым комментарием импортируется без единой ошибки в консоли и молча роняет весь ярус переменных.

Почему: отладка шла по ложному следу «сломался парсер» — а парсер был цел (rules=1, properties=119, m_ImportedWithErrors=False), мёртв был только резолв var() у одного из трёх ярусов. Отличить одно от другого можно ровно одним способом — прочитать resolvedStyle конкретного элемента и сравнить с ожидаемым значением токена. Альтернатива «посмотреть, нет ли ошибок в консоли» отвергнута: она даёт зелёный свет на сломанной теме.

Грабли: две штуки, обе стоили времени.

  1. Комментарий, записанный как \* … */ вместо /* … */, — следствие того, что Read и Grep отображают начало USS-комментария со слешем-бэкслешем, и эта форма ушла в Edit как есть. Ошибок импорта нет; ломается ярус целиком, начиная с этой строки. Симптом на экране — дефолтные цвета и гарнитуры при живых размерах: размеры пришли из tokens.primitives.uss (прямые значения), а цвета и шрифты — из tokens.semantic.uss, который и умер.
  2. Починка файла НЕ доезжает до панели сама. Тема приходит в UIDocument не через styleSheets, а через PanelSettings.themeStyleSheetGuildmasterRuntimeTheme.tss@import url("theme.uss"). Эта цепочка кэшируется: не помогли ни AssetDatabase.Refresh, ни ImportAsset(ForceUpdate | ForceSynchronousImport) по всем пяти файлам, ни выход-вход в play. Помогло rootVisualElement.styleSheets.Add(theme.uss) в живой сессии — это и лечение на месте, и способ проверить, что в самом USS всё исправно.

Отсюда практическое правило для сессии подбора UI: сломав тему, не гадай по консоли — добавь theme.uss на корень документа и померь резолв. Ответ приходит за один вызов.

Владелец правды: Assets/_Project/UI/Theme/GuildmasterRuntimeTheme.tss (цепочка импорта), Assets/_Project/UI/Theme/theme.uss (порядок ярусов).