body.qr-login-page{min-height:100vh;margin:0;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 20% 0,#dceaff,transparent 35%),#f5f7fb;color:#15233b}.qr-login-card{width:min(100%,480px);padding:34px;border-radius:28px;background:#fff;box-shadow:0 24px 70px rgba(32,67,130,.16);text-align:center}.qr-back{display:block;text-align:left;text-decoration:none;color:#64748b}.qr-logo{width:58px;height:58px;object-fit:contain;margin-top:12px}.qr-kicker{margin:12px 0 4px;color:#2463d4;font-weight:800;letter-spacing:.12em}.qr-login-card h1{font-size:clamp(1.7rem,5vw,2.3rem);font-weight:800}.qr-lead{color:#64748b;line-height:1.7}.qr-code{width:246px;height:246px;margin:22px auto;padding:13px;border:1px solid #dce4f2;border-radius:22px}.qr-code img,.qr-code canvas{width:220px!important;height:220px!important}.qr-status{font-weight:800;font-size:1.08rem}.qr-countdown{min-height:24px;margin:7px 0 15px;color:#64748b}.qr-confirm-card{max-width:620px;padding:clamp(24px,5vw,42px);background:#fff;border-radius:26px;box-shadow:0 18px 60px rgba(25,55,110,.12)}.qr-device{display:grid;gap:8px;padding:20px;border-radius:18px;background:#f2f6fc}.qr-device span{color:#64748b}.qr-login-modes{display:grid;gap:10px;margin:0;padding:0;border:0}.qr-login-modes legend{text-align:left;font-size:.95rem;font-weight:800}.qr-trust-option{display:flex;gap:12px;padding:16px;border:1px solid #d7e0ee;border-radius:16px;cursor:pointer}.qr-trust-option:has(input:checked){border-color:#2862d7;background:#f2f6ff}.qr-trust-option input{margin-top:5px}.qr-trust-option span{display:grid;text-align:left}.qr-trust-option small{color:#64748b}.qr-check{margin:auto auto 18px;width:64px;height:64px;display:grid;place-items:center;border-radius:50%;background:#e8f7ee;color:#168546;font-size:2rem;font-weight:800}.member-devices{max-width:1000px}.device-list{display:grid;gap:15px}.device-card{padding:22px;border:1px solid #e5eaf2;border-radius:20px;background:#fff;box-shadow:0 10px 30px rgba(24,50,90,.06)}@media(max-width:520px){.qr-login-card{padding:25px 20px}.qr-code{margin-block:16px}.device-card>.d-flex{flex-direction:column}.device-card form button{width:100%}}
.qr-scanner-page{max-width:720px}.qr-scanner-shell{padding:clamp(20px,5vw,36px);border-radius:26px;background:#fff;box-shadow:0 18px 60px rgba(25,55,110,.1)}.qr-camera{position:relative;overflow:hidden;aspect-ratio:1/1;max-height:62vh;border-radius:24px;background:#101827}.qr-camera video{width:100%;height:100%;object-fit:cover}.qr-camera-frame{position:absolute;inset:14%;border:3px solid rgba(255,255,255,.92);border-radius:24px;box-shadow:0 0 0 999px rgba(2,8,23,.28);pointer-events:none}.qr-camera-frame::before,.qr-camera-frame::after{content:"";position:absolute;width:44px;height:44px;border-color:#5ba2ff}.qr-camera-frame::before{left:-4px;top:-4px;border-left:6px solid #5ba2ff;border-top:6px solid #5ba2ff;border-radius:13px 0 0}.qr-camera-frame::after{right:-4px;bottom:-4px;border-right:6px solid #5ba2ff;border-bottom:6px solid #5ba2ff;border-radius:0 0 13px}.qr-scanner-status{min-height:48px;padding:12px 14px;border-radius:14px;background:#eef4ff;color:#29466f}.qr-scanner-status.is-error{background:#fff1f1;color:#a32f2f}.qr-scanner-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.qr-file-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}@media(max-width:520px){.qr-scanner-shell{padding:18px;border-radius:20px}.qr-scanner-actions{grid-template-columns:1fr}.qr-camera{max-height:none}}
.qr-scanner-actions{grid-template-columns:1fr}

/* Larger modules improve camera recognition when the code is shown on another screen. */
.qr-code{width:288px;height:288px;padding:14px}
.qr-code img,.qr-code canvas{width:260px!important;height:260px!important}
@media(max-width:360px){.qr-code{width:232px;height:232px;padding:11px}.qr-code img,.qr-code canvas{width:210px!important;height:210px!important}}

/* 二维码属于机器识别区域，不能跟随网站主题反色或透明。 */
.qr-code{
  color-scheme:light!important;
  background:#fff!important;
  border-color:#d7dce5!important;
  isolation:isolate;
}
.qr-code canvas,.qr-code img,.qr-code svg{
  display:block;
  opacity:1!important;
  filter:none!important;
  mix-blend-mode:normal!important;
  background:#fff!important;
  forced-color-adjust:none;
}
