:root {
  --color-bg-void: #030208;
  --color-bg-deep: #07050f;
  --color-bg-base: #0c0916;
  --color-purple-deep: #4c1d95;
  --color-purple-primary: #6d28d9;
  --color-purple-bright: #8b5cf6;
  --color-neon-violet: #a855f7;
  --color-neon-violet-bright: #c084fc;
  --color-neon-magenta: #e879f9;
  --color-neon-magenta-bright: #f0abfc;
  --color-success: #34d399;
  --color-gold: #fbbf24;
  --color-gold-bright: #fde68a;
  --color-text-primary: #f5f2fa;
  --color-text-secondary: #d4cce8;
  --color-text-muted: #9b93b0;
  --color-neon-cyan: #22d3ee;
}

* { box-sizing: border-box; }
html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  overflow-x: hidden;
  background: var(--color-bg-void);
  color: var(--color-text-primary);
  font-family: 'Segoe UI', system-ui, -apple-system, Roboto, sans-serif;
  -webkit-tap-highlight-color: transparent;
}

body {
  min-height: 100vh;
  background:
    radial-gradient(ellipse 80% 60% at 50% -10%, rgba(168,85,247,0.28), transparent 60%),
    radial-gradient(ellipse 70% 50% at 90% 20%, rgba(232,121,249,0.14), transparent 60%),
    var(--color-bg-void);
  position: relative;
}

.bg-glow {
  position: fixed;
  border-radius: 50%;
  filter: blur(90px);
  opacity: 0.35;
  pointer-events: none;
  z-index: 0;
}
.bg-glow--1 { width: 420px; height: 420px; top: -120px; left: -100px; background: var(--color-purple-primary); }
.bg-glow--2 { width: 380px; height: 380px; bottom: -100px; right: -80px; background: var(--color-neon-magenta); }
.bg-glow--3 {
  width: 340px; height: 340px; top: 40%; left: 50%;
  transform: translateX(-50%);
  background: var(--color-neon-cyan);
  opacity: 0.16;
  animation: bgGlowDrift 9s ease-in-out infinite;
}
@keyframes bgGlowDrift {
  0%, 100% { transform: translateX(-50%) scale(1); opacity: 0.14; }
  50% { transform: translateX(-50%) scale(1.12); opacity: 0.22; }
}

.stars {
  position: fixed;
  inset: 0;
  background-image:
    radial-gradient(1px 1px at 20% 30%, rgba(255,255,255,0.5), transparent),
    radial-gradient(1px 1px at 70% 60%, rgba(255,255,255,0.4), transparent),
    radial-gradient(1px 1px at 40% 80%, rgba(255,255,255,0.35), transparent),
    radial-gradient(1px 1px at 85% 15%, rgba(255,255,255,0.4), transparent),
    radial-gradient(1px 1px at 55% 45%, rgba(255,255,255,0.3), transparent);
  background-size: 100% 100%;
  pointer-events: none;
  z-index: 0;
}

.topbar {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 18px;
}

.brand { display: flex; align-items: center; gap: 8px; font-weight: 800; letter-spacing: 0.06em; }
.brand-mark { color: var(--color-gold); font-size: 20px; text-shadow: 0 0 12px rgba(251,191,36,0.7); }
.brand-name { font-size: 15px; background: linear-gradient(90deg, var(--color-neon-violet-bright), var(--color-neon-magenta-bright)); -webkit-background-clip: text; background-clip: text; color: transparent; }

