:root{
  --brand:#646cff;--brand-dark:#4f57e6;--muted:#64748b;--danger:#f5222d;--ok:#52c41a;
  --border:rgb(239,239,245);--text:rgb(31,31,31);--bg:rgb(247,250,252);
}
*{margin:0;padding:0;box-sizing:border-box}
body{font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Microsoft YaHei",sans-serif;color:var(--text);min-height:100vh;min-height:100dvh;background:var(--bg)}
.login-page{
  min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;
  padding:max(24px, env(safe-area-inset-top)) 16px max(28px, env(safe-area-inset-bottom));
}
.login-brand{width:100%;max-width:400px;text-align:center;margin-bottom:18px}
.login-brand .brand-image{display:block;width:76px;height:76px;object-fit:contain;margin:0 auto 10px}
.login-brand .logo{font-size:12px;color:var(--muted);margin-bottom:8px;letter-spacing:.08em}
.login-brand h1{font-size:24px;font-weight:700;margin-bottom:8px}
.login-brand p{color:var(--muted);line-height:1.65;font-size:14px}
.login-brand .ver{margin-top:10px;color:var(--muted);font:500 11px/1 ui-monospace,monospace}
.login-form{
  width:100%;max-width:400px;background:#fff;border:1px solid var(--border);
  border-radius:6px;padding:22px 18px 18px;box-shadow:0 1px 2px rgb(0,21,41,.08);
}
.login-form h2{font-size:20px;font-weight:600;margin-bottom:6px}
.login-form .sub{color:var(--muted);font-size:13px;margin-bottom:18px}
.login-form input,.login-form textarea{
  width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:8px;
  font-size:16px;margin-bottom:12px;outline:none;min-height:46px;
}
.login-form input:focus,.login-form textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(100,108,255,.18)}
.login-form textarea{display:block;height:48px;min-height:48px;max-height:48px;line-height:22px;resize:none;overflow:hidden;white-space:nowrap}
.login-form button{
  width:100%;padding:12px;background:var(--brand);color:#fff;border:none;border-radius:8px;
  font-size:16px;font-weight:600;cursor:pointer;min-height:46px;
}
.login-form button:hover{background:var(--brand-dark)}
.login-form button:disabled{opacity:.65;cursor:not-allowed}
.login-form .err{color:var(--danger);margin-top:8px;font-size:13px;min-height:18px}
.login-form .ok{color:var(--ok);margin-top:8px;font-size:13px;min-height:18px}
.login-form .link{display:block;text-align:center;margin-top:14px;font-size:14px;color:var(--brand);cursor:pointer;background:none;border:none;padding:8px;width:auto;font-weight:500;min-height:40px}
.login-form .link:hover{text-decoration:underline;background:none}
.login-links{display:flex;justify-content:center;gap:8px;margin-top:8px;flex-wrap:wrap}
.login-links .link{margin-top:0;flex:1;min-width:120px}
.tip-mask{
  display:none;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:80;
  align-items:center;justify-content:center;padding:20px;
}
.tip-mask.show{display:flex}
.tip-box{
  position:relative;width:100%;max-width:380px;background:#fff;border-radius:12px;padding:22px 22px 18px;
  box-shadow:0 20px 50px rgba(15,23,42,.2);
}
.tip-box p{font-size:15px;line-height:1.7;color:var(--text);padding-right:20px}
.tip-box .ok{color:var(--ok)}
.tip-box .err{color:var(--danger);margin:0}
.tip-close{
  position:absolute;top:8px;right:10px;width:36px;height:36px;border:none;background:transparent;
  font-size:22px;line-height:36px;color:var(--muted);cursor:pointer;
}
.tip-box button.okbtn{
  margin-top:16px;width:100%;padding:12px;background:var(--brand);color:#fff;border:none;border-radius:8px;
  font-size:16px;font-weight:600;cursor:pointer;min-height:46px;
}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
@media(max-height:650px){.login-page{justify-content:flex-start;padding-top:max(14px,env(safe-area-inset-top))}.login-brand{margin-bottom:10px}.login-brand p{display:none}.login-brand h1{font-size:21px}.login-form{padding-top:16px}}
