Skip to content

P1: fix(a11y): show keyboard focus rings on auth controls - #225

Merged
aspiers merged 3 commits into
mainfrom
split-pr165/keyboard-focus-rings
Jul 30, 2026
Merged

P1: fix(a11y): show keyboard focus rings on auth controls#225
aspiers merged 3 commits into
mainfrom
split-pr165/keyboard-focus-rings

Conversation

@aspiers

@aspiers aspiers commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Restore a visible focus indicator for keyboard users across sign-in, recovery, and handle-selection controls without adding a ring to ordinary pointer clicks.

Changes

  • Add consistent :focus-visible outlines to primary and secondary controls
  • Cover all server-rendered authentication surfaces
  • Document the end-user change with a changeset

Testing

  • pnpm format:check
  • pnpm lint
  • pnpm typecheck
  • pnpm test
  • pnpm test:coverage

Screenshots

Before: keyboard focus reached the primary action but had no visible focus ring.

Before: focused button without a ring

After: keyboard focus has a clear high-contrast ring.

After: keyboard focus ring

Notes

aspiers and others added 3 commits July 29, 2026 01:11
Buttons on the OTP form had :hover styles but no :focus-visible
styles — so keyboard users tabbing through the form had no idea
which button was focused (the browser default focus ring is
suppressed by some user-agent stylesheets and the .btn-primary
explicitly sets `border: none`).

Add :focus-visible styles on .btn-primary and .btn-secondary
that match the existing --focus-border CSS custom property the
input fields already use, with a 2px outline + 2px offset so
the ring sits clear of the rounded button edges.

Pure CSS change; no behaviour change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Same focus-visible treatment that the main login page got in the
previous commit, applied to the standalone account-login form,
the recovery form, and the handle-picker buttons. All three had
:hover styles and no :focus-visible — keyboard users tabbing
through had no idea where focus was.

Pure CSS change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Covers both prior commits (50077c0 main login + 645a2fb other
routes) — single end-user change with one consolidated entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 23dcd0f

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
epds-demo Ready Ready Preview Jul 30, 2026 1:38pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@aspiers, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 56 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 256c7ef6-b580-405c-a027-7ec2830998d6

📥 Commits

Reviewing files that changed from the base of the PR and between 7bce175 and 23dcd0f.

📒 Files selected for processing (5)
  • .changeset/keyboard-focus-visible-on-buttons.md
  • packages/auth-service/src/routes/account-login.ts
  • packages/auth-service/src/routes/choose-handle.ts
  • packages/auth-service/src/routes/login-page.ts
  • packages/auth-service/src/routes/recovery.ts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@railway-app

railway-app Bot commented Jul 30, 2026

Copy link
Copy Markdown

🚅 Deployed to the ePDS-pr-225 environment in ePDS

Service Status Web Updated (UTC)
@certified-app/demo ✅ Success (View Logs) Web Jul 30, 2026 at 1:42 pm
@certified-app/demo untrusted ✅ Success (View Logs) Web Jul 30, 2026 at 1:42 pm
@certified-app/auth-service ✅ Success (View Logs) Web Jul 30, 2026 at 1:42 pm
@certified-app/pds-core ✅ Success (View Logs) Web Jul 30, 2026 at 1:42 pm

@sonarqubecloud

Copy link
Copy Markdown

@coveralls-official

Copy link
Copy Markdown

Coverage Report for CI Build 30547842198

Coverage remained the same at 57.281%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 3069
Covered Lines: 1753
Line Coverage: 57.12%
Relevant Branches: 1910
Covered Branches: 1099
Branch Coverage: 57.54%
Branches in Coverage %: Yes
Coverage Strength: 6.06 hits per line

💛 - Coveralls

@aspiers aspiers changed the title fix(a11y): show keyboard focus rings on auth controls P1: fix(a11y): show keyboard focus rings on auth controls Jul 30, 2026
@aspiers
aspiers marked this pull request as ready for review July 30, 2026 21:29
Copilot AI review requested due to automatic review settings July 30, 2026 21:29

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@aspiers

aspiers commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@aspiers
aspiers merged commit 124f8fb into main Jul 30, 2026
28 checks passed
@aspiers
aspiers deleted the split-pr165/keyboard-focus-rings branch July 30, 2026 21:37
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.

2 participants