/* =========================================================================
   TOKENS
   ========================================================================= */
:root{
  --ink:#111110;
  --ink-soft:#2A2A28;
  --paper:#FFFFFF;
  --stock:#F4F3F1;
  --stone:#F6F3EE;        /* warm off-white ground */
  --stone-rule:#E3DCD1;   /* soft stone hairline */
  --stone-deep:#DCD3C6;
  --ink-muted:#57565A;
  --paper-muted:#B4B2AC;
  --rule:#E2E1DE;

  --sans:'Archivo','Helvetica Neue',Helvetica,Arial,sans-serif;

  --gutter:clamp(20px,4.5vw,72px);
  --sheet:1400px;

  --r-field:14px;
  --r-card:24px;
  --r-pill:999px;
  --chalk:#F5F3EF;

  --band:clamp(84px,9vw,150px);
  --ease:cubic-bezier(.16,1,.3,1);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:no-preference){ html{scroll-behavior:smooth} }
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:1rem;line-height:1.7;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
img,video{display:block;max-width:100%}
h1,h2,h3,h4,p,figure,dl,dd,ul{margin:0;padding:0}
ul{list-style:none}
a{color:inherit}
.vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* --- type ---------------------------------------------------------------- */
.display{
  font-weight:500;font-size:clamp(2.5rem,5.9vw,5.25rem);
  line-height:1.0;letter-spacing:-.035em;text-wrap:balance;
}
.headline{
  font-weight:500;font-size:clamp(2rem,4.1vw,3.6rem);
  line-height:1.05;letter-spacing:-.032em;text-wrap:balance;
}
.sub{
  font-weight:500;font-size:clamp(1.35rem,2vw,1.75rem);
  line-height:1.2;letter-spacing:-.022em;
}
.label{font-size:.6875rem;font-weight:600;letter-spacing:.2em;
       text-transform:uppercase;line-height:1.2}
.lede{font-size:clamp(1rem,1.1vw,1.125rem);line-height:1.7;color:var(--ink-muted)}
.muted{color:var(--ink-muted)}
.nb{white-space:nowrap}

/* --- layout -------------------------------------------------------------- */
.sheet{max-width:var(--sheet);margin-inline:auto;padding-inline:var(--gutter)}
.band{padding-block:var(--band)}
section[id],footer[id]{scroll-margin-top:104px}
.dark{background:var(--ink);color:var(--chalk)}
.dark .lede,.dark .muted{color:var(--paper-muted)}

/* --- pills, buttons ------------------------------------------------------ */
.pill{
  display:inline-flex;align-items:center;gap:10px;
  padding:11px 22px;border-radius:var(--r-pill);
  border:1px solid var(--rule);background:var(--paper);
}
.pill::before{content:"";width:7px;height:7px;border-radius:50%;
              background:var(--ink);flex:0 0 auto}
.dark .pill{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.2)}
.dark .pill::before{background:var(--chalk)}

.btn{
  display:inline-flex;align-items:center;gap:12px;
  padding:19px 32px;border-radius:var(--r-pill);
  background:var(--ink);color:var(--paper);border:1px solid var(--ink);
  font-family:var(--sans);font-size:.9375rem;font-weight:500;letter-spacing:-.01em;
  line-height:1;text-decoration:none;cursor:pointer;
  transition:background .2s var(--ease),color .2s var(--ease),border-color .2s var(--ease);
}
.btn:hover,.btn:focus-visible{background:var(--paper);color:var(--ink)}
.btn--light{background:var(--paper);color:var(--ink);border-color:var(--rule)}
.btn--light:hover,.btn--light:focus-visible{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.btn__arrow{font-size:.875rem;line-height:1}
.dark .btn{background:var(--chalk);color:var(--ink);border-color:var(--chalk)}
.dark .btn:hover,.dark .btn:focus-visible{background:transparent;color:var(--chalk)}

:focus-visible{outline:2px solid currentColor;outline-offset:3px}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--ink);
      color:var(--paper);padding:14px 20px;border-radius:0 0 var(--r-field) 0}
.skip:focus{left:0}

/* =========================================================================
   1 — FLOATING NAV
   ========================================================================= */
