*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;background:linear-gradient(135deg,#eaf2ff 0,#f6f9ff 50%,#fff 100%);color:#1a202c;display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px}.login-box{width:400px;max-width:100%;background:#fff;border-radius:24px;padding:36px 30px 24px;position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;box-shadow:0 18px 50px rgba(40,90,255,.1)}.login-box::before{content:"";position:absolute;width:260px;height:260px;left:-140px;bottom:-140px;background:radial-gradient(circle,#d6e6ff 0,#eef5ff 60%,transparent 70%);pointer-events:none}.login-box::after{content:"";position:absolute;width:180px;height:180px;right:-90px;top:-90px;background:radial-gradient(circle,#eef5ff 0,#fff 70%);pointer-events:none}.brand{position:relative;z-index:1;text-align:center;margin-bottom:22px}.brand-logo{width:56px;height:56px;margin:0 auto 12px;object-fit:contain;display:block}.brand-name{font-size:20px;font-weight:700;color:#1a202c;letter-spacing:.02em}.brand-name b{color:#2c7cff}.brand-sub{margin-top:6px;font-size:13px;color:#8a94a6;letter-spacing:.06em}.tabs{position:relative;z-index:1;display:flex;width:100%;margin-bottom:22px;background:#f4f7fc;border-radius:12px;padding:4px}.tab{flex:1;text-align:center;padding:10px 0;font-size:14px;color:#5b6c92;cursor:pointer;border-radius:9px;transition:.2s;user-select:none}.tab:hover{color:#2c7cff}.tab.active{background:#fff;color:#2c7cff;font-weight:600;box-shadow:0 4px 12px rgba(44,124,255,.12)}.panel{position:relative;z-index:1;width:100%;display:none;flex-direction:column;align-items:center}.panel.active{display:flex}.qr-area{display:flex;flex-direction:column;align-items:center;margin-bottom:20px}.qr-frame{position:relative;width:210px;height:210px;background:#fff;border-radius:18px;box-shadow:0 10px 30px rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;padding:14px}.qr-frame img{width:100%;height:100%;object-fit:contain;border-radius:6px;display:block}.corner{position:absolute;width:22px;height:22px;border:3px solid #2d7bff;pointer-events:none;z-index:3}.corner.lt{left:-2px;top:-2px;border-right:none;border-bottom:none;border-radius:10px 0 0}.corner.rt{right:-2px;top:-2px;border-left:none;border-bottom:none;border-radius:0 10px 0 0}.corner.lb{left:-2px;bottom:-2px;border-right:none;border-top:none;border-radius:0 0 0 10px}.corner.rb{right:-2px;bottom:-2px;border-left:none;border-top:none;border-radius:0 0 10px}.qr-mask{position:absolute;inset:8px;background:rgba(255,255,255,.96);backdrop-filter:blur(4px);display:none;flex-direction:column;align-items:center;justify-content:center;gap:10px;border-radius:14px;z-index:4;text-align:center;padding:0 10px}.qr-mask.show{display:flex}.qr-mask.expired{cursor:pointer}.mask-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;line-height:1}.mask-icon svg{display:block}.mask-icon.scanned{color:#2c7cff;animation:1.5s ease-in-out infinite pulse}.mask-icon.expired{color:#8a94a6}.qr-mask.expired:hover .mask-icon.expired{color:#2c7cff}.mask-text{font-size:12px;color:#5b6c92;line-height:1.5}.mask-refresh-hint{font-size:11px;color:#2c7cff;margin-top:2px}.qr-placeholder{display:flex;align-items:center;justify-content:center;color:#8a94a6;font-size:13px}.spinner{width:26px;height:26px;border:3px solid #e3ecff;border-top-color:#2c7cff;border-radius:50%;animation:.8s linear infinite spin}.qr-tip{margin-top:16px;font-size:13px;color:#5b6c92;display:flex;align-items:center;gap:6px;min-height:18px}.qr-tip .dot{width:7px;height:7px;border-radius:50%;background:#2c7cff;animation:1.5s ease-in-out infinite pulse}.qr-tip.success .dot{background:#16a34a;animation:none}.qr-tip.scanned .dot{background:#2c7cff}.form-area{width:100%}.form-group{margin-bottom:16px}.form-label{display:block;font-size:13px;color:#5b6c92;margin-bottom:6px;font-weight:500}.form-input{width:100%;height:44px;padding:0 14px;border:1px solid #e3e8f2;border-radius:10px;font-size:14px;color:#1a202c;background:#fafbfd;transition:.2s;outline:0}.form-input:focus{border-color:#2c7cff;background:#fff;box-shadow:0 0 0 3px rgba(44,124,255,.1)}.form-input::placeholder{color:#b4bcd0}.form-error{background:#fff4f4;border:1px solid #ffd6d6;color:#e53e3e;font-size:12px;padding:8px 12px;border-radius:8px;margin-bottom:14px;text-align:center;display:none}.form-error.show{display:block}.field-tip{display:none;margin-top:5px;font-size:12px;line-height:1.4;color:#e53e3e}.field-tip.show{display:block}.form-input.error{border-color:#e53e3e;background:#fff7f7}.form-input.error:focus{border-color:#e53e3e;box-shadow:0 0 0 3px rgba(229,62,62,.1)}.shake{animation:.32s shake}@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}.captcha-row{display:flex;gap:10px;align-items:center}.captcha-input{flex:1}.captcha-img{height:44px;width:auto;border:1px solid #e3e8f2;border-radius:10px;cursor:pointer;object-fit:contain;flex-shrink:0;background:#f5f7fb}.captcha-img:hover{border-color:#2c7cff}.btn-primary{width:100%;height:44px;border:none;border-radius:10px;background:linear-gradient(135deg,#2c7cff 0,#4d8eff 100%);color:#fff;font-size:15px;font-weight:600;cursor:pointer;transition:.2s;box-shadow:0 8px 18px rgba(44,124,255,.3)}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 10px 22px rgba(44,124,255,.36)}.btn-primary:active{transform:translateY(0)}.btn-primary:disabled{opacity:.6;cursor:not-allowed;transform:none}.form-tip{text-align:center;font-size:12px;color:#8a94a6;margin-top:14px}.form-tip a{color:#2c7cff;text-decoration:none}.steps{width:100%;margin-top:28px;margin-bottom:16px;padding:16px;background:#f7f9fc;border:1px solid #eef1f8;border-radius:14px;display:flex;flex-direction:column;gap:10px}.step{display:flex;align-items:center;gap:10px}.step-num{width:20px;height:20px;flex-shrink:0;border-radius:50%;background:#2c7cff;color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}.step-text{font-size:12px;color:#5b6c92;line-height:1.4}.footer{padding-top:16px;border-top:1px solid #f0f0f0;text-align:center;color:#9aa5bf;font-size:12px;width:100%;position:relative;z-index:1}.modal-mask{position:fixed;inset:0;background:rgba(20,30,60,.45);backdrop-filter:blur(2px);display:none;align-items:center;justify-content:center;z-index:100}.modal-mask.show{display:flex}.modal{width:360px;max-width:calc(100% - 32px);background:#fff;border-radius:18px;padding:28px 24px 22px;text-align:center;box-shadow:0 20px 60px rgba(20,40,90,.25);animation:.25s modalIn}@keyframes modalIn{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-icon{width:52px;height:52px;margin:0 auto 14px;object-fit:contain;display:block}.modal-title{font-size:17px;font-weight:700;color:#1a202c;margin-bottom:8px}.modal-desc{font-size:13px;color:#5b6c92;line-height:1.6;margin-bottom:20px}.modal-actions{display:flex;gap:12px}.btn-secondary{flex:1;height:42px;border:1px solid #e3e8f2;border-radius:10px;background:#fff;color:#5b6c92;font-size:14px;font-weight:500;cursor:pointer;transition:.2s}.btn-secondary:hover{border-color:#2c7cff;color:#2c7cff}.modal-actions .btn-primary{flex:1;height:42px;box-shadow:none}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}@media (max-width:480px){.login-box{width:100%;padding:30px 20px 20px}.brand-name{font-size:18px}}