From 7c779e0d72f01ae9fff07c68d04bbdab69e07ddd Mon Sep 17 00:00:00 2001 From: funman300 Date: Thu, 25 Jun 2026 19:06:04 -0700 Subject: [PATCH] Phase 24: pack reveal animation, daily check-in UI, club milestones panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mapper.rs: 3 new exact routes (daily objective GET/claim → /club/checkin, milestones GET → /club/milestones); bump exact routes assertion to ≥59 - dashboard: pack reveal animation (card-flip-in keyframe, unrevealed placeholder slots, Reveal Next / Reveal All buttons, one-at-a-time reveal); daily check-in panel at top of club tab (7-dot streak visualisation, claim button, next reward preview); club milestones grid (10 stats: wins, goals, best streak, seasons, highest division, packs, cards, SBCs, check-ins, level) Co-Authored-By: Claude Sonnet 4.6 --- src/dashboard.html | 176 +++++++++++++++++++++++++++++++++++++++++---- src/mapper.rs | 19 ++++- 2 files changed, 179 insertions(+), 16 deletions(-) diff --git a/src/dashboard.html b/src/dashboard.html index b236c81..42298a3 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -244,6 +244,31 @@ h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em; .event-status.on { color: #3fb950; } .event-status.off { color: #8b949e; } +/* ── Pack Reveal Animation ── */ +@keyframes card-flip-in { + 0% { transform: rotateY(90deg) scale(0.85); opacity:0; } + 60% { transform: rotateY(-8deg) scale(1.04); opacity:1; } + 100% { transform: rotateY(0) scale(1); opacity:1; } +} +.pack-reveal-card { animation: card-flip-in 0.38s ease both; } +.pack-reveal-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr)); gap:10px; margin-top:12px; perspective:600px; } +.pack-reveal-actions { display:flex; gap:10px; align-items:center; margin-top:14px; } +.pack-unrevealed { background:#21262d; border:2px dashed #30363d; border-radius:8px; aspect-ratio:0.7; display:flex; align-items:center; justify-content:center; font-size:1.4rem; color:#30363d; cursor:pointer; transition:border-color 0.15s; } +.pack-unrevealed:hover { border-color:#f5a623; color:#f5a623; } + +/* ── Daily Check-in ── */ +.checkin-card { background:#161b22; border:1px solid #30363d; border-radius:8px; padding:16px; max-width:400px; } +.checkin-streak { display:flex; gap:6px; margin:10px 0; } +.streak-dot { width:28px; height:28px; border-radius:50%; background:#21262d; border:1px solid #30363d; display:flex; align-items:center; justify-content:center; font-size:0.7rem; font-weight:700; } +.streak-dot.done { background:#f5a623; border-color:#f5a623; color:#000; } +.streak-dot.current { background:#1c4532; border-color:#3fb950; color:#3fb950; } + +/* ── Milestones ── */ +.milestone-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(180px, 1fr)); gap:10px; margin-top:12px; } +.milestone-item { background:#161b22; border:1px solid #30363d; border-radius:8px; padding:14px; } +.milestone-val { font-size:1.8rem; font-weight:800; color:#f5a623; line-height:1.1; } +.milestone-lbl { font-size:0.75rem; color:#8b949e; margin-top:2px; } + /* ── Formation Pitch ── */ .pitch-wrap { position:relative; width:100%; max-width:380px; aspect-ratio:3/4.2; background:#16502e; border-radius:10px; overflow:hidden; border:1px solid #30363d; } .pitch-markings { position:absolute; inset:0; pointer-events:none; } @@ -409,6 +434,10 @@ h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em;
+
+

Daily Check-in

+
Loading…
+

Club Info

@@ -424,6 +453,10 @@ h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em;
Loading…
+
+

Club Milestones

+
Loading…
+
@@ -820,11 +853,16 @@ h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em;