feat(desktop): a tab's long title fades out at its end rather than ending in an ellipsis
Dean asked for long tab titles to fade out instead of ending in an ellipsis.
What changed
Tab(tab-strip.tsx) already measures whether its label is cut short, for the hint. That measurement now also setsdata-overflowon.tab-label.- In
desktop.css,.tab-labelno longer usestext-overflow: ellipsis. Whendata-overflow="true", amask-imagefades the label's last--label-fadeto transparent.--label-fadeis a new 20px token inbase.css. A label that fits isn't flagged, so it gets no fade. - The mask fades the text itself, not a gradient painted over a background, so it looks the same on every fill: rest, hover, chosen, and dragging, in light and dark. No colour literals were added;
#000is the mask's alpha stop, as in the strip-edge fades from #1955. - The fade is only on the label. The icon, the unread dot, and the Ć are untouched, and the hover-time fade under an unchosen tab's Ć still applies on top. The full name still shows in the Tooltip.
- The plan column's tab uses the same component, so long plan names fade too.
Test
desktop-plans.test.ts: "a tab's label cut short is marked to fade at its end, while a label shown whole is not". It stages a measured layout and checks that a long subagent tab gets data-overflow="true" and the short Work tab gets "false". Confirmed it fails without the change.
Evidence
Headless-Chrome crops of the real base.css + desktop.css (tab markup copied from what Tab renders, data-overflow measured in the page the way the component measures it, hover forced through a selector rewrite):
| Light | Dark |
|---|---|
![]() | ![]() |
Mac verification
CI could not verify the Mac UI, and ./scripts/verify.sh was not run. This was built on a Linux cloud VM. The manual Mac pass is LUKE-159. ./scripts/check.sh exits 0.
š¤ Generated with Claude Code