.lang-switch { display: flex; gap: 6px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.08); border-radius: 999px; padding: 3px; }
.lang-btn {
  background: transparent;
  border: none;
  color: var(--color-text-muted);
  font-size: 12px;
  font-weight: 700;
  padding: 5px 10px;
  border-radius: 999px;
  cursor: pointer;
}
.lang-btn.active { background: var(--color-purple-primary); color: #fff; }

.page {
  position: relative;
  z-index: 1;
  max-width: 560px;
  margin: 0 auto;
  padding: 6px 18px 30px;
  text-align: center;
}

/* Single hero focus: the headline carries the message alone. The urgency
   note is now a quiet, small footnote UNDER the subtitle — present, but
   never competing with the headline for attention. */
.urgency-note {
  display: inline-block;
  margin-top: 4px;
  color: var(--color-text-muted);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.02em;
  opacity: 0.85;
}

.hero-title {
  font-size: clamp(22px, 6.4vw, 34px);
  line-height: 1.18;
  margin: 6px 0 6px;
  font-weight: 800;
  text-shadow: 0 0 24px rgba(168,85,247,0.35);
}
.hero-title .accent {
  background: linear-gradient(90deg, var(--color-gold), var(--color-gold-bright), var(--color-gold));
  background-size: 200% auto;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: accentShimmer 2.6s linear infinite;
}
@keyframes accentShimmer {
  0% { background-position: 0% center; }
  100% { background-position: 200% center; }
}
.hero-sub {
  color: var(--color-text-secondary);
  font-size: 15px;
  margin: 0 auto 10px;
  max-width: 420px;
}

.wheel-section { margin: 18px 0 8px; }

.wheel-wrap {
  position: relative;
  width: min(86vw, 340px);
  height: min(86vw, 340px);
  margin: 0 auto;
}

.wheel-glow {
  position: absolute;
  inset: -14px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(168,85,247,0.5), transparent 70%);
  filter: blur(20px);
  animation: pulseGlow 2.4s ease-in-out infinite;
}
@keyframes pulseGlow {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50% { opacity: 0.9; transform: scale(1.05); }
}

/* Slowly rotating rainbow-mystic ring behind the wheel — frames the wheel
   as a "portal" into the game world. transform-only animation on a static
   conic-gradient, cheap on mobile GPUs. */
.wheel-portal-ring {
  position: absolute;
  inset: -34px;
  z-index: 0;
  border-radius: 50%;
  background: conic-gradient(
    from 0deg,
    var(--color-neon-violet),
    var(--color-neon-magenta),
    var(--color-neon-cyan),
    var(--color-gold),
    var(--color-neon-violet)
  );
  filter: blur(26px);
  opacity: 0.4;
  animation: portalSpin 14s linear infinite;
}
@keyframes portalSpin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Metallic gold rim — the "expensive prize wheel" bezel. Layered gradient +
   alternating light/dark box-shadows simulate a beveled metal edge without
   any image asset. Sits behind the canvas, slightly larger. */
.wheel-rim {
  position: absolute;
  inset: -10px;
  z-index: 1;
  border-radius: 50%;
  background: conic-gradient(
    from 0deg,
    #fde68a, #b45309, #fbbf24, #78350f, #fde68a, #b45309, #fbbf24, #78350f, #fde68a
  );
  box-shadow:
    0 0 0 2px rgba(255,251,235,0.5) inset,
    0 0 24px rgba(251,191,36,0.55),
    0 8px 18px rgba(0,0,0,0.5);
}
.wheel-rim::after {
  content: "";
  position: absolute;
  inset: 7px;
  border-radius: 50%;
  background: var(--color-bg-void);
}

#wheelCanvas {
  position: relative;
  z-index: 2;
  width: calc(100% - 14px);
  height: calc(100% - 14px);
  margin: 7px;
  border-radius: 50%;
  box-shadow:
    0 0 0 3px rgba(255,255,255,0.08),
    0 0 40px rgba(168,85,247,0.55),
    0 0 70px rgba(251,191,36,0.2),
    inset 0 0 34px rgba(0,0,0,0.45);
  transition: transform 4.6s cubic-bezier(0.12, 0.79, 0.1, 1);
}

/* Glass dome highlight over the wheel face — a soft offset white sheen,
   like light catching a curved glass cover. Pure gradient, no image. */
.wheel-glass {
  position: absolute;
  inset: 7px;
  z-index: 4;
  border-radius: 50%;
  pointer-events: none;
  background: radial-gradient(ellipse 70% 40% at 32% 20%, rgba(255,255,255,0.28), transparent 60%);
  mix-blend-mode: overlay;
}

.wheel-pointer {
  position: absolute;
  top: -6px;
  left: 50%;
  transform: translateX(-50%);
  width: 0;
  height: 0;
  border-left: 14px solid transparent;
  border-right: 14px solid transparent;
  border-top: 24px solid var(--color-gold);
  filter: drop-shadow(0 0 8px rgba(251,191,36,0.8));
  z-index: 5;
}

/* The single most important click target on the page — deliberately
   gold-dominant so it visually pops against the wheel's own violet/magenta
   segments instead of blending in as "just another wheel color." */
