/* =========================================================
   Keyframes
   ========================================================= */

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

@keyframes fadeInScale {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

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

@keyframes pulseSlow {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(0, 104, 71, 0.4);
  }
  50% {
    box-shadow: 0 0 0 16px rgba(0, 104, 71, 0);
  }
}

@keyframes bounce {
  0%, 100% {
    transform: translateY(0);
    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
  }
  50% {
    transform: translateY(-12px);
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes scanLine {
  0% {
    top: 12px;
    opacity: 1;
  }
  50% {
    opacity: 1;
  }
  100% {
    top: calc(100% - 14px);
    opacity: 0.3;
  }
}

@keyframes checkmark {
  0% {
    stroke-dashoffset: 50;
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  100% {
    stroke-dashoffset: 0;
    opacity: 1;
  }
}

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

@keyframes glowPrimary {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(0, 104, 71, 0);
  }
  50% {
    box-shadow: 0 0 24px 4px rgba(0, 104, 71, 0.4);
  }
}

@keyframes glowAccent {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(212, 160, 23, 0);
  }
  50% {
    box-shadow: 0 0 24px 4px rgba(212, 160, 23, 0.35);
  }
}

/* =========================================================
   Classes de animação
   ========================================================= */

.animate-fade-in {
  animation: fadeIn 0.4s ease forwards;
}

.animate-fade-in-scale {
  animation: fadeInScale 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.animate-pulse {
  animation: pulse 2s ease-in-out infinite;
}

.animate-pulse-slow {
  animation: pulseSlow 2.5s ease-in-out infinite;
}

.animate-bounce {
  animation: bounce 1.2s infinite;
}

.animate-spin {
  animation: spin 0.7s linear infinite;
}

.animate-shake {
  animation: shake 0.5s ease-in-out;
}

.animate-glow-primary {
  animation: glowPrimary 2.5s ease-in-out infinite;
}

.animate-glow-accent {
  animation: glowAccent 2.5s ease-in-out infinite;
}

/* Delays */
.animation-delay-100 { animation-delay: 100ms; }
.animation-delay-200 { animation-delay: 200ms; }
.animation-delay-300 { animation-delay: 300ms; }
.animation-delay-400 { animation-delay: 400ms; }
