function App() {
  const [intro, setIntro] = React.useState(
    () => !sessionStorage.getItem("intro-done")
  );

  const handleIntroDone = React.useCallback(() => {
    sessionStorage.setItem("intro-done", "1");
    setIntro(false);
  }, []);

  // Scroll reveal observer
  React.useEffect(() => {
    const els = document.querySelectorAll(".reveal");
    const obs = new IntersectionObserver(
      (entries) => {
        entries.forEach((e) => {
          if (e.isIntersecting) {
            e.target.classList.add("in");
            obs.unobserve(e.target);
          }
        });
      },
      { threshold: 0.12, rootMargin: "0px 0px -50px 0px" }
    );
    els.forEach((el) => obs.observe(el));
    return () => obs.disconnect();
  }, []);

  return (
    <>
      {intro && <window.IntroScreen onDone={handleIntroDone} />}
      <window.VisitorTracker />
      <window.Nav />
      <window.Hero />
      <window.Services />
      <window.Partners />
      <window.Dashboard />
      <window.Portfolio />
      <window.Features />
      <window.About />
      <window.Testimonials />
      <window.Faq />
      <window.CtaFooter />
      <window.ChatWidget />
      <window.ContactModal />
      <window.LegalModals />
      <window.CookieBanner />
      <window.TweaksUI />
    </>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<App />);
