Содержание

Дизайн домену

У панелі: «Домен» → «Дизайн». Один екран, яким фарбується весь домен — і звичайні сторінки, і сторінка завдання в грі.

Раніше оформлення збирали, перебиваючи правила движка по одному: писали в css домену довгий список селекторів і на кожен ставили свій колір. Тепер у цього є два простіші шари — тема і токени, — і свій css пишуть уже поверх них, а не замість них.

Тема

Тема — це готовий набір значень, поверх яких лягає ваш css. Обирається на вкладці «Налаштування домену», рядок «Тема оформлення».

Тема фарбує домен цілком, а не лише гру. Один і той самий набір описує і сайт, і гру, і світлий режим, і темний, — тож домен не може опинитися з піщаним днем і кіберпанковою ніччю.

Тема — це поправка, а не повний набір: чого вона не назвала, лишається від движка. Тому «Без теми» — це не «зламано», а «все за замовчуванням».

Як влаштована студія

Студія дизайну: екрани і слоти згори, редактор ліворуч, вітрина праворуч

Верхній ряд — екрани:

Другий ряд — слоти, тобто самі поля, куди ви пишете:

Екран Слоти
Меню Меню (HTML)
Сайт Шапка (HTML), Підвал (HTML), CSS
Гра Шапка в грі (HTML), CSS: світла тема, CSS: темна тема

Під вкладками — рядок про те, на що лягає відкритий слот, і поряд із кожним css-слотом посилання «Токени теми».

Ліворуч — редактор, праворуч — вітрина. Вітрина — не жива сторінка домену, а зразок, зібраний студією: у «Сайту» це меню, базова сторінка, список ігор, статистика, карта кодів і лог відповідей (у вітрини є свій зміст), у «Гри» — контейнер завдання, інвентар, спойлер і алерт. Так зроблено навмисно: чернетка більше не потрапляє на справжні сторінки, де її міг би побачити будь-хто.

У вітрини свої перемикачі: «Світла» / «Темна» (лише на екрані «Гра»), на всю ширину або як на телефоні, і «Перемалювати».

css застосовується на кожному натисканні клавіші, без перезавантаження вітрини. HTML так не вміє — його збирає сервер, і вітрина перемальовується через паузу після того, як ви перестали друкувати.

Токени

Токен — це ім'я кольору (чи розміру), яким движок користується в усіх своїх правилах: –qeng-body-bg, –qeng-surface-bg, –qeng-accent і ще кілька сотень. Задали ім'я — і колір розійшовся по всіх правилах сам, перебивати селектори не потрібно:

:root {
  --qeng-body-bg: #050505;
}

Список відкривається посиланням «Токени теми» поряд із будь-яким css-слотом.

«Токени теми»: довідник імен, які движок фарбує сам

Це довідник, а не поле введення: правите ви й далі css, токени тут лише перелічені.

Інспектор і контраст

Над вітриною стоїть смуга перевірки контрастності: «Контрастність: OK (N елементів)» або «N проблем контрастності», стрілки «◀ ▶» по проблемах і «Показати всі». Пороги в ній навмисно м'якші за вимоги WCAG — це пошук явно нечитабельного, а не аудит доступності.

Кнопка «🔍 Інспектор» вмикає вибір елемента: клацаєте по чому завгодно у вітрині і бачите, з якого шару прийшло правило:

Кнопка «➕ У редактор» вставляє селектор у відкритий слот. На html-слоті вона не працює — вставляти правило нікуди.

Обидва інструменти працюють лише на css-слоті. Коли відкритий html-слот, у вітрині крутиться ваш html, і вона віддається в пісочниці; інспектор при цьому закривається сам, а смуга контрастності мовчить. Це не поломка, а межа безпеки.

Чернетка, збереження, історія

Зламали верстку так, що сторінка не відкривається? Додайте до адреси ?safe — домен покажеться зовсім без свого оформлення і без теми, і студія відкриється.

Чого тема не фарбує

Адмінські сторінки і редактори на своїх сторінках оформлення домену не беруть — ні теми, ні вашого css, ні вашої шапки. Вони виглядають однаково на будь-якому домені; екрана для них у студії немає зовсім.

Дві тонкощі, об які найпростіше спіткнутися:

День і ніч у грі

Світлий і темний режим у грі обирає гравець — перемикачем «Темний режим» у меню гри. Це не тема домену і з нею не пов'язано: тема описує обидва режими одразу.

Технічно режим — це атрибут на кореневому елементі сторінки:

:root[data-theme="dark"]  { /* ніч */ }
:root[data-theme="light"] { /* день */ }
Атрибут ставить лише сторінка гри. На сторінках сайту його немає зовсім, тож html:not([data-theme]) — це сторінка сайту, а не день. Правило дня пишеться [data-theme=“light”].

У css домену для гри цього зазвичай писати не треба: у домену світла і темна теми лежать двома різними слотами, і движок підключає потрібний файл сам.

Якщо тему треба нав'язати на одному рівні — це робиться скриптом завдання: Елементи сторінки завдання.

Дивіться також