Add self-service password change, forgot-password flow, and fix admin UI bugs

Users can change their own password from the profile modal, and a
"forgot password" link sends a 15-minute expiring reset link (same
hashed-token pattern as site invites). The forgot-password response is
always generic so it never reveals which emails are registered.

Also fixes two admin-page display bugs found while testing: table row
divider lines that didn't line up across a row (the actions column had
`display: flex` on the <td> itself, breaking it out of normal table-cell
layout -- moved to a child <div>), and the pending-invites list floating
with no visual grouping (now boxed with a label and per-status badges).
This commit is contained in:
2026-08-14 21:06:17 -06:00
parent 8e3b6a16bd
commit fc96e85014
18 changed files with 836 additions and 38 deletions
+16
View File
@@ -48,6 +48,8 @@
}
.modal input[type='text'],
.modal input[type='password'],
.modal input[type='email'],
.modal textarea {
width: 100%;
background: var(--ds-surface-2);
@@ -62,6 +64,8 @@
}
.modal input[type='text']:focus,
.modal input[type='password']:focus,
.modal input[type='email']:focus,
.modal textarea:focus {
border-color: var(--ds-accent);
}
@@ -78,6 +82,18 @@
margin: -8px 0 var(--sp-3);
}
.modal-success {
color: var(--ds-accent);
font-size: 0.82rem;
margin: -8px 0 var(--sp-3);
}
.modal-divider {
border: none;
border-top: 1px solid var(--ds-border);
margin: var(--sp-5) 0 var(--sp-4);
}
.toggle-row {
display: flex;
align-items: center;