diff --git a/amethyst/plans/2026-08-03-auth-permissions-redesign.html b/amethyst/plans/2026-08-03-auth-permissions-redesign.html index 9b6d804089..a48d2f037f 100644 --- a/amethyst/plans/2026-08-03-auth-permissions-redesign.html +++ b/amethyst/plans/2026-08-03-auth-permissions-redesign.html @@ -280,10 +280,6 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); } .dlg-title { font-size: 1.32rem; line-height: 1.25; font-weight: 500; margin: 0; letter-spacing: -.01em; text-wrap: balance; } .dlg-title.center { text-align: center; } .dlg-body { font-size: .875rem; line-height: 1.45; color: var(--on-s-var); margin: 0; } -.npub { - font-family: var(--f-code); font-size: .72rem; letter-spacing: .01em; - color: var(--on-s-var); margin-top: -10px; -} .dlg-err { font-size: .875rem; line-height: 1.45; color: var(--err); margin: 0; } .relaychip { align-self: flex-start; background: var(--s-var); color: var(--on-s); @@ -388,6 +384,14 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); } .relayrow .url { font-size: .95rem; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .relayrow .sub { font-size: .76rem; color: var(--on-s-var); margin-top: 2px; } .emptycard { background: var(--s-c-low); border-radius: 20px; padding: 16px; font-size: .84rem; color: var(--on-s-var); line-height: 1.45; } +.snackbar { + display: flex; align-items: center; gap: 14px; + background: var(--on-s); color: var(--s); + border-radius: 12px; padding: 12px 14px; margin-top: 10px; + font-size: .82rem; line-height: 1.35; +} +.snackbar .undo { color: var(--pri); font-weight: 700; flex: none; } +.screen.light .snackbar .undo { color: #D0BCFF; } .purposechips { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 5px; } .pchip { font-size: .68rem; padding: 2px 8px; border-radius: 100px; background: var(--s-var); color: var(--on-s-var); } .icon { color: var(--on-s-var); flex: none; } @@ -832,8 +836,8 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }
The shape

Relay identity (icon + host, the thing being trusted) · - "Log in as @you?" + the npub beneath it (the disclosure, named for the first - time — no sentence explaining what logging in means, because the verb already says it) · + "Log in as @you?" (the disclosure, named for the first time — and nothing + else, because the verb already says what logging in does) · one reason sentence (varies by state) · Remember for this relay (a switch, not a third button) · Not now / Log in · @@ -851,9 +855,9 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }

1 2 - 3 - 4 - 5 + 3 + 4 + 5
nw @@ -863,7 +867,6 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }

Log in as @vitor?

-
npub1vp3k9qz…q8x4k

It won't accept your message for ANAlice Nakamoto @@ -897,7 +900,7 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }

@@ -1385,14 +1394,14 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }
relay_auth_prompt_title
Confirm it's you to this relay?
-
Log in as %1$s? — now constant across all states; %1$s is the account, with its npub rendered beneath
+
Log in as %1$s? — now constant across all states; %1$s is the account handle
relay_auth_prompt_message
This relay wants to confirm it's really you first. Its operator will see which account you are.
-
"log in" already means "identify yourself" — the npub under the title shows what is handed over, which is more concrete than a sentence about it and doesn't have to be re-read on every prompt
+
"log in" already means "identify yourself", and the title names the account. Nothing replaces it — an npub under the title was tried and dropped: truncated, it can't be verified by eye, so it is decoration on every single prompt
@@ -1538,8 +1547,16 @@ td.k { font-family: var(--f-code); font-size: 11.5px; color: var(--ink-2); }
Nothing here yet — your global policy applies to every relay.
No exceptions yet. Every relay follows the rules above.
-
relay_auth_decision_allow
relay_auth_decision_deny
relay_auth_forget
-
Allow · Deny · Forget
Always · Never — a segmented control; clearing both removes the row, so "forget" disappears as a separate action
+
relay_auth_decision_allow
relay_auth_decision_deny
+
Allow · Deny
Always · Never — a two-way segmented control, so "allowed by policy" is no longer drawn as an explicit allow
+
+
+
relay_auth_forget
+
Forget
Remove exception — kept, retitled for what it does; clears the override only, and the relay asks again next time
+
+
+
relay_auth_exception_removed
new
+
Exception removed. %1$s follows your rules again. — undo snackbar
relay_auth_last_used
diff --git a/amethyst/plans/2026-08-03-auth-permissions-redesign.md b/amethyst/plans/2026-08-03-auth-permissions-redesign.md index 1ba03c79d1..87ec23b428 100644 --- a/amethyst/plans/2026-08-03-auth-permissions-redesign.md +++ b/amethyst/plans/2026-08-03-auth-permissions-redesign.md @@ -125,7 +125,6 @@ Further problems: asks who you are Log in as @vitor? (constant title; names the account — new) -npub1vp3k9qz…q8x4k (the concrete thing handed over) It won't accept your message for ⬤Alice Nakamoto from someone it can't identify. (the ONE variable line; avatar inline) @@ -140,11 +139,12 @@ The one reason sentence replaces the old title + purpose label + avatar row + consequence line. Four buttons become two plus a switch. Nothing in the dialog writes a global setting; the link navigates to the settings screen instead. -`relay_auth_prompt_message` is **cut, not shortened**. "Log in" already means -"identify yourself", so a sentence explaining that is boilerplate on every state — -the same duplication this proposal is removing everywhere else. The npub under the -title does the job better: it is the concrete value handed over rather than a -description of it, and it doesn't have to be re-read on the fifth prompt. +`relay_auth_prompt_message` is **cut, not shortened**, and nothing replaces it. +"Log in" already means "identify yourself" and the title names the account, so a +sentence explaining the disclosure is boilerplate on every state — the same +duplication this proposal removes everywhere else. An npub under the title was +tried and dropped for the same reason: truncated, it can't be verified by eye, so +it is decoration that costs a line on every single prompt. Reason sentence per state (P1′–P12′, incl. the two new kinds and the never-reachable `MY_OWN_RELAY`) — see the copy deck in the HTML. @@ -162,8 +162,12 @@ fixed height and the buttons never leave the fold. - Toggle group header carries the grammar — "Log in without asking when…" — so each row is a three-to-four-word completion with no description. - The single mislabelled list splits into what it actually contains: - **Exceptions** (explicit overrides only, two-way segmented `Always`/`Never`; - clearing both removes the row, so "Forget" disappears as a separate action), + **Exceptions** (explicit overrides only, two-way segmented `Always`/`Never`, + plus **✕ Remove exception** — today's `Forget`, kept and retitled: it clears the + override so the relay drops back to your rules and asks again next time, + confirmed by an undo snackbar. It is unambiguous now in a way it wasn't: it no + longer sits beside a red chip that also reads as "block", and it no longer wipes + the usage history, which has its own list), **Blocked by your block list** (locked, kind 10006 — previously invisible), **Recent logins** (the log, with `SubPurpose` chips — "your inbox", "a conversation", "reading 4 follows" — instead of an unlabelled facepile).