function Nav() {
  const [scrolled, setScrolled] = React.useState(false);
  const [open, setOpen] = React.useState(false);

  React.useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 30);
    window.addEventListener('scroll', onScroll, { passive: true });
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  // Close on Escape
  React.useEffect(() => {
    if (!open) return;
    const onKey = (e) => { if (e.key === 'Escape') setOpen(false); };
    window.addEventListener('keydown', onKey);
    return () => window.removeEventListener('keydown', onKey);
  }, [open]);

  // Lock body scroll while menu is open
  React.useEffect(() => {
    if (open) {
      const prev = document.body.style.overflow;
      document.body.style.overflow = 'hidden';
      return () => { document.body.style.overflow = prev; };
    }
  }, [open]);

  // Close menu if viewport widens past mobile breakpoint
  React.useEffect(() => {
    if (!open) return;
    const mq = window.matchMedia('(min-width: 961px)');
    const onChange = (e) => { if (e.matches) setOpen(false); };
    mq.addEventListener ? mq.addEventListener('change', onChange) : mq.addListener(onChange);
    return () => {
      mq.removeEventListener ? mq.removeEventListener('change', onChange) : mq.removeListener(onChange);
    };
  }, [open]);

  const close = () => setOpen(false);

  return (
    <nav className={`nav-wrap ${scrolled ? 'scrolled' : ''} ${open ? 'menu-open' : ''}`}>
      <a href="#top" className="nav-logo nav-logo-img" aria-label="The Solar Trailer Co." onClick={close}>
        <img src="assets/logo.png" alt="The Solar Trailer Co." />
      </a>
      <div className="nav-links">
        <a href="#trailers">Trailers</a>
        <a href="#modules">Modules</a>
        <a href="#customers">Use cases</a>
        <a href="#buyhire">Buy or hire</a>
        <a href="#faq">FAQ</a>
      </div>
      <a href="#contact" className="nav-cta">Reserve a slot <ArrowRight size={14} stroke={2}/></a>
      <button
        type="button"
        className={`nav-burger ${open ? 'is-open' : ''}`}
        aria-label="Toggle menu"
        aria-expanded={open}
        aria-controls="mobile-menu"
        onClick={() => setOpen((v) => !v)}
      >
        <span></span>
      </button>

      {/* Mobile menu overlay */}
      <div
        id="mobile-menu"
        className={`mobile-menu ${open ? 'is-open' : ''}`}
        aria-hidden={!open}
        onClick={(e) => { if (e.target === e.currentTarget) close(); }}
      >
        <div className="mobile-menu-panel" role="dialog" aria-modal="true" aria-label="Site navigation">
          <div className="mobile-menu-links">
            <a href="#trailers" onClick={close}>Trailers</a>
            <a href="#modules" onClick={close}>Modules</a>
            <a href="#customers" onClick={close}>Use cases</a>
            <a href="#buyhire" onClick={close}>Buy or hire</a>
            <a href="#faq" onClick={close}>FAQ</a>
          </div>
          <a href="#contact" className="nav-cta mobile-menu-cta" onClick={close}>
            Reserve a slot <ArrowRight size={14} stroke={2}/>
          </a>
        </div>
      </div>
    </nav>
  );
}

function LogoMark() {
  // Stylised "ST" mark in yellow on dark — abstracted from the wordmark
  return (
    <svg viewBox="0 0 40 40" width="40" height="40" aria-hidden>
      <rect width="40" height="40" rx="3" fill="#0e0e0d"/>
      <path d="M9 11 L20 6 L31 11 L31 20 L20 25 L20 34 L14 31 L14 22 L9 20 Z" fill="#f5b81e"/>
      <path d="M14 22 L20 25 L20 18 L14 15 Z" fill="#0e0e0d" opacity="0.45"/>
    </svg>
  );
}

window.Nav = Nav;
window.LogoMark = LogoMark;
