/* auth.css — page styles for the anonymous and chromeless pages: sign in, 2FA, join, reset,
   invite request, OAuth consent and completion (Phase 3; loaded by base.html after wy.css,
   tokens only). base.html renders these pages inside .wy-auth (the brand above one 400 px
   column); each page is one .wy-card whose body stacks its parts, with the secondary links
   under the card in .wy-auth__links. */
.wy-auth .wy-card__body { display: flex; flex-direction: column; gap: var(--wy-space-4); }
.wy-auth__head { display: flex; flex-direction: column; gap: var(--wy-space-1); }
.wy-auth__title { margin: 0; color: var(--wy-text); font-size: var(--wy-text-xl); font-weight: var(--wy-weight-semibold); line-height: var(--wy-leading-tight); overflow-wrap: anywhere; }
.wy-auth__lead { margin: 0; color: var(--wy-text-muted); font-size: var(--wy-text-md); line-height: var(--wy-leading); overflow-wrap: anywhere; }
.wy-auth__lead b { color: var(--wy-text); font-weight: var(--wy-weight-medium); }
.wy-auth__heading { margin: 0; color: var(--wy-text); font-size: var(--wy-text-sm); font-weight: var(--wy-weight-medium); line-height: var(--wy-leading); }
.wy-auth__heading + * { margin-top: var(--wy-space-2); }
.wy-auth__note { margin: 0; color: var(--wy-text-muted); font-size: var(--wy-text-sm); line-height: var(--wy-leading); }
.wy-auth__form { display: flex; flex-direction: column; gap: var(--wy-space-4); }
.wy-auth__actions { display: flex; gap: var(--wy-space-2); }
.wy-auth__actions > .wy-btn { flex: 1 1 0; }
.wy-auth__links { margin: var(--wy-space-4) 0 0; color: var(--wy-text-muted); font-size: var(--wy-text-sm); line-height: var(--wy-leading); text-align: center; overflow-wrap: anywhere; }
.wy-auth__links + .wy-auth__links { margin-top: var(--wy-space-2); }
/* A callback URL or an authorization code has no spaces: wrap it instead of scrolling. */
.wy-auth .wy-code pre { white-space: pre-wrap; overflow-wrap: anywhere; }
/* Error page for anonymous visitors (404@1440): the frame widens to 480, centres vertically in
   the viewport and lines the brand up with the card's left side. The card body keeps the
   stack gap; the one button sits in a .wy-row so it is not stretched. */
.wy-auth:has(> .wy-auth__card > #wy-auth-error) { display: flex; flex-direction: column; justify-content: center; max-width: calc(var(--wy-space-16) * 7.5); min-height: calc(100vh - var(--wy-space-8) - var(--wy-space-12)); }
.wy-auth:has(> .wy-auth__card > #wy-auth-error) .wy-auth__brand { justify-content: flex-start; }
