Fokus-Set statt Einzelfokus — du kannst jetzt mehrere Attribute gleichzeitig anhaken. Jede Stat-Zeile im Info-Panel hat eine Checkbox am Zeilenende: Klick vorne auf die Zeile setzt deinen Fokus auf genau dieses Attribut (alle anderen ab), Klick auf die Checkbox am Zeilenende toggled nur diese eine. Credits fliessen per Cheapest-Cascade in die angehakte Teilmenge. Alle angehakt = heutiger AllMode; genau einer angehakt = heutiger Einzelfokus. Das ALL-Badge auf der Tower-Card entfaellt. Der AllMode-Button bleibt als Schnellschalter fuer "alle an / wieder auf einen reduzieren".
Endscreen im Highscore-Tabellen-Stil — die Run-Auswertung nach Game-Over ist neu gebaut: farbiges #n-Pill statt Farbname, Waffen-Darstellung im Highscore-Stil, kein Ueberlappungs-Problem mehr bei vielen Towern oder langen Achievement-Reihen. OBS und Browser zeigen jetzt denselben Endscreen (kein isObsMode-Sonderweg mehr). Die Dashboard-Highscore ist visuell angeglichen.
Fix
DPS- und Income-Graph flackerte — nach dem Perf-Update (srv-103) sprangen die Graphen jeden Snapshot (Linienpunkte rutschten seitlich). Ursache: index-basierte Dezimierung unter rutschendem Ring. Behoben durch zeit-gebucketete Dezimierung — Stützpunkte bleiben jetzt stabil.
Viewer war ungestyled nach CSS-Restrukturierung — tokens.css wurde unter dem falschen Pfad geladen (404). Behoben — Viewer lädt die Tokens wieder korrekt via /static/.
Upgrade-Button nach Draw sofort aktiv — bislang musste man nach einem Draw die Seite neu laden, damit der Upgrade-Button erschien wenn ein Stapel auf drei Karten kam. Behoben durch Server-Fragment-Swap analog zum Upgrade-Pfad.
Unter der Haube
DPS- und Income-Graph stark entlastet (srv-103) — drawDpsGraph war mit 28 % der teuerste Frame-Zeit-Posten im Viewer (mehr als das gesamte Spielfeld-Rendering). Jetzt: Dezimierung auf max. 100 Renderpunkte statt 480 + GPU-transform-Scroll statt Per-Frame-setAttribute. Optisch unveraendert, CPU-Last deutlich reduziert.
Rim-Cards-Render entlastet (srv-104) — renderRimCards war mit 27 % der zweitteuerste Posten. Element-Refs werden jetzt gecacht und Text-Updates auf Snapshot-Aenderungen gegated statt jeden Frame neu gebaut.
Draws-Datenmodell aufgeteilt (web-163) — Game-Draws (Chat-Tower-Achievements) und Twitch-Draws (Sub/Follower/Channel-Points) liegen jetzt in getrennten Feldern. Die angezeigte ausgebbare Zahl bleibt die Summe beider Toepfe. Vorbereitung fuer Multi-Game-Erweiterung (Phase 0 — vorerst nur Chat Tower als Konsument).
Deploy-Drain verbessert (ops-028) — ein laufender Run wird beim Deploy jetzt am Run-Ende sauber abgebrochen (statt erst beim Idle-Timeout). Das Drain-Fenster verkuerzt sich dadurch erheblich.
Schema-Migration 030 — users.twitch_draws INT NOT NULL DEFAULT 0 (additiv, ADD COLUMN IF NOT EXISTS). Prod hat bisher Migration 029; diese Migration ist vollstaendig rueckwaertskompatibel. Rollback manuell via ALTER TABLE users DROP COLUMN twitch_draws (forward-only analog 029).