/* tweaks-app.jsx — renders the Tweaks panel and applies values to the page */
const { useEffect } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"hero": "stack",
"accent": "#9c7c45",
"tone": "bone",
"grain": true
}/*EDITMODE-END*/;
// accent -> [accent, darker accent-ink]
const ACCENTS = {
"#9c7c45": "#7c6133", // antique brass
"#8a8f7a": "#646956", // sage olive
"#7a3b34": "#5c2a24", // oxblood
"#3f5b6b": "#2c4350", // slate blue
};
const TONES = {
bone: { "--bone": "#f2ede3", "--bone-deep": "#ebe4d6", "--paper": "#faf7f0" },
porcelain: { "--bone": "#f6f3ec", "--bone-deep": "#ece7dc", "--paper": "#fdfcf8" },
sand: { "--bone": "#ece2d2", "--bone-deep": "#e2d6c2", "--paper": "#f6efe2" },
};
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
useEffect(() => { document.body.dataset.hero = t.hero; }, [t.hero]);
useEffect(() => {
const root = document.documentElement.style;
root.setProperty("--accent", t.accent);
root.setProperty("--accent-ink", ACCENTS[t.accent] || "#7c6133");
}, [t.accent]);
useEffect(() => {
const root = document.documentElement.style;
const tone = TONES[t.tone] || TONES.bone;
Object.entries(tone).forEach(([k, v]) => root.setProperty(k, v));
}, [t.tone]);
useEffect(() => {
const sheet = document.getElementById("__grain_toggle") || (() => {
const s = document.createElement("style"); s.id = "__grain_toggle"; document.head.appendChild(s); return s;
})();
sheet.textContent = `body::before{opacity:${t.grain ? 0.04 : 0} !important;}`;
}, [t.grain]);
return (
setTweak("hero", v)}
/>
setTweak("accent", v)}
/>
setTweak("tone", v)}
/>
setTweak("grain", v)}
/>
);
}
ReactDOM.createRoot(document.getElementById("tweaks-root")).render();