Настройки, которые ни на что не влияли
В кабинете библиотекаря можно было выбрать акцентный цвет, тёмную тему и загрузить логотип. Всё сохранялось. Но сайт не менялся. Разбираем, как функция может существовать и не работать одновременно.
Эта ошибка — из самых коварных. Нет сообщения об ошибке, нет красной строки. Библиотекарь выбирает цвет, нажимает «Сохранить», видит «Сохранено» — и ничего не происходит.
Что было не так
Настройки оформления честно сохранялись в базе. Проблема была в самих страницах: цвета были записаны прямо в разметке каждой кнопки и ссылки — тёмно-зелёный код, повторённый сотни раз. Страница не спрашивала у настроек, какой цвет использовать. Она его просто знала.
С тёмной темой было то же самое: набор цветов для тёмной темы в коде был, но совпадал со светлым один в один.
Как правильно
Все цвета интерфейса вынесены в переменные темы: акцент, светлый акцент, текст, второстепенный текст, линии, фон. Каждая кнопка, ссылка, чип и бейдж берёт цвет из переменной. Настройка библиотекаря меняет переменную — и меняется весь сайт сразу.

Защита от неудачного цвета
Библиотекарь может выбрать любой цвет — в том числе светло-жёлтый, на котором белый текст кнопки не прочитать. Поэтому при сохранении система проверяет контраст с белым. Если он ниже 4.5 к 1 — порога, который принят в стандартах доступности веб-страниц, — появляется предупреждение.
Логотип
Логотип принимается только в форматах PNG, JPG и WebP, до одного мегабайта. SVG не принимается сознательно: внутри такого файла может скрываться исполняемый код, а проверять его надёжно — отдельная большая задача.