/* ===== ANIMATIONS — keyframes + scroll reveal ===== */

/* Scroll reveal */
.fu {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity .7s ease, transform .7s ease;
}
.fu.in { opacity: 1; transform: none; }

/* General */
@keyframes fadeUp   { from { opacity:0; transform:translateY(30px) } to { opacity:1; transform:none } }
@keyframes fadeIn   { from { opacity:0 } to { opacity:1 } }
@keyframes spin1    { to { transform:rotate(360deg) } }
@keyframes spin2    { to { transform:rotate(-360deg) } }
@keyframes bounce   {
  0%,100% { transform:rotate(45deg) translateY(0) }
  50%      { transform:rotate(45deg) translateY(6px) }
}
@keyframes kenBurns { from { transform:scale(1) } to { transform:scale(1.08) } }
@keyframes waPulse  {
  0%   { transform:scale(1);   opacity:.8 }
  100% { transform:scale(1.7); opacity:0  }
}
@keyframes waEntrance {
  to { opacity:1; transform:scale(1) }
}
@keyframes plDismiss { to { opacity:0; visibility:hidden; pointer-events:none } }
@keyframes plFill    { to { width:100% } }
@keyframes plLogoIn  { to { opacity:1; transform:scale(1) } }
@keyframes plLabelPulse {
  0%,100% { opacity:.6 }
  50%     { opacity:1  }
}
@keyframes marqueeScroll {
  from { transform:translateX(0) }
  to   { transform:translateX(-50%) }
}
@keyframes vpKenBurns {
  from { transform:scale(1) }
  to   { transform:scale(1.1) }
}
@keyframes vpFadeIn { from { opacity:0 } to { opacity:1 } }
@keyframes chatSlideUp {
  from { opacity:0; transform:translateY(20px) }
  to   { opacity:1; transform:none }
}
@keyframes chatBubbleIn {
  from { opacity:0; transform:scale(.85) }
  to   { opacity:1; transform:scale(1) }
}
@keyframes chatTyping {
  0%,80%,100% { transform:scale(0) }
  40%         { transform:scale(1) }
}
@keyframes shimmer {
  0%   { background-position:-200% 0 }
  100% { background-position: 200% 0 }
}
