/* ============ EXTRA ANIMATIONS ============ */

/* animated gradient text */
.grad-text {
  background: linear-gradient(90deg, var(--primary), var(--accent), var(--primary));
  background-size: 200% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: gradShift 4s linear infinite;
}
@keyframes gradShift { to { background-position: 200% center; } }

/* bouncing arrow */
.bounce-arrow { animation: bounceArrow 2s infinite; }
@keyframes bounceArrow { 0%,100% { transform: translateY(0); } 50% { transform: translateY(8px); } }

/* wobble on hover icon */
.wobble:hover { animation: wobble .5s ease; }
@keyframes wobble { 0%,100% { transform: rotate(0); } 25% { transform: rotate(-8deg); } 75% { transform: rotate(8deg); } }

/* text typing caret */
.typing-caret::after {
  content: '|';
  color: var(--primary);
  animation: caretBlink .9s steps(1) infinite;
  margin-left: 2px;
}
@keyframes caretBlink { 50% { opacity: 0; } }

/* floating slow */
.float-slow { animation: floatY 6s ease-in-out infinite; }
.float-slower { animation: floatY 9s ease-in-out infinite; }

/* heartbeat for whatsapp */
.heartbeat { animation: heartbeat 1.6s ease-in-out infinite; }
@keyframes heartbeat { 0%,100% { transform: scale(1); } 12% { transform: scale(1.18); } 24% { transform: scale(1); } 36% { transform: scale(1.12); } }

/* svg stroke draw */
.draw-path { stroke-dasharray: 300; stroke-dashoffset: 300; animation: drawLine 2.4s ease forwards; }
@keyframes drawLine { to { stroke-dashoffset: 0; } }

/* page load fade */
.page-fade { animation: pageFade .6s ease both; }
@keyframes pageFade { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }

/* counter shimmer on value */
.counting { text-shadow: 0 0 24px rgba(255,140,66,.5); }

/* 3d press */
.btn-press:active { transform: translateY(2px) scale(.97) !important; box-shadow: 0 2px 8px rgba(0,0,0,.15) !important; }

/* rotate slow for logos */
.rotate-slow { animation: rotSlow 16s linear infinite; }
@keyframes rotSlow { to { transform: rotate(360deg); } }

/* stamp pop */
.stamp-pop { animation: stampPop .5s cubic-bezier(.34,1.56,.64,1) both; }
@keyframes stampPop { from { transform: scale(2.2) rotate(-12deg); opacity: 0; } to { transform: scale(1) rotate(-6deg); opacity: 1; } }

/* stagger children in view */
.stagger > * { opacity: 0; transform: translateY(30px); transition: opacity .7s ease, transform .7s ease; }
.stagger.in-view > * { opacity: 1; transform: translateY(0); }
.stagger.in-view > *:nth-child(1) { transition-delay: .05s; }
.stagger.in-view > *:nth-child(2) { transition-delay: .14s; }
.stagger.in-view > *:nth-child(3) { transition-delay: .23s; }
.stagger.in-view > *:nth-child(4) { transition-delay: .32s; }
.stagger.in-view > *:nth-child(5) { transition-delay: .41s; }
.stagger.in-view > *:nth-child(6) { transition-delay: .5s; }
.stagger.in-view > *:nth-child(7) { transition-delay: .59s; }
.stagger.in-view > *:nth-child(8) { transition-delay: .68s; }
.stagger.in-view > *:nth-child(9) { transition-delay: .77s; }
.stagger.in-view > *:nth-child(10) { transition-delay: .86s; }