:root{--bg:#ffffff;--bg-elev:#ffffff;--bg-deep:#f5f5f5;--paper:#f8f8f8;--ink:#0f0f0f;--ink-soft:#4a4a4a;--ink-faint:#8a8a8a;--line:#e5e5e5;--line-strong:#cccccc;--accent:#1d4f8b;--accent-hover:#163d6e;--accent-soft:#e8eef6;--accent-link:#1d4f8b;--status-pending:#9b9b9b;--status-verified:#3d7a3d;--status-verified-bg:#e8f1e6;--status-disputed:#c4543b;--status-disputed-bg:#f9e7e1;--layer-official:#0f0f0f;--layer-citizen:#4a4a4a;--radius-sm:4px;--radius:8px;--radius-lg:16px;--shadow-sm:0 1px 2px rgba(0,0,0,0.04),0 2px 4px rgba(0,0,0,0.03);--shadow:0 4px 12px rgba(0,0,0,0.08),0 2px 4px rgba(0,0,0,0.04);--shadow-lg:0 12px 32px rgba(0,0,0,0.12),0 4px 12px rgba(0,0,0,0.06)}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg-deep);color:var(--ink);font-family:var(--font-plex),system-ui,-apple-system,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;height:100%}button{cursor:pointer;border:none;background:none}button,input,select,textarea{font-family:inherit;color:inherit}input,select,textarea{font-size:inherit}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app-shell{position:fixed;inset:0;flex-direction:column;overflow:hidden}.app-shell,.topbar{display:flex;background:var(--bg)}.topbar{align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line);z-index:500;position:relative}.app-brand{font-weight:600;font-size:17px;letter-spacing:-.01em;white-space:nowrap}.app-brand-tag{font-size:9px;color:var(--ink-faint);letter-spacing:.02em;display:block;line-height:1;margin-top:2px}.search-cascade{flex:1 1;display:flex;gap:6px;align-items:center;min-width:0}.cascade-input{flex:1 1;background:#fff;border:1px solid var(--line-strong);padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;color:var(--ink);min-width:0}.cascade-input:focus{outline:none}.cascade-input.has-value,.cascade-input:focus{border-color:var(--accent)}.icon-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#fff;background:var(--accent);transition:all .15s;flex-shrink:0}.icon-btn:hover{background:var(--accent-hover);transform:scale(1.05)}.icon-btn svg{width:20px;height:20px;stroke-width:3}.map-stage{flex:1 1;position:relative;overflow:hidden;background:#fff;min-height:0}.map-root{position:absolute;inset:0}.map-root :global(.leaflet-container){background:#eef2f6;font-family:inherit}.no-data-banner{top:12px;left:50%;transform:translateX(-50%);background:var(--paper);border:1px solid var(--line);border-radius:999px;padding:6px 16px;font-size:12px;color:var(--ink-soft);z-index:40}.legend,.no-data-banner{position:absolute;box-shadow:var(--shadow-sm)}.legend{left:16px;top:16px;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;z-index:800;max-width:220px}.legend-title{font-size:9px;letter-spacing:.02em;color:var(--ink-faint);text-transform:uppercase}.legend-group,.legend-title{margin-bottom:8px}.legend-group:last-child{margin-bottom:0}.legend-group-title{font-size:11px;font-weight:600;color:var(--ink);margin-bottom:4px}.legend-row{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ink);margin-bottom:5px}.legend-swatch{width:14px;height:14px;border-radius:50%;flex-shrink:0;box-sizing:border-box}.legend-swatch.official{background:var(--layer-official)}.legend-swatch.citizen{background:#fff;border:2px dashed var(--layer-citizen)}.legend-swatch.pending{background:var(--status-pending)}.legend-swatch.verified{background:var(--status-verified)}.legend-swatch.disputed{background:var(--status-disputed)}.legend-mobile-toggle{display:none}@media (max-width:900px){.legend{display:none}.legend-mobile-toggle{display:flex;position:absolute;left:16px;top:16px;z-index:800;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-sm);width:36px;height:36px;align-items:center;justify-content:center;box-shadow:var(--shadow-sm)}}.fab-add{position:absolute;right:16px;bottom:76px;z-index:800;background:var(--accent);color:#fff;border-radius:999px;padding:12px 18px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px;box-shadow:var(--shadow);transition:transform .15s,background .15s}.fab-add:hover{transform:translateY(-2px);background:var(--accent-hover)}.fab-add.active{background:var(--ink)}.fab-add svg{width:16px;height:16px}.progress-bar{position:relative;padding:10px 16px;background:var(--bg-elev);border-top:1px solid var(--line);display:flex;align-items:center;gap:12px;z-index:300;flex-shrink:0}.progress-info{flex:1 1;display:flex;align-items:baseline;gap:12px;font-size:13px;color:var(--ink-soft);flex-wrap:wrap}.progress-info strong{color:var(--ink);font-weight:600}.progress-bar-mine{font-size:11px;color:var(--accent-link);cursor:pointer;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}@media (max-width:900px){.progress-info{font-size:11px;gap:8px}.progress-info .hide-mobile{display:none}}.add-hint{position:absolute;top:16px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:8px 16px;border-radius:999px;font-size:12px;z-index:800;box-shadow:var(--shadow);display:flex;align-items:center;gap:8px}.add-hint button{background:rgba(255,255,255,.15);color:#fff;padding:2px 8px;border-radius:4px;font-size:11px}.add-popup{position:absolute;background:var(--ink);color:var(--bg);padding:10px 14px;border-radius:8px;font-size:12px;z-index:800;box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;gap:8px;white-space:nowrap;transform:translate(-50%,calc(-100% - 14px))}.add-popup .add-popup-actions{display:flex;gap:6px}.add-popup button{background:var(--bg);color:var(--ink);padding:4px 10px;border-radius:4px;font-size:11px;font-weight:500}.add-popup button.secondary{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.4)}.overlay{position:absolute;inset:0;background:rgba(26,26,26,.7);display:flex;align-items:center;justify-content:center;padding:24px;z-index:900;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fadeIn .2s}.overlay.strong{background:rgba(26,26,26,.85)}.modal-box{background:var(--bg);border-radius:var(--radius);padding:28px;max-width:460px;width:100%;box-shadow:var(--shadow-lg);position:relative;max-height:calc(100% - 32px);overflow-y:auto;animation:slideUp .25s}.modal-close{position:absolute;top:12px;right:12px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--ink-soft);font-size:18px}.modal-close:hover{background:var(--paper);color:var(--ink)}.welcome-box{text-align:center;max-width:440px;padding:32px 28px;border-radius:var(--radius-lg)}.welcome-eyebrow{font-size:10px;color:var(--ink-faint);letter-spacing:.02em;margin-bottom:16px;text-transform:uppercase}.welcome-title{font-size:26px;font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--ink);margin-bottom:18px}.welcome-actions{display:flex;flex-direction:column;gap:8px;margin-top:24px}.welcome-actions button{padding:12px 20px;border-radius:var(--radius-sm);font-size:14px;font-weight:500}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{color:var(--ink-soft);font-size:13px!important}.btn-ghost:hover{color:var(--accent)}.welcome-anon{font-size:11px;color:var(--ink-faint);margin-top:16px;display:flex;align-items:center;justify-content:center;gap:6px}.welcome-anon svg{width:12px;height:12px}.about-title,.how-title{font-size:22px;font-weight:500;margin-bottom:12px}.about-text,.how-intro{font-size:14px;color:var(--ink-soft);line-height:1.6;margin-bottom:12px}.how-layers{display:flex;flex-direction:column;gap:10px;margin-bottom:18px}.how-layer{display:flex;align-items:flex-start;gap:10px;font-size:13px;color:var(--ink-soft)}.how-layer-swatch{width:14px;height:14px;border-radius:50%;margin-top:4px;flex-shrink:0}.how-steps{background:var(--paper);border-radius:var(--radius-sm);padding:14px 18px;display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.how-step{display:flex;gap:12px;font-size:13px;color:var(--ink)}.how-step-num{font-size:10px;font-weight:600;color:var(--accent-link);min-width:14px;padding-top:3px}.how-anon{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-soft);padding-top:12px;border-top:1px solid var(--line);margin-bottom:16px}.how-anon svg{width:14px;height:14px;color:var(--status-verified);flex-shrink:0}.about-eltoque{margin-top:16px;padding-top:16px;border-top:1px solid var(--line);font-size:13px;color:var(--ink)}.detail-panel-desktop{position:absolute;right:0;top:0;bottom:0;width:360px;background:var(--bg-elev);border-left:1px solid var(--line);z-index:800;display:flex;flex-direction:column;overflow:hidden;transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.2,1)}.detail-panel-desktop.open{transform:translateX(0)}@media (max-width:900px){.detail-panel-desktop{display:none}}.detail-sheet-mobile{display:none}@media (max-width:900px){.detail-sheet-mobile{display:flex;position:absolute;left:0;right:0;bottom:0;background:var(--bg-elev);border-top-left-radius:16px;border-top-right-radius:16px;box-shadow:0 -8px 24px rgba(0,0,0,.12);z-index:800;flex-direction:column;overflow:hidden;height:0}.detail-sheet-mobile.dragging{transition:none}.detail-sheet-mobile:not(.dragging){transition:height .25s cubic-bezier(.4,0,.2,1)}.detail-sheet-mobile.peek{height:60px}.detail-sheet-mobile.mid{height:50%}.detail-sheet-mobile.full{height:90%}}.sheet-grip-wrap{display:flex;justify-content:center;padding:12px 0 8px;cursor:-webkit-grab;cursor:grab;flex-shrink:0;background:var(--bg-elev);touch-action:none}.sheet-grip{width:40px;height:5px;background:var(--line-strong);border-radius:3px}.detail-header{padding:0 20px 12px;border-bottom:1px solid var(--line);flex-shrink:0}.detail-panel-desktop .detail-header{padding:20px 20px 12px}.detail-eyebrow{font-size:9px;letter-spacing:.02em;color:var(--ink-faint);margin-bottom:4px;display:flex;align-items:center;gap:6px;text-transform:uppercase}.detail-eyebrow .dot{width:8px;height:8px;border-radius:50%}.detail-eyebrow .dot.official{background:var(--layer-official)}.detail-eyebrow .dot.citizen{background:#fff;border:1.5px dashed var(--layer-citizen)}.detail-title{font-size:16px;font-weight:600;line-height:1.2;margin-bottom:2px}.detail-subtitle{font-size:11px;color:var(--ink-soft);line-height:1.3}.detail-body{padding:16px 20px;overflow-y:auto;flex:1 1;min-height:0}.detail-row{padding:10px 0;border-bottom:1px solid var(--line)}.detail-row:last-child{border-bottom:none}.detail-label{font-size:10px;letter-spacing:.02em;color:var(--ink-faint);margin-bottom:4px;text-transform:uppercase}.detail-value{font-size:14px;color:var(--ink);font-weight:500}.detail-value.large{font-size:17px;font-weight:500}.state-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:500;letter-spacing:.02em}.state-badge.pending{background:var(--paper);color:var(--ink-soft);border:1px solid var(--line-strong)}.state-badge.verified{background:var(--status-verified-bg);color:var(--status-verified);border:1px solid #b8d199}.state-badge.disputed{color:var(--status-disputed)}.balance-box,.state-badge.disputed{background:var(--status-disputed-bg);border:1px solid #e5a99a}.balance-box{border-radius:var(--radius-sm);padding:12px 14px;margin-top:8px}.balance-title{font-size:10px;letter-spacing:.02em;color:var(--status-disputed);margin-bottom:8px;text-transform:uppercase}.balance-row{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;gap:8px}.balance-row.majority{color:var(--ink)}.balance-row.minority{color:var(--ink-soft)}.balance-note{margin-top:8px;font-size:11px;color:var(--ink-faint);font-style:italic}.detail-actions{padding:12px 16px 14px;display:flex;gap:8px;border-top:1px solid var(--line);flex-shrink:0;background:var(--bg-elev);align-items:center}.detail-actions button{flex:1 1;padding:11px 14px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;transition:all .15s;line-height:1.2}.btn-confirm{background:var(--accent);color:#fff}.btn-confirm:hover{background:var(--accent-hover)}.btn-confirm:disabled{background:var(--status-verified);cursor:default;opacity:.85}.btn-correct{background:#fff;color:var(--ink);border:1px solid var(--line-strong)}.btn-correct:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.form-eyebrow{font-size:10px;color:var(--ink-faint);margin-bottom:8px;letter-spacing:.02em;text-transform:uppercase}.form-title{font-size:21px;font-weight:500;margin-bottom:4px;line-height:1.25}.form-context{font-size:13px;color:var(--ink-soft);margin-bottom:18px}.form-field{margin-bottom:16px}.form-label{display:block;font-size:13px;font-weight:500;color:var(--ink);margin-bottom:4px}.form-label .req{color:var(--status-disputed);margin-left:2px}.form-label .opt{color:var(--ink-faint);font-weight:400;font-size:11px;font-style:italic;margin-left:4px}.form-input,.form-select,.form-textarea{width:100%;background:var(--bg-elev);border:1px solid var(--line-strong);padding:10px 12px;border-radius:var(--radius-sm);font-size:14px;color:var(--ink)}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:var(--ink)}.form-input:disabled,.form-select:disabled{background:var(--paper);color:var(--ink-soft)}.form-help{font-size:11px;color:var(--ink-faint);margin-top:4px;font-style:italic}.form-textarea{resize:vertical;min-height:60px}.form-readonly{background:var(--paper);border-radius:var(--radius-sm);padding:10px 12px;font-size:14px;color:var(--ink)}.circuit-other-toggle{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:12px;color:var(--accent-link);cursor:pointer}.circuit-other-toggle input{margin:0;cursor:pointer}.form-actions{display:flex;gap:8px;margin-top:18px}.form-actions button{flex:1 1;padding:12px 14px;border-radius:var(--radius-sm);font-size:13px;font-weight:500}.btn-secondary{background:#fff;color:var(--ink-soft);border:1px solid var(--line-strong)}.btn-secondary:hover{background:var(--bg-deep)}.char-count{font-size:11px;color:var(--ink-faint);text-align:right;margin-top:2px}.thanks-overlay{background:var(--bg);z-index:950}.thanks-box{max-width:380px;width:100%;box-shadow:none;background:transparent;padding:0;text-align:center;flex-direction:column}.thanks-box,.thanks-mark{display:flex;align-items:center}.thanks-mark{width:64px;height:64px;border-radius:50%;background:var(--status-verified);justify-content:center;color:white;margin-bottom:20px}.thanks-mark svg{width:32px;height:32px}.thanks-title{font-size:24px;font-weight:500;margin-bottom:8px}.thanks-detail{font-size:14px;color:var(--ink-soft);max-width:320px;line-height:1.5;margin-bottom:8px}.thanks-progress{margin-top:16px;background:var(--paper);padding:16px 20px;border-radius:var(--radius);font-size:13px;color:var(--ink);max-width:320px;width:100%}.thanks-progress strong{font-size:22px;font-weight:600;color:var(--accent-link);display:block;margin-bottom:2px}.share-preview{background:var(--paper);border:1px dashed var(--line-strong);padding:12px 14px;border-radius:var(--radius-sm);font-size:11px;color:var(--ink-soft);margin:12px 0;text-align:left;line-height:1.5;width:100%}.thanks-actions{padding:24px 0 4px;display:flex;flex-direction:column;gap:8px;width:100%;max-width:340px}.btn-share{background:var(--accent);color:#fff;padding:14px 20px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:center;gap:8px}.btn-share:hover{background:var(--accent-hover)}.btn-share svg{width:16px;height:16px}.btn-back{background:transparent;color:var(--ink-soft);font-size:13px;padding:10px}.offline-banner{position:absolute;top:16px;left:50%;transform:translateX(-50%);background:#1f1d1a;color:#d4cebb;padding:8px 16px;border-radius:999px;font-size:12px;z-index:800;display:flex;align-items:center;gap:8px;box-shadow:var(--shadow);animation:slideDown .3s;text-align:center}.offline-banner .pulse{width:8px;height:8px;background:var(--status-disputed);border-radius:50%;animation:pulse 1.5s infinite;flex-shrink:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}@media (max-width:900px){.welcome-title{font-size:22px}.modal-box{padding:22px 20px}.topbar{flex-wrap:wrap;padding:10px 12px}.app-brand{font-size:14px}.search-cascade{width:100%;flex:none;order:3}.cascade-input{font-size:12px;padding:7px 10px}}