.spin-hub {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 104px;
  height: 104px;
  border-radius: 50%;
  border: 4px solid #fff8dc;
  background:
    radial-gradient(ellipse 60% 40% at 35% 22%, rgba(255,255,255,0.55), transparent 60%),
    radial-gradient(circle at 40% 35%, var(--color-gold-bright), var(--color-gold) 55%, #b45309 100%);
  color: #1a1029;
  font-weight: 900;
  font-size: 17px;
  letter-spacing: 0.03em;
  cursor: pointer;
  box-shadow: 0 0 34px rgba(251,191,36,0.85), 0 6px 18px rgba(0,0,0,0.55), inset 0 0 14px rgba(255,255,255,0.35);
  z-index: 6;
  animation: hubPulse 1.4s ease-in-out infinite;
  overflow: hidden;
  text-shadow: 0 1px 2px rgba(255,255,255,0.4);
}
.spin-hub:disabled { cursor: default; opacity: 0.85; animation: none; }
@keyframes hubPulse {
  0%, 100% { box-shadow: 0 0 26px rgba(251,191,36,0.7), 0 6px 18px rgba(0,0,0,0.55), inset 0 0 14px rgba(255,255,255,0.3); transform: translate(-50%, -50%) scale(1); }
  50% { box-shadow: 0 0 48px rgba(251,191,36,1), 0 6px 22px rgba(0,0,0,0.6), inset 0 0 20px rgba(255,255,255,0.45); transform: translate(-50%, -50%) scale(1.045); }
}

/* Thin gold ring + shimmer sweep inside the hub — extra "premium metal" cue. */
.spin-hub-ring {
  position: absolute;
  inset: 4px;
  border-radius: 50%;
  border: 1px solid rgba(255,251,235,0.5);
  pointer-events: none;
}
.spin-hub-ring::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: conic-gradient(from 0deg, transparent 0%, rgba(255,255,255,0.5) 8%, transparent 16%);
  animation: hubRingSweep 3.4s linear infinite;
}
@keyframes hubRingSweep {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.spin-hub-label { position: relative; z-index: 1; }

.spin-hint {
  margin-top: 14px;
  color: var(--color-text-muted);
  font-size: 13px;
}

/* ── Social proof strip ── players-online pulse + star rating.
   Illustrative motion design (industry-standard prelander convention) —
   presented as ambient chrome, not an audited statistic. */
.social-strip {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px 16px;
  margin: 10px 0 6px;
  font-size: 12px;
  color: var(--color-text-secondary);
}
.social-online {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(52,211,153,0.3);
  border-radius: 999px;
  padding: 5px 12px;
}
.social-online-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--color-success);
  box-shadow: 0 0 8px rgba(52,211,153,0.8);
  animation: onlineDotPulse 1.4s ease-in-out infinite;
}
@keyframes onlineDotPulse {
  0%, 100% { opacity: 0.6; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.3); }
}
.social-online #onlineCount { color: var(--color-text-primary); font-weight: 700; }
.social-rating {
  color: var(--color-gold-bright);
  font-weight: 700;
  letter-spacing: 0.01em;
}

/* Recent-wins ticker — rotates through short illustrative lines. */
.win-ticker-wrap {
  max-width: 340px;
  margin: 0 auto 4px;
  overflow: hidden;
  border-radius: 999px;
  background: rgba(255,255,255,0.035);
  border: 1px solid rgba(251,191,36,0.18);
}
.win-ticker {
  padding: 6px 16px;
  font-size: 12px;
  color: var(--color-text-secondary);
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  animation: tickerFade 0.4s ease-in;
}
@keyframes tickerFade {
  0% { opacity: 0; transform: translateY(4px); }
  100% { opacity: 1; transform: translateY(0); }
}
.win-ticker .amt { color: var(--color-gold-bright); font-weight: 700; }

/* ── Trust badges ── compact glass pills, real features only. */
.trust-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
  margin: 20px 0 4px;
}
.trust-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: rgba(255,255,255,0.045);
  backdrop-filter: blur(6px);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 999px;
  padding: 7px 13px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--color-text-secondary);
  box-shadow: 0 0 14px rgba(168,85,247,0.12);
}
.trust-icon { width: 14px; height: 14px; flex-shrink: 0; color: var(--color-gold-bright); }

