// App shell — router + nav + tweaks { const { LENSES } = window.PL_DATA; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "mode": "light", "accent": "#c2410c", "mapStyle": "tile", "showLabels": "always", "density": "comfy" }/*EDITMODE-END*/; function App() { // intro = cinematic landing screen; atlas = full-bleed map experience const [phase, setPhase] = React.useState(() => { // Skip intro on subsequent visits in the same session return sessionStorage.getItem("pl_introSeen") === "1" ? "atlas" : "intro"; }); const [page, setPage] = React.useState("landing"); const [lensId, setLensId] = React.useState("reproductive"); const [indexId, setIndexId] = React.useState("fascism"); const [t, setTweak] = window.useTweaks(TWEAK_DEFAULTS); React.useEffect(() => { document.documentElement.setAttribute("data-mode", t.mode); document.documentElement.setAttribute("data-density", t.density); document.documentElement.style.setProperty("--accent", t.accent); }, [t.mode, t.density, t.accent]); const enterAtlas = () => { sessionStorage.setItem("pl_introSeen", "1"); setPhase("atlas"); }; const go = (p) => { setPage(p); window.scrollTo({ top: 0, behavior: "instant" }); }; // Intro is overlaid on top of the rendered atlas — that way when it fades // out, the (light-themed) atlas is already painted underneath. No jarring // theme flip. return ( {phase === "intro" && }