.nav{
  position:fixed;top:18px;left:50%;transform:translateX(-50%);
  z-index:100;width:min(1240px,calc(100% - 32px));
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:12px 12px 12px 22px;border-radius:var(--r-pill);
  background:rgba(17,17,16,.42);border:1px solid rgba(255,255,255,.16);
  backdrop-filter:blur(18px) saturate(1.2);
  -webkit-backdrop-filter:blur(18px) saturate(1.2);
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.nav.is-solid{background:rgba(17,17,16,.94);border-color:rgba(255,255,255,.1)}
.nav__mark{display:flex;align-items:center;gap:14px;text-decoration:none;color:var(--chalk)}
.nav__badge{
  width:44px;height:44px;border-radius:50%;flex:0 0 auto;
  border:1px solid rgba(255,255,255,.34);
  display:grid;place-items:center;overflow:hidden;
}
.nav__badge img{width:30px;height:auto}
/* the descriptor is the logo's own lettering, lifted from the supplied artwork
   and set on one line, rather than approximated in the page's grotesque */
.nav__word{height:clamp(9px,.85vw,12px);width:auto;flex:0 0 auto;opacity:.92}
.nav__links{display:flex;align-items:center;gap:clamp(18px,2.2vw,38px)}
.nav__links a{font-size:.9375rem;color:rgba(245,243,239,.82);text-decoration:none;
              transition:color .2s var(--ease)}
.nav__links a:hover,.nav__links a:focus-visible{color:#fff}
.nav__cta{
  padding:15px 28px;border-radius:var(--r-pill);
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.22);
  color:var(--chalk);font-size:.75rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;text-decoration:none;white-space:nowrap;
  transition:background .2s var(--ease),color .2s var(--ease);
}
.nav__cta:hover,.nav__cta:focus-visible{background:var(--chalk);color:var(--ink)}

/* menu button — hidden on desktop, drives the mobile dropdown.
   flex-direction:column stacks the three lines into a clean hamburger;
   the circle mirrors the logo badge on the left. */
.nav__toggle{display:none;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  width:42px;height:42px;flex:0 0 auto;padding:0;cursor:pointer;
  background:transparent;border:1px solid rgba(255,255,255,.34);border-radius:50%;
  color:var(--chalk);transition:background .2s var(--ease),border-color .2s var(--ease)}
.nav__toggle:hover,.nav__toggle:focus-visible{background:rgba(255,255,255,.12)}
.nav__toggle span{display:block;width:18px;height:2px;background:currentColor;border-radius:2px;
  transition:transform .3s var(--ease),opacity .2s var(--ease)}
.nav.is-open .nav__toggle{background:rgba(255,255,255,.12)}
.nav.is-open .nav__toggle span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.nav.is-open .nav__toggle span:nth-child(2){opacity:0}
.nav.is-open .nav__toggle span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}