/* ── Why AmuletDrop — premium glass feature cards, our real advantages. ── */
.features-section { margin: 30px 0 10px; }
.features-kicker {
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-neon-violet-bright);
  text-shadow: 0 0 12px rgba(168,85,247,0.5);
  margin: 0 0 14px;
}
.features-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
}
.feature-card {
  position: relative;
  text-align: left;
  padding: 16px 16px 15px;
  border-radius: 16px;
  background: linear-gradient(160deg, rgba(255,255,255,0.055), rgba(255,255,255,0.015));
  backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,0.1);
  box-shadow: 0 8px 24px rgba(0,0,0,0.35), 0 0 0 1px rgba(255,255,255,0.02) inset;
  overflow: hidden;
  animation: featureBreathe 4.5s ease-in-out infinite;
}
.feature-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 15% 0%, rgba(168,85,247,0.16), transparent 55%);
  pointer-events: none;
}
.feature-card--secondary:nth-of-type(2) { animation-delay: 0.4s; }
.feature-card--secondary:nth-of-type(3) { animation-delay: 0.8s; }
@keyframes featureBreathe {
  0%, 100% { box-shadow: 0 8px 24px rgba(0,0,0,0.35), 0 0 0 1px rgba(255,255,255,0.02) inset; }
  50% { box-shadow: 0 8px 30px rgba(168,85,247,0.22), 0 0 0 1px rgba(255,255,255,0.04) inset; }
}

/* Hierarchy: the hero card (our unique games) leads — bigger, gold-bordered,
   spans the full grid width. Secondary cards are visibly quieter. */
.feature-card--hero {
  grid-column: 1 / -1;
  padding: 22px 22px 20px;
  border: 1px solid rgba(251,191,36,0.4);
  background: linear-gradient(160deg, rgba(139,92,246,0.16), rgba(180,83,9,0.08));
  box-shadow: 0 10px 30px rgba(0,0,0,0.4), 0 0 24px rgba(251,191,36,0.15);
}
.feature-card--hero .feature-icon {
  width: 34px;
  height: 34px;
  color: var(--color-gold-bright);
}
.feature-card--hero .feature-title {
  font-size: 18px;
}
.feature-card--hero .feature-desc {
  font-size: 13.5px;
}
.feature-card--secondary {
  opacity: 0.92;
}
.feature-card--secondary .feature-icon--sm {
  width: 22px;
  height: 22px;
}

.feature-icon {
  display: inline-block;
  width: 26px;
  height: 26px;
  margin-bottom: 8px;
  color: var(--color-neon-violet-bright);
  filter: drop-shadow(0 0 8px rgba(168,85,247,0.4));
}
.feature-title {
  font-size: 14.5px;
  font-weight: 800;
  margin: 0 0 4px;
  color: var(--color-text-primary);
}
.feature-desc {
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--color-text-secondary);
  margin: 0;
}

@media (min-width: 560px) {
  .features-grid { grid-template-columns: 1fr 1fr; }
}

/* Final CTA — every scroll depth needs a way to convert, not just the wheel. */
.final-cta {
  margin: 34px 0 6px;
  padding: 22px 20px;
  border-radius: 18px;
  background: linear-gradient(160deg, rgba(109,40,217,0.28), rgba(76,29,149,0.14));
  border: 1px solid rgba(192,132,252,0.3);
  box-shadow: 0 0 30px rgba(168,85,247,0.15);
}
.final-cta-heading {
  font-size: 17px;
  font-weight: 800;
  margin: 0 0 4px;
  color: var(--color-text-primary);
}
.final-cta-sub {
  font-size: 13px;
  color: var(--color-text-secondary);
  margin: 0 0 16px;
}
.final-cta .claim-btn { animation: claimPulse 1.2s ease-in-out infinite; }

.disclaimer {
  font-size: 11px;
  color: var(--color-text-muted);
  opacity: 0.7;
  margin-top: 10px;
}

/* Win modal */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(3,2,8,0.86);
  backdrop-filter: blur(6px);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 50;
  padding: 20px;
}
.modal-overlay.visible { display: flex; }

