Render and hydrate the global navbar into its placeholder.
PageLayoutHelper::buildNavbarPlaceholder() emits an empty
<div id="navbar-root" data-current-page="…">; this fetches the chrome data
from GET /api/v1/navbar, builds the markup (navbar_renderer.ts) and hydrates
it. Called from main.ts after Alpine.start() — so we hand the freshly injected
subtree to Alpine.initTree (the navbar/themeToggle/navbarStreak components are
already registered) and then realise its lucide icons.
No-ops on pages without the placeholder (login, minimal headers).
Render and hydrate the global navbar into its placeholder.
PageLayoutHelper::buildNavbarPlaceholder() emits an empty
<div id="navbar-root" data-current-page="…">; this fetches the chrome data from GET /api/v1/navbar, builds the markup (navbar_renderer.ts) and hydrates it. Called from main.ts after Alpine.start() — so we hand the freshly injected subtree to Alpine.initTree (the navbar/themeToggle/navbarStreak components are already registered) and then realise its lucide icons.No-ops on pages without the placeholder (login, minimal headers).