// app.jsx — Olena's Portraits function Nav({ active, onNav, openCommission }) { const links = [ { id: 'works', label: 'Works' }, { id: 'process', label: 'Studio' }, { id: 'commission', label: 'Commission' }, { id: 'contact', label: 'Contact' }, ]; return ( ); } function App() { const [detailId, setDetailId] = useState(null); const [active, setActive] = useState('works'); useEffect(() => { document.documentElement.dataset.palette = 'paper'; document.documentElement.dataset.accent = 'oxblood'; }, []); useEffect(() => { const ids = ['works', 'process', 'commission', 'contact']; const els = ids.map((i) => document.getElementById(i)).filter(Boolean); if (!els.length) return undefined; const obs = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) setActive(e.target.id); }); }, { rootMargin: '-40% 0px -55% 0px' }); els.forEach((el) => obs.observe(el)); return () => obs.disconnect(); }, []); useEffect(() => { document.body.style.overflow = detailId ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [detailId]); const openWork = (id) => setDetailId(id); const closeWork = () => setDetailId(null); const navTo = (id) => { if (id === 'detail') return; document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' }); }; return ( <>