:root{color-scheme:light;font-family:IBM Plex Sans,Segoe UI,sans-serif;--bg: #f4f7fb;--surface: #ffffff;--surface-soft: #f8fbff;--border: #d9e2ef;--text: #0f172a;--muted: #475569;--primary: #0f766e;--primary-2: #0b615b;--danger: #b91c1c;--danger-bg: #fef2f2;--success: #166534;--success-bg: #f0fdf4}*{box-sizing:border-box}body{margin:0;color:var(--text);background:radial-gradient(1100px 480px at 8% -10%,#dbeafe 0%,transparent 50%),radial-gradient(700px 420px at 100% 0%,#e0f2fe 0%,transparent 48%),var(--bg)}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.auth-card{width:min(420px,100%);background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:22px;box-shadow:0 14px 30px #0f172a14}.auth-card h1{margin:0 0 8px}.auth-card p{margin:0 0 16px;color:var(--muted)}.auth-form{display:grid;gap:12px}.auth-error{margin-top:12px;border:1px solid #fecaca;background:var(--danger-bg);color:var(--danger);border-radius:8px;padding:10px}.auth-toolbar{position:sticky;top:0;z-index:30;display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:10px 18px 0;color:var(--muted);font-size:13px}.app{max-width:1680px;margin:0 auto;padding:18px;display:grid;gap:12px}.topbar{background:linear-gradient(135deg,#0f172a,#1e293b);color:#fff;border-radius:14px;padding:16px 18px;border:1px solid rgba(255,255,255,.08);display:flex;align-items:center}.topbar-main{min-width:0;display:flex;align-items:center;gap:14px}.topbar-brand{display:flex;align-items:center;gap:10px;flex-shrink:0}.topbar-app-icon{width:48px;height:48px;object-fit:contain;border-radius:10px;background:#fffffffa;border:1px solid rgba(226,232,240,.8);padding:4px}.topbar-copy{min-width:0}.topbar h1{margin:0;font-size:28px}.topbar p{margin:6px 0 0;color:#dbeafe}.panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;box-shadow:0 3px 14px #0f172a0d}.tabs{display:flex;flex-wrap:wrap;gap:8px}.tab-btn{border:1px solid #c7d4e6;background:#edf2f9;color:#1f2937;min-width:110px}.tab-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}.shared-range,.fleet-filters,.filters{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:10px;align-items:end}.range-chips{display:flex;gap:8px;flex-wrap:wrap}.chip{width:56px;height:32px;background:#e8eef7;color:#1f2937;border:1px solid #c9d5e6;font-weight:700}.wide-chip{width:auto;min-width:148px}label{display:grid;gap:6px;font-weight:600}input,select,button{height:38px;border-radius:9px;border:1px solid #c9d5e6;padding:0 10px;font:inherit}select[multiple]{height:auto;min-height:84px;padding:8px}button{cursor:pointer;border:1px solid var(--primary);background:var(--primary);color:#fff;font-weight:700}button:hover{background:var(--primary-2)}button:disabled{opacity:.58;cursor:not-allowed}.secondary-btn{background:#edf2f9;color:#0f172a;border-color:#c7d4e6}.secondary-btn:hover{background:#e3ebf7}.actions{display:grid;gap:8px}.inline-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.checkbox-line{display:flex;align-items:center;gap:8px;font-weight:600}.checkbox-line input[type=checkbox]{width:16px;height:16px}.command-result{margin-top:10px;border:1px solid var(--border);border-radius:8px;padding:10px;background:var(--surface-soft);color:#334155}.command-result.ok,.success{border-color:#86efac;background:var(--success-bg);color:var(--success)}.command-result.fail,.error{border-color:#fecaca;background:var(--danger-bg);color:var(--danger)}.status-bar{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.back-btn{margin-left:auto;min-width:132px}.commands-panel h2{margin:0 0 10px}.commands-row{display:flex;gap:10px;flex-wrap:wrap}.grid{display:grid;grid-template-columns:repeat(2,minmax(320px,1fr));gap:14px}.fleet-kpis{display:grid;grid-template-columns:repeat(4,minmax(180px,1fr));gap:10px}.kpi-card{display:grid;gap:8px;min-height:96px;align-content:center}.kpi-card span{color:var(--muted);font-size:13px;font-weight:700}.kpi-card strong{font-size:30px;line-height:1}.metric,.metric-inline{font-size:13px;font-weight:700;color:var(--primary)}.metrics-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:8px}.mongo-summary{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:10px;margin-bottom:10px}.mongo-pill{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:#f8fbff;display:grid;gap:2px}.mongo-pill strong{font-size:12px;color:var(--muted)}.mongo-pill span{font-size:13px;font-weight:700}.chart-stack{display:grid;gap:10px;margin-bottom:10px}.chart-card{border:1px solid var(--border);border-radius:10px;padding:10px;background:#fcfdff}.chart-card h3{margin:0 0 8px;font-size:14px}.usage-chart{width:100%;height:240px;display:block}.chart-bg{fill:#fff}.chart-gridline{stroke:#e2e8f0;stroke-width:1}.chart-line{stroke:#2563eb;stroke-width:2}.chart-dot{fill:#2563eb;cursor:pointer}.chart-bar{fill:#dc2626;opacity:.84;cursor:pointer}.chart-label{fill:#475569;font-size:10px}.usage-focus{margin-top:10px;border:1px solid var(--border);border-radius:8px;padding:10px;background:var(--surface-soft);display:flex;flex-wrap:wrap;gap:12px;font-size:13px}.table-wrap{border:1px solid var(--border);border-radius:8px;overflow:auto;max-height:320px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:9px;border-bottom:1px solid #e7edf6;text-align:left;vertical-align:top}th{position:sticky;top:0;z-index:2;background:#f4f8ff}.fleet-table-panel{grid-column:1 / -1}.fleet-table-head-actions{display:flex;justify-content:flex-end;margin:4px 0 10px}.fleet-table-wrap{max-height:430px}.fleet-table{min-width:1760px}.fleet-table col.col-device-id{width:220px}.fleet-table col.col-sim-id,.fleet-table col.col-imsi{width:190px}.fleet-table col.col-model{width:170px}.fleet-table col.col-fw,.fleet-table col.col-rsrp{width:110px}.fleet-table col.col-group{width:190px}.fleet-table col.col-connected{width:110px}.fleet-table col.col-connection-time,.fleet-table col.col-last-message{width:190px}.fleet-table col.col-telemetry,.fleet-table col.col-meta{width:130px}.fleet-sort-row th{white-space:nowrap;overflow:visible}.sort-btn,.link-sort{height:auto;min-width:0;padding:0;border:none;background:transparent;color:inherit;font:inherit;font-weight:700;text-align:left}.sort-btn:hover,.link-sort:hover{color:var(--primary)}.fleet-col-head{position:relative;display:flex;align-items:center;gap:6px}.fleet-col-filter-btn{width:22px;height:22px;min-width:22px;border-radius:6px;border:1px solid #c7d4e6;background:#eef3fa;color:#334155;font-size:12px;line-height:1;padding:0}.fleet-col-filter-btn:hover{background:#dde7f6}.fleet-col-filter-btn.active{background:#dcfce7;border-color:#86efac;color:#166534}.fleet-col-filter-menu{position:absolute;top:calc(100% + 8px);right:0;width:220px;z-index:40;border:1px solid var(--border);border-radius:10px;background:#fff;box-shadow:0 10px 26px #0f172a24;padding:8px;display:grid;gap:8px}.fleet-col-filter-actions{display:flex;gap:8px}.fleet-col-filter-actions button{flex:1}.fleet-col-filter-menu input,.fleet-col-filter-menu select{width:100%;height:34px}.device-link{border:none;background:transparent;color:var(--primary);padding:0;height:auto;min-width:0;font-weight:700;text-decoration:underline;text-align:left}.device-link:hover{color:var(--primary-2)}.detail-btn,.detail-close{height:30px;min-width:68px;padding:0 10px;border-radius:7px;border:1px solid var(--primary);background:#ecfeff;color:#115e59;font-size:12px;font-weight:700}.detail-panel{margin-top:10px}.detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}pre{margin:0;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:10px;max-height:260px;overflow:auto;white-space:pre-wrap;word-break:break-word}.rsrp-badge{display:inline-flex;align-items:center;margin-left:8px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;border:1px solid transparent}.rsrp-good{background:#dcfce7;border-color:#86efac;color:#166534}.rsrp-fair{background:#fef3c7;border-color:#fcd34d;color:#92400e}.rsrp-weak,.rsrp-poor{background:#fee2e2;border-color:#fca5a5;color:#991b1b}.ota-wrap{background:transparent;box-shadow:none;border:none;padding:0}.ota-wrap>.panel{margin-bottom:10px}.ota-wrap h2,.ota-wrap h3{margin-top:0}.ota-intro{margin:-4px 0 10px;color:var(--muted);font-size:14px}.ota-clean .panel{background:#fff}.ota-step{border:1px solid #ced9ea;border-left:5px solid #0f766e;border-radius:12px;background:linear-gradient(180deg,#fff,#fbfdff)}.ota-step-title{display:flex;align-items:center;gap:10px;margin:0 0 10px;font-size:18px}.ota-step-index{width:28px;height:28px;border-radius:999px;background:#0f766e;color:#fff;display:inline-grid;place-items:center;font-weight:800;font-size:13px}.ota-subtitle{font-size:13px;font-weight:700;color:var(--muted);margin:8px 0}.ota-filter-grid-clean{display:grid;gap:12px;grid-template-columns:1.2fr 1fr 1fr 1fr}.ota-filter-block{border:1px solid var(--border);border-radius:10px;padding:10px;background:#fbfdff}.ota-pair{display:grid;grid-template-columns:110px 1fr;gap:8px}.ota-chip-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;min-height:24px}.ota-chip{border:1px solid #cbd5e1;border-radius:999px;background:#eef2ff;color:#334155;font-size:12px;padding:2px 8px}.ota-actions-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:10px 0;padding-top:4px}.ota-actions-row .inline-actions{flex:1}.ota-actions-row .inline-actions input{min-width:220px}.ota-table-head{display:flex;gap:14px;align-items:center;justify-content:flex-start;margin-bottom:10px;flex-wrap:wrap;background:#f4f8ff;border:1px solid var(--border);border-radius:10px;padding:8px 10px}.ota-table-meta{font-weight:700;color:#334155}.ota-table-left{display:flex;gap:14px;align-items:center;flex-wrap:wrap}.ota-table-controls{margin-left:auto;display:flex;gap:14px;align-items:center;flex-wrap:wrap}.ota-manual-grid{display:grid;gap:10px;grid-template-columns:170px minmax(280px,1fr) minmax(220px,320px);align-items:end}.ota-manual-grid>label{min-width:0}.ota-manual-grid input,.ota-manual-grid select{width:100%}.ota-manual-grid-secondary{grid-template-columns:170px minmax(280px,1fr);margin-top:10px}.ota-check-row{display:flex;gap:16px;align-items:center;flex-wrap:wrap;border:1px solid var(--border);border-radius:9px;background:#f8fbff;padding:8px 10px;min-height:38px}.ota-auto-layout{display:grid;gap:10px;grid-template-columns:minmax(0,1fr) 320px;align-items:start}.ota-auto-table-block{display:grid;gap:8px}.ota-auto-table-wrap{max-height:210px;align-self:start}.ota-inline-hint{margin-top:8px;font-size:12px;color:var(--muted)}.ota-inline-hint.error{color:var(--danger)}.ota-flag{margin-left:10px;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border);background:#f8fafc;color:#334155;font-weight:700}.ota-flag.warning{background:#fff7ed;border-color:#fdba74;color:#9a3412}.ota-flag.error{background:#fef2f2;border-color:#fca5a5;color:#991b1b}.ota-models-box{border:1px solid var(--border);border-radius:8px;padding:10px;background:#f8fbff;display:grid;gap:8px;align-content:start}.ota-models-list{max-height:170px;overflow:auto;border:1px solid var(--border);border-radius:8px;background:#fff;padding:8px;display:grid;gap:6px}@media(max-width:1200px){.filters,.shared-range,.fleet-filters,.fleet-kpis{grid-template-columns:repeat(2,minmax(220px,1fr))}.ota-filter-grid-clean{grid-template-columns:1fr 1fr}.ota-manual-grid,.ota-manual-grid-secondary{grid-template-columns:repeat(2,minmax(220px,1fr))}.ota-auto-layout{grid-template-columns:1fr}}@media(max-width:980px){.filters,.shared-range,.fleet-filters,.fleet-kpis,.grid,.actions{grid-template-columns:1fr}.mongo-summary{grid-template-columns:repeat(2,minmax(120px,1fr))}}@media(max-width:760px){.app{padding:10px}.topbar-main{flex-direction:column;align-items:flex-start;gap:10px}.topbar-brand{width:100%}.topbar h1{font-size:24px}.ota-filter-grid-clean,.ota-manual-grid,.ota-manual-grid-secondary,.ota-pair{grid-template-columns:1fr}.ota-table-controls{margin-left:0;width:100%}.ota-table-left{width:100%}}
