function HomePage({ onBook, navigate }) {
  return (
    <React.Fragment>
      <Hero onBook={onBook} navigate={navigate} />
      <Services navigate={navigate} />
      <Approach navigate={navigate} />
      <Testimonial />
      <CTA onBook={onBook} navigate={navigate} />
    </React.Fragment>
  );
}

function App() {
  const [booking, setBooking] = React.useState(false);
  const [route, setRoute] = React.useState("home");
  React.useEffect(() => {
    const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
    if (reduce) return;
    document.body.classList.add("bw-motion-ready");
    const targets = document.querySelectorAll(".bw-service-detail, footer");
    targets.forEach((el) => el.classList.add("bw-reveal"));
    const observer = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          entry.target.classList.add("is-visible");
          observer.unobserve(entry.target);
        }
      });
    }, { threshold: 0.14, rootMargin: "0px 0px -8% 0px" });
    targets.forEach((el) => observer.observe(el));
    return () => observer.disconnect();
  }, [route]);
  const open = () => setBooking(true);
  const navigate = (id) => {
    setRoute(id);
    window.scrollTo({ top: 0, behavior: "auto" });
  };

  let page;
  switch (route) {
    case "services":        page = <ServicesPage onBook={open} navigate={navigate} />; break;
    case "about":           page = <AboutPage onBook={open} navigate={navigate} />; break;
    case "getting-started": page = <GettingStartedPage onBook={open} navigate={navigate} />; break;
    case "contact":         page = <ContactPage onBook={open} navigate={navigate} />; break;
    default:                page = <HomePage onBook={open} navigate={navigate} />;
  }

  return (
    <React.Fragment>
      <Header onBook={open} route={route} navigate={navigate} />
      <main>{page}</main>
      <Footer navigate={navigate} />
      <BookingModal open={booking} onClose={() => setBooking(false)} />
    </React.Fragment>
  );
}
window.App = App;
