:root{
--indigo-ink:#141634;--indigo-electric:#5A5CF0;--citron:#D8FF4A;--midnight:#161A33;
--slate:#5A6178;--mist:#F4F5FB;--border-indigo:#E2E4F3;--footer-ink:#0C0E22;
--hairline:#E5E7EB;--white:#FFFFFF;
--indigo-electric-12:rgba(90,92,240,.12);--indigo-electric-24:rgba(90,92,240,.24);
--indigo-ink-72:rgba(20,22,52,.72);--indigo-ink-08:rgba(20,22,52,.08);
--white-08:rgba(255,255,255,.08);--white-16:rgba(255,255,255,.16);--white-64:rgba(255,255,255,.64);
--surface-page:var(--white);--surface-wash:var(--mist);--surface-dark:var(--indigo-ink);
--surface-footer:var(--footer-ink);--surface-card:var(--white);--surface-card-dark:rgba(255,255,255,.06);
--text-heading:var(--midnight);--text-body:var(--slate);--text-on-dark:var(--white);
--text-on-dark-muted:var(--white-64);--text-eyebrow:var(--indigo-electric);
--text-link:var(--indigo-electric);--text-link-hover:var(--indigo-ink);
--border-card:var(--border-indigo);--border-divider:var(--hairline);--border-on-dark:var(--white-16);
--ring-popular:var(--citron);
--action-primary-bg:var(--citron);--action-primary-text:var(--indigo-ink);--action-primary-bg-hover:#C9F52F;
--action-secondary-bg:transparent;--action-secondary-text:var(--white);--action-secondary-border:var(--white-16);
--action-dark-bg:var(--indigo-ink);--action-dark-text:var(--white);--focus-ring:var(--indigo-electric);
--font-display:'Bricolage Grotesque','Archivo','Helvetica Neue',Arial,sans-serif;
--font-body:'Instrument Sans','Helvetica Neue',Arial,sans-serif;
--font-size-hero:clamp(36px,5.6vw,64px);--font-size-h1:clamp(32px,4.6vw,52px);
--font-size-h2:clamp(28px,3.6vw,40px);--font-size-h3:clamp(22px,2.2vw,26px);
--font-size-h4:20px;--font-size-lead:20px;--font-size-body:17px;--font-size-small:15px;
--font-size-eyebrow:13px;--font-size-price:44px;
--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--weight-black:800;
--leading-display:1.05;--leading-heading:1.15;--leading-body:1.7;--leading-tight:1.4;
--tracking-display:-0.02em;--tracking-eyebrow:0.08em;
--measure-body:68ch;--measure-legal:720px;
--space-1:8px;--space-2:16px;--space-3:24px;--space-4:32px;--space-5:48px;--space-6:64px;--space-7:96px;
--section-y:96px;--section-y-mobile:56px;--container:1180px;--container-narrow:860px;
--nav-height:76px;--gutter:24px;
--radius-card:16px;--radius-button:12px;--radius-input:8px;--radius-pill:999px;
--radius-tile:20px;--radius-media:16px;--aspect-screenshot:12/5;
--shadow-soft:0 8px 30px rgba(20,22,52,.08);--shadow-raised:0 18px 50px rgba(20,22,52,.12);
--hero-glow:radial-gradient(60% 60% at 70% 30%,rgba(90,92,240,.45) 0%,rgba(90,92,240,0) 70%);
--veil-photo:linear-gradient(rgba(20,22,52,.72),rgba(20,22,52,.72));--grain-opacity:.05;
--duration-fast:120ms;--duration:150ms;--duration-slow:240ms;
--ease:ease;--ease-out:cubic-bezier(.2,.6,.2,1);--lift-hover:-2px;--ticker-duration:38s;
}
@media screen and (max-width:900px){:root{--section-y:var(--section-y-mobile)}}

/* Grid utilities. Every track is minmax(0,1fr), never bare 1fr: a bare fr is
   minmax(auto,1fr), so one long unbreakable string steals width from its sibling. */
.pmw-grid-2,.pmw-grid-3,.pmw-grid-4,.pmw-split,.pmw-split-wide,.pmw-footer-grid,.pmw-hero-grid{display:grid;min-width:0}
.pmw-grid-2>*,.pmw-grid-3>*,.pmw-grid-4>*,.pmw-split>*,.pmw-split-wide>*,.pmw-footer-grid>*,.pmw-hero-grid>*{min-width:0}
.pmw-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.pmw-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.pmw-grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.pmw-split{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}
.pmw-split-wide{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}
.pmw-footer-grid{grid-template-columns:minmax(0,1.4fr) repeat(3,minmax(0,1fr))}
.pmw-hero-grid{grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}
@media screen and (max-width:1040px){
.pmw-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
.pmw-hero-grid,.pmw-grid-2,.pmw-split,.pmw-split-wide{grid-template-columns:minmax(0,1fr)}}
@media screen and (max-width:900px){
.pmw-grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}
.pmw-footer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media screen and (max-width:640px){
.pmw-grid-2,.pmw-grid-3,.pmw-grid-4,.pmw-footer-grid{grid-template-columns:minmax(0,1fr)}}

::selection{background:var(--citron);color:var(--indigo-ink)}
:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}

/* ---------- Global nav (Theme Builder header, layout 14) ---------- */
.pmw-nav{position:fixed;top:0;left:0;right:0;z-index:9999;height:var(--nav-height);
display:flex;align-items:center;padding:0 var(--gutter);background:transparent;
border-bottom:1px solid transparent;
transition:background var(--duration-slow) var(--ease),border-color var(--duration-slow) var(--ease)}
.pmw-nav.is-scrolled{background:rgba(255,255,255,.92);
backdrop-filter:saturate(140%) blur(12px);-webkit-backdrop-filter:saturate(140%) blur(12px);
border-bottom-color:var(--border-card)}
.pmw-nav-inner{display:flex;align-items:center;gap:var(--space-4);width:100%;
max-width:var(--container);margin:0 auto;min-width:0}
.pmw-lockup{display:inline-flex;align-items:center;gap:10px;text-decoration:none;
font-family:var(--font-display);font-size:19px;letter-spacing:var(--tracking-display);
line-height:1.1;color:var(--white);min-width:0;flex-shrink:1}
.pmw-nav.is-scrolled .pmw-lockup{color:var(--midnight)}
.pmw-mark{width:32px;height:32px;border-radius:12px;flex:0 0 auto;display:block}
/* The <wbr> between the two halves is the only break opportunity: two adjacent
   spans do not create one, so the name would otherwise be one unbreakable run. */
.pmw-wm-a{font-weight:800;white-space:nowrap}
.pmw-wm-b{font-weight:400;white-space:nowrap}
.pmw-nav-links{display:flex;gap:var(--space-3);margin-left:auto;min-width:0}
.pmw-nav-link{font-family:var(--font-body);font-size:15px;font-weight:500;
text-decoration:none;padding:6px 2px;white-space:nowrap;color:var(--white);
border-bottom:2px solid transparent}
.pmw-nav.is-scrolled .pmw-nav-link{color:var(--midnight)}
.pmw-nav-link:hover{border-bottom-color:currentColor;text-decoration:none}
.pmw-nav-link.is-active{color:var(--citron);border-bottom-color:currentColor}
.pmw-nav.is-scrolled .pmw-nav-link.is-active{color:var(--indigo-electric)}
.pmw-btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-body);
font-weight:500;border-radius:var(--radius-button);border:1px solid transparent;
text-decoration:none;cursor:pointer;
transition:background var(--duration) var(--ease),color var(--duration) var(--ease)}
.pmw-btn:hover{text-decoration:none}
.pmw-btn-primary{background:var(--action-primary-bg);color:var(--action-primary-text)}
.pmw-btn-primary:hover{background:var(--action-primary-bg-hover);color:var(--action-primary-text)}
.pmw-btn-sm{font-size:14px;padding:9px 16px}
.pmw-btn-lg{font-size:16px;padding:16px 28px}
.pmw-burger{display:none;background:none;border:0;padding:6px;cursor:pointer;
margin-left:auto;color:var(--white);line-height:0}
.pmw-nav.is-scrolled .pmw-burger{color:var(--midnight)}
.pmw-burger .pmw-ico-x{display:none}
.pmw-burger.is-open .pmw-ico-menu{display:none}
.pmw-burger.is-open .pmw-ico-x{display:block}
.pmw-overlay{display:none}
/* Media queries MUST keep the space after "and" or browsers ignore them (§11). */
@media screen and (max-width:1040px){
.pmw-nav-links{display:none}
.pmw-nav-cta{display:none}
.pmw-burger{display:block}
.pmw-overlay{position:fixed;inset:var(--nav-height) 0 auto;z-index:9998;
box-sizing:border-box;background:var(--surface-page);
border-bottom:1px solid var(--border-card);box-shadow:var(--shadow-soft);
padding:var(--space-4) var(--gutter) var(--space-5);
grid-template-columns:minmax(0,1fr);gap:var(--space-2)}
.pmw-overlay.is-open{display:grid}
.pmw-ov-link{font-family:var(--font-display);font-weight:700;font-size:24px;
letter-spacing:-.01em;text-decoration:none;color:var(--midnight);padding:10px 0;
border-bottom:1px solid var(--border-divider)}
.pmw-ov-link.is-active{color:var(--indigo-electric)}
.pmw-ov-cta{justify-content:center;margin-top:var(--space-2)}
}
body.pmw-nav-open{overflow:hidden}
/* Pages whose first section is NOT a dark hero need to clear the fixed nav. */
.pmw-below-nav{padding-top:var(--nav-height)}

/* Skip link. Divi wraps the text module, so lift the whole wrapper out of flow
   or it reserves height above the fixed nav. */
.pmw-skip-wrap{position:absolute!important;top:0;left:0;width:0;height:0;
margin:0!important;padding:0!important;overflow:visible;z-index:10000}
.pmw-skip-wrap .et_pb_text_inner p{margin:0}
.pmw-skip{position:absolute;left:-9999px;top:0;white-space:nowrap;
background:var(--citron);color:var(--indigo-ink);padding:10px 16px;
border-radius:var(--radius-button);font-family:var(--font-body);font-size:15px;
font-weight:500;text-decoration:none}
.pmw-skip:focus{left:12px;top:12px}

/* Transparent-nav white text only reads over a dark hero. Every page in this
   design has one, but any page that does not needs this modifier or the whole
   lockup and link row goes white-on-white and vanishes (playbook s8). */
.pmw-nav--light .pmw-lockup,
.pmw-nav--light .pmw-nav-link,
.pmw-nav--light .pmw-burger{color:var(--midnight)}
.pmw-nav--light .pmw-nav-link.is-active{color:var(--indigo-electric)}

