This repository has been archived on 2026-05-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tippspiel/prototyp_wm2026_v2_home.html
T
2026-04-03 22:02:05 +02:00

1273 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
<title>WM 2026 Tippspiel Home v2</title>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600;700;800;900&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"/>
<style>
/* ── Design Tokens: "The Stadium Elite" ─────────────────── */
:root {
--bg: #0A0E1A;
--surface-low: #0F1524;
--surface-mid: #151D30;
--surface-high: #1C2640;
--surface-top: #232E4A;
--primary: #4BB7F8;
--primary-dim: #39A9EA;
--primary-glow: rgba(75,183,248,0.18);
--primary-aura: rgba(75,183,248,0.08);
--gold: #FEAE32;
--gold-dim: #E09820;
--gold-glow: rgba(254,174,50,0.20);
--gold-aura: rgba(254,174,50,0.08);
--cyan: #69DAFF;
--green: #00E676;
--red: #FF3D5A;
--text-1: #F0F6FF;
--text-2: #8A9BBF;
--text-3: #4A5A7A;
--font-display: 'Plus Jakarta Sans', system-ui, sans-serif;
--font-body: 'Inter', system-ui, sans-serif;
--radius-sm: 12px;
--radius-md: 18px;
--radius-lg: 24px;
--radius-xl: 32px;
}
* { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
html, body {
background: #050810;
min-height: 100vh;
display: flex;
align-items: flex-start;
justify-content: center;
padding: 32px 16px 48px;
}
/* ── Phone Shell ────────────────────────────────────────── */
.phone {
width: 393px;
min-height: 852px;
background: var(--bg);
border-radius: 52px;
border: 8px solid #161B2E;
box-shadow:
0 0 0 1px rgba(75,183,248,0.08),
0 48px 120px rgba(0,0,0,0.85),
inset 0 1px 0 rgba(255,255,255,0.05);
overflow: hidden;
position: relative;
display: flex;
flex-direction: column;
}
.phone::before {
content: '';
position: absolute;
top: 12px; left: 50%;
transform: translateX(-50%);
width: 110px; height: 32px;
background: #0D1020;
border-radius: 16px;
z-index: 100;
}
/* ── Status Bar ─────────────────────────────────────────── */
.status-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 50px 28px 10px;
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
color: var(--text-2);
}
/* ── Top Bar ────────────────────────────────────────────── */
.top-bar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 4px 20px 16px;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
}
.brand-logo {
width: 34px; height: 34px;
background: linear-gradient(135deg, var(--primary), #2a6fa8);
border-radius: 10px;
display: flex; align-items: center; justify-content: center;
font-size: 16px;
box-shadow: 0 4px 12px var(--primary-glow), inset 0 1px 0 rgba(255,255,255,0.2);
}
.brand-text {
font-family: var(--font-display);
font-size: 15px;
font-weight: 800;
color: var(--text-1);
letter-spacing: -0.3px;
}
.brand-text span { color: var(--primary); }
.notif-btn {
width: 38px; height: 38px;
background: var(--surface-mid);
border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 16px;
box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
cursor: pointer;
position: relative;
}
.notif-dot {
position: absolute;
top: 7px; right: 7px;
width: 7px; height: 7px;
background: var(--gold);
border-radius: 50%;
border: 1.5px solid var(--bg);
}
/* ── Scrollable Body ────────────────────────────────────── */
.scroll-body {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
padding-bottom: 90px;
-webkit-overflow-scrolling: touch;
}
.scroll-body::-webkit-scrollbar { display: none; }
/* ═══════════════════════════════════════════════════════════
HERO: Countdown Card
═══════════════════════════════════════════════════════════ */
.hero-countdown {
margin: 0 16px 20px;
background: linear-gradient(145deg, #1A2540 0%, #0F1828 60%, #0A1220 100%);
border-radius: var(--radius-xl);
padding: 22px 22px 20px;
position: relative;
overflow: hidden;
/* Luminous shadow primary tint, not black */
box-shadow:
0 10px 32px rgba(0,0,0,0.4),
0 2px 8px rgba(75,183,248,0.08),
inset 0 1px 0 rgba(75,183,248,0.12);
}
/* Glossy top-left edge highlight */
.hero-countdown::before {
content: '';
position: absolute;
inset: 0;
border-radius: var(--radius-xl);
background: linear-gradient(135deg, rgba(255,255,255,0.07) 0%, transparent 50%);
pointer-events: none;
}
/* Gold gradient top stripe */
.hero-countdown::after {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
background: linear-gradient(90deg, var(--gold), var(--primary), transparent);
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
}
.hero-eyebrow {
font-family: var(--font-body);
font-size: 10px;
font-weight: 700;
color: var(--gold);
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 6px;
}
.hero-title {
font-family: var(--font-display);
font-size: 28px;
font-weight: 900;
color: var(--text-1);
line-height: 1.05;
letter-spacing: -1px;
margin-bottom: 2px;
}
.hero-title-gold {
font-family: var(--font-display);
font-size: 28px;
font-weight: 900;
color: var(--gold);
line-height: 1.05;
letter-spacing: -1px;
margin-bottom: 18px;
}
/* Trophy ghost */
.hero-trophy {
position: absolute;
right: 18px; top: 14px;
font-size: 64px;
opacity: 0.12;
transform: rotate(8deg);
filter: sepia(1) saturate(3) hue-rotate(10deg);
pointer-events: none;
}
/* Countdown tiles */
.countdown-tiles {
display: flex;
gap: 10px;
align-items: flex-start;
}
.cd-tile {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
.cd-val {
min-width: 54px;
padding: 10px 8px;
background: rgba(0,0,0,0.35);
border-radius: var(--radius-sm);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.08),
inset 0 -1px 0 rgba(0,0,0,0.3);
font-family: var(--font-display);
font-size: 26px;
font-weight: 900;
color: var(--text-1);
text-align: center;
letter-spacing: -1px;
line-height: 1;
}
.cd-label {
font-family: var(--font-body);
font-size: 9px;
font-weight: 600;
color: var(--text-3);
text-transform: uppercase;
letter-spacing: 1px;
}
.cd-sep {
font-family: var(--font-display);
font-size: 22px;
font-weight: 900;
color: var(--text-3);
padding-top: 8px;
}
/* ═══════════════════════════════════════════════════════════
STATS ROW 4 Glossy Tiles
═══════════════════════════════════════════════════════════ */
.stats-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin: 0 16px 20px;
}
.stat-tile {
background: var(--surface-mid);
border-radius: var(--radius-md);
padding: 16px 14px;
position: relative;
overflow: hidden;
box-shadow:
0 10px 25px rgba(0,0,0,0.25),
inset 0 1px 0 rgba(255,255,255,0.07),
inset 1px 0 0 rgba(255,255,255,0.04);
cursor: default;
transition: transform 0.15s, box-shadow 0.15s;
}
.stat-tile:active { transform: scale(0.97); }
/* Glossy sheen */
.stat-tile::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 50%;
background: linear-gradient(180deg, rgba(255,255,255,0.05) 0%, transparent 100%);
border-radius: var(--radius-md) var(--radius-md) 0 0;
pointer-events: none;
}
.stat-tile.primary-glow {
box-shadow:
0 10px 25px rgba(0,0,0,0.25),
0 0 0 1px rgba(75,183,248,0.12),
inset 0 1px 0 rgba(75,183,248,0.15),
0 4px 20px rgba(75,183,248,0.08);
}
.stat-tile.gold-glow {
box-shadow:
0 10px 25px rgba(0,0,0,0.25),
0 0 0 1px rgba(254,174,50,0.12),
inset 0 1px 0 rgba(254,174,50,0.15),
0 4px 20px rgba(254,174,50,0.08);
}
.stat-label {
font-family: var(--font-body);
font-size: 9px;
font-weight: 700;
color: var(--text-3);
text-transform: uppercase;
letter-spacing: 1.5px;
margin-bottom: 6px;
}
.stat-val {
font-family: var(--font-display);
font-size: 32px;
font-weight: 900;
color: var(--text-1);
line-height: 1;
letter-spacing: -1px;
}
.stat-val.blue { color: var(--primary); }
.stat-val.gold { color: var(--gold); }
.stat-val.green { color: var(--green); }
.stat-sub {
font-family: var(--font-body);
font-size: 10px;
color: var(--text-3);
margin-top: 4px;
}
.stat-icon {
position: absolute;
right: 12px; top: 12px;
font-size: 20px;
opacity: 0.25;
}
/* ═══════════════════════════════════════════════════════════
SECTION HEADER
═══════════════════════════════════════════════════════════ */
.sec-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px 12px;
}
.sec-title {
font-family: var(--font-display);
font-size: 16px;
font-weight: 800;
color: var(--text-1);
letter-spacing: -0.3px;
display: flex;
align-items: center;
gap: 8px;
}
.sec-title::before {
content: '';
display: inline-block;
width: 3px; height: 16px;
background: var(--primary);
border-radius: 2px;
box-shadow: 0 0 8px var(--primary-glow);
}
.sec-link {
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
color: var(--primary);
cursor: pointer;
opacity: 0.9;
}
/* ═══════════════════════════════════════════════════════════
UPCOMING MATCH CARDS horizontal scroll
═══════════════════════════════════════════════════════════ */
.match-scroll {
display: flex;
gap: 12px;
padding: 0 16px 4px;
overflow-x: auto;
scroll-snap-type: x mandatory;
-webkit-overflow-scrolling: touch;
margin-bottom: 24px;
}
.match-scroll::-webkit-scrollbar { display: none; }
.match-card {
flex-shrink: 0;
width: 260px;
background: var(--surface-mid);
border-radius: var(--radius-lg);
padding: 16px;
scroll-snap-align: start;
cursor: pointer;
position: relative;
overflow: hidden;
box-shadow:
0 10px 25px rgba(0,0,0,0.3),
inset 0 1px 0 rgba(255,255,255,0.07);
transition: transform 0.15s, box-shadow 0.15s;
}
.match-card:active { transform: scale(0.97); }
/* Glossy top sheen */
.match-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 45%;
background: linear-gradient(180deg, rgba(255,255,255,0.05) 0%, transparent 100%);
pointer-events: none;
}
.match-card.has-tip {
box-shadow:
0 10px 25px rgba(0,0,0,0.3),
0 0 0 1px rgba(75,183,248,0.2),
inset 0 1px 0 rgba(75,183,248,0.15),
0 4px 24px rgba(75,183,248,0.10);
}
.mc-top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14px;
}
.mc-group {
font-family: var(--font-body);
font-size: 9px;
font-weight: 700;
color: var(--text-3);
text-transform: uppercase;
letter-spacing: 1.2px;
}
.mc-live-badge {
display: inline-flex;
align-items: center;
gap: 4px;
background: var(--red);
color: white;
font-family: var(--font-body);
font-size: 8px;
font-weight: 800;
padding: 2px 7px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 8px rgba(255,61,90,0.4);
}
.mc-live-badge::before {
content:''; width:5px; height:5px;
background: white; border-radius:50%;
animation: blink 1s infinite;
}
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.2} }
.mc-teams {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14px;
}
.mc-team {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
flex: 1;
}
/* Flag container — glossy square */
.flag-box {
width: 52px; height: 52px;
background: var(--surface-high);
border-radius: 14px;
display: flex; align-items: center; justify-content: center;
font-size: 30px;
box-shadow:
0 4px 12px rgba(0,0,0,0.3),
inset 0 1px 0 rgba(255,255,255,0.10),
inset 0 -1px 0 rgba(0,0,0,0.2);
position: relative;
overflow: hidden;
}
.flag-box::before {
content:'';
position:absolute;
top:0;left:0;right:0;height:40%;
background: linear-gradient(180deg, rgba(255,255,255,0.12) 0%, transparent);
border-radius: 14px 14px 0 0;
pointer-events:none;
}
.mc-team .tname {
font-family: var(--font-body);
font-size: 10px;
font-weight: 700;
color: var(--text-2);
text-align: center;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.mc-vs {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
.mc-vs-circle {
width: 28px; height: 28px;
background: var(--surface-high);
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-family: var(--font-body);
font-size: 9px;
font-weight: 800;
color: var(--text-3);
box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
}
.mc-vs-date {
font-family: var(--font-body);
font-size: 9px;
color: var(--text-3);
text-align: center;
line-height: 1.4;
}
/* CTA Button on card */
.mc-cta {
width: 100%;
padding: 10px;
border: none;
border-radius: 12px;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dim) 100%);
color: white;
font-family: var(--font-display);
font-size: 12px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.8px;
cursor: pointer;
position: relative;
overflow: hidden;
box-shadow:
0 4px 14px rgba(75,183,248,0.35),
inset 0 1px 0 rgba(255,255,255,0.25);
transition: all 0.15s;
}
.mc-cta::before {
content:'';
position:absolute;
top:0;left:0;right:0;height:50%;
background: linear-gradient(180deg, rgba(255,255,255,0.18) 0%, transparent);
pointer-events:none;
}
.mc-cta:active { transform: scale(0.97); box-shadow: 0 2px 8px rgba(75,183,248,0.25); }
.mc-cta.tipped {
background: linear-gradient(135deg, var(--surface-high) 0%, var(--surface-mid) 100%);
color: var(--primary);
box-shadow: 0 0 0 1px rgba(75,183,248,0.2), inset 0 1px 0 rgba(255,255,255,0.06);
}
.mc-tip-label {
font-family: var(--font-body);
font-size: 9px;
color: var(--primary);
font-weight: 700;
text-align: center;
margin-top: 6px;
opacity: 0.8;
}
/* ═══════════════════════════════════════════════════════════
LETZTE AUSWERTUNGEN horizontal results
═══════════════════════════════════════════════════════════ */
.results-scroll {
display: flex;
gap: 10px;
padding: 0 16px 4px;
overflow-x: auto;
margin-bottom: 24px;
}
.results-scroll::-webkit-scrollbar { display: none; }
.result-card {
flex-shrink: 0;
width: 128px;
background: var(--surface-mid);
border-radius: var(--radius-md);
padding: 12px;
position: relative;
overflow: hidden;
box-shadow:
0 8px 20px rgba(0,0,0,0.25),
inset 0 1px 0 rgba(255,255,255,0.06);
}
.result-card::before {
content:'';
position:absolute;
top:0;left:0;right:0;height:3px;
border-radius: var(--radius-md) var(--radius-md) 0 0;
}
.result-card.correct::before { background: var(--green); box-shadow: 0 0 8px rgba(0,230,118,0.5); }
.result-card.tendency::before { background: var(--primary); box-shadow: 0 0 8px rgba(75,183,248,0.5); }
.result-card.wrong::before { background: var(--red); box-shadow: 0 0 8px rgba(255,61,90,0.5); }
.result-card.correct { box-shadow: 0 8px 20px rgba(0,0,0,0.25), 0 0 0 1px rgba(0,230,118,0.1), inset 0 1px 0 rgba(0,230,118,0.1); }
.result-card.tendency { box-shadow: 0 8px 20px rgba(0,0,0,0.25), 0 0 0 1px rgba(75,183,248,0.1), inset 0 1px 0 rgba(75,183,248,0.1); }
.result-card.wrong { box-shadow: 0 8px 20px rgba(0,0,0,0.25), 0 0 0 1px rgba(255,61,90,0.1), inset 0 1px 0 rgba(255,61,90,0.08); }
.rc-flags { font-size: 20px; margin-bottom: 6px; letter-spacing: 2px; }
.rc-teams { font-family: var(--font-body); font-size: 9px; color: var(--text-3); margin-bottom: 8px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
.rc-scores {
display: flex; align-items: center; gap: 4px; margin-bottom: 8px;
}
.rc-tip { font-family: var(--font-display); font-size: 15px; font-weight: 900; color: var(--text-2); }
.rc-arrow { font-size: 10px; color: var(--text-3); }
.rc-res { font-family: var(--font-display); font-size: 15px; font-weight: 900; color: var(--text-1); }
.rc-pts {
font-family: var(--font-body);
font-size: 10px; font-weight: 800;
padding: 3px 8px; border-radius: 8px; display: inline-block;
}
.correct .rc-pts { background: rgba(0,230,118,0.12); color: var(--green); }
.tendency .rc-pts { background: rgba(75,183,248,0.12); color: var(--primary); }
.wrong .rc-pts { background: rgba(255,61,90,0.10); color: var(--red); }
/* ═══════════════════════════════════════════════════════════
OFFICE TOP 3 Podium style (like Stitch leaderboard)
═══════════════════════════════════════════════════════════ */
.top3-podium {
display: flex;
align-items: flex-end;
justify-content: center;
gap: 12px;
margin: 0 16px 16px;
padding: 20px 12px 12px;
background: var(--surface-low);
border-radius: var(--radius-xl);
position: relative;
overflow: hidden;
box-shadow:
0 8px 24px rgba(0,0,0,0.3),
inset 0 1px 0 rgba(255,255,255,0.05);
}
.top3-podium::before {
content:'';
position:absolute;
top:0;left:0;right:0;height:3px;
background: linear-gradient(90deg, transparent, var(--gold), transparent);
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
}
.podium-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
flex: 1;
position: relative;
}
.podium-item.first {
margin-bottom: 10px;
}
.podium-avatar {
width: 44px; height: 44px;
border-radius: 50%;
background: var(--surface-high);
display: flex; align-items: center; justify-content: center;
font-family: var(--font-display);
font-size: 14px; font-weight: 900;
color: var(--text-2);
box-shadow:
0 4px 12px rgba(0,0,0,0.3),
inset 0 1px 0 rgba(255,255,255,0.10);
position: relative;
}
.podium-item.first .podium-avatar {
width: 54px; height: 54px;
font-size: 17px;
background: linear-gradient(135deg, #2a2000, #1a1500);
color: var(--gold);
box-shadow:
0 0 0 2px var(--gold),
0 6px 20px rgba(254,174,50,0.35),
inset 0 1px 0 rgba(255,255,255,0.12);
}
.podium-crown {
position: absolute;
top: -16px;
font-size: 18px;
filter: drop-shadow(0 2px 4px rgba(254,174,50,0.6));
}
.medal-badge {
position: absolute;
bottom: -3px; right: -3px;
width: 18px; height: 18px;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 10px;
border: 1.5px solid var(--bg);
}
.medal-badge.gold { background: var(--gold); }
.medal-badge.silver { background: #9BA4B4; }
.medal-badge.bronze { background: #CD7F32; }
.podium-name {
font-family: var(--font-body);
font-size: 10px; font-weight: 700;
color: var(--text-2);
text-align: center;
max-width: 80px;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.podium-item.first .podium-name { color: var(--text-1); font-size: 11px; }
.podium-pts {
font-family: var(--font-display);
font-size: 13px; font-weight: 900;
color: var(--text-3);
}
.podium-item.first .podium-pts { color: var(--gold); font-size: 15px; }
/* ─── Leaderboard List ──────────────────────────────────── */
.rank-list {
display: flex;
flex-direction: column;
gap: 8px;
margin: 0 16px 16px;
}
.rank-row {
display: flex;
align-items: center;
gap: 12px;
background: var(--surface-mid);
border-radius: var(--radius-md);
padding: 12px 14px;
box-shadow:
0 4px 12px rgba(0,0,0,0.2),
inset 0 1px 0 rgba(255,255,255,0.05);
position: relative;
overflow: hidden;
cursor: pointer;
transition: transform 0.1s;
}
.rank-row:active { transform: scale(0.99); }
.rank-row.me {
box-shadow:
0 4px 12px rgba(0,0,0,0.2),
0 0 0 1px rgba(75,183,248,0.25),
inset 0 1px 0 rgba(75,183,248,0.15),
0 0 20px rgba(75,183,248,0.06);
}
/* Glossy sheen on rows */
.rank-row::before {
content:'';
position:absolute;
top:0;left:0;right:0;height:50%;
background: linear-gradient(180deg, rgba(255,255,255,0.03) 0%, transparent);
pointer-events:none;
}
.rr-num {
font-family: var(--font-body);
font-size: 12px; font-weight: 700;
color: var(--text-3);
width: 20px; text-align: center;
}
.rr-avatar {
width: 36px; height: 36px;
border-radius: 50%;
background: var(--surface-high);
display: flex; align-items: center; justify-content: center;
font-family: var(--font-display);
font-size: 12px; font-weight: 800;
color: var(--text-2);
flex-shrink: 0;
box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
}
.rank-row.me .rr-avatar {
background: linear-gradient(135deg, var(--primary), #2a7ab8);
color: white;
box-shadow: 0 2px 8px rgba(75,183,248,0.3), inset 0 1px 0 rgba(255,255,255,0.2);
}
.rr-info { flex: 1; }
.rr-name {
font-family: var(--font-body);
font-size: 13px; font-weight: 700;
color: var(--text-1);
line-height: 1;
margin-bottom: 2px;
}
.rr-dept {
font-family: var(--font-body);
font-size: 10px; color: var(--text-3);
}
.me-tag {
font-size: 9px;
color: var(--primary);
font-weight: 700;
margin-left: 4px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.me-cta {
font-size: 9px; font-weight: 800;
color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px;
display: block;
margin-top: 1px;
}
.rr-right {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 4px;
}
.rr-pts {
font-family: var(--font-display);
font-size: 18px; font-weight: 900;
color: var(--text-1); line-height: 1;
}
.rank-row.me .rr-pts { color: var(--primary); }
.rr-trend {
font-size: 11px; font-weight: 700;
}
.rr-trend.up { color: var(--green); }
.rr-trend.down { color: var(--red); }
.rr-trend.eq { color: var(--text-3); }
/* ── Bottom Navigation ─────────────────────────────────── */
.bottom-nav {
position: absolute;
bottom: 0; left: 0; right: 0;
height: 80px;
background: rgba(10,14,26,0.80);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-top: 1px solid rgba(75,183,248,0.08);
display: flex;
align-items: flex-start;
justify-content: space-around;
padding: 12px 0 0;
z-index: 50;
}
.nav-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding: 6px 16px;
cursor: pointer;
min-width: 60px;
position: relative;
transition: transform 0.1s;
}
.nav-item:active { transform: scale(0.92); }
.nav-icon { font-size: 20px; }
.nav-label {
font-family: var(--font-body);
font-size: 9px; font-weight: 700;
color: var(--text-3);
text-transform: uppercase;
letter-spacing: 0.8px;
}
.nav-item.active .nav-label { color: var(--gold); }
/* Gold dot indicator */
.nav-item.active::after {
content: '';
position: absolute;
bottom: -8px; left: 50%;
transform: translateX(-50%);
width: 18px; height: 3px;
background: var(--gold);
border-radius: 2px 2px 0 0;
box-shadow: 0 0 8px var(--gold-glow);
}
.nav-badge {
position: absolute;
top: 2px; right: 8px;
background: var(--red);
color: white;
font-size: 8px; font-weight: 800;
width: 15px; height: 15px;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
border: 1.5px solid var(--bg);
box-shadow: 0 2px 6px rgba(255,61,90,0.4);
}
</style>
</head>
<body>
<div class="phone">
<!-- Status Bar -->
<div class="status-bar">
<span>9:41</span>
<span style="letter-spacing:2px">●●●● 5G</span>
<span>🔋 87%</span>
</div>
<!-- Top Bar -->
<div class="top-bar">
<div class="brand">
<div class="brand-logo"></div>
<span class="brand-text">WM <span>2026</span> Tippspiel</span>
</div>
<div class="notif-btn">
🔔
<div class="notif-dot"></div>
</div>
</div>
<!-- Scrollable Content -->
<div class="scroll-body">
<!-- ── HERO: Countdown ─────────────────────────────── -->
<div class="hero-countdown">
<div class="hero-trophy">🏆</div>
<div class="hero-eyebrow">The Countdown Begins</div>
<div class="hero-title">WM 2026</div>
<div class="hero-title-gold">WORLD CUP FINALS</div>
<div class="countdown-tiles">
<div class="cd-tile">
<div class="cd-val" id="cd-days">69</div>
<div class="cd-label">Days</div>
</div>
<div class="cd-sep">:</div>
<div class="cd-tile">
<div class="cd-val" id="cd-hrs">14</div>
<div class="cd-label">Hrs</div>
</div>
<div class="cd-sep">:</div>
<div class="cd-tile">
<div class="cd-val" id="cd-min">08</div>
<div class="cd-label">Min</div>
</div>
<div class="cd-sep">:</div>
<div class="cd-tile">
<div class="cd-val" id="cd-sec">33</div>
<div class="cd-label">Sec</div>
</div>
</div>
</div>
<!-- ── STATS GRID ──────────────────────────────────── -->
<div class="stats-grid">
<div class="stat-tile primary-glow">
<div class="stat-icon"></div>
<div class="stat-label">Points</div>
<div class="stat-val blue">12</div>
<div class="stat-sub">+3 letzte Runde</div>
</div>
<div class="stat-tile gold-glow">
<div class="stat-icon">🏆</div>
<div class="stat-label">Global Rank</div>
<div class="stat-val gold">#7</div>
<div class="stat-sub">Top 15% Overall</div>
</div>
<div class="stat-tile">
<div class="stat-icon">🎯</div>
<div class="stat-label">Exact Hits</div>
<div class="stat-val green">4</div>
<div class="stat-sub">Perfect Predictions</div>
</div>
<div class="stat-tile">
<div class="stat-icon">📋</div>
<div class="stat-label">Total Tips</div>
<div class="stat-val">18</div>
<div class="stat-sub">von 104 Spielen</div>
</div>
</div>
<!-- ── UPCOMING MATCHES ────────────────────────────── -->
<div class="sec-header">
<span class="sec-title">Upcoming Matches</span>
<span class="sec-link">View All →</span>
</div>
<div class="match-scroll">
<!-- Match Card 1: offen -->
<div class="match-card">
<div class="mc-top">
<span class="mc-group">Gruppe B · Match 15</span>
</div>
<div class="mc-teams">
<div class="mc-team">
<div class="flag-box">🇩🇪</div>
<span class="tname">Germany</span>
</div>
<div class="mc-vs">
<div class="mc-vs-circle">VS</div>
<div class="mc-vs-date">14. Jun<br/>21:00</div>
</div>
<div class="mc-team">
<div class="flag-box">🇪🇸</div>
<span class="tname">Spain</span>
</div>
</div>
<button class="mc-cta">Tipp abgeben</button>
</div>
<!-- Match Card 2: getippt -->
<div class="match-card has-tip">
<div class="mc-top">
<span class="mc-group">Gruppe C · Match 18</span>
</div>
<div class="mc-teams">
<div class="mc-team">
<div class="flag-box">🇧🇷</div>
<span class="tname">Brazil</span>
</div>
<div class="mc-vs">
<div class="mc-vs-circle">VS</div>
<div class="mc-vs-date">15. Jun<br/>18:00</div>
</div>
<div class="mc-team">
<div class="flag-box">🇫🇷</div>
<span class="tname">France</span>
</div>
</div>
<button class="mc-cta tipped">✏ Tipp: 2:1</button>
<div class="mc-tip-label">✅ Tipp gespeichert</div>
</div>
<!-- Match Card 3: Live -->
<div class="match-card">
<div class="mc-top">
<span class="mc-group">Gruppe A · Match 6</span>
<span class="mc-live-badge">Live 67'</span>
</div>
<div class="mc-teams">
<div class="mc-team">
<div class="flag-box">🇦🇷</div>
<span class="tname">Argentina</span>
</div>
<div class="mc-vs">
<div class="mc-vs-circle" style="background:var(--red);color:white;font-size:14px;font-weight:900">2:0</div>
<div class="mc-vs-date" style="color:var(--red)">Laufend</div>
</div>
<div class="mc-team">
<div class="flag-box">🇨🇦</div>
<span class="tname">Canada</span>
</div>
</div>
<button class="mc-cta" style="background:linear-gradient(135deg,var(--surface-high),var(--surface-mid));color:var(--text-3);box-shadow:none;cursor:default">Läuft · Mein Tipp: 3:0</button>
</div>
</div>
<!-- ── LETZTE ERGEBNISSE ───────────────────────────── -->
<div class="sec-header">
<span class="sec-title">Letzte Ergebnisse</span>
</div>
<div class="results-scroll">
<div class="result-card correct">
<div class="rc-flags">🇩🇪🇯🇵</div>
<div class="rc-teams">GER vs JPN</div>
<div class="rc-scores">
<span class="rc-tip">2:1</span>
<span class="rc-arrow"></span>
<span class="rc-res">2:1</span>
</div>
<span class="rc-pts">+3 Pkt ✓✓</span>
</div>
<div class="result-card tendency">
<div class="rc-flags">🇧🇷🇫🇷</div>
<div class="rc-teams">BRA vs FRA</div>
<div class="rc-scores">
<span class="rc-tip">1:0</span>
<span class="rc-arrow"></span>
<span class="rc-res">2:0</span>
</div>
<span class="rc-pts">+1 Pkt ✓</span>
</div>
<div class="result-card wrong">
<div class="rc-flags">🇦🇷🇲🇽</div>
<div class="rc-teams">ARG vs MEX</div>
<div class="rc-scores">
<span class="rc-tip">0:1</span>
<span class="rc-arrow"></span>
<span class="rc-res">2:0</span>
</div>
<span class="rc-pts">0 Pkt ✗</span>
</div>
<div class="result-card correct">
<div class="rc-flags">🇵🇹🇺🇸</div>
<div class="rc-teams">POR vs USA</div>
<div class="rc-scores">
<span class="rc-tip">3:1</span>
<span class="rc-arrow"></span>
<span class="rc-res">3:1</span>
</div>
<span class="rc-pts">+3 Pkt ✓✓</span>
</div>
</div>
<!-- ── OFFICE TOP 3 ────────────────────────────────── -->
<div class="sec-header">
<span class="sec-title">Office Top 3</span>
<span class="sec-link" style="color:var(--gold)">Full Leaderboard →</span>
</div>
<div class="top3-podium">
<!-- 2nd -->
<div class="podium-item second">
<div class="podium-avatar">
MH
<div class="medal-badge silver">2</div>
</div>
<div class="podium-name">Markus H.</div>
<div class="podium-pts">18 Pkt</div>
</div>
<!-- 1st -->
<div class="podium-item first">
<div class="podium-avatar">
<div class="podium-crown">👑</div>
SW
<div class="medal-badge gold">1</div>
</div>
<div class="podium-name">Sandra W.</div>
<div class="podium-pts">21 Pkt</div>
</div>
<!-- 3rd -->
<div class="podium-item third">
<div class="podium-avatar">
JB
<div class="medal-badge bronze">3</div>
</div>
<div class="podium-name">Julia B.</div>
<div class="podium-pts">16 Pkt</div>
</div>
</div>
<!-- Rank list ab Platz 4 + ich -->
<div class="rank-list">
<div class="rank-row">
<span class="rr-num">4.</span>
<div class="rr-avatar">TK</div>
<div class="rr-info">
<div class="rr-name">Thomas K.</div>
<div class="rr-dept">Einkauf</div>
</div>
<div class="rr-right">
<span class="rr-pts">15</span>
<span class="rr-trend up"></span>
</div>
</div>
<div class="rank-row">
<span class="rr-num">5.</span>
<div class="rr-avatar">AS</div>
<div class="rr-info">
<div class="rr-name">Anna S.</div>
<div class="rr-dept">HR</div>
</div>
<div class="rr-right">
<span class="rr-pts">13</span>
<span class="rr-trend eq"></span>
</div>
</div>
<div class="rank-row">
<span class="rr-num">6.</span>
<div class="rr-avatar">KM</div>
<div class="rr-info">
<div class="rr-name">Klaus M.</div>
<div class="rr-dept">IT</div>
</div>
<div class="rr-right">
<span class="rr-pts">13</span>
<span class="rr-trend up"></span>
</div>
</div>
<!-- ICH -->
<div class="rank-row me">
<span class="rr-num" style="color:var(--primary);font-weight:900">7.</span>
<div class="rr-avatar">RK</div>
<div class="rr-info">
<div class="rr-name">Ronny K. <span class="me-tag">(Ich)</span></div>
<div class="rr-dept">IT · <span class="me-cta">Aufholjagd! ↑</span></div>
</div>
<div class="rr-right">
<span class="rr-pts">12</span>
<span class="rr-trend up"></span>
</div>
</div>
</div>
<!-- Punkte sichern CTA -->
<div style="margin: 0 16px 32px">
<div style="
background: var(--surface-low);
border-radius: var(--radius-lg);
padding: 16px 18px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
box-shadow: 0 4px 16px rgba(0,0,0,0.2), inset 0 1px 0 rgba(255,255,255,0.04);
">
<div>
<div style="font-family:var(--font-display);font-size:14px;font-weight:800;color:var(--text-1);margin-bottom:4px">Punkte sichern!</div>
<div style="font-family:var(--font-body);font-size:11px;color:var(--text-3)">Tippe die nächsten Spiele und klettere nach oben.</div>
</div>
<button style="
flex-shrink:0;
padding: 10px 16px;
background: linear-gradient(135deg, var(--primary), var(--primary-dim));
border: none; border-radius: 12px;
font-family: var(--font-display);
font-size: 12px; font-weight: 800;
color: white; cursor: pointer;
box-shadow: 0 4px 14px rgba(75,183,248,0.35), inset 0 1px 0 rgba(255,255,255,0.2);
text-transform: uppercase; letter-spacing: 0.5px;
position: relative; overflow: hidden;
">Tippen</button>
</div>
</div>
</div><!-- /scroll-body -->
<!-- Bottom Navigation -->
<nav class="bottom-nav">
<div class="nav-item active" data-page="home">
<span class="nav-icon">🏠</span>
<span class="nav-label">Home</span>
</div>
<div class="nav-item" data-page="spielplan" style="position:relative">
<span class="nav-icon">📅</span>
<span class="nav-label">Spielplan</span>
<span class="nav-badge">3</span>
</div>
<div class="nav-item" data-page="rangliste">
<span class="nav-icon">📊</span>
<span class="nav-label">Rangliste</span>
</div>
<div class="nav-item" data-page="gruppen">
<span class="nav-icon">🗂</span>
<span class="nav-label">Gruppen</span>
</div>
<div class="nav-item" data-page="profil">
<span class="nav-icon">👤</span>
<span class="nav-label">Profil</span>
</div>
</nav>
</div><!-- /phone -->
<script>
// Live Countdown
function tick() {
const wm = new Date('2026-06-11T19:00:00Z');
const now = new Date();
const diff = Math.max(0, wm - now);
const d = Math.floor(diff / 86400000);
const h = Math.floor((diff % 86400000) / 3600000);
const m = Math.floor((diff % 3600000) / 60000);
const s = Math.floor((diff % 60000) / 1000);
const pad = n => String(n).padStart(2,'0');
document.getElementById('cd-days').textContent = pad(d);
document.getElementById('cd-hrs').textContent = pad(h);
document.getElementById('cd-min').textContent = pad(m);
document.getElementById('cd-sec').textContent = pad(s);
}
tick();
setInterval(tick, 1000);
// Nav click highlight (demo)
document.querySelectorAll('.nav-item').forEach(item => {
item.addEventListener('click', () => {
document.querySelectorAll('.nav-item').forEach(i => i.classList.remove('active'));
item.classList.add('active');
});
});
</script>
</body>
</html>