Redesign DM Dashboard (/dm/, /ru/dm/) with purple-gold theme (#534AB7 + #c8a84b): Design System: - Update dm-theme.css with 49 purple-gold tokens (transitions, shadows, hover states) - Create DmTabs.astro with ARIA, keyboard nav, URL hash sync, localStorage persistence - Create DmSidebar.astro for desktop navigation - Redesign DmHeader with gold accent - Update DmButton, DmCard, DmInput primitives - Expand i18n to 47 strings Layout: - Redesign DmLayout with 3-column dashboard grid (sidebar|main|context) - Update /dm/index.astro and /ru/dm/index.astro with named slots Feature Components: - DiceRoller: empty state, ARIA live, color-coded history, storage key fallback - InitiativeTracker: HP editing, active highlighting, storage key fallback - Open5eReference: skeletons, debounce, error retry, gold tabs - NotesPanel: cross-tab sync, copy-to-clipboard, auto-save - AuthPanel: VK/Yandex brand colors, pill buttons Tests: - Add 50 Playwright E2E tests (smoke, dice, initiative, reference, notes, data-migration) Fixes: - Document Open5e client.ts URL bugfix - Add backward-compatible storage key fallback for dice/initiative - Preserve legacy sessionStorage data on load
1.9 KiB
1.9 KiB
DM Dashboard Redesign — Scope Fidelity Decisions
F4 (Scope Fidelity Check) — 2026-05-15
Decision: Do NOT fix issues
- Task scope is "report only, do not modify files."
- All findings documented in
issues.mdfor downstream remediation.
Decision: T2 CSS hydration gap accepted as partial
- The DmTabs component uses
<a href="#tab">for graceful degradation and server-rendersaria-selected. - A true CSS
:targetapproach for visual active state would require significant restructuring (e.g., sibling selectors or hidden radios). - Current implementation is functionally adequate; missing item logged for future polish.
Decision: T8 sidebar active state accepted as partial
- DmSidebar is an optional enhancement per dependency matrix ("Blocks: None").
- Active highlighting would require JS to read URL hash and toggle classes; sidebar is static Astro component.
- Logged as gap, not blocker.
Decision: T14-T16 test gaps accepted as partial
- Core user flows are covered. Missing edge-case tests (persistence, pagination, filters) do not block release.
- Data migration spec.ts covers persistence scenario for T18, partially backfilling T14-T16 gaps.
Decision: T18 data migration flagged as high-priority fix
- Dice history incompatibility causes uncaught JS exception → empty history for users with old data.
- Initiative delete broken on old data → users cannot remove legacy combatants.
- Recommended fix: add defensive checks in
renderHistory()anddeleteCombatant()before accessingrolls/id. - These are 2-line fixes; should be done before release.
Decision: src/lib/open5e/client.ts change is justified
- Without the URL fix, API calls fail with double slashes.
- Change is purely mechanical (path string normalization); no API contract changes.
- Classified as minor contamination but functionally necessary.
Decision: debug-open5e.mjs flagged for cleanup
- Unaccounted debug script should be removed before commit.