Share one top nav across docs and playground (#279)
* Share one top nav across docs, playground, and 404
Docs and the playground carried different chrome: the docs sidebar owned
the wordmark, search, nav links, and theme controls, while the playground
had a bespoke bar with a plain-text title and one "Docs" link. Nothing
carried across but the theme controls.
Both surfaces now render one SiteNav: wordmark, Docs/Playground/Storybook,
search, and the appearance controls. The 404 renders it too, so no surface
is left with its own bar.
The docs move from Fumadocs' docs layout to its notebook layout with
nav.mode 'top', which spans the header full width and starts the sidebar
beneath it. SiteNav is supplied through the layout's header slot, so it
also carries the sidebar collapse and drawer triggers, and the sidebar
footer no longer renders the theme switch.
Below lg the docs hand the destinations to the sidebar, which already
lists them there; surfaces with no sidebar keep them on a second nav row
below md. Below md the appearance controls move behind a disclosure --
they are 230px of pills that cannot share a 320px row with the wordmark,
search, and the sidebar trigger, and letting them wrap made the docs bar
113px tall while the layout still offset content by 56px.
Pre-bundle lucide-react: Fumadocs' search trigger and popover import from
its barrel, which unbundled is ~1750 module requests. Adding that to the
playground, which also loads Monaco, exhausted the browser's connection
pool in dev and the page never hydrated.
* Cover shared navigation behavior