// tweaks-app.jsx — wires the Tweaks panel into the gaming tracker
// Three expressive controls: Vibe (palette), Density (rhythm), Surface (texture).
const VIBES = {
cyber: {
label: 'Cyber',
swatch: ['#00ffaa', '#0d0d10', '#00aaff'],
vars: {
'--bg': '#0d0d10',
'--bg-2': '#161620',
'--bg-3': '#1f1f2c',
'--bg-4': '#2a2a35',
'--border': '#2a2a35',
'--border-2': '#3a3a48',
'--text': '#e8e8ec',
'--text-dim': '#aaaaaa',
'--text-faint': '#666666',
'--accent': '#00ffaa',
'--accent-2': '#00aaff',
},
},
vapor: {
label: 'Vapor',
swatch: ['#ff5ec4', '#110a26', '#5dd6ff'],
vars: {
'--bg': '#110a26',
'--bg-2': '#1c1138',
'--bg-3': '#281a4b',
'--bg-4': '#352465',
'--border': '#352465',
'--border-2': '#4a3585',
'--text': '#f3eaff',
'--text-dim': '#b5a4d6',
'--text-faint': '#7a6b9c',
'--accent': '#ff5ec4',
'--accent-2': '#5dd6ff',
},
},
forge: {
label: 'Forge',
swatch: ['#ff8b3d', '#14100a', '#ffd54a'],
vars: {
'--bg': '#14100a',
'--bg-2': '#1f1812',
'--bg-3': '#2a201a',
'--bg-4': '#3a2c20',
'--border': '#3a2c20',
'--border-2': '#503a26',
'--text': '#f5ebdf',
'--text-dim': '#c2a98c',
'--text-faint': '#7c6a4f',
'--accent': '#ff8b3d',
'--accent-2': '#ffd54a',
},
},
mono: {
label: 'Mono',
swatch: ['#f0f0f0', '#0a0a0a', '#888888'],
vars: {
'--bg': '#0a0a0a',
'--bg-2': '#141414',
'--bg-3': '#1c1c1c',
'--bg-4': '#2a2a2a',
'--border': '#2a2a2a',
'--border-2': '#3a3a3a',
'--text': '#f0f0f0',
'--text-dim': '#9a9a9a',
'--text-faint': '#5a5a5a',
'--accent': '#f0f0f0',
'--accent-2': '#888888',
},
},
};
function App() {
const [t, setTweak] = useTweaks(window.TWEAK_DEFAULTS);
// Apply tweaks to the live DOM
React.useEffect(() => {
const v = VIBES[t.vibe] || VIBES.cyber;
const r = document.documentElement;
Object.entries(v.vars).forEach(([k, val]) => r.style.setProperty(k, val));
}, [t.vibe]);
React.useEffect(() => {
document.body.dataset.density = t.density || 'regular';
}, [t.density]);
React.useEffect(() => {
document.body.dataset.bg = t.bgPattern || 'grid';
}, [t.bgPattern]);
return (
v.swatch)}
onChange={(arr) => {
// map swatch back to vibe key
const key = Object.entries(VIBES).find(([, v]) => v.swatch.join() === arr.join())?.[0] || 'cyber';
setTweak('vibe', key);
}}
/>
setTweak('density', v)}
/>
setTweak('bgPattern', v)}
/>
);
}
ReactDOM.createRoot(document.getElementById('tweaks-mount')).render();