:root{--bg: #eef1f5;--panel: #ffffff;--panel2: #f2f5f9;--border: #d7dde4;--text: #1c2530;--muted: #5b6b7b;--accent: #2f80f7;--green: #16a34a;--red: #dc2626}:root.dark{--bg: #0f1419;--panel: #171d24;--panel2: #1d242d;--border: #2a333e;--text: #e6edf3;--muted: #8b98a5;--accent: #4dabf7;--green: #51cf66;--red: #ff6b6b}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 Segoe UI,system-ui,sans-serif}.app{display:flex;flex-direction:column;height:100vh}header{display:flex;align-items:center;gap:24px;padding:10px 18px;background:var(--panel);border-bottom:1px solid var(--border)}.logo{font-weight:700;letter-spacing:.4px}.header-right{margin-left:auto;display:flex;align-items:center;gap:14px}.clock{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}.theme-btn{background:transparent;border:1px solid var(--border);color:var(--muted);padding:6px 12px;border-radius:8px;cursor:pointer;font-size:13px}.theme-btn:hover{color:var(--text);border-color:var(--muted)}nav{display:flex;gap:6px}.tab{background:transparent;border:1px solid transparent;color:var(--muted);padding:6px 14px;border-radius:8px;cursor:pointer;font-size:14px}.tab.active{background:var(--panel2);color:var(--text);border-color:var(--border)}main{flex:1;overflow:auto;padding:14px 18px}.muted{color:var(--muted);font-weight:400}.err{color:var(--red)}.small{font-size:12px;word-break:break-all}.layout{display:flex;gap:16px;align-items:flex-start}.sidebar{width:320px;flex:0 0 320px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px;max-height:calc(100vh - 110px);overflow:auto}.side-block{margin-bottom:16px}.side-title{font-weight:600;margin-bottom:8px}.checks{display:flex;flex-direction:column;gap:3px;margin-top:8px}.checks.row{flex-direction:row;flex-wrap:wrap;gap:4px 14px}.check{display:flex;gap:7px;align-items:baseline;cursor:pointer;font-size:13px}.check input{accent-color:var(--accent)}.district-title{margin:8px 0 2px;padding-top:6px;border-top:1px solid var(--border);font-size:11px;letter-spacing:.4px;text-transform:uppercase;color:var(--muted)}.side-block>.checks>div:first-child .district-title{border-top:0;margin-top:0;padding-top:0}.side-layouts{position:relative}.plan-pop{position:fixed;z-index:40;width:350px;max-height:240px;overflow:hidden;background:#fff;border-radius:10px;padding:6px;box-shadow:0 8px 30px #0000008c;pointer-events:none}.plan-pop img{display:block;width:100%;height:auto;border-radius:6px}.content{flex:1;min-width:0}.map-col{width:520px;flex:0 0 520px}.map-box{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px}.map-title{font-size:12px;margin-bottom:8px}.map{width:498px;height:430px;border-radius:8px;z-index:0}.pin{width:15px;height:15px;border-radius:50%;background:#8aa7c9;border:2px solid #fff;box-shadow:0 1px 4px #00000073}.pin-sel{background:var(--accent);width:17px;height:17px;border-width:3px}.map-list{display:flex;flex-direction:column;gap:4px;max-height:40vh;overflow:auto;margin-top:6px}.map-list-item{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 9px;border:1px solid var(--border);border-radius:8px;background:var(--panel2);cursor:pointer;font-size:13px}.map-list-item:hover{border-color:var(--accent)}.map-popup-btns{display:flex;flex-direction:column;gap:4px;margin-top:6px}.map-popup-btns .small-btn{font-size:11px;padding:4px 8px;width:100%;box-sizing:border-box}.block-photo{width:100%;border-radius:8px;max-height:280px;object-fit:cover;border:1px solid var(--border)}.block-desc{font-size:13px;line-height:1.5;color:var(--text)}.block-desc>div{margin:0}.modal-wide{width:560px;max-width:94vw}.leaflet-container{background:#dfe6ec}:root.dark .leaflet-popup-content-wrapper,:root.dark .leaflet-popup-tip{background:var(--panel2);color:var(--text)}:root.dark .leaflet-control-zoom a{background:var(--panel2);color:var(--text);border-color:var(--border)}.toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:12px}.toolbar label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.flt{display:flex;flex-direction:column;gap:4px;max-width:440px}.flt-t{font-size:12px;color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:999px;padding:4px 11px;font-size:12px;color:var(--text);background:var(--panel2);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.chip input{display:none}.chip em{font-style:normal;opacity:.7}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.chip.on em{opacity:.85}.mlist{position:relative}.mlist-sum{list-style:none;cursor:pointer;background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:7px 9px;font-size:12px;color:var(--text);display:flex;align-items:center;gap:6px;-webkit-user-select:none;user-select:none}.mlist-sum::-webkit-details-marker{display:none}.mlist-sum b{color:var(--accent);font-weight:600}.mlist.on .mlist-sum{border-color:var(--accent);background:#4dabf724;color:var(--accent)}.mlist-sum:hover{border-color:var(--accent)}.mlist-panel{position:absolute;top:calc(100% + 4px);left:0;z-index:40;min-width:300px;max-width:380px;max-height:340px;overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 10px 28px #00000038;padding:6px;display:flex;flex-direction:column;gap:2px}.mlist-panel .mli{display:flex;flex-direction:row;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text)}.mlist-panel .mli:hover{background:var(--panel2)}.mlist-panel .mli input{accent-color:var(--accent);margin:0;flex:none}.mlist-panel .mli em{font-style:normal;margin-left:auto;color:var(--muted);font-size:12px;flex:none}.mlist-panel .mli.muted{cursor:default;color:var(--muted);font-size:12px}.input{background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:7px 9px;font-size:13px;min-width:140px}.input.narrow{width:110px;min-width:110px}.input:focus{outline:1px solid var(--accent)}.table-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow:auto;max-height:calc(100vh - 220px)}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:7px 10px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}th{position:sticky;top:0;background:var(--panel2);color:var(--muted);font-weight:600}th.sort{cursor:pointer;-webkit-user-select:none;user-select:none}th.sort:hover{color:var(--text)}tbody tr{cursor:pointer}tbody tr:hover{background:var(--panel2)}.num{text-align:right;font-variant-numeric:tabular-nums}.prog-cell{max-width:380px}.prog-line{display:flex;justify-content:space-between;gap:10px;font-size:12px;line-height:1.45}.prog-line span{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prog-line b{font-weight:600;font-variant-numeric:tabular-nums;flex:none}.discount{color:var(--green);font-weight:600}.chg-down{color:var(--green);font-weight:600;white-space:nowrap}.chg-up{color:var(--red);font-weight:600;white-space:nowrap}.empty{padding:30px;text-align:center;color:var(--muted)}.pick-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:8px 4px}.pick-actions{display:flex;gap:8px}.pick-col{width:34px;text-align:center}.pick-col input{cursor:pointer;width:15px;height:15px}.link-col{width:1%;text-align:right}.pik-link{color:var(--accent);font-weight:600;text-decoration:none;white-space:nowrap}.pik-link:hover{text-decoration:underline}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:20}.modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;width:min(760px,94vw);max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);flex:none;background:var(--panel)}.modal-body{padding:16px;display:flex;flex-direction:column;gap:12px;overflow:auto;flex:1 1 auto}.plan{max-width:340px;background:#fff;border-radius:8px;padding:6px;align-self:center}.plan-wrap{display:flex;flex-direction:column;gap:6px;align-items:center}.modal-lg{width:min(1180px,96vw);max-height:94vh}.flat-detail{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,440px);gap:20px;align-items:start}.flat-detail-main{display:flex;flex-direction:column;gap:12px;min-width:0}.flat-detail-side{display:flex;flex-direction:column;gap:10px;position:sticky;top:0}.flat-detail-side .plan{max-width:100%;width:100%}@media(max-width:1000px){.flat-detail{grid-template-columns:1fr}.flat-detail-side{position:static;align-items:center}.flat-detail-side .plan{max-width:420px}}.plan-btns{display:flex;gap:6px}.btn.mini{padding:4px 10px;font-size:12px;border-radius:6px;text-decoration:none}button.mini{padding:4px 10px;font-size:12px;border-radius:6px}.kv{display:grid;grid-template-columns:max-content 1fr;gap:4px 18px;font-size:13px}.kv span{color:var(--muted)}table.progs td,table.progs th{border-bottom:1px solid var(--border)}tr.disabled{opacity:.45}.changes{margin:0;padding-left:18px;font-size:13px;display:flex;flex-direction:column;gap:4px}.btn{background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:7px 14px;cursor:pointer;font-size:13px;text-decoration:none;display:inline-block}.btn:hover{border-color:var(--accent)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#04121f;font-weight:600}.settings{display:flex;flex-direction:column;gap:14px;max-width:640px}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:12px}.card h3{margin:0;font-size:15px}.card label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted)}.row-gap{display:flex;gap:10px}.history .toolbar{margin-bottom:16px}.chart-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.grid{stroke:var(--border);stroke-width:1}.band{fill:#4dabf71f}.avg{fill:none;stroke:var(--accent);stroke-width:2}.tick{fill:var(--muted);font-size:11px}.legend{font-size:12px;margin-top:6px;display:flex;align-items:center}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px}.avg-dot{background:var(--accent)}.band-dot{background:#4dabf74d}.modal-veil{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:100}.modal-auth{width:380px;max-width:calc(100vw - 32px);box-shadow:0 18px 50px #0000004d}.modal-title{font-weight:600}.modal-body form{display:flex;flex-direction:column;gap:10px}.modal-body label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted)}.x{background:none;border:none;color:var(--muted);font-size:14px;cursor:pointer;padding:2px 6px}.x:hover{color:var(--text)}.seg{display:flex;gap:6px}.seg-b{flex:1;padding:7px 0;border:1px solid var(--border);background:var(--panel2);color:var(--text);border-radius:8px;cursor:pointer}.seg-b.on{background:var(--accent);border-color:var(--accent);color:#04121f;font-weight:600}.btn.wide{width:100%}.msg{padding:9px 11px;border-radius:8px;font-size:13px}.msg.err{background:#dc26261f;color:var(--red);border:1px solid rgba(220,38,38,.35)}.msg.ok{background:#16a34a1f;color:var(--green);border:1px solid rgba(22,163,74,.35)}.btn.danger{color:var(--red);border-color:#dc262666}.banner{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 18px;border-bottom:1px solid var(--border);font-size:13px;background:var(--panel)}.banner.ok{color:var(--green);background:#16a34a1a}.banner.warn{color:#b7791f;background:#b7791f21}.banner.err{color:var(--red);background:#dc26261a}.user-chip{font-size:13px;color:var(--text);background:var(--panel2);border:1px solid var(--border);border-radius:999px;padding:4px 12px;white-space:nowrap}.user-chip .adm{color:var(--accent);font-size:11px}.chkline{flex-direction:row!important;align-items:center;gap:8px!important;color:var(--text)!important}.chkline input{width:15px;height:15px;accent-color:var(--accent)}.row-btns{display:flex;gap:10px}.seg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;align-self:flex-start}.seg-btn{background:transparent;border:0;color:var(--muted);padding:7px 16px;cursor:pointer;font-size:13px}.seg-btn.on{background:var(--accent);color:#04121f;font-weight:600}.site-steps{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:4px}.site-box{display:flex;flex-direction:column;gap:10px;border:1px solid var(--border);border-radius:8px;padding:12px}.code-line{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}.code-line code{background:var(--panel2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:15px;letter-spacing:1px}.cards{display:flex;flex-direction:column;gap:10px}.srow{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.srow b{font-size:15px}.sbtns{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-top:12px}.cfg-group{display:flex;flex-direction:column;gap:4px}.cfg-label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.sbtn-actions{align-self:flex-end}.sfooter{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-left:auto}.note-row{display:flex;align-items:flex-start;gap:8px;margin-top:10px}.note-input{flex:1;min-width:240px;min-height:54px;font-size:14px;line-height:1.4;resize:vertical}.note-row .btn.mini{flex:none}.note-row .btn.mini:disabled{opacity:.5;cursor:default}.chip-mini{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;background:var(--panel2);border:1px solid var(--border);color:var(--muted)}.stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-bottom:14px}.card.stat{align-items:center;text-align:center}.stat-n{font-size:26px;font-weight:700}.admin-t{width:100%;border-collapse:collapse;font-size:13px}.admin-t th,.admin-t td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border)}.admin-t th{color:var(--muted);font-weight:600;font-size:12px}.ok{color:var(--green)}.bad{color:var(--red)}.spark{display:flex;align-items:flex-end;gap:4px}.spark-col{display:flex;flex-direction:column;align-items:center;gap:3px}.spark-bar{width:18px;background:var(--accent);border-radius:3px 3px 0 0}.spark-lab{font-size:10px;color:var(--muted)}.an-toolbar{align-items:flex-end}.an-check{flex-direction:row;align-items:center;gap:6px}.an-period{margin:4px 0 12px}.an-gap{color:var(--red)}.an-body{display:flex;gap:16px;align-items:flex-start}.an-left{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px}.an-right{width:520px;flex:0 0 520px;display:flex;flex-direction:column;gap:12px}.an-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.an-card-t{font-size:13px;font-weight:600;margin-bottom:10px}.an-bar-row{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:12px}.an-bar-label{width:86px;flex:0 0 86px;color:var(--muted)}.an-bar-track{flex:1;height:12px;background:var(--panel2);border-radius:6px;overflow:hidden}.an-bar-fill{height:100%;border-radius:6px;min-width:2px}.an-bar-val{width:56px;text-align:right;font-variant-numeric:tabular-nums}.an-bar-n{width:36px;text-align:right}.an-depth{display:flex;align-items:flex-end;gap:6px;height:150px}.an-depth-col{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end}.an-depth-bar{width:100%;min-height:3px;border-radius:4px 4px 0 0}.an-depth-n{font-size:11px;margin-top:3px}.an-depth-x{font-size:10px;white-space:nowrap}.an-summary{display:flex;gap:10px;flex-wrap:wrap}.an-badge{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:8px 12px;display:flex;flex-direction:column;gap:2px;min-width:118px}.an-badge b{font-size:18px}.an-badge span{font-size:11px;color:var(--muted)}.an-list{display:flex;flex-direction:column;gap:4px}.an-list-scroll{max-height:42vh;overflow:auto}.an-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border:1px solid var(--border);border-radius:8px;background:var(--panel2);cursor:pointer;font-size:12px}.an-row:hover{border-color:var(--accent)}.an-row.on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.an-row-name{flex:1;display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.an-row-pct{font-variant-numeric:tabular-nums;width:56px;text-align:right}.heat-cell{display:inline-block;width:10px;height:10px;border-radius:50%;border:1px solid rgba(255,255,255,.6);flex:none}.legend .heat-cell{margin-right:4px;margin-left:10px}.map-heat{width:498px;height:470px}.pin-thin{border-style:dashed}.pin-heat-sel{border:3px solid var(--accent)}.an-note{margin-top:-6px}.an-load{position:fixed;bottom:12px;right:16px}@media(max-width:1080px){.an-body{flex-direction:column}.an-right{width:100%;flex:1 1 auto}.map-heat{width:100%}}.hist-flats{display:flex;flex-direction:column;gap:10px}.st-active{color:var(--green);font-weight:600;white-space:nowrap}.st-removed{color:var(--muted);white-space:nowrap}.ph-sum{display:flex;flex-wrap:wrap;gap:18px;padding:10px 12px;margin-bottom:12px;background:var(--panel);border:1px solid var(--border);border-radius:10px}.ph-sum>div{display:flex;flex-direction:column;gap:2px}.ph-sum span{font-size:12px}.ph-sum b{font-size:15px}.ph-chart{width:100%;height:auto;margin:4px 0 14px}.ph-ax{fill:var(--muted);font-size:10px}.ph-empty{padding:14px 0}
