/* ============================================================
   High Society Power Washing
   Light editorial system. Warm paper, ink, brass, water blue.
   ============================================================ */

:root{
  --paper:#faf8f4;
  --paper-2:#f2eee6;
  --paper-3:#ebe5d9;
  --white:#fff;

  --ink:#15120e;
  --ink-2:#3b342b;
  --muted:#797064;
  --muted-2:#a89e91;

  --brass:#8b6620;
  --brass-lt:#c8a04a;
  --brass-tint:rgba(139,102,32,.09);

  --water:#0f6d8f;
  --water-lt:#2aa7cd;

  --line:#e7e1d6;
  --line-2:#d8d0c2;

  --serif:"Fraunces","Iowan Old Style",Palatino,Georgia,serif;
  --sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;

  --r:14px;
  --r-lg:22px;
  --r-xl:30px;

  --sh-sm:0 1px 2px rgba(21,18,14,.04);
  --sh:0 1px 2px rgba(21,18,14,.04), 0 10px 30px -14px rgba(21,18,14,.18);
  --sh-lg:0 2px 4px rgba(21,18,14,.05), 0 30px 70px -32px rgba(21,18,14,.32);

  --ease:cubic-bezier(.22,.61,.36,1);
  --wrap:1200px;
  --pad:22px;
  --hdr-h:74px;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth}
