.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform .3s ease-out,opacity .3s ease-in;-moz-transition:-moz-transform .3s ease-out,opacity .3s ease-in;-o-transition:-o-transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset .3s ease-out,-webkit-stroke-opacity .3s ease-in;-moz-transition:-moz-stroke-dashoffset .3s ease-out,-moz-stroke-opacity .3s ease-in;-o-transition:-o-stroke-dashoffset .3s ease-out,-o-stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:#b5e28c99}.marker-cluster-small div{background-color:#6ecc3999}.marker-cluster-medium{background-color:#f1d35799}.marker-cluster-medium div{background-color:#f0c20c99}.marker-cluster-large{background-color:#fd9c7399}.marker-cluster-large div{background-color:#f1801799}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,system-ui,sans-serif;background:#f4f6f9;color:#5c5c5c}.app{height:100%;display:flex;flex-direction:column;background:#f4f6f9}.header{display:flex;align-items:center;gap:12px;padding:8px 16px;background:#fff;border-bottom:1px solid #eaecf0;flex-shrink:0;z-index:1000}.header h1{font-size:1.1rem;font-weight:600;color:#1e293b;white-space:nowrap}.stats{display:flex;gap:16px;font-size:.85rem}.stat{display:flex;align-items:center;gap:6px;color:#8f8f8f}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0}.stat.client .dot{background:#2563eb}.stat.worker .dot{background:#16a34a}.bottom-left-controls{position:absolute;bottom:12px;left:12px;z-index:500;display:flex;flex-direction:row;gap:10px;pointer-events:none}.bottom-left-controls>*{pointer-events:auto}.mode-switcher,.mapstyle-switcher{display:flex;gap:0;background:#fff;border:1px solid #eaecf0;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px #00000014;padding:4px}.mode-btn{background:#fff;border:none;color:#8f8f8f;font-size:.78rem;padding:6px 14px;cursor:pointer;font-weight:500;transition:all .15s;white-space:nowrap;border-radius:8px}.mode-btn+.mode-btn{border-left:1px solid #eaecf0}.mode-btn:hover{background:#f4f6f9;color:#5c5c5c}.mode-btn.active{background:#1fba96;color:#fff}.heatmap-toggle{background:#fff;border:1px solid #eaecf0;border-radius:10px;padding:6px 14px;box-shadow:0 2px 8px #00000014}.heatmap-toggle.active{background:#1fba96;color:#fff;border-color:#1fba96}.settings-btn{background:none;border:1px solid #eaecf0;color:#8f8f8f;font-size:1.15rem;padding:4px 10px;border-radius:10px;cursor:pointer;transition:all .15s;line-height:1}.settings-btn:hover{background:#f4f6f9;border-color:#d0d5dd;color:#5c5c5c}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3000;background:#0000004d;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#fff;border-radius:15px;box-shadow:0 8px 32px #00000026;min-width:320px;max-width:420px;overflow:hidden}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #eaecf0}.modal-header strong{font-size:1rem;color:#1e293b}.modal-close{background:none;border:none;color:#b0b0b0;font-size:1rem;cursor:pointer;padding:4px 6px;border-radius:6px;transition:all .15s;line-height:1}.modal-close:hover{background:#f4f6f9;color:#5c5c5c}.modal-body{padding:20px;display:flex;flex-direction:column;gap:20px}.settings-section{display:flex;flex-direction:column;gap:8px}.settings-label{font-size:.78rem;font-weight:600;color:#8f8f8f;text-transform:uppercase;letter-spacing:.04em}.settings-section .mode-switcher,.settings-section .heatmap-toggle{align-self:flex-start}.header-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.reload{background:none;border:1px solid #eaecf0;color:#8f8f8f;font-size:1.1rem;padding:4px 10px;border-radius:10px;cursor:pointer;transition:all .15s}.reload:hover{background:#f4f6f9;border-color:#d0d5dd;color:#5c5c5c}.lang-select{background:#fff;color:#5c5c5c;border:1px solid #eaecf0;border-radius:10px;padding:4px 8px;font-size:.85rem;cursor:pointer;outline:none;transition:border-color .15s}.lang-select:focus{border-color:#1fba96}.main{flex:1;display:flex;position:relative;overflow:hidden}.map-container{flex:1}.side-panel{width:280px;background:#fff;border-radius:10px 0 0 10px;box-shadow:-2px 0 12px #0000000f;display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0;margin:0;border-left:1px solid #eaecf0;transition:width .2s ease,padding .2s ease,opacity .2s ease}.side-panel.collapsed{width:0;min-width:0;padding:0;overflow:hidden;opacity:0;border-left:none;flex-shrink:0}.panel-header{display:flex;align-items:center;gap:10px;padding:16px;border-bottom:1px solid #eaecf0}.panel-header strong{color:#1e293b;font-size:.95rem}.panel-header .text-muted{font-size:.8rem}.panel-header-info{flex:1;min-width:0}.panel-toggle-embed{display:none;flex-shrink:0}.panel-toggle-closed{position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:500;background:#fff;border:1px solid #eaecf0;border-right:none;color:#8f8f8f;font-size:.85rem;padding:10px 6px 10px 8px;border-radius:10px 0 0 10px;cursor:pointer;transition:all .15s,right .2s ease;line-height:1;box-shadow:-2px 0 8px #0000000f}.panel-toggle-closed:hover{background:#f4f6f9;color:#5c5c5c}.panel-close{background:none;border:none;color:#b0b0b0;font-size:1rem;cursor:pointer;padding:4px 6px;border-radius:6px;transition:all .15s;line-height:1}.panel-close:hover{background:#f4f6f9;color:#5c5c5c}.dot-lg{width:14px;height:14px;border-radius:50%;flex-shrink:0}.dot-lg.client{background:#2563eb}.dot-lg.worker{background:#16a34a}.text-muted{color:#8f8f8f;font-size:.85rem}.panel-section{padding:12px 16px;border-bottom:1px solid #eaecf0}.panel-section:last-child{border-bottom:none}.section-title{font-size:.7rem;text-transform:uppercase;color:#b0b0b0;letter-spacing:.05em;margin-bottom:10px;font-weight:600}.radius-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:.85rem;transition:background .1s;margin-bottom:2px}.radius-row:hover{background:#f4f6f9}.radius-row.active{background:#dcf9f2}.radius-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.radius-label{flex:1;color:#5c5c5c}.radius-dist{color:#8f8f8f;font-size:.78rem}.radius-count{background:#f4f6f9;color:#5c5c5c;padding:0 8px;border-radius:8px;font-size:.78rem;font-weight:600;min-width:28px;text-align:center}.radius-row.active .radius-count{background:#1fba96;color:#fff}.panel-linked{flex:1;overflow-y:auto}.linked-group{margin-bottom:8px}.linked-group-title{display:flex;align-items:center;gap:6px;font-size:.72rem;color:#8f8f8f;text-transform:uppercase;margin-bottom:4px;font-weight:600}.linked-item{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:.82rem;transition:background .1s}.linked-item:hover{background:#f4f6f9}.dot-sm{width:6px;height:6px;border-radius:50%;flex-shrink:0}.dot-sm.client{background:#2563eb}.dot-sm.worker{background:#16a34a}.linked-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#5c5c5c}.linked-dist{color:#8f8f8f;font-size:.72rem}.linked-match{color:#1fba96;font-size:.72rem;font-weight:600}.status{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.2rem;color:#8f8f8f}.status.error{color:#c10015}.filter-bar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:#fff;border-bottom:1px solid #eaecf0;flex-shrink:0;flex-wrap:wrap}.filter-label{font-size:.7rem;font-weight:600;color:#b0b0b0;text-transform:uppercase;white-space:nowrap;letter-spacing:.04em}.filter-search{background:#f8f9fb;border:1px solid #e2e5ea;border-radius:10px;color:#5c5c5c;font-size:.85rem;padding:6px 12px;width:200px;outline:none;transition:all .2s ease}.filter-search:focus{border-color:#1fba96;background:#fff;box-shadow:0 0 0 3px #1fba961a}.filter-search::placeholder{color:#b0b0b0}.search-wrap{position:relative}.search-dd{position:absolute;top:100%;left:0;z-index:2000;background:#fff;border:1px solid #eaecf0;border-radius:10px;margin-top:4px;max-height:280px;overflow-y:auto;min-width:300px;box-shadow:0 8px 24px #0000001f}.search-dd-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:.85rem;color:#5c5c5c}.search-dd-item:hover{background:#f4f6f9}.search-dd-name{font-weight:600;white-space:nowrap;color:#1e293b}.search-dd-meta{color:#8f8f8f;font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ms{position:relative}.ms-trigger{display:flex;align-items:center;gap:6px;background:#f8f9fb;border:1px solid #e2e5ea;border-radius:10px;color:#5c5c5c;font-size:.82rem;padding:6px 10px 6px 12px;cursor:pointer;white-space:nowrap;min-height:34px;transition:all .2s ease;-webkit-user-select:none;user-select:none}.ms-trigger:hover{background:#f0f2f5;border-color:#d0d5dd}.ms-trigger:focus-visible{outline:none;border-color:#1fba96;box-shadow:0 0 0 3px #1fba961f}.ms-trigger.open{border-color:#1fba96;box-shadow:0 0 0 3px #1fba961a}.ms-label{min-width:20px;color:#8f8f8f;font-size:.8rem}.ms-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;transition:transform .2s ease;opacity:.5}.ms-arrow:after{content:"";display:block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #8f8f8f}.ms-arrow.up{transform:rotate(180deg)}.ms-menu{position:absolute;top:100%;left:0;z-index:2000;background:#fff;border:1px solid #eaecf0;border-radius:12px;margin-top:6px;max-height:260px;overflow-y:auto;min-width:210px;box-shadow:0 12px 32px #0000001a,0 2px 8px #0000000a;padding:6px}.ms-opt{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:.85rem;color:#5c5c5c;white-space:nowrap;transition:all .15s ease}.ms-opt:hover{background:#f4f6f9}.ms-opt input{accent-color:#1fba96;margin:0;width:16px;height:16px;cursor:pointer}.hover-label{position:fixed;bottom:20px;left:50%;transform:translate(-50%);background:#1e293b;color:#fff;padding:10px 20px;border-radius:10px;font-size:14px;z-index:1000;box-shadow:0 4px 16px #00000040;pointer-events:none;white-space:nowrap}.weight-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.weight-dot.high{background:#1fba96}.weight-dot.medium{background:#eab308}.weight-dot.low{background:#ef4444}.weight-summary{font-size:.85rem;color:#8f8f8f}.coverage-stats{display:flex;flex-direction:column;gap:4px}.coverage-stat-row{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:.85rem}.coverage-label{flex:1;color:#5c5c5c}.cov-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.cov-dot.cs-303,.coverage-badge.cs-303{background:#ef4444}.cov-dot.cs-304,.coverage-badge.cs-304{background:#f97316}.cov-dot.cs-301,.coverage-badge.cs-301{background:#eab308}.cov-dot.cs-400,.coverage-badge.cs-400{background:#16a34a}.cov-dot.cs-901,.cov-dot.cs-902,.coverage-badge.cs-901,.coverage-badge.cs-902{background:#8f8f8f}.cov-dot.cs-200,.cov-dot.cs-201,.cov-dot.cs-202,.coverage-badge.cs-200,.coverage-badge.cs-201,.coverage-badge.cs-202{background:#b0b0b0}.cov-dot.cs-102,.coverage-badge.cs-102{background:#3b82f6}.cov-dot.ws-101{background:#b0b0b0}.cov-dot.ws-102{background:#eab308}.cov-dot.ws-401{background:#16a34a}.cov-dot.ws-501,.cov-dot.ws-502{background:#f97316}.cov-dot.ws-901,.cov-dot.ws-902{background:#8f8f8f}.coverage-badge{display:inline-block;padding:4px 12px;border-radius:8px;color:#fff;font-size:.8rem;font-weight:600}.coverage-detail{font-size:.85rem;color:#5c5c5c}.top-n-group{display:flex;gap:0;border:1px solid #eaecf0;border-radius:10px;overflow:hidden}.top-n-btn{background:#fff;border:none;color:#8f8f8f;font-size:.78rem;padding:6px 12px;cursor:pointer;font-weight:500;min-width:36px;text-align:center;transition:all .15s}.top-n-btn+.top-n-btn{border-left:1px solid #eaecf0}.top-n-btn:hover{background:#f4f6f9;color:#5c5c5c}.top-n-btn.active{background:#1fba96;color:#fff}.map-legend{position:absolute;bottom:48px;right:12px;z-index:500;background:#fff;color:#5c5c5c;padding:12px 16px;border-radius:10px;font-size:.78rem;min-width:150px;box-shadow:0 2px 12px #0000001a;border:1px solid #eaecf0;pointer-events:none}.legend-title{font-weight:600;margin-bottom:8px;color:#8f8f8f;text-transform:uppercase;font-size:.65rem;letter-spacing:.05em}.legend-row{display:flex;align-items:center;gap:8px;padding:2px 0}.legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.legend-line{display:inline-block;width:16px;height:0;border-top:3px dashed #ef4444;flex-shrink:0}.marker-cluster-small{background-color:#1fba9666}.marker-cluster-small div{background-color:#1fba96bf}.marker-cluster-medium{background-color:#e88d5166}.marker-cluster-medium div{background-color:#e88d51bf}.marker-cluster-large{background-color:#c1001559}.marker-cluster-large div{background-color:#c10015b3}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif;color:#fff;line-height:30px}@media(max-width:768px){.side-panel{position:fixed;bottom:0;left:0;right:0;width:100%;max-height:50vh;border-radius:10px 10px 0 0;margin:0;z-index:900;box-shadow:0 -4px 24px #0000001f;transition:transform .25s ease;transform:translateY(0)}.side-panel.collapsed{width:100%;min-width:100%;padding:0;opacity:1;border-left:none;overflow:visible;transform:translateY(100%)}.main{flex-direction:column}.filter-bar{padding:8px 12px;gap:8px}.filter-search{width:140px}.header h1{font-size:.95rem}.stats{gap:8px;font-size:.78rem}.mode-btn{padding:4px 10px;font-size:.72rem}.panel-toggle-embed{display:inline-block;background:none;border:none;color:#8f8f8f;font-size:1.2rem;cursor:pointer;padding:4px 10px;border-radius:8px;transition:background .15s;line-height:1}.panel-toggle-embed:hover{background:#f4f6f9}.panel-toggle-closed{display:none}}.g-5{gap:5px}.g-10{gap:10px}.g-15{gap:15px}.g-20{gap:20px}.g-30{gap:30px}.skeleton{background:linear-gradient(90deg,#eaecf0 25%,#f4f6f9,#eaecf0 75%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:10px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton--badge{width:48px;height:32px}.skeleton--input{width:140px;height:34px}.skeleton-map{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f4f6f9;position:relative;overflow:hidden}.skeleton-map__pulse{position:absolute;width:300px;height:300px;border-radius:50%;border:2px solid #eaecf0;animation:map-pulse 2s ease-in-out infinite}.skeleton-map__pulse:before{content:"";position:absolute;top:-40px;right:-40px;bottom:-40px;left:-40px;border-radius:50%;border:2px solid #eaecf0;opacity:.5}.skeleton-map__pulse:after{content:"";position:absolute;top:-80px;right:-80px;bottom:-80px;left:-80px;border-radius:50%;border:2px solid #eaecf0;opacity:.2}@keyframes map-pulse{0%,to{transform:scale(.6);opacity:.8}50%{transform:scale(1);opacity:.4}}.skeleton-map__label{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#b0b0b0;font-size:.95rem;z-index:1;background:#fff;padding:8px 20px;border-radius:10px;box-shadow:0 2px 8px #0000000f}.map-loader{position:absolute;top:0;right:0;bottom:0;left:0;z-index:600;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:#f4f6f9b3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);color:#8f8f8f;font-size:.9rem}.map-loader__spinner{width:36px;height:36px;border:3px solid #eaecf0;border-top-color:#1fba96;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f4f6f9}.auth-card{background:#fff;border-radius:15px;overflow:hidden;box-shadow:0 4px 24px #00000014;width:min(90vw,560px);display:flex;flex-direction:column}.auth-card-top{padding:24px 24px 0}.auth-logo{width:150px;display:block}.auth-card-body{display:grid;grid-template-columns:40% 55%;gap:5%;padding:24px}.auth-intro{display:flex;flex-direction:column}.auth-title{margin:0 0 4px;font-size:1.25rem;font-weight:700;color:#1e293b}.auth-subtitle{margin:0;font-size:.8rem;color:#6b7280;font-weight:300;line-height:1.35}.auth-form{display:flex;flex-direction:column;gap:16px}.auth-outlined{width:100%}.auth-outlined-wrap{display:flex;align-items:center;border:1px solid #cbd5e1;border-radius:8px;background:#fff;transition:border-color .2s,box-shadow .2s;position:relative}.auth-outlined-wrap:focus-within{border-color:#1fba96;box-shadow:0 0 0 2px #1fba9626}.auth-input-icon{display:flex;align-items:center;padding:0 0 0 12px;color:#9ca3af;flex-shrink:0}.auth-field-inner{position:relative;flex:1;min-width:0}.auth-input{display:block;width:100%;border:none;outline:none;padding:18px 8px 4px 0;font-size:.9rem;background:transparent;color:#1e293b}.auth-label{position:absolute;left:0;top:50%;transform:translateY(-50%);font-size:.9rem;color:#9ca3af;transition:all .15s ease;pointer-events:none;transform-origin:left center;line-height:1}.auth-input:focus~.auth-label,.auth-input:not(:placeholder-shown)~.auth-label{top:4px;transform:translateY(0);font-size:.7rem;color:#1fba96}.auth-pwd-toggle{display:flex;align-items:center;padding:0 8px 0 0;border:none;background:none;cursor:pointer;color:#1fba96;flex-shrink:0}.auth-error{color:#ef4444;font-size:.82rem;line-height:1.3}.auth-actions{display:flex;align-items:center;justify-content:space-between;padding-top:4px}.auth-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 20px;border:none;border-radius:8px;font-size:.85rem;cursor:pointer;font-weight:500;transition:background .2s,opacity .2s;white-space:nowrap;line-height:1.4}.auth-btn:disabled{opacity:.6;cursor:not-allowed}.auth-btn-primary{background:#1fba96;color:#fff}.auth-btn-primary:hover:not(:disabled){background:#19a083}.auth-link{color:#1fba96;font-size:.8rem;text-decoration:none;cursor:pointer;padding:8px 0;transition:opacity .15s}.auth-link:hover{opacity:.8}.auth-spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:auth-spin .6s linear infinite}@keyframes auth-spin{to{transform:rotate(360deg)}}.auth-card-bottom{background:#e0e0e0;padding:4px 12px;display:flex;align-items:center;justify-content:flex-end}.auth-lang-select{background:transparent;border:none;color:#5c5c5c;font-size:.75rem;text-transform:uppercase;font-weight:500;cursor:pointer;outline:none;padding:2px 4px;border-radius:4px;transition:background .15s}.auth-lang-select:hover{background:#0000000a}
