: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:#0f766e57;stroke:#14532deb;stroke-width:1.8;filter:drop-shadow(0 0 7px rgba(20,184,166,.75))}.iso-cooling-hole{fill:#14532d6b;stroke:#0f172ab8;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:#17202659;stroke-width:1.3}.iso-equipment-side.side-a{fill:#cfd8dd}.iso-equipment-side.side-b{fill:#b9c5cb}.iso-equipment-side.side-c{fill:#aebbc2}.iso-equipment-side.side-d{fill:#dce3e7}.iso-equipment-top{fill:#f6c873;stroke:#172026;stroke-width:1.4}.iso-equipment-edge{stroke:#172026b8;stroke-width:1.2}.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}}
