Desktop rail removal — geometry & choreography study

Pale bands = the SPA's 6-column grid (real token widths). Goal: in the macOS embedded webview, drop the orange rails (and their close-X / drag affordances) so the webview content reclaims the full width, while keeping every keyline that a panel legitimately needs when open. Browser keeps everything as-is.

Web rail (remove in desktop) Web sidebar panel Center content Minimap (keep) Native macOS sidebar Space reclaimed Keyline (1px border)

A · Browser today — Quotes tab, both sidebars CLOSED

Browser · Quotes · closed — rails own the visible edges; minimap + tag-rail eat 116px on the right even when tags are closed
toc-rail36px
0
center (1fr)
minimap80px
0
tag-rail36px

Keyline ownership (closed): the left keyline is the toc-rail's border-right at x≈36; the right keyline is the tag-rail's border-left. Both lines exist only because the rail exists. Remove the rail and these lines vanish — which is what we want, since native chrome draws the edge.

B · Browser today — TOC pushed OPEN (the keyline travels)

Browser · Quotes · TOC push-open — rail is display:none; the keyline is now the panel's right border at x≈280
0
toc-sidebar
× Contents

· Friction
· Journeys
· Delight
280px
center
minimap80px
0
tag-rail36px

The travelling keyline: opening animates grid-template-columns (rail 36→0, panel 0→280) over 75ms. The panel's own border-right rides its growing right edge — the keyline slides from x≈0 to x≈280 like a curtain rod. No separate keyline element exists; each panel carries its own. This is why removal is clean: a closed 0-width panel shows no line; an open panel brings its line with it.

C · Desktop proposed — both CLOSED (rails gone, width reclaimed)

macOS app · Quotes · closed — native sidebar to the left; webview reclaims 36px each side
  Bristlenose — unified toolbar  ·  [☰ Contents] [Tags ▦] live in NATIVE toolbar
Lenses
Project
Quotes
Analysis
Projects
IKEA study
Acme research
+36
center (full width)
minimap80px
+36

Issue ① — left edge: the native NSSplitView divider (grey) is now the only left edge. The webview content starts at its own x=0 + --bn-gutter-left: 2rem. No web keyline needed — good. But verify there's no double divider (native divider + a stray web border).

Issue ② — right edge: with the tag-rail gone, the minimap becomes the rightmost element. Its only margin from the window edge is padding: 0 0.75rem. And on non-Quotes tabs (no minimap) the center's right margin is just --bn-gutter-right: 0.5rem (≈8px) — that gutter was sized assuming a 36px rail sat beyond it. The webview fills the pane to the window edge (macOS adds no inset), so content would sit ~8px off the glass. Likely want to bump --bn-gutter-right in embedded mode for symmetric breathing room.

Issue ③ — scrollbar gutter: tag-rail carried margin-right:8px and tag-sidebar padding-bottom:2rem "to clear the macOS auto-hiding scrollbar". Those hacks disappear with the rail; confirm the overlay scrollbar (now floating over the minimap / content edge) auto-hides cleanly and doesn't clip the last row.

D · Desktop proposed — TOC pushed OPEN (nested-list pattern)

macOS app · Quotes · TOC push-open — native project list + web Contents list, Mail-style
  [☰ Contents ✓ pressed] toolbar toggle drives the panel — no web rail, no close-X
Lenses
Quotes
Projects
IKEA study
0
toc-sidebar
Contents

· Friction
· Journeys
· Delight
280px · NO close-X
center
minimap80px
+36

Keyline (open): the toc-sidebar brings its border-right (at x≈280) — needed, separates the in-report Contents list from the quotes. Its left edge sits at webview x=0 against the native split divider. Result is a legit macOS three-pane: native project list → divider → web Contents → keyline → quotes (Mail / Notes idiom). The web panel's left edge must not draw its own border or you double the divider.

Removed affordances: no rail icon (toolbar replaces it), no close-X (toolbar toggle + [ key close it), no rail drag-to-open, and overlay/hover-peek mode disappears entirely — it was reachable only through the rail. Desktop TOC becomes a clean two-state closed↔push, matching the tag side and native NSSplitView semantics.