Добавлено такое же действие, как [Z] в control-panel: POST /api/admin/reset-system
(+ /reset-system/plan для предпросмотра), только admin. Общая логика вынесена в
src/services/systemReset.js (classify/pickKeptAdmin/runReset) — реюзится CLI и эндпоинтом.
Веб-эндпоинт безопаснее CLI: сохраняет ТЕКУЩЕГО админа (оператор остаётся залогинен),
делает бэкап БД ДО сброса (wal_checkpoint + копия в data/backups/), требует body.confirm='СБРОС'.
UI — «Опасная зона» в overview-секции: предпросмотр плана + ввод «СБРОС» + результат с именем бэкапа.
db.js: добавлен db._path (нужен бэкапу при сбросе). Логика проверена смоуком на копии живой БД
(16 юзеров удалено, контент сохранён, REASSIGN на админа, гейм-счётчики обнулены, 0 висячих FK).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Обзор теперь показывает и итоги за всё время (Пользователей, Тестов пройдено, Средний
результат) и средний результат по предметам за всё время — данные грузятся из
adminGetStats параллельно с обзором. Дублей нет: Обзор был про 24ч и контент.
Убрано полностью: nav-кнопка «Статистика», панель #tab-stats, маршрут stats в
ROUTE_TO_SECTION, подключение и файл sections/stats.js. #stats-хэш падает на #overview.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Avatar circles in top/worst-5 tables: initials from name, hsl color from hash of name
- Structural skeleton on first load: 4 shimmer card boxes + 5 row placeholders (replaces
LS.state.loading spinner for better layout-anchored feedback)
- @media ≤640px: 2-column main grid, hero card reverts to normal size, quick-grid 2-col
- Palette: existing per-card colors (violet/cyan/green/amber) already form a good muted
hue family with vivid pink/amber for alert cards — kept as is to avoid regression
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>