/* ============================================================
   SmartTools Hub — animations.css
   ============================================================ */

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

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

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

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

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-12px); }
}

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

@keyframes gradientShift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* utility classes */
.fade-in-up { animation: fadeInUp 0.6s ease both; }
.float-anim { animation: float 4s ease-in-out infinite; }
.pulse-anim { animation: pulse 2s ease-in-out infinite; }

.animated-gradient {
  background-size: 200% 200%;
  animation: gradientShift 6s ease infinite;
}

/* Reveal on scroll fallback (AOS handles most) */
[data-anim] { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; }
[data-anim].in { opacity: 1; transform: translateY(0); }

/* Hover icon wiggle */
.tool-card:hover .tool-icon { animation: pulse 1.2s ease-in-out infinite; }

/* Number counter */
.count-up { display: inline-block; }

/* Loading dots */
.loading-dots::after {
  content: "";
  display: inline-block;
  width: 1.5em;
  text-align: left;
  animation: dots 1.4s steps(4, end) infinite;
}
@keyframes dots {
  0%, 20%  { content: ""; }
  40%      { content: "."; }
  60%      { content: ".."; }
  80%, 100%{ content: "..."; }
}
