Das Overlay nutzt im Dark-Mode dunkle Surface-Toene mit Glow. Im Light-Mode
sind diese weiss -> das rechte Panel verschwand (weiss auf weiss). Per
[data-theme="light"]-Overrides bekommt es jetzt ein kraeftiges Orange-Panel
(accent-2 -> accent) mit weissem Text, Emblem und Ghost-Button. Dark-Mode
bleibt unveraendert.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Sidebar wird auf <=820px nicht mehr ausgeblendet (kein Nav-Verlust), sondern
zu einem Off-Canvas-Drawer mit Hamburger-Button + Backdrop (theme.js
injiziert ihn auf allen .mf-shell-Seiten; Styles in theme.css).
- Topbar stapelt/umbricht auf Mobil (dekorativer Puls + Suche ausgeblendet,
kleinere Begrüßung), HUD-Karten-Grid 3->2->1, breite mf-Tabellen horizontal
scrollbar. Schließen per Backdrop, Nav-Link oder Escape.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- application.properties: multipart max-file/request-size auf 10MB
(nginx client_max_body_size muss serverseitig passend gesetzt sein)
- ProfileController: hochgeladene Profilbilder werden serverseitig auf
max. 400px herunterskaliert und als JPEG normalisiert gespeichert
(statt der Originaldatei roh); nicht lesbare Bilder werden ignoriert
- SecurityConfig: CSRF aktiviert; Spiele-JSON-APIs (/api/games,
/api/techtacular, /api/mindmatch) ausgenommen; GET-Logout erlaubt,
da die Logout-Links in den Templates GET sind
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ProfileController.changePassword gab "profile" zurück, ohne das von
profile.html benötigte Model-Attribut `user` zu setzen -> Template-Rendering
schlug fehl (500/Whitelabel). Zudem lag das Formular auf der settings-Seite.
- changePassword nutzt jetzt PRG: Redirect auf /profile/settings mit
Flash-Attributen (message/error) statt direktem View-Return.
- settings.html zeigt die Flash-Meldungen (Erfolg/Fehler) an.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>