*{margin:0;padding:0;box-sizing:border-box}
body{font-family:"Microsoft YaHei","PingFang SC",Arial,sans-serif;color:#333}
.login-bg{min-height:100vh;background:linear-gradient(135deg,#1f5ce0 0%,#2b6ff2 45%,#5b8ff9 100%);display:flex;align-items:center;justify-content:center;padding:30px;position:relative}
.home-back{position:fixed;top:24px;left:28px;z-index:20;display:inline-flex;align-items:center;gap:7px;color:#fff;text-decoration:none;font-size:14px;font-weight:500;padding:9px 18px;border-radius:24px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.38);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 6px 20px rgba(0,0,0,.12);transition:all .22s ease}
.home-back .hb-ico{font-size:15px;line-height:1;filter:drop-shadow(0 1px 1px rgba(0,0,0,.15))}
.home-back:hover{background:rgba(255,255,255,.96);color:#1f5ce0;transform:translateY(-2px);box-shadow:0 10px 26px rgba(0,0,0,.18);border-color:transparent}
.home-back:hover .hb-ico{filter:none}
.login-wrap{width:100%;max-width:420px}
.brand{text-align:center;margin-bottom:28px;color:#fff}
.brand .logo{width:72px;height:72px;border-radius:18px;background:rgba(255,255,255,.18);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;font-size:34px;font-weight:bold;margin:0 auto 14px;border:1px solid rgba(255,255,255,.3)}
.brand h1{font-size:24px;font-weight:600;letter-spacing:1px}
.brand p{font-size:13px;opacity:.85;margin-top:6px}
.card{background:#fff;border-radius:16px;padding:30px 34px;box-shadow:0 20px 60px rgba(0,0,0,.18)}
.tabs{display:flex;gap:4px;margin-bottom:22px;border-bottom:1px solid #eee}
.tab{flex:1;padding:10px 0;background:none;border:none;font-size:16px;color:#999;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}
.tab.on{color:#2b6ff2;border-bottom-color:#2b6ff2;font-weight:600}
.announce{background:#fff8e6;color:#8a6d1a;font-size:12px;padding:8px 10px;border-radius:6px;margin-bottom:14px}
.tab-panel{display:none}
.tab-panel.on{display:block}
.ipt{margin-bottom:14px}
.ipt input{width:100%;height:46px;padding:0 14px;border:1px solid #dcdfe6;border-radius:8px;font-size:15px;outline:none;transition:border .2s}
.ipt input:focus{border-color:#2b6ff2}
.code-row{display:flex;gap:10px}
.code-row input{flex:1}
.get-code{width:120px;height:46px;border:1px solid #2b6ff2;color:#2b6ff2;background:#fff;border-radius:8px;cursor:pointer;font-size:13px;flex-shrink:0}
.get-code:disabled{color:#bbb;border-color:#ccc;cursor:not-allowed}
.err-msg{color:#e54d42;font-size:12px;min-height:18px;margin-bottom:4px}
.btn-primary{width:100%;height:46px;background:#2b6ff2;color:#fff;border:none;border-radius:8px;font-size:16px;cursor:pointer;transition:opacity .2s}
.btn-primary:hover{opacity:.9}
.btn-primary:disabled{opacity:.5;cursor:not-allowed}
.btn-ghost{width:100%;height:40px;background:#f5f7fa;color:#2b6ff2;border:1px solid #d9e2f7;border-radius:8px;cursor:pointer;font-size:14px;margin-top:10px}
.links{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font-size:13px;color:#999}
.links a{color:#2b6ff2;text-decoration:none}
.links.center{justify-content:center}
.reg-link{font-size:14px}
.qrcode-box{text-align:center;padding:10px 0}
.qrcode-img{width:200px;height:200px;margin:0 auto;border:1px dashed #ccc;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#999;font-size:13px;background:#fafbfc}
.qrcode-img img{width:100%;height:100%;border-radius:12px}
.qrcode-box p{font-size:13px;color:#666;margin-top:12px}
.qrcode-box .hint{color:#aaa;font-size:12px;margin-top:4px}
.third-part{margin-top:24px;text-align:center}
.divider{position:relative;color:#bbb;font-size:12px;display:inline-block;padding:0 14px}
.divider::before,.divider::after{content:"";position:absolute;top:50%;width:60px;height:1px;background:#eee}
.divider::before{right:100%}.divider::after{left:100%}
.third-icons{display:flex;justify-content:center;gap:24px;margin-top:16px}
.third{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:18px;text-decoration:none;font-weight:bold;transition:transform .2s}
.third:hover{transform:scale(1.1)}
.third.qq{background:linear-gradient(135deg,#12b7f5,#1d8fe8)}
.third.wechat{background:linear-gradient(135deg,#09bb07,#07c160)}

/* ===== 协议勾选 ===== */
.agree-row{margin-top:14px;padding-top:14px;border-top:1px dashed #e8ebf0;display:flex;align-items:center;justify-content:center}
.agree{display:inline-flex;align-items:flex-start;gap:7px;font-size:12.5px;color:#8a919f;cursor:pointer;line-height:1.6}
.agree input{width:15px;height:15px;margin-top:2px;accent-color:#1677ff;cursor:pointer;flex:none}
.agree a{color:#1677ff;text-decoration:none;white-space:nowrap}
.agree a:hover{text-decoration:underline}
.btn-primary:disabled{opacity:.55;cursor:not-allowed}
@keyframes agshake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.tab.shake{animation:agshake .4s ease}
#pwdErr,#smsErr{color:#e64545;font-size:12.5px;min-height:18px;margin-top:6px;text-align:center}

/* ===== 扫码登录(QQ/微信) ===== */
.qr-list{display:flex;flex-direction:column;gap:12px;padding:4px 2px}
.qr-item{display:flex;align-items:center;gap:13px;padding:15px 18px;border-radius:12px;border:1px solid #e6e9ef;background:#fafbfc;text-decoration:none;transition:all .18s ease}
.qr-item:hover{border-color:#1677ff;background:#f0f6ff;transform:translateY(-1px);box-shadow:0 6px 16px rgba(22,119,255,.12)}
.qr-ico{width:44px;height:44px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:21px;font-weight:700;color:#fff;flex:none}
.qr-item.qq .qr-ico{background:linear-gradient(135deg,#12b7f5,#0a7dff)}
.qr-item.wechat .qr-ico{background:linear-gradient(135deg,#2bb673,#07c160)}
.qr-name{font-size:15px;font-weight:600;color:#1f2329}
.qr-tip{font-size:12px;color:#9aa1ab;margin-left:auto}
.qr-hint{font-size:12px;color:#9aa1ab;text-align:center;margin-top:14px;line-height:1.7}.qr-hint-warn{color:#e64545 !important;font-weight:600}