/* ══════════════════════════════════════════════════════════
   YUPA 5K — Race for Education
   ══════════════════════════════════════════════════════════ */

/* ── Hero ── */
.race-hero { position: relative; overflow: hidden; padding: clamp(30px,5vw,54px) 0 clamp(30px,5vw,60px); }
.race-hero .hero-blob { position: absolute; border-radius: 50%; filter: blur(72px); opacity: .5; pointer-events: none; }
.race-hero .b1 { width: 460px; height: 460px; left: -150px; top: -120px; background: rgba(173,165,249,.5); }
.race-hero .b2 { width: 520px; height: 520px; right: -170px; top: 40px; background: rgba(124,111,240,.30); }
.race-hero .wrap { position: relative; }
.race-eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--grad); color: #fff; font-weight: 700; font-size: 13px;
  letter-spacing: .04em; padding: 8px 15px; border-radius: 999px;
  box-shadow: 0 8px 20px rgba(124,111,240,.35); margin-bottom: 18px;
}
.race-hero .h1 { max-width: 780px; }
.race-hero .lead { max-width: 600px; }
.race-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }

/* ── Running marquee strip ── */
.run-strip {
  position: relative; margin-top: 40px; height: 96px; border-radius: 22px; overflow: hidden;
  background: linear-gradient(120deg, var(--lav-deep), var(--lav));
  box-shadow: 0 20px 46px rgba(124,111,240,.34); border: 1px solid rgba(255,255,255,.4);
}
.run-strip::after { /* checkered finish sweep */
  content: ""; position: absolute; inset: 0; opacity: .18;
  background-image:
    linear-gradient(45deg, #000 25%, transparent 25%, transparent 75%, #000 75%),
    linear-gradient(45deg, #000 25%, transparent 25%, transparent 75%, #000 75%);
  background-size: 26px 26px; background-position: 0 0, 13px 13px;
  animation: runCheck 6s linear infinite;
}
@keyframes runCheck { to { background-position: 260px 0, 273px 13px; } }
.run-lane { position: absolute; inset: 0; display: flex; align-items: center; gap: 54px; width: max-content; padding-left: 20px; animation: runLane 9s linear infinite; }
@keyframes runLane { to { transform: translateX(-50%); } }
.run-lane .runner { font-size: 42px; line-height: 1; filter: drop-shadow(0 6px 8px rgba(0,0,0,.25)); animation: runBob .42s ease-in-out infinite alternate; }
.run-lane .runner:nth-child(even) { animation-delay: .21s; }
@keyframes runBob { from { transform: translateY(4px) rotate(-4deg); } to { transform: translateY(-6px) rotate(3deg); } }
.run-strip .run-cap { position: absolute; z-index: 2; top: 50%; left: 50%; transform: translate(-50%,-50%); color: #fff; font-family: var(--font-display); font-weight: 800; font-size: clamp(16px,2.4vw,22px); letter-spacing: .06em; text-shadow: 0 2px 10px rgba(0,0,0,.35); pointer-events: none; }

/* ── Stats ── */
.race-stats { display: grid; grid-template-columns: repeat(4,1fr); gap: 14px; }
.rstat { background: #fff; border: 1px solid var(--line); border-radius: var(--r-lg); padding: 26px 22px; box-shadow: 0 14px 34px rgba(20,24,27,.06); }
.rstat.pop { background: var(--grad); border-color: transparent; box-shadow: 0 18px 40px rgba(124,111,240,.34); }
.rstat .rnum { font-family: var(--font-display); font-weight: 800; font-size: clamp(32px,4vw,44px); letter-spacing: -.03em; color: var(--ink); line-height: 1; display: block; }
.rstat.pop .rnum, .rstat.pop .rlbl { color: #fff; }
.rlbl { font-size: 13.5px; color: var(--ink-2); margin-top: 10px; line-height: 1.45; font-weight: 500; }
.race-help { max-width: 680px; margin: 26px auto 0; text-align: center; color: var(--ink-2); font-size: 15.5px; line-height: 1.6; }
.race-help b { color: var(--ink); }

/* ── Race course (scroll-driven) ── */
.rmap { min-height: 300vh; position: relative; }
.rmap-sticky { position: sticky; top: calc(var(--nav-h) + 12px); padding: 12px 0 24px; }
.rmap-card {
  position: relative; max-width: 940px; margin: 22px auto 0; border-radius: var(--r-lg); overflow: hidden;
  background: #fbfaff; border: 1px solid var(--line); box-shadow: 0 34px 80px rgba(20,24,27,.16);
}
.rmap-wrap { position: relative; width: 100%; aspect-ratio: 1000 / 460; max-height: calc(100vh - var(--nav-h) - 210px); min-height: 300px; }
.rmap-wrap svg.rmap-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.rmap-track { fill: none; stroke: rgba(124,111,240,.16); stroke-width: 6; stroke-linecap: round; stroke-dasharray: 1 14; }
.rmap-route { fill: none; stroke: var(--lav-deep); stroke-width: 6; stroke-linecap: round; stroke-linejoin: round; filter: drop-shadow(0 3px 6px rgba(124,111,240,.4)); }
.rmap-runner { position: absolute; left: 0; top: 0; font-size: 34px; line-height: 1; z-index: 5; transform: translate(-50%,-62%); filter: drop-shadow(0 6px 10px rgba(20,24,27,.32)); transition: transform .1s linear; }
.rmap-km { position: absolute; z-index: 3; transform: translate(-50%,-50%); display: flex; flex-direction: column; align-items: center; gap: 4px; }
.rmap-km .dot { width: 13px; height: 13px; border-radius: 50%; background: #fff; border: 4px solid var(--lav); box-shadow: 0 3px 8px rgba(124,111,240,.35); }
.rmap-km.done .dot { background: var(--lav-deep); border-color: #fff; }
.rmap-km .lbl { font-family: var(--font-display); font-weight: 700; font-size: 11px; color: var(--ink-2); background: rgba(255,255,255,.8); padding: 1px 7px; border-radius: 999px; }
.rmap-start { position: absolute; z-index: 4; transform: translate(-50%,-50%); font-size: 26px; }
.rmap-finish { position: absolute; z-index: 4; transform: translate(-50%,-58%); font-size: 30px; filter: drop-shadow(0 5px 8px rgba(0,0,0,.25)); }
.rmap-prog {
  position: absolute; top: 14px; left: 14px; z-index: 8;
  display: flex; align-items: center; gap: 9px; padding: 9px 15px; border-radius: 999px;
  background: rgba(255,255,255,.78); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px);
  border: 1px solid rgba(255,255,255,.9); box-shadow: 0 10px 26px rgba(20,24,27,.14);
  font-family: var(--font-display); font-weight: 800; font-size: 16px; color: var(--ink); font-variant-numeric: tabular-nums;
}
.rmap-done-badge {
  position: absolute; left: 50%; bottom: 16px; transform: translate(-50%,26px); opacity: 0; z-index: 8;
  display: inline-flex; align-items: center; gap: 9px; padding: 11px 20px; border-radius: 999px;
  background: var(--grad); color: #fff; font-weight: 800; font-size: 15px; white-space: nowrap;
  box-shadow: 0 14px 34px rgba(124,111,240,.45);
}
.rmap-done-badge.on { animation: rmapPop .6s cubic-bezier(.2,1.5,.3,1) forwards; }
@keyframes rmapPop { to { opacity: 1; transform: translate(-50%,0); } }
.confetti-piece { position: fixed; z-index: 9998; pointer-events: none; border-radius: 2px; will-change: transform, opacity; }

/* ── Cities ── */
.cities { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.city {
  position: relative; border-radius: var(--r-lg); overflow: hidden; min-height: 320px;
  display: flex; flex-direction: column; justify-content: flex-end;
  border: 1px solid var(--line); box-shadow: 0 18px 44px rgba(20,24,27,.10);
  color: #fff;
}
.city-photo { position: absolute; inset: 0; background: linear-gradient(135deg, var(--lav), var(--lav-deep)); background-size: cover; background-position: center; }
.city-photo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(20,24,27,.15) 0%, rgba(20,24,27,.55) 60%, rgba(20,24,27,.82) 100%); }
.city-body { position: relative; padding: 26px; }
.city-badge {
  display: inline-flex; align-items: center; gap: 7px; align-self: flex-start;
  font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
  padding: 6px 12px; border-radius: 999px; margin-bottom: 12px;
}
.city.next .city-badge { background: var(--grad); color: #fff; box-shadow: 0 6px 16px rgba(124,111,240,.5); }
.city.soon .city-badge { background: rgba(255,255,255,.22); color: #fff; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.city.next { outline: 3px solid var(--lav-deep); outline-offset: 0; }
.city h3 { font-family: var(--font-display); font-weight: 800; font-size: 27px; }
.city .city-meta { font-size: 14px; color: rgba(255,255,255,.9); margin-top: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.city .city-date { display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,.16); padding: 4px 11px; border-radius: 999px; font-weight: 600; }
.city .glow-pulse { position: absolute; top: 18px; right: 18px; z-index: 2; width: 12px; height: 12px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 0 rgba(255,255,255,.8); animation: cityPulse 1.8s ease-out infinite; }
@keyframes cityPulse { 70% { box-shadow: 0 0 0 14px rgba(255,255,255,0); } 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0); } }

/* ── Photo gallery ── */
.race-gallery { display: grid; grid-template-columns: repeat(3,1fr); gap: 14px; }
.race-gallery figure { position: relative; border-radius: var(--r-lg); overflow: hidden; border: 1px solid var(--line); box-shadow: 0 16px 40px rgba(20,24,27,.1); aspect-ratio: 4/5; }
.race-gallery img { width: 100%; height: 100%; object-fit: cover; display: block; background: linear-gradient(135deg, var(--lav), var(--lav-deep)); }
.race-gallery figcaption { position: absolute; left: 12px; bottom: 12px; z-index: 2; color: #fff; font-weight: 700; font-size: 13px; text-shadow: 0 2px 8px rgba(0,0,0,.5); }
.race-gallery figure::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 55%, rgba(20,24,27,.55)); }

/* hero framed photo */
.race-hero-photo { margin-top: 34px; border-radius: var(--r-lg); overflow: hidden; border: 1px solid var(--line); box-shadow: 0 26px 64px rgba(20,24,27,.16); aspect-ratio: 16/7; background: linear-gradient(120deg, var(--lav), var(--lav-deep)); }
.race-hero-photo img { width: 100%; height: 100%; object-fit: cover; display: block; background: linear-gradient(120deg, var(--lav), var(--lav-deep)); }

/* ── Responsive ── */
@media (max-width: 900px) {
  .race-stats { grid-template-columns: 1fr 1fr; }
  .cities { grid-template-columns: 1fr; }
  .race-gallery { grid-template-columns: 1fr 1fr; }
  .race-gallery figure:first-child { grid-column: 1 / -1; aspect-ratio: 16/9; }
}
@media (max-width: 560px) {
  .race-stats { gap: 10px; }
  .rstat { padding: 20px 16px; }
  .run-lane .runner { font-size: 34px; }
  .rmap { min-height: 260vh; }
  .rmap-wrap { min-height: 280px; }
  .race-gallery { grid-template-columns: 1fr; }
  .race-gallery figure:first-child { aspect-ratio: 4/5; }
}
@media (prefers-reduced-motion: reduce) {
  .run-strip::after, .run-lane, .run-lane .runner, .city .glow-pulse { animation: none; }
}
