// Top-level App. Tweaks panel has been removed for production.
// Palette is fixed to "wet-track" (set as :root in index.html).
// Hero variant is fixed to "blueprint".
// Reduce-motion is a real user preference, persisted in localStorage and
// also honored from the OS via @media (prefers-reduced-motion).

const HERO_VARIANT = "blueprint";

function App() {
  // Reduce-motion preference. Reads from <html data-reduce-motion="1">
  // (set by the inline boot script) and from prefers-reduced-motion.
  const [reduceMotion, setReduceMotion] = useState(() => {
    try {
      if (localStorage.getItem("reduceMotion") === "1") return true;
    } catch (e) {}
    if (typeof window !== "undefined" && window.matchMedia) {
      return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
    }
    return false;
  });

  // Keep the data-attribute and matchMedia in sync.
  useEffect(() => {
    document.documentElement.dataset.reduceMotion = reduceMotion ? "1" : "0";
    try {
      localStorage.setItem("reduceMotion", reduceMotion ? "1" : "0");
    } catch (e) {}
  }, [reduceMotion]);

  useEffect(() => {
    if (!window.matchMedia) return;
    const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
    const onChange = (e) => {
      // Only follow the OS setting if the user hasn't explicitly opted in to motion.
      try {
        if (localStorage.getItem("reduceMotion") == null) {
          setReduceMotion(e.matches);
        }
      } catch (err) {
        setReduceMotion(e.matches);
      }
    };
    mq.addEventListener("change", onChange);
    return () => mq.removeEventListener("change", onChange);
  }, []);

  return (
    <>
      <Nav />
      <main>
        <Hero variant={HERO_VARIANT} reduceMotion={reduceMotion} />
        <Overview />
        <Performance />
        <Design />
        <Build />
        <Cities />
        <Sepang />
        <Gallery />
        <Specs />
      </main>
      <Footer />
    </>
  );
}

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