/* Phonebank styles (moved out of index.html; same rules, same order) */
:root{color-scheme:light}
html,body{margin:0}
[hidden]{display:none!important}
img{max-width:100%}
body{padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
:root{
  --bg:#EEF2F4; --surface:#FFFFFF; --surface-2:#F6F8F9; --ink:#15212B; --muted:#586975; --line:#D3DCE2;
  --accent:#1B5A87; --accent-ink:#FFFFFF; --accent-soft:#E1ECF5; --focus:#2F7FC0;
  --reached:#2E7A4D; --reached-soft:#E2F2E8;
  --nothome:#A86A12; --nothome-soft:#FAEEDB;
  --wrong:#6E4FA3; --wrong-soft:#EEE8F8;
  --disc:#5E6A74; --disc-soft:#E8ECEF;
  --refused:#B03838; --refused-soft:#F8E3E3;
  --moved:#1F7A80; --moved-soft:#DDF1F2;
  --display:"Archivo","Arial Narrow",system-ui,sans-serif;
  --body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --r:10px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#0E151B; --surface:#16212A; --surface-2:#1B2833; --ink:#E4ECF1; --muted:#95A6B2; --line:#2A3845;
    --accent:#6DA9DA; --accent-ink:#0B1319; --accent-soft:#1B3143; --focus:#8CC0EA;
    --reached:#6CC592; --reached-soft:#173325;
    --nothome:#E3AA55; --nothome-soft:#35280F;
    --wrong:#B79AE8; --wrong-soft:#2A2140;
    --disc:#A8B4BE; --disc-soft:#252F37;
    --refused:#EE8686; --refused-soft:#3A1C1C;
    --moved:#6CCAD0; --moved-soft:#143234;
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0E151B; --surface:#16212A; --surface-2:#1B2833; --ink:#E4ECF1; --muted:#95A6B2; --line:#2A3845;
  --accent:#6DA9DA; --accent-ink:#0B1319; --accent-soft:#1B3143; --focus:#8CC0EA;
  --reached:#6CC592; --reached-soft:#173325;
  --nothome:#E3AA55; --nothome-soft:#35280F;
  --wrong:#B79AE8; --wrong-soft:#2A2140;
  --disc:#A8B4BE; --disc-soft:#252F37;
  --refused:#EE8686; --refused-soft:#3A1C1C;
  --moved:#6CCAD0; --moved-soft:#143234;
}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--body);}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.wrap{max-width:1180px;margin:0 auto;padding-inline:16px}

/* header */
.bar{position:sticky;top:env(safe-area-inset-top,0px);z-index:5;background:var(--surface);border-bottom:1px solid var(--line)}
.bar .wrap{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding-block:10px}
.brand{display:flex;align-items:baseline;gap:10px;min-width:0;flex:1 1 auto}
.brand b{font:800 21px/1 var(--display);font-stretch:80%;letter-spacing:.01em;text-transform:uppercase}
.brand span{color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tabs{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px}
.tab{border:0;background:transparent;padding:6px 14px;border-radius:999px;cursor:pointer;font-weight:500;color:var(--muted)}
@media (max-width:680px){.tabs{flex-wrap:wrap;justify-content:center;border-radius:16px;max-width:100%}.tab{padding:6px 11px}}
.tab[aria-selected="true"]{background:var(--accent);color:var(--accent-ink)}
.who{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:8px}
.who img{width:24px;height:24px;border-radius:50%}

.banner{margin-top:14px;padding:10px 14px;border-radius:var(--r);background:var(--accent-soft);color:var(--ink);font-size:14px;border:1px solid var(--line)}
main.wrap{padding-block:18px 48px}

/* generic */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r)}
.eyebrow{font:600 11.5px/1.2 var(--body);letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
h2{font:700 20px/1.2 var(--display);font-stretch:88%;margin:0;text-wrap:balance}
h3{font:700 16px/1.25 var(--display);font-stretch:92%;margin:0}
.muted{color:var(--muted)}
.small{font-size:13px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:var(--surface);padding:8px 14px;border-radius:8px;cursor:pointer;font-weight:500;text-decoration:none;color:var(--ink)}
.btn:hover{background:var(--surface-2)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.danger{color:var(--refused);border-color:currentColor}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.big{padding:12px 20px;font-size:16px}
.linkbtn{border:0;background:none;color:var(--accent);cursor:pointer;padding:0;font-weight:500;text-decoration:underline;text-underline-offset:3px}
input[type=text],input[type=email],input[type=password],input[type=search],input[type=tel],select,textarea{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
textarea{resize:vertical;min-height:70px}
label.f{display:grid;gap:4px;font-size:13px;color:var(--muted);font-weight:500}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.tnum{font-variant-numeric:tabular-nums}

/* call view */
.callgrid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:18px;align-items:start}
/* On a phone everything stacks in one column: the contact, the reasons, the script, then the volunteer shifts and
   survey, ahead of the text message box and the recent calls list (which can be long). */
@media (max-width:860px){.callgrid{grid-template-columns:1fr}.callgrid>.stack{display:contents}
  .callgrid>.stack>.card{order:1}.callgrid>.stack>.nocontact{order:2}.callgrid>.stack>.script{order:3}.callgrid>.survey{order:4}
  .callgrid>.stack>.textbox{order:5}.callgrid>.stack>.batch{order:6}}
.card{padding:22px}
.contact-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:flex-start}
.cname{font:800 34px/1.05 var(--display);font-stretch:82%;margin:4px 0 2px;text-wrap:balance;overflow-wrap:anywhere}
.pos{font:500 13px var(--mono);color:var(--muted);white-space:nowrap}
.phone{margin-top:16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:14px 16px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r)}
.phone .num{font:600 30px/1.1 var(--mono);letter-spacing:.01em;user-select:all;overflow-wrap:anywhere}
.phone .acts{display:flex;gap:8px;margin-left:auto}
.dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:8px 18px;margin:18px 0 0}
.dl dt{font-size:12.5px;color:var(--muted);font-weight:500;padding-top:1px}
.dl dd{margin:0;overflow-wrap:anywhere}
.custom{margin-top:18px;padding-top:14px;border-top:1px dashed var(--line)}
.custom .dl{margin-top:10px}
.prior{margin-top:14px;font-size:13.5px;padding:8px 12px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line)}

