/* Top nav - clean, restrained, becomes slightly more solid on scroll */

function Nav() {
  const [scrolled, setScrolled] = useState(false);
  const [open, setOpen] = useState(false);
  useEffect(() => {
    const on = () => setScrolled(window.scrollY > 20);
    on();
    addEventListener('scroll', on, { passive: true });
    return () => removeEventListener('scroll', on);
  }, []);

  const links = [
    { label: 'The GNG', href: '#lore' },
    { label: 'Wins', href: '#wins' },
    { label: 'Creators', href: '#creators' },
    { label: 'Motion', href: '#motion' },
    { label: 'Gang Map', href: '#map' },
  ];

  return (
    <>
      <nav className={`nav ${scrolled ? 'is-scrolled' : ''}`}>
        <a className="nav-logo" href="#top">
          <img style={{ width: 40, height: 40, borderRadius: '50%', objectFit: 'cover' }} src="/assets/avatars/webesgng.jpg" alt="Webes GNG" />
          <span className="nav-wordmark">WEBES <span className="g">GNG</span></span>
        </a>
        <div className="nav-links">
          {links.map(l => <a key={l.href} href={l.href} className="nav-link">{l.label}</a>)}
        </div>
        <a href="#/admin" className="nav-admin" title="Gang ops console">Admin</a>
        <ThemeToggle/>
        <a href="#join" className="nav-cta">
          <span className="dot"></span>
          Join the GNG
        </a>
        <button className="nav-burger" onClick={() => setOpen(true)} aria-label="Open menu">
          <span></span><span></span>
        </button>
      </nav>

      {open && (
        <div className="nav-overlay">
          <button className="nav-close" onClick={() => setOpen(false)}>✕</button>
          <div className="nav-overlay-inner">
            <div className="nav-overlay-eyebrow eyebrow">- the map</div>
            {links.map((l, i) => (
              <a key={l.href} href={l.href} className="nav-overlay-link"
                 style={{ animationDelay: `${i*70}ms` }}
                 onClick={() => setOpen(false)}>
                <span className="node"></span>{l.label}
              </a>
            ))}
            <a href="#join" className="nav-overlay-link cta"
               style={{ animationDelay: `${links.length*70}ms` }}
               onClick={() => setOpen(false)}>
              <span className="node spark"></span>Join the GNG
            </a>
          </div>
        </div>
      )}

      <style>{`
        .nav {
          position: fixed; top: 0; left: 0; right: 0; z-index: 500;
          display: flex; align-items: center; justify-content: space-between;
          padding: 18px 32px;
          transition: padding .35s var(--ease-out), background .35s, backdrop-filter .35s, border-color .35s;
          border-bottom: 1px solid transparent;
        }
        .nav.is-scrolled {
          padding: 12px 32px;
          background: var(--glass);
          backdrop-filter: blur(18px) saturate(140%);
          border-bottom-color: var(--ln-06);
        }
        .nav-logo { display: flex; align-items: center; gap: 12px; }
        .nav-wordmark {
          font-family: var(--font-display);
          font-weight: 600;
          letter-spacing: .04em;
          font-size: 14px;
          color: var(--text);
        }
        .nav-wordmark .g {
          background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent;
          font-weight: 700;
        }
        .nav-links {
          display: flex; gap: 4px;
          padding: 6px;
          background: var(--w-025);
          border: 1px solid var(--w-05);
          border-radius: 999px;
        }
        .nav-link {
          padding: 8px 16px;
          border-radius: 999px;
          font-size: 13px;
          color: var(--muted);
          letter-spacing: .02em;
          font-weight: 500;
          transition: color .25s, background .25s;
        }
        .nav-link:hover { color: var(--text); background: var(--w-04); }
        .nav-cta {
          display: inline-flex; align-items: center; gap: 10px;
          padding: 10px 18px 10px 14px;
          border-radius: 999px;
          background: var(--yellow);
          color: #0a0711;
          font-weight: 600;
          font-size: 13px;
          letter-spacing: .01em;
          box-shadow: 0 6px 24px rgba(255,199,0,.3);
          transition: box-shadow .3s, transform .3s var(--ease-out);
        }
        .nav-cta:hover { box-shadow: 0 8px 36px rgba(255,199,0,.55); transform: translateY(-1px); }
        .nav-admin {
          font-size: 12px; color: var(--muted); font-weight: 500;
          padding: 8px 14px; border-radius: 999px; letter-spacing: .04em;
          border: 1px solid var(--ln-1);
          transition: color .25s, border-color .25s;
        }
        .nav-admin:hover { color: var(--text); border-color: rgba(139,92,246,.45); }
        @media (max-width: 980px) { .nav-admin { display: none; } }
        .nav-cta .dot {
          width: 8px; height: 8px; border-radius: 50%;
          background: #0a0711;
          position: relative;
        }
        .nav-cta .dot::after {
          content: ""; position: absolute; inset: -4px;
          border-radius: 50%;
          border: 1.5px solid rgba(10,7,17,.5);
          animation: pulseRing 1.8s ease-out infinite;
        }
        @keyframes pulseRing {
          0% { transform: scale(.6); opacity: 1; }
          100% { transform: scale(1.8); opacity: 0; }
        }
        .nav-burger {
          display: none;
          width: 40px; height: 40px;
          border-radius: 999px;
          background: var(--w-05);
          border: 1px solid var(--w-08);
          flex-direction: column; gap: 5px;
          align-items: center; justify-content: center;
        }
        .nav-burger span {
          display: block; width: 16px; height: 1.5px; background: var(--text); border-radius: 2px;
        }

        @media (max-width: 980px) {
          .nav-links { display: none; }
          .nav-cta { display: none; }
          .nav-burger { display: flex; }
          .nav { padding: 14px 20px; }
        }

        /* Overlay menu */
        .nav-overlay {
          position: fixed; inset: 0; z-index: 600;
          background: radial-gradient(60% 50% at 50% 30%, rgba(139,92,246,.25), transparent 70%), #0a0711;
          display: flex; align-items: center; justify-content: center;
          animation: overlayIn .5s var(--ease-out);
        }
        @keyframes overlayIn {
          from { opacity: 0; }
          to { opacity: 1; }
        }
        .nav-close {
          position: absolute; top: 20px; right: 20px;
          width: 44px; height: 44px; border-radius: 50%;
          background: var(--w-06);
          color: var(--text); font-size: 18px;
        }
        .nav-overlay-inner {
          display: flex; flex-direction: column; gap: 18px;
          align-items: flex-start;
          padding: 32px;
        }
        .nav-overlay-eyebrow { margin-bottom: 12px; }
        .nav-overlay-link {
          display: inline-flex; align-items: center; gap: 16px;
          font-family: var(--font-display);
          font-weight: 600;
          font-size: clamp(28px, 7vw, 48px);
          letter-spacing: -.02em;
          color: var(--text);
          opacity: 0;
          animation: linkIn .55s var(--ease-out) forwards;
        }
        @keyframes linkIn {
          from { opacity: 0; transform: translateY(20px); }
          to { opacity: 1; transform: translateY(0); }
        }
        .nav-overlay-link .node {
          width: 14px; height: 14px; border-radius: 50%;
          background: var(--grad);
          box-shadow: 0 0 16px rgba(139,92,246,.7);
        }
        .nav-overlay-link.cta { color: var(--yellow); }
        .nav-overlay-link .node.spark { background: var(--yellow); box-shadow: 0 0 16px var(--yellow); }
      `}</style>
    </>
  );
}

window.Nav = Nav;
