// Tweaks mount. Palette, font, hero layout variant, density.
/* global React, ReactDOM, TweaksPanel, TweakSection, TweakRadio, useTweaks */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"palette": "aurora",
"font": "geist",
"density": "regular",
"heroVariant": "orb"
}/*EDITMODE-END*/;
const PALETTE_ACCENTS = {
aurora: ['#8EE8D8', '#7FA6FF'],
obsidian: ['#FF6B3D', '#FFC875'],
ion: ['#6C8BFF', '#9EE6FF'],
};
function TweaksApp() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
React.useEffect(() => {
document.documentElement.setAttribute('data-palette', t.palette);
document.documentElement.setAttribute('data-font', t.font);
document.documentElement.setAttribute('data-density', t.density);
// Update three.js scene accent
const [a, b] = PALETTE_ACCENTS[t.palette] || PALETTE_ACCENTS.aurora;
if (window.__heroScene) window.__heroScene.setAccent(a, b);
}, [t]);
React.useEffect(() => {
// Hero variants (layout tweak) — swap class on .hero
const hero = document.querySelector('.hero');
if (!hero) return;
hero.classList.remove('variant-orb','variant-split','variant-centered');
hero.classList.add('variant-' + t.heroVariant);
const heroInner = hero.querySelector('.hero-inner > div');
if (heroInner) {
if (t.heroVariant === 'centered') {
heroInner.style.alignItems = 'center';
heroInner.style.textAlign = 'center';
} else {
heroInner.style.alignItems = 'flex-start';
heroInner.style.textAlign = 'left';
}
}
}, [t.heroVariant]);
return (
setTweak('palette', v)} />
setTweak('font', v)} />
setTweak('density', v)} />
setTweak('heroVariant', v)} />
);
}
const tweaksHost = document.createElement('div');
document.body.appendChild(tweaksHost);
ReactDOM.createRoot(tweaksHost).render();