Перейти к основному содержимому

Файл theme.json

Единственный обязательный файл темы. Обязательное поле в нём одно — version; всё остальное можно опустить, и оно возьмётся из дефолта.

packs/<практика>/theme/theme.json
{
"version": 1,
"name": "Академия данных",
"scheme": "auto",
"brand": {
"title": "Академия данных",
"subtitle": "модуль 3 · запросы к базе",
"logo": "assets/logo.svg",
"logoText": "АД",
"favicon": "assets/favicon.png",
"footer": "по вопросам — куратор группы"
},
"fonts": [
{ "family": "Nunito", "src": "assets/nunito.woff2", "weight": "400 800", "style": "normal" }
],
"tokens": {
"dark": { "accent": "#c2660f", "bg": "#1a1512" },
"light": { "accent": "#a8560c", "bg": "#fbf7f1", "radius-card": "14px" }
},
"css": "theme.css"
}

Поля

ПолеТипЧто делает
versionчисловерсия контракта темы; сейчас 1
nameстрокаимя темы для людей, в интерфейсе не показывается
schemeauto | light | darkauto — выбор у студента; иначе схема зафиксирована, переключатель скрыт
brandобъектстроки и картинки курса, см. ниже
fontsмассившрифты из theme/assets, подключаются как @font-face
tokensобъектпереопределения по схемам: dark и light
cssстрокаимя файла со своим CSS, обычно theme.css

brand

КлючГде видно
titleкрупная строка над списком заданий и в заголовке вкладки браузера
subtitleстрока под названием; если не задана, показывается число заданий
logoкартинка слева от названия; путь внутри theme/
logoText2–3 буквы в квадрате, если картинки нет
faviconзначок вкладки
footerстрока внизу боковой полосы: к кому идти с вопросами

fonts

"fonts": [
{ "family": "Nunito", "src": "assets/nunito.woff2", "weight": "400 800", "style": "normal" }
]

src — только путь внутри theme/assets; абсолютные адреса отбрасываются, а CSP всё равно не выпустит запрос наружу. Чтобы шрифт применился, назначьте его токеном:

"tokens": { "dark": { "font-body": "\"Nunito\", system-ui, sans-serif" } }

Допустимые расширения ассетов: woff2, woff, ttf, otf, svg, png, webp, jpg, jpeg, ico.

tokens

Ключи — имена токенов без префикса --. Неизвестное имя игнорируется с записью в лог сервера, поэтому опечатка не ломает тему, но и не работает. Значение не может закрыть CSS-правило: символы { } ; < >, @import и внешние url() отклоняются.

Задавайте оба набора, если scheme: "auto" — иначе одна из схем останется дефолтной, и переключатель будет выглядеть как поломка.

Полный список токенов

Проверка темы

Раннер пишет проблемы темы в свой лог при старте:

docker compose logs runner | grep -i theme

Пустой вывод означает, что тема принята целиком.