/* ============================================================
   Keep It Clean w/ AngelMaid — v1
   Layout + structure copied from thecleaningcompanyva.com
   Facts pulled from keepitclean.homes (verbatim where possible)
   .ph spans are placeholders — swap for her details when the form comes back
   ============================================================ */

:root{
  /* Cream is the dominant ground. Teal appears as an airy TINT for the odd
     band and at full strength only in small accents — full-bleed #bfd8d6 read
     as a spa poster and fought the accent. The brand blue stays the one bold
     colour — CTA band, buttons and link rules — and never touches a tinted
     band directly — cream always separates them. */
  --cream:#faf6ef;
  --paper:#ffffff;
  --tint:#EDF3FA;
  --sky:#BDD3EA;
  --accent:#4279BD;
  --accent-deep:#35659F;
  /* Her gold. Solid fills with dark text only — as text on a light ground it
     measures 1.69:1 and effectively disappears. */
  --gold:#FEBC11;
  --gold-deep:#E0A400;
  --ink:#1d2b2d;
  --ink-soft:#55666a;
  --serif:"Playfair Display", Georgia, "Times New Roman", serif;
  --sans:"Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --ease:cubic-bezier(.25,.46,.45,.94);
  --maxw:1180px;
  --pad:clamp(20px, 5vw, 48px);
}

*,*::before,*::after{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  background:var(--cream);
  color:var(--ink);
  font-family:var(--sans);
  font-weight:300;
  font-size:17px;
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block;}
a{color:inherit;}

.wrap{max-width:var(--maxw);margin:0 auto;padding-left:var(--pad);padding-right:var(--pad);}
.narrow{max-width:820px;margin-left:auto;margin-right:auto;}

h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.15;margin:0;letter-spacing:-0.01em;}
h1{font-size:clamp(2.4rem, 6vw, 4.1rem);}
h2{font-size:clamp(1.9rem, 4.2vw, 3rem);}
h3{font-size:clamp(1.25rem, 2.4vw, 1.6rem);}
p{margin:0 0 1.1em;}
p:last-child{margin-bottom:0;}

.eyebrow{
  font-family:var(--sans);font-weight:400;font-size:clamp(1rem,1.7vw,1.2rem);
  letter-spacing:0.01em;margin:0 0 .35em;
}
.italic{font-family:var(--serif);font-style:italic;font-weight:400;}

/* ---------- buttons ---------- */
.btn{
  display:inline-block;font-family:var(--sans);font-weight:400;font-size:1rem;
  padding:15px 30px;border-radius:4px;text-decoration:none;cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
  min-height:52px;line-height:1.4;
}
.btn-outline{border:1px solid var(--ink);background:transparent;color:var(--ink);}
.btn-outline:hover{background:var(--ink);color:var(--paper);}
.btn-outline-light{border:1px solid var(--paper);background:rgba(255,255,255,.06);color:var(--paper);}
.btn-outline-light:hover{background:var(--paper);color:var(--ink);}
.btn-primary{background:var(--accent);color:var(--paper);border:1px solid var(--accent);font-weight:500;}
.btn-primary:hover{background:var(--accent-deep);border-color:var(--accent-deep);}

.ulink{
  display:inline-block;text-decoration:none;font-size:1.05rem;font-weight:500;
  border-bottom:2px solid var(--accent-deep);padding-bottom:3px;
  transition:border-color .18s ease,color .18s ease;
}
.ulink:hover{color:var(--accent-deep);border-bottom-color:var(--ink);}

/* ---------- header ---------- */
.header{
  position:sticky;top:0;z-index:60;background:var(--paper);
  border-bottom:1px solid rgba(0,0,0,.07);
}
.header-in{
  max-width:var(--maxw);margin:0 auto;padding:11px var(--pad);
  display:flex;align-items:center;gap:18px;
}
.logo{display:flex;flex-direction:column;text-decoration:none;line-height:1;flex-shrink:0;}
.logo b{font-family:var(--serif);font-size:1.42rem;font-weight:500;letter-spacing:-0.01em;}
.logo span{font-size:.6rem;letter-spacing:.32em;font-weight:400;color:var(--ink-soft);margin-top:5px;}

.nav{display:flex;gap:34px;margin-left:auto;align-items:center;}
.nav a{
  text-decoration:none;font-size:.97rem;font-weight:400;padding:6px 0;
  letter-spacing:.005em;
  border-bottom:1.5px solid transparent;transition:border-color .18s ease;
}
.nav a:hover{border-bottom-color:var(--accent);}

.nav-cta{display:none;}
.navitem{position:relative;}
.navlink{
  font-family:var(--sans);font-size:.97rem;font-weight:400;color:inherit;
  letter-spacing:.005em;
  background:none;border:0;padding:6px 0;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;
  border-bottom:1.5px solid transparent;transition:border-color .18s ease;
}
.navlink:hover,.navitem:hover .navlink,.navitem.open .navlink{border-bottom-color:var(--accent);}
.navlink .caret{
  display:inline-block;width:8px;height:8px;border-right:1.4px solid currentColor;
  border-bottom:1.4px solid currentColor;transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .18s ease;
}
.navitem.open .navlink .caret{transform:rotate(-135deg) translate(-3px,-3px);}

