// app.jsx — root component + tweaks wiring
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"accent": "#D9B97A",
"typePair": "cormorant-instrument",
"mirrorEcho": true,
"grain": 0.55,
"showStarOrnament": true
}/*EDITMODE-END*/;
const TYPE_PAIRS = {
'cormorant-instrument': {
serif: '"Cormorant Garamond", "EB Garamond", Georgia, serif',
sans: '"Instrument Sans", ui-sans-serif, system-ui, sans-serif',
label: 'Cormorant · Instrument',
},
'newsreader-geist': {
serif: '"Newsreader", "EB Garamond", Georgia, serif',
sans: '"Geist", ui-sans-serif, system-ui, sans-serif',
label: 'Newsreader · Geist',
},
'tenor-dmsans': {
serif: '"Tenor Sans", Georgia, serif',
sans: '"DM Sans", ui-sans-serif, system-ui, sans-serif',
label: 'Tenor · DM Sans',
},
};
const ACCENT_OPTIONS = [
'#D9B97A', // candle gold (default)
'#C9CFD9', // moonlight
'#B86653', // burnt umber / death
'#E8E2D5', // bone
];
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
React.useEffect(() => {
const root = document.documentElement;
root.style.setProperty('--star', t.accent);
// soft variant
root.style.setProperty('--star-soft', hexToRgba(t.accent, 0.18));
root.style.setProperty('--grain', String(t.grain));
const pair = TYPE_PAIRS[t.typePair] || TYPE_PAIRS['cormorant-instrument'];
root.style.setProperty('--serif', pair.serif);
root.style.setProperty('--sans', pair.sans);
// Mirror echo toggle
document.body.classList.toggle('no-echo', !t.mirrorEcho);
document.body.classList.toggle('no-star-orn', !t.showStarOrnament);
}, [t.accent, t.grain, t.typePair, t.mirrorEcho, t.showStarOrnament]);
return (
setTweak('accent', v)}
/>
setTweak('grain', v)}
/>
({ value: k, label: v.label }))}
onChange={(v) => setTweak('typePair', v)}
/>
setTweak('mirrorEcho', v)}
/>
setTweak('showStarOrnament', v)}
/>
);
}
function hexToRgba(hex, a) {
const h = hex.replace('#', '');
const r = parseInt(h.substring(0, 2), 16);
const g = parseInt(h.substring(2, 4), 16);
const b = parseInt(h.substring(4, 6), 16);
return `rgba(${r}, ${g}, ${b}, ${a})`;
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render();