:root{--bg: #fafafa;--surface: #ffffff;--border: #e5e5e5;--text: #171717;--muted: #737373;--accent: #404040;--accent-hover: #262626;--sidebar-width: 200px;--topbar-height: 52px;--success-bg: #f0fdf4;--success-text: #166534;--error-bg: #fef2f2;--error-text: #991b1b;--warning-bg: #fffbeb;--warning-text: #92400e}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;overflow:hidden}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;font-size:14px}.app{display:grid;grid-template-rows:var(--topbar-height) 1fr;height:100vh}.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--border);z-index:10}.brand-logo{height:28px;width:auto}.topbar-right{display:flex;align-items:center;gap:12px}#current-user-info{font-size:13px;color:var(--muted)}.app-body{display:grid;grid-template-columns:var(--sidebar-width) 1fr;min-height:0}.app.no-sidebar .app-body{grid-template-columns:1fr}.sidebar{background:var(--surface);border-right:1px solid var(--border);padding:12px 0;overflow-y:auto}.nav-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 20px;border:none;background:none;text-align:left;font-size:14px;color:var(--muted);cursor:pointer;border-left:2px solid transparent}.nav-item:hover{color:var(--text);background:var(--bg)}.nav-item.active{color:var(--text);font-weight:500;border-left-color:var(--text);background:var(--bg)}.nav-divider{height:1px;margin:8px 16px;background:var(--border)}.nav-admin-only{display:none}body.is-admin .nav-admin-only,.app.is-admin .nav-admin-only{display:block}.main{display:flex;flex-direction:column;min-height:0;overflow:hidden;background:var(--surface)}#flash-messages{flex-shrink:0}.view{display:none;flex-direction:column;flex:1;min-height:0;overflow:hidden}.view.active{display:flex}.metrics-strip{display:flex;gap:0;border-bottom:1px solid var(--border);flex-shrink:0}.metric{flex:1;padding:14px 20px;border-right:1px solid var(--border)}.metric:last-child{border-right:none}.metric-label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:4px}.metric-value{font-size:22px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.main-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}.main-toolbar h2{font-size:16px;font-weight:600}.toolbar-actions{display:flex;gap:8px;align-items:center}.table-wrap{flex:1;overflow:auto;min-height:0}.view-desc{padding:0 20px 12px;color:var(--muted);font-size:13px;flex-shrink:0}.analytics-placeholder{margin:16px 20px 0;padding:24px;border:1px dashed var(--border);color:var(--muted);font-size:13px;text-align:center;flex-shrink:0}#view-company-detail{overflow:hidden}#view-company-detail>.estate-analytics{flex-shrink:1;min-height:0;max-height:min(520px,52vh);overflow-y:auto}#view-company-detail>.table-wrap{flex:1 1 240px;min-height:240px;overflow:auto}#view-company-detail .company-detail-terminals-toolbar{flex-shrink:0}.view.org-detail{overflow:hidden}.view.org-detail>.org-detail-upper{flex:1 1 45%;min-height:0;overflow:auto}.view.org-detail>.org-detail-devices-toolbar{flex-shrink:0;border-top:1px solid var(--border)}.view.org-detail>.table-wrap{flex:1 1 240px;min-height:200px;overflow:auto}.estate-analytics{margin:0 20px 16px;padding-bottom:16px;border-bottom:1px solid var(--border);flex-shrink:0}.estate-analytics-header{margin-bottom:12px}.estate-analytics-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.estate-analytics-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;font-size:13px}.estate-analytics-controls label{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0}.estate-analytics-controls input[type=month]{width:auto;min-width:140px;padding:6px 8px;font-size:13px;text-transform:none;letter-spacing:0;font-weight:400;color:var(--text)}.estate-range-presets{display:flex;gap:6px;flex-wrap:wrap}.estate-range-presets .btn{padding:6px 10px;font-size:12px}.estate-analytics-header h3{font-size:14px;font-weight:600;margin-bottom:0}.estate-charts{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.estate-chart-panel{border:1px solid var(--border);padding:12px;background:var(--bg);min-height:220px}.estate-chart-panel h4{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:8px}.estate-chart-panel canvas{width:100%!important;height:180px!important}.estate-growth-wrap h4{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:8px}.estate-growth-table{width:100%;font-size:12px}.estate-growth-table th,.estate-growth-table td{padding:6px 10px}.estate-analytics-footnote{margin-top:12px;font-size:12px;color:var(--muted)}.estate-analytics-empty{padding:24px;border:1px dashed var(--border);color:var(--muted);font-size:13px;text-align:center}@media (max-width: 900px){.estate-charts{grid-template-columns:1fr}}.company-detail-meta{display:flex;flex-wrap:wrap;gap:20px;padding:12px 20px;border-bottom:1px solid var(--border);font-size:13px;flex-shrink:0}.company-detail-meta dt{color:var(--muted);font-weight:400;display:inline}.company-detail-meta dd{display:inline;margin:0 16px 0 4px;font-weight:500}.view-scroll{flex:1;overflow:auto;min-height:0}.view-body{padding:16px 20px 24px}.view-body>.panel-section+.panel-section{margin-top:28px}.panel-section{margin:0}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.section-head h3{margin:0;font-size:14px;font-weight:600}.tree-node{border:1px solid var(--border);border-radius:6px;padding:12px;margin-bottom:12px;background:var(--surface)}.tree-node:last-child{margin-bottom:0}.tree-node.nested{margin-left:1.25rem;margin-top:10px;background:var(--bg)}.tree-node-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:8px}.inline-form{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.inline-form input,.inline-form select{min-width:12rem}.assign-form{display:grid;gap:12px;max-width:28rem}.effective-preview{margin-top:12px;padding:12px;background:var(--bg);border:1px solid var(--border);border-radius:6px;overflow:auto;font-size:.85rem}#view-terminal-detail{overflow:auto}.effective-settings{padding:16px 20px 28px}.effective-settings h3{margin:20px 0 10px;font-size:14px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.effective-settings h3:first-child{margin-top:0}.effective-field-list{display:grid;grid-template-columns:minmax(140px,220px) 1fr auto;gap:8px 16px;align-items:baseline;font-size:13px}.effective-field-list .field-label{color:var(--muted)}.effective-field-list .field-value{font-weight:500;word-break:break-word}.effective-footnote{margin:16px 20px 24px;font-size:12px;color:var(--muted)}.source-badge{font-size:11px;font-weight:500;padding:2px 7px;border:1px solid var(--border);color:var(--muted);white-space:nowrap}.source-badge.source-license,.source-badge.source-device{color:var(--text);border-color:#a3a3a3}.source-badge.source-company,.source-badge.source-organisation,.source-badge.source-division,.source-badge.source-group{color:var(--text);background:var(--bg)}.source-badge.source-product,.source-badge.source-default{color:var(--muted)}.settings-field-list{display:grid;grid-template-columns:minmax(120px,1.1fr) minmax(140px,1.6fr) auto;gap:10px 14px;align-items:start}.settings-field-list .field-label{font-size:13px;font-weight:500;padding-top:8px}.settings-field-list .field-control{min-width:0}.settings-field-list .field-meta{display:flex;flex-direction:column;align-items:flex-end;gap:6px;padding-top:6px}.settings-field-list .field-value-ro{padding:8px 0;font-size:13px;word-break:break-word}.btn-lock{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;font-size:12px;font-weight:500}.btn-lock:hover{background:var(--bg);color:var(--text)}.btn-lock.is-unlocked{color:var(--text);border-color:#a3a3a3}.btn-link-sm{background:none;border:none;padding:0;color:var(--muted);font-size:11px;cursor:pointer;text-decoration:underline}.btn-link-sm:hover{color:var(--text)}.btn{padding:7px 14px;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;font-size:13px;font-weight:500;white-space:nowrap}.btn:hover{background:var(--bg)}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-success{background:var(--text);color:#fff;border-color:var(--text)}.btn-success:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-danger{background:var(--surface);color:var(--error-text);border-color:#fecaca}.btn-danger:hover{background:var(--error-bg)}.btn-secondary{background:var(--surface);color:var(--text)}.btn-link{border:none;background:none;color:var(--muted);padding:7px 0}.btn-link:hover{color:var(--text);background:none}table{width:100%;border-collapse:collapse}th,td{padding:10px 20px;text-align:left;border-bottom:1px solid var(--border);font-size:13px}th{background:var(--bg);font-weight:500;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;position:sticky;top:0;z-index:1}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;padding-right:28px}th.sortable:hover{color:var(--text)}th.sortable:after{content:" ↕";position:absolute;right:8px;opacity:.4;font-size:11px;text-transform:none;letter-spacing:0}th.sortable.asc:after{content:" ↑";opacity:1}th.sortable.desc:after{content:" ↓";opacity:1}tr.clickable{cursor:pointer}tr.clickable:hover td,tr:hover td{background:var(--bg)}.terminal-primary{font-weight:500}.terminal-primary .sub{color:var(--muted);font-weight:400}.form-group{margin-bottom:16px}label{display:block;margin-bottom:6px;font-weight:500;font-size:13px;color:var(--text)}input,select,textarea{width:100%;padding:8px 10px;border:1px solid var(--border);font-size:13px;background:var(--surface);color:var(--text)}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}.modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:#0006;z-index:1000;overflow-y:auto}.modal.active{display:flex;align-items:flex-start;justify-content:center;padding:40px 20px}.modal-content{background:var(--surface);border:1px solid var(--border);padding:24px;max-width:800px;width:100%;max-height:calc(100vh - 80px);overflow-y:auto}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:12px;border-bottom:1px solid var(--border);gap:12px}.modal-header h2{font-size:16px;font-weight:600}.modal-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.close-btn{background:none;border:none;font-size:22px;cursor:pointer;color:var(--muted);line-height:1}.close-btn:hover{color:var(--text)}.actions{display:flex;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}.badge{display:inline-block;padding:2px 8px;font-size:11px;font-weight:500;border:1px solid var(--border);color:var(--muted)}.badge-success{background:var(--success-bg);color:var(--success-text);border-color:#bbf7d0}.badge-danger{background:var(--error-bg);color:var(--error-text);border-color:#fecaca}.badge-info{background:var(--bg);color:var(--text)}.badge-secondary{background:var(--bg);color:var(--muted)}.search-filter{display:flex;gap:8px;padding:12px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.search-filter input,.search-filter select{flex:1;min-width:0}.error{background:var(--error-bg);color:var(--error-text);padding:10px 20px;font-size:13px;border-bottom:1px solid #fecaca}.success{background:var(--success-bg);color:var(--success-text);padding:10px 20px;font-size:13px;border-bottom:1px solid #bbf7d0}.loading{text-align:center;padding:40px 20px;color:var(--muted)}.empty-state{padding:40px 20px;color:var(--muted);text-align:center}.json-editor-section{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.json-editor-container{display:none;margin-top:12px}.json-editor-container.visible{display:block}.json-editor-textarea{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;min-height:200px;resize:vertical}.json-editor-warning{background:var(--warning-bg);color:var(--warning-text);padding:10px;margin-bottom:10px;font-size:12px;border:1px solid #fde68a}.json-editor-error{background:var(--error-bg);color:var(--error-text);padding:10px;margin-bottom:10px;font-size:12px;display:none;border:1px solid #fecaca}.json-editor-error.visible{display:block}.json-editor-actions{display:flex;gap:8px;margin-bottom:10px}.json-editor-textarea.error{border-color:var(--error-text);background-color:var(--error-bg)}.account-panel{padding:16px 20px;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.account-panel h3{font-size:13px;font-weight:600;margin-bottom:12px}code{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;color:var(--muted)}@media (max-width: 768px){.app-body{grid-template-columns:1fr}.sidebar{display:none}.metrics-strip{flex-wrap:wrap}.metric{min-width:50%}}.view-panel{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.view-panel.scrollable{overflow:auto}a.nav-item{text-decoration:none}.router-link-active.nav-item{color:var(--text);font-weight:500;border-left-color:var(--text);background:var(--bg)}
