header: move primary nav to a Browse bar below the 728x90 leaderboard

The main sticky top row now holds only the logo, Reading List icon,
notification bell, and search box. The Events dropdown, navLinks
(Newsletter, Forum), and About dropdown were lifted out of the top
row and re-rendered in a new "Browse bar" that sits directly below
the header leaderboard banner.

Visual result:
  [ top utility bar (account / admin) ]
  [ logo                          📑 🔔 🔍 ]
  [ 728x90 leaderboard ]
  [ Events ▾  Newsletter  Forum  About ▾ ]   ← new Browse bar
  [ LIVE WIRE ····                       ]
  [ RECENT FORUM POSTS ····              ]

The mobile hamburger drawer is unchanged — it already keeps all the
nav items consolidated for small screens.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ryan Salazar
2026-05-19 23:08:05 +00:00
parent a52f8adb21
commit 8e7e152422

View File

@@ -334,48 +334,11 @@ export default function Header() {
/>
</Link>
{/* Desktop Nav Links — arrow key navigable + dropdowns */}
<div className="hidden lg:flex items-stretch gap-5" role="list" aria-label="Site sections">
{/* nav-desktop-redesign:start */}
<EventsDropdown />
{/* nav-desktop-redesign:end */}
{navLinks?.map((link, i) => (
<div
key={link?.label}
className="relative group/nav"
role="listitem">
<Link
href={link?.href}
ref={(el) => { navLinksRef.current[i] = el; }}
className="nav-link-bb h-[60px] flex items-center focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] focus-visible:ring-offset-1 focus-visible:ring-offset-[#111]"
onKeyDown={(e) => handleNavKeyDown(e, i, navLinksRef)}
tabIndex={i === 0 ? 0 : -1}
aria-haspopup={link?.dropdown ? "true" : undefined}>
{link?.label}
</Link>
{link?.dropdown && (
<div
className="absolute left-0 top-full min-w-[200px] bg-[#0d0d0d] border border-[#252525] shadow-xl rounded-sm py-1 opacity-0 invisible translate-y-1 group-hover/nav:opacity-100 group-hover/nav:visible group-hover/nav:translate-y-0 group-focus-within/nav:opacity-100 group-focus-within/nav:visible group-focus-within/nav:translate-y-0 transition-all duration-150 z-50"
role="menu"
aria-label={`${link.label} categories`}>
{link.dropdown.map((sub) => (
<Link
key={sub.href + sub.label}
href={sub.href}
role="menuitem"
className="block px-4 py-2 text-xs font-body text-[#bbb] hover:bg-[#1a1a1a] hover:text-[#3b82f6] focus:outline-none focus-visible:bg-[#1a1a1a] focus-visible:text-[#3b82f6] uppercase tracking-wider transition-colors">
{sub.label}
</Link>
))}
</div>
)}
</div>
))}
{/* nav-desktop-redesign:after */}
<AboutDropdown />
{/* nav-desktop-redesign:after:end */}
{/* Reading List Icon Link */}
{/* Nav items moved to the Browse bar that sits below the
header leaderboard banner. Only the notification bell +
search remain in the top sticky row. */}
<div className="flex-1" aria-hidden="true" />
<div className="hidden lg:flex items-center gap-3">
<Link
href="/reading-list"
aria-label="Reading List"
@@ -384,7 +347,6 @@ export default function Header() {
<path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z" />
</svg>
</Link>
{/* Notification Bell */}
<NotificationCenter />
</div>
@@ -569,6 +531,24 @@ export default function Header() {
</div>
</div>
)}
{/* BROWSE BAR — primary nav (was previously above the banner) */}
<div className="bb-browse-bar hidden md:block" role="navigation" aria-label="Browse sections">
<div className="max-w-container mx-auto px-4">
<div className="bb-browse-row">
<EventsDropdown />
{navLinks.map((link) => (
<Link
key={link.label}
href={link.href}
className="bb-browse-item">
{link.label}
</Link>
))}
<AboutDropdown />
</div>
</div>
</div>
</>
);
}