The app shell lays out a Marmot screen: an optional full-width system banner, the sidebar on the
start edge, the top bar, the scrolling main area with page gutters (space-8, or space-4 under
720px) and an optional details blade on the end edge. The page is paper; the sidebar sits on
mm-chrome behind a hairline (paper on Light, sunken on Peat), so the chrome stays quieter than the data it frames.
The shell provides the landmarks: the top bar is wrapped in a header, the content in main and
the blade in a labelled aside; slot an mm-sidebar-nav (a nav) into sidebar. A "Skip to
content" link is the first thing Tab reaches.
⌘B (Ctrl+B elsewhere) collapses the sidebar to a 56px rail and back, and the shell passes the state
to the slotted sidebar as collapsed. Under 720px the sidebar becomes an off-canvas drawer, opened
by the menu button an mm-top-bar shows at that width (or openDrawer()): a modal dialog that
keeps Tab inside it, closes on Escape, the scrim or a link, and returns focus to the button.
One mm-top-bar. The blade column sizes to the blade it holds (an mm-details-blade is 36rem, or its 3rem rail when folded), capped at half the shell. Full-bleed pages (a lineage canvas, a split workspace) set bleed to drop the main area's gutters and fill it edge to edge; data-bleed is also honoured.
blade
A details blade on the end edge; the column takes the blade's own width. The aside is only shown when filled.