:root{--bg: #eef1f3;--panel: #ffffff;--ink: #172026;--muted: #66737b;--line: #d8dee2;--teal: #0f766e;--teal-dark: #0b4f4a;--amber: #ca8a04;--danger: #dc2626;--warning: #f59e0b;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink)}button,input,select,textarea{font:inherit}button{min-height:34px;padding:0 10px;color:var(--ink);background:#f7f8f9;border:1px solid var(--line);border-radius:7px;cursor:pointer}button:hover{border-color:var(--teal)}button:disabled{cursor:not-allowed}input,select,textarea{width:100%;padding:8px 9px;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:7px}label{display:grid;gap:5px;color:var(--muted);font-size:.82rem;font-weight:700}.app-shell{min-height:100vh;padding:22px}.app-header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:18px;padding:20px 22px;background:var(--panel);border:1px solid var(--line);border-radius:8px}.app-header h1{margin:0;font-size:clamp(1.8rem,4vw,3.6rem);line-height:.95;letter-spacing:0}.eyebrow{margin:0 0 6px;color:var(--teal);font-size:.78rem;font-weight:800;letter-spacing:0;text-transform:uppercase}.header-meta{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.header-meta span,.route-stats span,.inline-list span{padding:6px 8px;background:#eef7f6;border:1px solid #cfe6e3;border-radius:7px;color:var(--teal-dark);font-size:.78rem;font-weight:800}.workspace{display:grid;grid-template-columns:minmax(250px,310px) minmax(460px,1fr) minmax(250px,330px);gap:16px;align-items:start}.sidebar,.canvas-column{display:grid;gap:16px}.panel,.canvas-panel{background:var(--panel);border:1px solid var(--line);border-radius:8px}.panel{display:grid;gap:12px;padding:16px}.panel h2,.canvas-toolbar h2{margin:0;font-size:1rem}.panel p,.canvas-toolbar p,.muted{margin:0;color:var(--muted);font-size:.88rem}.muted-panel{background:#f8fafb}.panel-title-row,.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.button-grid,.segmented,.route-actions{display:flex;flex-wrap:wrap;gap:7px}.segmented button.active,.list-item.active,.route-card.active,.primary-button{color:#fff;background:var(--teal);border-color:var(--teal)}.wide-action{width:100%;justify-content:center;margin-top:2px}.check-row{display:flex;align-items:center;gap:8px;color:var(--ink)}.check-row input{width:auto}.canvas-panel{overflow:hidden}.canvas-toolbar{padding:16px;border-bottom:1px solid var(--line)}.canvas-scroll{width:100%;overflow:auto;padding:16px}.zoom-controls{display:flex;align-items:center;gap:8px;padding:10px 16px;border-bottom:1px solid var(--line);background:#fbfcfd}.zoom-controls span{min-width:48px;color:var(--muted);font-size:.84rem;font-weight:800;text-align:center}.room-canvas{position:relative;overflow:hidden;border:2px solid #1f2933;background-image:linear-gradient(#dfe5e8 1px,transparent 1px),linear-gradient(90deg,#dfe5e8 1px,transparent 1px);-webkit-user-select:none;user-select:none}.route-svg{position:absolute;inset:0;z-index:12;pointer-events:auto}.route-line{cursor:pointer;opacity:.95}.segment-label.editable{cursor:pointer;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.clearance-zone,.equipment-block,.port-dot,.riser-marker,.node-dot,.node-label,.dim-line,.dim-label{position:absolute}.guide-line{position:absolute;z-index:65;pointer-events:none;background:#0f766e94}.guide-line.vertical{top:0;bottom:0;width:1px}.guide-line.horizontal{left:0;right:0;height:1px}.iso-equipment.faded,.iso-route.faded,.iso-node.faded,.iso-riser.faded{opacity:.18}.iso-equipment.selected .iso-equipment-edge,.iso-equipment.selected .iso-equipment-top,.iso-route.selected line,.iso-route.selected polygon,.iso-riser.selected line{filter:drop-shadow(0 0 5px rgba(15,118,110,.6))}.iso-route.selected polygon{opacity:1}.iso-flow-pulse{stroke-dasharray:5 13;animation:flowPulse 1.1s linear infinite;opacity:.88;pointer-events:none}.iso-electric-pulse{stroke-dasharray:1.5 9;animation:electricPulse .85s linear infinite;opacity:.9;pointer-events:none}.iso-control-panel{fill:#0f766e;stroke:#14532d;stroke-width:1.8;filter:drop-shadow(0 0 5px rgba(20,184,166,.55))}.iso-cooling-hole{fill:#263238;stroke:#0f172a;stroke-width:1.4}.iso-cooling-flow{stroke:#67e8f952;stroke-width:2.2;stroke-linecap:round;stroke-dasharray:2 10;animation:coolingFlow 2.8s linear infinite;opacity:.42;filter:blur(.2px)}.iso-cooling-flow.reverse{stroke:#7dd3fc42;stroke-width:2.6}.iso-loss-marker{pointer-events:none}.iso-loss-marker circle{fill:#f59e0b29;stroke:#d97706d1;stroke-width:2;stroke-dasharray:3 3}.iso-loss-marker text{fill:#b45309;font-size:9px;font-weight:900;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.iso-loss-marker.tee-loss circle{fill:#dc262621;stroke:#dc2626c7}@keyframes flowPulse{to{stroke-dashoffset:-19}}@keyframes electricPulse{to{stroke-dashoffset:-12}}@keyframes coolingFlow{to{stroke-dashoffset:-23}}.clearance-zone{z-index:5;pointer-events:none;background:#1d4ed814;border:1px dashed rgba(29,78,216,.45)}.clearance-zone.warning{background:#f59e0b24;border-color:#f59e0bb3}.equipment-block{z-index:30;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;text-align:center;background:#dde3e6;border:1px solid #222;cursor:grab}.equipment-block.selected{background:#ffd08a;border:2px solid #111}.equipment-block.danger{border:2px solid var(--danger)}.equipment-block.warning{border:2px solid var(--warning)}.equipment-block strong,.equipment-block span,.equipment-block small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}.port-dot,.node-dot{z-index:80;width:12px;height:12px;min-height:0;padding:0;display:block;border:2px solid #fff;border-radius:999px;box-shadow:0 0 0 1px #17202659}.port-dot.inactive,.node-dot.inactive{opacity:.16;filter:grayscale(1);pointer-events:none}.riser-marker{z-index:88;width:26px;height:26px;min-height:0;padding:0;display:grid;place-items:center;background:#fff;border:3px solid currentColor;border-radius:999px;box-shadow:0 4px 12px #17202629;font-size:11px;font-weight:900}.riser-marker.active{background:#172026;color:#fff!important}.riser-marker.inactive{opacity:.35}.node-dot{z-index:90;width:16px;height:16px;min-height:0;background:#fff}.node-dot.selected,.node-dot.tee{background:#111}.node-dot.z-node{background:#fff;box-shadow:0 0 0 3px #0f766e33}.iso-preview{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;height:min(68vh,720px);min-height:430px;padding:16px;background:radial-gradient(circle at 16px 16px,rgba(23,32,38,.06) 1px,transparent 1.5px) 0 0 / 28px 28px,#f8fafb}.iso-preview.panning{cursor:grabbing}.iso-preview svg{width:100%;height:100%;display:block}.iso-floor-surface{fill:#ffffffd6;stroke:#17202652;stroke-width:2}.iso-equipment-side{stroke:#263238;stroke-width:1.3}.iso-equipment-side.side-a{fill:#c8d2d6}.iso-equipment-side.side-b{fill:#b4c0c5}.iso-equipment-side.side-c{fill:#a8b5bb}.iso-equipment-side.side-d{fill:#d8e0e4}.iso-equipment-top{fill:#f6c873;stroke:#172026;stroke-width:1.4}.iso-equipment-edge{stroke:#172026b8;stroke-width:1.2}.iso-photo-faces{pointer-events:none}.iso-photo-face{opacity:1}.iso-equipment-decals{pointer-events:none}.iso-decal.dryer-shell{fill:#e8f3f7;stroke:#245266}.iso-decal.dryer-top{fill:#dbeef5;stroke:#245266}.iso-decal.dryer-blue-cap,.iso-decal.dryer-blue-column{fill:#1f7a8c;stroke:#123f4a}.iso-decal.dryer-roof-vent,.iso-decal.dryer-vent{fill:#263943;stroke:#0f2d3b}.iso-decal.dryer-display{fill:#101820;stroke:#245266}.iso-decal.panel-top,.iso-decal.panel-door{fill:#2f3a40;stroke:#111827}.iso-decal.panel-meter{fill:#111827;stroke:#6b7280}.iso-decal.panel-breaker-strip{fill:#d7dee3;stroke:#4b5563}.iso-tank-body{fill:#d9e8ee;stroke:#263238;stroke-width:1.4}.iso-tank-top{fill:#f8fbfc;stroke:#263238;stroke-width:1.4}.iso-tank-highlight{stroke:#ffffffb8;stroke-width:2;stroke-linecap:round;fill:none}.iso-tank-side-shadow{stroke:#2632383d;stroke-width:8;stroke-linecap:round;fill:none}.iso-tank-bottom-curve{fill:none;stroke:#263238;stroke-width:1.4}.iso-tank-top-back{fill:none;stroke:#2632385c;stroke-width:1;stroke-dasharray:3 3}.iso-tank-band{stroke:#2632387a;stroke-width:2.2;stroke-linecap:round}.iso-tank-gauge{fill:#f8fafc;stroke:#263238;stroke-width:1.2}.iso-tank-label{fill:#f6c873;stroke:#92400e;stroke-width:.8}.iso-tank-leg{stroke:#263238;stroke-width:2;stroke-linecap:round}.iso-technician{pointer-events:none;stroke:#172026;stroke-width:1.15;stroke-linecap:round;stroke-linejoin:round}.iso-technician .shadow{fill:#0f172a29;stroke:none}.iso-technician.billboard image{filter:drop-shadow(0 2px 3px rgba(15,23,42,.22))}.iso-technician .head,.iso-technician .neck,.iso-technician .skin-limb{fill:url(#tech-face-grad)}.iso-technician .shirt,.iso-technician .shirt-sleeve{fill:url(#tech-shirt-grad)}.iso-technician .overall-body,.iso-technician .overall-limb{fill:url(#tech-overall-grad)}.iso-technician .overall-highlight{fill:#ffffff3d;stroke:#ffffff4d}.iso-technician .helmet,.iso-technician .helmet-brim{fill:url(#tech-helmet-grad)}.iso-technician .helmet-ridge{fill:none;stroke:#c2410c;stroke-width:.95}.iso-technician .joint{fill:#e5e7eb;stroke:#8b949e;stroke-width:.85}.iso-technician .strap{fill:none;stroke:#12415e;stroke-width:1.7}.iso-technician .hair,.iso-technician .eye{fill:#172026}.iso-technician .nose,.iso-technician .smile{fill:none;stroke:#6f4431;stroke-width:.85}.iso-technician .boot{fill:#27323a;stroke-width:.85}.iso-technician .glove{fill:#dc2626;stroke:#7f1d1d}.iso-technician .toolbox{fill:url(#tech-toolbox-grad);stroke:#9a3412}.iso-technician .toolbox-side{fill:#b94d16;stroke:#7c2d12}.iso-technician .toolbox-handle{fill:none;stroke:#9a3412;stroke-width:1.2}.iso-technician .rear{opacity:.72}.iso-face-decals{pointer-events:none}.iso-decal{stroke:#263238;stroke-width:.85}.iso-decal.top-band{fill:#e8b85f}.iso-decal.yellow-shell{fill:#f6bd12;stroke:#7c4a03;stroke-width:.8}.iso-decal.yellow-door{fill:#ffc400;stroke:#7c4a03;stroke-width:.95}.iso-decal.left-door{fill:#ffc20a}.iso-decal.center-door{fill:#ffcf28}.iso-decal.top-shadow-band{fill:#e0a900;stroke:#9a6600}.iso-decal.recessed-yellow{fill:#f7c342;stroke:#7c4a03}.iso-decal.roof-service{fill:#ffe09b}.iso-decal.roof-vent{fill:#5d6d60}.iso-decal.warning-label{fill:#facc15;stroke:#92400e}.iso-decal.model-label{fill:#0f172a;stroke:#0f172a}.iso-decal.louver-frame{fill:#415158}.iso-decal.dark-control-column,.iso-decal.dark-service-strip{fill:#25323a;stroke:#111827;stroke-width:1.05}.iso-decal.display-panel{fill:#101820;stroke:#d1d5db;stroke-width:.8}.iso-decal.vent-panel{fill:#33444d;stroke:#111827}.iso-decal.black-wordmark{fill:#111827;stroke:#111827}.iso-decal.access-panel{fill:#edf4f6}.iso-decal.badge-panel{fill:#f6c873}.iso-decal.latch-panel{fill:#0f766e}.iso-decal-fastener{fill:#263238;stroke:#f8fafc;stroke-width:.7}.iso-decal-button.red{fill:#dc2626;stroke:#7f1d1d;stroke-width:.7}.iso-decal-button.green{fill:#16a34a;stroke:#14532d;stroke-width:.7}.iso-decal-text{fill:#facc15;font-weight:900;stroke:none;paint-order:normal;pointer-events:none}.iso-decal-text.small{font-size:3px}.iso-decal-line{stroke:#263238;stroke-width:1.05;stroke-linecap:round}.iso-decal-line.soft{stroke:#647278}.iso-decal-line.panel-joint{stroke:#a16207;stroke-width:.9}.iso-decal-line.yellow-groove{stroke:#8a5a00;stroke-width:1}.iso-decal-line.light{stroke:#dce3e7}.iso-decal-line.louver{stroke:#dce3e7;stroke-width:1.35}.iso-equipment text,.iso-route text,.iso-node text,.iso-inline-component text{font-size:6px;font-weight:800;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.iso-port{stroke:#fff;stroke-width:2}.iso-riser{cursor:pointer}.iso-riser line{paint-order:stroke;stroke-width:7}.iso-riser text{font-size:6px;font-weight:900;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.iso-collector-hit{stroke:transparent;cursor:pointer}.iso-collector-hit.compatible:hover{stroke:#1d4ed82e}.iso-port.inactive,.iso-node.inactive{opacity:.16}.riser-section{display:grid;gap:14px;padding:16px;border-top:1px solid var(--line);background:#fbfcfd}.riser-section h2,.riser-section h3{margin:0}.riser-section p{margin:4px 0 0;color:var(--muted);font-size:.86rem}.riser-section-body{display:grid;grid-template-columns:minmax(220px,280px) minmax(260px,1fr);gap:16px;align-items:stretch}.riser-z-fields{display:grid;grid-template-columns:repeat(2,minmax(90px,140px));gap:10px;margin-top:10px}.riser-elevation{width:100%;min-height:260px;background:linear-gradient(#e7ecef 1px,transparent 1px) 0 0 / 100% 34px,#fff;border:1px solid var(--line);border-radius:8px}.riser-elevation text{fill:#172026;font-size:11px;font-weight:800}.riser-tap-list{display:grid;align-content:start;gap:10px}.riser-tap-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;background:#fff;border:1px solid var(--line);border-radius:8px}.riser-tap-row div{display:grid;gap:2px}.riser-tap-row span{color:var(--muted);font-size:.8rem}.node-label{z-index:95;color:#111;font-size:10px;pointer-events:none;white-space:nowrap}.dim-line{z-index:60;background:#111;pointer-events:none}.dim-label{z-index:70;transform:translate(-50%,-50%);padding:2px 5px;background:#fff;border:1px solid #333;font-size:10px;white-space:nowrap;pointer-events:none}.stack-list{display:grid;gap:8px}.list-item{display:grid;gap:3px;height:auto;min-height:56px;justify-items:start;text-align:left}.list-item span{color:var(--muted);font-size:.78rem}.route-list-panel{overflow:hidden}.route-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}.route-card{display:grid;gap:9px;padding:12px;border:1px solid var(--line);border-radius:8px}.route-card.active p,.route-card.active label{color:#ffffffd6}.route-card-head{display:flex;justify-content:space-between;border:0;background:transparent;padding:0;min-height:0}.route-card p{margin:0;color:var(--muted);font-size:.82rem}.route-stats,.inline-list,.result-grid{display:flex;flex-wrap:wrap;gap:7px}.inline-list span{display:inline-flex;align-items:center;gap:6px}.inline-list button{width:20px;min-height:20px;padding:0}.result-grid{margin-top:4px}.result-grid span{color:var(--muted)}.result-grid strong{margin-right:10px}.result-grid p{flex-basis:100%;margin-top:8px}@media(max-width:1180px){.workspace{grid-template-columns:1fr}.sidebar{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}}@media(max-width:680px){.app-shell{padding:12px}.app-header,.canvas-toolbar,.panel-title-row{align-items:flex-start;flex-direction:column}.field-grid{grid-template-columns:1fr}}
