/* animations.css — All keyframes and animation/transition utility classes */

/* ═══════════════════════════════════════════
   Curve constant used everywhere:
   cubic-bezier(0.16, 1, 0.3, 1) — spring ease-out
   ═══════════════════════════════════════════ */

/* ═══════════════════════════════════════════
   Keyframes
   ═══════════════════════════════════════════ */

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

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

@keyframes slideDown {
  from {
    opacity: 0;
    max-height: 0;
    padding-top: 0;
    padding-bottom: 0;
  }
  to {
    opacity: 1;
    max-height: 400px;
  }
}

@keyframes slideLeft {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0);
  }
}

@keyframes fadeRight {
  from {
    opacity: 1;
    transform: translateX(0) scale(1);
  }
  to {
    opacity: 0;
    transform: translateX(12px) scale(0.97);
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.3;
  }
}

@keyframes checkPop {
  0% {
    transform: scale(0.75);
  }
  50% {
    transform: scale(1.15);
  }
  100% {
    transform: scale(1);
  }
}

@keyframes bounceIn {
  0% {
    transform: scale(0.3);
    opacity: 0;
  }
  50% {
    transform: scale(1.08);
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes ripple {
  0% {
    transform: scale(0);
    opacity: 0.6;
  }
  100% {
    transform: scale(4);
    opacity: 0;
  }
}

/* ═══════════════════════════════════════════
   Utility Classes
   ═══════════════════════════════════════════ */

.fadeUp {
  animation: fadeUp 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.task-enter {
  animation: slideIn 0.2s cubic-bezier(0.16, 1, 0.3, 1) both;
}

/* .task-removing uses the styles defined in components.css
   (.task-item.removing) which applies the fadeRight visual;
   the keyframe is available here if needed via JS. */
