.fade-enter-active[data-v-7e16568c],.fade-leave-active[data-v-7e16568c]{transition:opacity .22s ease}.fade-enter-from[data-v-7e16568c],.fade-leave-to[data-v-7e16568c]{opacity:0}.crop-mask[data-v-7e16568c]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;background:#050a16b8;display:flex;align-items:center;justify-content:center;padding:10px}.crop-panel[data-v-7e16568c]{width:100%;max-width:500px;height:88vh;max-height:720px;background:#fff;border-radius:16px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 12px 40px #0006}.crop-head[data-v-7e16568c]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-weight:600;color:var(--text, #16202e);border-bottom:1px solid var(--border, #e7ebf2)}.crop-close[data-v-7e16568c]{width:30px;height:30px;border:none;background:transparent;font-size:22px;line-height:1;color:var(--muted, #7b8698);cursor:pointer}.crop-stage[data-v-7e16568c]{position:relative;flex:1;min-height:0;overflow:hidden;background:#0b0f17;touch-action:none;user-select:none;-webkit-user-select:none;display:flex;align-items:center;justify-content:center}.crop-frame[data-v-7e16568c]{position:relative;max-width:100%;max-height:100%;box-sizing:border-box;flex:0 0 auto}.crop-frame .crop-img[data-v-7e16568c]{width:100%;height:100%;display:block;object-fit:fill;pointer-events:none;user-select:none;-webkit-user-select:none}.crop-box[data-v-7e16568c]{position:absolute;box-sizing:border-box;border:2px solid #ffd94d;background:#ffd94d1a;box-shadow:0 0 0 9999px #050a1685;touch-action:none;cursor:move}.crop-h[data-v-7e16568c]{position:absolute;width:22px;height:22px;z-index:2}.crop-h[data-v-7e16568c]:after{content:"";position:absolute;width:14px;height:14px;background:#ffd94d;border:2px solid #fff;border-radius:3px;box-sizing:border-box}.crop-h.nw[data-v-7e16568c]{left:-1px;top:-1px;cursor:nwse-resize}.crop-h.nw[data-v-7e16568c]:after{left:0;top:0}.crop-h.ne[data-v-7e16568c]{right:-1px;top:-1px;cursor:nesw-resize}.crop-h.ne[data-v-7e16568c]:after{right:0;top:0}.crop-h.sw[data-v-7e16568c]{left:-1px;bottom:-1px;cursor:nesw-resize}.crop-h.sw[data-v-7e16568c]:after{left:0;bottom:0}.crop-h.se[data-v-7e16568c]{right:-1px;bottom:-1px;cursor:nwse-resize}.crop-h.se[data-v-7e16568c]:after{right:0;bottom:0}.crop-h.n[data-v-7e16568c]{left:11px;top:-1px;width:calc(100% - 22px);height:12px;cursor:ns-resize}.crop-h.s[data-v-7e16568c]{left:11px;bottom:-1px;width:calc(100% - 22px);height:12px;cursor:ns-resize}.crop-h.w[data-v-7e16568c]{top:11px;left:-1px;width:12px;height:calc(100% - 22px);cursor:ew-resize}.crop-h.e[data-v-7e16568c]{top:11px;right:-1px;width:12px;height:calc(100% - 22px);cursor:ew-resize}.crop-h.n[data-v-7e16568c]:after,.crop-h.s[data-v-7e16568c]:after,.crop-h.w[data-v-7e16568c]:after,.crop-h.e[data-v-7e16568c]:after{display:none}.crop-tip[data-v-7e16568c]{padding:8px 16px;font-size:12px;color:var(--muted, #7b8698);text-align:center}.crop-actions[data-v-7e16568c]{display:flex;gap:10px;padding:4px 16px 14px}.crop-actions .btn[data-v-7e16568c]{flex:1;margin:0}.crop-panel.no-interaction[data-v-7e16568c]{pointer-events:none}.crop-panel.no-interaction .crop-close[data-v-7e16568c]{pointer-events:auto}.crop-hint[data-v-7e16568c]{position:fixed;top:0;right:0;bottom:0;left:0;margin:auto;width:max-content;max-width:86vw;height:max-content;padding:14px 20px;background:#101012f0;border:1px solid rgba(255,255,255,.14);border-radius:12px;color:#f5f6f8;font-size:14px;line-height:1.6;font-weight:500;text-align:center;box-shadow:0 10px 32px #00000080;z-index:999;pointer-events:none;display:inline-block}.crop-hint-count[data-v-7e16568c]{font-size:15px;font-weight:700;color:#fff;margin-left:6px}.hintfade-enter-active[data-v-7e16568c],.hintfade-leave-active[data-v-7e16568c]{transition:opacity .25s ease}.hintfade-enter-from[data-v-7e16568c],.hintfade-leave-to[data-v-7e16568c]{opacity:0}.dbg-panel[data-v-7e16568c]{margin-top:12px;background:#0b1626;border:1px dashed #2a3f5f;border-radius:10px;padding:8px 10px;font-size:12px;color:#9fb2cc}.dbg-panel summary[data-v-7e16568c]{cursor:pointer;font-weight:600;color:#d7e2f0}.dbg-panel summary[data-v-7e16568c]::marker{color:#3f5a82}.dbg-row[data-v-7e16568c]{display:flex;align-items:center;gap:8px;padding:3px 0;border-top:1px solid #12233c;flex-wrap:wrap}.dbg-row[data-v-7e16568c]:first-of-type{border-top:none}.dbg-name[data-v-7e16568c]{font-family:ui-monospace,monospace;color:#7f9bc4;min-width:92px}.dbg-ok.y[data-v-7e16568c]{color:#3ddc84;font-weight:700}.dbg-ok.n[data-v-7e16568c]{color:#ff6b6b;font-weight:700}.dbg-ms[data-v-7e16568c]{font-family:ui-monospace,monospace;color:#f5c542;min-width:48px}.dbg-err[data-v-7e16568c]{flex:1;color:#ffb4b4;word-break:break-all}*{box-sizing:border-box;margin:0;padding:0}:root{--brand: #2f6fed;--brand-dark: #1d4ed8;--navy: #0d1f3f;--bg: #f2f5fa;--card: #ffffff;--border: #e7ebf2;--border-strong: #d8dfeb;--text: #16202e;--muted: #7b8698;--ok: #12a150;--warn: #ea580c;--danger: #dc2626;--radius: 16px;--shadow: 0 1px 2px rgba(16, 24, 40, .05)}html,body,#app{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}.app{max-width:520px;margin:0 auto;padding-bottom:calc(28px + env(safe-area-inset-bottom,0px))}.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;padding-top:calc(14px + env(safe-area-inset-top,0px));background:#0d1f3f;color:#fff}.brand{display:flex;align-items:center;gap:10px;min-width:0}.brand-mark{flex:none;width:34px;height:34px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:#2f6fed;color:#fff}.brand-text{min-width:0}.brand-text h1{font-size:17px;font-weight:600;letter-spacing:.3px;line-height:1.2}.topbar-right{flex:none}.auth-pill{font-size:12.5px;padding:7px 14px;border-radius:20px;background:#ffffff24;border:1px solid rgba(255,255,255,.32);color:#fff;font-weight:500}.auth-pill.online{display:inline-flex;align-items:center;gap:6px}.auth-pill.online:before{content:"";width:6px;height:6px;border-radius:50%;background:#4ade80;box-shadow:0 0 6px #4ade80}.auth-pill:active{opacity:.78}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);margin:12px 12px 0;padding:14px;box-shadow:var(--shadow)}.card-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}.card-bar{flex:none;width:3px;height:15px;border-radius:2px;background:var(--brand)}.card-head h2{font-size:15px;font-weight:600;letter-spacing:.2px}.card-tag{margin-left:auto;flex:none;font-size:11px;color:var(--brand-dark);background:#eef3ff;border:1px solid #dbe7ff;padding:3px 9px;border-radius:20px}.count-pill{margin-left:auto;flex:none;font-size:11.5px;color:var(--muted);background:#f3f6fb;padding:3px 10px;border-radius:20px}.cam-wrap{--cam-h: min(40vh, 330px);position:relative;width:100%;height:var(--cam-h);border-radius:14px;overflow:hidden;background:#05070c}.cam-wrap #cam-video{width:100%!important;height:100%!important;display:block;object-fit:cover}.cam-wrap .scan-mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border-style:solid;border-color:#03070f73;border-top-width:calc(var(--cam-h) * .28);border-bottom-width:calc(var(--cam-h) * .26);border-left-width:2%;border-right-width:2%;pointer-events:none}.cam-wrap .scan-frame{position:absolute;left:2%;top:28%;width:96%;height:46%;border-radius:10px;pointer-events:none;z-index:2}.cam-wrap .corner{position:absolute;width:20px;height:20px;border:3px solid #35e0ff}.cam-wrap .corner.tl{left:-2px;top:-2px;border-right:none;border-bottom:none;border-top-left-radius:10px}.cam-wrap .corner.tr{right:-2px;top:-2px;border-left:none;border-bottom:none;border-top-right-radius:10px}.cam-wrap .corner.bl{left:-2px;bottom:-2px;border-right:none;border-top:none;border-bottom-left-radius:10px}.cam-wrap .corner.br{right:-2px;bottom:-2px;border-left:none;border-top:none;border-bottom-right-radius:10px}.cam-wrap .laser{position:absolute;left:8px;right:8px;top:0;height:2px;border-radius:2px;background:#35e0ff;will-change:transform,opacity;animation:laser-scan 2.6s cubic-bezier(.45,0,.55,1) infinite}@keyframes laser-scan{0%{transform:translateY(2px);opacity:0}8%{opacity:1}50%{transform:translateY(calc(var(--cam-h) * .46 - 4px))}92%{opacity:1}to{transform:translateY(2px);opacity:0}}.cam-hint{position:absolute;left:10px;right:10px;bottom:10px;z-index:3;text-align:center;padding:7px 10px;font-size:12px;color:#eaf2ff;background:#060c189e;border-radius:20px}.cam-wrap .torch-btn{position:absolute;right:8px;top:8px;z-index:5;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:1;border:1px solid rgba(255,255,255,.38);border-radius:18px;background:#060c189e;color:#fff}.cam-wrap .torch-btn .switch{position:relative;display:inline-block;width:26px;height:14px;border-radius:7px;background:#ffffff52;transition:background .18s ease}.cam-wrap .torch-btn .switch .knob{position:absolute;left:2px;top:2px;width:10px;height:10px;border-radius:50%;background:#fff;transition:transform .18s ease,background .18s ease}.cam-wrap .torch-btn.on{border-color:#ffd54a;color:#ffe08a}.cam-wrap .torch-btn.on .switch{background:#ffd54a}.cam-wrap .torch-btn.on .switch .knob{transform:translate(12px);background:#3a2f00}.focus-ring{position:absolute;width:56px;height:56px;margin-left:-28px;margin-top:-28px;border:2px solid #35e0ff;border-radius:50%;box-shadow:0 0 0 1px #35e0ff59,0 0 10px #35e0ff80;pointer-events:none;z-index:4;animation:focus-pulse .9s ease-out forwards}@keyframes focus-pulse{0%{transform:scale(1.6);opacity:.9}to{transform:scale(.8);opacity:0}}.scan-idle{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;height:148px;padding:0 16px;text-align:center;border:1.5px dashed var(--border-strong);border-radius:14px;background:#f8fafd;color:var(--muted);font-size:13px}.scan-idle svg{width:30px;height:30px;opacity:.75}.scan-idle.running{border-color:var(--brand);color:var(--brand);background:#f4f8ff}button{font-family:inherit;border:none;border-radius:12px;cursor:pointer;font-size:15px;font-weight:600;letter-spacing:.3px;transition:transform .06s ease,opacity .15s ease,background .15s ease}button:active{transform:scale(.975)}.btn{min-height:50px;padding:0 16px;width:100%;color:#fff;background:var(--brand)}.btn:active{background:var(--brand-dark)}.btn:disabled{opacity:.55}.btn.ghost{background:#fff;color:var(--brand-dark);border:1px solid #cddcfb}.btn.ghost:active{background:#eef3ff}.btn.warn{background:var(--warn)}.narrow{flex:0 0 92px;width:auto;padding:0 10px}.grow{flex:1;min-width:0}.act-row{display:flex;gap:10px;margin-top:12px}input{width:100%;height:50px;padding:0 14px;font-size:15px;font-family:inherit;color:var(--text);border:1px solid var(--border-strong);border-radius:12px;background:#f8fafd;outline:none;transition:border-color .15s,box-shadow .15s,background .15s}input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px #2f6fed24}input::placeholder{color:#a7b0c0;font-weight:400}.sn-input input{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:600;letter-spacing:.6px;font-size:16px}.sn-input input::placeholder{font-family:inherit;font-weight:400;letter-spacing:0;font-size:15px}.search-row{display:flex;gap:10px}.hidden-file{display:none!important}.note{margin-top:10px;font-size:12px;color:var(--muted);line-height:1.65}.note.info{display:flex;gap:7px;align-items:flex-start;color:var(--brand-dark);background:#f2f6ff;border:1px solid #e2ebff;border-radius:10px;padding:8px 10px}.sn-hero{display:flex;align-items:baseline;gap:10px;padding:11px 14px;border-radius:12px;background:#eef3ff;border:1px solid #dde7ff}.sn-hero-label{flex:none;font-size:11.5px;color:var(--brand-dark);font-weight:600}.sn-hero-value{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:17px;font-weight:700;letter-spacing:.8px;color:#12305f;word-break:break-all}.fold-btn{width:100%;min-height:46px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;font-size:14px;font-weight:600;color:var(--brand-dark);background:#f6f8fc;border:1px solid #e3eaf6;border-radius:12px}.fold-btn:active{background:#eef2f9}.fold-meta{font-size:12px;font-weight:500;color:var(--muted)}.fold-meta i{font-style:normal;display:inline-block;margin-left:4px;transition:transform .2s ease}.fold-meta i.up{transform:rotate(180deg)}.tblwrap{margin-top:10px;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--border);border-radius:12px}table{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap}th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left}th{background:#f5f8fc;color:#4a5568;font-weight:600;position:sticky;top:0;z-index:1}tbody tr:nth-child(2n) td{background:#fbfcfe}tbody tr:last-child td{border-bottom:none}.dim{color:var(--muted);text-align:center;padding:18px;font-size:13px}.hl{color:var(--brand-dark);font-weight:700}.dev-list{display:flex;flex-direction:column;gap:10px}.dev-item{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:12px;background:#fbfcfe}.dev-main{flex:1;min-width:0}.dev-name{font-size:14.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-code{margin-top:4px;font-size:11.5px;color:var(--muted);font-family:ui-monospace,Menlo,Consolas,monospace}.dev-side{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:6px}.chip.station{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;font-weight:700;color:#fff;letter-spacing:.3px;padding:4px 10px;border-radius:8px;background:#1d4ed8}.state{font-size:11.5px;color:var(--muted);background:#f1f4f9;padding:3px 9px;border-radius:20px}.state.on{color:var(--ok);background:#e9f9ef}.st-block{margin-top:14px;padding-top:14px;border-top:1px dashed var(--border-strong)}.st-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.st-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:15.5px;font-weight:700;letter-spacing:.5px;color:#12305f;word-break:break-all}.badge{flex:none;font-size:11.5px;padding:3px 10px;border-radius:20px}.badge.locked{background:#e9f9ef;color:var(--ok)}.badge.auto{background:#eef3ff;color:var(--brand-dark)}.badge.err{background:#fdecec;color:var(--danger)}.kv{display:flex;flex-direction:column}.kv-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px dashed var(--border)}.kv-row:last-child{border-bottom:none}.kv-row .k{flex:none;font-size:12.5px;color:var(--muted)}.kv-row .v{font-size:13.5px;text-align:right;margin-left:10px;word-break:break-all}.kv-row .v.strong{font-weight:600;color:var(--text)}.kv-row .v.owner{color:var(--brand-dark);font-size:15px;font-weight:700}.empty-box{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;margin-top:12px;padding:20px 14px;text-align:center;border:1.5px dashed var(--border-strong);border-radius:12px;background:#f9fbfd;color:var(--muted);font-size:12.5px;line-height:1.7}.empty-box svg{opacity:.55}.dg-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.dg-item{background:#fff;border:1px solid var(--border);border-radius:12px;overflow:hidden;cursor:pointer}.dg-item:active{transform:scale(.985)}.dg-img{position:relative;display:block;padding:6px}.dg-img img{width:100%;display:block;border-radius:8px;aspect-ratio:4 / 3;object-fit:cover;background:#f1f4f9}.dg-zoom{position:absolute;right:12px;bottom:12px;font-size:11px;color:#fff;background:#0d1f3fc7;padding:4px 8px;border-radius:6px}.dg-meta{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:8px 10px}.dg-name{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dg-size{flex:none;font-size:11px;color:var(--muted)}.loading-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:#0a101c7a}.load-card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:22px 28px;border-radius:18px;background:#fff;border:1px solid var(--border)}.spinner{width:42px;height:42px;border-radius:50%;border:4px solid var(--border);border-top-color:var(--brand);animation:spin .8s linear infinite}.load-card p{font-size:13.5px;color:var(--text)}@keyframes spin{to{transform:rotate(360deg)}}.toasts{position:fixed;top:calc(70px + env(safe-area-inset-top,0px));left:50%;transform:translate(-50%);z-index:200;width:92%;max-width:480px;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}.toast{display:flex;align-items:center;gap:8px;max-width:100%;padding:11px 16px;border-radius:24px;color:#fff;font-size:13px;font-weight:500;background:var(--navy);box-shadow:0 6px 18px #08102047,0 1px 3px #08102038}.toast:before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:#ffffffeb}.toast.info{background:var(--navy)}.toast.ok{background:var(--ok)}.toast.err{background:var(--danger)}.toast.warn{background:var(--warn)}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:150;background:#0a101c9e;display:flex;align-items:center;justify-content:center;padding:20px}.modal{width:100%;max-width:400px;overflow:hidden;border-radius:20px;background:#fff}.modal-head{padding:18px 20px 16px;background:#0d1f3f;color:#fff}.modal-head h2{font-size:17px;font-weight:600;letter-spacing:.3px}.modal-head .tip{margin-top:5px;font-size:12px;line-height:1.6;color:#ffffffc7}.modal-body{padding:16px 20px 20px}.field{margin-top:12px}.field:first-child{margin-top:0}.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}.captcha-row{display:flex;gap:10px}.captcha-row input{flex:1;min-width:0}.captcha-img{flex:none;width:104px;height:50px;border:1px solid var(--border-strong);border-radius:12px;background:#f1f4f9;object-fit:cover;cursor:pointer}.captcha-img:active{opacity:.8}.pwd-wrap{position:relative}.pwd-wrap input{padding-right:50px}.pwd-eye{position:absolute;right:5px;top:5px;bottom:5px;width:40px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:10px;background:transparent;color:var(--muted)}.pwd-eye.on{color:var(--brand);background:#eef3ff}.pwd-eye:active{background:#eef3ff}.link{color:var(--brand);text-decoration:none;word-break:break-all}.copyable{-webkit-user-select:all;user-select:all}.codebox{margin-top:8px;padding:10px;font-size:11px;line-height:1.5;background:#f7f9fc;border:1px solid var(--border);border-radius:8px;color:#4b5563;word-break:break-all;-webkit-user-select:all;user-select:all;white-space:pre-wrap}textarea.codebox{width:100%;resize:vertical;font-family:monospace;background:#fefbf4;color:#7c5f00}.viewer-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;background:#080c14f7;display:flex;align-items:center;justify-content:center;overflow:hidden}.viewer-close{position:absolute;top:calc(14px + env(safe-area-inset-top,0px));right:14px;z-index:5;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fff3;color:#fff;font-size:20px;cursor:pointer;-webkit-tap-highlight-color:transparent}.viewer-close:active{background:#ffffff5c}.viewer-nav{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:50px;height:50px;border-radius:50%;background:#ffffffeb;color:#334155;cursor:pointer;z-index:5;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.viewer-nav svg{pointer-events:none;display:block}.viewer-nav:active{background:#cbd5e1f2}.viewer-prev{left:12px}.viewer-next{right:12px}.viewer-content{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 12px;-webkit-touch-callout:none;touch-action:none}.viewer-img-wrap{width:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.viewer-content img{max-width:96%;max-height:100%;object-fit:contain;border-radius:6px;box-shadow:0 8px 30px #00000080;transform-origin:center center;transition:transform .12s ease-out;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.viewer-caption{flex:none;margin-top:12px;color:#dde4ef;font-size:12.5px;background:#ffffff1a;padding:7px 14px;border-radius:18px;text-align:center;max-width:96%}
