/* global React, ReactDOM, NavFooter, Pages, ContactPage */
const { useState, useEffect } = React;
const { Nav, Footer, CursorGlow, useReveal, useRoute, FONT_PAIRS, ACCENTS, TWEAK_DEFAULTS } = window.NavFooter;
const { HomePage, AboutPage, StoriesPage } = window.Pages;
function App() {
const [route, navigate] = useRoute();
const [t, setTweak] = window.useTweaks ? window.useTweaks(TWEAK_DEFAULTS) : [TWEAK_DEFAULTS, () => {}];
// apply theme + accent + font
useEffect(() => {
document.documentElement.dataset.theme = t.theme || "light";
document.documentElement.style.setProperty("--accent", t.accent);
const fp = FONT_PAIRS[t.fontPair] || FONT_PAIRS.modern;
document.documentElement.style.setProperty("--font-display", fp.display);
document.documentElement.style.setProperty("--font-sans", fp.sans);
if (window.__bg) {
window.__bg.setAccent(t.accent);
window.__bg.setTheme(t.theme || "light");
window.__bg.setMode(t.bgMode || "shapes");
window.__bg.setIntensity(t.intensity || 1);
}
// tune marquee speed by intensity
document.documentElement.style.setProperty("--marq-dur", (60 - (t.intensity*20)) + "s");
}, [t.theme, t.accent, t.fontPair, t.bgMode, t.intensity]);
useReveal();
// re-trigger reveals on route change
useEffect(() => {
const els = document.querySelectorAll(".reveal, .reveal-stagger");
els.forEach(el => el.classList.add("pre"));
const t = setTimeout(() => {
document.querySelectorAll(".reveal.pre, .reveal-stagger.pre").forEach(el => el.classList.remove("pre"));
}, 60);
return () => clearTimeout(t);
}, [route]);
let page = null;
if (route === "about") page =