.modal-card {
  position: relative;
  width: 100%;
  max-width: 380px;
  background: linear-gradient(160deg, rgba(76,29,149,0.55), rgba(7,5,15,0.95));
  border: 1px solid rgba(192,132,252,0.4);
  border-radius: 20px;
  padding: 30px 24px 26px;
  text-align: center;
  box-shadow: 0 0 60px rgba(168,85,247,0.45);
  animation: modalPop 0.45s cubic-bezier(0.2, 0.9, 0.3, 1.2);
  overflow: hidden;
}
@keyframes modalPop {
  0% { transform: scale(0.7); opacity: 0; }
  100% { transform: scale(1); opacity: 1; }
}

/* Win moment burst — flash + rotating gold rays + JS-fired confetti chips.
   All transform/opacity animations, fire once on modal open (no infinite
   loop needed) except the rays, which spin briefly then get removed by JS
   via a CSS animation-iteration count so they don't run forever unseen. */
.modal-flash {
  position: absolute;
  inset: 0;
  border-radius: 20px;
  background: radial-gradient(circle at 50% 32%, rgba(255,215,0,0.4), transparent 60%);
  opacity: 0;
  pointer-events: none;
  animation: modalFlash 0.9s ease-out;
}
@keyframes modalFlash {
  0% { opacity: 0.95; transform: scale(0.6); }
  100% { opacity: 0; transform: scale(1.5); }
}

