Touch-target pass: 44px min on default-size buttons (WCAG 2.5.5)

Applies .mobile-touch-target to 32 default-size <Button> elements (32px
tall, below the mobile minimum) across 9 files for strict WCAG 2.5.5
compliance: Save, Cancel, Delete, Validate SSH, Run job, Build index,
Update connection, Add service, etc. Plus the shared DialogFooter Cancel
+ Confirm buttons (used by every ConfirmDialog).

The class applies min-height/min-width: 44px only below md
(max-width: 767px); no-op at md+, so desktop sizing is unchanged.

Completes the touch-target audit started in Slice 9 (which covered icon
buttons, size=sm buttons, checkboxes, switches). 122 tests pass; lint/
build green. No new tests (@media queries aren't honored by jsdom).

Refs openspec/changes/mobile-responsive-parity/verify-report.md residual
risk #2.
This commit is contained in:
Developer
2026-06-26 15:45:34 +00:00
parent 09b9c45665
commit d05de0aacd
9 changed files with 78 additions and 25 deletions
+18 -4
View File
@@ -212,7 +212,11 @@ export function ServicePage() {
<Label htmlFor="service-enabled">Enabled</Label>
</div>
{configFields}
<Button variant="destructive" onClick={() => setDeleteOpen(true)}>
<Button
className="mobile-touch-target"
variant="destructive"
onClick={() => setDeleteOpen(true)}
>
Delete service
</Button>
{widgetsCard}
@@ -252,10 +256,18 @@ export function ServicePage() {
<Label htmlFor="service-enabled">Enabled</Label>
</div>
<div className="flex justify-between">
<Button onClick={save} disabled={saveService.isPending}>
<Button
className="mobile-touch-target"
onClick={save}
disabled={saveService.isPending}
>
Save
</Button>
<Button variant="destructive" onClick={() => setDeleteOpen(true)}>
<Button
className="mobile-touch-target"
variant="destructive"
onClick={() => setDeleteOpen(true)}
>
Delete
</Button>
</div>
@@ -392,7 +404,9 @@ function ServiceConnectionFields({
</div>
)}
<Button onClick={handleUpdateConnection}>Update connection</Button>
<Button className="mobile-touch-target" onClick={handleUpdateConnection}>
Update connection
</Button>
</div>
);