.submenu{
  display:none;position:absolute;top:100%;left:50%;transform:translateX(-50%);
  min-width:250px;background:var(--paper);border:1px solid rgba(0,0,0,.1);
  border-radius:8px;padding:10px 0;box-shadow:0 14px 38px rgba(0,0,0,.13);
}
.navitem:hover .submenu,.navitem:focus-within .submenu,.navitem.open .submenu{display:block;}
.submenu a{
  display:block;padding:10px 22px;white-space:nowrap;font-size:.97rem;
  border-bottom:0;transition:background .15s ease;
}
.submenu a:hover{background:var(--sky-pale);border-bottom:0;}

.header-cta{display:flex;align-items:center;gap:20px;margin-left:auto;flex-shrink:0;}
.header-cta::before{
  content:"";width:1px;height:26px;background:rgba(0,0,0,.14);margin-right:2px;
}
@media (max-width:1000px){.header-cta::before{display:none;}}
.header-tel{
  font-family:var(--serif);font-size:1.26rem;text-decoration:none;white-space:nowrap;
  display:inline-flex;align-items:center;gap:9px;
}
.header-tel svg{width:16px;height:16px;fill:none;stroke:var(--accent);stroke-width:1.7;}
.header-tel:hover{color:var(--accent-deep);}
.nav + .header-cta{margin-left:30px;}

.burger{
  display:none;margin-left:auto;background:none;border:1px solid rgba(0,0,0,.18);
  border-radius:4px;width:48px;height:44px;cursor:pointer;color:var(--ink);
  font-size:1.2rem;line-height:1;
}

@media (max-width:1000px){
  .nav{
    display:none;position:absolute;top:100%;left:0;right:0;background:var(--paper);
    flex-direction:column;gap:0;padding:8px var(--pad) 20px;
    border-bottom:1px solid rgba(0,0,0,.1);margin-left:0;
  }
  .nav.open{display:flex;}
  .nav a{padding:14px 0;width:100%;border-bottom:1px solid rgba(0,0,0,.06);}
  .navitem{width:100%;}
  .navlink{width:100%;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(0,0,0,.06);}
  .submenu{
    display:none;position:static;transform:none;min-width:0;border:0;border-radius:0;
    box-shadow:none;padding:0 0 8px 16px;background:transparent;
  }
  .navitem:hover .submenu{display:none;}
  .navitem.open .submenu{display:block;}
  .submenu a{padding:11px 0;border-bottom:1px solid rgba(0,0,0,.05);}
  .burger{display:block;}
  .nav-cta{
    display:block;width:100%;text-align:center;margin-top:18px;border-bottom:0;
  }
  .nav-cta:hover{border-bottom:0;}
  .header-cta{margin-left:14px;}
  .header-cta .btn{display:none;}
}
@media (max-width:560px){
  .header-tel{font-size:1.1rem;}
  .logo b{font-size:1.2rem;}
}

/* ---------- hero ---------- */
.hero{position:relative;min-height:clamp(560px,82vh,760px);display:flex;align-items:center;}
.hero-bg{position:absolute;inset:0;overflow:hidden;}
.hero-bg img{width:100%;height:100%;object-fit:cover;}
.hero-bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(20,32,34,.66) 0%,rgba(20,32,34,.54) 36%,rgba(20,32,34,.74) 70%,rgba(20,32,34,.90) 100%);
}
.hero-in{position:relative;z-index:2;width:100%;text-align:center;padding:80px 0;color:var(--paper);}
.hero h1{margin:0 0 .35em;}
.hero .sub{
  font-family:var(--serif);font-style:italic;font-size:clamp(1.15rem,2.3vw,1.6rem);
  line-height:1.5;max-width:660px;margin:0 auto 2em;
}
.hero .eyebrow{color:rgba(255,255,255,.9);}
.hero .sub{color:rgba(255,255,255,.94);}
.hero-cta{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;}
.hero-cta .btn{display:inline-flex;align-items:center;gap:10px;}
.hero-cta svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.6;}

.trust{
  display:flex;gap:clamp(18px,4vw,54px);justify-content:center;flex-wrap:wrap;
  margin:clamp(38px,5vw,58px) 0 0;padding:0;
}
.trust li{
  list-style:none;display:flex;align-items:center;gap:10px;
  font-size:.98rem;letter-spacing:.02em;color:rgba(255,255,255,.94);
}
.trust svg{width:20px;height:20px;flex:none;fill:none;stroke:var(--sky);stroke-width:1.5;}

/* placeholder copy — reads as normal text, swapped for her details later */
.ph{color:var(--ink-soft);}

/* ---------- bands ---------- */
.band{padding:clamp(64px,9vw,112px) 0;}
.band-tint{background:var(--tint);}
.band-paper{background:var(--paper);}
/* The CTA was a full-bleed terracotta slab with a cream gutter above and
   below it — three colour changes in a row, and the gutter read as a stray
   stripe. It is now a contained rounded panel on the page ground, matching
   the card language used everywhere else on the site. */
