// Caret landing — app composition + Tweaks
const HEADLINES = [
'Find it. Reuse it. Get it done.',
'Write at the speed of your cursor.',
'AI actions on whatever you\u2019re working on.',
'Select. ⌥Space. Done.',
];
const ACCENTS = {
'#1F6BFF': { hover: '#195CE0', press: '#1450C7', soft: '#E8F0FF' }, // spirit blue
'#2E83FF': { hover: '#2474EC', press: '#1E62CC', soft: '#E7F1FF' }, // brief blue
'#6A5CFF': { hover: '#5A4DEB', press: '#4C40D6', soft: '#ECEAFF' }, // indigo
'#18C2BE': { hover: '#12ABA8', press: '#0E928F', soft: '#E1F8F7' }, // teal
};
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"headline": "Find it. Reuse it. Get it done.",
"accent": "#1F6BFF",
"animateHero": true
}/*EDITMODE-END*/;
function usePrefersReduced() {
const [r, setR] = useState(false);
useEffect(() => {
const m = window.matchMedia('(prefers-reduced-motion: reduce)');
const on = () => setR(m.matches); on();
m.addEventListener('change', on); return () => m.removeEventListener('change', on);
}, []);
return r;
}
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
const prefersReduced = usePrefersReduced();
const reduced = prefersReduced || !t.animateHero;
useEffect(() => {
const a = ACCENTS[t.accent] || ACCENTS['#1F6BFF'];
const r = document.documentElement.style;
r.setProperty('--accent', t.accent);
r.setProperty('--accent-hover', a.hover);
r.setProperty('--accent-press', a.press);
r.setProperty('--accent-soft', a.soft);
r.setProperty('--shadow-accent', `0 6px 20px ${t.accent}59`);
}, [t.accent]);
return (
setTweak('headline', v)} />
setTweak('animateHero', v)} />
setTweak('accent', v)} />
);
}
ReactDOM.createRoot(document.getElementById('root')).render();