/* ---------- Global footer (Theme Builder footer, layout 16) ---------- */
.pmw-footer{background:var(--surface-footer);color:var(--text-on-dark-muted);
padding:var(--space-6) var(--gutter) var(--space-4);
font-family:var(--font-body);font-size:var(--font-size-body);line-height:var(--leading-body)}
.pmw-footer-inner{max-width:var(--container);margin:0 auto}
.pmw-footer-grid{gap:var(--space-5)}
.pmw-footer-lockup{display:inline-flex;align-items:center;gap:10px;text-decoration:none;
font-family:var(--font-display);font-size:22px;letter-spacing:var(--tracking-display);
line-height:1.1;color:var(--white);min-width:0}
.pmw-footer-mark{width:37px;height:37px;border-radius:14px;flex:0 0 auto;display:block}
.pmw-footer-blurb{margin:var(--space-3) 0 0;font-size:15px;line-height:1.7;max-width:34ch}
.pmw-footer-h{font-size:13px;font-weight:500;letter-spacing:var(--tracking-eyebrow);
text-transform:uppercase;color:var(--white);margin:0 0 var(--space-2)}
.pmw-footer-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.pmw-footer-list a{font-size:15px;color:var(--text-on-dark-muted);text-decoration:none}
.pmw-footer-list a:hover{color:var(--white);text-decoration:underline;text-underline-offset:3px}
.pmw-footer-legal{border-top:1px solid var(--border-on-dark);margin-top:var(--space-5);
padding-top:var(--space-3);font-size:13px;line-height:1.7;max-width:100ch}

/* The footer section carries the dark background natively; the legal block is a
   native text module, so it needs its own colour rather than inheriting. */
.pmw-footer-legal,
.pmw-footer-legal p{color:var(--text-on-dark-muted)!important;font-size:13px;line-height:1.7;margin:0}
.pmw-footer-legal{border-top:1px solid var(--border-on-dark);padding-top:var(--space-3);
margin-top:var(--space-5)!important;max-width:100ch}
.pmw-footer-grid{gap:var(--space-5)}

/* ---------- Dark hero. Fully native: glow + grain are pure CSS, so no code
   module is needed and the H1 stays a real editable heading module. ---------- */
.pmw-hero{position:relative;overflow:hidden;background:var(--surface-dark)}
.pmw-hero::before{content:'';position:absolute;inset:0;pointer-events:none;
background:var(--hero-glow)}
.pmw-hero::after{content:'';position:absolute;inset:0;pointer-events:none;
opacity:var(--grain-opacity);
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>")}
.pmw-hero .et_pb_row{position:relative;z-index:1}

.pmw-eyebrow,.pmw-eyebrow p{color:#A9AAFF!important;font-family:var(--font-body);
font-size:var(--font-size-eyebrow);font-weight:500;letter-spacing:var(--tracking-eyebrow);
text-transform:uppercase;margin:0 0 var(--space-2)!important}
.pmw-h1,.pmw-h1 h1{font-family:var(--font-display)!important;font-weight:800!important;
font-size:var(--font-size-hero)!important;line-height:var(--leading-display)!important;
letter-spacing:var(--tracking-display)!important;color:var(--white)!important;
margin:0 0 var(--space-3)!important;max-width:20ch}
.pmw-lead,.pmw-lead p{color:var(--text-on-dark-muted)!important;
font-size:var(--font-size-lead)!important;line-height:1.6!important;
max-width:58ch;margin:0 0 var(--space-4)!important}
.pmw-ticks,.pmw-ticks ul{list-style:none;margin:var(--space-4) 0 0!important;padding:0!important}
.pmw-ticks li{display:flex;gap:10px;align-items:flex-start;color:var(--white)!important;
font-size:15px;line-height:1.55;margin:0 0 10px!important;padding:0!important}
.pmw-ticks li::before{content:'';flex:0 0 auto;width:17px;height:17px;margin-top:3px;
background-color:var(--citron);
-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat;
mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat}
@media screen and (max-width:900px){.pmw-ticks{display:block}}

/* Divi button override (playbook s21). Divi's own .et_pb_button rules are more
   specific than a bare class, so the label kept Divi's default link blue even
   though the Citron background applied. Target a.et_pb_button.<class> and set
   background-COLOR explicitly (not the background shorthand), plus kill the
   pseudo-element arrow. */
a.et_pb_button.pmw-btn-primary,
a.et_pb_button.pmw-btn-primary:hover{
background-color:var(--action-primary-bg)!important;
color:var(--action-primary-text)!important;
border:none!important;border-radius:var(--radius-button)!important;
font-family:var(--font-body)!important;font-weight:500!important;
padding:16px 28px!important;line-height:1.2!important;
transition:background-color var(--duration) var(--ease)!important}
a.et_pb_button.pmw-btn-primary:hover{background-color:var(--action-primary-bg-hover)!important}
a.et_pb_button.pmw-btn-primary::after,
a.et_pb_button.pmw-btn-primary::before{content:none!important;display:none!important}
a.et_pb_button.pmw-btn-lg{font-size:16px!important}

/* Divi's global ul styling adds discs and indent inside code modules, and beats a
   bare .pmw-footer-list{list-style:none}. Same specificity fight as the buttons. */
ul.pmw-footer-list,
ul.pmw-footer-list li{list-style:none!important;list-style-type:none!important}
ul.pmw-footer-list{padding-left:0!important;margin-left:0!important}
ul.pmw-footer-list li::marker{content:''!important}
ul.pmw-footer-list li{padding-left:0!important;margin-left:0!important}

/* ================= Section furniture ================= */
.pmw-eyebrow-l,.pmw-eyebrow-l p{color:var(--text-eyebrow)!important;font-family:var(--font-body);
font-size:var(--font-size-eyebrow);font-weight:500;letter-spacing:var(--tracking-eyebrow);
text-transform:uppercase;margin:0 0 var(--space-2)!important}
.pmw-h2,.pmw-h2 h2{font-family:var(--font-display)!important;font-weight:700!important;
font-size:var(--font-size-h2)!important;line-height:var(--leading-heading)!important;
letter-spacing:var(--tracking-display)!important;color:var(--text-heading)!important;
margin:0!important;max-width:760px}
.pmw-h2-d,.pmw-h2-d h2{color:var(--white)!important}
.pmw-sub,.pmw-sub p{font-size:var(--font-size-lead)!important;line-height:1.6!important;
color:var(--text-body)!important;max-width:760px;margin:var(--space-2) 0 var(--space-5)!important}
.pmw-sub-d,.pmw-sub-d p{color:var(--text-on-dark-muted)!important}

/* ================= Ticker =================
   Six copies animating to -16.666667%: two copies at -50% leaves a blank band on
   a wide monitor once one copy is narrower than the viewport (playbook s21). */
@keyframes pmw-ticker{from{transform:translateX(0)}to{transform:translateX(-16.666667%)}}
.pmw-ticker{background:var(--surface-dark);border-top:1px solid var(--border-on-dark);
border-bottom:1px solid var(--border-on-dark);overflow:hidden;padding:18px 0}
.pmw-ticker-track{display:flex;width:max-content;
animation:pmw-ticker var(--ticker-duration) linear infinite;
font-family:var(--font-body);font-size:15px;font-weight:500;color:var(--white)}
.pmw-ticker-run{display:inline-flex;white-space:nowrap}
.pmw-ticker-run span{display:inline-flex;align-items:center;white-space:nowrap}
.pmw-ticker-sep{color:var(--citron);padding:0 18px}
@media (prefers-reduced-motion:reduce){.pmw-ticker-track{animation:none}}

/* ================= Cards ================= */
.pmw-card{background:var(--surface-card);border:1px solid var(--border-card);
border-radius:var(--radius-card);padding:var(--space-4);box-shadow:var(--shadow-soft);
transition:transform var(--duration) var(--ease)}
.pmw-card:hover{transform:translateY(var(--lift-hover))}
.pmw-card-flat{box-shadow:none}
.pmw-card h3{font-family:var(--font-display);font-weight:700;font-size:20px;
letter-spacing:-.01em;color:var(--text-heading);margin:var(--space-2) 0 8px}
.pmw-card p{margin:0;font-size:16px;line-height:1.65;color:var(--text-body)}
.pmw-ico{display:block;width:26px;height:26px;background-color:var(--indigo-electric)}
.pmw-grid-3,.pmw-grid-2{gap:var(--space-3)}

/* ================= Tick list on light ================= */
ul.pmw-tick-list{list-style:none!important;margin:0!important;padding:0!important;display:grid;gap:var(--space-2)}
ul.pmw-tick-list li{display:flex;gap:10px;align-items:flex-start;font-size:15px;
line-height:1.55;color:var(--text-body);margin:0!important;padding:0!important;
list-style:none!important}
ul.pmw-tick-list li::marker{content:''!important}
ul.pmw-tick-list li::before{content:'';flex:0 0 auto;width:17px;height:17px;margin-top:3px;
background-color:var(--indigo-electric);
-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat;
mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat}

/* ================= Cost comparison ================= */
.pmw-cost{background:var(--surface-card);border:1px solid var(--border-card);
border-radius:var(--radius-card);padding:var(--space-4);box-shadow:var(--shadow-soft);min-width:0}
.pmw-cost-row{margin-bottom:var(--space-3)}
.pmw-cost-head{display:flex;flex-wrap:wrap;justify-content:space-between;
align-items:baseline;gap:4px var(--space-3);margin-bottom:10px}
.pmw-cost-head span{font-size:15px;color:var(--text-body);min-width:0;overflow-wrap:anywhere}
.pmw-cost-head b{font-family:var(--font-display);font-weight:700;font-size:22px;
letter-spacing:-.01em;color:var(--text-heading);min-width:0;overflow-wrap:anywhere}
.pmw-cost-bar{height:14px;border-radius:var(--radius-pill);background:var(--border-card)}
.pmw-cost-fill{height:100%;border-radius:var(--radius-pill)}
.pmw-cost-note{margin:var(--space-2) 0 0;font-size:15px;color:var(--text-body)}

/* ================= Packages ================= */
.pmw-pkgs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-3);
align-items:stretch;padding-top:var(--space-2)}
@media screen and (max-width:980px){.pmw-pkgs{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media screen and (max-width:600px){.pmw-pkgs{grid-template-columns:minmax(0,1fr)}}
.pmw-pkg{position:relative;display:flex;flex-direction:column;min-width:0;
background:var(--surface-card);border:1px solid var(--border-card);
border-radius:var(--radius-card);padding:var(--space-4);box-shadow:var(--shadow-soft)}
.pmw-pkg--pop{border:2px solid var(--ring-popular);box-shadow:var(--shadow-raised);
transform:translateY(-12px);padding-top:var(--space-5)}
.pmw-pkg-badge{position:absolute;top:-14px;left:var(--space-4);background:var(--citron);
color:var(--indigo-ink);font-family:var(--font-body);font-size:13px;font-weight:500;
padding:5px 14px;border-radius:var(--radius-pill)}
.pmw-pkg-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-h3);
letter-spacing:-.01em;color:var(--text-heading)}
.pmw-pkg-strap{font-size:15px;color:var(--text-body);margin-top:2px}
.pmw-pkg-price{display:flex;align-items:flex-end;flex-wrap:wrap;gap:4px 8px;min-width:0;
margin:var(--space-3) 0 2px}
.pmw-pkg-price b{font-family:var(--font-display);font-weight:800;line-height:1;
font-size:clamp(34px,3.4vw,var(--font-size-price));letter-spacing:var(--tracking-display);
color:var(--text-heading)}
.pmw-pkg-price i{font-style:normal;font-size:15px;color:var(--text-body);
padding-bottom:4px;white-space:nowrap}
.pmw-pkg-pages{font-size:15px;font-weight:500;color:var(--indigo-electric)}
.pmw-pkg-best{font-size:15px;line-height:1.6;color:var(--text-body);margin:var(--space-3) 0 0}
.pmw-pkg-rule{border:0;border-top:1px solid var(--border-divider);margin:var(--space-3) 0}
.pmw-pkg-spacer{flex:1;min-height:var(--space-3)}
.pmw-pkg-foot{font-size:13px;font-style:italic;color:var(--text-body);
margin-top:var(--space-2);text-align:center}
.pmw-btn-dark{background:var(--action-dark-bg);color:var(--action-dark-text)}
.pmw-btn-dark:hover{background:#1D204A;color:var(--action-dark-text)}
.pmw-btn-full{width:100%;justify-content:center;margin-top:var(--space-3)}
.pmw-billing{font-size:13px;line-height:1.65;font-style:italic;color:var(--text-body);
max-width:900px;margin:var(--space-5) auto 0;text-align:center}

/* ================= Steps ================= */
ol.pmw-steps{list-style:none!important;margin:0!important;padding:0!important;display:grid;
grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4)}
@media screen and (max-width:900px){ol.pmw-steps{grid-template-columns:minmax(0,1fr)}}
ol.pmw-steps li{list-style:none!important;margin:0!important;padding:var(--space-3) 0 0!important;
border-top:1px solid var(--border-divider)}
ol.pmw-steps li::marker{content:''!important}
.pmw-step-n{font-family:var(--font-display);font-weight:800;font-size:20px;line-height:1;
letter-spacing:-.02em;color:var(--indigo-electric);margin-bottom:10px}
ol.pmw-steps h3{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-h4);
letter-spacing:0;color:var(--text-heading);margin:0 0 8px}
ol.pmw-steps p{margin:0;font-size:16px;line-height:1.65;color:var(--text-body)}

