/* ============================================================
   SIGNA — animations.css · all keyframes + motion utilities
   Rule: nothing longer than 800ms; loops only when idle.
   ============================================================ */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes tipIn {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes sheetUp {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
@keyframes popIn {
  0% { opacity: 0; transform: scale(0.92); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes siggyBounce {
  0%, 100% { transform: translateY(0); }
  30% { transform: translateY(-14px) rotate(-2deg); }
  55% { transform: translateY(0); }
  75% { transform: translateY(-8px) rotate(2deg); }
}
@keyframes siggyIdle {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-5px) rotate(1deg); }
}
@keyframes pulseViolet {
  0%, 100% { box-shadow: 0 0 0 0 rgba(88, 204, 2, 0); border-color: var(--border); }
  50% { box-shadow: 0 0 0 6px rgba(88, 204, 2, 0.20); border-color: var(--accent); }
}
@keyframes dayPop { from { transform: scale(0); } to { transform: scale(1); } }
@keyframes badgePop {
  0% { transform: scale(0.4); } 60% { transform: scale(1.18); } 100% { transform: scale(1); }
}
@keyframes confettiFall {
  0% { opacity: 1; transform: translate(0, 0) rotate(0deg); }
  100% { opacity: 0; transform: translate(var(--cx), var(--cy)) rotate(var(--cr)); }
}
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes wave {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(9deg); }
  75% { transform: rotate(-7deg); }
}
@keyframes blinkDot { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }

.anim-fade-up { animation: fadeUp 300ms var(--ease-out) both; }
.anim-fade-in { animation: fadeIn 250ms var(--ease-out) both; }
.anim-pop { animation: popIn 260ms var(--ease-out) both; }
.screen-enter { animation: fadeUp 300ms var(--ease-out) both; }
.tip-enter { animation: tipIn 250ms var(--ease-out) both; }
.unlock-pulse { animation: pulseViolet 1s var(--ease-inout) 2; }
.badge-pop { animation: badgePop 500ms var(--ease-out) both; }
.day-pop { animation: dayPop 300ms var(--ease-out) both; }

.siggy-bounce { animation: siggyBounce 600ms var(--ease-out) 3; }
.siggy-idle { animation: siggyIdle 3.2s ease-in-out infinite; transform-origin: 50% 85%; }
.hand-wave { animation: wave 1.4s ease-in-out infinite; transform-origin: 50% 90%; }
.spinner {
  width: 22px; height: 22px; border-radius: 50%;
  border: 3px solid var(--border); border-top-color: var(--accent);
  animation: spin 700ms linear infinite;
}
.live-dot { animation: blinkDot 1.6s ease-in-out infinite; }

.confetti-piece {
  position: fixed; z-index: 300; width: 9px; height: 13px;
  border-radius: 2px; pointer-events: none;
  animation: confettiFall 800ms var(--ease-out) both;
}

/* Landing scroll-reveal */
.reveal { opacity: 0; transform: translateY(22px); }
.reveal.is-visible { opacity: 1; transform: none; transition: opacity 500ms var(--ease-out), transform 500ms var(--ease-out); }
