Repository navigation
fix(pods): 44px targets for the phone Pods bar - #3256
Conversation
At 390 the Pods title bar's controls measured 28x24 (light and dark), 28x28 (search) and 32x32 (new pod). The icon keys are now 44x44, New pod overrides its own 32px flex-basis, and the theme buttons are 44x40 with an ::after that adds the 2px the pill's padding takes back, inside each button's own column so the two never overlap. A layout invariant guards all four rules, each reverse-verified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015AKgpMD6Qh13f7fj6mbGT3
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Set and verify phone control dimensions frontend/src/v2/v2.css, frontend/src/v2/__tests__/v2-layout-invariants.test.ts |
Icon buttons are 44×44px. The New pod button has a 44px flex basis. Theme-segment buttons are 44×40px, with a pseudo-element extending their hit area 2px above and below. A structural test checks these CSS values. |
Estimated code review effort: 2 (Simple) | ~8 minutes
Change: Bug fix
Possibly related PRs
- Team-Commonly/commonly#3139: Changes the same phone Pods sidebar and its search and New pod controls, and identifies 44px phone touch targets as future work.
- Team-Commonly/commonly#3154: Updates the same Pods sidebar search and New pod controls to use shared
v2p-bprimitives. - Team-Commonly/commonly#3190: Introduces
V2ThemeSwitchand its segment buttons in the phone Pods title bar.
Merge Risk: 
Minimal · up to ee43e
-
The phone Pods controls meet the stated touch-target contract with no evidenced merge-blocking risk.
Pre-merge checks: 
4
Finishing Touches
-
Generate docstrings
-
- Commit to this branch
- Create a new PR
Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
lilyshen0722
left a comment
There was a problem hiding this comment.
Fresh-context review (Opus, effort medium) at this head. Checked in the CSS, the test, and headless Chromium against a dev server for this head.
- Cascade: each new rule wins on specificity, so stylesheet load order doesn't matter.
- The bar's
.v2p-ibrule is (0,3,0). It beats.v2p-ib(0,1,0) and.v2p-ib.v2p-b-sm(0,2,0). - The New pod override is (0,4,1). It beats
.v2-root button.v2-pods__new(0,2,1) and changes only the flex-basis. - The theme-button rule is (0,4,1). It beats
.seg.v2-theme-seg.seg--sm button(0,3,1) and theall: unsetrule, soposition: relativeholds. Measured: 44×40.
- The bar's
- Hit areas: the ::after is anchored to its button, 44px tall, inside the seg's 2px padding (seg 94×44). Hits at the seg edges land on the right button, and the 2px gap between the buttons lands on the seg, so the two never overlap. The focus ring still renders.
- Scope:
.v2-pods-aside--pagerenders only on phone with no pod selected. At 1440 nothing changed size: the rail switch is 32×30, New pod 32×32, and the composer and inspector keys are 32 or 28. The search row and the create form sit outside.v2-pods__bar. - Layout at 320: no overflow, and the title keeps 92px.
- Test: the lookups are line-anchored, and a missing rule fails its assertion. Minor:
toContain('width: 44px')would also matchmin-width, which doesn't matter here.
GATE: PASS
On the phone Pods page (390), the title bar's four controls were all under 44px on prod
b92ea198: the light and dark theme buttons were 28×24, search 28×28 and New pod 32×32.flex: 0 0 32pxthrough.v2-pods__new, so the bar overrides its flex-basis too.::afterrestores the 2px the pill's padding takes away, so each button's hit area is 44×44. It extends only up and down, inside the button's own column, so the two buttons never overlap.The 1440 rail switch isn't touched, since every rule is scoped to
.v2-pods-aside--page .v2-pods__bar.The frame draws these at 34px. 44px is the agreed exception for phone touch targets.
Checks
the phone pods bar gives each control a 44px target. Reverse-verified: mutating each of the four rules fails it.Tier 1 (CSS only).
🤖 Generated with Claude Code
https://claude.ai/code/session_015AKgpMD6Qh13f7fj6mbGT3