feat(web): mobile / small-screen dashboard layouts #249
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!249
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/241"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
< mdbreakpoint; header nav hidden on mobile viahidden md:flexviewport-fit=coveradded to the<meta name="viewport">tag so safe-area insets work on notched devices / home-indicator bars;env(safe-area-inset-bottom)applied to both the bottom tab bar and<main>padding[scroll-snap-type:x_mandatory]on the container, each column expands tocalc(100vw - 2rem)with[scroll-snap-align:start]— swipe reveals exactly one column at a time; both attributes are reset atmd+Test plan
bun run qacleanbun run e2e --grep mobile)Closes #241
Review — Round 1
CI: ✅ green (run #461, sha
09a2072, 3m45s)Acceptance criteria
< mdBottomTabBarwithmd:hidden; header nav withhidden md:flex[scroll-snap-type:x_mandatory]on container +[scroll-snap-align:start]per columnviewport-fit=cover+ safe-area insetsindex.htmlviewport meta +env(safe-area-inset-bottom)on tab bar and<main>bun run qacleanCode notes
[scroll-snap-type:x_mandatory]→scroll-snap-type: x mandatory(Tailwind v4 underscore→space). Correct.md:[scroll-snap-type:none]also correct for teardown on desktop.w-[calc(100vw-2rem)]on mobile columns: at 375 px viewport the column renders ≈ 343 px, which is > the 80 % threshold asserted in the spec (375 × 0.7 = 262.5 px). Layout maths hold.pb-[calc(4rem+env(safe-area-inset-bottom))]on<main>: 4 rem (64 px) is a standard iOS tab-bar height and comfortably covers thepy-2+ caption-text natural height of the bar. Not fragile.getComputedStyle(el).scrollSnapTypematched against/x\s+mandatory/handles browser-specific whitespace normalisation cleanly.**/boardmatches the SPA's/boardAPI call — page navigation to/app/planner/boardis client-side and doesn't trigger the interceptor. Correct.LGTM — clean implementation, well-commented, no bugs found.