Maximize beside the nav, not over it

Featurekamo-internal
Shipped
September 10, 2026 at 4:24 PM UTC
Author
Kamo
Commit
0c5ef99

A maximized tool window used to take the whole viewport. It, its navigator column and its tab strip were all pinned at (0,0) at the dock's stacking level, over both navs — so a member reading a maximized window could reach no navigation until they put it away. The pane is now everything below NavTop and right of NavPri. The window, the navigator and the strip start at the rail's edge and under the bar, read from the same two CSS variables AuthedChrome offsets the page's own content box by (paneGeometry.ts), so an expanded rail moves the page and the pane together. The navigator and the strip slide inside clipping slots, so they come out from behind the rail and the bar rather than across them, and all three follow a rail toggle with the window's own lead-and-trail timing. While a window is maximized, the nav also has to act on it: - An option that goes to a PAGE announces nav:page first, and every window still on screen is put away as a hexhead — otherwise the page would load underneath the pane. Clicking the page you are already on counts too: it is asking to see that page. - An option that opens a TOOL WINDOW marks its tool:open with origin: 'nav', and the one funnel every open passes through turns that into maximized: true. The new window takes the pane, the old one goes to a hexhead through the store's own swap, and the navigator and tabs follow the new window — to its bucket, to the terminal list, or away for a tool with no navigator. Both apply only while a window holds the pane (the member's call). With nothing maximized a nav click behaves exactly as before. The rules are pure (navPaneRule.ts) and the nav only announces (app/lib/navIntent.ts); **************** fails on a bare tool:open or router.push written into a nav surface. Covered: both navs' options and menus, Settings, the command palette, the logo, KamoMobile, the plan pill, NavTop's links and bell, the Exec2Exec button, and the Interaction Center's rows. Fallout fixed in the same change: - The rail's hover-peek and the Interaction Center (panel and backdrop) sat at z 26-30 under a pane at 201 and climbing, so once the nav was reachable they opened BEHIND it. The nav's layers are lifted above the pane by its own level while one is held, keeping their order (navLayerZ, useMaximizedPaneZ). - The navigator's seam computed its width as the pointer's x, true only while the navigator started at 0. It measures from the navigator's own left edge now, and caps the width at a share of the pane rather than the screen. - Chess and Hold'em chose their layout from window.innerWidth when maximized — too wide by the rail, and stale on a rail toggle. They measure their own root (useMeasuredBox, moved up to tools/ to be shared); **************** keeps it that way.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing