:root{color:#c9d4df;background:#111927;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0}button{font:inherit}button{border:1px solid #3a4e65;background:#1e2d42;color:#b3c4d4;cursor:pointer}button:hover{border-color:#5a7a95;background:#253650}.app-shell{position:relative;height:100vh;min-height:620px;overflow:hidden;background:#111927}.app-shell.landing-mode{background:radial-gradient(circle at 72% 42%,rgba(20,178,235,.14),transparent 30%),radial-gradient(circle at 12% 84%,rgba(244,165,28,.12),transparent 24%),#09111d}.layers-shell,.properties-panel,.viewport-panel,.diagnostics{min-width:0}.layers-shell,.properties-panel{position:absolute;z-index:4;top:58px;max-height:calc(100vh - 74px);background:#161e2e;border:1px solid #29344a;border-radius:6px;box-shadow:0 16px 48px #00000052;border-color:#29344a;overflow:auto}.layers-shell{left:12px;width:min(320px,calc(50vw - 24px))}.properties-panel{right:12px;width:min(380px,calc(50vw - 24px))}.semantic-validation-panel{position:absolute;z-index:5;top:58px;left:min(344px,calc(50vw + 4px));width:min(460px,max(320px,calc(100vw - 748px)));max-height:calc(100vh - 74px);overflow:auto;border:1px solid #29344a;border-radius:6px;background:#161e2ef5;box-shadow:0 16px 48px #00000057}.panel-heading,.viewport-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:44px;padding:0 14px;border-bottom:1px solid #29344a;color:#6a8499;font-size:13px;font-weight:700;text-transform:uppercase}.panel-heading strong,.viewport-toolbar span{color:#c9d4df;font-size:12px;text-transform:none}.panel-heading-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0}.panel-hide-button{min-height:24px;border-radius:4px;padding:0 8px;font-size:11px;font-weight:800}.tree-row{display:grid;grid-template-columns:72px 1fr;width:100%;min-height:36px;align-items:center;gap:8px;border:0;border-bottom:1px solid #1e2a3a;background:transparent;color:#b3c4d4;cursor:pointer;text-align:left}.tree-row:hover,.tree-row.selected{background:#1b3254}.tree-row.selected{box-shadow:inset 3px 0 #f4a51c}.node-type{color:#5a7a95;font-size:12px}.viewport-panel{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;grid-template-rows:48px 1fr;background:#111927}.landing-mode .viewport-panel{grid-template-rows:1fr}.landing-mode .viewport-toolbar{display:none}.landing-mode .viewport{opacity:1}.landing-mode .viewport canvas,.landing-mode .text-overlay,.landing-mode .text-overlay-diagnostics{opacity:0}.landing-mode .viewport:before,.landing-mode .viewport:after{position:absolute;z-index:2;top:0;right:0;bottom:0;left:0;content:"";pointer-events:none}.landing-mode .viewport:before{background:linear-gradient(90deg,#09111dfa,#09111da3 32%,#09111d1a 60%),linear-gradient(0deg,rgba(9,17,29,.95) 0%,transparent 32%,rgba(9,17,29,.45) 100%)}.landing-mode .viewport:after{background:repeating-linear-gradient(90deg,rgba(82,174,218,.12) 0 1px,transparent 1px 88px),repeating-linear-gradient(0deg,rgba(82,174,218,.1) 0 1px,transparent 1px 88px);-webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 28%,#000 100%);mask-image:linear-gradient(90deg,transparent 0%,#000 28%,#000 100%)}.viewport-toolbar{position:relative;z-index:5;justify-content:flex-start;border-bottom:1px solid #29344a;background:#161e2ef5;overflow-x:auto}.scene-summary{display:flex;min-width:260px;flex-direction:column;gap:2px;padding-right:14px;border-right:1px solid #29344a}.scene-summary strong{color:#c9d4df;font-size:12px;line-height:1.1;overflow:hidden;text-overflow:ellipsis;text-transform:none;white-space:nowrap}.scene-summary span{color:#6a8499;font-size:11px;font-weight:700;line-height:1.1;text-transform:none;white-space:nowrap}.toolbar-actions{display:flex;flex:1;align-items:center;gap:8px;padding-left:10px;white-space:nowrap}.toolbar-actions button,.section-heading button{min-height:28px;border-radius:4px;padding:0 10px;font-size:12px;font-weight:700}.toolbar-actions button.active{border-color:#1a6ea8;background:#0b3360;color:#6ab4e8}.toolbar-actions button.warning{border-color:#8c6a22;background:#3a2c11;color:#ffd37a}.file-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.toolbar-divider{display:inline-block;width:1px;height:20px;margin:0 4px;padding:0;border:0;background:#29344a}.toolbar-label{padding:0 4px;border:0;color:#5a7a95;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}.dxf-drop-overlay{position:absolute;z-index:20;top:58px;right:12px;bottom:12px;left:12px;display:grid;place-items:center;border:2px dashed #6ab4e8;border-radius:6px;background:#09111db8;color:#d7ecff;pointer-events:none}.dxf-drop-overlay strong{border:1px solid #375f7d;border-radius:4px;background:#161e2ef5;padding:12px 18px;font-size:13px;text-transform:uppercase}.demo-landing{position:absolute;z-index:7;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:space-between;gap:48px;padding:clamp(40px,8vw,128px);pointer-events:none}.demo-landing:before,.demo-landing:after{position:absolute;content:"";pointer-events:none}.demo-landing:before{right:-5vw;top:13vh;width:min(820px,58vw);height:min(560px,62vh);transform:rotate(-7deg) skew(-9deg);border:1px solid rgba(102,201,255,.34);background:linear-gradient(90deg,transparent 0 7%,rgba(0,191,255,.85) 7% 7.25%,transparent 7.25% 100%),linear-gradient(0deg,transparent 0 18%,rgba(0,191,255,.7) 18% 18.25%,transparent 18.25% 100%),radial-gradient(circle at 28% 68%,transparent 0 18%,rgba(0,191,255,.95) 18.2% 18.6%,transparent 18.8% 100%),linear-gradient(135deg,transparent 0 42%,rgba(0,191,255,.8) 42.1% 42.45%,transparent 42.55% 100%),repeating-linear-gradient(90deg,rgba(102,201,255,.16) 0 1px,transparent 1px 64px),repeating-linear-gradient(0deg,rgba(102,201,255,.12) 0 1px,transparent 1px 64px),#0818265c;box-shadow:0 0 0 1px #66c9ff14,0 0 80px #0096dc2e,inset 0 0 80px #008cdc1f}.demo-landing:after{right:19vw;bottom:16vh;width:340px;height:340px;transform:rotate(-7deg);border:1px solid rgba(102,201,255,.22);border-radius:50%;box-shadow:0 0 0 72px #66c9ff05,0 0 0 146px #66c9ff03,0 0 70px #0096dc29}.demo-copy{position:relative;z-index:1;display:grid;width:min(760px,58vw);gap:20px;pointer-events:auto}.demo-landing h1{margin:0;max-width:13ch;color:#f4f8fc;font-size:clamp(48px,7.2vw,112px);font-weight:850;line-height:.92;text-shadow:0 18px 48px rgba(0,0,0,.58)}.demo-landing p{margin:0;max-width:680px;color:#a9c0d2;font-size:clamp(16px,1.25vw,22px);font-weight:600;line-height:1.45}.demo-landing button,.scene-error button{width:fit-content;min-height:42px;border-radius:4px;padding:0 18px;font-size:13px;font-weight:800}.demo-landing button{border-color:#1b86c9;background:#0b5c9d;color:#f4f8fc;box-shadow:0 14px 36px #0066b447}.demo-version{color:#66c9ff;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.demo-metrics{position:relative;z-index:1;display:grid;width:min(240px,22vw);gap:14px;align-self:flex-end;margin-bottom:8vh;pointer-events:none}.demo-metrics span{display:grid;gap:2px;padding:14px 0;border-top:1px solid rgba(102,201,255,.32);color:#8ca6b8;font-size:12px;font-weight:800;text-transform:uppercase}.demo-metrics strong{color:#f4f8fc;font-size:34px;line-height:1}.scene-loading{position:absolute;z-index:7;left:50%;top:50%;display:grid;gap:8px;width:min(420px,calc(100vw - 32px));padding:22px;transform:translate(-50%,-50%);border:1px solid #29344a;border-radius:6px;background:#0d1522f0;box-shadow:0 16px 48px #00000061}.scene-loading span{color:#66c9ff;font-size:12px;font-weight:800;text-transform:uppercase}.scene-loading strong{overflow-wrap:anywhere;color:#f4f8fc;font-size:18px}.scene-error{position:absolute;z-index:8;right:12px;bottom:12px;display:grid;width:min(460px,calc(100vw - 24px));gap:8px;padding:14px;border:1px solid #bd3f32;border-radius:6px;background:#30141af5;box-shadow:0 16px 48px #00000061}.scene-error strong{color:#ffc9c2}.scene-error span{color:#f0b4ad;font-size:13px;line-height:1.4}.viewport{min-height:0;position:relative;isolation:isolate}.viewport canvas{position:relative;z-index:0;display:block;width:100%;height:100%}.text-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;overflow:hidden}.text-overlay-label{position:absolute;top:0;left:0;transform-origin:0 100%;max-width:min(260px,28vw);max-height:1.3em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;color:#f7da73;font-family:Segoe UI,Helvetica Neue,Arial,sans-serif;text-shadow:0 0 2px #02060b,0 0 4px #02060b,0 0 6px #02060b;-webkit-user-select:none;user-select:none;pointer-events:none;will-change:transform}.text-overlay-label.attdef{color:#9bc4e8;font-style:italic}.semantic-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;pointer-events:none}.semantic-overlay text{fill:#f5d26c;paint-order:stroke;stroke:#02060bf5;stroke-width:4px;font-size:10px;font-weight:800;pointer-events:none}.semantic-association-lines line{stroke:#76b9ff57;stroke-dasharray:5 5;stroke-width:1.4;pointer-events:none}.semantic-association-lines line.selected{stroke:#ffd46ad1;stroke-width:2}.semantic-association-lines line.ambiguous{stroke:#ffca5794;stroke-dasharray:2 5}.semantic-association-lines line.unlinked{stroke:#e6695c8a;stroke-dasharray:1 6}.semantic-device-candidate-bounds rect{fill:#2f97de14;stroke:#4fbeff8a;stroke-width:1.5;cursor:pointer;pointer-events:auto}.semantic-device-candidate-bounds rect:hover,.semantic-device-candidate-bounds rect.selected{fill:#ffbe481f;stroke:#ffc85a;stroke-width:2.5}.semantic-station-markers g,.semantic-device-label-markers g,.semantic-unknown-labels circle{cursor:pointer;pointer-events:auto}.semantic-station-markers circle{fill:#f4a51c;stroke:#111927;stroke-width:2}.semantic-station-markers g.selected circle{fill:#fff2a6;stroke:#f4a51c;stroke-width:3}.semantic-device-label-markers rect{fill:#5ac8fa;stroke:#111927;stroke-width:1.5}.semantic-device-label-markers g.ambiguous rect{fill:#ffc857}.semantic-device-label-markers g.unlinked rect{fill:#e6695c}.semantic-device-label-markers g.selected rect{fill:#fff2a6;stroke:#f4a51c;stroke-width:2.5}.semantic-unknown-labels circle{fill:#bec6d294;stroke:#111927;stroke-width:1.5}.semantic-unknown-labels circle.selected{fill:#fff;stroke:#f4a51c;stroke-width:2.5}.semantic-source-markers rect{fill:#fff;stroke:#111927;stroke-width:1.5;pointer-events:none}.semantic-selected-bounds{fill:none;stroke:#ffe27d;stroke-dasharray:8 4;stroke-width:2.5;pointer-events:none}.text-overlay-diagnostics{position:absolute;top:56px;right:8px;z-index:2;display:grid;grid-auto-rows:min-content;gap:2px;padding:8px 10px;border:1px solid #29344a;border-radius:4px;background:#161e2eeb;color:#b3c4d4;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:11px;line-height:1.3;pointer-events:none}.text-overlay-diagnostics strong{color:#c9d4df;font-size:11px;text-transform:uppercase}.properties-panel dl{display:grid;grid-template-columns:88px minmax(0,1fr);gap:10px 12px;padding:14px;margin:0;border-bottom:1px solid #29344a}.selection-summary{display:grid;gap:4px;padding:14px;border-bottom:1px solid #29344a;background:#111927}.selection-summary strong{min-width:0;overflow-wrap:anywhere;color:#f4a51c;font-size:14px}.selection-summary span{min-width:0;overflow:hidden;color:#8aa2b6;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.properties-panel dt{color:#6a8499;font-size:12px;font-weight:700;text-transform:uppercase}.properties-panel dd{min-width:0;margin:0;overflow-wrap:anywhere}.metadata{padding:16px}.metadata h2,.section-heading h2{margin:0 0 12px;font-size:14px}.metadata-row{display:grid;grid-template-columns:minmax(90px,.8fr) minmax(0,1.2fr);gap:12px;padding:8px 0;border-top:1px solid #1e2a3a;font-size:13px}.metadata-row span{color:#6a8499}.metadata-row strong{min-width:0;overflow-wrap:anywhere;font-weight:600}.layer-panel{padding:0 14px 14px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.layer-list{max-height:calc(100vh - 168px);overflow:auto;border:1px solid #29344a;border-radius:4px}.layer-row{display:grid;grid-template-columns:22px minmax(0,1fr) 58px;gap:8px;align-items:center;min-height:32px;padding:6px 8px;border-bottom:1px solid #1e2a3a;color:#b3c4d4;font-size:12px}.layer-row:last-child{border-bottom:0}.layer-row.selected{background:#2d2510;box-shadow:inset 3px 0 #f4a51c}.layer-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layer-row strong{color:#6a8499;font-weight:700;text-align:right}.semantic-filter-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px;border-bottom:1px solid #29344a}.semantic-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:12px;border-bottom:1px solid #29344a}.semantic-summary-grid span{display:grid;gap:2px;min-width:0;padding:8px;border:1px solid #29344a;border-radius:4px;background:#111927;color:#6a8499;font-size:10px;font-weight:800;text-transform:uppercase}.semantic-summary-grid strong{color:#f4f8fc;font-size:17px;line-height:1}.semantic-overlay-legend{display:flex;flex-wrap:wrap;gap:8px 12px;padding:9px 12px;border-bottom:1px solid #29344a;color:#8aa2b6;font-size:11px}.semantic-overlay-legend span{display:inline-flex;align-items:center;gap:6px;min-width:0}.legend-line,.legend-marker{display:inline-block;width:28px;height:0;border-top:2px solid #76b9ff}.legend-line.ambiguous{border-top-style:dashed;border-color:#ffc857}.legend-marker.unlinked{width:10px;height:10px;border:0;border-radius:2px;background:#e6695c}.semantic-filter-grid label{display:grid;gap:5px;color:#6a8499;font-size:11px;font-weight:800;text-transform:uppercase}.semantic-filter-grid input,.semantic-filter-grid select{min-width:0;height:30px;border:1px solid #34445c;border-radius:4px;background:#111927;color:#c9d4df;font:inherit;font-size:12px}.semantic-filter-grid input[type=search]{padding:0 8px}.semantic-filter-grid input[type=range]{accent-color:#f4a51c}.semantic-filter-grid .semantic-check{grid-template-columns:18px 1fr;align-items:center;text-transform:none}.semantic-filter-grid .semantic-check input{height:auto}.semantic-panel-actions{display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;border-bottom:1px solid #29344a}.semantic-panel-actions button{min-height:28px;border-radius:4px;padding:0 10px;font-size:12px;font-weight:700}.semantic-panel-actions button.active{border-color:#8c6a22;background:#3a2c11;color:#ffd37a}.semantic-action-divider{flex-basis:100%;height:0}.semantic-copy-status{align-self:center;color:#9ff2d4;font-size:12px;font-weight:700}.semantic-validation-lists{display:grid;gap:12px;padding:12px}.semantic-validation-lists section{min-width:0}.semantic-list-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.semantic-validation-lists h3{margin:0;color:#c9d4df;font-size:12px;text-transform:uppercase}.semantic-list-heading span{min-width:0;overflow:hidden;color:#6a8499;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.semantic-validation-lists p{margin:0;color:#6a8499;font-size:12px}.semantic-validation-lists ol{display:grid;gap:6px;max-height:220px;margin:0;padding:0;overflow:auto;list-style:none}.semantic-validation-lists li{min-width:0}.semantic-validation-lists li button{display:grid;width:100%;min-height:44px;gap:3px;padding:8px;border-radius:4px;text-align:left}.semantic-validation-lists li button.selected{border-color:#f4a51c;background:#2f2816;color:#ffe2a0}.semantic-validation-lists li button strong,.semantic-validation-lists li button span,.semantic-validation-lists li button em{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semantic-row-top{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.semantic-validation-lists li button strong{color:#f4f8fc;font-size:12px}.semantic-status{justify-self:end;padding:2px 5px;border:1px solid #34445c;border-radius:3px;color:#dce8f2;font-size:9px;font-weight:850;letter-spacing:.02em}.semantic-status.linked{border-color:#287d65;color:#9ff2d4}.semantic-status.ambiguous{border-color:#8c6a22;color:#ffd37a}.semantic-status.unlinked{border-color:#8d3830;color:#ffb7ad}.semantic-status.overridden{border-color:#8060aa;color:#d6c6ff}.semantic-validation-lists li button span,.semantic-validation-lists li button em{color:#8aa2b6;font-size:11px;font-style:normal}.semantic-validation-lists li button .semantic-status{color:#dce8f2;font-size:9px;font-weight:850}.semantic-validation-lists li button .semantic-status.linked{color:#9ff2d4}.semantic-validation-lists li button .semantic-status.ambiguous{color:#ffd37a}.semantic-validation-lists li button .semantic-status.unlinked{color:#ffb7ad}.semantic-validation-lists li button .semantic-status.overridden{color:#d6c6ff}.semantic-outlier-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.semantic-outlier-grid strong{color:#c9d4df;font-size:11px;text-transform:uppercase}.semantic-outlier-grid ol{max-height:120px;padding-top:6px}.semantic-outlier-grid li{color:#8aa2b6;font-size:11px;overflow-wrap:anywhere}.semantic-override-controls{display:grid;gap:8px}.semantic-full-text{max-height:9em;overflow:auto;white-space:pre-wrap}.semantic-override-state{color:#8aa2b6;font-size:12px}.semantic-override-controls label{display:grid;gap:4px;color:#6a8499;font-size:11px;font-weight:800;text-transform:uppercase}.semantic-override-controls select{min-width:0;height:30px;border:1px solid #34445c;border-radius:4px;background:#111927;color:#c9d4df;font:inherit;font-size:12px}.semantic-override-controls button{min-height:28px;border-radius:4px;font-size:12px;font-weight:700}.diagnostics{position:absolute;z-index:6;left:12px;right:12px;bottom:12px;display:grid;grid-template-columns:minmax(220px,300px) minmax(260px,1fr) minmax(220px,340px);gap:18px;max-height:min(360px,calc(100vh - 92px));padding:14px;border:1px solid #29344a;border-radius:6px;background:#161e2ef7;box-shadow:0 16px 48px #00000061;overflow:auto}.diagnostics.valid{box-shadow:inset 4px 0 #1a9e6e}.diagnostics.invalid{box-shadow:inset 4px 0 #bd3f32}.diagnostics-summary{display:flex;flex-direction:column;gap:6px}.diagnostics span,.diagnostics li{color:#6a8499;font-size:13px}.diagnostics ol{margin:0;padding-left:18px;overflow:auto}.bounds-diagnostics,.semantic-diagnostics,.diagnostics-tree{min-height:0;overflow:auto;border:1px solid #29344a;border-radius:4px}.bounds-diagnostics p,.semantic-diagnostics p{margin:12px;color:#6a8499;font-size:13px}.semantic-diagnostics h3{margin:10px 14px 6px;color:#c9d4df;font-size:12px;text-transform:uppercase}.bounds-diagnostics ol,.semantic-diagnostics ol{padding:10px 14px 10px 28px}.bounds-diagnostics li,.semantic-diagnostics li{margin-bottom:8px;overflow-wrap:anywhere}.semantic-diagnostics li span{display:block;margin-top:3px}.diagnostics-tree .panel-heading{position:sticky;z-index:1;top:0;background:#161e2e}@media(max-width:900px){.app-shell{height:100vh;min-height:520px}.viewport-panel{grid-template-rows:auto 1fr}.viewport-toolbar{align-items:flex-start;flex-direction:column;min-height:92px;padding:8px 10px}.scene-summary{width:100%;border-right:0;border-bottom:1px solid #29344a;padding:0 0 8px}.toolbar-actions{width:100%;padding-left:0;overflow-x:auto}.demo-landing{top:124px}.layers-shell,.properties-panel,.semantic-validation-panel{top:auto;bottom:12px;width:calc(50vw - 18px);max-height:min(48vh,420px)}.layers-shell{left:12px}.properties-panel{right:12px}.semantic-validation-panel{left:12px;right:12px;bottom:calc(48vh + 22px);width:auto;max-height:min(38vh,360px)}.diagnostics{top:104px;bottom:12px;grid-template-columns:1fr}}@media(max-width:640px){.layers-shell,.properties-panel,.semantic-validation-panel{left:12px;right:12px;width:auto;max-height:36vh}.layers-shell{bottom:calc(36vh + 20px)}.properties-panel{bottom:12px}.semantic-validation-panel{bottom:calc(72vh + 28px);max-height:min(30vh,300px)}.diagnostics,.semantic-filter-grid,.semantic-summary-grid,.semantic-outlier-grid{grid-template-columns:1fr}}
