/* =========================================================
   ANIMATIONS — custom keyframes + motion utilities
   ========================================================= */

@media (prefers-reduced-motion: reduce){
  *{ animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; scroll-behavior:auto !important; }
}

/* Reveal utility (paired with IntersectionObserver in script.js as fallback to AOS) */
.reveal{ opacity:0; transform: translateY(36px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.reveal.in{ opacity:1; transform:none; }

/* Floating icon */
.float-y{ animation: float-y 4.5s ease-in-out infinite; }
@keyframes float-y{ 0%,100%{ transform: translateY(0);} 50%{ transform: translateY(-14px);} }

.float-slow{ animation: float-y 7s ease-in-out infinite; }

/* Rotate slow (used behind icons / dividers) */
.rotate-slow{ animation: rotate-slow 18s linear infinite; }
@keyframes rotate-slow{ from{ transform: rotate(0);} to{ transform: rotate(360deg);} }

/* Bounce-in for badges */
@keyframes bounce-in{
  0%{ transform: scale(.4); opacity:0; }
  60%{ transform: scale(1.08); opacity:1; }
  100%{ transform: scale(1); }
}
.bounce-in{ animation: bounce-in .7s var(--ease) both; }

/* Ripple button pulse (used on emergency call CTA) */
.pulse-ring{ position:relative; }
.pulse-ring::after{
  content:''; position:absolute; inset:0; border-radius:inherit; border:2px solid var(--c-primary);
  animation: pulse-ring 2.2s var(--ease) infinite;
}
@keyframes pulse-ring{
  0%{ transform: scale(1); opacity:.7; }
  100%{ transform: scale(1.5); opacity:0; }
}

/* Wave animation for divider fill */
.wave-anim path{ animation: wave-shift 9s ease-in-out infinite; }
@keyframes wave-shift{
  0%,100%{ transform: translateX(0) translateY(0); }
  50%{ transform: translateX(-18px) translateY(4px); }
}

/* Image reveal mask */
.img-reveal{ position:relative; overflow:hidden; border-radius:inherit; }
.img-reveal::before{
  content:''; position:absolute; inset:0; background: var(--gradient-brand); z-index:2;
  transform-origin:right; animation: img-reveal-swipe 1.3s var(--ease) both;
}
.img-reveal img{ animation: img-reveal-scale 1.6s var(--ease) both; }
@keyframes img-reveal-swipe{ 0%{ transform: scaleX(1);} 55%{ transform: scaleX(1);} 100%{ transform: scaleX(0);} }
@keyframes img-reveal-scale{ 0%{ transform: scale(1.25);} 100%{ transform: scale(1);} }

/* Loading dots */
.dots-load span{ display:inline-block; width:6px; height:6px; border-radius:50%; background: var(--c-primary); margin:0 2px; animation: dots-bounce 1.1s ease-in-out infinite; }
.dots-load span:nth-child(2){ animation-delay:.15s; }
.dots-load span:nth-child(3){ animation-delay:.3s; }
@keyframes dots-bounce{ 0%,80%,100%{ transform: translateY(0); opacity:.5;} 40%{ transform: translateY(-6px); opacity:1;} }

/* Glow underline for active nav / highlight text */
.glow-text{
  background: var(--gradient-brand); -webkit-background-clip:text; background-clip:text; color:transparent;
}

/* Card icon rotate on hover handled via JS + tilt.js; extra shine sweep */
.shine{ position:relative; overflow:hidden; }
.shine::after{
  content:''; position:absolute; top:0; left:-60%; width:40%; height:100%;
  background: linear-gradient(120deg, transparent, rgba(255,255,255,.35), transparent);
  transform: skewX(-20deg); transition: left .8s ease;
}
.shine:hover::after{ left:130%; }

/* Marquee fade edges for ribbon */
.ribbon{ mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); }
