*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:linear-gradient(135deg,#e8eaf0 0%,#dde0e8 30%,#eef0f4 60%,#e2e5ed 100%);color:#1a1a2e;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.glass{background:rgba(255,255,255,.5);backdrop-filter:blur(24px)saturate(200%);border:1px solid rgba(255,255,255,.65);border-radius:16px}

.login-mobile{display:none}

/* ═══ 推压式面板 ═══ */
.push-container{display:block;position:relative;width:540px;height:600px;overflow:hidden;border-radius:24px;box-shadow:0 32px 100px rgba(0,0,0,.10),0 12px 32px rgba(0,0,0,.05),0 0 0 1px rgba(0,0,0,.03)}
.push-panel{position:absolute;top:0;width:540px;height:100%;display:flex;align-items:center;justify-content:center;transition:left .6s cubic-bezier(.25,.1,.25,1);border:1px solid rgba(255,255,255,.7)}
.push-login{left:0;z-index:2;background:rgba(255,255,255,.60);border-radius:24px 0 0 24px}
.push-login.pushed{left:-540px;z-index:1}
.push-register{left:540px;z-index:1;background:rgba(255,255,255,.45);border-radius:0 24px 24px 0;overflow-y:auto}
.push-register.pushed{left:0;z-index:2}

.push-panel-inner{width:380px;max-width:100%;padding:44px 40px;text-align:center}
.push-panel-inner h1{font-size:22px;font-weight:800;margin-bottom:6px;letter-spacing:-.02em;color:rgba(0,0,0,.75)}
.push-panel-inner .sub{font-size:13px;margin-bottom:28px;color:rgba(0,0,0,.32);font-weight:500}
.push-panel-inner form{display:flex;flex-direction:column;gap:12px}
.push-panel-inner .fl{text-align:left}
.push-panel-inner .fl label{display:block;font-size:12px;font-weight:600;margin-bottom:5px;color:rgba(0,0,0,.38);letter-spacing:.01em}
.push-panel-inner .fl input{width:100%;padding:11px 14px;font-size:14px;border-radius:10px;border:1px solid rgba(0,0,0,.07);background:rgba(0,0,0,.015);transition:border-color .2s,box-shadow .2s;outline:none;font-family:inherit;color:rgba(0,0,0,.65)}
.push-panel-inner .fl input:focus{border-color:rgba(0,0,0,.15);box-shadow:0 0 0 3px rgba(0,0,0,.025);background:rgba(255,255,255,.4)}
.push-panel-inner .fl input::placeholder{color:rgba(0,0,0,.18)}

.push-panel-inner .btn{width:100%;padding:12px;font-size:14px;font-weight:700;border-radius:10px;border:1px solid rgba(0,0,0,.06);background:rgba(0,0,0,.05);color:rgba(0,0,0,.6);cursor:pointer;font-family:inherit;transition:all .2s;margin-top:4px;letter-spacing:.01em}
.push-panel-inner .btn:hover{background:rgba(0,0,0,.08);color:rgba(0,0,0,.7);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.04)}
.push-panel-inner .btn:active{transform:translateY(0)}

.btn-outline{background:transparent!important;border:1px solid rgba(0,0,0,.08)!important;font-weight:600!important;color:rgba(0,0,0,.42)!important;font-size:13px!important;padding:10px!important;margin-top:0!important}
.btn-outline:hover{background:rgba(0,0,0,.025)!important;color:rgba(0,0,0,.55)!important;box-shadow:none!important}

.btn-sm{width:auto!important;padding:9px 18px!important;font-size:13px!important;flex-shrink:0;white-space:nowrap;margin-top:0!important;font-weight:600!important}

.divider{display:flex;align-items:center;gap:14px;margin:20px 0;color:rgba(0,0,0,.22);font-size:12px;font-weight:600;letter-spacing:.02em}
.divider::before,.divider::after{content:'';flex:1;height:1px;background:rgba(0,0,0,.06)}

.vcode-row{display:flex;gap:8px;align-items:center}
.vcode-input{flex:1;min-width:0;text-align:center;font-size:20px!important;letter-spacing:8px;font-weight:700!important;padding:10px 8px!important}

/* ═══ 侧边切换标签 ═══ */
.push-tab{position:absolute;top:50%;width:26px;height:56px;cursor:pointer;z-index:10;transition:opacity .35s,transform .25s}
.push-tab:hover{transform:translateY(-50%) scale(1.1)}
.push-tab-right{right:0;transform:translateY(-50%)}
.push-tab-left{left:0;transform:translateY(-50%)}
.push-tab svg{width:100%;height:100%;display:block;filter:drop-shadow(0 2px 4px rgba(0,0,0,.04))}
.push-tab .tab-shadow{fill:rgba(0,0,0,.04)}
.push-tab .tab-body{fill:rgba(255,255,255,.85);stroke:rgba(0,0,0,.05);stroke-width:1}
.push-tab .tab-arrow{fill:none;stroke:rgba(0,0,0,.25);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.push-tab:hover .tab-body{fill:rgba(255,255,255,1)}
.push-tab:hover .tab-arrow{stroke:rgba(0,0,0,.38)}
.push-login.pushed .push-tab-right,
.push-register:not(.pushed) .push-tab-left{opacity:0;pointer-events:none}

#toast{position:fixed;top:60px;left:50%;transform:translateX(-50%) translateY(-20px);z-index:99999;padding:8px 18px;border-radius:8px;font-size:12px;border:1px solid;backdrop-filter:blur(12px);pointer-events:none;opacity:0;transition:opacity .3s,transform .3s}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
#toast.ok{background:rgba(46,204,113,.12)!important;color:#2ecc71!important;border-color:rgba(46,204,113,.25)!important}
#toast.err{background:rgba(231,76,60,.12)!important;color:#e74c3c!important;border-color:rgba(231,76,60,.25)!important}
#modalOverlay{display:none;position:fixed;z-index:999999;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.45);backdrop-filter:blur(4px);align-items:center;justify-content:center}
#modalOverlay .modalBox{background:#fff;border-radius:12px;padding:28px 24px 20px;min-width:280px;max-width:380px;text-align:center;box-shadow:0 8px 32px rgba(0,0,0,.18)}
#modalOverlay .modalBox p{margin:0 0 16px;font-size:14px;color:#333;line-height:1.6}
body[data-theme="dark"] #modalOverlay .modalBox{background:#2a2a3e}
body[data-theme="dark"] #modalOverlay .modalBox p{color:#ccc}