Repository navigation
fix(core): a hidden child of a mover stays out of the blur trail - #6155
Conversation
Edit accuracy: accurate 271 (base branch 271), smooth 131 of thoseThe gate passes. Quarantined, measured but not gated (0) Unstable (2)
|
| it("keeps a visibility:hidden child of a mover out of the trail", async (ctx) => { | ||
| if (!supported) ctx.skip(); | ||
| const body = `<div class="box" style="left:20px;top:80px"><div style="position:absolute;left:10px;top:10px;width:20px;height:20px;background:#0f0;visibility:hidden"></div></div>`; | ||
| const blurred = await frameOf(body, true, FRAME); |
There was a problem hiding this comment.
important: this test stops guarding the CSS once #6108 lands. Under auto, a translate-only box gets the filter tier, which never uses the isolation CSS. I checked this earlier: with #6108's runtime and the old CSS, this exact repro reports tier: "filter" and 0 green pixels, so the test passes either way. This file also conflicts with #6108's version (git merge-tree). Whichever PR lands second, force capture here: frameOf(body, true, FRAME, "capture"), using #6108's helper signature.
The isolation CSS re-showed every descendant of a mover, so a child the author hid with visibility:hidden was cropped and smeared into the trail (240 green px in the repro; 0 in the sharp frame). The hide rule now skips the mover subtree and the mover alone is made visible, so its descendants inherit and keep their own visibility. Found by review of #6106. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
48a6751 to
dfea19c
Compare
miguel-heygen
left a comment
There was a problem hiding this comment.
Approving at dfea19cd. I checked the CSS at the earlier approved commit and it is byte identical here, so the head change is just the rebase. I tried to break the new selector four ways: the root carrying the mover attribute (discovery starts at scene.querySelectorAll("*"), so the root can never be a mover), a mover outside the isolated root, a hidden non mover ancestor swallowing its mover, and a specificity inversion between the two rules. None of them reproduce.
One small thing, not blocking: the new pixel test asserts only that green is zero, so it would also pass if the mover itself vanished. An assertion that the expected red ink is still there would make it fail for the right reason.
What
Follow-up to #6106, from Genesis's review there. The capture isolation CSS made every descendant of a mover
visibility: visible !important, so a child the author had hidden withvisibility: hiddenwas cropped and smeared into the blur trail.The hide rule now skips the mover subtree, and only the mover itself is forced visible. Its descendants inherit, and keep any
visibilitythey set themselves. The root rule is untouched. The CSS is the 2-line change Genesis suggested.Evidence
Real-Chrome pixel test: a red mover with a
visibility:hiddengreen child.The test fails on the old CSS and passes on the new. The pixel file passes 11/11.
🤖 Generated with Claude Code