.modal-ray-burst {
  position: absolute;
  inset: -50%;
  pointer-events: none;
  opacity: 0.55;
  background: conic-gradient(
    from 0deg,
    transparent 0deg, rgba(251,191,36,0.35) 6deg, transparent 14deg,
    transparent 56deg, rgba(251,191,36,0.3) 62deg, transparent 70deg,
    transparent 112deg, rgba(251,191,36,0.32) 118deg, transparent 126deg,
    transparent 168deg, rgba(251,191,36,0.3) 174deg, transparent 182deg,
    transparent 224deg, rgba(251,191,36,0.32) 230deg, transparent 238deg,
    transparent 280deg, rgba(251,191,36,0.3) 286deg, transparent 294deg,
    transparent 360deg
  );
  animation: rayBurstSpin 5s linear infinite;
}
@keyframes rayBurstSpin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Confetti chips — populated by JS at win time (frontend/js/app.js fireConfetti()). */
.modal-confetti {
  position: absolute;
  inset: 0;
  overflow: visible;
  pointer-events: none;
  z-index: 3;
}
.confetti-particle {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 7px;
  height: 7px;
  border-radius: 2px;
  background: var(--particle-color, #fbbf24);
  box-shadow: 0 0 6px var(--particle-color, #fbbf24);
  opacity: 0;
  animation: confettiFly 1.15s cubic-bezier(0.15, 0.8, 0.3, 1) forwards;
  animation-delay: var(--delay, 0s);
}
@keyframes confettiFly {
  0% { transform: translate(-50%, -50%) scale(0.3) rotate(0deg); opacity: 1; }
  100% {
    transform: translate(calc(-50% + var(--tx, 0px)), calc(-50% + var(--ty, 0px))) scale(1) rotate(var(--rot, 180deg));
    opacity: 0;
  }
}

/* Staged win reveal — a real "you won" moment first (big congrats burst),
   THEN the bonus offer + CTA fade in. Two-stage sequence driven by
   triggerWinBurst()/revealOffer() in app.js. */
.modal-congrats-stage {
  position: relative;
  z-index: 2;
  padding: 24px 0 20px;
  animation: congratsPop 0.5s cubic-bezier(0.2, 0.9, 0.3, 1.2);
}
.modal-congrats-stage.exit {
  animation: congratsExit 0.4s ease forwards;
}
.modal-congrats-burst {
  display: block;
  font-size: 25px;
  font-weight: 900;
  letter-spacing: 0.01em;
  background: linear-gradient(90deg, var(--color-gold-bright), var(--color-gold), var(--color-gold-bright));
  background-size: 200% auto;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: congratsShake 0.6s ease-in-out, accentShimmer 2s linear infinite;
}
.modal-congrats-sub {
  display: block;
  margin-top: 10px;
  font-size: 13.5px;
  color: var(--color-text-secondary);
}
@keyframes congratsPop {
  0% { transform: scale(0.4); opacity: 0; }
  100% { transform: scale(1); opacity: 1; }
}
@keyframes congratsExit {
  from { opacity: 1; transform: scale(1); }
  to { opacity: 0; transform: scale(0.85); }
}
@keyframes congratsShake {
  0%, 100% { transform: rotate(0); }
  20% { transform: rotate(-3deg); }
  40% { transform: rotate(3deg); }
  60% { transform: rotate(-2deg); }
  80% { transform: rotate(2deg); }
}

.modal-offer-stage { display: none; }
.modal-offer-stage.revealed {
  display: block;
  animation: offerReveal 0.5s ease both;
}
@keyframes offerReveal {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

.modal-badge {
  display: inline-block;
  background: var(--color-gold);
  color: #1a1029;
  font-weight: 800;
  font-size: 12px;
  letter-spacing: 0.08em;
  padding: 5px 14px;
  border-radius: 999px;
  margin-bottom: 14px;
}

.modal-prize {
  font-size: 30px;
  font-weight: 800;
  margin: 0 0 10px;
  background: linear-gradient(90deg, var(--color-gold-bright), var(--color-gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.modal-copy {
  font-size: 14px;
  color: var(--color-text-secondary);
  margin: 0 0 22px;
}

.claim-btn {
  position: relative;
  display: block;
  width: 100%;
  padding: 18px 10px;
  border-radius: 14px;
  border: 2px solid rgba(251,191,36,0.7);
  background: linear-gradient(90deg, var(--color-neon-magenta), var(--color-purple-primary));
  color: #fff;
  font-weight: 800;
  font-size: 17px;
  letter-spacing: 0.03em;
  text-decoration: none;
  text-transform: uppercase;
  box-shadow: 0 8px 34px rgba(232,121,249,0.5), 0 0 24px rgba(251,191,36,0.35);
  animation: claimPulse 1.2s ease-in-out infinite;
  overflow: hidden;
}
.claim-btn::before {
  content: "";
  position: absolute;
  top: 0;
  left: -60%;
  width: 45%;
  height: 100%;
  background: linear-gradient(115deg, transparent, rgba(255,255,255,0.55), transparent);
  animation: claimSweep 2.2s ease-in-out infinite;
}
@keyframes claimPulse {
  0%, 100% { transform: scale(1); box-shadow: 0 8px 30px rgba(232,121,249,0.45), 0 0 18px rgba(251,191,36,0.3); }
  50% { transform: scale(1.035); box-shadow: 0 10px 40px rgba(232,121,249,0.6), 0 0 30px rgba(251,191,36,0.6); }
}
@keyframes claimSweep {
  0% { left: -60%; }
  60%, 100% { left: 130%; }
}

.modal-timer {
  margin: 16px 0 0;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--color-text-secondary);
  letter-spacing: 0.02em;
}
#countdown {
  display: inline-block;
  color: var(--color-gold-bright);
  font-weight: 800;
  font-size: 16px;
  text-shadow: 0 0 10px rgba(251,191,36,0.6);
  animation: countdownPulse 1s ease-in-out infinite;
}
@keyframes countdownPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}
/* Last 60 seconds — JS adds this class for maximum urgency. */
.modal-timer--critical {
  color: var(--color-neon-magenta-bright);
}
.modal-timer--critical #countdown {
  color: #ff6b6b;
  text-shadow: 0 0 14px rgba(255,107,107,0.75);
  animation: countdownCritical 0.5s ease-in-out infinite;
}
@keyframes countdownCritical {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.16); }
}

/* =====================================================================
   MYSTIC ATMOSPHERE — ambient, decorative, pure CSS (no images).
   Floating previews of the real in-house games so cold traffic senses a
   whole unique world behind the wheel. Fixed to the viewport so it reads
   as "the page floats in a bigger space," not tied to page scroll length.
   pointer-events: none throughout — must never intercept a tap.
   ===================================================================== */
.mystic-atmosphere {
  position: fixed;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}

/* Slow horizontal fog bands drifting behind everything for depth. */
.fog-band {
  position: absolute;
  left: -20%;
  width: 140%;
  height: 140px;
  background: linear-gradient(90deg, transparent, rgba(168,85,247,0.07), transparent);
  filter: blur(2px);
}
.fog-band--a { top: 18%; animation: fogDrift 26s linear infinite; }
.fog-band--b { top: 62%; background: linear-gradient(90deg, transparent, rgba(232,121,249,0.06), transparent); animation: fogDrift 34s linear infinite reverse; }
@keyframes fogDrift {
  0% { transform: translateX(-6%); }
  50% { transform: translateX(6%); }
  100% { transform: translateX(-6%); }
}