@media (max-width:940px){
  .nav__toggle{display:inline-flex;margin-left:auto}
  .nav__cta{margin-left:10px}
  .nav__links{
    position:absolute;top:calc(100% + 10px);left:0;right:0;
    flex-direction:column;align-items:stretch;gap:2px;
    background:#141312;border:1px solid rgba(255,255,255,.16);
    border-radius:20px;padding:12px;box-shadow:0 22px 50px rgba(0,0,0,.5);
    opacity:0;visibility:hidden;transform:translateY(-8px);
    transition:opacity .25s var(--ease),transform .25s var(--ease),visibility .25s;
  }
  .nav.is-open .nav__links{opacity:1;visibility:visible;transform:none}
  .nav__links a{padding:13px 16px;border-radius:12px;font-size:1rem;color:var(--chalk)}
  .nav__links a:hover,.nav__links a:focus-visible{background:rgba(255,255,255,.08);color:#fff}
  .nav__links a[aria-current="page"]{background:rgba(255,255,255,.12);color:#fff}
}
@media (max-width:560px){
  .nav{padding-left:14px;top:12px;width:calc(100% - 24px)}
  .nav__badge{width:38px;height:38px}
  .nav__mark{gap:9px;min-width:0}
  /* keep the "Bathrooms & Construction" wordmark visible on phones */
  .nav__word{display:block;height:9px}
  /* the call action lives in the sticky bottom bar on phones, so the header
     drops its Call button to leave room for the brand name and the menu */
  .nav__cta{display:none}
}

/* =========================================================================
   2 — HERO. The video fills the whole section.
   ========================================================================= */
.hero{
  position:relative;isolation:isolate;overflow:hidden;
  min-height:100svh;display:grid;place-items:center;
  padding:150px var(--gutter) clamp(64px,9vh,110px);
  background:var(--ink);
}
.hero__media{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:50% 50%;z-index:-2;
}
.hero__scrim{
  position:absolute;inset:0;z-index:-1;
  background:
    linear-gradient(180deg,rgba(17,17,16,.60) 0%,rgba(17,17,16,.34) 24%,
                    rgba(17,17,16,.40) 60%,rgba(17,17,16,.72) 100%),
    radial-gradient(88% 58% at 50% 52%,rgba(17,17,16,.56) 0%,rgba(17,17,16,0) 72%);
}
.hero__body{text-align:center;max-width:1080px;color:var(--chalk)}
.hero__body .pill{
  color:var(--chalk);background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.26);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  font-size:.6875rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
}
.hero__body .pill::before{background:var(--chalk)}
.hero h1{margin:clamp(24px,3.4vh,40px) auto 0;max-width:17ch;text-shadow:0 2px 26px rgba(17,17,16,.42)}
.hero__lede{
  margin:clamp(20px,2.8vh,34px) auto 0;max-width:62ch;
  font-size:clamp(1rem,1.25vw,1.1875rem);line-height:1.7;
  color:rgba(245,243,239,.9);text-shadow:0 1px 16px rgba(17,17,16,.5);
}
.hero__act{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;
           margin-top:clamp(28px,3.6vh,44px)}
.hero__act .btn{background:var(--chalk);color:var(--ink);border-color:var(--chalk)}
.hero__act .btn:hover,.hero__act .btn:focus-visible{background:transparent;color:var(--chalk)}
.hero__act .btn--ghost{background:rgba(255,255,255,.08);color:var(--chalk);
                       border-color:rgba(255,255,255,.32);
                       backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.hero__act .btn--ghost:hover,.hero__act .btn--ghost:focus-visible{background:var(--chalk);color:var(--ink)}
.hero__foot{
  position:absolute;left:var(--gutter);right:var(--gutter);bottom:26px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  color:rgba(245,243,239,.78);
}
.hero__word{height:clamp(9px,.85vw,12px);width:auto;opacity:.8}
@media (max-width:640px){ .hero__word{display:none} }
.vidbtn{
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.28);
  color:var(--chalk);padding:9px 18px;border-radius:var(--r-pill);cursor:pointer;
  font-family:var(--sans);font-size:.6875rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;line-height:1;
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
}
.vidbtn:hover{background:var(--chalk);color:var(--ink)}
html:not(.js) .vidbtn{display:none}
@media (max-width:640px){
  /* keep the location pill on one line rather than wrapping around its dot */
  .hero__body .pill{font-size:.625rem;letter-spacing:.13em;padding:10px 16px;gap:8px}
  .hero__foot{position:static;margin-top:38px;justify-content:center}
  .hero__foot .label{display:none}
}

/* =========================================================================
   3 — ABOUT.  Editorial: a tall plate carrying an overlapping detail and a
   struck badge, against warm stone. No cards, no gradients, no tint.
   ========================================================================= */
.about{background:var(--stone)}
.about.band{padding-block:clamp(74px,7.2vw,118px)}
.about__lead{margin-bottom:clamp(20px,2vw,28px)}
.about .pill{background:transparent;border-color:var(--stone-deep)}

.about__grid{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(44px,5.6vw,98px);align-items:center;
}

/* --- the plate group ----------------------------------------------------- */
.plates{position:relative;padding:0 clamp(30px,4vw,62px) clamp(30px,3.4vw,50px) 0}
.plates__main{margin:0;overflow:hidden;border-radius:2px;aspect-ratio:4/5;background:var(--stone-deep)}
.plates__main img{width:100%;height:100%;object-fit:cover;display:block}

/* the detail hangs off the plate's right edge, cut out of the stone ground */
.plates__detail{
  position:absolute;right:0;bottom:clamp(96px,11.5vw,168px);margin:0;
  width:clamp(132px,19vw,238px);aspect-ratio:4/5;
  border:clamp(9px,1.1vw,16px) solid var(--stone);
  border-radius:2px;overflow:hidden;background:var(--stone-deep);
}
.plates__detail img{width:100%;height:100%;object-fit:cover;display:block}

/* --- the badge ----------------------------------------------------------- */
.badge{
  position:absolute;left:clamp(22px,3.4vw,56px);bottom:0;
  width:clamp(104px,12.5vw,158px);aspect-ratio:1;border-radius:50%;
  background:var(--ink);color:var(--chalk);
  display:grid;place-content:center;text-align:center;
  box-shadow:0 0 0 clamp(7px,.9vw,12px) var(--stone);
}
.badge__num{display:block;font-size:clamp(1.5rem,2.2vw,2.25rem);font-weight:500;
            letter-spacing:-.04em;line-height:1}
.badge__txt{display:block;margin-top:6px;font-size:.5625rem;font-weight:600;
            letter-spacing:.2em;text-transform:uppercase;line-height:1.45;
            color:rgba(245,243,239,.72)}

/* --- the copy ------------------------------------------------------------ */
.about__kicker{
  display:flex;align-items:center;gap:14px;
  font-size:.6875rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink);margin-bottom:clamp(20px,2.2vw,30px);
}
.about__kicker::before{content:"";width:clamp(22px,3vw,42px);height:1px;
                       background:var(--ink);flex:0 0 auto}
