/* global React, ReactDOM, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakColor */
const { useEffect } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"theme": "cream",
"accent": "#E2502B"
}/*EDITMODE-END*/;
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
// Apply theme + accent to :root
useEffect(() => {
document.documentElement.setAttribute("data-theme", t.theme === "cream" ? "" : t.theme);
document.documentElement.style.setProperty("--accent", t.accent);
// Pick a sensible accent-ink (light for dark accents, dark for light)
const lightAccents = ["#F2C94C"];
document.documentElement.style.setProperty(
"--accent-ink",
lightAccents.includes(t.accent) ? "#16140F" : (t.theme === "ink" ? "#0E0D0B" : "#16140F")
);
}, [t.theme, t.accent]);
// Scroll reveal
useEffect(() => {
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => e.isIntersecting && e.target.classList.add("in"));
}, { threshold: 0.08 });
document.querySelectorAll(".reveal").forEach((el) => io.observe(el));
return () => io.disconnect();
}, []);
return (
<>
setTweak("theme", v)}
/>
setTweak("accent", v)}
/>
>
);
}
ReactDOM.createRoot(document.getElementById("root")).render();