Welcome-screen polish: alternative methods behind a collapsed options menu

Import, recovery, extension, and remote signer no longer stack as four
links under the primary buttons -- they live behind a 'More sign-in
options' disclosure that expands into an icon+description option menu.
Rows keep a 56px minimum touch target, the toggle carries aria-expanded,
chevron rotation respects prefers-reduced-motion, and buttons get a
focus-visible outline. The disclosure state survives re-renders so an
error doesn't snap the menu shut. Contextual renderings stay put: the
login screen keeps 'Forgot password?' and the bunker screen its retry.

Also cap the nostrconnect URI at two relays: five relay params pushed
the QR several versions denser, and tiny modules hurt both the dot
aesthetic and camera lock-on. Verified in the browser: collapsed and
expanded welcome, and the sparser QR.

Policy pins updated to the new structure: every alternative action must
render inside the option-menu template, with exact occurrence counts.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
thePR0M3TH3ANandClaude Fable 5 committed 2026-08-04 10:45:17 -04:00
1 parent 49682dd75c
commit 2e7b1e19e3
4 files changed
+133 -22

No files matched your search

+5 -1
View File
@@ -289,7 +289,11 @@ async function handle(action: string, payload: unknown): Promise<unknown> {
case "nip46NostrconnectStart": {
const p = payload as Nip46NostrconnectStartPayload;
const relayUrls = vaultRelayUrls;
// Two relays, not the whole list: every relay URL inflates the QR by a
// version step or two, and a dense code with tiny modules is measurably
// harder for a phone camera to lock onto. NIP-46 needs one shared
// relay; the second is the redundancy.
const relayUrls = vaultRelayUrls.slice(0, 2);
const clientSecretKey = generatePrivateKey();
// The secret is the proof-of-scan: whoever echoes it back becomes this
// session's signer, so it gets real entropy, not a friendly string.