:root{--ink:#17202a;--muted:#68737f;--line:#dfe4e8;--bg:#f3f5f6;--panel:#fff;--accent:#087e68;--accent-dark:#056654;--blue:#286fbb;--amber:#ad6b00;--red:#b63a45;--sidebar:#19252b}*{box-sizing:border-box;letter-spacing:0}html,body{margin:0;min-height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--bg)}button,input,select{font:inherit}.sidebar{position:fixed;inset:0 auto 0 0;width:232px;padding:20px 14px;display:flex;flex-direction:column;background:var(--sidebar);color:#fff}.brand{display:flex;align-items:center;gap:12px;padding:4px 8px 26px}.brand-mark{display:grid;place-items:center;width:38px;height:38px;border-radius:6px;background:#e7f4ef;color:var(--accent-dark);font-weight:900;font-size:18px}.brand strong,.brand small{display:block}.brand strong{font-size:16px}.brand small{margin-top:3px;color:#9fb0b7;font-size:11px}.sidebar nav{display:grid;gap:5px}.nav-item{width:100%;border:0;border-radius:6px;padding:11px 12px;display:flex;align-items:center;gap:11px;background:transparent;color:#c0cbd0;cursor:pointer;text-align:left}.nav-item svg{width:18px}.nav-item:hover,.nav-item.active{background:#2b3a41;color:#fff}.connection{margin-top:auto;border-top:1px solid #334249;padding:18px 8px 2px;display:flex;align-items:center;gap:10px}.connection>span{width:9px;height:9px;border-radius:50%;background:#db9d37}.connection>span.online{background:#53c29e}.connection strong,.connection small{display:block}.connection strong{font-size:12px}.connection small{margin-top:2px;color:#879aa2;font-size:10px}main{min-height:100vh;margin-left:232px;padding:0 30px 40px}header{height:94px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}h1,h2,p{margin:0}h1{font-size:26px}.eyebrow{font-size:10px;font-weight:800;color:var(--accent);margin-bottom:5px}.header-actions{display:flex;gap:8px}.admin-key{height:40px;display:flex;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--line);border-radius:6px;background:#fff}.admin-key svg{width:16px;color:var(--muted)}.admin-key input{width:150px;border:0;outline:0}.icon-btn{width:40px;height:40px;display:grid;place-items:center;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);cursor:pointer}.icon-btn svg{width:18px}.view{display:none;padding-top:26px}.view.active{display:block}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:32px}.metrics article{min-height:130px;padding:20px;border:1px solid var(--line);border-radius:8px;background:var(--panel)}.metrics span,.metrics small{display:block;color:var(--muted)}.metrics span{font-size:13px;font-weight:700}.metrics strong{display:block;margin:12px 0 5px;font-size:30px}.metrics small{font-size:12px}.section-head{min-height:48px;margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;gap:16px}.section-head h2{font-size:18px}.section-head p{margin-top:5px;color:var(--muted);font-size:12px}.primary-btn,.secondary-btn{min-height:40px;border-radius:6px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:700;font-size:13px;cursor:pointer}.primary-btn{border:1px solid var(--accent);background:var(--accent);color:#fff}.primary-btn:hover{background:var(--accent-dark)}.primary-btn:disabled{opacity:.5;cursor:not-allowed}.secondary-btn{border:1px solid var(--line);background:#fff;color:var(--ink)}.secondary-btn:hover{border-color:#aeb8bf}.compact{min-height:34px;padding:0 10px}.primary-btn svg,.secondary-btn svg{width:16px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px;background:#fff}table{width:100%;border-collapse:collapse;white-space:nowrap}th,td{padding:14px 16px;text-align:left;border-bottom:1px solid #edf0f2;font-size:13px}th{background:#f8f9fa;color:var(--muted);font-size:11px;text-transform:uppercase}tbody tr:last-child td{border-bottom:0}.file-cell strong,.file-cell small{display:block;max-width:280px;overflow:hidden;text-overflow:ellipsis}.file-cell small{margin-top:4px;color:var(--muted)}.badge{display:inline-flex;align-items:center;min-height:25px;padding:0 8px;border-radius:999px;font-size:11px;font-weight:800;background:#eef1f3;color:#52606a}.badge.pending{background:#fff5dc;color:var(--amber)}.badge.downloading{background:#e7f1fc;color:var(--blue)}.badge.completed,.badge.running{background:#e5f5ef;color:var(--accent-dark)}.device-grid{display:grid;grid-template-columns:repeat(3,minmax(240px,1fr));gap:14px}.device-card{border:1px solid var(--line);border-radius:8px;background:#fff;padding:18px}.device-top{display:flex;align-items:flex-start;justify-content:space-between}.device-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:6px;background:#edf6f3;color:var(--accent)}.device-icon svg{width:20px}.device-card h3{font-size:15px;margin:14px 0 4px}.device-card p{color:var(--muted);font-size:12px}.pair-code{margin-top:16px;padding-top:14px;border-top:1px solid var(--line);display:flex;align-items:end;justify-content:space-between}.pair-code span,.pair-code strong{display:block}.pair-code span{font-size:10px;color:var(--muted)}.pair-code strong{margin-top:3px;font-size:21px;font-family:ui-monospace,monospace}.empty{padding:42px 18px!important;text-align:center!important;color:var(--muted)}select,input{height:40px;border:1px solid #cfd6da;border-radius:6px;background:#fff;padding:0 11px;color:var(--ink)}dialog{width:min(440px,calc(100% - 28px));border:0;border-radius:8px;padding:0;box-shadow:0 24px 70px #10182044}dialog::backdrop{background:#10182099}.wide-dialog{width:min(760px,calc(100% - 28px))}dialog form{padding:22px}.dialog-head{display:flex;justify-content:space-between;gap:16px;margin-bottom:20px}.dialog-head h2{font-size:19px}.dialog-head p{font-size:12px;color:var(--muted);margin-top:5px}dialog label{display:grid;gap:7px;margin:13px 0;font-size:12px;font-weight:700}dialog label input,dialog label select{width:100%}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:22px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.source-title{margin-top:18px;display:flex;align-items:center;justify-content:space-between;font-size:13px}.source-row{margin-top:10px;padding:13px;border:1px solid var(--line);border-radius:7px;background:#f8f9fa}.source-row-head{display:flex;gap:8px}.source-row-head input{flex:1}.remove-source{flex:0 0 40px}.device-options{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.device-option{margin:0!important;padding:7px 9px;display:flex!important;grid-template:none!important;align-items:center;gap:6px;border:1px solid var(--line);border-radius:5px;background:#fff;font-weight:500!important}.device-option input{width:15px!important;height:15px!important;margin:0}.scan-result{min-height:16px;margin-top:8px;color:var(--muted);font-size:11px}#toast{position:fixed;right:24px;bottom:24px;z-index:100;padding:12px 16px;border-radius:6px;background:#18252b;color:#fff;font-size:13px;box-shadow:0 10px 30px #0003;opacity:0;transform:translateY(12px);pointer-events:none;transition:.2s}#toast.show{opacity:1;transform:none}#toast.error{background:var(--red)}@media(max-width:900px){.sidebar{width:72px}.brand div,.nav-item span,.connection div{display:none}.brand{padding-left:3px}.nav-item{justify-content:center}.connection{justify-content:center}main{margin-left:72px;padding-left:18px;padding-right:18px}.metrics{grid-template-columns:1fr 1fr}.device-grid{grid-template-columns:1fr 1fr}}@media(max-width:600px){main{margin-left:0;padding:0 12px 80px}.sidebar{inset:auto 0 0 0;width:auto;height:64px;z-index:20;display:block;padding:7px 10px}.brand,.connection{display:none}.sidebar nav{height:100%;display:grid;grid-template-columns:repeat(4,1fr)}.nav-item{padding:6px}.nav-item span{display:block;font-size:9px}.nav-item{flex-direction:column;gap:2px}header{height:78px}.eyebrow{display:none}h1{font-size:20px}.admin-key{display:none}.metrics{gap:8px}.metrics article{min-height:104px;padding:14px}.metrics strong{font-size:25px;margin:8px 0 3px}.device-grid{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.section-head{align-items:flex-end}.section-head p{display:none}}