.strip-band{padding:clamp(30px,4vw,52px) 0;}
.strip-inner{
  max-width:var(--maxw);margin:0 auto;
  background:var(--accent);color:var(--paper);
  border-radius:16px;
  padding:clamp(38px,5vw,58px) clamp(24px,4vw,52px);
}
.strip-inner .wrap{padding-left:0;padding-right:0;max-width:none;}
.strip-inner a{color:var(--paper);}
@media (max-width:820px){
  .strip-band{padding-left:var(--pad);padding-right:var(--pad);}
  .strip-inner{border-radius:14px;}
}






.centered{text-align:center;}
.lede{
  font-family:var(--serif);font-style:italic;
  font-size:clamp(1.3rem,3vw,2rem);line-height:1.4;margin:0 0 1em;
}

/* ---------- services ---------- */
.sec-head{text-align:center;margin-bottom:clamp(40px,5vw,64px);}
.sec-head h2{margin-bottom:.3em;}
.sec-head p{font-size:1.08rem;color:var(--ink-soft);margin:0;}

.cards{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(24px,3.5vw,46px);
}
@media (max-width:860px){.cards{grid-template-columns:repeat(2,1fr);}}
@media (max-width:560px){.cards{grid-template-columns:1fr;max-width:420px;margin:0 auto;}}

.card{text-align:center;text-decoration:none;display:block;}
.card .shot{
  border:1px solid var(--ink);border-radius:14px;overflow:hidden;
  aspect-ratio:4/3;background:var(--accent);
}
.card .shot img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease;}
.card:hover .shot img{transform:scale(1.045);}
.card .label{
  display:inline-block;margin-top:20px;font-size:1.12rem;
  border-bottom:2px solid var(--accent-deep);padding-bottom:4px;
}
.card .note{display:block;margin-top:8px;font-size:.92rem;color:var(--ink-soft);}

/* ---------- offer strip ---------- */
.strip{
  display:flex;align-items:center;justify-content:center;gap:26px;
  flex-wrap:wrap;text-align:center;
}
.strip .line{
  font-family:var(--serif);font-size:clamp(1.35rem,2.9vw,1.95rem);
  border-bottom:1.5px solid rgba(255,255,255,.75);padding-bottom:6px;text-decoration:none;
}
.arrow{
  width:62px;height:62px;border-radius:50%;border:1px solid rgba(255,255,255,.7);
  display:grid;place-items:center;font-size:1.4rem;text-decoration:none;flex-shrink:0;
  transition:background .18s ease,color .18s ease;
}
.arrow:hover{background:var(--paper);color:var(--accent);}

/* ---------- pricing ---------- */
.price-grid{
  display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(24px,3.5vw,44px);
  align-items:start;
}
@media (max-width:760px){.price-grid{grid-template-columns:1fr;}}
.price-card{
  background:var(--paper);border:1px solid var(--ink);border-radius:14px;
  padding:clamp(26px,3.5vw,40px);
}
.price-card h3{margin-bottom:.15em;}
.price-card .kicker{font-size:.95rem;color:var(--ink-soft);margin:0 0 1.4em;min-height:3.4em;}
.price-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:16px;
  padding:13px 0;border-bottom:1px solid rgba(0,0,0,.1);
}
.price-row:last-of-type{border-bottom:none;}
.price-row .rooms{font-size:1.04rem;}
.price-row .amt{font-family:var(--serif);font-size:1.45rem;white-space:nowrap;}
.price-foot{margin-top:22px;font-size:.95rem;color:var(--ink-soft);line-height:1.6;}

.addons{
  display:flex;flex-wrap:wrap;gap:12px;justify-content:center;
  margin-top:clamp(34px,4vw,52px);
}
.addons li{
  list-style:none;background:var(--paper);border:1px solid rgba(29,43,45,.22);border-radius:999px;
  padding:10px 22px;font-size:.98rem;
}
.addons-label{
  text-align:center;margin-top:clamp(40px,5vw,60px);
  font-family:var(--serif);font-style:italic;font-size:1.35rem;
}

/* ---------- split ---------- */
.split{
  display:grid;grid-template-columns:1fr 1fr;align-items:center;
  gap:clamp(30px,5vw,72px);
}
@media (max-width:860px){.split{grid-template-columns:1fr;}}
.split .shot{border:1px solid var(--ink);border-radius:14px;overflow:hidden;}
.split .shot img{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center 62%;}
.split blockquote{margin:0;font-size:1.12rem;line-height:1.8;}
.split .attrib{margin-top:1.4em;text-align:right;font-size:1.05rem;}

