:root{
  --blue:#0b66e4; --blue2:#2f80ed; --blue-soft:#eef5ff; --ink:#142033; --muted:#6d788a;
  --line:#e7ebf1; --paper:#fff; --bg:#f4f7fb; --danger:#b63843; --amber:#8a6200;
  --green:#2b7d4b; --shadow:0 18px 50px rgba(26,54,93,.12); --safe:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box} html,body{height:100%} body{margin:0;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--ink);overscroll-behavior:none}
button,input,select,textarea{font:inherit} button{cursor:pointer}.hidden{display:none!important}.muted{color:var(--muted)}.small{font-size:12px}.tiny{font-size:11px}.grow{flex:1;min-width:0}.row{display:flex;align-items:center;gap:10px}.between{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:12px}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#shell{height:100%;max-width:1100px;margin:auto;background:#fff;position:relative;overflow:hidden}
.login-view{height:100%;display:grid;place-items:center;padding:24px;background:linear-gradient(180deg,#f8fbff,#fff 50%)}
.login-card{width:min(100%,420px);background:#fff;padding:26px 22px;border-radius:28px;box-shadow:var(--shadow);border:1px solid var(--line)}
.logo,.brand-mini{background:var(--blue);color:white;display:grid;place-items:center;font-weight:900}.logo{width:54px;height:54px;border-radius:16px;font-size:25px;margin-bottom:24px}.brand-mini{width:38px;height:38px;border-radius:12px}
.login-card h1{margin:0 0 6px;font-size:28px;letter-spacing:-.03em}.login-card p{margin:0 0 22px;color:var(--muted)}
.field-label{display:block;font-size:12px;font-weight:800;color:#4b5667;margin-bottom:7px}.field-input{width:100%;border:1px solid #dfe5ee;border-radius:15px;padding:13px 14px;background:#fff;color:var(--ink);outline:none}.field-input:focus{border-color:#9dc3f8;box-shadow:0 0 0 4px #eaf3ff}
.pin-dots{display:flex;gap:14px;justify-content:center;margin:20px 0}.pin-dots i{width:14px;height:14px;border-radius:50%;background:#d8dee8}.pin-dots i.on{background:var(--blue)}
.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}.key{height:54px;border:0;border-radius:16px;background:#f2f5f9;font-weight:850;font-size:19px;color:var(--ink)}.key:active{background:#e7eef8}.login-help{text-align:center;color:var(--muted);font-size:11px;margin-top:10px;min-height:16px}
.btn{border:0;border-radius:16px;min-height:48px;padding:12px 16px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#edf1f6;color:var(--ink)}.btn.primary{background:var(--blue);color:#fff}.btn.light{background:var(--blue-soft);color:#0a58c7}.btn.ghost{background:#fff;border:1px solid var(--line)}.btn.danger{background:#fff0f1;color:var(--danger)}.btn.wide{width:100%}.btn.small{min-height:36px;padding:8px 11px;font-size:12px;border-radius:12px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:active{transform:translateY(1px)}
.app-view{height:100%;background:#fff}.appbar{height:64px;padding:8px 14px;display:flex;align-items:center;gap:10px;background:#fff;border-bottom:1px solid var(--line);z-index:20}.app-title{min-width:0;flex:1}.app-title strong{display:block;font-size:16px}.app-title span{display:block;color:var(--muted);font-size:11px;margin-top:1px}.icon-btn{width:42px;height:42px;border:0;border-radius:13px;background:#f4f6fa;color:var(--ink);display:grid;place-items:center;font-size:19px}.connection-badge{font-size:10px;font-weight:850;border-radius:999px;padding:6px 9px}.connection-badge.online{background:#edf8f1;color:#287345}.connection-badge.offline{background:#fff4e5;color:#8a6200}
.main{height:calc(100% - 64px);position:relative;overflow:hidden;background:#fff}.screen{height:100%;overflow:auto;background:#fff;padding:18px 16px calc(30px + var(--safe))}.screen::-webkit-scrollbar{width:0}.section-title{margin:0 0 4px;font-size:24px;letter-spacing:-.03em}.sub{margin:0 0 20px;color:var(--muted);font-size:13px}.section-gap{height:20px}
.card{border:1px solid var(--line);background:#fff;border-radius:20px;padding:16px}.card+.card{margin-top:10px}.hero{background:linear-gradient(145deg,#0b66e4,#3283ed);color:#fff;border:0;padding:20px}.hero h2{margin:5px 0 5px;font-size:23px}.hero p{margin:0;color:#eaf3ff}.meta{font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.08em;opacity:.78}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stat{border:1px solid var(--line);border-radius:17px;padding:13px;background:#fff}.stat strong{display:block;font-size:22px}.stat span{font-size:11px;color:var(--muted)}
.list{display:flex;flex-direction:column;gap:8px}.list-btn{width:100%;border:1px solid var(--line);background:#fff;border-radius:17px;padding:14px;text-align:left;display:flex;align-items:center;gap:12px}.list-btn.selected{background:#f3f8ff;border-color:#d8e9ff}.round-icon{width:40px;height:40px;border-radius:13px;background:var(--blue-soft);display:grid;place-items:center;color:#0d60d0;font-weight:900;flex:0 0 auto}.list-btn b{display:block;font-size:14px}.list-btn small{display:block;color:var(--muted);margin-top:3px;line-height:1.4}.chev{margin-left:auto;color:#98a2b1;font-size:20px}
.field-screen{height:100%;display:flex;flex-direction:column}.map-area{position:relative;flex:1;min-height:280px;background:#eef3f8;overflow:hidden}.map-svg{width:100%;height:100%;display:block}.road-edge{fill:none;stroke:#dce4ed;stroke-width:20;stroke-linecap:round}.road{fill:none;stroke:#fff;stroke-width:17;stroke-linecap:round}.minor{fill:none;stroke:#d9e1e9;stroke-width:7;stroke-linecap:round}.river{fill:#d9ebf8}.block{fill:#f8fafc;stroke:#e5ebf1;stroke-width:1}.pin circle{fill:var(--blue);stroke:#fff;stroke-width:4;filter:drop-shadow(0 3px 6px rgba(11,102,228,.25))}.pin text{font-size:10px;font-weight:900;fill:#fff;text-anchor:middle;dominant-baseline:middle}.pin.done circle{fill:#b8c0ca}.pin.current .pulse{fill:none;stroke:#4e99f5;stroke-width:3;opacity:.35}.route{fill:none;stroke:var(--blue);stroke-width:7;stroke-linecap:round;stroke-dasharray:1 12}.me-dot{fill:#fff;stroke:var(--blue);stroke-width:4}.map-float{position:absolute;top:12px;left:12px;right:12px;display:flex;justify-content:space-between;pointer-events:none}.float-pill{background:rgba(255,255,255,.96);border:1px solid rgba(222,229,238,.95);border-radius:999px;padding:8px 11px;font-size:11px;font-weight:800;box-shadow:0 8px 22px rgba(24,48,77,.08)}
.action-dock{background:#fff;border-top:1px solid var(--line);padding:16px 16px calc(16px + var(--safe));box-shadow:0 -12px 34px rgba(28,55,90,.07)}.dock-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.dock-top h2{font-size:21px;margin:0 0 4px;letter-spacing:-.02em}.dock-top p{margin:0;color:var(--muted);font-size:12px}.counter{font-size:12px;font-weight:850;color:#31506e;background:#f2f6fb;padding:7px 10px;border-radius:999px;white-space:nowrap}.primary-action{min-height:56px;font-size:16px;width:100%;border-radius:17px}.dock-secondary{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.helper{text-align:center;color:var(--muted);font-size:12px;margin-top:10px;line-height:1.4}
.result-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.result-btn{border:1px solid var(--line);background:#fff;border-radius:17px;padding:14px;text-align:left}.result-btn b{display:block;font-size:13px;margin-top:7px}.result-btn small{display:block;color:var(--muted);font-size:11px;margin-top:4px;line-height:1.35}.result-btn:active{background:#f8fafc}
.backdrop{position:fixed;inset:0;background:rgba(14,26,41,.34);display:none;z-index:80}.backdrop.open{display:block}.sheet{position:absolute;left:0;right:0;bottom:0;background:#fff;border-radius:26px 26px 0 0;padding:12px 16px calc(18px + var(--safe));max-height:88vh;overflow:auto;box-shadow:0 -30px 60px rgba(13,30,54,.18)}.grab{width:40px;height:4px;background:#d5dce6;border-radius:99px;margin:0 auto 14px}.sheet h2{font-size:22px;margin:0 0 5px}.sheet p{margin:0 0 16px;color:var(--muted);font-size:13px}.menu-group{font-size:11px;color:#8791a0;text-transform:uppercase;letter-spacing:.08em;font-weight:850;margin:18px 4px 8px}.menu-row{width:100%;border:0;background:#fff;padding:12px 8px;display:flex;align-items:center;gap:12px;text-align:left;border-bottom:1px solid #f0f2f5;border-radius:14px}.menu-row.selected{background:#f3f8ff;box-shadow:inset 0 0 0 1px #dbeaff}.menu-row b{font-size:14px}.menu-row small{display:block;color:var(--muted);margin-top:2px}.menu-row .round-icon{width:38px;height:38px}.menu-row .chev{margin-left:auto}
.toast{position:fixed;left:50%;bottom:22px;transform:translateX(-50%) translateY(20px);background:#132033;color:#fff;padding:11px 14px;border-radius:13px;font-size:12px;opacity:0;pointer-events:none;transition:.2s;z-index:120;max-width:min(90vw,460px);text-align:center}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.empty{text-align:center;padding:36px 16px;color:var(--muted)}.empty .big{font-size:34px;margin-bottom:10px}.progress{height:8px;background:#edf1f6;border-radius:99px;overflow:hidden}.progress>i{display:block;height:100%;background:var(--blue);border-radius:99px}.sync-line{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;background:#b8c0ca}.dot.ok{background:#3f9860}.dot.wait{background:#d39b26}
@media(min-width:760px){#shell{height:min(900px,100%);margin-top:0;box-shadow:0 0 80px rgba(20,32,51,.08)}.field-screen{max-width:700px;margin:auto}.screen{max-width:700px;margin:auto}}




/* Phase 2 geographic map + Map Card Builder */
.map-host{position:relative;width:100%;height:100%;min-height:260px;overflow:hidden;background:#eef2f6;touch-action:none;user-select:none}
.territory-map{position:relative}.map-tiles,.map-grid,.map-overlay{position:absolute;inset:0}.map-tiles{overflow:hidden;background:#edf1f5}.map-grid{pointer-events:none;background-image:linear-gradient(rgba(65,83,105,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(65,83,105,.055) 1px,transparent 1px);background-size:32px 32px}.map-tile{position:absolute;width:256px;height:256px;max-width:none;-webkit-user-drag:none;user-select:none}.map-overlay{width:100%;height:100%;overflow:visible}.map-controls{position:absolute;right:12px;top:12px;display:flex;flex-direction:column;gap:6px;z-index:7}.map-zoom{width:38px;height:38px;border:1px solid #d9e0e8;background:rgba(255,255,255,.96);border-radius:12px;box-shadow:0 5px 14px rgba(20,42,68,.12);font-weight:900;font-size:22px;color:#2a3d54}.map-attrib{position:absolute;right:6px;bottom:5px;background:rgba(255,255,255,.88);border-radius:7px;padding:3px 6px;font-size:8px;color:#5e6b79;z-index:6}.map-offline-note{position:absolute;left:10px;bottom:10px;background:rgba(21,32,49,.88);color:#fff;border-radius:999px;padding:6px 9px;font-size:10px;font-weight:800;z-index:8}.territory-map.drawing{cursor:crosshair}.territory-map.dragging{cursor:grabbing}.geo-boundary{fill:rgba(15,94,205,.025);stroke:#075fd6;stroke-width:2.5;stroke-dasharray:8 6;vector-effect:non-scaling-stroke}.geo-group{fill:rgba(30,117,233,.035);stroke:rgba(30,117,233,.26);stroke-width:1.4;vector-effect:non-scaling-stroke}.geo-group.selected{fill:rgba(11,102,228,.09);stroke:#0b66e4;stroke-width:2.4}.geo-card{fill:rgba(52,141,88,.10);stroke:#2d8b55;stroke-width:3;vector-effect:non-scaling-stroke}.geo-rough{fill:rgba(255,178,37,.10);stroke:#d28a08;stroke-width:3;stroke-dasharray:8 5;vector-effect:non-scaling-stroke}.geo-corrected{fill:rgba(11,102,228,.12);stroke:#0b66e4;stroke-width:4;vector-effect:non-scaling-stroke}.geo-route{fill:none;stroke:#0b66e4;stroke-width:5;stroke-linecap:round;stroke-dasharray:2 10;vector-effect:non-scaling-stroke}.geo-pin .geo-pin-body{fill:#0b66e4;stroke:#fff;stroke-width:3;filter:drop-shadow(0 2px 5px rgba(24,54,88,.28));cursor:pointer}.geo-pin .geo-pin-center{fill:#fff;stroke:none;pointer-events:none}.geo-pin-label{font-size:10px;fill:#263849;font-weight:900;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round;pointer-events:none}.geo-pin-glyph{font-size:12px;fill:#fff;font-weight:950;text-anchor:middle;pointer-events:none}.geo-pin.done .geo-pin-body{fill:#aeb7c3}.geo-pin.imported .geo-pin-body{fill:#fff;stroke:#0b66e4;stroke-width:3}.geo-pin.imported .geo-pin-center{fill:#0b66e4}.geo-pin.issue .geo-pin-body{fill:#d28a08;stroke:#fff}.geo-pin.selected .geo-pin-body{fill:#176fda;stroke:#ffe6a2;stroke-width:5}.geo-pin.target .geo-pin-body{fill:#0b66e4;stroke:#fff;stroke-width:5;filter:drop-shadow(0 0 8px rgba(11,102,228,.65))}.geo-pin.highlighted .geo-pin-body{filter:drop-shadow(0 0 7px rgba(11,102,228,.52))}.geo-pin.dimmed{opacity:.28}.geo-me-halo{fill:rgba(11,102,228,.16)}.geo-me{fill:#0b66e4;stroke:#fff;stroke-width:3}.geo-vertex{fill:#fff;stroke:#c77d00;stroke-width:3}.geo-vertex-label{font-size:10px;font-weight:900;fill:#8a6200;paint-order:stroke;stroke:#fff;stroke-width:3}.admin-map{height:300px;margin-top:14px;border-radius:18px;border:1px solid var(--line)}
.phase-note{display:flex;flex-direction:column;gap:3px;background:#f2f7ff;border:1px solid #d9e9ff;border-radius:16px;padding:12px 14px;margin:0 0 16px;color:#24496e}.phase-note b{font-size:12px}.phase-note span{font-size:11px;line-height:1.45;color:#5f7082}.phase-note.compact{margin:14px 0}.card-grid{display:grid;grid-template-columns:1fr;gap:10px}.map-card-tile{width:100%;text-align:left;cursor:pointer}.map-card-tile h2{font-size:16px;margin:9px 0 5px}.map-card-tile p{margin:0 0 6px;color:var(--muted);font-size:12px}.map-card-tile small{color:#8994a1}.status-chip{font-size:9px;font-weight:850;padding:5px 7px;border-radius:999px;background:#f0f3f7;color:#637082}.status-chip.good{background:#e9f6ee;color:#34764b}.detail-list{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}.detail-list>div{border:1px solid var(--line);border-radius:14px;padding:10px}.detail-list b{display:block;font-size:12px}.detail-list span{display:block;font-size:9px;color:var(--muted);margin-top:4px}.stepper{display:grid;grid-template-columns:70px 1fr 70px;align-items:center;gap:10px;margin:14px 0}.stepper strong{text-align:center;font-size:24px}
.builder-screen{height:100%;display:flex;flex-direction:column;background:#fff;overflow:auto}.builder-top{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);background:#fff}.builder-top b{display:block;font-size:15px}.builder-top small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.builder-tools{padding:10px 12px;background:#fff;border-bottom:1px solid var(--line)}.builder-tools label>span{display:block;font-size:10px;font-weight:850;color:#5e6b7a;margin-bottom:5px}.builder-tools select{width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:12px;background:#fff}.filter-row{display:flex;gap:7px;margin-top:9px;overflow:auto}.chip{border:1px solid var(--line);background:#fff;color:#526173;border-radius:999px;padding:8px 11px;font-size:10px;font-weight:800;white-space:nowrap}.chip.selected{background:#edf5ff;border-color:#bbd8ff;color:#075bc9}.builder-map-wrap{position:relative;min-height:390px;flex:1}.builder-map{min-height:390px}.builder-map-hint{position:absolute;left:12px;right:58px;bottom:12px;background:rgba(255,255,255,.94);border:1px solid rgba(218,226,236,.95);box-shadow:0 7px 20px rgba(20,42,68,.08);border-radius:12px;padding:8px 10px;font-size:10px;font-weight:750;color:#506073;z-index:8;pointer-events:none}.builder-actions{padding:12px;background:#fff;border-top:1px solid var(--line)}.builder-action-row{display:flex;gap:8px}.builder-action-row>.btn{flex:1;min-width:0}.builder-analysis{border:1px solid var(--line);border-radius:18px;padding:14px;margin-top:10px}.builder-analysis small{display:block;color:var(--muted);font-size:10px;margin-top:4px}.cluster-strip{display:flex;gap:6px;overflow:auto;margin:12px 0}.cluster-strip span{background:#f2f5f9;border-radius:999px;padding:6px 9px;font-size:9px;white-space:nowrap}.cluster-strip b{font-size:10px}.builder-analysis .field-label{margin-top:12px}
@media(min-width:760px){.card-grid{grid-template-columns:1fr 1fr}.builder-screen{max-width:900px;margin:auto;border-left:1px solid var(--line);border-right:1px solid var(--line)}.builder-map-wrap,.builder-map{min-height:520px}.admin-map{height:400px}}




/* Phase 2.2 builder interaction */
.builder-action-row{flex-wrap:wrap}
.builder-action-row>.btn{flex:1 1 120px}
.builder-map-hint{max-width:calc(100% - 72px)}
/* Phase 2.3 clarity + card management */
.builder-scope-summary{display:flex;align-items:baseline;gap:6px;margin-top:10px;padding:9px 10px;border-radius:12px;background:#f6f9fd;color:#33465b}
.builder-scope-summary b{font-size:14px}.builder-scope-summary span{font-size:10px;color:var(--muted)}
.filter-label{font-size:9px;text-transform:uppercase;letter-spacing:.08em;font-weight:900;color:#8a94a2;margin-top:10px}
.map-legend{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:10px;font-size:9px;color:#5b6878}
.map-legend span{display:flex;align-items:center;gap:5px}
.map-legend i{width:14px;height:14px;border-radius:50%;display:inline-grid;place-items:center;font-style:normal;font-size:10px;font-weight:900}
.legend-home{background:#0b66e4;border:2px solid #fff;box-shadow:0 0 0 1px #0b66e4}
.legend-unverified{background:#fff;border:2px solid #0b66e4}
.legend-issue{background:#d28a08;color:#fff;border:1px solid #fff;box-shadow:0 0 0 1px #d28a08}
.terminology-note{margin-top:10px;padding:9px 10px;border-radius:12px;background:#fffaf0;border:1px solid #f3dfb5;color:#6b5a34;font-size:10px;line-height:1.4}
.card-action-stack{display:flex;flex-direction:column;gap:8px}.center-note{text-align:center;line-height:1.4;padding:4px 8px}


/* Phase 2.4 publisher navigation + assignment management */
.publisher-map-label{right:auto}
.progress-counter{min-width:72px;border:1px solid #d7e6fb;background:#f2f7ff;border-radius:16px;padding:8px 10px;text-align:center;color:#174a86;box-shadow:0 5px 16px rgba(11,102,228,.08)}
.progress-counter strong{display:block;font-size:16px;line-height:1.05}.progress-counter small{display:block;font-size:9px;margin-top:3px;text-transform:uppercase;letter-spacing:.06em}
.action-dock.navigating{box-shadow:0 -12px 36px rgba(11,102,228,.12);border-top-color:#d7e8ff}.primary-action.nav-active{background:#176fda;box-shadow:0 8px 24px rgba(11,102,228,.22)}
.nav-pulse{width:10px;height:10px;border-radius:50%;background:#fff;animation:navPulse 1.6s infinite}.nav-spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.42);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}
.nav-arrow,.location-icon,.next-house-icon{font-size:16px;line-height:1}.next-house-icon{transform:translateY(-1px)}
@keyframes navPulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.7)}70%{box-shadow:0 0 0 8px rgba(255,255,255,0)}100%{box-shadow:0 0 0 0 rgba(255,255,255,0)}}@keyframes spin{to{transform:rotate(360deg)}}
.geo-pin-label.house-label{font-size:10px;font-weight:900}.map-card-actions{display:flex;gap:7px;margin-top:12px;padding-top:11px;border-top:1px solid var(--line)}.map-card-actions .btn{flex:1}
.cluster-list{display:flex;flex-direction:column;gap:8px}.cluster-row{width:100%;display:flex;align-items:center;gap:10px;text-align:left;background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px}.cluster-row small{display:block;color:var(--muted);margin-top:3px}
.cluster-badge{width:36px;height:36px;border-radius:12px;background:#edf5ff;color:#0b66e4;display:grid;place-items:center;font-weight:900}.danger-soft{background:#fff5f5!important;border-color:#f0cccc!important}


/* Phase 2.5 clearer Field Work map states */
.dock-field-controls{display:grid;grid-template-columns:.72fr 1fr 1fr;gap:8px;margin-top:10px}
.dock-field-controls .btn{min-width:0;padding:10px 8px;font-size:12px;white-space:nowrap}
.dock-field-controls .location-compact{font-size:11px;padding-left:6px;padding-right:6px}
.prev-house-icon,.next-house-icon,.location-icon{font-size:15px;line-height:1}


.geo-pin .geo-pin-body{fill:#2478df;stroke:#fff;stroke-width:3}
.geo-pin.target .geo-pin-body{fill:#e59a23;stroke:#fff;stroke-width:4;filter:drop-shadow(0 0 7px rgba(229,154,35,.48))}
.geo-pin.target .geo-pin-center{fill:#fff}
.geo-pin.navigating .geo-pin-body{fill:#23865a;stroke:#fff;stroke-width:4;filter:drop-shadow(0 0 8px rgba(35,134,90,.5))}
.geo-pin.arrived .geo-pin-body{fill:#23865a;stroke:#fff;stroke-width:5}
.geo-pin.done .geo-pin-body{fill:#9fa9b5;stroke:#fff;filter:none}
.geo-pin-nav-ring{fill:none;stroke:#45b77f;stroke-width:3;opacity:.8;animation:houseNavPulse 1.55s ease-out infinite;pointer-events:none}
.geo-pin-arrived-ring{fill:none;stroke:#45b77f;stroke-width:3;opacity:.6;pointer-events:none}
@keyframes houseNavPulse{0%{opacity:.85;transform:scale(.78)}70%{opacity:.08;transform:scale(1.25)}100%{opacity:0;transform:scale(1.32)}}


.geo-me-halo{fill:rgba(111,72,207,.15)}
.geo-me-ring{fill:#fff;stroke:#6f48cf;stroke-width:3}
.geo-me{fill:#6f48cf;stroke:#fff;stroke-width:2}
.geo-me-label{font-size:9px;font-weight:950;text-anchor:middle;fill:#5b3db1;paint-order:stroke;stroke:#fff;stroke-width:4px;letter-spacing:.06em}


.geo-route-casing{fill:none;stroke:rgba(255,255,255,.94);stroke-width:9;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.geo-route{fill:none;stroke:#23865a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3 10;vector-effect:non-scaling-stroke}


.cluster-row:disabled{opacity:.55;cursor:default}
.cluster-row.cluster-complete .cluster-badge{background:#eef1f4;color:#7d8794}


/* Phase 2.7 portable territory + stronger selected-house cue */
.publisher-map-label{pointer-events:none}
.mapcard-fit-btn{pointer-events:auto;border:1px solid rgba(222,229,238,.95);cursor:pointer}
.mapcard-fit-btn:hover{background:#f8fbff}.mapcard-fit-btn:active{transform:translateY(1px)}
.geo-pin-select-arrow{fill:#e6a13a;stroke:#fff;stroke-width:2;filter:drop-shadow(0 2px 3px rgba(128,82,9,.24));pointer-events:none}


/* Field Work color meanings */
.geo-pin .geo-pin-body{fill:#fff;stroke:#2b78d4;stroke-width:3;filter:drop-shadow(0 2px 5px rgba(24,54,88,.20))}
.geo-pin .geo-pin-center{fill:#2b78d4}
.geo-pin.target .geo-pin-body{fill:#e6a13a;stroke:#fff;stroke-width:4;filter:drop-shadow(0 0 7px rgba(230,161,58,.42))}
.geo-pin.target .geo-pin-center{fill:#fff}
.geo-pin.navigating .geo-pin-body{fill:#176fda;stroke:#fff;stroke-width:4;filter:drop-shadow(0 0 8px rgba(23,111,218,.48))}
.geo-pin.arrived .geo-pin-body{fill:#176fda;stroke:#fff;stroke-width:5}
.geo-pin.done .geo-pin-body{fill:#2f985d;stroke:#fff;stroke-width:4;filter:drop-shadow(0 2px 5px rgba(47,152,93,.24))}
.geo-pin.done .geo-pin-center{fill:#fff}
.geo-pin-nav-ring{stroke:#56a0ef}.geo-pin-arrived-ring{stroke:#176fda}
.geo-route{stroke:#176fda}


.territory-title{margin:5px 0 0;font-size:17px}
.mini-gap{height:12px}.boundary-source{resize:vertical;min-height:92px;line-height:1.4}
.boundary-or{text-align:center;color:var(--muted);font-size:11px;margin:10px 0}
.file-pick{position:relative;display:flex;align-items:center;justify-content:center;min-height:46px;border:1px dashed #cbd7e5;border-radius:14px;background:#f8fbff;color:#376184;font-weight:800;font-size:12px;cursor:pointer;overflow:hidden}
.file-pick input{position:absolute;inset:0;opacity:0;cursor:pointer}
.boundary-note{margin-bottom:0}


.admin-draw-bar{margin-top:10px;padding:10px;border:1px solid #dbe7f5;border-radius:14px;background:#f8fbff}
.admin-draw-bar b{display:block;font-size:12px}.admin-draw-bar small{display:block;color:#6d788a;font-size:10px;margin-top:2px}
.admin-draw-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
.admin-draw-actions .btn{flex:1 1 110px}
/* Phase 2.8 offline vector package */
.offline-building{fill:#eef0ec;stroke:#c5ccc2;stroke-width:1.2;vector-effect:non-scaling-stroke}
.offline-road{fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 1px rgba(80,92,102,.4))}
.offline-road.major{stroke-width:7}
.offline-road.walk{stroke:#e5dcc8;stroke-width:3;stroke-dasharray:3 3}
.offline-package-note{background:#f1f8f4;border-color:#d3eadb;color:#315f45}
.offline-prep-progress{display:flex;flex-direction:column;gap:9px;margin:16px 0}
.offline-prep-progress .progress{height:10px}
.offline-prep-progress .progress>i{transition:width .25s ease}
.offline-prep-progress .progress>i.error{background:#b63843}

/* Phase 2.9 offline route correctness + map readability */
.territory-map.tap-selecting{cursor:crosshair}
.territory-map.tap-selecting::after{content:"Tap your starting position";position:absolute;left:50%;top:12px;transform:translateX(-50%);z-index:9;background:rgba(19,37,58,.90);color:#fff;border-radius:999px;padding:7px 11px;font-size:10px;font-weight:850;pointer-events:none;box-shadow:0 5px 16px rgba(14,34,57,.18)}

.geo-start-ring{fill:#fff;stroke:#0b8c8c;stroke-width:3}
.geo-start{fill:#0b8c8c;stroke:#fff;stroke-width:1.5}
.geo-start-label{font-size:9px;font-weight:950;text-anchor:middle;fill:#087575;paint-order:stroke;stroke:#fff;stroke-width:4px;letter-spacing:.05em}

.offline-building{fill:#eef1ed;stroke:#c4ccc3;stroke-width:1.1;vector-effect:non-scaling-stroke}
.offline-road{fill:none;stroke:#fff;stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 1px rgba(73,86,98,.42))}
.offline-road.major{stroke-width:7.5}
.offline-road.road-residential,.offline-road.road-unclassified{stroke-width:5.5}
.offline-road.road-service{stroke:#f8f8f4;stroke-width:4}
.offline-road.walk{stroke:#d9c89c;stroke-width:3;stroke-dasharray:3 3}
.offline-road-label{font-size:9px;font-weight:750;text-anchor:middle;fill:#56606b;paint-order:stroke;stroke:#f7f8f6;stroke-width:4px;stroke-linejoin:round;pointer-events:none}

/* Phase 2.10: realistic synthetic houses + honest final approach */
.geo-route-approach-casing{fill:none;stroke:rgba(255,255,255,.96);stroke-width:7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.geo-route-approach{fill:none;stroke:#65a5ea;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2 6;vector-effect:non-scaling-stroke}
.test-placement-note{background:#fffaf0;border-color:#f1dfbb;color:#6f5628}


/* Phase 2.11 geography review */
.house-choices {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-height:240px;overflow:auto;gap:4px;}
.house-choices label {display:flex;align-items:center;min-height:44px;gap:8px;}
.builder-analysis details {margin:12px 0;}
.builder-analysis summary {cursor:pointer;min-height:44px;padding:12px 0;}
.builder-analysis p {overflow-wrap:anywhere;}

.geo-rough {stroke:#0b66e4;fill:rgba(11,102,228,.04)}
.geo-corrected {stroke:#258348;fill:rgba(37,131,72,.08)}
