/*
Theme Name: Legacy Pressure Cleaning
Template: twentytwentyfive
Description: Generated from tokens.json by build_gutenberg.py. Edit the tokens file, not this theme.
Version: 1.0.1
*/

/* ==========================================================================
   Legacy Pressure Cleaning — residential
   Derived 19 Sep 2026 from the shared Legacy stylesheet (same class names, so the
   page dialect is shared), recoloured and retyped to the residential kit in
   01-brand/tokens/tokens.json: navy #12294A, aqua #18C2D4 (never text on
   white), blue ink #1F6FAD for small coloured text, Plus Jakarta Sans.
   No photography yet: every image slot is a navy/blue gradient until AJ's
   photos land in assets/a/.
   ========================================================================== */

:root{
  --ink:#12294A; --body:#44505F; --muted:#5B6573;
  --accent:#18C2D4; --accent-light:#E3F7FA; --accent-bright:#4FD3E1;
  --accent-ink:#1F6FAD; --blue:#2E86C8;
  --amber:#1F6FAD; --amber-bg:#E3F7FA;
  --green:#1E8E5A; --green-bg:#E9F6EF;
  --border:#DCE3EB; --line:#DCE3EB; --card:#F2F6FA;
}

*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth;}
body{
  margin:0; background:#fff; color:var(--body);
  font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif;
  font-size:17px; line-height:1.6;
}

/* core block wrappers carry no styling of their own here — the design does it */
.wp-block-group{margin:0;}
.wp-block-buttons{display:flex; gap:12px; flex-wrap:wrap; margin:0;}
.wp-block-button{margin:0;}
.wp-site-blocks > *{margin-block-start:0;}
.entry-content > *{margin-block-start:0;}

.wrap{max-width:1080px; margin:0 auto; padding:0 24px;}
h1,h2,h3{color:var(--ink); letter-spacing:-.015em;}
p{margin:0 0 14px;}
.section{padding:64px 0; border-top:1px solid var(--border); scroll-margin-top:78px;}
.lede{font-size:18.5px; color:var(--ink); max-width:66ch;}

/* ---------- type system ---------- */
h1,h2,h3,.kicker,nav a,.btn .wp-block-button__link,.btn-ghost .wp-block-button__link,
.wordmark .wm-1,.wordmark .wm-2,.fact .fv,.area,.step .sn,.cred-card .tagline,
.band-inner p,label{
  font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif;
}
.kicker,.step .sn,.cred-card .tagline{text-transform:uppercase;}
h1{font-size:52px; line-height:1.06; letter-spacing:-.025em; font-weight:800; margin:0 0 18px;}
h2{font-size:34px; line-height:1.12; letter-spacing:-.02em; font-weight:800; margin:0 0 14px;}
h3{font-size:19px; letter-spacing:-.01em; font-weight:700; margin:0 0 6px;}
.kicker{font-size:12.5px; letter-spacing:.16em; font-weight:800; color:var(--accent-ink); margin-bottom:10px;}