/* ================= FAQ =================
   Native <details>/<summary>: accessible, keyboard-operable, zero JS, and it
   costs nothing on page load. */
.pmw-faq{border-top:1px solid var(--border-divider)}
.pmw-faq details{border-bottom:1px solid var(--border-divider)}
.pmw-faq summary{list-style:none;cursor:pointer;display:flex;gap:var(--space-3);
align-items:center;justify-content:space-between;padding:var(--space-3) 0;
font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.01em;
color:var(--text-heading)}
.pmw-faq summary::-webkit-details-marker{display:none}
.pmw-faq summary::after{content:'+';font-family:var(--font-body);font-size:24px;
font-weight:400;line-height:1;color:var(--indigo-electric);flex:0 0 auto}
.pmw-faq details[open] summary::after{content:'\2212'}
.pmw-faq p{margin:0 0 var(--space-3);max-width:70ch;font-size:16px;line-height:1.7;
color:var(--text-body)}

/* ================= Sister brands ================= */
a.pmw-brand{display:block;text-decoration:none;background:var(--surface-card);
border:1px solid var(--border-card);border-radius:var(--radius-card);
padding:var(--space-4);box-shadow:var(--shadow-soft);
transition:transform var(--duration) var(--ease)}
a.pmw-brand:hover{transform:translateY(var(--lift-hover));text-decoration:none}
.pmw-brand-d{font-family:var(--font-display);font-weight:800;letter-spacing:-.02em;
font-size:clamp(17px,1.8vw,21px);color:var(--text-heading);overflow-wrap:anywhere}
a.pmw-brand p{margin:var(--space-2) 0 var(--space-3);font-size:15px;line-height:1.6;
color:var(--text-body)}
.pmw-brand-go{display:inline-flex;align-items:center;gap:8px;font-size:15px;
font-weight:500;color:var(--indigo-electric)}

/* ================= Closing CTA band ================= */
.pmw-cta{position:relative;overflow:hidden;background:var(--surface-dark)}
.pmw-cta::before{content:'';position:absolute;inset:0;pointer-events:none;
background:var(--hero-glow);opacity:.7}
.pmw-cta .et_pb_row{position:relative;z-index:1}
.pmw-center,.pmw-center p{text-align:center}
.pmw-btnrow{display:flex;gap:var(--space-2);justify-content:center;flex-wrap:wrap;
margin-top:var(--space-4)}
.pmw-btn-ghost{background:transparent;color:var(--white);
border:1px solid var(--action-secondary-border)}
.pmw-btn-ghost:hover{background:var(--white-08);border-color:var(--white-64);color:var(--white)}
.pmw-note{font-size:14px;line-height:1.6;color:var(--text-body);
margin:var(--space-3) 0 0;max-width:84ch}

/* Separator as a pseudo-element keeps the six duplicated runs small in markup. */
.pmw-ticker-run span::after{content:'\2726';color:var(--citron);padding:0 18px}

/* Bar widths/colours as classes: inline style="" is rejected by divi-set-content
   unless allow_inline_styles is opted into, which we deliberately do not do. */
.pmw-cost-fill--agency{width:100%;background:var(--indigo-ink)}
.pmw-cost-fill--ours{width:9%;background:var(--citron)}
.pmw-prose{font-size:17px;line-height:1.7;color:var(--text-body);margin:0}
.pmw-prose,.pmw-prose p{font-size:17px!important;line-height:1.7!important;color:var(--text-body)!important}

/* Centred CTA band: the max-width on headings/sub would otherwise keep the block
   left-aligned even with text-align:center (playbook s6). */
.pmw-center.pmw-h2,.pmw-center.pmw-h2 h2,
.pmw-center.pmw-sub,.pmw-center.pmw-sub p{margin-left:auto!important;margin-right:auto!important;
text-align:center!important}
.pmw-cta .pmw-sub,.pmw-cta .pmw-sub p{margin-bottom:0!important}

/* ================= Media tiles / demo cards =================
   aspect-ratio + explicit width/height on the img reserves the box before the
   file lands, so lazy-loaded rows below the fold do not cause CLS (s10/s14). */
