- Shipped
- September 2, 2026 at 7:06 AM UTC
- Author
- Kamo
- Commit
- c828486
Reported as the reply arrow and the ⋮ "only half showing" at every view and every zoom level. Geometry, not styling, which is why zooming never helped: the controls were absolutely positioned 28px OUTSIDE the bubble, into a gutter that is CHAT_CONSTANTS.SPACING.messages = 14px wide, and the conversation hides its own horizontal overflow. 14 of each 30px button lay past the clip, on both sides — somebody else's message against the left edge, the member's own against the right. The controls move onto a rail anchored to the message's OUTER edge and grown INWARD, so its far edge is at most its own width from the edge of the message and always points at the middle of the window. There is no viewport narrow enough to clip that, which is the property the new test holds: no negative offset, whatever number someone later reaches for. The rest of the report was that they "feel poor, hard to notice", and most of that turned out to be true of the behaviour rather than the paint: - Resting invisible, it still took clicks. A strip of the conversation swallowed them with nothing on screen to explain why the message underneath had not responded. It now rests untouchable as well as unseen. - Hover was the only way in, so a keyboard could tab to the buttons and never see them, and a touch screen could not reach them at all. It comes back for :focus-within, and simply stays put where there is no hover to offer. - The ⋮ menu opens over the conversation, so reaching for it took the pointer off the row — and onMouseLeave shut the menu as the reader moved towards it. Dismissing is the Menu's own onClose now, and the rail holds while anything it opened is up. - The reveal rule was `.MuiBox-root:hover &` — every Box on the page. It is now the row's own attribute. - Reacting was two clicks and a menu to read on a message with no reactions yet, which is enough friction to stop people doing it at all. It joins reply on the rail; the duplicate menu item goes. Visually it is one frosted pill in the conversation's existing vocabulary — --color-primary wash, the layered soft shadow the bubbles already use — and one piece of motion: the buttons spring in staggered, so the rail unrolls out of the message rather than appearing whole. Reduced motion turns that off. Verified against the deployed image **************** which is this HEAD) by rendering real bubbles into headless Chrome at the 320px dock width: the old geometry reproduces the reporter's screenshot exactly, and the new one sits inside the window on both sides.