====== Дизайн домена ======
В панели: **«Домен» → «Дизайн»**. Один экран, которым красится **весь домен** — и обычные страницы, и страница задания в игре.
Раньше оформление собирали, перебивая правила движка по одному: писали в css домена длинный список селекторов и на каждый ставили свой цвет. Теперь у этого есть два слоя попроще — **тема** и **токены**, — и свой css пишут уже поверх них, а не вместо них.
===== Тема =====
Тема — это готовый набор значений, поверх которых ложится ваш css. Выбирается на вкладке **«Настройки домена»**, строка **«Тема оформления»**.
* **Без темы** — то, как домен выглядел всегда.
* **Зелёная**
* **Dark Purple**
* **Dark Radix**
* **Light Radix**
**Тема красит домен целиком, а не только игру.** Один и тот же набор описывает и сайт, и игру, и светлый режим, и тёмный, — так что домен не может оказаться с песочным днём и киберпанковой ночью.
Тема — это **поправка, а не полный набор**: чего она не назвала, остаётся от движка. Поэтому «Без темы» — это не «сломано», а «всё по умолчанию».
===== Как устроена студия =====
{{ :admin_main:domain_design_studio.png?800 |Студия дизайна: экраны и слоты сверху, редактор слева, витрина справа}}
**Верхний ряд — экраны:**
* **«Меню»** — строка ссылок под шапкой, на каждой странице сайта.
* **«Сайт»** — обычные страницы: главная, список игр, профиль.
* **«Игра»** — страница задания. Своя тема на светлую и на тёмную.
* **«Настройки домена»** — title, стартовая страница и выбор темы.
**Второй ряд — слоты**, то есть сами поля, куда вы пишете:
^ Экран ^ Слоты ^
| Меню | Меню (HTML) |
| Сайт | Шапка (HTML), Подвал (HTML), CSS |
| Игра | Шапка в игре (HTML), CSS: светлая тема, CSS: тёмная тема |
Под вкладками — строчка о том, на что ложится открытый слот, и рядом с каждым **css**-слотом ссылка «Токены темы».
**Слева — редактор, справа — витрина.** Витрина — **не живая страница домена**, а образец, собранный студией: у «Сайта» это меню, базовая страница, список игр, статистика, карта кодов и лог ответов (у витрины есть своё оглавление), у «Игры» — контейнер задания, инвентарь, спойлер и алерт. Так сделано нарочно: черновик больше не попадает на настоящие страницы, где его мог бы увидеть кто угодно.
У витрины свои переключатели: **«Светлая» / «Тёмная»** (только на экране «Игра»), во всю ширину или **как на телефоне**, и **«Перерисовать»**.
> **css применяется на каждом нажатии клавиши**, без перезагрузки витрины. HTML так не умеет — его собирает сервер, и витрина перерисовывается через паузу после того, как вы перестали печатать.
===== Токены =====
Токен — это имя цвета (или размера), которым движок пользуется во всех своих правилах: ''--qeng-body-bg'', ''--qeng-surface-bg'', ''--qeng-accent'' и ещё несколько сотен. Задали имя — и цвет разошёлся по всем правилам сам, перебивать селекторы не нужно:
:root {
--qeng-body-bg: #050505;
}
Список открывается ссылкой **«Токены темы»** рядом с любым css-слотом.
{{ :admin_main:domain_design_tokens.png?800 |«Токены темы»: справочник имён, которые движок красит сам}}
* Имена сгруппированы, и первой стоит **палитра** — те несколько десятков, которыми описан весь сайт. Обычно хватает её: роли экранов берут цвет из палитры и меняются следом. Раскрывайте остальные группы, только если нужно отвести в сторону что-то одно.
* Квадратик рядом с именем показывает цвет **после** вашего css, а не значение по умолчанию, — так видно, что вы уже переопределили.
* Группы, к открытому слоту не относящиеся, спрятаны.
* Часть токенов помечена как движковая: их не перебить ничем, и на слотах они не предлагаются вовсе.
Это **справочник, а не поле ввода**: правите вы по-прежнему css, токены здесь только перечислены.
===== Инспектор и контраст =====
Над витриной стоит полоса проверки контрастности: **«Контрастность: OK (N элементов)»** или «N проблем контрастности», стрелки «◀ ▶» по проблемам и **«Показать все»**. Пороги в ней намеренно мягче требований WCAG — это поиск явно нечитаемого, а не аудит доступности.
Кнопка **«🔍 Инспектор»** включает выбор элемента: щёлкаете по чему угодно в витрине и видите, **из какого слоя** пришло правило:
* 📄 на странице (inline и ''