/* ---------- estimate card ---------- */
.estimate{position:relative;}
.estimate-grid{
  display:grid;grid-template-columns:minmax(0,470px) minmax(0,1fr);
  align-items:center;
}
@media (max-width:860px){.estimate-grid{grid-template-columns:1fr;}}
.estimate-card{
  background:var(--paper);border:1px solid var(--ink);border-radius:14px;
  padding:clamp(30px,4.5vw,52px);text-align:center;position:relative;z-index:3;
}
.estimate-card h2{margin-bottom:.3em;}
.estimate-card .italic{display:block;font-size:1.28rem;margin-bottom:1.2em;}
.estimate-line{margin:10px 0;font-size:1.06rem;}
.estimate-line a{border-bottom:1.5px solid var(--accent);text-decoration:none;padding-bottom:2px;}
.estimate-shot{
  border:1px solid var(--ink);border-radius:14px;overflow:hidden;
  margin-left:-46px;position:relative;z-index:1;
}
.estimate-shot img{width:100%;aspect-ratio:4/3;object-fit:cover;}
@media (max-width:860px){
  .estimate-shot{margin-left:0;margin-top:-24px;padding-top:24px;border:none;border-radius:0;}
  .estimate-shot img{border:1px solid var(--ink);border-radius:14px;}
}

/* ---------- footer ---------- */
.footer{background:var(--ink);color:var(--paper);padding:clamp(58px,7vw,88px) 0 40px;}
.footer h2{text-align:center;margin-bottom:.6em;}
.footer .blurb{max-width:760px;margin:0 auto 2.2em;line-height:1.75;}
.footer .nap{
  font-family:var(--serif);font-style:italic;font-size:clamp(1.05rem,2vw,1.35rem);
  text-align:center;margin:0 0 clamp(38px,5vw,58px);line-height:1.7;
}
.footer .nap a{text-decoration:none;border-bottom:1.5px solid var(--accent);padding-bottom:2px;}
.foot-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,5vw,60px);align-items:start;}
@media (max-width:760px){.foot-grid{grid-template-columns:1fr;}}
.foot-map{border:1px solid rgba(255,255,255,.28);border-radius:6px;overflow:hidden;}
.foot-map iframe{display:block;width:100%;height:290px;border:0;filter:grayscale(1) contrast(.92);}
.foot-links{display:flex;flex-direction:column;gap:16px;}
.foot-links a{
  font-family:var(--serif);font-size:1.35rem;text-decoration:none;
  border-bottom:2px solid var(--accent-deep);padding-bottom:4px;align-self:flex-start;
}
.foot-hours{margin-top:26px;font-size:1rem;color:rgba(255,255,255,.82);}
.copyright{
  border-top:1px solid rgba(255,255,255,.22);margin-top:clamp(38px,5vw,58px);
  padding-top:26px;text-align:center;font-size:.92rem;color:rgba(255,255,255,.72);
}


/* The sticky mobile call bar is gone. The header is sticky and already carries
   the number in terracotta with a phone glyph, so the bar was a second copy of
   the same action that permanently ate 62px of every screen and covered
   content. One duplicate CTA is worse than none. */

/* ---------- inner-page header band ---------- */
.page-head{
  background:var(--tint);padding:clamp(56px,8vw,96px) 0 clamp(50px,7vw,84px);text-align:center;
}
.page-head h1{font-size:clamp(2.1rem,5vw,3.4rem);margin-bottom:.3em;}
.page-head p{
  font-family:var(--serif);font-style:italic;font-size:clamp(1.1rem,2.2vw,1.5rem);
  max-width:640px;margin:0 auto;line-height:1.5;
}

/* ---------- service rows (services page) ---------- */
.srow{
  display:grid;grid-template-columns:1fr 1fr;align-items:center;
  gap:clamp(28px,4.5vw,64px);margin-bottom:clamp(44px,5vw,72px);
}
.srow:last-child{margin-bottom:0;}
.srow:nth-child(even) .srow-shot{order:2;}
@media (max-width:860px){
  .srow{grid-template-columns:1fr;}
  .srow:nth-child(even) .srow-shot{order:0;}
}
.srow-shot{border:1px solid var(--ink);border-radius:14px;overflow:hidden;}
.srow-shot img{width:100%;aspect-ratio:16/11;object-fit:cover;}
.srow h2{margin-bottom:.4em;}
.srow > div:last-child{max-width:520px;}
.srow .tag{
  font-size:.82rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-soft);margin:0 0 .8em;
}

/* current page marker in nav */
.nav a[aria-current="page"]{border-bottom-color:var(--accent);}

/* ---------- three pillars (about) ---------- */
.pillars{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(26px,4vw,54px);margin:clamp(44px,5vw,64px) 0 0;padding:0;text-align:center;
}
@media (max-width:760px){
  .pillars{grid-template-columns:1fr;max-width:420px;margin-left:auto;margin-right:auto;}
}
.pillar{list-style:none;}
.pillar svg{
  width:30px;height:30px;display:block;margin:0 auto 16px;
  fill:none;stroke:var(--accent);stroke-width:1.3;
}
.pillar h3{font-size:1.22rem;margin-bottom:.45em;}
.pillar p{font-size:1rem;color:var(--ink-soft);margin:0;}

/* ---------- hours (contact) ---------- */
.hours{max-width:460px;margin:clamp(30px,4vw,42px) auto 0;padding:0;text-align:left;}
.hours li{
  list-style:none;display:flex;justify-content:space-between;align-items:baseline;
  gap:20px;padding:13px 0;border-bottom:1px solid rgba(0,0,0,.12);
}
.hours li:last-child{border-bottom:0;}
.hours .day{font-size:1.03rem;}
.hours .time{font-family:var(--serif);font-size:1.15rem;white-space:nowrap;}

