// 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 (
<>