body{
  margin:0; background:var(--paper); color:var(--ink-2);
  font-family:var(--sans); font-size:16.5px; line-height:1.6;
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
/* height:auto is load-bearing. Every <img> carries width/height attributes for CLS,
   and those map to real CSS height. Without this, any rule that overrides width
   (e.g. width:100%) leaves the attribute height in place and object-fit:fill
   stretches the photo. Class-scoped rules below that set an explicit height win
   on specificity, so cover-cropped images are unaffected. */
img{max-width:100%; display:block; height:auto}
a{color:inherit; text-decoration:none}
button,input,select,textarea{font:inherit; color:inherit}
h1,h2,h3,h4{
  font-family:var(--serif); color:var(--ink);
  font-weight:600; letter-spacing:-.022em; line-height:1.08; margin:0;
  font-variation-settings:"SOFT" 0,"WONK" 0;
}
p{margin:0}
ul,ol{margin:0; padding:0; list-style:none}

.wrap{width:100%; max-width:var(--wrap); margin:0 auto; padding:0 var(--pad)}
.i{width:18px; height:18px; flex:0 0 auto; fill:none; stroke:currentColor; stroke-width:1.9; stroke-linecap:round; stroke-linejoin:round}
.i--arw{width:17px;height:17px;stroke-width:2.1}
.honey{position:absolute!important; left:-9999px; opacity:0; pointer-events:none}
.skip{position:absolute;left:-9999px;top:0;background:var(--ink);color:var(--paper);padding:12px 18px;z-index:200;border-radius:0 0 10px 0}
.skip:focus{left:0}

/* ---------------- eyebrow ---------------- */
.eyebrow{
  display:flex; align-items:center; gap:12px;
  font-size:11px; font-weight:700; letter-spacing:.2em; text-transform:uppercase;
  color:var(--brass); margin-bottom:18px;
}
.eyebrow::before{content:""; width:22px; height:1.5px; background:var(--brass); flex:0 0 auto}
.eyebrow b{opacity:.5; font-weight:700}
.eyebrow--light{color:var(--brass-lt)}
.eyebrow--light::before{background:var(--brass-lt)}

/* ---------------- buttons ---------------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:9px;
  border:1px solid transparent; border-radius:999px; cursor:pointer;
  font-family:var(--sans); font-weight:700; font-size:14.5px; letter-spacing:-.005em;
  padding:13px 24px; white-space:nowrap;
  transition:transform .35s var(--ease), background .25s, color .25s, border-color .25s, box-shadow .35s var(--ease);
  will-change:transform;
}
.btn--sm{padding:10px 18px; font-size:13.5px}
.btn--lg{padding:16px 30px; font-size:15.5px}
.btn--full{width:100%}
.btn--ink{background:var(--ink); color:var(--paper); box-shadow:var(--sh)}
.btn--ink:hover{background:#241d15; box-shadow:var(--sh-lg)}
.btn--brass{background:var(--brass); color:#fff; box-shadow:var(--sh)}
.btn--brass:hover{background:#79591b; box-shadow:var(--sh-lg)}
.btn--ghost{background:transparent; color:var(--ink); border-color:var(--line-2)}
.btn--ghost:hover{background:var(--white); border-color:var(--ink); box-shadow:var(--sh-sm)}
.btn--line{background:transparent; color:var(--paper); border-color:rgba(250,248,244,.35)}
.btn--line:hover{background:rgba(250,248,244,.1); border-color:var(--paper)}
.btn--glass{
  background:rgba(255,255,255,.82); color:var(--ink); border-color:rgba(255,255,255,.9);
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px); box-shadow:var(--sh);
}
.btn--glass:hover{background:#fff}
.btn:active{transform:scale(.975)}

/* ---------------- header ---------------- */
.hdr{
  position:fixed; inset:0 0 auto 0; z-index:100; height:var(--hdr-h);
  transition:height .35s var(--ease), background .35s, box-shadow .35s, border-color .35s;
  border-bottom:1px solid transparent;
}
.hdr::before{
  content:""; position:absolute; inset:0 0 -46px 0; z-index:-1; pointer-events:none;
  background:linear-gradient(to bottom,rgba(24,18,10,.52),rgba(24,18,10,.22) 52%,rgba(24,18,10,0));
  transition:opacity .35s var(--ease);
}
.hdr.stuck::before{opacity:0}
.hdr__bar{position:absolute; left:0; bottom:-1px; height:2px; width:0; background:var(--brass); z-index:2; transition:width .1s linear}
.hdr.stuck{
  height:64px; background:rgba(250,248,244,.86); border-bottom-color:var(--line);
  backdrop-filter:saturate(1.5) blur(14px); -webkit-backdrop-filter:saturate(1.5) blur(14px);
  box-shadow:0 8px 30px -22px rgba(21,18,14,.5);
}
.hdr__in{display:flex; align-items:center; gap:20px; height:100%}
.brand{display:flex; align-items:center; flex:0 0 auto; transition:transform .35s var(--ease)}
.brand:hover{transform:translateY(-1px)}
.brand__logo{height:46px; width:auto; transition:height .35s var(--ease)}
.hdr.stuck .brand__logo{height:38px}
/* the client's artwork is cream, made for a dark background. Over the hero photo
   that is right, once the header goes onto paper it has to be the brass cut. */
.brand__l--brass{display:none}
.hdr.stuck .brand__l--cream{display:none}
.hdr.stuck .brand__l--brass{display:block}
.brand__txt{font-family:var(--serif); line-height:1; color:var(--ink)}
.brand__txt b{display:block; font-size:19px; font-weight:600}
.brand__txt i{display:block; font-size:11px; font-style:normal; letter-spacing:.16em; text-transform:uppercase; color:var(--brass); margin-top:3px}

.nav{display:flex; gap:26px; margin-left:auto}
.nav a{
  font-size:14px; font-weight:500; color:var(--ink-2); position:relative; padding:6px 0;
  transition:color .25s;
}
.nav a::after{content:""; position:absolute; left:0; right:100%; bottom:2px; height:1.5px; background:var(--brass); transition:right .35s var(--ease)}
.nav a:hover{color:var(--ink)}
.nav a:hover::after{right:0}
.hdr__cta{display:flex; gap:10px; align-items:center; flex:0 0 auto}
.burger{display:none; width:42px; height:42px; border:1px solid var(--line-2); background:var(--white); border-radius:12px; position:relative; cursor:pointer}
.burger span{position:absolute; left:11px; right:11px; height:1.8px; background:var(--ink); transition:transform .3s var(--ease), opacity .2s}
.burger span:nth-child(1){top:16px}
.burger span:nth-child(2){bottom:16px}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(4.1px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){transform:translateY(-4.1px) rotate(-45deg)}

/* over the hero photo the chrome goes light, once stuck it goes back to ink */
.hdr:not(.stuck) .nav a{color:rgba(255,255,255,.92)}
.hdr:not(.stuck) .nav a:hover{color:#fff}
.hdr:not(.stuck) .nav a::after{background:var(--brass-lt)}
.hdr:not(.stuck) .btn--ghost{color:#fff; border-color:rgba(255,255,255,.4)}
.hdr:not(.stuck) .btn--ghost:hover{background:rgba(255,255,255,.14); border-color:#fff}
.hdr:not(.stuck) .btn--ink{background:var(--paper); color:var(--ink)}
.hdr:not(.stuck) .btn--ink:hover{background:#fff}
.hdr:not(.stuck) .burger{background:rgba(255,255,255,.14); border-color:rgba(255,255,255,.34); backdrop-filter:blur(8px)}
.hdr:not(.stuck) .burger span{background:#fff}
.hdr:not(.stuck) .brand__txt{color:#fff}
.nav.open a{color:var(--ink-2)!important}
/* The header already shows a Free quote button on desktop, so this nav entry
   exists only for the mobile menu, where that button is the sole way in. */
.nav__quote{display:none}
.nav.open .nav__quote{display:block; color:var(--brass)!important; font-weight:700!important}

/* ---------------- hero ---------------- */
.hero{
  position:relative; min-height:100svh; display:flex; align-items:flex-end;
  padding:calc(var(--hdr-h) + 40px) 0 96px; overflow:hidden; isolation:isolate;
}
.hero__media{position:absolute; inset:-4% 0 0; z-index:-3; will-change:transform}
.hero__media picture,.hero__media img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}
.hero__img{object-fit:cover; object-position:center 55%}
.hero__dirty img{object-fit:cover; object-position:center 55%; filter:saturate(.28) brightness(.74) contrast(.94) sepia(.3)}
/* Tuned for the truck shot: enough veil on the left to carry the headline,
   light enough on the right that the rig and the door decal still read. */
.hero__scrim{
  position:absolute; inset:0;
  background:
    linear-gradient(to top, var(--paper) 0%, rgba(250,248,244,.93) 11%, rgba(250,248,244,.6) 28%, rgba(250,248,244,.1) 56%, rgba(250,248,244,0) 78%),
    linear-gradient(to right, rgba(250,248,244,.84) 0%, rgba(250,248,244,.5) 24%, rgba(250,248,244,.1) 46%, rgba(250,248,244,0) 62%);
}
.hero__jet{
  position:absolute; top:-10%; bottom:-10%; width:16%; left:-20%; z-index:2; opacity:0; pointer-events:none;
  background:
    radial-gradient(52% 30% at 18% 22%, rgba(255,255,255,.9), transparent 62%),
    radial-gradient(38% 22% at 72% 64%, rgba(255,255,255,.75), transparent 66%),
    radial-gradient(30% 18% at 40% 86%, rgba(255,255,255,.6), transparent 68%),
    linear-gradient(to right, rgba(255,255,255,0), rgba(255,255,255,.92) 48%, rgba(255,255,255,0));
  filter:blur(1.5px);
}
.hero__in{position:relative; z-index:4; width:100%}
.js .hero__eyebrow{opacity:0}
/* the hero sits on a photo now, so the type carries its own separation */
.hero__eyebrow,.hero__h1,.hero__sub{text-shadow:0 1px 22px rgba(250,248,244,.85), 0 1px 3px rgba(250,248,244,.6)}
.hero__h1{
  font-size:clamp(46px,7.6vw,92px); line-height:.98; letter-spacing:-.035em;
  max-width:11ch; margin-bottom:22px;
}
.hero__h1 .w{display:inline-block; will-change:transform,filter}
.js .hero__h1 .w{opacity:0}
.hero__sub{
  max-width:46ch; font-size:clamp(16.5px,1.6vw,19px); color:var(--ink-2); line-height:1.58;
  margin-bottom:30px;
}
.hero__cta{display:flex; flex-wrap:wrap; gap:12px; margin-bottom:34px}
.js .hero__sub,.js .hero__cta,.js .hero__chips{opacity:0}
.js .hero__dirty{clip-path:inset(0 0 0 0)}
html:not(.js) .hero__dirty,html:not(.js) .hero__jet{display:none}

.chips{display:flex; flex-wrap:wrap; gap:9px}
.chips li{
  display:inline-flex; align-items:center; gap:8px;
  background:rgba(255,255,255,.8); border:1px solid var(--line);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  border-radius:999px; padding:8px 15px; font-size:13px; font-weight:600; color:var(--ink-2);
}
.chips .i{width:15px;height:15px;color:var(--brass)}
.chips li.chips__hot{background:var(--ink); border-color:var(--ink); color:var(--paper)}
.chips li.chips__hot .i{color:var(--brass-lt)}

.hero__scroll{position:absolute; left:50%; bottom:26px; translate:-50% 0; z-index:5; width:26px; height:42px; border:1.5px solid var(--line-2); border-radius:999px; display:grid; place-items:start center; padding-top:8px}
.hero__scroll i{width:3px; height:8px; border-radius:2px; background:var(--brass); animation:sdot 1.8s var(--ease) infinite}
@keyframes sdot{0%{transform:translateY(0);opacity:0}25%{opacity:1}70%{transform:translateY(15px);opacity:0}100%{opacity:0}}

/* animation in */
.hero.go .hero__eyebrow{animation:fadeUp .8s var(--ease) .55s forwards}
.hero.go .hero__h1 .w{animation:wordUp .95s var(--ease) forwards}
.hero.go .hero__sub{animation:fadeUp .9s var(--ease) 1.95s forwards}
.hero.go .hero__cta{animation:fadeUp .9s var(--ease) 2.1s forwards}
.hero.go .hero__chips{animation:fadeUp .9s var(--ease) 2.25s forwards}
.hero.go .hero__dirty{animation:wipe 2500ms cubic-bezier(.55,.06,.32,1) .25s forwards}
.hero.go .hero__jet{animation:jet 2500ms cubic-bezier(.55,.06,.32,1) .25s forwards}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes wordUp{from{opacity:0;transform:translateY(20px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes wipe{from{clip-path:inset(0 0 0 0)}to{clip-path:inset(0 0 0 100%)}}
@keyframes jet{0%{opacity:0;left:-20%}8%{opacity:.95}92%{opacity:.9}100%{opacity:0;left:104%}}

.hero.static .hero__eyebrow,.hero.static .hero__sub,.hero.static .hero__cta,.hero.static .hero__chips{opacity:1}
.hero.static .hero__h1 .w{opacity:1}
.hero.static .hero__dirty{display:none}

.hero__media.fb img{display:none}
.hero__media.fb{background:linear-gradient(150deg,#e9e2d4,#f7f4ee 55%,#dfe9ee)}

/* ---------------- ticker ---------------- */
.proof{border-top:1px solid var(--line); border-bottom:1px solid var(--line); background:var(--white); overflow:hidden}
.ticker{padding:15px 0; -webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent); mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)}
.ticker__row{display:flex; gap:0; width:max-content; animation:tick 42s linear infinite}
.ticker__row:hover{animation-play-state:paused}
.tick{display:inline-flex; align-items:center; gap:11px; padding:0 30px; font-size:13px; font-weight:600; letter-spacing:.04em; text-transform:uppercase; color:var(--muted); white-space:nowrap}
.tick i{width:5px; height:5px; border-radius:50%; background:var(--brass-lt); flex:0 0 auto}
@keyframes tick{to{transform:translateX(-50%)}}

/* ---------------- sections ---------------- */
.sec{padding:clamp(72px,10vw,132px) 0}
.sec--tint{background:var(--paper-2)}
.band{padding:clamp(64px,8vw,104px) 0}
.sec__head,.band__head,.est__head{max-width:60ch; margin:0 auto clamp(38px,5vw,60px); text-align:center}
.sec__head--l{text-align:left; margin-left:0}
.sec__head h2,.band__head h2,.est__head h2{font-size:clamp(30px,4.4vw,54px); margin-bottom:18px}
.sec__head .eyebrow,.band__head .eyebrow,.est__head .eyebrow{justify-content:center}
.sec__head--l .eyebrow{justify-content:flex-start}
.lede{color:var(--muted); font-size:clamp(15.5px,1.5vw,17.5px); line-height:1.62}

/* stats */
.stats{display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
.stat{background:var(--white); border:1px solid var(--line); border-radius:var(--r-lg); padding:26px 22px; box-shadow:var(--sh-sm)}
.stat__n{display:block; font-family:var(--serif); font-size:clamp(32px,4vw,46px); font-weight:600; color:var(--ink); letter-spacing:-.03em; line-height:1; margin-bottom:10px}
.stat span{font-size:13.5px; color:var(--muted); line-height:1.45; display:block}

/* ---------------- credentials ---------------- */
.creds{background:var(--white); border-bottom:1px solid var(--line); padding:clamp(34px,4vw,54px) 0}
.creds__in{display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
.cred{
  position:relative; padding:24px 22px 22px; border:1px solid var(--line); border-radius:var(--r-lg);
  background:var(--paper); box-shadow:var(--sh-sm);
}
.cred::before{content:""; position:absolute; left:22px; right:22px; top:0; height:2px; background:var(--brass); opacity:.9}
.cred__seal{
  width:40px; height:40px; border-radius:50%; display:grid; place-items:center; margin-bottom:14px;
  background:var(--brass-tint); border:1.5px solid rgba(139,102,32,.28); color:var(--brass);
}
.cred__seal .i{width:20px; height:20px}
.cred b{display:block; font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink); letter-spacing:-.015em; margin-bottom:8px; line-height:1.2}
.cred p{font-size:13.8px; color:var(--muted); line-height:1.55}

/* ---------------- who shows up ---------------- */
.sec--who{background:var(--paper)}
.who{display:grid; grid-template-columns:1.02fr 1fr; gap:clamp(28px,5vw,64px); align-items:center}
.who__img{position:relative; margin:0}
.who__img img{border-radius:var(--r-xl); box-shadow:var(--sh-lg); width:100%; height:auto}
.who h2{font-size:clamp(28px,3.9vw,46px); margin-bottom:18px}
.who .lede{margin-bottom:24px}
.who__cta{display:flex; gap:12px; flex-wrap:wrap}
.stamp{
  position:absolute; right:-10px; bottom:-16px; background:var(--paper);
  border:1.5px solid var(--brass); outline:1px solid var(--brass); outline-offset:4px;
  border-radius:12px; padding:12px 18px; text-align:center; rotate:-3deg; box-shadow:var(--sh);
}
.stamp b{display:block; font-family:var(--serif); font-size:15px; font-weight:700; color:var(--brass); letter-spacing:.02em}
.stamp i{display:block; font-style:normal; font-size:10.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); margin-top:3px}

/* ---------------- signature scroll wash ---------------- */
.wash{height:230vh; position:relative}
.wash__sticky{position:sticky; top:0; height:100svh; overflow:hidden; display:grid; place-items:center}
.wash__media{position:absolute; inset:0}
.wash__media picture,.wash__media img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}
.wash__dirty img{filter:saturate(.2) brightness(.6) contrast(1.05) sepia(.35)}
.wash__dirty{clip-path:inset(0 0 0 0)}
.wash__scrim{position:absolute; inset:0; background:linear-gradient(to top,rgba(10,8,6,.72),rgba(10,8,6,.28) 55%,rgba(10,8,6,.55))}
.wash__txt{position:relative; text-align:center; color:#fff; padding:0 22px; max-width:22ch}
.wash__txt .eyebrow{justify-content:center}
.wash__h{color:#fff; font-size:clamp(32px,5.4vw,68px); letter-spacing:-.03em; margin-bottom:16px}
.wash__txt p:last-child{font-size:13px; letter-spacing:.18em; text-transform:uppercase; color:rgba(255,255,255,.6)}

/* ---------------- estimator ---------------- */
.sec--est{background:var(--paper-2); border-top:1px solid var(--line); border-bottom:1px solid var(--line)}
.est__grid{display:grid; grid-template-columns:1.15fr .85fr; gap:20px; align-items:start}
.card{background:var(--white); border:1px solid var(--line); border-radius:var(--r-xl); padding:clamp(22px,3vw,34px); box-shadow:var(--sh)}
.card--dark{background:var(--ink); border-color:var(--ink); color:var(--paper); position:sticky; top:calc(var(--hdr-h) + 16px)}

.seg{display:flex; gap:6px; background:var(--paper-2); border:1px solid var(--line); border-radius:999px; padding:5px; margin-bottom:24px}
.seg--soft{margin-bottom:10px}
.seg__b{flex:1; border:0; background:transparent; border-radius:999px; padding:11px 14px; font-size:14px; font-weight:600; color:var(--muted); cursor:pointer; transition:background .3s var(--ease), color .3s, box-shadow .3s}
.seg__b.is-on{background:var(--white); color:var(--ink); box-shadow:var(--sh-sm)}

.field{margin-bottom:24px}
.field > label:not(.chk){display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-size:13px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--muted); margin-bottom:10px}
.field output{font-family:var(--serif); font-size:17px; font-weight:600; color:var(--ink); text-transform:none; letter-spacing:-.01em; white-space:nowrap; flex:0 0 auto}
.hint{font-size:13px; color:var(--muted-2); margin-top:8px}

.sel{position:relative}
.sel select{
  width:100%; appearance:none; -webkit-appearance:none;
  background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r);
  padding:14px 44px 14px 16px; font-size:15.5px; font-weight:500; color:var(--ink); cursor:pointer;
}
.sel select:focus-visible{outline:2px solid var(--brass); outline-offset:1px}
.sel .i{position:absolute; right:15px; top:50%; translate:0 -50%; pointer-events:none; color:var(--muted)}

input[type=range]{
  -webkit-appearance:none; appearance:none; width:100%; height:26px; background:transparent; cursor:pointer; display:block;
}
input[type=range]::-webkit-slider-runnable-track{height:6px; border-radius:99px; background:linear-gradient(to right,var(--brass) var(--p,20%),var(--paper-3) var(--p,20%))}
input[type=range]::-moz-range-track{height:6px; border-radius:99px; background:linear-gradient(to right,var(--brass) var(--p,20%),var(--paper-3) var(--p,20%))}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none; width:24px; height:24px; margin-top:-9px; border-radius:50%; background:var(--white); border:1.5px solid var(--line-2); box-shadow:var(--sh); transition:transform .2s var(--ease)}
input[type=range]::-moz-range-thumb{width:22px; height:22px; border-radius:50%; background:var(--white); border:1.5px solid var(--line-2); box-shadow:var(--sh)}
input[type=range]:active::-webkit-slider-thumb{transform:scale(1.14)}
.rangeticks{display:flex; justify-content:space-between; font-size:11.5px; color:var(--muted-2); margin-top:2px}

.field--adds{display:grid; gap:12px; margin-bottom:0}
.chk{display:flex; align-items:flex-start; gap:12px; cursor:pointer; padding:14px 16px; border:1px solid var(--line); border-radius:var(--r); background:var(--paper); transition:border-color .25s, background .25s}
.chk:hover{border-color:var(--line-2)}
.chk input{position:absolute; opacity:0; width:0; height:0}
.chk i{width:21px; height:21px; flex:0 0 auto; border-radius:7px; border:1.5px solid var(--line-2); background:var(--white); display:grid; place-items:center; transition:background .25s, border-color .25s; margin-top:1px}
.chk i::after{content:""; width:9px; height:5px; border-left:2px solid #fff; border-bottom:2px solid #fff; rotate:-45deg; opacity:0; transition:opacity .2s; margin-top:-2px}
.chk input:checked + i{background:var(--water); border-color:var(--water)}
.chk input:checked + i::after{opacity:1}
.chk input:focus-visible + i{outline:2px solid var(--brass); outline-offset:2px}
.chk span{font-size:14.5px; font-weight:600; color:var(--ink)}
.chk em{display:block; font-style:normal; font-weight:500; font-size:13px; color:var(--muted); margin-top:2px}
.sub{padding:2px 0 6px 33px}
.sub label{display:block; font-size:12.5px; color:var(--muted); margin-bottom:6px}
.sub input{width:130px; background:var(--white); border:1px solid var(--line-2); border-radius:10px; padding:10px 12px; font-size:15px; font-weight:600}

.est__label{font-size:11px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:var(--brass-lt); margin-bottom:14px}
.est__big{font-family:var(--serif); font-size:clamp(34px,4.6vw,50px); font-weight:600; color:#fff; letter-spacing:-.032em; line-height:1.02; margin-bottom:8px}
.est__big em{font-style:normal; font-size:.44em; color:rgba(250,248,244,.5); font-family:var(--sans); font-weight:500; padding:0 3px}
.est__rate{font-size:13.5px; color:rgba(250,248,244,.6); margin-bottom:22px}
.est__lines{border-top:1px solid rgba(250,248,244,.14); padding-top:16px; margin-bottom:18px; display:grid; gap:11px}
.est__lines li{display:flex; justify-content:space-between; gap:16px; font-size:13.5px; color:rgba(250,248,244,.76)}
.est__lines li b{font-weight:600; color:#fff; white-space:nowrap}
.est__lines li.off b{color:var(--brass-lt)}
.est__min{font-size:13px; color:var(--brass-lt); background:rgba(200,160,74,.12); border:1px solid rgba(200,160,74,.28); border-radius:12px; padding:11px 14px; margin-bottom:18px}
.est__fine{font-size:12.5px; color:rgba(250,248,244,.45); text-align:center; margin-top:12px; line-height:1.5}

/* ---------------- services ---------------- */
.filters{display:flex; flex-wrap:wrap; gap:8px; justify-content:center; margin-bottom:32px}
.fbtn{
  border:1px solid var(--line-2); background:var(--white); border-radius:999px;
  padding:10px 20px; font-size:13.5px; font-weight:600; color:var(--muted); cursor:pointer;
  transition:background .28s var(--ease), color .28s, border-color .28s, transform .28s var(--ease);
}
.fbtn:hover{color:var(--ink); transform:translateY(-1px)}
.fbtn.is-on{background:var(--ink); border-color:var(--ink); color:var(--paper)}

.svcs{display:grid; grid-template-columns:repeat(3,1fr); gap:14px}
.svc{
  background:var(--white); border:1px solid var(--line); border-radius:var(--r-lg);
  position:relative; overflow:hidden; display:flex; flex-direction:column;
  transition:transform .45s var(--ease), box-shadow .45s var(--ease), border-color .3s, opacity .3s;
}
.svc::after{content:""; position:absolute; left:0; right:0; top:0; height:2px; background:linear-gradient(to right,var(--brass),var(--water)); transform:scaleX(0); transform-origin:0 50%; transition:transform .5s var(--ease); z-index:3}
.svc:hover{transform:translateY(-4px); box-shadow:var(--sh-lg); border-color:var(--line-2)}
.svc:hover::after{transform:scaleX(1)}
.svc.hide{display:none}

/* every card the same picture size, so the grid never looks ragged */
.svc__img{position:relative; margin:0; aspect-ratio:4/3; overflow:hidden; background:var(--paper-3)}
.svc__img img{width:100%; height:100%; object-fit:cover; transition:transform .7s var(--ease)}
.svc:hover .svc__img img{transform:scale(1.05)}
.svc__tag{
  position:absolute; left:12px; top:12px; z-index:2;
  font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase;
  background:rgba(255,255,255,.92); color:var(--ink); border-radius:999px; padding:5px 11px;
  backdrop-filter:blur(6px);
}
.svc__body{padding:22px 24px 24px; display:flex; flex-direction:column; flex:1}
.svc__ic{width:40px; height:40px; border-radius:12px; background:var(--brass-tint); color:var(--brass); display:grid; place-items:center; margin:-42px 0 14px; position:relative; z-index:2; border:2px solid var(--white); box-shadow:var(--sh-sm)}
.svc__ic .i{width:20px; height:20px}
.svc h3{font-size:19.5px; margin-bottom:9px; letter-spacing:-.018em}
.svc p{font-size:14.5px; color:var(--muted); line-height:1.58; margin-bottom:14px}
.svc__price{display:inline-flex; align-items:center; align-self:flex-start; margin-top:auto; font-size:12.5px; font-weight:700; letter-spacing:.03em; color:var(--water); background:rgba(15,109,143,.08); border-radius:999px; padding:6px 13px}
.svc__top{position:absolute; top:12px; right:12px; z-index:2; background:var(--ink); color:var(--brass-lt); border-radius:999px; padding:5px 11px; font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase}

/* ---------------- before / after ---------------- */
.ba{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(24px,4vw,56px); align-items:center; margin-bottom:clamp(40px,6vw,72px)}
.ba__stage{
  --pos:50%;
  position:relative; aspect-ratio:3/4; max-width:560px; width:100%;
  border-radius:var(--r-xl); overflow:hidden; border:1px solid var(--line-2);
  user-select:none; touch-action:pan-y; background:var(--paper-3); box-shadow:var(--sh-lg); cursor:ew-resize;
}
.ba__stage img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}
.ba__before{clip-path:inset(0 calc(100% - var(--pos)) 0 0)}
.ba__handle{position:absolute; top:0; bottom:0; left:var(--pos); width:3px; background:#fff; translate:-50% 0; box-shadow:0 0 0 1px rgba(21,18,14,.12)}
.ba__handle span{position:absolute; top:50%; left:50%; translate:-50% -50%; width:48px; height:48px; border-radius:50%; background:#fff; display:grid; place-items:center; box-shadow:0 8px 26px rgba(21,18,14,.3)}
.ba__handle span::before{content:"⟷"; color:var(--ink); font-size:19px; font-weight:700}
.ba__tag{position:absolute; top:16px; font-size:10.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; padding:6px 12px; border-radius:999px; background:rgba(255,255,255,.9); color:var(--ink); backdrop-filter:blur(6px); z-index:2}
.ba__tag--l{left:16px}
.ba__tag--r{right:16px}
.ba__head h3{font-size:clamp(24px,3vw,34px); margin-bottom:14px}
.ba__head p{color:var(--muted); font-size:16px; line-height:1.62; margin-bottom:12px}
.ba__note{color:var(--muted-2)!important; font-size:13.5px!important; font-style:italic}

.gallery{columns:4 250px; column-gap:12px; padding-bottom:8px}
@media (max-width:900px){.gallery{columns:2 160px}}
.shot{position:relative; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--line); cursor:zoom-in; background:var(--paper-3); margin:0 0 12px; break-inside:avoid; -webkit-column-break-inside:avoid; display:block}
.shot img{width:100%; height:auto; display:block; transition:transform .7s var(--ease)}
.shot:hover img{transform:scale(1.06)}
.shot__cap{position:absolute; left:0; right:0; bottom:0; padding:26px 16px 13px; font-size:12.5px; font-weight:600; color:#fff; background:linear-gradient(to top,rgba(10,8,6,.78),transparent)}
.shot.fb img{display:none}
.shot.fb{min-height:220px}
.shot.fb::after{content:"Photo"; position:absolute; inset:0; display:grid; place-items:center; color:var(--muted-2); font-size:12px; letter-spacing:.16em; text-transform:uppercase}

/* ---------------- commercial ---------------- */
.sec--comm{background:var(--white); border-top:1px solid var(--line); border-bottom:1px solid var(--line)}
.comm{display:grid; grid-template-columns:1fr 1.05fr; gap:clamp(28px,5vw,64px); align-items:center}
.comm h2{font-size:clamp(30px,4.2vw,50px); margin-bottom:18px}
.comm .lede{margin-bottom:24px}
.comm__img img{border-radius:var(--r-xl); box-shadow:var(--sh-lg); width:100%; height:100%; object-fit:cover}
.ticks{display:grid; gap:12px; margin-bottom:30px}
.ticks li{display:flex; gap:11px; align-items:flex-start; font-size:15.5px; color:var(--ink-2)}
.ticks li::before{content:""; width:19px; height:19px; flex:0 0 auto; border-radius:50%; background:var(--brass-tint); margin-top:2px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b6620' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 13 4 4 10-10'/%3E%3C/svg%3E");
  background-size:12px; background-repeat:no-repeat; background-position:center}

/* ---------------- process ---------------- */
.steps{display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
.step{position:relative; padding-top:34px}
.step__line{position:absolute; top:11px; left:0; right:-14px; height:1.5px; background:var(--line-2); overflow:hidden}
.step__line::after{content:""; position:absolute; inset:0; background:var(--brass); transform:scaleX(0); transform-origin:0 50%; transition:transform .9s var(--ease)}
.step.on .step__line::after{transform:scaleX(1)}
.step__n{position:absolute; top:0; left:0; font-family:var(--serif); font-size:13px; font-weight:700; letter-spacing:.1em; color:var(--brass); background:var(--paper); padding-right:12px}
.step h3{font-size:20px; margin-bottom:10px; letter-spacing:-.018em}
.step p{font-size:14.5px; color:var(--muted); line-height:1.58}

/* ---------------- service area ---------------- */
.area{max-width:820px; margin:0 auto}
.area__search{position:relative; margin-bottom:14px}
.area__search .i{position:absolute; left:20px; top:50%; translate:0 -50%; color:var(--muted-2); width:19px; height:19px}
.area__search input{
  width:100%; background:var(--white); border:1px solid var(--line-2); border-radius:999px;
  padding:18px 22px 18px 52px; font-size:16.5px; box-shadow:var(--sh-sm);
}
.area__search input:focus-visible{outline:2px solid var(--brass); outline-offset:1px}
.area__msg{min-height:24px; text-align:center; font-size:14.5px; font-weight:600; color:var(--water); margin-bottom:16px}
.towns{display:flex; flex-wrap:wrap; gap:8px; justify-content:center}
.towns li{
  border:1px solid var(--line); background:var(--white); border-radius:999px;
  padding:9px 16px; font-size:13.5px; font-weight:600; color:var(--muted);
  transition:opacity .3s, transform .3s var(--ease), border-color .3s, color .3s, background .3s;
}
.towns li.home{border-color:var(--brass); color:var(--brass); background:var(--brass-tint)}
.towns li.hit{background:var(--ink); border-color:var(--ink); color:var(--paper); transform:translateY(-2px)}
.towns li.dim{opacity:.32}

/* ---------------- promise ---------------- */
.sec--promise{background:var(--ink); color:var(--paper)}
.promise{max-width:66ch; margin:0 auto; text-align:center}
.promise .eyebrow{justify-content:center}
.promise h2{color:#fff; font-size:clamp(30px,4.4vw,52px); margin-bottom:20px}
.promise > p{color:rgba(250,248,244,.72); font-size:clamp(15.5px,1.6vw,18px); line-height:1.64; margin-bottom:32px}
.promise__cta{display:flex; gap:12px; justify-content:center; flex-wrap:wrap}

/* ---------------- faq ---------------- */
.faqwrap{max-width:900px}
.qa{border-top:1px solid var(--line)}
.qa__i{border-bottom:1px solid var(--line)}
.qa__q{
  width:100%; display:flex; align-items:flex-start; justify-content:space-between; gap:20px;
  background:transparent; border:0; text-align:left; cursor:pointer; padding:24px 4px;
  font-family:var(--serif); font-size:clamp(18px,2.2vw,22px); font-weight:600; color:var(--ink); letter-spacing:-.018em; line-height:1.3;
}
.qa__q i{width:26px; height:26px; flex:0 0 auto; border-radius:50%; border:1.5px solid var(--line-2); position:relative; margin-top:3px; transition:background .3s, border-color .3s}
.qa__q i::before,.qa__q i::after{content:""; position:absolute; inset:50% 6px auto 6px; height:1.7px; background:var(--ink); translate:0 -50%; transition:transform .35s var(--ease), background .3s}
.qa__q i::after{rotate:90deg}
.qa__i.on .qa__q i{background:var(--ink); border-color:var(--ink)}
.qa__i.on .qa__q i::before,.qa__i.on .qa__q i::after{background:var(--paper)}
.qa__i.on .qa__q i::after{transform:scaleX(0)}
.qa__a{max-height:0; overflow:hidden; transition:max-height .45s var(--ease)}
.qa__a p{padding:0 60px 26px 4px; color:var(--muted); font-size:15.5px; line-height:1.66}
.qa__a b{color:var(--ink); font-weight:600}

/* ---------------- quote ---------------- */
.sec--quote{background:var(--paper-2); border-top:1px solid var(--line)}
.quote{display:grid; grid-template-columns:.85fr 1.15fr; gap:clamp(28px,4vw,56px); align-items:start}
.quote h2{font-size:clamp(30px,4vw,46px); margin-bottom:16px}
.quote .lede{margin-bottom:28px}
.contactlist{display:grid; gap:10px}
.contactlist a{display:grid; grid-template-columns:auto minmax(0,1fr); align-items:center; column-gap:13px; row-gap:2px; background:var(--white); border:1px solid var(--line); border-radius:var(--r); padding:15px 17px; transition:border-color .3s, transform .3s var(--ease), box-shadow .3s}
.contactlist a .i{grid-row:1 / span 2}
.contactlist a b,.contactlist a i{grid-column:2}
.contactlist a:hover{border-color:var(--line-2); transform:translateY(-2px); box-shadow:var(--sh)}
.contactlist .i{color:var(--brass)}
.contactlist b{display:block; font-size:14.5px; font-weight:600; color:var(--ink); word-break:break-word}
.contactlist i{display:block; font-style:normal; font-size:12.5px; color:var(--muted-2)}
.contactlist a > div,.contactlist a span{min-width:0}

.form__row{display:grid; grid-template-columns:1fr 1fr; gap:14px}
.inp{margin-bottom:14px; position:relative}
.inp label{display:block; font-size:12.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--muted); margin-bottom:7px}
.inp input,.inp textarea{
  width:100%; background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r);
  padding:14px 16px; font-size:15.5px; transition:border-color .25s, background .25s, box-shadow .25s;
}
.inp textarea{resize:vertical; min-height:110px}
.inp input:focus,.inp textarea:focus{outline:0; border-color:var(--brass); background:var(--white); box-shadow:0 0 0 3px var(--brass-tint)}
.inp.err input,.inp.err textarea{border-color:#b4402f; background:#fdf5f4}
.inp .msg{display:block; font-size:12.5px; color:#b4402f; margin-top:6px}
.formnote{font-size:13.5px; text-align:center; margin-top:12px; color:var(--muted)}
.formnote.bad{color:#b4402f}
.btn.is-busy{opacity:.65; pointer-events:none}

/* ---------------- footer ---------------- */
.foot{background:var(--ink); color:rgba(250,248,244,.72); padding:clamp(48px,6vw,76px) 0 26px}
.foot__in{display:grid; grid-template-columns:1.25fr .8fr .95fr .8fr 1.05fr; gap:34px; padding-bottom:36px; border-bottom:1px solid rgba(250,248,244,.12)}
.foot__col a b{font-weight:700; color:var(--brass-lt)}
.foot__brand{display:flex; flex-direction:column; gap:14px; align-items:flex-start}
.foot__brand img{height:58px; width:auto; max-width:100%}
.foot__brand span{font-size:13.5px; color:rgba(250,248,244,.5)}
.foot__brand .brand__txt{color:var(--paper)}
.foot__col h4{font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:var(--brass-lt); margin-bottom:14px}
.foot__col a,.foot__col p{display:block; font-size:14px; margin-bottom:8px; transition:color .25s; word-break:break-word}
.foot__col a:hover{color:#fff}
.foot__dim{color:rgba(250,248,244,.42); font-size:13px!important; line-height:1.6}
.foot__base{display:flex; justify-content:space-between; gap:16px; flex-wrap:wrap; padding-top:22px; font-size:12.5px; color:rgba(250,248,244,.42)}
.foot__by a{color:var(--brass-lt)}

/* ---------------- mobile bar ---------------- */
.mobar{
  position:fixed; left:12px; right:12px; bottom:12px; z-index:90; display:none; gap:10px;
  transform:translateY(140%); transition:transform .45s var(--ease);
  padding-bottom:env(safe-area-inset-bottom);
}
.mobar.up{transform:none}
.mobar__b{flex:1; display:flex; align-items:center; justify-content:center; gap:8px; padding:15px 12px; border-radius:999px; font-size:14.5px; font-weight:700; box-shadow:var(--sh-lg)}
.mobar__b--call{background:var(--ink); color:var(--paper)}
.mobar__b--quote{background:var(--brass); color:#fff}

/* ---------------- lightbox ---------------- */
.lb{position:fixed; inset:0; z-index:150; background:rgba(12,10,8,.94); display:grid; place-items:center; padding:60px 20px; backdrop-filter:blur(6px)}
.lb[hidden]{display:none}
.lb__fig{margin:0; max-width:min(1100px,94vw); text-align:center}
.lb__fig img{max-height:78svh; width:auto; margin:0 auto; border-radius:14px}
.lb__fig figcaption{color:rgba(255,255,255,.68); font-size:13.5px; margin-top:16px}
.lb__x{position:absolute; top:18px; right:20px; width:44px; height:44px; border-radius:50%; border:1px solid rgba(255,255,255,.2); background:rgba(255,255,255,.06); color:#fff; font-size:26px; line-height:1; cursor:pointer}
.lb__nav{position:absolute; top:50%; translate:0 -50%; width:52px; height:52px; border-radius:50%; border:1px solid rgba(255,255,255,.2); background:rgba(255,255,255,.06); color:#fff; font-size:28px; line-height:1; cursor:pointer}
.lb__nav--p{left:16px}
.lb__nav--n{right:16px}
.lb__x:hover,.lb__nav:hover{background:rgba(255,255,255,.16)}

/* ---------------- reveal ---------------- */
.js .reveal{opacity:0; transform:translateY(22px); transition:opacity .8s var(--ease) var(--d,0ms), transform .8s var(--ease) var(--d,0ms)}
.js .reveal.in{opacity:1; transform:none}
html:not(.js) .wash{height:auto}
html:not(.js) .wash__sticky{position:relative; height:70svh}
html:not(.js) .wash__dirty{display:none}

/* ---------------- responsive ---------------- */
@media (max-width:1080px){
  .nav{display:none}
  .nav.open{
    display:flex; position:fixed; inset:var(--hdr-h) 0 auto 0; flex-direction:column; gap:0;
    background:var(--paper); border-bottom:1px solid var(--line); padding:12px 22px 22px;
    box-shadow:var(--sh-lg); margin:0;
  }
  .nav.open a{padding:15px 0; border-bottom:1px solid var(--line); font-size:16px; font-weight:600}
  .nav.open a:last-child{border-bottom:0}
  .burger{display:block; order:3}
  .hdr__cta{margin-left:auto}
  .hdr__cta .btn--ghost{display:none}
  .est__grid{grid-template-columns:1fr}
  .card--dark{position:static}
  .svcs{grid-template-columns:repeat(2,1fr)}
  .steps{grid-template-columns:repeat(2,1fr); gap:26px 14px}
  .comm{grid-template-columns:1fr}
  .comm__img{order:-1}
  .creds__in{grid-template-columns:repeat(2,1fr)}
  .who{grid-template-columns:1fr}
  .quote{grid-template-columns:1fr}
  .foot__in{grid-template-columns:1fr 1fr}
}

@media (max-width:720px){
  body{font-size:16px}
  :root{--hdr-h:64px}

  /* PHONE HERO: photo on top, words underneath on solid paper.
     Laying type over a photograph on a 390px screen never reads, and it buried
     the truck and the door decal behind the buttons. Splitting them means the
     photo is fully visible and every word sits on a clean background. */
  .hero{display:block; min-height:0; padding:0 0 clamp(30px,7vw,44px); align-items:stretch}
  .hero__media{
    position:relative; inset:auto; height:46svh; min-height:310px;
    transform:none!important; will-change:auto;
  }
  .hero__scrim{
    background:
      linear-gradient(to bottom, rgba(20,15,8,.42) 0%, rgba(20,15,8,.06) 26%, rgba(20,15,8,0) 46%),
      linear-gradient(to top, var(--paper) 0%, rgba(250,248,244,.55) 9%, rgba(250,248,244,0) 22%);
  }
  .hero__in{padding-top:24px}
  .hero__eyebrow,.hero__h1,.hero__sub{text-shadow:none}
  .hero__h1{font-size:clamp(38px,11.6vw,56px); max-width:14ch; letter-spacing:-.03em; margin-bottom:16px}
  .hero__sub{display:none}
  .hero__cta{gap:10px; margin-bottom:22px}
  .hero__cta .btn{flex:1 1 100%}
  .hero__scroll{display:none}
  .eyebrow{font-size:10px; letter-spacing:.13em; gap:8px; margin-bottom:14px}
  .eyebrow::before{width:16px}
  /* the eyebrow is a flex row, so on a narrow screen each word became its own
     flex item and stacked into columns. Inline flow keeps it on one line. */
  .hero__eyebrow{display:block; white-space:nowrap; font-size:9.5px; letter-spacing:.1em}
  .hero__eyebrow::before{display:inline-block; vertical-align:middle; margin-right:9px; position:relative; top:-1px}
  .hero__eyebrow b{margin:0 3px}
  .chips li{font-size:12px; padding:7px 12px; background:var(--white)}
  .stats{grid-template-columns:repeat(2,1fr)}
  .creds__in{grid-template-columns:1fr}
  .stamp{right:12px; bottom:-12px; padding:10px 14px}
  .wash{height:200vh}
  .svcs{grid-template-columns:1fr}
  .ba{grid-template-columns:1fr}
  .ba__stage{order:2; max-width:100%; aspect-ratio:4/5}
  .ba__head{order:1}
  .steps{grid-template-columns:1fr; gap:8px}
  .step{padding-top:0; padding-left:44px; padding-bottom:26px}
  .step__line{top:6px; bottom:-6px; left:13px; right:auto; width:1.5px; height:auto}
  .step__line::after{transform:scaleY(0); transform-origin:50% 0}
  .step.on .step__line::after{transform:scaleY(1)}
  .step__n{background:var(--paper); padding:0 0 6px}
  .form__row{grid-template-columns:1fr; gap:0}
  .foot__in{grid-template-columns:1fr; gap:28px}
  .mobar{display:flex}
  .foot{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
  .gallery{grid-auto-columns:minmax(78vw,1fr); margin-right:calc(var(--pad) * -1); padding-right:var(--pad)}
  .qa__a p{padding-right:16px}
  .lb__nav{display:none}
}

/* 375px wide phones: the header was pushing past the viewport edge */
@media (max-width:400px){
  :root{--pad:16px}
  .hdr__in{gap:10px}
  .brand__logo{height:38px}
  .hdr.stuck .brand__logo{height:32px}
  .hdr__cta .btn--sm{padding:9px 13px; font-size:12.5px}
  .burger{width:38px; height:38px}
  .burger span{left:10px; right:10px}
  .burger span:nth-child(1){top:14px}
  .burger span:nth-child(2){bottom:14px}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important; animation-iteration-count:1!important; transition-duration:.001ms!important}
  .reveal{opacity:1!important; transform:none!important}
  .hero__eyebrow,.hero__sub,.hero__cta,.hero__chips,.hero__h1 .w{opacity:1!important; transform:none!important; filter:none!important}
  .hero__dirty,.hero__jet,.wash__dirty{display:none!important}
  .ticker__row{animation:none!important}
}

@media print{.hdr,.mobar,.hero__scroll,.lb{display:none!important}}

/* ---------------- reviews ---------------- */
.revs{display:grid; grid-template-columns:repeat(3,1fr); gap:14px}
.rev{
  margin:0; background:var(--white); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:26px 24px; box-shadow:var(--sh-sm); display:flex; flex-direction:column; gap:14px;
}
.rev__stars{display:flex; gap:3px; color:var(--brass-lt)}
.rev__stars .i{width:16px; height:16px; fill:currentColor; stroke:none}
.rev blockquote{margin:0; font-family:var(--serif); font-size:17.5px; line-height:1.5; color:var(--ink); letter-spacing:-.012em}
.rev figcaption{margin-top:auto}
.rev figcaption b{display:block; font-size:14px; font-weight:600; color:var(--ink)}
.rev figcaption span{display:block; font-size:12.5px; color:var(--muted-2); margin-top:2px}
@media (max-width:1080px){ .revs{grid-template-columns:repeat(2,1fr)} }
@media (max-width:720px){ .revs{grid-template-columns:1fr} }

/* Grid and flex children default to min-width:auto, so a single unbreakable
   run of text inside the rate cards was forcing them wider than the phone.
   This is the fix for that, not a cosmetic tweak. */
.est__grid > *,
.est__lines li,
.est__lines li span,
.svcs > *,
.creds__in > *,
.steps > *,
.revs > *{min-width:0}
.est__lines li span{overflow-wrap:anywhere}
.est__big{overflow-wrap:anywhere}