/* ---------- small-screen readability ---------- */
@media (max-width:700px){
  /* three trust lines stacked need less air between them */
  .trust{gap:14px;flex-direction:column;align-items:center;}
  /* centred body copy goes ragged at this measure — left-align it,
     keep the heading centred */
  .estimate-card p{text-align:left;}
  .estimate-card .estimate-line{text-align:center;}
  .hours{max-width:none;}
}

/* ---------- "view all services" under the card row ---------- */
.viewall{text-align:center;margin-top:clamp(34px,4.5vw,50px);}
.viewall a{
  font-size:1.08rem;font-weight:500;text-decoration:none;
  border-bottom:2px solid var(--accent-deep);padding-bottom:5px;
  transition:border-color .18s ease,color .18s ease;
}
.viewall a:hover{color:var(--accent-deep);border-bottom-color:var(--ink);}

/* ---------- how it works ---------- */
.steps{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(28px,4vw,58px);margin:0;padding:0;
}
@media (max-width:800px){
  .steps{grid-template-columns:1fr;max-width:460px;margin:0 auto;}
}
.step{list-style:none;}
.step .num{
  font-family:var(--serif);font-size:2.5rem;line-height:1;color:var(--accent-deep);
  display:block;margin-bottom:14px;
}
.step h3{margin-bottom:.45em;}
.step p{color:var(--ink-soft);margin:0;}

/* ---------- pricing preview ---------- */
.pricepeek{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(20px,3vw,36px);
  max-width:840px;margin:0 auto;
}
@media (max-width:640px){.pricepeek{grid-template-columns:1fr;}}
.peek{
  background:var(--paper);border:1px solid var(--ink);border-radius:14px;
  padding:clamp(26px,3.5vw,40px);text-align:center;
}
.peek .from{
  font-size:.82rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);
}
.peek .amt{
  font-family:var(--serif);font-size:clamp(2.5rem,5.5vw,3.5rem);line-height:1;
  display:block;margin:.18em 0 .3em;
}
.peek .what{color:var(--ink-soft);margin:0;}

/* ---------- FAQ ---------- */
/* White ground kept. Questions moved off the display serif onto the sans at
   500 — a list you scan reads better in the UI face than in Playfair — with
   firmer rules, a terracotta chevron, and a hover state so rows read clickable. */
.faq{max-width:820px;margin:0 auto;border-top:1px solid rgba(29,43,45,.18);}
.faq details{border-bottom:1px solid rgba(29,43,45,.18);}
.faq summary{
  cursor:pointer;list-style:none;position:relative;
  padding:26px 54px 26px 0;
  font-family:var(--sans);font-size:1.12rem;font-weight:500;line-height:1.5;
  color:var(--ink);transition:color .16s ease;
}
.faq summary::-webkit-details-marker{display:none;}
.faq summary:hover{color:var(--accent-deep);}
.faq summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.faq summary::after{
  content:"";position:absolute;right:12px;top:32px;width:10px;height:10px;
  border-right:2px solid var(--accent);border-bottom:2px solid var(--accent);
  transform:rotate(45deg);transition:transform .2s ease;
}
.faq details[open] summary{color:var(--ink);}
.faq details[open] summary::after{transform:rotate(-135deg);top:37px;}
.faq .ans{
  padding:0 54px 30px 0;max-width:68ch;
  color:var(--ink-soft);font-size:1.02rem;line-height:1.8;
}
.faq .ans p{margin-bottom:.85em;}
.faq .ans p:last-child{margin-bottom:0;}

/* ---------- section eyebrow ---------- */
.sec-eyebrow{
  font-size:.8rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink);margin:0 0 1.1em;
}

/* ---------- quick banner ---------- */
/* Short, wide and loud — a statement between two working sections, not a
   section of its own. Height comes off, type size goes up. */
.banner{padding:clamp(52px,7vw,86px) 0;}
/* The script carries one accent phrase, not three lines of body copy —
   full sentences in italic serif slow reading and soften on mobile. */
.banner-line{
  font-family:var(--sans);font-weight:400;
  font-size:clamp(1.5rem,3.2vw,2.35rem);line-height:1.35;
  margin:0 0 .55em;letter-spacing:-.005em;
}
.banner-line em{
  font-family:var(--serif);font-style:italic;font-weight:400;
  font-size:1.14em;letter-spacing:-.015em;
}
.banner-sub{
  font-size:1.06rem;line-height:1.7;color:var(--ink-soft);
  max-width:52ch;margin:0 auto;
}
.banner-cta{margin:clamp(26px,3.2vw,36px) 0 0;}

/* ---------- owner portrait ---------- */
/* Her only headshot is 82x156px, so it runs at near-native size as a small
   circular portrait rather than being upscaled into a blurry hero image. */
.portrait{
  width:88px;height:88px;border-radius:50%;object-fit:cover;object-position:center 22%;
  border:1px solid var(--ink);display:block;margin:0 0 20px;
}
.centered .portrait{margin-left:auto;margin-right:auto;}
.owner-role{
  font-size:.95rem;color:var(--ink-soft);margin:-.2em 0 1.4em;
}

