Transcript: the journey chain or the timeline, in one sticky slot

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.

Artefact: real --bn-* tokens and shipped classes; only what would ship Commentary: not the product
Mockup controls

1 · Live: scroll the transcript, use the control, click the timeline

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.

Transcript, Session 3: livenew: split control · menu · window · player mark
p1Rosa
Scroll or click to see what the page would do.

2 · The split control, in each state

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.

3 · The glyph: an SF Symbol and its Lucide pair

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).

4 · How tall each detail is

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.

5 · What's new, and what isn't

ThingStatusNotes
.bn-timeline-split + __more, __labelnew CSS, smallSpacing, 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-hintnew CSS, one ruleInside the shipped .export-dropdown-* menu.
.bn-transcript-journey-header--timeline, .bn-transcript-timelinenew CSSWrap rule plus slot; one 0.15 s fade, off under reduced motion.
.bn-tp-window, .bn-tp-playernew marksThe minimap's --bn-minimap-viewport-* tokens; accent. No new colour.
Icon concept timelinenew, one lineLucide gallery-horizontal ↔ SF timeline.selection; one row in the concept map in design-icon-system.md.
Stringsweb: 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.
SessionTapestryreusedNew 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, menuunchangedAll drawn here from the verbatim CSS.
OpenownerRemembered 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.