--- phase: 01-input-ux plan: 03 type: execute wave: 1 depends_on: [] files_modified: - frontend/src/App.css autonomous: true must_haves: truths: - "The back button in WorkoutPage header is at least 44px tall (tappable with one thumb)" - "The complete-btn (set checkmark) is at least 44px tall — already 44px, verify it is not overridden" - "The warmup-done-btn is at least 44px tall" - "Warmup items are at least 44px tall" - "The finish-workout-btn is at least 44px tall" - "The .start-btn and .start-workout-btn are at least 44px tall" - "All form inputs in auth and onboarding pages have font-size 16px to prevent iOS auto-zoom" artifacts: - path: "frontend/src/App.css" provides: "Touch target audit fixes — explicit min-height on all interactive elements" contains: "min-height: 44px" key_links: [] --- Audit all interactive elements in App.css for touch target compliance (min 44px height) and font-size compliance (min 16px on inputs). Fix any violations with targeted CSS additions. Purpose: Users on mobile can tap every button and input without missing. iOS auto-zoom does not trigger on any input in the app. Output: App.css updated with min-height and font-size fixes for non-stepper elements. @/home/intense/.claude/get-shit-done/workflows/execute-plan.md @/home/intense/.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @frontend/src/App.css @frontend/src/index.css Task 1: Audit touch targets and fix all violations in App.css frontend/src/App.css Read App.css in full. Identify all rules that style buttons and inputs. For each, check whether height or min-height is explicitly set to at least 44px. Elements that need fixing (based on current code review): 1. `.back-btn` — currently has `padding: 0.5rem` only. Add: ```css min-height: 44px; ``` 2. `.warmup-item` — currently `padding: 0.75rem`. The item needs to be at least 44px tall. Add: ```css min-height: 44px; ``` 3. `.warmup-done-btn` — currently `padding: 1rem`. Add: ```css min-height: 44px; ``` 4. `.finish-workout-btn` — currently `padding: 1.25rem`. Add: ```css min-height: 44px; ``` 5. `.complete-btn` — already `width: 44px; height: 44px;`. No change needed. Verify it is not overridden in any mobile media query. 6. `.start-btn` and `.start-workout-btn` — currently `padding: 1rem`. Add `min-height: 44px;` to both (or the shared rule if they share one). 7. `.tab-btn` — currently `padding: 0.75rem`. Add `min-height: 44px;`. 8. `.calendar-nav` — currently `width: 32px; height: 32px;`. This is below 44px. Update to: ```css width: 44px; height: 44px; ``` 9. `.edit-btn` — currently `padding: 0.5rem 0.75rem;`. Add `min-height: 44px;`. 10. `.cancel-btn` and `.save-btn` — currently `padding: 0.75rem`. Add `min-height: 44px;`. Font-size audit — all `` elements must have font-size >= 16px: 11. In `.auth-card input` (index.css line 96) the font-size is `1rem`. 1rem = 16px by default, but it depends on root font-size. To be safe, add a rule in App.css: ```css /* Ensure all inputs have font-size >= 16px to prevent iOS auto-zoom */ input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="tel"], select, textarea { font-size: 16px; } ``` Place this near the top of App.css in the first section, or append it at the end before the stepper block (if Plan 01 runs in parallel, this is fine — the stepper CSS block already has font-size: 16px on .stepper-input). Approach: - Edit each rule in-place by adding the missing property inside the existing rule block. - Do NOT create new duplicate rule blocks — find the existing selector and add inside it. - For the global input font-size rule, append it as a new block at the end. After editing, confirm no interactive element visible on WorkoutPage or Dashboard is below 44px in height. 1. grep -n "min-height: 44px" frontend/src/App.css (should appear multiple times) 2. grep -n "font-size: 16px" frontend/src/App.css (should appear for global input rule + stepper) 3. cd /workspace/gravl/frontend && npm run build 2>&1 | tail -10 - All listed interactive elements have explicit min-height: 44px (or height: 44px for circle buttons) - .calendar-nav updated from 32px to 44px - Global input font-size: 16px rule added - Build passes Build must pass. Visually: open Dashboard in browser, all buttons are comfortably tappable. Open WorkoutPage, warmup items and complete buttons are reachable with a thumb. No iOS zoom occurs when tapping any input. - Every interactive element in App.css has min-height >= 44px (or explicit height >= 44px) - All input types have font-size: 16px preventing iOS auto-zoom - .calendar-nav is 44x44px - Build passes After completion, create `.planning/phases/01-input-ux/01-03-SUMMARY.md` using the summary template.