/* ---------- guarantee note ---------- */
.guarantee{
  border-left:2px solid var(--accent-deep);
  padding:2px 0 2px 20px;margin:1.6em 0 0;
  color:var(--ink-soft);font-size:1rem;line-height:1.7;
}
.guarantee b{color:var(--ink);font-weight:500;}

/* ---------- star rating ---------- */
.stars{display:flex;gap:5px;margin:0 0 1.1em;}
.stars svg{width:17px;height:17px;fill:var(--gold);stroke:none;}

/* ---------- "what's included" checklists on the services page ---------- */
.incl{margin-top:1.5em;border-top:1px solid rgba(29,43,45,.18);}
.incl summary{
  cursor:pointer;list-style:none;position:relative;
  padding:16px 34px 16px 0;font-family:var(--sans);font-weight:500;font-size:1rem;
  color:var(--ink);transition:color .16s ease;
}
.incl summary::-webkit-details-marker{display:none;}
.incl summary:hover{color:var(--accent-deep);}
.incl summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.incl summary::after{
  content:"";position:absolute;right:8px;top:22px;width:8px;height:8px;
  border-right:2px solid var(--accent);border-bottom:2px solid var(--accent);
  transform:rotate(45deg);transition:transform .2s ease;
}
.incl[open] summary::after{transform:rotate(-135deg);top:26px;}
.incl-body{padding:0 0 22px;}
.incl-body h4{
  font-family:var(--sans);font-size:.78rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-soft);margin:1.3em 0 .7em;
}
.incl-body h4:first-child{margin-top:0;}
.incl-body ul{margin:0;padding:0;}
.incl-body li{
  list-style:none;position:relative;padding-left:22px;margin-bottom:7px;
  font-size:.98rem;line-height:1.6;color:var(--ink-soft);
}
.incl-body li::before{
  content:"";position:absolute;left:0;top:.58em;width:9px;height:5px;
  border-left:1.6px solid var(--accent);border-bottom:1.6px solid var(--accent);
  transform:rotate(-45deg);
}
.incl-body .byhand{color:var(--ink);font-weight:500;}

/* ---------- testimonial grid ---------- */
.quotes{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(20px,3vw,32px);align-items:stretch;
  margin-top:clamp(38px,5vw,56px);
}
@media (max-width:860px){.quotes{grid-template-columns:1fr;max-width:520px;margin-left:auto;margin-right:auto;}}
.quote{
  background:var(--paper);border:1px solid var(--ink);border-radius:14px;
  padding:clamp(26px,3.2vw,36px);display:flex;flex-direction:column;
}
.quote blockquote{margin:0 0 1.3em;font-size:1.02rem;line-height:1.75;}
.quote .attrib{margin:auto 0 0;text-align:left;font-size:.97rem;color:var(--ink-soft);}
.quote .attrib b{display:block;color:var(--ink);font-weight:500;font-size:1rem;}

/* ---------- award note ---------- */
.award{
  display:inline-flex;align-items:center;gap:10px;
  font-size:.95rem;color:var(--ink-soft);margin:1.4em 0 0;
}
.award svg{width:19px;height:19px;flex:none;fill:none;stroke:var(--accent);stroke-width:1.5;}

/* ---------- hero trust badges ---------- */
/* Reads as badges rather than a line of text — friction reducers sitting
   directly under the CTA. Only claims we can source: insured and bonded,
   free in-home estimates, the 24-hour guarantee. NOT "licensed" (never
   stated in her material) and NOT "no contracts" (unknown). */
/* Plain marks, not pills — bolder and larger so they carry without a box,
   with hairline dividers doing the separating. */
.trust li{font-size:1.04rem;font-weight:500;letter-spacing:.005em;}
.trust li + li{border-left:1px solid rgba(255,255,255,.3);padding-left:clamp(18px,4vw,54px);}
.trust svg{width:19px;height:19px;stroke-width:1.7;}
/* Google rating. Borderless so it sits in the hero rather than on top of it,
   but weighted so it reads first. Real Google mark, gold stars, big number. */
.hero-rating{
  display:inline-flex;align-items:center;gap:13px;
  margin-top:clamp(24px,3vw,34px);text-decoration:none;
  color:#fff;transition:opacity .18s ease;
}
.hero-rating:hover{opacity:.82;}
.hero-rating .glogo{width:25px;height:25px;flex:none;}
.hero-rating .score{
  font-family:var(--serif);font-size:1.6rem;line-height:1;letter-spacing:-.01em;
}
.hero-rating .stars{display:flex;gap:3px;margin:0;}
.hero-rating .stars svg{width:17px;height:17px;fill:var(--gold);stroke:none;}
.hero-rating .glabel{
  font-size:.92rem;color:rgba(255,255,255,.88);letter-spacing:.01em;
  border-bottom:1px solid rgba(255,255,255,.45);padding-bottom:2px;
}
@media (max-width:700px){
  .trust li + li{border-left:0;padding-left:0;}
  .hero-rating{gap:10px;}
  .hero-rating .score{font-size:1.4rem;}
  .hero-rating .stars svg{width:15px;height:15px;}
  .hero-rating .glabel{font-size:.85rem;}
}