.about__copy h2{max-width:15ch;margin-bottom:clamp(28px,3vw,44px)}
.about__copy .lede{max-width:46ch}
.about__act{display:flex;flex-wrap:wrap;gap:14px;margin-top:clamp(28px,3vw,40px)}
.about .btn--light{background:transparent;border-color:var(--stone-deep)}
.about .btn--light:hover,.about .btn--light:focus-visible{background:var(--ink);border-color:var(--ink)}

/* --- the four trust details --------------------------------------------- */
/* four ink cards closing the band: the only solid black on a stone ground,
   so the facts read as a set rather than as four columns of a table */
.facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
       gap:clamp(8px,.9vw,12px);
       margin-top:clamp(44px,4.4vw,68px)}
.fact{
  background:var(--ink);color:var(--chalk);
  border-radius:20px;
  padding:clamp(20px,1.85vw,26px) clamp(18px,1.7vw,24px);
  display:flex;flex-direction:column;
}
/* a short chalk rule strikes across as each card arrives */
.fact__rule{display:block;width:clamp(20px,2.2vw,30px);height:1px;background:var(--chalk);
            margin-bottom:clamp(12px,1.25vw,17px);transform-origin:left center}
.facts dt{color:var(--paper-muted);margin-bottom:8px}
.facts dd{margin:0;color:var(--chalk);font-size:clamp(1rem,1.15vw,1.125rem);font-weight:500;
          letter-spacing:-.018em;line-height:1.3}
.fact__big{font-size:clamp(1.375rem,1.85vw,1.75rem);font-weight:500;letter-spacing:-.04em;
           line-height:1;margin-right:2px}

/* =========================================================================
   4 — SERVICES
   ========================================================================= */
.svc__intro{text-align:center;max-width:900px;margin:0 auto}
.svc__intro .pill{margin-bottom:26px}
.svc__intro .lede{margin:24px auto 0;max-width:64ch}
/* one fixed row height so the band closes on a level edge; the lead panel is
   wider, so it simply shows more of its room rather than growing taller */
/* the panels sit on the same measure as every other section rather than
   running to the viewport edge, and are set apart so each reads as its own offer */
.svc__panels{
  max-width:var(--sheet);margin-inline:auto;padding-inline:var(--gutter);
  display:grid;grid-template-columns:1.3fr 1fr 1fr;
  gap:clamp(10px,1.1vw,16px);
  grid-auto-rows:clamp(420px,45vw,620px);
  margin-top:clamp(48px,6vw,86px);
}
.panel{position:relative;margin:0;overflow:hidden;background:var(--ink);
       border:2px solid var(--chalk)}
.panel img{width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ease)}
.panel:hover img{transform:scale(1.035)}
/* one fixed caption height across all three panels, so the numbers and headings
   sit on a common line and the spec rules close on a common line. The wash needs
   runway above the copy, hence the deep top padding. */
.panel__body{
  position:absolute;inset:auto 0 0 0;
  display:flex;flex-direction:column;
  min-height:clamp(238px,24vw,316px);
  padding:clamp(56px,6.2vw,100px) clamp(24px,2.6vw,40px) clamp(24px,2.6vw,40px);
  background:linear-gradient(180deg,
             rgba(17,17,16,0) 0%,
             rgba(17,17,16,.58) 24%,
             rgba(17,17,16,.88) 52%,
             rgba(17,17,16,.97) 100%);
  color:var(--chalk);
}
.panel__no{font-size:.75rem;color:rgba(245,243,239,.66)}
.panel__name{font-size:clamp(1.25rem,1.7vw,1.6rem);font-weight:500;
             letter-spacing:-.025em;line-height:1.15;margin:8px 0 10px}
