/* 登录页：居中一张卡。色板、间距、圆角全部取 app.css 的变量，深浅色随系统自动切换。 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--s5) var(--s4)}
#login-root{width:100%;max-width:380px}
.login-card{display:flex;flex-direction:column;gap:var(--s4);padding:var(--s6) var(--s5)}
.login-brand{display:flex;align-items:center;gap:9px;font-weight:700;letter-spacing:-.015em;font-size:17px}
.login-sub{margin:calc(var(--s2) * -1) 0 0;color:var(--muted);font-size:13px}
.login-card label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--ink-2)}
.login-card input{font:15px/1.4 var(--sans);padding:10px 12px;min-height:42px;border:1px solid var(--line-2);border-radius:var(--r-sm);
background:var(--surface);color:var(--ink)}
.login-card input:focus-visible{outline:2px solid var(--accent-2);outline-offset:1px}
.login-card .btn{width:100%;justify-content:center}
/* 错误提示占位：有字才占高度，出现时读屏会播报 */
.login-msg{min-height:20px;font-size:13px;color:var(--fail)}
.login-msg:empty{display:none}
.login-noscript{text-align:center;color:var(--muted)}
