Iteration 2. A split control at the end of the sticky row. Click the button half to swap the journey chain for the session timeline; open the pulldown half to choose how much timeline (sections and speakers, plus sentiment, plus themes). When the row is narrow, the button shows only its icon.
--bn-* tokens and shipped classes; only what would ship
Commentary: not the product
The frame is the content column at the height and width chosen above. Scroll inside it. Click Timeline, or open its pulldown and pick a detail. Click a flag, the speaker lane or a sentiment bar, or drag the blue window. The width control exercises the header's container query only: the transcript grid's own breakpoints follow the real window, so they don't move.
The right end of the sticky row. Top two rows: a wide row, light then dark. Third row: a narrow row (under 720 px), icon only. Last: the pulldown open.
Lucide is drawn here at 40, 20 and 14 px (14 is what the control uses). SF Symbols are named, not drawn: a browser engine never draws them (house rule, design-icon-system.md).
Each frame is the sticky slot alone at the live frame's width, same reading window, same current section. The bars measure each against the window height chosen above; the tick is one third.
| Thing | Status | Notes |
|---|---|---|
.bn-timeline-split + __more, __label | new CSS, small | Spacing, icon sizes and the pressed icon colour on top of the shipped .dimension-toggle / .dimension-btn; a container query on the header for the icon-only row. |
.bn-timeline-menu-hint | new CSS, one rule | Inside the shipped .export-dropdown-* menu. |
.bn-transcript-journey-header--timeline, .bn-transcript-timeline | new CSS | Wrap rule plus slot; one 0.15 s fade, off under reduced motion. |
.bn-tp-window, .bn-tp-player | new marks | The minimap's --bn-minimap-viewport-* tokens; accent. No new colour. |
Icon concept timeline | new, one line | Lucide gallery-horizontal ↔ SF timeline.selection; one row in the concept map in design-icon-system.md. |
| Strings | web: 5 new Mac: 3 new | Web: "Timeline", "Timeline detail", "Compact", "Standard", "Full". Mac View menu: "Show Session Timeline", "Hide Session Timeline", "Timeline Detail" (the details shared with the web). Owner-written, then 21 locales. |
SessionTapestry | reused | New props, roughly: lanes, window, current, player, and onJump wired to scrolling; sentiment bars jump instead of opening a popover when the host says so. |
| Chain, header, transcript, gutter, segmented control, menu | unchanged | All drawn here from the verbatim CSS. |
| Open | owner | Remembered how? (localStorage doesn't survive quitting the Mac app: forget on quit, or a native mirror like the subtitle prefs.) A session with no sections still has a timeline, so the control stays. Export: /tapestry is embedded, so it works offline; the hover thumbnail stays serve-only. |