Stop the thread panel wearing the UA dialog's padding - #145
Merged
Conversation
This was referenced Aug 30, 2026
This was referenced Aug 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
335bf9a made
.lf-panela<dialog>. Its rule resets every other box default the UA puts on one —margin: 0,border: 0,max-width: none,max-height: none— but states padding only on the two sides that carry a safe-area inset, sodialog { padding: 1em }is still standing on the top and the left. At the chrome's font size that is 14px of sheet belonging to nothing inside it.It shows up twice. The head's own
padding: 10px 14pxlands inside that strip, so the title sits 28px in and the head's bottom rule stops 14px short of the sheet's left edge instead of running its width. And a finger landing in the strip down the left of a covering sheet — where a thumb holding a phone lands — meets the dialog rather than the thread list, and scrolls nothing. That is the second failuretest_coarse_pointer_resize_reach_stays_reachable_without_trapping_scrollreports, which #144 measured and attributed to #121 without a mechanism.It was invisible until #121 landed, because the reserved gutter hung the whole panel a bar's width off the left of the window and put the list back under the strip by accident.
Solution
State the panel's padding as the shorthand, for the same reason
marginandborderabove it are shorthands: a rule that states one side of a<dialog>'s box leaves the rest of the UA's standing. The safe-area sides mirror.lf-tray-panel, which already does this correctly — that sheet takes the left inset, this one the right, and both take the bottom.Testing
uv run pytest tests— 724 passed, 6 skipped, on this branch rebased on0b7f148.The target test cannot reach the swipe on
mainalone: the modal panel intercepts an earlier click. With #144 cherry-picked on top of this branch it passes; with #144 alone it does not.The measurement, and how the strip was found
MANY_DECISIONS_PAGEat 320×800 with the panel open and covering, which is the state the test swipes in.swipe(12, 280)asks the sheet to scroll its list..lf-panelbox.lf-threadsboxelementFromPoint(12, 280)1ca4f40(pre-#121)-15 … 3050 … 305.lf-threadsmainpost-#1210 … 32015 … 320DIALOG.lf-panel0 … 3201 … 320.lf-threadsThe 15px is
padding-left: 14pxplus the rule's ownborder-left: 1px. Computed padding on.lf-panelbefore this change is['14px', '0px', '0px', '14px']— top and left from the UA, right and bottom from the rule's safe-area declarations, which resolve to0pxwith no notch.Pre-#121 the panel's box hung 15px off the left of the window, so its content box started at the window's edge and the same point was the list. #121 put the panel where it belongs, which is what exposed the strip.
The visual change
Same fixture, viewport and state —
corpus.htmlat 700×900 with the panel open, screenshotting.lf-panelitself.The head's
border-bottomis the clearest tell: before, it starts 14px in from the sheet's left edge and the "Threads" title sits 28px in; after, the rule runs the full width of the sheet and the title sits at the 14px its own rule states. The whole sheet's content moves up 14px and left 14px onto the position its rules already ask for. Nothing else in the panel changes.Regression sweep
Every nightly file,
-n 4, on this branch. The failures are the standing board and each reproduces on cleanmain:test_render_controls.py+test_render_semantic_selection.py— 5 failed, 77 passed; all five are Show the thread panel over the page instead of modally over it #144's covering-panel cluster.test_render_anchors.py— the four versions-menu tests (Give the versions menu back its way in, its way out, and the reader's place #137).test_render_navigation.py—test_the_arrows_say_which_way_the_section_under_the_reader_goes,test_a_widget_that_renames_its_role_keeps_the_press_offer_gave_it(Bind the worktree head's keys through DISCLOSE, and name the tab strip's own press #140), measured before Read the settled ask's disclosure keys from DISCLOSE, and repaint every disclosure row's shortcuts #132 merged.test_render_gate.py—test_example_renders[corpus], measured before Read the settled ask's disclosure keys from DISCLOSE, and repaint every disclosure row's shortcuts #132 and Stop the render gate reporting a hidden note as words out of reach #143 merged.test_site.py— the catalog digest (Recapture the gallery stills from the inputs main actually ships #134, ci-fix: ci failing — catalog preview digest stale, and CI is the wrong machine to refresh it #133).test_render_margin.py,test_render_pages.py,test_render_widgets.py,test_render_aim.py,test_render_commands.py,test_render_drafts.py,test_render_export.py,test_render_projection.py,test_render_reactions.py,test_render_outbox.py,test_render_options.py,test_render_startup.py,test_render_conversations.py— no failure that does not pass at-n0on cleanmain.Automated fix for failed run 33329482656. That run's other 32 failures are all owned: #144 (the covering panel), #137 (the versions menu), #134 (the catalog digest), and #121, #132, #136, #138, #141, #143 since merged.