/* Animaciones reutilizables — timing basado en principios de animación
   Disney aplicados a micro-interacciones (100-300ms, ease-out, squash & stretch) */

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

@keyframes fadeScaleIn {
  from { opacity: 0; transform: scale(0.94); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes popIn {
  0%   { opacity: 0; transform: scale(0.8); }
  60%  { opacity: 1; transform: scale(1.04); }
  100% { opacity: 1; transform: scale(1); }
}

@keyframes softPulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.06); opacity: 0.85; }
}

@keyframes shimmerSweep {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

.anim-fade-slide-up { animation: fadeSlideUp 320ms cubic-bezier(0.22, 1, 0.36, 1) both; }
.anim-fade-scale-in { animation: fadeScaleIn 280ms cubic-bezier(0.22, 1, 0.36, 1) both; }
.anim-pop-in        { animation: popIn 420ms cubic-bezier(0.22, 1, 0.36, 1) both; }
.anim-soft-pulse     { animation: softPulse 1.6s ease-in-out infinite; }

.tap-feedback {
  transition: transform 100ms ease-out, box-shadow 100ms ease-out, background-color 150ms ease-out, border-color 150ms ease-out;
}
.tap-feedback:active {
  transform: scale(0.97);
}

@media (prefers-reduced-motion: reduce) {
  .anim-fade-slide-up,
  .anim-fade-scale-in,
  .anim-pop-in,
  .anim-soft-pulse {
    animation: none !important;
  }
  .tap-feedback {
    transition: none !important;
  }
}