/* Drifting mystic dust motes — cyan/violet/magenta family, staggered. */
.mote {
  position: absolute;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(224,242,254,0.9) 0%, rgba(103,232,249,0.5) 55%, transparent 100%);
  animation: moteFloat 7s ease-in-out infinite;
}
.mote--1 { top: 12%; left: 8%; animation-delay: 0s; }
.mote--2 { top: 22%; left: 88%; animation-delay: 0.8s; background: radial-gradient(circle, rgba(240,171,252,0.9), rgba(232,121,249,0.5) 55%, transparent 100%); }
.mote--3 { top: 40%; left: 5%; animation-delay: 1.6s; }
.mote--4 { top: 55%; left: 92%; animation-delay: 2.4s; background: radial-gradient(circle, rgba(253,230,138,0.9), rgba(251,191,36,0.5) 55%, transparent 100%); }
.mote--5 { top: 70%; left: 10%; animation-delay: 3.2s; background: radial-gradient(circle, rgba(240,171,252,0.9), rgba(232,121,249,0.5) 55%, transparent 100%); }
.mote--6 { top: 82%; left: 85%; animation-delay: 4s; }
.mote--7 { top: 30%; left: 50%; animation-delay: 4.8s; background: radial-gradient(circle, rgba(253,230,138,0.9), rgba(251,191,36,0.5) 55%, transparent 100%); }
.mote--8 { top: 90%; left: 45%; animation-delay: 5.6s; }
@keyframes moteFloat {
  0%, 100% { transform: translate(0, 0); opacity: 0.15; }
  33% { transform: translate(8px, -18px); opacity: 0.75; }
  66% { transform: translate(-6px, -28px); opacity: 0.35; }
}

/* Floating game-preview "portals" — small CSS-art badges hinting at the
   real games (Crash/magma, Roulette, Mines/crystal, Chicken Road), framed
   like glowing windows into another world. Anchored near the viewport
   corners so they never sit over the hero copy, wheel, or CTA. */
.game-portal {
  position: absolute;
  width: 96px;
  height: 96px;
  border-radius: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(255,255,255,0.1);
  overflow: hidden;
  animation: portalDrift 7s ease-in-out infinite;
}
.game-portal-tag {
  position: absolute;
  bottom: 6px;
  left: 0;
  right: 0;
  text-align: center;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: rgba(245,242,250,0.85);
  text-shadow: 0 1px 3px rgba(0,0,0,0.8);
}
@keyframes portalDrift {
  0%, 100% { transform: translateY(0) rotate(var(--portal-tilt, -4deg)); }
  50% { transform: translateY(-10px) rotate(var(--portal-tilt, -4deg)); }
}

