/* GeoNode Studio v24. Presentation layer; original data/control IDs are unchanged. */
:root{
 --bg:#f2f5f4;--panel:#fff;--panel2:#f5f8f7;--panel3:#eef3f1;
 --glass:rgba(255,255,255,.76);--glass-solid:rgba(255,255,255,.93);
 --line:#e1e8e5;--line2:#c7ddd4;--text:#213730;--muted:#778b83;
 --cyan:#167c65;--cyan2:#219c7e;--blue:#528ac7;--yellow:#c59545;--danger:#ce6964;--ok:#23896c;
 --soft-accent:#e7f2ed;--shadow:0 4px 24px rgba(25,64,48,.035),0 1px 2px rgba(25,64,48,.025);
 --input:#f8faf9;--rail:rgba(250,252,251,.92);--hover:#f0f6f3;--rail-width:88px;
 --scroll-track:transparent;--scroll-thumb:#c4d1ca;--scroll-thumb-border:transparent;
 color-scheme:light;
}
:root[data-theme=dark]{
 --bg:#10191c;--panel:#182427;--panel2:#1b2a2d;--panel3:#203035;
 --glass:rgba(24,37,40,.78);--glass-solid:rgba(24,37,40,.96);
 --line:#2b3b3e;--line2:#3c5953;--text:#e0ece7;--muted:#8caaa1;
 --cyan:#6fc3a8;--cyan2:#4ba68b;--blue:#85afe3;--yellow:#d9b573;--danger:#e68c89;--ok:#74bea1;
 --soft-accent:#203d35;--shadow:0 5px 24px rgba(0,0,0,.09),0 1px 2px rgba(0,0,0,.05);
 --input:#142125;--rail:rgba(20,30,33,.95);--hover:#213431;--scroll-thumb:#39544b;
 color-scheme:dark;
}
*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}
*::-webkit-scrollbar{width:5px;height:5px}*::-webkit-scrollbar-track{background:transparent;box-shadow:none;border:0}*::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border:0;border-radius:8px;box-shadow:none}
html,body{height:100%;margin:0;background:var(--bg);color:var(--text);font-family:Inter,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:13px;letter-spacing:.1px;overflow:hidden;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit}button,a,input,select,summary{-webkit-tap-highlight-color:transparent}button,a,summary{touch-action:manipulation}button{cursor:pointer}
a{text-decoration:none;color:inherit}svg.icon{width:18px;height:18px;flex:0 0 auto;vertical-align:middle}button svg.icon{width:16px;height:16px}
button{transition:background .18s,border-color .18s,color .18s,box-shadow .18s,transform .18s}button:active{transform:translateY(1px)}button:disabled{opacity:.4;cursor:not-allowed;transform:none}
:focus-visible{outline:2px solid var(--cyan);outline-offset:4px}
.app{margin-left:var(--rail-width);height:100dvh;min-width:0;display:grid;grid-template-rows:76px minmax(0,1fr) 32px;background:radial-gradient(ellipse at 87% 0%,rgba(185,217,199,.14),transparent 45%),var(--bg)}
.studio-rail{position:fixed;inset:0 auto 0 0;width:var(--rail-width);background:var(--rail);border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;z-index:60;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.rail-logo{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#187d66;color:#fff;margin-top:23px;box-shadow:0 6px 15px rgba(31,118,91,.12)}.rail-logo .icon{width:26px;height:26px}
.rail-section-label{font-size:7px;font-weight:700;letter-spacing:1.1px;color:var(--muted);margin:40px 0 15px}
.studio-rail nav{position:static;transform:none;left:auto;top:auto;display:flex!important;flex-direction:column;gap:10px;width:100%;padding:0 12px;max-width:none}
.studio-rail .navbtn{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:13px 1px;width:64px;font-size:10px;line-height:1.3;border-radius:12px;color:var(--muted);position:relative;transition:background .18s,color .18s}
.studio-rail .navbtn .icon{width:21px;height:21px}.studio-rail .navbtn.active{background:var(--soft-accent);color:var(--cyan);font-weight:600}.studio-rail .navbtn:hover{background:var(--hover);color:var(--cyan)}
.studio-rail .navbtn.active:after{content:"";position:absolute;right:-12px;width:3px;height:24px;background:var(--cyan);border-radius:3px 0 0 3px}
.rail-bottom{margin-top:auto;display:flex;flex-direction:column;gap:12px;align-items:center;padding:20px 0}.rail-action{border:0;background:transparent;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:6px;width:56px;padding:9px 0;border-radius:10px;font-size:9px}.rail-action:hover{background:var(--hover);color:var(--cyan)}.rail-avatar{height:32px;width:32px;margin-top:5px;display:grid;place-items:center;border:1px solid var(--line);background:var(--panel2);border-radius:50%;font-size:10px;font-weight:600;color:var(--cyan)}
header{height:76px;display:flex;padding:0 28px;gap:22px;background:var(--glass);border-bottom:1px solid var(--line);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);position:relative;z-index:40;min-width:0}
header .brand{min-width:0;width:auto;max-width:none;flex-shrink:0;overflow:visible}header .brand strong{font-size:21px;font-weight:680;letter-spacing:-.6px;overflow:visible;line-height:1.2}header .brand .brand-studio{display:inline-block;font-size:8px;margin:0 0 0 9px;letter-spacing:2px;vertical-align:middle;color:var(--cyan);font-weight:650}header .brand .brand-caption{display:block!important;font-size:9px;letter-spacing:1.8px;margin-top:6px;color:var(--muted);line-height:1}
.header-divider{height:25px;width:1px;background:var(--line)}.breadcrumb{display:flex;align-items:center;gap:13px;color:var(--muted);font-size:11px}.breadcrumb .icon{width:12px;height:12px}.breadcrumb b{color:var(--text);font-weight:500}
.header-spacer{flex:1;min-width:0}.project-pill{display:flex!important;background:transparent;border:0;padding:6px 0;gap:10px;font-size:11px;color:var(--muted);max-width:330px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-pill .icon{width:15px;height:15px;color:var(--cyan)}
.original-status{display:none!important}.demo-pill{font-size:10px;padding:7px 10px;border:1px solid var(--line);border-radius:7px;color:var(--muted);background:var(--panel);display:flex;align-items:center;gap:7px;white-space:nowrap}.demo-pill i{width:5px;height:5px;border-radius:50%;background:#b99a58}
.workspace{padding:0 28px 28px;overflow:auto;min-height:0;scrollbar-gutter:stable;min-width:0}.page-head{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:28px 0 24px;margin:0}.eyebrow{font-size:9px;letter-spacing:2.1px;color:var(--muted);font-weight:600;margin-bottom:8px;line-height:1.3}.page-head h1{margin:0;font-size:29px;font-weight:620;letter-spacing:1px;line-height:1.4}.page-head p{margin:9px 0 0;color:var(--muted);font-size:11px;line-height:1.8}.head-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.quiet-label{font-size:10px;color:var(--muted);margin-right:8px}.live-indicator{display:flex;align-items:center;gap:8px;color:var(--cyan);font-size:11px}.live-indicator i{height:6px;width:6px;background:var(--cyan);border-radius:50%;box-shadow:0 0 0 4px var(--soft-accent)}
.btn,.mini-btn,.detail-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:35px;border:1px solid transparent;background:var(--cyan);color:var(--panel);font-size:11px;padding:9px 14px;border-radius:8px;font-weight:500;box-shadow:none;backdrop-filter:none;white-space:nowrap;line-height:1.5}.btn:hover,.mini-btn:hover,.detail-btn:hover{background:var(--cyan2);border-color:transparent;box-shadow:0 3px 9px rgba(16,73,51,.08)}
.btn.secondary,.mini-btn,.detail-btn{background:var(--glass-solid);border:1px solid var(--line);color:var(--text)}.btn.secondary:hover,.mini-btn:hover,.detail-btn:hover{background:var(--soft-accent);border-color:var(--line2);color:var(--cyan)}.btn.blue{background:var(--soft-accent);color:var(--cyan);border-color:var(--line2)}.btn.danger{background:transparent;color:var(--danger);border-color:var(--line)}.btn.danger:hover{border-color:var(--danger);background:rgba(205,105,100,.05)}
.tag{display:inline-flex;align-items:center;white-space:nowrap;background:var(--soft-accent);color:var(--cyan);border:0;border-radius:5px;padding:4px 7px;font-size:9px;font-weight:500;line-height:1.4}.tag.muted{background:var(--panel2);color:var(--muted);border:1px solid var(--line)}
.card,.glass-panel,.metric,.wave-card{background:var(--glass);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;overflow:hidden;min-width:0}.glass-panel{backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}
.card-head{padding:19px 20px;min-height:57px;border-bottom:1px solid var(--line)}.card-head h2,.section-title h3{font-size:13px;font-weight:600;color:var(--text);margin:0;letter-spacing:.4px;text-transform:none}.card-body{padding:18px 20px}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px}.metrics .metric{padding:22px 22px 19px;position:relative;background:var(--glass)}.metric .v{font-size:29px;line-height:1.2;letter-spacing:-.8px;font-weight:560;color:var(--text);font-variant-numeric:tabular-nums}.metric .k{font-size:11px;color:var(--muted);margin-top:10px}.metric .sub{font-size:10px;color:var(--muted);margin-top:9px;line-height:1.5}.metric-icon{position:absolute;right:19px;top:21px;width:32px;height:32px;display:grid;place-items:center;background:var(--panel2);color:var(--cyan);border:1px solid var(--line);border-radius:10px}.metric-icon .icon{width:17px;height:17px}
.field label,.binding-field label{display:block;font-size:11px;color:var(--muted);margin-bottom:8px;line-height:1.4}.field input,.field select,.field textarea,.binding-field input,.binding-field select,.search input,.monitor-toolbar select{background:var(--input);border:1px solid var(--line);color:var(--text);font-size:12px;padding:10px 11px;border-radius:8px;outline:none;box-shadow:none;min-height:36px;width:100%;transition:border-color .18s,box-shadow .18s}.field textarea{resize:vertical;line-height:1.9}.field input:focus,.field select:focus,.field textarea:focus,.binding-field input:focus,.search input:focus{border-color:var(--cyan);box-shadow:0 0 0 3px var(--soft-accent)}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.75}.form-row{gap:12px;margin-bottom:14px}.btnrow{gap:8px;margin-top:12px}.muted{color:var(--muted)!important}
.studio-footer{display:flex;align-items:center;justify-content:space-between;padding:0 28px;border-top:1px solid var(--line);font-size:9px;color:var(--muted);gap:15px;background:var(--glass);position:relative;z-index:20;letter-spacing:.2px}.studio-footer>span{display:flex;align-items:center;gap:7px}.studio-footer i{height:4px;width:4px;display:inline-block;background:var(--muted);border-radius:50%}.footer-right{font-size:8px;letter-spacing:1.1px}.footer-right b{font-size:8px;font-weight:400;letter-spacing:0;border:1px solid var(--line);border-radius:4px;padding:1px 4px}.footer-divider{height:10px;width:1px;background:var(--line);margin:0 5px}
/* Spatial workspace. Bright controls frame an intentionally dark terrain. */
body[data-page="3d_observation"] .app{grid-template-rows:76px 119px minmax(0,1fr) 32px}.observation-head{padding:24px 28px 21px}.observation-head p{margin-top:6px}.observation-head h1{font-size:27px}.observation-head .eyebrow{margin-bottom:5px}
.main{display:grid;grid-template-columns:224px minmax(0,1fr) 284px;gap:16px;padding:0 28px 22px;min-height:0}
.main>aside{position:static;width:auto;min-height:0;overflow:auto;border:0;box-shadow:none;scrollbar-gutter:auto;background:transparent}.main>aside.left{display:flex;flex-direction:column;gap:16px}.main>aside.right{border:1px solid var(--line);background:var(--glass);box-shadow:var(--shadow)}
.section{padding:20px 18px;border-bottom:1px solid var(--line)}.left .section{flex-shrink:0;border-bottom:1px solid var(--line)}.section:last-child{border-bottom:0}.left .section:last-child{border:1px solid var(--line)}.section-title{margin-bottom:18px;gap:8px}.section-title h3{font-size:12px}.metric-grid{gap:0;row-gap:22px}.metric-grid .metric{background:transparent;border:0;padding:0;box-shadow:none;border-radius:0}.metric-grid .v{font-size:27px;font-weight:530;letter-spacing:-.8px}.metric-grid .k{font-size:10px;margin-top:8px}.metric-grid .metric:nth-child(even){padding-left:10px}.metric-grid .metric:nth-child(3) .v{font-size:22px;line-height:1.47}.metric-grid .metric:first-child .v{color:var(--cyan)}
.device{grid-template-columns:30px minmax(0,1fr) auto;gap:8px;padding:13px 0;border-bottom:1px solid var(--line)}.device:last-child{padding-bottom:0}.device-icon{width:28px;height:30px;border:0;border-radius:8px;color:var(--cyan);background:var(--soft-accent)}.device-icon .icon{width:15px;height:15px}.device strong{font-size:10px;font-weight:600}.device small{font-size:8px;line-height:1.6;margin-top:4px}.signal{font-size:9px;white-space:nowrap;color:var(--cyan)}.health{height:4px;border:0;background:var(--panel3);margin-top:10px}.health i{background:var(--cyan2);border-radius:9px}
.left [style*="color:#b8ccd4"]{color:var(--muted)!important;font-size:10px!important;line-height:1.6}.left [style*="float:right"]{font-weight:500}
.viewport{min-width:0;min-height:350px;border-radius:16px;border:1px solid #203e3d;overflow:hidden;background:#102a2b;box-shadow:inset 0 0 0 1px rgba(255,255,255,.02);isolation:isolate;color:#e5f2ec}
#scene{display:block;width:100%;height:100%;position:absolute;inset:0;touch-action:none}
.scene-label{position:absolute;left:24px;top:24px;z-index:2;display:flex;align-items:center;gap:8px;pointer-events:none;flex-wrap:wrap}.scene-label b{font-size:9px;letter-spacing:2px;color:#c2d9d1;font-weight:500}.scene-label>span:last-child{font-size:9px;color:#769d90;flex-basis:100%;margin-top:0;padding-left:13px}.scene-live-dot{width:5px;height:5px;border-radius:50%;background:#80c9ac}
.viewport .topbar{top:83px;left:18px;right:18px;gap:8px;z-index:3;flex-wrap:wrap;align-items:flex-start}.toolgroup{background:rgba(20,47,45,.44);border:1px solid rgba(194,221,209,.18);border-radius:9px;padding:4px;gap:1px;box-shadow:0 5px 20px rgba(0,0,0,.05);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.toolbtn{display:inline-flex;align-items:center;gap:4px;padding:7px 8px;border-radius:6px;color:#a5c1b7;font-size:10px;white-space:nowrap}.toolbtn .icon{width:13px;height:13px}.toolbtn.active,.toolbtn:hover{color:#e0f3eb;background:rgba(167,214,193,.16)}.scene-badge{position:absolute;top:77px;left:4px;pointer-events:none;padding:0;background:transparent;border:0;font-size:9px;color:#769c8f;box-shadow:none;backdrop-filter:none}
.viewport .hud{left:20px;bottom:24px;gap:0;border:1px solid rgba(185,218,204,.18);border-radius:10px;background:rgba(21,49,45,.46);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);z-index:2;padding:14px 0}.hud-card{min-width:92px;padding:0 15px;background:transparent;border:0;border-right:1px solid rgba(191,220,206,.15);border-radius:0;box-shadow:none;backdrop-filter:none}.hud-card:last-child{border:0}.hud-card .v{font-size:20px;font-weight:500;color:#e0f2e9;letter-spacing:-.4px}.hud-card .k{font-size:8px;color:#8bab9c;margin-top:7px}.viewport .legend{right:18px;bottom:24px;font-size:9px;color:#a0b9af;background:rgba(21,49,45,.43);border:1px solid rgba(185,218,204,.17);backdrop-filter:blur(5px);padding:12px;border-radius:9px;z-index:2}.legend>div:first-child{color:#c4d7ce!important;font-size:9px}.legend-row{font-size:8px;gap:6px;margin:6px 0}.legend-dot{width:5px;height:5px}.viewport .legend-dot[style*="var(--cyan)"]{background:#7fceb0!important}
.scene-compass{position:absolute;right:23px;top:23px;display:flex;align-items:center;flex-direction:column;gap:4px;color:#adccc0;z-index:2;pointer-events:none}.scene-compass span{font-size:10px;letter-spacing:1px}.scene-interaction{position:absolute;left:22px;bottom:123px;display:flex;align-items:center;gap:7px;font-size:8px;color:#75998a;z-index:2;pointer-events:none}.scene-interaction i{width:2px;height:2px;background:#779b8d;border-radius:50%}
.node-list{max-height:216px;scrollbar-gutter:stable}.node-item{padding:10px 9px;border:1px solid transparent;background:transparent;border-bottom:1px solid var(--line);border-radius:6px;margin-bottom:1px}.node-item strong{font-size:11px;font-weight:560;letter-spacing:.2px}.node-item small{font-size:8px;color:var(--muted);margin-top:5px;line-height:1.6}.node-item.active,.node-item:hover{background:var(--soft-accent);border-color:var(--line2)}.node-state{font-size:9px;color:var(--cyan)}.empty{color:var(--muted);border:1px dashed var(--line);padding:20px 13px;font-size:10px;line-height:1.8;background:var(--panel2)}
.mode-tip{bottom:125px;background:rgba(25,51,43,.9);color:#b4e4ca;border:1px solid rgba(149,200,174,.3);z-index:5}.measure-label{background:#243e33;color:#ffdfa6;border:1px solid rgba(228,190,102,.5)}
body.focus-mode .main{grid-template-columns:minmax(0,1fr)}body.focus-mode .main>aside{display:none!important}body.focus-mode .viewport{min-height:300px}
/* Live monitoring */
.plan-section{height:340px;margin:0 0 28px;border:1px solid #25413e;border-radius:16px;background:#102a2b;overflow:hidden;box-shadow:var(--shadow)}.plan-section:after{display:none}.plan-overlay{left:24px;right:24px;top:23px}.plan-title{padding:0;background:transparent;border:0;backdrop-filter:none;box-shadow:none;color:#e2eee8}.plan-title strong{font-size:14px;font-weight:500;letter-spacing:.4px}.plan-title span{color:#8ea99d;font-size:9px;margin-top:8px}.plan-stats{gap:0;border:1px solid rgba(195,218,207,.13);border-radius:9px;background:rgba(33,58,51,.62);backdrop-filter:blur(20px);padding:9px 0}.plan-stat{border:0;border-right:1px solid rgba(193,216,206,.15);border-radius:0;background:none;min-width:90px;padding:2px 17px;backdrop-filter:none}.plan-stat:last-child{border:0}.plan-stat b{font-size:21px;font-weight:500;color:#e5f2ec;letter-spacing:-.5px}.plan-stat small{font-size:8px;color:#93b2a1;margin-top:5px;display:block}.plan-actions .btn{min-height:28px;background:rgba(24,51,44,.72);border-color:rgba(157,199,175,.18);color:#abd4c0;font-size:9px;padding:5px 9px}.plan-hint,.plan-scale{border:0;box-shadow:none;backdrop-filter:none;background:none;color:#8aac9b;bottom:20px;font-size:9px;padding:0}.plan-scale{left:24px}.plan-hint{right:24px}.monitor-head{margin:0 0 16px;align-items:center}.monitor-head h2{font-size:17px;font-weight:600;margin:0 0 7px;color:var(--text)}.monitor-head p{font-size:10px}.monitor-meta{gap:7px}
.monitor-toolbar{padding:11px 14px;margin-bottom:18px;gap:14px;border:1px solid var(--line);background:var(--glass);border-radius:10px}.toolbar-label{font-size:10px;color:var(--muted);margin-right:5px}.toolbar-group{gap:6px}.channel-btn{font-size:10px;padding:6px 10px;border-radius:6px;min-height:28px;background:var(--panel2);color:var(--muted);border-color:var(--line)}.channel-btn.active{background:var(--soft-accent);color:var(--cyan);border-color:var(--line2)}.monitor-toolbar select{padding:5px 9px;font-size:10px;min-height:30px;width:auto}.monitor-toolbar .btn{font-size:10px;min-height:30px;padding:5px 10px}.wave-grid{gap:18px}.wave-card{background:var(--glass)}.wave-card-head{height:63px;padding:0 18px;background:var(--glass);border-bottom:1px solid var(--line)}.wave-id{gap:10px}.wave-id strong{font-size:12px;font-weight:600;letter-spacing:.5px}.wave-id small{font-size:9px;margin-top:5px;color:var(--muted)}.wave-id .live-dot{width:5px;height:5px;background:var(--cyan);box-shadow:0 0 0 3px var(--soft-accent)}.wave-stats{font-size:9px;gap:11px;color:var(--muted)}.wave-stats b{color:var(--cyan);font-weight:500}.wave-stats>span:nth-child(n+2){display:none}.detail-btn{font-size:9px;padding:4px 9px;min-height:26px;border-radius:6px}.wave-canvas-wrap,.count-3 .wave-canvas-wrap,.count-4 .wave-canvas-wrap{height:225px}.wave-legend{font-size:9px;gap:12px;left:14px;top:10px;color:var(--muted)}.wave-legend .x i{background:var(--cyan)}.wave-legend .y i{background:var(--blue)}.wave-legend .z i{background:var(--yellow)}
.analysis-mask{inset:76px 0 0 var(--rail-width);background:rgba(19,38,30,.23);backdrop-filter:blur(3px);z-index:55}.analysis-drawer{top:76px;bottom:0;background:var(--glass-solid);border-color:var(--line);box-shadow:-12px 0 50px rgba(19,51,36,.12);width:min(460px,94vw);backdrop-filter:blur(25px);z-index:56}.analysis-head{padding:24px;border-color:var(--line)}.analysis-head h2{font-size:20px}.analysis-head small{font-size:10px;line-height:1.8}.analysis-close{background:var(--panel2);color:var(--text);border-color:var(--line)}.analysis-body{padding:22px}.analysis-metric{padding:14px;background:var(--panel2);border:1px solid var(--line)}.analysis-metric b{font-size:17px}.analysis-metric span{font-size:10px;margin-top:7px}.analysis-table th,.analysis-table td{font-size:11px;padding:12px 7px;border-color:var(--line);background:none;color:var(--text)}.spectrum-wrap{background:var(--input);border-color:var(--line)}.detail-note{font-size:10px;line-height:1.8;color:var(--muted)}
/* Node table and its configuration inspector */
.main-grid{grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}.health-card{margin-bottom:20px}.health-card>summary{cursor:pointer;list-style:none;user-select:none;border-bottom:0;min-height:52px;padding:15px 20px}.health-card[open]>summary{border-bottom:1px solid var(--line)}.health-card>summary::-webkit-details-marker{display:none}.health-grid{gap:20px}.health-item{background:transparent;border:0;padding:0 12px}.health-item b{font-size:20px;color:var(--text);font-weight:500}.health-item span{font-size:10px;color:var(--muted)}.health-bar{background:var(--panel3);height:4px}.health-bar i{background:var(--cyan2)}
.node-list-card{height:auto!important;min-height:0!important}.node-list-card>.card-body{overflow:visible!important;display:block;padding:17px 0 0}.node-list-card .toolbar{margin:0 18px 17px;gap:6px;flex-wrap:nowrap}.search{min-width:80px;flex:1}.search input{font-size:11px;padding:9px 11px;min-height:34px}.filterbtn{padding:7px 10px;min-height:32px;border-radius:7px;font-size:10px;color:var(--muted);background:transparent;border-color:transparent}.filterbtn.active{background:var(--soft-accent);color:var(--cyan);border-color:transparent}
.node-list-card .table-wrap{height:auto!important;max-height:none!important;overflow:auto!important;border:0;border-radius:0;min-height:0}.node-table{table-layout:fixed;min-width:760px!important}.node-table th,.node-table td{padding:15px 10px;font-size:10px;line-height:1.7;vertical-align:middle;border-bottom:1px solid var(--line);overflow-wrap:normal}.node-table th{background:var(--panel2);color:var(--muted);font-size:10px;font-weight:500;letter-spacing:0;white-space:nowrap;position:static}.node-table th:first-child,.node-table td:first-child{width:32px}.node-table th:nth-child(2),.node-table td:nth-child(2){width:80px}.node-table th:nth-child(3),.node-table td:nth-child(3){width:65px}.node-table th:nth-child(4),.node-table td:nth-child(4){width:90px}.node-table th:nth-child(5),.node-table td:nth-child(5){width:58px}.node-table th:nth-child(6),.node-table td:nth-child(6){width:52px}.node-table th:nth-child(7),.node-table td:nth-child(7){width:53px}.node-table th:nth-child(8),.node-table td:nth-child(8){width:82px}.node-table th:nth-child(9),.node-table td:nth-child(9){width:134px}.node-table th:nth-child(10),.node-table td:nth-child(10){width:110px}
.node-table td b{font-weight:600;font-size:10px}.node-table td .muted{font-size:9px;line-height:1.8}.node-table tbody tr:hover{background:var(--hover)}.node-table tbody tr.selected{background:var(--soft-accent);box-shadow:inset 2px 0 var(--cyan)}.check{height:14px;width:14px;border:1px solid var(--line2);background:var(--panel);border-radius:4px;vertical-align:middle;cursor:pointer}.check:checked{border-color:var(--cyan);background:var(--cyan)}.check:checked:after{color:var(--panel);font-size:10px}.state{font-size:9px;color:var(--cyan);white-space:nowrap}.state:before{width:5px;height:5px;box-shadow:none;background:var(--cyan)}.state.warn{color:var(--yellow)}.state.warn:before{background:var(--yellow)}.state.bad{color:var(--danger)}.state.bad:before{background:var(--danger)}.health-pills{gap:4px}.hp{font-size:7px;border:0;padding:3px 4px;background:var(--soft-accent);color:var(--cyan)}.hp.bad{background:rgba(206,105,100,.09);color:var(--danger)}.hp.warn{background:rgba(190,154,73,.1);color:var(--yellow)}
.config-card{position:static!important;overflow:hidden!important;border-radius:14px}.config-card>.card-body{padding:18px}.selection-box{border-color:var(--line);background:var(--panel2);border-radius:9px;padding:13px;font-size:11px;color:var(--text)}.selection-box strong{font-size:11px;color:var(--text)}.selection-box small{font-size:10px;color:var(--muted);line-height:1.8}.config-card .field{margin-bottom:13px}.config-card .form-row{margin-bottom:0;gap:12px}.config-card .btn{font-size:11px;padding:10px;white-space:normal}.config-note,.hint,.batch-hint{font-size:10px!important;line-height:1.8!important;color:var(--muted)!important}.config-preview{background:var(--input);border-color:var(--line);color:var(--text);font-size:11px;line-height:1.8;padding:13px;border-radius:9px}.binding-panel{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:14px;margin-top:20px}.binding-title{font-size:12px;color:var(--text);margin-bottom:13px}.binding-title b,.binding-title strong{font-size:12px;color:var(--text)}.binding-grid{gap:12px;grid-template-columns:1fr 1fr}.binding-field.full{grid-column:1/-1}.binding-field label{font-size:10px}.binding-field input,.binding-field select{font-size:11px;min-height:35px;background:var(--panel)}.binding-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}.binding-actions .btn{font-size:10px;min-height:33px;padding:8px}.binding-actions .btn:last-child{grid-column:1/-1}.binding-status{font-size:10px;line-height:1.8;background:var(--panel);border:1px solid var(--line);color:var(--muted);padding:10px;border-radius:7px;overflow-wrap:anywhere}.binding-status.ok{color:var(--cyan)}.binding-status.bad{color:var(--danger)}.batch-binding{border-color:var(--line);padding-top:13px;margin-top:14px}.batch-binding summary{font-size:11px;color:var(--text)}.batch-binding summary:after{font-size:9px}.batch-inner{padding-top:13px!important}
.verify-table,.verify-wrap,.log-list{border-color:var(--line);color:var(--text)}.verify-row{font-size:9px;background:var(--panel2);border-color:var(--line)}.stage{font-size:9px}.stage.ok{color:var(--cyan)}.stage.bad{color:var(--danger)}.log-item{background:var(--panel2);border-color:var(--line);font-size:10px;line-height:1.7;color:var(--muted)}
/* Archive */
.archive-grid{grid-template-columns:minmax(250px,.9fr) minmax(360px,1.5fr) minmax(270px,1fr);gap:20px}.stack{gap:20px}.archive-grid .field{margin-bottom:18px}.archive-grid .kv{padding:12px 0;border-bottom:1px solid var(--line);font-size:11px}.kv span{color:var(--muted)}.kv b{color:var(--text);font-weight:500;font-size:11px}.scheme-grid{gap:12px}.scheme{border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:14px;display:flex;flex-direction:column;align-items:flex-start}.scheme strong{font-size:12px;color:var(--text);font-weight:600;line-height:1.7}.scheme p{font-size:10px;line-height:1.9;color:var(--muted);flex:1;margin:8px 0 15px}.scheme .mini-btn{font-size:10px;min-height:29px;padding:5px 9px}.scheme-art{height:54px;width:100%;border-radius:6px;overflow:hidden;background:var(--panel2);margin-bottom:14px;color:var(--cyan)}.scheme-art svg{width:100%;height:100%}.timeline-item{border-color:var(--line);padding:0 0 17px 16px}.timeline-item:before{background:var(--cyan);box-shadow:0 0 0 4px var(--soft-accent)}.timeline-item strong{font-size:11px;color:var(--text)}.timeline-item p{font-size:10px;line-height:1.8;color:var(--muted)}.timeline-item time{font-size:9px;color:var(--muted)}.archive-item{background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:14px;margin-bottom:10px}.archive-item strong{font-size:12px;color:var(--text)}.archive-item small,.archive-item p{font-size:10px;line-height:1.8;color:var(--muted)}pre,.json-preview{background:var(--input)!important;color:var(--muted)!important;border:1px solid var(--line)!important;border-radius:9px!important;font-size:10px!important;line-height:1.8!important;padding:16px!important;scrollbar-width:thin;max-height:350px}.empty-state{border-color:var(--line);background:var(--glass);color:var(--muted);border-radius:14px;min-height:260px}.empty-state b{color:var(--text);font-size:18px}.empty-state span{font-size:12px}.empty-icon{background:var(--soft-accent);border:0;color:var(--cyan)}
/* Dialogs, feedback and smaller screens */
.toast{position:fixed!important;top:91px;left:calc(50% + 44px);z-index:90;background:var(--glass-solid);color:var(--text);border:1px solid var(--line2);padding:13px 19px;font-size:12px;border-radius:9px;box-shadow:0 8px 35px rgba(20,60,40,.13);backdrop-filter:blur(20px);max-width:min(540px,85vw);line-height:1.7;text-align:center}.help-dialog{border:1px solid var(--line);border-radius:18px;background:var(--panel);color:var(--text);padding:30px;width:min(490px,90vw);box-shadow:0 35px 100px rgba(0,0,0,.2)}.help-dialog::backdrop{background:rgba(20,40,31,.25);backdrop-filter:blur(7px)}.help-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.help-dialog h2{margin:0;font-size:23px;font-weight:600}.help-dialog p{font-size:12px;line-height:1.9;color:var(--muted);margin:15px 0}.icon-button{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:8px}.help-row{display:flex;gap:18px;padding:13px 0;border-bottom:1px solid var(--line)}.help-row>b{color:var(--cyan);font-size:13px;font-weight:500;padding-top:2px}.help-row strong{font-size:12px}.help-row p{margin:5px 0 0;font-size:11px}.help-note{padding:13px 15px;background:var(--soft-accent);border-radius:8px;margin-top:20px;font-size:11px;color:var(--cyan);line-height:1.8}
[data-theme=dark] .btn:not(.secondary):not(.danger):not(.blue){color:#102a21}[data-theme=dark] .scheme-art{background:#1c302d}[data-theme=dark] .card,[data-theme=dark] .metric,[data-theme=dark] .wave-card{border-color:var(--line)}
@media(min-width:1750px){.main{grid-template-columns:254px minmax(0,1fr) 310px}.section{padding:23px}.main-grid{grid-template-columns:minmax(0,1fr) 370px}.workspace{padding-left:36px;padding-right:36px}.viewport .hud-card{min-width:120px}}
@media(max-width:1380px){:root{--rail-width:78px}header{gap:17px;padding:0 22px}.studio-rail nav{padding:0 7px}.studio-rail .navbtn.active:after{right:-7px}.workspace{padding-left:22px;padding-right:22px}.main{padding-left:22px;padding-right:22px;grid-template-columns:204px minmax(0,1fr) 263px;gap:12px}.section{padding:17px 15px}.main>aside.left{gap:12px}.metric-grid .v{font-size:25px}.main .form-row{gap:9px}.main .field input,.main .field select{font-size:11px;padding:9px}.viewport .legend{display:none}.scene-badge{top:82px}.topbar .toolgroup:nth-child(2){margin-left:0}.quiet-label{display:none}.main-grid{grid-template-columns:minmax(0,1fr) 310px;gap:16px}.metrics{gap:14px}.metrics .metric{padding:19px}.metric .v{font-size:26px}.metric-icon{right:15px;width:27px;height:27px}.archive-grid{grid-template-columns:minmax(220px,.9fr) minmax(300px,1.3fr) minmax(230px,1fr);gap:16px}.archive-grid .card-body{padding:16px}.card-head{padding:17px}.wave-stats>span{display:none}.breadcrumb{font-size:10px}.project-pill{font-size:10px}}
@media(max-width:1180px){.main{grid-template-columns:minmax(0,1fr) 270px}.main>aside.left{display:none}.main>aside.right{position:static;top:auto;bottom:auto;width:auto;display:block}.brand-caption{display:block!important}.breadcrumb,.header-divider{display:none}.archive-grid{grid-template-columns:minmax(230px,.9fr) minmax(340px,1.5fr)}.archive-grid>.stack:last-child{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr}.main-grid{grid-template-columns:minmax(0,1fr) 300px}.head-actions{gap:7px}.head-actions .btn{font-size:10px;padding:8px 10px}.metrics .metric{padding:18px 15px}.metric-icon{display:none}.health-grid{grid-template-columns:repeat(3,1fr)}.plan-stats .plan-stat:first-child{display:block}.plan-section{height:330px}.wave-card-head{padding:0 13px}.wave-id small{font-size:8px}}
@media(max-width:900px){:root{--rail-width:70px}.rail-logo{width:36px;height:36px;margin-top:20px}.rail-section-label{font-size:6px;letter-spacing:.6px}.studio-rail nav{padding:0 5px}.studio-rail .navbtn{width:60px;font-size:9px}.studio-rail .navbtn.active:after{right:-5px}header{height:70px;padding:0 20px;gap:14px}.app{grid-template-rows:70px minmax(0,1fr) 32px}body[data-page="3d_observation"] .app{grid-template-rows:70px 112px minmax(0,1fr) 32px}.project-pill{max-width:245px;display:flex!important}.brand strong{font-size:19px!important}.brand-studio{display:none!important}.demo-pill{font-size:9px;padding:6px 8px}.page-head{padding-top:25px}.page-head h1{font-size:26px}.page-head p{font-size:10px}.main{grid-template-columns:minmax(0,1fr) 248px;gap:10px;padding:0 16px 18px}.main>aside.right{display:block}.workspace{padding-left:20px;padding-right:20px}.observation-head{padding:20px}.main-grid{grid-template-columns:1fr}.node-table{min-width:820px!important}.config-card{margin-top:0}.metrics{gap:10px}.metric .v{font-size:23px}.metrics .metric{padding:17px 12px}.metric .k{font-size:10px}.metric .sub{font-size:9px}.archive-grid{grid-template-columns:1fr}.archive-grid>.stack:last-child{grid-column:auto}.scheme-grid{grid-template-columns:1fr 1fr}.wave-grid{grid-template-columns:1fr}.wave-stats>span:first-child{display:inline}.plan-overlay{left:20px;right:20px;top:20px}.plan-stats{display:flex}.plan-stats .plan-stat{min-width:75px;padding:2px 10px}.plan-stats .plan-stat:first-child{display:none}.plan-section{height:320px}.analysis-mask,.analysis-drawer{top:70px}.footer-right{font-size:7px;letter-spacing:.5px}.footer-divider,.footer-right b{display:none}.studio-footer{padding:0 20px}.health-grid{gap:10px}.health-item{padding:5px}.head-actions{flex-wrap:wrap}.viewport .topbar{left:13px;right:13px}.toolbtn{font-size:9px;padding:6px}.toolbtn .icon{display:none}.viewport .hud{left:13px;bottom:20px;padding:12px 0}.hud-card{padding:0 10px;min-width:72px}.hud-card .v{font-size:16px}.hud-card .k{font-size:7px}.scene-label{left:17px;top:20px}.scene-compass{right:14px}}
@media(max-width:650px){:root{--rail-width:0px}html,body{overflow:hidden}.studio-rail{inset:auto 0 0;width:auto;height:65px;flex-direction:row;border:0;border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.rail-logo,.rail-section-label,.rail-bottom{display:none}.studio-rail nav{flex-direction:row;justify-content:space-around;gap:0;padding:4px 10px}.studio-rail .navbtn{width:65px;gap:5px;padding:7px 0;font-size:9px}.studio-rail .navbtn .icon{width:18px;height:18px}.studio-rail .navbtn.active:after{display:none}.app{height:calc(100dvh - 65px);margin:0;grid-template-rows:66px minmax(0,1fr) 27px}header{height:66px;padding:0 18px;gap:10px}header .brand strong{font-size:18px!important}.brand-caption{font-size:8px!important;letter-spacing:1px!important}.project-pill{display:none!important}.demo-pill{font-size:9px}.mobile-theme{display:grid!important}.page-head{padding:23px 0 21px;gap:12px;align-items:flex-start}.page-head h1{font-size:25px}.page-head p{max-width:230px;line-height:1.8;margin-top:8px}.eyebrow{font-size:8px;letter-spacing:1.6px}.head-actions{max-width:135px;justify-content:flex-end}.head-actions .btn{padding:7px 8px;min-height:31px;font-size:9px;gap:4px}.head-actions .btn .icon{width:13px;height:13px}.workspace{padding:0 16px 22px}.metrics{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}.metrics .metric{padding:17px}.metric .v{font-size:25px}.metric .k{font-size:10px}.metric .sub{font-size:9px}.studio-footer{font-size:8px;padding:0 16px}.footer-right{display:none!important}.main{display:grid;grid-template-columns:1fr;grid-template-rows:minmax(380px,52vh) auto;gap:16px;overflow:auto;padding:0 16px 20px}.main>aside.right{overflow:visible;min-height:0;display:block}.main>aside.left{display:none}.viewport{min-height:380px}.observation-head{padding:19px 16px;gap:8px}.observation-head .head-actions{align-self:center}.observation-head p{max-width:none}.observation-head h1{font-size:25px}body[data-page="3d_observation"] .app{grid-template-rows:66px 116px minmax(0,1fr) 27px}.main .section{padding:20px}.main .node-list{max-height:240px}.main .form-row{gap:15px}.main .field label{font-size:11px}.main .field input,.main .field select{font-size:13px}.scene-badge{top:48px}.scene-label>span:last-child{font-size:8px}.scene-compass{top:17px}.scene-compass svg{height:25px}.viewport .topbar{top:74px}.scene-interaction{font-size:8px;bottom:105px}.viewport .hud{padding:12px 0}.hud-card{padding:0 14px;min-width:80px}.hud-card .v{font-size:18px}.hud-card .k{font-size:8px}.plan-section{height:330px;margin-bottom:22px}.plan-overlay{left:17px;right:17px;top:18px;gap:12px}.plan-title strong{font-size:12px}.plan-title span{font-size:8px;max-width:140px;line-height:1.7}.plan-stats{padding:7px 0}.plan-stat b{font-size:17px}.plan-stat small{font-size:7px}.plan-stats .plan-stat{min-width:64px;padding:2px 9px}.plan-actions{gap:5px}.plan-actions .btn{font-size:8px;padding:4px 7px;min-height:24px}.plan-hint{display:none}.plan-scale{left:18px;font-size:8px}.monitor-head{gap:10px}.monitor-head h2{font-size:16px}.monitor-head p{font-size:9px;line-height:1.8;max-width:250px}.monitor-meta{display:none}.monitor-toolbar{gap:9px;padding:11px;align-items:center}.toolbar-group{gap:4px}.toolbar-label{font-size:9px;margin:0 3px 0 0}.channel-btn{font-size:9px;padding:5px 8px}.monitor-toolbar select{font-size:9px}.toolbar-spacer{display:none}.wave-card-head{height:66px;padding:0 12px}.wave-id small{font-size:8px}.wave-stats>span{display:none!important}.wave-id strong{font-size:12px}.wave-canvas-wrap{height:224px!important}.archive-grid>.stack:last-child{display:flex}.scheme-grid{gap:10px}.scheme{padding:12px}.scheme-art{height:45px}.card-head{padding:17px}.card-head h2{font-size:12px}.card-body{padding:17px}.node-list-card .toolbar{margin:0 12px 13px}.filterbtn{padding:7px 8px;font-size:9px}.health-grid{grid-template-columns:1fr 1fr}.health-item b{font-size:19px}.health-item span{font-size:9px}.analysis-mask{inset:66px 0 65px}.analysis-drawer{top:66px;bottom:65px;width:100%}.toast{top:77px;left:50%;font-size:11px;padding:11px 15px}.help-dialog{padding:23px}.live-indicator{font-size:9px;line-height:1.5;white-space:nowrap;padding-top:15px}.page-head .head-actions .quiet-label{display:none}body.focus-mode .main{grid-template-rows:1fr}.node-table{min-width:820px!important}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}}
@supports not (backdrop-filter:blur(2px)){.glass-panel,header,.card,.metric,.wave-card{background:var(--panel)}}
/* Secondary controls use the same light/dark tokens as primary surfaces. */
.config-card .section-title{font-size:11px;color:var(--text);letter-spacing:.2px;line-height:1.6;margin:16px 0 13px}
.target-box{background:var(--soft-accent);border:1px solid var(--line2);border-radius:9px;padding:14px;margin-bottom:18px}.target-top strong{font-size:12px;color:var(--text)}.target-box small{font-size:10px;color:var(--muted);line-height:1.8}
.advanced-grid{gap:12px}.toggle-row{gap:10px}.toggle-field{background:var(--input);border:1px solid var(--line);color:var(--text);font-size:10px;border-radius:8px;padding:10px}.toggle-field input{accent-color:var(--cyan)}
.config-byte{background:var(--panel2);border:1px solid var(--line);color:var(--muted);padding:9px 10px;border-radius:7px;font-size:10px}.config-byte b{font-weight:600;color:var(--cyan)}
.command-preview{background:var(--input);border:1px solid var(--line);color:var(--muted);font-size:10px;line-height:1.8;padding:12px;border-radius:8px;word-break:normal;overflow-wrap:anywhere}
.note{background:var(--panel2);border:1px solid var(--line);color:var(--muted);font-size:10px;line-height:1.8;padding:12px;border-radius:8px}.binding-box{background:var(--panel2);border:1px solid var(--line);padding:14px;border-radius:10px;margin-top:20px}.binding-title b{color:var(--text);font-size:11px}.mini{background:var(--panel);border:1px solid var(--line);border-radius:7px;color:var(--text);padding:8px 9px;font-size:10px;min-height:32px}.mini:hover{background:var(--soft-accent);border-color:var(--line2);color:var(--cyan)}.mini:disabled{opacity:.4;cursor:not-allowed}.binding-actions .mini:last-child{grid-column:1/-1}.binding-actions .mini:last-child:not(:disabled){color:var(--danger)}
.verify-head{font-size:11px;color:var(--muted);margin-bottom:12px}.verify-wrap{padding:14px;background:var(--panel2);border:1px solid var(--line);border-radius:9px}.verify-row{background:var(--panel);color:var(--muted)}
.archive-card{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:16px;margin-bottom:12px}.archive-card strong{color:var(--text);font-size:12px;font-weight:600}.archive-card small{color:var(--muted);font-size:10px;line-height:1.8}.archive-actions{gap:7px;margin-top:11px}.archive-actions .mini-btn{padding:5px 10px;min-height:29px;font-size:10px}.archive-actions .mini-btn:last-child{color:var(--muted)}
.event{border-color:var(--line);padding:0 0 18px 18px}.event:before{background:var(--cyan);box-shadow:0 0 0 4px var(--soft-accent)}.event strong{font-size:12px;color:var(--text);line-height:1.8}.event p{font-size:10px;color:var(--muted);line-height:1.9;margin-top:6px}.event-meta{font-size:9px;color:var(--muted);margin-bottom:6px}.event-type,.event-source{font-size:8px;background:var(--panel2);color:var(--cyan);border-color:var(--line)}.timeline-empty{padding:14px;background:var(--panel2);color:var(--muted);border:1px dashed var(--line);font-size:11px;line-height:1.9;border-radius:9px}

/* =========================
   v21 readability + theme refinements
   ========================= */
.compact-head{padding:17px 0 15px;min-height:66px}
.compact-head h1{font-size:27px;line-height:1.25}

/* 首页只保留“三维观测”标题，释放垂直空间。 */
body[data-page="3d_observation"] .app{grid-template-rows:76px 64px minmax(0,1fr) 32px}
body[data-page="3d_observation"] .observation-head{padding:8px 28px;min-height:64px;align-items:center}
body[data-page="3d_observation"] .observation-head h1{font-size:27px;line-height:1.2}
body[data-page="3d_observation"] .main{padding-bottom:16px}
body[data-page="3d_observation"] .section{padding:14px 14px}
body[data-page="3d_observation"] .section-title{margin-bottom:12px}
body[data-page="3d_observation"] .metric-grid{row-gap:14px}
body[data-page="3d_observation"] .metric-grid .v{font-size:24px}
body[data-page="3d_observation"] .device{padding:9px 0}
body[data-page="3d_observation"] .device small{margin-top:2px}
body[data-page="3d_observation"] .main .form-row{margin-bottom:9px;gap:8px}
body[data-page="3d_observation"] .main .field label{margin-bottom:5px;font-size:10px}
body[data-page="3d_observation"] .main .field input,
body[data-page="3d_observation"] .main .field select{min-height:32px;padding:7px 8px;font-size:11px}
body[data-page="3d_observation"] .main .btn{min-height:32px;padding:7px 10px;font-size:10px}
body[data-page="3d_observation"] .node-list{max-height:172px}
body[data-page="3d_observation"] .node-item{padding:8px}
body[data-page="3d_observation"] .empty{padding:14px 11px}

/* 三维视图浅色主题：外框、控件以及 WebGL/Canvas 场景同步切换。 */
[data-theme="light"] body[data-page="3d_observation"] .viewport{
 background:#e5efea;border-color:#9fbeb1;color:#153f34;
 box-shadow:inset 0 0 0 1px rgba(255,255,255,.72),0 12px 34px rgba(35,83,65,.09)
}
[data-theme="light"] body[data-page="3d_observation"] .scene-label b{color:#174f3e}
[data-theme="light"] body[data-page="3d_observation"] .scene-label>span:last-child{color:#557b6e}
[data-theme="light"] body[data-page="3d_observation"] .scene-live-dot{background:#087d68;box-shadow:0 0 0 4px rgba(8,125,104,.10)}
[data-theme="light"] body[data-page="3d_observation"] .toolgroup{background:rgba(246,251,248,.72);border-color:#a9c7bb;box-shadow:0 6px 18px rgba(30,78,60,.08);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
[data-theme="light"] body[data-page="3d_observation"] .toolbtn{color:#416b5d}
[data-theme="light"] body[data-page="3d_observation"] .toolbtn.active,
[data-theme="light"] body[data-page="3d_observation"] .toolbtn:hover{color:#075f4d;background:#e1f1eb}
[data-theme="light"] body[data-page="3d_observation"] .scene-badge{color:#416f60;background:rgba(255,255,255,.78);border-color:#ccddd6}
[data-theme="light"] body[data-page="3d_observation"] .viewport .hud{background:rgba(246,251,248,.72);border-color:#a9c7bb;box-shadow:0 5px 18px rgba(30,78,60,.07);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
[data-theme="light"] body[data-page="3d_observation"] .hud-card{border-right-color:#d3e2dc}
[data-theme="light"] body[data-page="3d_observation"] .hud-card .v{color:#153f32}
[data-theme="light"] body[data-page="3d_observation"] .hud-card .k{color:#5f7f73}
[data-theme="light"] body[data-page="3d_observation"] .viewport .legend{color:#345f52;background:rgba(246,251,248,.70);border-color:#a9c7bb;box-shadow:0 5px 18px rgba(30,78,60,.06);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
[data-theme="light"] body[data-page="3d_observation"] .viewport .legend>div:first-child{color:#174f3e!important}
[data-theme="light"] body[data-page="3d_observation"] .scene-compass{color:#2d6654}
[data-theme="light"] body[data-page="3d_observation"] .scene-interaction{color:#587c70}
[data-theme="light"] body[data-page="3d_observation"] .mode-tip{background:rgba(255,255,255,.97);color:#075f4d;border-color:#b9d7cc;box-shadow:0 6px 20px rgba(30,78,60,.08)}

/* 阵列平面视图浅色主题；Canvas 内部颜色由 realtime_monitor.js 同步切换。 */
[data-theme="light"] body[data-page="realtime_monitor"] .plan-section{background:#edf5f1;border-color:#cddfd7;box-shadow:0 8px 28px rgba(39,83,66,.04)}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-title{color:#24473b}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-title span{color:#718e82}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-stats{background:rgba(255,255,255,.76);border-color:rgba(58,103,87,.13)}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-stat{border-right-color:rgba(58,103,87,.12)}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-stat b{color:#24473b}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-stat small{color:#718e82}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-actions .btn{background:rgba(255,255,255,.82);border-color:rgba(53,103,85,.16);color:#166d58}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-actions .btn:not(.secondary){background:#167c65;color:#fff;border-color:#167c65}
[data-theme="light"] body[data-page="realtime_monitor"] .plan-hint,
[data-theme="light"] body[data-page="realtime_monitor"] .plan-scale{color:#68877b}

/* 节点管理：整体放大可读字号，同时保持表格自适应宽度。 */
body[data-page="node_management"] .card-head h2{font-size:14px}
body[data-page="node_management"] .metrics .metric .k{font-size:12px}
body[data-page="node_management"] .metrics .metric .sub{font-size:11px;line-height:1.6}
body[data-page="node_management"] .health-item b{font-size:22px}
body[data-page="node_management"] .health-item span{font-size:11px;line-height:1.5}
body[data-page="node_management"] .node-list-card .toolbar{margin-bottom:15px}
body[data-page="node_management"] .search input{font-size:12px}
body[data-page="node_management"] .filterbtn{font-size:11px}
body[data-page="node_management"] .node-table{min-width:0!important;width:100%}
body[data-page="node_management"] .node-table th,
body[data-page="node_management"] .node-table td{font-size:11.5px;line-height:1.65;padding:14px 9px;white-space:normal;overflow-wrap:anywhere}
body[data-page="node_management"] .node-table th{font-size:11px}
body[data-page="node_management"] .node-table td b{font-size:11.5px}
body[data-page="node_management"] .node-table td .muted{font-size:10.5px;line-height:1.65}
body[data-page="node_management"] .state{font-size:10.5px}
body[data-page="node_management"] .hp{font-size:8.5px;padding:4px 5px}
body[data-page="node_management"] .config-card .section-title{font-size:12.5px}
body[data-page="node_management"] .selection-box,
body[data-page="node_management"] .selection-box strong{font-size:12px}
body[data-page="node_management"] .selection-box small{font-size:11px}
body[data-page="node_management"] .config-card .field label,
body[data-page="node_management"] .binding-field label{font-size:11.5px}
body[data-page="node_management"] .config-card .field input,
body[data-page="node_management"] .config-card .field select,
body[data-page="node_management"] .binding-field input,
body[data-page="node_management"] .binding-field select{font-size:12.5px}
body[data-page="node_management"] .config-note,
body[data-page="node_management"] .hint,
body[data-page="node_management"] .batch-hint,
body[data-page="node_management"] .target-box small,
body[data-page="node_management"] .command-preview,
body[data-page="node_management"] .note,
body[data-page="node_management"] .binding-status,
body[data-page="node_management"] .log-item{font-size:11px!important;line-height:1.75!important}
body[data-page="node_management"] .target-top strong,
body[data-page="node_management"] .binding-title,
body[data-page="node_management"] .binding-title b,
body[data-page="node_management"] .binding-title strong{font-size:12.5px}
body[data-page="node_management"] .toggle-field,
body[data-page="node_management"] .config-byte{font-size:11px}
body[data-page="node_management"] .verify-head{font-size:12px}
body[data-page="node_management"] .verify-row,
body[data-page="node_management"] .stage{font-size:10.5px}
body[data-page="node_management"] .mini,
body[data-page="node_management"] .binding-actions .btn{font-size:11px}

/* 项目档案：表单、方案、审计记录和 JSON 预览统一提升字号。 */
body[data-page="project_archive"] .card-head h2{font-size:14px}
body[data-page="project_archive"] .tag{font-size:10px}
body[data-page="project_archive"] .metrics .metric .k{font-size:12px}
body[data-page="project_archive"] .metrics .metric .sub{font-size:11px;line-height:1.6}
body[data-page="project_archive"] .field label{font-size:12px}
body[data-page="project_archive"] .field input,
body[data-page="project_archive"] .field select,
body[data-page="project_archive"] .field textarea{font-size:13px}
body[data-page="project_archive"] .archive-grid .kv,
body[data-page="project_archive"] .kv b{font-size:12.5px}
body[data-page="project_archive"] .scheme strong{font-size:13px}
body[data-page="project_archive"] .scheme p{font-size:11.5px;line-height:1.8}
body[data-page="project_archive"] .scheme .mini-btn{font-size:11px}
body[data-page="project_archive"] .archive-card strong,
body[data-page="project_archive"] .archive-item strong{font-size:13px}
body[data-page="project_archive"] .archive-card small,
body[data-page="project_archive"] .archive-item small,
body[data-page="project_archive"] .archive-item p{font-size:11px;line-height:1.8}
body[data-page="project_archive"] .event strong,
body[data-page="project_archive"] .timeline-item strong{font-size:12.5px}
body[data-page="project_archive"] .event p,
body[data-page="project_archive"] .timeline-item p{font-size:11px;line-height:1.8}
body[data-page="project_archive"] .event-meta,
body[data-page="project_archive"] .timeline-item time{font-size:10px}
body[data-page="project_archive"] .event-type,
body[data-page="project_archive"] .event-source{font-size:9px}
body[data-page="project_archive"] pre,
body[data-page="project_archive"] .json-preview{font-size:11px!important;line-height:1.75!important}

@media(max-width:900px){
 body[data-page="3d_observation"] .app{grid-template-rows:70px 58px minmax(0,1fr) 32px}
 body[data-page="3d_observation"] .observation-head{padding:7px 20px;min-height:58px}
 .compact-head{padding:15px 0 13px;min-height:60px}
}
@media(max-width:650px){
 body[data-page="3d_observation"] .app{grid-template-rows:66px 54px minmax(0,1fr) 27px}
 body[data-page="3d_observation"] .observation-head{padding:6px 16px;min-height:54px}
 body[data-page="3d_observation"] .observation-head h1{font-size:24px}
 .compact-head{padding:13px 0 11px;min-height:56px}
 .compact-head h1{font-size:24px}
}


/* =========================
   v23 terrain legibility + filled overview rail
   ========================= */
@media(min-width:901px){
  body[data-page="3d_observation"] .main>aside.left{height:100%;overflow:auto;align-self:stretch}
  body[data-page="3d_observation"] .left .array-summary{flex:1 0 138px;min-height:138px;display:flex;flex-direction:column}
  body[data-page="3d_observation"] .left .array-summary .array-summary-grid{flex:1}
}
body[data-page="3d_observation"] .array-summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
body[data-page="3d_observation"] .array-summary-item{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:6px;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:var(--panel2)}
body[data-page="3d_observation"] .array-summary-item span{font-size:9px;color:var(--muted);line-height:1.35}
body[data-page="3d_observation"] .array-summary-item b{font-size:12px;color:var(--text);font-weight:600;line-height:1.35;overflow-wrap:anywhere}
[data-theme="light"] body[data-page="3d_observation"] .array-summary-item{background:#f4f8f6;border-color:#d1e0d9}
[data-theme="light"] body[data-page="3d_observation"] .array-summary-item b{color:#173f34}

/* =========================
   v24 left overview rail: one-screen balanced layout
   No internal scrollbar, no dead blank space.
   ========================= */
@media (min-width:901px){
  body[data-page="3d_observation"] .main>aside.left{
    display:grid;
    grid-template-rows:minmax(0,1.02fr) minmax(0,1.18fr) minmax(0,.98fr) minmax(0,.92fr);
    gap:10px;
    height:100%;
    min-height:0;
    overflow:hidden;
    align-self:stretch;
  }
  body[data-page="3d_observation"] .left .section{
    height:100%;
    min-height:0;
    overflow:hidden;
    padding:clamp(10px,1.35vh,14px) 14px;
    display:block;
  }
  body[data-page="3d_observation"] .left .section-title{
    margin-bottom:clamp(7px,1vh,11px);
  }
  body[data-page="3d_observation"] .left .section-title h3{font-size:11px}

  body[data-page="3d_observation"] .left .metric-grid{
    row-gap:clamp(8px,1.35vh,13px);
  }
  body[data-page="3d_observation"] .left .metric-grid .v{
    font-size:clamp(21px,2.1vh,24px);
    line-height:1.12;
  }
  body[data-page="3d_observation"] .left .metric-grid .metric:nth-child(3) .v{
    font-size:clamp(19px,1.9vh,22px);
    line-height:1.18;
  }
  body[data-page="3d_observation"] .left .metric-grid .k{
    font-size:9px;
    margin-top:clamp(4px,.65vh,7px);
    line-height:1.35;
  }

  body[data-page="3d_observation"] .left .device{
    min-height:0;
    padding:clamp(6px,.9vh,9px) 0;
    grid-template-columns:28px minmax(0,1fr) auto;
  }
  body[data-page="3d_observation"] .left .device-icon{
    width:27px;
    height:28px;
  }
  body[data-page="3d_observation"] .left .device strong{font-size:9.5px;line-height:1.25}
  body[data-page="3d_observation"] .left .device small{font-size:7.5px;line-height:1.35;margin-top:2px}
  body[data-page="3d_observation"] .left .signal{font-size:8.5px}

  body[data-page="3d_observation"] .left .section:nth-child(3) [style*="color:#b8ccd4"]{
    font-size:9px!important;
    line-height:1.35!important;
  }
  body[data-page="3d_observation"] .left .section:nth-child(3) [style*="margin-top:14px"]{
    margin-top:clamp(6px,.9vh,9px)!important;
  }
  body[data-page="3d_observation"] .left .section:nth-child(3) .health{
    margin-top:clamp(5px,.7vh,7px);
    height:4px;
  }

  body[data-page="3d_observation"] .left .array-summary{
    min-height:0;
    display:flex;
    flex-direction:column;
  }
  body[data-page="3d_observation"] .left .array-summary .array-summary-grid{
    flex:1;
    min-height:0;
    gap:6px;
  }
  body[data-page="3d_observation"] .left .array-summary-item{
    min-height:0;
    gap:3px;
    padding:clamp(5px,.75vh,8px) 8px;
  }
  body[data-page="3d_observation"] .left .array-summary-item span{font-size:8px;line-height:1.2}
  body[data-page="3d_observation"] .left .array-summary-item b{font-size:10.5px;line-height:1.2}
}

/* Extra compacting for shorter laptop displays while preserving all four cards. */
@media (min-width:901px) and (max-height:820px){
  body[data-page="3d_observation"] .main>aside.left{gap:8px}
  body[data-page="3d_observation"] .left .section{padding:9px 12px}
  body[data-page="3d_observation"] .left .section-title{margin-bottom:6px}
  body[data-page="3d_observation"] .left .metric-grid{row-gap:7px}
  body[data-page="3d_observation"] .left .metric-grid .v{font-size:20px}
  body[data-page="3d_observation"] .left .metric-grid .metric:nth-child(3) .v{font-size:18px}
  body[data-page="3d_observation"] .left .metric-grid .k{font-size:8px;margin-top:3px}
  body[data-page="3d_observation"] .left .device{padding:5px 0}
  body[data-page="3d_observation"] .left .device-icon{width:25px;height:25px}
  body[data-page="3d_observation"] .left .device small{font-size:7px}
  body[data-page="3d_observation"] .left .section:nth-child(3) [style*="margin-top:14px"]{margin-top:5px!important}
  body[data-page="3d_observation"] .left .section:nth-child(3) .health{margin-top:4px;height:3px}
  body[data-page="3d_observation"] .left .array-summary-item{padding:4px 7px}
  body[data-page="3d_observation"] .left .array-summary-item b{font-size:10px}
}

/* Configuration results fit the existing compact task sidebar. */
body[data-page="node_management"] .verify-row{
  grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;
}
body[data-page="node_management"] .verify-row>b{grid-column:1/-1}
body[data-page="node_management"] .verify-row .stage{line-height:1.5}

#timeWindowControl[hidden],#sampleWindowControl[hidden]{display:none!important}

/* Observation overview spans the bottom of the workspace, below the wider scene and inspector. */
@media(min-width:1181px){
  body[data-page="3d_observation"] .main{
    grid-template-columns:minmax(0,1fr) 284px;
    grid-template-rows:minmax(340px,1fr) auto;
    grid-template-areas:"scene inspector" "overview overview";
    gap:14px 16px;
    overflow:auto;
  }
  body[data-page="3d_observation"] .main>aside.left{
    grid-area:overview;
    grid-template-columns:repeat(4,minmax(0,1fr));
    grid-template-rows:auto;
    height:auto;
    gap:14px;
    overflow:visible;
  }
  body[data-page="3d_observation"] .main>.viewport{grid-area:scene;min-height:340px}
  body[data-page="3d_observation"] .main>aside.right{grid-area:inspector;min-height:0}
  body[data-page="3d_observation"] .left .section{padding:13px 15px}
  body[data-page="3d_observation"] .left .section-title{margin-bottom:9px}
  body[data-page="3d_observation"] .left .metric-grid{row-gap:10px}
  body[data-page="3d_observation"] .left .device{padding:4px 0;grid-template-columns:24px minmax(0,1fr) auto}
  body[data-page="3d_observation"] .left .device-icon{width:24px;height:24px;border-radius:8px}
  body[data-page="3d_observation"] .left .device strong{font-size:10.5px}
  body[data-page="3d_observation"] .left .device small{font-size:8px}
  body[data-page="3d_observation"] .left .array-summary-item{padding:7px 9px}
  body[data-page="3d_observation"] .left .array-summary-item span{font-size:9px}
  body[data-page="3d_observation"] .left .array-summary-item b{font-size:11px}
  body[data-page="3d_observation"].focus-mode .main{
    grid-template-columns:minmax(0,1fr);
    grid-template-rows:minmax(340px,1fr);
    grid-template-areas:"scene";
  }
}
@media(min-width:1680px){
  body[data-page="3d_observation"] .main{grid-template-columns:minmax(0,1fr) 310px}
  body[data-page="3d_observation"].focus-mode .main{grid-template-columns:minmax(0,1fr)}
}

/* Later overview styles must not bring back a third child in the two-column breakpoint. */
@media(max-width:1180px){
  body[data-page="3d_observation"] .main>aside.left{display:none}
}
@media(max-width:650px){
  body[data-page="3d_observation"] .main{
    grid-template-rows:minmax(380px,52vh) max-content;
    align-content:start;
  }
  body[data-page="3d_observation"] .main>aside.right{
    align-self:start;
    height:auto;
    overflow:visible;
  }
}


/* GeoNode brand assets: Logo 1 symbol and Logo 2 wordmark. */
.rail-logo{
  width:52px;height:42px;border-radius:0;background:transparent;
  box-shadow:none;color:inherit;
}
.rail-logo img{display:block;width:100%;height:100%;object-fit:contain}
header .brand{overflow:visible}
header .brand-lockup{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
header .brand-wordmark{display:block;width:150px;height:28px;line-height:0}
header .brand-wordmark img{display:block;width:100%;height:100%;object-fit:contain;object-position:left center}
header .brand .brand-caption{margin-top:0!important;padding-left:2px}
@media(max-width:900px){
  .rail-logo{width:40px;height:36px}
  header .brand-wordmark{width:136px;height:25px}
}
/* Mobile action bars for compact workspace pages. */
@media(max-width:650px){
  body[data-page="project_archive"] .compact-head,
  body[data-page="node_management"] .compact-head{
    flex-direction:column;
    align-items:stretch;
    gap:14px;
    padding-bottom:16px;
  }
  body[data-page="project_archive"] .compact-head>div:first-child,
  body[data-page="node_management"] .compact-head>div:first-child{
    width:100%;
  }
  body[data-page="project_archive"] .compact-head .head-actions,
  body[data-page="node_management"] .compact-head .head-actions{
    display:grid;
    width:100%;
    max-width:none;
    align-items:stretch;
    justify-content:stretch;
    gap:8px;
  }
  body[data-page="project_archive"] .compact-head .head-actions{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  body[data-page="node_management"] .compact-head .head-actions{
    grid-template-columns:repeat(3,minmax(0,1fr));
  }
  body[data-page="project_archive"] .compact-head .head-actions .btn,
  body[data-page="node_management"] .compact-head .head-actions .btn{
    width:100%;
    min-width:0;
    min-height:38px;
    padding:8px 9px;
    font-size:10px;
    gap:5px;
  }
  body[data-page="project_archive"] .compact-head .head-actions .btn .icon,
  body[data-page="node_management"] .compact-head .head-actions .btn .icon{
    width:14px;
    height:14px;
  }
}
