# Phase 3: Token purification — 265 hardcoded colors → vars **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** frontend ## Objective Заменить 265 хардкодных brand-цветов в lab-related files на `var(--token)` где это семантически корректно. Сохранить curated palettes (subject-specific colors) и canvas-fillStyle (CSS vars не resolve'ятся в canvas context). ## Tasks - [ ] Идентифицировать все хардкоды в: - `frontend/lab.html` (HTML body + remaining inline styles) - `frontend/css/lab.css` (после Phase 1) - `frontend/js/labs/lab-glue.js` (после Phase 2) - [ ] Заменить direct token matches: - `#9B5DE5` → `var(--violet)` - `#06D6E0` → `var(--cyan)` - `#06D664` → `var(--green)` (also `#06D6A0` если есть) - `#F15BB5` → `var(--pink)` - `#FFB347` → `var(--amber)` - `#0F172A` → `var(--text)` - `#3D4F6B` → `var(--text-2)` - `#56687A` → `var(--text-3)` - `#EEF2FF` → `var(--bg)` - [ ] KEEP (НЕ менять): - Tinted/alpha (`rgba(155,93,229,0.12)` etc.) — CSS не имеет color-mix() без deps - Canvas `ctx.fillStyle = "#..."` — CSS vars не работают в canvas - Curated subject palettes (bio violet / chem green / math cyan / phys amber) если они вложены массивом - Slightly-different shades (`#9B5DE6` ≠ `#9B5DE5`) — это намеренно другой цвет - [ ] Semantic aliases: использовать `var(--danger)` / `var(--success)` / `var(--warning)` / `var(--info)` в semantic context ## Files to Modify - `frontend/lab.html` — заменить hardcodes - `frontend/css/lab.css` (после Phase 1) — заменить hardcodes - `frontend/js/labs/lab-glue.js` (после Phase 2) — заменить hardcodes если есть ## Acceptance Criteria - Хардкодов brand-colors ≤ 30 (от 265, target 90%+ replacement) - Визуально lab выглядит идентично - Pre-commit hook passes - No regression в любой sim ## Notes - Lab.html сейчас содержит много inline `style="color: #XXX"` — multi-line replacement через ast-index search + manual replacement - Don't over-aggressive — если color используется один раз в curated palette decoration, лучше keep - Document log: "Заменено: N, оставлено: M (reasons listed)" ## Review Checklist - [ ] Counts reported: before / after - [ ] Spot-check 3 sims визуально (canvas рендеринг не поменялся) - [ ] No emoji в коде - [ ] Pre-commit hook passes ## Handoff to Next Phase