style: real LED segment display font for kickoff time

- 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>
This commit is contained in:
Ronny
2026-04-11 22:56:56 +02:00
parent 6be9bcdc1b
commit b7068ea2b0
3 changed files with 29 additions and 15 deletions
+13 -11
View File
@@ -77,18 +77,20 @@
border: 1px solid rgba(75,183,248,0.15); border: 1px solid rgba(75,183,248,0.15);
} }
/* Kickoff — stadium scoreboard display */ /* Kickoff — stadium LED segment display */
.kickoffDisplay { .kickoffRow {
font-family: 'Courier New', 'Lucida Console', monospace; text-align: center;
font-size: 16px; margin-bottom: 4px;
font-weight: 700; }
.kickoffLED {
font-family: 'DSEG7', 'Courier New', monospace;
font-size: 26px;
color: var(--gold); color: var(--gold);
letter-spacing: 0.12em; letter-spacing: 0.08em;
background: rgba(0, 0, 0, 0.4); text-shadow:
padding: 3px 10px; 0 0 8px rgba(254, 174, 50, 0.6),
border-radius: 4px; 0 0 20px rgba(254, 174, 50, 0.25);
border: 1px solid rgba(254, 174, 50, 0.15);
text-shadow: 0 0 8px rgba(254, 174, 50, 0.5);
} }
.topRowSpacer { .topRowSpacer {
+8 -4
View File
@@ -84,7 +84,7 @@ export default function MatchCard({ match, onTip }: Props) {
return ( return (
<div className={`card ${styles.card} ${styles[`card_${state}`]} ${isLive ? styles.live : ''} ${glowClass}`}> <div className={`card ${styles.card} ${styles[`card_${state}`]} ${isLive ? styles.live : ''} ${glowClass}`}>
{/* Top row: Group + Kickoff (stadium display) + Countdown */} {/* Top row: Group + Countdown */}
<div className={styles.topRow}> <div className={styles.topRow}>
{(isLive || isFinished) && ( {(isLive || isFinished) && (
<span className={`${styles.status} ${isLive ? styles.statusLive : ''}`}> <span className={`${styles.status} ${isLive ? styles.statusLive : ''}`}>
@@ -97,9 +97,6 @@ export default function MatchCard({ match, onTip }: Props) {
{match.group.replace('GROUP_', 'Gruppe ')} {match.group.replace('GROUP_', 'Gruppe ')}
</span> </span>
)} )}
{!isFinished && !isLive && (
<span className={styles.kickoffDisplay}>{formatKickoff(match.utcDate)}</span>
)}
<span className={styles.topRowSpacer} /> <span className={styles.topRowSpacer} />
{(state === 'open' || state === 'tipped') && match.tippable && ( {(state === 'open' || state === 'tipped') && match.tippable && (
<span className={`${styles.badge} ${remainingMins < 60 ? styles.badgeUrgent : ''} ${remainingMins < 5 ? styles.countdownUrgent : ''}`}> <span className={`${styles.badge} ${remainingMins < 60 ? styles.badgeUrgent : ''} ${remainingMins < 5 ? styles.countdownUrgent : ''}`}>
@@ -116,6 +113,13 @@ export default function MatchCard({ match, onTip }: Props) {
)} )}
</div> </div>
{/* Kickoff — stadium LED display, centered */}
{!isFinished && !isLive && (
<div className={styles.kickoffRow}>
<span className={styles.kickoffLED}>{formatKickoff(match.utcDate)}</span>
</div>
)}
{/* Teams + Score */} {/* Teams + Score */}
<div className={styles.matchRow}> <div className={styles.matchRow}>
{/* Home */} {/* Home */}
+8
View File
@@ -2,6 +2,14 @@
WM 2026 Tippspiel — Stadium Elite Design System WM 2026 Tippspiel — Stadium Elite Design System
============================================================ */ ============================================================ */
/* Stadium LED Segment Display Font */
@font-face {
font-family: 'DSEG7';
src: url('https://cdn.jsdelivr.net/npm/dseg@0.46.0/fonts/DSEG7-Classic/DSEG7Classic-Regular.woff2') format('woff2');
font-weight: 400;
font-display: swap;
}
/* --- Dark Mode (Standard) --- */ /* --- Dark Mode (Standard) --- */
:root { :root {
--bg-deep: #0A0E1A; --bg-deep: #0A0E1A;