Three flows: self-service reset for a locked-out person (request → the same "check your email" either way → token link → new password → done), signed-in change password, and set a password for a Google-only account that never had one. The "email sent" screen is a deliberate security property — it returns the same 202 whether or not the address has an account, so it never reveals who has an account. Rendered in fuse-seam tokens; no identity-vendor name ever appears.
route /reset → /reset/sent → /reset/confirm?token=… → /reset/done
Enter your email. Submitting always continues — no hint whether the account exists.
Unconditional confirmation. Identical response either way (no enumeration).
From the emailed link. New password + strength. Valid-token happy path.
Done. Sign in with the new password. Other sessions signed out.
route /account/security/password
Change an existing password, or set a first one on a Google-only account (hasPassword:false).
Submitting, expired/invalid token, password-policy rejection, and generic failure.
/reset · approved: false/account/security/password · approved: false/account/security/password (social-only) · approved: false@fuzefront/design-system
(fuse-seam) tokens only. Two primitives are not yet in the base and are named for
frontend-engineer to add as a foundation PR: PasswordStrengthMeter (segmented
strength bar + policy hints) and the shared StatusCallout (also named by the account-security
frames). Drawn here from tokens only, never one-offed into feature code.