fix(ux): focus visibility, tap targets, form labels, surfaced errors

- S6: unlayered :focus-visible ring for form controls and links so
  keyboard focus is perceivable (was focus:outline-none + 1px border)
- S5: >=44px touch targets at the named hotspots (dashboard actions,
  list-row buttons, ops pills/icons, customize number inputs); dense
  rows use a 44px hit area without growing row height
- S8: 28 form fields associated via id/htmlFor; search inputs get
  aria-label
- S7: claim/complete/delete/link handlers now surface result.error via
  toast and stop instead of failing silently
This commit is contained in:
Moheeb Zara
2026-05-16 00:00:23 -07:00
parent ea49e2129d
commit 075b274204
11 changed files with 125 additions and 106 deletions
+15
View File
@@ -125,3 +125,18 @@
@apply bg-background text-foreground;
}
}
/*
* Keyboard focus visibility (WCAG 2.4.7). Many form controls and links use
* `focus:outline-none` with only a 1px border color shift, which is not a
* perceivable focus indicator. This rule is intentionally unlayered so it
* wins over Tailwind's utilities layer without !important. Scoped to form
* controls and links; buttons already get a focus-visible ring from
* components/ui/button. :where() keeps specificity at 0 so a component can
* still opt out with its own rule.
*/
:where(input, select, textarea, a[href]):focus-visible {
outline: 2px solid var(--ring);
outline-offset: 2px;
border-radius: 2px;
}