.modal-popup{transform-origin:center center;animation:popUp 1s ease-out forwards}@keyframes popUp{0%{transform:scale(0);opacity:0}80%{transform:scale(1.05);opacity:1}to{transform:scale(1);opacity:1}}.toggle-switch{position:relative;display:inline-block;width:60px;height:30px}.toggle-switch-checkbox{display:none}.toggle-switch-slider{position:absolute;top:0;left:0;right:0;bottom:0;background:#ccc;border-radius:15px;transition:background .2s}.toggle-switch-checkbox:checked+.toggle-switch-slider{background:#4caf50}.toggle-switch-slider:before{content:"";position:absolute;width:24px;height:24px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:transform .2s}.toggle-switch-checkbox:checked+.toggle-switch-slider:before{transform:translate(30px)}.toggle-switch-label{position:absolute;top:50%;transform:translateY(-50%);font-size:12px;color:#fff;pointer-events:none}.toggle-switch-label-on{left:8px;opacity:0;transition:opacity .2s}.toggle-switch-checkbox:checked+.toggle-switch-slider .toggle-switch-label-on{opacity:1}.toggle-switch-label-off{right:8px;opacity:1;transition:opacity .2s}.toggle-switch-checkbox:checked+.toggle-switch-slider .toggle-switch-label-off{opacity:0}.scenarios-wrapper{position:fixed;top:-5%;right:0;z-index:11000;height:100vh}.toggle-button{position:absolute;top:8vh;right:4.5vw;transform:translate(100%);background:#0009!important;color:#fff!important;border:none;border-radius:4px 0 0 4px;cursor:pointer}.scenarios-wrapper.collapsed .scenarios-panel{display:none}.scenarios-panel{position:fixed;top:20px;right:20px;width:300px;background:#000c;color:#fff;padding:20px;border-radius:8px;box-shadow:0 4px 6px #0000001a;z-index:11000;max-height:90vh;overflow-y:auto}.scenarios-panel h3{margin:0 0 20px;font-size:1.2em;color:#0f0;text-align:center;border-bottom:1px solid #00ff00;padding-bottom:10px}.control-section{margin-bottom:20px;padding:15px;background:#ffffff0d;border-radius:6px}.control-section h4{margin:0 0 15px;color:#0f0;font-size:1em}.toggle-control{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding:8px;background:#ffffff1a;border-radius:4px}.toggle-control span{flex:1;margin-right:10px}.toggle-control input[type=checkbox]{width:40px;height:20px;position:relative;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#444;border-radius:20px;cursor:pointer;transition:.3s}.toggle-control input[type=checkbox]:checked{background:#0f0}.toggle-control input[type=checkbox]:before{content:"";position:absolute;width:16px;height:16px;border-radius:50%;top:2px;left:2px;background:#fff;transition:.3s}.toggle-control input[type=checkbox]:checked:before{left:22px}.slider-control{margin-bottom:15px;padding:8px;background:#ffffff1a;border-radius:4px}.slider-control span{display:block;margin-bottom:8px;color:#fff}.slider-control input[type=range]{width:100%;height:6px;background:#444;border-radius:3px;outline:none}.slider-control input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;background:#0f0;border-radius:50%;cursor:pointer}select{width:100%;padding:8px;background:#ffffff1a;border:1px solid #00ff00;color:#fff;border-radius:4px;cursor:pointer}select option{background:#000;color:#fff}.connection-status{text-align:center;padding:8px;margin-bottom:15px;border-radius:4px;font-weight:700}.connection-status.connected{background:#0f03;color:#0f0}.connection-status.disconnected{background:#f003;color:red}.alerts-section{margin-bottom:20px}.alerts-list{max-height:150px;overflow-y:auto}.alert-item{padding:8px;margin-bottom:5px;background:#f003;border-left:3px solid #ff0000;border-radius:4px;font-size:.9em}.component-section{margin-bottom:15px;padding:10px;background:#ffffff0d;border-radius:4px}.component-section h4{margin:0 0 10px;color:#0f0;font-size:.9em}.scenarios-panel::-webkit-scrollbar{width:8px}.scenarios-panel::-webkit-scrollbar-track{background:#ffffff1a;border-radius:4px}.scenarios-panel::-webkit-scrollbar-thumb{background:#0f0;border-radius:4px}.scenarios-panel::-webkit-scrollbar-thumb:hover{background:#0c0}.network-graph-wrap{width:100%;height:100%;min-height:320px;margin-top:10px;padding-top:14px;position:relative;--x-center: 50%;--x-left: 22%;--x-right: 78%;--box-h: 7.2%;--box-w-center: 23.25%;--box-w-side: 23.25%}.network-graph-base{width:100%;height:100%;display:block;border-radius:8px}.network-graph-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ng-label{position:absolute;left:var(--x-center);transform:translate(-50%,-50%);--w: var(--box-w-center);--h: var(--box-h);width:var(--w);height:var(--h);display:grid;place-items:center;text-align:center;font-weight:700;line-height:1.1;font-size:clamp(10px,1.55vh,15px);color:#eaf3ff;text-shadow:0 1px 2px rgba(0,0,0,.6);background:#0020402e;padding:0;border-radius:6px;isolation:isolate}.ng-label.center{left:var(--x-center);width:var(--box-w-center)}.ng-label.left{left:var(--x-left);width:var(--box-w-side)}.ng-label.right{left:var(--x-right);width:var(--box-w-side)}.ng-label.active{color:#e53935;background:transparent;border:none;overflow:hidden}.ng-label.done{background:transparent;border:none;overflow:hidden}.ng-text{position:relative;z-index:1}.ng-label.has-bg:before{content:"";position:absolute;left:50%;top:50%;width:100%;height:100%;transform:translate(-50%,-50%);background-image:var(--bg-url);background-size:cover;background-repeat:no-repeat;background-position:center;z-index:0;border-radius:6px}.ng-content{display:inline-flex;align-items:center;gap:6px;pointer-events:none}.ng-gps{font-size:18px;color:#e53935;animation:ng-blink 1.2s infinite;filter:drop-shadow(0 0 8px rgba(229,57,53,.6))}@keyframes ng-blink{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.9)}}.mini-map-marker-wrapper{position:absolute;transform:translate(-50%,-50%);pointer-events:none}.mini-map{position:absolute;top:75vh;border:2px solid #ccc;border-radius:4px;overflow:hidden;z-index:9001;perspective:800px}.mini-map-tabs{position:absolute;top:0;left:0;right:0;height:36px;display:flex;align-items:flex-end;gap:6px;padding:6px 8px 0;background:linear-gradient(0deg,#0000000f,#0000000f);z-index:10035;border-bottom:1px solid rgba(0,0,0,.08);pointer-events:none}.mini-map-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid rgba(0,0,0,.12);border-bottom:none;background:#00d9ff;color:#fff;padding:6px 10px;font-size:13px;border-top-left-radius:6px;border-top-right-radius:6px;cursor:pointer;-webkit-user-select:none;user-select:none;pointer-events:auto}.mini-map-tab:hover{background:#fff;color:#00d9ff}.mini-map-tab.active{box-shadow:0 2px 6px #00000014;font-weight:600;background:#00d9ff;color:#fff}.mini-map-toggle{background:#d20505b3;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer}.mini-map-toggle:hover{filter:brightness(1.1)}.mini-map-inner{position:relative;width:100%;height:100%;overflow:hidden}.mini-map.popped .mini-map-inner{padding-top:36px}.mini-map-base{width:100%;height:100%;display:block}.mini-map-marker{position:absolute;width:24px;height:24px;transition:transform .25s,box-shadow .2s}.mini-map .mini-map-marker{transform:translate(-50%,-50%) scale(1)}.mini-map .mini-map-marker.active{position:relative;z-index:10000;transform:translate(-50%,-50%) scale(1.5) rotateX(8deg) rotateY(-8deg)}.mini-map.popped .mini-map-marker{transform:translate(-50%,-50%) scale(5.5)}.mini-map.popped .mini-map-marker.active{transform:translate(-50%,-50%) scale(7) rotateX(8deg) rotateY(-8deg)}.mini-map-gps-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.5);animation:blink 1.2s infinite,glow-blue 3s infinite alternate;color:#e63946;pointer-events:none;filter:drop-shadow(0 0 12px rgba(13,59,102,.8)) drop-shadow(0 0 6px rgba(26,79,139,.6));z-index:10020}.mini-map.popped .mini-map-gps-icon{transform:translate(-50%,-50%) scale(1.25)}@keyframes blink{0%,to{opacity:1}50%{opacity:.2}}@keyframes glow-blue{0%{filter:drop-shadow(0 0 10px rgba(13,59,102,.7)) drop-shadow(0 0 5px rgba(26,79,139,.5))}to{filter:drop-shadow(0 0 18px rgba(13,59,102,1)) drop-shadow(0 0 10px rgba(59,106,190,.7))}}.mini-map-controls{position:absolute;top:4px;right:4px;display:flex;gap:6px;z-index:10030}.mini-map-popout{background:#d20505b3;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer}.mini-map-popout:hover{filter:brightness(1.1)}.mini-map-cctv-wrapper{position:absolute;transform:translate(-50%,-50%);pointer-events:auto}.mini-map-cctv-icon{width:24px;height:24px;transition:transform .25s}.mini-map .mini-map-cctv-icon{transform:translate(-50%,-50%) scale(.5)}.mini-map.popped .mini-map-cctv-icon{transform:translate(-50%,-50%) scale(.95)}.mini-map .mini-map-cctv-icon.active-cctv{filter:invert(21%) sepia(96%) saturate(3276%) hue-rotate(264deg) brightness(92%) contrast(104%);drop-shadow:0 0 6px rgba(120,66,225,.75)}.mini-map-aerial-button{position:absolute;top:55vh;left:.4vw;width:10%;height:auto;cursor:pointer;z-index:1000;transform:scale(1.9);transform-origin:top left;will-change:transform}.mini-map-compass{position:absolute;top:72.5vh;left:14vw;display:flex;gap:8px;z-index:10040;pointer-events:auto}.mini-map-compass-btn{width:28px;height:28px;padding:0;display:grid;place-items:center;border-radius:6px;border:1px solid rgba(0,0,0,.2);background:#ffffffe6;font-weight:700;font-size:12px;line-height:1;color:#111;cursor:pointer;-webkit-user-select:none;user-select:none;box-shadow:0 1px 3px #0003;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}.mini-map-compass-btn:hover{filter:brightness(.98)}.mini-map-compass-btn:active{transform:translateY(1px)}.mini-map-camera-wrapper{position:absolute;transform:translate(-50%,-50%);pointer-events:none}.mini-map .mini-map-camera-icon.active-camera{filter:invert(49%) sepia(86%) saturate(7466%) hue-rotate(1deg) brightness(102%) contrast(109%)}.mini-map-camera-icon{width:24px;height:24px;transition:transform .25s}.mini-map .mini-map-camera-icon{transform:translate(-50%,-50%) scale(.5)}.mini-map.popped .mini-map-camera-icon{transform:translate(-50%,-50%) scale(.95)}.network-graph-panel{position:absolute;top:0;right:0;bottom:0;left:0;padding:12px;overflow:auto}.network-graph-placeholder{width:100%;height:100%;display:grid;place-items:center;text-align:center;color:#333;background:radial-gradient(circle at 20% 20%,rgba(0,0,0,.03),transparent 40%),radial-gradient(circle at 80% 60%,rgba(0,0,0,.03),transparent 40%)}.mini-map-direction-btn{background:#0009;color:#fff;border:1px solid #ccc;border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;line-height:1;cursor:pointer;padding:0}.mini-map-direction-btn.active{border-color:#4caf50}#root{width:100vw;height:100vh}body{margin:0}.container{display:flex;flex-direction:column}.container-chat{display:flex;width:100%;height:100%;overflow:auto;text-align:left}.chat-Historyc{background-color:#000000b3;border-radius:20%;width:3.5vw;height:3.5vw}.chat-Historyo{background-color:#000000b3;border-radius:4%;width:30vw;height:45vh}.placeholder1::placeholder{color:#fff;opacity:1}.placeholder2::placeholder{color:#dba842;text-align:center}.placeholder3::placeholder{color:#fff;opacity:1;font-size:15px}::-webkit-scrollbar{width:0px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:transparent}::-webkit-scrollbar-thumb:hover{background:transparent}.icon{position:relative;margin-left:50px;margin-top:30px;display:flex;justify-content:space-between;width:13px;height:13px}.icon span{width:3px;height:100%;background-color:orange;border-radius:3px;content:""}@keyframes bounce{10%{transform:scaleY(.3)}30%{transform:scaleY(1)}60%{transform:scaleY(.5)}80%{transform:scaleY(.75)}to{transform:scaleY(.6)}}.span-prop{width:3px;height:100%;background-color:orange;border-radius:3px;animation:bounce 2.2s ease infinite alternate;content:""}span:nth-of-type(2){animation-delay:-2.2s}span:nth-of-type(3){animation-delay:-3.7s}.ChatBubble{position:absolute;top:1vh;left:1vw;z-index:1}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;margin:0;padding:0;overflow:hidden;background:#101010;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#1a1a1a;color:#fff}.app{display:flex;height:100vh;width:100vw;overflow:hidden}.canvas-container{flex:1;height:100%;background:#000}#root{overflow:auto}.scenarios-manager{background:#000c;padding:20px;overflow-y:auto;border-right:1px solid #333}.scenario-controls{flex:0 0 300px;height:100vh;width:20vw;background:#141414f2;padding:16px;overflow-y:auto;border-left:1px solid #333;display:flex;flex-direction:column;gap:16px}.control-section{background:#28282899;border-radius:6px;padding:12px}.control-section h4{margin-bottom:12px;color:#fff;font-size:14px;text-transform:uppercase;letter-spacing:.5px}.control-grid{display:flex;flex-direction:column;gap:8px}.control-item{display:flex;justify-content:space-between;align-items:center;padding:4px 0}.control-item span{font-size:13px}.connection-status{display:flex;align-items:center;gap:8px;padding:8px;margin-bottom:16px;border-radius:4px;background-color:#0000000d;color:#fff}.status-indicator{width:10px;height:10px;border-radius:50%;display:inline-block;animation:pulse 2s infinite}.status-indicator.connected{background-color:#4caf50;animation:none}.status-indicator.disconnected{background-color:#f44336}.error-message{color:#f44336;font-size:.9em;max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.2);opacity:.7}to{transform:scale(1);opacity:1}}select{width:100%;padding:8px;background:#2a2a2a;border:1px solid #444;color:#fff;border-radius:4px;font-size:13px}.slider-control{display:flex;flex-direction:column;gap:4px}.slider-control input[type=range]{width:100%;margin:4px 0}.slider-control span{font-size:12px;color:#ccc}.toggle-control{display:flex;justify-content:space-between;align-items:center;padding:4px 0}.toggle-control input[type=checkbox]{width:16px;height:16px}button{padding:8px 16px;background:#2a2a2a;border:1px solid #444;color:#fff;border-radius:4px;cursor:pointer;transition:background .2s}button:hover{background:#3a3a3a}.reset-button{width:100%;margin-top:20px;background:#8b0000}.reset-button:hover{background:#a00000}video{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.drei-html-label{z-index:10!important;position:relative}
