:root{color:#1d1d1f;background:#f5f5f7;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 16% 8%,rgba(0,113,227,.12),transparent 28%),radial-gradient(circle at 86% 0%,rgba(52,199,89,.1),transparent 24%),#f5f5f7}body.scan-mode{height:100vh;height:100dvh;overflow:hidden;background:#05070a}body.scan-mode #app,body.scan-mode .shell{height:100vh;height:100dvh;overflow:hidden}button,input,select,textarea{font:inherit}button{border:1px solid rgba(29,29,31,.12);background:#ffffffd1;color:#1d1d1f;border-radius:999px;padding:10px 14px;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}button:hover{border-color:#0071e36b;box-shadow:0 8px 24px #1d1d1f14;transform:translateY(-1px)}button:disabled{cursor:not-allowed;opacity:.55}.primary{color:#fff;border-color:#0071e3;background:#0071e3}.danger{color:#c42323}.wide{width:100%}.shell{width:min(1180px,calc(100vw - 28px));margin:0 auto;padding:24px 0 48px}.login-card,.panel,.topbar{border:1px solid #e2e7ee;background:#ffffffc7;border-radius:18px;box-shadow:0 18px 48px #1d1d1f14;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}.login-card{width:min(420px,100%);margin:10vh auto 0;padding:28px}.login-banner-link{display:block;margin:-8px 0 18px}.login-banner{display:block;width:100%;aspect-ratio:1823 / 863;object-fit:contain;border-radius:14px;background:#ffffff73}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;margin-bottom:16px}.panel{padding:18px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}h1,h2,p{margin:0}h1{font-size:30px;line-height:1.1}h2{font-size:20px;line-height:1.2}.eyebrow{color:#2f6fed;font-size:12px;font-weight:700;margin-bottom:6px}.field{display:grid;gap:8px;margin:16px 0;font-weight:650}input,select,textarea{width:100%;min-width:0;border:1px solid rgba(29,29,31,.13);background:#ffffffeb;border-radius:12px;padding:11px 12px;outline:none}textarea{min-height:160px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:#2f6fed;box-shadow:0 0 0 3px #2f6fed24}.status{min-height:22px;color:#5f6b7a;margin-top:12px}.account{display:flex;align-items:center;gap:10px}.account span{padding:9px 12px;border-radius:999px;background:#f4f6f8}.scan-page{display:grid;grid-template-columns:minmax(320px,480px);justify-content:center;gap:0;height:100vh;height:100dvh;overflow:hidden}.scan-page .scan-shell{grid-column:auto}.qq-choice-list,.qq-list,.user-list{display:grid;gap:10px}.qq-choice{display:flex;align-items:center;gap:12px;padding:13px;border:1px solid #e2e7ee;border-radius:8px;cursor:pointer}.qq-choice.dark{color:#f8fafc;border-color:#ffffff24;background:#ffffff14}.qq-choice.dark small{color:#f8fafca8}.qq-choice.frozen{opacity:.62;cursor:not-allowed}.qq-choice input{width:18px;height:18px}.qq-choice span,.qq-choice small{display:block}.qq-choice strong,.qq-row strong{font-variant-numeric:tabular-nums}.qq-choice small,.qq-row small,.user-row span{color:#6b7685}.scanner{display:grid;place-items:center;width:100%;aspect-ratio:4 / 3;overflow:hidden;border:1px solid #d7dde5;border-radius:8px;background:#101828}.scanner video{width:100%;height:100%;object-fit:cover}.scan-placeholder{color:#d7dde5}.scan-shell{position:relative;display:flex;flex-direction:column;justify-content:flex-end;height:100vh;height:100dvh;min-height:100vh;min-height:100dvh;background:#05070a;color:#f8fafc;overflow:hidden;padding:18px 16px calc(env(safe-area-inset-bottom,0px) + 28px);border-color:#ffffff14;box-shadow:0 24px 80px #0000003d}.scan-topbar{position:absolute;z-index:4;top:18px;left:50%;width:min(100% - 32px,380px);transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:12px;min-height:54px;margin-bottom:0;padding:10px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#0000002e;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);text-align:center}.scan-topbar div:first-child{display:grid;gap:3px}.scan-menu-toggle{position:absolute;right:8px;display:grid;place-items:center;width:42px;min-height:42px;padding:0;color:#f8fafc;border:0;background:transparent;box-shadow:none;transform:none}.scan-menu-toggle:hover{border-color:transparent;box-shadow:none;transform:none}.scan-menu-toggle svg{width:40px;height:40px;padding:10px;border-radius:50%;border:1px solid rgba(255,255,255,.16);background:#ffffff14;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.scan-menu-toggle span{display:none;color:#f8fafcc2;font-size:11px;line-height:1}.scan-topbar small{color:#f8fafc9e}.scan-account-actions{display:flex;align-items:center;gap:8px}.scan-topbar button,.scan-order-head button{color:#f8fafc;border-color:#ffffff29;background:#ffffff0f}.scan-password-panel{position:relative;z-index:5;display:grid;grid-template-columns:1fr;gap:8px;margin:0 0 12px;padding:12px;border:1px solid rgba(255,255,255,.12);border-radius:18px;background:#0000005c;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.scan-order-box{position:relative;z-index:5;margin:0 0 12px;padding:10px;border:1px solid rgba(255,255,255,.12);border-radius:18px;background:#0000005c;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.scan-order-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;font-weight:700}.compact-choice-list{max-height:128px;overflow:auto;padding-right:2px}.announcement-backdrop{position:absolute;z-index:20;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:22px;background:#00000061;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.announcement-card{display:grid;gap:14px;width:min(360px,100%);padding:22px;color:#f8fafc;border:1px solid rgba(255,255,255,.16);border-radius:20px;background:#0a0e14b8;box-shadow:0 24px 72px #0000005c;-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px)}.announcement-card h2{font-size:22px}.announcement-card .eyebrow{color:#8bc4ff}.announcement-body{max-height:min(42vh,320px);overflow:auto;white-space:pre-wrap;line-height:1.65;color:#f8fafcdb}.wechat-scanner{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;width:100%;min-height:100%;overflow:hidden;border-radius:0;background:radial-gradient(circle at center,rgba(255,255,255,.05),transparent 38%),#05070a}.wechat-scanner video{width:100%;height:100%;min-height:100%;object-fit:cover}.scan-frame{position:absolute;z-index:2;width:var(--scan-frame-size, min(70vw, 300px, 42vh));aspect-ratio:1;border:0;border-radius:4px;background:linear-gradient(#f8fafc,#f8fafc) left top / 34px 3px no-repeat,linear-gradient(#f8fafc,#f8fafc) left top / 3px 34px no-repeat,linear-gradient(#f8fafc,#f8fafc) right top / 34px 3px no-repeat,linear-gradient(#f8fafc,#f8fafc) right top / 3px 34px no-repeat,linear-gradient(#f8fafc,#f8fafc) left bottom / 34px 3px no-repeat,linear-gradient(#f8fafc,#f8fafc) left bottom / 3px 34px no-repeat,linear-gradient(#f8fafc,#f8fafc) right bottom / 34px 3px no-repeat,linear-gradient(#f8fafc,#f8fafc) right bottom / 3px 34px no-repeat;box-shadow:0 0 0 999px #0000006b;pointer-events:none}.scan-banner-marquee{position:absolute;z-index:3;left:var(--scan-center-x, 50%);top:var(--scan-banner-top, calc(50% - min(35vw, 150px, 21vh) - 72px) );width:var(--scan-banner-width, min(74vw, 324px, 45vh));aspect-ratio:1823 / 863;border-radius:12px;box-shadow:0 14px 38px #00000057;opacity:0;transform:translate(-50%,-50%) translate(-130vw);animation:scanBannerPass 180s ease-in-out infinite}.scan-banner-marquee img{display:block;width:100%;aspect-ratio:1823 / 863;object-fit:contain;border-radius:inherit}.scan-line{position:absolute;left:var(--scan-center-x, 50%);width:var(--scan-line-width, min(62vw, 266px, 38vh));height:2px;border-radius:999px;background:linear-gradient(90deg,transparent,#1afa86 18%,#1afa86 82%,transparent);box-shadow:0 0 14px #1afa86f0,0 0 40px #1afa8652;transform:translate(-50%);animation:scanLine 2.4s ease-in-out infinite;pointer-events:none}.scan-actions{position:relative;z-index:4;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:18px}.scan-settings-popover{position:absolute;z-index:6;top:84px;left:50%;width:min(100% - 32px,380px);grid-template-columns:repeat(3,minmax(0,1fr));margin-top:0;padding:12px;border:1px solid rgba(255,255,255,.12);border-radius:20px;background:#00000061;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);transform:translate(-50%)}.scan-action{display:grid;place-items:center;min-height:62px;color:#f8fafc;border:0;background:transparent;box-shadow:none;transform:none}.scan-action:hover{border-color:transparent;box-shadow:none;transform:none}.scan-action span{display:grid;place-items:center;gap:7px;color:#f8fafcc7;font-size:13px}.scan-action span:before{display:none}.scan-action svg{width:48px;height:48px;padding:12px;border-radius:50%;border:1px solid rgba(255,255,255,.16);background:#ffffff1a;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.scan-action.primary-action{color:#f8fafc;border-color:transparent;background:transparent}.scan-action.primary-action span:before{display:none}.scan-action.primary-action svg{border-color:#ffffff29;background:#ffffff1a}.scan-status{position:relative;z-index:4;color:#f8fafcb8;text-align:center}.scan-utility-actions{position:relative;z-index:4;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:10px}.scan-settings-popover{position:absolute;z-index:6;top:84px;left:50%;width:min(100% - 32px,380px);grid-template-columns:repeat(3,minmax(0,1fr));margin-top:0;transform:translate(-50%)}.glass-circle{display:grid;place-items:center;min-height:62px;padding:0;border:0;background:transparent;box-shadow:none}.glass-circle:hover{border-color:transparent;box-shadow:none;transform:none}.glass-circle span{display:grid;place-items:center;gap:6px;color:#f8fafcc2;font-size:12px}.glass-circle span:before{display:none}.glass-circle svg{width:42px;height:42px;padding:11px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:#ffffff1c;box-shadow:inset 0 1px #ffffff29;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.captured-qr.floating{position:relative;z-index:4;margin-top:14px;border-color:#ffffff1f;background:#ffffff14}.scan-shell .captured-qr.floating{position:absolute;z-index:7;left:50%;top:50%;width:min(190px,46vw);margin-top:0;padding:10px;color:#f8fafc;border-color:#ffffff29;background:#0000006b;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);transform:translate(-50%,-50%)}.scan-shell .captured-qr.floating p{color:#f8fafc;font-size:12px}.scan-shell .captured-qr.floating img{width:min(132px,100%)}.empty-state.dark{color:#f8fafcad;border-color:#ffffff1f;background:#ffffff12}.actions{display:flex;gap:10px;margin-top:14px}.dropzone{display:grid;place-items:center;min-height:120px;border:1px dashed #9db4df;border-radius:8px;background:#f7faff;cursor:pointer;margin-bottom:12px}.dropzone input{display:none}.dropzone span,.dropzone small{display:block}.dropzone span{font-weight:700}.dropzone small{color:#6b7685;margin-top:4px}.preview-image{display:block;width:min(220px,100%);aspect-ratio:1;object-fit:contain;border:1px solid #e2e7ee;border-radius:8px;margin-bottom:12px}.admin-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}.admin-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:16px;align-items:start}.admin-sidebar{position:sticky;top:16px;display:grid;gap:8px;padding:14px;border:1px solid #e2e7ee;border-radius:18px;background:#ffffffc7;box-shadow:0 18px 48px #1d1d1f14;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}.admin-sidebar strong{padding:6px 8px 10px}.admin-sidebar button{text-align:left;border-radius:12px}.admin-sidebar button.active{color:#fff;border-color:#0071e3;background:#0071e3}.admin-content{min-width:0}.create-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto;gap:10px;margin-bottom:12px}.qq-create{grid-template-columns:repeat(3,minmax(0,1fr))}.qq-create button{width:100%}.search{margin-bottom:12px}.search-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;margin-bottom:12px}.user-search-row{grid-template-columns:minmax(0,1fr) auto auto}.search-row .search{margin-bottom:0}.qq-pager-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-2px 0 12px;color:#6b7685;font-size:13px}.qq-pager-tools button{min-width:88px}.list-hint{color:#6b7685;font-size:13px;margin:-4px 0 12px}.qq-row{display:grid;grid-template-columns:130px minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px 12px;border:1px solid #e2e7ee;border-radius:8px}.qq-row.compact{grid-template-columns:150px 180px minmax(0,1fr) auto auto auto;background:#ffffffb8}.qq-row.compact span,.qq-row.compact small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qq-edit-panel{margin-top:-4px;margin-bottom:6px}.user-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid #e2e7ee;border-radius:8px}.pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:14px;color:#6b7685}.record-filters{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(140px,.7fr) minmax(150px,.7fr) auto;gap:10px;margin-bottom:14px}.record-list,.operation-log-list{display:grid;gap:10px}.record-row{display:grid;grid-template-columns:92px minmax(130px,.8fr) minmax(180px,1fr) minmax(180px,1fr) auto;align-items:center;gap:12px;padding:12px;border:1px solid #e2e7ee;border-radius:8px;background:#ffffffb8}.operation-log-row{display:grid;grid-template-columns:minmax(150px,.8fr) minmax(150px,.7fr) minmax(220px,1.4fr);align-items:center;gap:12px;padding:12px;border:1px solid #e2e7ee;border-radius:8px;background:#ffffffb8}.record-thumb{width:92px;height:64px;object-fit:cover;border:1px solid #e2e7ee;border-radius:8px;background:#f8fafc}.empty-thumb{display:grid;place-items:center;color:#94a3b8;font-size:12px}.record-row strong,.record-row span,.operation-log-row strong,.operation-log-row span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.record-row span,.record-row code,.operation-log-row span{color:#6b7685}.record-row code{min-width:0;overflow:hidden;text-overflow:ellipsis}.record-status{padding:6px 10px;border-radius:999px;color:#a43b00;background:#fff7ed}.record-status.ok{color:#126b3a;background:#f0fdf4}.user-row strong,.user-row span{display:block}.binding-alert{color:#b42318;font-weight:700}.group-edit-row{display:grid;grid-template-columns:minmax(140px,.8fr) minmax(160px,1fr) auto auto;align-items:center;gap:10px;width:100%}.inline-check{display:flex;align-items:center;gap:6px;color:#6b7685;white-space:nowrap}.inline-check input{width:16px;height:16px}.row-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.binding-panel{padding:14px;border:1px dashed #9db4df;border-radius:8px;background:#f7faff}.announcement-admin-form{display:grid;gap:12px}.announcement-admin-form textarea{min-height:220px;line-height:1.55}.announcement-toggle{justify-content:flex-start}.binding-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.binding-head.compact-head{margin-top:-4px;color:#6b7685}.binding-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}.binding-row{display:flex;align-items:center;gap:9px;padding:9px;border:1px solid #e2e7ee;background:#fff;border-radius:8px}.binding-row input{width:16px;height:16px}.empty-state{padding:18px;color:#6b7685;text-align:center;border:1px solid #e2e7ee;border-radius:8px;background:#f8fafc}.waiting-box,.result-box{position:relative;z-index:4;display:flex;align-items:center;gap:10px;margin-top:14px;padding:12px;border-radius:8px;border:1px solid #dbe5f7;background:#f7faff}.scan-shell .waiting-box{position:absolute;z-index:8;left:50%;top:calc(50% + min(35vw,150px,21vh) + 22px);width:min(320px,calc(100% - 48px));justify-content:center;color:#f8fafc;border-color:#ffffff29;background:#0000007a;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);transform:translate(-50%)}.scan-shell .waiting-box .spinner{border-color:#ffffff57;border-top-color:#1afa86}.scan-shell .result-box{position:absolute;z-index:8;left:50%;top:calc(50% + min(35vw,150px,21vh) + 22px);width:min(320px,calc(100% - 48px));justify-content:center;transform:translate(-50%)}.captured-qr{display:grid;justify-items:center;gap:8px;margin-top:14px;padding:14px;border:1px solid #dbe5f7;border-radius:8px;background:#f8fbff}.captured-qr p{color:#2f6fed;font-weight:700}.captured-qr img{width:min(260px,100%);aspect-ratio:1;object-fit:contain;border:1px solid #e2e7ee;border-radius:8px;background:#fff}.result-box{color:#a43b00;border-color:#ffd4a8;background:#fff7ed}.result-box.ok{color:#126b3a;border-color:#b7ebc7;background:#f0fdf4}.spinner{width:18px;height:18px;border:2px solid #c9d7f4;border-top-color:#2f6fed;border-radius:50%;animation:spin .8s linear infinite;flex:0 0 auto}.admin-status{padding-left:4px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes scanLine{0%,to{top:var(--scan-line-start, calc(50% - min(35vw, 150px, 21vh) + 18px) )}50%{top:var(--scan-line-end, calc(50% + min(35vw, 150px, 21vh) - 18px) )}}@keyframes scanBannerPass{0%,1%{opacity:0;transform:translate(-50%,-50%) translate(-130vw)}3%{opacity:.96}6%{opacity:.96;transform:translate(-50%,-50%) translate(0)}39.333%{opacity:.96;transform:translate(-50%,-50%) translate(0)}42.333%{opacity:.96;transform:translate(-50%,-50%) translate(130vw)}to{opacity:0;transform:translate(-50%,-50%) translate(130vw)}}@media (max-width: 860px){.shell{width:100%;padding:0;height:100dvh;overflow:hidden}.scan-shell{height:100dvh;min-height:100dvh;border:0;border-radius:0;box-shadow:none}.topbar,.user-row{align-items:stretch;flex-direction:column}.scan-topbar{align-items:center;flex-direction:row}.scan-account-actions{flex-wrap:wrap;justify-content:flex-end}.scan-password-panel,.scan-page,.admin-layout,.admin-grid,.record-filters,.record-row,.operation-log-row,.group-edit-row,.create-row,.qq-row,.qq-row.compact{grid-template-columns:1fr}.admin-sidebar{position:static}.pager{justify-content:center;flex-wrap:wrap}.qq-pager-tools{align-items:stretch;flex-direction:column}.search-row{grid-template-columns:1fr}.wechat-scanner,.wechat-scanner video{min-height:100%}.actions,.account{align-items:stretch;flex-direction:column}}
