/* ============================================================ App — main shell with screen routing + chat modal state ============================================================ */ function App() { const [screen, setScreen] = React.useState(() => { const hash = window.location.hash.slice(1); return ["home", "hizmetler", "kombi", "sss", "iletisim"].includes(hash) ? hash : "home"; }); const [chatOpen, setChatOpen] = React.useState(false); const [chatService, setChatService] = React.useState(null); const navigate = (s) => { setScreen(s); window.location.hash = s; window.scrollTo({ top: 0, behavior: "instant" }); }; const openChat = (service = null) => { setChatService(service); setChatOpen(true); }; React.useEffect(() => { const onHash = () => { const h = window.location.hash.slice(1); if (["home", "hizmetler", "kombi", "sss", "iletisim"].includes(h)) setScreen(h); }; window.addEventListener("hashchange", onHash); const onNav = (e) => navigate(e.detail); window.addEventListener("nav", onNav); const onOpenChat = () => openChat(); window.addEventListener("open-chat", onOpenChat); return () => { window.removeEventListener("hashchange", onHash); window.removeEventListener("nav", onNav); window.removeEventListener("open-chat", onOpenChat); }; }, []); // Lock body scroll when chat open React.useEffect(() => { document.body.style.overflow = chatOpen ? "hidden" : ""; }, [chatOpen]); const navMap = { home: "home", kombi: "kombi", sss: "sss", iletisim: "iletisim", }; return (