.batch{margin-top:18px;padding:16px 18px}
.batch-head{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:baseline}
.meter{height:6px;border-radius:99px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden;margin:10px 0 12px}
.meter i{display:block;height:100%;background:var(--accent)}
.blist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px}
.blist button{width:100%;text-align:left;display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--surface);border-radius:7px;padding:6px 9px;cursor:pointer;font-size:13.5px;min-width:0}
.blist button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.blist button[aria-current="true"]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.dot{flex:none;width:9px;height:9px;border-radius:50%;background:transparent;border:1.5px solid var(--muted)}
.dot.reached{background:var(--reached);border-color:var(--reached)}
.dot.not_home,.dot.left_message{background:var(--nothome);border-color:var(--nothome)}
.dot.wrong_number{background:var(--wrong);border-color:var(--wrong)}
.dot.disconnected{background:var(--disc);border-color:var(--disc)}
.dot.refused{background:var(--refused);border-color:var(--refused)}
.dot.moved{background:var(--moved);border-color:var(--moved)}

.survey{padding:22px;display:grid;gap:18px}
.qs{display:grid;gap:14px}
.q label{display:block;font-weight:600;margin-bottom:6px;text-wrap:pretty}
.q .qn{font:600 12px var(--mono);color:var(--muted);margin-right:6px}
.qs.off{opacity:.45}
.results{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:8px}
.res{position:relative}
.res input{position:absolute;opacity:0;pointer-events:none}
.res label{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;cursor:pointer;font-weight:500;background:var(--surface)}
.res kbd{margin-left:auto;font:500 11px var(--mono);color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:0 5px}
.res input:focus-visible + label{outline:2px solid var(--focus);outline-offset:2px}
.res.reached input:checked + label{background:var(--reached-soft);border-color:var(--reached);color:var(--reached)}
.res.not_home input:checked + label,.res.left_message input:checked + label{background:var(--nothome-soft);border-color:var(--nothome);color:var(--nothome)}
.res.wrong_number input:checked + label{background:var(--wrong-soft);border-color:var(--wrong);color:var(--wrong)}
.res.disconnected input:checked + label{background:var(--disc-soft);border-color:var(--disc);color:var(--disc)}
.res.refused input:checked + label{background:var(--refused-soft);border-color:var(--refused);color:var(--refused)}
.res.moved input:checked + label{background:var(--moved-soft);border-color:var(--moved);color:var(--moved)}
.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:14px;border-top:1px solid var(--line)}
.empty{padding:40px 24px;text-align:center;display:grid;gap:12px;justify-items:center}
.empty p{max-width:52ch;margin:0}

