/* Bottlenecktomy motion layer — pre-animation states and CSS-only loops.
   JS (motion.js) adds .is-in / .is-ready; everything degrades gracefully. */

/* Reveal states (set only once JS is present, so no-JS visitors see everything) */
.bnt.js .bnt-reveal { opacity: 0; transform: translateY(28px); }
.bnt.js .bnt-stagger > * { opacity: 0; transform: translateY(28px); }
.bnt.js .bnt-split .bnt-word { display: inline-block; opacity: 0; transform: translateY(110%) rotate(3deg); }
.bnt-split .bnt-line { display: inline-block; overflow: hidden; vertical-align: bottom; padding-bottom: .12em; margin-bottom: -.12em; }

/* Floating idle */
.bnt-float { animation: bnt-float 5s ease-in-out infinite; }
@keyframes bnt-float { 0%, 100% { transform: translateY(0) rotate(-2deg); } 50% { transform: translateY(-14px) rotate(2deg); } }

/* Blobs drift */
.bnt-blob { animation: bnt-drift 18s ease-in-out infinite alternate; }
.bnt-blob--coral { animation-duration: 22s; animation-delay: -6s; }
.bnt-blob--sun { animation-duration: 26s; animation-delay: -12s; }
@keyframes bnt-drift { 0% { transform: translate(0, 0) scale(1); } 50% { transform: translate(8vw, -6vh) scale(1.15); } 100% { transform: translate(-6vw, 8vh) scale(.95); } }

/* Hero logo initial state: neck attached, arrow hidden below the cut */
.bnt.js .bnt-logo-arrow { transform: translateY(150px); opacity: 0; }
.bnt.js .bnt-spark { transform-box: fill-box; transform-origin: center; transform: scale(0); }
.bnt-logo-pupil { transform-box: fill-box; transform-origin: center; }

/* Flow demo dots */
.bnt-flow__dot { transition: none; }

/* Marquee */
.bnt-marquee__track { animation: bnt-marquee 30s linear infinite; }
@keyframes bnt-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* Tilt cards get GPU hints */
.bnt-tilt { will-change: transform; transition: transform .2s ease-out; }

/* Counter pop */
.bnt-count.is-done { animation: bnt-pop .5s cubic-bezier(.2,.8,.2,1); }
@keyframes bnt-pop { 0% { transform: scale(1); } 40% { transform: scale(1.18); } 100% { transform: scale(1); } }

/* Reduced motion: show everything, stop loops */
@media (prefers-reduced-motion: reduce) {
  .bnt.js .bnt-reveal, .bnt.js .bnt-stagger > *, .bnt.js .bnt-split .bnt-word { opacity: 1; transform: none; }
  .bnt.js .bnt-logo-arrow { transform: none; opacity: 1; }
  .bnt.js .bnt-spark { transform: none; }
  .bnt-float, .bnt-blob, .bnt-marquee__track, .bnt-scrollcue span { animation: none; }
  html { scroll-behavior: auto; }
}
