// app.jsx — router shell for saraslot const { useState: useStateA, useEffect: useEffectA } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "theme": "gold", "showBanner": true, "marqueeSpeed": "normal", "accent": "default" }/*EDITMODE-END*/; function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [bannerDismissed, setBannerDismissed] = useStateA(false); const [route, navigate] = useHashRoute(); const [theme, setTheme] = useThemeStore(t.theme); // Apply theme to root + marquee speed useEffectA(() => { document.documentElement.setAttribute("data-theme", theme); }, [theme]); useEffectA(() => { if (t.marqueeSpeed === "slow") { document.documentElement.style.setProperty("--marquee-duration", "60s"); } else if (t.marqueeSpeed === "fast") { document.documentElement.style.setProperty("--marquee-duration", "18s"); } else { document.documentElement.style.removeProperty("--marquee-duration"); } }, [t.marqueeSpeed]); // Stitch tweak panel → store sync (one-way: panel drives store) useEffectA(() => { if (t.theme && t.theme !== theme) setTheme(t.theme); }, [t.theme]); const showBanner = t.showBanner && !bannerDismissed && route === "/"; const handleThemeChange = (v) => { setTheme(v); setTweak("theme", v); }; return (
{showBanner && setBannerDismissed(true)} />}
{route === "/" && } {route === "/new" && } {route === "/history" && } {route === "/promo" && } {route === "/chat" && } {route === "/settings" && }
{theme === "gold" && "Gold Rush — Premium Asian casino floor. Bold condensed sans, gold gradients, urgent."} {theme === "neon" && "Neon Pulse — Crypto/esports lounge. Glassmorphism, cyan→magenta, geometric tech sans."} {theme === "jade" && "Imperial Jade — VIP high-roller salon. Serif headlines, jade & antique gold, refined."}
{ setTweak("showBanner", v); setBannerDismissed(false); }} /> setTweak("marqueeSpeed", v)} />
); } ReactDOM.createRoot(document.getElementById("root")).render();