/* ---------- buttons ---------- */
.wp-block-button .wp-block-button__link{
  display:inline-block; background:var(--accent); color:#12294A; border:none;
  font-size:15.5px; letter-spacing:0; font-weight:800;
  padding:11px 20px; border-radius:8px; text-decoration:none; white-space:nowrap;
}
.wp-block-button .wp-block-button__link:hover{background:#4FD3E1; color:#12294A;}
.wp-block-button.btn-ghost .wp-block-button__link{
  background:none; color:var(--ink); border:1px solid var(--border);
}
.wp-block-button.btn-ghost .wp-block-button__link:hover{
  background:none; border-color:var(--accent-ink); color:var(--accent-ink);
}
.wp-block-button.btn-sm .wp-block-button__link{
  font-size:13.5px; padding:10px 15px; border-radius:6px; letter-spacing:.05em;
}

/* ---------- header (template part) ---------- */
.site-header{position:sticky; top:0; z-index:20; background:rgba(255,255,255,.94);
  -webkit-backdrop-filter:saturate(160%) blur(8px); backdrop-filter:saturate(160%) blur(8px);
  border-bottom:1px solid var(--border);}
.site-header .wrap{max-width:1240px;}
.hrow{display:flex; align-items:center; justify-content:space-between; gap:26px; padding:14px 0;}
.brand{display:block; line-height:0; flex-shrink:0;}
.brand img{height:46px; width:auto; display:block;}
.site-header nav{display:flex; gap:20px; align-items:center; flex:1; justify-content:flex-end;}
.site-header nav a{font-size:15px; letter-spacing:0; color:var(--body);
  text-decoration:none; font-weight:600; white-space:nowrap;}
.site-header nav a:hover{color:var(--accent-ink);}
.site-header .hbtn{display:inline-block; background:var(--accent); color:#12294A;
  font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif; 
  font-weight:800; font-size:14.5px; letter-spacing:0; padding:12px 18px;
  border-radius:8px; text-decoration:none; white-space:nowrap;}
.site-header .hbtn:hover{background:#4FD3E1;}

.navdrop{position:relative; display:flex; align-items:center;}
.navdrop-t{display:inline-flex; align-items:center; gap:5px; padding:14px 0;}
.navdrop-t .chev{transition:transform .16s ease; margin-top:1px;}
.navdrop-m{position:absolute; top:100%; left:-16px; min-width:278px; padding:8px;
  background:#fff; border:1px solid var(--border); border-radius:14px;
  box-shadow:0 18px 44px rgba(11,26,48,.16), 0 2px 6px rgba(11,26,48,.06);
  display:flex; flex-direction:column; gap:1px;
  opacity:0; visibility:hidden; transform:translateY(6px);
  transition:opacity .16s ease, transform .16s ease, visibility .16s; z-index:60;}
.navdrop:hover .navdrop-m,.navdrop:focus-within .navdrop-m{
  opacity:1; visibility:visible; transform:translateY(0);}
.navdrop:hover .chev{transform:rotate(180deg);}
.navdrop-m a{display:block; padding:10px 12px; border-radius:9px; font-size:14.5px;
  letter-spacing:.02em; text-transform:none; color:var(--ink); white-space:nowrap;}
.navdrop-m a:hover,.navdrop-m a:focus-visible{background:var(--accent-light); color:var(--ink);}
.navdrop-m .navdrop-all{margin-top:5px; padding-top:12px; border-top:1px solid var(--border);
  border-radius:0 0 9px 9px; font-size:13.5px; color:var(--muted); font-weight:700;
  text-transform:uppercase; letter-spacing:.07em;}
.navdrop-m .navdrop-all:hover{background:transparent; color:var(--accent-ink);}

/* accent rule under the header */
.stripe{height:4px; background:linear-gradient(90deg,var(--accent),var(--blue));}

/* ---------- hero ---------- */
.hero{position:relative; overflow:hidden; color:#D5DEE9;
  background:
    radial-gradient(1000px 420px at 78% -8%, rgba(24,194,212,.20), transparent 62%),
    linear-gradient(168deg,#12294A 0%,#1B3A66 52%,#0B1A30 100%);}
.hero::before{content:''; position:absolute; inset:0; opacity:.72;
  background-image:url('assets/a/hero.webp'); background-size:cover;
  background-position:center 78%; filter:none;}
.hero::after{content:''; position:absolute; inset:0;
  background:linear-gradient(100deg,rgba(11,26,48,.84) 0%,rgba(11,26,48,.52) 48%,rgba(11,26,48,.28) 100%);}
.hero > *{position:relative; z-index:2;}
.hero .wrap{padding-top:82px; padding-bottom:78px;}
.hero .kicker{color:#18C2D4;}
.hero h1{font-size:54px; color:#fff; max-width:22ch;}
.hero .hero-sub{font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif; text-transform:none;
  font-size:19px; font-weight:400; line-height:1.55; color:#C9D6E4; letter-spacing:0;
  max-width:62ch; margin:0 0 4px;}
.hero .wp-block-buttons{margin-top:28px;}
.hero .wp-block-button.btn-ghost .wp-block-button__link{color:#fff; border-color:rgba(255,255,255,.28);}
.hero .wp-block-button.btn-ghost .wp-block-button__link:hover{border-color:#18C2D4; color:#18C2D4;}

.cred-strip{display:flex; flex-wrap:wrap; gap:10px; margin-top:34px;}
.cred-strip p{margin:0; border:1px solid rgba(24,194,212,.38); background:rgba(11,26,48,.55);
  border-radius:999px; padding:8px 15px; font-size:13px; color:#DCEFF3; font-weight:600;}

/* ---------- facts strip ---------- */
/* 21 Sep 2026, Tim: the strip is a brand-colour band, with the three cards
   floating on it — a gap from the hero above, air below, and colour showing
   between and around the cards. It used to be one hairline-divided white box
   pulled 34px up into the hero. */
.facts{display:grid; grid-template-columns:repeat(3,1fr); gap:16px;
  background:var(--accent); border:none; border-radius:18px; padding:16px;
  position:relative; z-index:5; box-shadow:0 10px 34px rgba(11,26,48,.18);}
/* 21 Sep 2026: WordPress's flow layout zeroes the first child's top margin with
   `:root :where(.is-layout-flow) > :first-child` (0,2,0), which beat a bare `.facts`.
   Three classes here so the gap from the hero and the air below actually render. */
.wp-block-group.wrap > .facts{margin-top:28px; margin-bottom:34px;}
.fact{background:#fff; border-radius:11px; padding:22px 24px;}
.fact .fv{font-size:20px; font-weight:800; color:var(--ink); letter-spacing:.01em; margin:0;}
.fact .fl{font-size:13.5px; color:var(--muted); margin:3px 0 0;}

/* ---------- service cards ---------- */
.svc-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:22px; margin-top:30px;}
.svc{border:1px solid var(--border); border-radius:14px; background:var(--card);
  overflow:hidden; display:flex; flex-direction:column;}
.svc::before{content:''; display:block; height:240px; background-size:cover;
  background-position:center; background-color:#12294A;
  border-bottom:1px solid var(--border);}
.svc.p1::before{background-image:url('assets/a/drive.webp'),linear-gradient(140deg,#12294A,#2E86C8);}
.svc.p2::before{background-image:url('assets/a/seal.webp'),linear-gradient(140deg,#0B1A30,#1F6FAD);}
.svc.p3::before{background-image:linear-gradient(140deg,#12294A,#18C2D4);}
.svc.p4::before{background-image:linear-gradient(140deg,#1B3A66,#2E86C8);}
.svc-body{padding:24px 22px; flex:1; display:flex; flex-direction:column;}
.svc-body h3{margin-bottom:8px;}
.svc-body p{font-size:15px; margin:0 0 12px;}
.svc-body p:last-of-type{margin-bottom:0;}
.svc-body .env{font-size:13px; color:var(--muted); margin-top:auto; padding-top:12px;
  border-top:1px solid var(--border);}
.svc-cta{margin-top:18px; flex-wrap:nowrap;}

/* ---------- credentials ---------- */
.cred-grid{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin-top:28px;}
.cred-card{border:1px solid var(--border); border-radius:14px; padding:24px; background:#fff;}
.cred-card p{font-size:14.5px; margin:0 0 10px;}
.cred-card p:last-child{margin-bottom:0;}
.cred-card .tagline{display:inline-block; font-size:10.5px; font-weight:800; text-transform:uppercase;
  letter-spacing:.06em; background:var(--green-bg); color:var(--green); padding:3px 10px;
  border-radius:999px; margin:0 0 10px;}
.cred-card .code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:13px;
  color:var(--ink); background:var(--card); border:1px solid var(--border);
  border-radius:6px; padding:2px 7px;}

/* ---------- principles ---------- */
.prin-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:20px; margin-top:30px;}
.prin{border:1px solid var(--border); border-radius:14px; background:var(--card); padding:24px 22px;}
.prin::before{content:''; display:block; width:52px; height:52px; border-radius:12px;
  background:var(--accent-light) center/26px 26px no-repeat; margin-bottom:14px;}
.prin.i-compliance::before{background-image:url('assets/icons/compliance.svg');}
.prin.i-safety::before{background-image:url('assets/icons/safety.svg');}
.prin.i-plan::before{background-image:url('assets/icons/management-plan.svg');}
.prin.i-quality::before{background-image:url('assets/icons/quality.svg');}
.prin h3{margin:0 0 8px;}
.prin p{font-size:15px; margin:0;}

/* ---------- hazard band ---------- */
.hazard{background:var(--ink); color:#D5DEE9;}
.hazard h2{color:#fff;}
.hazard .kicker{color:#18C2D4;}
.hazard p{font-size:16px; color:#C0CCDA; max-width:74ch;}

/* ---------- building types (was the tabbed panel) ---------- */
.types{display:grid; grid-template-columns:repeat(3,1fr); gap:18px; margin-top:28px;}
.type{border:1px solid var(--border); border-radius:14px; background:var(--card); padding:22px;}
.type h3{font-size:16.5px;}
.type p{font-size:14.5px; margin:0; color:var(--muted);}
.where-photo{height:260px; border-radius:14px; margin-bottom:30px; border:1px solid var(--border);
  background-image:linear-gradient(140deg,#1B3A66,#2E86C8);
  background-size:cover; background-position:center;}

/* ---------- how a job runs ---------- */
.steps{display:grid; grid-template-columns:repeat(4,1fr); gap:18px; margin-top:28px;}
.step{border-top:3px solid var(--accent); padding-top:16px;}
.step .sn{font-size:13px; font-weight:800; letter-spacing:.14em; text-transform:uppercase;
  color:var(--accent-ink); margin:0 0 6px;}
.step p{font-size:14.5px; margin:0; color:var(--body);}

/* ---------- full-bleed quote band ---------- */
.band{position:relative; padding:0; border:none; min-height:300px; display:flex; align-items:center;
  background-image:linear-gradient(120deg,#0B1A30,#1B3A66);
  background-size:cover; background-position:center; background-attachment:fixed;}
.band::before{content:''; position:absolute; inset:0;
  background:linear-gradient(90deg,rgba(11,26,48,.88) 0%,rgba(11,26,48,.58) 55%,rgba(11,26,48,.34) 100%);}
.band .wrap{position:relative; z-index:2; width:100%;}
.band p{margin:0; color:#fff; font-size:32px; font-weight:800; letter-spacing:-.015em;
  max-width:16ch; line-height:1.04;
  font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif; text-transform:uppercase;}

/* ---------- audience ---------- */
.aud-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:18px; margin-top:28px;}
.aud{border:1px solid var(--border); border-radius:14px; padding:22px; background:var(--card);}
.aud h3{font-size:15.5px;}
.aud p{font-size:14.5px; margin:0; color:var(--muted);}

/* ---------- service areas ---------- */
.area-list{display:flex; flex-wrap:wrap; gap:10px; margin-top:24px;}
.area-list p{border:1px solid var(--border); background:#fff; border-radius:999px;
  padding:9px 18px; font-size:16.5px; color:var(--ink); font-weight:700;
  letter-spacing:.05em; margin:0;}

/* ---------- contact ---------- */
.contact{position:relative; background:var(--ink); border-top:none; overflow:hidden;}
.contact::before{content:''; position:absolute; inset:0; opacity:.5;
  background-image:none; background-size:cover; background-position:center 35%;}
.contact::after{content:''; position:absolute; inset:0;
  background:linear-gradient(100deg,rgba(11,26,48,.92) 0%,rgba(11,26,48,.72) 50%,rgba(11,26,48,.45) 100%);}
.contact > *{position:relative; z-index:2;}
.contact h2{color:#fff;}
.contact .lede{color:#DCE6F0;}
.contact .contact-sub{font-size:14.5px; color:#A9B6C6; margin-top:20px;}
.enq-slot{background:rgba(255,255,255,.05); border:1px dashed rgba(255,255,255,.22);
  border-radius:14px; padding:26px; margin-top:26px; max-width:640px;}
.enq-slot p{color:#C0CCDA; font-size:15px; margin:0;}

/* ---------- closing ---------- */
.closing{background:var(--ink); text-align:center; border:none;}
.closing h2{color:#fff;}
.closing p{color:#C0CCDA; font-size:17px; margin-bottom:26px;}
.closing .wp-block-buttons{justify-content:center;}

/* ---------- service sub-pages ---------- */
.hero.sub .wrap{padding-top:64px; padding-bottom:56px;}
.hero.sub h1{font-size:48px; max-width:20ch; margin-bottom:14px;}
.hero.sub .hero-sub{max-width:56ch;}
.hero.sub::before{opacity:.42;}
/* per-page hero photos. Client photos supplied 20 Sep 2026: driveways and concrete only.
   .p-epoxy and .p-gutter keep the gradient until AJ supplies those two services. */
.hero.p-drive::before{background-image:url('assets/a/drive-2.webp'); background-position:center 55%;}
.hero.p-seal::before{background-image:url('assets/a/path.webp'); background-position:center 55%;}
.crumb{display:inline-block; font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif; text-transform:uppercase;
  letter-spacing:.14em; font-size:13px; font-weight:700; color:var(--accent);
  text-decoration:none; margin:0 0 18px;}
.crumb a{color:inherit; text-decoration:none;}
.crumb a:hover{color:#4FD3E1;}
.proc{margin:30px 0 0;}
.proc .pstep{display:flex; gap:22px; padding:24px 0; border-top:1px solid var(--line);}
.proc .pstep:first-child{border-top:none;}
.proc .pn{flex-shrink:0; width:52px; font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif;
  font-weight:800; font-size:34px; line-height:1; color:var(--accent-ink); letter-spacing:.01em; margin:0;}
.proc .ptext h3{margin-bottom:6px;}
.proc .ptext p{margin:0; font-size:16px; max-width:74ch;}
.hazard .proc .pn{color:#4FD3E1;}

/* ---------- footer (template part) ---------- */
.site-footer{background:var(--ink); color:#B4C1D0; padding:48px 0 40px; font-size:14px;}
.foot-row{display:flex; justify-content:space-between; gap:32px; flex-wrap:wrap;}
.site-footer .brand img{height:42px;}
.foot-services{font-size:13.5px; line-height:1.7;}
.foot-note{font-size:12px; color:#8FA0B4; margin-top:32px; padding-top:22px;
  border-top:1px solid rgba(255,255,255,.09); line-height:1.6;}

/* ---------- responsive ---------- */
@media (max-width:1240px){
  .site-header nav{gap:13px;}
  .site-header nav a,.navdrop-t{font-size:13.5px;}
  .site-header .hbtn{font-size:13px; padding:11px 13px;}
}
@media (max-width:1040px){
  .site-header nav{gap:12px;}
  .site-header nav a,.navdrop-t{font-size:12.5px; letter-spacing:.03em;}
  .site-header .brand img{height:34px;}
  .site-header .hbtn{font-size:12.5px; padding:10px 12px;}
}
@media (max-width:980px){ .prin-grid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:920px){
  .site-header nav{display:none;}
  .site-header .brand img{height:31px;}
}
@media (max-width:860px){
  h1{font-size:36px;} .hero h1{font-size:36px;} .hero.sub h1{font-size:34px;}
  h2{font-size:27px;}
  .facts,.svc-grid,.aud-grid,.steps,.types{grid-template-columns:1fr;}
  .cred-grid{grid-template-columns:1fr; gap:26px;}
  .section{padding:48px 0;}
  .band{background-attachment:scroll; min-height:230px;}
  .band p{font-size:28px;}
  .where-photo{height:170px;}
  .svc::before{height:170px;}
  .hero .hero-sub{font-size:17px;}
  .proc .pstep{gap:14px;} .proc .pn{width:40px; font-size:26px;}
}
@media (max-width:620px){ .prin-grid{grid-template-columns:1fr;} }
@media (max-width:430px){
  .svc-cta{flex-wrap:wrap;}
  .wp-block-button .wp-block-button__link{white-space:normal; text-align:center;}
}

/* Added 9 Sep 2026 with the manifesto pass: the header phone number, and the
   contact block's phone/email line. AJ's details reached the site for the
   first time in this build, so these two rules did not exist before. */
.site-header .hphone{display:inline-block; font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif;
  font-weight:700; font-size:17px; letter-spacing:.05em; color:var(--accent-ink);
  text-decoration:none; white-space:nowrap; margin-right:16px;}
.site-header .hphone:hover{color:#12294A;}
.contact .contact-lines{font-family:'Plus Jakarta Sans',-apple-system,'Helvetica Neue',Arial,sans-serif; font-weight:700;
  font-size:clamp(22px,3.2vw,30px); letter-spacing:0; color:var(--accent);
  margin-top:26px; line-height:1.35;}
.contact .contact-lines strong{font-weight:700;}
.site-footer .foot-services a{color:var(--accent); text-decoration:none;}
.site-footer .foot-services a:hover{text-decoration:underline;}
@media (max-width:900px){ .site-header .hphone{display:none;} }

/* ==========================================================================
   21 Sep 2026, Tim: lighter hero scrim, so the photograph reads through it.
   The card-padding and three-across patches that sat here were deleted on
   21 Sep when the page source was fixed — the cards carry `.svc-body` in the
   markup now and the `.svc-body` rules above match on their own.
   ========================================================================== */

.hero::before{opacity:.88;}
.hero::after{background:linear-gradient(100deg,rgba(11,26,48,.72) 0%,rgba(11,26,48,.40) 46%,rgba(11,26,48,.16) 100%);}
.hero.sub::before{opacity:.80;}
.hero h1,.hero .hero-sub,.hero .kicker{text-shadow:0 1px 18px rgba(11,26,48,.55);}

/* No epoxy-floor or gutter photograph exists. Showing the generic driveway
   hero on those two pages is worse than showing none, so they go back to the
   gradient until AJ supplies the real thing. */
.hero.p-epoxy::before,.hero.p-gutter::before{background-image:none;}


/* 13 Oct 2026: seven service cards on the home page (roof, house washing and soft
   washing added). No photographs exist for these three, so they keep a gradient. */
.svc.p5::before{background-image:linear-gradient(140deg,#0B1A30,#2E86C8);}
.svc.p6::before{background-image:linear-gradient(140deg,#1B3A66,#18C2D4);}
.svc.p7::before{background-image:linear-gradient(140deg,#12294A,#1F6FAD);}

/* 13 Oct 2026: pages with no photograph yet. Never inherit the generic driveway hero. */
.hero.p-roof::before,.hero.p-house::before,.hero.p-soft::before,.hero.p-areas::before,.hero.p-robina::before{background-image:none;}

/* 13 Oct 2026, Tim: generic AI illustrations for services with no client photo yet.
   Illustrations only, never captioned or presented as LPC's work. Swap for real job photos. */
.hero.p-epoxy::before{background-image:url('assets/a/ai-epoxy.webp'); background-position:center 65%;}
.hero.p-gutter::before{background-image:url('assets/a/ai-gutter.webp'); background-position:center 40%;}
.hero.p-roof::before{background-image:url('assets/a/ai-roof.webp'); background-position:center 60%;}
.svc.p3::before{background-image:url('assets/a/ai-epoxy.webp'),linear-gradient(140deg,#12294A,#18C2D4);}
.svc.p4::before{background-image:url('assets/a/ai-gutter.webp'),linear-gradient(140deg,#1B3A66,#2E86C8);}
.svc.p5::before{background-image:url('assets/a/ai-roof.webp'),linear-gradient(140deg,#0B1A30,#2E86C8);}

/* 13 Oct 2026, Tim: lead-gen home. The quote form moves into the hero, about half
   the width, beside the copy; on a phone it stacks straight under the headline. */
.hero-grid{display:grid; grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr); gap:44px; align-items:center;}
.hero-grid > .hero-copy{margin:0;}
.hero .hero-form{background:#fff; color:var(--ink); border-radius:16px; padding:26px 26px 18px;
  box-shadow:0 18px 50px rgba(11,26,48,.35); margin:0; scroll-margin-top:110px;}
.hero .hero-form .form-title{font-size:22px; font-weight:800; color:var(--ink); margin:0; text-shadow:none;}
.hero .hero-form .form-sub{font-size:14px; color:var(--muted); margin:4px 0 14px; text-shadow:none;}
.hero-grid h1{max-width:18ch;}
.contact .wp-block-button.btn-ghost .wp-block-button__link{color:#fff; border-color:rgba(255,255,255,.28);}
.contact .wp-block-button.btn-ghost .wp-block-button__link:hover{border-color:#18C2D4; color:#18C2D4;}
@media (max-width:980px){
  .hero-grid{grid-template-columns:1fr; gap:28px;}
  .hero .hero-form{padding:22px 18px 12px;}
}

/* 13 Oct 2026, Tim (review 2): house washing + soft washing get their generic AI
   illustrations (never captioned, never in ads). Later rules win over the 'none' line above. */
.svc.p6::before{background-image:url('assets/a/ai-house.webp'),linear-gradient(140deg,#1B3A66,#18C2D4);}
.svc.p7::before{background-image:url('assets/a/ai-soft.webp'),linear-gradient(140deg,#12294A,#1F6FAD);}
.hero.p-house::before{background-image:url('assets/a/ai-house.webp'); background-position:center 50%;}
.hero.p-soft::before{background-image:url('assets/a/ai-soft.webp'); background-position:center 50%;}

/* Suburb bubbles solid aqua so they stand out (Tim; yellow dropped, not in the palette). */
.area-list p{background:#18C2D4; border-color:#18C2D4; color:#12294A; font-weight:700;}

/* Hero: the gap under the headline matches the gap above the buttons. */
.wp-block-group.hero .wp-block-heading.wp-block-heading,.hero h1.wp-block-heading{margin-bottom:28px;}
.hero .hero-copy .hero-sub{margin-top:0;}

/* The hero form fits above the fold: two fields a row, small labels, compact inputs,
   and the optional "Anything else" box hidden here (it stays on /contact/). */
.hero .wrap.hero-grid{padding-top:44px; padding-bottom:48px;}
.hero .hero-form{padding:20px 22px 14px;}
.hero .hero-form .form-title{font-size:20px;}
.hero .hero-form .form-sub{margin:2px 0 10px; font-size:13px;}
.hero .hero-form fieldset{display:grid; grid-template-columns:1fr 1fr; column-gap:12px; margin:0; padding:0; border:0; min-width:0;}
.hero .hero-form .ff-name-field-wrapper,.hero .hero-form .ff_submit_btn_wrapper{grid-column:1 / -1;}
.hero .hero-form .ff-el-group{margin-bottom:10px;}
.hero .hero-form .ff-el-input--label{margin-bottom:3px;}
.hero .hero-form .ff-el-input--label label{font-size:12.5px; line-height:1.2;}
.hero .hero-form .ff-el-form-control{padding:8px 11px; min-height:0; height:40px; font-size:14.5px;}
.hero .hero-form .ff-el-group:has(textarea){display:none;}
.hero .hero-form .ff_submit_btn_wrapper{margin-bottom:4px;}
.hero .hero-form .ff-btn-submit{width:100%;}
@media (max-width:520px){ .hero .hero-form fieldset{grid-template-columns:1fr;} }

/* 13 Oct 2026, Tim: contrast rule (every site). Dark bands: links and kickers in aqua,
   links underlined; buttons keep their own styling. Measured fails before: link 1.0:1, kicker 2.7:1. */
.contact .kicker{color:#18C2D4;}
.contact a:not(.wp-block-button__link){color:#18C2D4; text-decoration:underline; text-underline-offset:3px;}
.contact a:not(.wp-block-button__link):hover{color:#fff;}
/* Bottom panel: buttons sit the same distance below the paragraph as the paragraph sits below the H2. */
.wp-block-group.contact .wp-block-buttons.wp-block-buttons{margin-top:19px;}

/* 13 Oct 2026, Tim: no underline under the service-card titles (it read as a stray line);
   the hero "See what we do" keyline one pixel heavier. */
.svc h3 a{text-decoration:none;}
.svc h3 a:hover{color:var(--accent-ink);}
/* 13 Oct 2026, Tim: every ghost button gets a 2px keyline (rule 8), not just the hero one. */
.wp-block-button.btn-ghost .wp-block-button__link{border-width:2px;}

/* ==========================================================================
   13 Oct 2026 (client-review rules pass): the contact page puts its H1 and the
   quote form inside the navy .contact band, which only lit h2/.lede. Every
   text on navy is now light. And the phone number shows in the header on a
   phone too (rule: the number is shown, never hidden) — it was display:none
   under 900px, so a phone visitor first met it 1,500–6,500px down.
   ========================================================================== */
.contact h1{color:#fff;}
.contact p{color:#DCE6F0;}
.contact label, .contact legend, .contact .ff-el-input--label label{color:#DCE6F0;}
.contact .ff-el-is-required.asterisk-right label:after, .contact .ff-el-is-required label:after{color:#18C2D4;}
@media (max-width:900px){
  .site-header .hphone{display:inline-block; font-size:14px; letter-spacing:.02em; margin-right:0;}
  .hrow{gap:12px;}
}
@media (max-width:430px){
  .site-header .hphone{font-size:13px;}
  .site-header .brand img{height:27px;}
  .site-header .hbtn{font-size:12px; padding:9px 10px;}
  .hrow{gap:8px;}
}
