/* ============================================================
   animations.css — keyframes & utility animation classes
   ============================================================ */

@keyframes gradientShift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

@keyframes blobFloat {
  0%   { transform: translate(0, 0) scale(1); }
  33%  { transform: translate(6vmax, -4vmax) scale(1.1); }
  66%  { transform: translate(-5vmax, 5vmax) scale(0.95); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes heartbeat {
  0%, 100% { transform: scale(1); }
  14%      { transform: scale(1.18); }
  28%      { transform: scale(1); }
  42%      { transform: scale(1.12); }
  56%      { transform: scale(1); }
}

@keyframes dotBlink {
  0%, 100% { opacity: 0.2; }
  50%      { opacity: 1; }
}

@keyframes caretBlink {
  0%, 49%   { opacity: 1; }
  50%, 100% { opacity: 0; }
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.7; transform: scale(0.97); }
}

@keyframes trailFade {
  from { opacity: 0.9; transform: translate(-50%, -50%) scale(1); }
  to   { opacity: 0; transform: translate(-50%, -120%) scale(0.4); }
}

@keyframes popIn {
  0%   { transform: scale(1); }
  45%  { transform: scale(1.16); }
  100% { transform: scale(1); }
}

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20%      { transform: translateX(-10px); }
  40%      { transform: translateX(10px); }
  60%      { transform: translateX(-7px); }
  80%      { transform: translateX(7px); }
}

/* ---------- utility classes toggled by JS ---------- */
.pop { animation: popIn 0.4s var(--ease); }
.shake { animation: shake 0.45s ease; }

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  .bg-gradient { animation: none; }
  .screen { transition: opacity 0.2s ease, visibility 0.2s; transform: none !important; }
}