.panel__text{font-size:.9375rem;line-height:1.62;color:rgba(245,243,239,.86);max-width:38ch}
.panel--lead .panel__text{max-width:46ch}
.panel__spec{font-size:.8125rem;line-height:1.55;color:rgba(245,243,239,.68);
             margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.18)}
/* each panel is a link through to the full service on services.html */
.panel__cta{display:inline-flex;align-items:center;gap:8px;margin-top:16px;
            font-size:.75rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
            color:var(--chalk);opacity:.8;transition:opacity .2s var(--ease),gap .2s var(--ease)}
.panel__link{position:absolute;inset:0;z-index:2}
.panel:hover .panel__cta,.panel:focus-within .panel__cta{opacity:1;gap:13px}
.panel:focus-within img{transform:scale(1.035)}
.panel__link:focus-visible{outline:2px solid var(--chalk);outline-offset:-6px}

/* =========================================================================
   5 — WORK
   ========================================================================= */
/* the label sits on its own line and both columns start together, so the
   top-right of this block is not left empty against a three-line heading */
.work__lead{margin-bottom:clamp(20px,2vw,28px)}
.work__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.86fr);
            gap:clamp(28px,4vw,76px);align-items:start;
            margin-bottom:clamp(34px,3.8vw,56px)}
.work__head h2{max-width:none}
/* the break is set by hand so "real homes" stays with "designed for" */
.work__h2{text-wrap:normal}
.work__say{padding-top:.34em}
.work__say .lede{max-width:46ch}
.work__say-2{margin-top:clamp(16px,1.7vw,24px)}
/* every plate the same size, caption set beneath it rather than washed over
   the photograph — the gradient overlay went with the About rebuild */
.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
      gap:clamp(26px,2.4vw,38px) clamp(14px,1.4vw,20px)}
.card{margin:0;min-width:0}
.card img{
  width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;display:block;
  border-radius:2px;background:var(--rule);
  border:2px solid var(--ink);
}
.card__cap{display:flex;padding-top:11px}
.card__cap > span{display:flex;align-items:baseline;gap:9px;min-width:0}
.card__no{flex:0 0 auto;font-size:.6875rem;font-weight:500;color:var(--ink-muted);
          font-variant-numeric:tabular-nums}
.card__name{font-size:.8125rem;font-weight:500;line-height:1.4;letter-spacing:-.005em}
.work__more{display:flex;justify-content:center;margin-top:clamp(40px,4.4vw,64px)}

/* =========================================================================
   5b — REVIEWS.  Ink cards on stock, the same family as the trust details.
   ========================================================================= */
.reviews{background:var(--stock)}
.reviews__lead{margin-bottom:clamp(20px,2vw,28px)}
.reviews__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.86fr);
               gap:clamp(28px,4vw,76px);align-items:start;
               margin-bottom:clamp(34px,3.8vw,56px)}
.reviews__head h2{max-width:17ch}
.reviews__say{padding-top:.34em}
.reviews__say .lede{max-width:46ch}
.reviews__act{margin-top:clamp(20px,2.1vw,30px)}

/* --- areas we cover (local SEO) ------------------------------------------ */
.areas{background:var(--stone)}
.areas__head{max-width:820px}
.areas__head .pill{margin-bottom:24px}
.areas__head .lede{margin-top:20px;max-width:60ch}
.areas__grid{margin-top:clamp(40px,4.5vw,64px);display:grid;
             grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,4vw,64px)}
.areas__col h3{margin-bottom:18px;color:var(--ink-muted);padding-bottom:14px;
               border-bottom:1px solid var(--stone-rule)}
.areas__col ul{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}
.areas__col li{font-size:.9375rem;color:var(--ink-soft)}
@media (max-width:760px){ .areas__grid{grid-template-columns:1fr;gap:34px} }

.reviews__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
               gap:clamp(10px,1.1vw,16px)}
