/* SetOne Labs — site app shell */
function useScrollReveal() {
  React.useEffect(() => {
    const root = document.querySelector('.site');
    const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
    const els = Array.from(document.querySelectorAll('[data-reveal]'));
    if (root) root.classList.add('reveal-on');
    if (reduce || !root) { els.forEach((el) => el.classList.add('is-visible')); return; }

    let raf = 0;
    const reveal = () => {
      raf = 0;
      const vh = window.innerHeight || document.documentElement.clientHeight;
      els.forEach((el) => {
        if (el.classList.contains('is-visible')) return;
        const r = el.getBoundingClientRect();
        if (r.top < vh * 0.92 && r.bottom > 0) el.classList.add('is-visible');
      });
    };
    const onScroll = () => { if (!raf) raf = requestAnimationFrame(reveal); };

    window.addEventListener('scroll', onScroll, { passive: true });
    window.addEventListener('resize', onScroll);
    reveal();                          // immediate pass for above-the-fold
    requestAnimationFrame(reveal);     // second pass once layout settles
    // safety net: never leave content hidden
    const safety = setTimeout(() => els.forEach((el) => el.classList.add('is-visible')), 1600);

    return () => {
      window.removeEventListener('scroll', onScroll);
      window.removeEventListener('resize', onScroll);
      if (raf) cancelAnimationFrame(raf);
      clearTimeout(safety);
    };
  }, []);
}

function SiteApp() {
  const { Header, MobileMenu, Footer, Hero, Offerings, Approach, Capabilities, Team, Contact } = window.SO_SITE;
  const [menu, setMenu] = React.useState(false);
  useScrollReveal();
  return (
    <div className="site">
      <Header onBurger={() => setMenu((m) => !m)} />
      <MobileMenu open={menu} onClose={() => setMenu(false)} />
      <main>
        <Hero />
        <Offerings />
        <Approach />
        <Capabilities />
        <Team />
        <Contact />
      </main>
      <Footer />
    </div>
  );
}
const _root = (window.__setoneRoot = window.__setoneRoot || ReactDOM.createRoot(document.getElementById('root')));
_root.render(<SiteApp />);