/* setup */
.stack{display:grid;gap:18px}
.sec{padding:22px;display:grid;gap:16px}
.sec>*{min-width:0}   /* let wide tables scroll inside their box instead of widening the page */
.sec-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:flex-start}
.drop{border:1.5px dashed var(--line);border-radius:var(--r);padding:22px;text-align:center;background:var(--surface-2);display:grid;gap:8px;justify-items:center}
.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.mapgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:8px}
table{border-collapse:collapse;width:100%;font-size:13px}
th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
th{background:var(--surface-2);font-weight:600;color:var(--muted);font-size:12px}
tr:last-child td{border-bottom:0}
.qedit{display:grid;gap:12px}
.qitem{border:1px solid var(--line);border-radius:var(--r);padding:14px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:12px;background:var(--surface-2)}
@media (max-width:720px){.qitem{grid-template-columns:minmax(0,1fr)}}
.qtools{display:flex;flex-direction:column;gap:6px}
@media (max-width:720px){.qtools{flex-direction:row}}
.iconbtn{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:4px 9px;cursor:pointer;font-size:13px}
.progress{height:8px;border-radius:99px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden}
.progress i{display:block;height:100%;background:var(--accent);width:0;transition:width .2s}
.stat{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.stat div{padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.stat b{display:block;font:700 26px/1.1 var(--display);font-stretch:85%;font-variant-numeric:tabular-nums}

/* results */
.bars{display:grid;gap:8px;align-content:start}
.barrow{display:grid;grid-template-columns:130px minmax(0,1fr) 70px;gap:10px;align-items:center;font-size:13.5px}
@media (max-width:520px){.barrow{grid-template-columns:100px minmax(0,1fr) 56px}}
.track{height:14px;background:var(--surface-2);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.track i{display:block;height:100%;background:var(--accent)}
.track i.reached{background:var(--reached)} .track i.not_home,.track i.left_message{background:var(--nothome)} .track i.wrong_number{background:var(--wrong)} .track i.disconnected{background:var(--disc)} .track i.refused{background:var(--refused)} .track i.moved{background:var(--moved)}
.barrow .v{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}
.twocol{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px}

.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:8px;font-size:14px;max-width:calc(100% - 32px);z-index:20;box-shadow:0 6px 24px rgba(0,0,0,.2)}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

.who a{color:var(--muted)}
.admins textarea{font-family:var(--mono);font-size:13px}
.listsel{width:auto;max-width:100%}
.textbox summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 22px}
.textbox summary::-webkit-details-marker{display:none}
.textbox summary::after{content:"Hide";font-size:13px;color:var(--accent);font-weight:500}
.textbox:not([open]) summary::after{content:"Show"}
.textbody{padding:0 22px 18px;display:grid;gap:10px}
#textDraft{font-size:15px;line-height:1.5}
.script summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 22px}
.script summary::-webkit-details-marker{display:none}
.script summary::after{content:"Hide";font-size:13px;color:var(--accent);font-weight:500}
.script:not([open]) summary::after{content:"Show"}
.script-body{padding:0 22px 20px;font-size:16.5px;line-height:1.65;max-width:68ch}
.script-body p{margin:0 0 12px}
.script-body p:last-child{margin-bottom:0}
.script .fill{background:var(--accent-soft);border-radius:4px;padding:0 3px;font-weight:600}
.script .blank{color:var(--muted);font-style:italic}
.callername{padding:0 22px 14px;max-width:320px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.scripttabs{display:flex;flex-wrap:wrap;gap:6px}
.stab{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:6px 14px;cursor:pointer;font-weight:500;color:var(--ink)}
.stab[aria-selected="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.scripteditor{display:grid;gap:12px}
.sq{display:grid;gap:8px;padding:14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface-2)}
.sqlist{display:grid;gap:6px}
table.callers td{vertical-align:middle}
table.callers td.tnum,table.callers th:nth-child(n+3){text-align:right}
table.callers th:nth-child(n+3) .sortbtn{text-align:right}
table.callers .ccaller{display:grid;gap:2px;white-space:normal;min-width:160px}
table.callers .ccaller .linkbtn{justify-self:start;color:var(--ink);font-weight:600;text-align:left}
table.callers tr.dim{opacity:.45}
.cbar{display:grid;grid-template-columns:minmax(80px,1fr) 4ch;gap:10px;align-items:center;min-width:180px}
.cbar b{text-align:right}
.cbar .track{height:8px;background:var(--surface-2);border-radius:99px;overflow:hidden}
.cbar .track i{display:block;height:100%;background:var(--accent);border-radius:99px}
.sortbtn{color:inherit;font:inherit;text-decoration:none}
.sortbtn[aria-pressed="true"]{color:var(--ink)}
.fclfilters{gap:10px}
.shiftimport{display:grid;gap:10px}
.splitprev{background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.splitprev ul{margin:6px 0 0;padding-left:18px;display:grid;gap:2px;font-size:14px}
.confirmopt{display:flex;gap:10px;align-items:flex-start;cursor:pointer;font-size:14px;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.confirmopt input{margin-top:3px}
.evcard{border:1px solid var(--line);border-radius:10px;padding:14px;background:var(--surface-2);display:grid;gap:12px}
.evhead{display:flex;gap:10px;align-items:flex-end}
.evcols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:18px}
.evrow{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) minmax(0,1fr) auto;gap:8px;align-items:end;margin-bottom:8px}
.evrow.loc{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) minmax(90px,.45fr) auto}
.evrow.past{opacity:.6}
.tokens{display:grid;gap:8px}
.lookups{display:grid;gap:8px;padding-top:8px;border-top:1px dashed var(--line)}
.lurow{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline}
.lurow code{font-weight:600}
.lugrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.lugrid select{width:100%}
.lurows{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr) auto;gap:6px;align-items:center;max-height:320px;overflow:auto}
.lurows.byday{grid-template-columns:minmax(0,1fr) minmax(0,.8fr) minmax(0,1.6fr) auto}
.lurows select{width:100%;min-width:0}
@media (max-width:520px){.lurows.byday{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.lurows.byday>span:nth-child(-n+4){display:none}.lurows.byday>button{justify-self:start}}
.lurows input,#luName,#luElse{width:100%;min-width:0;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:7px 9px}
.chip.lookup{border-style:dashed}
.chip.shifttok{border-style:dotted}
.nearby{display:grid;gap:8px}
.nbev{padding:8px 0;border-top:1px dashed var(--line)}
.nbev select{max-width:100%;min-width:0;flex:1 1 240px}
.lmergebox{display:grid;gap:10px;padding:14px;border:1px solid var(--accent);border-radius:10px;background:var(--surface-2)}
.mergeorder{margin:0;padding-left:22px;display:grid;gap:4px}
.mergeorder li span{margin-right:8px}
.lmergebox select,.lmergebox input{width:100%;min-width:0}
.btn.primary.armed{background:var(--refused);border-color:var(--refused)}
.panel.voicemail{border-left:4px solid var(--nothome)}
.lasttry{margin:12px 0 0;display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center}
.appver{text-transform:none;letter-spacing:0;font-weight:400}
.txtpl{display:grid;gap:10px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.txrow{display:grid;gap:6px;padding-top:10px;border-top:1px dashed var(--line)}
.txrow textarea,.txrow input{width:100%;min-width:0}
.itx{display:grid;gap:6px;margin:8px 0;padding:10px 12px;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:8px;background:var(--surface-2);font-size:15px}
.itxhead{font:600 12px var(--body,inherit);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.itx textarea{width:100%;min-width:0;font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink)}
.itxbar{display:flex;flex-wrap:wrap;gap:6px 10px;justify-content:space-between;align-items:center}
.itxacts{display:flex;flex-wrap:wrap;gap:6px}
.itx.preview .itxprev{white-space:pre-wrap;color:var(--muted)}
@media (max-width:520px){.lugrid{grid-template-columns:1fr}}
.tokpick{display:grid;gap:10px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.tokpick select{max-width:420px}
.tokcols{display:flex;flex-wrap:wrap;gap:6px 16px;max-height:220px;overflow:auto}
.tokcols label{display:flex;gap:6px;align-items:center;cursor:pointer}
.locmatch{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.locrows{display:grid;gap:6px;max-height:420px;overflow:auto}
.locrows .mobrow{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr)}
@media (max-width:520px){.locrows .mobrow{grid-template-columns:1fr}}
.lbulk{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);min-height:44px}
.lbulk.on{border-color:var(--accent)}
.lcheck{display:flex;gap:8px;align-items:center;cursor:pointer;font-size:14px}
.lrows{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:8px}
.lrow{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;grid-template-areas:"box main sets menu";gap:6px 12px;align-items:center;padding:10px 12px;border-top:1px solid var(--line)}
.lrow>.lbox{grid-area:box}.lrow>.lmain{grid-area:main}.lrow>.lsets{grid-area:sets}.lrow>.lmenuwrap{grid-area:menu}
.lrow:first-child{border-top:0}
.lrow.sel{background:var(--surface-2)}
.lbox{width:18px;height:18px;margin:0}
.lmain{min-width:0}
.lname{font-weight:600;cursor:pointer;overflow-wrap:anywhere;display:block}
.lsets{display:flex;gap:6px;flex-wrap:wrap;min-width:0}
.lsets select{max-width:180px;min-width:0}
select{max-width:100%}
label.f>select{min-width:0;width:100%}
.lmenuwrap{position:relative}
.lmenu{position:absolute;right:0;top:calc(100% + 4px);z-index:20;min-width:210px;background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.15);padding:4px;display:grid}
.lmenu button{all:unset;box-sizing:border-box;padding:8px 10px;border-radius:6px;cursor:pointer;font-size:14px;color:var(--ink)}
.lmenu button:hover,.lmenu button:focus-visible{background:var(--surface-2);outline:2px solid var(--accent);outline-offset:-2px}
.lmenu button.danger,.danger-o{color:var(--refused)}
.lmenu button.armed,.danger-o.armed{font-weight:600;background:var(--refused-soft)}
@media (max-width:760px){.lrow{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"box main menu" ". sets sets";align-items:start}.lrow>.lbox{margin-top:3px}.lsets select{max-width:none;flex:1 1 140px}}
.evdays{grid-column:1/-1;border:0;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.evdays legend{float:left;margin-right:4px;padding:0}
.evdays .dchip{display:inline-flex;gap:5px;align-items:center;padding:3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:13px;cursor:pointer}
.evdays .dchip input{width:auto}
.evcard input{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;min-width:0}
@media (max-width:820px){.evcols{grid-template-columns:minmax(0,1fr)}}
@media (max-width:520px){.evrow,.evrow.loc{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.evrow>label:first-child{grid-column:1/-1}.evrow.loc>label{grid-column:1/-1}}
.catrows{display:grid;gap:10px}
.catrow{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.1fr) minmax(0,.9fr) minmax(0,.9fr) auto;gap:10px;align-items:end;border:1px solid var(--line);border-radius:8px;padding:12px;background:var(--surface-2)}
.catrow .catloc{grid-column:1/3}.catrow .catlink{grid-column:3/5}
.catrow input{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;min-width:0}
.catrow.past{opacity:.6}
.catact{display:flex;gap:8px;align-items:center;justify-content:flex-end}
@media (max-width:760px){.catrow{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.catrow .catloc,.catrow .catlink,.catrow>label:first-child{grid-column:1/-1}.catact{grid-column:1/-1}}
.shiftspanel{display:grid;gap:8px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.shiftcard{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:8px;padding:10px 12px;background:var(--surface)}
.shiftcard.cancel{border-left-color:var(--refused);background:var(--refused-soft)}
.shiftcard.cancel .shiftwhen,.shiftcard.cancel .shifthead b{text-decoration:line-through}
.shiftcard.reschedule{border-left-color:var(--nothome);background:var(--nothome-soft)}
.shiftcard.add{border-left-color:var(--reached);background:var(--reached-soft)}
.shiftcard.booked{border-left-style:dashed}
.shifthead{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.shiftwhen{font-weight:600;margin-top:2px}
.shiftnote{margin:8px 0 0;font-size:14px}
.shiftcard select{max-width:100%}
.addshift{justify-self:start;margin-top:2px}
.addmore{margin-top:10px;padding:10px;border:1px dashed var(--line);border-radius:8px;background:var(--surface-2)}
.moregrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}
@media (max-width:520px){.moregrid{grid-template-columns:minmax(0,1fr)}}
.addmore select{width:100%}
.mobrow{display:grid;grid-template-columns:minmax(80px,140px) 1fr;gap:10px;align-items:center}
.mobrow input{width:100%;min-width:0}
.qedit,.qitem,.qitem *{min-width:0}
.qitem .row{flex-wrap:wrap}
.qitem{overflow-wrap:anywhere}
@media (max-width:520px){.mobrow{grid-template-columns:1fr}}
table.mobq td{vertical-align:middle;white-space:normal}
table.mobq .ccaller{display:grid;gap:2px;min-width:170px}
.chg{display:inline-block;font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.04em;border-radius:99px;padding:2px 8px}
.chg.add{color:var(--reached);background:var(--reached-soft)}
.chg.cancel{color:var(--refused);background:var(--refused-soft)}
.chg.reschedule{color:var(--nothome);background:var(--nothome-soft)}
.mobfu{margin:8px 0 0;display:grid;gap:6px;border-left:3px solid var(--accent);padding-left:10px;min-width:180px}
.mobfu dt{font-size:12px;color:var(--muted)}
.mobfu dd{margin:1px 0 0;font-weight:600;font-size:14px}
table.mobq tr.opened td{background:color-mix(in srgb,var(--nothome) 10%,var(--surface))}
table.mobq tr.isdone td{opacity:.65}
table.mobq .warn{color:var(--refused);font-weight:600}
.mobdone{display:flex;gap:8px;align-items:center;cursor:pointer;white-space:nowrap}
.mobdone input{width:18px;height:18px}
.zonetag{display:inline-block;font:600 11px var(--mono);letter-spacing:.03em;color:var(--accent);background:var(--accent-soft);border-radius:99px;padding:1px 7px;margin-left:6px;vertical-align:1px;white-space:nowrap}
.zonefilter{flex-wrap:wrap;border-radius:14px}
.pick .zonetag{justify-self:start;margin-left:0}
.fclfilters .lookupq{flex:1 1 280px;width:auto}
.fclfilters select{width:auto;flex:0 1 auto;max-width:100%}
table.fcl td{vertical-align:top;white-space:normal}
table.fcl td.tnum{white-space:nowrap}
table.fcl tr.sel td{background:var(--accent-soft)}
table.fcl .fclans{max-width:320px}
.fcledit{display:grid;gap:12px;padding:6px 2px 4px;max-width:760px}
.fclreasons{border-top:1px solid var(--line);padding-top:12px}
.syncnote{background:color-mix(in srgb,var(--nothome) 14%,var(--surface));border-left:4px solid var(--nothome);padding:8px 10px;border-radius:6px}
.colbtn{all:unset;display:inline-flex;align-items:center;gap:8px;cursor:pointer;border-radius:6px}
.colbtn:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
.colbtn svg{color:var(--muted);transition:transform .15s ease;flex:none}
.colbtn:hover span{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}
section.collapsed .colbtn svg{transform:rotate(-90deg)}
section.collapsed > :not(:first-child){display:none !important}
section.collapsed > .sec-head > :not(:first-child){display:none !important}
@media (prefers-reduced-motion: reduce){.colbtn svg{transition:none}}
.sqrow{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}
.sqreq{display:flex;gap:6px;align-items:center;font-size:13px;color:var(--muted);cursor:pointer;white-space:nowrap}
.sqreq:has(input:disabled){opacity:.45;cursor:default}
.reqtag{font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.04em;color:var(--refused);margin-left:4px;white-space:nowrap}
.qmiss select,.qmiss .check{border-color:var(--refused);box-shadow:0 0 0 1px var(--refused)}
.reqleft{color:var(--nothome);font-weight:500}
.chip{font:500 12px var(--mono);border:1px solid var(--line);border-radius:6px;padding:3px 8px;background:var(--surface-2);cursor:pointer;color:var(--ink)}
.chip:hover{border-color:var(--accent)}
#scriptText{font-size:15px;line-height:1.55;min-height:220px;tab-size:4}
.script-body .sl{display:block}
.fmtbar{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.fmt{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:4px 10px;cursor:pointer;font-size:13.5px;color:var(--ink);min-width:34px}
.fmt:hover{border-color:var(--accent)}
.fmtsep{width:1px;height:20px;background:var(--line);margin:0 4px}
.preview summary{cursor:pointer;color:var(--accent);font-weight:500}
.preview .fill{background:var(--accent-soft);border-radius:4px;padding:0 3px;font-weight:600}
.preview .blank{color:var(--muted);font-style:italic}
.preview .script-body{padding:12px 14px;margin-top:8px;border:1px dashed var(--line);border-radius:8px;background:var(--surface)}
.qmulti{border:0;margin:0;padding:0;min-width:0}
.qfu{border-left:3px solid var(--accent);padding-left:12px !important;margin-left:4px !important}
.futag{font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-right:6px}
.qmulti legend{font-weight:600;margin-bottom:6px;padding:0;text-wrap:pretty}
.qmulti .qn{font:600 12px var(--mono);color:var(--muted);margin-right:6px}
.checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px}
.check{display:flex;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;cursor:pointer;background:var(--surface)}
.check:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}
.check input{accent-color:var(--accent);margin:0}
.qmulti[disabled] .check{cursor:not-allowed}
.listbar{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.renameform{display:flex;gap:6px;align-items:center}
.listfilter{display:inline-flex;gap:4px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px;justify-self:start}
.lf{border:0;background:transparent;padding:5px 14px;border-radius:999px;cursor:pointer;font-weight:500;color:var(--muted)}
.lf span{font-size:12px;opacity:.8;margin-left:2px}
.lf.on{background:var(--accent);color:var(--accent-ink)}
.renameform input{flex:1;min-width:140px;background:var(--surface);border:1px solid var(--accent);border-radius:6px;padding:5px 8px}
.dayline{margin:0;font-size:14.5px}
.daytable tr.sel td{background:var(--accent-soft)}
.cdtable tr.dayhead td{background:var(--surface-2);border-top:2px solid var(--line)}
.cdtable td.cdname{max-width:260px;overflow:hidden;text-overflow:ellipsis;padding-left:22px}
#dayPick{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:7px 10px;color:var(--ink)}
.listbar .lookupbtn{margin-left:auto;padding:6px 12px;font-size:14px}
.lookup{padding:16px 18px;display:grid;gap:10px;margin-top:12px}
input.lookupq{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px 12px;font-size:16px}
.lookuplist{list-style:none;margin:0;padding:0;display:grid;gap:6px;max-height:360px;overflow:auto}
.lookuplist button{width:100%;text-align:left;display:grid;gap:3px;justify-items:start;border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 12px;cursor:pointer;color:var(--ink)}
.lookuplist button:hover:not(:disabled){border-color:var(--accent)}
.lookuplist button:disabled{opacity:.6;cursor:not-allowed}
.ovstate.not_home,.ovstate.left_message{color:var(--nothome);background:var(--nothome-soft);border-color:transparent}
.ovstate.refused{color:var(--refused);background:var(--refused-soft);border-color:transparent}
.ovstate.moved{color:var(--moved);background:var(--moved-soft);border-color:transparent}
.ovstate.wrong_number{color:var(--wrong);background:var(--wrong-soft);border-color:transparent}
.ovstate.disconnected{color:var(--disc);background:var(--disc-soft);border-color:transparent}
.modepick{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.modeopt{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r);cursor:pointer;background:var(--surface)}
.modeopt.on{border-color:var(--accent);background:var(--accent-soft)}
.modeopt input{margin-top:3px;accent-color:var(--accent)}
.mergebox{display:grid;gap:12px;padding:14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface-2)}
.mergestats{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px}
.mergestats>div{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.mergestats b{font:700 22px/1.1 var(--display);font-stretch:85%}
.ovsum{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px}
.ovsum>div{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.ovsum .pill{margin-left:6px}
.ovdetail{display:grid;gap:10px;padding:14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface-2)}
input.ovsearch{width:260px;max-width:100%}
.ovtable td{vertical-align:top}
.ovtable thead th{position:sticky;top:0;z-index:1}
.ovstate{display:inline-block;margin-top:3px;font-size:12px;font-weight:600;padding:1px 8px;border-radius:99px;background:var(--surface);border:1px solid var(--line);color:var(--muted)}
.ovstate.not_called{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}
.ovstate.on_screen{color:var(--nothome);background:var(--nothome-soft);border-color:transparent}
.ovstate.reached{color:var(--reached);background:var(--reached-soft);border-color:transparent}
.phones{margin-top:16px;display:grid;gap:10px}
.phonerow{padding:12px 14px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r);display:grid;gap:10px}
.phonehead{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.phonehead .plabel{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;min-width:60px}
.phonehead .num{font:600 22px/1.1 var(--mono);overflow-wrap:anywhere}
.phonehead .acts{display:flex;gap:8px;margin-left:auto}
.presults{display:flex;flex-wrap:wrap;gap:6px}
.pr{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:5px 12px;font-size:13.5px;cursor:pointer;color:var(--ink)}
.pr:hover{border-color:var(--muted)}
.pr.on.not_home,.pr.on.left_message{background:var(--nothome-soft);border-color:var(--nothome);color:var(--nothome);font-weight:600}
.pr.on.wrong_number{background:var(--wrong-soft);border-color:var(--wrong);color:var(--wrong);font-weight:600}
.pr.on.disconnected{background:var(--disc-soft);border-color:var(--disc);color:var(--disc);font-weight:600}
.pr.on.refused{background:var(--refused-soft);border-color:var(--refused);color:var(--refused);font-weight:600}
.pr.on.moved{background:var(--moved-soft);border-color:var(--moved);color:var(--moved);font-weight:600}
.pr.on.reached{background:var(--reached-soft);border-color:var(--reached);color:var(--reached);font-weight:600}
.status-line{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line);font-size:14px;color:var(--muted)}
.status-line.ok{background:var(--reached-soft);border-color:transparent;color:var(--ink)}
.status-line.ok b{color:var(--reached)}
.status-line.nc{color:var(--ink)}
.nocontact{padding:18px 22px}
.linkbtn.small{font-size:13px}
.picks{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.pick{display:grid;gap:4px;text-align:left;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);cursor:pointer;color:var(--ink)}
.pick b{font:700 18px/1.2 var(--display);font-stretch:90%}
.pick:hover{border-color:var(--accent);background:var(--accent-soft)}
.pick.done{opacity:.6}
.pill{display:inline-block;font-size:12px;font-weight:600;padding:2px 8px;border-radius:99px;border:1px solid var(--line)}
.pill.active{color:var(--reached);background:var(--reached-soft);border-color:transparent}
.pill.archived{color:var(--muted);background:var(--surface-2)}
.pill.reached{color:var(--reached);background:var(--reached-soft);border-color:transparent}
.pill.wrong_number{color:var(--wrong);background:var(--wrong-soft);border-color:transparent}
.pill.disconnected{color:var(--disc);background:var(--disc-soft);border-color:transparent}
.pill.refused{color:var(--refused);background:var(--refused-soft);border-color:transparent}
.pill.moved{color:var(--moved);background:var(--moved-soft);border-color:transparent}
.iconbtn:disabled{opacity:.5;cursor:not-allowed}
.pill.onscreen{color:var(--accent);background:var(--accent-soft);border-color:transparent}
.pill.not_home,.pill.left_message{color:var(--nothome);background:var(--nothome-soft);border-color:transparent}
.emailbox{display:grid;gap:8px}
.emailbox input{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.emailbox.prompt{padding:12px 14px;border:1.5px solid var(--nothome);background:var(--nothome-soft);border-radius:var(--r)}
.prompt-msg{margin:0;font-size:14px}
.prompt-msg b{color:var(--nothome)}
.authwrap{display:grid;place-items:start center;padding:6vh 0 40px}
.authcard{width:min(420px,100%);padding:26px;display:grid;gap:14px}
.authcard h1{margin:0;font-size:22px}
.authcard form{display:grid;gap:12px}
.authcard input{width:100%;padding:10px 12px;font-size:16px;color:var(--ink)}
.authcard .err{background:color-mix(in srgb,var(--refused) 10%,transparent);border:1px solid color-mix(in srgb,var(--refused) 35%,transparent);color:var(--ink);padding:9px 12px;border-radius:8px;font-size:14px;margin:0}
.authcard .ok{background:var(--accent-soft);padding:9px 12px;border-radius:8px;font-size:14px;margin:0}
.authswitch{display:flex;gap:6px;justify-content:center;font-size:14px;color:var(--muted)}
.who .linkbtn{color:var(--muted);font-weight:400}
.codebox{font:600 18px var(--mono);letter-spacing:.06em;padding:8px 14px;border:1px dashed var(--line);border-radius:8px;background:var(--surface-2)}
.acct td{vertical-align:middle}
.acct .acts{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.linkout{display:flex;gap:8px;align-items:center;background:var(--accent-soft);padding:10px 12px;border-radius:8px}
.linkout input{flex:1;font:13px var(--mono);min-width:0}
/* People to review */
.prh{font-size:15px;margin:6px 0 0}
.pritem{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.pritem[aria-busy="true"]{opacity:.6;pointer-events:none}
.prpeople{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.prperson ul{margin:4px 0 0;padding-left:18px}
.wrongnote{color:var(--refused);font-weight:600;margin-left:8px}
/* merging contacts (Full Contact List) */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.fclselbar{flex-wrap:wrap}
.fclmerge{display:grid;gap:10px;border:1px solid var(--line)}
.fclpref{border:1px solid var(--line);border-radius:8px;padding:8px 12px;display:flex;flex-wrap:wrap;gap:6px 16px;margin:0}
.fclpref legend{font-weight:600;font-size:14px;padding:0 4px}
.preftag{font-size:12px;font-weight:700;color:var(--accent, #2f6f4f);border:1px solid currentColor;border-radius:999px;padding:1px 8px;margin-left:8px}
.prefline{margin:6px 0 0}

/* GOTV tab */
.gvlocked{opacity:.8}
.gvstat{grid-template-columns:repeat(3,minmax(0,1fr))}
.gvstat div{padding:8px 10px;min-width:0}
.gvstat span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gvtable td{vertical-align:middle;white-space:normal}
.gvtable td.tnum{white-space:nowrap}
.gvtable td.gvact{text-align:right;white-space:nowrap}
.gvin{color:var(--reached);font-weight:600}
.gvadd{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;padding-top:12px;border-top:1px solid var(--line)}
.gvadd .f{flex:1 1 200px}
.gvrep td.tnum,.gvrep th:nth-child(n+2){text-align:right}
.gvrep tr.gvloc th{background:none;color:var(--ink);font-size:13px;padding-top:14px}
.gvrep tr.gvsum td{font-weight:600}
@media (max-width:560px){ .gvtable td.gvact{white-space:normal} }
.gvready{display:grid;gap:8px}
.gvreadyrow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.gvnum .linkbtn.small{font-size:12px}
.gvnumform{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.gvnumform input{max-width:170px}
.fclnum{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.fclnum .f{flex:1 1 260px;max-width:420px}
.evclosed{grid-column:1/-1;max-width:420px}
#gvTurfText{font-family:inherit}
/* GOTV: big, clear tap targets for check-in and turf check-out (used on phones at a busy table) */
.gvtable .btn{min-height:44px;padding:10px 16px;font-size:16px;white-space:nowrap}
.gvtable td{padding-top:10px;padding-bottom:10px}
#gvFind,#gvWhere{min-height:44px;font-size:16px}
.gvstep{display:flex;align-items:center;gap:8px;margin:14px 0 8px;font-size:16px}
.gvstepn{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-size:14px;flex:none}
.gvvols,.gvturfs{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
/* map regions: wide enough for full names (one per row on phones), with the count of unknocked turfs up front */
.gvregions{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.gvregion{grid-template-columns:auto 1fr !important;align-items:center;column-gap:12px}
.gvregion .gvrname{display:grid;gap:2px;min-width:0}
.gvregion .gvrname b{font-size:17px;line-height:1.25;overflow-wrap:anywhere}
.gvcount{display:grid;place-items:center;min-width:44px;height:44px;padding:0 6px;border-radius:10px;background:var(--accent);color:var(--accent-ink);font:700 22px/1 var(--display, inherit)}
.gvregion[data-empty] .gvcount{background:var(--surface-2);color:var(--muted)}
.gvturf .gvdoors{font-size:15px;font-weight:600;color:var(--ink)}
.gvvol,.gvregion,.gvturf{display:grid;gap:2px;text-align:left;min-height:52px;padding:10px 12px;border:2px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:16px;cursor:pointer}
.gvvol .small,.gvregion .small,.gvturf .small{color:var(--muted)}
.gvvol[aria-pressed="true"],.gvregion[aria-pressed="true"],.gvturf[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}
.gvvol[aria-pressed="true"] b::before,.gvturf[aria-pressed="true"] b::before{content:"✓ "}
.gvregion[data-empty]{opacity:.55}
.gvturf.out{opacity:.5;cursor:not-allowed;border-style:dashed}
.gvgo{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px}
.gvgo .btn.big{min-height:52px;font-size:17px}
.gvdone{margin:0;padding:10px 12px;border-radius:8px;background:var(--reached-soft);color:var(--reached);font-weight:600}
.gvreassign td{background:var(--surface-2)}
.gvchoices{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.gvchoices .btn{min-height:48px;font-size:16px}
.gvredo{padding:8px 12px;border-radius:8px;background:var(--nothome-soft)}
/* check-in rows: the Check in button first, right next to the name */
.gvcheckin td.gvact{width:1%;text-align:left;white-space:nowrap;vertical-align:middle}
.gvcheckin .gvcheck{min-width:112px}
.gvcheckin .gvname{font-size:16px}
.gvcheckin .gvin{display:block;color:var(--reached);font-weight:700}
.gvcheckin tr.gvdonerow td{background:var(--reached-soft)}
.gvadd .btn.big{min-height:48px}
.gvpicked{font-size:14px;font-weight:700;color:var(--accent)}
/* turf check-out: an open map region (with the way back to all of them), map buttons, and the map over the page */
.gvback{min-height:48px;font-size:16px;font-weight:600;margin:4px 0 8px}
.gvturfcell{display:grid;gap:4px;align-content:start}
.gvturfcell .gvturf{width:100%}
.gvmapbtn{min-height:40px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);color:var(--ink);font-size:15px;cursor:pointer}
.gvmapregion{margin:0 0 10px;min-height:44px}
#gvMapPop{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.88);overflow:auto;display:flex;flex-direction:column;align-items:center;gap:12px;padding:8px 8px 24px;cursor:zoom-out;outline:none}
#gvMapPop .gvmaphint{margin:0;color:#fff;font-size:16px;text-align:center;position:sticky;top:0;background:rgba(0,0,0,.6);padding:6px 12px;border-radius:8px}
#gvMapPop img{display:block;max-width:100%;max-height:calc(100vh - 56px);height:auto;object-fit:contain;background:#fff;border-radius:4px}
.gvturfs{align-items:start}
.gvwarn{padding:10px 12px;border-radius:8px;background:var(--nothome-soft,#fff4d6);color:var(--ink)}
/* progress report: turfs in the field now */
.gvfield{display:flex;gap:14px;align-items:flex-start;padding:12px 14px;border:2px solid var(--accent);border-radius:10px;background:var(--accent-soft)}
.gvfieldn{font-size:34px;line-height:1;min-width:1.4em;text-align:center;color:var(--accent)}
.gvlist{margin:6px 0 0;padding-left:18px;display:grid;gap:3px}
.gvextra{border-style:dashed}
.gvextra .gvcount{background:var(--surface-2);color:var(--ink)}
/* the field map (admins) */
.gmslot{width:100%}
.gmmap{height:min(70vh,560px);width:100%;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.gmlegend{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;color:var(--muted)}
.gmkey{display:inline-flex;align-items:center;gap:5px}
.gmkey i{display:inline-block;width:16px;height:12px;border-radius:2px;border:1px solid rgba(0,0,0,.15)}
.gmkey i.gmline{height:0;border:0;border-top:2.5px solid #1d4f86;border-radius:0}
.gmkey i.gmline.gmdash{border-top:2.5px dashed #b45309}
.gmkey i.gmdot{width:10px;height:10px;border-radius:50%;background:#111827;border:1.5px solid #fff;box-shadow:0 0 0 1px #111827}
.gmpct{white-space:nowrap}
.gmbar{display:inline-block;width:70px;height:8px;border-radius:4px;background:var(--surface-2);vertical-align:middle;margin-right:6px;overflow:hidden}
.gmbar i{display:block;height:100%}
.gmsetup summary{cursor:pointer}
.gvreload{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.gvalldaybox{width:100%;align-items:flex-start}
/* (the map stays inside its box, under the page's header, whatever happens with its own styles) */
.gmmap{position:relative;z-index:0;overflow:hidden;isolation:isolate}
.gmzoom{display:flex;flex-wrap:wrap;gap:6px}
.gmzoom .btn{min-height:36px;padding:4px 12px}
.gmtown{width:0!important;height:0!important;pointer-events:none}
.gmtown span{position:absolute;transform:translate(-50%,-50%);font:600 11px/1.1 var(--body, system-ui, sans-serif);color:#374151;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 3px #fff;white-space:nowrap}
.gmtownbusy span{font-size:12px;color:#111827}
.gvimpbox{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.gvimp{display:grid;gap:8px}
.gvregionsadmin summary{cursor:pointer}
.gvregionsadmin[open]{display:grid;gap:8px}
.gvimp .warn{color:var(--refused);font-weight:600}
/* turf check-out: the picked turfs' list numbers, easy to read off; a region's priority badge */
.gvlists{width:100%;display:grid;gap:4px;padding:10px 12px;border:2px solid var(--accent);border-radius:10px;background:var(--surface)}
.gvlistrow{display:grid;grid-template-columns:minmax(150px,max-content) 1fr;align-items:baseline;gap:2px 16px}
.gvlistturf{font-weight:600}
.gvlistno{font:700 22px/1.2 var(--mono, ui-monospace, monospace);letter-spacing:.02em}
.gvprio{font-size:20px}
.sitelabel{position:sticky;top:0;z-index:2000;padding:6px 12px;text-align:center;font-weight:700;background:#b45309;color:#fff;letter-spacing:.02em}
/* returned turfs (update 122): the button's color shows how much of the turf is done, green (least) to red (most).
   The fill is light so the text reads the same in every band; the thick left edge carries the color too. */
:root{--b1:#2E8B57; --b1s:#E2F4E8; --b2:#7A9E1F; --b2s:#EEF6D6; --b3:#B8930A; --b3s:#FFF4C7; --b4:#D2691E; --b4s:#FFE6D1; --b5:#C62828; --b5s:#FBDCDC}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){--b1:#5CC488; --b1s:#163222; --b2:#A9CB4C; --b2s:#25300F; --b3:#E2C043; --b3s:#352D0C; --b4:#F09A55; --b4s:#3A2412; --b5:#F07B7B; --b5s:#3D1A1A} }
:root[data-theme="dark"]{--b1:#5CC488; --b1s:#163222; --b2:#A9CB4C; --b2s:#25300F; --b3:#E2C043; --b3s:#352D0C; --b4:#F09A55; --b4s:#3A2412; --b5:#F07B7B; --b5s:#3D1A1A}
.gvturf.gvb1{--b:var(--b1);--bs:var(--b1s)} .gvturf.gvb2{--b:var(--b2);--bs:var(--b2s)} .gvturf.gvb3{--b:var(--b3);--bs:var(--b3s)} .gvturf.gvb4{--b:var(--b4);--bs:var(--b4s)} .gvturf.gvb5{--b:var(--b5);--bs:var(--b5s)}
.gvturf[class*="gvb"]{background:var(--bs);border-color:var(--b);border-left-width:8px}
.gvturf[class*="gvb"] .gvdone-pct{color:var(--ink);font-weight:600}
.gvturf[class*="gvb"][aria-pressed="true"]{background:var(--bs);border-color:var(--accent);border-left-color:var(--b);box-shadow:inset 0 0 0 2px var(--accent)}
.gvlistbtns{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.gvlistbtn{min-height:48px;font-size:16px;font-weight:600;display:inline-flex;gap:8px;align-items:center}
.gvlistn{display:inline-grid;place-items:center;min-width:28px;height:28px;padding:0 6px;border-radius:14px;background:var(--surface-2);font-weight:700}
.gvlistexh .gvlistn{background:var(--b5s);color:var(--b5)}
.gvtable .gvsetbtn{display:grid;gap:2px;justify-items:start;justify-content:start;text-align:left;flex:1 1 200px;max-width:100%;white-space:normal}
.gvactbtns{display:flex;flex-direction:column;gap:6px;align-items:stretch}
.gvrg{overflow-wrap:anywhere}
/* Turfs out, on a phone: each turf as a card (name and numbers, who has it and when, the buttons beside) */
@media (max-width:560px){
  .gvouttable{display:block;width:100%}
  .gvouttable tbody{display:block}
  .gvouttable thead{display:none}
  .gvouttable tbody tr{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;padding:10px 8px;border-bottom:1px solid var(--line)}
  .gvouttable tbody td{display:block;padding:0;border:0}
  .gvouttable tbody td.gvact{grid-column:2;grid-row:1 / span 3;align-self:center}
  .gvouttable tbody td.tnum{white-space:normal}
  .gvouttable tbody tr.gvreassign{display:block}
  .gvouttable tbody tr.gvreassign td{display:block;padding:4px 0}
  .gvouttable .gvactbtns .btn{padding:8px 12px}
}
.gvvan{margin:0;padding:8px 12px;border-radius:8px;background:var(--surface-2)}
.gvvan.gvvanold{background:var(--nothome-soft);color:var(--ink)}
.gvfu{display:grid;gap:10px}
.gvfucard{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.gvfucard.gvfudone{opacity:.7;background:var(--surface-2)}
.gvfuwho{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:16px}
.gvtel{font-weight:600}
/* check in someone from the last shift (update 124) */
.gvlast{margin:10px 0 0}
.gvlast>summary{display:inline-flex;gap:8px;align-items:center;list-style:none;cursor:pointer;min-height:44px}
.gvlast>summary::-webkit-details-marker{display:none}
/* a volunteer still holding turf (update 124): not selectable until "Change turf assignments" */
.gvvollocked{cursor:default;background:var(--surface-2);border-style:dashed}
.gvvollocked .gvunlock{margin-top:6px;min-height:40px;font-size:15px;justify-self:start}
/* update 126: a bigger Find box; bigger names in Turfs out; incomplete counts on region buttons */
.gvfindbox{font-size:17px;font-weight:600}
.gvfindbox input{font-size:17px;min-height:48px}
.gvouttable td b{font-size:17px}
.gvouttable td:nth-child(2){font-size:17px;font-weight:600}
.gvinc{color:var(--b3)}
