/* ---------- typography ----------
   The app owns its own font stack. It used to inherit whatever theme was
   active, which meant it changed appearance from site to site — and once the
   app stopped loading theme CSS, prose fell back to the browser's serif while
   form controls kept the system UI font. Declaring it here fixes both, and
   the per-campaign font setting overrides this block. */
.w23c-app,
.w23c-login-shell,
.w23c-drawer,
.w23c-terms-modal{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
}
.w23c-app button,.w23c-app input,.w23c-app select,.w23c-app textarea,
.w23c-drawer button,.w23c-drawer input,.w23c-drawer select,.w23c-drawer textarea,
.w23c-login-shell button,.w23c-login-shell input,.w23c-login-shell select,.w23c-login-shell textarea,
.w23c-terms-modal button{
  font-family:inherit;
}

:root{--w23-navy:#071a45;--w23-blue:#88adca;--w23-red:#ad173c;--w23-ink:#17223b;--w23-bg:#f4f7fb;--w23-green:#2f9d50;--w23-yellow:#f0ad1b;--w23-orange:#ed7d31;--w23-danger:#d63b3b;--w23-gray:#4a4a4a}

/* ---------- login ---------- */
.w23c-login-shell{max-width:900px;margin:40px auto;display:grid;grid-template-columns:1fr 1fr;border-radius:24px;overflow:hidden;box-shadow:0 20px 60px #071a4520}
.w23c-brand-panel{background:linear-gradient(135deg,var(--w23-blue),#b7d1e3);padding:58px 40px;color:#fff;min-height:470px}
.w23c-brand-panel h1{font-size:50px;line-height:1;margin:30px 0 16px;color:#fff}
.w23c-brand-panel h1 strong{display:block;font-size:72px;font-style:italic}
.w23c-brand-panel p{font-weight:700}
.w23c-brand-panel em{display:block;margin-top:80px;color:#ffd9e2;font-weight:700}
.w23c-elect{display:inline-block;background:var(--w23-red);color:#fff;padding:5px 12px;font-size:12px;font-weight:800;letter-spacing:.08em}
.w23c-login-card{background:#fff;padding:50px 38px}
.w23c-login-card input{width:100%;padding:14px;border:1px solid #d5dce8;border-radius:8px}
.w23c-login-card .button-primary,.w23c-btn{display:inline-block;background:var(--w23-red);color:#fff!important;padding:13px 24px;border:0;border-radius:8px;text-decoration:none;font-weight:700;cursor:pointer}
.w23c-help{color:#677187;font-size:13px}
.w23c-signed-in{max-width:420px;margin:60px auto;text-align:center;border:1px solid #dce3ee;border-radius:16px}

/* ---------- app shell ---------- */
.w23c-app{max-width:520px;min-height:760px;margin:20px auto;background:#fff;border:1px solid #dce3ee;border-radius:24px;overflow:hidden;box-shadow:0 18px 50px #071a4518;display:flex;flex-direction:column;position:relative}
.w23c-topbar{background:var(--w23-navy);color:#fff;padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.w23c-topbar button{background:none;border:0;color:#fff;font-size:24px;cursor:pointer;line-height:1}
.w23c-topbar-brand{font-size:15px}
#w23c-sync{font-size:12px;opacity:.85}
.w23c-screen{flex:1;padding:16px;background:var(--w23-bg);overflow:auto}
.w23c-bottom-nav{display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border-top:1px solid #dbe1eb}
.w23c-bottom-nav button{border:0;background:#fff;padding:11px 4px;color:#68748a;font-size:18px;cursor:pointer}
.w23c-bottom-nav button.active{color:var(--w23-red);font-weight:700}
.w23c-bottom-nav span{display:block;font-size:10px}
.w23c-nav-ico{font-size:18px}
.w23c-loading{padding:40px;text-align:center;color:#68748a}
.w23c-muted{color:#68748a;font-size:13px}

/* ---------- cards / buttons ---------- */
.w23c-card{background:#fff;border:1px solid #dce3ee;border-radius:14px;padding:16px;margin-bottom:14px}
.w23c-card h2,.w23c-card h3{margin-top:0;color:var(--w23-ink)}
.w23c-card h3{margin:18px 0 8px;font-size:15px}
.w23c-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.w23c-stat{background:#fff;border:1px solid #dce3ee;border-radius:12px;padding:12px 6px;text-align:center;font-size:12px;color:#68748a}
.w23c-stat strong{display:block;font-size:24px;color:var(--w23-navy)}
.w23c-btn-main{display:block;width:100%;padding:14px;background:var(--w23-red);border:0;border-radius:10px;color:#fff;font-weight:800;font-size:15px;cursor:pointer;margin-top:10px}
.w23c-btn-ghost{display:block;width:100%;padding:12px;background:#fff;border:1px solid #cdd6e4;border-radius:10px;color:var(--w23-navy);font-weight:700;cursor:pointer;margin-top:10px}

/* ---------- house grid ---------- */
.w23c-seg-label{font-size:16px;font-weight:800;color:var(--w23-ink)}
.w23c-street-select{width:100%;padding:12px;border:1px solid #cdd6e4;border-radius:10px;font-size:16px;font-weight:700;background:#fff;margin-bottom:14px}
.w23c-house-grid{display:flex;flex-direction:column;gap:10px}
.w23c-house-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.w23c-house{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:20px 18px;border:1.5px solid #3a3a3a;border-radius:4px;background:#fbfbfb;color:#1c1c1c;font-size:24px;font-weight:600;cursor:pointer}
.w23c-house small{font-size:12px;margin-left:4px}
.w23c-house .w23c-house-ico{font-size:20px}
.w23c-house.na{background:var(--w23-key-na,#cfd4db);border-color:color-mix(in srgb,var(--w23-key-na,#cfd4db) 86%,#000);color:#33383f}
.w23c-house.rec{background:var(--w23-green);border-color:#25823f;color:#fff}
.w23c-house.tovisit{background:var(--w23-danger);border-color:#b32f2f;color:#fff}
.w23c-house.avoid{background:#111;border-color:#000;color:#fff}
.w23c-house-empty{display:block}
.w23c-grid-legend{display:flex;align-items:center;gap:8px;font-size:12px;color:#68748a;margin-top:14px;flex-wrap:wrap}
.w23c-grid-legend .lg{display:inline-block;width:14px;height:14px;border-radius:3px;border:1px solid #3a3a3a}
.lg-open{background:#fbfbfb}.lg-na{background:#cfd4db;border-color:#b4bac4}.lg-rec{background:var(--w23-green);border-color:var(--w23-green)}.lg-tovisit{background:var(--w23-danger);border-color:var(--w23-danger)}.lg-avoid{background:#111;border-color:#000}

/* ---------- door flow ---------- */
.w23c-house-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.w23c-house-head h2{margin:0;font-size:20px}
.w23c-back{background:#eef2f8;border:0;border-radius:8px;width:36px;height:36px;font-size:18px;cursor:pointer;color:var(--w23-navy);flex:none}
.w23c-lastcontact{background:#eaf4ec;border:1px solid #cfe6d5;border-radius:8px;padding:10px;font-size:13px;margin:8px 0}
.w23c-res-preview{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.w23c-res-chip{background:#eef2f8;border-radius:14px;padding:5px 10px;font-size:12px;color:var(--w23-ink)}
.w23c-choice{display:block;width:100%;text-align:left;padding:13px;border:1px solid #d8dfeb;border-radius:10px;background:#fff;margin-bottom:8px;cursor:pointer;font-size:14px}
.w23c-choice small{display:block;color:#68748a;font-size:12px;margin-top:2px}
.w23c-choice.selected{outline:3px solid var(--w23-blue);background:#eef6fb}
.w23c-choice-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}
.w23c-choice-grid .w23c-choice{margin-bottom:0;text-align:center;text-transform:capitalize}
.w23c-choice.support{background:#eef9f0}.w23c-choice.neutral{background:#fff8e7}.w23c-choice.oppose{background:#fff0ec}
.w23c-choice.support.selected,.w23c-choice.neutral.selected,.w23c-choice.oppose.selected{outline:3px solid var(--w23-navy)}
.w23c-pill-grid{display:flex;flex-wrap:wrap;gap:8px}
.w23c-pill{border:1px solid #d8dfeb;border-radius:20px;padding:8px 12px;background:#fff;cursor:pointer;font-size:13px;text-transform:capitalize}
.w23c-pill.selected{background:var(--w23-navy);color:#fff;border-color:var(--w23-navy)}
.w23c-textarea{width:100%;min-height:80px;margin-top:12px;border:1px solid #d8dfeb;border-radius:10px;padding:10px}
.w23c-saved{text-align:center;padding:50px 20px}
.w23c-saved-check{width:90px;height:90px;margin:0 auto 14px;border-radius:50%;background:#e3f4e8;color:var(--w23-green);font-size:52px;line-height:90px}
.w23c-fu{background:#fff;border:1px solid #dce3ee;border-radius:10px;padding:12px;margin-bottom:8px;display:flex;flex-direction:column;gap:2px}
.w23c-fu b{text-transform:capitalize}
.w23c-fu small{color:#68748a}

/* ---------- map ---------- */
.w23c-map-canvas{height:calc(100dvh - 250px);min-height:340px;height:380px;border-radius:12px;overflow:hidden;background:linear-gradient(135deg,#e7edf4,#cbd8e5)}

/* ---------- drawer ---------- */
.w23c-drawer-wrap{position:absolute;inset:0;z-index:40}
.w23c-drawer-backdrop{position:absolute;inset:0;background:#071a4570;opacity:0;transition:opacity .2s}
.w23c-drawer{position:absolute;top:0;left:0;bottom:0;width:86%;max-width:340px;background:#fff;box-shadow:8px 0 40px #071a4540;transform:translateX(-102%);transition:transform .2s;display:flex;flex-direction:column;overflow:hidden}
.w23c-drawer-wrap.open .w23c-drawer{transform:translateX(0)}
.w23c-drawer-wrap.open .w23c-drawer-backdrop{opacity:1}
.w23c-drawer-head{background:var(--w23-navy);color:#fff;padding:16px;display:flex;align-items:center;gap:12px}
.w23c-drawer-head b{flex:1}
.w23c-drawer-head small{display:block;opacity:.8;font-size:12px}
.w23c-avatar{width:44px;height:44px;border-radius:50%;background:var(--w23-red);color:#fff;font-weight:800;font-size:20px;display:flex;align-items:center;justify-content:center;flex:none}
.w23c-drawer-close{margin-left:auto;background:none;border:0;color:#fff;font-size:26px;cursor:pointer;line-height:1}
.w23c-drawer-head .w23c-back{background:#ffffff22;color:#fff}
.w23c-drawer-nav{display:flex;flex-direction:column;padding:10px}
.w23c-drawer-nav button,.w23c-drawer-logout{text-align:left;background:#fff;border:0;border-bottom:1px solid #eef1f7;padding:16px 12px;font-size:15px;color:var(--w23-ink);cursor:pointer;text-decoration:none;font-weight:600}
.w23c-drawer-logout{color:var(--w23-red)}
.w23c-drawer-body{padding:16px;overflow:auto}
.w23c-drawer-body input{width:100%;padding:12px;border:1px solid #d5dce8;border-radius:8px;margin-bottom:8px}

/* ---------- chat ---------- */
.w23c-chan-row{display:flex;gap:6px;padding:10px;overflow-x:auto;border-bottom:1px solid #e5e9f1}
.w23c-chan{border:1px solid #cdd6e4;background:#fff;border-radius:16px;padding:7px 12px;font-size:12px;cursor:pointer;white-space:nowrap}
.w23c-chan.active{background:var(--w23-navy);color:#fff;border-color:var(--w23-navy)}
.w23c-chat-messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px;background:var(--w23-bg)}
.w23c-msg{max-width:82%;background:#fff;border:1px solid #dce3ee;border-radius:12px;padding:8px 12px;font-size:14px;align-self:flex-start}
.w23c-msg small{display:block;color:var(--w23-blue);font-weight:700;font-size:11px;margin-bottom:2px}
.w23c-msg.mine{align-self:flex-end;background:var(--w23-navy);color:#fff;border-color:var(--w23-navy)}
.w23c-chat-compose{display:flex;gap:8px;padding:10px;border-top:1px solid #e5e9f1;background:#fff}
.w23c-chat-compose textarea{flex:1;border:1px solid #d5dce8;border-radius:10px;padding:10px;resize:none;font-size:14px}
.w23c-chat-compose button{background:var(--w23-red);color:#fff;border:0;border-radius:10px;width:44px;font-size:18px;cursor:pointer}

@media(max-width:700px){
.w23c-login-shell{grid-template-columns:1fr;margin:0;border-radius:0}
.w23c-brand-panel{min-height:260px}
.w23c-brand-panel h1{font-size:36px}
.w23c-brand-panel h1 strong{font-size:56px}
.w23c-brand-panel em{margin-top:35px}
.w23c-app{margin:0;border-radius:0;min-height:100vh;max-width:none;border:0}
}

/* ---------- v3.1 additions ---------- */
.w23c-banner-img{max-height:44px;max-width:100%;display:block;border-radius:6px}
.w23c-banner-html{font-size:15px;line-height:1.2;display:block}
.w23c-round-chip{display:inline-block;background:var(--w23-navy);color:#fff;font-size:11px;font-weight:700;padding:3px 10px;border-radius:12px;vertical-align:middle;margin-left:6px}
.w23c-add-form{display:flex;flex-direction:column;gap:8px;margin-top:10px;background:#f4f7fb;border:1px solid #dce3ee;border-radius:10px;padding:12px}
.w23c-add-form input{padding:12px;border:1px solid #cdd6e4;border-radius:8px;font-size:15px}
.w23c-check{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--w23-ink)}
.w23c-res-row{display:flex;align-items:stretch;gap:6px}
.w23c-res-row .w23c-choice{flex:1}
.w23c-res-tools{display:flex;flex-direction:column;gap:4px;justify-content:center}
.w23c-mini{width:38px;height:34px;border:1px solid #cdd6e4;border-radius:8px;background:#fff;cursor:pointer;font-size:14px}
.w23c-mini.danger{color:var(--w23-danger);border-color:#e5b9b9}
.w23c-who-tools{display:flex;gap:8px}
.w23c-who-tools .w23c-btn-ghost{margin-top:8px}
.w23c-pill.rude.selected{background:#111;border-color:#000}
.w23c-avoid-note{margin-top:10px;font-size:12px}
.w23c-hist-title{margin:14px 0 6px;font-size:14px}
.w23c-hist{background:#f4f7fb;border:1px solid #dce3ee;border-radius:10px;padding:9px 12px;margin-bottom:6px;font-size:13px}
.w23c-hist b{color:var(--w23-navy)}
.w23c-hist span{display:block;text-transform:capitalize}
.w23c-hist small{display:block;color:#68748a}
.w23c-hist.bad{background:#f2e9ea;border-color:#ddc3c8}
.w23c-fu-controls{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap;align-items:center}
.w23c-fu-controls select,.w23c-fu-controls input{padding:8px;border:1px solid #cdd6e4;border-radius:8px;font-size:13px;background:#fff}
.w23c-fu-close{background:var(--w23-green);color:#fff;border:0;border-radius:8px;padding:8px 14px;font-weight:700;cursor:pointer}
.w23c-lb-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #dce3ee;border-radius:10px;padding:10px 12px;margin-bottom:7px;font-size:14px}
.w23c-lb-row.me{border-color:var(--w23-navy);background:#eef4fa}
.w23c-lb-rank{width:32px;text-align:center;font-size:18px}
.w23c-lb-name{flex:1;font-weight:700;color:var(--w23-ink)}
.w23c-lb-stat{color:#68748a;font-size:12px;white-space:nowrap}
.w23c-lb-stat b{color:var(--w23-navy)}

/* ---------- full-device responsive shell ---------- */
html.w23c-canvas-html,body.w23c-canvas{height:100%}
.w23c-app{width:100%;max-width:820px;min-height:100dvh;margin:0 auto;border-radius:0;border-left:1px solid #dce3ee;border-right:1px solid #dce3ee}
.w23c-screen{-webkit-overflow-scrolling:touch;padding-bottom:28px}
.w23c-bottom-nav{position:sticky;bottom:0;padding-bottom:env(safe-area-inset-bottom)}
@media(min-width:821px){
  .w23c-app{box-shadow:0 0 60px #071a4515}
}
@media(max-width:700px){
  .w23c-app{max-width:none;border:0}
  .w23c-house{padding:16px 14px;font-size:21px}
  .w23c-choice-grid{grid-template-columns:1fr 1fr}
}

.w23c-reg-form input{width:100%;padding:12px;border:1px solid #cdd6e4;border-radius:8px;font-size:15px;box-sizing:border-box}
.w23c-reg-form p{margin:0 0 10px}
.w23c-reg-ok{background:#e7f4ea;border:1px solid #bfe0c8;color:#1d5c30;border-radius:10px;padding:12px 14px;margin-bottom:14px;font-size:14px}
.w23c-reg-err{background:#f7e9ea;border:1px solid #e2bfc5;color:#8a1f33;border-radius:10px;padding:12px 14px;margin-bottom:14px;font-size:14px}

#w23c-menu-btn{position:relative}
.w23c-badge{position:absolute;top:-4px;right:-6px;background:var(--w23-danger);color:#fff;font-size:10px;font-weight:800;min-width:16px;height:16px;line-height:16px;border-radius:9px;text-align:center;padding:0 3px}
.w23c-badge.inline{position:static;display:inline-block;margin-left:6px;vertical-align:middle}

/* ---------- blank-canvas full screen (app page) ---------- */
body.w23c-canvas{margin:0;padding:0;background:#eef1f6;min-height:100dvh}
body.w23c-canvas #wpadminbar{display:none}
body.w23c-canvas.admin-bar{margin-top:0!important}
body.w23c-canvas .w23c-app{max-width:none;width:100%;min-height:100dvh;border:0;box-shadow:none;border-radius:0;margin:0}
body.w23c-canvas .w23c-screen{max-width:860px;margin:0 auto;width:100%;box-sizing:border-box}
body.w23c-canvas .w23c-topbar,body.w23c-canvas .w23c-bottom-nav{width:100%}

/* ---------- business (blue) ---------- */
.w23c-house.biz{background:#1f6fd6;border-color:#175aad;color:#fff}
.lg-biz{background:#1f6fd6;border-color:#1f6fd6}
/* ---------- flip + house head layout ---------- */
.w23c-seg-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.w23c-flip-btn{border:1px solid #cdd6e4;background:#fff;border-radius:8px;padding:7px 12px;font-size:13px;font-weight:700;color:var(--w23-navy);cursor:pointer;white-space:nowrap}
.w23c-house-head{display:flex;align-items:flex-start;gap:10px}
.w23c-house-title{flex:1 1 auto;min-width:0}
.w23c-biz-btn{flex:0 0 auto;margin-left:auto;border:1px solid #1f6fd6;background:#eaf2fc;color:#1f6fd6;border-radius:8px;padding:8px 10px;font-size:13px;font-weight:700;cursor:pointer;white-space:nowrap}
/* ---------- topbar overflow fix (Ready text off-screen) ---------- */
.w23c-topbar{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;padding-left:calc(14px + env(safe-area-inset-left));padding-right:calc(14px + env(safe-area-inset-right))}
.w23c-topbar-brand{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}
#w23c-sync{flex:0 0 auto;max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}

/* ---------- v3.5: shell always exactly one screen tall ---------- */
html.w23c-canvas-html,body.w23c-canvas{height:100%;overflow:hidden}
body.w23c-canvas .w23c-app{height:100dvh;min-height:0;overflow:hidden;display:flex;flex-direction:column}
body.w23c-canvas .w23c-topbar{flex:0 0 auto}
body.w23c-canvas .w23c-bottom-nav{flex:0 0 auto;position:static}
body.w23c-canvas .w23c-screen{flex:1 1 0;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;max-width:none}
body.w23c-canvas .w23c-screen > *{max-width:860px;margin-left:auto;margin-right:auto}

/* ---------- venue statuses ---------- */
.w23c-house.school{background:#e08a1e;border-color:#c0741374;color:#fff}
.w23c-house.worship{background:#d6559b;border-color:#b83f80;color:#fff}
.lg-school{background:#e08a1e;border-color:#e08a1e}
.lg-worship{background:#d6559b;border-color:#d6559b}
.w23c-venue-row{display:flex;gap:6px;margin:10px 0 4px}
.w23c-venue{flex:1;border-radius:9px;padding:9px 6px;font-size:12px;font-weight:700;cursor:pointer;border:1px solid}
.w23c-venue.biz{border-color:#1f6fd6;background:#eaf2fc;color:#1f6fd6}
.w23c-venue.school{border-color:#e08a1e;background:#fdf3e5;color:#a9640d}
.w23c-venue.worship{border-color:#d6559b;background:#fceaf3;color:#a83570}
.w23c-venue:disabled{opacity:.5}

/* ---------- skip stepper ---------- */
.w23c-skip{margin:14px 0 4px;text-align:center}
.w23c-skip span{display:block;font-size:12px;color:#68748a;margin-bottom:6px}
.w23c-stepper{display:inline-flex;align-items:center;gap:10px}
.w23c-stepper button{width:44px;height:44px;border:1px solid #cdd6e4;background:#fff;border-radius:10px;font-size:20px;font-weight:700;color:var(--w23-navy);cursor:pointer}
.w23c-stepper input{width:72px;height:44px;text-align:center;font-size:19px;font-weight:800;border:1px solid #cdd6e4;border-radius:10px;color:var(--w23-navy);-moz-appearance:textfield}
.w23c-stepper input::-webkit-outer-spin-button,.w23c-stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

/* ---------- history tools / offline banner / dashboard link ---------- */
.w23c-hist-tools{display:flex;gap:6px;margin-top:7px}
.w23c-hist-tools .w23c-mini{width:auto;padding:0 10px;font-size:12px}
.w23c-offline-banner{background:#fdf3e5;border:1px solid #f0d6ac;color:#8a5a12;border-radius:10px;padding:10px 12px;margin-bottom:12px;font-size:13px}
.w23c-drawer-dash{display:block;padding:14px 18px;color:var(--w23-navy);font-weight:700;text-decoration:none;border-top:1px solid #eef1f6}

/* ---------- multi-unit buildings ---------- */


.w23c-bldg-head b{color:var(--w23-navy)}
.w23c-bldg-head span{color:#68748a;font-size:11px;white-space:nowrap}
.w23c-unit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(66px,1fr));gap:6px;padding:10px}
.w23c-unit{border:1px solid #cdd6e4;background:#fbfbfb;border-radius:9px;padding:12px 4px;font-size:14px;font-weight:700;color:var(--w23-ink);cursor:pointer}
.w23c-unit.na{background:#cfd4db;border-color:#b4bac4;color:#33383f}
.w23c-unit.rec{background:var(--w23-green);border-color:#25823f;color:#fff}
.w23c-unit.tovisit{background:var(--w23-danger);border-color:#b32f2f;color:#fff}
.w23c-unit.avoid{background:#111;border-color:#000;color:#fff}
.w23c-unit.biz{background:#1f6fd6;border-color:#175aad;color:#fff}
.w23c-unit.school{background:#e08a1e;border-color:#c07413;color:#fff}
.w23c-unit.worship{background:#d6559b;border-color:#b83f80;color:#fff}








.w23c-unit-filter{width:100%;box-sizing:border-box;padding:12px;margin:10px 0;border:1px solid #cdd6e4;border-radius:10px;font-size:15px}
.w23c-floor h4{margin:12px 0 2px;font-size:13px;color:var(--w23-navy);border-bottom:1px solid #eef1f6;padding-bottom:4px}

#w23c-loginform label{display:block;font-size:13px;color:#68748a;margin-bottom:4px}
#w23c-loginform input[type=text],#w23c-loginform input[type=password]{width:100%;box-sizing:border-box;padding:13px;border:1px solid #cdd6e4;border-radius:9px;font-size:16px}
#w23c-loginform p{margin:0 0 14px}
.w23c-remember{display:flex;align-items:center;gap:8px}
.w23c-remember label{margin:0;font-size:14px;color:var(--w23-ink)}
.w23c-remember input{width:18px;height:18px}
#w23c-known-user{margin-top:-6px}

/* ---------- v3.6.2: button contents always centred ---------- */
.w23c-back,.w23c-drawer-close,.w23c-mini,.w23c-stepper button,.w23c-unit,.w23c-venue,
.w23c-btn-main,.w23c-btn-ghost,.w23c-btn,.w23c-flip-btn,.w23c-fu-close,.w23c-pill,
.w23c-biz-btn,.w23c-house-empty{
  display:inline-flex;align-items:center;justify-content:center;
  text-align:center;line-height:1.15;box-sizing:border-box
}
.w23c-btn-main,.w23c-btn-ghost,.w23c-btn{width:100%}
/* Square icon buttons: fixed box, glyph optically centred regardless of font metrics */
.w23c-back,.w23c-drawer-close{
  flex:0 0 auto;width:42px;height:42px;padding:0;font-size:20px;font-weight:700
}
.w23c-house{display:flex;align-items:center;justify-content:space-between}
.w23c-house-head{align-items:center}


/* ---------- buildings inside the street grid ---------- */
.w23c-house.bldg{border-style:solid;border-width:2px;border-color:var(--w23-navy);background:#eef4fb}
.w23c-house.bldg.part{background:#fdf6e6;border-color:#d8a52a}
.w23c-house.bldg.rec{background:var(--w23-green);border-color:#25823f;color:#fff}
.w23c-house-ico.multi{letter-spacing:-2px;font-size:17px;white-space:nowrap}
.w23c-house{position:relative}
.w23c-doorcount{position:absolute;bottom:5px;font-size:10px;font-weight:700;opacity:.72;letter-spacing:0;line-height:1}
/* Right-hand column: line the count up with the end of the house number.
   Left-hand column: keep it in the right corner of the box. */
.w23c-house.bldg.side-right .w23c-doorcount{right:18px}
.w23c-house.bldg.side-left .w23c-doorcount{right:10px}
.w23c-house.bldg{padding-bottom:18px}
.w23c-ico-key{display:inline-block;letter-spacing:-2px;color:var(--w23-navy);font-size:14px;margin-right:3px}

/* ---------- add / edit address form ---------- */
.w23c-type-picks{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:2px}
.w23c-lbl{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#68748a}
.w23c-lbl input,.w23c-lbl select{padding:12px;border:1px solid #cdd6e4;border-radius:8px;font-size:15px;color:var(--w23-ink);background:#fff}

/* ---------- action buttons align with the card above them ---------- */
body.w23c-canvas .w23c-screen > *{width:100%;max-width:860px;margin-left:auto;margin-right:auto;box-sizing:border-box}
.w23c-screen > .w23c-btn-main,.w23c-screen > .w23c-btn-ghost{display:flex}

/* ---------- manager assignment screen ---------- */
.w23c-roletag{float:right;font-size:10px;font-weight:600;opacity:.55;margin-left:8px}
.w23c-drawer-nav button,.w23c-drawer-dash{overflow:hidden}
.w23c-as-block{border:1px solid #dce3ee;border-radius:11px;padding:11px 13px;margin-bottom:9px;background:#fff}
.w23c-as-block b{color:var(--w23-navy);font-size:14px}
.w23c-as-block span.w23c-muted{float:right;font-size:11px}
.w23c-as-block p{margin:4px 0 8px;font-size:13px}
.w23c-as-block select{width:100%;padding:10px;border:1px solid #cdd6e4;border-radius:8px;font-size:14px;background:#fff}
.w23c-as-act{width:100%;margin-top:7px;padding:11px;border:1px solid #cdd6e4;border-radius:8px;background:#fff;
  font-weight:700;font-size:14px;color:var(--w23-navy);cursor:pointer}
.w23c-as-act.primary{background:var(--w23-navy);border-color:var(--w23-navy);color:#fff}
.w23c-as-act:disabled{opacity:.55;cursor:default}

/* ---------- map fills the device, keeping a slim margin ---------- */
.w23c-screen > .w23c-card:has(.w23c-map-canvas){padding:8px}
.w23c-map-canvas{width:100%;border-radius:10px}
@media (max-width:700px){
  .w23c-map-canvas{height:calc(100dvh - 215px)}
}

/* ---------- terms modal ---------- */
.w23c-terms-modal{position:fixed;inset:0;background:rgba(7,26,69,.55);display:flex;align-items:center;
  justify-content:center;padding:16px;z-index:9999}
.w23c-terms-box{background:#fff;border-radius:14px;max-width:760px;width:100%;max-height:88vh;
  display:flex;flex-direction:column;position:relative;padding:22px}
.w23c-terms-x{position:absolute;top:10px;right:12px;width:38px;height:38px;border:0;background:transparent;
  font-size:26px;line-height:1;cursor:pointer;color:#68748a}
.w23c-terms-body{overflow-y:auto;flex:1;font-size:13px;line-height:1.55;padding-right:6px;margin:8px 0 14px}
.w23c-terms-body h1{font-size:19px;margin:0 0 6px}
.w23c-terms-body h2{font-size:15px;margin:16px 0 4px;color:var(--w23-navy)}
.w23c-terms-body ul{margin:6px 0 6px 18px;list-style:disc}
.w23c-terms-row{display:flex;align-items:flex-start;gap:9px;font-size:14px}
.w23c-terms-row input{width:19px;height:19px;margin-top:1px;flex:0 0 auto}
.w23c-terms-row a{color:var(--w23-maroon,#ad173c);text-decoration:underline}

/* ---------- poll change requests ---------- */
.w23c-req-note{background:#fdf3e5;border:1px solid #f0d6ac;color:#8a5a12;border-radius:10px;
  padding:11px 13px;margin-bottom:12px;font-size:13px}
#w23c-req-poll{width:100%;padding:12px;border:1px solid #cdd6e4;border-radius:9px;font-size:15px;margin-bottom:9px}

/* ---------- confirmed voter marker ---------- */
.w23c-res-chip{position:relative;padding-right:26px}
.w23c-vflag{position:absolute;right:8px;top:50%;transform:translateY(-50%);
  font-weight:800;font-size:12px;line-height:1;color:var(--w23-green,#2f9d50);letter-spacing:0}
.w23c-res-row .w23c-choice{position:relative;padding-right:30px}
.w23c-res-row .w23c-vflag{right:11px;font-size:14px}

/* ---------- support-driven door colours ---------- */
/* removed: superseded hardcoded colour rule */
/* removed: superseded hardcoded colour rule */
/* removed: superseded hardcoded colour rule */
.w23c-house.avoid,.w23c-unit.avoid{background:#d63b3b;border-color:#b32f2f;color:#fff}
.w23c-house.na,.w23c-unit.na{background:var(--w23-key-na,#cfd4db);border-color:color-mix(in srgb,var(--w23-key-na,#cfd4db) 86%,#000);color:#33383f}
/* Outside the active round: visible, but clearly not today's work. */
.w23c-house.faint,.w23c-unit.faint{background:#f4f5f7;border-color:#e3e6ea;color:#a8aeb8}
.w23c-house.faint .w23c-house-ico{opacity:.4}
.lg-support{background:#2f9d50;border-color:#2f9d50}
.lg-lean{background:#8fce9b;border-color:#8fce9b}
.lg-undecided{background:#e8c33d;border-color:#e8c33d}
.lg-faint{background:#f4f5f7;border-color:#e3e6ea}

/* ---------- v5.2 door palette: colour means what we know ---------- */
.w23c-house.sup,.w23c-unit.sup{background:var(--w23-key-sup,#2f9d50);border-color:color-mix(in srgb,var(--w23-key-sup,#2f9d50) 84%,#000);color:#fff}
.w23c-house.lean,.w23c-unit.lean{background:var(--w23-key-lean,#a8dcb5);border-color:color-mix(in srgb,var(--w23-key-lean,#a8dcb5) 82%,#000);color:#123a1f}
.w23c-house.undec,.w23c-unit.undec{background:var(--w23-key-undec,#f2d34e);border-color:color-mix(in srgb,var(--w23-key-undec,#f2d34e) 82%,#000);color:#3d3208}
.w23c-house.opp,.w23c-unit.opp{background:var(--w23-key-opp,#d63b3b);border-color:color-mix(in srgb,var(--w23-key-opp,#d63b3b) 84%,#000);color:#fff}
.w23c-house.na,.w23c-unit.na{background:var(--w23-key-na,#cfd4db);border-color:color-mix(in srgb,var(--w23-key-na,#cfd4db) 86%,#000);color:#33383f}
.w23c-house.dim,.w23c-unit.dim{background:#f4f5f7;border-color:#e4e7ec;color:#aeb4bf}
.w23c-house.dim .w23c-house-ico{opacity:.45}
/* A door this round is chasing keeps a ring, whatever its colour */
.w23c-house.target{box-shadow:inset 0 0 0 2px var(--w23-navy,#071a45)}
.w23c-unit.target{box-shadow:inset 0 0 0 2px var(--w23-navy,#071a45)}
.lg-sup{background:#2f9d50;border-color:#2f9d50}
.lg-lean{background:#a8dcb5;border-color:#7cbf8e}
.lg-undec{background:#f2d34e;border-color:#d4b32c}
.lg-opp{background:#d63b3b;border-color:#d63b3b}
.lg-dim{background:#f4f5f7;border-color:#e4e7ec}

/* ---------- collapsible colour key ---------- */
.w23c-legend-wrap{margin-top:12px;border-top:1px solid #eef1f6;padding-top:8px}
.w23c-legend-toggle{display:flex;align-items:center;gap:7px;width:100%;background:none;border:0;
  padding:6px 2px;font-size:12px;font-weight:700;color:#68748a;cursor:pointer;text-align:left}
.w23c-legend-caret{display:inline-block;transition:transform .18s ease;font-size:11px}
.w23c-legend-wrap.is-open .w23c-legend-caret{transform:rotate(180deg)}
.w23c-legend-wrap .w23c-grid-legend{display:none;margin-top:4px}
.w23c-legend-wrap.is-open .w23c-grid-legend{display:grid}

/* ---------- two-step login ---------- */
.w23c-brand-panel.is-platform{background:var(--w23-navy,#071a45);display:flex;align-items:center;justify-content:center}
.w23c-platform-brand{text-align:center;padding:34px}
.w23c-platform-brand img{max-width:230px;height:auto;margin:0 auto 18px;display:block}
.w23c-platform-word{display:block;font-size:30px;font-weight:800;letter-spacing:-.02em;color:#fff;margin-bottom:16px}
#w23c-identify input[type=text]{width:100%;box-sizing:border-box;padding:13px;border:1px solid #cdd6e4;border-radius:9px;font-size:16px}
#w23c-identify label,#w23c-loginform label{display:block;font-size:13px;color:#68748a;margin-bottom:4px}
.w23c-whoami{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#f4f7fb;
  border:1px solid #dce3ee;border-radius:9px;padding:11px 13px;margin-bottom:14px;font-size:14px}
.w23c-whoami span{font-weight:700;color:var(--w23-navy,#071a45);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.w23c-whoami a{font-size:13px;color:var(--w23-maroon,#ad173c);white-space:nowrap}

.w23c-req-row{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:7px 0;border-top:1px solid rgba(0,0,0,.08);font-size:13px}
.w23c-req-actions{display:flex;gap:6px;flex:0 0 auto}
.w23c-req-actions .w23c-mini{width:auto;padding:0 10px;height:30px;font-size:12px}

/* ---------- emoji must stay inline-sized ----------
   WordPress swaps emoji characters for <img class="emoji">. If core's sizing
   rule is ever missing, those images render at natural size and blow the
   layout apart, so the app states it for itself. */
.w23c-app img.emoji,
.w23c-drawer img.emoji,
.w23c-login-shell img.emoji{
  display:inline-block !important;width:1em !important;height:1em !important;
  margin:0 .07em !important;vertical-align:-0.1em !important;background:none !important;
  padding:0 !important;border:0 !important;box-shadow:none !important
}
.w23c-drawer-nav button,.w23c-drawer-nav a{display:flex;align-items:center;gap:10px;width:100%;text-align:left}

/* ---------- consistent button sizing in the app ---------- */
.w23c-btn-main,.w23c-btn-ghost,.w23c-btn{
  min-height:52px;padding:14px 18px;font-size:16px;font-weight:700;
  border-radius:11px;box-sizing:border-box
}
.w23c-btn-main + .w23c-btn-ghost,.w23c-btn-ghost + .w23c-btn-ghost{margin-top:10px}
.w23c-venue{min-height:44px}
.w23c-mini{min-height:34px}
.w23c-as-act{min-height:44px}

/* ---------- colour key: a compact, aligned grid ---------- */
.w23c-legend-wrap.is-open .w23c-grid-legend{display:grid}
.w23c-grid-legend{
  grid-template-columns:repeat(auto-fill,minmax(132px,1fr));
  gap:10px 16px;font-size:12px;color:#68748a;line-height:1.25;
  padding:6px 2px 4px
}
.w23c-lg-item{display:flex;align-items:center;gap:8px;min-width:0}
.w23c-lg-item .lg{flex:0 0 auto;margin:0;width:15px;height:15px;border-radius:4px}
.w23c-lg-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.w23c-lg-item .w23c-ico-key{flex:0 0 auto;margin:0;width:26px;text-align:left;font-size:13px}
@media (max-width:380px){
  .w23c-grid-legend{grid-template-columns:1fr 1fr;gap:9px 12px}
}

/* ---------- login on a phone ----------
   The brand panel is a decorative column on a wide screen; on a narrow one it
   sits above the form and must size to its content so the page can scroll. */
@media (max-width:760px){
  .w23c-login-shell{margin:0;border-radius:0;box-shadow:none;grid-template-columns:1fr;min-height:100dvh}
  .w23c-brand-panel{min-height:0;padding:28px 24px}
  .w23c-brand-panel h1{font-size:30px;margin:14px 0 10px}
  .w23c-brand-panel h1 strong{font-size:38px}
  .w23c-brand-panel p{font-size:14px}
  .w23c-brand-panel em{margin-top:16px;font-size:13px}
  .w23c-brand-panel.is-platform{padding:34px 24px}
  .w23c-platform-brand{padding:0}
  .w23c-platform-brand img{max-width:170px;margin-bottom:12px}
  .w23c-platform-word{font-size:24px;margin-bottom:10px}
    .w23c-login-card{padding:28px 24px 40px}
  .w23c-login-card h2{font-size:24px}
}

/* ---------- build stamp / update control in the drawer ---------- */
.w23c-drawer-build{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
  background:none;border:0;border-top:1px solid #eef1f6;padding:14px 18px;font-size:15px;
  color:var(--w23-navy,#071a45);text-align:left;cursor:pointer}
.w23c-build{font-size:11px;font-weight:700;color:#8a93a3;letter-spacing:.02em}

#w23c-jserr{position:fixed;left:0;right:0;bottom:0;z-index:99999;background:#7a1020;color:#fff;
  font-size:12px;line-height:1.4;padding:10px 14px;word-break:break-word}

/* ---------- per-campaign key colours ----------
   Venue colours and the legend swatches follow the same variables, so a
   campaign that changes a colour changes it everywhere it appears. */
.w23c-house.biz,.w23c-unit.biz{background:var(--w23-key-biz,#1f6fd6);border-color:color-mix(in srgb,var(--w23-key-biz,#1f6fd6) 84%,#000);color:#fff}
.w23c-house.school,.w23c-unit.school{background:var(--w23-key-school,#e08a1e);border-color:color-mix(in srgb,var(--w23-key-school,#e08a1e) 84%,#000);color:#fff}
.w23c-house.worship,.w23c-unit.worship{background:var(--w23-key-worship,#d6559b);border-color:color-mix(in srgb,var(--w23-key-worship,#d6559b) 84%,#000);color:#fff}
.lg-sup{background:var(--w23-key-sup,#2f9d50);border-color:var(--w23-key-sup,#2f9d50)}
.lg-lean{background:var(--w23-key-lean,#a8dcb5);border-color:var(--w23-key-lean,#a8dcb5)}
.lg-undec{background:var(--w23-key-undec,#f2d34e);border-color:var(--w23-key-undec,#f2d34e)}
.lg-opp{background:var(--w23-key-opp,#d63b3b);border-color:var(--w23-key-opp,#d63b3b)}
.lg-na{background:var(--w23-key-na,#cfd4db);border-color:var(--w23-key-na,#cfd4db)}
.lg-biz{background:var(--w23-key-biz,#1f6fd6);border-color:var(--w23-key-biz,#1f6fd6)}
.lg-school{background:var(--w23-key-school,#e08a1e);border-color:var(--w23-key-school,#e08a1e)}
.lg-worship{background:var(--w23-key-worship,#d6559b);border-color:var(--w23-key-worship,#d6559b)}

/* Log out sits last in the menu, separated from the rest. */
.w23c-drawer-logout{margin-top:auto;border-top:1px solid #eef1f6}
.w23c-drawer-nav{display:flex;flex-direction:column;min-height:calc(100dvh - 96px)}

/* ---------- map: locate control ---------- */
.w23c-map-wrap{position:relative}
.w23c-map-controls{
  position:absolute;left:14px;bottom:14px;z-index:5;
  display:flex;flex-direction:column;align-items:center;gap:10px
}
.w23c-map-btn{
  width:46px;height:46px;border-radius:50%;border:1px solid #cdd6e4;background:#fff;
  line-height:1;color:var(--w23-navy,#071a45);cursor:pointer;
  box-shadow:0 4px 14px rgba(7,26,69,.22);display:flex;align-items:center;justify-content:center
}
.w23c-map-btn:active{transform:scale(.96)}
.w23c-map-btn.is-busy{opacity:.55}
.w23c-map-btn svg{width:24px;height:24px;display:block}
@media (max-width:700px){ .w23c-map-controls{left:12px;bottom:12px} }

/* ---------- inline icons ---------- */
.w23c-nav-ico svg{width:22px;height:22px;display:block;margin:0 auto}
.w23c-bottom-nav button{color:#68748a}
.w23c-bottom-nav button.active{color:var(--w23-maroon,#ad173c)}
.w23c-bottom-nav .w23c-nav-ico{display:block;line-height:0;margin-bottom:3px}

/* Avoid shares the Opposition colour: doorClass returns 'avoid' for a door
   marked avoid, and 'opp' for recorded opposition, but the key offers one
   setting for both. */
.w23c-house.avoid,.w23c-unit.avoid{
  background:var(--w23-key-opp,#111);border-color:color-mix(in srgb,var(--w23-key-opp,#111) 80%,#000);color:#fff
}
.lg-avoid{background:var(--w23-key-opp,#d63b3b);border-color:var(--w23-key-opp,#d63b3b)}

.w23c-map-note{margin:8px 2px 0;font-size:12px}

/* ---------- login: platform step ----------
   Step one is Para-Poli's own page. The logo stands alone and centred, and
   the shell sits clear of the site header rather than butting against it. */
.w23c-login-shell{ margin-top:34px; margin-bottom:34px; }
@media (max-width:760px){ .w23c-login-shell{ margin-top:18px; margin-bottom:18px; } }

.w23c-brand-panel.is-platform{
  display:flex; align-items:center; justify-content:center;
  background:var(--w23-navy,#17240F);
}
.w23c-platform-brand{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:40px 30px; width:100%;
}
.w23c-platform-brand img{
  max-width:250px; width:78%; height:auto; margin:0 auto; display:block;
}
.w23c-platform-word{
  display:block; font-size:32px; font-weight:800; letter-spacing:-.02em;
  color:#fff; text-align:center;
}
@media (max-width:760px){
  .w23c-platform-brand{ padding:30px 24px; }
  .w23c-platform-brand img{ max-width:190px; }
  .w23c-platform-word{ font-size:26px; }
}

/* ==========================================================================
   Login — platform step

   Step one is Para-Poli's own page and sits inside the marketing site, so it
   needs to breathe against the header and read as a calm, light card rather
   than a dark slab.
   ========================================================================== */

.w23c-login-shell{
  margin-top:56px !important;
  margin-bottom:56px !important;
  border-radius:24px !important;
  box-shadow:0 20px 60px rgba(18,22,15,.10) !important;
}
/* Side by side, the two panels should match height. Stacked, they must not:
   a stretched grid item ignores any height its content asks for. */
@media (min-width:761px){ .w23c-login-shell{ align-items:stretch; } }
@media (max-width:760px){ .w23c-login-shell{ align-items:start; } }

/* A pleasant light grey behind the mark, not a colour block. */
.w23c-brand-panel.is-platform{
  background:#F1F3EF !important;
  background-image:none !important;
  border-right:1px solid rgba(18,22,15,.07);
  min-height:0;
}
.w23c-platform-brand{ padding:44px 34px; }
/* The mark keeps its own proportions whatever box it is given. */
.w23c-platform-brand img{
  max-width:190px; width:100%; height:auto;
  object-fit:contain; max-height:150px;
}
.w23c-platform-word{ color:var(--w23-navy,#17240F); }

/* Less dead air above and below the form. */
.w23c-login-card{ padding:38px 38px 34px !important; align-self:center; width:100%; box-sizing:border-box; }
.w23c-login-card h2{ margin-top:0; }
.w23c-login-card form{ margin-bottom:0; }
.w23c-login-card > *:last-child{ margin-bottom:0; }

@media (max-width:760px){
  .w23c-login-shell{
    margin:22px 16px !important; border-radius:20px !important;
    min-height:0 !important; box-shadow:0 14px 40px rgba(18,22,15,.10) !important;
  }
  .w23c-brand-panel.is-platform{
    border-right:0; border-bottom:1px solid rgba(18,22,15,.07); padding:26px 24px !important;
  }
  .w23c-platform-brand{ padding:0; }
  .w23c-platform-brand img{ max-width:140px; max-height:104px; margin-bottom:0; }
  .w23c-login-card{ padding:28px 24px 26px !important; }
}


/* ---------- login: the campaign's own image on a phone ----------
   A wide panel on a desktop crops harmlessly, but on a narrow screen the
   panel is short and cover cropped the middle out of a portrait photo. Show
   the whole image instead, on the campaign's own colour. */
@media (max-width:760px){
  /* A campaign photo is usually portrait. A wide, short panel either crops
     the middle out of it (cover) or shrinks it to a stamp (contain), so the
     panel is given real height instead.
     Note the explicit height: the shell is a grid and its items stretch to
     the row, which means aspect-ratio on a panel here is ignored. Height has
     to be stated outright. */
  .w23c-brand-panel:not(.is-platform){
    /* The panel takes the image's own aspect ratio, so cover crops nothing
       and no background shows through. The fallback 3/4 applies only when
       the image's dimensions are unknown.
       Height is stated through aspect-ratio with align-self:start, because a
       stretched grid item would otherwise take the row's height instead. */
    align-self:start;
    width:100%;
    aspect-ratio:var(--w23c-bg-ratio, 3 / 4);
    max-height:74vh;
    height:auto !important;
    min-height:0 !important;
    background-size:cover !important;
    background-repeat:no-repeat !important;
    background-position:center center !important;
    padding:18px 22px !important;
    display:flex; flex-direction:column; justify-content:flex-end;
  }
  /* The campaign name sits over the foot of the image, where a portrait
     photograph has the least going on. */
  .w23c-brand-panel:not(.is-platform) h1{ margin-bottom:4px; }
}
/* Landscape on a phone: height is the scarce dimension, so cap it there. */
@media (max-width:900px) and (orientation:landscape){
  .w23c-brand-panel:not(.is-platform){ aspect-ratio:auto; height:52vh; }
}

/* ---------- walk grid: several doors at one number ----------
   6, 6A and the basement of 6 belong at number 6, stacked, so the pairing
   across the street still lines up with what a canvasser sees. */
.w23c-house-stack{ display:flex; flex-direction:column; gap:5px; min-width:0; }
.w23c-house-stack .w23c-house{ width:100%; }

/* The number sits on the outside edge of the street; the unit note tucks in
   beside it rather than being pushed to the far edge of the box. */
.w23c-house-no{ font-weight:800; }
.w23c-house-unit{
  font-size:11px; font-weight:700; opacity:.82; letter-spacing:.02em;
  white-space:nowrap;
}
/* The number and its note stay together; the button keeps space-between, so
   the label sits at one edge and the house icon at the other. */
.w23c-house-label{ display:inline-flex; align-items:baseline; gap:5px; min-width:0; }
.w23c-house-label .w23c-house-unit{ margin-left:0; }


/* ---------- map: grouping threshold ----------
   A vertical slider, hidden until the control above it is tapped. It sits
   over the map like the buttons, and its own panel keeps it legible against
   whatever is underneath. */
.w23c-zoom-tool{
  display:flex; flex-direction:column; align-items:center; gap:6px;
  background:rgba(255,255,255,.94);
  border:1px solid #cdd6e4; border-radius:26px;
  padding:10px 8px 8px;
  box-shadow:0 4px 14px rgba(7,26,69,.22);
  animation:w23c-zoom-in .18s ease;
}
/* Which way is which, without a number to read. */
.w23c-zoom-tool::before{
  content:"\25CF\25CF\25CF";     /* separate doors */
  font-size:7px; letter-spacing:1px; color:#68748a; line-height:1;
}
.w23c-zoom-tool[hidden]{ display:none; }
@keyframes w23c-zoom-in{ from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:none; } }

/* One dot below the slider, three above: fewer marks means more grouping. */
.w23c-zoom-cap{ font-size:7px; color:#68748a; line-height:1; }
.w23c-zoom-track{ position:relative; display:flex; align-items:center; justify-content:center; height:132px; }
.w23c-zoom-slider{
  writing-mode:vertical-lr;      /* modern vertical range */
  direction:rtl;                 /* loosest at the bottom */
  -webkit-appearance:slider-vertical;   /* older WebKit */
  width:24px; height:132px; margin:0; padding:0;
  accent-color:var(--w23-maroon,#ad173c);
  background:transparent; cursor:pointer; position:relative; z-index:2;
}

/* A line at each of the four stops, so the steps can be seen and aimed at. */
.w23c-zoom-ticks{
  position:absolute; left:50%; top:6px; bottom:6px; width:26px;
  transform:translateX(-50%);
  display:flex; flex-direction:column; justify-content:space-between;
  pointer-events:none; z-index:1;
}
.w23c-zoom-ticks i{
  display:block; height:2px; border-radius:1px;
  background:#c4cddb;
}
/* The middle two stops are shorter, so the ends of the scale read as ends. */
.w23c-zoom-ticks i:first-child,
.w23c-zoom-ticks i:last-child{ width:26px; background:#9aa7bb; }
.w23c-zoom-ticks i:nth-child(2),
.w23c-zoom-ticks i:nth-child(3){ width:16px; margin-inline:auto; }
/* A larger thumb: this is used with a thumb on a moving map. */
.w23c-zoom-slider::-webkit-slider-thumb{ width:22px; height:22px; }
.w23c-map-btn.is-on{
  background:var(--w23-maroon,#ad173c); color:#fff; border-color:var(--w23-maroon,#ad173c);
}

/* ---------- walk grid: boxes keep their own height ----------
   A grid cell stretches to the tallest in its row by default, so a single
   door facing a stack — 33 opposite 34 and its basement — grew to match the
   pair. Every box is sized by its own content instead, and the two columns
   still start on the same line.
   Stated on the boxes themselves rather than left to the row's alignment:
   a button carries its own height rules from elsewhere in this stylesheet,
   and inheritance was not reliably winning. */
.w23c-house-row{ align-items:start !important; }
.w23c-house-row > .w23c-house,
.w23c-house-row > .w23c-house-stack,
.w23c-house-row > .w23c-house-empty,
.w23c-house-stack > .w23c-house{
  align-self:start !important;
  height:auto !important;
  min-height:0;
}
/* The stack itself is only as tall as the doors inside it. */
.w23c-house-stack{ align-self:start !important; height:auto !important; }
