mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 21:46:35 +00:00
3.8 KiB
3.8 KiB
План: светлая и тёмная тема
СТАТУС: ВЫПОЛНЕН 25.08.2026.
1. Что получается
Переключатель light/dark в шапке рядом с языковым. Выбор в localStorage
(theme), первый визит — по prefers-color-scheme. Тёмная палитра —
переопределение токенов селектором [data-theme='dark']; компоненты не
правятся.
2. Решения
- Два состояния, без «авто»: ключ хранит только явный выбор, отсутствие ключа = системная тема.
- Анти-вспышка: инлайн-скрипт в
app.htmlдо гидрации ставитdata-themeиз localStorage илиmatchMedia; пререндеренная разметка остаётся светлой. color-scheme: darkна корне — нативные контролы (input[type=color], range, select, скроллбары) темнеют без правок.- Модуль
theme.svelte.tsпо образцу locale: состояние, персист, применение атрибута. Стартовую установку делает скрипт изapp.html, модуль синхронизирует runes-состояние после гидрации.
3. Палитра
- Переопределяем:
--bg,--surface,--border,--text,--text-muted. - Акцент
#2563ebне меняется;--accent-hover— светлее для тёмного фона. --dangerосветлить для читаемости.--check-a/--check-bшахматки — приглушённые серые: паттерн прозрачности остаётся узнаваемым, но не слепит.--shadow-card— почти чёрная с низкой альфой вместо синей.- Все
color-mix(… var(--surface))пересчитаются сами — проверить визуально легенды, recalc-бейдж, drag-оверлеи.
4. Этапы и проверки
Каждый этап заканчивается зелёными test/check/build и ревью.
- A. Инфраструктура —
theme.svelte.ts, скрипт вapp.html, переключатель в шапке, черновая тёмная палитра. Тесты: персист выбора, игнор мусора в localStorage, применение атрибута (стаб document). - B. Палитра — выверка значений: герой, каталог, страница инструмента, цепочка, баннер ошибки, маска, текстовые инструменты; фокус-ринги и hover; обе локали.
5. Смоук
- Переключение мгновенное, без перезагрузки; выбор переживает её же.
- При системной тёмной теме первый визит открывается сразу тёмным.
- Нативные контролы выглядят тёмными.
- Шахматка различима, легенды и бейджи читаемы.
- Баннер ошибки и пипетка заметны на тёмных панелях.
6. Критерий готовности
Grep: ни одного цвета вне токенов в компонентах и маршрутах.
7. Не делаем
Три позиции в переключателе; пользовательские цветовые схемы; автосмену по времени суток; отдельную тему для превью изображений.