/* ---------- hero fits a phone screen ---------- */
/* Badges plus the rating line pushed the hero past the viewport on a 390px
   screen, hiding the Google proof behind the call bar. Tighten the stack. */
@media (max-width:700px){
  .hero-in{padding:46px 0;}
  .hero .sub{margin-bottom:1.4em;}
  .hero-cta{gap:12px;}
  .trust{gap:10px;margin-top:22px;}
  .hero-rating{margin-top:18px;}
}

/* ---------- contact: reach us straight away ---------- */
/* People click Contact for the phone number. It goes at the top of the page,
   not below the fold, with a text option beside it. */
.reach{margin-top:clamp(28px,4vw,40px);}
.reach-tel{
  display:inline-flex;align-items:center;gap:12px;
  font-family:var(--serif);font-size:clamp(1.9rem,4.4vw,2.9rem);
  text-decoration:none;color:var(--ink);letter-spacing:-.01em;
  transition:color .18s ease;
}
.reach-tel:hover{color:var(--accent-deep);}
.reach-tel svg{
  width:clamp(21px,2.6vw,28px);height:clamp(21px,2.6vw,28px);flex:none;
  fill:none;stroke:var(--accent);stroke-width:1.7;
}
.reach-btns{
  display:flex;gap:14px;justify-content:center;flex-wrap:wrap;
  margin-top:clamp(20px,2.6vw,28px);
}
.reach-btns .btn{display:inline-flex;align-items:center;gap:9px;}
.reach-btns svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;}
.page-head .reach-note{
  /* .page-head p is italic serif and outranks a bare class — scope it. */
  font-family:var(--sans);font-style:normal;font-size:.97rem;line-height:1.6;
  margin:clamp(18px,2.4vw,24px) auto 0;max-width:46ch;color:var(--ink-soft);
}
.card-btns{
  display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:1.5em;
}

/* ---------- animated gradient headline ---------- */
/* The reference gradient is purple/cyan/green — off-palette, and worse, the
   hero headline sits white on a dark photo, so any mid-tone in the gradient
   punches a low-contrast hole in the most important line on the site.
   So the shimmer runs through LIGHT tints only: white, a pale gold
   tint, a pale blue tint, white. Same alive-and-premium effect, contrast
   never drops. Slowed to 9s — 4s reads as a distraction on a headline. */
@keyframes gradientShift{
  0%{background-position:0% 50%;}
  50%{background-position:100% 50%;}
  100%{background-position:0% 50%;}
}
.hero h1{
  font-weight:500;
  /* drop-shadow, not text-shadow: it filters the rendered result, so it still
     works when the glyphs are a clipped gradient with a transparent fill. */
  filter:drop-shadow(0 2px 14px rgba(12,20,18,.55));
}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .hero h1{
    /* tints pulled closer to white than before — the shimmer should not cost
       the headline any apparent weight */
    background:linear-gradient(-45deg,#ffffff,#FEF6E3,#ffffff,#EDF3FA,#ffffff);
    background-size:300% 300%;
    -webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;
    animation:gradientShift 9s ease infinite;
  }
}
@media (prefers-reduced-motion:reduce){
  .hero h1{
    background:none;-webkit-text-fill-color:#fff;color:#fff;animation:none;
  }
}

/* ---------- page transition wipe ---------- */
.page-transition{
  position:fixed;inset:0;background:var(--accent);z-index:9999;
  transform:scaleX(0);transform-origin:left;pointer-events:none;
}
@keyframes wipeIn{from{transform:scaleX(0);}to{transform:scaleX(1);}}
@keyframes wipeOut{from{transform:scaleX(1);}to{transform:scaleX(0);}}
@media (prefers-reduced-motion:reduce){
  .page-transition{display:none;}
}

/* ---------- scroll-triggered reveals ---------- */
/* Elements are tagged by site.js rather than by hand, so the markup stays
   clean and every page gets the same treatment. Nothing above the fold is
   tagged — the hero has its own entrance. Everything is inside a
   no-preference query, so with reduced motion the page renders fully static
   with no hidden elements to recover. */
@media (prefers-reduced-motion:no-preference){
  [data-anim]{opacity:0;}
  [data-anim="up"]{transform:translateY(26px);}
  [data-anim="left"]{transform:translateX(-46px);}
  [data-anim="right"]{transform:translateX(46px);}
  [data-anim="scale"]{transform:scale(.955);}

  /* the stagger container itself stays put; its children carry the motion */
  [data-anim="stagger"]{opacity:1;}
  [data-anim="stagger"] > *{opacity:0;transform:translateY(26px);}

  [data-anim].is-in,
  [data-anim="stagger"].is-in > *{
    opacity:1;
    transform:none;
    transition:
      opacity .72s var(--ease) var(--d,0s),
      transform .72s var(--ease) var(--d,0s);
  }
}

/* ---------- logo ---------- */
/* Her real mark goes at img/logo.png — the AngelMaid Cleaning Services
   lockup, blue and gold, shown in its own colours. If the file is absent
   the text lockup shows instead, so the header is never broken. */
