:root{--bg-0: #0c0f14;--bg-1: #12161e;--bg-2: #181e28;--bg-3: #1e2633;--bg-hover: #243044;--border: #2a3444;--border-strong: #3a4658;--text: #e8edf5;--text-muted: #8b97ab;--text-dim: #5c6a80;--accent: #2dd4bf;--accent-dim: rgba(45, 212, 191, .15);--amber: #f59e0b;--amber-dim: rgba(245, 158, 11, .18);--green: #34d399;--green-dim: rgba(52, 211, 153, .18);--violet: #a78bfa;--violet-dim: rgba(167, 139, 250, .2);--slate: #64748b;--danger: #f87171;--sidebar-w: 380px;--topbar-h: 52px;--filter-h: 44px;--radius: 8px;--font: "IBM Plex Sans", "Segoe UI", system-ui, -apple-system, sans-serif;--mono: "IBM Plex Mono", "SF Mono", ui-monospace, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;background:var(--bg-0);color:var(--text);font-family:var(--font);font-size:13px;line-height:1.45;overflow:hidden}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}.topbar{height:var(--topbar-h);display:flex;align-items:center;gap:16px;padding:0 16px;background:var(--bg-1);border-bottom:1px solid var(--border);flex-shrink:0}.brand{display:flex;align-items:baseline;gap:6px;font-weight:600;letter-spacing:-.02em;white-space:nowrap}.brand .dot{color:var(--accent);font-weight:400}.brand .sub{color:var(--text-muted);font-weight:500}.area-chip,.cache-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px}.area-chip{background:var(--bg-3);border:1px solid var(--border);color:var(--text-muted);cursor:pointer}.area-chip .pin{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent)}.spacer{flex:1}.cache-pill{background:#34d3991a;border:1px solid rgba(52,211,153,.35);color:var(--green);font-size:11px;font-weight:500}.cache-pill.warn{background:var(--amber-dim);border-color:#f59e0b66;color:var(--amber)}.cache-pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:6px;border:1px solid var(--border-strong);background:var(--bg-3);color:var(--text);cursor:pointer;font-weight:500;transition:background .15s,border-color .15s,transform .1s}.btn:hover{background:var(--bg-hover);border-color:var(--accent)}.btn:active{transform:scale(.98)}.btn-primary{background:var(--accent);border-color:var(--accent);color:#042f2e;font-weight:600}.btn-primary:hover{background:#5eead4;border-color:#5eead4}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-muted)}.btn-ghost:hover{color:var(--text);border-color:var(--border-strong)}.btn:disabled{opacity:.4;cursor:not-allowed;transform:none}.btn svg{width:14px;height:14px}.filterbar{height:var(--filter-h);display:flex;align-items:center;gap:8px;padding:0 16px;background:var(--bg-1);border-bottom:1px solid var(--border);flex-shrink:0}.filter-label{color:var(--text-dim);font-size:11px;text-transform:uppercase;letter-spacing:.06em;margin-right:4px}.chip{padding:4px 11px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-muted);cursor:pointer;font-size:12px;font-weight:500}.chip:hover{border-color:var(--border-strong);color:var(--text);background:var(--bg-3)}.chip.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.chip .count{display:inline-block;margin-left:4px;padding:0 5px;border-radius:999px;background:#ffffff14;font-size:10px;font-variant-numeric:tabular-nums}.chip.active .count{background:#2dd4bf40}.toggle{display:inline-flex;align-items:center;gap:6px;margin-left:8px;color:var(--text-muted);font-size:12px;cursor:pointer}.toggle input{accent-color:var(--accent)}.workspace{display:flex;height:calc(100% - var(--topbar-h) - var(--filter-h));min-height:0}.map-pane{flex:1;position:relative;min-width:0;background:var(--bg-0);overflow:hidden}.map-el{width:100%;height:100%}.map-tooltip{position:absolute;z-index:20;pointer-events:none;padding:6px 10px;background:#0c0f14eb;border:1px solid var(--border-strong);border-radius:6px;font-size:12px;font-weight:500;color:var(--text);box-shadow:0 4px 16px #00000073;white-space:nowrap}.map-tooltip .tt-sub{display:block;font-size:10px;color:var(--text-muted);font-weight:400;margin-top:2px}.map-chrome{position:absolute;z-index:10}.zoom-controls{top:16px;right:16px;display:flex;flex-direction:column;gap:2px}.zoom-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--bg-2);border:1px solid var(--border);color:var(--text);cursor:pointer;font-size:16px}.zoom-btn:first-child{border-radius:6px 6px 0 0}.zoom-btn:last-child{border-radius:0 0 6px 6px}.zoom-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.legend{bottom:88px;left:16px;padding:10px 12px;background:#12161ee6;border:1px solid var(--border);border-radius:var(--radius);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.legend-title{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin-bottom:8px}.legend-item{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:11px;color:var(--text-muted)}.legend-item:last-child{margin-bottom:0}.swatch{width:14px;height:10px;border-radius:2px;border:1.5px solid;flex-shrink:0}.swatch.untagged{background:#6482a073;border-color:#8caac8b3}.swatch.no-pv{background:#475569b3;border-color:#94a3b8cc}.swatch.has-pv{background:#34d39980;border-color:#34d399f2}.swatch.storage{background:#a78bfa80;border-color:#a78bfaf2}.swatch.review{background:#f59e0b59;border-color:#f59e0be6;border-style:dashed}.attr{position:absolute;bottom:88px;right:16px;font-size:10px;color:var(--text-dim)}.scrubber{position:absolute;bottom:16px;left:50%;transform:translate(-50%);z-index:15;display:flex;align-items:center;gap:12px;padding:10px 16px;background:#12161ef0;border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 8px 32px #00000080;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);min-width:420px}.play-btn{width:36px;height:36px;border-radius:50%;border:1px solid var(--border-strong);background:var(--bg-3);color:var(--accent);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.play-btn:hover{background:var(--accent-dim);border-color:var(--accent)}.play-btn svg{width:14px;height:14px}.scrubber-track{flex:1;display:flex;flex-direction:column;gap:4px}.year-labels{display:flex;justify-content:space-between;font-size:10px;color:var(--text-dim);font-variant-numeric:tabular-nums;padding:0 2px;gap:2px}.year-labels button{background:none;border:0;color:inherit;cursor:pointer;padding:0 1px;font-variant-numeric:tabular-nums}.year-labels .active-year{color:var(--accent);font-weight:600}.year-range{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:2px;background:linear-gradient(90deg,var(--border-strong),var(--accent));outline:none;cursor:pointer}.year-range::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid #042f2e;box-shadow:0 0 0 3px #2dd4bf4d;cursor:grab}.year-display{font-family:var(--mono);font-size:15px;font-weight:600;color:var(--accent);min-width:44px;text-align:center;font-variant-numeric:tabular-nums}.pv-hint{position:absolute;bottom:78px;left:50%;transform:translate(-50%);z-index:14;padding:4px 10px;background:#12161ee6;border:1px solid var(--border);border-radius:6px;font-size:11px;color:var(--text-muted);white-space:nowrap}.pv-hint .yes{color:var(--green);font-weight:600}.pv-hint .no{color:var(--text-dim)}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--bg-1);border-left:1px solid var(--border);display:flex;flex-direction:column;min-height:0}.sidebar-scroll{flex:1;overflow-y:auto;padding:16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:48px 24px;color:var(--text-muted)}.empty-state h3{font-size:14px;font-weight:600;color:var(--text);margin-bottom:6px}.empty-state p{font-size:12px;color:var(--text-dim);max-width:220px;line-height:1.5}.empty-state kbd{display:inline-block;padding:1px 5px;background:var(--bg-3);border:1px solid var(--border);border-radius:3px;font-family:var(--mono);font-size:10px}.addr-block{margin-bottom:14px}.addr-block h2{font-size:17px;font-weight:650;letter-spacing:-.02em;line-height:1.3;margin-bottom:6px}.meta-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.meta-id{font-family:var(--mono);font-size:11px;color:var(--text-dim);background:var(--bg-3);padding:2px 7px;border-radius:4px;border:1px solid var(--border)}.status-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:600}.status-badge.untagged{background:#6482a033;color:#93c5fd;border:1px solid rgba(100,130,160,.4)}.status-badge.no_pv{background:#64748b40;color:#94a3b8;border:1px solid rgba(148,163,184,.4)}.status-badge.has_pv{background:var(--green-dim);color:var(--green);border:1px solid rgba(52,211,153,.4)}.status-badge.storage{background:var(--violet-dim);color:var(--violet);border:1px solid rgba(167,139,250,.45)}.status-badge.review{background:var(--amber-dim);color:var(--amber);border:1px solid rgba(245,158,11,.4)}.section{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}.section-label{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--text-dim);margin-bottom:8px;font-weight:600}.year-strip{display:flex;gap:3px;flex-wrap:wrap}.year-pill{flex:1;min-width:28px;text-align:center;padding:5px 0;font-size:10px;font-family:var(--mono);border-radius:4px;background:var(--bg-3);color:var(--text-dim);border:1px solid transparent;cursor:pointer}.year-pill.available{color:var(--text-muted);border-color:var(--border)}.year-pill.current{background:var(--accent-dim);border-color:var(--accent);color:var(--accent);font-weight:600}.year-pill.has-pv-dot:after{content:"";display:block;width:4px;height:4px;margin:3px auto 0;border-radius:50%;background:var(--green)}.segmented{display:flex;background:var(--bg-3);border:1px solid var(--border);border-radius:7px;padding:3px;gap:2px}.segmented label{flex:1;text-align:center;padding:7px 4px;border-radius:5px;cursor:pointer;font-size:12px;font-weight:500;color:var(--text-muted);-webkit-user-select:none;user-select:none}.segmented input{display:none}.segmented input:checked+label{background:var(--bg-1);color:var(--text);box-shadow:0 1px 3px #0000004d}.segmented input:checked+label[data-v=brak]{color:#94a3b8}.segmented input:checked+label[data-v=jest]{color:var(--green)}.segmented input:checked+label[data-v=check]{color:var(--amber)}.form-row{display:flex;gap:10px;margin-top:10px}.form-field{flex:1}.form-field label{display:block;font-size:11px;color:var(--text-dim);margin-bottom:4px}.form-field input,.form-field select,.form-field textarea{width:100%;padding:7px 9px;background:var(--bg-3);border:1px solid var(--border);border-radius:6px;color:var(--text);outline:none}.form-field textarea{resize:vertical;min-height:60px}.lead-type-box{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:7px;background:var(--bg-3);border:1px solid var(--border);margin-top:10px}.lead-type-box .lt-label{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim)}.lead-type-box .lt-value{font-size:13px;font-weight:650;margin-left:auto}.lead-type-box.lead-pv .lt-value{color:#93c5fd}.lead-type-box.lead-mag .lt-value{color:var(--amber)}.lead-type-box.lead-skip .lt-value{color:var(--violet)}.lead-type-box.lead-none .lt-value{color:var(--text-dim)}.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.actions .btn{flex:1;justify-content:center;min-width:0}.actions .btn-wide{flex:1 1 100%}.leads-section{border-top:1px solid var(--border);background:var(--bg-0);max-height:220px;display:flex;flex-direction:column;flex-shrink:0}.leads-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px 6px}.leads-header h3{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:600}.leads-header .n{font-family:var(--mono);font-size:11px;color:var(--accent)}.leads-list{overflow-y:auto;padding:4px 8px 10px;flex:1}.lead-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer}.lead-item:hover{background:var(--bg-3)}.lead-item.active{background:var(--accent-dim)}.lead-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.lead-dot.pv{background:#93c5fd}.lead-dot.mag{background:var(--amber)}.lead-dot.skip{background:var(--violet)}.lead-dot.review{background:var(--amber);opacity:.6}.lead-dot.nopv{background:var(--slate)}.lead-info{flex:1;min-width:0}.lead-info .addr{font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lead-info .type{font-size:10px;color:var(--text-dim)}.lead-kwp{font-family:var(--mono);font-size:11px;color:var(--text-muted)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:100;padding:10px 18px;background:var(--bg-2);border:1px solid var(--accent);border-radius:8px;color:var(--text);font-size:13px;font-weight:500;box-shadow:0 8px 24px #00000080}.login{height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse 60% 50% at 50% 30%,#1a2a28 0%,var(--bg-0) 70%)}.login-card{width:360px;padding:28px;background:var(--bg-1);border:1px solid var(--border);border-radius:12px}.login-card h1{font-size:18px;margin-bottom:6px}.login-card p{color:var(--text-muted);margin-bottom:18px}.login-card .form-field{margin-bottom:12px}.login-card .btn{width:100%;justify-content:center}.login-error{color:var(--danger);font-size:12px;margin-bottom:10px}.modal-backdrop{position:fixed;inset:0;background:#0000008c;z-index:50;display:flex;align-items:center;justify-content:center}.modal{width:420px;max-width:92vw;background:var(--bg-1);border:1px solid var(--border);border-radius:12px;padding:18px}.modal h2{margin-bottom:12px;font-size:16px}.area-list{max-height:240px;overflow:auto;margin-bottom:12px}.area-list button{width:100%;text-align:left;padding:8px 10px;background:transparent;border:1px solid transparent;border-radius:6px;cursor:pointer;color:var(--text)}.area-list button:hover,.area-list button.active{background:var(--bg-3);border-color:var(--border)}.ol-scale-line{background:transparent!important;bottom:88px!important;right:16px!important;left:auto!important}.ol-scale-line-inner{border-color:var(--text)!important;color:var(--text-muted)!important;font-size:10px!important}.ol-attribution{display:none}
