/* ============================================================
   ANIMATIONS — All @keyframes used site-wide
   Keep all keyframes in one place so they're easy to find
   and nothing gets duplicated.
   ============================================================ */

/* Fade up — used by hero elements and reveal items */
@keyframes up {
  from {
    opacity: 0;
    transform: translateY(34px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Nav items drop in from above */
@keyframes navIn {
  to {
    opacity: 1;
    transform: none;
  }
}

/* Underline grows left-to-right (hero heading) */
@keyframes lReveal {
  to {
    transform: scaleX(1);
  }
}

/* Generic fade in — used on geo marks */
@keyframes fadeIn {
  to {
    opacity: 1;
  }
}

/* Floating dots in hero bob up and down */
@keyframes fdot {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-13px); }
}

/* Used by philosophy section spinning rings */
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

/* Ticker scrolls left — track is 200% wide, so -50% = one full loop */
@keyframes tick {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}


/* ── CARD / SECTION ENTRANCE ─────────────────────────────── */

/* Slide in from left */
@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-40px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Slide in from right */
@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(40px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Scale up from slightly smaller */
@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.93);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Counter number count-up shimmer */
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}

/* Glow pulse for accent elements */
@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(var(--a-rgb, 100,150,130), 0.0); }
  50%       { box-shadow: 0 0 24px 4px rgba(var(--a-rgb, 100,150,130), 0.18); }
}

/* Underline draw for links */
@keyframes drawUnderline {
  from { width: 0; }
  to   { width: 100%; }
}

/* Float — gentle up/down for decorative elements */
@keyframes float {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-8px); }
}

/* Rotate slow — for decorative orbiting marks */
@keyframes rotateSlow {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* Stagger reveal for list items */
@keyframes staggerUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}


/* ── PREMIUM ADDITIONS ───────────────────────────────────────── */

/* Magnetic border trace — traces around a card edge */
@keyframes borderTrace {
  0%   { background-position: 0% 0%; }
  100% { background-position: 300% 0%; }
}

/* Ink bleed — text reveal from left like ink spreading */
@keyframes inkReveal {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0% 0 0); }
}

/* Gold shimmer sweep — for premium stat numbers */
@keyframes goldSweep {
  0%   { background-position: -200% center; }
  100% { background-position: 300% center; }
}

/* Soft grain flicker — opacity micro-variations */
@keyframes grain {
  0%, 100% { opacity: 0.032; }
  25%       { opacity: 0.048; }
  50%       { opacity: 0.024; }
  75%       { opacity: 0.040; }
}

/* Line extend — decorative horizontal rule grows */
@keyframes lineExtend {
  from { transform: scaleX(0); transform-origin: left; }
  to   { transform: scaleX(1); transform-origin: left; }
}

/* Pill breathe — subtle scale pulse for philosophy pills */
@keyframes pillBreathe {
  0%, 100% { transform: scale(1); opacity: 0.92; }
  50%       { transform: scale(1.035); opacity: 1; }
}

/* Trust icon spin-in */
@keyframes spinIn {
  from { transform: rotate(-180deg) scale(0.4); opacity: 0; }
  to   { transform: rotate(0deg) scale(1); opacity: 1; }
}

/* Stat shimmer — sweeps across number on count-up finish */
@keyframes statShimmer {
  0%   { opacity: 0.7; }
  50%  { opacity: 1; text-shadow: 0 0 20px rgba(255,255,255,0.12); }
  100% { opacity: 0.7; }
}

/* Alac item slide — à la carte rows wipe in from left */
@keyframes alacIn {
  from { opacity: 0; transform: translateX(-18px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* Subtle vertical scan line on dark sections */
@keyframes scanline {
  from { transform: translateY(-100%); }
  to   { transform: translateY(100vh); }
}

/* ── CUSTOM REVEAL ANIMATIONS ────────────────────────────────── */

/* Slight scale + fade for cards */
@keyframes cardIn {
  from {
    opacity: 0;
    transform: scale(0.96);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Fade in only - minimal performance impact */
@keyframes fadeInOnly {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Subtle slide + fade for FAQ items */
@keyframes faqItemIn {
  from {
    opacity: 0;
    transform: translateY(-8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
