/* =========================================================================
   Animations — subtle, purposeful, and disabled for prefers-reduced-motion
   (see the global rule in style.css that neutralises all of these).
   ========================================================================= */

/* Staggered reveal delay helper, applied via JS to children of .reveal-group */
.reveal-group .reveal:nth-child(1){ transition-delay: 0ms; }
.reveal-group .reveal:nth-child(2){ transition-delay: 80ms; }
.reveal-group .reveal:nth-child(3){ transition-delay: 160ms; }
.reveal-group .reveal:nth-child(4){ transition-delay: 240ms; }
.reveal-group .reveal:nth-child(5){ transition-delay: 320ms; }
.reveal-group .reveal:nth-child(6){ transition-delay: 400ms; }

/* Gentle float used sparingly on the hero eyebrow / icon accents */
@keyframes gentle-float{
  0%, 100%{ transform: translateY(0); }
  50%{ transform: translateY(-6px); }
}
.float-accent{ animation: gentle-float 4.5s ease-in-out infinite; }

/* Counter animation base state (numbers only animate where real data exists) */
.counter-value{ font-variant-numeric: tabular-nums; }

/* Button hover lift already handled by transform in components.css;
   this adds a soft glow for primary CTAs on hover */
.btn-primary:hover{ box-shadow: 0 8px 20px rgba(224,138,30,.35); }

/* Loading spinner for AJAX form submission */
.btn-loading .btn-label{ visibility: hidden; }
.btn-loading{ position: relative; pointer-events: none; }
.btn-loading::after{
  content: ""; position: absolute; left: 50%; top: 50%; width: 18px; height: 18px;
  margin: -9px 0 0 -9px; border: 2px solid rgba(255,255,255,.5); border-top-color: #fff;
  border-radius: 50%; animation: spin .7s linear infinite;
}
.btn-outline-light.btn-loading::after{ border-color: rgba(33,26,46,.35); border-top-color: var(--ink); }
@keyframes spin{ to{ transform: rotate(360deg); } }

/* Sticky header shrink state, toggled by navigation.js on scroll */
.site-header.is-scrolled{ box-shadow: var(--shadow-sm); }
