@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Syne:wght@700;800&family=DM+Sans:wght@400;500;600&display=swap";@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;900&family=Manrope:wght@800;900&display=swap";.auth-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--canvas-soft);padding:var(--sp-xl)}.auth-card{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-3xl);width:100%;max-width:420px}.auth-card h1{margin:0 0 var(--sp-xs);font-family:Manrope,Inter,sans-serif;font-size:1.75rem;font-weight:900;color:var(--ink);text-align:center;letter-spacing:-.5px}.auth-subtitle{margin:0 0 var(--sp-2xl);color:var(--mute);text-align:center;font-size:.875rem}.auth-form{display:flex;flex-direction:column;gap:var(--sp-lg)}.form-group{display:flex;flex-direction:column;gap:var(--sp-xs)}.form-group label{font-size:.875rem;font-weight:600;color:var(--mute)}.form-group input{padding:var(--sp-md) var(--sp-lg);border:1px solid var(--canvas-soft);border-radius:var(--r-md);font-size:1rem;font-family:Inter,sans-serif;color:var(--ink);background:var(--canvas);outline:none;transition:border-color .15s;width:100%}.form-group input:disabled{background:var(--canvas-soft);color:var(--mute);cursor:not-allowed}.btn{padding:var(--sp-md) var(--sp-xl);border:none;border-radius:var(--r-xl);font-size:1rem;font-weight:600;font-family:Inter,sans-serif;cursor:pointer;transition:background .15s}.error-message{padding:var(--sp-md) var(--sp-lg);background:#fff0f0;border:1px solid #ffd0d0;border-radius:var(--r-md);color:var(--negative);font-size:.875rem}.success-message{padding:var(--sp-md) var(--sp-lg);background:var(--primary-pale);border:1px solid var(--primary-neutral);border-radius:var(--r-md);color:var(--positive-deep);font-size:.875rem}.auth-footer{margin-top:var(--sp-xl);text-align:center;color:var(--mute);font-size:.875rem}.auth-footer a{color:var(--ink);font-weight:600;text-decoration:underline}.auth-footer a:hover{opacity:.7}.input-prefix{background:var(--canvas-soft);color:var(--body);padding:var(--sp-md) var(--sp-md);font-weight:700;font-size:.9rem;white-space:nowrap;display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-right:1px solid var(--canvas-soft)}.input-with-prefix input{border:none!important;border-radius:0!important;flex:1;padding:var(--sp-md) var(--sp-md)!important}.input-with-prefix input:focus{border-color:transparent!important}:root,[data-theme=dark]{--db-bg: #0d1117;--db-surface: #161b22;--db-border: rgba(48, 54, 61, .8);--db-blue: #58a6ff;--db-green: #3fb950;--db-red: #f85149;--db-amber: #e3b341;--db-mute: #8b949e;--db-text: #c9d1d9;--db-bright: #f0f6fc;--db-panel-h: 50vh;--db-map-bg: #090d12;--db-map-bar: rgba(22,27,34,.9);--db-shadow: rgba(0,0,0,.4)}[data-theme=light]{--db-bg: #f4f6f9;--db-surface: #ffffff;--db-border: rgba(0, 0, 0, .09);--db-blue: #2563eb;--db-green: #16a34a;--db-red: #dc2626;--db-amber: #d97706;--db-mute: #6b7280;--db-text: #374151;--db-bright: #111827;--db-panel-h: 50vh;--db-map-bg: #e8edf5;--db-map-bar: rgba(255,255,255,.9);--db-shadow: rgba(0,0,0,.08)}.db-root{min-height:100vh;background:var(--db-bg);color:var(--db-text);font-family:DM Sans,sans-serif;display:flex;flex-direction:column}.db-loader{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--db-mute);font-size:.875rem;font-family:JetBrains Mono,monospace;letter-spacing:.05em}.db-loader-ring{width:36px;height:36px;border:2px solid var(--db-border);border-top-color:var(--db-blue);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.db-header{display:flex;align-items:center;justify-content:space-between;padding:0 28px;height:56px;background:var(--db-surface);border-bottom:1px solid var(--db-border);position:sticky;top:0;z-index:100;box-shadow:0 1px 4px var(--db-shadow);transition:background .25s,border-color .25s}.db-header-logo{display:flex;align-items:center;gap:10px}.db-header-logo svg{width:28px;height:28px;flex-shrink:0}.db-header-logo span{font-family:Syne,sans-serif;font-size:1.05rem;font-weight:800;color:var(--db-bright);letter-spacing:-.3px}.db-header-logo em{font-style:normal;color:var(--db-blue)}.db-header-nav{display:flex;align-items:center;gap:10px}.db-user-email{font-size:.78rem;color:var(--db-mute);font-family:JetBrains Mono,monospace;margin-right:6px}.db-btn{padding:6px 14px;border-radius:6px;border:1px solid var(--db-border);font-size:.8rem;font-weight:600;font-family:DM Sans,sans-serif;cursor:pointer;transition:all .15s}.db-btn--ghost{background:transparent;color:var(--db-text)}.db-btn--ghost:hover{background:#58a6ff14;border-color:var(--db-blue);color:var(--db-blue)}.db-btn--danger{background:transparent;color:var(--db-mute);border-color:transparent}.db-btn--danger:hover{color:var(--db-red);border-color:#f851494d}.db-main{flex:1;display:flex;flex-direction:column}.db-commands-panel{min-height:var(--db-panel-h);background:var(--db-bg);border-bottom:1px solid var(--db-border);padding:20px 28px 24px;display:flex;flex-direction:column;align-items:center;gap:16px;position:relative;overflow:hidden;transition:background .25s}.db-commands-panel:before{content:"";position:absolute;top:-60px;left:-60px;width:340px;height:260px;background:radial-gradient(ellipse,rgba(88,166,255,.06) 0%,transparent 70%);pointer-events:none}[data-theme=light] .db-commands-panel:before{opacity:.4}.db-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--db-mute)}.db-empty svg{width:40px;height:40px;opacity:.4}.db-empty p{font-size:.9rem}.db-tabs{display:flex;gap:6px;flex-shrink:0;justify-content:center}.db-tab{padding:5px 16px;border-radius:20px;border:1px solid var(--db-border);background:transparent;color:var(--db-mute);font-size:.78rem;font-weight:600;font-family:Syne,sans-serif;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:all .15s}.db-tab:hover{color:var(--db-text);border-color:var(--db-mute)}.db-tab--active{background:var(--db-blue);border-color:var(--db-blue);color:#0d1117}.db-subcats{display:flex;flex-direction:column;gap:18px;overflow-y:auto;flex:1;width:100%;max-width:860px}.db-subcat-label{font-size:.68rem;font-family:JetBrains Mono,monospace;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--db-mute);margin-bottom:10px;display:flex;align-items:center;gap:8px}.db-subcat-label:after{content:"";flex:1;height:1px;background:var(--db-border)}.db-cmd-grid{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.db-theme-toggle{width:36px;height:20px;border-radius:10px;border:1px solid var(--db-border);background:var(--db-bg);cursor:pointer;position:relative;transition:background .25s,border-color .25s;flex-shrink:0}.db-theme-toggle:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--db-mute);transition:transform .25s,background .25s}[data-theme=light] .db-theme-toggle:after{transform:translate(16px);background:var(--db-blue)}.db-theme-label{font-size:.72rem;color:var(--db-mute);font-family:JetBrains Mono,monospace;white-space:nowrap}.db-cmd-btn{position:relative;width:100px;height:100px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border-radius:18px;border:1px solid var(--db-border);background:var(--db-surface);color:var(--db-text);cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s,background .15s;padding:10px 6px 8px;overflow:hidden}.db-cmd-btn:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:18px;background:linear-gradient(135deg,rgba(88,166,255,.04) 0%,transparent 60%);opacity:0;transition:opacity .15s}.db-cmd-btn:hover:not(:disabled){transform:translateY(-2px) scale(1.03);box-shadow:0 8px 24px #58a6ff2e,0 0 0 1px #58a6ff4d;border-color:#58a6ff80;background:#58a6ff12}.db-cmd-btn:hover:not(:disabled):before{opacity:1}.db-cmd-btn:active:not(:disabled){transform:translateY(0) scale(.97)}.db-cmd-btn:disabled{opacity:.6;cursor:not-allowed}.db-cmd-btn--busy{border-color:#e3b34166!important;background:#e3b3410f!important}.db-cmd-btn--busy .db-cmd-icon svg{animation:spin 1s linear infinite;color:var(--db-amber)}.db-cmd-btn--ok{border-color:#3fb95080!important;background:#3fb95012!important}.db-cmd-btn--ok .db-cmd-icon{color:var(--db-green)}.db-cmd-btn--err{border-color:#f8514980!important;background:#f8514912!important}.db-cmd-btn--err .db-cmd-icon{color:var(--db-red)}.db-cmd-icon{width:36px;height:36px;color:var(--db-blue);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .15s}.db-cmd-icon svg{width:100%;height:100%}.db-cmd-name{font-size:.68rem;font-weight:600;text-align:center;line-height:1.25;color:var(--db-text);font-family:DM Sans,sans-serif;max-width:88px;word-break:break-word}.db-cmd-badge{position:absolute;bottom:4px;left:50%;transform:translate(-50%);font-size:.6rem;font-family:JetBrains Mono,monospace;font-weight:600;padding:2px 6px;border-radius:4px;white-space:nowrap;letter-spacing:.03em;animation:fadeIn .2s ease}.db-cmd-badge--sending{background:#e3b34126;color:var(--db-amber)}.db-cmd-badge--success{background:#3fb95026;color:var(--db-green)}.db-cmd-badge--error{background:#f8514926;color:var(--db-red)}@keyframes fadeIn{0%{opacity:0;transform:translate(-50%) translateY(4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.db-map-section{flex:1;min-height:var(--db-panel-h)}.map-panel{height:100%;min-height:var(--db-panel-h);background:var(--db-map-bg);display:flex;flex-direction:column;position:relative;transition:background .25s}.map-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:var(--db-map-bar);border-bottom:1px solid var(--db-border);z-index:2;position:relative;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:background .25s}.map-status{display:flex;align-items:center;gap:8px;font-family:JetBrains Mono,monospace;font-size:.72rem;letter-spacing:.06em}.map-dot{width:7px;height:7px;border-radius:50%;background:var(--db-mute);animation:pulse-mute 2.5s ease-in-out infinite}@keyframes pulse-mute{0%,to{opacity:.4;box-shadow:0 0 4px var(--db-mute)}50%{opacity:1;box-shadow:0 0 10px var(--db-mute)}}.map-label{color:var(--db-mute);font-weight:600;letter-spacing:.1em;font-size:.68rem}.map-divider{color:var(--db-border)}.map-waiting{color:#8b949e99;font-size:.68rem}.map-coords{display:flex;gap:16px;font-family:JetBrains Mono,monospace;font-size:.72rem;color:var(--db-mute)}.map-coords em{font-style:normal;color:#8b949e66}.map-body{flex:1;position:relative;overflow:hidden}.map-grid{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.map-corner{position:absolute;width:16px;height:16px;border-color:#58a6ff4d;border-style:solid;z-index:2}.map-corner--tl{top:12px;left:12px;border-width:1px 0 0 1px}.map-corner--tr{top:12px;right:12px;border-width:1px 1px 0 0}.map-corner--bl{bottom:12px;left:12px;border-width:0 0 1px 1px}.map-corner--br{bottom:12px;right:12px;border-width:0 1px 1px 0}.map-crosshair{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:3;pointer-events:none}.map-crosshair-ring{position:absolute;width:40px;height:40px;border:1px solid rgba(88,166,255,.2);border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%);animation:ring-pulse 3s ease-in-out infinite}.map-crosshair-ring:after{content:"";position:absolute;width:60px;height:60px;border:1px solid rgba(88,166,255,.08);border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes ring-pulse{0%,to{opacity:.4;transform:translate(-50%,-50%) scale(1)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.1)}}.map-crosshair-dot{width:8px;height:8px;border-radius:50%;background:#58a6ff4d;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.map-crosshair-line{position:absolute;background:#58a6ff1f;top:50%;left:50%}.map-crosshair-line--h{width:80px;height:1px;transform:translate(-50%,-50%)}.map-crosshair-line--v{width:1px;height:80px;transform:translate(-50%,-50%)}.map-no-signal{position:absolute;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:7px 14px;background:var(--db-map-bar);border:1px solid var(--db-border);border-radius:20px;font-size:.72rem;font-family:JetBrains Mono,monospace;color:var(--db-mute);letter-spacing:.04em;z-index:3}.map-no-signal svg{width:14px;height:14px;opacity:.5}@media (max-width: 640px){.db-header{padding:0 16px}.db-user-email{display:none}.db-commands-panel{padding:16px}.db-cmd-btn{width:86px;height:86px;border-radius:16px}.db-cmd-icon{width:28px;height:28px}.db-cmd-name{font-size:.62rem}.map-header{flex-direction:column;align-items:flex-start;gap:6px}}@media (max-width: 400px){.db-cmd-btn{width:76px;height:76px}}.admin-container{min-height:100vh;background:var(--canvas-soft)}.admin-header{background:var(--canvas);border-bottom:1px solid var(--canvas-soft);padding:var(--sp-md) var(--sp-xl)}.header-content{display:flex;justify-content:space-between;align-items:center;max-width:1400px;margin:0 auto}.admin-header h1{margin:0;font-family:Manrope,Inter,sans-serif;font-size:1.25rem;font-weight:900;color:var(--ink);letter-spacing:-.3px}.user-info{display:flex;align-items:center;gap:var(--sp-md)}.user-email{color:var(--mute);font-size:.875rem;font-weight:600}.btn-logout{background:none;color:var(--mute);border:none;padding:var(--sp-sm) var(--sp-lg);border-radius:var(--r-xl);cursor:pointer;font-weight:600;font-size:.875rem;transition:all .15s}.btn-logout:hover{color:var(--negative);background:#fff0f0}.tabs{display:flex;gap:var(--sp-xs);padding:var(--sp-md) var(--sp-xl);background:var(--canvas);border-bottom:1px solid var(--canvas-soft);max-width:1400px;margin:0 auto;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{padding:var(--sp-sm) var(--sp-lg);border:none;background:transparent;cursor:pointer;border-radius:var(--r-xl);font-weight:600;color:var(--mute);transition:all .15s;font-size:.875rem;font-family:Inter,sans-serif}.tab-content{padding:var(--sp-2xl) var(--sp-xl);max-width:1400px;margin:0 auto}.tab-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--sp-xl)}.tab-header h2{margin:0;font-family:Manrope,Inter,sans-serif;font-size:1.5rem;font-weight:900;color:var(--ink);letter-spacing:-.5px}.table-container{background:var(--canvas);border-radius:var(--r-xl);overflow:hidden}table{width:100%;border-collapse:collapse}thead{background:var(--canvas-soft)}th{padding:var(--sp-md) var(--sp-lg);text-align:left;font-weight:600;color:var(--mute);font-size:.75rem;text-transform:uppercase;letter-spacing:.5px}td{padding:var(--sp-md) var(--sp-lg);border-bottom:1px solid var(--canvas-soft);color:var(--ink);font-size:.875rem}tbody tr{transition:background .15s}tbody tr:hover{background:#f8faf7}tbody tr:last-child td{border-bottom:none}.badge{display:inline-flex;align-items:center;padding:var(--sp-xs) var(--sp-md);border-radius:var(--r-pill);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.badge.admin{background:#fff8e0;color:var(--warning-content)}.badge.user,.badge.active{background:var(--primary-pale);color:var(--positive-deep)}.badge.inactive{background:#fff0f0;color:var(--negative)}.badge.category{background:var(--canvas-soft);color:var(--body)}.btn{padding:var(--sp-sm) var(--sp-lg);border:none;border-radius:var(--r-xl);cursor:pointer;font-size:.875rem;font-weight:600;font-family:Inter,sans-serif;transition:all .15s}.btn-primary{background:var(--primary);color:var(--on-primary)}.btn-primary:hover{background:var(--primary-active)}.btn-icon{background:none;border:none;cursor:pointer;font-size:1.1rem;padding:var(--sp-sm);transition:all .15s;border-radius:var(--r-sm)}.btn-icon:hover{background:var(--canvas-soft);transform:scale(1.15)}.btn-sort{background:var(--canvas-soft);color:var(--body);border:none;padding:var(--sp-xs) var(--sp-sm);border-radius:var(--r-sm);cursor:pointer;font-size:.9rem;transition:all .15s;margin:0 2px}.btn-sort:hover:not(:disabled){background:var(--primary-neutral)}.btn-sort:disabled{opacity:.3;cursor:not-allowed}.actions{display:flex;gap:var(--sp-xs);align-items:center}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0e0f0c80;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .15s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-2xl);max-width:560px;width:90%;max-height:85vh;overflow-y:auto;position:relative;animation:slideUp .2s}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.modal-content h2{margin:0 0 var(--sp-xl);font-family:Manrope,Inter,sans-serif;font-size:1.25rem;font-weight:900;color:var(--ink);letter-spacing:-.3px}.modal-close{position:absolute;top:var(--sp-lg);right:var(--sp-lg);background:var(--canvas-soft);border:none;font-size:1.25rem;cursor:pointer;color:var(--mute);line-height:1;padding:var(--sp-xs) var(--sp-sm);border-radius:var(--r-sm);transition:all .15s}.modal-close:hover{background:#fde8e8;color:var(--negative)}.modal-form{margin-top:var(--sp-lg)}.form-group input[type=text],.form-group input[type=email],.form-group input[type=password],.form-group select,.form-group textarea{width:100%;padding:var(--sp-md) var(--sp-lg);border:1px solid var(--canvas-soft);border-radius:var(--r-md);font-size:.9rem;font-family:Inter,sans-serif;color:var(--ink);background:var(--canvas);outline:none;transition:border-color .15s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--ink)}.form-group textarea{resize:vertical;min-height:80px}.form-group.checkbox{display:flex;align-items:center}.form-group.checkbox label{margin-bottom:0;display:flex;align-items:center;cursor:pointer;font-weight:500;color:var(--body)}.form-group.checkbox input{margin-right:var(--sp-sm);width:18px;height:18px;cursor:pointer}.permissions-list{max-height:360px;overflow-y:auto;border:1px solid var(--canvas-soft);border-radius:var(--r-lg);padding:var(--sp-sm);background:var(--canvas-soft)}.permission-item{display:flex;align-items:center;padding:var(--sp-sm) var(--sp-md);margin-bottom:var(--sp-xs);cursor:pointer;border-radius:var(--r-sm);transition:background .15s;background:var(--canvas)}.permission-item:hover{background:var(--primary-pale)}.permission-item input[type=checkbox]{margin-right:var(--sp-md);cursor:pointer;width:16px;height:16px}.permission-item .parent-category{font-weight:600;color:var(--ink);font-size:.875rem}.permission-item .subcategory{color:var(--mute);margin-left:var(--sp-xl);font-size:.875rem}.loading{text-align:center;padding:60px var(--sp-xl);font-size:1rem;color:var(--mute)}.subcategory{padding-left:var(--sp-xl);color:var(--mute);font-size:.875rem}.devices-toolbar{display:flex;align-items:center;gap:var(--sp-lg);margin-bottom:var(--sp-xl);flex-wrap:wrap}.devices-filter{display:flex;gap:var(--sp-sm)}.filter-btn{padding:var(--sp-sm) var(--sp-lg);border:1px solid var(--canvas-soft);background:var(--canvas);border-radius:var(--r-xl);cursor:pointer;font-weight:600;font-size:.875rem;color:var(--mute);transition:all .15s;font-family:Inter,sans-serif}.filter-btn:hover{border-color:var(--ink);color:var(--ink)}.filter-btn.active{background:var(--ink);border-color:var(--ink);color:var(--canvas)}.devices-search{padding:var(--sp-sm) var(--sp-lg);border:1px solid var(--canvas-soft);border-radius:var(--r-xl);font-size:.875rem;font-family:Inter,sans-serif;color:var(--ink);background:var(--canvas);outline:none;transition:border-color .15s;min-width:260px}.devices-search:focus{border-color:var(--ink)}.phones-dropdown{position:relative}.phones-toggle{background:var(--canvas-soft);border:none;border-radius:var(--r-sm);padding:var(--sp-xs) var(--sp-md);cursor:pointer;font-size:.8rem;font-weight:600;color:var(--body);transition:background .15s}.phones-toggle:hover{background:var(--primary-neutral)}.phones-list{position:absolute;top:calc(100% + 4px);left:0;background:var(--canvas);border:1px solid var(--canvas-soft);border-radius:var(--r-lg);padding:var(--sp-md);z-index:10;min-width:160px;box-shadow:0 4px 16px #0e0f0c1a;font-size:.8rem;color:var(--body);display:flex;flex-direction:column;gap:var(--sp-xs)}.geo-link{color:var(--positive);text-decoration:none;font-size:.8rem;font-weight:600}.geo-link:hover{text-decoration:underline}.owner-link{color:var(--positive);cursor:pointer;font-weight:600;text-decoration:underline dotted}.owner-link:hover{color:var(--ink)}.firmware-upload-card{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-xl);margin-bottom:var(--sp-xl)}.firmware-upload-card h3{margin:0 0 var(--sp-lg);font-size:1rem;font-weight:900;font-family:Manrope,Inter,sans-serif;color:var(--ink)}.firmware-upload-form{display:flex;flex-direction:column;gap:var(--sp-md)}.fw-form-row{display:grid;grid-template-columns:200px 1fr;gap:var(--sp-lg)}.fw-msg{margin-top:var(--sp-sm);padding:var(--sp-sm) var(--sp-md);border-radius:var(--r-sm);font-size:.875rem;font-weight:500}.fw-msg-ok{background:var(--primary-pale);color:var(--positive-deep)}.fw-msg-error{background:#fff0f0;color:var(--negative)}.fw-msg-inline{font-size:.75rem;font-weight:600;padding:2px var(--sp-sm);border-radius:var(--sp-xs)}.fw-empty{text-align:center;color:var(--mute);padding:60px var(--sp-xl);font-size:1rem;background:var(--canvas);border-radius:var(--r-xl)}.firmware-list{display:flex;flex-direction:column;gap:var(--sp-lg)}.firmware-card{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-xl)}.fw-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-lg);flex-wrap:wrap}.fw-version-info{display:flex;align-items:center;gap:var(--sp-md);flex-wrap:wrap}.fw-version{font-size:1.25rem;font-weight:900;font-family:Manrope,Inter,sans-serif;color:var(--ink)}.fw-filename{font-size:.8rem;color:var(--body);font-weight:500;background:var(--canvas-soft);padding:2px var(--sp-sm);border-radius:var(--r-sm)}.fw-size{font-size:.8rem;color:var(--mute)}.fw-date,.fw-author{font-size:.75rem;color:var(--mute)}.fw-notes{margin-top:var(--sp-md);padding:var(--sp-md);background:var(--canvas-soft);border-left:3px solid var(--primary);border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:.875rem;color:var(--body)}.fw-card-actions{display:flex;gap:var(--sp-sm);align-items:center;flex-wrap:wrap}.btn-fw-push{background:var(--negative);color:var(--canvas);padding:var(--sp-sm) var(--sp-md);font-size:.8rem;border-radius:var(--r-lg);border:none;cursor:pointer;font-weight:600;transition:opacity .15s}.btn-fw-push:hover{opacity:.85}.btn-fw-schedule{background:var(--warning);color:var(--warning-content);padding:var(--sp-sm) var(--sp-md);font-size:.8rem;border-radius:var(--r-lg);border:none;cursor:pointer;font-weight:600;transition:opacity .15s}.btn-fw-schedule:hover{opacity:.85}.btn-fw-download{background:var(--primary);color:var(--on-primary);padding:var(--sp-sm) var(--sp-md);font-size:.8rem;border-radius:var(--r-lg);text-decoration:none;font-weight:600;display:inline-flex;align-items:center;transition:background .15s}.btn-fw-download:hover{background:var(--primary-active)}.fw-devices{margin-top:var(--sp-lg);border-top:1px solid var(--canvas-soft);padding-top:var(--sp-lg)}.fw-devices-title{font-size:.75rem;font-weight:600;color:var(--mute);margin-bottom:var(--sp-md);text-transform:uppercase;letter-spacing:.5px}.fw-devices-list{display:flex;flex-direction:column;gap:var(--sp-xs)}.fw-device-row{display:flex;align-items:center;gap:var(--sp-md);padding:var(--sp-sm) var(--sp-md);background:var(--canvas-soft);border-radius:var(--r-sm);font-size:.8rem;flex-wrap:wrap}.fw-device-serial{font-family:monospace;font-weight:600;color:var(--ink);min-width:120px}.fw-device-owner{color:var(--body)}.fw-device-ver{color:var(--mute);font-size:.75rem}.fw-pending-badge{background:var(--warning)!important;color:var(--warning-content)!important;font-size:.65rem!important;padding:2px var(--sp-sm)!important}.fw-device-btns{display:flex;gap:var(--sp-xs);margin-left:auto}.btn-fw-push-sm{background:var(--negative);color:var(--canvas);border:none;width:28px;height:28px;border-radius:var(--r-sm);cursor:pointer;font-size:.85rem;display:flex;align-items:center;justify-content:center;transition:opacity .15s}.btn-fw-push-sm:hover{opacity:.85}.btn-fw-schedule-sm{background:var(--warning);color:var(--warning-content);border:none;width:28px;height:28px;border-radius:var(--r-sm);cursor:pointer;font-size:.85rem;display:flex;align-items:center;justify-content:center;transition:opacity .15s}.btn-fw-schedule-sm:hover{opacity:.85}.input-with-prefix{display:flex;align-items:stretch;border:1px solid var(--canvas-soft);border-radius:var(--r-md);overflow:hidden;transition:border-color .15s}.input-with-prefix:focus-within{border-color:var(--ink)}.input-prefix{background:var(--canvas-soft);padding:var(--sp-md);font-weight:700;color:var(--body);font-size:.875rem;border-right:1px solid var(--canvas-soft);white-space:nowrap}.input-with-prefix input{border:none!important;border-radius:0!important;box-shadow:none!important;padding:var(--sp-md);flex:1;outline:none;font-size:.875rem;font-family:Inter,sans-serif}.cmd-accordion{display:flex;flex-direction:column;gap:var(--sp-md)}.cmd-acc-parent{border-radius:var(--r-xl);overflow:hidden;background:var(--canvas)}.cmd-acc-parent-btn{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--sp-lg) var(--sp-xl);background:var(--ink);color:var(--primary);border:none;cursor:pointer;font-size:.9rem;font-weight:900;font-family:Manrope,Inter,sans-serif;text-align:left;transition:opacity .15s}.cmd-acc-parent-btn:hover{opacity:.88}.cmd-acc-body{background:var(--canvas-soft);padding:var(--sp-sm);display:flex;flex-direction:column;gap:var(--sp-xs)}.cmd-acc-sub{border-radius:var(--r-lg);overflow:hidden}.cmd-acc-sub-btn{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--sp-md) var(--sp-lg);background:var(--canvas);color:var(--body);border:none;cursor:pointer;font-size:.875rem;font-weight:600;text-align:left;transition:background .15s}.cmd-acc-sub-btn:hover{background:#f8faf7}.cmd-acc-sub-btn.open{background:var(--primary-pale);color:var(--ink-deep)}.cmd-acc-meta{display:flex;align-items:center;gap:var(--sp-md);font-size:.75rem;opacity:.8;font-weight:600;flex-shrink:0}.cmd-acc-arrow{font-size:.65rem}code{background:var(--canvas-soft);padding:2px var(--sp-sm);border-radius:var(--r-sm);font-family:monospace;font-size:.8rem;color:var(--body);font-weight:600}@media (max-width: 768px){.header-content{flex-direction:column;gap:var(--sp-md);text-align:center}.tabs{flex-wrap:nowrap}.tab{flex:1;min-width:80px}.tab-header{flex-direction:column;gap:var(--sp-lg);align-items:flex-start}.table-container{overflow-x:auto}table{min-width:800px}}.profile-container{min-height:100vh;background:var(--canvas-soft)}.profile-header{background:var(--canvas);border-bottom:1px solid var(--canvas-soft);padding:var(--sp-md) 0}.profile-main{max-width:800px;margin:0 auto;padding:var(--sp-3xl) var(--sp-xl)}.profile-card{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-3xl)}.profile-card h2{margin:0 0 var(--sp-2xl);font-family:Manrope,Inter,sans-serif;font-size:1.75rem;font-weight:900;color:var(--ink);letter-spacing:-.5px}.profile-form{display:flex;flex-direction:column;gap:var(--sp-2xl)}.form-section{border-bottom:1px solid var(--canvas-soft);padding-bottom:var(--sp-2xl)}.form-section:last-of-type{border-bottom:none}.form-section h3{margin:0 0 var(--sp-lg);font-size:1rem;font-weight:900;font-family:Manrope,Inter,sans-serif;color:var(--ink)}.form-group{margin-bottom:var(--sp-lg)}.form-group label{display:block;margin-bottom:var(--sp-xs);font-weight:600;color:var(--mute);font-size:.875rem}.form-group input{width:100%;padding:var(--sp-md) var(--sp-lg);border:1px solid var(--canvas-soft);border-radius:var(--r-md);font-size:1rem;font-family:Inter,sans-serif;color:var(--ink);background:var(--canvas);outline:none;transition:border-color .15s}.form-group input:focus{border-color:var(--ink)}.form-group input.input-disabled{background:var(--canvas-soft);cursor:not-allowed;color:var(--mute)}.btn-primary{width:100%;background:var(--primary);color:var(--on-primary);border:none;padding:var(--sp-md) var(--sp-xl);border-radius:var(--r-xl);font-size:1rem;font-weight:600;cursor:pointer;font-family:Inter,sans-serif;transition:background .15s}.btn-primary:hover:not(:disabled){background:var(--primary-active)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-back{background:var(--canvas-soft);color:var(--body);border:none;padding:var(--sp-sm) var(--sp-lg);border-radius:var(--r-xl);cursor:pointer;font-weight:600;font-size:.875rem;font-family:Inter,sans-serif;transition:background .15s}.success-message{background:var(--primary-pale);border:1px solid var(--primary-neutral);color:var(--positive-deep);padding:var(--sp-md) var(--sp-lg);border-radius:var(--r-md);margin-bottom:var(--sp-lg);font-size:.875rem}.error-message{background:#fff0f0;border:1px solid #ffd0d0;color:var(--negative);padding:var(--sp-md) var(--sp-lg);border-radius:var(--r-md);margin-bottom:var(--sp-lg);font-size:.875rem}@media (max-width: 768px){.profile-card{padding:var(--sp-xl)}.profile-main{padding:var(--sp-xl) var(--sp-lg)}}.user-card-container{min-height:100vh;background:var(--canvas-soft)}.user-card-header{background:var(--canvas);border-bottom:1px solid var(--canvas-soft);padding:var(--sp-md) 0}.user-card-header .header-content{max-width:1400px;margin:0 auto;padding:0 var(--sp-xl);display:flex;justify-content:space-between;align-items:center}.user-card-header h1{margin:0;font-family:Manrope,Inter,sans-serif;font-size:1.25rem;font-weight:900;color:var(--ink);letter-spacing:-.3px}.header-actions{display:flex;gap:var(--sp-md)}.user-card-main{max-width:1400px;margin:0 auto;padding:var(--sp-xl);display:flex;flex-direction:column;gap:var(--sp-xl)}.user-info-card,.stats-card,.logs-section{background:var(--canvas);border-radius:var(--r-xl);padding:var(--sp-xl)}.user-info-card h2,.stats-card h2,.logs-section h2{margin:0 0 var(--sp-xl);font-family:Manrope,Inter,sans-serif;font-size:1.25rem;font-weight:900;color:var(--ink);letter-spacing:-.3px}.info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--sp-lg)}.info-item{display:flex;flex-direction:column;gap:var(--sp-xs)}.info-label{font-size:.75rem;color:var(--mute);font-weight:600;text-transform:uppercase;letter-spacing:.5px}.info-value{font-size:.9rem;color:var(--ink);font-weight:500}.role-badge,.status-badge{display:inline-flex;align-items:center;padding:var(--sp-xs) var(--sp-md);border-radius:var(--r-pill);font-size:.75rem;font-weight:600}.role-badge.admin{background:#fff8e0;color:var(--warning-content)}.role-badge.user,.status-badge.active,.status-badge.success{background:var(--primary-pale);color:var(--positive-deep)}.status-badge.inactive,.status-badge.error,.status-badge.failed{background:#fff0f0;color:var(--negative)}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--sp-lg)}.stat-item{text-align:center;padding:var(--sp-xl);background:var(--canvas-soft);border-radius:var(--r-lg)}.stat-value{font-size:2rem;font-weight:900;font-family:Manrope,Inter,sans-serif;color:var(--ink);margin-bottom:var(--sp-sm);letter-spacing:-1px}.stat-label{font-size:.875rem;color:var(--mute);font-weight:600}.tabs{display:flex;gap:var(--sp-sm);margin-bottom:var(--sp-xl);border-bottom:1px solid var(--canvas-soft)}.tab{padding:var(--sp-sm) var(--sp-lg);border:none;background:transparent;cursor:pointer;border-radius:var(--r-xl) var(--r-xl) 0 0;font-weight:600;color:var(--mute);transition:all .15s;font-size:.875rem;font-family:Inter,sans-serif}.tab:hover{background:var(--canvas-soft);color:var(--ink)}.tab.active{background:var(--primary);color:var(--on-primary)}.logs-table-container{overflow-x:auto}.logs-table{width:100%;border-collapse:collapse}.logs-table th{background:var(--canvas-soft);padding:var(--sp-md) var(--sp-md);text-align:left;font-weight:600;color:var(--mute);border-bottom:1px solid var(--canvas-soft);font-size:.75rem;text-transform:uppercase;letter-spacing:.5px}.logs-table td{padding:var(--sp-md) var(--sp-md);border-bottom:1px solid var(--canvas-soft);font-size:.875rem;color:var(--body)}.logs-table tbody tr:hover{background:#f8faf7}.no-data{text-align:center;color:var(--mute);padding:40px!important;font-size:.875rem}.command-info{display:flex;flex-direction:column;gap:var(--sp-xs)}.command-name{font-weight:600;color:var(--ink);font-size:.875rem}.command-desc{font-size:.75rem;color:var(--mute)}.log-category{font-size:.8rem;white-space:nowrap}.log-category-parent{font-weight:600;color:var(--ink)}.log-category-sep{color:var(--mute)}.log-category-sub{color:var(--body)}.log-category-none{color:var(--mute)}.log-output{max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-text{color:var(--negative)}.output-text{color:var(--positive)}.user-agent{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem}.loading,.error{text-align:center;padding:40px;font-size:1rem;color:var(--mute)}.btn-back{background:var(--canvas-soft);color:var(--body);border:none;padding:var(--sp-sm) var(--sp-lg);border-radius:var(--r-xl);cursor:pointer;font-weight:600;font-size:.875rem;transition:background .15s;font-family:Inter,sans-serif}.btn-back:hover{background:var(--primary-neutral)}.serial-link{color:var(--positive);cursor:pointer;font-weight:600;text-decoration:underline dotted;transition:color .2s}.serial-link:hover{color:var(--ink)}@media (max-width: 768px){.info-grid{grid-template-columns:1fr}.stats-grid{grid-template-columns:repeat(2,1fr)}.logs-table{font-size:.75rem}.logs-table th,.logs-table td{padding:var(--sp-sm)}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--primary: #9fe870;--on-primary: #0e0f0c;--primary-active: #cdffad;--primary-neutral: #c5edab;--primary-pale: #e2f6d5;--ink: #0e0f0c;--ink-deep: #163300;--body: #454745;--mute: #868685;--canvas: #ffffff;--canvas-soft: #e8ebe6;--positive: #2ead4b;--positive-deep: #054d28;--warning: #ffd11a;--warning-content: #4a3b1c;--negative: #d03238;--negative-deep: #a72027;--negative-bg: #320707;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-xl: 24px;--r-pill: 9999px;--sp-xs: 4px;--sp-sm: 8px;--sp-md: 12px;--sp-lg: 16px;--sp-xl: 24px;--sp-2xl: 32px;--sp-3xl: 48px}html{font-size:16px}body{background-color:var(--canvas-soft);color:var(--ink);font-family:Inter,system-ui,-apple-system,sans-serif;font-size:1rem;line-height:1.5;min-height:100vh;-webkit-font-smoothing:antialiased}#root{min-height:100vh}a{color:inherit;text-decoration:none}button{font-family:Inter,system-ui,sans-serif;font-weight:600;cursor:pointer;border:none;background:none}input,select,textarea{font-family:Inter,system-ui,sans-serif;font-size:1rem}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--canvas-soft)}::-webkit-scrollbar-thumb{background:var(--mute);border-radius:3px}
