:root{color-scheme:light;font-family:"Segoe UI",Arial,sans-serif;--bg:#f2f4f6;--panel:#fff;--line:#cfd6dd;--muted:#66727e;--text:#18222c;--good:#19713a;--warn:#c27500;--bad:#c62020;--info:#376b9c;--active:#c62020;--cleared:#17803d;--stale:#7b858e;--dashboard-dim-opacity:0}
*{box-sizing:border-box}html,body{margin:0;background:var(--bg)!important;color:var(--text)!important;overflow-x:hidden}body{min-height:100vh}.app-shell{position:relative;width:100%;min-width:0;transform-origin:top left}
.top,.sitebar,nav{display:flex;align-items:center;justify-content:space-between}.top{background:#fff;border-bottom:1px solid var(--line);padding:12px 24px;gap:24px}.brand,.platform-line,.site-left,.site-right{display:flex;align-items:center;gap:14px}.brand{min-width:0}.platform{margin-left:auto;text-align:right}.logo{display:none;object-fit:contain}.logo.encos{height:42px;max-width:180px}.logo.se{height:34px;max-width:190px}.product{font-size:20px;font-weight:700}.subtle{font-size:13px;color:var(--muted)}
.header-control-cluster{display:flex;align-items:center;justify-content:flex-end;gap:7px;margin-left:auto}.header-organization-slot{display:flex;align-items:center}.header-organization-switch{position:relative}.header-organization-button{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#176ea5;color:#fff;border-color:#125b89;font-weight:750}.header-organization-button:hover{background:#125b89}.organization-popover{position:absolute;right:0;top:calc(100% + 6px);z-index:1800;min-width:290px;max-width:420px;padding:6px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 9px 24px rgba(0,0,0,.2)}.organization-popover button{display:block;width:100%;margin:2px 0;text-align:left}.organization-popover button.active{background:#dce9f2;font-weight:800}.header-shutdown,.header-admin{flex:0 0 auto;white-space:nowrap;font-weight:700}.header-shutdown[hidden],.header-admin[hidden]{display:none}.header-admin{border-color:#73899b}.compact{padding:7px 10px;margin:0}.header-control-cluster .platform{margin-left:4px}.header-control-cluster .platform-line{gap:6px;font-size:12px;color:var(--muted)}
.sitebar{padding:8px 24px;background:#edf1f4;border-bottom:1px solid var(--line);min-height:58px}.customer{font-size:28px;font-weight:750}.location{font-size:20px;font-weight:650}.clock{font-size:17px;white-space:nowrap}.location-buttons{display:flex;gap:8px;overflow-x:auto;padding:2px;scrollbar-width:thin}.location-summary-card{display:flex;flex:0 0 auto;min-width:220px;max-width:300px;flex-direction:column;align-items:stretch;gap:3px;padding:7px 10px;margin:0;text-align:left}.location-card-head{display:flex;justify-content:space-between;gap:12px}.location-health{font-size:10px;white-space:nowrap}.location-card-environment,.location-card-counts{font-size:10px;color:var(--muted)}.location-health.state-healthy{color:var(--good)}.location-health.state-warning{color:var(--warn)}.location-health.state-critical,.location-health.state-communication-loss{color:var(--bad)}.location-health.state-unknown,.location-health.state-stale-data-quality{color:var(--stale)}
.multi-organization-mode .sitebar .customer{display:none}.multi-organization-mode .sitebar{padding-top:7px;padding-bottom:7px;min-height:46px}
nav{padding:8px 24px;background:#fff;border-bottom:1px solid var(--line)}button{font:inherit;border:1px solid #bec7cf;background:#f4f6f7;color:#1d2731;border-radius:6px;padding:8px 12px;cursor:pointer;margin-right:5px}button:hover{background:#e8edf1}button.active{background:#dbe4eb;font-weight:700}.small{padding:5px 9px;font-size:12px}.tiny{padding:2px 8px;font-size:18px;margin:0}.primary{font-weight:800;background:#dce9f2}.danger{color:#8d1111;border-color:#d9a5a5}.live-age{position:absolute;right:24px;top:122px;z-index:2}
main{padding:16px 24px 50px}.section-head,.alarm-toolbar{display:flex;align-items:center;justify-content:space-between}.section-title{font-weight:700;font-size:17px;margin:7px 0 10px}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:13px 16px;box-shadow:0 1px 3px rgba(0,0,0,.07);min-width:0}.card h3{font-size:16px;margin:0 0 9px}.row{display:flex;justify-content:space-between;gap:12px;padding:4px 0;border-bottom:1px solid #edf0f2}.row:last-child{border-bottom:0}.label{font-size:13px;color:#4d5a65}.value{font-weight:600;white-space:nowrap}.good{color:var(--good);font-weight:750}.warn{color:var(--warn);font-weight:800}.bad{color:var(--bad);font-weight:850}.info{color:var(--info);font-weight:750}.stale{color:var(--stale)!important}.value.attention{color:var(--warn);font-weight:850}.value.critical{color:var(--bad);font-weight:900}.alarm-strip{background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px 16px;font-weight:650}.sensor-strip{display:flex;flex-wrap:wrap;gap:6px;margin:-7px 0 18px}.sensor-chip{font-size:11px;color:#5f6b76;background:#e9eef2;border:1px solid #d1d8df;border-radius:12px;padding:4px 8px}.hidden{display:none!important}
footer{position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);padding:8px 24px;text-align:center;font-size:12px;color:#6c7680;z-index:20}.profile-status{font-size:12px;min-width:170px}.profile-status.unsaved{background:#fff0c9;border-color:#d69a00;color:#7d4b00;font-weight:900;box-shadow:0 0 0 2px rgba(214,154,0,.15)}
.express-target.quick-on{outline:1px dashed #9aa9b5;outline-offset:3px;cursor:pointer}.express-target.quick-on:hover{outline:2px solid #5b7f9d}.row.quick-on,.card h3.quick-on{cursor:pointer}.row.quick-on:hover,.card h3.quick-on:hover{background:rgba(90,110,125,.06)}
.float-panel{position:fixed;z-index:1600;width:360px;max-height:75vh;overflow:auto;background:#fff;border:1px solid #aebbc5;border-radius:9px;box-shadow:0 12px 30px rgba(0,0,0,.22)}.float-head{display:flex;justify-content:space-between;align-items:center;padding:9px 11px;background:#edf2f5;border-bottom:1px solid var(--line);cursor:move;user-select:none}.float-panel>div:last-child{padding:12px}.alarm-details{width:520px}.form-row{margin:9px 0}.form-row label{display:block;font-size:12px;color:#53616c;margin-bottom:4px}.form-row input[type=text],.form-row input[type=number],.form-row select,.wide-input{width:100%;padding:6px;border:1px solid #bcc6ce;border-radius:5px}.format-grid{display:grid;grid-template-columns:1.4fr .8fr .8fr;gap:8px;align-items:end}.color-picker{width:46px;height:32px;padding:1px;border:1px solid #bcc6ce;border-radius:5px;background:#fff}.thresholds{display:grid;grid-template-columns:1fr 1fr;gap:7px}.checkline{display:flex;align-items:center;gap:7px}.popover{position:fixed;right:28px;top:104px;z-index:1700;background:#fff;border:1px solid var(--line);border-radius:7px;box-shadow:0 8px 22px rgba(0,0,0,.18);padding:7px}.popover button{display:block;width:100%;text-align:left;margin:2px 0}
.modal{position:fixed;inset:0;z-index:2000;background:rgba(26,34,41,.42);display:flex;align-items:center;justify-content:center;padding:20px}.modal-card{width:min(500px,94vw);background:#fff;border:1px solid var(--line);border-radius:9px;box-shadow:0 12px 34px rgba(0,0,0,.22);padding:20px}.modal-card.wide{width:min(760px,94vw)}.modal-title{font-size:18px;font-weight:800;margin-bottom:8px}.modal-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:18px}.profile-entry{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:8px;border-bottom:1px solid #edf0f2}
.alarm-table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden}.alarm-table th{background:#edf1f4;text-align:left;padding:8px;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer}.alarm-table td{padding:8px;border-bottom:1px solid #edf0f2;vertical-align:top}.alarm-table tbody tr{cursor:pointer}.alarm-table tbody tr:hover{background:rgba(90,110,125,.07)}.filter-row th{padding:5px}.filter-row input{width:100%;min-width:70px;padding:5px;border:1px solid #bec8d0;border-radius:4px}.sortmark{font-size:10px;color:#697682;margin-left:5px}.severity{font-weight:800}.state{font-weight:800}.state.active-state{color:var(--active)}.state.cleared-state{color:var(--cleared)}
.alarm-history-controls{display:grid;grid-template-columns:150px 160px minmax(190px,1fr) 210px 210px auto;gap:9px;align-items:end;margin:8px 0 12px;padding:10px;background:#fff;border:1px solid var(--line);border-radius:8px}.alarm-history-controls label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted)}.alarm-history-controls input,.alarm-history-controls select{height:32px;padding:5px 7px;border:1px solid #bec8d0;border-radius:5px;background:#fff;color:var(--text)}.alarm-export-actions{display:flex;gap:6px;align-items:center;white-space:nowrap}.alarm-history-error{color:var(--bad)!important;font-weight:700}@media(max-width:1250px){.alarm-history-controls{grid-template-columns:repeat(3,minmax(180px,1fr))}}
.edit-layout{display:grid;grid-template-columns:520px 1fr;gap:14px;min-height:650px}.tree-panel,.property-panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px;overflow:auto}.editor-title{font-size:18px;font-weight:800;margin-bottom:10px}.tree-search{width:100%;padding:8px;border:1px solid #bec8d0;border-radius:5px;margin-bottom:10px}.tree-node{padding:5px 7px;border-radius:4px;cursor:pointer}.tree-node:hover,.tree-node.selected{background:#e8eff4}.tree-device{margin-left:18px}.tree-param{margin-left:36px;font-size:13px}.tree-meta{font-size:11px;color:var(--muted)}.property-group{border:1px solid var(--line);border-radius:7px;padding:12px;margin:10px 0}.property-group h3{margin:0 0 8px;font-size:15px}.action-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.about-card{max-width:900px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:20px 22px}.about-card hr{border:0;border-top:1px solid var(--line);margin:18px 0}
.details-grid{display:grid;grid-template-columns:150px 1fr;gap:7px 12px}.details-key{font-size:12px;color:var(--muted)}.details-value{word-break:break-word}

/* v1.01 visual editor */
.customer-logo{display:none;object-fit:contain;flex:0 0 auto;max-height:46px;max-width:180px}.dashboard-switch{display:inline-flex;align-items:center;gap:4px;margin-left:8px}.dashboard-switch select{min-width:170px;padding:7px 30px 7px 9px;border:1px solid #bec7cf;border-radius:6px;background:#fff;color:var(--text);font:inherit}.utility-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px;margin-bottom:18px}.utility-grid>.layout-panel{grid-column:span 12}.grid{grid-template-columns:repeat(12,minmax(0,1fr))}.grid>.card{grid-column:span 4}.layout-card,.layout-panel{position:relative}.layout-card.edit-layout-on,.layout-panel.edit-layout-on{outline:2px dashed #6f8aa0;outline-offset:2px;cursor:move}.layout-card.edit-layout-on:hover,.layout-panel.edit-layout-on:hover{outline-color:#355f80}.resize-handle{display:none;position:absolute;right:-4px;bottom:-4px;width:14px;height:14px;background:#fff;border:2px solid #4e718c;border-radius:3px;cursor:nwse-resize;z-index:8}.edit-layout-on>.resize-handle{display:block}.layout-selected{box-shadow:0 0 0 3px rgba(53,95,128,.18)!important}.layout-hint{font-size:11px;color:#526776;margin-left:8px}.workspace-editing{user-select:none}.workspace-editing .layout-card h3{cursor:move}.sensor-strip{min-height:32px}.sensor-chip{display:inline-flex;align-items:center;gap:4px}.sensor-chip .chip-remove{display:none;border:0;background:transparent;padding:0 1px;margin:0;font-size:13px;line-height:1;color:#7c2d2d}.workspace-editing .sensor-chip .chip-remove{display:inline}.alarm-strip{min-height:42px}.alarm-strip .alarm-summary-item{display:inline-block;margin-right:18px}.alarm-strip .alarm-summary-title{margin-right:20px}.state-style-grid{display:grid;grid-template-columns:1fr 70px 70px;gap:7px;align-items:end}.state-preview{border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin-top:8px}.header-edit-outline{outline:2px dashed #6f8aa0;outline-offset:3px}.workspace-bg-control{display:flex;align-items:center;gap:10px}.background-brightness-control{display:flex;align-items:center;gap:9px}.background-brightness-control input{width:180px}.background-brightness-control output{min-width:42px;font-weight:700}.close-app-row{margin-top:18px;padding-top:12px;border-top:1px solid var(--line)}
:root{--workspace-bg:#f2f4f6;--surface-bg:var(--workspace-bg)}
body,.top,.sitebar,nav,main,
.card,.alarm-strip,.alarm-table,.alarm-table th,.alarm-table td,
.filter-row th,.filter-row input,
.tree-panel,.property-panel,.property-group,.about-card,
.float-panel,.modal-card,.popover,
.form-row input[type=text],.form-row input[type=number],.form-row select,.wide-input,
.tree-search,.dashboard-switch select,.color-picker,
.state-preview,footer{
  background:var(--surface-bg)!important;
}

html,body{width:100%;max-width:100%;overflow-x:hidden}


/* Initial session loading indicator.
   It appears only during first data acquisition/render and is then removed. */
.dashboard-loading{
  position:fixed;
  left:50%;
  bottom:18px;
  transform:translateX(-50%);
  width:min(560px,calc(100vw - 32px));
  box-sizing:border-box;
  z-index:10000;
  padding:10px 14px 12px;
  border:1px solid var(--surface-border,#cfd6dd);
  border-radius:9px;
  background:var(--surface-bg,var(--workspace-bg,#fff));
  box-shadow:0 6px 20px rgba(20,35,50,.16);
  opacity:1;
  transition:opacity .22s ease,transform .22s ease;
}
.dashboard-loading-done{
  opacity:0;
  transform:translateX(-50%) translateY(8px);
  pointer-events:none;
}
.dashboard-loading-text{
  margin:0 0 7px;
  text-align:center;
  font:600 13px/1.2 "Segoe UI",Arial,sans-serif;
  color:#263746;
  letter-spacing:.01em;
}
.dashboard-loading-track{
  position:relative;
  height:5px;
  overflow:hidden;
  border-radius:999px;
  background:rgba(80,105,125,.16);
}
.dashboard-loading-bar{
  position:absolute;
  top:0;
  bottom:0;
  width:34%;
  border-radius:999px;
  background:currentColor;
  color:#507793;
  animation:encos-loading-run 1.05s ease-in-out infinite;
}
@keyframes encos-loading-run{
  0%{left:-36%}
  55%{left:52%}
  100%{left:104%}
}

/* Dedicated Settings -> Application node */
.tree-node[data-tree="application"] .tree-meta{
  opacity:.72;
}
.close-app-row{
  margin-top:10px;
}


/* Top-right status: deliberately minimal for wall-mounted displays. */
.health .loading-state{color:#657684;font-weight:700}

/* Detailed operational health is kept at the physical bottom of the screen.
   It is outside the scaled logical canvas, so small text remains readable. */
.system-status-bar{
  position:fixed;
  left:0;
  right:0;
  bottom:0;
  z-index:12000;
  box-sizing:border-box;
  min-height:24px;
  padding:5px 12px 6px;
  border-top:1px solid var(--surface-border,#cfd6dd);
  background:var(--surface-bg,var(--workspace-bg,#fff));
  box-shadow:0 -2px 8px rgba(20,35,50,.06);
  font:11px/1.2 "Segoe UI",Arial,sans-serif;
  color:#51616d;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.system-status-bar .status-sep{padding:0 6px;color:#96a1aa}
.status-good{color:#14783d;font-weight:700}
.status-warn{color:#a46500;font-weight:700}
.status-bad{color:#b42318;font-weight:700}

/* Keep normal content clear of the fixed bottom status bar. */
body{padding-bottom:25px!important}

.network-rule-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:14px;
  align-items:center;
  padding:10px 0;
  border-bottom:1px solid rgba(100,120,135,.16);
}
.network-rule-row:last-child{border-bottom:0}
.network-rule-label{font-weight:600}
.network-rule-state{
  min-width:70px;
  text-align:center;
  padding:5px 9px;
  border-radius:6px;
  font-weight:800;
  border:1px solid currentColor;
}
.network-rule-state.open{color:#14783d;background:rgba(20,120,61,.06)}
.network-rule-state.closed{color:#b42318;background:rgba(180,35,24,.06)}


/* v1.01 viewport-fit model
   ------------------------------------------------------------
   The outer application canvas never scrolls.
   It is scaled to fit the physical Edge window exactly.
   Scrolling belongs only to the active content pane or its editors.
*/
html,body{
  width:100%!important;
  height:100%!important;
  min-height:0!important;
  max-width:none!important;
  margin:0!important;
  padding:0!important;
  overflow:hidden!important;
}

.app-shell{
  position:relative!important;
  display:flex!important;
  flex-direction:column!important;
  min-width:0!important;
  min-height:0!important;
  overflow:hidden!important;
  transform-origin:0 0!important;
}

/* Header / site / navigation / footer are structural rows.
   They do not create their own page scrollbars. */
.top,.sitebar,nav,footer{
  flex:0 0 auto!important;
}

footer{
  position:static!important;
  left:auto!important;
  right:auto!important;
  bottom:auto!important;
}

/* Main occupies exactly the remaining shell height. */
main{
  flex:1 1 auto!important;
  min-height:0!important;
  height:auto!important;
  overflow:hidden!important;
  padding:16px 24px!important;
}

/* Every top-level view fills the same main viewport.
   Content scrolls INSIDE the view, never on BODY/appShell. */
main>section:not(.hidden){
  display:block;
  width:100%;
  height:100%;
  min-height:0;
  overflow:auto;
  overscroll-behavior:contain;
}

/* Dashboard, Alarms and About use one internal vertical scrollbar only. */
#overview,#alarms,#about{
  overflow-x:hidden;
  overflow-y:auto;
}

/* Settings itself does not scroll as a page.
   The left tree and right properties are the two intended scrolling panes. */
#editPage{
  overflow:hidden!important;
}
#editPage .edit-layout{
  height:100%!important;
  min-height:0!important;
  grid-template-rows:minmax(0,1fr)!important;
}
#editPage .tree-panel,
#editPage .property-panel{
  height:100%!important;
  min-height:0!important;
  overflow:auto!important;
  overscroll-behavior:contain;
}

/* The bottom operational line is physical-screen UI and remains outside
   the scaled shell. It must never participate in document layout. */
.system-status-bar{
  position:fixed!important;
  left:0!important;
  right:0!important;
  bottom:0!important;
}


/* v1.01 loading lifecycle repair
   Visible from the first HTML paint and removed only after the first
   successful data acquisition + Dashboard render. */
.dashboard-loading{
  bottom:42px!important;
  z-index:20000!important;
  pointer-events:none;
}


/* Monitoring Inventory */
#inventoryPage{
  overflow:hidden!important;
  display:flex!important;
  flex-direction:column;
  min-height:0;
}
#inventoryPage.hidden{display:none!important}
.inventory-head{
  flex:0 0 auto;
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:16px;
  padding-bottom:10px;
}
.inventory-actions{
  display:flex;
  align-items:center;
  gap:7px;
  flex-wrap:wrap;
  justify-content:flex-end;
}
.inventory-search{min-width:230px}
.inventory-table-wrap{
  flex:1 1 auto;
  min-height:0;
  overflow:auto;
  border:1px solid var(--surface-border,#cfd6dd);
  border-radius:7px;
  background:var(--surface-bg,#fff);
}
.inventory-table{
  width:100%;
  border-collapse:separate;
  border-spacing:0;
  font-size:12px;
}
.inventory-table th,
.inventory-table td{
  padding:6px 7px;
  border-right:1px solid #dfe5ea;
  border-bottom:1px solid #e5e9ed;
  text-align:left;
  vertical-align:middle;
  white-space:nowrap;
}
.inventory-table th{
  position:sticky;
  top:0;
  z-index:2;
  background:#f2f5f7;
  cursor:pointer;
  font-weight:700;
}
.inventory-table th:last-child,
.inventory-table td:last-child{border-right:0}
.inventory-table tbody tr:hover{background:#f7f9fb}
.inventory-table .inv-excluded{opacity:.56;background:#f3f3f3}
.inv-status{font-weight:700;font-size:11px}
.inv-actions{display:flex;gap:4px;align-items:center}
.inv-actions .tiny.active{font-weight:800;box-shadow:inset 0 0 0 1px currentColor}
.inv-hierarchy{max-width:390px;overflow:hidden;text-overflow:ellipsis}
.inventory-wait{padding:24px}
.inventory-organization,.inventory-location,.inventory-equipment-group,.inventory-device{border-bottom:1px solid var(--line)}.inventory-organization>summary,.inventory-location>summary,.inventory-equipment-group>summary,.inventory-device>summary{display:flex;align-items:center;gap:12px;cursor:pointer;list-style:none}.inventory-organization>summary{padding:12px 10px;background:#cedbe5;font-size:15px}.inventory-location>summary{position:sticky;top:0;z-index:5;padding:11px 13px;background:#dfe7ed}.inventory-equipment-group>summary{padding:9px 28px;background:#e6edf2;font-weight:750}.inventory-device>summary{position:sticky;top:43px;z-index:4;padding:8px 42px;background:#edf2f5}.inventory-organization>summary span,.inventory-location>summary span,.inventory-equipment-group>summary span,.inventory-device>summary span{font-size:11px;color:var(--muted)}.inventory-location>summary button:first-of-type,.inventory-device>summary button:first-of-type{margin-left:auto}.inventory-device-table{overflow:auto}.inventory-empty{padding:24px}.inventory-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px}.inventory-actions select{max-width:170px}.inventory-table td small{display:block;color:var(--muted);white-space:normal}.inventory-policy-badges{display:flex;gap:4px;flex-wrap:wrap}.inventory-policy-badges span{padding:2px 5px;border-radius:9px;background:#e8edf1;font-size:10px}.inventory-policy-badges span.on{background:#d9ebdf;color:#155d30;font-weight:700}.inventory-stable-id{font-family:Consolas,monospace;font-size:10px;color:var(--muted)}
.device-detail-card{max-height:90vh;overflow:auto}.device-detail-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px;margin-bottom:12px}.device-detail-search{margin-bottom:10px}.device-detail-sensor{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:7px 0;border-bottom:1px solid var(--line)}.device-detail-sensor span:first-child{display:flex;flex-direction:column}.device-detail-sensor small{color:var(--muted)}
.system-panel{padding:0!important}.system-panel>summary{display:flex;justify-content:space-between;gap:16px;padding:12px 14px;cursor:pointer;border-bottom:1px solid var(--line);font-size:16px}.system-device-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:12px}.system-device-card{display:flex;flex-direction:column;align-items:stretch;gap:7px;min-height:148px;margin:0;padding:12px;text-align:left;background-color:var(--surface-bg,#fff);white-space:normal;overflow:hidden}.system-device-title{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;font-size:15px;font-weight:700;line-height:1.25;overflow-wrap:anywhere}.system-device-title b{flex:0 0 auto;font-size:11px}.system-device-model{min-height:28px;font-size:12px;line-height:1.2;color:var(--muted);overflow-wrap:anywhere}.system-device-metric{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:10px;font-size:12px}.system-device-metric span{white-space:normal;line-height:1.2;overflow-wrap:anywhere}.system-device-metric strong{font-size:15px;text-align:right}.system-device-metric.stale strong{color:var(--muted)}.system-device-card.device-state-critical{border-color:var(--bad)}.system-device-card.device-state-warning{border-color:var(--warn)}.system-device-card.device-state-unavailable{border-color:#89939c}

.autoconfig-modal{max-height:92vh;overflow:auto}.autoconfig-selection{display:grid;grid-template-columns:minmax(220px,1fr) minmax(260px,1fr) auto;gap:12px;align-items:end;margin:16px 0}.autoconfig-selection label{display:grid;gap:5px}.autoconfig-selection select{width:100%}.autoconfig-preview{border:1px solid #aeb8c0;border-radius:8px;background:#fff;padding:14px}.autoconfig-preview-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:10px}.autoconfig-preview-head div{display:grid;gap:4px}.autoconfig-preview-head small{color:var(--muted);overflow-wrap:anywhere}.autoconfig-stats{display:grid;grid-template-columns:repeat(6,minmax(100px,1fr));gap:8px;margin:12px 0}.autoconfig-stats div{display:grid;gap:3px;padding:8px;border:1px solid var(--line);border-radius:6px;background:#f7f9fa}.autoconfig-stats strong{font-size:20px}.autoconfig-stats span{font-size:11px;color:var(--muted)}.autoconfig-preview-columns{display:grid;grid-template-columns:minmax(0,3fr) minmax(240px,2fr);gap:12px}.autoconfig-preview-columns>section{min-height:180px;max-height:48vh;overflow:auto;border:1px solid var(--line);border-radius:6px;padding:10px}.autoconfig-preview-columns h3{margin:0 0 8px}.autoconfig-preview details{border-bottom:1px solid var(--line);padding:5px 0}.autoconfig-preview summary{display:flex;justify-content:space-between;gap:12px}.autoconfig-preview-device{display:flex;justify-content:space-between;gap:12px;padding:6px 8px 6px 20px}.autoconfig-preview-device span:first-child{display:grid;gap:2px;min-width:0}.autoconfig-preview-device small{color:var(--muted);overflow-wrap:anywhere}.autoconfig-diagnostic{padding:6px 0;border-bottom:1px solid #edf0f2;overflow-wrap:anywhere}
@media(max-width:1100px){.autoconfig-selection{grid-template-columns:1fr}.autoconfig-stats{grid-template-columns:repeat(3,1fr)}.autoconfig-preview-columns{grid-template-columns:1fr}.system-device-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.derived-list{display:grid;gap:7px}.derived-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px;border:1px solid var(--line);border-radius:6px}.derived-row small{display:block;color:var(--muted)}.help-card{max-height:90vh;overflow:auto}.help-tabs{display:flex;gap:6px;margin-bottom:12px}.help-content h3{margin:15px 0 5px}.help-content p,.help-content li{line-height:1.45}.quality-current{color:var(--good)}.quality-stale,.quality-no-data{color:var(--stale)}.quality-error{color:var(--bad)}
.derived-source-picker{max-height:280px;overflow:auto;margin:10px 0;padding:9px;border:1px solid var(--line);border-radius:6px}.derived-source-picker .checkline{display:block;margin:5px 0}.derived-source-picker small{display:block;margin-left:24px;color:var(--muted);font-family:Consolas,monospace}.alarm-notification-toast{position:fixed;right:18px;bottom:48px;z-index:4000;width:min(420px,calc(100vw - 36px));display:grid;gap:4px;padding:12px;text-align:left;background:#fff;border:2px solid var(--warn);border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.25)}.alarm-notification-toast.bad{border-color:var(--bad)}.alarm-notification-toast.info{border-color:var(--info)}.alarm-notification-toast span{font-weight:400}

/* Initial loader must be unmistakably visible while catalog acquisition runs. */
.dashboard-loading{
  min-width:420px;
}
.dashboard-loading-track{height:7px!important}
.dashboard-loading-bar{animation-duration:.9s!important}


/* v1.01 startup loading overlay
   A true physical-viewport overlay, independent of Dashboard/AppShell scaling. */
#dashboardLoading.dashboard-loading{
  position:fixed!important;
  inset:0!important;
  width:100vw!important;
  height:100vh!important;
  min-width:0!important;
  max-width:none!important;
  margin:0!important;
  padding:0!important;
  z-index:2147483647!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  gap:12px!important;
  background:rgba(245,248,250,.97)!important;
  pointer-events:all!important;
  user-select:none!important;
  transform:none!important;
  opacity:1!important;
  visibility:visible!important;
  overflow:hidden!important;
}
#dashboardLoading.dashboard-loading .dashboard-loading-text{
  position:static!important;
  width:auto!important;
  max-width:80vw!important;
  font-weight:700!important;
  font-size:16px!important;
  text-align:center!important;
}
#dashboardLoading.dashboard-loading .dashboard-loading-track{
  position:relative!important;
  width:min(520px,72vw)!important;
  height:8px!important;
  overflow:hidden!important;
  border-radius:999px!important;
  background:#d9e0e6!important;
}
#dashboardLoading.dashboard-loading .dashboard-loading-bar{
  position:absolute!important;
  top:0!important;
  bottom:0!important;
  width:32%!important;
  border-radius:999px!important;
  animation:encos-loading-runner .9s ease-in-out infinite!important;
}
@keyframes encos-loading-runner{
  0%{left:-35%}
  50%{left:52%}
  100%{left:105%}
}
#dashboardLoading.dashboard-loading.dashboard-loading-done{
  opacity:0!important;
  transition:opacity .22s ease!important;
}
body:has(#dashboardLoading.dashboard-loading:not(.dashboard-loading-done)) #appShell{
  pointer-events:none!important;
}


/* The startup overlay represents COMPLETE application readiness, not merely
   HTML/JavaScript load. It stays above the finished Dashboard until final paint. */
#dashboardLoading.dashboard-loading{
  cursor:wait!important;
}


/* ============================================================
   ENCOS Dashboard v2.0 — independent free-form widget canvas
   ============================================================ */
#overview{overflow:hidden!important;padding:0!important;position:relative!important}
.dashboard-viewport{position:relative;width:100%;height:100%;overflow:hidden;background:transparent;isolation:isolate;}
.dashboard-background-layer{position:absolute;inset:0;z-index:0;pointer-events:none;background:var(--dashboard-background-color,var(--workspace-bg,#f2f4f6));}
.dashboard-background-layer,.dashboard-canvas .card,.dashboard-canvas .alarm-strip,.dashboard-canvas .layout-panel,.dashboard-canvas .chart-widget,.dashboard-canvas .system-device-card{background-image:linear-gradient(rgba(0,0,0,var(--dashboard-dim-opacity)),rgba(0,0,0,var(--dashboard-dim-opacity)))!important;background-blend-mode:multiply;transition:background-color .08s linear,background-image .08s linear}
.dashboard-canvas{position:absolute;z-index:1;transform-origin:0 0;overflow:visible;background:transparent;}
.canvas-layer{position:static!important;display:contents!important}
#upsGrid,#envGrid,#utilityGrid,#chartLayer{margin:0!important;padding:0!important;gap:0!important;grid-template-columns:none!important}
.layout-card,.layout-panel,.chart-widget{position:absolute!important;margin:0!important;overflow:auto;max-width:none!important;}
.layout-card{display:block!important}
.workspace-editing .layout-card,.workspace-editing .layout-panel,.workspace-editing .chart-widget{overflow:hidden;cursor:move;touch-action:none;}
.edit-layout-on{outline:2px dashed #6f8aa0!important;outline-offset:2px;}
.layout-selected{outline:3px solid #355f80!important;outline-offset:2px;box-shadow:none!important}
.resize-handle{display:none!important}
.resize-handle-v2{position:absolute;width:10px;height:10px;background:#fff;border:2px solid #355f80;z-index:10000;box-sizing:border-box}
.rh-nw{left:-5px;top:-5px;cursor:nwse-resize}.rh-ne{right:-5px;top:-5px;cursor:nesw-resize}.rh-sw{left:-5px;bottom:-5px;cursor:nesw-resize}.rh-se{right:-5px;bottom:-5px;cursor:nwse-resize}
.rh-n{left:50%;top:-5px;transform:translateX(-50%);cursor:ns-resize}.rh-s{left:50%;bottom:-5px;transform:translateX(-50%);cursor:ns-resize}.rh-w{left:-5px;top:50%;transform:translateY(-50%);cursor:ew-resize}.rh-e{right:-5px;top:50%;transform:translateY(-50%);cursor:ew-resize}
.layout-toolbar{position:fixed;right:14px;bottom:36px;z-index:16000;display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface-bg)!important;box-shadow:0 4px 16px rgba(20,35,50,.14);font-size:12px}
.layout-toolbar.hidden{display:none!important}.layout-toolbar label{display:flex;align-items:center;gap:4px}.layout-toolbar input[type=number]{width:55px}
.chart-widget{padding:10px 12px!important}.chart-head{display:flex;align-items:center;gap:10px;height:26px}.chart-head strong{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chart-body{height:calc(100% - 30px);min-height:70px}.chart-body svg{width:100%;height:100%;display:block}.chart-axis{stroke:#9aa7b1;stroke-width:1}.chart-line{fill:none;stroke:#355f80;stroke-width:2;vector-effect:non-scaling-stroke}.chart-area{fill:rgba(53,95,128,.12);stroke:none}.chart-label{font:12px Segoe UI,Arial;fill:#51616d}.chart-empty{height:100%;display:flex;align-items:center;justify-content:center;color:#6a7781;text-align:center;padding:15px}.chart-remove{flex:0 0 auto}.gauge-v2{height:100%;display:flex;flex-direction:column;justify-content:center;gap:12px}.gauge-value{text-align:center;font-size:28px;font-weight:700}.gauge-track{height:18px;border:1px solid #9aa7b1;border-radius:999px;overflow:hidden}.gauge-track>div{height:100%;background:#355f80}.gauge-range{display:flex;justify-content:space-between;color:#6a7781}.minmax-v2{height:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;align-items:center;text-align:center}.minmax-v2 div{display:flex;flex-direction:column;gap:8px}.minmax-v2 span{color:#6a7781}.minmax-v2 strong{font-size:24px}.minmax-v2 small{grid-column:1/-1;color:#6a7781}
/* Equipment Inventory is a normal first-class view; no overlay can steal its click after startup. */
#inventoryPage{position:relative!important;z-index:1;pointer-events:auto!important}
#inventoryBtn{pointer-events:auto!important}


/* v2.0 startup diagnostics */
.startup-diagnostics{
  width:min(980px,82vw);
  margin-top:16px;
  border:1px solid #cbd4dc;
  border-radius:8px;
  background:rgba(255,255,255,.78);
  padding:10px 12px;
  font-size:12px;
  line-height:1.35;
  color:#263746;
  box-sizing:border-box;
}
.startup-diagnostics-head{
  display:flex;
  justify-content:space-between;
  gap:16px;
  padding-bottom:7px;
  margin-bottom:6px;
  border-bottom:1px solid #dbe2e8;
  font-weight:700;
}
#startupStage{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
#startupElapsed{
  flex:0 0 auto;
  font-variant-numeric:tabular-nums;
}
.startup-log-view{
  height:126px;
  overflow:auto;
  font-family:Consolas,"Courier New",monospace;
  background:rgba(244,247,249,.9);
  border-radius:5px;
  padding:6px 8px;
  box-sizing:border-box;
}
.startup-log-line{
  display:flex;
  gap:8px;
  min-height:17px;
  white-space:nowrap;
}
.startup-log-line span:first-child{
  flex:0 0 56px;
  color:#667785;
}
.startup-log-line b{
  font-weight:700;
}
.startup-log-line.warn{color:#8a5a00}
.startup-log-line.error{color:#a32626}
.startup-log-path{
  margin-top:6px;
  color:#61717e;
  text-align:right;
  font-family:Consolas,"Courier New",monospace;
}


/* v2.0 Equipment Inventory: responsive and user-resizable columns */
.inventory-table-wrap{
  width:100%;
  max-width:100%;
  overflow:auto;
  box-sizing:border-box;
}

.inventory-table{
  width:100%;
  table-layout:fixed;
  border-collapse:collapse;
}

.inventory-table th,
.inventory-table td{
  white-space:normal !important;
  overflow-wrap:anywhere;
  word-break:normal;
  vertical-align:middle !important;
  height:auto !important;
  line-height:1.28;
  box-sizing:border-box;
}

.inventory-table th{
  position:relative;
  user-select:none;
}

.inventory-table th:nth-child(1), .inventory-table td:nth-child(1){width:var(--inv-status,88px)}
.inventory-table th:nth-child(2), .inventory-table td:nth-child(2){width:var(--inv-location,72px)}
.inventory-table th:nth-child(3), .inventory-table td:nth-child(3){width:var(--inv-hierarchy,260px)}
.inventory-table th:nth-child(4), .inventory-table td:nth-child(4){width:var(--inv-type,120px)}
.inventory-table th:nth-child(5), .inventory-table td:nth-child(5){width:var(--inv-manufacturer,140px)}
.inventory-table th:nth-child(6), .inventory-table td:nth-child(6){width:var(--inv-model,150px)}
.inventory-table th:nth-child(7), .inventory-table td:nth-child(7){width:var(--inv-ip,210px)}
.inventory-table th:nth-child(8), .inventory-table td:nth-child(8){width:var(--inv-parameter,370px)}
.inventory-table th:nth-child(9), .inventory-table td:nth-child(9){width:var(--inv-unit,95px)}
.inventory-table th:nth-child(10), .inventory-table td:nth-child(10){width:var(--inv-action,250px)}

.inv-col-resizer{
  position:absolute;
  top:0;
  right:-4px;
  width:8px;
  height:100%;
  cursor:col-resize;
  z-index:5;
}

.inv-col-resizer:hover::after{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:3px;
  width:2px;
  background:currentColor;
  opacity:.35;
}

.inventory-table tbody tr{
  height:auto !important;
}

.inventory-table td{
  padding-top:7px;
  padding-bottom:7px;
}

.inventory-table .inv-actions{
  white-space:normal !important;
}

.inventory-table .inv-actions button{
  margin:2px 2px 2px 0;
}

.inventory-actions{
  flex-wrap:wrap;
}

/* Quick Edit remains responsible for appearance (fonts/colors).
   Inventory column geometry is controlled by Fit Width / Reset Columns
   and direct header-edge dragging. */


/* Equipment Inventory — readability defaults */
.inventory-table{
  font-size:13px;
}

.inventory-table thead th{
  font-size:13px;
  font-weight:600;
  border-bottom:1px solid rgba(70,85,100,.24);
}

.inventory-table tbody tr{
  border-bottom:1px solid rgba(70,85,100,.14);
}

.inventory-table tbody tr:nth-child(even){
  background-color:rgba(70,85,100,.025);
}

.inventory-table tbody tr:hover{
  background-color:rgba(70,105,135,.055);
}

.inventory-table th,
.inventory-table td{
  vertical-align:middle !important;
}

/* Quick Edit universal appearance controls */
.quick-border-group{
  margin-top:10px;
  padding-top:8px;
  border-top:1px solid rgba(70,85,100,.14);
}

.quick-border-title{
  margin-bottom:6px;
  font-weight:600;
}

.quick-border-row{
  display:grid;
  grid-template-columns:52px 1fr;
  gap:5px 8px;
  align-items:center;
  padding:6px 0;
  border-bottom:1px solid rgba(70,85,100,.07);
}

.quick-border-row > strong{
  grid-row:1 / span 3;
}

.quick-border-row label{
  display:grid;
  grid-template-columns:52px 1fr;
  align-items:center;
  gap:6px;
}

.quick-border-row input[type="number"],
.quick-border-row select{
  width:100%;
  box-sizing:border-box;
}
.organization-switch{min-width:210px;max-width:320px;padding:7px 28px 7px 9px;border:1px solid #b9c5cc;border-radius:6px;background:#fff;color:#18222c;font:600 13px/1.2 "Segoe UI",sans-serif;text-transform:none;letter-spacing:normal}.organization-switch:disabled{opacity:.75}
.alarm-configuration-page{overflow:hidden!important;display:flex!important;flex-direction:column;gap:10px}.alarm-configuration-page.hidden{display:none!important}.management-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.management-tabs{display:flex;gap:5px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:7px}.management-tabs button.active{background:#dce8ef;border-color:#7b93a3}.alarm-config-panel{flex:1 1 auto;min-height:0;overflow:auto}.management-toolbar{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:8px}.management-toolbar input[type=search]{min-width:280px;flex:1}.management-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:7px;background:#fff}.management-table{width:100%;border-collapse:collapse;font-size:12px}.management-table th,.management-table td{padding:7px 8px;border-right:1px solid #e0e5e9;border-bottom:1px solid #e0e5e9;text-align:left;vertical-align:top}.management-table th{position:sticky;top:0;z-index:2;background:#eef2f5;font-weight:600}.management-table td small{display:block;color:var(--muted);margin-top:3px;overflow-wrap:anywhere}.management-actions{display:flex;gap:4px;flex-wrap:wrap;min-width:220px}.management-actions button{padding:4px 7px;font-size:11px}.management-form{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:10px 14px}.management-form>label:not(.checkline){display:grid;gap:4px}.management-form input,.management-form select,.management-form textarea{width:100%;box-sizing:border-box}.management-form select[multiple]{min-height:82px}.management-form textarea{min-height:70px;resize:vertical}.management-form fieldset{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:6px}.span-all{grid-column:1/-1}.notification-tests{display:flex;align-items:end;gap:8px;flex-wrap:wrap;margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}.notification-tests label{display:grid;gap:4px;min-width:280px}.modal-card.extra-wide{width:min(980px,94vw)}.management-modal{max-height:92vh;overflow:auto}.good{color:var(--good)}
.encos-context-menu{position:fixed;z-index:10000;min-width:220px;padding:6px;background:#fff;border:1px solid #aebac5;border-radius:8px;box-shadow:0 12px 30px #17212b38}
.encos-context-menu button{display:block;width:100%;padding:9px 12px;border:0;border-radius:5px;background:transparent;color:#18222c;text-align:left;font:600 14px "Segoe UI",sans-serif}
.encos-context-menu button:hover:not(:disabled){background:#eaf5f1;color:#006f57}.encos-context-menu button:disabled{color:#9ba5ad}
