.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: #070b16;--panel: rgba(16, 24, 43, .82);--panel-solid: #0e1729;--border: rgba(88, 130, 200, .18);--text: #dbe6ff;--muted: #7f92b8;--accent: #22d3ee;--accent2: #3b82f6;--green: #34d399;--amber: #fbbf24;--red: #f87171;--purple: #a78bfa;--fs-hero: 46px;--fs-display: 30px;--fs-xl: 26px;--fs-h2: 24px;--fs-lg: 22px;--fs-md: 20px;--fs-title: 16px;--fs-body: 14px;--fs-sm: 13px;--fs-xs: 12px;--fs-2xs: 11px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,PingFang SC,Microsoft YaHei,Segoe UI,Roboto,sans-serif;background:radial-gradient(1200px 600px at 15% -10%,rgba(34,211,238,.12),transparent),radial-gradient(1000px 500px at 100% 0%,rgba(59,130,246,.14),transparent),var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}*{scrollbar-width:thin;scrollbar-color:rgba(120,140,175,.4) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:#788caf61;border-radius:8px;border:3px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background-color:#788caf99;background-clip:content-box}::-webkit-scrollbar-corner{background:transparent}.app.light{scrollbar-color:rgba(100,120,150,.35) transparent}.app.light ::-webkit-scrollbar-thumb{background-color:#64789652;background-clip:content-box}.app.light ::-webkit-scrollbar-thumb:hover{background-color:#6478968c;background-clip:content-box}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.topbar{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;padding:8px 16px;white-space:nowrap;background:linear-gradient(90deg,#0e1729f2,#0e172999);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}.brand .logo{width:34px;height:34px;border-radius:9px;flex:0 0 auto;background:linear-gradient(135deg,var(--accent),var(--accent2));display:grid;place-items:center;font-weight:800;color:#04121f;font-size:var(--fs-title);box-shadow:0 0 22px #22d3ee80}.brand h1{font-size:var(--fs-title);margin:0;letter-spacing:.5px;white-space:nowrap}.brand .sub{font-size:var(--fs-2xs);color:var(--muted);margin-top:2px;white-space:nowrap}.navbar{padding:6px 16px;background:linear-gradient(90deg,#0e1729d9,#0e172980);border-bottom:1px solid var(--border)}.tabs{display:flex;gap:4px;flex-wrap:wrap;row-gap:6px}.tab{padding:7px 11px;border-radius:8px;cursor:pointer;font-size:13px;white-space:nowrap;flex:0 0 auto;color:var(--muted);border:1px solid transparent;transition:all .15s}.tab:hover{color:var(--text);background:#3b82f614}.tab.active{color:#fff;background:linear-gradient(135deg,#22d3ee38,#3b82f638);border-color:var(--border)}.spacer{flex:1}.engine-badge{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted);flex:0 0 auto;padding:6px 10px;border:1px solid var(--border);border-radius:20px;background:var(--panel);max-width:220px;overflow:hidden;text-overflow:ellipsis}.dot{width:8px;height:8px;border-radius:50%}.dot.on{background:var(--green);box-shadow:0 0 8px var(--green)}.dot.off{background:var(--amber);box-shadow:0 0 8px var(--amber)}.content{flex:1;overflow:auto;padding:16px 20px}.body{display:flex;flex:1;min-height:0}.sidebar{width:216px;flex:0 0 auto;display:flex;flex-direction:column;background:linear-gradient(180deg,#0e1729e6,#0a101eb3);border-right:1px solid var(--border);transition:width .16s}.sidebar.collapsed{width:58px}.side-top{padding:10px 10px 4px}.side-scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 8px 10px}.side-foot{padding:9px 12px;font-size:12px;color:var(--muted);cursor:pointer;border-top:1px solid var(--border);text-align:center;white-space:nowrap}.side-foot:hover{color:var(--text)}.nav-group{margin-bottom:2px}.ng-head{display:flex;align-items:center;gap:8px;padding:12px 10px 5px;cursor:pointer;color:var(--muted);font-size:var(--fs-sm);font-weight:700;letter-spacing:.3px;-webkit-user-select:none;user-select:none;background:transparent}.ng-head:hover{color:var(--text)}.ng-icon{width:16px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--muted);opacity:.85}.ng-label{flex:1 1 auto}.ng-caret{transition:transform .15s;opacity:.45;font-size:14px}.ng-caret.open{transform:rotate(90deg)}.ng-items{display:flex;flex-direction:column;gap:1px;padding:1px 2px 3px}.nav-item{display:flex;align-items:center;gap:9px;padding:8px 10px;min-height:34px;border-radius:7px;cursor:pointer;font-size:var(--fs-sm);line-height:1;color:#8fa2c8;border:1px solid transparent;border-left:3px solid transparent;white-space:nowrap;transition:all .12s}.nav-item:hover{color:var(--text);background:#3b82f61a}.nav-item.active{color:#fff;background:linear-gradient(135deg,#22d3ee3d,#3b82f63d);border-left-color:var(--accent)}.nav-item.opened{color:#cfe0ff}.nav-item .ni-dot{width:5px;height:5px;border-radius:50%;background:#5b6c92;flex:0 0 auto;margin-left:4px}.nav-item.active .ni-dot{background:var(--accent);box-shadow:0 0 6px var(--accent)}.nav-item.opened .ni-dot{background:var(--accent2)}.nav-item .ni-icon{width:20px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:#9aa8c4}.nav-item:hover .ni-icon{color:var(--text)}.nav-item.active .ni-icon,.home-item .ni-icon{color:var(--accent)}.nav-item .ni-label{flex:1 1 auto;display:flex;align-items:center;gap:6px}.home-item{font-weight:600;font-size:var(--fs-sm);color:var(--text);padding:8px 10px;min-height:34px;border-radius:7px;border:1px solid transparent;border-left:3px solid transparent;background:transparent}.home-item.active{background:linear-gradient(135deg,#22d3ee33,#3b82f633);border-left-color:var(--accent)}.tabstrip{display:flex;align-items:center;gap:4px;padding:6px 12px 0;overflow-x:auto;background:#0e172980;border-bottom:1px solid var(--border);white-space:nowrap}.wtab{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;cursor:pointer;font-size:13px;color:var(--muted);border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;flex:0 0 auto;transition:all .12s}.wtab:hover{color:var(--text);background:#3b82f614}.wtab.active{color:#fff;background:var(--panel-solid);border-color:var(--border);position:relative;top:1px}.wtab-x{font-size:var(--fs-body);line-height:1;opacity:.6;border-radius:4px;padding:0 3px}.wtab-x:hover{opacity:1;background:#f8717140;color:#fca5a5}.ni-tag{font-size:var(--fs-2xs);padding:1px 5px;border-radius:6px;font-weight:700;background:#22d3ee2e;color:#67e8f9}.sidebar.collapsed .ng-head,.sidebar.collapsed .nav-item{justify-content:center;padding:8px 4px}.sidebar.collapsed .ni-dot{display:none}.main{flex:1 1 auto;display:flex;flex-direction:column;min-width:0}.crumb{display:flex;align-items:center;gap:8px;padding:9px 20px;font-size:12px;color:var(--muted);border-bottom:1px solid var(--border);background:#0e172966}.crumb .cb-home{cursor:pointer}.crumb .cb-home:hover{color:var(--text)}.crumb .cb-sep{opacity:.5}.crumb .cb-cur{color:var(--text);font-weight:600}.kiosk{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:var(--bg);overflow:auto}.kiosk>.content,.kiosk .content{height:100%}.kiosk-exit{position:fixed;top:12px;right:16px;z-index:1200;padding:7px 14px!important}.home{max-width:1200px}.home-hero{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.home-hero h2{margin:0;font-size:var(--fs-lg)}.home-sub{color:var(--muted);font-size:13px;margin-top:6px}.home-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}.home-kpi{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px 16px}.hk-label{font-size:12px;color:var(--muted)}.hk-value{font-size:var(--fs-lg);font-weight:800;margin-top:4px}.hk-value small{font-size:12px;color:var(--muted);font-weight:500}.home-section{font-size:13px;color:var(--muted);font-weight:700;margin:18px 0 10px;letter-spacing:.5px}.home-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.launch-card{position:relative;background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:16px 16px 14px;cursor:pointer;overflow:hidden;transition:transform .12s,box-shadow .12s}.launch-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #00000059}.launch-card .lc-bar{position:absolute;left:0;top:0;bottom:0;width:4px}.launch-card.screen{background:linear-gradient(135deg,#141e34b3,#10182b99)}.lc-title{font-size:var(--fs-body);font-weight:700;margin-bottom:6px}.lc-desc{font-size:12px;color:var(--muted);line-height:1.5;min-height:34px}.lc-go{font-size:12px;font-weight:700;margin-top:8px}.filterbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;margin-bottom:12px;background:var(--panel);border:1px solid var(--border);border-radius:12px}.fb-field{display:flex;align-items:center;gap:7px}.fb-field label{font-size:var(--fs-xs);color:var(--muted);white-space:nowrap}.fb-field .input,.filterbar .btn{height:34px;padding-top:0;padding-bottom:0}.panel-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}.panel-head .ph-icon{color:var(--brand);display:inline-flex}.panel-head .ph-title{margin:0;font-size:var(--fs-body);font-weight:700}.filterbar .btn+.btn,.row-acts .btn+.btn,.btn-group .btn+.btn,.drawer-foot .btn+.btn,.panel-head .btn+.btn,.filterbar .btn.sm+.btn.sm,.row-acts .btn.sm+.btn.sm,.btn-group .btn.sm+.btn.sm,.panel-head .btn.sm+.btn.sm{margin-left:0}.pager{display:flex;align-items:center;gap:6px;padding:10px 2px 2px;flex-wrap:wrap}.pg-total{font-size:12px;color:var(--muted);margin-right:10px}.pg-btn{min-width:28px;height:28px;padding:0 8px;border-radius:6px;cursor:pointer;background:transparent;color:var(--text-2);border:1px solid var(--border);font-size:var(--fs-xs);display:inline-flex;align-items:center;justify-content:center;transition:all .12s}.pg-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.pg-btn.active{background:var(--accent);color:#04121f;border-color:var(--accent);font-weight:700}.pg-btn:disabled{opacity:.4;cursor:not-allowed}.pg-dots{color:var(--muted);padding:0 3px;font-size:12px}.pager .input{height:28px;padding:0 8px;font-size:var(--fs-xs);border-radius:6px}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background:#0408128c;display:flex;justify-content:flex-end}.drawer{width:620px;max-width:92vw;height:100%;background:var(--panel-solid);border-left:1px solid var(--border);display:flex;flex-direction:column;box-shadow:-12px 0 40px #0006;animation:drawin .16s ease-out}@keyframes drawin{0%{transform:translate(30px);opacity:.6}to{transform:none;opacity:1}}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}.drawer-head b{font-size:var(--fs-title)}.drawer-x{cursor:pointer;font-size:var(--fs-md);color:var(--muted);line-height:1}.drawer-x:hover{color:var(--text)}.drawer-body{flex:1;overflow:auto;padding:14px 18px}.drawer-foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap;padding:10px 16px;border-top:1px solid var(--border);background:var(--surface)}.segbtns{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;flex-wrap:wrap;background:var(--surface)}.segbtns .seg,.segbtns>button{padding:6px 14px;font-size:var(--fs-sm);line-height:1.4;cursor:pointer;color:var(--text-2);background:transparent;border:0;border-left:1px solid var(--border);transition:background .15s,color .15s;font-family:inherit;white-space:nowrap}.segbtns .seg:first-child,.segbtns>button:first-child{border-left:0}.segbtns .seg:hover,.segbtns>button:hover{background:var(--surface-2);color:var(--text-1)}.segbtns .seg.on,.segbtns>button.on{background:var(--brand);color:#fff;font-weight:600}.segbtns>button+button{margin-left:0}.grid-roster th,.grid-roster td{text-align:center;white-space:nowrap}.grid-roster .shift-col{background:#3b82f61f;border-left:1px solid var(--border)}.grid-roster .dir-col{font-weight:500;font-size:11px;color:var(--muted)}.grid-roster .t-up{color:#67e8f9}.grid-roster .t-down{color:#fcd34d}.grid-roster tbody tr:nth-child(2n) td{background:#3b82f60a}.kpi-row{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:14px}.kpi{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px 16px;position:relative;overflow:hidden}.kpi:after{content:"";position:absolute;right:-20px;top:-20px;width:70px;height:70px;background:radial-gradient(circle,rgba(34,211,238,.25),transparent 70%)}.kpi .label{font-size:12px;color:var(--muted)}.kpi .value{font-size:var(--fs-xl);font-weight:800;margin-top:6px}.kpi .value small{font-size:13px;color:var(--muted);font-weight:500}.kpi-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px 16px;flex:1 1 auto}.kpi-card .kpi-label{font-size:12px;color:var(--muted)}.kpi-card .kpi-value{font-size:var(--fs-lg);font-weight:800;margin-top:4px}.kpi-card .kpi-sub{font-size:11px;color:var(--muted);margin-top:2px}.grid-main{display:grid;grid-template-columns:1fr 340px;gap:14px;height:calc(100% - 110px)}.grid-forecast{display:grid;grid-template-columns:1fr 1fr;gap:14px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;min-height:0}.panel h3{margin:0 0 10px;font-size:14px;display:flex;align-items:center;gap:8px}.panel h3 .bar{width:4px;height:15px;background:var(--accent);border-radius:2px}.map-wrap{position:relative;padding:0;overflow:hidden}.leaflet-container{height:100%;width:100%;background:#0a0f1e;border-radius:14px}.app.light .leaflet-container{background:#e9eef6}.map-legend{position:absolute;z-index:500;bottom:12px;left:12px;background:#0a0f1ed1;border:1px solid var(--border);border-radius:10px;padding:8px 12px;font-size:12px;display:flex;gap:14px;flex-wrap:wrap}.map-legend span{display:flex;align-items:center;gap:6px}.map-legend .swatch{width:10px;height:10px;border-radius:3px}.chip{display:inline-block;padding:1px 8px;border-radius:4px;font-size:var(--fs-xs);line-height:18px;white-space:nowrap;color:var(--muted);background:#7891be1f;border:1px solid var(--border)}.app.light .chip{color:#5a6b8c;background:#647daa1a}.side-col{display:flex;flex-direction:column;gap:14px;min-height:0}.alerts-list{overflow:auto;display:flex;flex-direction:column;gap:8px}.alert-item{border-left:3px solid var(--amber);background:#fbbf240f;padding:8px 10px;border-radius:8px;font-size:12px}.alert-item.critical{border-color:var(--red);background:#f8717114}.alert-item.info{border-color:var(--accent);background:#22d3ee0f}.alert-item .t{font-weight:700;margin-bottom:3px}.alert-item .d{color:var(--muted);line-height:1.4}.alert-item .ack{float:right;color:var(--accent);cursor:pointer;font-size:11px}.page-h2{font-size:var(--fs-h2);line-height:1.35;margin:0 0 12px;font-weight:700;color:var(--text-1)}.page-h2.lg{font-size:var(--fs-xl)}table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);table-layout:auto}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid rgba(88,130,200,.1);vertical-align:middle;line-height:1.45}th{white-space:nowrap}td{max-width:420px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}td .cell-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;word-break:break-word;min-height:2.7em}td .cell-1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td .sub{color:var(--muted);font-size:var(--fs-xs);margin-top:2px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}th{color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--panel-solid)}tr:hover td{background:#3b82f60d}.table-wrap{overflow:auto}td .row-acts{display:flex;align-items:center;gap:8px;flex-wrap:nowrap}td:has(>.btn),td:has(>.link),td:has(>.row-acts){white-space:nowrap}td .btn,td .link{flex:0 0 auto}.badge{padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600}.badge.urban{background:#3b82f633;color:#93c5fd}.badge.shuttle{background:#22d3ee33;color:#67e8f9}.badge.rural{background:#fbbf2433;color:#fcd34d}.badge.microcirc{background:#a78bfa33;color:#c4b5fd}.badge.high{background:#f8717133;color:#fca5a5}.badge.med{background:#fbbf2433;color:#fcd34d}.pill{padding:2px 8px;border-radius:12px;font-size:11px}.pill.pending{background:#fbbf242e;color:#fcd34d}.pill.assigned{background:#34d3992e;color:#6ee7b7}.pill.done{background:#7f92b82e;color:#9fb3d8}.rec-card{border:1px solid var(--border);border-radius:12px;padding:12px 14px;margin-bottom:10px;background:#141e3480}.rec-card .head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.rec-card .action{font-weight:700;font-size:14px}.rec-card .save{margin-left:auto;color:var(--green);font-weight:700}.rec-card .reason{color:var(--muted);font-size:12px;margin-bottom:4px}.rec-card .detail{font-size:13px;line-height:1.5}.big-saving{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}.save-card{text-align:center;padding:16px;border-radius:14px;border:1px solid var(--border);background:linear-gradient(135deg,#34d3991a,#3b82f60f)}.save-card .num{font-size:var(--fs-display);font-weight:800;color:var(--green)}.save-card .lbl{font-size:12px;color:var(--muted);margin-top:4px}.btn{display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#041018;border:none;padding:9px 16px;border-radius:9px;font-weight:700;cursor:pointer;font-size:13px;white-space:nowrap}.btn:hover{filter:brightness(1.1)}.btn.ghost{background:transparent;border:1px solid var(--border);color:var(--text)}.btn.sm{padding:4px 12px;font-size:12px;border-radius:7px;font-weight:600}.btn.danger{background:#e5484d;color:#fff}.btn.danger:hover{filter:brightness(1.06)}.btn.gray{background:#6b7686;color:#fff}.btn.sm+.btn.sm{margin-left:8px}.btn+.btn{margin-left:8px}.btn-group{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.app.light .btn.danger{background:var(--danger)}.app.light .btn.danger:hover{background:#b91c1c;filter:none}.app.light .btn.gray{background:#8592a6}.app.light .btn.gray:hover{background:#6b7686;filter:none}.input,select.input{background:#0a0f1e99;border:1px solid var(--border);color:var(--text);padding:9px 12px;border-radius:9px;font-size:13px;width:100%}.form-row{display:flex;gap:10px;margin-bottom:10px}.form-row>*{flex:1}label.fld{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}.chat-wrap{display:flex;flex-direction:column;height:calc(100vh - 140px)}.chat-log{flex:1;overflow:auto;display:flex;flex-direction:column;gap:12px;padding:6px}.msg{max-width:78%;padding:11px 14px;border-radius:12px;font-size:14px;line-height:1.6;white-space:pre-wrap}.msg.user{align-self:flex-end;background:linear-gradient(135deg,var(--accent2),#2563eb);color:#fff}.msg.bot{align-self:flex-start;background:var(--panel-solid);border:1px solid var(--border)}.msg .trace{margin-top:8px;font-size:11px;color:var(--muted);border-top:1px dashed var(--border);padding-top:6px}.msg.bot .md{white-space:normal}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md .md-p{margin:6px 0}.md .md-h{margin:10px 0 6px;font-weight:700;line-height:1.35}.md h3.md-h{font-size:var(--fs-title)}.md h4.md-h{font-size:14px}.md h5.md-h,.md h6.md-h{font-size:13px}.md .md-list{margin:6px 0;padding-left:20px}.md .md-list li{margin:3px 0}.md .md-code{background:#788cb42e;border-radius:4px;padding:1px 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}.md .md-pre{background:#0a0e1699;border:1px solid var(--border);border-radius:8px;padding:10px 12px;overflow-x:auto;margin:8px 0}.md .md-pre code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;color:#c9d1d9;white-space:pre}.md .md-quote{margin:8px 0;padding:4px 12px;border-left:3px solid var(--accent2);color:var(--muted);background:#5882c80f;border-radius:0 6px 6px 0}.md .md-hr{border:none;border-top:1px solid var(--border);margin:10px 0}.md a{color:var(--accent2)}.md strong{color:#e6edf6}.type-caret{display:inline-block;width:7px;height:14px;margin-left:2px;background:var(--accent2);vertical-align:text-bottom;animation:blink 1s steps(2) infinite}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.type-status{color:var(--muted);font-size:13px}.type-dots:after{content:"";animation:dots 1.4s steps(4,end) infinite}@keyframes dots{0%{content:""}25%{content:"·"}50%{content:"··"}75%{content:"···"}to{content:""}}.chat-input{display:flex;gap:10px;margin-top:12px}.suggests{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}.suggest{font-size:12px;padding:6px 12px;border-radius:16px;border:1px solid var(--border);cursor:pointer;color:var(--muted)}.suggest:hover{color:var(--text);background:#3b82f614}.user-box{text-align:right;margin:0 4px;flex:0 0 auto}.user-name{font-size:13px;font-weight:700;white-space:nowrap}.user-role{font-size:11px;color:var(--muted);white-space:nowrap}.topbar>.btn.ghost{flex:0 0 auto}.login-bg{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 700px at 18% -5%,rgba(34,211,238,.16),transparent),radial-gradient(1000px 600px at 105% 105%,rgba(59,130,246,.2),transparent),var(--bg)}.login-wrap{display:grid;grid-template-columns:minmax(0,1.05fr) 420px;gap:0;width:min(1000px,100%);border-radius:20px;overflow:hidden;border:1px solid var(--border);box-shadow:0 30px 90px #0000008c;background:var(--panel-solid)}.login-intro{padding:40px 38px;display:flex;flex-direction:column;gap:26px;background:linear-gradient(155deg,rgba(34,211,238,.1),rgba(59,130,246,.05) 55%,transparent);border-right:1px solid var(--border)}.login-brand{display:flex;align-items:center;gap:14px}.login-brand .logo{width:52px;height:52px;border-radius:14px;flex:0 0 auto;background:linear-gradient(135deg,var(--accent),var(--accent2));display:grid;place-items:center;font-weight:800;color:#04121f;font-size:var(--fs-lg);box-shadow:0 0 26px #22d3ee73}.login-brand-txt h1{font-size:var(--fs-md);margin:0;line-height:1.35}.login-brand-txt p{margin:4px 0 0;font-size:var(--fs-xs);color:var(--muted)}.login-hl{list-style:none;margin:0;padding:0;display:grid;gap:14px}.login-hl li{display:flex;align-items:flex-start;gap:12px}.login-hl .ico{width:30px;height:30px;border-radius:9px;flex:0 0 auto;display:grid;place-items:center;background:#3b82f624;color:var(--accent);border:1px solid var(--border)}.login-hl b{display:block;font-size:var(--fs-body);font-weight:650}.login-hl i{display:block;font-style:normal;font-size:var(--fs-xs);color:var(--muted);margin-top:3px}.login-intro-foot{margin-top:auto;font-size:var(--fs-2xs);color:var(--muted);line-height:1.7}.login-panel{padding:40px 34px;display:flex;flex-direction:column}.login-panel h2{margin:0;font-size:var(--fs-title)}.login-tip{margin:6px 0 22px;font-size:var(--fs-xs);color:var(--muted);line-height:1.6}.login-form{display:grid;gap:16px}.login-fld{display:grid;gap:7px}.login-fld>span{font-size:var(--fs-xs);color:var(--muted)}.login-fld .input{height:40px;font-size:var(--fs-body)}.login-fld .input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #22d3ee29}.login-err{display:flex;align-items:center;gap:6px;color:var(--red);font-size:var(--fs-xs);background:#f871711a;border:1px solid rgba(248,113,113,.3);border-radius:8px;padding:8px 10px}.login-submit{width:100%;height:42px;font-size:var(--fs-body);letter-spacing:2px}.login-submit:hover:not(:disabled){filter:brightness(1.12)}.login-submit:active:not(:disabled){transform:translateY(1px)}.login-submit:disabled{opacity:.6;cursor:not-allowed}.login-demo{margin-top:26px}.login-demo-h{font-size:var(--fs-xs);color:var(--muted);margin-bottom:10px}.login-demo-row{width:100%;display:flex;align-items:center;gap:10px;margin-bottom:8px;padding:9px 12px;border-radius:10px;cursor:pointer;text-align:left;background:#141e348c;border:1px solid var(--border);color:var(--text);transition:border-color .15s,transform .12s,background .15s}.login-demo-row:hover:not(:disabled){border-color:var(--accent);background:#22d3ee14;transform:translateY(-1px)}.login-demo-row:active:not(:disabled){transform:translateY(0)}.login-demo-row:disabled{opacity:.5;cursor:not-allowed}.login-demo-row .ico{color:var(--accent);display:grid;place-items:center}.login-demo-row .txt{flex:1;min-width:0}.login-demo-row .txt b{display:block;font-size:var(--fs-sm);font-weight:650}.login-demo-row .txt i{display:block;font-style:normal;font-size:var(--fs-2xs);color:var(--muted);margin-top:2px}.login-demo-row .acc{font-size:var(--fs-2xs);color:var(--muted);flex:0 0 auto}.login-demo-note{font-size:var(--fs-2xs);color:var(--muted);margin-top:10px;line-height:1.6}.login-foot{margin-top:auto;padding-top:22px;font-size:var(--fs-2xs);color:var(--muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.login-foot a{color:var(--accent);text-decoration:none}.login-foot a:hover{text-decoration:underline}.login-foot em{font-style:normal;opacity:.5}@media (max-width: 860px){.login-wrap{grid-template-columns:1fr}.login-intro{display:none}}.cmd-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;background:#060a14;overflow:hidden}.cmd-map{position:absolute;top:0;right:0;bottom:0;left:0;height:100%;width:100%;background:#060a14}.leaflet-container.cmd-map{background:#060a14}.hub-label{background:#08101fd9!important;border:1px solid rgba(34,211,238,.5)!important;color:#a5f3fc!important;font-size:11px!important;box-shadow:none!important}.hub-label:before{border-top-color:#22d3ee80!important}.cmd-title{position:absolute;top:0;left:0;right:0;height:62px;z-index:2100;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#060e1ef2,#060e1e1a);pointer-events:none}.cmd-title-main{font-size:var(--fs-xl);font-weight:800;letter-spacing:4px;color:#e8f7ff;text-shadow:0 0 18px rgba(34,211,238,.75),0 0 4px rgba(34,211,238,.6);font-family:Microsoft YaHei,sans-serif}.cmd-clock{position:absolute;left:24px;top:20px;color:#7fd0e6;font-size:14px;font-variant-numeric:tabular-nums}.cmd-actions{position:absolute;right:20px;top:15px;display:flex;gap:8px;pointer-events:auto}.cmd-btn{background:#22d3ee24;border:1px solid rgba(34,211,238,.45);color:#a5f3fc;padding:7px 14px;border-radius:8px;cursor:pointer;font-size:13px}.cmd-btn:hover{background:#22d3ee47}.cmd-panel{position:absolute;z-index:2100;top:74px;width:336px;background:linear-gradient(180deg,#0a1428d1,#08101fc7);border:1px solid rgba(56,120,190,.35);border-radius:12px;padding:14px 16px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 10px 40px #00000080;max-height:calc(100vh - 150px);overflow:auto}.cmd-left{left:18px}.cmd-right{right:18px}.cmd-h{font-size:14px;font-weight:700;color:#bfe6ff;margin-bottom:10px;padding-left:10px;border-left:3px solid #22d3ee;letter-spacing:1px}.cmd-kpi-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}.cmd-kpi{background:#22d3ee0f;border:1px solid rgba(56,120,190,.25);border-radius:9px;padding:10px 8px;text-align:center}.cmd-kpi .v{font-size:var(--fs-md);font-weight:800;color:#22d3ee;line-height:1.1}.cmd-kpi .v span{font-size:11px;color:#7f92b8;font-weight:500;margin-left:2px}.cmd-kpi .l{font-size:11px;color:#9fb3d8;margin-top:4px}.cmd-rank{display:flex;flex-direction:column;gap:7px}.cmd-rank-row{display:flex;align-items:center;gap:8px;font-size:12px}.cmd-rank-row .idx{width:18px;height:18px;border-radius:4px;display:grid;place-items:center;background:#7f92b840;color:#cfe0ff;font-weight:700;font-size:11px}.cmd-rank-row .idx[data-top="1"]{background:linear-gradient(135deg,#f59e0b,#f87171);color:#fff}.cmd-rank-row .code{width:42px;color:#dbe6ff;font-weight:600}.cmd-rank-row .val{width:42px;text-align:right;color:#9fb3d8}.bar-bg{flex:1;height:9px;background:#7f92b826;border-radius:5px;overflow:hidden}.bar-fill{height:100%;border-radius:5px}.cmd-metric{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:12px}.cmd-metric .ml{width:48px;color:#9fb3d8}.cmd-metric .mv{width:48px;text-align:right;font-weight:700}.cmd-flow-legend{margin-top:14px}.legend-bar{height:12px;border-radius:6px;background:linear-gradient(90deg,#2dd4bf,#a3e635,#facc15,#fb923c,#f87171)}.legend-scale{display:flex;justify-content:space-between;font-size:11px;color:#7f92b8;margin-top:3px}.cmd-ticker{position:absolute;bottom:0;left:0;right:0;height:40px;z-index:2100;display:flex;align-items:center;gap:12px;background:linear-gradient(0deg,#060e1ef2,#060e1e33);padding:0 16px;overflow:hidden}.ticker-tag{flex:0 0 auto;background:#f8717133;border:1px solid rgba(248,113,113,.5);color:#fca5a5;padding:4px 10px;border-radius:6px;font-size:12px;font-weight:700}.ticker-wrap{flex:1 1 auto;min-width:0;overflow:hidden}.ticker-track{display:flex;gap:40px;white-space:nowrap;animation:ticker 40s linear infinite}.ticker-item{font-size:13px;color:#cfe0ff}.ticker-item.warning{color:#fcd34d}.ticker-item.critical{color:#fca5a5}.ticker-item.info{color:#7fd0e6}@keyframes ticker{0%{transform:translate(0)}to{transform:translate(-50%)}}.loading{color:var(--muted);font-size:13px;padding:20px;text-align:center}.vehicle-dot{border-radius:50%;border:2px solid #fff}.scroll{overflow:auto}.mini-note{font-size:11px;color:var(--muted);margin-top:6px}.app.light{--bg: #ffffff;--surface: #ffffff;--card: #eef2f8;--surface-2: #e3e9f3;--surface-3: #d8e0ec;--sidebar-bg: #ffffff;--panel: var(--card);--panel-solid: var(--card);--chrome: #1f2a44;--chrome-2: #172035;--chrome-hover: #2b3856;--chrome-text: #ccd5e6;--chrome-dim: #97a4c0;--chrome-border: rgba(255,255,255,.09);--brand-lit: #7aa5ff;--border: #dfe4ee;--border-strong: #c7cfdd;--text: #141c28;--text-2: #2f3a49;--muted: #4c5666;--brand: #2563eb;--brand-hover: #1d4ed8;--brand-soft: #e9f0fe;--brand-softer: #f2f6ff;--danger: #dc2626;--danger-soft: #fdecec;--accent: var(--brand);--accent2: var(--brand-hover);background:var(--bg);color:var(--text)}.app.light .topbar{background:var(--chrome);border-bottom:1px solid var(--chrome-border);box-shadow:0 1px 6px #080e1e2e}.app.light .brand h1{color:#fff}.app.light .brand .sub{color:var(--chrome-dim)}.app.light .user-name{color:#fff}.app.light .user-role{color:var(--chrome-dim)}.app.light .engine-badge{background:#ffffff14;border-color:var(--chrome-border);color:var(--chrome-text)}.app.light .topbar .btn.ghost{background:transparent;color:var(--chrome-text);border:1px solid rgba(255,255,255,.22);box-shadow:none}.app.light .topbar .btn.ghost:hover{background:#ffffff1a;color:#fff;border-color:#fff6}.app.light .sidebar{background:var(--chrome);border-right:1px solid var(--chrome-border)}.app.light .content{background:var(--bg)}.app.light .side-foot{color:var(--chrome-dim);border-top:1px solid var(--chrome-border)}.app.light .side-foot:hover{color:#fff}.app.light .ng-head{background:transparent;color:var(--chrome-dim)}.app.light .ng-head:hover{color:#fff}.app.light .ng-icon,.app.light .ng-caret{color:var(--chrome-dim)}.app.light .nav-group.open .ng-head{color:#fff}.app.light .nav-group.open .ng-icon{color:var(--brand-lit)}.app.light .ng-items{margin:2px 6px 4px;padding:3px 0;background:var(--chrome-2);border-radius:8px;box-shadow:inset 0 0 0 1px #ffffff0a}.app.light .sidebar.collapsed .ng-items{margin:0;padding:1px 2px 3px;background:transparent;box-shadow:none}.app.light .nav-item{color:var(--chrome-text);font-weight:500}.app.light .nav-item .ni-icon{color:#8493b0}.app.light .nav-item:hover{color:#fff;background:var(--chrome-hover)}.app.light .nav-item:hover .ni-icon{color:#fff}.app.light .nav-item.active{color:#fff;background:var(--brand);border-left-color:var(--brand-lit);font-weight:600}.app.light .nav-item.active .ni-icon,.app.light .nav-item.opened{color:#fff}.app.light .nav-item.opened .ni-icon{color:var(--brand-lit)}.app.light .home-item{background:transparent;color:var(--chrome-text)}.app.light .home-item:hover{background:var(--chrome-hover);color:#fff}.app.light .home-item.active{background:var(--brand);color:#fff;border-left-color:var(--brand-lit)}.app.light .home-item .ni-icon{color:var(--brand-lit)}.app.light .ni-tag{background:#ffffff24;color:#dbe6ff}.app.light .tabstrip{background:var(--bg);border-bottom:1px solid var(--border)}.app.light .wtab{color:var(--text-2);background:var(--card);border:1px solid var(--border);border-bottom:none}.app.light .wtab:hover{color:var(--text);background:var(--surface-2)}.app.light .wtab.active{color:#fff;background:var(--brand);border-color:var(--brand);box-shadow:none}.app.light .wtab.active .wtab-x{opacity:.85}.app.light .wtab-x:hover{background:#dc262624;color:#dc2626}.app.light .wtab.active .wtab-x:hover{background:#ffffff47;color:#fff}.app.light .panel{background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:0 1px 2px #1018280d}.app.light .panel h3{color:var(--text)}.app.light th{background:var(--surface-2);color:var(--text-2)}.app.light th,.app.light td{border-bottom:1px solid var(--border)}.app.light td{color:var(--text-2)}.app.light tr:hover td{background:var(--surface-2)}.app.light .input,.app.light select.input{background:#e7ecf4;border:1px solid var(--border-strong);color:var(--text)}.app.light .input:focus,.app.light select.input:focus{border-color:var(--brand);box-shadow:0 0 0 2px #2563eb26;outline:none}.app.light .input::placeholder{color:var(--muted)}.app.light .btn{background:var(--brand);color:#fff;box-shadow:0 1px 2px #2563eb40}.app.light .btn:hover{background:var(--brand-hover);filter:none}.app.light .btn.ghost{background:transparent;color:var(--text);border:1px solid var(--border-strong);box-shadow:none}.app.light .btn.ghost:hover{background:var(--surface-2);border-color:var(--brand);color:var(--brand)}.app.light .filterbar{background:var(--card)}.app.light .fb-field label{color:var(--text-2)}.app.light .kpi,.app.light .kpi-card,.app.light .home-kpi{background:var(--card);border:1px solid var(--border)}.app.light .kpi:after,.app.light .home-kpi:after{background:radial-gradient(circle,rgba(37,99,235,.12),transparent 70%)}.app.light .kpi .label,.app.light .kpi-card .kpi-label,.app.light .hk-label{color:var(--muted)}.app.light .home-section{color:var(--text-2)}.app.light .rec-card{background:var(--surface-2);border:1px solid var(--border)}.app.light .rec-card .reason{color:var(--text-2)}.app.light .launch-card{background:var(--card);box-shadow:0 1px 3px #1428500f}.app.light .launch-card:hover{box-shadow:0 8px 24px #1428501f}.app.light .launch-card.screen{background:#e4ecfb}.app.light .lc-desc{color:var(--muted)}.app.light .segbtns{border-color:var(--border)}.app.light .segbtns .seg{color:var(--text-2)}.app.light .segbtns .seg.on{color:#fff;background:var(--brand)}.app.light .tab{color:var(--text-2)}.app.light .tab:hover{color:var(--text);background:var(--surface-2)}.app.light .tab.active{color:#fff;background:var(--brand);border-color:var(--brand)}.app.light .suggest{color:var(--text-2);border-color:var(--border)}.app.light .suggest:hover{color:var(--brand);background:var(--brand-soft)}.app.light .mini-note,.app.light .loading{color:var(--muted)}.app.light .pg-btn{color:var(--text-2)}.app.light .pg-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.app.light .pg-btn.active{background:var(--brand);color:#fff;border-color:var(--brand)}.app.light .pg-total,.app.light .pg-dots{color:var(--muted)}.app.light .badge.urban{background:#e9f0fe;color:#1d4ed8}.app.light .badge.shuttle{background:#e0f2fe;color:#0369a1}.app.light .badge.rural{background:#fef3e2;color:#b45309}.app.light .badge.microcirc{background:#f1ecfe;color:#6d28d9}.app.light .badge.high{background:#fdeaea;color:#b91c1c}.app.light .badge.med,.app.light .pill.pending{background:#fef3e2;color:#b45309}.app.light .pill.assigned{background:#e6f6ee;color:#047857}.app.light .pill.done{background:var(--surface-2);color:var(--text-2)}.app.light .grid-roster .shift-col{background:var(--brand-softer);border-left:1px solid var(--border)}.app.light .grid-roster tbody tr:nth-child(2n) td{background:#f7f9fd}.app.light .grid-roster .dir-col{color:var(--muted)}.app.light .grid-roster .t-up{color:#0369a1}.app.light .grid-roster .t-down{color:#b45309}.app.light .msg.bot{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text)}.app.light .msg .trace{color:var(--muted);border-top-color:var(--border-strong)}.app.light .md strong{color:var(--text)}.app.light .md a{color:var(--brand)}.app.light .md-code{background:var(--surface-3);color:var(--text)}.app.light .md-quote{color:var(--text-2);background:var(--surface-3);border-left-color:var(--brand)}.app.light .msg.user{background:var(--brand);color:#fff}.app.light .alert-item .d{color:var(--text-2)}.app.light .drawer{background:var(--surface)}.app.light .drawer-head{border-bottom-color:var(--border)}.app.light .drawer-x{color:var(--muted)}.app.light .drawer-x:hover{color:var(--text)}.app.light .drawer-mask{background:#14203859}.app.light .panel h3 .bar{background:var(--brand)}:root{--code-green: #16a34a;--code-green-soft: #e7f7ec;--code-yellow: #d99400;--code-yellow-soft: #fdf5e2;--code-red: #dc2626;--code-red-soft: #fdecec}.code-chip{display:inline-flex;align-items:center;gap:5px;font-weight:700;padding:2px 9px;border-radius:20px;font-size:12px;white-space:nowrap;border:1px solid transparent}.code-chip .cc-dot{width:7px;height:7px;border-radius:50%;background:currentColor}.code-chip.green{color:var(--code-green);background:var(--code-green-soft);border-color:#b7e4c4}.code-chip.yellow{color:var(--code-yellow);background:var(--code-yellow-soft);border-color:#f0dca8}.code-chip.red{color:var(--code-red);background:var(--code-red-soft);border-color:#f5b9b9}.score-card{display:flex;align-items:center;gap:18px;padding:16px 20px;border-radius:14px;border:1px solid var(--border);background:var(--surface)}.score-ring{width:108px;height:108px;border-radius:50%;flex:0 0 auto;position:relative;display:grid;place-items:center}.score-ring .sr-num{font-size:var(--fs-display);font-weight:800;line-height:1}.score-ring .sr-unit{font-size:11px;color:var(--muted);margin-top:3px}.score-ring.green{background:conic-gradient(var(--code-green) var(--pct),#e8eef7 0)}.score-ring.yellow{background:conic-gradient(var(--code-yellow) var(--pct),#e8eef7 0)}.score-ring.red{background:conic-gradient(var(--code-red) var(--pct),#e8eef7 0)}.score-ring:after{content:"";position:absolute;top:9px;right:9px;bottom:9px;left:9px;border-radius:50%;background:var(--surface)}.score-ring>*{position:relative;z-index:1}.lv{display:inline-block;padding:1px 8px;border-radius:4px;font-size:12px;font-weight:600}.lv.major{color:#fff;background:var(--code-red)}.lv.general{color:#92600a;background:#fdf0d5}.lv-red{color:#fff;background:#dc2626}.lv-orange{color:#fff;background:#ea7a1a}.lv-yellow{color:#7a5a00;background:#f6d55c}.lv-blue{color:#fff;background:#2563eb}.st{display:inline-block;padding:1px 8px;border-radius:4px;font-size:12px}.st.pending{color:#92600a;background:#fdf0d5}.st.rectifying{color:#1d4ed8;background:var(--brand-soft)}.st.done{color:#0e7490;background:#e0f5fa}.st.verified,.st.closed{color:#15803d;background:var(--code-green-soft)}.st.overdue{color:#fff;background:var(--code-red)}.std-tree{font-size:13px}.std-node{border-bottom:1px solid var(--border)}.std-node.l1>.sn-head{font-weight:700;background:var(--surface-2)}.std-node.l2>.sn-head{font-weight:600;background:var(--card)}.sn-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer}.sn-head:hover{background:var(--surface-3)}.sn-caret{color:var(--muted);font-size:12px;transition:transform .15s;flex:0 0 auto}.sn-caret.open{transform:rotate(90deg)}.sn-count{color:var(--muted);font-size:11px;font-weight:400}.clause{display:flex;gap:10px;padding:9px 12px 9px 30px;border-top:1px dashed var(--border);align-items:flex-start}.clause:hover{background:var(--brand-softer)}.clause-body{flex:1 1 auto;min-width:0}.clause-text{line-height:1.55;color:var(--text-2)}.clause-meta{margin-top:4px;font-size:11px;color:var(--muted);display:flex;gap:10px;flex-wrap:wrap}.clause-ops{display:flex;gap:6px;flex:0 0 auto}.tag-major{color:var(--code-red);font-weight:700}.tag-ai{color:#0e7490;background:#e0f5fa;padding:0 5px;border-radius:3px}.ans{display:flex;gap:4px}.ans button{padding:4px 9px;font-size:12px;border-radius:6px;cursor:pointer;border:1px solid var(--border-strong);background:var(--surface);color:var(--text-2)}.ans button:hover{border-color:var(--brand);color:var(--brand)}.ans button.on.ok{background:var(--code-green);border-color:var(--code-green);color:#fff}.ans button.on.general{background:#e8a33d;border-color:#e8a33d;color:#fff}.ans button.on.major{background:var(--code-red);border-color:var(--code-red);color:#fff}.ans button.on.na{background:#8592a6;border-color:#8592a6;color:#fff}.timeline{padding-left:6px}.tl-item{position:relative;padding:0 0 14px 20px;border-left:2px solid var(--border)}.tl-item:last-child{border-left-color:transparent;padding-bottom:0}.tl-item:before{content:"";position:absolute;left:-6px;top:3px;width:10px;height:10px;border-radius:50%;background:var(--brand);border:2px solid var(--surface)}.tl-item.done:before{background:var(--code-green)}.tl-item.warn:before{background:var(--code-red)}.tl-head{font-size:13px;font-weight:600}.tl-time{font-size:11px;color:var(--muted);margin-left:8px;font-weight:400}.tl-body{font-size:12px;color:var(--text-2);margin-top:3px;line-height:1.5}.rule-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border-bottom:1px solid var(--border);font-size:13px}.rule-row.lost{background:var(--danger-soft)}.rule-row.pending{background:#f5f6f8;color:var(--muted)}.rule-score{flex:0 0 auto;font-weight:700;font-family:ui-monospace,Menlo,monospace}.rule-score.minus{color:var(--code-red)}.rule-score.full{color:var(--code-green)}.photos{display:flex;gap:6px;flex-wrap:wrap}.photos img,.photo-box{width:82px;height:62px;border-radius:6px;object-fit:cover;border:1px solid var(--border);background:var(--surface-3);display:grid;place-items:center;font-size:11px;color:var(--muted);cursor:pointer}.stat-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.stat-box{padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:var(--surface)}.stat-box .sb-label{font-size:12px;color:var(--muted)}.stat-box .sb-value{font-size:var(--fs-lg);font-weight:800;margin-top:4px;line-height:1.1}.stat-box .sb-sub{font-size:11px;color:var(--muted);margin-top:3px}.stat-box.warn .sb-value{color:var(--code-red)}.stat-box.good .sb-value{color:var(--code-green)}.stat-box.clickable{cursor:pointer}.stat-box.clickable:hover{border-color:var(--brand);box-shadow:0 2px 10px #2563eb1f}.m-app{max-width:560px;margin:0 auto;min-height:100vh;background:#f2f4f8;display:flex;flex-direction:column;color:#131a26;-webkit-tap-highlight-color:transparent;font-size:14px}.m-app *{-webkit-tap-highlight-color:transparent}.m-top{position:relative;overflow:hidden;color:#fff;background:linear-gradient(150deg,#1a4fd6,#2563eb 55%,#3b82f6);padding:calc(env(safe-area-inset-top,0px) + 16px) 18px 30px;border-radius:0 0 22px 22px}.m-top:after{content:"";position:absolute;top:-70px;right:-50px;width:190px;height:190px;border-radius:50%;background:#ffffff21}.m-top-row{position:relative;z-index:1;display:flex;align-items:flex-start;gap:10px}.m-top h2{margin:0;font-size:var(--fs-md);font-weight:700;letter-spacing:.5px}.m-top .m-sub{font-size:12px;opacity:.88;margin-top:4px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-cap{flex:0 0 auto;display:flex;align-items:center;gap:2px;background:#ffffff2e;border:1px solid rgba(255,255,255,.3);border-radius:999px;padding:3px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.m-cap button{border:none;background:none;color:#fff;padding:5px 11px;font-size:12px;display:flex;align-items:center;gap:4px;cursor:pointer;border-radius:999px;transition:background .15s}.m-cap button:active{background:#ffffff38}.m-cap .sep{width:1px;height:14px;background:#ffffff57}.m-body{flex:1 1 auto;padding:12px 12px 0;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 74px)}.m-body.lift{margin-top:-20px}.m-card{background:#fff;border-radius:16px;padding:14px 14px 4px;margin-bottom:12px;box-shadow:0 2px 12px #12203c12}.m-card.pad{padding-bottom:14px}.m-card h3{margin:0 0 10px;font-size:var(--fs-title);font-weight:650;display:flex;align-items:center;gap:7px}.m-card h3 .ic{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:var(--brand-soft);color:var(--brand)}.m-card h3 .more{margin-left:auto;font-size:12px;font-weight:400;color:var(--muted);display:flex;align-items:center;gap:2px}.m-hero{border-radius:16px;padding:16px;color:#fff;margin-bottom:12px;position:relative;overflow:hidden}.m-hero.green{background:linear-gradient(135deg,#0e8f48,#22b46a);box-shadow:0 6px 18px #10964a47}.m-hero.yellow{background:linear-gradient(135deg,#c07c07,#eab308);box-shadow:0 6px 18px #ca8a0447}.m-hero.red{background:linear-gradient(135deg,#b91c1c,#ef4444);box-shadow:0 6px 18px #b91c1c47}.m-hero:after{content:"";position:absolute;right:-30px;bottom:-60px;width:150px;height:150px;border-radius:50%;background:#ffffff1f}.m-hero .hd{display:flex;align-items:center;gap:6px;font-size:12px;opacity:.92;position:relative;z-index:1}.m-hero .val{font-size:var(--fs-hero);font-weight:800;line-height:1.05;letter-spacing:-1px}.m-hero .val small{font-size:var(--fs-body);font-weight:600;opacity:.85;margin-left:3px}.m-hero .nm{font-size:14px;font-weight:600;position:relative;z-index:1}.m-hero .sub{font-size:11.5px;opacity:.88;margin-top:2px;position:relative;z-index:1}.m-hero .chip{display:inline-block;background:#ffffff38;border-radius:999px;padding:3px 11px;font-size:12px;font-weight:600;white-space:nowrap;position:relative;z-index:1;border:1px solid rgba(255,255,255,.42);background:#ffffff42}.m-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding-bottom:10px}.m-tile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 2px;border-radius:12px;cursor:pointer;font-size:12px;color:#2c3546;transition:transform .12s,background .12s}.m-tile:active{transform:scale(.94);background:#f4f6fa}.m-tile .ic{width:42px;height:42px;border-radius:14px;display:flex;align-items:center;justify-content:center;color:#fff;box-shadow:0 3px 8px #12203c29}.tc-blue{background:linear-gradient(135deg,#2563eb,#3b82f6)}.tc-green{background:linear-gradient(135deg,#0f9d58,#22c07a)}.tc-amber{background:linear-gradient(135deg,#d97706,#f59e0b)}.tc-red{background:linear-gradient(135deg,#dc2626,#f05252)}.tc-purple{background:linear-gradient(135deg,#7c3aed,#a78bfa)}.tc-cyan{background:linear-gradient(135deg,#0891b2,#22d3ee)}.m-cell{display:flex;align-items:center;gap:11px;padding:11px 0;font-size:14px;position:relative;transition:background .12s;border-radius:8px}.m-cell+.m-cell:before{content:"";position:absolute;top:0;left:42px;right:0;height:1px;background:#eef1f6;transform:scaleY(.5)}.m-cell.plain+.m-cell.plain:before{left:0}.m-cell.tap:active{background:#f5f7fb}.m-cell .ic{flex:0 0 auto;width:31px;height:31px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:#eef3ff;color:var(--brand)}.m-cell .ic.warn{background:#fef2f2;color:#dc2626}.m-cell .ic.ok{background:#ecfdf3;color:#0f9d58}.m-cell .ic.amber{background:#fffaeb;color:#d97706}.m-cell .tx{flex:1 1 auto;min-width:0}.m-cell .tx .t2{font-size:11.5px;color:var(--muted);margin-top:2px;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-cell .val{flex:0 0 auto;font-size:14px;font-weight:650;color:#131a26;white-space:nowrap}.m-cell .val .st,.m-cell .val .lv{white-space:nowrap}.m-cell .tx>div:first-child{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.45}.m-cell .val.muted{color:var(--muted);font-weight:400;font-size:13px}.m-cell .arrow{flex:0 0 auto;color:#c2cbdb;display:flex}.m-badge{min-width:19px;height:19px;padding:0 6px;border-radius:999px;background:#ef4444;color:#fff;font-size:11.5px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}.m-badge.zero{background:#eef1f6;color:#98a3b6;font-weight:500}.m-dot{width:8px;height:8px;border-radius:50%;background:#ef4444;display:inline-block}.m-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding-bottom:12px}.m-kpi{background:#f6f8fc;border-radius:12px;padding:10px 4px;text-align:center}.m-kpi .v{font-size:var(--fs-md);font-weight:750;line-height:1.2}.m-kpi .k{font-size:11px;color:var(--muted);margin-top:2px}.m-kpi.red .v{color:var(--code-red)}.m-kpi.yellow .v{color:#d97706}.m-kpi.green .v{color:var(--code-green)}.m-tabbar{position:fixed;bottom:0;left:0;right:0;max-width:560px;margin:0 auto;display:flex;z-index:30;background:#ffffffeb;-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px);border-top:1px solid rgba(231,235,242,.9);padding-bottom:env(safe-area-inset-bottom,0px)}.m-tabbar .mt{flex:1;text-align:center;padding:7px 0 6px;font-size:11px;color:#8792a6;cursor:pointer;transition:color .15s;position:relative}.m-tabbar .mt svg{display:block;margin:0 auto 2px;transition:transform .18s}.m-tabbar .mt.on{color:var(--brand);font-weight:650}.m-tabbar .mt.on svg{transform:translateY(-2px) scale(1.08)}.m-tabbar .mt .nb{position:absolute;top:4px;left:50%;margin-left:6px;width:7px;height:7px;border-radius:50%;background:#ef4444;border:1.5px solid #fff}.m-btn{display:block;width:100%;padding:13px;border-radius:12px;border:none;background:linear-gradient(135deg,#1a4fd6,#2f6bf0);color:#fff;font-size:15.5px;font-weight:650;cursor:pointer;margin-bottom:12px;box-shadow:0 4px 12px #1a4fd642;transition:transform .12s,box-shadow .12s}.m-btn:active{transform:scale(.985);box-shadow:0 2px 6px #1a4fd638}.m-btn.ghost{background:#fff;color:var(--brand);border:1px solid #d5e0f7;box-shadow:none}.m-btn:disabled{background:#c3cddd;box-shadow:none;transform:none}.m-fab{position:fixed;right:16px;z-index:29;bottom:calc(env(safe-area-inset-bottom,0px) + 68px);display:flex;align-items:center;gap:6px;border:none;cursor:pointer;background:linear-gradient(135deg,#1a4fd6,#2f6bf0);color:#fff;padding:12px 18px;border-radius:999px;font-size:14px;font-weight:650;box-shadow:0 6px 18px #1a4fd65c;transition:transform .12s}.m-fab:active{transform:scale(.95)}.m-seg{display:flex;background:#eaeef5;border-radius:10px;padding:3px;margin-bottom:12px}.m-seg button{flex:1;border:none;background:none;padding:8px 0;border-radius:8px;font-size:13px;color:#5b6779;cursor:pointer;transition:all .16s}.m-seg button.on{background:#fff;color:var(--brand);font-weight:650;box-shadow:0 1px 4px #12203c1a}.m-skel{padding:4px 0 12px}.m-skel i{display:block;height:13px;border-radius:7px;margin-bottom:10px;background:linear-gradient(90deg,#eef1f6 25%,#e3e8f0 37%,#eef1f6 63%);background-size:400% 100%;animation:mskel 1.3s ease infinite}.m-skel i:nth-child(2){width:72%}.m-skel i:nth-child(3){width:45%}@keyframes mskel{0%{background-position:100% 50%}to{background-position:0 50%}}.m-fade{animation:mfadein .2s ease both}.m-fade>*>.m-card,.m-fade>*>.m-hero{animation:mfade .26s ease both}@keyframes mfadein{0%{opacity:0}to{opacity:1}}@keyframes mfade{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.m-list-item{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid #eef1f6;font-size:13.5px}.m-list-item:last-child{border-bottom:none}.m-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;text-align:center}.m-grid .mg-item{padding:9px 2px;border-radius:10px;background:#f6f8fc;cursor:pointer;font-size:12px}.m-grid .mg-item:active{background:var(--brand-soft)}.m-grid .mg-icon{display:block;margin:0 auto 4px;color:var(--brand)}.pub-wrap{max-width:560px;margin:0 auto;min-height:100vh;background:#f4f6fa;padding-bottom:24px}.pub-hero{padding:22px 18px 26px;color:#fff;text-align:center}.pub-hero.green{background:linear-gradient(135deg,#17914a,#22b463)}.pub-hero.yellow{background:linear-gradient(135deg,#c8860a,#e5a824)}.pub-hero.red{background:linear-gradient(135deg,#b81f1f,#dc2626)}.pub-score{font-size:var(--fs-hero);font-weight:800;line-height:1}.pub-name{font-size:var(--fs-title);font-weight:600;margin-bottom:4px}.pub-body{padding:12px;margin-top:-14px}.pub-kv{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #eef1f6;font-size:13px}.pub-kv:last-child{border-bottom:none}.pub-kv .k{color:#6b7789}.screen{height:100vh;background:#070d1c;color:#dbe6ff;padding:12px 14px;display:flex;flex-direction:column;gap:10px;overflow:hidden}.screen-head{display:flex;align-items:center;gap:14px;flex:0 0 auto}.screen-head h1{font-size:var(--fs-lg);margin:0;letter-spacing:2px;font-weight:800;background:linear-gradient(90deg,#7dd3fc,#60a5fa);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.screen-clock{font-family:ui-monospace,Menlo,monospace;font-size:var(--fs-body);color:#93b4e8}.screen-grid{flex:1 1 auto;display:grid;grid-template-columns:320px 1fr 340px;gap:10px;min-height:0}.screen-col{display:flex;flex-direction:column;gap:10px;min-height:0}.sp{background:#111c33c7;border:1px solid rgba(88,130,200,.2);border-radius:10px;padding:9px 11px;min-height:0;display:flex;flex-direction:column}.sp-title{font-size:12px;color:#8fb3e8;letter-spacing:1px;margin-bottom:7px;display:flex;align-items:center;gap:6px;flex:0 0 auto}.sp-body{flex:1 1 auto;min-height:0;overflow:auto}.sp-kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.sp-kpi{background:#2563eb1f;border-radius:8px;padding:8px 10px}.sp-kpi .k{font-size:11px;color:#8fb3e8}.sp-kpi .v{font-size:var(--fs-lg);font-weight:800;margin-top:2px}.sp-kpi.red .v{color:#fca5a5}.sp-kpi.amber .v{color:#fcd34d}.sp-kpi.green .v{color:#6ee7a8}.sp-row{display:flex;align-items:center;gap:8px;font-size:12px;padding:5px 0;border-bottom:1px solid rgba(88,130,200,.12)}.sp-row .grow{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.screen .leaflet-container{background:#0a1020;border-radius:8px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px 14px}.form-item{display:flex;flex-direction:column;gap:4px}.form-item>label{font-size:12px;color:var(--muted)}.form-item.wide{grid-column:1 / -1}.hint{font-size:12px;color:var(--muted);line-height:1.6}.empty{padding:28px 10px;text-align:center;color:var(--muted);font-size:13px}.right{text-align:right}.nowrap{white-space:nowrap}.mono{font-family:ui-monospace,Menlo,Consolas,monospace}.mt10{margin-top:10px}.mt12{margin-top:12px}.mb10{margin-bottom:10px}.row{display:flex;align-items:center;gap:8px}.row.wrap{flex-wrap:wrap}.grow{flex:1 1 auto;min-width:0}.two-col{display:grid;grid-template-columns:minmax(0,400px) minmax(0,1fr);gap:14px;align-items:start}@media (max-width: 1180px){.two-col{grid-template-columns:1fr}}.drop-zone{border:1.5px dashed var(--border);border-radius:10px;background:var(--surface-2);min-height:210px;display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:border-color .15s,background .15s}.drop-zone:hover{border-color:var(--brand);background:var(--surface-hover, var(--surface-2))}.drop-zone.has{border-style:solid;padding:0}.drop-zone img{width:100%;max-height:340px;object-fit:contain;display:block}.dz-tip{text-align:center;color:var(--text-2);display:grid;gap:6px;justify-items:center;font-size:var(--fs-body);padding:22px}.verify-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.verify-summary{background:var(--surface-2);border-left:3px solid var(--brand);border-radius:0 6px 6px 0;padding:10px 12px;font-size:var(--fs-body);line-height:1.7;margin-bottom:12px}.verify-block{margin-top:12px;font-size:var(--fs-body)}.verify-block .vb-title{font-weight:700;margin-bottom:6px;color:var(--text-1)}.verify-block ul{margin:0;padding-left:18px;line-height:1.8;color:var(--text-2)}.verify-block.warn .vb-title{color:var(--code-red)}.verify-block.advice{background:#1890ff0f;border-radius:8px;padding:10px 12px;line-height:1.7}.kv-row{display:flex;gap:10px;font-size:var(--fs-body);padding:6px 0;border-bottom:1px dashed var(--border)}.kv-row>span{color:var(--text-2);flex:0 0 110px}.kv-row>b{font-weight:600;flex:1}.src-banner{display:flex;gap:8px;align-items:flex-start;margin-bottom:12px;padding:9px 12px;border-radius:8px;line-height:1.7;background:#faad141a;border:1px solid rgba(250,173,20,.35);color:var(--text-1);font-size:var(--fs-sm)}.src-banner>svg{flex:0 0 auto;margin-top:3px;color:#d48806}