.review{
  margin:0;background:var(--ink);color:var(--chalk);
  border-radius:20px;padding:clamp(26px,2.4vw,36px) clamp(22px,2vw,30px);
  display:flex;flex-direction:column;
}
.review__mark{display:block;font-size:2.25rem;line-height:.7;letter-spacing:-.04em;
              color:rgba(245,243,239,.34);margin-bottom:clamp(14px,1.5vw,20px)}
.review blockquote{margin:0;font-size:clamp(1rem,1.15vw,1.125rem);line-height:1.55;
                   font-weight:500;letter-spacing:-.014em;
                   /* holds three lines so an empty slot keeps a filled card's
                      proportions rather than collapsing to one line */
                   min-height:calc(1.55em * 3)}
.review figcaption{margin-top:auto;padding-top:clamp(20px,2.2vw,30px);
                   border-top:1px solid rgba(255,255,255,.2);color:var(--paper-muted)}
.review__who{display:block;margin-top:7px;color:var(--chalk);font-size:.9375rem;
             font-weight:500;letter-spacing:-.01em}
.review .tbc{color:rgba(245,243,239,.72)}

/* =========================================================================
   6 — CONTACT
   ========================================================================= */
.cta-band{padding-block:clamp(72px,7.4vw,120px)}
.cta__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.92fr);
           gap:clamp(40px,5.5vw,96px);align-items:start}
.cta .pill{margin-bottom:22px}
.cta h2{margin-bottom:18px;max-width:14ch}
.svc__intro h2{margin-top:8px}

.about__grid h2{margin-bottom:clamp(28px,3vw,44px)}
.numslot{
  font-size:clamp(1.5rem,2.9vw,2.4rem);font-weight:500;letter-spacing:-.03em;
  line-height:1.2;margin:clamp(22px,2.4vw,32px) 0 clamp(18px,1.9vw,24px);
}
.numslot a,.sched__row dd a{color:inherit;text-decoration:none}
.numslot a:hover,.numslot a:focus-visible,
.sched__row dd a:hover,.sched__row dd a:focus-visible{text-decoration:underline;text-underline-offset:3px}
.tbc{border-bottom:1px dashed currentColor;padding-bottom:2px;
     color:rgba(245,243,239,.82)}
.sched{border-top:1px solid rgba(255,255,255,.18)}
.sched__row{display:flex;align-items:baseline;justify-content:space-between;gap:24px;
            padding-block:12px;border-bottom:1px solid rgba(255,255,255,.18)}
.sched__row dt{color:var(--paper-muted)}
.sched__row dd{margin:0;text-align:right;font-size:.9375rem;font-weight:500}

.form{display:grid;gap:13px;grid-template-columns:1fr 1fr;background:rgba(255,255,255,.045);
      border:1px solid rgba(255,255,255,.14);border-radius:var(--r-card);
      padding:clamp(22px,2.6vw,38px)}
.form__row{display:grid;gap:6px;grid-column:1 / -1}
.form__row--half{grid-column:auto}
.form button,.form__status{grid-column:1 / -1}
.form label{font-size:.8125rem;font-weight:600;letter-spacing:.1em;
            text-transform:uppercase;color:var(--paper-muted)}
.form input,.form select,.form textarea{
  width:100%;font-family:var(--sans);font-size:1rem;line-height:1.4;
  color:var(--chalk);background:rgba(17,17,16,.34);
  border:1px solid rgba(255,255,255,.24);border-radius:var(--r-field);padding:13px 16px;
  transition:border-color .2s var(--ease);-webkit-appearance:none;appearance:none;
}
.form select{
  background-image:linear-gradient(45deg,transparent 50%,var(--chalk) 50%),
                   linear-gradient(135deg,var(--chalk) 50%,transparent 50%);
  background-position:calc(100% - 21px) 50%,calc(100% - 15px) 50%;
  background-size:6px 6px,6px 6px;background-repeat:no-repeat;padding-right:46px;
}
.form select option{color:var(--ink);background:var(--chalk)}
.form textarea{resize:vertical;min-height:88px}
.form input::placeholder,.form textarea::placeholder{color:rgba(245,243,239,.45)}
.form input:focus,.form select:focus,.form textarea:focus{border-color:var(--chalk)}
.form input[aria-invalid="true"]{border-color:var(--chalk);border-width:2px}
.form__err{font-size:.8125rem;color:var(--chalk)}
.form__err:empty{display:none}
.form button{width:100%;justify-content:center;margin-top:4px}
.form__status{font-size:.875rem;line-height:1.6;color:var(--chalk);
              border:1px solid rgba(255,255,255,.24);border-radius:var(--r-field);padding:14px 17px}
