- **Schwarzes Blob hinter Stratagem-Icon**: `::before` Pseudoelement ohne `position: relative` am Parent positionierte sich falsch und wurde als schwarzer Kreis gerendert — entfernt
- **Tabellen-Spaltenumbrüche**: `stratagem-icon-sm` wieder auf 22px (von 26px) damit Stratagemnamen in der History-Tabelle nicht umbrechen
- **Stratagem main icon**: Größer (86→110px, mobil 70→88px), hellerer Gold-Filter mit `drop-shadow` Glow, leuchtender Kreis-Hintergrund für besseren Kontrast
- **Queue preview**: Icons größer (36→44px), Labels wrappen jetzt über 2 Zeilen statt abzuschneiden, Breite von 60→72px pro Item, Abstufung der Opazität (75%/55%/40% statt 70%/45%)
- **Speedrun scores never saved**: Individual scores were blocked by `if (mode !== 'speedrun')` guard; now saved per-stratagem like other modes. Final bulk-save with invalid `__speedrun__` stratagem name removed (was causing 400 errors).
- **Dashboard recent-sessions icons missing**: `r.icon` was always `undefined` since the server doesn't store icon paths in the DB. Now looks up icon from `state.stratagems` by name.
- **Variable shadowing in `renderDashboard`**: Outer `const r = eloRankFor(...)` was shadowed by `recent.map(r => ...)`. Renamed outer to `myRank`.
- **N+1 DB queries in `broadcastLobbyUpdate`**: Was running one `SELECT elo` per online user. Now batches into a single `WHERE username IN (...)` query.
- **N+1 DB queries in dashboard endpoint**: Same pattern fixed for the `/api/dashboard` online-users list.
- **Unnecessary `typeof` guards**: `typeof u === 'object'` checks in lobby/dashboard removed — `lobby-update` always sends objects, never plain strings.
- **Duplicate `else if (mode === 'endless')` branch in `nextStratagem`**: Was identical to the `else` branch below it; merged.
- **Stratagem icons**: 65 SVG icons downloaded from community icon set, served as static files under `/icons/`; icon download script at `scripts/download-icons.js`
- **Gold CSS filter** on all stratagem icons to match the game's yellow accent theme
- **Session summary modal**: opens after stopping practice or finishing a drill/speedrun — shows score, completed count, accuracy, best time, and top 5 stratagems
- **Queue preview strip**: shows next 3 upcoming stratagems (with icons) below the active stratagem
- **Score popup animation**: floating `+N pts` text appears on every correct completion
- **Shake animation on wrong input**: stratagem icon shakes on incorrect arrow key
- **Icon complete pulse**: stratagem icon scales + brightens when sequence is completed correctly
- **ELO rank icon** in post-match result header (matches rank tier badge)
- **Inline icons** in history table rows, best-per-stratagem table, and leaderboard
-`scripts/download-icons.js` — automated icon fetcher from GitHub community SVG repo
### Changed
-`index.html` fully rewritten: new elements for icon display, queue, score popup, session summary modal