:root{color:#20242a;background:#eef1f5;--font-caption: 11px;--font-small: 12px;--font-body: 13px;--font-title: 14px;--font-section: 15px;--font-page-title: 18px;--font-brand: 18px;--font-kpi: 21px;--font-kpi-large: 24px;--font-chart-label: 10px;font-family:Inter,Segoe UI,Microsoft YaHei,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;letter-spacing:0}*{box-sizing:border-box}body{margin:0;background:#eef1f5;font-size:var(--font-body)}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%);display:grid;gap:12px;padding:22px;background:#fff;border:1px solid #dbe1e8;border-radius:8px}.login-card h1{margin:0;font-size:var(--font-page-title)}.login-card p{margin:0;color:#5b6470;font-size:var(--font-body);line-height:1.5}.login-card input{height:38px;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;font:inherit}.inline-message{margin-bottom:0}.message.app-message-toast{position:fixed;top:76px;right:16px;z-index:60;width:min(460px,calc(100vw - 32px));margin-bottom:0;pointer-events:none}button{border:1px solid #c8d0d9;background:#fff;color:#20242a;height:36px;padding:0 12px;display:inline-flex;align-items:center;gap:8px;border-radius:6px;cursor:pointer;font:inherit;font-size:var(--font-body)}button:hover{background:#eef4fb;border-color:#8fb2d9}button:disabled{cursor:not-allowed;opacity:.6}input,select,textarea{font:inherit;font-size:var(--font-body)}button,input,select,textarea{min-width:0}.app-shell{min-height:100vh;display:grid;grid-template-columns:250px minmax(0,1fr);padding:0}.side-nav{position:sticky;top:0;height:100vh;background:#2f5d89;color:#fff;box-shadow:2px 0 8px #13263a2e;z-index:10}.brand-mark{height:64px;display:flex;align-items:center;gap:10px;padding:0 18px;border-bottom:1px solid rgba(255,255,255,.14);font-size:var(--font-brand);font-weight:600}.side-nav nav{display:grid;padding:8px 0}.side-nav a,.side-nav button{height:40px;display:flex;align-items:center;gap:12px;padding:0 18px;color:#eef6ff;text-decoration:none;font-size:var(--font-body);border-left:3px solid transparent;border-top:0;border-right:0;border-bottom:0;border-radius:0;background:transparent;width:100%;justify-content:flex-start}.side-nav a:hover,.side-nav button:hover,.side-nav .nav-active{background:#ffffff1f;border-left-color:#fff}.workspace{min-width:0;overflow-x:hidden;padding:76px 12px 20px;background:#eee}.topbar{position:fixed;top:0;left:250px;right:0;min-height:64px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:0;padding:12px 20px;background:#2f5d89;color:#fff;box-shadow:0 2px 8px #13263a29;z-index:9}.topbar h1{font-size:var(--font-page-title);line-height:1.2;margin:0 0 4px}.topbar p{margin:0;color:#dceaf8;font-size:var(--font-body)}.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}.actions button{border-color:#ffffff47;background:#ffffff14;color:#fff}.actions button:hover{background:#ffffff2e;border-color:#ffffff80}.status-grid,.telemetry-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.dashboard-band{margin-bottom:16px;padding:16px;background:#fff;border:0;border-radius:8px;box-shadow:0 1px 3px #192a3e24}.dashboard-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:12px}.dashboard-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}.dashboard-head-actions button{height:32px;white-space:nowrap}.dashboard-head span,.dashboard-head small{color:#5b6470;font-size:var(--font-small)}.dashboard-head h2{margin:4px 0 0;font-size:var(--font-page-title)}.dashboard-fullscreen{width:100vw;height:100vh;margin:0;padding:18px;border-radius:0;overflow:auto;background:#eef1f5}.dashboard-fullscreen .widget-grid{grid-template-columns:repeat(4,minmax(220px,1fr))}.dashboard-fullscreen .dashboard-widget{min-height:132px}.status-grid strong,.status-grid b,.dashboard-band strong,.dashboard-band b{font-weight:400}.dashboard-band h2,.dashboard-band .widget-label-row>span,.dashboard-band .widget-title span,.dashboard-band .section-bar strong{font-weight:600}.widget-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.dashboard-widget{min-height:124px;border:0;border-radius:8px;padding:14px;background:#fff;display:grid;align-content:center;gap:6px;box-shadow:0 1px 3px #192a3e1f}.widget-button{width:100%;height:auto;justify-items:start;text-align:left;cursor:pointer;color:inherit;font:inherit}.widget-button:hover{background:#f3f8fc;border-color:#8fb2d9}.dashboard-widget span{color:#5b6470;font-size:var(--font-small)}.dashboard-widget strong{font-size:var(--font-kpi);line-height:1.1;font-weight:400}.dashboard-widget small{color:#697481;font-size:var(--font-caption)}.widget-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.widget-label-row small{white-space:nowrap}.link-button{border:0;padding:0;background:transparent;color:#2687e9;font:inherit;font-size:var(--font-caption);cursor:pointer}.compact-metric-panel{grid-column:span 2;align-content:start}.alarm-overview-widget{grid-column:span 3;align-content:start}.alarm-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.alarm-mini-card{min-height:72px;height:auto;display:grid;align-content:center;justify-items:start;gap:3px;padding:8px 10px;border:1px solid #dbe4ed;border-left:3px solid #8fb2d9;background:#fbfdff;text-align:left}.alarm-mini-card span{color:#5b6470;font-size:var(--font-caption)}.alarm-mini-card strong{color:#20242a;font-size:var(--font-kpi);font-weight:400}.alarm-mini-card small{max-width:100%;color:#697481;font-size:var(--font-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alarm-mini-card em{max-width:100%;color:#53606d;font-size:var(--font-caption);font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alarm-card-critical{border-left-color:#c9584c}.alarm-card-warning{border-left-color:#b58318}.alarm-card-info{border-left-color:#2f5d89}.small-card-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.peak-card-row{grid-template-columns:repeat(4,minmax(0,1fr))}.peak-card-row .small-metric-card{min-height:82px}.small-metric-card{min-height:74px;display:grid;align-content:start;justify-items:center;gap:2px;border:1px solid #dbe4ed;border-left:3px solid #1f7a8c;border-radius:8px;padding:8px 10px;background:#fbfdff}.small-metric-button{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer}.small-metric-button:hover{background:#f3f8fc;border-color:#b8ccde}.small-metric-card span{color:#4d5a66;font-size:var(--font-caption)}.small-metric-card strong{max-width:100%;color:#101828}.small-metric-value{display:inline-flex;align-items:baseline;justify-content:center;gap:4px;line-height:1.05;white-space:nowrap}.small-metric-value b{font-size:var(--font-page-title);line-height:1.05;font-weight:400}.small-metric-value small{color:#697481;font-size:var(--font-caption);font-weight:400;line-height:1}.small-metric-card em{color:#697481;font-size:var(--font-caption);font-style:normal}.small-warm{border-left-color:#d14b3f}.small-cool{border-left-color:#1f7a8c}.small-earth{border-left-color:#8a7f27}.metric-value-stack{min-width:0;display:grid;gap:4px}.metric-value-stack small{font-size:var(--font-caption)}.mini-line{width:100%;height:52px;display:block;margin-top:4px;border-bottom:1px solid #e1e7ee}.mini-line polyline{fill:none;stroke:#2f5d89;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.mini-line-warm polyline{stroke:#c9584c}.mini-line-cool polyline{stroke:#1f7a8c}.mini-line-earth polyline{stroke:#77722c}.mini-bars{height:54px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;align-items:end;margin-top:4px}.mini-bars span{min-height:6px;border-radius:5px 5px 2px 2px;background:#2f5d89}.mini-bars-warm span{background:#c9584c}.mini-bars-cool span{background:#1f7a8c}.mini-bars-earth span{background:#77722c}.mini-pie{width:58px;aspect-ratio:1;display:grid;place-items:center;justify-self:start;border-radius:50%;background:conic-gradient(#2f5d89 var(--value),#e6ebf0 0)}.widget-warm .mini-pie{background:conic-gradient(#c9584c var(--value),#e6ebf0 0)}.widget-cool .mini-pie{background:conic-gradient(#1f7a8c var(--value),#e6ebf0 0)}.widget-earth .mini-pie{background:conic-gradient(#77722c var(--value),#e6ebf0 0)}.mini-pie span{width:42px;aspect-ratio:1;display:grid;place-items:center;border-radius:50%;background:#fff;color:#20242a;font-size:var(--font-chart-label);font-weight:400}.donut-row{display:grid;grid-template-columns:54px minmax(0,1fr);gap:10px;align-items:center}.device-online-widget{grid-column:span 1;min-height:124px;align-content:center}.online-widget-content{min-width:0;display:grid;grid-template-columns:96px minmax(202px,1fr);gap:40px;align-items:center}.online-widget-primary{min-width:0;display:grid;gap:8px}.device-online-widget .donut-row{grid-template-columns:64px minmax(38px,1fr);gap:8px}.device-online-widget .donut-chart{width:64px}.device-online-widget .donut-chart span{width:46px}.device-online-widget strong{font-size:23px;line-height:1;white-space:nowrap;font-weight:400}.device-online-widget .online-device-count{min-width:42px;max-width:none;overflow:visible;text-overflow:clip;overflow-wrap:normal}.gauge-widget{width:100%;min-width:0;display:grid;gap:4px}.gauge-arc{width:92px;height:48px;position:relative;overflow:hidden}.gauge-arc:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:92px 92px 0 0;background:conic-gradient(from 270deg at 50% 100%,#1f7a8c var(--value),#e6ebf0 0 180deg,transparent 0)}.gauge-arc span{position:absolute;left:13px;right:13px;bottom:0;height:35px;border-radius:70px 70px 0 0;background:#fff}.gauge-warn .gauge-arc:before{background:conic-gradient(from 270deg at 50% 100%,#b7791f var(--value),#e6ebf0 0 180deg,transparent 0)}.gauge-danger .gauge-arc:before{background:conic-gradient(from 270deg at 50% 100%,#c9584c var(--value),#e6ebf0 0 180deg,transparent 0)}.gauge-readout{min-width:0;display:grid;gap:2px}.gauge-readout small,.gauge-readout em{min-width:0;color:#697481;font-size:var(--font-caption);font-style:normal;white-space:nowrap}.gauge-readout strong{color:#20242a;font-size:var(--font-section-title);line-height:1.05;font-weight:400;white-space:nowrap}.status-indicator-widget{grid-column:span 1;align-content:start}.status-indicator-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.status-indicator-item{min-width:0;min-height:56px;display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:5px 6px;padding:8px;border:1px solid #e1e7ee;border-radius:8px;background:#fff;color:inherit;font:inherit;text-align:left;cursor:pointer}.status-indicator-item:hover{background:#f5f9fc}.status-indicator-item i{width:8px;height:8px;border-radius:50%;background:#9aa5b1}.status-indicator-item span,.status-indicator-item small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-indicator-item span{color:#344150;font-size:var(--font-caption)}.status-indicator-item strong{color:#20242a;font-size:var(--font-body);line-height:1;font-weight:400}.status-indicator-item small{grid-column:2 / 4;color:#697481;font-size:var(--font-tiny)}.status-indicator-ok i{background:#1f8a5b}.status-indicator-warn i{background:#b7791f}.status-indicator-danger i{background:#c9584c}.status-indicator-idle i{background:#9aa5b1}.device-table-widget{align-content:start}.device-table-widget .widget-title{justify-content:space-between}.device-table-scroll{max-height:226px;overflow:auto;border:1px solid #e6ebf0;border-radius:8px}.device-widget-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:var(--font-caption)}.device-widget-table th,.device-widget-table td{padding:8px 9px;border-bottom:1px solid #edf1f5;color:#344150;text-align:left;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-widget-table th{position:sticky;top:0;z-index:1;background:#f8fafc;color:#5b6470;font-weight:600}.device-widget-table td:first-child{display:grid;gap:2px}.device-table-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#20242a}.device-widget-table td small{color:#c9584c;font-size:var(--font-tiny)}.relay-control-widget{grid-column:span 2;align-content:start}.relay-control-list{display:grid;gap:8px}.relay-control-row{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px;border:1px solid #e1e7ee;border-radius:8px;background:#f8fafc}.relay-control-row strong,.relay-control-row small{min-width:0;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.relay-control-row strong{color:#20242a;font-size:var(--font-small);font-weight:400}.relay-control-actions{display:inline-flex;gap:6px}.relay-control-actions button{min-width:48px;height:30px;padding:0 8px;border:1px solid #b8c7d8;border-radius:6px;background:#fff;color:#25445f;font-size:var(--font-caption);cursor:pointer}.relay-control-actions button:hover:not(:disabled){background:#eef6fb}.relay-control-actions button:disabled{color:#9aa5b1;cursor:not-allowed}.relay-control-note{display:block;margin-top:2px;color:#697481;font-size:var(--font-tiny)}.regional-sensor-panel{min-width:0;width:min(222px,100%);justify-self:end;display:grid;gap:5px;padding:7px 8px 7px 10px;border:1px solid #dbe8ef;border-radius:8px;background:#f7fbfd}.regional-sensor-title{min-width:0;display:grid;grid-template-columns:34px minmax(0,1fr);gap:8px;align-items:baseline;color:#253142}.regional-sensor-title span{font-size:11px;font-weight:700;white-space:nowrap}.regional-sensor-title small{color:#697481;font-size:10px;justify-self:end;white-space:nowrap}.regional-sensor-rows{display:grid;gap:3px}.regional-sensor-compact-row{min-width:0;display:grid;grid-template-columns:34px minmax(0,1fr);gap:8px;align-items:center}.regional-sensor-compact-row>span{color:#253142;font-size:11px;font-weight:700;white-space:nowrap}.regional-sensor-compact-row>div{min-width:0;display:flex;justify-content:space-between;gap:3px}.regional-sensor-compact-row b{min-width:25px;height:17px;padding:0 2px;display:grid;place-items:center;border-radius:4px;background:#fff;color:#20242a;font-size:10px;line-height:1;font-weight:400;box-shadow:inset 0 0 0 1px #e2edf3}.regional-sensor-matrix{min-width:0;display:grid;gap:2px;color:#4d5a66;font-size:10px;line-height:1.15}.regional-sensor-head,.regional-sensor-row{display:grid;grid-template-columns:minmax(28px,1fr) repeat(6,16px);gap:3px;align-items:center}.regional-sensor-head{color:#253142;font-weight:700}.regional-sensor-row span{color:#253142;font-weight:600;white-space:nowrap}.regional-sensor-row strong{color:#20242a;font-size:10px;line-height:1.15;text-align:right;font-weight:400}.compact-stat-list{min-width:0;display:grid;gap:4px}.compact-stat-list>span{color:#4d5a66;font-size:var(--font-caption);font-weight:600}.compact-stat-list ul{min-width:0;margin:0;padding:0;display:grid;gap:2px;list-style:none}.compact-stat-list li{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center;color:#5b6470;font-size:var(--font-caption);line-height:1.2}.compact-stat-list em{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal}.compact-stat-list strong{color:#20242a;font-size:var(--font-caption);line-height:1.2;font-weight:400}.donut-chart{width:54px;aspect-ratio:1;display:grid;place-items:center;border-radius:50%;background:conic-gradient(#1f7a8c var(--value),#e6ebf0 0)}.donut-chart span{width:38px;aspect-ratio:1;display:grid;place-items:center;border-radius:50%;background:#fff;color:#20242a;font-size:var(--font-caption);font-weight:400}.widget-warm{border-color:#e0b0a8}.widget-cool{border-color:#9bc7d3}.widget-earth{border-color:#c8c184}.widget-wide{grid-column:span 2;align-content:start}.map-widget{grid-column:span 2;min-height:360px;align-content:stretch}.map-dashboard-layout{display:grid;grid-template-columns:180px minmax(0,1fr);gap:14px;min-height:286px}.map-stat-list{display:grid;gap:12px;align-content:center}.map-status-tile{min-height:58px;width:100%;display:grid;grid-template-columns:38px 1fr;grid-template-areas:"icon label" "icon value";align-items:center;gap:0 10px;border-left:4px solid #2687e9;border-top:0;border-right:0;border-bottom:0;border-radius:8px;padding:10px 12px;background:#fff;box-shadow:0 10px 24px #1f2d3d14;text-align:left;font:inherit;cursor:pointer;color:inherit}.map-status-tile:hover{background:#f6faff;transform:translateY(-1px);box-shadow:0 12px 26px #1f2d3d1c}.map-status-tile i{grid-area:icon;width:38px;height:38px;border-radius:8px;background:#e5f1ff}.map-status-tile b{grid-area:label;color:#273244;font-size:var(--font-small)}.map-status-tile strong{grid-area:value;color:#4f5877;font-family:inherit;font-size:var(--font-kpi);line-height:1.1;font-weight:400}.tile-green{border-left-color:#3ac21f}.tile-green i{background:#e8f9df}.tile-red{border-left-color:#ff273a}.tile-red i{background:#ffe5e8}.tile-amber{border-left-color:#f5a20a}.tile-amber i{background:#fff4da}.map-canvas{position:relative;min-height:286px;overflow:hidden;border:1px solid #dbe4ed;border-radius:8px;background:linear-gradient(135deg,#2687e90f,#2687e905),#fff}.tile-map-canvas{width:100%;height:286px;min-height:286px;background:#eef5fb;cursor:grab;touch-action:none;overscroll-behavior:contain}.tile-map-canvas.dragging{cursor:grabbing}.tile-map-layer,.tile-map-layer img{position:absolute}.tile-map-layer{top:0;right:0;bottom:0;left:0}.tile-map-layer img{max-width:none;pointer-events:none;-webkit-user-select:none;user-select:none}.tile-map-label{pointer-events:none}.map-provider-badge{position:absolute;right:10px;top:10px;z-index:3;padding:3px 8px;border:1px solid rgba(36,72,112,.14);border-radius:999px;background:#ffffffd1;color:#314155;font-size:var(--font-small);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.map-controls{position:absolute;right:10px;top:42px;z-index:4;display:grid;gap:6px}.map-controls button{width:26px;height:26px;border:1px solid rgba(36,72,112,.16);border-radius:6px;background:#ffffffe6;color:#1f2a44;font-size:16px;font-weight:700;line-height:1;cursor:pointer;box-shadow:0 4px 10px #18243014}.map-controls button:hover{border-color:#2687e961;color:#1267c8}.local-geojson-map{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:linear-gradient(135deg,#2687e914,#2687e905),#fff}.local-geojson-map small{position:absolute;left:10px;bottom:8px;max-width:calc(100% - 20px);overflow:hidden;color:#53606d;font-size:var(--font-small);text-overflow:ellipsis;white-space:nowrap}.china-map-shape{position:absolute;top:18px;right:36px;bottom:18px;left:36px;width:calc(100% - 72px);height:calc(100% - 36px)}.china-map-shape path{fill:#e4f1ff;stroke:#2687e9;stroke-width:3;stroke-linejoin:round;filter:drop-shadow(0 10px 16px rgba(38,135,233,.08))}.map-region-label,.map-empty-state{position:absolute;z-index:1;color:#53606d;font-size:var(--font-small)}.label-north{left:30%;top:18%}.label-east{right:20%;top:45%}.label-south{left:43%;bottom:18%}.label-west{left:24%;top:54%}.map-empty-state{left:50%;top:50%;transform:translate(-50%,-50%);padding:4px 10px;border:1px dashed #aab6c2;border-radius:999px;background:#ffffffc7}.map-pin{position:absolute;z-index:2;width:18px;height:18px;transform:translate(-50%,-50%);display:grid;place-items:center;border:3px solid #ffffff;border-radius:999px;background:#ff1f2d;color:#fff;box-shadow:0 0 0 2px #ff1f2d2e,0 8px 16px #1824302e;cursor:pointer}.map-pin i{position:absolute;left:16px;top:-8px;min-width:18px;min-height:18px;display:none;place-items:center;border-radius:999px;background:#1f2a44;color:#fff;font-size:10px;font-style:normal;font-weight:700}.pin-ok{background:#33c41f;box-shadow:0 0 0 2px #33c41f2e,0 8px 16px #1824302e}.pin-warn{background:#ff1f2d}.map-pin.selected{outline:3px solid rgba(38,135,233,.35);outline-offset:4px}.map-legend,.chart-list{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.map-legend span,.chart-list span{display:inline-flex;align-items:center;gap:5px;color:#53606d;font-size:var(--font-small)}.legend-dot{width:9px;height:9px;display:inline-block;border-radius:50%;background:#9eb4c8}.stacked-widget,.bar-chart-widget{align-content:stretch}.stacked-bar{width:100%;min-width:0;height:22px;display:flex;overflow:hidden;border-radius:999px;background:#e6ebf0}.stack-segment{min-width:3px;height:100%}.stack-0{background:#1f7a8c}.stack-1{background:#2f5d89}.stack-2{background:#b58318}.stack-3{background:#697481}.chart-list{width:100%;display:grid;gap:6px}.chart-list div{display:flex;justify-content:space-between;gap:10px;align-items:center}.chart-list strong{font-size:var(--font-title);font-weight:400}.vertical-bars{height:92px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));align-items:end;gap:8px;margin-top:4px}.vertical-bars div{min-width:0;height:100%;display:grid;grid-template-rows:1fr auto;gap:5px;align-items:end}.vertical-bars div>span{width:100%;min-height:0;align-self:end;border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#2f5d89,#1f7a8c)}.vertical-bars small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.widget-title{display:flex;align-items:center;gap:8px;color:#145c8f;font-size:var(--font-title)}.embedded{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:8px}.mini-alarm-list{display:grid;gap:8px;margin-top:8px}.mini-alarm-list button{height:auto;min-height:42px;justify-content:flex-start;display:grid;grid-template-columns:8px 1fr 1fr 1fr;text-align:left;overflow:hidden}.mini-alarm-list strong{color:#20242a;font-size:var(--font-small);font-weight:400}.mini-alarm-list span,.mini-alarm-list small{color:#697481;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.severity-dot{width:8px;height:28px;border-radius:999px;background:#8fb2d9}.severity-dot.alarm-critical{background:#b42323}.severity-dot.alarm-warning{background:#b58318}.severity-dot.alarm-info{background:#2f5d89}.dashboard-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}.summary-table{min-width:0;border:1px solid #e1e7ee;border-radius:8px;overflow:hidden;background:#fff}.bar-meter{min-width:96px;height:18px;position:relative;overflow:hidden;border-radius:999px;background:#e9edf2}.bar-meter>span{display:block;height:100%;border-radius:inherit;background:#2f5d89}.bar-meter small{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#20242a;font-size:var(--font-caption);font-weight:600}.meter-ok>span{background:#93c8a0}.meter-warn>span{background:#e2b07e}.meter-neutral>span{background:#9eb4c8}.compact-empty{padding:14px}.dashboard-drawer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;pointer-events:none}.drawer-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#161e2638;pointer-events:auto}.drawer-panel{position:absolute;top:0;right:0;width:min(680px,100%);height:100%;display:grid;grid-template-rows:auto 1fr;background:#fff;border-left:1px solid #cfd7e1;box-shadow:-16px 0 32px #18243029;pointer-events:auto}.drawer-head{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:16px;border-bottom:1px solid #e6ebf0}.drawer-head span{display:block;color:#5b6470;font-size:var(--font-small)}.drawer-head h2{margin:4px 0 0;font-size:var(--font-page-title)}.drawer-content{min-height:0;overflow-y:auto;padding:16px}.drawer-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px}.drawer-alarm{display:grid;gap:6px;margin-bottom:12px;border:1px solid #dbe1e8;border-radius:8px;padding:12px}.drawer-alarm span,.drawer-alarm small{color:#5b6470}.drawer-actions{justify-content:flex-start;margin-bottom:12px}.drawer-section-title{display:flex;justify-content:space-between;gap:12px;align-items:baseline;margin:14px 0 8px}.drawer-section-title strong{color:#20242a;font-size:var(--font-title);font-weight:600}.drawer-section-title span{color:#697481;font-size:var(--font-small)}.drawer-related{display:grid;gap:8px;margin-top:12px}.drawer-related>strong{color:#20242a;font-size:var(--font-title);font-weight:600}.drawer-related>span{color:#697481;font-size:var(--font-body)}.drawer-related button{height:auto;min-height:42px;display:grid;grid-template-columns:1fr 1fr 1fr;justify-content:start;text-align:left}.drawer-related small{color:#697481;font-size:var(--font-small)}.status-card,.metric-card,.panel,.message{background:#fff;border:0;border-radius:8px;box-shadow:0 1px 3px #192a3e1f}.metric-card{min-height:116px;padding:16px;display:grid;align-content:center}.metric-card span{color:#5b6470;font-size:var(--font-small)}.metric-card strong{margin-top:8px;font-size:var(--font-kpi-large);line-height:1.1}.metric-card small{margin-top:4px;color:#697481}.status-card{min-height:104px;display:grid;grid-template-columns:42px 1fr;gap:12px;padding:16px;align-items:center}.status-card-button{width:100%;text-align:left;cursor:pointer;color:inherit;font:inherit}.status-card-button:hover{background:#f3f8fc}.status-icon{width:42px;height:42px;border-radius:8px;display:grid;place-items:center;color:#145c8f;background:#e6f2fb}.status-ok{border-color:#98c9a3}.status-ok .status-icon{background:#e8f7ec;color:#23733a}.status-danger{border-color:#e0a0a0}.status-danger .status-icon{background:#fff0f0;color:#b42323}.status-card span,.endpoint-label{display:block;color:#5b6470;font-size:var(--font-small)}.status-card strong{display:block;margin:4px 0;font-size:var(--font-page-title);line-height:1.2;font-weight:400}.status-card small{color:#697481}.status-card,.metric-card,.dashboard-widget,.info-block{min-width:0}.status-card strong,.status-card small,.metric-card strong,.dashboard-widget strong,.dashboard-widget small,.info-block strong,.info-block small{overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}.panel{padding:14px;margin-bottom:12px}.compact-panel{padding:12px 16px}.device-line{display:flex;gap:16px;flex-wrap:wrap;align-items:center;color:#53606d;font-size:var(--font-body)}.device-line strong{color:#20242a}.panel-title{display:flex;align-items:center;gap:8px;color:#2f5d89;margin-bottom:10px}.panel-title>h2{flex:1;min-width:0}.panel-title h2{color:#20242a;font-size:var(--font-section);margin:0}.panel-actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.panel-actions button{height:32px;white-space:nowrap}.flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:14px}.asset-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.compact-asset-grid{grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:12px}.info-block{min-height:76px;border:1px solid #e8edf2;border-radius:8px;padding:10px;background:#fff;display:grid;align-content:center;gap:4px}.info-block span{color:#5b6470;font-size:var(--font-small)}.info-block strong{font-size:var(--font-title)}.info-block small{color:#697481;overflow-wrap:anywhere}.asset-management-grid{display:grid;grid-template-columns:minmax(320px,.92fr) minmax(420px,1.45fr);gap:12px;align-items:start}.project-management-layout{display:grid;grid-template-columns:minmax(280px,.82fr) minmax(520px,1.5fr);gap:12px;align-items:start}.project-list-card,.project-detail-card{min-width:0;border:1px solid #e1e7ee;border-radius:8px;background:#fff;overflow:hidden}.project-section-bar{min-height:38px}.project-query{display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,150px);gap:8px;padding:10px;border-bottom:1px solid #e6ebf0}.project-query input,.project-query select{width:100%;height:34px;min-width:0;border:1px solid #cfd7e1;border-radius:6px;padding:0 9px;background:#fff;font:inherit}.project-query input:only-child{grid-column:1 / -1}.project-list{max-height:548px;overflow:auto;display:grid;gap:6px;padding:10px}.project-list-item{width:100%;height:auto;min-height:58px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 10px;border:1px solid #e1e7ee;border-radius:7px;background:#fff;text-align:left}.project-list-item.active{border-color:#2f5d89;background:#eef6ff}.project-list-item span,.project-list-item strong,.project-list-item small{min-width:0}.project-list-item span{display:grid;gap:3px}.project-list-item strong,.project-list-item small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-list-item strong{font-size:var(--font-title)}.project-list-item small,.project-list-item em{color:#697481;font-size:var(--font-small);font-style:normal}.project-list-item em{white-space:nowrap}.project-detail-card{display:grid;gap:12px;padding:12px}.project-detail-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.project-detail-head span{color:#697481;font-size:var(--font-small)}.project-detail-head h3{margin:3px 0 4px;font-size:var(--font-section)}.project-detail-head p{margin:0;color:#53606d;font-size:var(--font-body);overflow-wrap:anywhere}.project-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.project-subsection{min-width:0;border:1px solid #e6ebf0;border-radius:8px;overflow:hidden}.site-grid{max-height:220px;overflow:auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px}.site-card{min-width:0;border:1px solid #e1e7ee;border-radius:7px;padding:9px;background:#fbfcfd;display:grid;gap:8px}.site-card strong,.site-card small{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-card strong{font-size:var(--font-title)}.site-card small{color:#697481;font-size:var(--font-small)}.site-card-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.site-card-meta span{height:22px;display:inline-flex;align-items:center;padding:0 7px;border-radius:999px;background:#eef1f5;color:#53606d;font-size:var(--font-caption);white-space:nowrap}.site-card-meta button{width:24px;height:24px;padding:0;justify-content:center}.cabinet-chip-list{display:flex;gap:5px;flex-wrap:wrap;min-width:0}.cabinet-chip{max-width:100%;height:24px;display:inline-flex;align-items:center;gap:3px;border:1px solid #dbe3ec;border-radius:999px;background:#fff;padding:0 4px 0 8px}.cabinet-chip small{max-width:96px}.cabinet-chip button{width:18px;height:18px;padding:0;justify-content:center}.project-device-table{max-height:310px}.single-management-grid{grid-template-columns:1fr}.management-list{min-width:0;border:1px solid #e1e7ee;border-radius:8px;background:#fff;overflow:hidden}.section-bar{min-height:40px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 12px;border-bottom:1px solid #e6ebf0;background:#f8fafc}.section-bar strong{font-size:var(--font-title)}.section-bar span{color:#697481;font-size:var(--font-small);white-space:nowrap}.wizard-grid{display:grid;grid-template-columns:320px 1fr;gap:14px}.generic-wizard{border:1px solid #dbe1e8;border-radius:8px;padding:12px;margin-bottom:14px;background:#fff}.helper-collapse{border:1px solid #dbe1e8;border-radius:8px;background:#f8fafc}.helper-collapse summary{min-height:56px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;cursor:pointer;list-style:none}.helper-collapse summary::-webkit-details-marker{display:none}.helper-collapse summary span{display:grid;gap:4px;min-width:0}.helper-collapse summary strong{font-size:var(--font-title)}.helper-collapse summary small{color:#5c6875;font-size:var(--font-small)}.helper-collapse summary em{flex:0 0 auto;font-style:normal;color:#145c8f;font-size:var(--font-small);font-weight:600}.helper-collapse[open] summary{border-bottom:1px solid #dbe1e8;background:#fff}.helper-collapse[open] summary em{color:#5c6875}.helper-collapse[open] summary em:before{content:"收起"}.helper-collapse[open] summary em{font-size:0}.helper-collapse[open] summary em:before{font-size:var(--font-small)}.helper-collapse-body{padding:12px}.wizard-section-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:10px}.wizard-section-head div{display:grid;gap:4px}.wizard-section-head strong{font-size:var(--font-title)}.wizard-section-head span{color:#5c6875;font-size:var(--font-body)}.stepper{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-bottom:12px}.stepper button{justify-content:center;border-color:#dbe1e8;background:#f7fafc;color:#44505c;min-width:0;white-space:nowrap}.stepper button.active{background:#145c8f;border-color:#145c8f;color:#fff}.generic-wizard-grid{display:grid;grid-template-columns:360px minmax(0,1fr);gap:14px}.modbus-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.modbus-point-editor{display:grid;gap:8px;border:1px solid #dbe1e8;border-radius:8px;padding:10px;background:#fff}.point-editor-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.point-editor-head span{display:flex;gap:6px;flex-wrap:wrap}.point-editor-head strong{font-size:var(--font-card-title)}.modbus-point-row{display:grid;grid-template-columns:minmax(92px,1.2fr) minmax(96px,1.2fr) minmax(72px,.8fr) minmax(62px,.6fr) minmax(62px,.6fr) minmax(58px,.6fr) 36px;gap:6px;align-items:center}.modbus-point-row input{padding-inline:8px}.point-read-result{grid-column:1 / -1;min-height:22px;display:inline-flex;align-items:center;color:#0f766e;font-size:var(--font-small);background:#ecfdf5;border:1px solid #bbf7d0;border-radius:6px;padding:2px 8px}.copy-config-panel{display:grid;gap:8px;border:1px solid #dbe1e8;border-radius:8px;padding:10px;background:#fff}.copy-config-panel>div:first-child{display:grid;gap:3px}.copy-config-panel strong{color:#20242a;font-size:var(--font-card-title)}.copy-config-panel span,.copy-config-panel small{color:#697481;font-size:var(--font-small);line-height:1.45}.copy-config-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.copy-config-row button{height:36px;white-space:nowrap}.wizard-form{display:grid;gap:10px;align-content:start;border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fbfcfd}.wizard-form h3{margin:0;font-size:var(--font-title)}.wizard-form input,.wizard-form select{height:36px;min-width:0;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;font:inherit}.token-row,.endpoint-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.token-row button,.endpoint-row button{height:36px;white-space:nowrap}.wizard-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.wizard-output{min-width:0}.endpoint-row .endpoint{margin:0;min-width:0}.commissioning-actions{display:grid;grid-template-columns:repeat(2,minmax(0,160px));gap:8px;margin-top:10px}.commissioning-status{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:12px}.checklist-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}.checklist{border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fff}.checklist strong{display:block;margin-bottom:8px}.checklist ol{margin:0;padding-left:20px;color:#4f5a66;font-size:var(--font-body);line-height:1.55}.checklist span{color:#697481;font-size:var(--font-body)}.router-at-checklist{grid-column:1 / -1}.router-at-table{display:grid;gap:6px;max-height:280px;overflow:auto}.router-at-row{display:grid;grid-template-columns:128px minmax(160px,1fr) minmax(160px,1fr);gap:8px;align-items:start;padding:8px;border:1px solid #e4e9ef;border-radius:8px;background:#fbfcfd}.router-at-row code{color:#2f5d89;font-size:var(--font-body);white-space:nowrap}.router-at-row span,.router-at-row small,.router-at-row em{color:#53606d;font-size:var(--font-small);line-height:1.45}.router-at-row em{grid-column:2 / -1;font-style:normal;color:#7a5d16}.st200th-capture-panel{margin-top:12px;display:grid;gap:10px;border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fff}.st200th-capture-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.st200th-capture-head>div:first-child{display:grid;gap:4px;min-width:0}.st200th-capture-head strong{color:#20242a;font-size:var(--font-card-title)}.st200th-capture-head span{color:#697481;font-size:var(--font-small)}.st200th-capture-tools{display:flex;gap:8px;align-items:center}.st200th-capture-tools label{width:min(280px,34vw);height:34px;display:grid;grid-template-columns:18px minmax(0,1fr);gap:6px;align-items:center;border:1px solid #cfd7e1;border-radius:6px;padding:0 9px;background:#fbfcfd;color:#697481}.st200th-capture-tools input{min-width:0;border:0;outline:0;background:transparent;color:#20242a;font:inherit;font-size:var(--font-small)}.st200th-capture-tools button{height:34px;gap:5px;white-space:nowrap}.st200th-capture-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.st200th-capture-table{max-height:360px;overflow:auto}.st200th-capture-table table{width:100%;border-collapse:collapse}.st200th-capture-table th,.st200th-capture-table td{padding:8px;border-bottom:1px solid #e5ebf1;text-align:left;vertical-align:top;font-size:var(--font-small)}.st200th-capture-table th{position:sticky;top:0;z-index:1;background:#f7fafc;color:#3f4b57;font-weight:600}.st200th-capture-table td{color:#3f4b57}.st200th-capture-table td>span,.st200th-capture-table td>small,.st200th-capture-table td>code{display:block;max-width:100%}.st200th-capture-table small{margin-top:3px;color:#697481;font-size:var(--font-caption)}.st200th-capture-table code{color:#2f5d89;font-size:var(--font-caption);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.st200th-capture-table pre{max-width:360px;max-height:72px;margin-top:5px;padding:6px;overflow:auto;border:1px solid #e4e9ef;border-radius:6px;background:#fbfcfd;color:#44505c;font-size:var(--font-caption)}.st200th-capture-table .status-pill{margin:0 5px 5px 0}.st200th-capture-table .highlight-row{background:#fffaf0}.point-table{margin-top:12px;display:grid;gap:8px}.point-table div{display:flex;flex-wrap:wrap;gap:8px}.point-table span{border:1px solid #dbe1e8;border-radius:999px;padding:4px 10px;background:#f7fafc;color:#44505c;font-size:var(--font-small)}.management-grid{display:grid;grid-template-columns:280px 1fr;gap:12px;margin-bottom:14px}.management-form,.password-form{display:grid;gap:10px;align-content:start}.management-form{border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fbfcfd}.management-form h3{margin:0;font-size:var(--font-title)}.management-form input,.management-form select,.password-form input{height:36px;min-width:0;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;font:inherit}.password-form{grid-template-columns:repeat(3,minmax(0,1fr))}.row-actions{display:flex;flex-wrap:wrap;gap:6px}.row-actions button{width:30px;height:30px;padding:0;justify-content:center}.compact-actions{justify-content:flex-end;gap:4px}.compact-actions button{width:28px;height:28px;border-radius:6px;color:#44505c;background:#fff}.compact-actions button:hover{color:#145c8f;background:#eef6ff}.user-actions-cell{width:136px;min-width:136px}.session-section{margin-top:18px}.small-title{margin-bottom:8px}.small-title h3{margin:0;font-size:var(--font-title)}.alarm-list{display:grid;gap:8px;max-height:420px;overflow:auto;padding-right:2px}.alarm-filter-grid{display:grid;grid-template-columns:repeat(6,minmax(140px,1fr));gap:8px;margin-bottom:12px}.alarm-filter-grid input,.alarm-filter-grid select{min-width:0;height:34px;border:1px solid #cfd7e1;border-radius:6px;padding:0 8px;background:#fff;color:#20242a;font:inherit}.alarm-filter-actions{display:flex;gap:6px;flex-wrap:wrap}.alarm-filter-actions button{height:34px}.alarm-item{display:grid;grid-template-columns:120px 110px 130px 150px minmax(180px,1fr) 64px 132px 112px;gap:8px;align-items:center;border:1px solid #dbe1e8;border-radius:8px;padding:8px 10px;background:#fbfcfd;font-size:var(--font-small)}.alarm-item strong,.alarm-item span,.alarm-item small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alarm-item span,.alarm-item small{color:#5b6470}.alarm-critical{border-color:#e0a0a0;background:#fff7f7}.alarm-warning{border-color:#e3c46b;background:#fffaf0}.alarm-actions{display:flex;gap:6px;justify-content:flex-end;flex-wrap:nowrap}.alarm-actions button,.alarm-note-row button{height:28px;padding:0 8px;font-size:var(--font-small)}.alarm-item .alarm-actions button{width:30px;padding:0;justify-content:center;gap:0;font-size:0}.alarm-item .alarm-actions button svg{width:15px;height:15px}.alarm-detail{margin-top:12px;border:1px solid #cfd7e1;border-radius:8px;padding:12px;background:#fbfcfd}.alarm-detail-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.alarm-detail-header span{display:block;color:#5b6470;font-size:var(--font-small)}.alarm-detail-header strong{display:block;margin-top:4px}.alarm-note-row{margin-top:12px;display:grid;grid-template-columns:minmax(180px,1fr) auto auto;gap:8px;align-items:center}.alarm-note-row input{height:34px;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;font:inherit}.detail-table{margin-top:12px;overflow:auto;max-height:420px;min-width:0}.compact-detail-table{max-height:260px}.table-wrap{overflow:auto;max-height:460px;min-width:0}.rule-list{display:grid;gap:8px;max-height:420px;overflow:auto;padding-right:2px}.rule-item{display:grid;grid-template-columns:160px 140px 140px 90px 110px 48px 100px 110px 90px 80px;gap:8px;align-items:center;border:1px solid #dbe1e8;border-radius:8px;padding:10px;background:#fbfcfd}.rule-item input,.rule-item select{min-width:0;height:34px;border:1px solid #cfd7e1;border-radius:6px;padding:0 8px;font:inherit}.check-label{display:inline-flex;align-items:center;gap:6px;font-size:var(--font-body);color:#39414a}.trend-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.cabinet-detail-template{display:grid;align-content:start}.cabinet-sensor-grid{margin-bottom:12px}.cabinet-trend-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.trend-card{border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fbfcfd}.trend-header,.trend-footer{display:flex;justify-content:space-between;gap:12px;align-items:center}.trend-header span,.trend-footer span{color:#5b6470;font-size:var(--font-small)}.trend-header strong{font-size:var(--font-title)}.trend-card svg{width:100%;height:128px;display:block;margin:8px 0}.trend-card line{stroke:#d4dbe3;stroke-width:1}.trend-card path{fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.flow span{min-height:44px;display:flex;align-items:center;padding:10px;background:#f7fafc;border:1px solid #dbe1e8;border-radius:6px;font-size:var(--font-body)}.endpoint{display:block;margin-top:6px;padding:12px;border-radius:6px;background:#17202a;color:#d9f3ff;overflow-x:auto;white-space:nowrap}.message{padding:12px 16px;margin-bottom:16px;border-color:#8fb2d9;background:#eef7ff}table{width:100%;border-collapse:collapse;font-size:var(--font-small);table-layout:auto}th,td{padding:8px 10px;text-align:left;border-bottom:1px solid #e6ebf0;vertical-align:top}th{color:#53606d;font-weight:600;background:#f5f7fa;position:sticky;top:0;z-index:1;white-space:nowrap}td{max-width:260px;overflow-wrap:anywhere}.clickable-row{cursor:pointer}.clickable-row:hover{background:#eef6ff}td>strong,td>small{display:block;min-width:0}.compact-table{max-height:340px}.compact-table td,.compact-table th{white-space:nowrap}.truncate-cell{max-width:220px}.truncate-cell,.truncate-cell strong,.truncate-cell small{overflow:hidden;text-overflow:ellipsis}.truncate-cell strong,.truncate-cell small{white-space:nowrap}.truncate-cell small{color:#697481}.no-wrap-actions{flex-wrap:nowrap;white-space:nowrap}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;padding:20px;background:#161e2657}.modal-panel{width:min(720px,100%);max-height:min(760px,calc(100vh - 40px));display:grid;grid-template-rows:auto minmax(0,1fr);background:#fff;border-radius:8px;box-shadow:0 20px 50px #14202c38;overflow:hidden}.wide-modal{width:min(1040px,100%)}.modal-head{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px 16px;border-bottom:1px solid #e6ebf0}.modal-head span{color:#697481;font-size:var(--font-small)}.modal-head h2{margin:2px 0 0;font-size:var(--font-page-title)}.modal-head button{width:34px;padding:0;justify-content:center}.modal-form{min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:16px;overflow:auto}.modal-body{min-height:0;display:grid;gap:12px;padding:16px;overflow:auto}.query-row{display:grid;grid-template-columns:minmax(220px,1fr) auto;gap:8px}.query-row input{height:36px;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;font:inherit}.modal-form label,.modal-context{min-width:0;display:grid;gap:6px}.modal-span-2{grid-column:1 / -1}.modal-form label span,.modal-context span{color:#53606d;font-size:var(--font-small)}.modal-form input,.modal-form select{width:100%;height:36px;border:1px solid #cfd7e1;border-radius:6px;padding:0 10px;background:#fff;color:#20242a;font:inherit}.modal-inline-action{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;padding:10px;border:1px solid #dbe6f0;border-radius:8px;background:#f8fbfe}.modal-inline-action button{white-space:nowrap}.modal-inline-action small{min-width:0;color:#697481;font-size:var(--font-small)}.hardware-advice-panel{display:grid;gap:12px;margin:12px 0 16px;padding:12px;border:1px solid #dfe7ef;border-radius:8px;background:#f8fafc}.compact-head{align-items:center}.file-upload-button{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;height:34px;padding:0 12px;border:1px solid #b8c7d8;border-radius:6px;background:#fff;color:#25445f;font-size:var(--font-small);font-weight:600;cursor:pointer;white-space:nowrap}.file-upload-button input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.config-preview{max-width:none;max-height:180px;overflow:auto;padding:10px;border:1px solid #dbe4ee;border-radius:6px;background:#fff;color:#344150;font-size:var(--font-caption)}.installation-guide-panel{margin-top:14px;display:grid;gap:10px;border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fff}.installation-guide-body{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;align-items:start}.qr-card{min-height:206px;display:grid;place-items:center;gap:6px;border:1px solid #dbe4ed;border-radius:8px;padding:10px;background:#fbfcfd;color:#697481;font-size:var(--font-small);text-align:center}.qr-card img{width:180px;height:180px;display:block}.qr-card small{max-width:100%;color:#44505c;font-size:var(--font-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.installation-guide-content{min-width:0;display:grid;gap:8px}.installation-guide-text{max-width:none;max-height:220px;overflow:auto;border:1px solid #dbe4ed;border-radius:6px;padding:10px;background:#fbfcfd;color:#344150;font-size:var(--font-caption);line-height:1.5}.batch-import-panel{margin-top:14px;display:grid;gap:10px;border:1px solid #dbe1e8;border-radius:8px;padding:12px;background:#fff}.batch-import-panel textarea{width:100%;min-height:116px;resize:vertical;border:1px solid #cfd7e1;border-radius:6px;padding:10px;background:#fbfcfd;color:#20242a;font:inherit;font-size:var(--font-small);line-height:1.45}.batch-import-meta{display:flex;flex-wrap:wrap;gap:8px;color:#5b6470;font-size:var(--font-caption)}.batch-import-meta span{border:1px solid #dbe4ed;border-radius:999px;padding:3px 9px;background:#f7fafc}.batch-import-results{display:grid;gap:8px}.modal-context{border:1px solid #e1e7ee;border-radius:8px;padding:9px 10px;background:#f8fafc}.modal-context strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-actions{grid-column:1 / -1;position:sticky;bottom:-16px;z-index:2;display:flex;justify-content:flex-end;gap:8px;margin:4px -16px -16px;padding:12px 16px;border-top:1px solid #e6ebf0;background:#fffffff5;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}pre{margin:0;white-space:pre-wrap;word-break:break-word;max-width:min(520px,56vw);font-family:Cascadia Mono,Consolas,monospace}.empty{color:#697481;text-align:center;padding:28px}.status-pill{min-width:46px;height:22px;display:inline-flex;align-items:center;justify-content:center;padding:0 8px;border-radius:999px;font-size:var(--font-caption);font-weight:600;white-space:nowrap}.status-online{background:#e8f7ec;color:#23733a}.status-offline{background:#fff0f0;color:#b42323}.status-grid :is(strong,b),.dashboard-band :is(strong,b),.dashboard-band .bar-meter small,.dashboard-band .map-controls button,.dashboard-band .regional-sensor-title span,.dashboard-band .regional-sensor-compact-row>span,.dashboard-band .regional-sensor-head,.dashboard-band .regional-sensor-row span,.dashboard-band .compact-stat-list>span{font-weight:400}.dashboard-band :is(h2,.widget-label-row>span,.widget-title span,.section-bar strong){font-weight:600}@media (max-width: 980px){.app-shell{grid-template-columns:72px minmax(0,1fr)}.side-nav{width:72px}.brand-mark{justify-content:center;padding:0}.brand-mark span,.side-nav a span,.side-nav button span{display:none}.side-nav a,.side-nav button{justify-content:center;padding:0}.topbar{left:72px}.status-grid,.telemetry-grid,.widget-grid,.trend-grid,.asset-grid,.asset-management-grid,.generic-wizard-grid,.project-management-layout,.management-grid,.password-form,.flow,.project-stat-grid,.site-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.widget-wide{grid-column:span 2}.embedded{grid-template-columns:1fr}}@media (max-width: 760px){.alarm-item{grid-template-columns:1fr}.alarm-actions{justify-content:flex-start}.alarm-note-row,.rule-item,.mini-alarm-list button,.drawer-metrics,.drawer-related button,.asset-management-grid,.generic-wizard-grid,.map-dashboard-layout,.compact-metric-panel,.project-management-layout,.modal-form,.dashboard-summary-grid{grid-template-columns:1fr}.small-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.online-widget-content,.project-query,.project-stat-grid,.site-grid,.modbus-grid,.modbus-point-row,.stepper{grid-template-columns:1fr}}@media (max-width: 640px){.app-shell{display:block;padding:0}.side-nav{position:static;width:auto;height:auto}.brand-mark{height:56px}.brand-mark span{display:inline}.side-nav nav{display:flex;overflow-x:auto;padding:0}.side-nav a,.side-nav button{min-width:84px;border-left:0;border-bottom:3px solid transparent}.workspace{padding:12px}.topbar{position:static;display:block}.actions{justify-content:flex-start;margin-top:14px}.status-grid,.telemetry-grid,.widget-grid,.trend-grid,.asset-grid,.asset-management-grid,.generic-wizard-grid,.project-management-layout,.management-grid,.password-form,.flow{grid-template-columns:1fr}.panel-title{align-items:flex-start;flex-wrap:wrap}.panel-actions{width:100%;justify-content:flex-start}.modal-backdrop{padding:10px}.modal-panel{max-height:calc(100vh - 20px)}.query-row{grid-template-columns:1fr}.widget-wide{grid-column:span 1}}
