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

@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(0.9); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.94); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes floatLeaf {
  0%   { transform: translateY(0) rotate(0deg); }
  50%  { transform: translateY(-18px) rotate(6deg); }
  100% { transform: translateY(0) rotate(0deg); }
}
@keyframes driftSlow {
  0%   { transform: translate(0,0) rotate(0deg); }
  50%  { transform: translate(14px,-22px) rotate(8deg); }
  100% { transform: translate(0,0) rotate(0deg); }
}
@keyframes ripple {
  from { transform: scale(0); opacity: 0.55; }
  to   { transform: scale(3.2); opacity: 0; }
}
@keyframes spinSlow {
  to { transform: rotate(360deg); }
}
@keyframes shimmer {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
@keyframes growRing {
  from { stroke-dashoffset: var(--ring-len, 620); }
  to   { stroke-dashoffset: 0; }
}
@keyframes pulseSoft {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.55; }
}
/* ---- Scroll Reveal base state ---- */
[data-reveal] {
  opacity: 0;
  will-change: transform, opacity;
}
[data-reveal="fade-up"]    { transform: translateY(36px); }
[data-reveal="fade-left"]  { transform: translateX(-40px); }
[data-reveal="fade-right"] { transform: translateX(40px); }
[data-reveal="zoom"]       { transform: scale(0.9); }
[data-reveal="scale"]      { transform: scale(0.94); }

[data-reveal].is-visible {
  opacity: 1;
  transform: none;
  transition: opacity var(--dur-slow) var(--ease-premium), transform var(--dur-slow) var(--ease-premium);
}

/* stagger via inline --delay custom property */
[data-reveal] { transition-delay: var(--delay, 0ms); }

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

/* ---- Hover lift ---- */
.hover-lift {
  transition: transform var(--dur-fast) var(--ease-soft), box-shadow var(--dur-fast) var(--ease-soft);
}
.hover-lift:hover,
.hover-lift:focus-visible {
  transform: translateY(-8px);
  box-shadow: var(--shadow-raised);
}

/* ---- Image zoom on hover ---- */
.media-zoom { overflow: hidden; }
.media-zoom img {
  transition: transform var(--dur-slow) var(--ease-premium);
}
.media-zoom:hover img { transform: scale(1.08); }

/* ---- Ripple buttons ---- */
.btn { position: relative; overflow: hidden; }
.btn__ripple {
  position: absolute;
  border-radius: 50%;
  background: rgba(255,255,255,0.55);
  transform: scale(0);
  pointer-events: none;
  animation: ripple 650ms var(--ease-soft);
}
.btn--outline .btn__ripple,
.btn--ghost .btn__ripple { background: rgba(46,125,50,0.25); }

/* ---- Floating leaves (ambient decoration) ---- */
.leaf-float { animation: floatLeaf 6s ease-in-out infinite; }
.leaf-float--slow { animation: driftSlow 9s ease-in-out infinite; }
.leaf-float--delay-1 { animation-delay: 1.2s; }
.leaf-float--delay-2 { animation-delay: 2.4s; }

/* ---- Counter number pop ---- */
.stat__number { display: inline-block; }

/* ---- Growth ring (signature element) ---- */
.growth-ring circle {
  stroke-dasharray: var(--ring-len, 620);
  stroke-dashoffset: var(--ring-len, 620);
  animation: growRing 1.6s var(--ease-premium) forwards;
  animation-play-state: paused;
}
.is-visible .growth-ring circle { animation-play-state: running; }

/* ---- Skeleton loading ---- */
.skeleton {
  background: linear-gradient(90deg, #eef2ec 25%, #f7faf5 37%, #eef2ec 63%);
  background-size: 400% 100%;
  animation: shimmer 1.4s ease infinite;
  border-radius: var(--radius-sm);
}

/* ---- Nav underline ---- */
.nav__link {
  position: relative;
}
.nav__link::after {
  content: '';
  position: absolute;
  left: 0; bottom: -6px;
  width: 100%;
  height: 2px;
  background: var(--color-gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur-fast) var(--ease-soft);
}
.nav__link:hover::after,
.nav__link.is-active::after {
  transform: scaleX(1);
}

/* ---- Partners marquee ---- */
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.marquee__track {
  animation: marquee 28s linear infinite;
}
.marquee:hover .marquee__track,
.marquee:focus-within .marquee__track {
  animation-play-state: paused;
}