.form__status:empty{display:none;border:0;padding:0}

/* =========================================================================
   FOOTER
   ========================================================================= */
.foot{border-top:1px solid rgba(255,255,255,.14);padding-block:44px;
      display:flex;flex-wrap:wrap;gap:18px 32px;justify-content:space-between;
      align-items:center;margin-top:clamp(40px,4vw,64px)}
.foot img{height:64px;width:auto}
.foot__links{display:flex;flex-wrap:wrap;gap:10px 26px;align-items:center}
.foot__links a{display:inline-flex;align-items:center;gap:7px;font-size:.8125rem;font-weight:500;
               letter-spacing:.02em;color:var(--chalk);text-decoration:none;opacity:.82;
               transition:opacity .2s var(--ease)}
.foot__links a:hover,.foot__links a:focus-visible{opacity:1}
.foot__links a .ext{font-size:.72rem;opacity:.8}

/* --- sticky mobile action ------------------------------------------------ */
.callbar{display:none}
@media (max-width:700px){
  .callbar{display:block;position:fixed;left:12px;right:12px;bottom:12px;z-index:90;
           transition:transform .35s var(--ease),opacity .3s var(--ease)}
  .callbar.is-hidden{transform:translateY(140%);opacity:0;pointer-events:none}
  .callbar a{display:block;text-align:center;padding:18px 20px;color:var(--paper);
             background:var(--ink);border-radius:var(--r-pill);text-decoration:none;
             font-size:.75rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase}
  body{padding-bottom:64px}
}

/* =========================================================================
   RESPONSIVE
   ========================================================================= */
@media (max-width:1024px){
  .about__grid{grid-template-columns:1fr;gap:clamp(46px,7vw,72px)}
  .plates{max-width:560px}
  .facts{grid-template-columns:1fr 1fr}
  .work__head{grid-template-columns:1fr;gap:20px}
  .work__say{padding-top:0}
  .reviews__head{grid-template-columns:1fr;gap:20px}
  .reviews__say{padding-top:0}
  .reviews__grid{grid-template-columns:1fr}
  .svc__panels{grid-template-columns:1fr 1fr;grid-auto-rows:clamp(380px,44vw,500px)}
  .panel--lead{grid-column:1 / -1}
  .grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:860px){
  .cta__grid{grid-template-columns:1fr}
  .form__row--half{grid-column:1 / -1}
}
@media (max-width:640px){
  .plates{padding-right:clamp(46px,13vw,70px);padding-bottom:clamp(40px,11vw,60px)}
  .svc__panels{grid-template-columns:1fr;grid-auto-rows:clamp(360px,92vw,470px)}
  .grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .card__name{font-size:.75rem;line-height:1.35}
  .card__no{font-size:.625rem}
  .card__cap{padding-top:9px}
  .sched__row{flex-direction:column;gap:3px}
  .sched__row dd{text-align:left}
}

/* --- the one authored moment --------------------------------------------- */
@media (prefers-reduced-motion:no-preference){
  /* copy and blocks lift in */
  .js .rise{opacity:0;transform:translateY(22px)}
  .js .rise.is-in{opacity:1;transform:none;
    transition:opacity .8s var(--ease) var(--d,0s),transform .9s var(--ease) var(--d,0s)}

  /* plates settle: the frame fades while the photograph inside eases back to
     its true scale, so the image arrives rather than slides */
  .js .plate-in{opacity:0}
  .js .plate-in img{transform:scale(1.07)}
  .js .plate-in.is-in{opacity:1;transition:opacity 1s var(--ease) var(--d,0s)}
  .js .plate-in.is-in img{transform:none;
    transition:transform 1.5s var(--ease) var(--d,0s)}

  /* each fact's rule draws across as the fact arrives */
  .js .fact .fact__rule{transform:scaleX(0)}
  .js .fact.is-in .fact__rule{transform:none;
    transition:transform .9s var(--ease) calc(var(--d,0s) + .12s)}

  /* the badge is struck on last */
  .js .pop-in{opacity:0;transform:scale(.82)}
  .js .pop-in.is-in{opacity:1;transform:none;
    transition:opacity .6s var(--ease) var(--d,0s),transform .8s var(--ease) var(--d,0s)}
}
