/* v2 login page group (2026-10-02): the login page's states, the static pages (About, Privacy, Terms), admin and the
   error pages. On style.css's tokens; style.css itself is not changed. Every rule is scoped to these pages' own
   classes (.login, .doc, .admin, .empty), because all five v2 sheets load on every page. */

/* ---- login ---- */
/* "Check your email": the address it went to, in white, so it can be checked at a glance */
.login-sent b { color: var(--fg); font-weight: 500; }
/* an error above the ways in (an expired link, too many emails): the one panel on the left half, so it is seen first */
.login .login-error { margin: 24px 0 0; padding: 10px 12px; border-radius: var(--r-login); background: var(--bg2); color: var(--fg); font-size: var(--t-xs); line-height: 1.5; text-wrap: pretty; overflow-wrap: anywhere; }

/* ---- About, Privacy, Terms. Only the page's own lists: the parameter lists under Tools keep style.css's. ---- */
.doc > ul { margin: 0 0 12px; padding-left: 24px; }
.doc > ul > li { margin-bottom: 6px; text-wrap: pretty; }
.doc > ul > li::marker { color: var(--muted); }
.doc h2 { margin-top: 40px; }
/* a tool's parameters sit flush under its description, 8px below it (style.css's .prose ul, written later, had taken
   over .tools ul's spacing) */
.doc .tools ul { margin: 8px 0 0; padding: 0; }

/* ---- admin ---- */
/* the heading and its totals on the left, signing out on the right, on one line */
.admin-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.admin-head form { flex: none; }
.admin .row h3 .chip { margin-left: 6px; vertical-align: 2px; }
.admin .row-side { gap: 8px; }
.admin-gate .form { max-width: 400px; }
.admin-error { margin: 0; padding: 10px 12px; border-radius: var(--r-m); background: var(--bg2); font-size: var(--t-m); }

/* ---- 404 and errors ---- */
.empty .empty-back { margin-top: 24px; }

/* ---- the foot of the left half: About, Privacy, Terms in one grey line, centred (ChatGPT's login page). The site has
   no footer (10-02, Bonan: "这个footer似乎没必要吧"); this line is where those pages are reached from. Labels: pointing
   at one changes its text, nothing else. ---- */
.login-links { display: flex; justify-content: center; gap: 16px; margin: 0; padding: 0 24px 24px; font-size: var(--text-sm); line-height: var(--lh-sm); }
.login-links a { display: inline-block; margin-block: -6px; padding-block: 6px; color: var(--muted); text-decoration: none; } /* 32 to press, the row as it was */
.login-links a:hover { color: var(--fg); }
/* the legal name after the links (10-06, release-1): the company, in the links' grey, not a link; on a narrow phone it
   goes to the next line instead of pushing the page sideways */
.login-links { flex-wrap: wrap; }
.login-links .login-legal { color: var(--muted); }

/* Resend code (10-10, signup-polish): a quiet text button under the code, as Slack's, Notion's and Linear's */
.email-resend { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; margin: 12px 0 0; font: var(--level-meta); color: var(--muted); }
.login-sent .email-resend { justify-content: center; margin-top: 16px; }
.link-quiet { padding: 0; border: 0; background: none; color: var(--muted); font: inherit; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
.link-quiet:hover { color: var(--fg); }
.link-quiet:disabled { cursor: default; opacity: .5; }
.email-code .field-error, .login-code .field-error { margin-top: 6px; }
