/* Scroll Animations */
.anim {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.anim.in-view {
  opacity: 1;
  transform: translateY(0);
}
.anim-delay-1 { transition-delay: 0.1s; }
.anim-delay-2 { transition-delay: 0.2s; }
.anim-delay-3 { transition-delay: 0.3s; }
.anim-delay-4 { transition-delay: 0.4s; }
.anim-delay-5 { transition-delay: 0.5s; }
.anim-delay-6 { transition-delay: 0.6s; }

.anim-left {
  opacity: 0;
  transform: translateX(-28px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.anim-left.in-view { opacity: 1; transform: translateX(0); }

.anim-right {
  opacity: 0;
  transform: translateX(28px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.anim-right.in-view { opacity: 1; transform: translateX(0); }

.anim-scale {
  opacity: 0;
  transform: scale(0.94);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.anim-scale.in-view { opacity: 1; transform: scale(1); }

/* Floating glow orbs */
@keyframes float-slow {
  0%, 100% { transform: translateY(0) translateX(0); }
  33%       { transform: translateY(-20px) translateX(10px); }
  66%       { transform: translateY(10px) translateX(-8px); }
}
@keyframes float-fast {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-14px); }
}
.orb {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(60px);
  animation: float-slow 8s ease-in-out infinite;
}
.orb-indigo { background: rgba(99,102,241,0.18); }
.orb-cyan   { background: rgba(34,211,238,0.12); animation-delay: -3s; }
.orb-purple { background: rgba(167,139,250,0.12); animation-delay: -5s; }

/* Grid texture overlay */
.grid-texture {
  position: absolute; inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(var(--border) 1px, transparent 1px),
    linear-gradient(90deg, var(--border) 1px, transparent 1px);
  background-size: 48px 48px;
  opacity: 0.4;
  mask-image: radial-gradient(ellipse at center, black 30%, transparent 75%);
}

/* Pulse ring */
@keyframes pulse-ring {
  0%   { transform: scale(1); opacity: 0.6; }
  100% { transform: scale(1.5); opacity: 0; }
}
.pulse-ring {
  position: absolute; inset: 0; border-radius: 50%;
  border: 2px solid var(--indigo);
  animation: pulse-ring 2s ease-out infinite;
}

/* Counter number */
.counter-num {
  display: inline-block;
  transition: all 0.05s ease;
}

/* Shimmer on cards hover */
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}
.card-shimmer::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(105deg, transparent 40%, rgba(255,255,255,0.04) 50%, transparent 60%);
  background-size: 200% 100%;
  border-radius: inherit;
  opacity: 0;
  transition: opacity var(--t-base);
}
.card-shimmer:hover::after {
  opacity: 1;
  animation: shimmer 0.8s ease;
}

/* Typed cursor blink */
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0} }
.cursor-blink { animation: blink 1s step-end infinite; }
