375px (Android TWA viewport) frames for the provider-neutral Security API step-up and contact-verification UX requested in issue #251: choose a factor, enter a one-time code, confirm a phone number, and a combined mobile security-status view. These land in this repo (not an external canvas link) so they can be diffed, schema/DS-conformance checked, and stamped per the design-first gate. Built in the fuse-seam design system (tokens only). No provider name appears anywhere in the UI.
Reached from sign-in (/login/mfa) and from the Account security surface (/account/security, /account/security/verify/phone).
Mobile factor picker (authenticator / email / SMS / recovery), plus the loading, load-error, and zero-factors states the desktop frame doesn't show.
Touch-sized OTP entry, verifying in-flight, expiry countdown + resend cooldown, delivery failure. Fail-closed: wrong/expired code stays on screen.
Phone-only OTP verification (genuinely new — email keeps the approved link-click pattern). Skippable; re-prompts from profile.
Combined 2FA + contact-verification chips for the TWA shell. Additive to the desktop hub, not a replacement. Fail-closed 409 on removing your only factor.
Full-width text field for an opaque recovery code (not OTP cells). Offered only when recoveryAvailable is true. Part of the step-up flow, same as frames 01–02.
CodeField + StatusCallout.mfa-management/05-step-up-challenge.html (flow mfa-step-up, unapproved) —
same route /login/mfa, same OtpInput/FactorPicker primitives. Frames 01–02 here are the missing
375px treatment + missing loading/empty/generic-error states for that same flow, not a second,
divergent step-up design.auth-experience/04-verify-landing.html (flow verify-email, approved) —
this is a shipped link-click pattern for email. Frame 03 scopes OTP code-entry to phone only (which has
no existing frame) and leaves email on its approved pattern rather than silently swapping a link for a code.account-security/01-hub.html + 02-states.html (flow account-security,
approved) — frame 04 is an additive mobile combined view, reusing the hub's chip/badge language; it does
not duplicate or re-derive the hub's hasPassword: null guard.