/* GASI Cleaning Co — shared styles.
   Everything down to "END OF HOMEPAGE STYLES" is copied verbatim from the approved index.html.
   Do not edit it to restyle the homepage; add new page styles below the marker. */
body{margin:0;background:#F4F7FB;color:#0B1A33;font-family:'Manrope',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}
a{color:#0B1A33}a:hover{color:#22324F}
.gasi{--ink:#0B1A33;--blue:#0B1A33;--blue-dk:#0B1A33;--bone:#F4F7FB;--pale:#EAF1FC;--line:#DCE3EE;--mute:#4B5870;--soft:#B8C4D8;font-family:'Manrope',system-ui,sans-serif;color:var(--ink);background:var(--bone)}
.disp{font-family:'Big Shoulders Display','Arial Narrow',sans-serif;font-weight:900;text-transform:uppercase;letter-spacing:-0.005em;line-height:.88;margin:0}
.wrap{max-width:1440px;margin:0 auto;padding:0 40px}
.skip{position:absolute;left:-9999px;top:8px;background:var(--blue);color:#fff;padding:12px 16px;font-weight:700;z-index:100}
.skip:focus{left:16px}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px}

/* utility bar */
.util{background:var(--ink);color:var(--soft);font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}
.util .wrap{display:flex;justify-content:space-between;align-items:center;min-height:38px;gap:16px}
.util nav{display:flex;gap:24px}
.util a{color:var(--soft);text-decoration:none;transition:color .2s}
.util a:hover{color:#fff}

/* header */
.hdr{position:sticky;top:0;z-index:60;background:#fff;border-bottom:1px solid var(--line)}
.hdr .wrap{display:flex;align-items:center;justify-content:space-between;height:84px;gap:24px}
.logo{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink)}
.logo-mark{width:48px;height:48px;background:var(--ink);color:var(--accent);display:flex;align-items:center;justify-content:center;font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:30px;line-height:1}
.logo-word{display:flex;flex-direction:column;line-height:1}
.logo-word b{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:30px;letter-spacing:.02em}
.logo-word span{font-size:10px;font-weight:700;letter-spacing:.32em;color:var(--mute);margin-top:3px}
.mainnav{display:flex;align-items:stretch;height:100%}
.mainnav > ul{display:flex;list-style:none;margin:0;padding:0;height:100%}
.mainnav li{display:flex;align-items:stretch}
.nl{position:relative;display:flex;align-items:center;gap:6px;padding:0 18px;font-size:14px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;color:var(--ink)}
.nl:hover{color:var(--blue)}
.nl::after{content:"";position:absolute;left:18px;right:18px;bottom:0;height:4px;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform .3s cubic-bezier(.2,.7,.2,1)}
.nl:hover::after,.nl.on::after,.has-mega:focus-within .nl::after,.has-mega:hover .nl::after{transform:scaleX(1)}
.nl svg{transition:transform .25s}
.has-mega:hover .nl svg,.has-mega:focus-within .nl svg{transform:rotate(180deg)}
.mega{position:absolute;left:0;right:0;top:100%;background:#fff;border-top:1px solid var(--line);box-shadow:0 24px 40px rgba(11,26,51,.12);opacity:0;visibility:hidden;transform:translateY(-8px);transition:opacity .25s,transform .25s,visibility .25s}
.has-mega:hover .mega,.has-mega:focus-within .mega{opacity:1;visibility:visible;transform:none}
.mega .wrap{display:grid;grid-template-columns:260px repeat(3,minmax(0,1fr));gap:24px;height:auto;padding-top:32px;padding-bottom:36px;align-items:stretch}
.mega-intro p{margin:12px 0 0;color:var(--mute);font-size:14px;line-height:1.5}
.mega-card{display:flex;flex-direction:column;gap:12px;text-decoration:none;color:var(--ink)}
.mega-card .ph{height:150px}
.mega-card b{font-family:'Big Shoulders Display',sans-serif;font-size:26px;font-weight:900;text-transform:uppercase}
.mega-card:hover b{color:var(--blue);text-decoration:underline;text-decoration-color:var(--blue);text-decoration-thickness:4px;text-underline-offset:4px}
.hdr-actions{display:flex;align-items:center;gap:12px}
.burger{display:none;width:48px;height:48px;border:1px solid var(--line);background:#fff;align-items:center;justify-content:center;cursor:pointer;color:var(--ink)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 28px;font-family:'Manrope',sans-serif;font-size:14px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;border:2px solid transparent;cursor:pointer;transition:background .25s,color .25s,border-color .25s,transform .25s}
.btn svg{transition:transform .25s}
.btn:hover svg{transform:translateX(4px)}
.btn-accent{background:#fff;color:var(--ink)}
.btn-accent:hover{background:#E4E9F1;color:var(--ink)}
.btn-ink{background:var(--ink);color:#fff}
.btn-ink:hover{background:#22324F;color:#fff}
.btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.75)}
.btn-ghost:hover{background:#fff;color:var(--ink);border-color:#fff}
.btn-line{background:transparent;color:var(--ink);border-color:var(--ink)}
.btn-line:hover{background:var(--ink);color:#fff}
.btn-sm{min-height:44px;padding:0 20px;font-size:13px}

/* photo placeholders */
.ph{position:relative;overflow:hidden;background-color:#2C4B7A}
.ph-in{position:absolute;inset:0;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.05) 0 2px,transparent 2px 16px);transition:transform .7s cubic-bezier(.2,.7,.2,1)}
.ph-tag{position:absolute;left:14px;bottom:14px;display:flex;align-items:center;gap:8px;font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.85);background:rgba(11,26,51,.5);padding:6px 9px}
.t1{background-color:#3A5579}.t2{background-color:#5A677D}.t3{background-color:#2C4B7A}.t4{background-color:#66707F}.t5{background-color:#41506A}.t6{background-color:#24395C}.t7{background-color:#556178}
.ph-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;transition:transform .7s cubic-bezier(.2,.7,.2,1)}

/* hero */
.hero{position:relative;min-height:780px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden;background:var(--ink)}
.hero > .ph{position:absolute;inset:0}
.hero > .ph .ph-tag{left:auto;right:40px;bottom:auto;top:28px}
.scrim{position:absolute;inset:0;background:linear-gradient(to top,rgba(7,17,36,.94) 0%,rgba(7,17,36,.55) 45%,rgba(7,17,36,.1) 100%)}
.hero-body{position:relative;padding-top:120px;padding-bottom:56px}
.kicker{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:800;letter-spacing:.18em;text-transform:uppercase}
.kicker::before{content:"";width:28px;height:4px;background:var(--accent)}
.hero h1{font-size:clamp(68px,11.5vw,184px);margin-top:22px;max-width:12ch}
.hero h1 em{font-style:normal;color:var(--accent)}
.hero-lede{margin:28px 0 0;max-width:520px;font-size:20px;line-height:1.5;color:#E4EAF4}
.hero-ctas{display:flex;flex-wrap:wrap;gap:14px;margin-top:36px}
.hero-strip{position:relative;border-top:1px solid rgba(255,255,255,.18);background:rgba(7,17,36,.6);backdrop-filter:blur(6px)}
.hero-strip .wrap{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.strip-item{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:24px 28px 24px 0;text-decoration:none;color:#fff;border-right:1px solid rgba(255,255,255,.14)}
.strip-item + .strip-item{padding-left:28px}
.strip-item:last-child{border-right:0}
.strip-item::before{content:"";position:absolute;left:0;right:0;top:-1px;height:4px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .35s}
.strip-item:hover{color:#fff}
.strip-item:hover::before{transform:scaleX(1)}
.strip-item small{display:block;font-size:11px;font-weight:800;letter-spacing:.16em;color:var(--accent);text-transform:uppercase}
.strip-item b{display:block;margin-top:6px;font-family:'Big Shoulders Display',sans-serif;font-size:28px;font-weight:900;text-transform:uppercase;line-height:1}

/* section heads */
.sec{padding:96px 0}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;border-top:6px solid var(--ink);padding-top:22px;margin-bottom:40px}
.sec-head h2{font-size:clamp(48px,6vw,88px)}
.sec-head .eyebrow{display:block;font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--mute);margin-bottom:12px}
.more{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;color:var(--ink);padding:12px 0;border-bottom:2px solid var(--blue);transition:gap .25s,color .25s}
.more:hover{gap:16px;color:var(--blue)}

/* service cards */
.svc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.svc{display:flex;flex-direction:column;text-decoration:none;color:var(--ink);background:#fff}
.svc .ph{aspect-ratio:4/5}
.svc:hover .ph-in,.feat:hover .ph-in,.side:hover .ph-in,.rail-card:hover .ph-in,.mega-card:hover .ph-in{transform:scale(1.06)}
.svc:hover .ph-photo,.feat:hover .ph-photo,.side:hover .ph-photo,.rail-card:hover .ph-photo,.mega-card:hover .ph-photo,.cat:hover .ph-photo,.choice:hover .ph-photo{transform:scale(1.06)}
@media (prefers-reduced-motion:reduce){.ph-photo{transition:none}}
.svc-body{padding:28px 28px 32px;display:flex;flex-direction:column;gap:14px;flex:1;border-bottom:4px solid transparent;transition:border-color .3s}
.svc:hover .svc-body{border-bottom-color:var(--blue)}
.svc:hover{color:var(--ink)}
.num{font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)}
.svc h3{font-size:52px}
.svc p{margin:0;font-size:16px;line-height:1.6;color:var(--mute)}
.go{margin-top:auto;padding-top:8px;display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--blue)}
.go svg{transition:transform .25s}
.svc:hover .go svg,.side:hover .go svg{transform:translateX(6px)}

/* featured */
.featured{background:#fff}
.feat-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:24px}
.feat{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:640px;text-decoration:none;color:#fff;overflow:hidden;background:var(--ink)}
.feat > .ph{position:absolute;inset:0}
.feat > .ph .ph-tag{left:auto;right:16px;bottom:auto;top:16px}
.feat-body{position:relative;padding:40px;display:flex;flex-direction:column;gap:16px;max-width:620px}
.tag{align-self:flex-start;background:#fff;color:var(--ink);font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;padding:6px 10px}
.feat h3{font-size:clamp(48px,5.4vw,84px)}
.feat p{margin:0;font-size:17px;line-height:1.6;color:#E4EAF4}
.feat:hover{color:#fff}
.side-list{display:flex;flex-direction:column;gap:24px}
.side{display:grid;grid-template-columns:minmax(0,190px) minmax(0,1fr);gap:20px;text-decoration:none;color:var(--ink);padding-bottom:24px;border-bottom:1px solid var(--line);flex:1}
.side:last-child{border-bottom:0;padding-bottom:0}
.side .ph{min-height:170px}
.side-body{display:flex;flex-direction:column;gap:10px}
.side h4{font-size:34px}
.side p{margin:0;font-size:15px;line-height:1.55;color:var(--mute)}
.side:hover{color:var(--ink)}
.side:hover h4{text-decoration:underline;text-decoration-color:var(--blue);text-decoration-thickness:5px;text-underline-offset:6px}

/* rail */
.rail-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin:88px 0 28px}
.rail-head h3{font-size:clamp(40px,4.4vw,64px)}
.rail-ctrls{display:flex;gap:8px}
.arrow{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border:2px solid var(--ink);background:#fff;color:var(--ink);cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.arrow:hover{background:var(--blue);border-color:var(--blue);color:#fff}
.rail{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding-bottom:18px;scrollbar-width:thin;scrollbar-color:var(--blue) var(--line)}
.rail-card{flex:0 0 calc((100% - 60px)/4);scroll-snap-align:start;display:flex;flex-direction:column;gap:14px;text-decoration:none;color:var(--ink)}
.rail-card .ph{aspect-ratio:3/4}
.rail-card small{font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
.rail-card b{font-family:'Big Shoulders Display',sans-serif;font-size:30px;font-weight:900;text-transform:uppercase;line-height:1}
.rail-card .rail-line{margin-top:-6px;font-size:15px;line-height:1.45;color:var(--mute)}
.rail-card:hover{color:var(--ink)}
.rail-card:hover b{color:var(--blue)}

/* why */
.why{background:var(--ink);color:#fff}
.why .sec-head{border-top-color:#fff}
.why .sec-head .eyebrow{color:#D3E0F7}
.why .sec-intro{color:#D3E0F7}   /* readable on the navy band (the About Us DBS line, 27 October 2026) */
.why-intro{margin:0;max-width:440px;font-size:18px;line-height:1.6;color:#E3EBFA}
.why-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;border-top:1px solid rgba(255,255,255,.22)}
.pillar{padding:36px 28px 40px 0;border-right:1px solid rgba(255,255,255,.22);display:flex;flex-direction:column;gap:18px;transition:background .3s}
.pillar + .pillar{padding-left:28px}
.pillar:last-child{border-right:0}
.pillar .big{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:96px;line-height:.8;color:transparent;-webkit-text-stroke:2px var(--accent);transition:color .3s}
.pillar:hover .big{color:var(--accent)}
.pillar h3{font-size:38px}
.pillar p{margin:0;font-size:15px;line-height:1.65;color:#E3EBFA}

/* cta */
.cta{background:var(--pale);color:var(--ink);position:relative;overflow:hidden;border-top:1px solid var(--line)}
.cta .wrap{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:48px;align-items:end;padding-top:104px;padding-bottom:104px}
.cta h2{font-size:clamp(72px,10vw,168px)}
.cta h2 span{color:var(--ink)}
.cta-side{display:flex;flex-direction:column;gap:22px}
.cta-side p{margin:0;font-size:19px;line-height:1.55;font-weight:500}
.cta-btns{display:flex;flex-wrap:wrap;gap:12px}
.cta-contact{display:flex;flex-direction:column;gap:6px;padding-top:20px;border-top:2px solid var(--ink);font-size:15px;font-weight:700}
.cta-contact a{color:var(--ink)}

/* footer */
.ftr{background:var(--ink);color:var(--soft)}
.ftr-top{display:grid;grid-template-columns:minmax(0,1.3fr) repeat(3,minmax(0,1fr));gap:40px;padding-top:80px;padding-bottom:64px}
.ftr-brand .wm{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:clamp(88px,10vw,150px);line-height:.8;color:#fff;letter-spacing:.01em}
.ftr-brand p{margin:18px 0 0;font-size:15px;line-height:1.6;max-width:300px}
.ftr-brand .tagline{color:var(--accent);font-weight:800;letter-spacing:.14em;text-transform:uppercase;font-size:12px}
.ftr .ftr-h{margin:0 0 18px;font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:#fff;font-family:inherit;line-height:inherit}
.ftr ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.ftr a{color:var(--soft);text-decoration:none;font-size:15px;transition:color .2s}
.ftr a:hover{color:var(--accent)}
.ftr a.btn-accent,.ftr a.btn-accent:hover{color:var(--ink);font-size:14px}
.ftr-quote{border-top:1px solid rgba(255,255,255,.14);border-bottom:1px solid rgba(255,255,255,.14)}
.ftr-quote .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-top:28px;padding-bottom:28px}
.ftr-quote b{font-family:'Big Shoulders Display',sans-serif;font-size:36px;font-weight:900;text-transform:uppercase;color:#fff;line-height:1}
.ftr-bot .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;padding-top:24px;padding-bottom:32px;font-size:13px}
.ftr-bot nav{display:flex;flex-wrap:wrap;gap:22px}
.ftr-bot a{font-size:13px}

/* mobile menu */
.mmenu{position:fixed;left:0;right:0;top:0;bottom:0;z-index:80;background:var(--ink);color:#fff;display:flex;flex-direction:column;overflow-y:auto}
.mmenu-top{display:flex;align-items:center;justify-content:space-between;height:72px;padding:0 20px;border-bottom:1px solid rgba(255,255,255,.14)}
.mmenu-top .logo{color:#fff}
.mmenu-top .logo-word span{color:var(--soft)}
.mclose{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.3);background:transparent;color:#fff;cursor:pointer}
.mmenu ul{list-style:none;margin:0;padding:12px 20px}
.mmenu li a{display:flex;align-items:center;justify-content:space-between;padding:18px 0;border-bottom:1px solid rgba(255,255,255,.12);font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:44px;text-transform:uppercase;text-decoration:none;color:#fff;line-height:1}
.mmenu li a:hover{color:var(--accent)}
.mmenu .sub{display:flex;flex-direction:column;gap:2px;padding:4px 0 12px 0}
.mmenu .sub a{font-family:'Manrope',sans-serif;font-size:15px;font-weight:700;letter-spacing:.1em;padding:12px 0;border-bottom:0;color:var(--soft)}
.mmenu-foot{margin-top:auto;padding:24px 20px 32px}
.mmenu-foot .btn{width:100%}

@media (max-width:1100px){
  .mainnav{display:none}
  .burger{display:inline-flex}
  .hdr-quote{display:none}
  .why-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pillar:nth-child(2){border-right:0}
  .pillar:nth-child(3){padding-left:0}
  .pillar:nth-child(n+3){border-top:1px solid rgba(255,255,255,.22)}
  .rail-card{flex-basis:calc((100% - 40px)/3)}
  .ftr-top{grid-template-columns:repeat(3,minmax(0,1fr))}
  .ftr-brand{grid-column:1 / -1}
}
@media (max-width:820px){
  .wrap{padding:0 20px}
  .util .wrap{justify-content:center}
  .util nav{display:none}
  .hdr .wrap{height:72px}
  .logo-mark{width:42px;height:42px;font-size:26px}
  .hero{min-height:640px}
  .hero > .ph .ph-tag{right:20px;top:20px}
  .hero-body{padding-top:96px;padding-bottom:40px}
  .hero-lede{font-size:17px}
  .hero-ctas .btn{flex:1 1 220px}
  .hero-strip .wrap{grid-template-columns:1fr;padding:0}
  .strip-item,.strip-item + .strip-item{padding:18px 20px;border-right:0;border-bottom:1px solid rgba(255,255,255,.14)}
  .sec{padding:64px 0}
  .sec-head{flex-direction:column;align-items:flex-start}
  .svc-grid{grid-template-columns:1fr}
  .svc .ph{aspect-ratio:16/11}
  .svc h3{font-size:44px}
  .feat-grid{grid-template-columns:1fr}
  .feat{min-height:520px}
  .feat-body{padding:24px}
  .side{grid-template-columns:120px minmax(0,1fr);gap:16px}
  .side .ph{min-height:120px}
  .side h4{font-size:28px}
  .rail-head{margin-top:64px}
  .rail-card{flex-basis:78%}
  .why-grid{grid-template-columns:1fr}
  .pillar,.pillar + .pillar,.pillar:nth-child(3){padding:28px 0;border-right:0;border-top:1px solid rgba(255,255,255,.22)}
  .pillar:first-child{border-top:0}
  .pillar .big{font-size:72px}
  .cta .wrap{grid-template-columns:1fr;padding-top:72px;padding-bottom:72px;gap:32px}
  .ftr-top{grid-template-columns:repeat(2,minmax(0,1fr));padding-top:56px;gap:36px 24px}
  .ftr-quote .wrap{flex-direction:column;align-items:flex-start}
  .ftr-bot .wrap{flex-direction:column}
}
@media (prefers-reduced-motion:reduce){*{transition:none !important;scroll-behavior:auto !important}}
.mmenu[hidden]{display:none}
/* ═══ END OF HOMEPAGE STYLES ═══ */

/* ── Services page ─────────────────────────────────────────── */
/* Built only from the homepage's tokens and patterns. */

.pg-services main [id]{scroll-margin-top:84px}

/* shorter page hero, same construction as the homepage hero */
.hero-page{min-height:620px}
.hero-page h1{font-size:clamp(64px,9.5vw,152px);max-width:14ch}

/* intro paragraph beside a section head */
.sec-intro{margin:0;max-width:440px;font-size:18px;line-height:1.6;color:var(--mute)}

/* residential: photo + detail column */
.split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:56px;align-items:start}
.split > .ph{aspect-ratio:4/5;position:sticky;top:120px}
.split-body{display:flex;flex-direction:column;gap:40px}
.lede{margin:0;font-size:22px;line-height:1.5;font-weight:500;color:var(--ink)}
.rows{list-style:none;margin:0;padding:0;border-top:6px solid var(--ink)}
.row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:20px;padding:26px 0;border-bottom:1px solid var(--line)}
.row h3{font-size:36px}
.row p{margin:10px 0 0;font-size:16px;line-height:1.6;color:var(--mute)}
.opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.opt{background:var(--bone);padding:28px;border-top:4px solid var(--ink);display:flex;flex-direction:column;gap:12px}
.opt h3{font-size:34px}
.opt p{margin:0;font-size:15px;line-height:1.6;color:var(--mute)}

/* commercial: note under the feature grid */
.sec-note{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:40px;padding-top:28px;border-top:1px solid var(--line)}
.sec-note p{margin:0;max-width:640px;font-size:18px;line-height:1.6;color:var(--mute)}

/* specialist: footer row under the pillars */
.why-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px;margin-top:48px;padding-top:28px;border-top:1px solid rgba(255,255,255,.22)}
.why-foot p{margin:0;max-width:560px;font-size:17px;line-height:1.6;color:var(--soft)}

/* how it works: the pillar pattern on a light background */
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;border-top:1px solid var(--line)}
.step{padding:36px 28px 40px 0;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:18px}
.step + .step{padding-left:28px}
.step:last-child{border-right:0}
.step .big{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:96px;line-height:.8;color:transparent;-webkit-text-stroke:2px var(--ink);transition:color .3s}
.step:hover .big{color:var(--ink)}
.step h3{font-size:38px}
.step p{margin:0;font-size:15px;line-height:1.65;color:var(--mute)}

@media (max-width:1100px){
  .split{grid-template-columns:1fr;gap:40px}
  .split > .ph{position:relative;top:auto;aspect-ratio:16/10}
}
@media (max-width:820px){
  .pg-services main [id]{scroll-margin-top:72px}
  .hero-page{min-height:560px}
  .lede{font-size:19px}
  .row{grid-template-columns:48px minmax(0,1fr);gap:14px}
  .row h3{font-size:30px}
  .opts{grid-template-columns:1fr}
  .sec-note{flex-direction:column;align-items:flex-start}
  .steps{grid-template-columns:1fr}
  .step,.step + .step{padding:28px 0;border-right:0;border-top:1px solid var(--line)}
  .step:first-child{border-top:0}
  .step .big{font-size:72px}
}

/* ── Booking selector (Deep Cleaning) ───────────────────── */
/* GASI Cleaning Co — Deep Cleaning page.
   Loaded after site.css and uses only its tokens (--ink, --bone, --pale,
   --line, --mute, --soft) and patterns. site.css itself is not changed. */

.pg-deep main [id]{scroll-margin-top:96px}
.pg-deep .dc-from{font-family:'Manrope',sans-serif;font-size:15px;font-weight:700;letter-spacing:.04em;color:var(--soft);margin-left:6px;white-space:nowrap}
.pg-deep .hero-page h1{max-width:13ch}

/* shared bits */
.hint{margin:6px 0 0;font-size:14px;line-height:1.55;color:var(--mute)}
.err{margin:8px 0 0;font-size:14px;font-weight:700;color:#B42318}
.fld-opt{font-weight:600;letter-spacing:0;text-transform:none;color:var(--mute)}
.fld-l{display:block;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);padding:0}
.bk-fs{border:0;margin:0;padding:0;min-width:0}
.bk-fs > legend{float:left;width:100%;padding:0;margin:0 0 12px}
.bk-fs > legend + *{clear:both}
.bk-block > legend{margin-bottom:4px}
.dc-note{margin:24px 0 0;padding:18px 20px;background:var(--pale);border-left:4px solid var(--ink);font-size:15px;line-height:1.6;color:var(--ink)}
.dc-note p{margin:0 0 14px}
.dc-flag{margin:10px 0 0;font-size:14px;font-weight:700;color:var(--ink)}
.dc-lock{margin:-4px 0 16px}

/* layout: form + sticky price summary */
.bk{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,400px);gap:56px;align-items:start}
.bk-aside{position:sticky;top:108px;display:flex;flex-direction:column;gap:24px}

/* progress */
.bk-prog{list-style:none;margin:0 0 40px;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.bk-prog li{display:flex;flex-direction:column;gap:6px;padding-top:12px;border-top:4px solid var(--line);color:var(--mute)}
.bk-prog li b{font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.bk-prog li.done,.bk-prog li[aria-current]{border-top-color:var(--ink);color:var(--ink)}
.bk-finished .bk-prog li{border-top-color:var(--ink);color:var(--ink)}

.bk-step{display:flex;flex-direction:column;gap:32px}
.bk-step[hidden]{display:none}
.bk-h{font-size:clamp(36px,4vw,52px);margin-bottom:20px}
.bk-h:focus{outline:none}
.bk-sub{margin:0 0 4px;font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:32px;text-transform:uppercase;line-height:1}
.bk-block{display:flex;flex-direction:column;gap:24px;padding-top:28px;border-top:6px solid var(--ink)}
.bk-block[hidden]{display:none}
#whole-detail{display:flex;flex-direction:column;gap:28px}
#whole-detail[hidden]{display:none}
.bk-field{display:flex;flex-direction:column;gap:12px}
.bk-actions{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;padding-top:28px;border-top:1px solid var(--line)}
.bk-actions .btn-ink:only-child{margin-left:auto}

/* "What needs a deep clean?" choice cards (real radio inputs, visually hidden) */
.choice{position:relative;display:block;cursor:pointer}
.choice input,.chip input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.choice-body{position:relative;display:flex;flex-direction:column;gap:10px;height:100%;padding:24px;background:#fff;border:2px solid var(--line);transition:border-color .2s,box-shadow .2s}
.choice-body::after{content:"";position:absolute;top:16px;right:16px;width:28px;height:28px;border:2px solid var(--line);background:#fff;transition:background .2s,border-color .2s}
.choice:hover .choice-body{border-color:var(--ink)}
.choice input:checked + .choice-body{border-color:var(--ink);box-shadow:inset 0 6px 0 var(--ink)}
.choice input:checked + .choice-body::after{background:var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/18px no-repeat;border-color:var(--ink)}
.choice input:focus-visible + .choice-body{outline:3px solid var(--ink);outline-offset:3px}
.choice-body b{font-size:32px;padding-right:40px}
.choice-price{font-size:15px;font-weight:600;color:var(--mute)}
.choice-price strong{font-family:'Big Shoulders Display',sans-serif;font-size:30px;font-weight:900;color:var(--ink);letter-spacing:.01em}
.choice-desc{font-size:15px;line-height:1.55;color:var(--mute)}
.choice-main .choice-body{flex-direction:row;gap:0;padding:0}
.choice-main .choice-body::after{top:20px;right:20px}
.choice-txt{display:flex;flex-direction:column;justify-content:flex-end;gap:12px;padding:32px}
.choice-main .choice-txt b{font-size:clamp(48px,5vw,72px);padding-right:0}
.choice-main .choice-price strong{font-size:44px}
.choice:hover .ph-in{transform:scale(1.06)}
.pop{align-self:flex-start;background:var(--ink);color:#fff;font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;padding:6px 10px}
.bk-or{margin:28px 0 14px;font-size:16px;font-weight:700;color:var(--ink)}
.choice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}

/* chips (bedrooms, flat/house, oven, fridge, arrival windows) */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{position:relative;cursor:pointer}
/* 14 November 2026 (brief 5.5, WCAG 2.2 2.5.8): the radio or checkbox covers its whole chip, so the tap target is the
   full choice (at least 52px tall), not a 1px box; it stays invisible and the chip shows its state as before */
.chip input{inset:0;width:100%;height:100%;cursor:pointer;z-index:1}
.chip span{display:flex;flex-direction:column;justify-content:center;min-height:52px;padding:8px 18px;background:#fff;border:2px solid var(--line);font-size:14px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);transition:background .2s,color .2s,border-color .2s}
.chip small{display:block;margin-top:2px;font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--mute)}
.chip:hover span{border-color:var(--ink)}
.chip input:checked + span{background:var(--ink);border-color:var(--ink);color:#fff}
.chip input:checked + span small{color:var(--soft)}
.chip small[hidden]{display:none}
.chip input:focus-visible + span{outline:3px solid var(--ink);outline-offset:3px}
.chip input:disabled + span{cursor:not-allowed;opacity:.45}
.chip input:disabled:checked + span{opacity:1}
.chip input:disabled:checked + span::after{content:"In bundle";margin-top:2px;font-size:11px;letter-spacing:.12em;color:var(--soft)}

/* steppers */
.bk-count{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}
.bk-count > div:first-child{flex:1 1 260px}
.stepper{display:inline-flex;align-items:stretch;border:2px solid var(--ink);background:#fff;flex:none}
.stepper button{width:48px;height:48px;border:0;background:#fff;color:var(--ink);font-size:24px;font-weight:700;line-height:1;cursor:pointer;transition:background .2s,color .2s}
.stepper button:hover{background:var(--ink);color:#fff}
.stepper input{width:56px;border:0;border-left:2px solid var(--line);border-right:2px solid var(--line);text-align:center;font:800 18px 'Manrope',sans-serif;color:var(--ink);background:#fff;-moz-appearance:textfield}
.stepper input::-webkit-outer-spin-button,.stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

/* extras: checkbox rows */
.xlist{border-top:1px solid var(--line)}
.xrow{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid var(--line);cursor:pointer}
.xrow input[type="checkbox"]{appearance:none;-webkit-appearance:none;width:28px;height:28px;margin:0;border:2px solid var(--ink);background:#fff;cursor:pointer;display:grid;place-content:center}
.xrow input[type="checkbox"]:checked{background:var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/18px no-repeat}
.xrow input[type="checkbox"]:disabled{cursor:not-allowed;opacity:.55}
.xrow input:disabled ~ .xprice{text-decoration:line-through;color:var(--mute)}
.xtxt{display:flex;flex-direction:column;gap:3px;min-width:0}
.xtxt b{font-size:16px;font-weight:700;color:var(--ink)}
.xtxt small{font-size:14px;line-height:1.5;color:var(--mute)}
.xtxt small.inb{font-weight:800;letter-spacing:.1em;text-transform:uppercase;font-size:11px;color:var(--ink)}
.xprice{font-family:'Big Shoulders Display',sans-serif;font-size:26px;font-weight:900;color:var(--ink);white-space:nowrap}
.xrow-bundle{grid-template-columns:28px minmax(0,1fr) auto;padding:20px;background:var(--pale);border:2px solid var(--ink)}
.xrow-count{grid-template-columns:minmax(0,1fr) auto;cursor:default}
.xrow-count label{cursor:pointer}
.xrow-terms{grid-template-columns:28px minmax(0,1fr);border-bottom:0}
.xrow-terms a{color:var(--ink)}

/* fields */
.fld{display:flex;flex-direction:column;gap:8px;min-width:0}
.fld-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 20px}
.qf-supplies:not([hidden]){display:grid;gap:24px}   /* the three supplies questions (25 October 2026) */
/* Laundry & Ironing in the booking form (25 October 2026): its own block between the extras */
.bk-laundry{margin:28px 0 8px;padding-bottom:20px}
.bk-laundry .bk-count{margin-top:18px}
.bk-laundry > .hint{margin:12px 0 0}
.fld-wide{grid-column:1 / -1}
.fld input[type="text"],.fld input[type="tel"],.fld input[type="email"],.fld input[type="date"],.fld textarea{width:100%;max-width:100%;min-height:52px;padding:12px 16px;border:2px solid var(--line);background:#fff;font:500 16px 'Manrope',sans-serif;color:var(--ink);border-radius:0;transition:border-color .2s}
.fld input[type="date"]{max-width:320px;-webkit-appearance:none;appearance:none}
.fld textarea{resize:vertical;line-height:1.5}
.fld input:hover,.fld textarea:hover{border-color:var(--mute)}
.fld input:focus,.fld textarea:focus{border-color:var(--ink)}
.fld input[aria-invalid="true"],.fld input[aria-invalid="true"]:focus{border-color:#B42318}

/* price summary */
.bk-sum{background:var(--bone);border-top:6px solid var(--ink);padding:28px}
.bk-sum h3{font-size:40px;margin-bottom:18px}
.sum-lines{list-style:none;margin:0;padding:0}
.sum-lines li{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:12px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.45;color:var(--mute)}
.sum-lines li b{color:var(--ink);font-weight:800;white-space:nowrap}
.sum-total{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-top:16px;padding-top:16px;border-top:2px solid var(--ink)}
.sum-total span{font-size:13px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.sum-total strong{font-family:'Big Shoulders Display',sans-serif;font-size:56px;font-weight:900;line-height:.9;color:var(--ink);text-align:right}
.sum-note{margin:14px 0 0;font-size:13px;line-height:1.5;color:var(--mute)}
.trust{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.trust li{position:relative;padding:12px 0 12px 32px;border-bottom:1px solid var(--line);font-size:14px;font-weight:600;line-height:1.5;color:var(--ink)}
.trust li::before{content:"";position:absolute;left:0;top:13px;width:20px;height:20px;background:var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/14px no-repeat}
.trust small{display:block;font-weight:500;color:var(--mute)}

/* quote box (5+ bedrooms) */
.bk-quote{display:flex;flex-direction:column;align-items:flex-start;gap:14px;padding:20px;background:var(--pale);border-left:4px solid var(--ink)}
.bk-quote[hidden]{display:none}
.bk-quote p{margin:0;font-size:15px;line-height:1.6}

/* review + final summary */
.review{display:flex;flex-direction:column;gap:28px}
.rv-group{border-top:2px solid var(--ink);padding-top:16px}
.rv-head{display:flex;justify-content:space-between;align-items:center;gap:16px}
.rv-group h4{margin:0 0 8px;font-size:13px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.rv-edit{border:0;background:none;padding:8px 0;font:800 13px 'Manrope',sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);text-decoration:underline;text-underline-offset:4px;cursor:pointer}
.review dl{display:grid;grid-template-columns:minmax(0,160px) minmax(0,1fr);gap:8px 20px;margin:0}
.review dt{font-size:14px;font-weight:700;color:var(--mute)}
.review dd{margin:0;font-size:15px;line-height:1.5;color:var(--ink);overflow-wrap:anywhere;white-space:pre-line}
.lede-sm{margin:-8px 0 0;font-size:17px;line-height:1.6;color:var(--ink)}
.stripe-slot{padding:28px;border:2px dashed var(--mute);background:var(--bone)}
.stripe-slot b{display:block;font-size:15px;font-weight:800}
.stripe-slot p{margin:8px 0 0;font-size:14px;line-height:1.6;color:var(--mute)}

/* mobile total bar */
.bk-bar{position:fixed;left:0;right:0;bottom:0;z-index:50;display:none;align-items:center;justify-content:space-between;gap:16px;padding:12px 20px;background:var(--ink);color:#fff;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.bk-bar strong{margin-left:8px;font-family:'Big Shoulders Display',sans-serif;font-size:30px;letter-spacing:.01em;vertical-align:middle}
.bk-bar a{color:#fff}
.bk-bar :focus-visible{outline-color:#fff}

/* what's included */
.inc{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:24px}
.inc-side{display:flex;flex-direction:column;gap:24px}
.inc-card{background:#fff;border-top:6px solid var(--ink);padding:32px;display:flex;flex-direction:column;gap:14px}
.inc-card h3{font-size:clamp(32px,3.4vw,44px)}
.inc-card p{margin:0;font-size:16px;line-height:1.6;color:var(--mute)}
.inc-never{grid-column:1 / -1;border-top-color:var(--mute)}
.inc-never .ticks{columns:2;column-gap:40px}
/* "Never, for safety" and "By quote" (10 November 2026): the second list's heading, spaced like a new card section */
.num.never-h{display:block;margin-top:24px}
/* Accessibility (10 November 2026, the owner's brief section 11): high contrast and Windows high-contrast themes keep every
   control visible; animations are already off with reduce motion (above). */
@media (prefers-contrast:more){.gasi{--mute:#2E3A50;--line:#8C9AB2}.btn,.chip span,.choice-body,.xrow{border-width:2px}.hint,.fld-opt{color:#2E3A50}}
@media (forced-colors:active){.btn,.chip span,.choice-body,.xquick-btn,.theme-toggle{border:2px solid ButtonText}.ticks li::before,.promises li::before{forced-color-adjust:none}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important}}
/* Ask AI about GASI (10 November 2026) */
.ask-ai{margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}
.ask-ai-h{font-size:16px;font-weight:800;margin:0 0 6px}
.ask-ai-q{margin:0 0 12px;font-size:14px;color:var(--mute)}
.ask-ai-note{margin-top:10px}
/* The referral share page (10 November 2026) */
.refer-label{margin:0;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.refer-code{font-size:56px;margin:6px 0 20px;word-break:break-all}
.refer-actions{display:flex;flex-wrap:wrap;gap:12px}
/* Why GASI checklist (10 November 2026): under the four pillars on the homepage, and its own section on the Prices page */
.why-list{margin-top:56px;padding-top:40px;border-top:1px solid var(--line)}
.why-list h3{font-size:40px;margin:0 0 16px}
.why-lead{font-size:19px;font-weight:700;color:var(--ink);margin:0 0 22px}
.why .why-lead{color:#fff}
.why .why-list{border-top-color:rgba(255,255,255,.25)}
/* Move-In Cleaning link on the End of Tenancy page (10 November 2026) */
.move-in-wrap{margin-top:-24px;margin-bottom:8px}
.move-in-note a{color:inherit}
/* Date and time boxes (11 November 2026): a date button ("Tue 15 Dec") and an hourly time dropdown, side by side; stacked
   on phones; at least 44px to tap. The device's own date picker opens from the button (the real date box stays hidden). */
.dtf-row{position:relative;display:flex;gap:10px;flex-wrap:wrap}
.dtf-date{display:inline-flex;align-items:center;gap:10px;min-height:52px;min-width:44px;flex:1 1 160px;padding:12px 16px;border:2px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-weight:700;text-align:left;cursor:pointer}
.dtf-date:hover,.dtf-date:focus-visible{border-color:var(--ink)}
.dtf-date:focus-visible,.dtf-time:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.dtf-native{position:absolute;left:0;bottom:0;width:1px;height:1px;opacity:0;pointer-events:none}
.dtf-native.dtf-native-on{position:static;width:auto;height:52px;opacity:1;pointer-events:auto;flex:1 1 160px}
.fld .dtf-time{flex:0 1 130px;min-height:52px;width:auto}
@media (max-width:640px){.dtf-row{flex-direction:column}.fld .dtf-time{flex:1 1 auto;width:100%}}
/* Move-In Cleaning on the service picker (11 November 2026): a small line under the End of Tenancy card */
.choice-stack{display:flex;flex-direction:column;gap:8px}
.choice-stack > .choice{flex:1}
.choice-sub{display:flex;align-items:center;min-height:44px;font-size:14px;font-weight:700;text-decoration:underline;text-underline-offset:3px;cursor:pointer;color:var(--ink)}
.choice-sub:has(input:checked){text-decoration-thickness:3px}
.choice-sub:has(input:focus-visible){outline:3px solid var(--ink);outline-offset:3px}
/* "Both: save £30" on the booking form: the highlighted choice */
.choice.choice-hl .choice-body{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.pcard .num.never-h{margin-top:20px}
.ticks{list-style:none;margin:0;padding:0}
.ticks li{position:relative;padding:11px 0 11px 32px;border-bottom:1px solid var(--line);font-size:16px;line-height:1.5;break-inside:avoid}
.ticks li::before{content:"";position:absolute;left:0;top:13px;width:20px;height:20px;background:var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/14px no-repeat}
.ticks-plus li::before{background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B1A33' stroke-width='3.5'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") center/14px no-repeat;border:2px solid var(--ink);width:20px;height:20px;box-sizing:border-box}
.ticks-no li::before{background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234B5870' stroke-width='3.5'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E") center/14px no-repeat;border:2px solid var(--mute);box-sizing:border-box}

@media (max-width:1100px){
  .bk{grid-template-columns:minmax(0,1fr) minmax(0,340px);gap:36px}
  .choice-grid{grid-template-columns:1fr}
}
@media (max-width:1000px){
  .bk{grid-template-columns:minmax(0,1fr)}
  .bk-aside{position:static}
  .bk-bar{display:flex}
  .bk-bar[hidden]{display:none}
  .pg-deep #book{padding-bottom:96px}
}
@media (max-width:820px){
  .pg-deep main [id]{scroll-margin-top:84px}
  .pg-deep .hero-strip .dc-from{display:block;margin:6px 0 0}
  .bk-prog{margin-bottom:28px}
  .bk-prog li b{font-size:11px;letter-spacing:.04em}
  .choice-main .choice-body{flex-direction:column}
  .choice-txt{padding:24px}
  .choice-main .choice-txt b{font-size:52px}
  .choice-main .choice-price strong{font-size:38px}
  .choice-body b{font-size:28px}
  .xrow-bundle{padding:16px}
  .fld-grid{grid-template-columns:1fr}
  .fld input[type="date"]{max-width:100%}
  .review dl{grid-template-columns:1fr;gap:2px}
  .review dd{margin-bottom:10px}
  .bk-sum{padding:24px 20px}
  .inc{grid-template-columns:1fr}
  .inc-card{padding:24px 20px}
  .inc-never .ticks{columns:1}
  .bk-actions .btn{flex:1 1 auto}
}
@media (max-width:480px){
  .bk-prog li b{display:none}
  .bk-prog li[aria-current] b{display:block}
}

/* ── Shared layout (all pages) ─────────────────────────────── */

/* Self-hosted fonts (variable woff2, latin subset) */
@font-face{font-family:'Big Shoulders Display';font-style:normal;font-weight:700 900;font-display:swap;src:url(/assets/fonts/big-shoulders-display-latin.woff2?v=203dd8ba4a) format('woff2')}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(/assets/fonts/manrope-latin.woff2?v=e310b55a7f) format('woff2')}

/* Hero content lines up with the page edge: the .wrap is a flex item
   in the hero column, so without a width its auto margins centred it. */
.hero > .hero-body{width:100%}

/* Main nav: six items plus the button fit from 1101px up */
@media (max-width:1280px){
  .nl{padding:0 13px}
  .nl::after{left:13px;right:13px}
}

/* Services drop-down: three columns, each heading links to its category */
.mega-intro .more{margin-top:16px}
.mega-col{display:flex;flex-direction:column;gap:14px}
.mega-col .mega-card .ph{height:110px}
.mega-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.mega-list a{display:block;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;font-weight:700;color:var(--ink);text-decoration:none}
.mega-list a:hover{color:var(--ink);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}

/* Mobile menu: expandable service groups */

/* Footer: brand on its own row, then five link columns */
.ftr-top{grid-template-columns:repeat(5,minmax(0,1fr))}
.ftr-top .ftr-brand{grid-column:1 / -1;display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 40px;align-items:end}
.ftr-top .ftr-brand .wm{grid-row:1 / span 2}
.ftr-top .ftr-brand p{margin:0;max-width:420px}
.ftr .ftr-h a{color:#fff;font-size:inherit}
.ftr .ftr-h a:hover{color:var(--soft)}
.ftr ul span{font-size:15px;line-height:1.5}
@media (max-width:1100px){
  .ftr-top{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:820px){
  .ftr-top{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ftr-top .ftr-brand{display:block}
  .ftr-top .ftr-brand p{margin-top:18px}
}

/* Focus rings stay visible on navy: shared header, menu and footer, and inner-page heroes */
.util :focus-visible,.mmenu :focus-visible,.ftr :focus-visible,.pg .hero :focus-visible,.pg .why :focus-visible,.bk-bar :focus-visible{outline-color:#fff}

/* Inner pages */
.pg main [id]{scroll-margin-top:96px}
.crumbs{margin-bottom:22px}
.crumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 0;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--soft)}
.crumbs li + li::before{content:"›";margin:0 10px;color:var(--soft)}
.crumbs a{color:#fff;text-decoration:none;border-bottom:2px solid transparent;transition:border-color .2s}
.crumbs a:hover{color:#fff;border-bottom-color:#fff}
.crumbs [aria-current]{color:var(--soft)}
.back{display:inline-flex;align-items:center;gap:10px;margin-top:40px;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;color:var(--ink);padding:12px 0;border-bottom:2px solid var(--ink);transition:gap .25s}
.back:hover{gap:16px;color:var(--ink)}
@media (max-width:820px){
  .pg main [id]{scroll-margin-top:84px}
}
.nowrap{white-space:nowrap}

/* ── Service, category and booking pages ───────────────────── */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.hero-from{margin:18px 0 0;font-size:15px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--soft)}
.hero-from-note{display:block;margin-top:6px;font-size:14px;letter-spacing:.06em;text-transform:none;font-weight:700}   /* 15 November 2026 */
.hero-from strong{display:inline-block;margin-left:6px;font-family:'Big Shoulders Display',sans-serif;font-size:44px;letter-spacing:.01em;color:#fff;vertical-align:-4px}

/* promises strip */
.promise-band{background:var(--ink);color:#fff;padding:28px 0}
.promise-band .promises{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 28px}
.promises{list-style:none;margin:0;padding:0}
.promises li{position:relative;padding:4px 0 4px 30px;font-size:14px;font-weight:600;line-height:1.5}
.promises li::before{content:"";position:absolute;left:0;top:5px;width:20px;height:20px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B1A33' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/14px no-repeat}
.bk-aside .promises li{padding:12px 0 12px 32px;border-bottom:1px solid var(--line);color:var(--ink)}
.bk-aside .promises li::before{top:13px;background-color:var(--ink);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E")}

/* split intro: photo + text */
.who{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:56px;align-items:center}
.who > .ph{aspect-ratio:5/4}
.who-body{display:flex;flex-direction:column;gap:22px}
.who-body .lede{font-size:22px}
.who-body p{margin:0;font-size:17px;line-height:1.65;color:var(--mute)}
/* Regular Cleaning (9 November 2026, owner's brief): the three rates on one line, and the ticked lines, beside the photo */
.who-body .who-rates{color:var(--ink);font-weight:700}
.who-rates .nw{white-space:nowrap}
.who-body .ticks{margin:0}
/* Text never runs past the photo (9 November 2026, second brief): with two columns (821px and wider) the photo keeps its
   5:4 shape as its smallest height and grows to the text's height when the text is taller, on every page */
/* 11 November 2026 (the owner's answer): at 1100px and below the photo goes above the text (one column) instead of growing
   very tall; from 1101px the two columns stay, with the photo growing to the text's height. Layout only. */
@media (min-width:1101px){.who > .ph{align-self:stretch;width:100%}}
@media (max-width:1100px){.who{grid-template-columns:1fr;gap:28px}}
@media (min-width:641px) and (max-width:1100px){.who > .ph{aspect-ratio:16/9}}

/* price cards */
.pcards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.pcard{background:#fff;border-top:6px solid var(--ink);padding:28px;display:flex;flex-direction:column;gap:12px}
.featured .pcard,.featured .inc-card{background:var(--bone)}
.pcard h3{font-size:34px}
.pcard .big-price{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:56px;line-height:.9}
.pcard .big-price small{font-family:'Manrope',sans-serif;font-size:14px;font-weight:700;letter-spacing:0;color:var(--mute);margin-left:6px}
.prow{list-style:none;margin:0;padding:0}
.prow li{display:flex;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.45;color:var(--mute)}
.prow li b{color:var(--ink);font-weight:800;white-space:nowrap}
.pcard p{margin:0;font-size:15px;line-height:1.6;color:var(--mute)}

/* category service cards: add from-price and two actions to .svc */
.svc .from{font-size:14px;font-weight:700;color:var(--mute)}
.svc .from strong{font-family:'Big Shoulders Display',sans-serif;font-size:32px;font-weight:900;color:var(--ink);margin-left:4px}
.svc-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:auto;padding-top:8px}
.svc-static{cursor:default}
.svc-grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.svc-grid-4 .svc h3{font-size:40px}

/* category cards on the services hub */
.cat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.cat{display:flex;flex-direction:column;background:#fff}
.cat .ph{aspect-ratio:4/3}
.cat:hover .ph-in{transform:scale(1.06)}
.cat-body{padding:28px;display:flex;flex-direction:column;gap:14px;flex:1}
.cat h3{font-size:48px}
.cat h3 a{color:var(--ink);text-decoration:none}
.cat h3 a:hover{text-decoration:underline;text-decoration-thickness:5px;text-underline-offset:6px}
.cat-list{list-style:none;margin:0;padding:0}
.cat-list a{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);font-weight:700;color:var(--ink);text-decoration:none}
.cat-list a:hover{text-decoration:underline;text-underline-offset:4px}
.cat-list a span{font-weight:600;color:var(--mute);white-space:nowrap}

/* comparison table */
.cmp-wrap{overflow-x:auto;border-top:6px solid var(--ink)}
.cmp{width:100%;border-collapse:collapse;min-width:640px;background:#fff}
.cmp th,.cmp td{padding:16px 18px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;font-size:15px;line-height:1.55}
.cmp thead th{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute);background:var(--bone)}
.cmp tbody th{font-family:'Big Shoulders Display',sans-serif;font-size:26px;font-weight:900;text-transform:uppercase;line-height:1;white-space:nowrap}
.cmp td{color:var(--mute)}

/* how it works (light) reuses .steps; guarantee band reuses .why */
.guar{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:48px;align-items:start}
.guar p{margin:0 0 14px;font-size:17px;line-height:1.65;color:#E3EBFA}
.guar a{color:#fff;text-decoration:underline;text-underline-offset:3px}   /* audit 1 November 2026: was navy on navy */
.guar .big-claim{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:clamp(40px,4.4vw,64px);line-height:.9;text-transform:uppercase;color:#fff;margin:0}

/* FAQ accordions */
.faq{border-top:6px solid var(--ink)}
.faq details{border-bottom:1px solid var(--line);background:transparent}
.faq summary{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:22px 0;cursor:pointer;list-style:none;font-size:18px;font-weight:800;color:var(--ink)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";flex:none;width:28px;height:28px;border:2px solid var(--ink);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B1A33' stroke-width='3'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") center/14px no-repeat;transition:transform .25s}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq .faq-a{padding:0 0 24px;max-width:760px}
.faq .faq-a p{margin:0 0 12px;font-size:16px;line-height:1.65;color:var(--mute)}
/* FAQ page tools (2 November 2026): "Ask us directly", search, topic buttons and a label above each group */
.faq-tools{display:grid;gap:20px;margin:0 0 40px}
.faq-ask{margin:0;font-size:16px;font-weight:600;color:var(--ink)}
.faq-ask a,.faq-none a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.faq-search{display:grid;gap:8px;max-width:560px}
.faq-search input{font:inherit;font-size:16px;min-height:52px;padding:12px 16px;border:2px solid var(--line);background:#fff;color:var(--ink);border-radius:0;-webkit-appearance:none;appearance:none}
.faq-search input:focus{outline:3px solid var(--ink);outline-offset:2px;border-color:var(--ink)}
.faq-topics{display:flex;flex-wrap:wrap;gap:8px}
.faq-none{margin:0;font-size:16px;font-weight:600}
.faq-none[hidden],.faq-group[hidden],.faq details[hidden]{display:none}
.faq-group{scroll-margin-top:110px}
.faq-group + .faq-group{margin-top:48px}
.faq-label{margin:0 0 14px;font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)}
.faq-label:focus{outline:none}
.faq-more{margin:0 0 16px;font-size:16px;line-height:1.6;color:var(--mute)}   /* 16 November 2026: link to /what-to-expect/ */

/* booking additions */
.bk-sub-lg{font-size:40px;margin:8px 0 0;padding-top:24px;border-top:6px solid var(--ink)}
.bk-stack{display:flex;flex-direction:column;gap:28px}
.bk-stack[hidden]{display:none}
.choice-grid-svc{grid-template-columns:repeat(3,minmax(0,1fr))}
.choice-grid-svc .choice-body b{font-size:28px}
.bk-or a{color:var(--ink)}
.xlist-first{border-top:0}
.sum-meta{margin:12px 0 0;font-size:14px;font-weight:700;color:var(--ink)}
.sum-lines li small{display:block;font-size:12px;font-weight:700;color:var(--mute);margin-top:2px}
.bk-soiling a{color:var(--ink);font-weight:700}
.bk-ref{margin:-8px 0 0;font-size:18px}
.bk-ref strong{font-family:'Big Shoulders Display',sans-serif;font-size:36px;letter-spacing:.04em;margin-left:8px}
.bk-next{border-top:6px solid var(--ink);padding-top:22px}
.ticks-num{counter-reset:n}
.ticks-num li{counter-increment:n}
.ticks-num li::before{content:counter(n);background:var(--ink);color:#fff;font-size:12px;font-weight:800;display:grid;place-content:center}
.bk-bar-total span{font-size:13px}
.bk-bar .btn{min-height:44px}
.pg .bk-bar :focus-visible{outline-color:#fff}

/* quote form */
.qf-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,380px);gap:56px;align-items:start}
.qf-aside{position:sticky;top:108px;display:flex;flex-direction:column;gap:24px}
.qf{display:flex;flex-direction:column;gap:32px}
.fld select{width:100%;min-height:52px;padding:12px 44px 12px 16px;border:2px solid var(--line);border-radius:0;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B1A33' stroke-width='3'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") right 14px center/16px no-repeat;font:600 16px 'Manrope',sans-serif;color:var(--ink);-webkit-appearance:none;appearance:none}
.fld select:focus{border-color:var(--ink)}
.fld input[type="number"]{width:100%;min-height:52px;padding:12px 16px;border:2px solid var(--line);background:#fff;font:600 16px 'Manrope',sans-serif;color:var(--ink);border-radius:0}
.fld select[aria-invalid="true"],.fld textarea[aria-invalid="true"]{border-color:#B42318}
.fld-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.fld-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
.qf-est{display:flex;flex-direction:column;gap:18px;padding:24px;background:var(--pale);border-left:4px solid var(--ink)}
.qf-est[hidden]{display:none}
.qf-from{margin:0;font-size:15px;line-height:1.6}
.qf-estimate{margin:0;font-size:17px;font-weight:800}
.qf-promise{border-top:6px solid var(--ink);padding-top:20px}
.qf-done{display:flex;flex-direction:column;gap:14px}
.qf-done[hidden]{display:none}
.qf-done p{margin:0;font-size:17px;line-height:1.6}
.qf-done a{color:var(--ink);font-weight:700}

@media (max-width:1100px){
  .promise-band .promises{grid-template-columns:repeat(2,minmax(0,1fr))}
  .svc-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cat-grid{grid-template-columns:1fr}
  .cat{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr)}
  .cat .ph{aspect-ratio:auto;min-height:100%}
  .pcards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .qf-layout{grid-template-columns:1fr}
  .qf-aside{position:static}
  .choice-grid-svc{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:820px){
  .promise-band .promises{grid-template-columns:1fr}
  .who{grid-template-columns:1fr;gap:28px}
  .svc-grid-4{grid-template-columns:1fr}
  .cat{display:flex}
  .cat .ph{aspect-ratio:16/10;min-height:0}
  .cat h3{font-size:40px}
  .pcards{grid-template-columns:1fr}
  .guar{grid-template-columns:1fr;gap:24px}
  .fld-grid-3,.fld-grid-4{grid-template-columns:1fr}
  .choice-grid-svc{grid-template-columns:1fr}
  .hero-from strong{font-size:36px}
  .faq summary{font-size:16px}
}
.back-wrap{padding-bottom:64px}
.back-wrap .back{margin-top:0}
.bk-fs > legend.sr-only{float:none;width:1px;margin:-1px}
/* Decision 8: white keyboard focus on navy bands, including the homepage hero and Why GASI */
.hero :focus-visible,.why :focus-visible{outline-color:#fff}
@media (max-width:820px){
  .cmp-wrap{overflow:visible}
  .cmp{min-width:0}
  .cmp thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
  .cmp,.cmp tbody,.cmp tr,.cmp th,.cmp td{display:block}
  .cmp tr{padding:18px 0;border-bottom:1px solid var(--line)}
  .cmp tbody th{padding:0 16px 8px;border:0}
  .cmp td{padding:6px 16px;border:0}
  .cmp td::before{content:attr(data-label);display:block;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
}

/* ── Prices, About, Our Work, Contact, FAQ, legal ──────────── */
.jump-wrap{padding-top:40px}
.jump ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:10px}
.jump a{display:inline-flex;min-height:44px;align-items:center;padding:0 16px;border:2px solid var(--ink);font-size:13px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;color:var(--ink);transition:background .2s,color .2s}
.jump a:hover{background:var(--ink);color:#fff}
.jump-wrap + .sec{padding-top:56px}
.sec-lead{margin:-16px 0 28px;max-width:720px;font-size:17px;line-height:1.6;color:var(--mute)}
.ticks-2col{columns:2;column-gap:48px}
.pol{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 48px;border-top:6px solid var(--ink)}
.pol-item{padding:24px 0;border-bottom:1px solid var(--line)}
.pol-item h3{font-size:30px;margin-bottom:10px}
.pol-item p{margin:0 0 10px;font-size:16px;line-height:1.65;color:var(--mute)}
.areas{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:6px solid var(--ink)}
.areas li{display:flex;gap:14px;align-items:baseline;padding:16px 0;border-bottom:1px solid var(--line)}
.areas b{font-family:'Big Shoulders Display',sans-serif;font-size:28px;font-weight:900;min-width:64px}
.areas span{font-size:15px;color:var(--mute)}
.pcard .areas{grid-template-columns:repeat(2,minmax(0,1fr));border-top:0}
.pcard .areas b{font-size:22px;min-width:52px}
.pcards-2{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:20px}
.svc-inc{margin-top:20px}
.pcard-link{color:var(--ink);text-decoration:none}
.pcard-link:hover{text-decoration:underline;text-decoration-thickness:4px;text-underline-offset:5px}
.pcard-email{font-size:26px;overflow-wrap:anywhere}
.promise-grid .promises{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 40px;border-top:6px solid var(--ink)}
.promise-grid .promises li{padding:18px 0 18px 34px;border-bottom:1px solid var(--line);font-size:17px;color:var(--ink)}
.promise-grid .promises li::before{top:20px;background-color:var(--ink);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E")}
.steps-4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* five steps, three to a row (Work with us, 25 October 2026) */
.steps-5 .step:nth-child(3n){border-right:0}
.steps-5 .step:nth-child(3n+1){padding-left:0}
.steps-5 .step:nth-child(n+4){border-top:1px solid var(--line)}
.ba-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.ba{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.ba .ph{aspect-ratio:3/4}
.legal{max-width:780px}
.legal h2{font-size:clamp(30px,3vw,40px);margin:40px 0 12px;padding-top:18px;border-top:4px solid var(--ink)}
.legal p{margin:0 0 14px;font-size:17px;line-height:1.7;color:var(--mute)}
.draft{display:inline-block;padding:8px 12px;background:var(--pale);border-left:4px solid var(--ink);font-weight:800;color:var(--ink)!important}
@media (max-width:1100px){
  .steps-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .steps-4 .step:nth-child(2){border-right:0}
  .steps-4 .step:nth-child(3){padding-left:0}
  .areas{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ba-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:820px){
  .ticks-2col{columns:1}
  .pol,.promise-grid .promises,.pcards-2,.ba-grid{grid-template-columns:1fr}
  .areas{grid-template-columns:1fr}
  .steps-4{grid-template-columns:1fr}
  .steps-4 .step,.steps-4 .step:nth-child(3){padding:28px 0;border-right:0}
}
@media (max-width:480px){.pcard .areas{grid-template-columns:1fr}}
.pcard h3.pcard-email{font-family:'Manrope',sans-serif;text-transform:none;font-size:20px;font-weight:800;line-height:1.3;letter-spacing:0}
.faq details[open] summary::after{transform:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B1A33' stroke-width='3'%3E%3Cpath d='M5 12h14'/%3E%3C/svg%3E")}

/* ── Brand logo (October 2026 logo kit) ────────────────────── */
.logo-brand{gap:0}
.logo-img{display:block;height:44px;width:auto}
.mmenu-top .logo-img{height:36px}
.ftr-top .ftr-brand{grid-template-columns:auto minmax(0,1fr)}
.ftr-logo{display:block;width:220px;height:auto;grid-row:1 / span 3;align-self:start}
.ftr-social{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.ftr .ftr-social-link{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid rgba(255,255,255,.3);color:#fff;transition:background .2s,color .2s,border-color .2s}
.ftr .ftr-social-link:hover{background:#fff;color:var(--ink);border-color:#fff}
.ftr-hours{color:var(--soft);font-size:14px;line-height:1.6}
.qf-actions{align-items:center}
.qf-alt{margin:0;font-size:15px;color:var(--mute)}
.qf-alt a{color:var(--ink);font-weight:700}
.bk-send-err a{color:var(--ink);font-weight:800}
@media (max-width:820px){
  .logo-img{height:36px}
  .ftr-logo{width:180px}
  .ftr-social{margin-top:18px}
}
.social-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.pcard .prow li b{text-align:right}
/* Book page: short hero so the service choice is on the first screen */
.hero-short{min-height:0}
.hero-short .hero-body{padding-top:28px;padding-bottom:30px}
.hero-short h1{font-size:clamp(48px,7vw,96px);margin-top:0}
.hero-short .hero-lede{margin-top:12px;font-size:17px}
.pg-book #book{padding-top:32px}
/* 14 November 2026: the short navy band is now the top of every page without a needed photo (legal pages, FAQ,
   Contact, Prices, Areas, About, Our Work, /services/, residential, 404 …) */
.hero-short .kicker + h1{margin-top:14px}
.hero-short .hero-ctas{margin-top:24px}
.hero-short .hero-from{margin-top:14px}
.hero-short h1{max-width:none}
.who-full{grid-template-columns:1fr}
.who-full .who-body .lede{max-width:none}
.pg-book .bk-prog{margin-bottom:24px}
@media (max-width:820px){
  .hero-short .hero-body{padding-top:18px;padding-bottom:20px}
  .hero-short h1{font-size:44px}
  .hero-short .hero-lede{font-size:15px;margin-top:8px}
  .hero-short .crumbs{margin-bottom:12px}
  .pg-book #book{padding-top:20px}
  .pg-book .bk-h{font-size:32px;margin-bottom:12px}
}
.cat{min-width:0}
.cat-list a span{white-space:normal;text-align:right}
.pcard .prow li b{white-space:normal}

/* ── Service area (13 October 2026): postcode step, enquiry and waitlist, /areas/ ── */
.pc-gate{display:flex;flex-direction:column;gap:20px}
.pc-gate .fld{max-width:560px}
.pc-row{display:flex;gap:12px;align-items:stretch}
.pc-row input{flex:1 1 auto;min-width:0}
.pc-row .btn{flex:0 0 auto}
.pc-note{margin:0}
.linkbtn{background:none;border:0;padding:0;font:inherit;font-weight:700;color:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.bk-h-2{font-size:clamp(28px,3vw,40px)}
.bk-prog[hidden]{display:none}
.bk-gated{grid-template-columns:minmax(0,1fr)}
.bk-gated .bk-aside{display:none}
.bk .btn[hidden]{display:none}
.bk-gated [data-step="1"] > .bk-actions{display:none}
.pc-panel{display:flex;flex-direction:column;gap:24px;max-width:760px}
.pc-panel[hidden],.pc-done[hidden]{display:none}
.pc-intro{margin:0}
.pc-done:focus{outline:none}
.area-line a{font-weight:700;text-decoration:underline;text-underline-offset:3px}
.area-check{max-width:640px}
.area-check .pc-note{margin-top:20px}
.area-check .pc-note .btn{margin-top:14px}
.hero-sub{margin:14px 0 0;max-width:560px;font-size:16px;line-height:1.55;color:#E4EAF4}
.hero-sub a{color:#fff}

/* ── Footer (approved 14 October 2026, second version): Brand | Services | Company | Contact ──
   Replaces the earlier footer layouts above (brand row, stacked logo, six columns). Desktop is wider than 900px. */
.ftr .wrap{max-width:none;padding-left:44px;padding-right:44px}
.ftr-quote{border-color:rgba(255,255,255,.14)}
.ftr-quote .wrap{min-height:114px;padding-top:0;padding-bottom:0}
.ftr .ftr-top{grid-template-columns:minmax(260px,1.35fr) minmax(0,1.25fr) minmax(0,.8fr) minmax(0,1fr);column-gap:clamp(40px,5vw,88px);row-gap:0;padding-top:80px;padding-bottom:80px}
.ftr-top .ftr-brand{grid-column:auto;display:block;min-width:0;border-right:1px solid rgba(255,255,255,.14);padding-right:clamp(0px,2vw,32px)}
.ftr-col{min-width:0}
.ftr-mark{display:block;width:130px;height:130px;line-height:0}
.ftr-mark img{display:block;width:130px;height:130px}
.ftr-top .ftr-brand .tagline{margin:22px 0 0;font-size:13px;font-weight:800;letter-spacing:.14em;color:#fff}
.ftr-top .ftr-brand .ftr-desc{margin:22px 0 0;max-width:300px;font-size:15.5px;line-height:1.7;color:rgba(255,255,255,.8)}
.ftr-social{display:flex;flex-wrap:wrap;gap:6px;margin-top:18px}
.ftr .ftr-social-link{width:40px;height:40px;border:1px solid rgba(255,255,255,.35);color:#fff}
.ftr .ftr-h{margin:0 0 19px;font-size:13px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:#fff;white-space:nowrap}
.ftr-col ul{gap:13px}
.ftr-col a,.ftr-col .ftr-txt{color:rgba(255,255,255,.8);font-size:clamp(15px,1.05vw,16.5px);line-height:1.47}
.ftr-col a:hover{color:#fff}
.ftr-contact a[href^="mailto:"],.ftr-contact .nowrap{white-space:nowrap}
.ftr .ftr-more{text-decoration:underline;text-underline-offset:3px}
/* Narrow desktops: the Contact column never gets narrower than its email and WhatsApp lines */
@media (min-width:901px) and (max-width:1199px){
  .ftr .ftr-top{grid-template-columns:minmax(260px,1.35fr) minmax(0,1.25fr) minmax(0,.8fr) minmax(min-content,1fr)}
}
@media (max-width:900px){
  .ftr .wrap{padding-left:16px;padding-right:16px}
  .ftr-quote .wrap{min-height:0;flex-direction:column;align-items:stretch;gap:20px;padding-top:32px;padding-bottom:32px}
  .ftr-quote b{font-size:34px}
  .ftr-quote .btn{width:100%;justify-content:center}
  .ftr .ftr-top{grid-template-columns:minmax(0,1fr);gap:40px;padding-top:56px;padding-bottom:56px}
  .ftr-top .ftr-brand{border-right:0;padding-right:0;padding-bottom:28px;border-bottom:1px solid rgba(255,255,255,.14)}
  .ftr-mark,.ftr-mark img{width:110px;height:110px}
  .ftr-top .ftr-brand .ftr-desc{max-width:none}
  .ftr-company ul{display:block;column-count:2;column-gap:24px}
  .ftr-company li{break-inside:avoid;margin-bottom:13px}
  .ftr-bot .wrap{flex-direction:column;align-items:flex-start}
  .ftr-bot nav{gap:12px 22px}
}

/* Top bar (14 October 2026): longer labels, each kept on one line */
.util a{white-space:nowrap}

/* Specialist & Add-ons hero strip: four links (Laundry & ironing added 14 October 2026) */
@media (min-width:821px){.hero-strip-4 .wrap{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* ── Launch setup (18 October 2026) ── */
/* Footer bottom bar: one line (©, registration, company number) on the left and the legal links on the
   right (20 October 2026). Each part is .nowrap, so the line only wraps at " · ". The registered office
   address is on the Contact, Terms and Privacy pages, not in the footer. */
.ftr-bot .ftr-copy{order:0;margin:0;flex:1 1 520px;min-width:0;line-height:1.6}
.ftr-bot nav{order:1}
.ftr-bot .ftr-cc{font-size:13px;font-weight:inherit;color:var(--soft);text-decoration:none}
.ftr-bot .ftr-cc:hover{color:#fff}
.ftr-bot .ftr-cc[hidden]{display:none}
@media (max-width:900px){.ftr-bot .ftr-copy,.ftr-bot nav{order:0;flex:0 0 auto}}
/* Forms: the hidden "leave this empty" field for bots, and the Turnstile check. */
.hp{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
.ts-box:empty{display:none}
.ts-box{margin:4px 0}
.ts-box.ts-fail .dc-note{margin:0}
/* Contact page: the registered office line under the contact details. */
.co-line{margin:24px 0 0;font-size:13px;line-height:1.6;color:var(--mute)}
.legal ul{margin:0 0 14px;padding-left:22px;font-size:17px;line-height:1.7;color:var(--mute)}
.legal li{margin:0 0 6px}
.legal li b{color:var(--ink)}
/* hidden must win over the flex layouts (the sent quote form, and the Company field for other quotes) */
.qf[hidden],.fld[hidden]{display:none}

/* ── Parking question and offers opt-out (20 October 2026) ── */
.park-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.park-chip span{min-height:56px;text-transform:none;letter-spacing:0;font-size:15px;font-weight:700;line-height:1.35}
.park-badge{display:inline-block;margin-left:10px;padding:3px 10px;background:var(--pale);color:var(--ink);font-size:12px;font-weight:800;letter-spacing:.04em;text-transform:none;vertical-align:middle}
.park-msg{margin:0;font-size:15px;line-height:1.5;color:var(--ink)}
.park-msg:empty{display:none}
.park-notes[hidden]{display:none}
.park-notes{margin-top:4px}
.xrow-optout{margin-top:4px}
@media (max-width:640px){
  .park-opts{grid-template-columns:minmax(0,1fr)}
  .park-badge{display:block;width:max-content;margin:8px 0 0}
}

/* ── Small fixes (20 October 2026) ── */
/* Homepage: selling points under the hero buttons, in the hero's small-caps style. Only wraps at " · ". */
.hero-points{margin:22px 0 0;font-size:12px;font-weight:800;letter-spacing:.16em;line-height:1.9;text-transform:uppercase;color:rgba(255,255,255,.72)}
/* Hover on cards and links with big display titles: the display font's line-height (.88) means an
   underline under a two-line title runs through the next line. These titles are no longer underlined;
   the card's "Read more" link underlines and its arrow moves (the photo already zooms). */
.side:hover h4{text-decoration:none}
.side:hover .go{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:5px}
.cat h3 a:hover{text-decoration:none}
/* Contact page: the phone number never wraps, so its underline can't reach another line; the email
   (which can wrap) gets a thin underline that stays clear of the line below. */
.pcard-link[href^="tel:"]{white-space:nowrap}
.pcard-email .pcard-link:hover{text-decoration-thickness:2px;text-underline-offset:3px}
/* Three-column service cards: a long single word ("COMMERCIAL", "CHANGEOVERS") at 52px was wider than
   the card between 821px and about 1150px. The title now scales down with the screen in that range. */
@media (min-width:821px){.svc-grid:not(.svc-grid-4) .svc h3{font-size:clamp(30px,4vw,52px)}}
/* Keyboard focus: the hero clips anything outside it, so the ring on the links in the strip at the
   bottom of the hero is drawn just inside the link instead; the "Every space" rail scrolls sideways
   (which clips too), so it gets 6px of room on each side, with the same position as before. */
.hero-strip a:focus-visible{outline-offset:-5px}
.rail{padding:6px 6px 18px;margin:-6px -6px 0;scroll-padding-inline:6px}

/* ── Terms version 3 (21 October 2026) ── */
.legal-meta{font-size:15px!important}
.legal-toc{margin:24px 0 8px;padding:20px 24px;background:#fff;border-top:6px solid var(--ink)}
.legal .legal-toc-h{font-family:'Manrope',sans-serif;font-size:13px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;margin:0 0 12px;padding:0;border:0;color:var(--ink)}
.legal-toc ol{list-style:none;margin:0;padding:0;columns:2;column-gap:32px}
.legal-toc li{break-inside:avoid;margin:0 0 8px;font-size:15px;line-height:1.4}
.legal-toc a{color:var(--ink);font-weight:700;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
.legal h2[id],.legal h3[id]{scroll-margin-top:96px}
.legal h3.legal-sub{font-size:17px;font-weight:800;margin:22px 0 8px;color:var(--ink)}
.legal ul ul{margin:6px 0 0;padding-left:20px}
.legal a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.legal a.btn{text-decoration:none}.legal a.btn-ink,.legal a.btn-ink:hover{color:#fff}
.legal-form{margin:0 0 18px;padding:16px 20px;border-left:4px solid var(--ink);background:#fff}
.legal-form p{margin:0 0 8px!important;font-size:16px!important}
@media (max-width:640px){.legal-toc ol{columns:1}}
/* Print / save as PDF: just the terms, black on white, no site header, footer, menus or photos */
@media print{
  .hdr,.util,.mmenu,.mega,.ftr,.promise-band,.cta,.skip,.crumbs,.hero > .ph,.hero > .scrim,.legal-print,.bk-bar{display:none!important}
  body,.gasi{background:#fff!important;color:#000!important}
  .hero{min-height:0!important;background:#fff!important;color:#000!important}
  .hero-body{padding:0 0 12px!important}
  .hero h1,.hero .kicker,.hero-lede{color:#000!important}
  .sec{padding:0!important}
  .legal{max-width:none}
  .legal p,.legal ul,.legal li,.legal a,.legal b,.legal h2,.legal h3,.legal-toc a,.draft{color:#000!important}
  .legal h2{break-after:avoid;border-top-color:#000}
  .legal-toc,.legal-form,.draft{background:#fff!important}
}
/* Booking review step: "Before you confirm" (terms 9, 10 and 19) and the Confirm button until both boxes are ticked */
.bk-before{margin:20px 0 8px;padding:18px 20px;background:var(--pale);border-left:4px solid var(--ink)}
.bk-before .bk-sub{margin:0 0 10px}
.bk-before ul{margin:0;padding-left:18px;font-size:15px;line-height:1.6;color:var(--ink)}
.bk-before li{margin:0 0 8px}
.bk-before li[hidden]{display:none}
.bk-before a{color:var(--ink);font-weight:700;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.btn[aria-disabled="true"],.bk-bar [aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.qf-terms a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.promises a{color:inherit;text-decoration:underline;text-underline-offset:3px}
/* Footer: the note about illustrative photos (illustrativePhotosNote in site-config.js) */
.ftr-bot .ftr-note{order:2;flex:1 0 100%;margin:-8px 0 0;font-size:12px;color:var(--soft);opacity:.85}
.ftr-bot .ftr-note[hidden]{display:none}

/* ── After a form is sent: reference, WhatsApp fast lane, "Save a copy" (21 October 2026) ── */
.fu{margin:16px 0 18px}
.fu:empty{display:none}
.fu-ref{display:flex;width:max-content;max-width:100%;flex-direction:column;gap:2px;margin:0 0 16px;padding:12px 18px;background:#fff;border:2px solid var(--ink)}
.fu-ref span{font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
.fu-ref strong{font-family:'Big Shoulders Display',sans-serif;font-size:40px;font-weight:900;line-height:1;letter-spacing:.04em;color:var(--ink)}
.fu .btn-wa{background:var(--ink);color:#fff;border:2px solid var(--ink);text-decoration:none}
.fu .btn-wa:hover{background:#fff;color:var(--ink)}
.fu-note{margin:8px 0 0;font-size:14px;line-height:1.5;color:var(--mute)}
.fu-line{margin:10px 0 0;font-size:15px}
.fu-line a{color:var(--ink);font-weight:700;text-decoration:underline;text-underline-offset:3px}
@media (max-width:640px){.fu .btn-wa{display:flex;width:100%;justify-content:center;text-align:center}}
/* The copy: a full-screen page over the site, printed on its own (A4, black on white) */
.gasi.copyview{position:fixed;inset:0;z-index:200;overflow:auto;background:#fff;color:#000}
.cv-page{max-width:720px;margin:0 auto;padding:24px 20px 48px;font-size:16px;line-height:1.55}
.cv-bar{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 24px}
.cv-logo{display:block;width:200px;height:auto;margin:0 0 20px}
.cv-h{font-family:'Big Shoulders Display',sans-serif;font-weight:900;text-transform:uppercase;font-size:36px;line-height:1;margin:0 0 10px}
.cv-ref{margin:0 0 18px}
.cv-ref strong{font-size:20px;letter-spacing:.04em}
.cv-sub{font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;margin:22px 0 6px}
.cv-table{width:100%;border-collapse:collapse}
.cv-table th,.cv-table td{padding:7px 0;border-bottom:1px solid #ccc;text-align:left;vertical-align:top}
.cv-table th{width:40%;padding-right:12px;font-weight:600;color:#333}
.cv-foot{margin:28px 0 0;padding-top:12px;border-top:2px solid #000;font-size:13px;color:#333}
body.copy-open{overflow:hidden}
@media print{
  @page{size:A4;margin:16mm}
  body.copy-open > *:not(.copyview){display:none!important}
  body.copy-open{overflow:visible}
  .gasi.copyview{position:static;overflow:visible}
  .cv-bar{display:none!important}
  .cv-page{max-width:none;padding:0}
  .cv-page,.cv-page *{color:#000!important}
}


/* ── Site search: full-screen overlay and results page (24 October 2026) ── */
/* Header: a plain magnifying glass, the same size as the menu button */
.hdr-search{display:inline-flex;width:48px;height:48px;padding:0;border:0;background:none;align-items:center;justify-content:center;cursor:pointer;color:var(--ink)}
.hdr-search svg{width:24px;height:24px}
.hdr-search:hover{opacity:.7}
/* The overlay: the whole screen in GASI navy, fading in */
.srch{position:fixed;inset:0;z-index:300;background:var(--ink);color:#fff;overflow-y:auto;animation:srch-in .2s ease}
.srch[hidden]{display:none}
@keyframes srch-in{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.srch{animation:none}}
body.srch-open{overflow:hidden}
.srch-inner{position:relative;padding-top:96px;padding-bottom:72px}
.srch-close{position:absolute;top:24px;right:40px;width:52px;height:52px;display:inline-flex;align-items:center;justify-content:center;border:0;background:#1C2D4D;color:#fff;cursor:pointer}
.srch-close:hover{background:#2A3E63}
/* Shared by the overlay and the results page */
.srch :focus-visible,.srch-page :focus-visible{outline:3px solid #fff;outline-offset:3px}
.srch-label{display:block;margin:0 0 24px;font-family:'Big Shoulders Display',sans-serif;font-weight:700;font-size:clamp(56px,8vw,112px);line-height:.9;letter-spacing:.02em;text-transform:uppercase;color:#fff}
.srch-pill{display:flex;align-items:center;border:1px solid rgba(255,255,255,.75);border-radius:999px;padding:0 8px 0 28px;background:transparent}
.srch-pill:focus-within{box-shadow:0 0 0 3px #fff;border-color:#fff}
.srch-pill input{flex:1;min-width:0;border:0;outline:0;padding:18px 0;background:transparent;font:500 20px 'Manrope',sans-serif;color:#fff}
.srch-pill input::placeholder{color:rgba(255,255,255,.72)}
.srch-pill input::-webkit-search-cancel-button{filter:invert(1)}
.srch-pill input:focus-visible{outline:0}
.srch-go{flex:none;width:52px;height:52px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:50%;background:none;color:#fff;cursor:pointer}
.srch-results,.srch-out{margin-top:40px}
.srch-h{margin:0 0 8px;font:800 22px 'Manrope',sans-serif;color:#fff}
.srch-rows{list-style:none;margin:0;padding:0;border-top:1px solid rgba(255,255,255,.18)}
.srch-rows li[hidden]{display:none}
.srch-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 4px;border-bottom:1px solid rgba(255,255,255,.18);color:#fff;text-decoration:none}
.srch-row:hover .srch-row-t{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:2px}
.srch-row:hover .srch-arrow{transform:translateX(4px)}
.srch-row:focus-visible{outline-offset:-3px}
.srch-row-main{display:flex;flex-direction:column;gap:4px;min-width:0}
.srch-row-t{font-weight:800;font-size:18px;line-height:1.35;color:#fff}
.srch-row-d{font-size:15px;line-height:1.5;color:rgba(255,255,255,.78)}
.srch-row-l{font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.6)}
.srch-arrow{flex:none;color:#fff;transition:transform .2s}
.srch-group{margin:0 0 36px}
.srch-gh{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin:0 0 10px}
.srch-gh-t{margin:0;font:800 22px 'Manrope',sans-serif;color:#fff}
.srch-count{flex:none;font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.72)}
.srch-more,.srch-all{margin:12px 0 0;text-align:right}
.srch-see,.srch-all a{border:0;background:none;padding:6px 0;font:800 12px 'Manrope',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:#fff;text-decoration:underline;text-underline-offset:4px;cursor:pointer}
.srch-pc{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin:0 0 32px;padding:18px 0;border-top:1px solid rgba(255,255,255,.18);border-bottom:1px solid rgba(255,255,255,.18)}
.srch-pc p{margin:0;flex:1 1 280px;font-size:17px;line-height:1.5;color:#fff}
.srch-none,.srch-wait{margin:0;font-size:17px;line-height:1.6;color:#fff}
.srch-none a{color:#fff;font-weight:800;text-decoration:underline;text-underline-offset:3px}
/* The results page: the same navy, between the site header and footer */
.srch-page{background:var(--ink);color:#fff;padding:64px 0 88px;min-height:60vh}
.srch-title{margin:0}
@media (max-width:820px){.srch-close{right:20px;top:16px;width:48px;height:48px}.srch-inner{padding-top:84px}}
@media (max-width:640px){
  .srch-pill{padding-left:20px}
  .srch-pill input{font-size:17px;padding:15px 0}
  .srch-row{padding:16px 2px}
  .srch-row-t{font-size:17px}
  .srch-gh-t,.srch-h{font-size:19px}
  .srch-page{padding:40px 0 64px}
}

/* ── About Us, reviews, team, offers, News and review mode (27 October 2026) ── */
.closing{text-align:left}
.closing-line{margin:0 0 32px;font-size:clamp(56px,9vw,128px);line-height:.9;text-transform:uppercase;color:var(--ink)}
.closing .area-check{max-width:560px}
.closing-btns{margin-top:28px}
.cleaner-points b{font-weight:800}
/* What customers say */
.rev-grid{display:grid;gap:24px}
.rev-google{background:#fff;border-top:6px solid var(--ink);padding:28px}
.rev-big{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px;margin-bottom:12px}
.rev-score{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:72px;line-height:.9;color:var(--ink)}
.rev-stars{color:var(--ink);letter-spacing:2px;font-size:22px}
.rev-count{font-weight:700;color:var(--mute)}
.rev-list{list-style:none;margin:0;padding:0;display:grid;gap:16px}
.rev-item{border-top:1px solid var(--line);padding-top:16px}
.rev-item p{margin:0 0 6px;line-height:1.6}
.rev-who b{margin-right:8px}
.rev-who .rev-stars{font-size:15px}
.rev-when{color:var(--mute);font-size:13px;margin-left:6px}
.rev-attr{margin:16px 0 0;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.rev-more{margin:12px 0 0}
.rev-line{margin:0;font-size:18px;font-weight:700}
/* Footer review lines: one line on desktop, stacked on phones */
.ftr-reviews{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:4px 18px;font-size:13px}
.ftr-reviews a{color:#fff;text-decoration:none}
.ftr-reviews a:hover{text-decoration:underline}
@media (max-width:640px){.ftr-reviews{flex-direction:column}}
/* Meet the team */
.team-group + .team-group{margin-top:40px}
.team-group h3{font-size:32px;margin:0}
.team-what{margin:4px 0 16px;color:var(--mute)}
.team-card{align-items:flex-start}
.team-card h4{font-size:30px;margin:0}
.team-photo{width:96px;height:96px;border-radius:50%;object-fit:cover}
.team-initial{display:inline-flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:50%;background:var(--ink);color:#fff;font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:36px}
.award-logo{max-height:60px;width:auto}
/* Offers (Prices "Ways to save") */
.offers{margin-top:20px}
.offer b{font-weight:800}
/* Careers and News */
.careers-none{font-weight:600}
.news-meta{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.news-post .bk-actions{margin-top:32px}
/* Review mode only (never in a live build): what's hidden at launch, and why */
.rv-banner{position:sticky;top:0;z-index:400;background:#B42318;color:#fff;text-align:center;font-size:13px;font-weight:800;letter-spacing:.08em;padding:6px 12px}
.rv-hidden{outline:2px dashed #C2410C;outline-offset:4px}
button.rv-hidden{min-height:24px}   /* review only: the hidden Cookie settings button stays a 24px target (14 November 2026) */
.rv-label{display:inline-block;margin:0 0 10px;padding:3px 8px;background:#C2410C;color:#fff;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:none;line-height:1.4}
span.rv-label{margin:0 6px 0 0}
p > span.rv-label:first-child{display:table;margin:0 0 10px}

/* ── Booking date picker: day tiles (27 October 2026) ── */
.dp{margin-top:8px;max-width:640px}
.dp-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.dp-month{margin:0;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);text-align:center;flex:1}
.dp-arrow{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:2px solid var(--line);background:#fff;color:var(--ink);cursor:pointer}
.dp-arrow:hover:not(:disabled){border-color:var(--ink)}
.dp-arrow:disabled{opacity:.35;cursor:default}
.dp-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.dp-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:64px;padding:8px 2px;border:2px solid var(--line);background:#fff;color:var(--ink);font:inherit;cursor:pointer}
.dp-day:hover:not(:disabled){border-color:var(--ink)}
.dp-day[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:#fff}
.dp-day:disabled{background:#F1F3F7;color:#9AA3B2;cursor:not-allowed;text-decoration:line-through}
.dp-wd{font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.dp-dn{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:24px;line-height:1}
.dp-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#C2410C}
.dp-day .dp-dot{position:absolute;top:6px;right:6px}
.dp-day[aria-pressed="true"] .dp-dot{background:#fff}
.dp-legend{margin-top:10px}

/* ── Homepage In Focus panel (27 October 2026): one fixed size, all slides in one grid cell ── */
.focus{position:relative;display:flex;flex-direction:column;min-width:0}
.focus-slides{display:grid;flex:1}
.focus-slide{grid-area:1/1;display:flex;flex-direction:column;visibility:hidden;opacity:0;transition:opacity .9s ease,visibility 0s linear .9s}
.focus-slide.is-on,.focus-slide:only-child{visibility:visible;opacity:1;transition:opacity .9s ease,visibility 0s}
.focus-slides:not(:has(.is-on)) .focus-slide:first-child{visibility:visible;opacity:1}
.focus-slide > .feat,.focus-slide > .rv-hidden{flex:1}
@media (prefers-reduced-motion:reduce){.focus-slide,.focus-slide.is-on{transition:none}}
/* Controls and the headline bar under the box (31 October 2026): one tab per item, the active one underlined
   with a thin line that fills until the next change; one line that scrolls sideways on phones */
.focus-ctrls{display:flex;align-items:stretch;gap:8px;margin-top:12px}
.focus-ctrls[hidden]{display:none}
.focus-arrow,.focus-pause{flex:none;display:inline-flex;align-items:center;justify-content:center;width:40px;min-height:44px;border:2px solid var(--line);background:#fff;color:var(--ink);cursor:pointer}
.focus-arrow:hover,.focus-pause:hover{border-color:var(--ink)}
.focus-tabs{flex:1;min-width:0;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.focus-tabs::-webkit-scrollbar{display:none}
.focus-tab{position:relative;flex:1 1 0;min-width:96px;max-width:260px;min-height:44px;display:flex;flex-direction:column;gap:2px;padding:6px 10px 8px;border:0;border-bottom:2px solid var(--line);background:none;color:var(--mute);font:inherit;font-size:13px;font-weight:600;line-height:1.3;text-align:left;cursor:pointer}
.focus-tab-label,.focus-tab-title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.focus-tab-sep{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.focus-tab:hover{color:var(--ink)}
.focus-tab[aria-current="true"]{color:var(--ink)}
.focus-tab-label{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.focus-tab-fill{position:absolute;left:0;bottom:-2px;height:3px;width:0;background:var(--ink)}
.focus-tab[aria-current="true"] .focus-tab-fill{width:100%}
.focus-tab.is-running .focus-tab-fill{animation:focus-run 7s linear forwards}
@media (prefers-reduced-motion:reduce){.focus-tab.is-running .focus-tab-fill{animation:none}}
@media (max-width:640px){.focus-tab{flex:0 0 85%;min-width:0;max-width:none}}
.focus-pause-icon{display:inline-block;width:10px;height:12px;border-left:3px solid currentColor;border-right:3px solid currentColor}
.focus-pause.is-paused .focus-pause-icon{width:0;height:0;border-style:solid;border-width:6px 0 6px 10px;border-color:transparent transparent transparent currentColor}
@keyframes focus-run{from{width:0}to{width:100%}}
.side-detail{margin:6px 0 0;font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--mute)}
.offer-tag{display:inline-block;margin-top:8px;background:var(--ink);color:#fff}
.founding-note{margin:16px 0 0;font-size:14px;line-height:1.5;color:var(--mute)}   /* 16 November 2026: what "Founding price" means */
.founding-note[hidden]{display:none}
.offer-tag[hidden]{display:none}   /* outside its dates (site.js), e.g. "Founding price" after 31 March 2027 */
/* About Us team band and /about/team/ */
.team-band-in{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;border-top:6px solid var(--ink);padding-top:28px}
.team-band-in h2{margin:0 0 8px;font-size:clamp(32px,4vw,52px)}
.team-band-in p{margin:0;color:var(--mute);max-width:560px}
.team-leads .team-photo,.team-lead .team-initial{width:160px;height:160px;font-size:64px}
.team-small{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:1024px){.team-small{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.team-small{grid-template-columns:1fr}}
.team-group-photo{width:100%;aspect-ratio:16/9}
/* News: featured card, grid 3 / 2 / 1, filters, badges */
.news-filters{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 24px}
.news-filter{min-height:44px;padding:0 16px;border:2px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.news-filter[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:#fff}
.news-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.news-card{display:flex;flex-direction:column;background:#fff;color:var(--ink);text-decoration:none}
.news-card[hidden]{display:none}
.news-card.news-text,.news-card.news-text.news-featured{display:flex;flex-direction:column}   /* 15 November 2026: text-only cards */
.news-text .news-body{padding:24px 24px 26px;border-top:4px solid var(--ink)}
.news-card.news-text:not(.news-featured) .news-sum{display:block}
.news-card.news-featured{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}
.news-pic .ph,.news-pic img{width:100%;aspect-ratio:16/9;object-fit:cover;display:block}
.news-body{padding:18px 20px 22px;display:flex;flex-direction:column;gap:8px}
.news-featured .news-body{justify-content:center;padding:28px}
.news-title{margin:0;font-size:20px;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.news-featured .news-title{font-size:30px}
.news-sum{margin:0;color:var(--mute);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.news-card:hover .news-title{text-decoration:underline}
.news-more-wrap{margin-top:28px;text-align:center}
.news-more[hidden]{display:none}
.news-empty{color:var(--mute)}
@media (max-width:1024px){.news-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.news-grid{grid-template-columns:1fr}.news-card.news-featured{display:flex}}
.badges{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 24px}
.badge{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:6px;padding:10px 14px;border:2px solid var(--ink);color:var(--ink);text-decoration:none;font-weight:700}
.badge b{font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.badge span{color:var(--mute);font-weight:600;font-size:13px}
.hero-award a{color:inherit}
.choice-save{font-weight:800;color:var(--ink)}
/* Extras' prices on the booking form (10 November 2026): the saving at the moment of choice, the old price struck through */
.xp{font-style:normal}
.xp s,[data-win-price] s{opacity:.7;margin-right:4px}
.xprice .xp-how{display:block;font-family:inherit;font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--mute)}
.chip .xp-how{font-size:inherit}
/* Word breaks (27 October 2026): a large heading never ends on one word alone. The "Let the space / speak."
   call to action keeps its designed two-colour break. Checked by tools/linebreaks.py. */
h1,h2,h3,.disp{text-wrap:balance}
.cta h2{text-wrap:wrap}
/* Review mode only: a post's "Hidden at launch" label sits over the card's corner, so it doesn't take a grid cell */
.news-card.rv-hidden{position:relative}
.news-card > .rv-label{position:absolute;top:8px;left:8px;z-index:2;margin:0;max-width:calc(100% - 16px)}
.who > .rv-label{grid-column:1/-1;justify-self:start;margin:0}
/* Review lines (27 October 2026): no symbols; the Google line's "as of" note, smaller and lighter but readable
   (6.1:1 on the footer navy, 6.3:1 or more in the light About Us band) */
.rev-asof{font-size:11px;font-weight:600;letter-spacing:.02em;color:var(--mute);white-space:nowrap}
.ftr .rev-asof{color:#8C9AB2}
.ftr-social-hold{display:contents}
.ftr-social-hold[hidden]{display:none}
/* Footer brand marks (31 October 2026): official white marks, unchanged, no boxes, the same size, evenly spaced.
   Hover and focus show only a line under the icon: the marks are never faded or recoloured (Facebook: no effects;
   LinkedIn: no colour changes). Clear space: at least 1/4 of the logo's width (Facebook) between marks. */
.ftr-social{gap:20px;align-items:center}
.ftr .ftr-social-link{width:auto;height:44px;padding:0 6px;border:0;border-bottom:2px solid transparent;background:none;transition:border-color .2s}
.ftr .ftr-social-link:hover,.ftr .ftr-social-link:focus-visible{background:none;border-bottom-color:#fff}
.ftr-social-mark{display:block;height:30px;width:auto}
/* Nextdoor without its official mark (9 November 2026): a GASI-style badge, the same height and colour as the marks, no logo */
/* Nextdoor's official house mark (9 November 2026): the file has wide transparent margins, so it's shown through a 38×30px
   window (the house itself 30px tall, like the other marks) and drawn white by CSS; the file is never changed */
.ftr-social-nd{display:block;position:relative;width:38px;height:30px;overflow:hidden}
.ftr-social-nd img{position:absolute;left:-12px;top:-16px;width:62px;height:62px;max-width:none;filter:brightness(0) invert(1)}
/* Nextdoor allows the logo but not white on navy (10 November 2026, nextdoorPermissionConfirmed "colour"): their green icon,
   unchanged, on a small white circle the same size as the other marks (30px), the house 19px tall (Nextdoor's minimum) */
.ftr-social-nd.ftr-social-nd-colour{width:30px;height:30px;border-radius:50%;background:#fff}
.ftr-social-nd.ftr-social-nd-colour img{left:-5px;top:-5px;width:40px;height:40px;filter:none}
.ftr-social-badge{display:inline-flex;align-items:center;height:30px;padding:0 9px;border:2px solid #fff;border-radius:6px;color:#fff;font-size:12px;font-weight:800;letter-spacing:.04em;line-height:1}
/* News cards (31 October 2026): one large card per tab, compact (picture and text side by side, the picture
   about half its old height); every other post a small card with category, date, reading time and a 2-line title */
.news-card.news-featured{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch}
.news-featured .news-pic .ph,.news-featured .news-pic img{aspect-ratio:auto;height:100%;min-height:200px;max-height:300px}
.news-featured .news-body{padding:24px 28px}
.news-card:not(.news-featured) .news-sum{display:none}
.news-card:not(.news-featured) .news-pic .ph,.news-card:not(.news-featured) .news-pic img{aspect-ratio:16/9}
.news-read{white-space:nowrap}
@media (max-width:640px){.news-card.news-featured{display:flex}.news-featured .news-pic .ph,.news-featured .news-pic img{height:auto;min-height:0;aspect-ratio:2/1}}
/* Team page (rebuilt 2 November 2026): summary tiles, filters, one grid of equal cards (3 · 2 · 1), a profile dialog */
.team-stats{list-style:none;margin:0 0 40px;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));border-top:6px solid var(--ink);border-bottom:1px solid var(--line)}
.team-stats li{display:flex;flex-direction:column;gap:4px;padding:22px 24px 22px 0}
.team-stats li + li{padding-left:24px;border-left:1px solid var(--line)}
.team-stats b{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:56px;line-height:.95;color:var(--ink)}
.team-stats span{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.team-filters{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 36px}
.team-filter{min-height:44px;padding:0 18px;border:2px solid var(--ink);background:#fff;color:var(--ink);font:inherit;font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.team-filter[aria-pressed="true"]{background:var(--ink);color:#fff}
.team-filter:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.team-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px 32px}
.tcard{display:flex;flex-direction:column;min-width:0}
.tcard[hidden]{display:none}
.tcard .rv-label{align-self:flex-start;margin:0 0 8px}
.tcard-btn{flex:1;display:flex;flex-direction:column;width:100%;padding:0;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:border-color .2s,transform .2s}
.tcard-btn:hover{border-color:var(--ink)}
.tcard-btn:focus-visible{outline:3px solid var(--ink);outline-offset:4px}
.tcard-pic{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:3/2;background:var(--ink);overflow:hidden}
.tcard-pic img{width:100%;height:100%;object-fit:cover}
.tcard-initial{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:96px;line-height:1;color:#fff}
.tcard-body{flex:1;display:flex;flex-direction:column;gap:8px;padding:24px 26px 26px;min-height:190px}
.tcard-name{font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:30px;line-height:1.02;text-transform:uppercase}
.tcard-role{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--mute)}
.tcard-since{font-size:14px;color:var(--mute)}
.tcard-open{margin-top:auto;padding-top:14px;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.tcard-open span{display:inline-block;transition:transform .2s}
.tcard-btn:hover .tcard-open span{transform:translateX(4px)}
.team-more-wrap{margin:40px 0 0;text-align:center}
.team-more-wrap[hidden],.team-empty[hidden]{display:none}
.team-line{margin:48px 0 0;padding-top:24px;border-top:1px solid var(--line);font-size:18px;font-weight:600;max-width:820px}
.team-cotm{display:flex;align-items:center;gap:18px;margin-top:28px;padding:20px;border:2px solid var(--ink);color:var(--ink);text-decoration:none;max-width:520px}
.team-cotm .eyebrow{display:block;margin-bottom:4px}
.team-dialog{width:min(760px,calc(100vw - 32px));max-height:calc(100vh - 32px);padding:0;border:0;border-top:6px solid var(--ink);color:var(--ink);background:#fff}
.team-dialog::backdrop{background:rgba(11,26,51,.6)}
.team-dialog-in{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr)}
.team-dialog-pic .tcard-pic{height:100%;aspect-ratio:auto;min-height:260px}
.team-dialog-text{padding:36px 36px 32px}
.team-dialog h2{margin:6px 0 10px;font-size:40px;line-height:1}
.team-dialog p{margin:0 0 12px;line-height:1.6}
.team-dialog p[hidden]{display:none}
.team-dialog-role{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--mute)}
.team-dialog-since{color:var(--mute)}
.team-dialog-areas{font-weight:700}
.team-dialog-close{position:absolute;top:12px;right:12px;display:flex;align-items:center;justify-content:center;width:44px;height:44px;border:2px solid var(--ink);background:#fff;color:var(--ink);cursor:pointer}
.team-dialog-close:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
@media (max-width:1024px){.team-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 24px}}
@media (max-width:640px){.team-grid{grid-template-columns:1fr;gap:24px}.team-stats b{font-size:44px}.team-stats li{padding:16px 16px 16px 0}.team-stats li + li{padding-left:16px}
  .tcard-body{min-height:0}.team-dialog-in{grid-template-columns:1fr}.team-dialog-pic .tcard-pic{min-height:0;aspect-ratio:16/9}.team-dialog-text{padding:24px}.team-dialog h2{font-size:32px}}
/* Specialist & Add-ons service pages (31 October 2026, tools/specialist.py): quick facts strip, related links,
   and on phones a Book bar fixed at the bottom of the screen */
.svc-facts-sec{padding-top:32px;padding-bottom:32px}
.svc-facts{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:2px solid var(--ink)}
.svc-facts li{display:flex;flex-direction:column;gap:6px;padding:18px 20px 4px 0}
.svc-facts li + li{padding-left:20px;border-left:1px solid var(--line)}
.fact-k{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.fact-v{font-size:16px;font-weight:600;line-height:1.45}
.svc-prices-text{max-width:760px}
.svc-related{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.svc-related a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:64px;padding:16px 20px;border:2px solid var(--ink);color:var(--ink);text-decoration:none;font-weight:800;letter-spacing:.06em;text-transform:uppercase;font-size:14px}
.svc-related a:hover{background:var(--ink);color:#fff}
.svc-bar{display:none}
@media (max-width:1024px){.svc-facts{grid-template-columns:repeat(2,minmax(0,1fr))}.svc-facts li:nth-child(3){padding-left:0;border-left:0}}
@media (max-width:640px){
  .svc-facts{grid-template-columns:1fr}.svc-facts li,.svc-facts li + li{padding:14px 0;border-left:0;border-bottom:1px solid var(--line)}
  .svc-related{grid-template-columns:1fr}
  .svc-bar{position:fixed;left:0;right:0;bottom:0;z-index:50;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;background:var(--ink);color:#fff;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
  .svc-bar strong{font-family:'Big Shoulders Display',sans-serif;font-size:24px;letter-spacing:.01em}
  .svc-bar .btn{min-height:44px}
  body:has(.svc-bar) .ftr{padding-bottom:72px}
}
/* Reviews page and GASI's own reviews (31 October 2026) */
.rev-band-line{font-size:18px;font-weight:600;color:var(--ink)}
.gasi-rev{background:#fff;border-top:6px solid var(--ink);padding:28px}
.gr-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:32px;align-items:center;margin-bottom:20px}
.gr-score{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px}
.gr-count{font-weight:700;color:var(--mute)}
.gr-cats{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.gr-cats li{display:grid;grid-template-columns:130px minmax(0,1fr) 36px;align-items:center;gap:12px;font-size:14px}
.gr-cat{font-weight:800;letter-spacing:.08em;text-transform:uppercase;font-size:12px}
.gr-bar{height:8px;background:var(--line)}
.gr-bar span{display:block;height:100%;background:var(--ink)}
.gr-verified{display:inline-block;margin-left:6px;padding:1px 8px;background:var(--pale);color:var(--ink);font-size:12px;font-weight:800;letter-spacing:.04em}
.gr-meta{font-size:13px;color:var(--mute)}
.gr-reply{margin:10px 0 0;padding:12px 14px;background:var(--pale);border-left:4px solid var(--ink)}
.gr-reply p{margin:4px 0 0}
.rev-note{margin:16px 0 0;color:var(--mute);font-weight:600}
[data-gasi-reviews][hidden]{display:none}
@media (max-width:760px){.gr-top{grid-template-columns:1fr;gap:20px}.gr-cats li{grid-template-columns:110px minmax(0,1fr) 32px}}
/* The review form (/review/) */
.review-wrap{max-width:720px}
.review-form{display:grid;gap:24px}
.review-form[hidden],.review-msg[hidden]{display:none}
.review-msg{font-size:18px;font-weight:600}
.review-for{margin:-12px 0 0;color:var(--mute)}
.gr-fs .chips .chip span{min-width:52px;align-items:center}
/* Star ratings (2 November 2026): five square stars per question; the chosen star and the ones before it are navy */
.stars{display:flex;gap:8px}
.star{position:relative;cursor:pointer}
.star input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.star span[aria-hidden]{display:flex;align-items:center;justify-content:center;width:52px;height:52px;background:#fff;border:2px solid var(--line);font-size:26px;line-height:1;color:var(--line);transition:background .2s,color .2s,border-color .2s}
.star.lit span[aria-hidden]{background:var(--ink);border-color:var(--ink);color:#fff}
.star input:focus-visible + span{outline:3px solid var(--ink);outline-offset:3px}
@media (hover:hover){.star:hover span[aria-hidden]{border-color:var(--ink);color:var(--ink)}.star.lit:hover span[aria-hidden]{color:#fff}}
.review-small{margin:0;font-size:14px;color:var(--mute);line-height:1.6}
/* Touch targets (audit 1 November 2026, WCAG 2.5.8): the small text links in the top bar and the footer get an
   invisible 24px-tall tap area; the padding is cancelled by a negative margin, so nothing moves */
.util nav a,.ftr-bot nav a,.ftr-contact li > a,.cta-contact a{display:inline-block;padding:4px 0;margin:-4px 0}
.has-mega.mega-off .mega{opacity:0;visibility:hidden;transform:none}   /* Escape closes the Services menu (audit 1 November 2026) */
/* Pre-launch banner (1 November 2026, siteMode "prelaunch"): one slim line above the header */
.pre-banner{background:var(--pale);color:var(--ink);text-align:center;font-size:13px;font-weight:700;letter-spacing:.02em;padding:8px 16px;border-bottom:1px solid var(--line)}
.pre-banner a{color:var(--ink);text-decoration:underline;text-underline-offset:3px;display:inline-block;padding:4px 0;margin:-4px 0}

/* /checklists/ (2 November 2026): one checklist per service, printable on its own */
.cl-intro{display:grid;gap:16px;margin:0 0 56px;max-width:900px}
.cl-lede{margin:0;font-size:18px;line-height:1.6;color:var(--ink)}
.cl-lede a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.cl-updated{margin:0;font-size:13px;font-weight:700;letter-spacing:.06em;color:var(--mute)}
.cl-nav{display:flex;flex-wrap:wrap;gap:8px}
.cl{border-top:6px solid var(--ink);padding:32px 0 56px;scroll-margin-top:100px}
.cl-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin:0 0 28px}
.cl-head h2{margin:6px 0 0;font-size:clamp(32px,4vw,48px)}
.cl-kicker{font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)}
.cl-typical{margin:10px 0 0;font-weight:700;color:var(--ink)}
.cl-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px}
.cl-actions .btn svg{vertical-align:-3px;margin-right:6px}
.cl-more{display:inline-block;padding:4px 0;color:var(--ink);font-weight:700;text-decoration:underline;text-underline-offset:3px}
.cl-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:24px}
.cl-side{display:grid;gap:24px;align-content:start}
.cl-block{background:#fff;padding:28px;border:1px solid var(--line)}
.cl-h{margin:0 0 16px;font-size:13px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink)}
.cl-room{margin:20px 0 8px;font-size:16px;font-weight:800;color:var(--ink)}
.cl-room:first-of-type{margin-top:0}
.cl-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.cl-list li{position:relative;padding-left:30px;font-size:15px;line-height:1.55;color:var(--ink)}
.cl-list li::before{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;border:2px solid var(--ink)}
.cl-note,.cl-never{margin:16px 0 0;font-size:14px;line-height:1.6;color:var(--mute)}
.cl-print-foot{display:none}
.cl-link{margin:28px 0 0}
@media (max-width:900px){.cl-grid{grid-template-columns:1fr}.cl-block{padding:22px}}
@media print{
  @page{size:A4;margin:14mm}
  html,body,.gasi,.sec,.cl-block{background:#fff!important;color:#000!important}
  .skip,.util,.pre-banner,.hdr,.mmenu,.ftr,.hero,.promise-band,.cta,.svc-bar,.cl-intro,.cl-actions,.crumbs,.rv-banner{display:none!important}
  .sec{padding:0!important}
  .wrap{max-width:none;padding:0}
  .cl{border-top:3px solid #000;padding:12px 0 0;break-before:page}
  .cl:first-of-type{break-before:auto}
  html.print-one .cl:not(.cl-printing){display:none!important}
  html.print-one .cl-printing{break-before:auto}
  .cl-head{margin:0 0 10px}
  .cl-head h2{font-size:22pt;color:#000}
  .cl-grid{display:block;column-count:2;column-gap:12px}
  .cl-side{display:block}
  .cl-block{border:1px solid #000;padding:7px 10px;margin:0 0 7px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
  .cl-room,.cl-h{break-after:avoid}
  .cl-list li{break-inside:avoid}
  .cl-h,.cl-room,.cl-list li,.cl-kicker,.cl-typical,.cl-note,.cl-never{color:#000!important}
  .cl-list{gap:2px}
  .cl-list li{font-size:9pt;line-height:1.22;padding-left:18px}
  .cl-list li::before{width:10px;height:10px;top:2px;border:1.5px solid #000}
  .cl-room{margin:8px 0 3px;font-size:10pt}
  .cl-h{font-size:9pt;margin:0 0 8px}
  .cl-note,.cl-never{font-size:8pt;margin-top:6px}
  .cl-print-foot{display:block;margin:12px 0 0;padding-top:6px;border-top:1px solid #000;font-size:8.5pt;color:#000}
}

/* Booking (2 November 2026): one-tap extras, and what's included under the price */
.xquick{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 20px}
.xquick-btn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-height:56px;padding:10px 16px;border:2px solid var(--line);background:#fff;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.xquick-btn b{font-size:14px}
.xquick-btn span{font-size:13px;color:var(--mute)}
.xquick-btn[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:#fff}
.xquick-btn[aria-pressed="true"] span{color:var(--soft)}
.xquick-btn:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.sum-inc{margin:16px 0 0;border-top:1px solid var(--line);padding-top:12px}
.sum-inc[hidden]{display:none}
.sum-inc summary{cursor:pointer;font-weight:800;font-size:14px;color:var(--ink)}
.sum-inc-list{margin:10px 0 0;padding-left:18px;font-size:13px;line-height:1.5;color:var(--ink)}
.sum-inc-list li{margin:0 0 4px}
.sum-inc-h{margin:12px 0 0;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--mute)}
.sum-inc-more{margin:10px 0 0;font-size:13px}
.sum-inc-more a{color:var(--ink);text-decoration:underline}

/* "We message you when we’re on the way" under each included list (2 November 2026) */
.inc-note{margin:16px 0 0;font-weight:700;color:var(--ink)}

/* Cookies page (3 November 2026): one block per cookie or storage item */
.legal .legal-kind{font-weight:600;color:var(--mute)}
.legal ul.cookie-item{list-style:none;padding-left:0;margin:0 0 18px}
.legal ul.cookie-item li{margin:0 0 2px}

/* 200% text and 320px screens (10 November 2026, WCAG reflow): no sideways scrolling; long phrases and price rows may wrap.
   Kept last so it wins over the no-wrap rules above. */
.pcards > *,.focus-slides > *{min-width:0}
@media (max-width:420px){.nowrap,a.nowrap,.who-rates .nw,.ftr-contact .nowrap{white-space:normal}.prow li{flex-wrap:wrap;gap:4px 12px}.prow b{white-space:normal;text-align:right;margin-left:auto}}
