Skip to content

F9: Responsive pass — phones and tablets (#49) - #51

Merged
mforce merged 2 commits into
mainfrom
feat/f9-responsive
Jul 16, 2026
Merged

mforce merged 2 commits into
mainfrom
feat/f9-responsive

Conversation

@mforce

@mforce mforce commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Closes #49. Spec KD-6/wireframes require barn-phone usability; 1.0 shipped desktop-only CSS. Offline capture stays #50 (Phase 1.5).

What

Single @media (max-width: 700px) block — desktop untouched, no markup changes:

  • Topbar: wraps to brand + sign-out row with nav links flowing below, tap-sized targets.
  • Tables: every table.data becomes its own horizontal scroll container — the page body never scrolls sideways. Dashboard panels get min-width: 0 (flex children otherwise refuse to shrink below table content — found live: 118px page overflow at 390px) and stack full-width.
  • Forms: grid labels flow two-up, inline-form fields full-width.
  • Primary actions: sticky full-width bottom bar (Save draft / Save & submit), one-thumb reachable per the mobile daily-entry wireframe.

Verification (chromium, real stack)

Programmatic overflow assertion (scrollWidth − clientWidth) at 390×844 and 768×1024 across dashboard, history, sales, flocks, daily entry — 0px everywhere after the panel fix. Real daily-entry record + save-draft driven at both viewports. Screenshots below-worthy: nav wraps cleanly, dashboard stacks single-column, sticky action bar on daily entry.

mforce added 2 commits July 16, 2026 12:51
Spec KD-6 targets barn phones; 1.0 shipped desktop-only CSS. One
media block under 700px, desktop untouched:

- Topbar wraps: brand + sign-out on the first row, nav links wrap
  below with tap-sized padding.
- Data tables become their own scroll containers (display:block +
  overflow-x) so wide tables scroll internally — the page never
  scrolls sideways. Dashboard panels get min-width:0 (flex refuses to
  shrink below table content otherwise) and stack full-width.
- Form grids flow two-up; inline-form fields go full-width.
- Primary actions (Save draft / Save & submit) become a sticky
  full-width bottom bar, one-thumb reachable per the mobile
  daily-entry wireframe.

Verified in chromium at 390x844 and 768x1024: zero horizontal page
overflow on dashboard/history/sales/flocks/daily-entry, and a real
record + save-draft driven at both viewports.

Closes #49
- Topbar wrapping moved out of the media query: it applies at every
  width, so there is no band just above the breakpoint where the
  8-link nav can neither fit nor wrap (codex P2). Desktop is visually
  unchanged — the links fit one line there anyway.
- Nav links sized to ~44px tap targets (WCAG 2.5.5); row-action
  .link buttons get a documented middle ground (40px min-height) —
  full 44px balloons the nowrap table rows they live in. (pi Med)
- Cleanups (pi Low): dead -webkit-overflow-scrolling removed, no-op
  display:inline-block on flex children removed, redundant width:100%
  dropped in favor of the flex basis, .panel restated as
  flex: 1 1 100% instead of a longhand basis override.

Verified with a viewport sweep (390/640/705/780/850/900/1024/1280):
zero horizontal page overflow everywhere; nav wraps to two rows below
~850px and stays single-row above.
@mforce

mforce commented Jul 16, 2026

Copy link
Copy Markdown
Owner Author

Review round: codex + pi

# Source Severity Finding Action
1 codex P2 Breakpoint gap: just above 700px the 8-link nav can neither fit on one line nor wrap — horizontal page scroll on narrow tablets/split-screen Fixed — topbar wrapping applies at every width (desktop unchanged; links fit one line there). Verified: 0px overflow across 390–1280px sweep, nav wraps ≤~850px (687598f)
2 pi Med Tap targets ~33–36px, below WCAG 2.5.5 / 44pt Fixed — nav links ~44px; row-action .link buttons get a documented 40px middle ground (44px balloons the nowrap table rows they sit in) (687598f)
3 pi Low display:block table trick — verify header/body alignment holds Verified in phone screenshots (History/Sales/Flocks/dashboard panels); if a browser ever drifts, fall back to wrapper divs
4 pi Low .panel longhand flex-basis override of shorthand Fixed — restated as flex: 1 1 100% (687598f)
5 pi Low display:inline-block no-op on flex children Fixed — removed (687598f)
6 pi Low -webkit-overflow-scrolling dead since iOS 13 Fixed — removed (687598f)
7 pi Low width:100% + flex-basis:100% redundant Fixed — flex basis only (687598f)
8 pi Low Mobile button.link restyle is app-wide, not topbar-scoped Kept deliberately — row actions (edit/deplete/archive) are primary mobile interactions on Flocks/Grades; the 40px compromise (finding 2) is the balance

Re-verified after fixes with a programmatic viewport sweep (390/640/705/780/850/900/1024/1280): zero horizontal page overflow at every width.

@mforce
mforce merged commit 0e634f4 into main Jul 16, 2026
3 checks passed
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.

F9: Responsive/mobile pass — usable on phones and tablets

1 participant