style(dm): redesign dashboard with purple-gold theme

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
This commit is contained in:
emil
2026-05-15 17:49:32 +03:00
parent 11da171bfb
commit 1c38df7e74
113 changed files with 5651 additions and 596 deletions
+45 -7
View File
@@ -1,11 +1,49 @@
.dm-theme {
--accent: #E87722;
--accent-light: #FF9F43;
--accent-dark: #D35400;
--bg-primary: #0f0f0f;
--bg-secondary: #1a1a1a;
--bg-card: #242424;
/* Primary Accents */
--accent: #534AB7;
--accent-light: #6b5fc7;
--accent-dark: #3f3791;
--accent-hover: #6b5fc7;
/* Secondary (Gold) */
--gold: #c8a84b;
--gold-light: #d4b76a;
--gold-dark: #a88a3a;
--gold-hover: #d4b76a;
/* Backgrounds — warm dark tones */
--bg-primary: #16120e;
--bg-secondary: #1e1912;
--bg-card: #221e18;
--bg-input: #1a1610;
/* Text */
--text-primary: #f4f4f5;
--text-secondary: #a1a1aa;
--border-color: #3f3f46;
--text-muted: #71717a;
--text-cream: #e8dcc8;
/* Borders */
--border-color: #3a3428;
--border-gold: rgba(200, 168, 75, 0.15);
--border-gold-strong: rgba(180, 150, 80, 0.1);
/* Semantic Colors */
--success: #6ab04c;
--danger: #e06060;
--warning: #f0a030;
/* Transitions */
--transition-fast: 150ms;
--transition-base: 250ms;
--transition-slow: 350ms;
/* Shadows */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
--shadow-glow: 0 0 20px rgba(83, 74, 183, 0.3);
/* Focus Ring */
--focus-ring: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--accent);
}