Dashboard: 2-column layout (hero left 60%, stats+nudges right 40%)
Spielplan: 2-column grid for match cards on desktop
Profile: wider max-width (900px), 6-column achievement grid
Header: Admin link back in desktop nav, max-width 1200px
All via CSS media queries (min-width: 768px), no HTML restructuring.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cycles: Sun (→ Light) → Monitor (→ System) → Moon (→ Dark)
System mode follows OS prefers-color-scheme and updates live.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extracted trophy graphic from unofficial logo SVG, removed
"FIFA WORLD CUP", "2026", and country names text.
Works in both dark and light mode (colored on transparent).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Unofficial logo works in both dark and light mode (colored on transparent).
Official and white variants also included as alternatives.
Removed broken SVG files (Cloudflare blocked downloads).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
White SVG logo for dark mode, colored SVG for light mode.
Logo switches automatically based on theme.
Sourced from football-logos.cc (SVG, ~4.5KB each).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
MatchCard:
- Badges (group, countdown, LIVE, BEENDET) now vertically centered
to flag height, positioned left/right of the teams
- Removed separate topRow — all in one matchBlock flex layout
Dashboard:
- max-width increased to 800px (matches spielplan width)
Header:
- Theme toggle + admin link moved to headerActions (always visible)
- Theme toggle icon in gold color (was too dark in dark mode)
- Admin link brighter (text-secondary instead of text-muted)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Toast notification on rank change (up/down).
Streak display with milestones: 🔥 at 3, 🔥🔥 at 10, ⚡ at 20.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixed bottom nav with Home/Spiele/Rangliste/Profil tabs.
Desktop keeps header nav. Admin hidden behind gear icon.
Main content padded to avoid overlap with bottom nav.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Helmet CSP: upgrade-insecure-requests und HSTS für HTTP-Deployments deaktiviert
(war die Ursache der leeren Seite - Browser versuchte JS über HTTPS zu laden)
- Backend: statische Dateien werden jetzt in allen NODE_ENV-Modi serviert
- Frontend: IS_DEV erkennt auch VITE_TEST_MODE=true (Build-Zeit Variable)
- Dockerfile: VITE_TEST_MODE=true beim Vite-Build, NODE_ENV=development
- docker-compose.yml: NODE_ENV=development, CORS_ORIGIN=*
- Gitea Workflow: Auth-Token für git clone, Build via Portainer API statt lokaler Docker CLI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>