Home

boring / v2

publicBoring-Software-Inc/v2
Overview Code History Branches Pull requestsIssuesInsights Campfire Docs
main
HomeOverview Code PRsIssues

fix(ui): interface pass — contrast, reduced motion, landmarks, hit areas

3 months ago

7e4b4e6
Authored
grim7/29/2026, 6:19:01 AM
token layer:
- split destructive into three roles (text / surface / on-surface). dark
  `text-destructive` measured 1.50–1.93:1 against the surface ladder — form
  errors were near-unreadable. now 4.82–6.19 dark, 4.56–5.53 light. fills keep
  their old values so buttons and badges render identically.
- add `brand-text`; `brand` as text was 3.42:1 on white.
- drop the dead `--font-pixel` token (silkscreen was never loaded) and the two
  unimported fontsource deps it implied.

accessibility:
- motion is opt-in: MotionConfig reducedMotion="user" for framer, a media query
  for css keyframes. the spinner is exempt.
- add the `main` landmark and a skip link — the app had neither.
- inset dialog gains a focus trap, focus restore, and an accessible name; its
  backdrop is no longer a viewport-sized tab stop. same for the palette.
- skeletons are aria-hidden; route transitions announce once instead.
- inputs render at 16px under sm so ios stops zooming on focus.
- restore focus rings on three controls that killed them outright.
- name every nav landmark, chip remove, and rule toggle.

fixes:
- workflow cards were entirely unclickable: the stretched link had no z-index,
  so the header and body painted over it. link to z-10, controls to z-20.
- the skip link rendered as a visible blob — react-grab writes an inline
  clip-path that beats sr-only. park it off-screen by transform instead.
- switch `tone` prop replaces a dead `data-[state=checked]` class that never
  matched base-ui's `data-checked`.

also: remove the redundant view-raw disclosure from rule cards, feedback form
gets real labels and keeps submit enabled, and commitlint now guards commit-msg
(see DECISIONS.md — the config accepts the `TRP-123 ` prefix, which stock
conventional-commits rejects).

Parent9281712

60 files changed
  • CLAUDE.md+4−0
  • DECISIONS.md+35−0
  • apps/web/package.json+0−2
  • apps/web/src/components/activity/activity-page.tsx+2−2
  • apps/web/src/components/activity/activity-row.tsx+1−1
  • apps/web/src/components/admin/admin-orgs-page.tsx+1−1
  • apps/web/src/components/admin/admin-users-page.tsx+1−1
  • apps/web/src/components/auth/access-pending-screen.tsx
+3
−3
  • apps/web/src/components/auth/login-page.tsx+18−7
  • apps/web/src/components/charts/dither-stat-card.tsx+11−17
  • apps/web/src/components/customize/customize-page.tsx+30−30
  • apps/web/src/components/customize/github-comment-mock.tsx+3−3
  • apps/web/src/components/customize/response-config-form.tsx+1−1
  • apps/web/src/components/customize/template-editor.tsx+1−1
  • apps/web/src/components/feedback/feedback-form.tsx+70−49
  • apps/web/src/components/feedback/feedback-overlay.tsx+1−1
  • apps/web/src/components/layouts/command-palette.tsx+10−4
  • apps/web/src/components/layouts/dashboard-layout.tsx+20−2
  • apps/web/src/components/layouts/dashboard-topbar.tsx+5−2
  • apps/web/src/components/layouts/mobile-footer.tsx+1−1
  • apps/web/src/components/layouts/nav-chip.tsx+1−1
  • apps/web/src/components/layouts/route-progress.tsx+13−5
  • apps/web/src/components/organizations/install-setup-page.tsx+7−7
  • apps/web/src/components/organizations/invite-page.tsx+5−5
  • apps/web/src/components/organizations/org-billing-page.tsx+2−1
  • apps/web/src/components/organizations/org-general-settings-page.tsx+4−3
  • apps/web/src/components/organizations/org-members-page.tsx+3−2
  • apps/web/src/components/organizations/org-settings-dialog.tsx+16−4
  • apps/web/src/components/organizations/org-subnav.tsx+1−1
  • apps/web/src/components/rules-params/param-editor.tsx+3−1
  • apps/web/src/components/rules-params/raw-config-disclosure.tsx+0−36
  • apps/web/src/components/rules-params/rules-params.test.tsx+0−12
  • apps/web/src/components/rules/custom-rule-builder.tsx+3−1
  • apps/web/src/components/rules/rule-card.tsx+12−21
  • apps/web/src/components/rules/rule-header-stats.tsx+3−6
  • apps/web/src/components/runs/run-page.tsx+1−3
  • apps/web/src/components/ui/avatar.tsx+3−1
  • apps/web/src/components/ui/badge.tsx+1−1
  • apps/web/src/components/ui/button.tsx+3−5
  • apps/web/src/components/ui/card.tsx+1−1
  • apps/web/src/components/ui/combobox.tsx+6−2
  • apps/web/src/components/ui/dialog.tsx+6−3
  • apps/web/src/components/ui/inset-dialog.tsx+66−4
  • apps/web/src/components/ui/skeleton.tsx+6−0
  • apps/web/src/components/ui/switch.tsx+12−2
  • apps/web/src/components/ui/toast.tsx+2−2
  • apps/web/src/components/ui/tooltip.tsx+1−1
  • apps/web/src/components/workflows/editor/editor-header.tsx+4−7
  • apps/web/src/components/workflows/editor/workflow-editor-page.tsx+1−1
  • apps/web/src/components/workflows/editor/workflow-editor.tsx+3−1
  • apps/web/src/components/workflows/workflows-grid-page.tsx+10−7
  • apps/web/src/lib/server/run-view.ts+1−1
  • apps/web/src/routes/__root.tsx+6−1
  • apps/web/src/routes/oauth.popup-callback.tsx+3−5
  • apps/web/src/styles.css+53−6
  • bun.lock+123−6
  • commitlint.config.ts+67−0
  • package.json+5−0
  • scripts/githooks/commit-msg+6−0
  • scripts/rule-check.core.ts+5−5