# Phase 6: Deep entity pages **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** frontend ## Objective Заменить выезжающую `.user-panel` overlay на полноценную страницу с URL `#users/123`. Аналогично для session: `#sessions/456` = full detail page. Это самая комплексная фаза — она ломает совместимость с старым overlay UI (удаляет код), потому идёт ПОСЛЕ всех остальных. ## Tasks - [ ] **User detail page** (`frontend/js/admin/sections/user-detail.js`): - Реагирует на route `#users/:id` - Layout: - **Header**: avatar, name, role badge, email, action buttons (ban/edit/perms/delete), back-link to `#users` - **Tabs** (sub-nav в странице): - Overview — статистика (тестов, средний %, регистрация, посл вход) - Sessions — таблица последних 20 сессий с pagination - Classes — список классов где он состоит - Audit — журнал действий (если есть audit log с user_id) - **Graphs** (опционально, можно отдельным таб'ом): - Простой SVG-чарт: успеваемость по неделям - Mini-bar chart: avg % по предметам - [ ] **Session detail page** (`frontend/js/admin/sections/session-detail.js`): - Реагирует на route `#sessions/:id` - Layout: header (user, subject, score, дата) + список вопросов/ответов (правильно/нет, текст), back-link - [ ] **Router updates** (`frontend/js/admin/router.js` если ещё не поддерживает): - `#users/123` → emit { route: 'users', params: ['123'] } - `#sessions/456` → emit { route: 'sessions', params: ['456'] } - [ ] **Admin.js dispatch**: - При route с params → init detail-section вместо list-section - При route без params → init list-section (как раньше) - [ ] **Удалить overlay-код:** - В `frontend/admin.html` удалить `