Badge row uses same flex proportions as match row (flex:1 | spacer | flex:1)
so left badge centers over left flag, right badge over right flag.
Full team names restored (no more truncation from 5-column layout).
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>
- Dashboard: LED digits 20px (was 26px) — less crowded between flags
- MatchCard: topRow margins for better badge alignment
- TipModal: flags now object-fit:cover (fullbleed)
- TipModal: picker buttons less glossy — reduced shine from 55% to 12%,
smaller shadow, subtler hover effect
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dashboard:
- Flags aligned to top (flex-start) — consistent height regardless of name length
- LED time centered to flag height (64px)
Match Cards:
- Flags fullbleed (object-fit: cover), larger (56px), glassmorphism shine
- LED kickoff time replaces dash separator between flags
- Score appears at same position when Live/Finished
- Removed separate kickoffRow — cards are more compact
- scoreBox height matches flag height for vertical centering
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Removed visible blue border on hero card (now near-invisible white/6%)
- LED kickoff time moved between the two flags (replacing VS text)
- Layout: flag — LED time — flag centered vertically
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero card now uses glassmorphism (rgba + backdrop-blur) from Stitch design.
Each flag has individual blur-glow aura behind it.
Rounded corners increased to 2rem. Shadow depth increased.
Stats tiles and nudges also refined with rounder corners.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero Card:
- Dramatic gradient background (navy → deep blue)
- Radial glow effect behind team flags (stadium atmosphere)
- LED kickoff time with golden glow
- Larger flag icons (72px) as app-icon style boxes
- Countdown as golden badge with pulsing dot
- Bigger CTA button with gradient and shadow
Bottom Nav:
- Filled/solid SVG icons (home, soccer ball, trophy, person)
instead of Lucide outline icons — more premium feel
Nudges:
- Icon + text layout with hover animation
- Better spacing and visual hierarchy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- BEENDET as subtle badge on the right (same position as LIVE/countdown)
- Score: 26px default, 32px for live matches
- Score vertically centered to flag height (52px), not flag+name
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- LIVE: pulsing red badge with dot, right-aligned in header (replaces countdown position)
- Live score: 28px instead of 22px for better visibility
- Removed duplicate tip display under live score (tip only shown in footer)
- BEENDET status stays left in header
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Countdown badge in header: Gruppe A ... in 60 Tagen (right side)
- Urgent countdown also in header: Gruppe A ... Noch 9 Min!
- Removed separate countdownRow (was misplaced below kickoff)
- Reduced DSEG7 letter-spacing to fix "2 1:00" gap issue
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Countdown badge now in its own row, left-aligned to match
the left edge of the flags. Removed from header top row.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added DSEG7 font (stadium scoreboard segment display)
- Kickoff time centered in card, no box, just glowing LED digits
- Gold color with double text-shadow glow for authentic look
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kickoff time styled as LED scoreboard: monospace font, dark background,
gold text with glow effect. Placed in card header next to group badge.
Cards are more compact without the separate kickoff row.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Kickoff: centered "21:00" above flags (no 'Uhr' suffix)
- Countdown: always rendered as badge (was unstyled span for <60min)
- DevPanel: added close button (✕) in panel header for reliable closing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Kickoff time now in header row: "Gruppe A · 04:00 Uhr · in 61 Tagen"
instead of centered between flags (avoids visual misalignment)
- Date timeline headers: more top padding for balanced spacing
between cards
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Stats: glass card with 2/104 progress + Punkte/Exakt/Offen details
- Date sections: timeline divider with centered label + lines
instead of accordion (no more broken border-radius)
- Past matches: simple toggle button, separate from timeline
- Match list: clean vertical flow without section containers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace 3 large stat tiles with compact "2 von 104 getippt" line
- Remove phase dropdown (not useful for daily tipping)
- Group matches by actual date (Mi, 11. Juni / Do, 12. Juni)
instead of generic "Demnächst"
- First 3 date sections open by default
- Reduce TipModal flag glossy to match MatchCard flags
- Past matches in own collapsed section
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Team names centered below flags (vertical layout)
- Reduced flag box glossy effect (20% shine vs 55%)
- Removed "Terminiert" status from header (only show Live/Beendet)
- Dash separator instead of colon for upcoming matches
- Flex layout instead of grid for better centering
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move kickoff time above teams row instead of between flags
- Center separator: slim ":" instead of 100px time block
- Use shortName for teams (prevents overflow on mobile)
- Tipped state: clean green bar with icon, label, score, edit hint
instead of scattered checkmark + underline link
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Trefferquote: accuracy already displayed correctly as raw value (no fix needed, was already `{stats.accuracy}%`)
- BottomNav: replace ⚽ emoji with Lucide Swords icon for Spiele tab (emoji rendered as gear on some systems); remove unused .emojiIcon CSS class
- Light mode: stronger card shadows (0 4px 20px + 0 1px 4px) and brighter card shine (0.85)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dashboard "Jetzt tippen" opens TipModal directly instead of
navigating to /spiele (no more dead-end spielplan)
- After tipping, dashboard updates to show "Dein Tipp: X:Y ✓"
- Spielplan auto-opens all sections when only 1-2 exist
(no more collapsed "Demnächst" as only section)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previous pipeline built images locally via Portainer Docker API,
but Docker layer caching produced identical images. Now:
- Build with nocache=1
- Push to Gitea registry (git.home.rm-warpstation.de)
- Compose uses image: from registry instead of build:
- Redeploy with pullImage: true forces fresh container
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- StatsRing: compute all without || 1 fallback, guard segments/legend behind hasData, use seg.count in legend to avoid NaN
- useRankChange: skip toast if already shown this session via sessionStorage
- Toast: use ref for onDismiss to prevent timer reset on every render
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Apply global .card class to Dashboard, Profile, ConfettiReveal, and
Toast components for consistent glossy card appearance.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Donut chart showing exact/tendency/wrong distribution.
Scrollable tip history with point badges.
Fun stats: favorite tip, home win percentage.
Co-Authored-By: Claude Sonnet 4.6 <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>
Shows animated reveal overlay for unseen match results.
Exact match (3pts) triggers confetti explosion.
Each reveal shown only once (localStorage tracking).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Success overlay with animated checkmark and 'Dein Tipp ist drin! 🎯'
message. Haptic vibration on mobile. Auto-closes after 1.2s.
- Add showSuccess state to TipModal
- Trigger vibration feedback on successful submit
- Display success overlay with popIn animation for checkmark
- Auto-close modal after success animation completes
- Add CSS animations (fadeIn, popIn) to TipModal.module.css
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each card state has distinct visual treatment:
- Open: standard with countdown timer when <1h
- Tipped: green accent with tip display
- Live: pulsing red dot
- Finished: points badge (gold/green/gray)
- Missed: grayed out
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Returns next tippable match (hero), user rank/points from leaderboard,
consecutive-tip streak, and up to 3 contextual nudges in one request.
Mounts at /api/dashboard; adds getDashboard() + DashboardData type to
the frontend API client.
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>
Strips all insight/agent state, fetchInsight() SSE function, audio playback
logic, and the insightWrapper JSX block that called /api/agent/* routes.
Also removes the matchHeader/groupBadge and kickoffBlock from the modal
(info already visible on the match card). Cleans all corresponding CSS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>