/* App — root, mounts everything, runs loader + Lenis + reveal observer + scroll progress */
const App = () => {
  useReveal();

  React.useEffect(() => {
    // Loader
    const loader = document.getElementById('loader');
    const bar = loader?.querySelector('.loader-bar > span');
    const pctEl = loader?.querySelector('.loader-pct');
    let pct = 0;
    const tick = () => {
      pct += Math.random() * 14 + 4;
      if (pct >= 100) {
        if (bar) bar.style.width = '100%';
        if (pctEl) pctEl.textContent = '100%';
        setTimeout(() => loader?.classList.add('done'), 250);
        return;
      }
      if (bar) bar.style.width = pct + '%';
      if (pctEl) pctEl.textContent = Math.floor(pct) + '%';
      setTimeout(tick, 90);
    };
    tick();

    // Lenis smooth scroll
    if (window.Lenis) {
      const lenis = new window.Lenis({
        duration: 1.1,
        easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
        smoothWheel: true,
      });
      const raf = (time) => { lenis.raf(time); requestAnimationFrame(raf); };
      requestAnimationFrame(raf);
      window.__lenis = lenis;
    }

    // Scroll progress bar
    const progress = document.getElementById('progress');
    const onScroll = () => {
      const max = document.body.scrollHeight - window.innerHeight;
      const p = max > 0 ? (window.scrollY / max) * 100 : 0;
      if (progress) progress.style.width = p + '%';
    };
    window.addEventListener('scroll', onScroll, { passive: true });
    onScroll();
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  return (
    <React.Fragment>
      <ParallaxEngine />
      <Nav />
      <main className="relative z-10">
        <Hero />
        <Marquee />
        <Problem />
        <Stack />
        <Websites />
        <Phone />
        <Receptionists />
        <PersonaTeaser />
        <CTA />
        <Handoff />
      </main>
      <Footer />
    </React.Fragment>
  );
};

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
