Skip to content

fix(mobile-ui): address review feedback + zoom fix on node open (AUT-54) - #26

Open
Camille1024 wants to merge 4 commits into
surenny:mainfrom
Camille1024:feat/mobile-responsive-dashboard-aut-54
Open

fix(mobile-ui): address review feedback + zoom fix on node open (AUT-54)#26
Camille1024 wants to merge 4 commits into
surenny:mainfrom
Camille1024:feat/mobile-responsive-dashboard-aut-54

Conversation

@Camille1024

Copy link
Copy Markdown
Collaborator

Summary

Follows up on #25 with fixes for all Copilot/Codex review comments, plus a runtime deployment bug and a mobile UX issue found during testing.

Review feedback addressed:

  • Replace aria-hidden backdrop <div> with semantic <button> (Nodes + LogViewer)
  • Add --header-height CSS variable; replace all hard-coded top: 40px offsets
  • Replace calc(100dvh - 80px) in LogViewer with height: 100%
  • Gate Nodes filter toggle with {!selectedId} to prevent z-index overlap with NodeDetail
  • Use visually-hidden technique for Overview mobile thead (screen reader fix)

Deployment bug fix:

  • Server was looking for .dashboard/state.db (renamed in AUT-52) but file was still at .kip/state.db, causing the dashboard to show empty data. Added .dashboard/state.db → ../.kip/state.db symlink as transition aid.

Mobile UX fix:

  • After pinch-zooming the graph canvas and tapping a node, the NodeDetail drawer opened in the zoomed state. Fixed by changing .drawer to position: fixed on mobile — fixed elements are relative to the visual viewport and render at 1x regardless of page zoom.

Test plan

  • Open dashboard on mobile, pinch-zoom the graph, tap a node — drawer should open at 1x scale
  • Filter sidebar closes automatically when a node is selected
  • Backdrop buttons are keyboard/screen-reader accessible
  • Overview stale table renders as cards on mobile with accessible column headers
  • Desktop layout unchanged

🤖 Generated with Claude Code

surenny and others added 4 commits May 7, 2026 15:20
Reviewers commonly work from phones, but the dashboard was desktop-first
(fixed 220px sidebar, 420px detail drawer, no @media queries, sub-30px
touch targets). Below 768px the layout was unusable.

All changes are scoped behind `@media (max-width: 768px)` plus a couple
of toggle buttons that default to `display: none`, so the desktop layout
is unchanged.

- Nodes: filter sidebar collapses into a slide-in drawer behind a ☰
  Filters button; node detail drawer becomes a fullscreen sheet with a
  sticky id/close header.
- LogViewer: log-list sidebar gets the same slide-in treatment; toolbar
  packs tighter; selecting a log auto-closes the drawer.
- Overview: stats grid drops to 2-up; stale-backlog table converts to
  card list via data-label attributes.
- NodeDetail: review form inputs go to 16px font (suppresses iOS Safari
  auto-zoom on focus); submit button becomes full-width 44px-tall;
  flagsGrid drops to 2 columns.
- Globals: header wraps gracefully; project-badge hides ≤480px; body
  font-size bumped to 14px on mobile for legibility.

svg-pan-zoom 3.6 already supports touch pan/pinch-zoom out of the box —
no JS changes needed for the graph itself, just the chrome around it.
- Add --header-height CSS variable; replace all hard-coded top:40px offsets
- Use height:100% in LogViewer root instead of brittle calc(100dvh - 80px)
- Replace aria-hidden div backdrops with semantic <button> elements
- Gate Nodes filter toggle when NodeDetail drawer is open (z-index overlap)
- Use visually-hidden technique for Overview mobile thead (screen reader fix)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace position:absolute with position:fixed for the NodeDetail drawer
on mobile. Fixed elements are positioned relative to the visual viewport,
so they render at 1x scale regardless of any pinch-zoom the user applied
to the graph canvas before tapping a node.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
When the user pinch-zooms the page on mobile and then taps a node, the
NodeDetail drawer now uses the visualViewport API to apply an inverse
scale transform — rendering at 1x regardless of the current browser
zoom level. Listens to visualViewport resize/scroll events to stay in
sync if the user zooms while the drawer is open.

Reverts the touch-action:none approach (which broke pinch-zoom entirely)
in favor of letting native zoom work while compensating in the drawer.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants