The pinned step's per-category rows were a second rendering of the same
categories, drifted from the one above: their own grid, dimmed regular-weight
labels, a fixed figure column. The panel now renders the composition card's
own chip legend — same dot, 600-weight label, right-aligned figures with the
secondary share, same hover highlight and 160px grid reflow — in the shared
CATS order, so a category reads identically in both cards.
Delta mode has no counterpart above, so makeLegend gains a delta variant: the
chips print the signed change colored by sign, and both the share and its
"of used" hint drop out. The panel's chips report hovers back exactly as the
composition legend's do, and the reserved lane mirrors the chip grid so the
pending and loaded panels still measure alike.
Opening the Context tab, and every step landing after it, moved the cards
below: the page grew 343px on a cold open and the trend card jitters by a few
pixels on each step. Seven independent sources, all the same shape — a box
whose height came from its content instead of from its role:
- The brief lane under the chart held a 76px floor but its rows were 24.5px
bare and 26.5px carrying a chip, so the lane measured 79.5px or 81.5px
depending on the step. Every row is now a constant 27px.
- The detail header let its metric pills share a wrapped line with the title,
so its height followed which pill topped each line as the figures changed.
The pills now claim a full row of their own.
- The file card's empty state replaced the controls and the 320px list with
a one-line note, a 265px collapse on the first read of a session. The band
and the list lane now render in every state, and the lane holds the list's
height.
- The file card's filter band rewrapped as its tallies gained digits; it now
reserves its folded height, which depends on the card's width alone.
- The context browser's category rows wrapped as the per-step item counts
changed; they now stay on one line and the name ellipsizes.
- A title carrying only text wrapped when its scope chip changed length
(longest in English), resizing the card mid-scrub. Text-only titles keep
one line; titles carrying toggle groups keep the wrap they need.
- The trend card's pending body rendered as a one-line note and grew by its
whole height when the first step arrived, shoving the page down. It now
stands in the panel's OWN boxes — same classes, same grid — so the detail
fills the card instead of growing it.
Measured across 360px–1440px in both locales: every card's height variance
while scrubbing a 40-step session is 0, and the cold-open fold is 5px.
browser.spec.ts (2360), trendChart.spec.ts (1629), contextView.spec.ts (1504), and
overview.spec.ts (1065) exceeded the 1000-line limit. Each splits along its existing
describe seams into same-directory siblings, with the fixtures that more than one
sibling needs extracted once into a shared harness.
The move is verbatim: test titles, describe blocks, and every assertion line are
preserved exactly (2061 tests before and after, no duplicate titles, no skips), and
the suite reports the same coverage.