// NSS Software — root + tweaks
const { useEffect: useEffectApp } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"theme": "dark",
"accent": "#3B82F6",
"density": "comfortable",
"showGrid": true
}/*EDITMODE-END*/;
const ACCENT_OPTIONS = ["#3B82F6", "#7DD3FC", "#A78BFA", "#F5F7FA"];
const App = () => {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
// Apply theme + accent globally
useEffectApp(() => {
document.documentElement.classList.toggle("theme-light", t.theme === "light");
document.documentElement.style.setProperty("--accent", t.accent);
document.documentElement.dataset.density = t.density;
if (t.density === "compact") {
document.documentElement.style.setProperty("--section-pad", "clamp(72px, 9vw, 140px)");
} else {
document.documentElement.style.removeProperty("--section-pad");
}
}, [t.theme, t.accent, t.density]);
// reveal hook (intersection observers on .reveal / .mask-reveal)
useReveal();
return (
<>
setTweak("theme", v)}
options={[{ value: "dark", label: "Dark" }, { value: "light", label: "Light" }]}
/>
setTweak("accent", v)}
options={ACCENT_OPTIONS}
/>
setTweak("density", v)}
options={[{ value: "comfortable", label: "Comfort" }, { value: "compact", label: "Compact" }]}
/>
>
);
};
ReactDOM.createRoot(document.getElementById("root")).render();