/* ==========================================================================
   ANIMATIONS.CSS — keyframes + scroll-reveal utility classes
   ========================================================================== */

/* ---------- Keyframes ---------- */
@keyframes fadeUp { from { opacity: 0; transform: translateY(36px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeLeft { from { opacity: 0; transform: translateX(-40px); } to { opacity: 1; transform: translateX(0); } }
@keyframes fadeRight { from { opacity: 0; transform: translateX(40px); } to { opacity: 1; transform: translateX(0); } }
@keyframes zoomIn { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: scale(1); } }
@keyframes blurReveal { from { opacity: 0; filter: blur(10px); transform: translateY(14px); } to { opacity: 1; filter: blur(0); transform: translateY(0); } }
@keyframes floatY { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes floatSlow { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(3deg); } }
@keyframes spinSlow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes ripple { to { transform: scale(3.2); opacity: 0; } }
@keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
@keyframes blobMove {
  0%, 100% { border-radius: 42% 58% 65% 35% / 45% 40% 60% 55%; transform: translate(0,0) scale(1); }
  50% { border-radius: 60% 40% 35% 65% / 55% 60% 40% 45%; transform: translate(20px,-15px) scale(1.05); }
}
@keyframes shine { 0% { transform: translateX(-120%) rotate(20deg); } 100% { transform: translateX(220%) rotate(20deg); } }
@keyframes underlineGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.45); } 50% { box-shadow: 0 0 0 16px rgba(34, 197, 94, 0); } }
@keyframes heroKenBurns {
  0% { transform: scale(1); }
  50% { transform: scale(1.1); }
  100% { transform: scale(1.18); }
}
@keyframes pulseGlowMint {
  0%, 100% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.45); }
  50% { box-shadow: 0 0 0 16px rgba(52, 211, 153, 0); }
}
@keyframes floatOrb {
  0%, 100% { transform: translate(0, 0) scale(1); }
  50% { transform: translate(35px, -25px) scale(1.1); }
}
@keyframes slideRightToLeft {
  0% {
    transform: translateX(60px) scale(0.96);
    opacity: 0;
  }
  100% {
    transform: translateX(0) scale(1);
    opacity: 1;
  }
}

/* ---------- Reveal-on-scroll base ---------- */
[data-reveal] {
  opacity: 0;
  will-change: opacity, transform;
}
[data-reveal].in-view[data-reveal="up"] { animation: fadeUp .45s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
[data-reveal].in-view[data-reveal="left"] { animation: fadeLeft .45s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
[data-reveal].in-view[data-reveal="right"] { animation: fadeRight .45s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
[data-reveal].in-view[data-reveal="zoom"] { animation: zoomIn .45s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
[data-reveal].in-view[data-reveal="blur"] { animation: blurReveal .45s cubic-bezier(0.16, 1, 0.3, 1) forwards; }

/* Immediate solid rendering for header, nav, hero sections — ZERO BLINK */
.site-header,
.site-header *,
.main-nav,
.main-nav *,
.about-preview,
.about-preview *,
.about-media,
.about-media *,
.about-copy,
.about-copy *,
.page-hero [data-reveal],
.gallery-hero [data-reveal],
.treatment-hero [data-reveal],
.about-hero [data-reveal],
.contact-hero [data-reveal],
.doctors-hero [data-reveal],
.testimonials-hero [data-reveal],
.testimonial-card,
.info-card,
.contact-form-card,
.map-embed {
  opacity: 1 !important;
  transform: none !important;
  animation: none !important;
}

/* Stagger children via inline --delay custom property */
[data-reveal] { animation-delay: var(--delay, 0s); }

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1 !important; transform: none !important; animation: none !important; }
}

/* ---------- Floating shapes / blobs ---------- */
.floating-icon { animation: floatY 5s ease-in-out infinite; }
.floating-icon.delay-1 { animation-delay: .6s; }
.floating-icon.delay-2 { animation-delay: 1.2s; }

.blob {
  position: absolute; z-index: 0; filter: blur(2px);
  background: var(--gradient-brand); opacity: .18;
  animation: blobMove 12s ease-in-out infinite;
}
.blob-slow { animation-duration: 18s; }

/* ---------- Animated gradient text / bg ---------- */
.gradient-text {
  background: var(--gradient-brand); background-size: 200% 200%;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: gradientShift 6s ease infinite;
}
.gradient-bg-animated { background: var(--gradient-brand); background-size: 220% 220%; animation: gradientShift 10s ease infinite; }

/* ---------- Glass shine sweep on hover ---------- */
.shine-wrap { position: relative; overflow: hidden; }
.shine-wrap::before {
  content: ""; position: absolute; top: -50%; left: -20%;
  width: 40%; height: 200%;
  background: linear-gradient(120deg, transparent, rgba(255,255,255,0.55), transparent);
  transform: translateX(-120%) rotate(20deg);
  pointer-events: none;
}
.shine-wrap:hover::before { animation: shine 1s ease; }

/* ---------- Animated underline for links ---------- */
.underline-link { position: relative; display: inline-block; }
.underline-link::after {
  content: ""; position: absolute; left: 0; bottom: -3px; height: 2px; width: 100%;
  background: var(--gradient-brand); transform: scaleX(0); transform-origin: left;
  transition: transform .35s ease;
}
.underline-link:hover::after { transform: scaleX(1); }

/* ---------- Automatic Image Zoom Animation (Premium Modern Zoom) ---------- */
@keyframes autoZoomPulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.06); }
  100% { transform: scale(1); }
}

.treatment-detail-body img,
.about-media img,
.clinic-showcase-card img,
.doctor-showcase-card img,
.doctor-mini img {
  animation: autoZoomPulse 7s cubic-bezier(0.25, 1, 0.5, 1) infinite alternate;
  will-change: transform;
}
