Client (static/analytics.js): smTrack('cat:name') sammelt Events und schickt
sie gebuendelt per navigator.sendBeacon('/track') -> feuern-und-vergessen,
blockiert nie den Render-/Interaktionspfad. Nichts Personenbezogenes (kein
Name/IP/UA). Hooks: Tab-Wechsel, Optimize (market/nomarket), Leaderboard-Suche,
Account-/Room-/Clan-/Forge-Lookup, welche Forge-Stat-Details geoeffnet werden.
Server (app.py): /track zaehlt In-Memory pro UTC-Tag + flusht gedrosselt
(<=1x/60s) als winziges JSON nach /data/usage_stats.json; Kategorie-Allowlist
+ Zeichensatz/Laenge + Tages-Kardinalitaetsdeckel + 4KB-Body-Cap als
Flood-Schutz. /usage-admin (MOD-only, wie power-series-admin): stats/raw/csv/
clear. Heisse Pfade (Leaderboard/Stream/Lookups) unberuehrt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>