/* ==========================================================================
   DigitalProfit Hub — animations.css
   Keyframes and animation utility classes (paired with AOS where possible).
   ========================================================================== */

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

@keyframes dp-slide-in {
  from { opacity: 0; transform: translateX(40px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes dp-fade-up {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes dp-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes dp-pop {
  0%   { transform: scale(.8); opacity: 0; }
  60%  { transform: scale(1.05); opacity: 1; }
  100% { transform: scale(1); }
}

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

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

@keyframes dp-pulse-ring {
  0%   { transform: scale(.8); opacity: .7; }
  100% { transform: scale(2.2); opacity: 0; }
}

@keyframes dp-gradient-move {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* utility classes */
.dp-anim-fade-up { animation: dp-fade-up .7s cubic-bezier(.2,.7,.2,1) both; }
.dp-anim-fade    { animation: dp-fade .7s ease both; }
.dp-anim-pop     { animation: dp-pop .5s cubic-bezier(.2,.8,.2,1) both; }
.dp-anim-float   { animation: dp-float 6s ease-in-out infinite; }

.dp-anim-fade-up.d1 { animation-delay: .1s; }
.dp-anim-fade-up.d2 { animation-delay: .2s; }
.dp-anim-fade-up.d3 { animation-delay: .3s; }
.dp-anim-fade-up.d4 { animation-delay: .4s; }
.dp-anim-fade-up.d5 { animation-delay: .5s; }
.dp-anim-fade-up.d6 { animation-delay: .6s; }

/* spinner */
.dp-spinner {
  width: 22px; height: 22px; border-radius: 50%;
  border: 3px solid var(--dp-border);
  border-top-color: var(--dp-primary);
  animation: dp-spin .8s linear infinite;
  display: inline-block;
}

/* animated gradient text */
.dp-anim-gradient {
  background: var(--dp-grad-ai);
  background-size: 200% 200%;
  animation: dp-gradient-move 5s ease infinite;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* pulse dot (live indicator) */
.dp-live-dot { position: relative; display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--dp-success); }
.dp-live-dot::after {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  background: var(--dp-success); animation: dp-pulse-ring 1.6s ease-out infinite;
}

/* number counter base */
.dp-counter { font-variant-numeric: tabular-nums; }

@media (prefers-reduced-motion: reduce) {
  .dp-anim-float, .dp-live-dot::after, .dp-anim-gradient { animation: none !important; }
}
