:root{--ink: #14213D;--ink-muted: #55607A;--page: #F4F5F7;--surface: #FFFFFF;--border: #DFE3EA;--in-use: #2457D6;--in-use-text: #DCE5FB;--brief-bg: #FFF6E6;--brief-border: #E9A23B;--brief-text: #5C3A00;--offline-bg: #F0F2F5;--offline-border: #8E98AA;--sidebar-active: #24345A;--heat-0: #F1F3F6;--heat-1: #DCE6FB;--heat-2: #A9C0F5;--heat-3: #3F6AD8;--heat-4: #1D3E9E;--amber: #A35F00;--danger: #B42318;--mono: "IBM Plex Mono", ui-monospace, Menlo, monospace}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font:14px/1.45 IBM Plex Sans,system-ui,-apple-system,sans-serif;background:var(--page);color:var(--ink)}button,input,select{font:inherit;color:inherit}a{color:inherit}:focus-visible{outline:2px solid var(--in-use);outline-offset:2px}.mono{font-family:var(--mono)}.muted{color:var(--ink-muted)}.meta{font-size:12px;color:var(--ink-muted)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app{display:flex;min-height:100vh}.sidebar{width:242px;flex:none;background:var(--ink);color:#fff;padding:24px 16px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:12px;padding:0 8px 24px}.brand-name{font-weight:700;font-size:18px;line-height:1.2}.brand-sub{font-size:12px;color:#c4cbda}.nav-link{display:flex;align-items:center;gap:12px;min-height:44px;padding:0 14px;border-radius:8px;color:#e6eaf2;text-decoration:none;font-weight:500}.nav-link:hover{background:#ffffff0f}.nav-link[aria-current=page]{background:var(--sidebar-active);color:#fff;font-weight:600}.sidebar-foot{margin-top:auto;padding:0 8px;font-size:12px;color:#c4cbda;display:flex;flex-direction:column;gap:10px}.sidebar-user{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#fff}.sidebar-user button{background:none;border:1px solid #3A4B72;border-radius:8px;color:#e6eaf2;min-height:36px;padding:0 10px;cursor:pointer;font-size:12px;white-space:nowrap}.main{flex:1;min-width:0;padding:32px}.page-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.page-title{font-size:28px;font-weight:700;line-height:1.2;display:flex;align-items:center;flex-wrap:wrap;gap:10px}.page-sub{font-size:14px;color:var(--ink-muted);margin-top:6px}.with-side{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}.stack{display:flex;flex-direction:column;gap:20px}@media (max-width: 1100px){.with-side{grid-template-columns:minmax(0,1fr)}}@media (max-width: 800px){.app{flex-direction:column}.sidebar{width:auto;height:auto;position:static;padding:12px 16px;flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px}.brand{padding:0 8px 0 0;flex:1 1 100%}.nav-link{padding:0 10px}.nav-link svg{display:none}.sidebar-foot{margin-top:8px;flex:1 1 100%}.sidebar-foot .privacy{display:none}.main{padding:20px 16px}}.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:20px}.card-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}.card-title{font-size:16px;font-weight:700}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:20px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 18px}.kpi-label{font-size:13px;color:var(--ink-muted);font-weight:500}.kpi-value{font-family:var(--mono);font-size:28px;font-weight:600;line-height:1.25;margin:4px 0 2px}.kpi-sub{font-size:12px;color:var(--ink-muted)}.kpi-value.blue{color:var(--in-use)}.kpi-value.amber{color:var(--amber)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 18px;border-radius:8px;border:1px solid var(--border);background:var(--surface);font-weight:600;cursor:pointer;text-decoration:none;white-space:nowrap}.btn:hover{border-color:var(--ink-muted)}.btn.primary{background:var(--in-use);border-color:var(--in-use);color:#fff}.btn.primary:hover{background:#1d49b8}.btn.small{min-height:36px;padding:0 12px;font-size:13px}.btn:disabled{opacity:.5;cursor:default}.btn-row{display:flex;flex-wrap:wrap;gap:8px}.field{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600}.field input,.field select,.input{min-height:44px;border:1px solid var(--border);border-radius:8px;padding:0 12px;background:var(--surface);font-weight:400;font-size:14px}.field select,select.input{padding-right:32px}.field .hint{font-weight:400;color:var(--ink-muted);font-size:12px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.error{color:var(--danger);font-size:13px}.notice{background:var(--brief-bg);border:1px solid var(--brief-border);color:var(--brief-text);border-radius:12px;padding:12px 16px;font-size:13px;margin-bottom:16px}.locbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:16px}.locbar .field select{min-width:200px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{min-height:44px;padding:0 16px;border-radius:999px;border:1px solid var(--border);background:var(--surface);font-size:13px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.chip[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}.chip .count{font-family:var(--mono);font-weight:500;font-size:11px;opacity:.8}.segmented{display:inline-flex;flex-wrap:wrap;background:#e8ebf0;border-radius:10px;padding:4px;gap:2px}.segmented button{min-height:40px;padding:0 14px;border:none;background:none;border-radius:8px;font-size:13px;font-weight:600;color:var(--ink-muted);cursor:pointer}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14213d1f}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 10px;font-size:11px;font-weight:600;white-space:nowrap}.pill.blue{background:#e4ebfc;color:#1d3e9e}.pill.solid{background:var(--in-use);color:#fff}.pill.amber{background:#ffe9c2;color:var(--brief-text)}.pill.grey{background:var(--offline-bg);color:var(--ink-muted);border:1px dashed var(--offline-border)}.pill.dais{background:#ffffff2e;color:#fff}.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.tile{display:flex;flex-direction:column;gap:4px;min-height:120px;padding:12px;border-radius:12px;border:1px solid var(--border);background:var(--surface);text-decoration:none;color:var(--ink)}.tile:hover{box-shadow:0 2px 8px #14213d1f}.tile-no{font-family:var(--mono);font-size:22px;font-weight:600;line-height:1.1}.tile-state{font-size:12px;font-weight:600}.tile-meta{font-size:11px;color:var(--ink-muted)}.tile-bar{height:4px;border-radius:2px;background:#e8ebf0;overflow:hidden;margin:4px 0 2px}.tile-bar span{display:block;height:100%;background:var(--in-use)}.tile.in_use{background:var(--in-use);border-color:var(--in-use);color:#fff}.tile.in_use .tile-meta{color:var(--in-use-text)}.tile.in_use .tile-bar{background:#ffffff40}.tile.in_use .tile-bar span{background:#fff}.tile.brief{background:var(--brief-bg);border-color:var(--brief-border);color:var(--brief-text)}.tile.brief .tile-meta{color:var(--brief-text)}.tile.brief .tile-bar span{background:var(--brief-border)}.tile.camera_issue,.tile.connecting{background:var(--offline-bg);border:1px dashed var(--offline-border);color:var(--ink-muted)}.legend{display:flex;flex-wrap:wrap;gap:16px;font-size:12px;color:var(--ink-muted);align-items:center}.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-2px;margin-right:6px;border:1px solid var(--border)}.rows{display:flex;flex-direction:column;gap:6px}.row-link{display:flex;align-items:center;gap:12px;min-height:44px;padding:8px 12px;border-radius:8px;background:var(--page);text-decoration:none;color:var(--ink);font-size:13px}a.row-link:hover{background:#e8ebf0}.bar{height:8px;border-radius:4px;background:#e8ebf0;overflow:hidden;flex:1;min-width:60px}.bar span{display:block;height:100%;background:var(--in-use);border-radius:4px}.bar.amber span{background:var(--brief-border)}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th{text-align:left;font-size:12px;color:var(--ink-muted);font-weight:600;padding:8px;border-bottom:1px solid var(--border);white-space:nowrap}table.data td{padding:10px 8px;border-bottom:1px solid var(--border)}table.data td.num,table.data th.num{text-align:right}table.data td.num{font-family:var(--mono)}table.data tr.sep td{border-top:2px solid var(--border)}table.heat{border-collapse:separate;border-spacing:3px;font-size:12px}table.heat th{font-weight:600;color:var(--ink-muted);padding:2px 4px;text-align:center;font-family:var(--mono)}table.heat th.rowhead{text-align:left;white-space:nowrap;font-family:var(--mono);color:var(--ink);padding-right:12px}table.heat td{min-width:48px;height:28px;text-align:center;border-radius:4px;font-family:var(--mono);font-size:12px}.h0{background:var(--heat-0);color:var(--ink-muted)}.h1{background:var(--heat-1)}.h2{background:var(--heat-2)}.h3{background:var(--heat-3);color:#fff}.h4{background:var(--heat-4);color:#fff}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px}.login{width:100%;max-width:400px}.phone{max-width:480px;margin:0 auto;min-height:100vh;background:var(--page);display:flex;flex-direction:column}.phone-head{background:var(--ink);color:#fff;padding:20px 16px}.phone-body{padding:16px;display:flex;flex-direction:column;gap:12px;flex:1}.stepper{display:flex;align-items:center;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:10px 14px}.stepper button{width:44px;height:44px;border-radius:10px;border:1px solid var(--border);background:var(--surface);font-size:22px;cursor:pointer}.stepper button.plus{background:var(--in-use);border-color:var(--in-use);color:#fff}.free-item{display:flex;align-items:center;gap:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px 16px;min-height:64px}@media print{.sidebar,.no-print{display:none!important}.main{padding:0}body{background:#fff}.card,.kpi{break-inside:avoid}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion: reduce){*{animation:none!important}}
