:root{color:#17211d;background:#eef2ef;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{align-items:center;border:1px solid #cad3cf;background:#fff;color:#17211d;cursor:pointer;display:inline-flex;height:2.5rem;justify-content:center;min-width:2.5rem}button:hover{border-color:#12695d}button:disabled{color:#8b9993;cursor:not-allowed;opacity:.55}.app-shell{display:grid;grid-template-rows:auto 1fr;min-height:100vh}.topbar{align-items:center;background:#fbfcfb;border-bottom:1px solid #d6ded9;display:flex;gap:1rem;justify-content:space-between;min-height:4.75rem;padding:.9rem 1.25rem}.brand-logo{display:block;height:clamp(2.2rem,5vw,3.6rem);max-width:min(19rem,54vw);object-fit:contain}.primary-action{background:#12695d;border-color:#12695d;color:#fff;font-weight:700;padding:0 1rem}.viewport-readout{align-items:center;display:flex;flex:1;gap:.75rem;justify-content:flex-start;min-width:0}.viewport-readout span{background:#fff;border:1px solid #d6ded9;color:#17211d;font-size:.88rem;font-weight:800;min-height:2rem;padding:.35rem .65rem;white-space:nowrap}.editor-layout{display:grid;grid-template-columns:minmax(15rem,18rem) 1fr;height:calc(100vh - 4.75rem);min-height:0;overflow:hidden}.editor-layout-collapsed{grid-template-columns:4.25rem 1fr}.side-panel{background:#fbfcfb;border-right:1px solid #d6ded9;display:flex;flex-direction:column;gap:.85rem;min-height:0;overflow-y:auto;padding:.85rem}.side-panel-collapsed{align-items:stretch;gap:.55rem;overflow-x:hidden;padding:.65rem .45rem}.sidebar-toolbar{align-items:center;display:flex;justify-content:flex-end}.sidebar-toggle{font-size:1rem;font-weight:900;height:2rem;min-width:2rem;padding:0}.upload-control{align-items:center;background:#fff;border:1px solid #cad3cf;cursor:pointer;display:flex;font-weight:700;gap:.6rem;min-height:2.75rem;padding:0 .85rem}.upload-control input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.control-with-help{align-items:stretch;display:grid;gap:.45rem;grid-template-columns:1fr 2.5rem}.panel-section{border-top:1px solid #d6ded9;display:grid;gap:.75rem;padding-top:1rem}.section-heading{align-items:center;color:#52615b;display:flex;font-size:.78rem;font-weight:800;justify-content:space-between;letter-spacing:0;text-transform:uppercase}.tool-group{display:grid;gap:.5rem;grid-template-columns:repeat(auto-fit,minmax(2.5rem,1fr))}.calibration-panel,.scene-panel,.entrance-panel,.constraint-panel{border-top:1px solid #d6ded9;display:grid;gap:.75rem;padding-top:1rem}.scene-tools{display:grid;gap:.45rem}.tool-with-help{align-items:stretch;display:grid;gap:.45rem;grid-template-columns:1fr 2.35rem}.help-tip{background:#f6faf8;border-radius:50%;color:#52615b;min-width:2.35rem;padding:0;position:relative}.help-tip:hover,.help-tip:focus-visible{border-color:#12695d;color:#12695d}.help-tip:after{background:#17211d;bottom:auto;box-shadow:0 .75rem 2rem #0f172a38;color:#fff;content:attr(data-help);font-size:.78rem;font-weight:600;inline-size:clamp(16rem,34vw,30rem);left:clamp(1rem,20rem,calc(100vw - 31rem));line-height:1.35;opacity:0;padding:.65rem .75rem;pointer-events:none;position:fixed;text-align:left;top:6.25rem;transform:translateY(.25rem);transition:opacity .12s ease,transform .12s ease;visibility:hidden;white-space:normal;z-index:50}.help-tip:hover:after,.help-tip:focus-visible:after{opacity:1;transform:translateY(0);visibility:visible}.scene-kind-button{gap:.45rem;justify-content:flex-start;min-height:2.35rem;padding:0 .65rem;text-align:left}.scene-kind-button span,.upload-control span,.secondary-action span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-kind-button[aria-pressed=true]{border-color:#12695d;box-shadow:inset 3px 0 #12695d}.scene-status{color:#52615b;display:grid;font-size:.85rem;gap:.25rem}.scene-object-list{display:grid;gap:.45rem;list-style:none;margin:0;padding:0}.scene-object-list li{background:#fff;border:1px solid #cad3cf;display:grid;gap:.2rem;padding:.55rem .65rem}.scene-object-list strong{font-size:.76rem;letter-spacing:0}.scene-object-name-field{display:grid;gap:.25rem}.scene-object-name-field span{color:#52615b;font-size:.74rem;font-weight:800}.scene-object-name-field input{border:1px solid #cad3cf;color:#17211d;font-size:.86rem;font-weight:800;min-height:2rem;padding:0 .5rem;width:100%}.scene-object-list span{color:#52615b;font-size:.82rem}.device-category-grid{display:grid;gap:.45rem;grid-template-columns:repeat(2,minmax(0,1fr))}.device-category-button{align-items:center;display:grid;gap:.25rem;grid-template-columns:auto 1fr auto;justify-content:stretch;min-height:2.35rem;min-width:0;padding:0 .55rem;text-align:left}.device-category-button span{font-size:.82rem;font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-category-button small{color:#52615b;font-size:.72rem;font-weight:800}.device-kind-button{min-height:2.2rem}.device-object-list li{gap:.45rem}.device-field-label{gap:.25rem}.device-field-label select{min-height:2rem}.modal-backdrop{align-items:flex-start;background:#0f172a2e;display:flex;inset:0;justify-content:flex-start;padding:5.5rem 1rem 1rem 20rem;position:fixed;z-index:80}.device-picker{background:#fbfcfb;border:1px solid #cad3cf;box-shadow:0 1.5rem 4rem #0f172a38;display:grid;gap:.85rem;max-height:min(72vh,42rem);overflow:auto;padding:1rem;width:min(34rem,calc(100vw - 2rem))}.device-picker-header{align-items:start;display:flex;gap:1rem;justify-content:space-between}.device-picker-kicker{color:#52615b;display:block;font-size:.74rem;font-weight:900;text-transform:uppercase}.device-picker h2{font-size:1.05rem;line-height:1.2;margin:.1rem 0 0}.icon-action{height:2rem;min-width:2rem;padding:0}.device-picker-note{color:#52615b;font-size:.86rem;font-weight:700;line-height:1.35;margin:0}.device-picker-options{display:grid;gap:.55rem}.device-picker-option{align-items:start;display:grid;gap:.25rem .6rem;grid-template-columns:auto 1fr;height:auto;justify-content:stretch;min-height:3.2rem;padding:.65rem .75rem;text-align:left}.device-picker-option span{font-weight:850;line-height:1.2}.device-picker-option small{color:#52615b;font-size:.78rem;font-weight:650;grid-column:2;line-height:1.3}.side-panel-collapsed .section-heading span,.side-panel-collapsed .upload-control span,.side-panel-collapsed .scene-kind-button span,.side-panel-collapsed .secondary-action span,.side-panel-collapsed .field-label,.side-panel-collapsed .style-controls,.side-panel-collapsed .scene-status,.side-panel-collapsed .scene-object-list,.side-panel-collapsed .calibration-status,.side-panel-collapsed .scale-readout,.side-panel-collapsed .state-readout,.side-panel-collapsed .help-tip,.side-panel-collapsed .device-category-button span,.side-panel-collapsed .device-category-button small{display:none}.side-panel-collapsed .control-with-help,.side-panel-collapsed .tool-with-help,.side-panel-collapsed .tool-group,.side-panel-collapsed .device-category-grid{grid-template-columns:1fr}.side-panel-collapsed .upload-control,.side-panel-collapsed .scene-kind-button,.side-panel-collapsed .secondary-action,.side-panel-collapsed .device-category-button{justify-content:center;min-width:2.75rem;padding:0}.calibration-status{color:#52615b;display:grid;font-size:.85rem;gap:.25rem}.field-label{display:grid;font-size:.85rem;font-weight:700;gap:.35rem}.field-label input{border:1px solid #cad3cf;min-height:2.35rem;padding:0 .7rem}.field-label select{background:#fff;border:1px solid #cad3cf;color:#17211d;min-height:2.35rem;padding:0 .7rem}.field-label input[type=color]{cursor:pointer;min-height:2.35rem;padding:.2rem}.field-label input[type=range]{padding:0}.style-controls{background:#f6faf8;border:1px solid #d6ded9;display:grid;gap:.65rem;padding:.7rem}.secondary-action{justify-content:flex-start;padding:0 .75rem}.scale-readout{color:#12695d;font-size:.9rem;font-weight:700;margin:0}.state-readout{border-top:1px solid #d6ded9;display:grid;gap:.75rem;margin:0;padding-top:1rem}.state-readout div{display:grid;gap:.2rem}.state-readout dt{color:#52615b;font-size:.78rem;font-weight:700}.state-readout dd{align-items:center;display:flex;gap:.35rem;font-size:.95rem;margin:0}.raster-stage{align-items:center;background:linear-gradient(90deg,rgba(18,105,93,.08) 1px,transparent 1px),linear-gradient(rgba(18,105,93,.08) 1px,transparent 1px),#e5ebe7;background-size:32px 32px;cursor:default;display:flex;justify-content:center;min-height:calc(100vh - 4.75rem);overflow:hidden;position:relative;touch-action:none}.raster-stage:active{cursor:grabbing}.plan-image{display:block;height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;width:100%}.plan-layer{max-height:min(78vh,960px);max-width:min(78vw,1280px);position:relative;transform-origin:0 0}.plan-selection-frame{border:1.5px solid rgba(37,99,235,.9);box-shadow:0 0 0 1px #fffc,0 0 0 5px #2563eb1f;inset:0;pointer-events:none;position:absolute;z-index:4}.plan-resize-handle{background:#fff;border:2px solid #2563eb;border-radius:999px;box-shadow:0 1px 4px #0f172a38,0 0 0 3px #ffffffd1;height:.7rem;min-width:0;padding:0;pointer-events:all;position:absolute;transition:background .12s ease,transform .12s ease;width:.7rem}.plan-resize-handle:hover,.plan-resize-handle:focus-visible{background:#dbeafe;outline:none}.plan-resize-handle-nw{cursor:nwse-resize;left:-.35rem;top:-.35rem}.plan-resize-handle-n{cursor:ns-resize;left:50%;top:-.35rem;transform:translate(-50%)}.plan-resize-handle-n:hover,.plan-resize-handle-n:focus-visible{transform:translate(-50%) scale(1.18)}.plan-resize-handle-ne{cursor:nesw-resize;right:-.35rem;top:-.35rem}.plan-resize-handle-e{cursor:ew-resize;right:-.35rem;top:50%;transform:translateY(-50%)}.plan-resize-handle-e:hover,.plan-resize-handle-e:focus-visible{transform:translateY(-50%) scale(1.18)}.plan-resize-handle-se{cursor:nwse-resize;bottom:-.35rem;right:-.35rem}.plan-resize-handle-s{bottom:-.35rem;cursor:ns-resize;left:50%;transform:translate(-50%)}.plan-resize-handle-s:hover,.plan-resize-handle-s:focus-visible{transform:translate(-50%) scale(1.18)}.plan-resize-handle-sw{bottom:-.35rem;cursor:nesw-resize;left:-.35rem}.plan-resize-handle-w{cursor:ew-resize;left:-.35rem;top:50%;transform:translateY(-50%)}.plan-resize-handle-w:hover,.plan-resize-handle-w:focus-visible{transform:translateY(-50%) scale(1.18)}.plan-resize-handle-nw:hover,.plan-resize-handle-nw:focus-visible,.plan-resize-handle-ne:hover,.plan-resize-handle-ne:focus-visible,.plan-resize-handle-se:hover,.plan-resize-handle-se:focus-visible,.plan-resize-handle-sw:hover,.plan-resize-handle-sw:focus-visible{transform:scale(1.18)}.scene-overlay{height:100%;inset:0;overflow:visible;pointer-events:none;position:absolute;width:100%}.scene-polygon{fill:#12695d2e;stroke:#12695d;stroke-width:2}.scene-polygon-building{fill:#375b9129;stroke:#375b91}.scene-polygon-obstacle{fill:#8058282e;stroke:#805828}.scene-polygon-critical-zone{fill:#ab364929;stroke:#ab3649}.scene-polygon-excluded-zone{fill:#282d312e;stroke:#282d31}.scene-draft-line{fill:none;stroke:#f5c542;stroke-dasharray:7 5;stroke-width:2}.scene-draft-line-building{stroke:#375b91}.scene-draft-line-obstacle{stroke:#805828}.scene-draft-line-critical-zone{stroke:#ab3649}.scene-draft-line-excluded-zone{stroke:#282d31}.scene-draft-point{cursor:grab;fill:#f5c542;pointer-events:all;stroke:#17211d;stroke-width:2}.scene-draft-point:active{cursor:grabbing}.scene-draft-point-building{fill:#8fb0e4}.scene-draft-point-obstacle{fill:#d3a35f}.scene-draft-point-critical-zone{fill:#e58b99}.scene-draft-point-excluded-zone{fill:#8a949a}.scene-object-label{fill:#17211d;font-size:16px;font-weight:800;paint-order:stroke;pointer-events:none;stroke:#fff;stroke-width:4px}.entrance-crossing-line{stroke:#2b6cb0;stroke-linecap:round;stroke-width:4}.entrance-vector-line{stroke:#d1495b;stroke-dasharray:8 5;stroke-linecap:round;stroke-width:3}.entrance-vector-line:after{content:""}.entrance-draft-point{cursor:grab;fill:#fff;pointer-events:all;stroke:#d1495b;stroke-width:2}.constraint-point circle{cursor:grab;fill:#fff;pointer-events:all;stroke-width:3}.constraint-point circle:active{cursor:grabbing}.constraint-point-mounting-point circle{fill:#e7f5f1;stroke:#12695d}.constraint-point-power-point circle{fill:#fff4df;stroke:#b7791f}.constraint-point-network-point circle{fill:#edf4ff;stroke:#375b91}.constraint-point-icon{fill:#17211d;font-size:10px;font-weight:900;pointer-events:none;text-anchor:middle}.project-device-marker{cursor:grab;filter:drop-shadow(0 1px 2px rgba(15,23,42,.35));pointer-events:all}.project-device-marker:active{cursor:grabbing}.project-device-camera-body,.project-device-node-body{stroke:#fff;stroke-linejoin:round;stroke-width:2}.project-device-camera-lens{fill:#fff;stroke:#0f172a59;stroke-width:1}.project-device-marker-video .project-device-camera-body{fill:#0f766e}.project-device-marker-access-control .project-device-node-body{fill:#7c3aed}.project-device-marker-alarm .project-device-node-body{fill:#be123c}.project-device-marker-infrastructure .project-device-node-body{fill:#1d4ed8}.project-device-code{fill:#fff;font-size:6px;font-weight:900;paint-order:stroke;pointer-events:none;stroke:#0f172a59;stroke-width:1.2px;text-anchor:middle}.calibration-marker-dot{cursor:grab;fill:#f5c542;pointer-events:all;stroke:#17211d;stroke-width:2}.calibration-marker-label{fill:#17211d;font-size:12px;font-weight:800;pointer-events:none;text-anchor:middle}.empty-plan{aspect-ratio:4 / 3;background:linear-gradient(135deg,#17211d0d,#12695d1a),#f9fbfa;border:1px dashed #9eaaa4;width:min(70vw,48rem)}@media(max-width:760px){.topbar{align-items:flex-start;gap:.75rem;flex-wrap:wrap}.viewport-readout{flex-basis:100%;order:3}.editor-layout{grid-template-columns:1fr;height:auto;overflow:visible}.side-panel{border-bottom:1px solid #d6ded9;border-right:0;max-height:45vh}.raster-stage{min-height:58vh}}
