fix(match-rom): show the saving overlay above the grid match panel - #4147
fix(match-rom): show the saving overlay above the grid match panel#4147sdornan wants to merge 1 commit into
Conversation
The grid variant's focus overlay sits at z-index 5, and `.match-grid` established no stacking context, so that layer competed directly with the dialog's own absolutely-positioned children. The saving overlay at z-index 1 lost, and its spinner and "Updating" label were painted behind the opaque match panel. Grid is the default variant, so confirming a match appeared to give no feedback. Contain the variant's layers with `isolation: isolate`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Greptile SummaryAdds a stacking context to the Match ROM grid so the saving overlay renders above the grid’s internal focus panel.
Confidence Score: 5/5The PR appears safe to merge, with the focused CSS change correcting the saving overlay’s stacking order without disrupting other identified UI layers. The grid’s positioned layers are internal to the component, while the saving overlay is its only positioned dialog-level sibling and now correctly paints above the isolated grid subtree. Important Files Changed
Reviews (1): Last reviewed commit: "fix(match-rom): show the saving overlay ..." | Re-trigger Greptile |
There was a problem hiding this comment.
Pull request overview
This PR fixes a UI feedback issue in the v2 Match ROM dialog where the "saving/updating" overlay existed but was rendered behind the grid match panel due to stacking order in the grid layout.
Changes:
- Create a new stacking context for the grid variant root by adding
isolation: isolateto.match-grid. - Add an inline CSS comment documenting the stacking-context rationale and the relevant internal
z-indexrelationships.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Description
Explain the changes or enhancements you are proposing with this pull request.
Confirming a match in the Match ROM dialog appeared to give no feedback at all. The saving overlay was rendering the whole time, but it was never visible on the default grid layout.
.match-grid__overlay(the focus panel that holds the confirm button) sits atz-index: 5..match-gridisposition: relativewithz-index: auto, so it establishes no stacking context and that layer competes directly with the dialog's own absolutely-positioned children..r-v2-match__savingsits atz-index: 1and loses, so its spinner and "Updating" label were painted behind.match-grid__panel, which is opaque and centred exactly where they render.The fix is one property:
isolation: isolateon.match-grid. That contains the variant's internal layers, so.match-gridparticipates in the dialog's stacking context atz-index: autoand the saving overlay reliably paints above the whole subtree.Preferred over bumping the saving overlay to
z-index: 6, which would hardcode a value coupled to the grid variant's internals and break silently if those ever change.The list variant is unaffected. It has no competing absolutely-positioned layer, which is why the bug only showed on the default grid.
Checklist
Please check all that apply.
Verification
Green locally:
npm run typecheck,npm run test(667 tests / 56 files),npm run build, ESLint and Prettier on the touched file.Behaviour was verified by mounting the real
MatchRomDialogand grid variant in a browser with their compiled CSS, stubbing only the network layer (searchRomreturns fixtures,updateRomnever settles so the dialog holds itsmatchingstate). Driving the real flow (search, open a match, pick a cover, confirm) and hit-testing the centre of the dialog body withdocument.elementFromPoint:isolation: isolate.r-v2-match__savingisolationforced back toauto.match-grid__panelisolation: isolaterestored.r-v2-match__savingConfirmed visually as well: the match panel blurs and dims behind the overlay with the spinner and "Updating" label crisp on top.
Scope of that testing, stated plainly: the components and CSS are real, but the data is stubbed, so this is not a full end-to-end run against a live backend and metadata providers. Only dark theme was exercised;
isolationhas no interaction with colour tokens, so the fix is theme-independent by construction.AI assistance
This change was written with AI assistance (Claude Code). The root-cause diagnosis, the choice of
isolation: isolateover az-indexbump, the verification harness, and this description were all AI-produced and reviewed by me before submitting.