:root{
  --bg:#eef2f7; --panel:#ffffff; --panel2:#f5f8fc; --line:#93d3ee;
  --text:#111827; --muted:#4b5563; --brand:#0ea5e9; --brand2:#0284c7;
  --high:#16a34a; --med:#d97706; --low:#6b7280;
  --emer:#dc2626; --same:#d97706; --ink-dim:#4b5563;
  --radius:14px;
}
*{box-sizing:border-box}
body{
  margin:0;background:var(--bg);color:var(--text);
  font:15px/1.5 'Inter',system-ui,-apple-system,sans-serif;
}
a{color:var(--brand);text-decoration:none}

.topbar{
  display:flex;align-items:flex-start;gap:24px;
  padding:14px 22px;border-bottom:1px solid var(--line);background:#ffffff;
}
.brand{display:flex;align-items:center;gap:10px;margin-top:6px}
.logo{color:var(--brand);font-size:22px}
.brand .name{font-weight:700;letter-spacing:.3px}
.brand .tag{color:var(--muted);font-size:12px;border-left:1px solid var(--line);padding-left:10px}
.newcall{
  display:flex;align-items:center;justify-content:center;
  width:100%;height:42px;padding:0 10px;
  font-size:13px;font-weight:600;white-space:nowrap;
  background:var(--brand2);color:#fff;
  border:none;border-radius:10px;cursor:pointer;
  text-decoration:none;box-sizing:border-box;
}
.newcall:hover{background:var(--brand);color:#fff}
.newcall-primary{background:var(--high);color:#fff}
.newcall-primary:hover{background:#15803d;color:#fff}

/* Gear icon — Setup & log out */
.nav-gear{flex-shrink:0;margin-top:6px}
.topbar-gear{
  display:flex;align-items:center;justify-content:center;
  width:42px;height:42px;border-radius:10px;
  background:var(--panel2);border:1px solid var(--line);
  font-size:19px;cursor:pointer;list-style:none;color:var(--text);
  box-shadow:0 1px 3px rgba(0,0,0,0.05);
}
.topbar-gear::-webkit-details-marker{display:none}
.nav-gear[open] .topbar-gear{background:var(--brand2);color:#fff;border-color:var(--brand2)}
/* right-anchor the gear menu. Compound selector so it beats the later
   `.nav-dd-menu{left:0}` rule (equal specificity would let source order win). */
.nav-dd-menu.nav-dd-right{left:auto;right:0}
.nav-divider{border:none;border-top:1px solid var(--line);margin:4px 0}
.lock-link{display:flex;align-items:center;font-size:20px;margin-top:4px;color:var(--muted)}

.wrap{max-width:1600px;margin:26px auto;padding:0 28px}
.wrap-wide{max-width:1800px}
.foot{text-align:center;color:var(--muted);font-size:12px;padding:24px}

.card{
  background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);padding:20px;
  box-shadow:0 2px 8px rgba(0,0,0,0.06), 0 8px 24px rgba(14,165,233,0.07);
}

/* intake */
.grid{display:grid;grid-template-columns:1.4fr .9fr;gap:18px}
h1{font-size:22px;margin:0 0 4px}
.sub{color:var(--muted);margin:0 0 16px;font-size:13.5px}
label{display:block;margin-bottom:14px;font-size:13px;color:var(--muted)}
input[type=text],textarea{
  width:100%;margin-top:6px;background:var(--panel);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:11px 12px;font-size:14px;
  box-shadow:0 1px 3px rgba(0,0,0,0.05);
}
textarea{resize:vertical}
input:focus,textarea:focus{outline:none;border-color:var(--brand)}
label small{display:block;color:var(--low);margin-top:5px;font-size:11.5px}
.upload input{margin-top:6px}
button.primary,.primary{
  background:linear-gradient(180deg,var(--brand),var(--brand2));
  color:#fff;border:none;border-radius:10px;padding:12px 18px;
  font-size:14px;font-weight:600;cursor:pointer;display:inline-block;
}
button.primary:hover{filter:brightness(1.08)}

.field{display:block;margin-bottom:14px}
.field-label{display:block;font-size:13px;color:var(--muted)}
.field small{display:block;color:var(--low);margin-top:5px;font-size:11.5px}
.field select{width:100%;margin-top:6px;background:var(--panel);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:11px 12px;font-size:14px;
  box-shadow:0 1px 3px rgba(0,0,0,0.05)}

.samples-card h2{font-size:15px;margin:0 0 4px}
.samples{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.sample{
  width:100%;text-align:left;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;cursor:pointer;color:var(--text);
}
.sample:hover{border-color:var(--brand)}
.s-issue{display:block;font-size:13px}
.s-addr{display:block;color:var(--muted);font-size:11.5px;margin-top:3px}

/* result */
.result{display:flex;flex-direction:column;gap:16px}
.head-card{display:flex;justify-content:space-between;align-items:flex-start}
.head-left h1{margin:0}
.addr{color:var(--muted);margin:4px 0}
.issue{font-style:italic;margin:8px 0 0}
/* inline-flex + nowrap: as a plain inline span the badge could break between the
   ⚠ and the word, and its border then drew two separate boxes on a phone */
.urgency{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;
  padding:7px 12px;border-radius:20px;font-size:12.5px;font-weight:600}
.head-right{flex:none}
.urgency-emergency{background:rgba(255,93,93,.15);color:var(--emer);border:1px solid var(--emer)}
.urgency-sameday{background:rgba(245,166,35,.15);color:var(--same);border:1px solid var(--same)}
.urgency-standard{background:var(--panel2);color:var(--muted);border:1px solid var(--line)}

.scores{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.score-card{display:flex;flex-direction:column;gap:8px;min-height:128px}
.score-label{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}
.score-num{font-size:34px;font-weight:700}
.score-num.small{font-size:20px}
.score-num span{font-size:15px;color:var(--muted);font-weight:400}
.score-money{font-size:22px;font-weight:700}
.muted{color:var(--muted);font-size:12.5px}
.hot{color:var(--high);font-weight:600}

.band{display:inline-block;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:700;width:fit-content}
.band-high{background:rgba(46,204,113,.16);color:var(--high);border:1px solid var(--high)}
.band-medium{background:rgba(245,166,35,.16);color:var(--med);border:1px solid var(--med)}
.band-low{background:rgba(122,134,153,.16);color:var(--low);border:1px solid var(--low)}

.staffing-card{display:flex;flex-direction:column;gap:10px}
.staffing{display:flex;gap:10px;flex-wrap:wrap}
.role-chip{font-size:22px;font-weight:800;color:var(--brand);background:rgba(77,163,255,.12);
  border:1px solid var(--brand);border-radius:11px;padding:11px 18px;letter-spacing:.2px}

.lower{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(300px,1fr);gap:16px;align-items:start}
.lower h2{font-size:15px;margin:0 0 12px}
.facts{width:100%;border-collapse:collapse}
.facts td{padding:7px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.facts td:first-child{color:var(--muted);width:42%}

/* Solo mode — the right rail held ONLY the owner-only "Why this score" panel,
   so for every other role it's an empty 300px column. Collapse the grid and let
   the intelligence card have the page. The home facts then reflow into as many
   columns as fit, so a wide screen reads dense instead of one stretched list.
   Scoped to .facts-home on purpose: .facts.permits has its own column sizing. */
.lower-solo{grid-template-columns:minmax(0,1fr)}
.lower-solo .facts-home{display:block}
/* min(340px,100%) not a bare 340px: auto-fit keeps the track at its floor even
   when the container is narrower, which pushed the card off a phone screen. */
.lower-solo .facts-home tbody{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));column-gap:34px}
.lower-solo .facts-home tr{display:flex;align-items:baseline;gap:14px;
  border-bottom:1px solid var(--line)}
.lower-solo .facts-home td{border-bottom:none;flex:1 1 auto}
.lower-solo .facts-home td:first-child{width:auto;flex:0 0 148px}
/* Same idea for the permit / opportunity / equipment lists: at full width a
   single stacked column strands each score badge ~1200px from its label, so
   pack the rows two-up instead. */
.lower-solo .opp-grid{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(460px,100%),1fr));gap:7px 32px}

.reasons{margin:0;padding-left:18px}
.reasons li{margin-bottom:7px;font-size:13.5px}
.disclaimer{color:var(--low);font-size:11.5px;margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.back{margin-top:4px;width:fit-content}

.topnav{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:8px;flex:1}
.nav-dd{position:relative;display:block}
.nav-dd>summary{list-style:none;cursor:pointer;user-select:none}
.nav-dd>summary::-webkit-details-marker{display:none}
.nav-dd[open]>summary{background:var(--brand);color:#fff}
.nav-dd-menu{position:absolute;top:calc(100% + 8px);left:0;z-index:50;display:flex;
  flex-direction:column;gap:2px;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:6px;min-width:195px;max-width:calc(100vw - 24px);
  box-shadow:0 4px 20px rgba(0,0,0,0.12), 0 8px 32px rgba(14,165,233,0.08)}
.nav-dd-menu a{font-size:13.5px;font-weight:500;padding:9px 12px;border-radius:8px;white-space:nowrap;color:var(--text)}
.nav-dd-menu a:hover{background:var(--panel2);color:var(--brand2)}

/* interview */
.intro-card{margin-bottom:16px}
.saved-banner{margin-bottom:16px;border-color:var(--high);color:var(--high);background:rgba(46,204,113,.08)}
.saved-banner a{margin-left:8px}
form .card{margin-bottom:16px}
.interview-tbl{width:100%;border-collapse:collapse}
.interview-tbl th{text-align:left;color:var(--muted);font-size:11.5px;text-transform:uppercase;
  letter-spacing:.4px;padding:0 8px 10px;border-bottom:1px solid var(--line)}
.interview-tbl td{padding:9px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
.ci-label{font-size:13.5px;font-weight:600;width:21%}
.ci-range{white-space:nowrap}
.ci-range input{width:74px;display:inline-block;margin-top:0;padding:7px 8px}
.dollar{color:var(--muted)}.dash{color:var(--muted);margin:0 4px}
.ci-upsell{min-width:200px;margin-top:0;padding:7px 9px}
.ci-keywords{min-width:200px;margin-top:0;padding:7px 9px;font-size:12.5px}
.interview-tbl select{background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:8px;padding:7px 8px}
.ci-emer{text-align:center}
.ci-emer input{width:18px;height:18px}
.field-row{display:flex;gap:16px;flex-wrap:wrap}
.field-row label{flex:1;min-width:200px}
.field-row select{width:100%;margin-top:6px;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:11px 12px}
.field-row .dollar{margin-right:2px}
.field-row input[type=number]{width:120px}

/* admin login */
.login-wrap{max-width:440px;margin:40px auto}
.login-card{text-align:center}
.lock-big{font-size:40px;margin-bottom:6px}
.login-card h1{font-size:22px;margin:0 0 6px}
.login-card form{margin-top:14px}
.login-card input[type=password]{width:100%;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:12px;font-size:15px;margin-bottom:10px}
.login-card .primary{width:100%}
.login-error{color:var(--emer);font-size:13px;margin:6px 0}
.login-card .back-link{display:inline-block;margin-top:14px;color:var(--muted);font-size:12.5px}
.foot{display:flex;align-items:center;justify-content:center;gap:14px}
.lock-link{color:var(--low);text-decoration:none;font-size:14px;opacity:.6}
.lock-link:hover{opacity:1}

/* backup & restore */
.backup-card{margin-top:16px}
.backup-row{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start;margin-top:6px}
.import-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.import-form input[type=file]{color:var(--muted);font-size:12.5px}
.ok-banner{color:var(--high);font-size:13px;margin:6px 0}

/* editable call-type cards */
.issue-card{border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--panel2)}
.issue-head{display:flex;gap:10px;align-items:center;margin-bottom:10px}
.issue-label-in{flex:1;margin-top:0;font-weight:600;font-size:14.5px;background:var(--panel);
  border:1px solid var(--line);color:var(--text);border-radius:9px;padding:9px 11px}
.remove-issue{flex:0 0 auto;background:transparent;border:1px solid var(--line);color:var(--low);
  border-radius:8px;padding:7px 10px;font-size:12px;cursor:pointer}
.remove-issue:hover{border-color:var(--emer);color:var(--emer)}
.issue-grid{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end}
.issue-grid label,.issue-grid .ig-field{flex:1;min-width:140px;font-size:12px;color:var(--muted);margin-bottom:0}
.issue-grid .ig-wide{flex:2;min-width:240px}
.issue-grid .ig-label{display:block}
.issue-grid input,.issue-grid select{width:100%;margin-top:5px;background:var(--panel);
  border:1px solid var(--line);color:var(--text);border-radius:9px;padding:9px 10px;font-size:13.5px}
.issue-grid .range2{display:flex;align-items:center;gap:5px;margin-top:5px}
.issue-grid .range2 input{flex:1;min-width:64px;margin-top:0}
.emer-lbl{display:flex !important;align-items:center;gap:7px;flex:0 0 auto !important;
  min-width:0 !important;color:var(--text) !important;font-size:13px !important;white-space:nowrap}
.emer-lbl input{width:16px !important;height:16px;margin:0 !important}
.issue-techs{margin-top:12px;border-top:1px solid var(--line);padding-top:11px}
.issue-techs textarea{width:100%;margin-top:8px;background:var(--panel);border:1px solid var(--line);
  color:var(--text);border-radius:9px;padding:9px 11px;font-size:13px;resize:vertical}
.add-issue{width:100%;background:rgba(77,163,255,.1);border:1px dashed var(--brand);color:var(--brand);
  border-radius:10px;padding:12px;font-size:14px;font-weight:600;cursor:pointer;margin-top:4px}
.add-issue:hover{background:rgba(77,163,255,.18)}
.staffing-note{color:var(--text);font-size:16px;font-weight:700;margin:6px 0 0}

.calib-badge{display:inline-block;font-size:11px;padding:3px 9px;border-radius:20px;
  border:1px solid var(--high);color:var(--high);background:rgba(46,204,113,.1);margin-left:8px}
.calib-badge.draft{border-color:var(--low);color:var(--low);background:rgba(122,134,153,.1)}

/* scenarios list */
.progress{display:flex;align-items:center;gap:12px;margin-top:14px}
.progress-bar{flex:1;height:8px;background:var(--panel2);border-radius:6px;overflow:hidden}
.progress-bar span{display:block;height:100%;background:var(--high)}
.progress-text{color:var(--muted);font-size:12.5px;white-space:nowrap}
.cat-header{display:flex;align-items:baseline;justify-content:space-between;margin:22px 0 10px}
.cat-header h2{font-size:16px;margin:0}
.cat-count{color:var(--muted);font-size:12px}
.scenario-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.scenario-link{display:flex;align-items:center;gap:14px;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;padding:14px 16px;color:var(--text)}
.scenario-link:hover{border-color:var(--brand)}
.scenario-link.done{border-color:rgba(46,204,113,.4)}
.sc-status{font-size:18px;color:var(--low);width:18px}
.scenario-link.done .sc-status{color:var(--high)}
.sc-body{flex:1}
.sc-issue{display:block;font-size:14px}
.sc-meta{display:block;color:var(--muted);font-size:12px;margin-top:3px}
.sc-go{color:var(--brand);font-size:13px;white-space:nowrap}

/* scenario scoring */
.scenario-head{display:flex;justify-content:space-between;gap:18px;margin-bottom:16px}
.back-link{font-size:12.5px;color:var(--muted)}
.scenario-head h1{margin:6px 0 2px}
.home-mini{text-align:right;color:var(--muted);font-size:13px;line-height:1.7;min-width:150px}
.part{border-top:1px solid var(--line);padding:16px 0}
.part:first-of-type{border-top:none}
.part-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:9px}
.part-name{font-weight:600;font-size:14.5px}
.app-guess{color:var(--muted);font-size:12.5px;text-align:right}
.part-input{margin-bottom:9px}
.part-input select{background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:9px;padding:9px 11px;font-size:14px;min-width:170px}
.range-input{display:flex;align-items:center;gap:6px}
.range-input input{width:110px;margin-top:0;padding:9px 10px}
.part textarea{width:100%;background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:9px;padding:9px 11px;font-size:13.5px;resize:vertical}
.checkbox-grid{display:flex;flex-wrap:wrap;gap:8px}
.check{display:flex;align-items:center;gap:7px;background:var(--panel2);border:1px solid var(--line);
  border-radius:9px;padding:8px 12px;font-size:13.5px;cursor:pointer;color:var(--text)}
.check input{width:16px;height:16px;margin:0}
.check:hover{border-color:var(--brand)}

@media(max-width:880px){
  .grid,.lower{grid-template-columns:1fr}
  .scores{grid-template-columns:repeat(2,1fr)}
  .interview-tbl,.interview-tbl tbody,.interview-tbl tr,.interview-tbl td{display:block;width:100%}
  .interview-tbl thead{display:none}
  .interview-tbl tr{border:1px solid var(--line);border-radius:10px;margin-bottom:10px;padding:6px}
  .scenario-head{flex-direction:column}
  .home-mini{text-align:left}
}

/* --- Product tiers / Property Intelligence gating --- */
.tier-card .tier-form{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch}
.tier-opt{flex:1 1 200px;display:block;margin:0;cursor:pointer;color:var(--text);
  background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.tier-opt:hover{border-color:var(--brand)}
.tier-opt.on{border-color:var(--brand);background:rgba(77,163,255,.12)}
.tier-opt input{width:16px;height:16px;margin:0 0 6px}
.tier-opt-name{display:block;font-weight:600;font-size:14.5px}
.tier-opt-tag{display:block;color:var(--muted);font-size:12.5px;margin-top:3px}
.tier-save{margin-top:12px;width:auto;padding:11px 20px}

.tier-badge{font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px;
  text-transform:uppercase;letter-spacing:.04em}
.tier-on{background:rgba(77,163,255,.16);color:var(--brand);border:1px solid var(--brand)}
.tier-off{background:rgba(147,160,181,.14);color:var(--muted);border:1px solid var(--line)}
.intel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px}
.intel-head h2{margin:0}
.intel-sub{font-size:13.5px;color:var(--brand);margin:16px 0 7px;
  border-top:1px solid var(--line);padding-top:13px}
.intel-sub:first-of-type{border-top:none;padding-top:0;margin-top:8px}
.facts.permits td:first-child{white-space:nowrap;color:var(--muted);width:54px;vertical-align:top}
.pill{display:inline-block;font-size:11px;color:var(--muted);border:1px solid var(--line);
  border-radius:999px;padding:1px 8px;margin-left:6px;vertical-align:middle}
.intel-locked{border-style:dashed;opacity:.92}
.intel-locked .lock-tag{color:var(--brand);font-weight:600;font-size:13.5px;margin:0 0 8px}

/* --- Permit trade chips --- */
.trade-summary{margin:0 0 10px;color:var(--muted);font-size:13px}
.trade-chip{display:inline-block;font-size:11px;font-weight:600;text-transform:uppercase;
  letter-spacing:.03em;padding:2px 8px;border-radius:999px;margin:0 5px 4px 0;
  border:1px solid transparent;vertical-align:middle}
.trade-plumbing{background:rgba(77,163,255,.16);color:#7ab8ff;border-color:#3a6ea5}
.trade-hvac{background:rgba(255,159,67,.16);color:#ffb066;border-color:#a5662a}
.trade-electrical{background:rgba(255,214,77,.16);color:#ffd84d;border-color:#a58a2a}
.trade-pool{background:rgba(56,209,201,.16);color:#5fe0d8;border-color:#2a9a93}
.trade-gas{background:rgba(255,107,107,.16);color:#ff8a8a;border-color:#a53e3e}
.trade-roofing{background:rgba(180,140,255,.16);color:#c4a6ff;border-color:#7a5ea5}

/* --- Expandable permit rows --- */
.permit-list{display:flex;flex-direction:column;gap:6px}
.permit-row{background:var(--panel2);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.permit-row[open]{border-color:var(--brand)}
.permit-row summary{display:flex;gap:10px;align-items:baseline;padding:9px 12px;cursor:pointer;
  list-style:none;font-size:13.5px}
.permit-row summary::-webkit-details-marker{display:none}
.permit-row summary::before{content:"▸";color:var(--muted);font-size:11px;line-height:1.5;flex:0 0 auto}
.permit-row[open] summary::before{content:"▾";color:var(--brand)}
.permit-row summary:hover{background:rgba(77,163,255,.06)}
.permit-year{color:var(--muted);white-space:nowrap;flex:0 0 auto;font-variant-numeric:tabular-nums}
.permit-main{flex:1 1 auto;min-width:0}
.permit-detail{padding:2px 12px 12px 32px;border-top:1px solid var(--line);background:var(--panel)}
.permit-desc{margin:10px 0 8px;font-size:13.5px;line-height:1.5;white-space:pre-wrap}
.permit-meta{margin:0;font-size:12px}

/* --- Replacement-opportunity scoring (the marketing brain) --- */
.opp-panel{margin:12px 0 16px;padding:12px 14px;background:var(--panel2);
  border:1px solid var(--line);border-radius:12px}
.opp-title{margin:0 0 10px;font-size:13.5px;font-weight:600;color:var(--text)}
.opp-grid{display:flex;flex-direction:column;gap:7px}
.opp-row{display:grid;grid-template-columns:minmax(200px,230px) 1fr 44px auto;gap:10px;align-items:center;font-size:13px}
.opp-work{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.opp-bar{height:8px;background:rgba(255,255,255,.07);border-radius:5px;overflow:hidden}
.opp-fill{display:block;height:100%;border-radius:5px}
.opp-score{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;text-align:right}
.opp-age{white-space:nowrap;font-size:12px}
.opp-hot .opp-fill{background:#ff6b6b}.opp-hot .opp-score{color:#ff8a8a}
.opp-warm .opp-fill{background:#ffb066}.opp-warm .opp-score{color:#ffb066}
.opp-cool .opp-fill{background:#5fe0d8}.opp-cool .opp-score{color:#5fe0d8}
.opp-unknown{margin:10px 0 0;font-size:12px}
@media(max-width:560px){.opp-row{grid-template-columns:120px 1fr 40px;}.opp-age{display:none}}

/* --- Permit signals (Tier 2) --- */
.signals{margin:6px 0 0;padding-left:18px}
.signals li{font-size:13.5px;line-height:1.5;margin-bottom:6px;color:var(--text)}

/* --- Targeting / Find prospects --- */
.tgt-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:14px}
.tgt-check{display:flex;align-items:center;gap:8px;align-self:end;color:var(--text)}
.tgt-check input{width:16px;height:16px;margin:0}
/* pill action buttons (shared: equipment, pipe, inspection, home record) */
.insp-actions{display:flex;align-items:center;gap:10px;flex:none;flex-wrap:wrap}
.insp-pill{display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;
  white-space:nowrap;min-width:150px;height:38px;box-sizing:border-box;line-height:1;
  border:1px solid #93d3ee;border-radius:10px;padding:0 14px;margin:0;vertical-align:middle;
  font-family:inherit;font-size:13px;font-weight:500;appearance:none;-webkit-appearance:none;
  background:#fff;color:#111;box-shadow:3px 3px 0 #b8e0f0, 0 1px 3px rgba(0,0,0,0.10)}
.insp-pill:hover{border-color:var(--brand);box-shadow:0 2px 5px rgba(0,0,0,.25)}
/* estimate builder: "Add from price book" / "All estimates" — side by side,
   equal width on a phone so the pair reads as one balanced row */
.est-links{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 16px}
@media(max-width:640px){
  .est-links{display:grid;grid-template-columns:1fr 1fr}
  .est-links .insp-pill{width:100%;min-width:0;height:44px}
}
.insp-pill input{display:none}
.insp-pill.blue{background:var(--brand2);color:#fff;border-color:var(--brand2);font-weight:600}
.insp-pill.blue:hover{background:var(--brand);border-color:var(--brand)}
.insp-pill.green{background:var(--high);color:#04240f;border-color:var(--high);font-weight:600}
.insp-pill.green:hover{filter:brightness(1.08)}
/* text field sized to sit inline with the pills */
.insp-field{height:38px;box-sizing:border-box;width:200px;line-height:1;border:1px solid #93d3ee;
  border-radius:10px;padding:0 12px;margin:0;font-family:inherit;font-size:13px;background:#fff;color:#111;
  box-shadow:0 1px 3px rgba(0,0,0,0.05)}
/* fixed widths so grouped buttons are uniform + balanced (never content-sized) */
.insp-pill.fixed{width:320px}
.insp-pill.fixed-sm{width:200px}

/* editable equipment rows — aligned columns: system | brand | year | age | badge | save | del */
.eq-cols{display:grid;grid-template-columns:165px minmax(150px,1fr) 78px 96px 70px 66px 44px;
  gap:10px;align-items:center}
.eq-head{padding:2px 0 7px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.eq-row{padding:10px 0;border-top:1px solid var(--line)}
.eq-row .eq-label{font-weight:500;line-height:1.25}
.eq-row input[type=text],.eq-row input[type=number]{width:100%}
.eq-row input[type=number]{height:40px;margin-top:0;border:1px solid var(--line);border-radius:10px;
  padding:0 10px;font:inherit;font-size:15px;background:var(--panel);color:var(--text)}
.eq-age{font-size:12.5px;color:var(--text);white-space:nowrap}
.eq-na{color:var(--muted);font-size:12px}
.eq-badge .band{font-size:11px}
.eq-row .newcall{width:100%;height:34px}
.eq-row .eq-nofilt{display:flex;align-items:center;gap:6px;font-size:13px;white-space:nowrap;cursor:pointer}
.eq-row .eq-nofilt input{width:16px;height:16px;margin:0}

/* price book — search + arrange toolbar */
.pb-toolbar{display:flex;align-items:center;gap:12px;margin:0 0 16px;flex-wrap:wrap}
#pb-search{flex:1;min-width:260px;max-width:540px;background:var(--panel2);
  border:1px solid var(--line);color:var(--text);border-radius:999px;
  padding:12px 20px;font-size:14.5px}
#pb-search:focus{outline:none;border-color:var(--brand2)}
body.pb-arranging .pb-pill{cursor:grab;border-style:dashed;border-color:var(--brand2)}
body.pb-arranging .pb-pill:active{cursor:grabbing}
.pb-pill.pb-dragging{opacity:.35}

/* price book — aligned catalog rows + add form */
.pb-add{display:grid;grid-template-columns:minmax(200px,1.5fr) 160px 110px 130px minmax(160px,1.5fr) max-content;
  gap:10px;align-items:center}
.pb-add input{width:100%}
.pb-cols{display:grid;grid-template-columns:minmax(220px,1fr) 170px 110px 120px 66px 44px;
  gap:10px;align-items:center}
.pb-head{padding:2px 0 7px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.pb-row{padding:9px 0;border-top:1px solid var(--line)}
.pb-row input{width:100%}
.pb-row .newcall{width:100%;height:34px}
/* clickable item pills → detail edit page — 2 columns, half width, no price */
/* 2 balanced columns that fill TOP-TO-BOTTOM (so 1/2/3-bath variants stack together),
   not left-right per row like a grid would. A .pb-family (standard/deluxe/premium of
   one item) is atomic — it never splits across the columns. */
.pb-list{columns:2;column-gap:10px}
.pb-family{break-inside:avoid}
/* hand-arranged sections: two EXPLICIT columns, rendered exactly as Mark placed them */
.pb-2col{display:grid;grid-template-columns:1fr 1fr;gap:0 10px;align-items:start}
.pb-col{min-height:52px}
body.pb-arranging .pb-col{outline:1px dashed rgba(245,166,35,.35);outline-offset:4px;border-radius:10px}
@media(max-width:640px){.pb-2col{grid-template-columns:1fr}}
.pb-pill{display:flex;align-items:center;gap:10px;break-inside:avoid;margin:0 0 10px;
  background:#fff;color:#111;border:1px solid #93d3ee;border-radius:10px;padding:12px 16px;
  text-decoration:none;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.pb-pill:hover{border-color:var(--brand2);box-shadow:0 2px 6px rgba(0,0,0,.3)}
.pb-pill .pb-name{font-size:14px;font-weight:500;color:#111;text-decoration:none;flex:1}
.pb-pill .pb-name:hover{color:var(--brand2);text-decoration:underline}
/* multi-select tick box on each item */
.pb-check{display:flex;align-items:center;cursor:pointer;flex:none}
.pb-check input{position:absolute;opacity:0;width:0;height:0}
.pb-checkmark{width:21px;height:21px;border-radius:6px;border:2px solid #9aa7b4;background:#fff;
  display:flex;align-items:center;justify-content:center;transition:.12s}
.pb-check input:checked + .pb-checkmark{background:var(--brand);border-color:var(--brand)}
.pb-check input:checked + .pb-checkmark::after{content:'✓';color:#fff;font-size:14px;font-weight:800}
.pb-check input:focus-visible + .pb-checkmark{box-shadow:0 0 0 3px rgba(77,163,255,.35)}
.pb-pick.is-picked{border-color:var(--brand);background:rgba(77,163,255,.07);
  box-shadow:0 0 0 1px var(--brand)}
/* sticky "add these to the estimate" bar */
/* display:flex below would otherwise beat the `hidden` attribute, and the
   "0 selected" bar sat on screen permanently with nothing ticked. */
.pb-bar[hidden]{display:none}
.pb-bar{position:fixed;left:0;right:0;bottom:0;z-index:60;display:flex;align-items:center;gap:12px;
  padding:12px 20px;background:var(--panel);border-top:2px solid var(--brand);
  box-shadow:0 -4px 18px rgba(0,0,0,.14);margin:0}
.pb-bar-info{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.pb-bar-info strong{font-size:14px}
.pb-bar-info small{font-size:11.5px;color:var(--muted);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
body.pb-has-bar{padding-bottom:76px}
@media(max-width:640px){
  .pb-list{columns:1}
  .pb-bar-info small{display:none}
}
/* detail edit form */
.pb-edit{max-width:100%}
.pb-edit label{display:block;margin:0 0 15px;font-size:12.5px;color:var(--muted)}
.pb-edit input[type=number]{width:100%;margin-top:6px;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:11px 12px;font-size:14px}
.pb-grid3{display:grid;grid-template-columns:1fr 1fr 150px;gap:14px}
.pb-grid4{display:grid;grid-template-columns:1fr 170px 1.1fr 1.5fr;gap:14px}
/* estimate builder — balanced contact fields + one-box segmented address */
.est-fields{display:grid;grid-template-columns:1fr 165px 1fr;gap:16px}
.est-fields label,.est-addr-wrap>label,.est-assignee{display:block;font-size:12px;color:var(--muted);margin:0}
.est-fields input{width:100%;margin-top:5px}
.est-addr-wrap{margin-top:16px}
.est-assignee{margin-top:16px;max-width:380px}
.est-assignee select{width:100%;margin-top:5px}
.addr-box{display:flex;align-items:stretch;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;overflow:hidden;margin-top:5px}
.addr-box input{border:none;background:transparent;color:var(--text);padding:12px 13px;
  font-size:14px;min-width:0;width:auto;margin:0;border-radius:0}
.addr-box input:focus{outline:none;background:rgba(77,163,255,.10)}
.addr-box .a-street{flex:3}
.addr-box .a-city{flex:2}
.addr-box .a-state{flex:0 0 130px}
.addr-box .a-zip{flex:0 0 140px}
.addr-box .a-div{width:1px;background:var(--line);margin:8px 0;flex:none}
.pb-grid4{display:grid;grid-template-columns:1fr 1fr 130px 130px;gap:14px;align-items:end}
.pb-internal{border:1px solid rgba(245,166,35,.45);background:rgba(245,166,35,.07);
  border-radius:12px;padding:15px 17px;margin:4px 0 18px}
.pb-lock{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;color:var(--med);margin-bottom:4px}
.pb-note{font-size:12px;color:var(--muted);margin:0 0 12px}
.pb-saved{display:inline-block;background:rgba(46,204,113,.15);color:var(--high);
  border:1px solid rgba(46,204,113,.4);border-radius:999px;padding:3px 12px;font-size:12.5px;
  font-weight:600;margin-left:12px;vertical-align:middle}

/* Pro Price Book — licensed catalog items */
.pb-pro{display:inline-block;padding:1px 7px;border-radius:5px;margin-left:6px;
  font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;vertical-align:1px;
  color:var(--brand);background:rgba(77,163,255,.1);border:1px solid rgba(77,163,255,.35)}
.pb-pill .pb-pro{flex:none;margin-left:auto}
/* A deterrent, not a lock: stops casual select-and-copy of licensed wording.
   Anyone who can see a price can still write it down — the license agreement is
   what actually protects the catalog. */
.pb-lic .pb-name,.pb-readonly{-webkit-user-select:none;user-select:none}
.pb-ro{display:grid;grid-template-columns:max-content 1fr;gap:8px 18px;margin:0 0 14px}
.pb-ro dt{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding-top:2px}
.pb-ro dd{margin:0}
.pb-ro-price{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}

/* import card + the result banner */
.pb-import{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}
.pb-mode{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer}
.pb-template{font-size:13px}
.pb-label{flex:0 1 240px}
.pb-result{margin:0 0 14px;padding:12px 16px;border-radius:12px;font-size:14px;
  background:rgba(46,204,113,.08);border:1px solid rgba(46,204,113,.35)}
.pb-result-bad{background:rgba(231,76,60,.08);border-color:rgba(231,76,60,.4)}
.pb-undo{display:block;margin:10px 0 0}
.pb-result-skips{margin-top:8px;font-size:13px;color:var(--muted)}
.pb-result-skips ul{margin:4px 0 0;padding-left:18px}

/* estimate / options builder */
/* 96px tier columns: at 56px the labels ran together ("PREFERREDPREMIUM") */
.est-cols{display:grid;grid-template-columns:minmax(220px,1fr) 100px 64px 96px 96px 96px 90px 44px;
  gap:10px;align-items:center}
.est-cols input[type=number]{width:100%}
.est-tiercol{text-align:center}
/* package column header doubles as select-all/clear for that column */
.est-tierhead{width:100%;cursor:pointer;font:inherit;font-size:10.5px;font-weight:700;
  text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:none;
  border:1px dashed var(--line);border-radius:7px;padding:4px 2px}
.est-tierhead:hover{color:var(--brand);border-color:var(--brand)}
.est-tierhead.all-on{color:var(--brand);border-style:solid;border-color:var(--brand);
  background:rgba(77,163,255,.10)}
/* whole cell is the tap target (techs use this on a tablet) */
.est-tiertoggle{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;
  padding:6px 2px;border-radius:9px;border:1px solid transparent}
.est-tiertoggle:hover{background:var(--panel2);border-color:var(--line)}
.est-tiertoggle input{position:absolute;opacity:0;width:0;height:0}
/* neutral grey when OFF — var(--line) is a sky blue too close to the ON state */
.est-tiermark{width:22px;height:22px;border-radius:6px;border:2px solid #9aa7b4;
  background:var(--panel);display:flex;align-items:center;justify-content:center;transition:.12s}
.est-tiertoggle input:checked + .est-tiermark{background:var(--brand);border-color:var(--brand)}
.est-tiertoggle input:checked + .est-tiermark::after{content:'✓';color:#fff;font-size:14px;font-weight:800}
.est-tiertoggle input:focus-visible + .est-tiermark{box-shadow:0 0 0 3px rgba(77,163,255,.35)}
.est-tiername{font-size:9.5px;font-weight:700;color:var(--muted);text-transform:uppercase;
  letter-spacing:.03em}
.est-tiertoggle input:checked ~ .est-tiername{color:var(--brand)}
.est-tierhelp{margin:-4px 0 12px;font-size:12.5px}
.est-samewarn{margin:12px 0 0;font-size:12.5px;font-weight:600;color:var(--brand2);
  background:rgba(245,166,35,.10);border:1px solid rgba(245,166,35,.4);
  border-radius:9px;padding:9px 12px}
@media(max-width:760px){
  .est-cols{grid-template-columns:minmax(150px,1fr) 84px 56px 74px 74px 74px 80px 40px;gap:7px}
  .est-tiername{font-size:8.5px}
}
/* phone-only captions; the table header does this job on wider screens */
.est-cap,.est-allword{display:none}
@media(max-width:640px){
  /* Phone layout (Mark picked "stacked cards", 2026-09-11) — the 8-column table
     was ~680px wide and ran off the screen. Same cells, re-flowed on a 12-column
     grid: name across the top; price 5 · qty 2 · total 3 · ✕ 2; then the three
     packages as colored pills, 4 each. `order` is needed because the package
     cells come before total/✕ in the markup. */
  .est-cols{grid-template-columns:repeat(12,minmax(0,1fr));gap:8px 6px;align-items:end}
  .est-c-name{grid-column:1/-1;order:1}
  .est-c-price{grid-column:span 5;order:2}
  .est-c-qty{grid-column:span 2;order:3}
  .est-c-total{grid-column:span 3;order:4}
  .est-c-x{grid-column:span 2;order:5}
  .est-tiercol{grid-column:span 4;order:6}
  .est-cols.pb-head .est-c-name,.est-cols.pb-head .est-c-price,.est-cols.pb-head .est-c-qty,
  .est-cols.pb-head .est-c-total,.est-cols.pb-head .est-c-x{display:none}
  .est-cols.pb-head{padding:0 0 10px;align-items:stretch}
  .est-allword{display:inline}
  .est-tierhead{height:100%;padding:7px 2px;font-size:12px;text-transform:none;letter-spacing:0}
  .est-cols input[type=number]{height:40px}
  .est-cols.pb-row{background:var(--panel2);border:1px solid #e2e8f0;border-radius:12px;
    padding:10px;margin-bottom:10px}
  .est-name{font-weight:600}
  .est-cap{display:block;font-size:10.5px;font-weight:600;color:var(--muted);
    text-transform:uppercase;letter-spacing:.03em;margin-bottom:3px}
  .est-linetotal{font-size:15px;font-weight:700;padding-bottom:10px;white-space:nowrap}
  .est-x{width:100%;height:40px;padding:0}
  /* package pill: the (hidden-on-desktop-style) mark stretches to fill the pill
     and takes the package's color when ticked — no :has() needed */
  .est-tiertoggle{position:relative;flex-direction:row;justify-content:center;height:42px;
    padding:0 4px;border:0;border-radius:999px}
  .est-tiertoggle:hover{background:none;border-color:transparent}
  .est-tiermark{position:absolute;inset:0;width:auto;height:auto;border-radius:999px;
    border:2px solid #cfd8e3;background:#fff}
  .est-tiertoggle input:checked + .est-tiermark::after{content:none}
  .est-t-good input:checked + .est-tiermark{background:#e74c3c;border-color:#e74c3c}
  .est-t-better input:checked + .est-tiermark{background:#2ecc71;border-color:#2ecc71}
  .est-t-best input:checked + .est-tiermark{background:#f5a623;border-color:#f5a623}
  .est-tiername{position:relative;font-size:12px;text-transform:none;letter-spacing:0;color:#8a96a3;
    white-space:nowrap}
  .est-tiertoggle input:checked ~ .est-tiername{color:#fff}
  .est-tiertoggle input:checked ~ .est-tiername::before{content:'✓ '}
}
.est-name{font-size:14px;font-weight:500}
.est-desc{font-size:12px;color:var(--muted);margin-top:2px}
.est-linetotal{text-align:right;font-weight:600;font-size:14px}
.est-x{padding:6px 12px;min-width:0}
.est-totals{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:14px}
.est-total-card{background:var(--panel2);border:1px solid var(--line);border-radius:12px;
  padding:14px 18px;text-align:center}
.est-total-sold{border-color:rgba(46,204,113,.6)}
.est-total-label{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.est-total-amt{font-size:24px;font-weight:600;margin-top:4px}
.est-badge{display:inline-block;border-radius:999px;padding:3px 12px;font-size:12px;
  font-weight:600;margin-left:10px;vertical-align:middle;border:1px solid var(--line);
  color:var(--muted);text-transform:capitalize}
.est-draft{}
.est-presented{color:var(--brand2);border-color:rgba(245,166,35,.4);background:rgba(245,166,35,.1)}
.est-sold{color:var(--high);border-color:rgba(46,204,113,.4);background:rgba(46,204,113,.12)}
.est-unsold{color:#e74c3c;border-color:rgba(231,76,60,.4);background:rgba(231,76,60,.1)}
.est-canceled{color:var(--muted);border-color:var(--line);background:var(--panel2);
  text-decoration:line-through}
/* home-record estimates rows */
.hest-cols{display:grid;
  grid-template-columns:92px minmax(120px,1fr) 82px 82px 82px 118px 132px 70px;
  gap:10px;align-items:center}

.fu-capture{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:7px}

/* company & team rows — aligned columns per the button/alignment standard */
.emp-cols{display:grid;gap:10px;align-items:center;
  grid-template-columns:minmax(140px,1fr) 170px 130px minmax(150px,1.2fr) 110px 96px 86px 62px 44px}
.emp-cols input[type=text],.emp-cols select{width:100%;background:var(--panel2);
  border:1px solid var(--line);color:var(--text);border-radius:10px;padding:9px 10px;font-size:13.5px}
.emp-add{padding:4px 0 2px}
.emp-cols .newcall{width:100%;height:34px}
.emp-inactive{opacity:.5}

/* full-width wrap for the calendar board */
.wrap-full{max-width:none;margin:20px auto;padding:0 24px}

/* schedule — full-page calendar grid (time slots × people) */
.sch-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.sch-head .insp-pill{min-width:0;padding:0 16px}
/* schedule nav: [Day|Month]  [‹ Today ›] [date] — one row on a computer, two on a phone */
.sch-nav{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.sch-seg,.sch-step{display:flex;align-items:center;gap:8px}
.sch-head .sch-nav .insp-pill{height:42px;font-size:14px;font-weight:600}
.sch-step .insp-pill[aria-label]{width:46px;padding:0;font-size:20px}
.sch-datepick{margin:0}
.sch-datepick input{height:42px;border:1px solid var(--line);border-radius:10px;padding:0 10px;
  font:inherit;font-size:15px;background:var(--panel);color:var(--text);width:170px}
.sch-scope{margin:10px 0 0;display:inline-block;font-size:13.5px;font-weight:600;color:var(--brand2);
  background:rgba(14,165,233,.08);border:1px solid rgba(14,165,233,.3);border-radius:999px;padding:6px 14px}
.sch-help{margin:8px 0 12px}
/* phone agenda (the day as a list) — hidden until the phone breakpoint */
.sch-agenda{display:none}
.ag-group{margin:16px 2px 6px;font-size:11px;font-weight:800;text-transform:uppercase;
  letter-spacing:.07em;color:var(--muted)}
.ag-person{background:var(--panel);border:1px solid var(--line);border-radius:14px;
  padding:12px;margin-bottom:10px}
.ag-who{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ag-name{font-weight:700;font-size:16px}
.ag-role{font-size:12.5px;color:var(--muted)}
.ag-count{margin-left:auto;font-size:12px;font-weight:700;color:var(--brand2);white-space:nowrap}
.ag-count.free{color:var(--high)}
.ag-job{display:flex;align-items:center;gap:12px;margin-top:10px;padding:12px;border-radius:12px;
  background:var(--panel2);border:1px solid #dbe3ec;border-left:5px solid var(--low);
  text-decoration:none;color:var(--text)}
.ag-job:active{background:#e8eef5}
.ag-job.sch-emergency{border-left-color:var(--emer)}
.ag-job.sch-sameday{border-left-color:var(--same)}
.ag-job.ag-st-done{opacity:.6}
.ag-time{flex:none;width:74px;font-size:13px;font-weight:700;line-height:1.3;color:var(--brand2)}
.ag-main{flex:1;min-width:0}
.ag-cust{font-weight:600;font-size:15px}
.ag-issue{font-size:13px;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;align-items:center}
.ag-status{font-size:11.5px;font-weight:700;background:#fff;border:1px solid var(--line);border-radius:999px;padding:2px 9px}
.ag-val{font-size:12.5px;font-weight:700;color:var(--high)}
.ag-go{flex:none;font-size:24px;color:var(--muted)}
@media(max-width:640px){
  .sch-head{gap:12px}
  .sch-head h1{font-size:24px}
  .sch-nav{display:grid;grid-template-columns:1fr;gap:10px;width:100%}
  .sch-seg{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .sch-step{display:grid;grid-template-columns:48px minmax(0,1fr) 48px;gap:10px}
  .sch-step.has-date{grid-template-columns:48px minmax(0,1fr) 48px minmax(0,1.3fr)}
  .sch-head .sch-nav .insp-pill{width:100%;height:46px;font-size:15px}
  .sch-step .insp-pill[aria-label]{width:100%}
  .sch-datepick input{width:100%;height:46px}
  .sch-wide-only{display:none}
  /* the day on a phone = the list, not the timeline */
  .sch-agenda{display:block}
  .tl-wrap{display:none}
  /* needs-scheduling rows: fields two across, full-width Schedule button */
  .ns-row input,.ns-row select{height:46px;font-size:16px}
  .ns-go{grid-column:1/-1;width:100%;height:48px;font-size:15px}
}
/* smallest phones: the date gets its own row rather than being clipped */
@media(max-width:380px){
  .sch-step.has-date{grid-template-columns:48px minmax(0,1fr) 48px}
  .sch-datepick{grid-column:1/-1}
}
.sch-cal-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
.sch-cal{width:100%;border-collapse:collapse;table-layout:fixed;min-width:900px}
.sch-cal th,.sch-cal td{border:1px solid var(--line);vertical-align:top}
.sch-cal thead th{position:sticky;top:0;z-index:2;background:var(--panel2);padding:10px 8px;text-align:center}
.sch-time-h{width:96px}
.sch-person{font-weight:600;font-size:14px}
.sch-person-role{font-size:11px;color:var(--muted);font-weight:400;margin-top:2px}
.sch-unassigned-h .sch-person{color:var(--muted)}
.sch-time{width:96px;background:var(--panel2);color:var(--muted);font-size:12.5px;font-weight:600;
  text-align:right;padding:12px 10px;white-space:nowrap;position:sticky;left:0;z-index:1}
.sch-cell{padding:8px;min-height:96px;height:96px;transition:background .1s}
.sch-cell.sch-over{background:rgba(77,163,255,.12);box-shadow:inset 0 0 0 2px var(--brand)}
.sch-card{background:var(--panel2);border:1px solid var(--line);border-left:4px solid var(--low);
  border-radius:9px;padding:9px 11px;margin-bottom:8px;cursor:grab}
.sch-card:last-child{margin-bottom:0}
.sch-card:active{cursor:grabbing}
.sch-card.sch-emergency{border-left-color:var(--emer)}
.sch-card.sch-sameday{border-left-color:var(--same)}
.sch-card.sch-st-done{opacity:.6}
.sch-card.sch-st-done .sch-card-top strong{text-decoration:line-through}
.sch-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13.5px}
.sch-urg{font-size:10px;font-weight:700;border-radius:999px;padding:2px 7px;white-space:nowrap}
.sch-urg-e{background:rgba(255,93,93,.15);color:var(--emer)}
.sch-urg-s{background:rgba(245,166,35,.15);color:var(--same)}
.sch-addr{font-size:12px;margin:4px 0}
.sch-issue{font-size:11.5px;color:var(--muted);font-style:italic;margin:3px 0}
.sch-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11.5px;margin:3px 0 8px}
.sch-val{color:var(--high);font-weight:600}
.sch-card-form{display:grid;grid-template-columns:1fr 34px;gap:6px}
.sch-card-form select{background:var(--panel);border:1px solid var(--line);color:var(--text);
  border-radius:8px;padding:5px 6px;font-size:11.5px;width:100%}
.sch-del{padding:5px 0;text-align:center}
/* booked-confirmation bar */
.sch-confirm{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px;
  border:1.5px solid var(--high);background:rgba(46,204,113,.09);border-radius:var(--radius);
  padding:12px 18px;font-size:14px}
.sch-confirm{flex-wrap:wrap}
.sch-confirm .insp-pill{min-width:0;padding:0 16px}

/* schedule-from-call card (result page) */
.sect-head{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;
  letter-spacing:.08em;margin:0 0 16px;padding-bottom:11px;border-bottom:1px solid var(--line)}
.sch-book{display:flex;flex-direction:column;gap:16px}
.sch-fields{display:grid;grid-template-columns:200px 1fr 1.7fr;gap:16px;align-items:end}
.sch-label{display:flex;flex-direction:column;font-size:12px;font-weight:600;
  color:var(--muted);letter-spacing:.02em;height:100%}
/* label text sits on one line; the hint rides inline so a longer caption can
   never push its control out of line with the others */
.sch-lbl-txt{display:block;margin-bottom:7px;white-space:nowrap}
/* display:inline overrides the global `label small{display:block}` (line ~72),
   which would otherwise drop the hint onto its own line and unbalance the row */
.sch-label small{display:inline;font-size:11px;color:var(--brand);font-weight:400;
  letter-spacing:0;margin:0 0 0 6px;text-transform:none}
/* margin-top:auto bottom-aligns every control, so the row reads as one line */
.sch-label input[type=date],.sch-label select{
  display:block;margin-top:auto;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:0 13px;height:44px;font-size:14px;width:100%}
.sch-label input[type=date]:focus,.sch-label select:focus{outline:none;border-color:var(--brand)}
.sch-btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.sch-btns .insp-pill{min-width:0;padding:0 18px;height:42px}

/* ---- booking calendar (result page) ---- */
.sch-cal-panel{border:1px solid var(--line);border-radius:12px;background:var(--panel2);
  padding:14px;display:grid;grid-template-columns:minmax(240px,300px) 1fr;gap:18px}
.sch-cal-top{grid-column:1/-1;display:flex;align-items:center;gap:10px}
.sch-cal-top strong{font-size:14px;min-width:132px;text-align:center}
.sch-cal-hint{font-size:12px;margin-left:auto}
.sch-btns .insp-pill.sm,.sch-cal-top .insp-pill.sm{height:30px;padding:0 11px;font-size:14px;min-width:0}
.sch-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}
.sch-dow span{text-align:center;font-size:10.5px;font-weight:700;color:var(--muted)}
.sch-days{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.sch-day{position:relative;aspect-ratio:1/1;border:1px solid transparent;border-radius:8px;
  background:var(--panel);color:var(--text);cursor:pointer;font:inherit;padding:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.sch-day.blank{background:none;cursor:default;pointer-events:none}
.sch-day:hover:not(.blank){border-color:var(--brand)}
.sch-day.today{border-color:var(--muted);font-weight:700}
.sch-day.sel{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:700}
.sch-dnum{font-size:12.5px}
.sch-dcount{font-size:9px;margin-top:2px;padding:0 4px;border-radius:6px;
  background:var(--brand);color:#fff;font-weight:700}
.sch-day.sel .sch-dcount{background:#fff;color:var(--brand)}
.sch-grid-wrap{min-width:0;display:flex;flex-direction:column}
.sch-grid-head{font-size:12.5px;font-weight:700;margin-bottom:8px}
.sch-grid-scroll{overflow-x:auto;flex:1}
.sch-book-grid{border-collapse:separate;border-spacing:4px;width:100%}
.sch-book-grid th{font-size:10.5px;color:var(--muted);font-weight:700;vertical-align:bottom;
  padding:0 2px 3px;text-align:center}
.sch-bg-slot{white-space:nowrap;text-align:right !important;font-size:10.5px}
.sch-bg-name{font-size:11px;color:var(--text)}
.sch-bg-role{font-size:9.5px;font-weight:400;color:var(--muted)}
.sch-bg-cell{width:100%;min-width:62px;height:30px;border:1px dashed var(--line);
  border-radius:7px;background:var(--panel);color:var(--muted);font:inherit;font-size:10.5px;
  cursor:pointer;padding:0}
.sch-bg-cell:hover{border-style:solid;border-color:var(--brand);color:var(--brand)}
.sch-bg-cell.busy{border-style:solid;background:var(--panel2);color:var(--text);font-weight:600}
.sch-bg-cell.picked{background:var(--brand);border:1px solid var(--brand);color:#fff;font-weight:700}
.sch-cal-foot{font-size:12px;margin:9px 0 0}

.sch-jobno{font-size:10px;font-weight:700;color:var(--muted);letter-spacing:.03em;
  font-variant-numeric:tabular-nums;margin:1px 0 2px}

/* quiet tech-only back links on the customer-facing option screens */
.opt-navback{display:flex;gap:16px;align-items:center;margin:0 0 14px;font-size:13px}
.opt-navback a{color:var(--muted);text-decoration:none;font-weight:600}
.opt-navback a:hover{color:var(--brand);text-decoration:underline}

/* ---- schedule timeline: crews down the left, the day across ---- */
.tl{border:1px solid var(--line);border-radius:12px;background:var(--panel);overflow:hidden}
.tl-head,.tl-row{display:grid;grid-template-columns:186px 1fr;align-items:stretch}
.tl-head{position:sticky;top:0;z-index:5;background:var(--panel2);border-bottom:1px solid var(--line)}
.tl-who{padding:9px 12px;border-right:1px solid var(--line);display:flex;
  flex-direction:column;justify-content:center;min-width:0}
.tl-who-head{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  color:var(--muted)}
.tl-name{font-size:13.5px;font-weight:700;line-height:1.2;overflow:hidden;text-overflow:ellipsis}
.tl-role{font-size:11px;color:var(--muted);margin-top:1px}
.tl-track{position:relative;min-height:62px}
.tl-ruler{min-height:30px}
.tl-hour{position:absolute;top:0;bottom:0;border-left:1px solid var(--line)}
.tl-hour span{position:absolute;top:7px;left:5px;font-size:10.5px;font-weight:700;color:var(--muted)}
.tl-grid{position:absolute;top:0;bottom:0;border-left:1px solid var(--line);opacity:.5}
.tl-group{padding:6px 12px;font-size:10.5px;font-weight:800;text-transform:uppercase;
  letter-spacing:.08em;color:var(--muted);background:var(--panel2);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.tl-row{border-bottom:1px solid var(--line)}
.tl-row:last-child{border-bottom:none}
.tl-row-un .tl-who{background:rgba(245,166,35,.07)}
.tl-drop{touch-action:pan-y}            /* let vertical scroll through, we own horizontal */
/* a job block */
/* top/height are set inline per lane so overlapping jobs stack instead of hiding */
.tl-job{position:absolute;border-radius:9px;overflow:hidden;
  background:var(--panel2);border:1px solid var(--brand);cursor:grab;
  box-shadow:0 1px 3px rgba(0,0,0,.16);min-width:34px;user-select:none}
.tl-job.is-dragging{cursor:grabbing;opacity:.85;box-shadow:0 6px 18px rgba(0,0,0,.3);z-index:9}
.tl-job-body{display:flex;flex-direction:column;gap:1px;padding:6px 14px 6px 9px;height:100%;
  text-decoration:none;color:var(--text);overflow:hidden;box-sizing:border-box}
.tl-job-cust{font-size:12.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-job-meta{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-job-issue{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;font-style:italic}
/* ⇄ reassign button on each block + its menu */
.tl-assign{position:absolute;top:3px;right:13px;z-index:3;width:20px;height:20px;padding:0;
  cursor:pointer;border:1px solid var(--line);border-radius:6px;background:var(--panel);
  color:var(--brand);font-size:12px;font-weight:800;line-height:1;display:flex;
  align-items:center;justify-content:center;opacity:.85}
.tl-assign:hover{opacity:1;background:var(--brand);color:#fff;border-color:var(--brand)}
.tl-menu{position:absolute;z-index:80;min-width:210px;max-height:60vh;overflow:auto;
  background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:6px;
  box-shadow:0 8px 28px rgba(0,0,0,.22)}
.tl-menu-h{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;
  color:var(--muted);padding:5px 9px 7px}
.tl-menu-date{display:flex;gap:6px;padding:0 9px 6px}
.tl-menu-date input{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:8px;padding:0 8px;height:34px;font-size:13px}
.tl-menu-date .insp-pill{height:34px;min-width:0;padding:0 12px;font-size:12.5px}
.tl-menu-i{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;
  text-align:left;cursor:pointer;background:none;border:none;border-radius:8px;
  padding:8px 10px;font:inherit;font-size:13.5px;font-weight:600;color:var(--text)}
.tl-menu-i small{font-size:11px;font-weight:400;color:var(--muted)}
.tl-menu-i:hover{background:var(--panel2);color:var(--brand2)}
.tl-menu-i.is-current{background:rgba(77,163,255,.12);color:var(--brand)}
.tl-menu-i.is-current::after{content:' ✓'}

.tl-resize{position:absolute;right:0;top:0;bottom:0;width:11px;cursor:ew-resize;
  background:linear-gradient(90deg,transparent,rgba(0,0,0,.10))}
.tl-resize:hover{background:var(--brand)}
/* urgency + status colouring, matching the old cards */
.tl-job.sch-emergency{border-color:var(--emer);background:rgba(220,38,38,.10)}
.tl-job.sch-sameday{border-color:var(--brand2);background:rgba(245,166,35,.10)}
.tl-st-done{opacity:.6;border-style:dashed}
.tl-st-on-my-way{box-shadow:inset 3px 0 0 var(--brand)}
.tl-st-arrived{box-shadow:inset 3px 0 0 var(--brand2)}
@media(max-width:760px){
  .tl-head,.tl-row{grid-template-columns:118px 1fr}
  .tl-job-issue{display:none}
}

/* multi-day work */
.tl-multi{border-style:dashed;border-width:2px}
.tl-daytag{font-size:9.5px;font-weight:800;background:var(--brand);color:#fff;
  border-radius:5px;padding:1px 5px;margin-right:3px;vertical-align:middle}
/* sold-work / payment card on an install job */
.sale-card{border-width:2px}
.sale-paid{border-color:var(--high)}
.sale-unpaid{border-color:var(--brand2)}
.sale-row{display:grid;grid-template-columns:1fr 1fr auto;gap:16px;align-items:center}
.sale-num{font-size:30px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.sale-lbl{font-size:12.5px;color:var(--muted);margin-top:5px}
.sale-badge{display:inline-block;font-size:13.5px;font-weight:800;border-radius:999px;padding:5px 14px}
.sale-badge.ok{background:rgba(46,204,113,.16);color:var(--high)}
.sale-badge.due{background:rgba(245,166,35,.16);color:var(--brand2)}
.sale-badge.none{background:var(--panel2);color:var(--muted)}
.sale-acts{display:flex;gap:9px;flex-wrap:wrap;justify-content:flex-end}
.sale-warn{margin:14px 0 0;font-size:13px;font-weight:700;color:var(--brand2);
  background:rgba(245,166,35,.10);border:1px solid rgba(245,166,35,.45);
  border-radius:9px;padding:10px 13px}
/* board badge on an install block */
.tl-paid{font-size:9.5px;font-weight:800;border-radius:5px;padding:1px 5px;margin-right:3px;
  vertical-align:middle}
.tl-paid.ok{background:var(--high);color:#fff}
.tl-paid.due{background:var(--brand2);color:#fff}
@media(max-width:760px){ .sale-row{grid-template-columns:1fr} .sale-acts{justify-content:flex-start} }

/* reschedule / reassign editor on the job page */
.resch{display:grid;grid-template-columns:1.1fr 1fr 1fr 1fr 1.5fr auto;gap:12px;align-items:end}
.resch .sch-label{height:auto}
.resch-go{height:44px;min-width:0;padding:0 22px}
@media(max-width:900px){ .resch{grid-template-columns:1fr 1fr} .resch-go{grid-column:1/-1} }

.job-extras{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:14px}
.job-span{display:flex;align-items:center;gap:8px;margin:0;font-size:13px}
.job-span label{color:var(--muted);font-weight:600}
.job-span select{background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:9px;padding:0 10px;height:38px;font-size:13.5px}

/* dispatcher's Needs-scheduling queue */
.ns-card{border-color:var(--brand2);box-shadow:inset 0 0 0 1px rgba(245,166,35,.25)}
.ns-row{display:grid;grid-template-columns:1fr 150px 108px 96px 150px auto;gap:9px;align-items:center;
  padding:11px;border:1px solid var(--line);border-radius:11px;background:var(--panel2);
  margin-bottom:9px}
.ns-info{min-width:0}
.ns-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.ns-val{font-weight:800}
.ns-wait{font-size:11px;font-weight:700;color:var(--brand2)}
.ns-sub{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ns-row input,.ns-row select{background:var(--panel);border:1px solid var(--line);
  color:var(--text);border-radius:9px;padding:0 10px;height:40px;font-size:13.5px;width:100%}
.ns-go{height:40px;min-width:0;padding:0 16px}
@media(max-width:760px){ .ns-row{grid-template-columns:1fr 1fr} .ns-info{grid-column:1/-1} }

/* "installing now or later?" prompt after a tech sells */
.inst-ask{margin:18px 0 0;padding:18px;border:2px solid var(--brand);border-radius:14px;
  background:rgba(77,163,255,.07)}
.inst-ask-q{font-size:19px;font-weight:800;margin-bottom:14px;text-align:center}
.inst-ask-btns{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.inst-btn{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;
  cursor:pointer;font:inherit;font-size:17px;font-weight:800;color:#fff;border:none;
  border-radius:12px;padding:16px 12px}
.inst-btn small{font-size:12px;font-weight:500;opacity:.92}
.inst-now{background:var(--high)}
.inst-later{background:var(--brand)}
.inst-btn:hover{filter:brightness(1.06)}
.inst-queued{margin:16px 0 0;font-size:15px;font-weight:700;color:var(--brand);
  background:rgba(77,163,255,.10);border:1px solid var(--brand);border-radius:10px;
  padding:11px 14px;text-align:center}
.inst-queued-now{color:var(--high);background:rgba(46,204,113,.10);border-color:var(--high)}
@media(max-width:640px){ .inst-ask-btns{grid-template-columns:1fr} }

.je-cancel{color:var(--brand2);border-color:rgba(245,166,35,.5)}
.je-cancel:hover{background:rgba(245,166,35,.10);border-color:var(--brand2)}
.je-del{color:var(--emer);border-color:rgba(220,38,38,.45)}
.je-del:hover{background:rgba(220,38,38,.09);border-color:var(--emer)}

/* "back to the job I'm on" banner (price book) */
.backjob{display:flex;align-items:center;gap:12px;margin:0 0 14px;padding:12px 16px;
  border:1px solid var(--brand);border-radius:12px;background:rgba(77,163,255,.08);
  text-decoration:none;color:var(--text)}
.backjob:hover{background:rgba(77,163,255,.15)}
.backjob-arrow{font-size:26px;font-weight:800;color:var(--brand);line-height:1;flex:none}
.backjob-main{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.backjob-main strong{font-size:15px}
.backjob-main small{font-size:12px;color:var(--muted);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.backjob-tag{flex:none;font-size:12.5px;font-weight:700;color:var(--brand);
  background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 12px}
@media(max-width:640px){ .backjob-tag{display:none} }

/* new-call segmented address (street on its own row, then city/state/ZIP) */
.addr-parts{display:grid;grid-template-columns:1fr 90px 130px;gap:8px;margin-top:8px}
.addr-parts input{width:100%;box-sizing:border-box}
.a-state{text-transform:uppercase}
.addr-bad{border-color:var(--low) !important;background:rgba(239,68,68,.06)}
.addr-err{margin:9px 0 0;font-size:13px;font-weight:600;color:var(--low);
  background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.35);
  border-radius:9px;padding:9px 11px}
@media(max-width:640px){ .addr-parts{grid-template-columns:1fr 70px 100px} }

/* jobs list on the home record */
.hjob{border:1px solid var(--line);border-radius:12px;padding:13px 15px;margin-bottom:10px;background:var(--panel2)}
.hjob-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.hjob-no{font-weight:800;color:var(--brand);text-decoration:none;font-variant-numeric:tabular-nums}
.hjob-no:hover{text-decoration:underline}
.hjob-date{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.hjob-tech{font-size:12.5px}
.hjob-total{margin-left:auto;font-weight:800;font-size:15px}
.hjob-issue{font-size:13px;font-style:italic;color:var(--muted);margin-top:6px}
.hjob-ests{display:flex;flex-direction:column;gap:6px;margin-top:9px}
.hjob-est{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);
  background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:7px 11px;font-size:13px}
.hjob-est:hover{border-color:var(--brand)}
.hjob-est-val{margin-left:auto;font-weight:700}
.hjob-noest{font-size:12.5px;margin-top:8px}

/* job card: open-job affordance */
.sch-card-open{font-weight:700;color:var(--text);text-decoration:none}
.sch-card-open:hover{color:var(--brand);text-decoration:underline}
.sch-open-btn{display:block;text-align:center;margin:8px 0 0;padding:6px;border-radius:8px;
  font-size:12px;font-weight:700;text-decoration:none;color:#fff;background:var(--brand2)}
.sch-open-btn:hover{background:var(--brand)}
.sch-st-on-my-way{box-shadow:inset 3px 0 0 var(--brand)}
.sch-st-arrived{box-shadow:inset 3px 0 0 var(--brand2)}

.nav-whoami{padding:8px 13px 7px;font-size:12.5px;font-weight:700;color:var(--text)}
.nav-whoami span{display:block;font-weight:400;font-size:11px;color:var(--muted);margin-top:1px}

/* ---- access & permissions ---- */
.acc-people{display:flex;flex-direction:column;gap:10px}
.acc-person{display:grid;grid-template-columns:1.4fr 1fr 1fr auto;gap:14px;align-items:end;
  padding:11px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
.acc-who{display:flex;flex-direction:column;gap:2px;font-size:13px}
.acc-who .muted{font-size:11.5px}
.acc-badge{font-size:10.5px;font-weight:700;margin-top:3px}
.acc-badge.on{color:var(--high)}
.acc-badge.off{color:var(--muted)}
.acc-person input[type=text]{background:var(--panel);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:0 13px;height:44px;font-size:14px;width:100%;
  margin-top:auto}
.acc-actions{display:flex;gap:8px}
.acc-actions .insp-pill{height:44px;padding:0 16px;min-width:0}
/* access page: schedule "who sees what" panel (drives the matrix's Schedule boxes) */
.acc-sched{display:flex;flex-direction:column}
.acc-sched-row{display:grid;grid-template-columns:200px minmax(0,340px) auto;gap:16px;align-items:center;
  padding:10px 0;border-top:1px solid var(--line)}
.acc-sched-row:first-child{border-top:0}
.acc-sched-row.is-locked{opacity:.6}
.acc-sched-who{font-size:14.5px}
.acc-sched-see{height:44px;border:1px solid var(--line);border-radius:10px;padding:0 10px;
  font:inherit;font-size:15px;background:var(--panel);color:var(--text)}
.acc-sched-edit{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.acc-sched-edit input{width:20px;height:20px;accent-color:var(--brand)}
@media(max-width:640px){
  .acc-sched-row{grid-template-columns:1fr;gap:8px}
  .acc-sched-see{width:100%;font-size:16px}
}
.acc-matrix-scroll{overflow-x:auto}
.acc-matrix{border-collapse:collapse;width:100%;font-size:12.5px}
.acc-matrix th,.acc-matrix td{border:1px solid var(--line);padding:7px 9px}
.acc-matrix thead th{vertical-align:top;text-align:center;min-width:104px;background:var(--panel2)}
.acc-matrix thead th.is-locked{opacity:.6}
.acc-cap-h{text-align:left !important;min-width:230px}
.acc-role{font-weight:700;font-size:12px}
.acc-role-note{font-weight:400;font-size:10px;color:var(--muted);margin-top:3px;
  line-height:1.3;white-space:normal}
.acc-cap{text-align:left}
.acc-cell{text-align:center}
.acc-cell input{width:17px;height:17px;cursor:pointer}
.acc-cell input:disabled{cursor:not-allowed;opacity:.32}
.acc-group td{background:var(--panel2);font-weight:700;font-size:10.5px;
  text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
/* copy deterrent for roles without copy rights (NOT a security control) */
body.no-copy{-webkit-user-select:none;-moz-user-select:none;user-select:none}
body.no-copy input,body.no-copy textarea,body.no-copy .allow-copy,
body.no-copy .allow-copy *{-webkit-user-select:text;-moz-user-select:text;user-select:text}
@media(max-width:640px){ .acc-person{grid-template-columns:1fr} }

/* ---- month calendar (/schedule?view=month) ---- */
.mon-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.mon-dow span{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;
  letter-spacing:.06em;padding-left:2px}
.mon-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.mon-cell{display:flex;flex-direction:column;gap:3px;min-height:118px;padding:7px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel);
  text-decoration:none;color:inherit;overflow:hidden}
.mon-cell.blank{background:none;border-color:transparent}
a.mon-cell:hover{border-color:var(--brand)}
.mon-cell.today{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}
.mon-cell-top{display:flex;align-items:center;justify-content:space-between}
.mon-dnum{font-size:12.5px;font-weight:700}
.mon-count{font-size:9.5px;font-weight:700;background:var(--brand);color:#fff;
  border-radius:7px;padding:1px 6px}
.mon-job{font-size:10.5px;line-height:1.25;background:var(--panel2);border-radius:6px;
  padding:3px 5px;border-left:3px solid var(--brand);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.mon-job.is-done{opacity:.55;border-left-color:var(--muted)}
.mon-job-slot{font-weight:700;margin-right:3px}
.mon-job-who{display:block;color:var(--muted);font-size:9.5px}
.mon-more{font-size:9.5px;color:var(--muted);font-weight:600;padding-left:4px}
@media(max-width:640px){
  .mon-cell{min-height:74px;padding:4px}
  .mon-job-who,.mon-job{display:none}
}

/* customer contact card (result page) */
.contact-strip{display:flex;flex-direction:column;gap:0}
.contact-fields{display:grid;grid-template-columns:1fr 1.3fr;gap:16px;margin-bottom:14px}
.contact-field{display:flex;flex-direction:column;gap:6px}
.contact-field input[type=text]{margin-top:0;width:100%}
.contact-action{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.contact-action .insp-pill{min-width:0;padding:0 16px}
.field-lbl{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}

/* equipment scanner controls (result page) */
.eq-scanner{display:flex;flex-direction:column;gap:11px}
.eq-capture{display:flex;gap:10px;flex-wrap:wrap}
.eq-date-row{display:flex;flex-direction:column;gap:6px}
.eq-date-row .insp-field{width:100%;max-width:280px}
.eq-scan-row{display:flex;flex-direction:column;gap:5px}
.eq-scan-row .insp-pill{min-width:0;padding:0 20px;width:240px}

@media(max-width:760px){
  .sch-fields{grid-template-columns:1fr}
  .sch-cal-panel{grid-template-columns:1fr}
  .sch-cal-hint{display:none}
  .contact-fields{grid-template-columns:1fr}
  .eq-scan-row .insp-pill{width:100%}
}

/* follow-ups-due work list (one-tap send) */
.fu-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 0;border-top:1px solid var(--line)}
.fu-row:first-of-type{border-top:none}
.fu-who{flex:1;min-width:300px}
.fu-preview{font-size:12.5px;color:var(--muted);font-style:italic;margin-top:5px;line-height:1.45;max-width:640px}
.fu-acts{flex:none}
.fu-acts .insp-pill{min-width:0;padding:0 14px}

/* follow-up aging (recapture clock) */
.fu-badge{display:inline-block;border-radius:999px;padding:3px 11px;font-size:11.5px;font-weight:600;white-space:nowrap}
.fu-hot{background:rgba(46,204,113,.16);color:var(--high);border:1px solid rgba(46,204,113,.45)}
.fu-warm{background:rgba(245,166,35,.14);color:var(--med);border:1px solid rgba(245,166,35,.4)}
.fu-cold{background:rgba(122,134,153,.14);color:var(--low);border:1px solid rgba(122,134,153,.4)}
/* open-estimate recapture banner on the call result */
.recapture-banner{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  border:1.5px solid var(--high);background:rgba(46,204,113,.09);border-radius:var(--radius);
  padding:13px 18px}
.recapture-banner .rc-main{flex:1;min-width:260px;font-size:14px;color:var(--text)}
.recapture-banner .rc-main strong{color:var(--high)}
.recapture-banner .insp-pill{min-width:0;padding:0 16px}
.recapture-banner .rc-reply{margin:6px 0 4px;padding:8px 12px;background:var(--panel2);
  border-left:3px solid var(--brand);border-radius:6px;font-style:italic;
  white-space:pre-wrap;max-height:120px;overflow:auto}

.est-filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.est-filters .insp-pill{padding:6px 14px}
.est-list-cols{display:grid;
  grid-template-columns:92px minmax(110px,1fr) minmax(140px,1.3fr) 44px 78px 78px 78px 118px 128px 70px;
  gap:10px;align-items:center}
/* customer-facing option cards — professional pricing-page look; the tier color is a
   top accent band + chip + checkmarks (Good red / Better green / Best yellow) */
.opt-head{text-align:center;max-width:900px;margin:0 auto}
/* The customer's option cards (Essential / Preferred / Premium).
   Cards are held to ~380px so they read as distinct tiles instead of stretching
   edge to edge — but by capping the ROW (3 cards + 2 gaps = 1196px), not each
   column. A max on the column itself (minmax(280px,380px)) backfires: auto-fit
   counts how many columns fit at their MAXIMUM, so an iPad (1124px of room)
   got two columns and Premium wrapped — and customers compare all three side
   by side. Flexible columns under a row cap keep all three on a tablet. */
.opt-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:28px;max-width:1196px;margin:0 auto;padding-top:16px}
/* Rounded and 3D: a soft top-to-bottom gradient, a solid "ledge" under the card
   (the same raised-tile language as the app's pill buttons), then a soft drop
   shadow. The tier colour is the card's own top border, so it follows the
   rounded corners — a separate bar on top couldn't bend with a 28px curve. */
.opt-card{background:linear-gradient(180deg,#ffffff 0%,#f6f8fb 100%);color:#16233a;
  border:1px solid #e3e7ee;border-top:7px solid #cfd6e0;border-radius:28px;
  cursor:pointer;position:relative;overflow:visible;padding:38px 30px 30px;
  box-shadow:inset 0 1px 0 #fff,0 6px 0 #d9dfe8,0 16px 34px rgba(0,0,0,.26);
  display:flex;flex-direction:column;transition:transform .15s,box-shadow .15s}
/* lift on hover and press down on tap — only where tapping the card does something
   (the signing page shows the same cards, but there they aren't buttons) */
.opt-card[onclick]:hover{transform:translateY(-3px);
  box-shadow:inset 0 1px 0 #fff,0 9px 0 #d9dfe8,0 22px 44px rgba(0,0,0,.32)}
.opt-card[onclick]:active{transform:translateY(3px);
  box-shadow:inset 0 1px 0 #fff,0 2px 0 #d9dfe8,0 8px 18px rgba(0,0,0,.22)}
.opt-good{border-top-color:#e74c3c}
.opt-best{border-top-color:#f5a623}
/* Preferred keeps its full green outline (the one we point people to) */
.opt-card.opt-better{border-width:2px;border-top-width:7px;border-color:#2ecc71}
@media(max-width:640px){
  /* a little narrower than the screen, so each card sits as its own tile */
  .opt-cards{padding:16px 10px 0;gap:30px}
  .opt-card{padding:36px 22px 26px}
}
.opt-chip{display:inline-block;align-self:center;font-size:21px;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;padding:7px 20px;border-radius:999px;
  margin:0 0 18px}
.opt-good .opt-chip,.optd-good .opt-chip{background:rgba(231,76,60,.1);color:#c0392b}
.opt-better .opt-chip,.optd-better .opt-chip{background:rgba(46,204,113,.12);color:#1e8f4d}
.opt-best .opt-chip,.optd-best .opt-chip{background:rgba(245,166,35,.16);color:#a96f0e}
.opt-popular{position:absolute;top:-14px;left:50%;transform:translateX(-50%);
  background:#1e8f4d;color:#fff;border-radius:999px;padding:5px 18px;font-size:14px;
  font-weight:700;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.25)}
.opt-desc{font-size:15px;line-height:1.5;color:#5b6b83;margin:10px 0 2px;min-height:68px;text-align:center}
.optd-desc{font-size:17px;line-height:1.55;color:#5b6b83;margin:8px auto 4px;max-width:640px}
.opt-chosen{margin:24px auto 0;width:max-content;max-width:100%;background:rgba(46,204,113,.12);
  color:#1e8f4d;border:1px solid rgba(46,204,113,.45);border-radius:999px;
  padding:8px 22px;font-size:21px;font-weight:700;text-align:center}
/* a subtly highlighted card border when this option was the one accepted */
.opt-card.opt-accepted{box-shadow:0 0 0 3px rgba(46,204,113,.45),0 6px 0 #d9dfe8,0 16px 34px rgba(0,0,0,.26)}
/* price, the full-price switch and the total all centre under the centred tier
   label and description, instead of hugging the left edge */
.opt-monthly{font-size:58px;font-weight:700;letter-spacing:-.02em;color:#16233a;line-height:1.05;text-align:center}
.opt-monthly .opt-mo{font-size:25px;font-weight:500;color:#8a94a3;letter-spacing:0}
.opt-fullprice{display:none;font-size:29px;font-weight:600;color:#3a4354;margin:8px 0 0;text-align:center}
.opt-fullprice.show{display:block}
.opt-lines{flex:1;margin-top:24px}
.opt-line-name{font-size:24px;font-weight:500;color:#2a3140;line-height:1.35;
  border-top:1px solid #eef1f5;padding:14px 0;display:flex;gap:14px;align-items:baseline}
.opt-check{font-weight:700;flex:none}
.opt-good .opt-check{color:#e74c3c}
.opt-better .opt-check{color:#2ecc71}
.opt-best .opt-check{color:#f5a623}
/* the button inside the card: a rounded, raised pill to match the card around it */
.opt-view{margin-top:26px;align-self:center;min-width:min(260px,100%);text-align:center;
  border:1.5px solid #d4dae3;border-radius:999px;padding:13px 30px;font-size:21px;font-weight:600;
  color:#2a3140;background:linear-gradient(180deg,#ffffff,#eef2f7);
  box-shadow:0 3px 0 #d4dae3,0 6px 14px rgba(0,0,0,.10);transition:background .15s}
.opt-card:hover .opt-view{background:linear-gradient(180deg,#ffffff,#e5ebf3)}
.opt-finance-note{font-size:19px;color:var(--muted);margin:20px auto 0;text-align:center;max-width:900px}
/* the "show full price" switch */
.opt-switch{display:inline-flex;align-items:center;align-self:center;gap:12px;cursor:pointer;margin:14px 0 0;user-select:none}
.opt-switch input{display:none}
.opt-slider{width:52px;height:30px;background:#93d3ee;border-radius:999px;position:relative;
  transition:background .15s;flex:none}
.opt-slider::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;
  background:#fff;border-radius:50%;transition:left .15s;box-shadow:0 1px 2px rgba(0,0,0,.3)}
.opt-switch input:checked + .opt-slider{background:#2ecc71}
.opt-switch input:checked + .opt-slider::after{left:25px}
.opt-switch-text{font-size:21px;color:#6b7684}
/* full-screen option detail + sign & accept — centered, wide, same design language */
/* The single-option page the customer signs on — same raised, rounded tile as
   the option cards (gradient, bottom ledge, tier colour as the top border). */
.optd{background:linear-gradient(180deg,#ffffff 0%,#f6f8fb 100%);color:#16233a;
  border:1px solid #e3e7ee;border-top:8px solid #cfd6e0;border-radius:28px;
  position:relative;overflow:hidden;padding:46px 54px 40px;max-width:1000px;margin:0 auto;
  box-shadow:inset 0 1px 0 #fff,0 6px 0 #d9dfe8,0 16px 34px rgba(0,0,0,.26)}
.optd-good{border-top-color:#e74c3c}
.optd-best{border-top-color:#f5a623}
.optd.optd-better{border-width:2px;border-top-width:8px;border-color:#2ecc71}
.optd-head{text-align:center}
.optd-head .opt-chip{margin:6px 0 10px}
.optd-tag{display:block;width:max-content;max-width:100%;margin:0 auto 12px;background:#1e8f4d;
  color:#fff;border-radius:999px;padding:5px 16px;font-size:15px;font-weight:700;
  box-shadow:0 3px 10px rgba(0,0,0,.2)}
.optd-customer{font-size:23px;color:#6b7684;margin:0 0 6px}
/* Total and monthly side by side. The MONTHLY is the headline number — total is
   deliberately the smaller of the two (Mark: "total too large, make it smaller
   than the monthly"). */
.optd-prices{display:flex;justify-content:space-evenly;align-items:center;gap:28px;
  flex-wrap:wrap;margin:14px 0 4px}
.optd-price-cap{font-size:21px;font-weight:600;color:#8a94a3;text-transform:uppercase;
  letter-spacing:.1em;margin:0 0 2px}
.optd-total{font-size:48px;font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.05;color:#3a4354}
.optd-monthly{font-size:76px;font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.05}
.optd-permo{font-size:34px;font-weight:500;color:#8a94a3;letter-spacing:0}
.optd-terms{font-size:20px;color:#8a94a3;margin-top:6px}
/* the monthly payment as a raised pill → the financing application. "/mo" sits
   under the number so the number is truly centred; the small "Apply" line tells
   the customer it's tappable. Green = money/approval, same on every tier. */
.optd-monthly-pill{display:inline-flex;flex-direction:column;align-items:center;min-width:220px;
  text-decoration:none;color:inherit;background:linear-gradient(180deg,#f3fbf6,#e3f5ea);
  border:2px solid #2ecc71;border-radius:26px;padding:14px 36px 12px;
  box-shadow:0 5px 0 #b6e6c8,0 12px 24px rgba(0,0,0,.14);transition:transform .12s,box-shadow .12s}
.optd-monthly-pill:hover{transform:translateY(-2px);box-shadow:0 7px 0 #b6e6c8,0 16px 30px rgba(0,0,0,.18)}
.optd-monthly-pill:active{transform:translateY(3px);box-shadow:0 2px 0 #b6e6c8,0 6px 12px rgba(0,0,0,.12)}
.optd-monthly-pill:focus-visible{outline:3px solid #1e8f4d;outline-offset:4px}
.optd-monthly-pill .optd-monthly{line-height:1}
.optd-monthly-pill .optd-permo{font-size:24px;line-height:1.1;margin-top:2px}
.optd-apply{margin-top:8px;font-size:17px;font-weight:700;color:#1e8f4d;letter-spacing:.02em}
/* financing application screen (placeholder until each shop connects a lender) */
.fin-title{font-size:40px;margin:4px 0 6px}
.fin-amounts{display:flex;justify-content:center;align-items:flex-end;gap:48px;flex-wrap:wrap;margin:18px 0 8px}
.fin-total{font-size:48px;font-weight:700;color:#3a4354;line-height:1.05}   /* smaller than the monthly, per Mark */
.fin-monthly{font-size:64px;font-weight:700;line-height:1}
.fin-permo{font-size:22px;color:#8a94a3;font-weight:500}
.fin-soon{margin:28px auto 8px;max-width:560px;text-align:center;background:#f4f8fb;
  border:1.5px dashed #c9d3de;border-radius:20px;padding:24px 22px}
.fin-soon-icon{font-size:40px}
.fin-soon-title{font-size:24px;font-weight:700;margin:6px 0}
.fin-soon-text{font-size:18px;color:#5b6b83;margin:0}
.fin-back{text-align:center;margin-top:22px}
.fin-back-pill{padding:14px 28px}
.fin-back-pill .optd-apply{margin:0}
@media(max-width:640px){
  .fin-title{font-size:28px}
  .fin-amounts{flex-direction:column;align-items:center;gap:14px}
  .fin-total{font-size:38px}
  .fin-monthly{font-size:54px}
  .fin-soon-title{font-size:20px}
  .fin-soon-text{font-size:16px}
}
@media(max-width:640px){
  .optd-monthly-pill{min-width:0;width:100%;max-width:300px;padding:12px 20px 10px}
  .optd-monthly-pill .optd-permo{font-size:20px}
  .optd-apply{font-size:15px}
}
.optd-price-div{width:1.5px;align-self:stretch;background:#e8ecf1}
/* what's included — centred, including the warranty wording in each description */
.optd-lines{margin:26px 0 6px}
.optd-line{border-top:1px solid #eef1f5;padding:18px 0;text-align:center}
.optd-line-name{font-size:31px;font-weight:600;line-height:1.25}
.optd-line-desc{font-size:25px;color:#3a4354;margin:8px auto 0;max-width:40em;white-space:pre-line;line-height:1.45}
/* sign & accept — centred as a block */
.optd-sign{border-top:2px solid #eef1f5;margin-top:16px;padding-top:20px;text-align:center}
.optd-sign-title{font-size:29px;font-weight:600;margin:0 0 12px}
.optd-sign-name{display:block;width:100%;max-width:560px;margin:0 auto 12px;background:#fff;
  border:1px solid #93d3ee;border-radius:10px;padding:12px 14px;font-size:27px;color:#16233a}
#sig-pad{display:block;width:100%;max-width:640px;margin:0 auto;background:#fafbfc;
  border:1.5px dashed #9aa3af;border-radius:10px;cursor:crosshair;
  touch-action:none;user-select:none;-webkit-user-select:none}
.optd-sign-hint{margin:6px 0 14px;font-size:24px}
.optd-sign-actions{justify-content:center}
.optd-sign-btn,.optd-clear-btn{font-size:26px;padding:14px 26px;height:auto}
.optd-sign-btn{min-width:340px}
.optd-accepted{border-top:2px solid #e8eaee;margin-top:14px;padding-top:16px;text-align:center}
.optd-sigimg{display:block;max-width:420px;margin:0 auto;border:1px solid #e0e3e8;border-radius:10px;background:#fafbfc}
@media(max-width:640px){
  .optd{padding:34px 20px 28px;margin:0 6px;border-radius:24px}
  .optd-head .opt-chip{font-size:17px;padding:6px 16px}
  .optd-customer{font-size:17px}
  /* stacked on a phone, so the between-prices divider would hang loose */
  .optd-price-div{display:none}
  .optd-prices{flex-direction:column;gap:16px}
  .optd-total{font-size:40px}
  .optd-monthly{font-size:64px}
  .optd-permo{font-size:28px}
  .optd-terms{font-size:16px}
  .optd-line-name{font-size:24px}
  .optd-line-desc{font-size:19px}
  .optd-sign-title{font-size:22px}
  .optd-sign-name{font-size:18px}
  .optd-sign-hint{font-size:16px}
  .optd-sign-btn,.optd-clear-btn{min-width:0;width:100%;font-size:20px}
}

/* inspection photo thumbnails — large, fill the row, white rounded frame */
.insp-room{margin:18px 0 9px;font-size:15px;font-weight:600;color:var(--text)}
.insp-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:16px;margin:0 0 6px}
.insp-thumb{margin:0;text-align:center}
.insp-thumb img{width:100%;aspect-ratio:1;object-fit:cover;display:block;border-radius:14px;
  border:3px solid #fff;box-shadow:0 2px 7px rgba(0,0,0,.4)}
.insp-thumb a:hover img{box-shadow:0 4px 13px rgba(0,0,0,.55)}
.insp-thumb figcaption{font-size:13.5px;line-height:1.3;margin-top:8px;color:var(--text)}

.tgt-tbl{width:100%;border-collapse:collapse;margin-top:6px}
.tgt-tbl th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;
  color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line)}
.tgt-tbl td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top;font-size:14px}
.tgt-tbl td:first-child{white-space:nowrap}
.tgt-tbl summary{cursor:pointer;list-style:none}
.tgt-tbl summary::-webkit-details-marker{display:none}
.tgt-tbl summary::before{content:"▸ ";color:var(--muted);font-size:11px}
.tgt-tbl details[open] summary::before{content:"▾ ";color:var(--brand)}
.tgt-tbl .reasons{margin:8px 0 4px;padding-left:18px}
.tgt-tbl .reasons li{font-size:13px;line-height:1.45;margin-bottom:4px;color:var(--muted)}
.tgt-tbl .band{min-width:34px;text-align:center;border-radius:8px}

/* --- Campaign Manager (App 2) --- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-bottom:16px}
.kpi{text-align:center;padding:16px 12px}
.kpi-label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.kpi-num{font-size:24px;font-weight:700;margin-top:6px}
.kpi.hero{border-color:var(--brand);background:rgba(77,163,255,.08)}
.kpi.hero .kpi-num{color:var(--brand)}
.camp-list{display:flex;flex-direction:column;gap:10px}
.camp{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:13px 15px}
.camp.has-flag{border-color:#a5662a}
.camp-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.camp-name{font-weight:600;font-size:15px}
.camp-meta{color:var(--muted);font-size:12.5px;margin:5px 0 9px}
.camp-stats{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:var(--muted)}
.camp-stats b{color:var(--text);font-size:14px}
.camp-stats .cpb b{color:var(--brand)}
.status{font-size:10px;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:999px;margin-left:6px}
.status-active{background:rgba(46,204,113,.16);color:var(--high)}
.status-paused{background:rgba(245,166,35,.16);color:var(--med)}
.status-ended{background:rgba(122,134,153,.16);color:var(--low)}
.flags{margin:11px 0 0;padding-left:2px;list-style:none}
.flags li{font-size:13px;line-height:1.45;margin-bottom:6px;padding:7px 10px;border-radius:8px}
.flag-stop{background:rgba(220,38,38,.08);color:#b91c1c;border:1px solid #dc2626}
.flag-warn{background:rgba(215,119,0,.08);color:#92400e;border:1px solid #d97706}
.form-actions{display:flex;align-items:center;gap:16px;margin-top:18px}
.danger-link{background:none;border:none;color:#ff8a8a;cursor:pointer;font-size:13px;text-decoration:underline}

/* Theme number/date inputs + selects inside the new app forms (targeting + campaigns) */
.tgt-grid input[type=number],.tgt-grid input[type=date],.tgt-grid input[type=text],.tgt-grid select{
  width:100%;margin-top:6px;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:10px;padding:10px 11px;font-size:14px}
.tgt-grid input:focus,.tgt-grid select:focus{outline:none;border-color:var(--brand)}
.tgt-grid label small{display:inline;color:var(--low)}

/* --- Launch playbook --- */
.pb-pick{display:flex;gap:16px;flex-wrap:wrap;margin-top:6px}
.pb-pick label{margin:0}
.pb-pick select{margin-top:6px;background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:10px;padding:10px 11px;font-size:14px;min-width:200px}
.pb-steps{display:flex;flex-direction:column;gap:14px;margin-top:8px}
.pb-step{display:flex;gap:14px}
.pb-num{flex:0 0 auto;width:32px;height:32px;border-radius:50%;background:var(--brand);color:#fff;
  font-weight:700;display:flex;align-items:center;justify-content:center}
.pb-body{flex:1 1 auto;min-width:0}
.pb-body h3{margin:2px 0 4px;font-size:15.5px}
.pb-sub{margin:8px 0}
.pb-tag{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  color:var(--brand);background:rgba(77,163,255,.12);border:1px solid var(--brand);border-radius:999px;padding:2px 9px}
.pb-sub ul{margin:6px 0 0;padding-left:18px}
.pb-sub li{font-size:13.5px;margin-bottom:4px}
.pb-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.pb-channel{padding:11px 0;border-bottom:1px solid var(--line)}
.pb-channel:last-child{border-bottom:none}
.pb-ch-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.pb-setup{cursor:pointer;color:var(--brand);font-size:13px}
.pb-ol{margin:8px 0 0;padding-left:20px}
.pb-ol li{font-size:13.5px;margin-bottom:5px}
.pb-dont{list-style:none;margin:8px 0 0;padding:0}
.pb-dont li{font-size:13.5px;margin-bottom:6px;color:#ffb066}
.pb-setup-lq{color:var(--med)}
.pb-setup-meta{color:var(--brand2)}
.pb-setup-search{color:#7c3aed}
.pb-setup-mail{color:#0d9488}
.pb-tag-teal{background:rgba(13,148,136,.12);color:#0d9488}
.pb-ms-audiences{display:flex;flex-direction:column;gap:10px}
.pb-ms-aud{padding:12px 14px;background:var(--panel2);border:1px solid var(--line);border-radius:10px}
.pb-ms-aud-head{display:flex;align-items:center;gap:10px;margin-bottom:2px}
.pb-ms-roi{font-size:12px;font-weight:600;color:var(--high);margin:0}
.pb-tag-blue{background:rgba(14,165,233,.12);color:var(--brand2)}
.pb-lq{margin-top:10px;padding:14px 16px;background:var(--panel2);border:1px solid var(--line);border-radius:12px}
.pb-lq-note{font-size:13.5px;font-weight:600;color:var(--text);margin:0 0 4px}
.pb-lq-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}
.pb-lq-col{border-radius:10px;padding:12px 14px}
.pb-lq-col ul{margin:6px 0 0;padding-left:18px}
.pb-lq-col ul li{font-size:13px;margin-bottom:4px}
.pb-lq-on{background:rgba(22,163,74,.07);border:1px solid rgba(22,163,74,.25)}
.pb-lq-off{background:rgba(220,38,38,.06);border:1px solid rgba(220,38,38,.2)}
.pb-lq-label{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.pb-lq-ll{margin-top:14px;padding:11px 14px;background:rgba(14,165,233,.08);border:1px solid rgba(14,165,233,.25);border-radius:9px;font-size:13px;color:var(--text)}
@media(max-width:880px){.grid-2{grid-template-columns:1fr}}

/* --- On-demand permit check + score adjustment --- */
.permit-check-form{margin:10px 0 4px}
.score-adjusted{margin:8px 0 12px;padding:11px 14px;border-radius:10px;font-size:14px}
.score-adjusted strong{font-size:16px}
.score-adjusted.down{background:rgba(220,38,38,.08);border:1px solid #dc2626;color:#b91c1c}
.score-adjusted.up{background:rgba(22,163,74,.08);border:1px solid var(--high);color:#166534}

/* --- Saved-to-marketing confirmation --- */
.saved-note{font-size:13px;color:var(--high);background:rgba(46,204,113,.08);
  border:1px solid rgba(46,204,113,.3);border-radius:8px;padding:7px 11px;margin:6px 0 10px}

/* --- Live Accela lookup note --- */
.live-lookup-note{font-size:13px;color:var(--brand);background:rgba(77,163,255,.08);
  border:1px solid rgba(77,163,255,.3);border-radius:8px;padding:8px 12px;margin:6px 0 10px}

/* --- Manual trade-tagger (records trades per permit) --- */
.trade-tagger{margin:10px 0 2px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.tagger-label{font-size:12.5px;color:var(--muted)}
.tag-toggle{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  padding:4px 10px;border-radius:999px;cursor:pointer;background:transparent;
  border:1px dashed var(--line);color:var(--muted)}
.tag-toggle:hover{border-color:var(--brand);color:var(--text)}
.tag-toggle.on{border-style:solid}
.tag-toggle.on.trade-plumbing{background:rgba(77,163,255,.16);color:#7ab8ff;border-color:#3a6ea5}
.tag-toggle.on.trade-hvac{background:rgba(255,159,67,.16);color:#ffb066;border-color:#a5662a}
.tag-toggle.on.trade-electrical{background:rgba(255,214,77,.16);color:#ffd84d;border-color:#a58a2a}
.tag-toggle.on.trade-pool{background:rgba(56,209,201,.16);color:#5fe0d8;border-color:#2a9a93}
.tag-toggle.on.trade-gas{background:rgba(255,107,107,.16);color:#ff8a8a;border-color:#a53e3e}
.tag-saved{font-size:12px;color:var(--high);opacity:0;transition:opacity .2s}
.tag-saved.show{opacity:1}

/* --- Permit sub-type chips (granular) --- */
.subtype-chip{display:inline-block;font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px;
  margin:0 4px 3px 0;background:rgba(77,163,255,.10);color:var(--brand);border:1px solid var(--brand);
  vertical-align:middle}
/* Sub-type chips take their PARENT trade's color (so blue = only plumbing). */
.subtype-chip.trade-plumbing{background:rgba(77,163,255,.10);color:#7ab8ff;border-color:#3a6ea5}
.subtype-chip.trade-hvac{background:rgba(255,159,67,.10);color:#ffb066;border-color:#a5662a}
.subtype-chip.trade-electrical{background:rgba(255,214,77,.10);color:#ffd84d;border-color:#a58a2a}
.subtype-chip.trade-pool{background:rgba(56,209,201,.10);color:#5fe0d8;border-color:#2a9a93}
.subtype-chip.trade-gas{background:rgba(255,107,107,.10);color:#ff8a8a;border-color:#a53e3e}
.subtype-chip.trade-roofing{background:rgba(180,140,255,.10);color:#c4a6ff;border-color:#7a5ea5}
/* Competitor ad spy */
.ad-cat{margin:20px 0 8px;font-size:14px}
.ad-card{border:1px solid var(--line);border-radius:10px;padding:11px 14px;
  margin:0 0 10px;background:var(--panel2)}
.ad-meta{display:flex;gap:10px;align-items:center;margin-bottom:5px;font-size:12px}
.ad-price{background:rgba(56,209,201,.16);color:#5fe0d8;border:1px solid #2a9a93;font-weight:700}
.ad-copy{margin:3px 0 8px;line-height:1.45}
.ad-link{font-size:13px;font-weight:600}
.ww-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.ww-row{display:flex;gap:8px;align-items:baseline;margin:0 0 7px;font-size:13px}
.ww-proven{background:rgba(180,140,255,.16);color:#c4a6ff;border:1px solid #7a5ea5;
  font-weight:700;flex:none}
.ww-bar-row{display:flex;align-items:center;gap:9px;margin:0 0 7px;font-size:13px}
.ww-bar-label{width:210px;flex:none}
.ww-bar{display:inline-block;height:10px;border-radius:5px;flex:none;
  background:linear-gradient(90deg,#4da3ff,#5fe0d8)}
@media(max-width:760px){.ww-grid{grid-template-columns:1fr;gap:6px}.ww-bar-label{width:150px}}
.company-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}
/* customer search on the CRM page */
.crm-search{display:flex;gap:9px;align-items:center;margin:12px 0 0}
.crm-search input[type=search]{flex:1;min-width:0;background:var(--panel);
  border:1px solid var(--line);color:var(--text);border-radius:10px;
  padding:0 14px;height:42px;font-size:14px}
.crm-search input[type=search]:focus{outline:none;border-color:var(--brand)}
.crm-search .insp-pill{height:42px;min-width:0;padding:0 18px}
@media(max-width:640px){ .crm-search{flex-wrap:wrap} .crm-search input[type=search]{flex:1 1 100%} }

/* stage tabs: sized to their label, not stretched full-width */
.crm-tabs .insp-pill{min-width:0;padding:0 14px}
.crm-tab-n{font-weight:700;opacity:.75;margin-left:2px}
/* CRM page (phone cleanup 2026-09-11): header pills, search row, stage chips, cards */
.crm-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.crm-head h1{margin:0}
.crm-head-btns{display:flex;gap:10px;flex-wrap:wrap}
.crm-head-btns .insp-pill{min-width:0;height:42px;padding:0 16px;font-size:14px}
.crm-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}
.crm-tabs .insp-pill{height:40px;font-size:14px}
.crm-tab-mbr{border-color:#f5c451}
.crm-cards{display:none}
.crm-card{position:relative;display:block;padding:12px 34px 12px 14px;margin-bottom:10px;border-radius:12px;
  background:var(--panel2);border:1px solid #dbe3ec;text-decoration:none;color:var(--text)}
.crm-card:active{background:#e8eef5}
.crm-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.crm-card-name{font-weight:700;font-size:16px}
.crm-card-addr{font-size:14px;color:var(--brand2);margin-top:3px}
.crm-card-meta{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;font-size:12.5px;margin-top:8px}
.crm-card-val{font-weight:700;color:var(--high)}
.crm-card-go{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:24px;color:var(--muted)}
@media(max-width:640px){
  .crm-head{display:grid;grid-template-columns:1fr}
  .crm-head h1{font-size:24px}
  .crm-head-btns{display:grid;grid-template-columns:1fr 1fr}
  .crm-head-btns .insp-pill{width:100%;height:46px}
  .crm-search{flex-wrap:nowrap}
  .crm-search input[type=search]{flex:1 1 auto;height:46px;font-size:16px}
  .crm-search .insp-pill{height:46px;padding:0 14px}
  .crm-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  .crm-tabs .insp-pill{width:100%;padding:0 4px;font-size:13.5px}
  .crm-table{display:none}
  .crm-cards{display:block}
}

/* ⭐ memberships */
.mbr-badge{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;font-weight:700;white-space:nowrap;
  color:#8a5a00;background:#fff4d6;border:1px solid #f5c451;border-radius:999px;padding:2px 9px;vertical-align:middle}
.mbr-badge.off{color:var(--muted);background:var(--panel2);border-color:var(--line)}
.mbr-card{border-left:5px solid var(--line)}
.mbr-card.is-member{border-left-color:#f5a623;background:linear-gradient(180deg,#fffaf0,#fff)}
.mbr-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.mbr-title{font-size:18px;font-weight:800}
.mbr-sub{font-size:13.5px;color:var(--muted);margin-top:3px}
.mbr-perks{font-size:13px;color:var(--muted);margin-top:8px}
.mbr-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.mbr-actions form{margin:0}
.mbr-actions .insp-pill{height:44px;font-size:14px}
.mbr-insp,.mb-insp{font-size:13px;font-weight:700;border-radius:999px;padding:5px 12px;white-space:nowrap;
  background:var(--panel2);border:1px solid var(--line);color:var(--muted)}
.mb-insp-due{background:#fdecea;border-color:#f3b4ae;color:#b42318}
.mb-insp-soon{background:#fff4d6;border-color:#f5c451;color:#8a5a00}
.mb-insp-scheduled{background:#e8f7ee;border-color:#9ad8b0;color:#15803d}
.mb-links{display:flex;gap:10px;flex-wrap:wrap}
.mb-links .insp-pill{min-width:0;height:42px;padding:0 16px}
.mb-plan{margin-top:14px}
.mb-plan-top{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
.mb-plan-name{font-size:20px;font-weight:800}
.mb-prices{display:flex;gap:22px;flex-wrap:wrap;margin-top:8px}
.mb-amt{font-size:30px;font-weight:800;color:var(--brand2)}
.mb-per{font-size:13.5px;color:var(--muted);margin-left:4px}
.mb-perks{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14.5px}
.mb-note{font-size:13px;margin:12px 0 0}
.mb-edit{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.mb-edit>summary{cursor:pointer;font-weight:700;color:var(--brand2)}
.mb-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px 16px;margin-top:12px}
.mb-form label{font-size:12.5px;color:var(--muted);font-weight:600}
.mb-form input{width:100%;height:44px;margin-top:5px;border:1px solid var(--line);border-radius:10px;
  padding:0 12px;font:inherit;font-size:15px;background:var(--panel);color:var(--text)}
.mb-wide{grid-column:1/-1;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.mb-form label.mb-wide{display:block}
.mb-save{height:46px;min-width:170px}
.mb-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 4px;
  border-top:1px solid var(--line);text-decoration:none;color:var(--text)}
.mb-row:hover .mb-row-name{color:var(--brand2)}
.mb-row.is-off{opacity:.6}
.mb-row-name{font-weight:700;font-size:15px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.mb-row-addr{font-size:13px;color:var(--muted);margin-top:2px}
.mb-row-side{text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.mb-row-since{font-size:12px;color:var(--muted)}
.mbr-due-card{border-color:#f5c451;box-shadow:inset 0 0 0 1px rgba(245,196,81,.35)}
.mbr-due-row{grid-template-columns:1fr 150px 108px 150px auto}
.mbr-soon{color:#8a5a00}
/* member savings on estimates */
.mbr-save{font-size:12.5px;font-weight:700;color:#15803d;margin-top:4px}
.mbr-was{font-size:12.5px;color:var(--muted);text-decoration:line-through;margin-top:2px}
/* customer-facing: option cards, option detail, remote signing page */
.opt-mbr{margin:8px auto 0;display:inline-block;font-size:15px;font-weight:700;color:#15803d;
  background:#e8f7ee;border:1px solid #9ad8b0;border-radius:999px;padding:5px 14px}
.opt-mbr-was{display:block;font-size:12.5px;font-weight:500;color:var(--muted)}
.pb-mbr-link{min-width:0;height:36px;padding:0 14px;font-size:13px}
/* home record "plumbing systems on file": each row a small form on phones — the
   7-column grid was ~750px. Children 1-3 are hidden inputs, so the visible cells
   are 4 label · 5 brand · 6 year · 7 age · 8 confidence · 9 Save · 10 delete. */
@media(max-width:640px){
  .eq-cols.eq-head{display:none}
  .eq-cols.eq-row{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;padding:12px 0}
  .eq-row>:nth-child(4){grid-column:1/-1;font-size:15px}
  .eq-row>:nth-child(5){grid-column:span 4}
  .eq-row>:nth-child(6){grid-column:span 2}
  .eq-row>:nth-child(7),.eq-row>:nth-child(8){grid-column:span 3}
  .eq-row>:nth-child(9){grid-column:span 5}
  .eq-row>:nth-child(10){grid-column:span 1}
  .eq-row .newcall{height:42px}
}
/* home record estimates: a card per estimate on phones (the 8-column row was ~875px) */
@media(max-width:640px){
  .hest-cols.pb-head{display:none}
  .hest-cols.pb-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:10px;margin-bottom:10px;
    background:var(--panel2);border:1px solid #dbe3ec;border-radius:12px}
  .hest-cols.pb-row>div:nth-child(2){grid-column:2/-1;font-weight:700;text-align:right}
  .hest-cols.pb-row>div[data-cap]{font-weight:700;font-size:15px}
  .hest-cols.pb-row>div[data-cap]::before{content:attr(data-cap);display:block;font-size:10.5px;font-weight:700;
    text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}
  .hest-cols.pb-row>div:nth-child(6){grid-column:1/2}
  .hest-cols.pb-row>div:nth-child(7){grid-column:2/-1;text-align:right}
  .hest-cols.pb-row>div:nth-child(8){grid-column:1/-1}
  .hest-cols.pb-row>div:nth-child(8) .insp-pill{width:100%;height:42px}
}
.est-mbr-banner{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px;padding:10px 14px;
  border-radius:12px;background:#fff8e6;border:1px solid #f5c451;font-size:14px}
@media(max-width:640px){
  .mb-row{flex-direction:column;align-items:flex-start}
  .mb-row-side{align-items:flex-start;text-align:left}
  .mb-links{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .mb-links .insp-pill{width:100%}
  .mbr-actions{display:grid;grid-template-columns:1fr}
  .mbr-actions .insp-pill{width:100%;height:48px}
  .mbr-insp{white-space:normal}
}
@media(max-width:760px){ .mbr-due-row{grid-template-columns:1fr 1fr} }
.company-tab{font-size:13px;font-weight:600;padding:5px 12px;border-radius:999px;
  border:1px solid rgba(255,255,255,.14);color:var(--ink-dim,#9fb0c0);text-decoration:none}
.company-tab.on{background:rgba(77,163,255,.16);color:#7ab8ff;border-color:#3a6ea5}
/* Neighborhood sweep */
.sweep-form{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-start;margin-top:12px}
.sweep-form select,.sweep-form textarea{padding:9px 11px;border-radius:8px;
  border:1px solid var(--line);background:var(--panel2);color:inherit;
  font-size:14px;font-family:inherit}
.sweep-form textarea{flex:1;min-width:240px;resize:vertical}
.sweep-permit{margin:4px 0;font-size:13px;line-height:1.55}
.zs-bar{height:12px;border-radius:6px;background:var(--panel2);border:1px solid var(--line);overflow:hidden;margin-top:4px}
.zs-fill{height:100%;background:linear-gradient(90deg,#4da3ff,#5fe0d8);transition:width .3s}
.zs-row{display:flex;justify-content:space-between;gap:12px;padding:6px 0;
  border-bottom:1px solid var(--line);font-size:13px}

/* ============================================================
   Mobile pass (≤640px) — makes the app usable/presentable on a
   phone for demos. Customer-facing pages (sign, pay) have their
   own tuned rules; this handles the internal app shell.
   ============================================================ */
@media(max-width:640px){
  .wrap,.wrap-wide,.wrap-full{max-width:none;margin:14px auto;padding:0 12px}
  h1{font-size:24px!important;line-height:1.15}
  .card{padding:16px 14px}

  /* 16px is a hard iOS Safari threshold, not a style preference: tapping any
     input smaller than that makes Safari zoom the whole page in — and it does
     not zoom back out. A tech filling in an estimate would be pinching back out
     after every single field. Desktop keeps 14px; this applies on phones only. */
  input[type=text],input[type=tel],input[type=email],input[type=number],
  input[type=date],input[type=search],input[type=password],
  textarea,select,.field select{font-size:16px}

  /* call result: the urgency badge sits ABOVE the name on a phone — the name
     gets the full width, and "Emergency" is the first thing a dispatcher reads */
  .head-card{flex-direction:column;gap:10px}
  .head-right{order:-1}

  /* Header on phones: LeadLens + the gear on the first row, then the tabs on
     their own full-width row as a grid, so every tab shows at once.
     It used to be a sideways-scrolling strip squeezed between the logo and the
     gear — only two tabs were visible, and on iPhone the strip's scroll box
     swallowed the Estimates / Inspect / Marketing drop-downs, so tapping them
     looked like it did nothing. No scroll box now, so nothing can clip them. */
  header .brand .tag{display:none}
  .topbar{flex-wrap:wrap;gap:12px;padding:12px 14px;position:relative}
  .brand{flex:1 1 auto;margin-top:0}
  .nav-gear{margin-top:0}
  .topnav{order:3;flex:1 1 100%;position:relative;
    display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .topnav .newcall,.nav-dd>summary{width:100%;min-width:0;height:40px;padding:0 6px;
    font-size:13px;justify-content:center;text-align:center;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* drop-downs open full-width under the tab row (the gear's under the gear) */
  .nav-dd{position:static}
  .nav-dd-menu,.nav-dd-menu.nav-dd-right{position:absolute;left:0;right:0;top:auto;
    margin-top:6px;max-width:none;max-height:60vh;overflow:auto;z-index:70}
  .nav-gear .nav-dd-menu.nav-dd-right{left:14px;right:14px}

  /* action button rows: full-width, stacked, easy thumb targets */
  .insp-actions{gap:8px}
  .insp-actions .insp-pill,.insp-actions button,.insp-actions .newcall{flex:1 1 100%;
    min-width:0;text-align:center;justify-content:center}
  .insp-pill.fixed,.insp-pill.fixed-sm{width:100%;min-width:0}

  /* estimate builder contact fields stack */
  .est-fields{grid-template-columns:1fr;gap:12px}
  .addr-box{flex-wrap:wrap}
  .addr-box .a-street{flex:1 1 100%}
  .addr-box .a-div{display:none}
  .addr-box .a-city{flex:1 1 100%}
  .addr-box .a-state,.addr-box .a-zip{flex:1 1 45%}

  /* wide tables scroll inside their own box rather than blowing out the page */
  .scroll,.inv-list,.inv-table,.sch-cal{display:block;overflow-x:auto;max-width:100%}

  /* dense two/three-column grids collapse */
  .est-totals{grid-template-columns:1fr}
  .recapture-banner{flex-direction:column;align-items:stretch}
  .recapture-banner .insp-pill{width:100%}
}

/* schedule job-card one-tap messages */
.sch-msgs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.sch-msg-btn{font-size:12px;font-weight:600;padding:5px 10px;border-radius:8px;text-decoration:none;
  background:rgba(77,163,255,.14);color:var(--brand);border:1px solid rgba(77,163,255,.3)}
.sch-msg-btn:hover{background:rgba(77,163,255,.22)}
.sch-msg-rev{background:rgba(46,204,113,.14);color:var(--high);border-color:rgba(46,204,113,.32)}

/* 💳 LeadLens Payments page */
.lp-mode{font-size:12px;font-weight:800;border-radius:999px;padding:3px 10px;vertical-align:middle;margin-left:6px}
.lp-mode.test{background:#fff4d6;color:#8a5a00;border:1px solid #f5c451}
.lp-mode.live{background:#e8f7ee;color:#15803d;border:1px solid #9ad8b0}
.lp-err{background:#fdecea;border:1px solid #f3b4ae;color:#b42318;border-radius:10px;padding:10px 14px;margin:0 0 12px}
.lp-card{border-left:5px solid var(--line)}
.lp-card.lp-active{border-left-color:#16a34a}
.lp-card.lp-not_started,.lp-card.lp-unfinished{border-left-color:#635bff}
.lp-card.lp-in_review{border-left-color:#f5a623}
.lp-big{font-size:22px;font-weight:800}
.lp-steps{margin:10px 0 14px;padding-left:20px;line-height:1.6}
.lp-go{height:50px;min-width:260px;font-size:16px}
.lp-flags{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.lp-flag{font-size:12.5px;font-weight:700;border-radius:999px;padding:3px 11px;background:var(--panel2);border:1px solid var(--line)}
.lp-flag.ok{background:#e8f7ee;border-color:#9ad8b0;color:#15803d}
.lp-flag.wait{background:#fff4d6;border-color:#f5c451;color:#8a5a00}
.lp-stats{display:flex;gap:28px;flex-wrap:wrap;margin-top:6px}
.lp-num{display:block;font-size:26px;font-weight:800}
.lp-lbl{font-size:12.5px;color:var(--muted)}
.lp-due{font-size:13.5px;color:#8a5a00;margin:10px 0}
.lp-linkbtn{background:none;border:0;padding:0;color:var(--brand2);font:inherit;text-decoration:underline;cursor:pointer}
.lp-rate{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.lp-rate-num{font-size:30px;font-weight:800;color:var(--brand2)}
.lp-rate-lbl{font-size:14px;color:var(--muted)}
.lp-admin{border-style:dashed}
.lp-kv{display:grid;grid-template-columns:220px 1fr;gap:10px 16px;font-size:14px;margin-bottom:14px}
.lp-kv>div:nth-child(odd){color:var(--muted);font-weight:600}
.lp-fees{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.lp-fees label{font-size:12.5px;color:var(--muted);font-weight:600}
.lp-fees input{display:block;width:120px;height:44px;margin-top:5px;border:1px solid var(--line);border-radius:10px;
  padding:0 10px;font:inherit;font-size:15px;background:var(--panel);color:var(--text)}
.lp-fees .insp-pill{height:44px}
@media(max-width:640px){
  .lp-go{width:100%;min-width:0}
  .lp-kv{grid-template-columns:1fr;gap:4px}
  .lp-kv>div:nth-child(even){margin-bottom:8px}
  .lp-fees label{flex:1}
  .lp-fees input{width:100%}
  .lp-fees .insp-pill{width:100%}
}

/* 📞 Call Captain */
.cc-pop{position:fixed;right:16px;bottom:16px;z-index:90;display:flex;flex-direction:column;gap:10px;
  width:min(360px,calc(100vw - 32px))}
.cc-card{background:#fff;color:var(--text);border:1px solid #cfd8e3;border-left:5px solid var(--brand2);
  border-radius:14px;padding:12px 14px;box-shadow:0 12px 32px rgba(15,30,50,.22)}
.cc-top{display:flex;justify-content:space-between;align-items:center}
.cc-ring{font-size:12px;font-weight:800;color:var(--brand2);text-transform:uppercase;letter-spacing:.05em}
.cc-x{border:0;background:none;font-size:15px;color:var(--muted);cursor:pointer;padding:2px 6px}
.cc-name{font-size:18px;font-weight:800;margin-top:2px}
.cc-sub{font-size:12.5px;color:var(--muted)}
.cc-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.cc-chip{font-size:12px;font-weight:700;border-radius:999px;padding:2px 9px;background:var(--panel2);border:1px solid var(--line)}
.cc-chip.mbr{color:#8a5a00;background:#fff4d6;border-color:#f5c451}
.cc-chip.est{color:#0369a1;background:#e0f2fe;border-color:#7dd3fc}
.cc-chip.opp{color:#b42318;background:#fdecea;border-color:#f3b4ae}
.cc-last{font-size:12.5px;margin-top:6px;color:var(--muted)}
.cc-open{display:inline-block;margin-top:8px;font-weight:700;font-size:14px}
.cc-stats{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:14px;margin-top:14px}
.cc-stat{margin:0;display:flex;flex-direction:column;gap:4px}
.cc-stat-num{font-size:28px;font-weight:800}
.cc-stat-num small{font-size:14px;color:var(--muted);font-weight:600}
.cc-stat-lbl{font-size:12.5px;color:var(--muted);font-weight:600}
.cc-meter{height:8px;border-radius:99px;background:var(--panel2);overflow:hidden;margin-top:4px}
.cc-meter span{display:block;height:100%;background:var(--brand2)}
.cc-src{display:flex;justify-content:space-between;font-size:14px;padding:3px 0;border-bottom:1px dashed var(--line)}
.cc-src:last-child{border-bottom:0}
.cc-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.cc-tabs .insp-pill{min-width:0;height:40px;padding:0 14px}
.cc-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 2px;border-top:1px solid var(--line)}
.cc-row-main{min-width:0;flex:1}
.cc-row-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cc-dir{font-weight:800;color:var(--muted)}
.cc-who{font-weight:700;font-size:15px}
.cc-status{font-size:11.5px;font-weight:800;border-radius:999px;padding:2px 9px;background:var(--panel2);border:1px solid var(--line)}
.cc-st-missed .cc-status,.cc-st-voicemail .cc-status{background:#fdecea;border-color:#f3b4ae;color:#b42318}
.cc-st-answered .cc-status{background:#e8f7ee;border-color:#9ad8b0;color:#15803d}
.cc-row-sub{font-size:12.5px;color:var(--muted);margin-top:3px}
.cc-audio{margin-top:8px;width:min(420px,100%);height:36px}
.cc-callback{margin:0}
.cc-callback .insp-pill{min-width:0;height:42px;padding:0 16px}
.cc-inline{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}
.cc-inline label,.cc-field{font-size:12.5px;font-weight:600;color:var(--muted)}
.cc-inline select,.cc-inline input,.cc-field input,.cc-num input{display:block;height:42px;margin-top:5px;border:1px solid var(--line);
  border-radius:10px;padding:0 10px;font:inherit;font-size:15px;background:var(--panel);color:var(--text)}
.cc-field{display:block;margin-top:10px}
.cc-field input{width:100%}
.cc-num{display:grid;grid-template-columns:150px 1fr 1fr auto auto;gap:10px;align-items:center;padding:6px 0}
.cc-num input{margin-top:0;width:100%}
.cc-num-n{font-weight:700;font-variant-numeric:tabular-nums}
.cc-check{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;white-space:nowrap}
.cc-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.cc-person{display:flex;gap:10px;align-items:flex-start;padding:10px;margin:0;border:1px solid var(--line);border-radius:10px;cursor:pointer}
.cc-person input{margin-top:3px;width:18px;height:18px}
.cc-person small{display:block;color:var(--muted);font-size:12.5px}
.cc-person.no-cell{opacity:.55;cursor:default}
.cc-toggle{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--line);cursor:pointer}
.cc-toggle:first-of-type{border-top:0}
.cc-toggle input{margin-top:3px;width:18px;height:18px;flex:none}
.cc-toggle small{display:block;color:var(--muted);font-size:13px}
.cc-hours{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:8px 18px}
.cc-day{display:flex;align-items:center;gap:8px}
.cc-day .cc-check{width:70px}
.cc-day input[type=time]{height:38px;border:1px solid var(--line);border-radius:8px;padding:0 6px;font:inherit;background:var(--panel);color:var(--text)}
.cc-plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.cc-plan{border:1px solid var(--line);border-radius:12px;padding:14px}
.cc-plan-name{font-weight:800}
.cc-plan-price{font-size:28px;font-weight:800;color:var(--brand2)}
.cc-plan-price small{font-size:14px;color:var(--muted)}
@media(max-width:760px){
  .cc-stats{grid-template-columns:1fr 1fr}
  .cc-sources{grid-column:1/-1}
  .cc-num{grid-template-columns:1fr 1fr}
  .cc-num-n{grid-column:1/-1}
}
@media(max-width:640px){
  .cc-row{flex-direction:column;align-items:stretch}
  .cc-callback .insp-pill{width:100%}
  .cc-inline{display:grid;grid-template-columns:1fr}
  .cc-inline select,.cc-inline input{width:100%}
}

/* 🧪 TEST COMPANY banner (sandbox install only) */
.sbx-banner{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;padding:8px 14px;
  background:repeating-linear-gradient(135deg,#fff4d6 0 14px,#fdebb8 14px 28px);color:#6b4500;
  border-bottom:2px solid #e0a82e;font-size:14px;text-align:center}
.sbx-reset{height:32px;border:1px solid #c98f14;border-radius:999px;background:#fff;color:#6b4500;
  font:600 13px inherit;padding:0 14px;cursor:pointer}
.sbx-reset:hover{background:#fffaf0}

/* 🧭 Shop setup (new shop's intake) */
.su-head h1{margin:6px 0 6px;font-size:30px}
.su-kicker{font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--brand2)}
.su-progress{display:flex;align-items:center;gap:12px;margin:14px 0 10px}
.su-bar{flex:1;height:10px;border-radius:99px;background:var(--panel2);border:1px solid var(--line);overflow:hidden}
.su-bar span{display:block;height:100%;background:#16a34a}
.su-count{font-weight:700;font-size:14px;white-space:nowrap}
.su-toc{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.su-chip{font-size:12.5px;font-weight:600;border-radius:999px;padding:4px 11px;text-decoration:none;
  border:1px solid var(--line);background:#fff;color:var(--text)}
.su-chip.su-done{background:#e8f7ee;border-color:#9ad8b0;color:#15803d}
.su-chip.su-needed{background:#fdecea;border-color:#f3b4ae;color:#b42318}
.su-chip.su-skipped{background:var(--panel2);color:var(--muted)}
.su-note{margin:10px 0 0}
.su-sec{scroll-margin-top:16px}
.su-sec-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.su-sec-head h2{margin:0;font-size:21px}
.su-state{font-size:12px;font-weight:800;border-radius:999px;padding:3px 10px;border:1px solid var(--line);white-space:nowrap}
.su-state.su-done{background:#e8f7ee;border-color:#9ad8b0;color:#15803d}
.su-state.su-needed{background:#fdecea;border-color:#f3b4ae;color:#b42318}
.su-state.su-later,.su-state.su-skipped{background:var(--panel2);color:var(--muted)}
.su-why{color:var(--muted);font-size:14px;margin:6px 0 12px}
.su-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px 16px}
.su-field{display:flex;flex-direction:column;gap:5px;margin:0}
.su-wide{grid-column:1/-1}
.su-lbl{font-size:12.5px;font-weight:600;color:var(--muted)}
.su-lbl em{color:#b42318;font-style:normal}
.su-field input,.su-field select{height:44px;border:1px solid var(--line);border-radius:10px;padding:0 12px;
  font:inherit;font-size:16px;background:var(--panel);color:var(--text);width:100%;margin:0}
.su-checks{display:flex;flex-wrap:wrap;gap:8px}
.su-check{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:6px 12px;
  font-size:14px;cursor:pointer;margin:0}
.su-check input{width:16px;height:16px;margin:0}
.su-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.su-actions .insp-pill{height:44px;min-width:150px}
.su-roster{display:grid;gap:6px;margin-bottom:12px}
.su-person{display:flex;gap:10px;flex-wrap:wrap;align-items:baseline;padding:8px 10px;border:1px solid var(--line);border-radius:10px;font-size:14px}
.su-person span{color:var(--muted)}
.su-signin{margin-left:auto;font-size:12px;font-weight:700}
.su-signin.on{color:#15803d}
.su-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px 14px;border:1px dashed var(--line);
  border-radius:12px;padding:12px;margin:0 0 10px}
.su-pw{max-width:520px;margin:30px auto}
.su-pw .su-field{margin-bottom:12px}
.su-dash{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 14px;padding:12px 16px;
  border-radius:12px;background:#e0f2fe;border:1px solid #7dd3fc;color:var(--text);text-decoration:none}
.su-dash-go{font-weight:800;color:var(--brand2);white-space:nowrap}
@media(max-width:640px){
  .su-grid,.su-row{grid-template-columns:1fr}
  .su-actions .insp-pill{flex:1}
}
