Решили: симптом «у панелей нет ни фона, ни каймы, текст дефолтно-серый» диагностируется не глазами, а числом правил в ярусе: tokens.semantic обязан давать одно правило со ста с лишним свойствами. Ноль правил означает, что ярус ролей мёртв, и каждое правило с var(--gm-color-*) молча выброшено — то есть вся тема выглядит отключённой, хотя .tss на месте и ошибок в консоли нет.

Почему: отдельная запись рядом с «A Broken USS Comment Kills A Whole Token Tier Silently» нужна потому, что та описывает ПРИЧИНУ, а эта — СПОСОБ УЗНАТЬ. Между поломкой и её обнаружением прошло больше часа: правка комментария к --gm-color-veil закрыла чужой комментарий лишним */, после чего исчезли роли, а выглядело это как «тема не применяется в play» — и час ушёл на перезапуски play, переназначение themeStyleSheet и подозрение импортёра.

Грабли:

  • Ни один тест не краснеет. PaletteSnapshotTests читает tokens.*.uss как ТЕКСТ регулярками, поэтому сломанный комментарий для него невидим: строка --gm-color-veil: var(--gm-ink-950); в файле есть, значит снимок сходится. Импортёр же выбрасывает ярус целиком — и молча.
  • Консоль тоже молчит. Ошибок USS нет: с точки зрения парсера файл валиден, просто половина его оказалась внутри комментария.
  • Диагностика, которая сработала — рефлексия по теме: flattenedRecursiveImports у .tss даёт список из ~37 таблиц, и у каждой видно число правил. Мёртвый ярус там виден сразу. Тот же список отвечает на второй вопрос — доехал ли новый @import до темы.
  • Правка USS при живом редакторе не подхватывается play-сеансом. После починки файла нужен ImportAsset плюс ПОЛНЫЙ перезапуск play: переназначение themeStyleSheet на лету дерево не чинит, а doc.enabled = false/true его обнуляет.

Владелец правды: Assets/_Project/UI/Theme/tokens.semantic.uss, Assets/_Project/UI/Theme/GuildmasterRuntimeTheme.tss, тест PaletteSnapshotTests (и его предел).