.pmw-media{position:relative;aspect-ratio:12/5;overflow:hidden;background:var(--mist);
border-bottom:1px solid var(--border-card)}
.pmw-media img{width:100%;height:100%;object-fit:cover;display:block}
a.pmw-tile,a.pmw-demo{display:block;text-decoration:none;background:var(--surface-card);
border:1px solid var(--border-card);border-radius:var(--radius-card);overflow:hidden;
transition:transform var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
a.pmw-demo{box-shadow:var(--shadow-soft)}
a.pmw-tile:hover,a.pmw-demo:hover{transform:translateY(var(--lift-hover));
box-shadow:var(--shadow-soft);text-decoration:none}
.pmw-tile-body{padding:var(--space-3)}
.pmw-tile-body h3{font-family:var(--font-display);font-weight:700;font-size:18px;
letter-spacing:-.01em;color:var(--text-heading);margin:0 0 6px}
.pmw-tile-body p{margin:0;font-size:15px;line-height:1.55;color:var(--text-body)}
.pmw-demo-label{font-family:var(--font-body);font-size:13px;font-weight:500;
letter-spacing:var(--tracking-eyebrow);text-transform:uppercase;color:var(--indigo-electric)}
.pmw-tile-body h3.pmw-demo-title{font-size:20px;margin:8px 0 4px}
.pmw-demo-go,.pmw-link{display:inline-flex;align-items:center;gap:8px;
font-size:15px;font-weight:500;color:var(--indigo-electric);text-decoration:none}
.pmw-demo-go{margin-top:var(--space-3)}
.pmw-link{margin-top:var(--space-3)}

/* ================= HERO: photography behind the Indigo Ink veil =================
   Brand rule: a FLAT 72% veil, not a gradient scrim. Layer order is top-first in
   the shorthand, so the electric glow sits over the veil, which sits over the photo. */
.pmw-hero{background-image:url(/wp-content/uploads/2026/08/hero-trades.jpg);
background-size:cover;background-position:center 42%;background-repeat:no-repeat}
.pmw-hero::before{background:
radial-gradient(58% 58% at 74% 26%,rgba(90,92,240,.42) 0%,rgba(90,92,240,0) 68%),
linear-gradient(rgba(20,22,52,.72),rgba(20,22,52,.72))}

/* ================= Softer page surface =================
   Pure #FFF full-bleed is what reads cheap, especially butting straight up against
   the dark hero. Keep pure white for CARDS so they lift, and drop the page surface
   to a cool off-white. Divi paints .et_pb_section white by default, so reset it and
   let the body colour through (no !important: the per-module rules that set the
   mist and dark sections are more specific and must still win). */
:root{--surface-page:#FAFBFD}
body{background-color:var(--surface-page)}
.et_pb_section{background-color:transparent}

/* Soft riser under a dark section instead of a hard edge into light. */
.pmw-after-dark{background:
linear-gradient(180deg,rgba(20,22,52,.055) 0%,rgba(20,22,52,0) 260px),
var(--surface-page)}

/* Cards now sit on off-white, so give them a touch more lift. */
.pmw-card,.pmw-pkg,.pmw-cost,a.pmw-tile,a.pmw-demo,a.pmw-brand{background:var(--white)}

/* ---- Hero veil, corrected ----
   A flat 72% film assumes a photo with reasonable density. hero-trades is very
   high-key (pale wood, blown-out windows) so 72% left it washed grey-lilac and
   broke the "every hero is dark" rule. Instead MULTIPLY the photo into Indigo Ink
   first: that crushes the highlights into brand hue and keeps shadow texture,
   which is what makes a brand photo hero read expensive rather than hazy. A
   lighter flat film then guarantees text contrast. Net density is well past 72%,
   deliberately - the brand's stated goal is a dark hero with readable white text. */
.pmw-hero{background-image:
linear-gradient(rgba(20,22,52,.62),rgba(20,22,52,.62)),
url(/wp-content/uploads/2026/08/hero-trades.jpg);
background-blend-mode:multiply,normal;
background-size:cover;background-position:center 42%;background-repeat:no-repeat}
.pmw-hero::before{background:
radial-gradient(56% 56% at 76% 24%,rgba(90,92,240,.40) 0%,rgba(90,92,240,0) 66%),
linear-gradient(102deg,rgba(20,22,52,.55) 0%,rgba(20,22,52,.34) 58%,rgba(20,22,52,.30) 100%)}
/* Settle the join into the ticker so the photo does not stop dead on a hard line. */
.pmw-hero::after{background-image:
linear-gradient(to bottom,rgba(20,22,52,0) 78%,rgba(20,22,52,.55) 100%),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>");
opacity:1}

/* Correction: the rule above wrongly forced the grain layer to opacity 1. Grain
   must stay at 5% (--grain-opacity); the bottom fade belongs in ::before. */
.pmw-hero::after{background-image:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>");
opacity:var(--grain-opacity)}
.pmw-hero::before{background:
linear-gradient(to bottom,rgba(20,22,52,0) 76%,rgba(20,22,52,.45) 100%),
radial-gradient(56% 56% at 76% 24%,rgba(90,92,240,.40) 0%,rgba(90,92,240,0) 66%),
linear-gradient(102deg,rgba(20,22,52,.55) 0%,rgba(20,22,52,.34) 58%,rgba(20,22,52,.30) 100%)}

/* Second pass: .62 multiply still left the centre-right saw/background pale, so the
   hero read grey rather than Indigo Ink and the left-dark/right-light split looked
   uneven. Crush the highlights harder and flatten the directional falloff so the
   whole band is dark; the photo becomes texture, not subject. */
.pmw-hero{background-image:
linear-gradient(rgba(20,22,52,.74),rgba(20,22,52,.74)),
url(/wp-content/uploads/2026/08/hero-trades.jpg);
background-blend-mode:multiply,normal}
.pmw-hero::before{background:
linear-gradient(to bottom,rgba(20,22,52,0) 74%,rgba(20,22,52,.5) 100%),
radial-gradient(58% 58% at 76% 26%,rgba(90,92,240,.46) 0%,rgba(90,92,240,0) 68%),
linear-gradient(102deg,rgba(20,22,52,.52) 0%,rgba(20,22,52,.44) 60%,rgba(20,22,52,.42) 100%)}

/* ---- Hero photo swap: hero-trades -> hero-builder ----
   hero-trades put a carpenter (and his face) in the left third, directly under the
   H1. hero-builder is a wide site shot: plain left third (concrete, materials,
   fence) with both subjects centre and right, so it sits under left-aligned copy
   properly and reads as depth rather than a competing picture. */
.pmw-hero{background-image:
linear-gradient(rgba(20,22,52,.74),rgba(20,22,52,.74)),
url(/wp-content/uploads/2026/08/hero-builder.jpg);
background-blend-mode:multiply,normal;
background-position:center 46%}

/* ---- Mobile ----
   cover on a narrow, tall viewport zooms hard into the centre, and at desktop film
   density nothing was legible. Pan right so the wheelbarrow/building side shows
   instead of a blank patch of concrete, and lift the film ~8% so the photo actually
   registers. Text still sits on Indigo Ink well past contrast requirements. */
@media screen and (max-width:900px){
.pmw-hero{background-image:
linear-gradient(rgba(20,22,52,.66),rgba(20,22,52,.66)),
url(/wp-content/uploads/2026/08/hero-builder.jpg);
background-position:62% center}
.pmw-hero::before{background:
linear-gradient(to bottom,rgba(20,22,52,0) 74%,rgba(20,22,52,.5) 100%),
radial-gradient(70% 50% at 70% 18%,rgba(90,92,240,.40) 0%,rgba(90,92,240,0) 70%),
linear-gradient(180deg,rgba(20,22,52,.34) 0%,rgba(20,22,52,.42) 100%)}
}

/* ---- Dark -> light transition, third pass ----
   Previous attempt (.055 over 260px) was far too weak. The problem is a ~90 point
   luminance jump at a hard horizontal line; a near-invisible tint cannot soften
   that. This carries a clearly visible cool grey down over 520px in four stops so
   the eye is led out of the dark rather than hitting a cut, plus a soft shadow
   under the ticker so the dark band reads as sitting ABOVE the light section
   instead of being butt-joined to it. */
.pmw-after-dark{background:
linear-gradient(180deg,
rgba(20,22,52,.17) 0px,
rgba(20,22,52,.09) 150px,
rgba(20,22,52,.032) 330px,
rgba(20,22,52,0) 520px),
var(--surface-page)}
.pmw-ticker{box-shadow:0 26px 46px -14px rgba(12,14,34,.55)}

/* ================= HERO: sculpted light field, no photography =================
   Photography is dropped (client call, 2026-08-07). A dark hero looks flat when it
   is a single flat fill with a timid glow - not because it lacks a photo. Four
   things give it dimension:
     1. the BASE is a diagonal tonal shift, not one flat colour
     2. a strong, clearly-placed light source off-centre top-right
     3. a cool counter-pool bottom-left so the field is not lit from one side only
     4. a vignette pulling the corners down, which focuses the copy
   Layer order is top-first: bottom fade > primary light > counter-pool > vignette,
   so the vignette sits UNDER the glow and cannot mute it. */
.pmw-hero{background-image:none;
background:linear-gradient(158deg,#1B1E46 0%,#141634 48%,#0F1126 100%)}
.pmw-hero::before{background:
linear-gradient(to bottom,rgba(15,17,38,0) 68%,rgba(15,17,38,.8) 100%),
radial-gradient(62% 74% at 78% 18%,rgba(105,107,255,.62) 0%,rgba(90,92,240,.20) 44%,rgba(90,92,240,0) 74%),
radial-gradient(52% 62% at 10% 94%,rgba(76,62,205,.30) 0%,rgba(76,62,205,0) 72%),
radial-gradient(118% 88% at 46% 44%,rgba(8,9,26,0) 38%,rgba(8,9,26,.52) 100%)}
/* A touch more grain now there is no photo texture doing that job. */
.pmw-hero::after{opacity:.075}

@media screen and (max-width:900px){
.pmw-hero{background:linear-gradient(168deg,#1B1E46 0%,#141634 52%,#0F1126 100%)}
.pmw-hero::before{background:
linear-gradient(to bottom,rgba(15,17,38,0) 66%,rgba(15,17,38,.8) 100%),
radial-gradient(96% 46% at 78% 12%,rgba(105,107,255,.60) 0%,rgba(90,92,240,.18) 46%,rgba(90,92,240,0) 76%),
radial-gradient(90% 40% at 8% 96%,rgba(76,62,205,.28) 0%,rgba(76,62,205,0) 74%),
radial-gradient(130% 80% at 50% 46%,rgba(8,9,26,0) 40%,rgba(8,9,26,.5) 100%)}
}

/* ================= Nav: frost to INDIGO, never white =================
   The scrolled nav was rgba(255,255,255,.92) with the link colour flipping to
   Midnight. A white bar dropping in over a dark site is the harsh, cheap-looking
   moment. Frost to Indigo Ink instead: the bar stays part of the brand, the type
   never flips colour, and there is no white flash at the scroll threshold. */
.pmw-nav.is-scrolled{
background-color:rgba(17,19,44,.86);
backdrop-filter:saturate(160%) blur(16px);
-webkit-backdrop-filter:saturate(160%) blur(16px);
border-bottom-color:rgba(255,255,255,.10);
box-shadow:0 12px 34px -14px rgba(8,9,26,.65)}

/* Type stays white in BOTH states - no colour switch at the threshold. */
.pmw-nav.is-scrolled .pmw-lockup,
.pmw-nav.is-scrolled .pmw-nav-link,
.pmw-nav.is-scrolled .pmw-burger{color:var(--white)}
.pmw-nav.is-scrolled .pmw-nav-link.is-active{color:var(--citron)}

/* Mobile overlay follows the same rule rather than being a white sheet. */
@media screen and (max-width:1040px){
.pmw-overlay{background:rgba(17,19,44,.97);
backdrop-filter:saturate(160%) blur(16px);
-webkit-backdrop-filter:saturate(160%) blur(16px);
border-bottom-color:rgba(255,255,255,.12);
box-shadow:0 18px 40px -16px rgba(8,9,26,.7)}
.pmw-ov-link{color:var(--white);border-bottom-color:rgba(255,255,255,.12)}
.pmw-ov-link.is-active{color:var(--citron)}
}

/* ================= HERO: ambient light drift =================
   Restructured into three layers so the light can move on its own:
     section  = static base gradient
     ::before = the LIGHT only, oversized and slowly drifting (GPU transform)
     ::after  = vignette + bottom fade + grain, static, painted over the light
   Grain opacity now lives inside the SVG (opacity='.09') rather than on the
   element, so ::after can carry the vignette at full strength in the same layer.

   Deliberately NOT scroll-linked: background-attachment:fixed is janky and ignored
   on iOS, and a JS parallax would mean adding a code module to a hero that is
   currently 100% native. A 34s ease-in-out alternate drift reads as alive without
   anything moving frame-to-frame that you are trying to read. Nothing that holds
   text moves at all. */
.pmw-hero::before{inset:-16%;
background:
radial-gradient(62% 74% at 78% 18%,rgba(105,107,255,.62) 0%,rgba(90,92,240,.20) 44%,rgba(90,92,240,0) 74%),
radial-gradient(52% 62% at 10% 94%,rgba(76,62,205,.32) 0%,rgba(76,62,205,0) 72%);
will-change:transform;
animation:pmw-hero-drift 34s ease-in-out infinite alternate}

@keyframes pmw-hero-drift{
from{transform:translate3d(0,0,0) scale(1)}
to{transform:translate3d(-3.2%,2.2%,0) scale(1.09)}}

.pmw-hero::after{inset:0;opacity:1;
background:
linear-gradient(to bottom,rgba(15,17,38,0) 68%,rgba(15,17,38,.8) 100%),
radial-gradient(118% 88% at 46% 44%,rgba(8,9,26,0) 38%,rgba(8,9,26,.52) 100%),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='.09'/></svg>")}

@media screen and (max-width:900px){
.pmw-hero::before{inset:-18%;
background:
radial-gradient(96% 46% at 78% 12%,rgba(105,107,255,.60) 0%,rgba(90,92,240,.18) 46%,rgba(90,92,240,0) 76%),
radial-gradient(90% 40% at 8% 96%,rgba(76,62,205,.30) 0%,rgba(76,62,205,0) 74%)}
.pmw-hero::after{background:
linear-gradient(to bottom,rgba(15,17,38,0) 66%,rgba(15,17,38,.8) 100%),
radial-gradient(130% 80% at 50% 46%,rgba(8,9,26,0) 40%,rgba(8,9,26,.5) 100%),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='.09'/></svg>")}
}

/* Non-negotiable: anyone who has asked their OS to reduce motion gets none. */
@media (prefers-reduced-motion:reduce){
.pmw-hero::before{animation:none}
.pmw-ticker-track{animation:none}
}

/* ================= Full-bleed photo band =================
   The contained card grids never give the "full width image" moment. This is a
   true edge-to-edge photo with the copy centred over it.

   Veil is only ~58% here, NOT the 72%+ the hero needed: hero-cafe is naturally
   dark and moody, so the photo stays visible instead of going murky. The rule is
   veil to the photo's density, not to a fixed number. A light-weighted linear
   gradient behind the text block keeps contrast where the words actually are. */
.pmw-band{position:relative;overflow:hidden;
--pmw-band-img:url(/wp-content/uploads/2026/08/hero-cafe.jpg);
background-image:
linear-gradient(rgba(20,22,52,.58),rgba(20,22,52,.58)),
var(--pmw-band-img);
background-blend-mode:multiply,normal;
background-size:cover;background-position:center 55%}
.pmw-band::before{content:'';position:absolute;inset:0;pointer-events:none;
background:
radial-gradient(75% 120% at 50% 50%,rgba(20,22,52,.42) 0%,rgba(20,22,52,0) 72%),
linear-gradient(to bottom,rgba(20,22,52,.5) 0%,rgba(20,22,52,.12) 40%,rgba(20,22,52,.5) 100%)}
.pmw-band::after{content:'';position:absolute;inset:0;pointer-events:none;
opacity:var(--grain-opacity);
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>")}
.pmw-band .et_pb_row{position:relative;z-index:1}
@media screen and (max-width:900px){
.pmw-band{background-position:58% center}
}

/* Centre the eyebrow inside the band (the .pmw-center rules only covered h2/sub). */
.pmw-center.pmw-eyebrow,.pmw-center.pmw-eyebrow p{text-align:center!important}
/* The band now carries the Industries heading, so the grid that follows it has no
   header of its own - pull it up so the two read as one block. */
.pmw-band + .et_pb_section{padding-top:64px!important}

/* ================= Nav: glass capsule + pill active state =================
   Per the CleaningPro reference. The existing <nav class='pmw-nav-links'> becomes
   the capsule, so no markup change is needed.

   Active pill is WHITE, not Citron: Citron discipline allows primary buttons, the
   price pill, the popular ring and ONE highlight per page. The Get started button
   is already the Citron moment up here - a Citron nav pill as well would be two. */
.pmw-nav-links{gap:4px;
background:rgba(255,255,255,.07);
border:1px solid rgba(255,255,255,.13);
border-radius:var(--radius-pill);
padding:5px 6px;
backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.pmw-nav.is-scrolled .pmw-nav-links{background:rgba(255,255,255,.09);
border-color:rgba(255,255,255,.16)}

.pmw-nav-link{padding:8px 15px;border-radius:var(--radius-pill);border-bottom:0;
transition:background var(--duration) var(--ease),color var(--duration) var(--ease)}
.pmw-nav-link:hover{background:rgba(255,255,255,.11);border-bottom:0;text-decoration:none}
.pmw-nav-link.is-active,
.pmw-nav.is-scrolled .pmw-nav-link.is-active{
background:var(--white);color:var(--midnight);border-bottom:0}
.pmw-nav-link.is-active:hover{background:var(--white);color:var(--midnight)}

/* Arrow on the nav CTA, as per the reference. Added with a mask rather than by
   re-injecting nav.html. Note this does NOT clash with the a.et_pb_button::after
   rule that kills Divi's own button arrow - that one is scoped to Divi modules. */
.pmw-nav-cta .pmw-btn::after{content:'';width:14px;height:14px;flex:0 0 auto;
background-color:currentColor;
-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12h14'/><path d='m12 5 7 7-7 7'/></svg>") center/contain no-repeat;
mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12h14'/><path d='m12 5 7 7-7 7'/></svg>") center/contain no-repeat}

/* ================= Second band: solid sculpted indigo, no photo =================
   Reviewed hero-trades, -electrician, -builder, -bookkeeper, -event-suppliers:
   this Pexels set is almost all HIGH-KEY and WARM. hero-cafe is the only genuinely
   dark, cool-friendly frame and it is already band 1. Forcing another would repeat
   the washed-out hero problem, so this band uses the same sculpted light field as
   the hero instead. Still gives the dark break and the colour pop; just no photo.
   If a photo is wanted here, the real fix is sourcing dark, cool-toned imagery -
   already an outstanding item in the design system readme. */
.pmw-band-solid{position:relative;overflow:hidden;
background:linear-gradient(158deg,#1B1E46 0%,#141634 48%,#0F1126 100%)}
.pmw-band-solid::before{content:'';position:absolute;inset:0;pointer-events:none;
background:
radial-gradient(58% 70% at 22% 16%,rgba(105,107,255,.50) 0%,rgba(90,92,240,.16) 46%,rgba(90,92,240,0) 74%),
radial-gradient(52% 62% at 88% 96%,rgba(76,62,205,.28) 0%,rgba(76,62,205,0) 72%),
radial-gradient(116% 86% at 52% 46%,rgba(8,9,26,0) 40%,rgba(8,9,26,.5) 100%)}
.pmw-band-solid::after{content:'';position:absolute;inset:0;pointer-events:none;
opacity:.075;
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>")}
.pmw-band-solid .et_pb_row{position:relative;z-index:1}

/* What's included: six-item grid on dark */
ul.pmw-incl{list-style:none!important;margin:var(--space-5) 0 0!important;padding:0!important;
display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3) var(--space-4)}
@media screen and (max-width:900px){ul.pmw-incl{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media screen and (max-width:600px){ul.pmw-incl{grid-template-columns:minmax(0,1fr)}}
ul.pmw-incl li{list-style:none!important;margin:0!important;padding:0!important;
display:flex;gap:12px;align-items:flex-start}
ul.pmw-incl li::marker{content:''!important}
ul.pmw-incl li::before{content:'';flex:0 0 auto;width:18px;height:18px;margin-top:3px;
background-color:var(--citron);
-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat;
mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>") center/contain no-repeat}
ul.pmw-incl b{display:block;color:var(--white);font-weight:500;font-size:16px;margin-bottom:2px}
ul.pmw-incl span{display:block;color:var(--text-on-dark-muted);font-size:15px;line-height:1.55}

/* ================= Blog strip (native divi/blog module) =================
   Scoped to Divi's own .et_pb_blog per s11, NOT a custom class. Divi 5's grid does
   not collapse responsively on its own, so the responsive grid is added here - and
   every media query keeps the space after "and" or browsers ignore it. */
.et_pb_blog .et_pb_blog_posts{display:grid!important;
grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:28px!important}
.et_pb_blog .et_pb_post{width:auto!important;margin:0!important;float:none!important;
background:var(--white);border:1px solid var(--border-card);
border-radius:var(--radius-card);overflow:hidden;box-shadow:var(--shadow-soft);
transition:transform var(--duration) var(--ease)}
.et_pb_blog .et_pb_post:hover{transform:translateY(var(--lift-hover))}
.et_pb_blog .et_pb_image_container{margin:0!important;display:block}
.et_pb_blog .et_pb_image_container img{width:100%;height:200px;object-fit:cover;display:block}
.et_pb_blog .entry-title{font-family:var(--font-display)!important;font-weight:700!important;
font-size:20px!important;letter-spacing:-.01em;line-height:1.3;
padding:var(--space-3) var(--space-3) 0!important;margin:0!important}
.et_pb_blog .entry-title a{color:var(--text-heading)!important;text-decoration:none}
.et_pb_blog .post-content{padding:8px var(--space-3) var(--space-3)!important}
.et_pb_blog .post-content p{font-size:15px;line-height:1.6;color:var(--text-body);margin:0 0 var(--space-2)}
.et_pb_blog .more-link,.et_pb_blog .post-content a.more-link{
display:inline-flex;align-items:center;gap:8px;font-family:var(--font-body);
font-size:15px;font-weight:500;color:var(--indigo-electric)!important;text-decoration:none}
@media screen and (max-width:980px){
.et_pb_blog .et_pb_blog_posts{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media screen and (max-width:600px){
.et_pb_blog .et_pb_blog_posts{grid-template-columns:minmax(0,1fr)!important}}

/* With 0 published posts, Divi's blog module renders a literal
   <h1 class="not-found-title">No Results Found</h1> - which both looks broken and
   gives the page a SECOND H1 (a real SEO fault on a page that must have exactly
   one). Hide the whole section while it is empty. Using :has() means it comes back
   automatically the moment the first post is published - no manual change needed.
   In a browser without :has() it simply shows as it does now, which is no worse. */
.et_pb_section:has(.et_pb_blog .not-found-title){display:none!important}

/* The .pmw-nav-link.is-active pill rule was present and last in the sheet but was
   not winning the cascade. Prefixing the element type (a.pmw-nav-link.is-active,
   0-2-1) settles it - the same fix pattern as the Divi button and list overrides.
   Do not reach for !important on a bare class here; specificity is the problem. */
a.pmw-nav-link.is-active,
.pmw-nav.is-scrolled a.pmw-nav-link.is-active{
background:var(--white)!important;
color:var(--midnight)!important;
border-bottom:0!important}
a.pmw-nav-link.is-active:hover,
.pmw-nav.is-scrolled a.pmw-nav-link.is-active:hover{
background:var(--white)!important;color:var(--midnight)!important}

/* Still not applying with element-prefixed selector AND !important - because the
   declaration used the `background:` SHORTHAND. This is exactly the s21 Divi button
   trap: use the explicit background-color LONGHAND. Same lesson, second time. */
a.pmw-nav-link.is-active,
.pmw-nav.is-scrolled a.pmw-nav-link.is-active,
a.pmw-nav-link.is-active:hover,
.pmw-nav.is-scrolled a.pmw-nav-link.is-active:hover{
background-color:#FFFFFF!important;
color:#161A33!important}

/* ---- What's included: 9 items with icon tiles (CleaningPro reference) ----
   Replaces the earlier 6-item plain tick list. Icon tiles are Electric Indigo,
   not Citron: Citron is already spent on the primary buttons and the popular ring. */
ul.pmw-incl{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-5) var(--space-4);align-items:start}
ul.pmw-incl li::before{content:none!important}
ul.pmw-incl li{gap:16px;align-items:flex-start}
/* Specificity: `ul.pmw-incl span` (0,1,2) outranks `.pmw-incl-ico` (0,1,0) and was
   forcing display:block, which pinned every glyph to the tile's top-left corner.
   Every icon rule below is qualified to beat it. See process doc SS21. */
ul.pmw-incl li span.pmw-incl-ico{flex:0 0 46px;width:46px;height:46px;border-radius:14px;
display:inline-flex;align-items:center;justify-content:center;
background:linear-gradient(180deg,rgba(126,128,255,.38) 0%,rgba(90,92,240,.26) 100%);
border:1px solid rgba(150,152,255,.30);
box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 10px 22px -14px rgba(6,7,22,.95);
color:#FFFFFF}
ul.pmw-incl li span.pmw-incl-ico svg{width:21px;height:21px;display:block;flex:0 0 auto;
stroke-width:1.9;color:inherit}
ul.pmw-incl li span.pmw-incl-t{display:block;min-width:0;
color:var(--text-on-dark-muted);font-size:15px;line-height:1.55}
ul.pmw-incl .pmw-incl-t b{display:block;color:var(--white);font-family:var(--font-body);
font-weight:500;font-size:17px;line-height:1.3;margin:2px 0 4px}
@media screen and (max-width:980px){ul.pmw-incl{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media screen and (max-width:600px){ul.pmw-incl{grid-template-columns:minmax(0,1fr)}}

/* ==========================================================================
   24. BLOG POST TEMPLATE  (Theme Builder template 75 -> body layout 76)
   Posts previously inherited the Home page's full-bleed post-content body,
   so they rendered as unstyled, edge-to-edge text under an overlapping nav.
   Sections here are .pmw-art-head (indigo) and .pmw-art-body (white).
   Every rule is qualified past Divi's own selectors -- see process doc SS21.
   ========================================================================== */

/* ---- Article head ------------------------------------------------------ */
.pmw-art-head{position:relative;overflow:hidden;
background:linear-gradient(158deg,#1B1E46 0%,#141634 52%,#0F1126 100%)}
.pmw-art-head::before{content:'';position:absolute;inset:-20% -10%;pointer-events:none;
background:radial-gradient(58% 70% at 82% 8%,rgba(105,107,255,.42) 0%,rgba(90,92,240,0) 72%),
radial-gradient(46% 58% at 6% 100%,rgba(76,62,205,.26) 0%,rgba(76,62,205,0) 74%)}
.pmw-art-head > .et_pb_row{position:relative;z-index:1}

.pmw-art-head .et_pb_post_title .entry-title,
.pmw-art-head h1.entry-title{color:var(--white)!important;
font-family:var(--font-display)!important;font-weight:var(--weight-bold)!important;
font-size:clamp(30px,4.4vw,50px)!important;line-height:1.12!important;
letter-spacing:var(--tracking-display)!important;margin:0 0 var(--space-3)!important;
padding:0!important;text-wrap:balance}

.pmw-art-head .et_pb_title_meta_container,
.pmw-art-head .et_pb_post_title .et_pb_title_meta_container{
color:var(--text-on-dark-muted)!important;font-family:var(--font-body)!important;
font-size:14px!important;letter-spacing:.02em;margin:0!important;padding:0!important}
.pmw-art-head .et_pb_title_meta_container a{color:var(--text-on-dark-muted)!important}

/* ---- Article body: readable measure + real typographic rhythm ---------- */
.pmw-art-body{background-color:#FFFFFF}
.pmw-art-body .et_pb_post_content{color:var(--text-body);
font-family:var(--font-body);font-size:18px;line-height:1.75}

.pmw-art-body .et_pb_post_content p{margin:0 0 1.15em;
font-size:18px;line-height:1.75;color:var(--text-body)}
.pmw-art-body .et_pb_post_content > p:first-child{font-size:20px;line-height:1.65;
color:var(--text-heading)}

.pmw-art-body .et_pb_post_content h2{font-family:var(--font-display);
font-weight:var(--weight-bold);font-size:clamp(24px,2.9vw,32px);line-height:1.2;
letter-spacing:var(--tracking-display);color:var(--text-heading);
margin:2em 0 .55em;padding:0;text-wrap:balance}
.pmw-art-body .et_pb_post_content h2:first-child{margin-top:0}
.pmw-art-body .et_pb_post_content h3{font-family:var(--font-body);
font-weight:var(--weight-semibold);font-size:21px;line-height:1.3;
color:var(--text-heading);margin:1.7em 0 .45em;padding:0}
.pmw-art-body .et_pb_post_content h4{font-family:var(--font-body);
font-weight:var(--weight-semibold);font-size:18px;color:var(--text-heading);
margin:1.5em 0 .4em;padding:0}

/* Divi strips list markers globally; restore them inside article copy only. */
.pmw-art-body .et_pb_post_content ul,
.pmw-art-body .et_pb_post_content ol{margin:0 0 1.3em;padding:0 0 0 1.35em}
.pmw-art-body .et_pb_post_content ul{list-style:disc outside}
.pmw-art-body .et_pb_post_content ol{list-style:decimal outside}
.pmw-art-body .et_pb_post_content li{list-style:inherit;display:list-item;
margin:0 0 .5em;padding:0;font-size:18px;line-height:1.7;color:var(--text-body)}
.pmw-art-body .et_pb_post_content li::marker{color:var(--indigo-electric)}
.pmw-art-body .et_pb_post_content li > ul,
.pmw-art-body .et_pb_post_content li > ol{margin:.5em 0 0}

.pmw-art-body .et_pb_post_content a{color:var(--text-link);
text-decoration:underline;text-underline-offset:3px;
text-decoration-thickness:1px;text-decoration-color:rgba(90,92,240,.42);
transition:color var(--duration-fast) var(--ease),
text-decoration-color var(--duration-fast) var(--ease)}
.pmw-art-body .et_pb_post_content a:hover{color:var(--text-link-hover);
text-decoration-color:currentColor}

.pmw-art-body .et_pb_post_content strong,
.pmw-art-body .et_pb_post_content b{font-weight:var(--weight-semibold);
color:var(--text-heading)}

.pmw-art-body .et_pb_post_content blockquote{margin:1.8em 0;
padding:var(--space-3) var(--space-4);border:0;
border-left:3px solid var(--indigo-electric);
background:var(--surface-wash);border-radius:0 var(--radius-tile) var(--radius-tile) 0;
font-size:19px;line-height:1.65;color:var(--text-heading);font-style:normal}
.pmw-art-body .et_pb_post_content blockquote p:last-child{margin-bottom:0}

.pmw-art-body .et_pb_post_content img{max-width:100%;height:auto;
border-radius:var(--radius-media);display:block;margin:1.6em 0}

.pmw-art-body .et_pb_post_content hr{border:0;height:1px;
background:var(--border-divider);margin:2.4em 0}

.pmw-art-body .et_pb_post_content table{width:100%;border-collapse:collapse;
margin:1.6em 0;font-size:16px}
.pmw-art-body .et_pb_post_content th,
.pmw-art-body .et_pb_post_content td{text-align:left;padding:12px 14px;
border-bottom:1px solid var(--border-divider)}
.pmw-art-body .et_pb_post_content th{font-weight:var(--weight-semibold);
color:var(--text-heading);background:var(--surface-wash)}

@media screen and (max-width:782px){
.pmw-art-head{padding-top:120px!important;padding-bottom:44px!important}
.pmw-art-body{padding-top:44px!important;padding-bottom:64px!important}
.pmw-art-body .et_pb_post_content p,
.pmw-art-body .et_pb_post_content li{font-size:17px}
.pmw-art-body .et_pb_post_content > p:first-child{font-size:18px}
}

/* Divi adds padding-bottom:1em to article paragraphs and list items, which
   doubles up with our margin and reads as a broken rhythm. Zero it here. */
.pmw-art-body .et_pb_post_content p,
.pmw-art-body .et_pb_post_content li,
.pmw-art-body .et_pb_post_content ul,
.pmw-art-body .et_pb_post_content ol{padding-bottom:0}
.pmw-art-body .et_pb_post_content h2{margin-top:1.55em}
.pmw-art-body .et_pb_post_content h2,
.pmw-art-body .et_pb_post_content h3,
.pmw-art-body .et_pb_post_content h4{padding-bottom:0}

/* Featured image as the article-head BACKGROUND (CleaningPro treatment), not an
   inline <img>. The per-post url arrives as --pmw-art-bg from pmw-brand.php.
   The veil is heavy enough to hold white text at AA over any photo in the set. */
.pmw-art-head{background-size:cover;background-position:center;
background-repeat:no-repeat;text-align:center}
.pmw-art-head:where(:not([style*='--pmw-art-bg'])){background-image:none}
.pmw-art-head{background-image:
linear-gradient(158deg,rgba(27,30,70,.90) 0%,rgba(20,22,52,.86) 52%,rgba(15,17,38,.92) 100%),
var(--pmw-art-bg,none)}
/* The sculpted light field sits above the photo but below the text. */
.pmw-art-head::before{opacity:.75}

.pmw-art-head .et_pb_title_container{max-width:820px;margin:0 auto}
.pmw-art-head .et_pb_post_title .entry-title,
.pmw-art-head h1.entry-title{text-align:center}
.pmw-art-head .et_pb_title_meta_container{text-align:center}
.pmw-art-head .et_pb_title_meta_container a:hover{color:var(--white)!important}

@media screen and (max-width:782px){
.pmw-art-head{background-position:50% 40%}
}

/* Divi sets text-align on the meta container from its own module stylesheet, which
   loads after brand.css, so the plain rule above loses. Match its specificity. */
.pmw-art-head .et_pb_post_title .et_pb_title_meta_container,
.pmw-art-head .et_pb_title_container .et_pb_title_meta_container{
text-align:center!important;
color:rgba(255,255,255,.86)!important}
.pmw-art-head .et_pb_title_meta_container a{color:rgba(255,255,255,.86)!important}

/* ==========================================================================
   25. INNER PAGE HERO + COMPARISON TABLE
   Every page except Home opens with .pmw-page-hero: the same indigo field as
   the article head, no photo, centred, padded to clear the fixed nav.
   ========================================================================== */
.pmw-page-hero{position:relative;overflow:hidden;text-align:center;
background:linear-gradient(158deg,#1B1E46 0%,#141634 52%,#0F1126 100%)}
.pmw-page-hero::before{content:'';position:absolute;inset:-20% -10%;pointer-events:none;
background:radial-gradient(58% 70% at 80% 10%,rgba(105,107,255,.50) 0%,rgba(90,92,240,0) 72%),
radial-gradient(46% 58% at 8% 100%,rgba(76,62,205,.30) 0%,rgba(76,62,205,0) 74%)}
.pmw-page-hero .et_pb_row{position:relative;z-index:1}
.pmw-page-hero .pmw-h1,.pmw-page-hero .pmw-h1 h1{max-width:16ch;margin-left:auto;margin-right:auto}
.pmw-page-hero.pmw-hero-wide .pmw-h1,
.pmw-page-hero.pmw-hero-wide .pmw-h1 h1{max-width:24ch}

/* Comparison table. Scrolls inside its own container on narrow screens so the
   page body never scrolls horizontally. */
.pmw-cmp-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;
border:1px solid var(--border-card);border-radius:var(--radius-card);background:var(--white)}
table.pmw-cmp{width:100%;min-width:720px;border-collapse:collapse;font-size:15px;text-align:left}
table.pmw-cmp th,table.pmw-cmp td{padding:14px 16px;border-bottom:1px solid var(--border-divider);
vertical-align:top;color:var(--text-body)}
table.pmw-cmp thead th{background:var(--surface-wash);color:var(--text-heading);
font-weight:var(--weight-semibold);font-size:14px;white-space:nowrap}
table.pmw-cmp tbody th{font-weight:var(--weight-semibold);color:var(--text-heading);white-space:nowrap}
table.pmw-cmp tbody tr:last-child th,table.pmw-cmp tbody tr:last-child td{border-bottom:0}
table.pmw-cmp .pmw-cmp-us{background:rgba(90,92,240,.05);color:var(--text-heading);
font-weight:var(--weight-medium)}
table.pmw-cmp thead th.pmw-cmp-us{background:rgba(90,92,240,.12)}

/* ==========================================================================
   26. LEGAL / LONG-FORM PAGE COPY (.pmw-legal)
   Terms and Privacy carry real document structure, so they need heading and
   list rules that .pmw-prose (paragraphs only) does not provide.
   ========================================================================== */
.pmw-legal{color:var(--text-body);font-size:17px;line-height:1.75;text-align:left}
.pmw-legal p{font-size:17px;line-height:1.75;color:var(--text-body);margin:0 0 1.1em;padding-bottom:0}
.pmw-legal h2{font-family:var(--font-display);font-weight:var(--weight-bold);
font-size:clamp(21px,2.3vw,27px);line-height:1.25;color:var(--text-heading);
margin:2em 0 .5em;padding-bottom:0;letter-spacing:var(--tracking-display)}
.pmw-legal h2:first-child{margin-top:0}
.pmw-legal h3{font-family:var(--font-body);font-weight:var(--weight-semibold);
font-size:18px;line-height:1.35;color:var(--text-heading);margin:1.6em 0 .4em;padding-bottom:0}
.pmw-legal ul,.pmw-legal ol{margin:0 0 1.2em;padding:0 0 0 1.35em}
.pmw-legal ul{list-style:disc outside}
.pmw-legal ol{list-style:decimal outside}
.pmw-legal li{display:list-item;list-style:inherit;margin:0 0 .45em;padding-bottom:0;
font-size:17px;line-height:1.7;color:var(--text-body)}
.pmw-legal li::marker{color:var(--indigo-electric)}
.pmw-legal a{color:var(--text-link);text-decoration:underline;text-underline-offset:3px}
.pmw-legal strong,.pmw-legal b{font-weight:var(--weight-semibold);color:var(--text-heading)}
.pmw-legal .pmw-legal-updated{font-size:14px;color:var(--text-body);
background:var(--surface-wash);border:1px solid var(--border-card);
border-radius:var(--radius-tile);padding:14px 16px;margin:0 0 var(--space-5)}

/* Industry page framing block: photo beside the framing paragraph. Gives the page
   a real <img> carrying the exact focus keyword as alt (SEO spec section 3), which
   a CSS background could not do, while still putting imagery high on the page. */
.pmw-split{gap:var(--space-5);align-items:center}
.pmw-split .pmw-media{aspect-ratio:3/2;border-radius:var(--radius-media);
box-shadow:var(--shadow-raised)}
.pmw-split-copy p{font-size:18px;line-height:1.7;color:var(--text-body);margin:0;padding-bottom:0}
@media screen and (max-width:900px){
.pmw-split .pmw-media{aspect-ratio:16/9}
}

/* The steps grid was built for the Home page's three steps. How It Works has
   four, so the fourth orphaned onto a second row. */
.pmw-steps.pmw-steps-4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media screen and (max-width:1100px){.pmw-steps.pmw-steps-4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media screen and (max-width:640px){.pmw-steps.pmw-steps-4{grid-template-columns:minmax(0,1fr)}}

/* pmw-page-hero H1 leading: at mobile sizes the display face's tall glyphs
   (the pound sign especially) collide with the descenders of the line above at
   1.12. Loosen it only where the H1 actually wraps to three or four lines. */
@media screen and (max-width:782px){
.pmw-page-hero .pmw-h1,
.pmw-page-hero .pmw-h1 h1{line-height:1.2!important;max-width:none}
.pmw-page-hero{padding-top:104px!important;padding-bottom:56px!important}
}

/* ==========================================================================
   27. LAYOUT FIXES (client review)
   ========================================================================== */

/* Divi emits per-section CSS (.et_pb_section_N, 0-1-0) AFTER brand.css, so a
   plain .pmw-cta background-color loses the cascade and the CTA rendered white:
   dark heading on white, and a white ghost button that was invisible. Qualifying
   with .et_pb_section takes it to 0-2-0 and wins without !important.
   The hero survived only because it sets background-IMAGE, which Divi never sets. */
/* Deeper than the pricing band (#141634) so the two never merge into one dark
   slab where they sit next to each other, and it steps naturally into the footer. */
.et_pb_section.pmw-cta{background-color:var(--surface-footer)}

/* Tick lists: the li was display:flex, so `<b>Label.</b> trailing text` became TWO
   flex items and rendered as two ragged columns. Block + absolutely positioned
   tick keeps the bold lead-in inline with its sentence. */
ul.pmw-tick-list li{display:block;position:relative;gap:0;
/* the base rule sets padding:0!important, so this has to match it */
padding:0 0 0 27px!important}
ul.pmw-tick-list li::before{position:absolute;left:0;top:4px;margin-top:0}
ul.pmw-tick-list li b{font-weight:var(--weight-semibold);color:var(--text-heading)}

/* Same shape on the on-dark tick list used in the hero. */
.pmw-ticks li{display:block;position:relative;padding:0 0 0 27px!important}
.pmw-ticks li::before{position:absolute;left:0;top:4px;margin-top:0}

/* Split copy had margin:0 on paragraphs, so multi-paragraph blocks ran together. */
.pmw-split-copy p{margin:0 0 1em}
.pmw-split-copy p:last-child{margin-bottom:0}

/* Contact form: the native Divi module ships grey boxes and a plain outlined
   button, which looked nothing like the rest of the site. Brand it here rather
   than in module settings so it stays in one place. */
.pmw-form .et_pb_contact_field{padding:0 0 var(--space-3) 0!important}
.pmw-form .et_pb_contact_field .et_pb_contact_field_options_wrapper{margin:0}
.pmw-form input.input,
.pmw-form textarea.et_pb_contact_message,
.pmw-form select{width:100%;background:var(--white)!important;
color:var(--text-heading)!important;font-family:var(--font-body)!important;
font-size:16px!important;line-height:1.5;padding:14px 16px!important;
border:1px solid var(--border-card)!important;border-radius:var(--radius-input)!important;
box-shadow:none!important;transition:border-color var(--duration-fast) var(--ease),
box-shadow var(--duration-fast) var(--ease)}
.pmw-form textarea.et_pb_contact_message{min-height:170px;resize:vertical}
.pmw-form input.input::placeholder,
.pmw-form textarea.et_pb_contact_message::placeholder{color:var(--text-body);opacity:.75}
.pmw-form input.input:focus,
.pmw-form textarea.et_pb_contact_message:focus{outline:none;
border-color:var(--indigo-electric)!important;
box-shadow:0 0 0 3px var(--indigo-electric-24)!important}

.pmw-form .et_pb_contact_right{display:flex;align-items:center;gap:10px;
margin:var(--space-2) 0 0;padding:0;float:none}
.pmw-form .et_pb_contact_captcha_question{color:var(--text-body);font-size:15px}
.pmw-form input.et_pb_contact_captcha{width:64px!important;text-align:center;
padding:12px 8px!important}

.pmw-form .et_pb_contact_submit,
.pmw-form button.et_pb_contact_submit{display:inline-flex;align-items:center;
justify-content:center;background-color:var(--action-primary-bg)!important;
color:var(--action-primary-text)!important;border:0!important;
font-family:var(--font-body)!important;font-weight:var(--weight-semibold)!important;
font-size:16px!important;padding:14px 26px!important;
border-radius:var(--radius-button)!important;cursor:pointer;
transition:background-color var(--duration-fast) var(--ease),transform var(--duration-fast) var(--ease)}
.pmw-form .et_pb_contact_submit:hover{background-color:var(--action-primary-bg-hover)!important;
transform:translateY(-1px)}
.pmw-form .et_pb_contact_submit::after{display:none!important}
.pmw-form .et-pb-contact-message{font-size:16px;line-height:1.6;color:var(--text-body)}
.pmw-form .et-pb-contact-message ul{list-style:disc outside;padding-left:1.2em}
@media screen and (max-width:640px){
.pmw-form .et_pb_contact_right{flex-wrap:wrap}
.pmw-form .et_pb_contact_submit{width:100%}
}

/* ==========================================================================
   28. HERO CENTRING + FORM POLISH
   ========================================================================== */

/* The H1 wrapper carries a max-width measure (16ch / 24ch) so long titles wrap
   nicely. Divi's per-module CSS then sets margin-left/right to 0, which pinned the
   whole block hard left inside a centred row: the H1 measured centre 509px against
   a row centre of 640px. The auto margins have to be forced. */
/* Inner-page heroes are centred, so the H1 takes auto margins. Home's hero is
   left-aligned: auto margins there centred the H1 inside the row and left it
   indented against the eyebrow, sub and tick list. Scope it to the centred hero. */
.pmw-page-hero .pmw-h1,
.pmw-page-hero .pmw-h1 h1{margin-left:auto!important;margin-right:auto!important}
.pmw-hero .pmw-h1,
.pmw-hero .pmw-h1 h1{margin-left:0!important;margin-right:0!important}

/* Same class of problem on the centred sub and eyebrow. */
.pmw-page-hero .pmw-sub,
.pmw-page-hero .pmw-eyebrow{margin-left:auto!important;margin-right:auto!important}

/* ---- Contact form ------------------------------------------------------ */
/* Fields were white-on-white with a hairline border and read as unfinished.
   A filled field on a white section is far easier to parse as an input. */
.pmw-form{margin-top:var(--space-5)}
.pmw-form input.input,
.pmw-form textarea.et_pb_contact_message{background:var(--surface-wash)!important;
border:1px solid var(--border-card)!important}
.pmw-form input.input:hover,
.pmw-form textarea.et_pb_contact_message:hover{border-color:#C9CBE6!important}
.pmw-form input.input:focus,
.pmw-form textarea.et_pb_contact_message:focus{background:var(--white)!important}

/* Divi floats the two half-width fields; make it a real grid so the gutters match
   the rest of the site and the message field spans properly. */
.pmw-form .et_pb_contact_form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
gap:0 var(--space-3)}
.pmw-form .et_pb_contact_field{float:none!important;width:auto!important;
margin:0!important;padding:0 0 var(--space-3) 0!important}
.pmw-form .et_pb_contact_field_last,
.pmw-form .et_pb_contact_field:nth-child(4),
.pmw-form .et_pb_contact_field.et_pb_contact_field_last{grid-column:1 / -1}
.pmw-form .et_pb_contact_right{grid-column:1 / -1;justify-content:flex-start;
border-top:1px solid var(--border-divider);padding-top:var(--space-4);margin-top:var(--space-2)}
.pmw-form p.et_pb_contact_field:has(textarea){grid-column:1 / -1}
@media screen and (max-width:640px){
.pmw-form .et_pb_contact_form{grid-template-columns:minmax(0,1fr)}
}

/* ==========================================================================
   29. DARK-BAND BILLING NOTE + MOBILE TABLE SCROLL HINT
   ========================================================================== */

/* The billing note was styled for a light section. Now that the pricing band is
   dark on every page, --text-body (#5A6178) on #141634 is close to unreadable. */
.pmw-band-solid .pmw-billing,
.pmw-band-solid .pmw-billing p{color:rgba(255,255,255,.72)!important}

/* Wide comparison tables scroll inside their own container, but on a phone there
   was nothing telling you that: the table just looked cut off. Hint line plus a
   fade on the right edge so the overflow is obvious. */
.pmw-cmp-outer{position:relative}
.pmw-cmp-hint{display:none}
@media screen and (max-width:900px){
.pmw-cmp-hint{display:flex;align-items:center;justify-content:center;gap:7px;
margin:0 0 12px;font-size:14px;font-weight:var(--weight-medium);
color:var(--text-body);text-align:center}
.pmw-cmp-hint svg{flex:0 0 auto;animation:pmw-nudge 1.8s ease-in-out infinite}
.pmw-cmp-outer::after{content:'';position:absolute;top:0;right:0;bottom:0;width:38px;
pointer-events:none;border-radius:0 var(--radius-card) var(--radius-card) 0;
background:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,.92))}
.pmw-band-solid .pmw-cmp-hint{color:rgba(255,255,255,.78)}
}
@keyframes pmw-nudge{0%,100%{transform:translateX(0)}50%{transform:translateX(4px)}}
@media (prefers-reduced-motion:reduce){.pmw-cmp-hint svg{animation:none}}

/* Divi gives no default vertical rhythm between modules, so a paragraph placed
   directly after a tick-list code module sat hard against the last bullet (0px).
   Anything following a code module needs its own top margin. */
.et_pb_code + .et_pb_text.pmw-prose,
.et_pb_code + .et_pb_text.pmw-note,
.et_pb_code + .et_pb_text.pmw-sub{margin-top:var(--space-5)!important}
@media screen and (max-width:782px){
.et_pb_code + .et_pb_text.pmw-prose,
.et_pb_code + .et_pb_text.pmw-note,
.et_pb_code + .et_pb_text.pmw-sub{margin-top:var(--space-4)!important}
}

/* ==========================================================================
   30. PER-PAGE BAND PHOTOS
   The full-bleed photo band is the treatment the client liked on Home, so the
   split (image beside text) sections were converted to it. One variable swaps
   the photo; the veil, contrast wash and grain are inherited from .pmw-band.
   ========================================================================== */
.pmw-band--builder{--pmw-band-img:url(/wp-content/uploads/2026/08/hero-builder.jpg)}
.pmw-band--trades{--pmw-band-img:url(/wp-content/uploads/2026/08/hero-trades.jpg)}
.pmw-band--desk{--pmw-band-img:url(/wp-content/uploads/2026/08/card-bookkeeper-desk.jpg)}
.pmw-band--shop{--pmw-band-img:url(/wp-content/uploads/2026/08/card-open-sign.jpg)}
.pmw-band--tradespeople{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-tradespeople.jpg)}
.pmw-band--consultants{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-consultants.jpg)}
.pmw-band--therapists{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-therapists.jpg)}
.pmw-band--coaches{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-coaches.jpg)}
.pmw-band--tutors{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-tutors.jpg)}
.pmw-band--trainers{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-personal-trainers.jpg)}
.pmw-band--cafes{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-cafes-and-takeaways.jpg)}
.pmw-band--shops{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-local-shops-v2.jpg)}
.pmw-band--mobile{--pmw-band-img:url(/wp-content/uploads/2026/08/industry-mobile-businesses-v3.jpg)}

/* Converted bands carry body prose rather than a single sub line, so give the
   paragraphs rhythm and hold the measure narrower than the row. */
/* Divi also applies padding-bottom:1em to p, which doubled the gap. */
.pmw-band .pmw-sub p{margin:0 0 .9em;padding-bottom:0}
.pmw-band .pmw-sub p:last-child{margin-bottom:0}


/* ==========================================================================
   31. COOKIE TABLES (.pmw-ck)
   The cookie policy lists each cookie, its purpose and its lifetime. Three
   narrow columns, so rather than scroll them sideways on a phone the rows
   stack into labelled blocks. Desktop keeps the comparison-table language.
   ========================================================================== */
.pmw-ck-wrap{margin:0 0 1.6em;border:1px solid var(--border-divider);border-radius:12px;overflow:hidden}
table.pmw-ck{width:100%;border-collapse:collapse;font-size:15px;text-align:left}
table.pmw-ck th,table.pmw-ck td{padding:12px 16px;border-bottom:1px solid var(--border-divider);
vertical-align:top;color:var(--text-body)}
table.pmw-ck thead th{background:var(--surface-wash);color:var(--text-heading);
font-weight:var(--weight-semibold);font-size:14px}
table.pmw-ck tbody th{font-weight:var(--weight-semibold);color:var(--text-heading);
font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px}
table.pmw-ck tbody tr:last-child th,table.pmw-ck tbody tr:last-child td{border-bottom:0}

@media (max-width:640px){
	table.pmw-ck thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
	table.pmw-ck tbody tr{display:block;border-bottom:1px solid var(--border-divider);padding:4px 0}
	table.pmw-ck tbody tr:last-child{border-bottom:0}
	table.pmw-ck th,table.pmw-ck td{display:block;border-bottom:0;padding:4px 16px}
	table.pmw-ck tbody th{padding-top:12px}
	table.pmw-ck tbody tr td:last-child{padding-bottom:12px;font-size:14px;color:var(--text-muted,var(--text-body))}
	table.pmw-ck tbody tr td:last-child::before{content:'Duration: ';font-weight:var(--weight-semibold)}
}


/* ==========================================================================
   32. CONTENT FIGURES (.pmw-figure)
   A real photo placed inside a text section, low on the page. Two jobs: it
   breaks up the long prose runs, and it restores the exact-keyword image alt
   that the band conversion took away (SEO spec rule 7) - a CSS background
   cannot carry alt text, an <img> can.
   ========================================================================== */
.pmw-figure{margin:0 0 var(--space-6);border-radius:16px;overflow:hidden;
line-height:0;background:var(--surface-wash);
box-shadow:0 1px 2px rgba(20,22,52,.06),0 12px 28px rgba(20,22,52,.10)}
.pmw-figure img{width:100%;height:auto;display:block;aspect-ratio:1400/620;object-fit:cover;
/* The article stylesheet gives post images their own margin and radius, which
   showed as a wash-coloured frame inside the figure. The figure owns both. */
margin:0!important;border-radius:0!important;box-shadow:none!important}

/* The figure sits above the eyebrow, so kill the code module's own gap and let
   the figure's margin do the spacing. */
.et_pb_code.pmw-figure-holder{margin-bottom:0!important}

@media (max-width:767px){
	.pmw-figure{border-radius:12px;margin-bottom:var(--space-5)}
}
/* In an article the figure needs air above it as well as below. */
.et_pb_post_content .pmw-figure,.pmw-art-body .pmw-figure{margin:var(--space-6) 0}


/* ==========================================================================
   33. ENQUIRY FORM ON THE DARK CTA (.pmw-form-d)
   The industry pages close with the form itself rather than a link to the
   contact page. Inputs stay light - highest contrast on the dark band, and it
   reads unmistakably as a form - but every piece of supporting text around
   them was set for a light background and had to be lifted.
   ========================================================================== */
.pmw-cta .pmw-form-d{margin-top:var(--space-5);text-align:left}
.pmw-cta .pmw-form-d .et_pb_contact_captcha_question,
.pmw-cta .pmw-form-d .et_pb_contact_right,
.pmw-cta .pmw-form-d label{color:rgba(255,255,255,.82)!important}
.pmw-cta .pmw-form-d .et-pb-contact-message{color:#FFFFFF}
/* The captcha row carries a light divider from the light-background form; on
   the dark band it read as a bright white rule. */
.pmw-cta .pmw-form-d .et_pb_contact_right{border-top:0!important;padding-top:0!important}
.pmw-cta .pmw-form-d .et-pb-contact-message ul{color:rgba(255,255,255,.88)}

/* Field borders need to read against the dark band, not the light page. */
.pmw-cta .pmw-form-d input.input,
.pmw-cta .pmw-form-d textarea.et_pb_contact_message,
.pmw-cta .pmw-form-d input.et_pb_contact_captcha{
background:rgba(255,255,255,.96)!important;border-color:rgba(255,255,255,.28)!important}
.pmw-cta .pmw-form-d input.input:hover,
.pmw-cta .pmw-form-d textarea.et_pb_contact_message:hover{border-color:rgba(255,255,255,.5)!important}
.pmw-cta .pmw-form-d input.input:focus,
.pmw-cta .pmw-form-d textarea.et_pb_contact_message:focus{
background:#FFFFFF!important;border-color:var(--action-primary-bg)!important}

/* The button row now sits below the form, so it reads as the secondary path. */
.pmw-cta .pmw-form-d + .et_pb_code .pmw-btnrow{margin-top:var(--space-5)}
/* The reused Contact-page line carries a link to Packages. --text-link is
   indigo-electric, which is near-invisible on the CTA's near-black ground, and
   Divi's fallback is its own default blue. Light tint of the brand indigo. */
.pmw-cta .pmw-sub a{color:#A8AAFF;text-decoration:underline;text-underline-offset:3px}
.pmw-cta .pmw-sub a:hover{color:var(--citron)}
/* CTA secondary row. The buttons were centred while the form above them is left
   aligned, so they floated in the middle of a lot of dark space with nothing
   tying them to anything. Hairline above, aligned to the form's left edge, and
   pulled closer so they read as a deliberate second option. */
.pmw-cta .pmw-form-d + .et_pb_code{
margin-top:var(--space-5)!important;padding-top:var(--space-5);
border-top:1px solid rgba(255,255,255,.12)}
.pmw-cta .pmw-form-d + .et_pb_code .pmw-btnrow{justify-content:center;margin-top:0}

@media (max-width:767px){
	.pmw-cta .pmw-form-d + .et_pb_code .pmw-btnrow{justify-content:center}
}
/* CTA secondary buttons need to look like buttons. Demoting them to ghost fixed
   the two-lime-buttons problem but --action-secondary-border is tuned for the
   lighter bands: on the CTA's near-black ground the outline all but vanished and
   the fill matched the section, so they stopped reading as controls at all.
   Visible outline plus a slight lift off the background, still clearly second
   to the lime submit. */
.pmw-cta .pmw-btn-ghost{
/* Outlined, not filled. Solid white was as loud as the primary; a translucent
   fill on its own just read as more navy. A defined edge gives it a button
   shape, the slight lift separates it from the section, and the smaller type
   keeps it below the lime submit in the pecking order. */
background:rgba(255,255,255,.10);
border:1px solid rgba(255,255,255,.55);
color:var(--white);
font-size:15px;
padding:14px 24px}
.pmw-cta .pmw-btn-ghost:hover{
background:rgba(255,255,255,.18);
border-color:var(--white);
color:var(--white)}

/* ===== 34. Further reading (single posts) =====
Sits inside the article body, so every rule that the article typography in
SS24 applies to lists and links has to be undone here, not merely overridden. */
.pmw-fr{
margin:56px 0 0!important;
padding:32px 0 0;
border-top:1px solid #e6e6ef}
.pmw-fr-h{
font-size:24px;
margin:0 0 20px!important}
.pmw-fr-grid{
list-style:none!important;
margin:0!important;
padding:0!important;
display:grid;
/* auto-fit, not repeat(3): a thin category leaves 2 related posts, and a
fixed 3 column grid would strand an empty cell. */
grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
gap:20px}
.pmw-fr-grid>li{
list-style:none!important;
margin:0!important;
padding:0!important}
.pmw-fr-grid>li::marker{content:""}
.pmw-fr-a{
display:flex;
flex-direction:column;
height:100%;
text-decoration:none!important;
color:var(--ink,#141634)!important;
background:#fff;
border:1px solid #e6e6ef;
border-radius:16px;
overflow:hidden;
transition:box-shadow .2s ease,transform .2s ease}
.pmw-fr-a:hover{
box-shadow:0 10px 28px rgba(20,22,52,.12);
transform:translateY(-2px)}
.pmw-fr-img{
display:block;
aspect-ratio:16/10;
background-size:cover;
background-position:center;
background-color:#ececf3}
.pmw-fr-t{
display:block;
font-weight:700;
font-size:17px;
line-height:1.35;
padding:16px 16px 0}
.pmw-fr-x{
display:block;
font-size:14px;
line-height:1.6;
color:#4a4a63;
padding:8px 16px 18px}
@media (prefers-reduced-motion:reduce){
.pmw-fr-a{transition:none}
.pmw-fr-a:hover{transform:none}}
@media (max-width:860px){
.pmw-fr-grid{grid-template-columns:1fr}
.pmw-fr-img{aspect-ratio:16/7}}

/* ===== 35. Post CTA (single posts) =====
Sits inside the article, so SS24 article typography governs its p margins and
link colours. Everything that matters is forced. */
.pmw-postcta{
margin:48px 0 0!important;
padding:28px;
background:var(--mist,#F4F5FB);
border:1px solid var(--border-indigo,#E2E4F3);
border-left:4px solid var(--indigo-electric,#5A5CF0);
border-radius:16px}
.pmw-postcta p{margin:0 0 18px!important;padding:0!important}
.pmw-postcta p:last-child{margin:0!important}
.pmw-postcta-t{
font-size:17px!important;
line-height:1.65!important;
color:var(--indigo-ink,#141634)!important}
.pmw-postcta-b{
display:flex;
flex-wrap:wrap;
align-items:center;
gap:14px 22px}
.pmw-postcta .pmw-btn{
font-size:15px;
padding:13px 24px;
text-decoration:none!important}
.pmw-postcta-link{
font-size:15px;
font-weight:500;
color:var(--indigo-electric,#5A5CF0)!important;
text-decoration:underline!important;
text-underline-offset:3px}
.pmw-postcta-link:hover{color:var(--indigo-ink,#141634)!important}
@media (max-width:600px){
.pmw-postcta{padding:22px 20px}
.pmw-postcta-b{gap:12px}
.pmw-postcta .pmw-btn{width:100%;justify-content:center}
.pmw-postcta-link{width:100%}}