/* The builder's look, shared by the two doors that run builder.js:
 * packages.html and the town pages. Moved out of packages.html whole, so
 * the ladder cannot look different under a town report than it does on the
 * packages page. Nothing else loads this file, which is what keeps these
 * class names from reaching the rest of the site. */
/* Step, source-pick, ladder card, build grid, summary. */
.step{display:flex;align-items:center;gap:10px;margin-bottom:14px;}
.step i{font-style:normal;width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;}
.srcpick{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.srcpick button{background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:20px 18px;text-align:left;cursor:pointer;font-family:inherit;font-size:16.5px;font-weight:700;color:var(--ink);transition:border-color .15s, transform .15s, box-shadow .15s;}
.srcpick button span{display:block;font-size:13px;font-weight:500;color:var(--muted);margin-top:5px;line-height:1.5;}
.srcpick button:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(12,20,36,.09);}
.srcpick button[aria-pressed="true"]{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);}
.pkgs{display:block;margin-top:26px;}
.pkg{background:#fff;border:1px solid var(--line);border-radius:12px;padding:0 0 18px;overflow:hidden;display:flex;flex-direction:column;transition:transform .18s, box-shadow .18s, border-color .18s;}
.pkg:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(12,20,36,.11);}
.pkg .bar{height:5px;}
.pkg .pad{padding:16px 16px 0;}
.pkg h3{font-size:19px;letter-spacing:-.4px;color:var(--ink);line-height:1.2;}
.pkg .lab{font-size:11.5px;letter-spacing:2px;text-transform:uppercase;font-weight:700;color:var(--muted);margin-top:5px;}
.pkg .amt{font-size:29px;font-weight:800;letter-spacing:-1.2px;color:var(--ink);margin-top:12px;font-variant-numeric:tabular-nums;line-height:1.1;}
.pkg .amt em{display:block;font-style:normal;font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.4px;margin-top:3px;}
.pkg p.pit{font-size:13.5px;color:var(--muted);margin-top:11px;line-height:1.55;}
.pkg ul{list-style:none;margin-top:13px;border-top:1px solid var(--line);padding-top:12px;}
.pkg li{font-size:13px;padding:4px 0 4px 17px;position:relative;color:var(--body);line-height:1.45;}
.pkg li:before{content:"";position:absolute;left:0;top:11px;width:7px;height:7px;border-radius:50%;background:var(--good);opacity:.55;}
.pkg .go{margin:16px 16px 0;background:var(--ink);color:#fff;border:none;border-radius:8px;padding:13px;font-size:14.5px;font-weight:700;cursor:pointer;font-family:inherit;width:calc(100% - 32px);}
.pkg .go:hover{background:var(--accent);}
.pkg.on{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink), 0 14px 30px rgba(12,20,36,.11);}
.pkg.on .go{background:var(--good);}
.pkg .rec{position:absolute;top:0;right:0;background:var(--good);color:#fff;font-size:10.5px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;padding:4px 10px;border-radius:0 0 0 8px;}
.pkg .wrap{position:relative;}
#bld{display:none;margin-top:36px;}
#bld.on{display:block;}
.bldgrid{display:grid;grid-template-columns:1fr 380px;gap:26px;align-items:start;}
.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px;}
.card h3{font-size:19px;color:var(--ink);letter-spacing:-.4px;}
.opt{display:flex;gap:12px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line);cursor:pointer;}
.opt:last-child{border-bottom:0;}
.opt input{width:20px;height:20px;flex:none;margin-top:2px;accent-color:var(--ink);}
.opt b{display:block;font-size:15px;color:var(--ink);font-weight:700;}
.opt p{font-size:13px;color:var(--muted);line-height:1.5;margin-top:3px;}
.opt .pr{margin-left:auto;font-weight:800;font-size:15px;color:var(--ink);white-space:nowrap;padding-left:10px;font-variant-numeric:tabular-nums;}
.opt .pr.ask{font-size:12px;font-weight:600;color:var(--muted);white-space:normal;text-align:right;max-width:124px;line-height:1.35;}
#srcSec,#tierSec,#bldSec{scroll-margin-top:104px;}
.townpick{max-width:440px;}
.townpick label{display:block;font-size:11.5px;letter-spacing:2px;text-transform:uppercase;font-weight:700;color:var(--muted);margin-bottom:8px;}
.townpick select{width:100%;font-family:inherit;font-size:16.5px;font-weight:700;color:var(--ink);background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:17px 16px;cursor:pointer;}
.townpick select:focus{outline:none;border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);}
.tfacts{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 20px;margin-top:18px;}
.tfacts p{font-size:14px;color:var(--body);line-height:1.6;}
.tfacts p b{color:var(--ink);}
.tfacts p+p{margin-top:9px;}
.tfacts ul{list-style:none;margin:11px 0 0;}
.tfacts li{font-size:13.5px;color:var(--body);padding:4px 0 4px 17px;position:relative;line-height:1.5;}
.tfacts li b{color:var(--ink);}
.tfacts li:before{content:"";position:absolute;left:0;top:11px;width:7px;height:7px;border-radius:50%;background:var(--accent);opacity:.5;}
.opt.hasproof{border-bottom:0;}
.opt p.swapnote{font-size:12.5px;color:var(--accent);font-weight:700;margin-top:5px;}
.proof{border-bottom:1px solid var(--line);padding-bottom:13px;}
.proof:last-child{border-bottom:0;}
.proof summary{font-size:13px;font-weight:700;color:var(--ink);cursor:pointer;padding:2px 0 7px;}
.proof p{font-size:13px;color:var(--muted);line-height:1.6;}
.sum{position:sticky;top:92px;}
.sum .row{display:flex;justify-content:space-between;gap:14px;font-size:14px;padding:6px 0;color:var(--body);}
.sum .row span:last-child{font-variant-numeric:tabular-nums;white-space:nowrap;}
.sum .tot{display:flex;justify-content:space-between;align-items:baseline;border-top:2px solid var(--ink);margin-top:12px;padding-top:12px;}
.sum .tot b{font-size:14px;text-transform:uppercase;letter-spacing:1.4px;color:var(--muted);}
.sum .tot i{font-style:normal;font-size:31px;font-weight:800;letter-spacing:-1.2px;color:var(--ink);font-variant-numeric:tabular-nums;}
.sum .pay{font-size:12.5px;color:var(--muted);margin-top:12px;line-height:1.55;}
.sum .dep{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:13.5px;color:var(--muted);margin-top:8px;}
.sum .dep span:last-child{font-variant-numeric:tabular-nums;font-weight:800;font-size:17px;color:var(--ink);white-space:nowrap;}
.sum .dep.off{margin-top:3px;}
.sum .dep.off span:last-child{color:var(--good);font-size:15px;}
.sum .paybtn{display:block;margin-top:14px;background:var(--good);color:#fff;border-radius:9px;padding:15px 12px;font-size:15.5px;font-weight:800;text-align:center;text-decoration:none;letter-spacing:-.2px;line-height:1.3;}
.sum .paybtn:hover{filter:brightness(1.07);}
.flag{background:#fbf7ef;border:1px solid #e8dcc4;border-radius:10px;padding:14px 16px;font-size:13px;color:#6b5626;line-height:1.55;margin-top:16px;}
.note{font-size:13.5px;color:var(--muted);margin-top:10px;line-height:1.6;}
.share{margin-top:14px;border-top:1px solid var(--line);padding-top:13px;}
.share button{font-family:inherit;font-size:13px;font-weight:700;color:var(--ink);background:#fff;
  border:1.5px solid var(--line);border-radius:8px;padding:12px 14px;cursor:pointer;width:100%;}
.share button:hover{border-color:var(--ink);}
.share p{font-size:12.5px;color:var(--muted);line-height:1.5;margin-top:8px;}
.notes3{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:18px;}
.notes3 b{display:block;margin-bottom:6px;}
.pkg .gap{font-size:12px;color:#6b5626;background:#fbf7ef;border:1px solid #e8dcc4;border-radius:6px;padding:6px 9px;margin-top:10px;line-height:1.45;}
.pkg .warn{font-size:12px;color:#8a2b22;background:#fdf2f0;border:1px solid #f0cdc7;border-radius:6px;padding:8px 10px;margin-top:10px;line-height:1.5;}
.pkg .warn b{display:block;font-weight:800;margin-bottom:3px;}
.pkg .band{display:inline-block;font-size:10px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:var(--muted);border:1px solid var(--line);border-radius:99px;padding:3px 9px;margin-bottom:9px;}
.pkg .band.prem{color:#7a5c17;border-color:#e0cf9c;background:#fdf9ee;}
.pkg.prem{background:#fdfbf6;}
.undern{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:22px;}
.undern>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 20px;}
.undern b{display:block;font-size:15.5px;color:var(--ink);margin-bottom:6px;}
.undern p{font-size:13.5px;color:var(--muted);line-height:1.62;margin:0;}
.upbtn{display:flex;align-items:flex-start;gap:12px;width:100%;text-align:left;font-family:inherit;background:#fff;border:1.5px solid var(--line);border-radius:10px;padding:14px 15px;margin-top:10px;min-height:52px;cursor:pointer;transition:border-color .15s,box-shadow .15s;}
.upbtn:hover{border-color:var(--ink);}
.upbtn.on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);background:#fbfaf7;}
.upbtn .ub{flex:1 1 auto;min-width:0;}
.upbtn b{display:block;font-size:15px;font-weight:700;color:var(--ink);}
.upbtn .why{display:block;font-size:13px;font-weight:400;color:var(--muted);line-height:1.55;margin-top:3px;}
.upbtn .pr{margin-left:auto;font-weight:800;font-size:15px;color:var(--ink);white-space:nowrap;padding-left:10px;font-variant-numeric:tabular-nums;}
form.lw.sav{background:none;border:none;border-radius:0;padding:14px 0 0;margin-top:14px;border-top:1px solid var(--line);}
form.lw.sav label{margin-top:0;}
form.lw.sav button{margin-top:12px;padding:15px;font-size:14.5px;background:#fff;color:var(--ink);border:1.5px solid var(--line);}
form.lw.sav .fine{margin-top:9px;}
.cfold{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}
.cfold summary{font-size:14.5px;font-weight:700;color:var(--ink);cursor:pointer;}
.cfold summary::marker{color:var(--muted);}
.cfold[open] summary{margin-bottom:4px;}
@media(max-width:1000px){.bldgrid{grid-template-columns:1fr;}.sum{position:static;}.notes3{grid-template-columns:1fr;}.undern{grid-template-columns:1fr;}}
@media(max-width:720px){.srcpick{grid-template-columns:1fr;gap:10px;}.card{padding:18px 16px;}.pkg .amt{font-size:27px;}.vtop{flex-direction:column;gap:6px;}.vright{text-align:left;}}


/* ---- the reworked build step (patch107) ----------------------------------
   Included stages read as a checklist; detail costs one tap. The needed-stage
   buttons wear the amber the report gaps already wear on the tier cards, so
   "your report still asks for this" looks the same everywhere it appears. */
.istage{border-bottom:1px solid var(--line);}
.istage:last-child{border-bottom:0;}
.istage summary{font-size:14px;font-weight:700;color:var(--ink);padding:9px 0;cursor:pointer;list-style:none;}
.istage summary::-webkit-details-marker{display:none;}
.istage summary::before{content:"\2713";color:var(--good);font-weight:800;margin-right:9px;}
.istage p{font-size:13px;color:var(--muted);line-height:1.55;margin:2px 0 11px;}
.istage p.iproof{font-size:12.5px;border-left:3px solid var(--line);padding-left:10px;}
.upbtn.need{border-color:#e8dcc4;background:#fbf7ef;}
.upbtn.need:hover{border-color:#6b5626;}
.upbtn.need .pr{color:#6b5626;}
.upbtn.need.on{border-color:var(--good);background:#f2f9f1;}
.cov{font-size:13.5px;font-weight:700;color:#2e7031;background:#f2f9f1;border:1px solid #d8ecd4;border-radius:8px;padding:10px 12px;}

/* ---- the vertical ladder (patch112, mockup B) ----------------------------- */
.pkg.vrung{margin-bottom:0;overflow:visible;padding:18px 20px;border-radius:12px;}
.pkg.vrung .wrap{position:relative;}
.pkg.vrung .rec{border-radius:99px;position:static;display:inline-block;margin-bottom:8px;}
.vtop{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;}
.pkg.vrung h3{font-size:12px;letter-spacing:1.8px;text-transform:uppercase;}
.vwant{font-size:20px;font-weight:800;letter-spacing:-.4px;color:var(--ink);line-height:1.2;margin-top:2px;}
.vright{text-align:right;flex:none;}
.pkg.vrung .amt{margin-top:0;font-size:27px;}
.pkg.vrung .go{width:auto;margin:10px 0 0;padding:13px 18px;min-height:44px;}
.pkg.vrung .pit{margin-top:10px;}
.vplus{font-size:11px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted);margin-top:12px;}
.vadds{list-style:none;margin-top:6px;}
.vadds li{font-size:13.5px;padding:3px 0 3px 18px;position:relative;color:var(--ink);font-weight:600;line-height:1.5;}
.vadds li::before{content:"+";position:absolute;left:2px;font-weight:800;color:var(--good);}
.vadds li i{font-style:normal;color:var(--muted);font-weight:500;}
.vstep{display:flex;align-items:center;gap:12px;margin:12px 0;}
.vstep span{flex:1;border-top:2px dashed var(--line);}
.vstep b{font-size:12px;font-weight:800;letter-spacing:1.4px;color:var(--muted);white-space:nowrap;}
.cov{font-size:12.5px;font-weight:700;color:#2e7031;background:#f2f9f1;border:1px solid #d8ecd4;border-radius:7px;padding:8px 11px;margin-top:10px;}
.vlabel{font-size:11.5px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:var(--muted);margin-top:3px;}


/* ---- the premium pass (patch124) ------------------------------------------
   Each rung wears its metal: the top edge and a faint head-of-card wash come
   from --metal, written by builder.js off the tier's own accent. Type is set
   a step larger everywhere a customer actually reads. */
.pkg.vrung{padding:28px 32px 24px;border-radius:16px;border-top:4px solid var(--metal,var(--line));
  background:linear-gradient(180deg,color-mix(in srgb,var(--metal,#ffffff) 7%,#ffffff) 0,#ffffff 180px);
  box-shadow:0 1px 2px rgba(12,20,36,.05);}
.pkg.vrung:hover{transform:translateY(-2px);box-shadow:0 16px 34px rgba(12,20,36,.10);}
.pkg.vrung h3{font-size:13px;letter-spacing:2.6px;}
.vwant{font-size:24px;letter-spacing:-.5px;margin-top:3px;}
.pkg.vrung .amt{font-size:36px;letter-spacing:-1.6px;}
.pkg.vrung .amt em{font-size:12px;margin-top:4px;}
.pkg p.pit{font-size:15px;color:var(--body);line-height:1.65;margin-top:14px;max-width:860px;}
.vplus{font-size:11.5px;letter-spacing:1.7px;margin-top:18px;}
.vadds{margin-top:9px;}
.vadds li{font-size:14.5px;padding:5px 0 5px 21px;}
.pkg .gap,.pkg .warn{font-size:13px;padding:11px 14px;margin-top:14px;line-height:1.6;border-radius:8px;}
.vstep{margin:20px 0;}
.vstep b{font-size:12.5px;letter-spacing:2px;}
.pkg.vrung .go{padding:14px 24px;font-size:15px;border-radius:9px;}
.tfacts{padding:22px 24px;}
.tfacts p{font-size:14.5px;}
@media(max-width:720px){.pkg.vrung{padding:22px 18px 18px;}.pkg.vrung .amt{font-size:30px;}.vwant{font-size:21px;}}


/* ---- overview strip, pay buttons, upsell chips, treats (patch127) --------- */
.vhow{font-size:14.5px;color:var(--body);line-height:1.65;margin-top:16px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 18px;}
.vhow b{color:var(--ink);}
.vmap{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:16px 0 22px;}
.vchip{font-family:inherit;text-align:left;background:linear-gradient(180deg,color-mix(in srgb,var(--metal,#fff) 12%,#fff),#fff);border:1px solid var(--line);border-top:4px solid var(--metal,var(--line));border-radius:12px;padding:14px 14px 12px;cursor:pointer;transition:transform .15s,box-shadow .15s;}
.vchip:hover{box-shadow:0 8px 18px rgba(12,20,36,.10);transform:translateY(-2px);}
.vcm{display:block;font-size:11px;font-weight:800;letter-spacing:1.8px;text-transform:uppercase;color:var(--metal,var(--muted));}
.vcw{display:block;font-size:14px;font-weight:700;color:var(--ink);margin-top:3px;line-height:1.3;}
.vcp{display:block;font-size:17px;font-weight:800;color:var(--ink);margin-top:6px;font-variant-numeric:tabular-nums;}
.vcr{display:inline-block;margin-top:6px;font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:#2e7031;background:#f2f9f1;border-radius:99px;padding:2px 8px;}
.vright{min-width:290px;}
.vpay{display:block;margin:10px 0 0;background:var(--ink);color:#fff;border-radius:999px;padding:13px 16px;font-size:14px;font-weight:800;text-align:center;text-decoration:none;letter-spacing:-.1px;line-height:1.3;}
.vpay.full{background:var(--good);}
.vpay:hover{filter:brightness(1.12);}
.pkg.vrung .go{background:#fff;color:var(--ink);border:1.5px solid var(--line);width:100%;margin-top:10px;}
.pkg.vrung .go:hover{border-color:var(--ink);background:#fff;}
.pkg.on .go{background:var(--good);border-color:var(--good);color:#fff;}
.vups{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:14px;}
.vupl{font-size:11px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--muted);margin-right:2px;}
.vchipbtn{font-family:inherit;font-size:13px;font-weight:700;color:var(--ink);background:#fff;border:1.5px solid var(--line);border-radius:99px;padding:10px 14px;min-height:44px;cursor:pointer;transition:border-color .15s;}
.vchipbtn i{font-style:normal;color:var(--muted);font-weight:700;margin-left:6px;}
.vchipbtn:hover{border-color:var(--ink);}
.vchipbtn.on{border-color:var(--good);background:#f2f9f1;box-shadow:inset 0 0 0 1px var(--good);}
.vchipbtn.on:before{content:"\2713 ";color:var(--good);font-weight:800;}
.vtreats{font-size:13.5px;color:var(--body);background:#f7fafd;border:1px solid var(--line);border-radius:8px;padding:11px 14px;margin-top:14px;line-height:1.6;}
.vtreats b{color:var(--ink);}
.pkg{scroll-margin-top:104px;}
@media(max-width:900px){.vmap{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));}}
@media(max-width:720px){.vright{min-width:0;width:100%;}}


/* ---- horizontal actions, medal chips, vertical upsells (patch128) --------- */
.vact{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;align-items:stretch;}
.vact .vpay{flex:1 1 220px;margin:0;display:flex;align-items:center;justify-content:center;}
.vact .go{flex:1 1 170px;width:auto;margin:0;}
.vright{min-width:200px;}
.vchip{position:relative;display:flex;align-items:flex-start;gap:8px;min-height:130px;padding:14px 12px 34px 14px;}
.vctxt{flex:1 1 auto;min-width:0;}
.vcw{min-height:37px;}
.vcicon{flex:none;color:var(--metal,var(--muted));margin-top:2px;line-height:0;}
.vcr{position:absolute;left:14px;bottom:10px;margin-top:0;}
.vups{display:block;margin-top:14px;}
.vupl{display:block;margin-bottom:2px;}
.vchipbtn{display:flex;align-items:flex-start;gap:12px;width:100%;text-align:left;border-radius:10px;margin-top:8px;padding:12px 14px;}
.vchipbtn .cb{flex:1 1 auto;min-width:0;}
.vchipbtn .cb b{display:block;font-size:14.5px;color:var(--ink);}
.vchipbtn .cw{display:block;font-size:13px;font-weight:500;color:var(--muted);margin-top:2px;line-height:1.5;}
.vchipbtn .pr{margin-left:auto;font-weight:800;font-size:14.5px;color:var(--ink);white-space:nowrap;padding-left:10px;font-variant-numeric:tabular-nums;}
@media(max-width:720px){.vact{flex-direction:column;}.vchip{min-height:0;padding-bottom:14px;}.vcr{position:static;display:inline-block;margin-top:6px;}.vcw{min-height:0;}}

/* ---- phone: the overview strip stands down (fold budget) ------------------
   At 390px the five chips cost more height than they explain, and they were
   pushing the first card's price under the fold. The ladder right below IS
   the overview on a phone; the strip stays a desktop feature. */
@media(max-width:720px){
  .vhow{font-size:13px;padding:11px 14px;margin-top:12px;}
  .vmap{display:none;}
}


/* ---- psychology pass (patch129): one primary, quiet $, true trust --------- */
.pnum .cur, .cur{font-style:normal;font-size:.6em;font-weight:800;vertical-align:.3em;margin-right:1px;opacity:.92;letter-spacing:0;}
.vpay.dep{background:var(--good);}
.vpay.full{background:#fff;color:var(--good);border:1.5px solid var(--good);}
.vpay.full:hover{background:#f2f9f1;filter:none;}
.vtrust{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:22px;}
.titem{display:flex;gap:11px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;color:var(--good);}
.titem svg{flex:none;margin-top:1px;}
.titem b{display:block;font-size:13.5px;color:var(--ink);}
.titem span{display:block;font-size:12.5px;color:var(--muted);line-height:1.5;margin-top:2px;}


/* ---- icons, medal watermark, verdict lines (patch136) --------------------- */
.vadds li{padding-left:30px;}
.vadds li::before{content:none;}
.vadds .lic{position:absolute;left:1px;top:6px;color:var(--good);line-height:0;}
.vmark{position:absolute;top:-6px;right:-2px;color:var(--metal,var(--line));opacity:.12;pointer-events:none;line-height:0;}
.vmark svg{width:118px;height:118px;}
.pkg .pit{font-size:15px;color:var(--body);line-height:1.6;margin-top:14px;max-width:860px;}
.pit .pl{display:block;}
.pit .pl+.pl{margin-top:5px;}
.vchipbtn .ci{flex:none;color:var(--accent);margin-top:2px;line-height:0;}
.vtreats{background:color-mix(in srgb,var(--metal,#3d6ea8) 9%,#fff);border:1px solid color-mix(in srgb,var(--metal,#3d6ea8) 38%,#fff);font-size:14px;}
.vtreats b{color:var(--ink);}
.vnote{padding:14px 16px;font-size:13px;line-height:1.6;}
.vnhead{display:flex;gap:10px;align-items:flex-start;font-weight:700;}
.vnhead svg{flex:none;margin-top:2px;}
.vnline{margin-top:8px;padding-left:29px;}
.vnline b{font-weight:800;}
.vnrec{display:flex;gap:10px;align-items:flex-start;margin-top:10px;padding-top:10px;border-top:1px solid rgba(0,0,0,.09);font-weight:600;color:#2e5c3f;}
.vnrec svg{flex:none;color:var(--good);margin-top:2px;}
/* The legacy .warn b{display:block} rule was for the old one-line box; inside
   the structured note the bolds are inline emphasis, not headings. */
.pkg .warn.vnote b, .pkg .gap.vnote b{display:inline;margin-bottom:0;}


/* ---- phone package cards (patch137) ---------------------------------------
   In column direction the 220px flex-basis became HEIGHT, which is why the
   pay buttons towered. Auto basis, tighter padding, smaller watermark. */
@media(max-width:720px){
  .vact{gap:8px;margin-top:12px;}
  .vact .vpay{flex:0 0 auto;padding:13px 14px;font-size:14px;}
  .vact .go{flex:0 0 auto;padding:12px 14px;font-size:14px;}
  .vmark svg{width:74px;height:74px;}
  .pkg.vrung .amt{font-size:28px;}
  .vchipbtn{padding:10px 12px;min-height:44px;}
  .vnote{font-size:12.5px;}
}


/* ---- price last, $ scale chips, value bridge (patch138) ------------------- */
.vfoot{display:flex;align-items:center;gap:18px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line);flex-wrap:wrap;}
.vfoot .amt{margin-top:0;flex:0 0 auto;}
.vfoot .vact{margin-top:0;flex:1 1 420px;}
.vcd{display:block;font-size:16px;font-weight:800;letter-spacing:2.5px;color:var(--good);margin-top:7px;}
.vcicon svg{width:52px;height:52px;}
.vchip{min-height:126px;}
.vsb{display:flex;align-items:center;gap:10px;color:var(--body);font-size:13.5px;line-height:1.5;max-width:660px;text-align:left;white-space:normal;}
.vsb b{color:var(--ink);white-space:nowrap;}
.vsb svg{flex:none;color:var(--good);}
@media(max-width:720px){
  .vfoot{flex-direction:column;align-items:stretch;gap:10px;}
  .vfoot .vact{flex:1 1 auto;}
  .vcicon svg{width:40px;height:40px;}
}


/* ---- bigger medals on the overview chips (patch139) ----------------------- */
.vcicon svg{width:68px;height:68px;}
.vchip{min-height:138px;}
@media(max-width:720px){.vcicon svg{width:48px;height:48px;}}


/* ---- option A: metal plate chips (patch140) -------------------------------
   White type on the metal itself. A top scrim buys the contrast, the serif
   carries the door name, and the medal ghosts large behind the corner. */
.vchip{position:relative;overflow:hidden;border:0;border-radius:14px;padding:16px 16px 14px;min-height:138px;color:#fff;box-shadow:0 10px 24px rgba(12,20,36,.16);text-align:left;}
.vchip::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(12,20,36,.24),rgba(12,20,36,0) 60%);pointer-events:none;}
.vchip:hover{transform:translateY(-3px);box-shadow:0 16px 34px rgba(12,20,36,.28);}
.vchip:focus-visible{outline:3px solid #fff;outline-offset:-3px;}
.vctxt{position:relative;z-index:1;}
.vchip .vcm{color:rgba(255,255,255,.92);font-size:11px;letter-spacing:2.4px;}
.vchip .vcw{font-family:'Fraunces',Georgia,serif;font-weight:700;color:#fff;font-size:19px;line-height:1.16;margin-top:4px;min-height:44px;max-width:80%;text-shadow:0 1px 3px rgba(12,20,36,.35);}
.vchip .vcd{color:#fff;opacity:.95;font-size:15px;font-weight:800;letter-spacing:3px;margin-top:8px;text-shadow:0 1px 2px rgba(12,20,36,.3);}
.vchip .vcicon{position:absolute;right:-16px;bottom:-18px;color:#fff;opacity:.3;z-index:0;line-height:0;}
.vchip .vcicon svg{width:104px;height:104px;}
.vchip .vcr{position:static;display:inline-block;margin-top:10px;background:#fff;color:#2e7031;box-shadow:0 2px 6px rgba(12,20,36,.2);}
/* Bronze's three-line wrap: a touch more measure puts every door name on two. */
.vchip .vcw{max-width:92%;font-size:18px;}


/* ---- centered bridge, per-card trust, the includes bubble (patch141) ------ */
.vstep{display:flex;justify-content:center;position:relative;margin:24px 0;}
.vstep>span{display:none;}
.vstep::before{content:"";position:absolute;left:0;right:0;top:50%;border-top:2px dashed var(--line);}
.vsb{position:relative;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 18px;box-shadow:0 4px 14px rgba(12,20,36,.06);max-width:760px;}
.vtrust{margin:16px 0 4px;gap:10px;}
.titem{padding:13px 15px;}
.pnote{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 20px;margin-top:16px;display:flex;gap:12px;align-items:flex-start;}
.pnote svg{flex:none;color:var(--good);margin-top:2px;}
.pnote p{font-size:13.5px;color:var(--muted);line-height:1.6;margin:0;}
.pnote b{color:var(--ink);}
/* The pill's metal name inherits body type, not the old divider's tracking. */
.vstep .vsb b{font-size:inherit;letter-spacing:0;color:var(--ink);white-space:normal;}


/* ---- cards become the whole builder (patch143) ----------------------------
   Customize is gone: every card carries its own picks, its own one-tap gap
   fixes, and an upgrade rail on the right. The old step-3 builder is now a
   slim save-and-send strip. */

/* The bridge pill stands alone; the full-width dashed line fought the pill's
   own height and always looked broken next to the trust strip. */
.vstep::before{content:none;}
.vstep{margin:28px 0;}

/* One-tap fixes inside the verdict lines. They inherit the box's own red or
   amber, so the fix reads as part of the warning it clears. */
.fixit{display:inline-flex;align-items:center;font-family:inherit;font-size:12.5px;
  font-weight:800;letter-spacing:.2px;color:inherit;background:#fff;
  border:1.5px solid color-mix(in srgb,currentColor 40%,#fff);border-radius:99px;
  padding:8px 14px;min-height:40px;margin-left:10px;cursor:pointer;vertical-align:middle;
  transition:border-color .15s, background .15s;}
.fixit:hover{border-color:currentColor;}
.vnrec .fixit{margin-left:auto;flex:none;color:#2e7031;border-color:#bfdcc4;background:#fff;}
.vnrec .fixit:hover{border-color:#2e7031;}

/* The upgrade rail sits right above the price and the pay buttons: read the
   package, see what one more step buys, then the money. Two buttons ride side
   by side on a desktop and stack on a phone. */
.vmain{position:relative;min-width:0;}
.vupgr{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px;}
.vupt{flex:1 1 100%;font-size:11px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted);}
.vupg{flex:1 1 300px;}
.vupg{font-family:inherit;text-align:left;background:#fff;border:1.5px solid var(--line);
  border-left:4px solid var(--m,var(--line));border-radius:10px;padding:13px 15px;
  cursor:pointer;transition:border-color .15s, box-shadow .15s, transform .15s;}
.vupg:hover{border-color:var(--m,var(--ink));box-shadow:0 8px 18px rgba(12,20,36,.09);transform:translateY(-1px);}
.vum{display:block;font-size:14.5px;font-weight:800;color:var(--ink);letter-spacing:-.2px;}
.vuw{display:block;font-size:12.5px;font-weight:500;color:var(--muted);line-height:1.5;margin-top:3px;}

/* The glide highlight when a chip or a rail button lands you on a card. */
.pkg.vrung.pulse{box-shadow:0 0 0 3px color-mix(in srgb,var(--metal,#3d6ea8) 55%,#fff),
  0 16px 34px rgba(12,20,36,.12);}

/* The save-and-send strip that replaced the old builder step. */
.savgrid{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start;margin-top:6px;}
.savgrid .row{display:flex;justify-content:space-between;gap:14px;font-size:14px;padding:6px 0;color:var(--body);}
.savgrid .row span:last-child{font-variant-numeric:tabular-nums;white-space:nowrap;}
.savgrid .tot{display:flex;justify-content:space-between;align-items:baseline;border-top:2px solid var(--ink);margin-top:12px;padding-top:12px;}
.savgrid .tot b{font-size:14px;text-transform:uppercase;letter-spacing:1.4px;color:var(--muted);}
.savgrid .tot i{font-style:normal;font-size:31px;font-weight:800;letter-spacing:-1.2px;color:var(--ink);font-variant-numeric:tabular-nums;}
@media(max-width:1000px){.savgrid{grid-template-columns:1fr;}}
@media(max-width:720px){
  .fixit{display:flex;margin:8px 0 0;width:max-content;}
  .vnrec{flex-wrap:wrap;}
  .vnrec .fixit{margin-left:29px;}
}


/* ---- one-thought verdict rows, spiffed recap (patch144) --------------------
   A gap and its cure share one green-check row inside the verdict box, and
   the save-and-send recap lists what the package actually carries. */
.vnfix{display:flex;gap:10px;align-items:flex-start;margin-top:10px;padding-top:10px;
  border-top:1px solid rgba(0,0,0,.09);font-weight:500;color:#2e5c3f;line-height:1.6;}
.vnfix svg{flex:none;color:var(--good);margin-top:3px;}
.vnfix>span{flex:1 1 auto;min-width:0;}
.vnfix b{font-weight:800;}
.vnfix .fixit{margin-left:6px;flex:none;align-self:center;color:#2e7031;border-color:#bfdcc4;background:#fff;}
.vnfix .fixit:hover{border-color:#2e7031;}
.savgrid .row.hd{font-size:14.5px;color:var(--ink);}
.savgrid .row.hd span:last-child{font-weight:800;}
.savgrid .row.st{padding:3px 0;font-size:13px;color:var(--body);}
.savgrid .row.add{border-top:1px dashed var(--line);margin-top:4px;padding-top:8px;font-weight:600;color:var(--ink);}
.savgrid .sic{font-style:normal;display:inline-block;vertical-align:-3px;margin-right:8px;color:var(--good);line-height:0;}
@media(max-width:720px){
  .vnfix{flex-wrap:wrap;}
  .vnfix .fixit{margin-left:27px;align-self:flex-start;}
}


/* ---- the strip becomes one lead card (patch145) ---------------------------
   No recap, no totals, no second checkout. One compact card: send the build,
   get a call. The build itself rides the hidden fields. */
form.lw.inqcard{max-width:840px;}
.inqcard .fpair{display:grid;grid-template-columns:1fr 1fr;gap:0 18px;}
@media(max-width:720px){.inqcard .fpair{grid-template-columns:1fr;}}


/* ---- the five packages, on a phone (patch151) -----------------------------
   Chris scrolled his own ladder on his own phone: "you cant really see the 5
   packages you just start with bronze and move your way down." He was right.
   patch128 had traded the overview strip away under 720px to buy fold budget,
   which left the phone with no index at all and no evidence that anything
   above Bronze existed.

   It comes back as five metal keys docked to the bottom of the screen. Not
   sticky under the nav, where it would fight the header for the top of the
   viewport, but fixed at the bottom where a thumb already is. Each key is a
   metal and that rung's LIVE price, so the ladder is legible at a glance and
   a tap glides to any rung. The prices are also the receipt for a carried
   pick: add UV on Bronze and all five numbers move at once. */
@media(max-width:720px){
  body.has-vmap{padding-bottom:74px;}
  .vmap{
    display:grid;grid-template-columns:repeat(5,1fr);gap:5px;
    position:fixed;left:0;right:0;bottom:0;z-index:80;margin:0;
    padding:7px 7px calc(7px + env(safe-area-inset-bottom,0px));
    background:rgba(255,255,255,.94);
    -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
    border-top:1px solid var(--line);
    box-shadow:0 -6px 22px rgba(12,20,36,.16);
  }
  .vmap .vchip{
    display:flex;flex-direction:column;justify-content:center;align-items:stretch;
    text-align:center;min-height:44px;
    padding:6px 3px 7px;border-radius:9px;
    box-shadow:0 1px 3px rgba(12,20,36,.22);
  }
  .vmap .vchip::before{background:linear-gradient(180deg,rgba(12,20,36,.30),rgba(12,20,36,.10));}
  .vmap .vchip:hover{transform:none;box-shadow:0 1px 3px rgba(12,20,36,.22);}
  .vmap .vchip:active{transform:scale(.96);}
  .vmap .vcicon,.vmap .vcw,.vmap .vcd,.vmap .vcr{display:none;}
  .vmap .vctxt{display:block;}
  .vmap .vcm{font-size:9px;letter-spacing:.7px;color:#fff;text-shadow:0 1px 2px rgba(12,20,36,.4);white-space:nowrap;}
  .vmap .vcp{
    display:block;margin-top:2px;
    font-size:12.5px;font-weight:800;color:#fff;
    font-variant-numeric:tabular-nums;letter-spacing:-.2px;white-space:nowrap;
    text-shadow:0 1px 2px rgba(12,20,36,.45);
  }
  /* the rung they are on */
  .vmap .vchip.on{box-shadow:inset 0 0 0 2px #fff,0 2px 8px rgba(12,20,36,.35);}
  /* and the one their own water report calls for */
  .vmap .vchip.vrec::after{
    content:"";position:absolute;top:4px;right:4px;
    width:7px;height:7px;border-radius:50%;
    background:var(--good);box-shadow:0 0 0 1.5px #fff;
  }
}
/* A 320px screen gives each key about 57px. PLATINUM is the longest word on
   the ladder and it does not fit at 9px, so under 360px the lettering steps
   down rather than wrapping and shoving that one price out of line. */
@media(max-width:360px){
  .vmap{gap:4px;padding-left:5px;padding-right:5px;}
  .vmap .vchip{padding:6px 1px 7px;min-height:44px;}
  .vmap .vcm{font-size:7.5px;letter-spacing:.1px;}
  .vmap .vcp{font-size:11.5px;}
}

/* Off a phone the strip stays exactly what it was: five plates above the
   ladder, with the $ scale rather than five prices shouting at once. */
.vcp{display:none;}

/* ---- v56 additions: financing line and big-ticket call line on the cards ---- */
.vfin{display:block;margin-top:10px;font-size:13px;font-weight:600;color:#2f7a4d;text-decoration:underline;text-underline-offset:3px;cursor:pointer;}
.vfin:hover{color:#25603d;}
.vcall{margin-top:14px;background:#f4f7fb;border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:13.5px;line-height:1.6;color:var(--body);}
.vcall a{color:var(--ink);font-weight:800;white-space:nowrap;}
