.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}:root{--bg: #f4f6f8;--card: #ffffff;--text: #111827;--muted: #6b7280;--faint: #9ca3af;--line: #e8eaee;--blue: #2563eb;--blue-soft: #eef4ff;--green: #22c55e;--green-text: #15803d;--green-soft: #dcfce7;--red: #ef4444;--red-soft: #fee2e2;--orange: #f59e0b;--orange-soft: #fef3c7;--brand: #e11d48;--sidebar: 232px;--shadow: 0 1px 2px rgba(16, 24, 40, .04);--radius: 12px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--text);background:var(--bg);font-size:14px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select{font-family:inherit}.login-page{min-height:100%;display:grid;place-items:center;background:var(--bg)}.auth-split{min-height:100%;display:grid;grid-template-columns:minmax(320px,.42fr) 1fr}.auth-brand{background:#0b1a3d;color:#fff;position:relative;overflow:hidden;padding:48px 40px 40px;display:flex;flex-direction:column;justify-content:flex-end}.auth-map{position:absolute;top:0;right:0;bottom:38%;left:0;pointer-events:none;display:flex;align-items:center;justify-content:center}.auth-map img,.auth-map svg{width:82%;height:100%;object-fit:contain;object-position:center;display:block}.auth-brand-copy{position:relative;z-index:1;max-width:420px;background:linear-gradient(180deg,transparent 0%,rgba(11,26,61,.55) 28%,rgba(11,26,61,.92) 100%);margin:0 -40px -40px;padding:80px 40px 40px}.auth-brand-copy h2{margin:0 0 12px;font-size:32px;letter-spacing:-.04em;line-height:1.15}.auth-brand-copy>p{margin:0 0 28px;color:#c5d0e6;font-size:15px;line-height:1.5}.auth-features{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:16px}.auth-features li{display:flex;gap:12px;align-items:flex-start}.auth-feat-ico{width:34px;height:34px;border:1px solid rgba(255,255,255,.28);border-radius:50%;display:grid;place-items:center;flex-shrink:0;color:#fff}.auth-features strong{display:block;font-size:14px}.auth-features span{color:#9fb0cc;font-size:13px}.auth-form{background:#f4f6f8;display:grid;place-items:center;padding:32px 16px}.login-card{width:min(420px,100%);background:var(--card);border:1px solid var(--line);border-radius:16px;padding:36px 32px;box-shadow:0 8px 30px #1018280f}.login-card h1{margin:0 0 6px;font-size:26px;letter-spacing:-.03em}.login-card p{margin:0 0 22px;color:var(--muted)}.login-card label{display:block;font-weight:600;margin:12px 0 6px;font-size:13px}.field-wrap{position:relative;display:flex;align-items:center}.field-wrap>svg{position:absolute;left:12px;color:var(--faint);pointer-events:none}.field-wrap input{width:100%;padding:11px 40px 11px 38px;border:1px solid #d1d5db;border-radius:10px;font-size:14px;background:#fff}.field-eye{position:absolute;right:8px;border:0;background:none;color:var(--faint);cursor:pointer;padding:4px;display:grid;place-items:center}.login-forgot{text-align:right;margin:10px 0 18px}.login-forgot a{color:var(--blue);font-weight:600;font-size:13px}.login-back{display:inline-block;margin-top:16px;color:var(--blue);font-weight:600;font-size:13px}.login-dev{margin-top:10px;color:var(--muted);font-size:13px}@media(max-width:900px){.auth-split{grid-template-columns:1fr}.auth-brand{min-height:280px;padding:28px 24px}.auth-brand-copy{margin:0 -24px -28px;padding:48px 24px 28px}.auth-brand-copy h2{font-size:24px}}.login-card .brand{padding:0 0 12px;font-size:22px}.login-card input[type=email],.login-card input[type=password],.login-card input[type=text]{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-size:14px}.field-wrap input[type=email],.field-wrap input[type=password],.field-wrap input[type=text]{padding:11px 40px 11px 38px}.remember{display:flex;gap:8px;align-items:center;margin:14px 0 18px;color:var(--muted)}.btn{border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px 12px;cursor:pointer;font-weight:500}.btn-primary{background:var(--blue);color:#fff;border-color:var(--blue)}.btn-primary:disabled{opacity:.6;cursor:default}.btn-block{width:100%;padding:11px 14px}.error{color:var(--red);font-size:13px;margin-bottom:8px}.shell{display:grid;grid-template-columns:var(--sidebar) 1fr;height:100%;overflow:hidden}.sidebar{background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;padding:32px 12px 12px;height:100%;min-height:0}.brand{font-weight:700;font-size:22px;letter-spacing:-.045em;color:#111827;padding:4px 12px 22px}.brand span{color:var(--brand)}.nav{display:flex;flex-direction:column;gap:2px;flex:1;min-height:0;overflow-y:auto}.nav a{position:relative;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:#4b5563;font-weight:500;font-size:14px;transition:background .15s ease,color .15s ease}.nav a:hover{background:#f3f4f6;color:#111827}.nav a.active{background:var(--blue-soft);color:var(--blue)}.nav a.active:hover{background:#e0eaff;color:var(--blue)}.nav a.active:before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--blue)}.nav-badge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;font-weight:700;min-width:18px;height:18px;border-radius:99px;display:grid;place-items:center;padding:0 5px}.user-menu{position:relative;margin-top:auto;flex-shrink:0}.user-pop{position:absolute;left:0;right:0;bottom:calc(100% + 8px);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px #1018281f;padding:6px;z-index:30}.user-pop button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;padding:10px;border-radius:8px;cursor:pointer;color:#374151;font-weight:500;font-size:13px;text-align:left}.user-pop button:hover{background:#f3f4f6;color:#111827}.user-pop button svg{color:var(--muted);flex-shrink:0}.sidebar-foot{display:flex;align-items:center;gap:10px;padding:12px 8px 8px;border-top:1px solid var(--line);background:none;border-left:0;border-right:0;border-bottom:0;width:100%;cursor:pointer;text-align:left;color:inherit;border-radius:10px;transition:background .15s ease}.sidebar-foot:hover,.sidebar-foot.open{background:#f3f4f6}.sidebar-foot.open svg:last-child{transform:rotate(90deg)}.sidebar-foot svg:last-child{transition:transform .15s ease}.avatar{width:36px;height:36px;border-radius:50%;background:var(--blue);color:#fff;display:grid;place-items:center;font-weight:600;font-size:12px;flex-shrink:0}.sidebar-foot .who{flex:1;min-width:0}.sidebar-foot .who strong{display:block;font-size:13px}.sidebar-foot .who span{color:var(--muted);font-size:12px}.sidebar-foot svg{color:var(--faint)}.mobile-bar,.nav-scrim,.sidebar-top{display:none}body.nav-lock{overflow:hidden}.main{padding:24px 32px 48px;min-width:0;min-height:0;overflow:auto}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px}.page-head h1{margin:0;font-size:28px;letter-spacing:-.03em}.page-head .sub{color:var(--muted);margin-top:4px}.row{display:flex;gap:8px;align-items:center}.tabs{display:flex;gap:28px;border-bottom:1px solid var(--line);margin-bottom:20px}.tabs a,.tabs button{background:none;border:0;padding:10px 0 11px;cursor:pointer;color:var(--muted);font-weight:600;font-size:14px;border-bottom:3px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:8px;transition:color .15s ease,border-color .15s ease}.tabs a:hover,.tabs button:hover{color:#111827}.tabs a.active,.tabs button.active{color:var(--blue);border-bottom-color:var(--blue)}.tabs a.active:hover,.tabs button.active:hover{color:#1d4ed8}.tab-badge{background:var(--red);color:#fff;font-size:11px;font-weight:700;min-width:18px;height:18px;border-radius:99px;display:grid;place-items:center;padding:0 5px;line-height:1}.filters{display:flex;gap:10px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;margin-bottom:16px}.filters input,.filters select{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}.filters input{flex:1}.filter-toggle.on{border-color:#bfdbfe;background:#eff6ff;color:var(--blue)}.filter-panel{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;margin:-6px 0 16px}.filter-panel label{display:flex;flex-direction:column;gap:4px;margin:0;font-size:12px;font-weight:600;color:var(--muted)}.filter-panel input,.filter-panel select{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;font-weight:500;color:var(--text)}.filter-actions{display:flex;align-items:end}.metric-val{display:inline-flex;align-items:baseline;gap:5px;font-weight:600}.metric-window{display:inline-flex;align-items:center;padding:1px 5px;border-radius:999px;background:#f3f4f6;color:#6b7280;font-size:10px;font-weight:650;letter-spacing:.02em;line-height:1.3;font-variant-numeric:tabular-nums}.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:16px}.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.kpi .label{color:var(--muted);font-size:13px}.kpi .value{font-size:26px;font-weight:700;margin-top:6px;display:flex;align-items:center;gap:8px}button.kpi-hit{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;color:inherit;text-align:left;width:100%;cursor:pointer;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}button.kpi-hit:hover{background:#f8fafc}button.kpi-hit.active{border-color:#93c5fd;background:var(--blue-soft);box-shadow:0 0 0 1px #93c5fd}button.kpi-hit:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px 20px 18px;box-shadow:var(--shadow);min-width:0}.card h3{margin:0 0 14px;font-size:16px;font-weight:600}.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.card-head h3{margin:0}.link{color:var(--blue);font-weight:600;font-size:13px}.head-actions{display:flex;align-items:center;gap:6px}.head-actions .btn{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;font-size:12px;border-radius:8px;font-weight:600;white-space:nowrap;flex-shrink:0}.range-select{border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:12px;color:var(--muted);background:#fff;width:auto}.card-head select{width:auto}.trend-head{flex-wrap:wrap;gap:8px}.trend-hours{display:inline-flex;align-items:center;gap:4px;margin:0;font-size:12px;font-weight:600;color:var(--muted)}.trend-hours input{width:68px;border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:12px;color:var(--text);background:#fff}.trend-custom-dates{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 12px}.grid-2{display:grid;grid-template-columns:1.4fr 1fr;gap:14px}.grid-3{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:14px}.grid-dash{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:14px;margin-top:14px}table{width:100%;border-collapse:collapse}th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;padding:10px 8px;border-bottom:1px solid var(--line)}td{padding:12px 8px;border-bottom:1px solid #f0f2f5;vertical-align:middle}th.check,td.check{display:table-cell;width:40px;min-width:40px;max-width:40px;padding:0;text-align:center;vertical-align:middle;background:transparent}th.check input,td.check input{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:16px;height:16px;margin:0;padding:0;border:1.5px solid #c5cad3;border-radius:4px;background:#fff;display:inline-block;vertical-align:middle;cursor:pointer}th.check input:hover,td.check input:hover{border-color:#9ca3af}th.check input:checked,td.check input:checked,th.check input:indeterminate,td.check input:indeterminate{background-color:var(--blue);border-color:var(--blue);background-repeat:no-repeat;background-position:center;background-size:12px 12px}th.check input:checked,td.check input:checked{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8.5 6.5 11.5 12.5 4.5'/></svg>")}th.check input:indeterminate,td.check input:indeterminate{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' d='M4 8h8'/></svg>")}th.check input:focus-visible,td.check input:focus-visible{outline:2px solid var(--blue);outline-offset:2px}tr.selected td,tr.selected td.check{background:var(--blue-soft)}tr.clickable.selected:hover td,tr.clickable.selected:hover td.check{background:#e0ebff}th.th-sort{padding:0}th.th-sort button{display:inline-flex;align-items:center;gap:4px;width:100%;margin:0;padding:10px 8px;border:0;background:none;color:inherit;font:inherit;font-weight:600;text-align:left;cursor:pointer;white-space:nowrap;border-radius:8px}th.th-sort button:hover,th.th-sort.active button{color:#111827}th.th-sort button svg{color:var(--muted);flex-shrink:0}th.th-sort.active button svg{color:var(--blue)}tr.clickable{cursor:pointer}tr.clickable:hover{background:#f8fafc}.fw-cell,.batt-cell{white-space:nowrap;font-variant-numeric:tabular-nums}.batt-cell.low{color:var(--red);font-weight:600}.sensor-cell{display:flex;flex-direction:row;align-items:center;gap:10px}.sensor-cell>div{display:flex;flex-direction:column;gap:1px}.sensor-cell small{color:var(--muted)}.sensor-cell .sensor-note{color:var(--muted);font-size:12px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-mini{width:42px;height:34px;border-radius:8px;background:#f3f5f7;border:1px solid var(--line);display:grid;place-items:center;overflow:hidden}.device-mini svg{transform:scale(.62);transform-origin:center}.muted{color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.dot.online,.dot.normal,.dot.info{background:var(--green)}.dot.warning{background:var(--orange)}.dot.offline,.dot.critical{background:var(--red)}.dot.maintenance{background:#9ca3af}.pill{display:inline-flex;align-items:center;border-radius:99px;padding:2px 10px;font-size:12px;font-weight:600;line-height:18px}.pill.good{background:#dcfce7;color:#15803d}.pill.warn{background:var(--orange-soft);color:#92400e}.pill.info{background:#e0e7ff;color:#3730a3}.pill.bad{background:var(--red-soft);color:#b91c1c}.badge{display:inline-flex;align-items:center;gap:6px;border-radius:99px;padding:2px 8px;font-size:12px;font-weight:600}.badge.good,.badge.normal{background:var(--green-soft);color:var(--green-text)}.badge.warning{background:var(--orange-soft);color:#92400e}.badge.critical{background:var(--red-soft);color:#991b1b}.badge.info{background:#e0e7ff;color:#3730a3}.table-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:auto;box-shadow:var(--shadow)}.pager{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 0;color:var(--muted)}.pager .pages{display:flex;gap:6px}.pager button{min-width:32px}.bulk-bar{position:fixed;z-index:30;left:calc(var(--sidebar) + (100vw - var(--sidebar)) / 2);bottom:22px;transform:translate(-50%);display:flex;align-items:center;flex-wrap:wrap;gap:10px;background:#111827;color:#fff;padding:10px 12px 10px 18px;border-radius:16px;box-shadow:0 16px 40px #0f172a47;font-size:13px}.page-with-bulk{padding-bottom:88px}.bulk-bar strong{font-weight:600}.bulk-bar-meta{display:flex;flex-direction:column;gap:1px;margin-right:4px}.bulk-bar-meta span{color:#9ca3af;font-size:11px}.bulk-bar .btn{display:inline-flex;align-items:center;gap:6px;border-color:#374151;background:transparent;color:#e5e7eb}.bulk-bar .btn:hover{background:#1f2937;color:#fff}.bulk-bar .btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}.bulk-bar .btn-primary:hover{filter:brightness(1.08)}.bulk-bar .btn-primary:disabled{opacity:.45;filter:none;background:var(--blue);color:#fff}.data-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px}.data-head h3{margin:0;font-size:18px;letter-spacing:-.02em}.data-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.data-select{position:relative;display:inline-flex;align-items:center}.data-select svg{position:absolute;left:10px;color:var(--muted);pointer-events:none}.data-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'><path d='M6 9l6 6 6-6'/></svg>") no-repeat right 10px center;border-radius:10px;padding:8px 32px 8px 12px;font-size:13px;font-weight:500;color:var(--text);min-width:150px}.data-select:has(svg) select{padding-left:32px}.data-export{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;font-weight:600}.data-tools .btn-danger{display:inline-flex;align-items:center;gap:8px}.data-table-wrap{overflow:auto}.data-table{min-width:860px}.data-table thead th{background:#f4f6f8;color:var(--text);font-size:13px;font-weight:700;padding:12px 14px;white-space:nowrap;border-bottom:1px solid var(--line)}.data-table th.sort{cursor:pointer;-webkit-user-select:none;user-select:none}.data-table th.sort svg{display:inline-block;vertical-align:-3px;margin-left:4px;color:var(--muted)}.data-table td{padding:13px 14px;border-bottom:1px solid #eef0f3;color:#111827}.data-table td.ts{white-space:nowrap;font-variant-numeric:tabular-nums}.data-table th.loc,.data-table td.loc,.data-table th.txt,.data-table td.txt{text-align:left;white-space:nowrap;font-size:12px;font-weight:500}.data-table td.txt{max-width:280px;overflow:hidden;text-overflow:ellipsis}.data-table th.num,.data-table td.num{text-align:center;font-variant-numeric:tabular-nums}.data-table td.signal{color:#16a34a;font-weight:600}.data-table th.check,.data-table td.check{display:table-cell;width:48px;min-width:48px;max-width:48px;padding:0;text-align:center;vertical-align:middle}.data-table th.check input,.data-table td.check input{width:16px;height:16px;margin:0}.data-table th.row-actions,.data-table td.row-actions{width:40px;text-align:right;padding-right:8px}.data-table td.row-actions .icon-btn{color:var(--muted)}.data-table td.row-actions .icon-btn:hover{color:#b91c1c;background:#fef2f2}.data-table tr.selected td{background:#f8fafc}.data-pager{padding:14px 2px 0}.pager-tools{display:flex;align-items:center;gap:10px}.page-size{border:1px solid var(--line);background:#fff;border-radius:10px;padding:7px 10px;font-size:13px;font-weight:500}.data-pager .pages .btn{min-width:34px;height:34px;padding:0 8px;border-radius:8px}.spark{display:block}.hc-spark,.hc-spark .highcharts-container,.hc-spark svg{overflow:visible}.status-chip{display:inline-flex;align-items:center;gap:6px;font-weight:500}.back{color:var(--blue);font-weight:500;display:inline-flex;align-items:center;gap:6px;margin-bottom:16px;font-size:13px}.detail-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}.sensor-id{display:flex;gap:16px;align-items:flex-start}.device-art{position:relative;width:88px;height:72px;border-radius:14px;background:#f3f5f7;display:grid;place-items:center;flex-shrink:0;border:1px solid var(--line)}.device-badge{position:absolute;top:-5px;right:-5px;width:20px;height:20px;border-radius:50%;background:#22c55e;color:#fff;border:2px solid #fff;font-size:13px;font-weight:700;line-height:1;display:grid;place-items:center;box-shadow:0 1px 2px #1018281f}.device-badge svg{display:block}.device-badge.warning{background:var(--orange)}.device-badge.offline{background:var(--red)}.title-row{display:flex;align-items:center;gap:8px}.title-row h1{font-size:28px;font-weight:700;margin:0;letter-spacing:-.035em;color:#111827}.sensor-comment{margin:4px 0 0;max-width:640px;color:var(--muted);font-size:13px;line-height:1.45;white-space:pre-wrap}.sensor-comment-add{margin-top:4px;padding:0;border:0;background:none;color:var(--faint);font-size:13px;cursor:pointer}.sensor-comment-add:hover{color:var(--muted)}.icon-btn{border:0;background:none;color:var(--faint);cursor:pointer;padding:4px;border-radius:8px;display:inline-flex}.icon-btn:hover{background:#f3f4f6;color:var(--muted)}.icon-btn.more{border:1px solid var(--line);background:#fff;border-radius:10px;padding:6px 8px;color:#6b7280}.icon-btn.more.open{background:#f3f4f6;color:#111827}.row-actions-col{width:44px;text-align:right;padding-right:10px}.row-menu{position:relative;display:inline-flex}.row-pop{position:fixed;min-width:160px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px #1018281f;padding:6px;z-index:40}.row-pop button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;padding:10px;border-radius:8px;cursor:pointer;color:#374151;font-weight:500;font-size:13px;text-align:left}.row-pop button:hover{background:#f3f4f6;color:#111827}.row-pop button svg{color:var(--muted);flex-shrink:0}.row-pop button.danger{color:#b91c1c}.row-pop button.danger:hover{background:#fef2f2;color:#991b1b}.row-pop button.danger svg{color:#b91c1c}.refresh-btn{margin-left:4px;padding:2px}.status-bar{display:flex;gap:12px;align-items:center;color:#4b5563;font-size:13px;flex-wrap:wrap;margin-top:10px}.status-bar .stat{display:inline-flex;align-items:center;gap:6px}.status-bar .sep{width:1px;height:14px;background:#e5e7eb}.ov-row1{display:grid;grid-template-columns:1fr;gap:16px}.ov-row2{display:grid;grid-template-columns:1fr;gap:16px;margin-top:16px}.ov-row3{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.packet-continuity{margin-top:16px}.packet-continuity-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}.packet-continuity-head h3{margin:0}.pkt-strip{position:relative;height:14px;margin:12px 0 6px;border-radius:3px;overflow:hidden;background:color-mix(in srgb,var(--text, #1a1a1a) 12%,transparent)}.pkt-strip-received{position:absolute;top:0;right:0;bottom:0;left:0;background:color-mix(in srgb,var(--ok, #2f6b4f) 55%,transparent)}.pkt-strip-gap{position:absolute;top:0;bottom:0;border:0;padding:0;cursor:pointer}.pkt-strip-gap-estimated{background:color-mix(in srgb,#b45309 80%,#000)}.pkt-strip-gap-requested{background:color-mix(in srgb,#1d4ed8 75%,#000)}.pkt-strip-gap-gone{background:color-mix(in srgb,var(--text, #1a1a1a) 35%,transparent)}.pkt-strip-tip{margin:0 0 8px}.pkt-gap-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.pkt-gap-list li{display:flex;align-items:center;justify-content:space-between;gap:12px}.metric-motion{display:grid;grid-template-columns:minmax(0,1fr) 148px;column-gap:10px;align-items:stretch;padding:4px 0 2px}.metric-motion-copy{min-width:0;overflow:hidden}.metric-motion-copy .metric-tile.row{padding:6px 0 0;border-bottom:0}.metric-motion-copy .metric-tile.row .pill{margin-left:8px}.metric-motion-copy .pos-addr{padding-left:26px;margin-top:2px;-webkit-line-clamp:1}.metric-motion:has(.move-map.expanded){grid-template-columns:1fr;align-items:stretch}.move-map{position:relative;min-width:0;min-height:0;height:100%;display:flex;flex-direction:column}.move-map .map-expand{position:absolute;top:4px;right:4px;z-index:500;width:26px;height:26px;background:#fff;box-shadow:0 1px 3px #0f172a1f}.move-map .map-box{flex:1 1 auto;height:100%;min-height:0;margin-bottom:0;border-radius:8px}.move-map.expanded{margin-top:8px}.move-map.expanded .map-box{height:180px;margin-bottom:6px;border-radius:10px}.move-map:not(.expanded) .leaflet-control-attribution{display:none}.trend-motion .move-map{height:auto;margin-top:8px}.trend-motion .move-map .map-box{flex:none;height:168px;min-height:168px}.pos-addr{color:#374151;font-size:12px;font-weight:500;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aq-head{justify-content:flex-start;gap:10px;margin-bottom:14px}.aq-split{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(220px,.9fr);gap:8px 28px;align-items:start}.aq-env{border-left:1px solid #eef0f3;padding-left:24px;min-width:0}.aq-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));row-gap:18px}.aq-col{padding:0 16px;display:flex;flex-direction:column;min-width:0;border-left:1px solid #eef0f3}.aq-col:nth-child(3n+1){border-left:0;padding-left:0}.aq-col:nth-child(3n){padding-right:0}.aq-name{color:#6b7280;font-size:13px;font-weight:500;margin-bottom:8px}.aq-val{font-size:32px;font-weight:700;letter-spacing:-.045em;line-height:1;color:#111827}.aq-unit{color:#9ca3af;font-size:12px;margin:5px 0 10px}.status-label{display:block;margin:0 0 12px;font-size:13px;font-weight:600;color:#16a34a}.status-label.warning{color:#b45309}.status-label.critical{color:#b91c1c}.aq-col .spark{width:100%;max-width:112px}.env-list{display:flex;flex-direction:column}.env-row{display:grid;grid-template-columns:32px 1fr auto auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #f3f4f6}.env-row:last-child{border-bottom:0;padding-bottom:0}.env-ico{width:32px;height:32px;border-radius:8px;background:#f3f4f6;color:#6b7280;display:grid;place-items:center}.env-name{color:var(--muted);font-size:13px}.env-val{font-size:14px}.legend{display:flex;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-bottom:8px}.legend-item{display:inline-flex;align-items:center;gap:0;border:0;background:transparent;padding:2px 4px;margin:0;color:inherit;font:inherit;cursor:pointer;border-radius:6px}.legend-item:hover{background:#f3f4f6}.legend-item.off{opacity:.4}.legend-item.off em,.legend-item.off{text-decoration:line-through}.legend em{font-style:normal;color:var(--faint);margin-left:4px;font-weight:400}.legend i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:6px;vertical-align:middle}.legend-item.scatter i{width:8px;height:8px;border-radius:50%}.trend-chart{height:220px;width:100%;min-width:0;overflow:hidden}.compare-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;margin:-6px 0 18px}.compare-presets{display:flex;flex-wrap:wrap;gap:6px}.compare-presets .btn{padding:6px 12px;font-size:13px;font-weight:600;border-radius:999px}.compare-dates{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.compare-date{display:flex;align-items:center;gap:8px;margin:0;font-size:12px;font-weight:600;color:var(--muted)}.compare-date input[type=date],.compare-date input[type=datetime-local]{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:13px;font-weight:500;color:var(--text);background:#fff;color-scheme:light;min-width:196px}.compare-legend{margin:0 0 16px;max-height:88px;overflow-y:auto;align-content:flex-start}.compare-charts{display:grid;gap:14px}.compare-trend{height:240px}.compare-chart-card .card-head h3 em{font-style:normal;color:var(--muted);font-weight:500;font-size:13px}.compare-page .trend-pick-hint{margin:-8px 0 14px}.compare-page.has-mark{padding-bottom:88px}.compare-avgs{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:10px;max-height:88px;overflow-y:auto;align-items:center;align-content:flex-start;font-size:12px;color:var(--muted)}.compare-avgs.is-selection{margin-top:6px;padding:6px 8px;border-radius:8px;background:#f3f6fb}.compare-avg-label{flex:0 0 auto;min-width:4.5rem;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}.compare-avg{display:inline-flex;align-items:center;gap:6px}.compare-avg i{width:10px;height:3px;border-radius:2px;display:inline-block}.compare-avg strong{color:var(--text);font-variant-numeric:tabular-nums}.compare-avg em{font-style:normal;color:var(--faint)}.compare-spec-interval{margin-top:14px;padding-top:14px;border-top:1px solid #eef0f3}.compare-spec-title{margin:0 0 10px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}.compare-spec-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.compare-spec-card h4{display:flex;align-items:center;gap:6px;margin:0 0 4px;font-size:13px;font-weight:600}.compare-spec-card h4 i{width:10px;height:3px;border-radius:2px;display:inline-block}.compare-spec-card .spec-hint{margin:0 0 8px}.compare-spec-card.total{margin-top:12px}.trend-pick-hint{color:var(--muted);font-size:12px;margin:8px 0 0}.trend-interval{margin-top:14px;padding-top:14px;border-top:1px solid #eef0f3}.trend-interval-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}.trend-interval-head h4{margin:0 0 2px;font-size:13px;font-weight:600}.metric-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.metric-group[data-id=air] .metric-tiles{align-items:start}.metric-group{min-width:0;overflow:visible;padding:14px 16px 12px;border:1px solid #e8eaee;border-radius:16px;background:#fff}.metric-group h5{display:flex;align-items:center;gap:8px;margin:0 0 12px;color:#111827;font-size:13px;font-weight:650}.metric-group h5 svg{color:#6b7280;flex-shrink:0}.metric-tiles{display:grid;gap:8px 20px}.metric-tiles.n-2,.metric-tiles.n-3,.metric-tiles.n-4{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-group[data-id=environment] .metric-tiles,.metric-group[data-id=device] .metric-tiles{grid-template-columns:1fr;gap:0}.metric-group[data-id=particles]{padding:14px 18px 16px}.metric-group[data-id=particles] .metric-tiles{gap:2px 16px}.metric-tile{min-width:0;overflow:visible}.metric-head{display:flex;align-items:center;gap:8px;min-width:0;color:#6b7280}.metric-head svg{flex-shrink:0;color:#6b7280}.metric-head .k{color:#6b7280;font-size:13px;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.metric-head .pill{margin-left:auto;font-size:11px;padding:1px 8px;flex-shrink:0}.metric-tile .vu{display:flex;align-items:baseline;gap:5px;min-width:0}.metric-tile .v{font-size:20px;font-weight:700;letter-spacing:-.04em;line-height:1.1;color:#111827}.metric-tile .u{color:#9ca3af;font-size:12px;font-weight:500}.metric-tile .status-label{display:inline-flex;align-items:center;gap:6px;margin:6px 0 4px;font-size:13px;font-weight:600}.metric-note{color:#9ca3af;font-size:12px}.spark-wrap{position:relative;display:block;min-width:0;width:var(--spark-w, 96px);height:var(--spark-h, 30px);overflow:visible;cursor:crosshair}.spark-wrap .spark{display:block;width:100%;height:100%}.spark-guide{position:absolute;top:0;bottom:0;width:1px;background:#94a3b8;transform:translate(-50%);pointer-events:none}.spark-dot{position:absolute;width:8px;height:8px;border-radius:50%;border:1.5px solid #fff;box-shadow:0 0 0 1px #0f172a1f;transform:translate(-50%,-50%);pointer-events:none}.sensor-table td{overflow:visible}.sensor-table tbody tr{position:relative}.spark-tip{position:absolute;bottom:calc(100% + 6px);z-index:30;pointer-events:none;background:#fff;border:1px solid #e8eaee;border-radius:8px;padding:6px 8px;box-shadow:0 6px 16px #0f172a1a;white-space:nowrap}.spark-tip.center{transform:translate(-50%)}.spark-tip.left{transform:translate(0)}.spark-tip.right{transform:translate(-100%)}.spark-tip .when{display:block;color:#6b7280;font-size:11px;margin-bottom:2px}.spark-tip strong{display:block;color:#111827;font-size:12px;font-weight:650}.metric-tile .spark-wrap{width:100%;height:32px}.metric-tile.hero{display:flex;flex-direction:column;min-width:0}.metric-tile.hero .vu{padding-left:24px;margin-top:4px}.metric-tile.hero .v{font-size:32px;letter-spacing:-.045em}.metric-tile.hero .status-label{padding-left:24px}.metric-tile.hero .spark-wrap{margin-top:8px;height:44px}.metric-tile.cell{display:grid;grid-template-columns:auto minmax(72px,1fr);grid-template-areas:"head head" "vu spark";align-items:end;column-gap:10px;padding:10px 8px 12px 0;border-right:1px solid #eef0f3;border-bottom:1px solid #eef0f3}.metric-group[data-id=particles] .metric-tile.cell:nth-child(2n){border-right:0;padding-right:2px;padding-left:12px}.metric-group[data-id=particles] .metric-tile.cell:nth-child(odd){padding-right:14px}.metric-group[data-id=particles] .metric-tile.cell:nth-last-child(-n+2){border-bottom:0;padding-bottom:6px}.metric-tile.cell .metric-head{grid-area:head;margin-bottom:4px}.metric-tile.cell .vu{grid-area:vu}.metric-tile.cell .v{font-size:18px}.metric-tile.cell .spark-wrap{grid-area:spark;height:28px;min-width:0}.metric-tile.row{display:flex;flex-wrap:wrap;align-items:center;column-gap:10px;padding:10px 0;border-bottom:1px solid #f3f4f6}.metric-tile.row:last-child{border-bottom:0;padding-bottom:2px}.metric-tile.row .metric-head{display:contents}.metric-tile.row .vu{padding:0}.metric-tile.row .v{font-size:16px}.metric-tile.row .spark-wrap{margin-left:auto;flex:1 1 36%;max-width:200px;min-width:80px;height:36px}.metric-tile.row .pill{margin-left:auto}.metric-tile.row:not(:has(.spark-wrap)) .vu,.metric-tile.row:not(:has(.spark-wrap)) .metric-note{flex-basis:100%;padding-left:26px}.trend-chart .highcharts-container{width:100%!important}.spec-chart{width:100%;min-width:0}.spec-chart.mini{height:52px;overflow:hidden}.spec-windows{display:flex;flex-wrap:wrap;gap:4px 12px;margin:6px 0 0;padding:0;list-style:none;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.spec-windows li{display:inline-flex;align-items:center;gap:5px}.spec-windows i{width:8px;height:8px;border-radius:2px;flex:0 0 auto}.metric-radon{min-width:0}.radon-spec{margin-top:8px}.radon-spec .spec-hint{margin:0 0 2px;font-variant-numeric:tabular-nums}.radon-spec .spec-chart{height:52px}.spec-hint{color:var(--muted);font-size:12px;margin:0 0 8px}.spec-energy-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin:12px 0 6px}.spec-energy-head h4{margin:0;font-size:13px;font-weight:600}.spec-energy-head .spec-hint{margin:0}.spec-rate-picks{display:flex;flex-wrap:wrap;gap:6px}.spec-rate-picks .btn{padding:4px 10px;font-size:12px}.spec-cell{border:0;background:#f3f4f6;color:#111827;font:inherit;font-variant-numeric:tabular-nums;padding:2px 8px;border-radius:6px;cursor:pointer}.spec-cell.on{background:#ede9fe;color:#6d28d9}.spec-preview{margin-top:12px}.alert-row{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px solid #f3f4f6}.alert-row:last-child{border-bottom:0}.alert-body{flex:1;min-width:0}.alert-top{display:flex;justify-content:space-between;gap:8px}.alert-title{font-size:13px;font-weight:600}.alert-detail{color:var(--muted);font-size:12px;margin-top:2px}.when{color:var(--faint);font-size:12px;white-space:nowrap}.seg{display:inline-flex;background:#f3f4f6;border-radius:10px;padding:3px;gap:2px}.seg button{border:0;background:none;padding:6px 12px;border-radius:8px;font-weight:600;font-size:13px;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;gap:6px}.seg button em{font-style:normal;font-size:11px;font-weight:700;min-width:16px;height:16px;padding:0 5px;border-radius:99px;background:#e5e7eb;color:#4b5563;display:grid;place-items:center}.seg button.active{background:#fff;color:#111827;box-shadow:0 1px 2px #10182814}.seg button.active em{background:var(--blue-soft);color:var(--blue)}.alerts-table td{vertical-align:middle}.alerts-table .alert-name{font-weight:600;color:#111827}.alerts-table tr.resolved td{color:var(--muted)}.alerts-table tr.resolved .alert-name{font-weight:500;color:#4b5563}.alerts-table .alert-action{text-align:right;white-space:nowrap}.alerts-table .alert-action .btn{padding:6px 10px;font-size:12px}.kv-list{display:flex;flex-direction:column}.device-reboot{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.device-reboot .hint{margin:8px 0 0}.kv{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid #f3f4f6;font-size:13px}.kv:last-child{border-bottom:0}.kv span{color:var(--muted)}.kv strong{font-weight:600}.endpoint-list{display:flex;flex-direction:column}.endpoint-row{align-items:flex-start}.endpoint-value{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;max-width:min(100%,640px);text-align:right}.endpoint-value code{word-break:break-all;font-weight:500}.kv .ok,.ok{color:var(--green);flex-shrink:0}.health-kv .kv{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);justify-content:stretch}.health-kv .kv span{justify-self:start}.health-kv .kv strong{justify-self:center;text-align:center}.health-kv .kv .ok{justify-self:end}.kv-list.compact .kv{padding:8px 0}.kv.wrap{align-items:flex-start}.kv.wrap strong{text-align:right;max-width:72%;white-space:normal;line-height:1.35}.meas-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}.meas-item{display:flex;align-items:center;gap:8px;font-size:13px}.meas-item em{margin-left:auto;font-style:normal;color:var(--green-text);font-size:12px;font-weight:500}.meas-foot{margin-top:14px;padding-top:12px;border-top:1px solid #f3f4f6;color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px}.map-box{height:132px;border-radius:10px;overflow:hidden;background:#e8edf2;margin-bottom:8px}.map-box.track{height:220px}.map-box .leaflet-control-attribution{font-size:10px;background:#ffffffd9}.gps-timeline{max-height:196px;overflow:auto;border:1px solid var(--line);border-radius:10px;margin-top:10px}.gps-tl-item{display:grid;grid-template-columns:118px 1fr auto;gap:8px;align-items:baseline;width:100%;text-align:left;padding:8px 10px;border:0;border-bottom:1px solid #eef0f3;background:#fff;cursor:pointer;font-size:12px}.gps-tl-item:last-child{border-bottom:0}.gps-tl-item:hover{background:#f8fafc}.gps-tl-item.active{background:#eff6ff}.gps-tl-item .when{color:var(--muted);font-variant-numeric:tabular-nums}.gps-tl-item .coord{font-weight:600;font-variant-numeric:tabular-nums}.gps-tl-item .meta{color:var(--muted)}.map-full{height:calc(100vh - 180px);min-height:420px;border-radius:14px;overflow:hidden;border:1px solid var(--line)}.map-full-wrap{position:relative}.map-preview{position:absolute;left:16px;bottom:16px;z-index:500;width:280px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px #1018281f;padding:16px 16px 14px}.map-preview-close{position:absolute;top:8px;right:8px;font-size:18px;line-height:1;color:var(--muted)}.map-pin span{display:block;width:14px;height:14px;background:var(--blue);border:2px solid #fff;border-radius:50%;box-shadow:0 1px 4px #2563eb73}.map-pin.active span,.map-pin.latest span{width:16px;height:16px;background:#1d4ed8;box-shadow:0 0 0 4px #2563eb38}.map-updated{color:var(--faint);font-size:12px;margin-top:8px}.int-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.fw-card{max-width:560px}.notes{color:var(--muted);font-size:13px;padding-left:18px}.progress{height:8px;background:#e5e7eb;border-radius:99px;overflow:hidden;margin:12px 0}.progress>div{height:100%;background:var(--blue)}.note{background:var(--blue-soft);color:#1e40af;padding:10px 12px;border-radius:10px;font-size:13px;margin:10px 0}.card label{display:block;margin:10px 0 6px;font-weight:500}.card input,.card select,.card textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font:inherit}.card input:disabled,.card input[readonly],.card select:disabled{background:#f3f4f6;color:var(--muted)}.card textarea{min-height:88px;resize:vertical}.card label.check{display:flex;align-items:center;gap:8px;font-weight:500;margin:14px 0 4px}.card .check input{width:auto}.btn-danger{color:#b91c1c;border-color:#fecaca;background:#fff}.btn-danger:hover{background:#fef2f2}.settings-stack{display:flex;flex-direction:column;gap:16px;max-width:720px}.settings-card{max-width:560px}.org-stack{max-width:720px}.org-stack .card{width:100%;max-width:none}.hint{color:var(--muted);font-size:13px;margin:0 0 12px;line-height:1.45}.sample-cfg-card{max-width:920px}.sample-cfg-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:12px}.sample-cfg-col{margin:0;padding:12px 14px 16px;border:1px solid var(--line);border-radius:10px;min-width:0}.sample-cfg-col legend{padding:0 6px;font-weight:600;font-size:13px}.sample-cfg-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 8px}.sample-cfg-chips .btn{padding:4px 8px;font-size:12px}.sample-cfg-chips .btn:disabled{cursor:default;opacity:.55}.sample-cfg-chips .btn.btn-primary:disabled{opacity:1}@media(max-width:800px){.sample-cfg-grid{grid-template-columns:1fr}}.form-actions{display:flex;gap:10px;align-items:center;margin-top:16px}.inline-form{display:flex;gap:8px;margin-bottom:8px;align-items:center}.inline-form input{flex:1;min-width:0;width:auto}.token{display:block;margin:8px 0;padding:8px 10px;background:#fff;border-radius:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;word-break:break-all;color:#1e3a8a}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:500}.coap-log tr.open{background:#f8fafc}.coap-detail td{background:#f8fafc;padding:8px 12px 16px;border-bottom:1px solid var(--line)}.coap-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.coap-detail h4{margin:0 0 8px;font-size:12px;color:var(--muted);font-weight:600}.coap-detail pre{margin:0;padding:10px 12px;background:#fff;border:1px solid var(--line);border-radius:10px;font-size:12px;line-height:1.45;overflow:auto;max-height:280px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.coap-body-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.coap-body-head h4{margin:0}.coap-raw-label{margin-top:14px}.coap-parsed{display:flex;flex-direction:column;gap:12px;max-height:420px;overflow:auto}.coap-parsed-title{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}.coap-fields{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.coap-fields th,.coap-fields td{padding:5px 10px;font-size:12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.coap-fields tr:last-child th,.coap-fields tr:last-child td{border-bottom:0}.coap-fields th{width:42%;color:var(--muted);font-weight:600;white-space:nowrap}.coap-fields td{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#111827;word-break:break-word}.coap-decode{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}.coap-decode-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.coap-decode-head h4{margin:0}.coap-decode-summary{margin:0 0 14px;font-size:13px;color:var(--muted);line-height:1.45}.coap-decode-section{margin-bottom:16px}.coap-decode-section-title{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:4px}.coap-decode-note{margin:0 0 8px;font-size:12px;color:var(--muted);line-height:1.45}.coap-decode-bits{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 10px}.coap-bit{font-size:11px;padding:2px 8px;border-radius:999px;background:#f3f4f6;color:#9ca3af;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.coap-bit.on{background:#e0e7ff;color:#3730a3;font-weight:600}.coap-decode-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.coap-decode-table th,.coap-decode-table td{padding:6px 10px;font-size:12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.coap-decode-table th{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:#f8fafc}.coap-decode-table tr:last-child td{border-bottom:0}.coap-decode-table th:first-child,.coap-decode-table td:first-child{width:88px;white-space:nowrap}.coap-decode-table th:last-child,.coap-decode-table td:last-child{width:28%}.coap-decode-name{font-weight:600;font-size:12px;color:#111827}.coap-decode-meaning{font-size:12px;color:var(--muted);font-weight:400;line-height:1.4;margin-top:2px}.coap-spec{margin:8px 0 4px}.coap-spec .spec-chart{height:auto}.coap-fields .coap-spec{margin:6px 0 2px}.coap-raw-block{margin-top:8px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 12px 10px}.coap-raw-block summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--muted);-webkit-user-select:none;user-select:none}.coap-raw-block pre{margin:10px 0 0;max-height:220px}@media(max-width:1100px){.coap-detail-grid{grid-template-columns:1fr}.coap-decode-table th:last-child,.coap-decode-table td:last-child{width:auto}}@media(max-width:1200px){.ov-row1,.ov-row2,.ov-row3,.kpis,.int-grid,.grid-3,.grid-dash,.aq-split{grid-template-columns:1fr}.aq-env{border-left:0;padding-left:0;padding-top:8px}.metric-groups{grid-template-columns:1fr}}@media(max-width:900px){.page-with-bulk{padding-bottom:140px}.bulk-bar{left:50%;bottom:calc(12px + env(safe-area-inset-bottom));width:calc(100vw - 24px);max-width:440px;justify-content:center}.compare-toolbar{flex-direction:column;align-items:flex-start}.shell{display:flex;flex-direction:column;grid-template-columns:none}.mobile-bar{display:flex;align-items:center;gap:8px;flex-shrink:0;height:calc(52px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 10px 0;background:#fff;border-bottom:1px solid var(--line);z-index:20}.mobile-brand{font-weight:700;font-size:18px;letter-spacing:-.04em}.menu-btn{color:#111827}.nav-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a66;z-index:40;border:0;padding:0;opacity:0;pointer-events:none;transition:opacity .2s ease}.shell.nav-open .nav-scrim{opacity:1;pointer-events:auto}.sidebar{position:fixed;top:0;left:0;bottom:0;width:min(280px,86vw);z-index:50;transform:translate(-105%);transition:transform .22s ease;padding:16px 12px 12px;box-shadow:none}.shell.nav-open .sidebar{transform:translate(0);box-shadow:8px 0 32px #0f172a2e}.sidebar-top{display:flex;align-items:center;justify-content:space-between;padding:4px 8px 16px}.sidebar-brand{font-weight:700;font-size:20px;letter-spacing:-.04em}.sidebar-close{color:#111827}.nav a span.label,.sidebar-foot .who{display:block}.nav a.active:before{display:block}.main{padding:16px 14px 36px}.page-head,.title-row{flex-wrap:wrap}.page-head h1,.title-row h1{font-size:22px}.tabs{gap:16px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs a,.tabs button{white-space:nowrap}.filters{flex-wrap:wrap}.filters input{min-width:0;flex:1 1 160px}.kpis,.dash-kpis,.aq-cols{grid-template-columns:1fr 1fr}.aq-col:nth-child(3n+1){border-left:1px solid #eef0f3;padding-left:16px}.aq-col:nth-child(odd){border-left:0;padding-left:0}.aq-col:nth-child(3n){padding-right:16px}.aq-col:nth-child(2n){padding-right:0}.data-head{flex-direction:column;align-items:stretch}.data-tools{justify-content:flex-start}.map-full{height:calc(100vh - 140px);min-height:280px}.map-preview{left:8px;right:8px;bottom:8px;width:auto}.loc-bar,.dist-row{grid-template-columns:72px 1fr 28px}.trend-chart .highcharts-yaxis-labels{display:none}.card{padding:16px 14px 14px}.aq-val{font-size:24px}.title-row{width:100%}.status-bar{font-size:12px}}.dash-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end}.dash-toolbar select{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#fff;min-width:140px}.dash-live{margin:-6px 0 16px}.dash-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px}.dash-kpi{text-align:left;width:100%;cursor:pointer}.dash-kpi .value.online{color:#15803d}.dash-kpi .value.warning{color:#b45309}.dash-kpi .value.offline{color:#b91c1c}.dash-kpi .value.maintenance{color:#6b7280}.dash-kpi .link{display:inline-block;margin-top:8px}.dash-hit{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;padding:0;text-align:left;color:inherit;font:inherit;cursor:pointer;width:100%}.dash-hit:hover{background:#f8fafc}button.kpi.dash-hit{padding:14px 16px}button.aq-col.dash-hit{background:transparent}button.aq-col.dash-hit:hover{background:#f8fafc;border-radius:10px}button.env-row.dash-hit{width:100%}button.alert-row.dash-hit,button.rank-row.dash-hit{width:100%;padding:10px 4px;border-radius:8px}button.loc-bar.dash-hit{padding:6px 0}.dash-row{display:grid;gap:14px;margin-bottom:14px}.dash-row.air-env{grid-template-columns:1.7fr 1fr}.dash-row.three{grid-template-columns:1fr 1fr 1fr}.dash-row.two{grid-template-columns:1fr 1fr}.derived{font-style:normal;color:var(--faint);font-weight:400;font-size:11px}.donut-wrap{display:flex;align-items:center;gap:18px}.donut{width:132px;height:132px;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.donut-hole{width:82px;height:82px;border-radius:50%;background:#fff;display:grid;place-items:center;text-align:center}.donut-hole strong{font-size:22px;line-height:1}.donut-hole span{display:block;color:var(--muted);font-size:11px}.donut-legend{display:flex;flex-direction:column;gap:8px;flex:1}.donut-legend button{display:flex;align-items:center;gap:8px;background:none;border:0;padding:4px 0;cursor:pointer;font:inherit;color:inherit}.donut-legend i{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dist-row,.loc-bar{display:grid;gap:8px;align-items:center;font-size:13px;margin:8px 0}.loc-bar{grid-template-columns:110px 1fr 28px}.dist-row{grid-template-columns:110px 1fr 28px auto}.loc-name{text-align:left;color:var(--text)}.loc-track,.dist-row .loc-track{height:8px;background:#eef1f5;border-radius:99px;overflow:hidden}.loc-track i{display:block;height:100%;background:var(--blue);border-radius:99px}.rank-row{display:grid;grid-template-columns:22px 1fr auto auto;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid #f3f4f6}.rank-row:last-of-type{border-bottom:0}.rank-n{color:var(--faint);font-weight:600}.rank-meta{display:flex;flex-direction:column;min-width:0}.rank-meta strong{font-size:13px}.rank-val{font-size:13px;white-space:nowrap}.data-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:12px}.data-kpis div{display:flex;flex-direction:column;gap:4px}.data-kpis strong{font-size:18px}.dash-map-card{position:relative;margin-bottom:14px}.dash-map{position:relative;height:280px;border-radius:10px;overflow:hidden;background:#e8edf2}.dash-map-el{height:100%}.dash-map .leaflet-control-attribution{font-size:10px;background:#ffffffd9}.map-cta{position:absolute;right:12px;bottom:12px;z-index:500;background:#fff;box-shadow:0 1px 4px #1018281f}.dash-pin{background:none!important;border:0!important}.dash-pin span{display:grid;place-items:center;min-width:22px;height:22px;padding:0 5px;border-radius:99px;color:#fff;font-size:11px;font-weight:700;border:2px solid #fff;box-shadow:0 1px 4px #0000002e}.dash-pop{font-size:12px;line-height:1.45;min-width:140px}.dash-pop-link{color:var(--blue);font-weight:600;display:inline-block;margin-top:6px}.dash-updated{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;margin-top:8px}.dash-updated.stale{color:#b45309}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#11182759;display:grid;place-items:center;z-index:2000;padding:24px}.card.modal{width:min(480px,100%);max-height:80vh;overflow:auto}.fw-bulk .sub{color:var(--muted);margin:0 0 14px;font-size:13px;line-height:1.45}.fw-bulk-group{margin-bottom:12px}.fw-bulk-group label{display:block;margin-bottom:6px}.fw-bulk-result{display:grid;gap:8px;margin:4px 0 8px}.fw-bulk-result div{display:flex;justify-content:space-between;gap:16px;font-size:14px}.card.modal.secret-modal{width:min(520px,100%)}.secret-warn{display:flex;gap:10px;align-items:flex-start;background:#fff7ed;color:#9a3412;border:1px solid #fed7aa;border-radius:10px;padding:12px 14px;font-size:13px;line-height:1.5;margin:0 0 16px}.secret-warn .icon{flex-shrink:0;margin-top:1px}.secret-warn strong{display:block;margin-bottom:2px}.secret-box{display:flex;gap:8px;align-items:stretch;margin:6px 0 8px}.secret-box .token{flex:1;margin:0;display:flex;align-items:center;background:#f8fafc;border:1px solid var(--line)}.secret-box .btn{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;white-space:nowrap}.docs{max-width:800px}.docs-lead{color:var(--muted);font-size:15px;line-height:1.55;margin:0 0 8px}.docs h2{font-size:18px;margin:8px 0}.docs h2:not(:first-child){margin-top:28px}.docs p{font-size:14px;line-height:1.55;margin:0 0 12px}.docs-table{margin:8px 0 16px}.docs-pre{position:relative;background:#0f172a;color:#e2e8f0;border-radius:12px;padding:28px 16px 14px;margin:10px 0 16px;overflow:auto}.docs-pre-label{position:absolute;top:8px;left:14px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#94a3b8}.docs-copy{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;gap:6px;padding:4px 8px;font-size:12px;background:#1e293b;color:#e2e8f0;border-color:#334155}.docs-copy:hover{background:#334155}.docs-pre pre{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}.docs-pre code{color:inherit}.widget-toggles{display:grid;gap:8px;margin-top:14px}.check{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500}.card.modal .check input{width:auto}@media(max-width:1200px){.dash-kpis,.dash-row.air-env,.dash-row.three,.dash-row.two,.data-kpis{grid-template-columns:1fr}}@keyframes sk-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.sk{display:inline-block;vertical-align:middle;height:12px;border-radius:6px;background:linear-gradient(90deg,#e8eaee,#f7f8fa,#e8eaee 90%);background-size:200% 100%;animation:sk-shimmer 1.15s ease-in-out infinite}.sk-block{display:block;width:100%;margin-top:14px}.sk-nav{display:flex;align-items:center;gap:10px;padding:10px 16px}.sk-table{padding:8px 12px 12px}.sk-tr{display:flex;align-items:center;gap:16px;padding:14px 4px;border-bottom:1px solid #f0f2f5}.live-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--muted)}.live-status i{width:8px;height:8px;border-radius:99px;background:#9ca3af}.live-status.on{color:#15803d}.live-status.on i{background:#22c55e;box-shadow:0 0 #22c55e8c;animation:live-pulse 1.6s ease-out infinite}@keyframes live-pulse{0%{box-shadow:0 0 #22c55e73}70%{box-shadow:0 0 0 6px #22c55e00}to{box-shadow:0 0 #22c55e00}}.live-list{max-height:420px;overflow:auto;margin:0 -8px}.live-row{display:block;padding:10px 8px;border-bottom:1px solid #eef0f3;border-radius:8px}button.live-row.dash-hit:hover{background:#f8fafc}.live-row.fresh{animation:live-flash 1.2s ease}@keyframes live-flash{0%{background:#ecfdf5}to{background:transparent}}.live-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.live-place{font-size:12px;margin-top:2px}.live-metrics{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:6px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.axis-settings th,.axis-settings td{vertical-align:middle}.card .axis-settings input{width:120px;max-width:100%;margin:0}.axis-settings .legend-item{padding:0;cursor:default}.axis-settings .legend-item i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:6px}.axis-settings .legend-item:hover{background:transparent;text-decoration:none}@media(max-width:699px){.sensor-table th.check,.sensor-table td.check{position:sticky;left:0;z-index:1;background:#fff}.sensor-table thead th.check{z-index:2}.sensor-table tr.selected td.check{background:var(--blue-soft)}.sensor-kpis{display:none}.filter-panel{grid-template-columns:1fr}.pager{flex-wrap:wrap;gap:10px}.pager .pages{flex-wrap:wrap}}@media(max-width:640px){.main{padding:14px 12px 32px}input,select,textarea,.card input,.card select,.card textarea,.filters input,.filters select{font-size:16px}.icon-btn{min-width:36px;min-height:36px;justify-content:center;align-items:center}.modal-back{padding:12px}.card.modal{width:100%}.page-head{flex-direction:column;align-items:stretch}.page-head .row,.dash-toolbar{width:100%}.dash-toolbar select{flex:1;min-width:0}.dash-kpis,.kpis,.data-kpis,.aq-cols{grid-template-columns:1fr}.aq-cols .aq-col{border-left:0;padding-left:0;padding-right:0}.dash-row.two,.dash-row.three,.dash-row.air-env,.grid-2{grid-template-columns:1fr}.card-head{flex-wrap:wrap;gap:8px}.donut-wrap{flex-wrap:wrap}.rank-row{grid-template-columns:22px minmax(0,1fr) auto}.rank-row>:last-child{grid-column:2 / -1;justify-self:end}.rank-val{white-space:normal}.dist-row{grid-template-columns:minmax(0,1fr) auto auto}.dist-row .loc-track{grid-column:1 / -1}.loc-bar{grid-template-columns:minmax(0,1fr) auto}.loc-bar .loc-track{grid-column:1 / -1}.live-top{flex-wrap:wrap}.sensor-id{min-width:0}.sensor-id>div{min-width:0}.title-row{flex-wrap:wrap}.title-row h1,.sensor-id h1{overflow-wrap:anywhere}.status-bar{width:100%}.trend-head{flex-direction:column;align-items:stretch}.head-actions{width:100%;flex-wrap:wrap;justify-content:flex-start}.range-select,.trend-hours{flex:1 1 140px}.range-select,.trend-hours input,.data-select select,.compare-date input,.page-size{font-size:16px}.metric-tiles.n-2,.metric-tiles.n-3,.metric-tiles.n-4,.metric-group[data-id=particles] .metric-tiles{grid-template-columns:1fr}.metric-group[data-id=particles] .metric-tile.cell,.metric-group[data-id=particles] .metric-tile.cell:nth-child(n){border-right:0;padding-left:0;padding-right:0;border-bottom:1px solid #eef0f3}.metric-group[data-id=particles] .metric-tile.cell:last-child{border-bottom:0}.metric-motion{grid-template-columns:1fr}.move-map .map-box{height:140px;min-height:140px}.gps-tl-item{grid-template-columns:minmax(0,1fr) auto}.gps-tl-item .when{grid-column:1 / -1}.meas-grid{grid-template-columns:1fr}.data-tools{width:100%;flex-direction:column;align-items:stretch}.data-select,.data-select select,.data-export{width:100%;min-width:0}.data-table th.ts,.data-table td.ts{position:sticky;left:0;z-index:1;background:#fff;box-shadow:1px 0 0 var(--line)}.data-table thead th.ts{z-index:2;background:#f4f6f8}.data-table th.check,.data-table td.check{position:sticky;left:0;z-index:3;background:#fff}.data-table thead th.check{z-index:4;background:#f4f6f8}.data-table th.check+th.ts,.data-table td.check+td.ts{left:48px}.data-table tr.selected td.ts,.data-table tr.selected td.check{background:#f8fafc}.data-pager{flex-wrap:wrap;align-items:flex-start;gap:10px}.pager-tools,.data-pager .pages{flex-wrap:wrap}.data-pager .pages .btn{min-width:36px}.compare-dates,.compare-date{width:100%}.compare-date input{min-width:0;width:100%;flex:1}.compare-avg-label{min-width:0}.compare-avgs{max-height:none}.map-full{height:calc(100dvh - 180px);min-height:220px}.map-preview{max-height:38vh;overflow:auto}.kv-list:not(.health-kv) .kv{align-items:flex-start}.kv-list:not(.health-kv) .kv strong,.endpoint-value{text-align:right;overflow-wrap:anywhere;max-width:min(100%,62%)}.health-kv .kv strong,.endpoint-value code,.endpoint-url{overflow-wrap:anywhere}.table-wrap{-webkit-overflow-scrolling:touch}.filters input,.filters select,.filters .filter-toggle{width:100%;flex:1 1 100%}.inline-form,.form-actions{flex-wrap:wrap}}
