/* ═══════════════════════════════════════════════════════════
   ANIMATIONS.CSS — Purple Pill Project
   All @keyframes live here. One file, zero hunting.
═══════════════════════════════════════════════════════════ */

/* ── Entrance Animations ───────────────────────────────── */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* ── Scroll Hint ───────────────────────────────────────── */
@keyframes scrollPulse {
  0%, 100% { opacity: 0.4; transform: scaleY(1); }
  50%       { opacity: 1;   transform: scaleY(1.1); }
}

/* ── Stats Ticker ──────────────────────────────────────── */
@keyframes ticker {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* ── Glitch Effect ─────────────────────────────────────── */
@keyframes glitchShift {
  0%,  100% { clip-path: inset(0 0 100% 0); transform: translate(0); }
  5%         { clip-path: inset(5% 0 60% 0); transform: translate(-4px, 2px); }
  10%        { clip-path: inset(30% 0 40% 0); transform: translate(3px, -1px); }
  15%        { clip-path: inset(50% 0 20% 0); transform: translate(-2px, 3px); }
  20%        { clip-path: inset(70% 0 5% 0);  transform: translate(4px, 0); }
  25%        { clip-path: inset(0 0 100% 0); transform: translate(0); }
}

@keyframes glitchFlash {
  0%, 100% { opacity: 0; }
  50%       { opacity: 0.7; }
}

/* ── Globe ─────────────────────────────────────────────── */
@keyframes globePulse {
  0%, 100% { opacity: 0.4; transform: scale(1); }
  50%       { opacity: 1;   transform: scale(1.015); }
}

/* ── Den Preview ambient pulse ─────────────────────────── */
@keyframes ambientPulse {
  0%, 100% { box-shadow: 0 0 40px rgba(139,0,20,0.2), 0 0 80px rgba(148,0,211,0.1); }
  50%       { box-shadow: 0 0 60px rgba(139,0,20,0.4), 0 0 120px rgba(148,0,211,0.2); }
}

/* ── Gallery card shimmer ──────────────────────────────── */
@keyframes shimmer {
  from { background-position: -200% 0; }
  to   { background-position: 200% 0; }
}

/* ── Access Granted flash ──────────────────────────────── */
@keyframes accessGranted {
  0%   { opacity: 0; transform: scale(0.95); }
  60%  { opacity: 1; transform: scale(1.02); }
  100% { opacity: 1; transform: scale(1); }
}
