// Shared components — Nav, Footer, Icon, Button const Icon = ({ name, size = 20, style }) => ( ); const Button = ({ children, variant = 'primary', size, href, onClick, icon, iconRight, type, ...rest }) => { const cls = ['btn', `btn-${variant}`, size === 'lg' && 'btn-lg'].filter(Boolean).join(' '); const Tag = href ? 'a' : 'button'; return ( {icon && } {children} {iconRight && } ); }; const Nav = ({ currentPage, onNav }) => { const [open, setOpen] = React.useState(false); React.useEffect(() => { if (window.lucide) lucide.createIcons(); }, [open]); React.useEffect(() => { document.body.style.overflow = open ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [open]); const go = (key) => { setOpen(false); onNav(key); }; return ( {/* Rendered as sibling of