/* Animation primitives — states are driven by GSAP / IntersectionObserver */

@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(194, 112, 61, 0.55); }
  70%  { box-shadow: 0 0 0 16px rgba(194, 112, 61, 0); }
  100% { box-shadow: 0 0 0 0 rgba(194, 112, 61, 0); }
}

@keyframes cueDrop {
  0%   { transform: scaleY(0); transform-origin: top; }
  60%  { transform: scaleY(1); transform-origin: top; }
  100% { transform: scaleY(1); }
}
.scroll-cue span { animation: cueDrop 1.8s ease infinite; }

/* Elements GSAP will reveal — start hidden only when JS is running */
.js .reveal, .js .split-lines, .js .invest-card, .js .plot-card,
.js .drive-card, .js .float-card { opacity: 0; }

/* SVG ring draw setup (GSAP animates dashoffset) */
.js .ring { stroke-dasharray: 1600; stroke-dashoffset: 1600; }

/* Fallback fade-up for browsers without GSAP (CDN blocked etc.) */
.no-gsap .reveal, .no-gsap .split-lines, .no-gsap .invest-card,
.no-gsap .plot-card, .no-gsap .drive-card, .no-gsap .float-card {
  opacity: 1 !important; transform: none !important;
}
.no-gsap .ring { stroke-dashoffset: 0; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation: none !important;
    transition: none !important;
  }
  .js .reveal, .js .split-lines, .js .invest-card, .js .plot-card,
  .js .drive-card, .js .float-card { opacity: 1; }
  .js .ring { stroke-dashoffset: 0; }
}
