/* ============================================================
   KÚR Health Spa — Animations
   ============================================================ */

/* ─── Keyframes ─── */
@keyframes floatBlob {
  0%, 100% { transform: translateY(0) scale(1); }
  33%       { transform: translateY(-30px) scale(1.05); }
  66%       { transform: translateY(15px) scale(0.97); }
}
@keyframes floatElement {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-16px); }
}
@keyframes floatSlow {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50%       { transform: translateY(-22px) rotate(3deg); }
}
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%       { transform: scale(1.06); opacity: 0.85; }
}
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-30px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInLeft {
  from { opacity: 0; transform: translateX(-40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes fadeInRight {
  from { opacity: 0; transform: translateX(40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.85); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes rotateIn {
  from { opacity: 0; transform: rotate(-10deg) scale(0.9); }
  to   { opacity: 1; transform: rotate(0deg) scale(1); }
}
@keyframes borderDraw {
  from { width: 0; }
  to   { width: 60px; }
}
@keyframes countUp {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes ripple {
  0%   { transform: scale(0); opacity: 0.4; }
  100% { transform: scale(2.5); opacity: 0; }
}
@keyframes gradientShift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
@keyframes typewriter {
  from { width: 0; }
  to   { width: 100%; }
}
@keyframes blink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}
@keyframes slideUp {
  from { opacity: 0; transform: translateY(100px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes bounceDot {
  0%, 80%, 100% { transform: translateY(0); }
  40%           { transform: translateY(-8px); }
}
@keyframes starSpin {
  0%   { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

/* ─── Scroll-Reveal Classes ─── */
.reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}
.reveal-left {
  opacity: 0;
  transform: translateX(-50px);
  transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal-left.visible {
  opacity: 1;
  transform: translateX(0);
}
.reveal-right {
  opacity: 0;
  transform: translateX(50px);
  transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal-right.visible {
  opacity: 1;
  transform: translateX(0);
}
.reveal-scale {
  opacity: 0;
  transform: scale(0.88);
  transition: opacity 0.65s cubic-bezier(0.34, 1.56, 0.64, 1),
              transform 0.65s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.reveal-scale.visible {
  opacity: 1;
  transform: scale(1);
}

/* Stagger delays — set via JS with --i variable, or use these classes */
.delay-1  { transition-delay: 0.1s !important; }
.delay-2  { transition-delay: 0.2s !important; }
.delay-3  { transition-delay: 0.3s !important; }
.delay-4  { transition-delay: 0.4s !important; }
.delay-5  { transition-delay: 0.5s !important; }
.delay-6  { transition-delay: 0.6s !important; }

/* ─── Hero Entrance ─── */
.hero-animate-1 { animation: fadeInUp 0.8s 0.1s ease both; }
.hero-animate-2 { animation: fadeInUp 0.8s 0.25s ease both; }
.hero-animate-3 { animation: fadeInUp 0.8s 0.4s ease both; }
.hero-animate-4 { animation: fadeInUp 0.8s 0.55s ease both; }
.hero-animate-5 { animation: fadeInUp 0.8s 0.7s ease both; }

/* ─── Sticky Mobile CTA entrance ─── */
.sticky-mobile-cta .sticky-cta-btn {
  animation: slideUp 0.5s 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.sticky-mobile-cta .sticky-cta-btn:nth-child(2) {
  animation-delay: 0.65s;
}

/* ─── Floating decorative elements ─── */
.float-slow  { animation: floatSlow 8s ease-in-out infinite; }
.float-fast  { animation: floatElement 4s ease-in-out infinite; }
.float-med   { animation: floatElement 6s ease-in-out infinite; }

/* ─── Card hover glow ─── */
.card-hover-glow {
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}
.card-hover-glow:hover {
  box-shadow: 0 0 0 2px rgba(69,182,73,0.25), 0 20px 60px rgba(0,0,0,0.15);
  transform: translateY(-6px);
}

/* ─── Shimmer gradient (loading / CTA highlight) ─── */
.shimmer-bg {
  background: linear-gradient(270deg, #45B649, #78C43B, #F7941D, #FBB813, #45B649);
  background-size: 300% 300%;
  animation: gradientShift 6s ease infinite;
}

/* ─── Underline draw ─── */
.underline-draw {
  position: relative;
  display: inline-block;
}
.underline-draw::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--teal), var(--green));
  border-radius: 3px;
  animation: borderDraw 1s 0.8s ease forwards;
  width: 0;
}

/* ─── Ripple effect on buttons ─── */
.btn-ripple {
  position: relative;
  overflow: hidden;
}
.btn-ripple .ripple {
  position: absolute;
  border-radius: 50%;
  background: rgba(255,255,255,0.35);
  pointer-events: none;
  animation: ripple 0.6s ease-out;
}

/* ─── Number counter animation ─── */
.counter { animation: countUp 0.4s ease both; }

/* ─── Page transition ─── */
.page-transition-enter {
  animation: fadeInUp 0.4s ease;
}
body {
  animation: fadeInUp 0.4s ease;
}

/* ─── Sticky nav shadow slide ─── */
#navbar { transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); }

/* ─── Image zoom on hover ─── */
.img-zoom-wrap { overflow: hidden; border-radius: inherit; }
.img-zoom-wrap img {
  transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  will-change: transform;
}
.img-zoom-wrap:hover img { transform: scale(1.08); }

/* ─── Section title underline ornament ─── */
.title-ornament {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin: 0.75rem auto 0;
  width: fit-content;
}
.title-ornament::before,
.title-ornament::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--teal));
  min-width: 40px;
}
.title-ornament::after {
  background: linear-gradient(90deg, var(--green), transparent);
}
.title-ornament .ornament-diamond {
  width: 8px; height: 8px;
  background: var(--gold);
  transform: rotate(45deg);
  flex-shrink: 0;
}

/* ─── Loading skeleton (optional) ─── */
.skeleton {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  border-radius: var(--radius-sm);
}

/* ─── Scroll indicator ─── */
.scroll-indicator {
  position: absolute;
  bottom: 2.5rem;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  color: rgba(255,255,255,0.5);
  font-size: 0.75rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  animation: fadeInUp 1s 1.2s ease both;
}
.scroll-mouse {
  width: 24px; height: 38px;
  border: 2px solid rgba(255,255,255,0.3);
  border-radius: 12px;
  position: relative;
}
.scroll-mouse::after {
  content: '';
  position: absolute;
  top: 6px;
  left: 50%;
  transform: translateX(-50%);
  width: 3px; height: 7px;
  background: rgba(255,255,255,0.5);
  border-radius: 2px;
  animation: scrollDot 2s ease infinite;
}
@keyframes scrollDot {
  0%   { opacity: 1; transform: translateX(-50%) translateY(0); }
  100% { opacity: 0; transform: translateX(-50%) translateY(16px); }
}

/* ─── Prefers reduced motion ─── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  .reveal, .reveal-left, .reveal-right, .reveal-scale {
    opacity: 1 !important;
    transform: none !important;
  }
}