.logo-mark{
  /* The mark is a vertical stack — winged house, wordmark, then the strapline —
     so it needs more height than a horizontal lockup before it reads. */
  height:clamp(54px,5.6vw,68px);width:auto;display:none;
}
.logo.has-mark .logo-mark{display:block;}
.logo.has-mark .logo-text{display:none;}

/* ---------- long-form legal copy ---------- */
.narrow h2{font-size:clamp(1.25rem,2.2vw,1.55rem);}
ul.plain{margin:0 0 1.1em;padding:0;}
ul.plain li{
  list-style:none;position:relative;padding-left:20px;margin-bottom:9px;line-height:1.7;
}
ul.plain li::before{
  content:"";position:absolute;left:0;top:.72em;width:7px;height:1.5px;background:var(--accent);
}
.foot-legal{margin:22px 0 0;font-size:.95rem;}
.foot-legal a{color:rgba(255,255,255,.8);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.35);padding-bottom:2px;}
.foot-legal a:hover{color:#fff;}

/* ---------- touch targets ---------- */
/* Buttons were already 52px, but inline links — the header phone, the Google
   rating, the "view all" links, the footer nav — were 25-31px tall. Padding
   them out to 44px on touch screens without moving anything visually. */
@media (max-width:820px){
  .header-tel{
    min-height:44px;align-items:center;
    border-bottom:2px solid var(--accent);padding-bottom:1px;
  }
  .hero-rating{min-height:44px;padding-top:8px;}
  .ulink,
  .viewall a,
  .foot-links a,
  .foot-legal a,
  .estimate-line a{
    display:inline-flex;align-items:center;min-height:44px;
  }
  .nav a{min-height:44px;display:flex;align-items:center;}
  .navlink{min-height:44px;}
  .faq summary,
  .incl summary{min-height:44px;}
  .card .label{display:inline-flex;align-items:center;min-height:44px;}
}

/* ---------- blog ---------- */
.posts{display:grid;gap:clamp(20px,3vw,30px);max-width:900px;margin:0 auto;}
.post-card{
  display:grid;grid-template-columns:minmax(0,240px) minmax(0,1fr);
  gap:clamp(20px,3vw,32px);align-items:center;text-decoration:none;
  background:var(--paper);border:1px solid var(--ink);border-radius:14px;
  padding:clamp(18px,2.4vw,24px);
  transition:transform .3s var(--ease);
}
.post-card:hover{transform:translateY(-3px);}
@media (max-width:680px){.post-card{grid-template-columns:1fr;}}
.post-shot{border-radius:10px;overflow:hidden;}
.post-shot img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;}
.post-body time{
  font-size:.83rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);
}
.post-body h2{font-size:clamp(1.25rem,2.3vw,1.6rem);margin:.4em 0 .35em;}
.post-body p{color:var(--ink-soft);font-size:1rem;margin:0 0 .9em;}
.post-more{
  font-weight:500;border-bottom:2px solid var(--accent-deep);padding-bottom:3px;
}

/* article */
.post-hero{border:1px solid var(--ink);border-radius:14px;overflow:hidden;margin-bottom:clamp(30px,4vw,44px);}
.post-hero img{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;}
.narrow h2{margin:1.8em 0 .5em;}
.narrow p{line-height:1.85;}
.post-cta{margin-top:clamp(34px,4vw,48px);text-align:center;}

/* ---------- reveals: no sideways motion on small screens ---------- */
/* The alternating left/right slide pushes a full-width row 46px outside the
   viewport before it settles, which shows up as horizontal scroll on a phone.
   Rows stack under 860px anyway, so "alternating sides" means nothing there —
   they fade up instead. The clip is a belt-and-braces guard. */
@media (prefers-reduced-motion:no-preference) and (max-width:860px){
  [data-anim="left"],
  [data-anim="right"]{transform:translateY(26px);}
}
.band,.banner,.page-head,.strip-band{overflow-x:clip;}

/* ---------- hero hierarchy on small screens ---------- */
/* At 390px the headline ran three lines and the sub ran three lines in a
   similar italic serif, so the two blocks had near-identical visual mass and
   nothing led. The headline comes down slightly so it fits tighter, and the
   sub drops well below it and picks up the 500 italic — small italic Playfair
   over a photo needs the extra weight to stay readable. */
@media (max-width:700px){
  .hero h1{font-size:clamp(1.95rem,8.2vw,2.6rem);line-height:1.12;}
  .hero .sub{
    font-size:1rem;font-weight:500;line-height:1.55;
    color:rgba(255,255,255,.9);
    max-width:34ch;margin-bottom:1.7em;
  }
}

/* ---------- sanitary protocols: two plain columns, no cards ---------- */
.two-col{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,4vw,56px);
  max-width:900px;margin:0 auto;
}
.two-col h3{font-family:var(--serif);font-size:1.25rem;font-weight:500;margin-bottom:.45em;}
.two-col p{color:var(--ink-soft);margin:0;}
@media (max-width:760px){.two-col{grid-template-columns:1fr;gap:30px;}}

/* the kit list reads as a list of reassurances, so it wants room to breathe */
ul.plain.kit{max-width:720px;margin:0 auto;}
ul.plain.kit li{margin-bottom:14px;}