/* Crash / magma */
.game-portal--crash {
  --portal-tilt: -7deg;
  top: 8%;
  left: -16px;
  background: linear-gradient(165deg, rgba(20,5,0,0.92) 0%, rgba(120,30,0,0.55) 45%, rgba(60,10,0,0.92) 100%);
  box-shadow: 0 0 26px rgba(237,100,50,0.35);
  animation-delay: 0s;
}
.game-portal-glow {
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 50% 78%, rgba(255,120,40,0.5), transparent 55%);
}
.game-portal-core {
  position: absolute;
  bottom: 24px;
  left: 50%;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  transform: translateX(-50%);
  background: radial-gradient(circle, #fefcbf 0%, #ed8936 45%, #c05621 100%);
  box-shadow: 0 0 14px rgba(237,100,40,0.7);
  animation: portalCorePulse 2s ease-in-out infinite;
}
@keyframes portalCorePulse {
  0%, 100% { transform: translateX(-50%) scale(1); opacity: 0.9; }
  50% { transform: translateX(-50%) scale(1.15); opacity: 1; }
}

/* Mines / crystal */
.game-portal--crystal {
  --portal-tilt: -5deg;
  bottom: 10%;
  left: -18px;
  background: linear-gradient(165deg, rgba(26,40,72,0.95), rgba(10,16,32,0.98));
  box-shadow: 0 0 26px rgba(103,232,249,0.3);
  animation-delay: 2.8s;
}
.game-portal-gem {
  width: 30px;
  height: 30px;
  background: linear-gradient(160deg, #e0f2fe, #67e8f9 45%, #7c3aed);
  clip-path: polygon(50% 0%, 100% 38%, 78% 100%, 22% 100%, 0% 38%);
  box-shadow: 0 0 10px rgba(103,232,249,0.6);
  animation: portalGemShimmer 2.6s ease-in-out infinite;
}
.game-portal-shimmer {
  position: absolute;
  inset: 0;
  background: radial-gradient(circle, rgba(192,132,252,0.4), transparent 70%);
}
@keyframes portalGemShimmer {
  0%, 100% { opacity: 0.85; filter: drop-shadow(0 0 4px rgba(103,232,249,0.5)); }
  50% { opacity: 1; filter: drop-shadow(0 0 10px rgba(192,132,252,0.75)); }
}

/* Falling gold coins — "wealth awaits" treasure atmosphere. Transform +
   opacity only (no per-frame filter recalculation), cheap on mobile GPUs. */
.coin {
  position: absolute;
  top: -10vh;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, #fff8dc 0%, #fde68a 30%, #fbbf24 60%, #b45309 100%);
  box-shadow: 0 0 8px rgba(251,191,36,0.55), inset 0 0 4px rgba(255,255,255,0.5);
  opacity: 0;
  animation: coinFall linear infinite;
}
.coin::after {
  content: "";
  position: absolute;
  inset: 3px;
  border-radius: 50%;
  border: 1px dashed rgba(180,83,9,0.55);
}
@keyframes coinFall {
  0% { transform: translateY(0) translateX(0) rotate(0deg); opacity: 0; }
  8% { opacity: 0.8; }
  92% { opacity: 0.8; }
  100% { transform: translateY(120vh) translateX(var(--drift, 24px)) rotate(360deg); opacity: 0; }
}
.coin--1 { left: 8%;  width: 16px; height: 16px; --drift: 18px;  animation-duration: 9s;  animation-delay: 0s; }
.coin--2 { left: 26%; width: 20px; height: 20px; --drift: -20px; animation-duration: 11s; animation-delay: 2s; }
.coin--3 { left: 50%; width: 14px; height: 14px; --drift: 14px;  animation-duration: 8s;  animation-delay: 4s; }
.coin--4 { left: 74%; width: 18px; height: 18px; --drift: -16px; animation-duration: 10s; animation-delay: 1s; }
.coin--5 { left: 90%; width: 15px; height: 15px; --drift: 16px;  animation-duration: 9.5s; animation-delay: 3s; }

/* Smaller viewports (the majority of paid FB/Telegram traffic): shrink the
   portals and tuck them further off-screen so they read as glowing edge
   accents rather than competing with the wheel/CTA for thumb space. */
@media (max-width: 480px) {
  .game-portal { width: 58px; height: 58px; border-radius: 14px; }
  .game-portal-tag { font-size: 8px; bottom: 4px; }
  .game-portal--crash { left: -20px; }
  .game-portal--crystal { left: -14px; }
  .game-portal-gem { width: 20px; height: 20px; }
  .game-portal-core { width: 14px; height: 14px; bottom: 16px; }
  .fog-band { height: 90px; }
  .features-grid { gap: 10px; }
  .feature-card { padding: 14px 14px 13px; }
  .feature-card--hero { padding: 18px 18px 16px; }
  .spin-hub { width: 88px; height: 88px; font-size: 15px; }
  .final-cta { padding: 18px 16px; }
}

/* Respect reduced-motion preference — freeze ambient decoration, keep the
   wheel spin (user-initiated) working normally. */
@media (prefers-reduced-motion: reduce) {
  .bg-glow--3,
  .wheel-portal-ring,
  .fog-band,
  .mote,
  .coin,
  .game-portal,
  .game-portal-core,
  .game-portal-gem,
  .hero-title .accent,
  .claim-btn,
  .claim-btn::before,
  #countdown,
  .modal-timer--critical #countdown,
  .modal-ray-burst,
  .confetti-particle,
  .social-online-dot,
  .feature-card,
  .spin-hub,
  .spin-hub-ring::before,
  .modal-congrats-burst,
  .modal-congrats-stage,
  .modal-congrats-stage.exit,
  .modal-offer-stage.revealed {
    animation: none !important;
  }
}
