/* ===== CMG header ===== */
.site-header{
  background:#fff;
  box-shadow:0 2px 16px rgba(28,52,98,.10);
  position:sticky; top:0; z-index:9999;
  display:flex; align-items:center; justify-content:space-between;
  gap:24px; padding:12px 32px; flex-wrap:wrap;
}
.admin-bar .site-header{ top:32px; }
.site-header .site-branding{ display:flex; align-items:center; }
.site-header img.custom-logo{
  max-height:62px; width:auto; height:auto; display:block;
}
.site-header .site-navigation ul.menu{
  display:flex; align-items:center; gap:6px;
  list-style:none; margin:0; padding:0; flex-wrap:wrap;
}
.site-header .site-navigation ul.menu > li > a{
  display:inline-block;
  font-family:Poppins, sans-serif;
  font-weight:600; font-size:15px; letter-spacing:.2px;
  color:#1B3461; text-decoration:none;
  padding:10px 14px; border-radius:60px;
  transition:color .2s ease, background .2s ease;
}
.site-header .site-navigation ul.menu > li > a:hover,
.site-header .site-navigation ul.menu > li.current-menu-item > a{
  color:#AD4E1C;
}
/* Book Online call-to-action pill */
.site-header .site-navigation ul.menu > li.cmg-book-cta > a{
  background:#EF7329; color:#fff; padding:12px 26px; margin-left:8px;
}
.site-header .site-navigation ul.menu > li.cmg-book-cta > a:hover{
  background:#1B3461; color:#fff;
}
@media(max-width:880px){
  .site-header{ padding:10px 18px; gap:12px; }
  .site-header img.custom-logo{ max-height:48px; }
  .site-header .site-navigation ul.menu > li > a{ padding:8px 10px; font-size:14px; }
  .site-header .site-navigation ul.menu > li.cmg-book-cta > a{ padding:10px 20px; }
}

/* Testimonial quotes should read as sentences, not Title Case */
.elementor-testimonial-content,
.elementor-widget-testimonial .elementor-testimonial-content{
  text-transform:none !important;
}


/* Gallery: centre a part-filled last row */
.elementor-widget-image-gallery .gallery{ text-align:center; }

/* Gallery: responsive columns (WP prints a fixed 3-col width) */
@media (max-width: 1024px){
  .elementor-widget-image-gallery .gallery-columns-3 .gallery-item{ width:50% !important; max-width:50% !important; }
}
@media (max-width: 600px){
  .elementor-widget-image-gallery .gallery-columns-3 .gallery-item{ width:100% !important; max-width:100% !important; }
}

/* Header logo lockup: mark left, strapline right, sitting above the nav tabs */
.site-header{ flex-direction:column !important; align-items:stretch !important; flex-wrap:nowrap !important; row-gap:10px !important; }
.site-branding{ align-self:flex-start !important; }
img.custom-logo{ max-height:88px !important; width:auto !important; height:auto !important; max-width:100% !important; }
.site-navigation{ width:100% !important; }
.site-header nav ul{ flex-wrap:wrap !important; justify-content:flex-start !important; align-items:center !important; gap:4px !important; width:100% !important; }
.site-header nav ul li:last-child{ margin-left:auto !important; }

/* --- Mobile / responsive (verified 320-1440px) --- */
html{ overflow-x:clip; }
@media (max-width:880px){
  .site-header{ padding:8px 12px !important; }
  img.custom-logo{ content:url('https://cmghp.co.uk/wp-content/uploads/2026/08/cmg-logo-horizontal-compact.png') !important; max-height:88px !important; }
  .site-header nav ul{ flex-wrap:nowrap !important; gap:0 !important; justify-content:space-between !important; }
  .site-header nav ul li:last-child{ margin-left:0 !important; }
  .site-header nav ul li a{ font-size:11.5px !important; padding-left:3px !important; padding-right:3px !important; white-space:nowrap !important; }
  .site-header nav ul li:last-child a{ padding:7px 9px !important; font-size:11.5px !important; }
  .e-tabs-menu-base{ flex-wrap:wrap !important; }
  .e-tab-base{ flex:0 1 auto !important; }
  .e-tab-base .e-paragraph-base, .e-tab-base span{ white-space:normal !important; }
  .elementor-element-59102c52{ min-height:330px !important; background-position:center 35% !important; }
}

/* Footer: theme default link colour was an off-brand pink (#CC3366) */
.site-footer a, footer a{ color:#1B3461 !important; text-decoration:none !important; font-weight:500 !important; }
.site-footer a:hover, footer a:hover{ color:#AD4E1C !important; }

/* Credentials line in the footer */
.cmg-creds{ font-family:Poppins,sans-serif; font-size:13px; color:#6B7A90; text-align:center; line-height:1.7; padding:6px 20px 0; }
.cmg-creds strong{ color:#1B3461; font-weight:600; }


/* ================= CMG COLOUR SYSTEM =================
   navy #1B3461 structure | orange #EF7228 actions | blue #2693CE accents
   pale #F2F8FC alternating surfaces
   ==================================================== */

/* --- one navy for headings, one grey for body --- */
.elementor-widget-heading .elementor-heading-title,
.elementor-widget-image-box .elementor-image-box-title,
.elementor-widget-icon-box .elementor-icon-box-title{ color:#1B3461 !important; }
.elementor-widget-text-editor, .elementor-widget-text-editor p,
.elementor-widget-image-box .elementor-image-box-description,
.elementor-widget-icon-box .elementor-icon-box-description{ color:#4A5A70 !important; }

/* --- heading hierarchy (every section heading used to be 65px) --- */
.elementor-widget-heading h1.elementor-heading-title{ font-size:64px !important; line-height:1.07 !important; letter-spacing:-1px !important; }
.elementor-widget-heading h2.elementor-heading-title{ font-size:44px !important; line-height:1.15 !important; letter-spacing:-.5px !important; }
.elementor-widget-heading h3.elementor-heading-title{ font-size:22px !important; line-height:1.3 !important; }

/* --- alternating surfaces: homepage --- */
.elementor-element-603cf9f8,            /* Our Services */
.elementor-element-46591b8d{            /* Customer reviews */
  background-color:transparent !important; background-image:var(--cmg-band-img) !important; padding-top:88px !important; padding-bottom:88px !important;
}
.elementor-element-64602dce{ padding-top:88px !important; padding-bottom:88px !important; }
.elementor-element-5e07416a{ padding-top:88px !important; padding-bottom:88px !important; }
.elementor-element-2be0334e{ padding-top:88px !important; padding-bottom:88px !important; }

/* --- the one dark section: Why Work With Us --- */
.elementor-element-1cc799fc{
  background-color:#1B3461 !important; padding-top:88px !important; padding-bottom:88px !important;
}
.elementor-element-1cc799fc .elementor-heading-title,
.elementor-element-1cc799fc .elementor-icon-box-title,
.elementor-element-1cc799fc .elementor-icon-box-title *{ color:#FFFFFF !important; }
.elementor-element-1cc799fc .elementor-icon-box-description,
.elementor-element-1cc799fc .elementor-widget-text-editor,
.elementor-element-1cc799fc p{ color:#C2D2E6 !important; }
.elementor-element-1cc799fc .elementor-icon i,
.elementor-element-1cc799fc .elementor-icon svg,
.elementor-element-1cc799fc .elementor-icon{ color:#7EC4EE !important; fill:#7EC4EE !important; }
.elementor-element-1cc799fc .elementor-divider-separator{ border-color:#EF7329 !important; }

/* --- About page surfaces --- */
.elementor-element-f8e9814{ background-color:transparent !important; background-image:var(--cmg-band-img) !important; }
.elementor-element-761672d3{ padding-top:88px !important; padding-bottom:88px !important; background-color:transparent !important; background-image:var(--cmg-band-img) !important; }
.elementor-element-771db64c{ padding-top:88px !important; }
@media (max-width:880px){ .elementor-element-771db64c{ padding-top:52px !important; } }

/* --- orange means clickable --- */
.elementor-widget-text-editor a{ color:#AD4E1C !important; font-weight:600; text-decoration:none; border-bottom:1px solid rgba(239,115,41,.35); }
.elementor-widget-text-editor a:hover{ border-bottom-color:#EF7329; }

/* --- blue accent on dividers --- */
.elementor-widget-divider .elementor-divider-separator{ border-top-color:#EF7329 !important; }

/* --- mobile: tighter rhythm, smaller headings --- */
@media (max-width:880px){
  .elementor-widget-heading h1.elementor-heading-title{ font-size:38px !important; letter-spacing:-.5px !important; }
  .elementor-widget-heading h2.elementor-heading-title{ font-size:29px !important; }
  .elementor-widget-heading h3.elementor-heading-title{ font-size:20px !important; }
  .elementor-element-603cf9f8, .elementor-element-46591b8d,
  .elementor-element-1cc799fc, .elementor-element-761672d3{
    padding-top:52px !important; padding-bottom:52px !important;
  }
  .elementor-element-64602dce, .elementor-element-5e07416a, .elementor-element-2be0334e{
    padding-top:52px !important; padding-bottom:52px !important;
  }
}


/* --- section rhythm: every section carried a 190px top margin, which is why the
       page felt loose and the colour bands floated. Padding does the spacing now. --- */
[data-elementor-type] > .e-con{ margin-top:0 !important; margin-bottom:0 !important; }
[data-elementor-type] > .e-con{ padding-top:88px; padding-bottom:88px; }
.elementor-element-54768fda{ padding-top:0 !important; padding-bottom:0 !important; }
.elementor-element-07814e2{ padding-top:0 !important; padding-bottom:0 !important; }

/* --- Why Work With Us: heading centred above a four-across row (was a lopsided
       two-column split with a large void on the left) --- */
.elementor-element-1cc799fc{ flex-direction:column !important; align-items:stretch !important; flex-wrap:nowrap !important; }
.elementor-element-53df3e94{ width:100% !important; }
.elementor-element-53df3e94 .elementor-heading-title{ text-align:center !important; }
.elementor-element-42ab0fd{ width:100% !important; flex-wrap:nowrap !important; gap:34px !important; margin-top:8px !important; }
.elementor-element-42ab0fd > .e-con{ flex:1 1 0 !important; width:auto !important; }
.elementor-element-1cc799fc .elementor-icon-box-wrapper{ text-align:center !important; }

@media (max-width:880px){
  [data-elementor-type] > .e-con{ padding-top:52px; padding-bottom:52px; }
  .elementor-element-42ab0fd{ flex-wrap:wrap !important; gap:30px 20px !important; }
  .elementor-element-42ab0fd > .e-con{ flex:1 1 44% !important; }
}


/* --- text-style buttons ("Learn More") read as links, so make them orange like every
       other clickable thing, and drop the underline --- */
.elementor-button-link.elementor-size-sm,
a.elementor-button-link{
  color:#AD4E1C !important; text-decoration:none !important; font-weight:600 !important;
  background-color:transparent !important; letter-spacing:.2px;
}
a.elementor-button-link:hover{ color:#D4611C !important; }

/* --- cards on the tinted sections get a surface of their own --- */
.elementor-element-603cf9f8 .elementor-widget-image-box{
  background:#fff; border:1px solid #E3E8EF; border-radius:16px; padding:26px 22px 22px;
  box-shadow:0 2px 12px rgba(28,52,98,.05);
}


/* --- carry the alternating rhythm onto Services, Gallery and Contact
       (home and About have their surfaces set explicitly above) --- */
body:not(.home):not(.page-id-32) [data-elementor-type] > .e-con:nth-child(even){
  background-color:transparent !important; background-image:var(--cmg-band-img) !important;
}

/* very small phones (320px): let the nav wrap rather than overflow */
@media (max-width:359px){
  .site-header nav ul{ flex-wrap:wrap !important; justify-content:center !important; row-gap:4px !important; }
  .site-header nav ul li a{ font-size:12px !important; padding-left:5px !important; padding-right:5px !important; }
}


/* --- Footer nav: was packing to the left edge and wrapping ragged (4 + 2) --- */
.site-footer{ padding:26px 20px !important; border-top:1px solid #E3E8EF; }
.site-footer nav, .site-footer .site-navigation{ width:100% !important; justify-content:center !important; }
.site-footer ul{
  width:100% !important; display:flex !important; flex-wrap:wrap !important;
  justify-content:center !important; align-items:center !important;
  gap:8px 20px !important; margin:0 !important; padding:0 !important;
}
.site-footer ul li{ margin:0 !important; }
.site-footer ul li a{ font-size:14px !important; }
@media (max-width:880px){
  .site-footer{ padding:22px 16px !important; }
  .site-footer ul{ gap:10px 16px !important; }
  .site-footer ul li a{ font-size:14px !important; }
}


/* --- Hero: headline was butting straight into the header on mobile --- */
@media (max-width:880px){
  .elementor-element-b3dbfd8{ padding-top:44px !important; padding-bottom:44px !important; }
}

/* --- Google rating badge: centre it wherever the hero text is centred --- */
@media (max-width:880px){
  .cmg-gbadge-wrap{ text-align:center !important; }
}

/* --- Service cards: equal height, whole card clickable, room under the heading --- */
.elementor-element-603cf9f8 .elementor-element-504061a3{ margin-bottom:46px !important; }
.elementor-element-750aab8a{ align-items:stretch !important; }
.elementor-element-750aab8a > .e-con{ display:flex !important; }
.elementor-element-603cf9f8 .elementor-widget-image-box{
  width:100%; display:flex; flex-direction:column;
  transition:box-shadow .2s ease, transform .2s ease, border-color .2s ease;
}
.elementor-element-603cf9f8 .elementor-widget-image-box .elementor-widget-container{ height:100%; }
.elementor-element-603cf9f8 .elementor-image-box-wrapper{
  height:100%; display:flex; flex-direction:column;
}
.elementor-element-603cf9f8 .elementor-image-box-content{ flex:1 1 auto; }
.elementor-element-603cf9f8 .elementor-widget-image-box:hover{
  box-shadow:0 10px 26px rgba(28,52,98,.12); transform:translateY(-3px); border-color:#CFE0EE;
}
.elementor-element-603cf9f8 .elementor-image-box-img a,
.elementor-element-603cf9f8 .elementor-image-box-title a{ text-decoration:none !important; }


/* --- Service cards as a grid so every card is identical in size, not just
       equal within its own row --- */
.elementor-element-750aab8a{
  display:grid !important;
  grid-template-columns:repeat(4,1fr) !important;
  grid-auto-rows:1fr !important;
  gap:24px !important;
  align-items:stretch !important;
}
.elementor-element-750aab8a > .e-con{ width:auto !important; height:100% !important; display:flex !important; }
.elementor-element-603cf9f8 .elementor-widget-image-box{ height:100% !important; }
.elementor-element-603cf9f8 .elementor-widget-image-box > .elementor-widget-container{ height:100% !important; display:flex; flex-direction:column; }
@media (max-width:880px){
  .elementor-element-750aab8a{ grid-template-columns:repeat(2,1fr) !important; gap:16px !important; }
  .elementor-element-603cf9f8 .elementor-element-504061a3{ margin-bottom:32px !important; }
}
@media (max-width:479px){
  .elementor-element-750aab8a{ grid-template-columns:1fr !important; }
}


/* --- About page carousel: full-bleed 375x500 was swallowing the phone screen.
       Inset it and cap the width so the photo sits as a tile, not a wall. --- */
@media (max-width:880px){
  .elementor-widget-image-carousel .swiper-slide{ display:flex !important; justify-content:center !important; }
  .elementor-widget-image-carousel .swiper-slide img{
    max-width:260px !important; width:auto !important; height:auto !important; margin:0 auto !important;
    border-radius:14px !important; box-shadow:0 4px 18px rgba(28,52,98,.10);
  }
  .elementor-widget-image-carousel .elementor-swiper-button{ transform:scale(.8); }
}
@media (max-width:379px){
  .elementor-widget-image-carousel .swiper-slide img{ max-width:230px !important; }
}


/* --- Mobile: centre every heading and its copy. Home and Gallery were already
       centred; About, Services and Contact were a mix of left and centre. --- */
@media (max-width:880px){
  .elementor-widget-heading .elementor-heading-title,
  .elementor-widget-text-editor,
  .elementor-widget-text-editor p,
  .elementor-widget-image-box .elementor-image-box-content,
  .elementor-widget-icon-box .elementor-icon-box-content{
    text-align:center !important;
  }
  .elementor-widget-divider{ text-align:center !important; }
  .elementor-widget-divider .elementor-divider{ justify-content:center !important; }
  .elementor-widget-button{ text-align:center !important; }
  .elementor-widget-button .elementor-button-wrapper{ text-align:center !important; }
  /* icon lists (contact details) read better centred too */
  .elementor-widget-icon-list .elementor-icon-list-items{ align-items:center !important; }
  .elementor-widget-icon-list .elementor-icon-list-item{ justify-content:center !important; }
}

@media (max-width:880px){
  .elementor-widget-icon-list .elementor-icon-list-item,
  .elementor-widget-icon-list .elementor-icon-list-text,
  .elementor-widget-icon-list .elementor-icon-list-item > a{
    text-align:center !important; justify-content:center !important; width:100% !important;
  }
}

@media (max-width:880px){
  .elementor-widget-testimonial,
  .elementor-widget-testimonial .elementor-testimonial-wrapper,
  .elementor-widget-testimonial .elementor-testimonial-content,
  .elementor-widget-testimonial .elementor-testimonial-meta,
  .elementor-widget-testimonial .elementor-testimonial-name,
  .elementor-widget-testimonial .elementor-testimonial-job{ text-align:center !important; }
  .elementor-widget-testimonial .elementor-testimonial-meta-inner{ justify-content:center !important; }
}


/* --- One content width everywhere. Sections were running at three different
       widths depending on the page: 990px, 1140px and 1425px. Backgrounds still
       go full-bleed; only the content is boxed. --- */
[data-elementor-type] > .e-con.e-con-boxed > .e-con-inner{ max-width:1140px !important; }
[data-elementor-type] > .e-con.e-con-full:not(.elementor-element-54768fda):not(.elementor-element-07814e2){
  padding-left:max(24px, calc((100% - 1140px) / 2)) !important;
  padding-right:max(24px, calc((100% - 1140px) / 2)) !important;
}
@media (max-width:479px){
  [data-elementor-type] > .e-con.e-con-full:not(.elementor-element-54768fda):not(.elementor-element-07814e2){
    padding-left:16px !important; padding-right:16px !important;
  }
}
@media (min-width:480px) and (max-width:880px){
  [data-elementor-type] > .e-con.e-con-full:not(.elementor-element-54768fda):not(.elementor-element-07814e2){
    padding-left:24px !important; padding-right:24px !important;
  }
}


/* --- Accreditation cards: equal size regardless of how the title wraps or how
       tall each logo is. Logo centres in the space, text sits at the bottom. --- */
.cmg-accred-grid{ grid-auto-rows:1fr !important; align-items:stretch !important; }
.cmg-accred-item{ display:flex !important; flex-direction:column !important; height:100% !important; }
.cmg-accred-item img{
  height:68px !important; width:auto !important; max-width:82% !important;
  object-fit:contain !important; margin-top:auto !important; margin-bottom:auto !important;
}
.cmg-accred-name{ margin-top:16px !important; margin-bottom:0 !important; }
.cmg-accred-num{ margin-top:4px !important; }
@media (max-width:600px){
  .cmg-accred-item img{ height:58px !important; }
}


/* --- About page accreditation cards: identical logo footprint + card styling --- */
.elementor-element-761672d3 .elementor-widget-image-box{
  background:#fff; border:1px solid #E3E8EF; border-radius:16px; padding:24px 22px;
  box-shadow:0 2px 12px rgba(28,52,98,.05); height:100%;
}
.elementor-element-761672d3 .elementor-widget-image-box > .elementor-widget-container{ height:100%; }
.elementor-element-761672d3 .elementor-image-box-wrapper{ height:100%; display:flex; flex-direction:column; }
.elementor-element-761672d3 .elementor-image-box-img{ margin-bottom:16px !important; }
.elementor-element-761672d3 .elementor-image-box-img img{
  width:100% !important; max-width:190px !important; height:auto !important;
  aspect-ratio:4 / 3 !important; object-fit:contain !important; margin:0 auto !important;
}
.elementor-element-761672d3 .elementor-image-box-content{ flex:1 1 auto; }
.elementor-element-761672d3 .elementor-image-box-description a{
  color:#AD4E1C !important; font-weight:600; text-decoration:none;
  border-bottom:1px solid rgba(239,115,41,.35);
}
.elementor-element-761672d3 .elementor-image-box-description a:hover{ border-bottom-color:#EF7329; }
.elementor-element-761672d3 .elementor-image-box-description strong{ color:#1B3461; }
.elementor-element-1798d1c1{ align-items:stretch !important; }
.elementor-element-1798d1c1 > .e-con{ display:flex !important; }


/* --- Contact page portrait: the panel is a 335x250 letterbox on mobile, which
       would slice a 2:3 portrait across the chest. Taller + framed on the face. --- */
@media (max-width:880px){
  .elementor-element-614a4d66{
    min-height:400px !important;
    background-position:center 18% !important;
    border-radius:16px !important;
  }
}

/* ---- Legal pages (Terms, Privacy) ---- */
.cmg-legal{max-width:820px;margin:0 auto;}
.cmg-legal p{font-size:16px;line-height:1.72;color:#4A5A70;margin:0 0 16px;}
.cmg-legal h2{font-size:25px;line-height:1.25;color:#1B3461;font-weight:700;margin:44px 0 14px;padding-top:22px;border-top:1px solid #E3E8EF;}
.cmg-legal h2:first-of-type{border-top:0;padding-top:0;margin-top:26px;}
.cmg-legal h3{font-size:20px;color:#1B3461;font-weight:700;margin:28px 0 10px;}
.cmg-legal h4{font-size:16px;color:#4A5A70;font-weight:700;margin:22px 0 8px;}
.cmg-legal ul{margin:0 0 18px;padding-left:22px;}
.cmg-legal li{font-size:16px;line-height:1.7;color:#4A5A70;margin:0 0 8px;}
.cmg-legal strong{color:#1B3461;font-weight:600;}
.cmg-legal-table{overflow-x:auto;margin:0 0 22px;-webkit-overflow-scrolling:touch;}
.cmg-legal-table table{width:100%;border-collapse:collapse;font-size:16px;min-width:460px;}
.cmg-legal-table th{background:#1B3461;color:#fff;text-align:left;font-weight:600;padding:11px 14px;font-size:14px;}
.cmg-legal-table td{padding:11px 14px;border-bottom:1px solid #E3E8EF;color:#4A5A70;line-height:1.6;vertical-align:top;}
.cmg-legal-table tbody tr:nth-child(even) td{background:#F2F8FC;}
.cmg-legal-table td.k{font-weight:600;color:#1B3461;width:38%;}
.cmg-legal-toc{background:#F2F8FC;border:1px solid #DCE7F2;border-radius:14px;padding:20px 24px;margin:0 0 34px;}
.cmg-legal-toc .cmg-legal-toc-h{font-weight:700;color:#1B3461;margin:0 0 10px;font-size:14px;text-transform:uppercase;letter-spacing:.06em;}
.cmg-legal-toc ul{margin:0;padding-left:18px;columns:2;column-gap:30px;}
.cmg-legal-toc li{font-size:14px;line-height:1.55;margin:0 0 5px;break-inside:avoid;}
.cmg-draft-banner{background:#FDECEC;border-left:5px solid #C0392B;border-radius:6px;padding:14px 18px;margin:0 0 26px;font-size:15px;line-height:1.6;color:#A31C1C;}
.cmg-todo{background:#FFE9A8;color:#6B4C00;padding:1px 5px;border-radius:4px;font-weight:600;}
@media (max-width:880px){
  .cmg-legal{max-width:100%;}
  .cmg-legal p,.cmg-legal li{font-size:16px;}
  .cmg-legal h2{font-size:20px;margin:36px 0 12px;}
  .cmg-legal h3{font-size:17.5px;}
  .cmg-legal-toc ul{columns:1;}
  .cmg-legal-toc{padding:16px 18px;}
}

.cmg-legal-title{font-size:44px;line-height:1.12;color:#1B3461;font-weight:700;margin:0 0 8px;}
.cmg-legal .cmg-legal-sub{font-size:16px;color:#4A5A70;margin:0 0 26px;padding-bottom:18px;border-bottom:3px solid #E07B29;display:inline-block;}
.cmg-legal-link a{opacity:.85;}
@media (max-width:880px){
  .cmg-legal-title{font-size:28px;}
  .cmg-legal .cmg-legal-sub{font-size:16px;}
}

.cmg-legal p, .cmg-legal li, .cmg-legal-table td{overflow-wrap:anywhere;}
.cmg-legal-table table{min-width:0;}
@media (min-width:600px){ .cmg-legal-table table{min-width:460px;} }

/* ================= Homepage FAQ / DIY / Emergency tabs ================= */
.elementor-element-2be0334e .e-tabs-menu-base{
  display:flex !important; flex-wrap:wrap !important; gap:10px !important;
  justify-content:flex-start !important; margin:0 0 26px !important; padding:0 !important;
}
.elementor-element-2be0334e .e-tab-base{
  font-family:Poppins, sans-serif !important; font-size:15px !important; font-weight:600 !important;
  line-height:1.2 !important; color:#1B3461 !important; background:#fff !important;
  border:1.5px solid #DCE7F2 !important; border-radius:999px !important;
  padding:13px 24px !important; cursor:pointer !important;
  transition:background .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease !important;
  box-shadow:0 1px 2px rgba(28,52,98,.04) !important;
}
.elementor-element-2be0334e .e-tab-base:hover{
  border-color:#EF7329 !important; color:#AD4E1C !important;
  box-shadow:0 4px 12px rgba(28,52,98,.10) !important;
}
.elementor-element-2be0334e .e-tab-base.e--selected{
  background:#1B3461 !important; border-color:#1B3461 !important; color:#fff !important;
  box-shadow:0 6px 16px rgba(28,52,98,.22) !important;
}
/* third pill = Emergency — orange when active, orange tint on hover */
.elementor-element-2be0334e .e-tab-base:nth-of-type(3){ border-color:#F6D8C2 !important; color:#AD4E1C !important; }
.elementor-element-2be0334e .e-tab-base:nth-of-type(3):hover{ border-color:#EF7329 !important; color:#AD4E1C !important; }
.elementor-element-2be0334e .e-tab-base:nth-of-type(3).e--selected{
  background:#EF7329 !important; border-color:#EF7329 !important; color:#fff !important;
  box-shadow:0 6px 16px rgba(239,115,41,.30) !important;
}
/* panel */
.elementor-element-2be0334e .e-tab-content-base{
  background:transparent !important; background-image:var(--cmg-band-img) !important; border:1px solid #E3EBF4 !important; border-radius:18px !important;
  padding:30px 34px !important;
}
/* Q & A blocks */
.cmg-qa{ display:grid; gap:2px; }
.cmg-qa-i{ padding:16px 0; border-bottom:1px solid #E3EBF4; }
.cmg-qa-i:first-child{ padding-top:0; }
.cmg-qa-i:last-child{ border-bottom:0; padding-bottom:0; }
.cmg-qa .cmg-q{
  font-family:Poppins, sans-serif !important; font-size:17.5px !important; font-weight:700 !important;
  color:#1B3461 !important; margin:0 0 6px !important; line-height:1.35 !important;
}
.cmg-qa .cmg-a{
  font-size:16px !important; line-height:1.65 !important; color:#4A5A70 !important; margin:0 !important;
}
.elementor-element-2be0334e .cmg-note{
  margin:22px 0 0 !important; padding:14px 18px; border-radius:12px;
  background:#fff; border:1px solid #E3EBF4;
  font-size:15px !important; line-height:1.6 !important; color:#4A5A70 !important;
}
.elementor-element-2be0334e .cmg-note strong{ color:#1B3461; }
.elementor-element-2be0334e .cmg-note-call{ background:#FFF6EF; border-color:#F6D8C2; }
.elementor-element-2be0334e .cmg-note a,
.elementor-element-2be0334e .cmg-alert a{ color:#AD4E1C !important; font-weight:700; text-decoration:none; border-bottom:2px solid #F6D8C2; }
.elementor-element-2be0334e .cmg-note a:hover,
.elementor-element-2be0334e .cmg-alert a:hover{ border-bottom-color:#EF7329; }
/* emergency alert */
.cmg-alert{ background:#FDF0EA; border:1px solid #F3C7AE; border-left:5px solid #EF7329;
  border-radius:14px; padding:18px 22px; margin:0 0 22px; }
.elementor-element-2be0334e .cmg-alert-h{
  font-family:Poppins, sans-serif !important; font-size:17.5px !important; font-weight:700 !important;
  color:#AD4E1C !important; margin:0 0 6px !important;
}
.elementor-element-2be0334e .cmg-alert-b{
  font-size:16px !important; line-height:1.65 !important; color:#4A5A70 !important; margin:0 !important;
}
@media (max-width:880px){
  .elementor-element-2be0334e .e-tabs-menu-base{ gap:8px !important; justify-content:center !important; }
  .elementor-element-2be0334e .e-tab-base{ font-size:14px !important; padding:11px 16px !important; }
  .elementor-element-2be0334e .e-tab-content-base{ padding:22px 18px !important; border-radius:14px !important; }
  .cmg-qa .cmg-q{ font-size:16px !important; }
  .cmg-qa .cmg-a{ font-size:15px !important; }
  .cmg-alert{ padding:16px 16px; }
}

/* ---- tabs section: width + CTA fixes ---- */
.elementor-element-2be0334e .e-tab-base{ width:auto !important; flex:0 0 auto !important; white-space:nowrap !important; }
.elementor-element-2be0334e .e-tab-content-base > .elementor-element{ width:100% !important; max-width:100% !important; }
.elementor-element-2be0334e .elementor-element-35800d87{ width:100% !important; max-width:640px !important; }
.elementor-element-2be0334e .elementor-element-1f466f0f{ margin-top:4px !important; }
/* primary CTA solid, matching the header button */
.elementor-element-2be0334e .elementor-element-1f466f0f .elementor-button{
  background-color:#EF7329 !important; border-color:#EF7329 !important; color:#fff !important;
  box-shadow:0 6px 18px rgba(239,115,41,.28) !important;
}
.elementor-element-2be0334e .elementor-element-1f466f0f .elementor-button:hover{
  background-color:#D9611C !important; border-color:#D9611C !important; color:#fff !important;
}
/* two columns on desktop so the panel is not one long line */
@media (min-width:900px){
  .elementor-element-2be0334e .cmg-qa{ grid-template-columns:repeat(2, minmax(0,1fr)); column-gap:48px; }
  .elementor-element-2be0334e .cmg-qa-i:nth-child(2){ padding-top:0; }
  .elementor-element-2be0334e .cmg-qa-i:nth-last-child(2):nth-child(odd){ border-bottom:0; }
}

/* Q&A lists read better left-aligned on mobile than centred — these are
   instructions, not headings. Section heading stays centred. */
@media (max-width:880px){
  .elementor-element-2be0334e .cmg-qa,
  .elementor-element-2be0334e .cmg-qa .cmg-q,
  .elementor-element-2be0334e .cmg-qa .cmg-a,
  .elementor-element-2be0334e .cmg-alert,
  .elementor-element-2be0334e .cmg-alert-h,
  .elementor-element-2be0334e .cmg-alert-b,
  .elementor-element-2be0334e .cmg-note{ text-align:left !important; }
}

@media (max-width:880px){
  .elementor-element-2be0334e .elementor-element-1f466f0f{ text-align:center !important; }
  .elementor-element-2be0334e .elementor-element-1f466f0f .elementor-widget-container{ display:flex; justify-content:center; }
}

/* Booking box anchor target — offset so the sticky header does not cover it */
#book{ scroll-margin-top:200px; }
@media (max-width:880px){ #book{ scroll-margin-top:150px; } }
html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion:reduce){ html{ scroll-behavior:auto; } }
/* brief highlight so it is obvious where the button sent you */
#book.cmg-ping{ animation:cmgPing 1.6s ease-out 1; }
@keyframes cmgPing{
  0%{ box-shadow:0 0 0 0 rgba(239,115,41,.55); }
  70%{ box-shadow:0 0 0 16px rgba(239,115,41,0); }
  100%{ box-shadow:0 0 0 0 rgba(239,115,41,0); }
}

/* ============ Google rating: footer badge ============ */
.site-footer .cmg-foot-rating{ margin-left:auto; }
.site-footer .cmg-foot-rating a{
  display:inline-flex !important; align-items:center; gap:9px;
  font-family:Poppins, sans-serif; font-size:14px; font-weight:600; color:#1B3461 !important;
  background:#fff; border:1px solid #E3E8EF; border-radius:999px;
  padding:8px 16px 8px 12px; text-decoration:none !important;
  box-shadow:var(--cmg-e1); transition:box-shadow .2s ease, transform .2s ease;
}
.site-footer .cmg-foot-rating a:hover{ box-shadow:0 6px 16px rgba(28,52,98,.13); transform:translateY(-1px); }
.site-footer .cmg-foot-rating a::before{
  content:''; width:17px; height:17px; flex:0 0 auto;
  background-image:url("/wp-content/uploads/2026/08/google-g-logo.png"); /* was an empty data URI — kses strips inline SVG on save */ background-size:contain; background-repeat:no-repeat;
}
.site-footer .cmg-foot-rating a::after{
  content:'\2605\2605\2605\2605\2605'; color:#FBBC05; font-size:12px; letter-spacing:1px; margin-left:2px;
}
@media (max-width:880px){
  .site-footer .cmg-foot-rating{ margin-left:0; width:100%; display:flex; justify-content:center; margin-top:6px; }
  .site-footer .cmg-foot-rating a{ font-size:14px; padding:7px 14px 7px 11px; }
}

/* ============ Google rating: trust line under every booking CTA ============ */
.elementor-element-1f466f0f, .elementor-element-3913940f, .elementor-element-1d354ac1,
.elementor-element-55e23e7e, .elementor-element-5184b0a0{ position:relative; }
.elementor-element-1f466f0f::after, .elementor-element-3913940f::after,
.elementor-element-1d354ac1::after, .elementor-element-55e23e7e::after,
.elementor-element-5184b0a0::after{
  content:'\2605\2605\2605\2605\2605  Rated 5.0 on Google ';
  display:block; margin-top:12px;
  font-family:Poppins, sans-serif; font-size:13px; font-weight:600; letter-spacing:.01em;
  color:#4A5A70; white-space:nowrap;
}
@media (max-width:880px){
  .elementor-element-1f466f0f::after, .elementor-element-3913940f::after,
  .elementor-element-1d354ac1::after, .elementor-element-55e23e7e::after,
  .elementor-element-5184b0a0::after{ text-align:center; font-size:14px; white-space:normal; }
}

.site-footer .cmg-foot-rating a{ padding:9px 17px 9px 13px !important; font-size:14px !important; line-height:1.2 !important; }
@media (max-width:880px){ .site-footer .cmg-foot-rating a{ padding:8px 15px 8px 12px !important; font-size:14px !important; } }

/* page CTA buttons solid, matching the homepage Book Now and the header button */
.elementor-element-3913940f .elementor-button, .elementor-element-1d354ac1 .elementor-button,
.elementor-element-55e23e7e .elementor-button, .elementor-element-5184b0a0 .elementor-button{
  background-color:#EF7329 !important; border-color:#EF7329 !important; color:#fff !important;
  box-shadow:0 6px 18px rgba(239,115,41,.28) !important;
}
.elementor-element-3913940f .elementor-button:hover, .elementor-element-1d354ac1 .elementor-button:hover,
.elementor-element-55e23e7e .elementor-button:hover, .elementor-element-5184b0a0 .elementor-button:hover{
  background-color:#D9611C !important; border-color:#D9611C !important; color:#fff !important;
}

/* CTA trust line: gold stars above, text beneath — two tones, one block */
.elementor-element-1f466f0f .elementor-widget-container::after,
.elementor-element-3913940f .elementor-widget-container::after,
.elementor-element-1d354ac1 .elementor-widget-container::after,
.elementor-element-55e23e7e .elementor-widget-container::after,
.elementor-element-5184b0a0 .elementor-widget-container::after{
  content:'\2605\2605\2605\2605\2605';
  display:block; margin-top:13px; color:#FBBC05; font-size:13px; letter-spacing:2px; line-height:1;
}
.elementor-element-1f466f0f::after, .elementor-element-3913940f::after,
.elementor-element-1d354ac1::after, .elementor-element-55e23e7e::after,
.elementor-element-5184b0a0::after{
  content:'Rated 5.0 on Google ' !important;
  margin-top:5px !important;
}

/* ============ Homepage top trust bar (above the header) ============ */
body.home .site-header{ padding-top:0 !important; }
body.home .site-header::before{
  content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google ';
  display:flex; align-items:center; justify-content:center;
  margin:0 -32px 12px; padding:0 20px; height:38px;
  background:#1B3461; color:#FFFFFF;
  font-family:Poppins, sans-serif; font-size:13px; font-weight:600; letter-spacing:.02em;
  white-space:nowrap; overflow:hidden;
}
/* let the bar scroll away while the rest of the header stays stuck */
body.home .site-header{ top:-38px !important; }
body.admin-bar.home .site-header{ top:-6px !important; }
@media (max-width:880px){
  body.home .site-header::before{
    content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google ';
    height:34px; font-size:11.5px; margin:0 -20px 10px; padding:0 12px;
  }
  body.home .site-header{ top:-34px !important; }
  body.admin-bar.home .site-header{ top:-2px !important; }
}
@media (max-width:400px){
  body.home .site-header::before{ content:'\2605\2605\2605\2605\2605\00A0\00A0 5.0 on Google '; font-size:11px; }
}

/* --- top trust bar v2: lead on the 5.0, not the count; add a brand accent edge --- */
body.home .site-header::before{
  content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google \00A0\00B7\00A0 You always deal with Chris' !important;
  border-bottom:2px solid #EF7329 !important;
  letter-spacing:.03em !important;
}
@media (max-width:880px){
  body.home .site-header::before{
    content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google \00A0\00B7\00A0 You always deal with Chris' !important;
  }
}
@media (max-width:430px){
  body.home .site-header::before{
    content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google' !important;
    font-size:11.5px !important;
  }
}

/* ---- slim booking bar on inner pages ---- */
.cmg-book-slim .cmg-book{ background:transparent !important; box-shadow:none !important; padding:0 !important; }
.cmg-book-slim .cmg-book-row{ justify-content:center !important; flex-wrap:wrap; gap:12px !important; }
.cmg-book-slim .cmg-book-foot{
  background:transparent !important; text-align:center !important;
  padding:8px 0 0 !important; font-size:14px !important; opacity:.85;
}
.cmg-book-slim .cmg-book-label{ font-size:15px !important; }
.cmg-book-slim select{ min-width:210px; }
@media (max-width:880px){
  .cmg-book-slim .cmg-book-row{ flex-direction:column; gap:10px !important; }
  .cmg-book-slim select{ width:100%; min-width:0; }
  .cmg-book-slim .cmg-book-btn{ width:100%; }
  .cmg-book-slim .cmg-book-foot{ font-size:11.5px !important; }
}

/* ---- inner page opening block: statement + booking bar read as one unit ---- */
.elementor-element-79337ab3, .elementor-element-2ec9d630,
.elementor-element-2dfa645a, .elementor-element-6d052474{
  background-color:transparent !important; background-image:var(--cmg-band-img) !important;
  padding-top:54px !important; padding-bottom:26px !important;
}
.elementor-element-4ed6414, .elementor-element-91d4751,
.elementor-element-177d024, .elementor-element-3f29f09{
  padding-top:0 !important; padding-bottom:46px !important;
  border-bottom:1px solid #DCE7F2;
}
@media (max-width:880px){
  .elementor-element-79337ab3, .elementor-element-2ec9d630,
  .elementor-element-2dfa645a, .elementor-element-6d052474{
    padding-top:34px !important; padding-bottom:18px !important;
  }
  .elementor-element-4ed6414, .elementor-element-91d4751,
  .elementor-element-177d024, .elementor-element-3f29f09{ padding-bottom:32px !important; }
}

/* tighten the gap between statement and booking bar */
.elementor-element-79337ab3, .elementor-element-2ec9d630,
.elementor-element-2dfa645a, .elementor-element-6d052474{ padding-bottom:4px !important; }
.elementor-element-4ed6414 > .e-con-inner, .elementor-element-91d4751 > .e-con-inner,
.elementor-element-177d024 > .e-con-inner, .elementor-element-3f29f09 > .e-con-inner{ padding-top:0 !important; }

/* ---- booking box on mobile: "I need" + dropdown on one line, button beneath ---- */
@media (max-width:880px){
  .cmg-book-row{
    flex-direction:row !important; flex-wrap:wrap !important;
    align-items:center !important; row-gap:12px !important; column-gap:10px !important;
  }
  .cmg-book-row .cmg-book-label{ flex:0 0 auto !important; white-space:nowrap; }
  .cmg-book-row select{ flex:1 1 0 !important; width:auto !important; min-width:0 !important; }
  .cmg-book-row .cmg-book-btn{ flex:0 0 100% !important; width:100% !important; }
  /* slim bar on inner pages follows the same shape */
  .cmg-book-slim .cmg-book-row{ flex-direction:row !important; }
  .cmg-book-slim select{ width:auto !important; }
  .cmg-book-slim .cmg-book-btn{ width:100% !important; }
}

/* override the widget's own 600px rules so label + select share a line */
@media (max-width:600px){
  .cmg-book .cmg-book-label{ width:auto !important; flex:0 0 auto !important; white-space:nowrap; }
  .cmg-book select{ width:auto !important; flex:1 1 0 !important; min-width:0 !important; }
  .cmg-book .cmg-book-btn{ width:100% !important; flex:0 0 100% !important; }
  .cmg-book-row{ padding:16px !important; column-gap:10px !important; row-gap:12px !important; }
}

/* ---- trust bar on EVERY page, not just home ---- */
.site-header{ padding-top:0 !important; }
.site-header::before{
  content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google \00A0\00B7\00A0 You always deal with Chris';
  display:flex; align-items:center; justify-content:center;
  margin:0 -32px 12px; padding:0 20px; height:38px;
  background:#1B3461; color:#FFFFFF; border-bottom:2px solid #EF7329;
  font-family:Poppins, sans-serif; font-size:13px; font-weight:600; letter-spacing:.03em;
  white-space:nowrap; overflow:hidden;
}
.site-header{ top:-38px !important; }
body.admin-bar .site-header{ top:-6px !important; }
@media (max-width:880px){
  .site-header::before{
    content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google \00A0\00B7\00A0 You always deal with Chris';
    height:34px; font-size:11.5px; margin:0 -20px 10px; padding:0 12px;
  }
  .site-header{ top:-34px !important; }
  body.admin-bar .site-header{ top:-2px !important; }
}
@media (max-width:430px){
  .site-header::before{ content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google'; font-size:11.5px; }
}
/* ---- Google badge beneath the booking bar on inner pages ---- */
.cmg-badge-under{ margin-top:16px !important; display:flex; justify-content:center; }
.cmg-badge-under .cmg-gbadge-wrap{ margin:0 !important; }
@media (max-width:880px){ .cmg-badge-under{ margin-top:12px !important; } }

/* ---- reinforcing sub-header after the booking block ---- */
.cmg-subhead{ margin-top:34px !important; }
.cmg-subhead .elementor-heading-title{
  font-size:26px !important; line-height:1.25 !important; color:#1B3461 !important;
  font-weight:700 !important; letter-spacing:-.01em;
}
.cmg-subhead + .elementor-widget{ margin-top:10px !important; }
/* the supporting line now reads as body copy under the sub-header */
.elementor-element-4ed6414 .elementor-element-647280b7 .elementor-heading-title,
.elementor-element-177d024 .elementor-element-21fb1ea8 .elementor-heading-title{
  font-size:17.5px !important; font-weight:400 !important; line-height:1.7 !important;
  color:#4A5A70 !important; max-width:760px; margin:0 auto;
}
.elementor-element-91d4751 .elementor-element-4a2fa918{ max-width:760px; margin:0 auto; }
@media (max-width:880px){
  .cmg-subhead{ margin-top:26px !important; }
  .cmg-subhead .elementor-heading-title{ font-size:21px !important; }
  .elementor-element-4ed6414 .elementor-element-647280b7 .elementor-heading-title,
  .elementor-element-177d024 .elementor-element-21fb1ea8 .elementor-heading-title{ font-size:16px !important; }
}

/* opening title sections no longer need a fixed height now the copy moved down */
.elementor-element-79337ab3, .elementor-element-2ec9d630,
.elementor-element-2dfa645a, .elementor-element-6d052474{ min-height:0 !important; height:auto !important; }

/* About + Contact openings now match Services and Gallery: centred, full width, no fixed height */
.elementor-element-496edb39, .elementor-element-453afc61{
  width:100% !important; min-height:0 !important; height:auto !important;
  align-items:center !important; text-align:center !important;
}
.elementor-element-496edb39 .elementor-heading-title,
.elementor-element-453afc61 .elementor-heading-title{ text-align:center !important; }
.elementor-element-496edb39 .elementor-widget-divider,
.elementor-element-453afc61 .elementor-widget-divider{ margin-left:auto !important; margin-right:auto !important; }
/* the photo bands that used to sit alongside the headline */
.elementor-element-2ca5d2c0, .elementor-element-614a4d66{
  width:100% !important; border-radius:0 !important;
  background-size:cover !important; background-position:center 28% !important;
}
@media (max-width:880px){
  .elementor-element-2ca5d2c0, .elementor-element-614a4d66{ background-position:center 18% !important; }
}

/* kill the old 171px column padding and centre the rule */
.elementor-element-496edb39, .elementor-element-453afc61{ padding:0 !important; }
.elementor-element-496edb39 .elementor-divider,
.elementor-element-453afc61 .elementor-divider{ justify-content:center !important; }
.elementor-element-496edb39 .elementor-widget-divider,
.elementor-element-453afc61 .elementor-widget-divider{ width:100% !important; }

/* Contact: hours / contact / address sit as three columns under Get in touch */
.elementor-element-3f29f09 > .e-con-inner{ flex-wrap:wrap !important; justify-content:center !important; row-gap:0 !important; column-gap:28px !important; }
.elementor-element-77da0f66, .elementor-element-71a580ab, .elementor-element-5bafbbb{
  width:calc(33.333% - 20px) !important; text-align:center !important; align-items:center !important;
  padding:0 !important; margin-top:6px !important;
}
.elementor-element-77da0f66 .elementor-heading-title,
.elementor-element-71a580ab .elementor-heading-title,
.elementor-element-5bafbbb .elementor-heading-title{
  font-size:18px !important; font-weight:700 !important; color:#1B3461 !important; margin-bottom:6px !important;
}
.elementor-element-77da0f66 .elementor-icon-list-text,
.elementor-element-71a580ab .elementor-icon-list-text,
.elementor-element-5bafbbb .elementor-icon-list-text{ font-size:15px !important; }
.elementor-element-77da0f66 .elementor-icon-list-items,
.elementor-element-71a580ab .elementor-icon-list-items,
.elementor-element-5bafbbb .elementor-icon-list-items{ align-items:center !important; }
@media (max-width:880px){
  .elementor-element-77da0f66, .elementor-element-71a580ab, .elementor-element-5bafbbb{ width:100% !important; margin-top:18px !important; }
}

/* force the contact trio onto one row */
.elementor-element-3f29f09 > .e-con-inner{ flex-direction:row !important; align-items:flex-start !important; }
.elementor-element-3f29f09 > .e-con-inner > .elementor-widget{ width:100% !important; flex:0 0 100% !important; }
.elementor-element-77da0f66, .elementor-element-71a580ab, .elementor-element-5bafbbb{ flex:0 0 calc(33.333% - 20px) !important; }
@media (max-width:880px){
  .elementor-element-3f29f09 > .e-con-inner{ flex-direction:column !important; align-items:center !important; }
  .elementor-element-77da0f66, .elementor-element-71a580ab, .elementor-element-5bafbbb{ flex:0 0 100% !important; }
}

/* contact trio: smaller headings, and breathing room under Get in touch */
body .elementor-element-77da0f66 h2.elementor-heading-title,
body .elementor-element-71a580ab h2.elementor-heading-title,
body .elementor-element-5bafbbb h2.elementor-heading-title{
  font-size:18px !important; line-height:1.3 !important; font-weight:700 !important;
  color:#1B3461 !important; letter-spacing:.02em; text-transform:uppercase;
}
.elementor-element-3f29f09 .cmg-subhead{ margin-bottom:26px !important; }
@media (max-width:880px){
  body .elementor-element-77da0f66 h2.elementor-heading-title,
  body .elementor-element-71a580ab h2.elementor-heading-title,
  body .elementor-element-5bafbbb h2.elementor-heading-title{ font-size:16px !important; }
}


/* ===================== CMG UNIFIED PAGE OPENING ===================== */
/* every page opens with the same booking card as the home page */
.cmg-book-slim .cmg-book{
  background:#fff !important;
  box-shadow:0 8px 30px rgba(28,52,98,.12) !important;
  border-radius:20px !important;
  overflow:hidden;
  padding:0 !important;
  width:100% !important;
  max-width:520px !important;
  margin:0 auto !important;
}
.cmg-book-slim .cmg-book-row{ padding:16px !important; }
.cmg-book-slim .cmg-book-foot{
  background:#E5F2F9 !important;
  padding:11px 16px !important;
  font-size:13px !important;
  opacity:1 !important;
  text-align:center !important;
  color:#1B3461 !important;
}
@media (max-width:600px){
  .cmg-book-slim .cmg-book-foot{ font-size:14px !important; padding:11px 14px !important; }
}
/* same band colour behind the opening on every page, home included */
.elementor-element-54768fda{ background-color:transparent !important; background-image:var(--cmg-band-img) !important; }
/* same gap between the card and the Google rating badge everywhere */
.cmg-badge-under{ margin-top:20px !important; }
.cmg-badge-under .cmg-gbadge-wrap{ margin:0 !important; }
.elementor-element-892e751 .cmg-gbadge-wrap{ margin:20px 0 0 !important; }

/* same side gutter and card width on mobile as the home page */
@media (max-width:600px){
  .elementor-element-91d4751, .elementor-element-4ed6414,
  .elementor-element-177d024, .elementor-element-3f29f09{
    padding-left:18.5px !important; padding-right:18.5px !important;
  }
}
/* contact opening: restore the vertical rhythm the row layout removed */
.elementor-element-3f29f09 > .e-con-inner{ row-gap:20px !important; }

/* booking card: identical internals to the home page at every width */
.cmg-book-slim{ width:100% !important; max-width:520px !important; margin-left:auto !important; margin-right:auto !important; }
.cmg-book-slim .cmg-book-label{ font-size:17.5px !important; }
.cmg-book-slim .cmg-book-foot{ font-size:14px !important; }
@media (min-width:601px){ .cmg-book-slim .cmg-book-row{ padding:22px 24px !important; } }
@media (max-width:600px){ .cmg-book-slim .cmg-book-row{ padding:16px !important; } .cmg-book-slim .cmg-book-foot{ font-size:14px !important; padding:11px 16px !important; } }


/* ===================== CMG OPENING RHYTHM ===================== */
/* the orange rule sits in the same space on all five pages */
.elementor-element-322f706 .elementor-divider,
.elementor-element-21d3c373 .elementor-divider,
.elementor-element-47d860d6 .elementor-divider,
.elementor-element-22bf8dba .elementor-divider,
.elementor-element-531005e5 .elementor-divider{ padding:15px 0 !important; }
/* 20px between the rule and the booking card, as on the home page */
.elementor-element-2ec9d630, .elementor-element-79337ab3,
.elementor-element-2dfa645a, .elementor-element-6d052474{ padding-bottom:20px !important; }
/* home page starts at the same height as the rest */
.elementor-element-b3dbfd8{ padding-top:54px !important; }
@media (max-width:1024px){ .elementor-element-b3dbfd8{ padding-top:34px !important; } }


/* ===================== CMG STATEMENT BLOCK ===================== */
/* same headline weight on all five pages */
.elementor-element-43831e8d .elementor-heading-title,
.elementor-element-3353e39a .elementor-heading-title,
.elementor-element-194f2976 .elementor-heading-title,
.elementor-element-403f272e .elementor-heading-title,
.elementor-element-5d10f65e .elementor-heading-title{ font-weight:700 !important; }
/* reserve the same height for the statement so the booking card
   starts at the same point whether it runs to two lines or four */
@media (max-width:1024px){
.elementor-element-43831e8d .elementor-heading-title,
.elementor-element-3353e39a .elementor-heading-title,
.elementor-element-194f2976 .elementor-heading-title,
.elementor-element-403f272e .elementor-heading-title,
.elementor-element-5d10f65e .elementor-heading-title{ min-height:164px; display:flex; align-items:center; justify-content:center; }
}
@media (min-width:1025px){
.elementor-element-3353e39a .elementor-heading-title,
.elementor-element-194f2976 .elementor-heading-title,
.elementor-element-403f272e .elementor-heading-title,
.elementor-element-5d10f65e .elementor-heading-title{ min-height:138px; display:flex; align-items:center; justify-content:center; }
}


/* ============== CMG REVIEW PILL ABOVE THE BOOKING CARD ============== */
/* the orange rule is no longer needed once the pill sits in that gap */
.elementor-element-322f706, .elementor-element-21d3c373,
.elementor-element-47d860d6, .elementor-element-22bf8dba,
.elementor-element-531005e5{ display:none !important; }
/* inner pages: pill first, then the booking card */
.elementor-element-471fed3, .elementor-element-46967db,
.elementor-element-c67225d, .elementor-element-0523ef6{ order:-1 !important; margin-top:0 !important; margin-bottom:4px !important; }
/* home page: statement, pill, card, intro, button */
.elementor-element-43831e8d{ order:1 !important; }
.elementor-element-892e751{ order:2 !important; margin-top:0 !important; }
.elementor-element-892e751 .cmg-gbadge-wrap{ margin:0 0 4px !important; }
.elementor-element-cc2d228{ order:3 !important; }
.elementor-element-6f99c144{ order:4 !important; }
.elementor-element-6380de1e{ order:5 !important; }


/* ============== CMG FIT THE OPENING ON ONE PHONE SCREEN ============== */
@media (max-width:1024px){
.elementor-element-43831e8d .elementor-heading-title,
.elementor-element-3353e39a .elementor-heading-title,
.elementor-element-194f2976 .elementor-heading-title,
.elementor-element-403f272e .elementor-heading-title,
.elementor-element-5d10f65e .elementor-heading-title{ font-size:34px !important; min-height:148px !important; }
  .elementor-element-2ec9d630, .elementor-element-79337ab3,
  .elementor-element-2dfa645a, .elementor-element-6d052474{ padding-top:24px !important; }
  .elementor-element-b3dbfd8{ padding-top:24px !important; }
}
@media (min-width:430px) and (max-width:1024px){
.elementor-element-43831e8d .elementor-heading-title,
.elementor-element-3353e39a .elementor-heading-title,
.elementor-element-194f2976 .elementor-heading-title,
.elementor-element-403f272e .elementor-heading-title,
.elementor-element-5d10f65e .elementor-heading-title{ min-height:112px !important; }
}

/* CMG FIT OPENING FONT FIX — beats the older .elementor-widget-heading rule */
@media (max-width:1024px){
body .elementor-element-43831e8d h1.elementor-heading-title,
body .elementor-element-3353e39a h1.elementor-heading-title,
body .elementor-element-194f2976 h1.elementor-heading-title,
body .elementor-element-403f272e h1.elementor-heading-title,
body .elementor-element-5d10f65e h1.elementor-heading-title{ font-size:34px !important; line-height:1.07 !important; }
}


/* ============== CMG BOOK ANCHOR — land on the whole opening ============== */
/* the Book Online links point at the booking box; a very large scroll margin
   clamps the jump to the top of the page, so the statement, the review pill
   and the booking card are all in view rather than the box alone */
#book{ scroll-margin-top:3000px !important; }


/* ============== CMG HOME HERO FULL WIDTH ============== */
/* the radiator photo has gone, so the home opening now centres like the rest */
.elementor-element-54768fda{ padding-left:0 !important; padding-right:0 !important; }
.elementor-element-b3dbfd8{ width:100% !important; max-width:1140px !important; margin-left:auto !important; margin-right:auto !important; align-items:center !important; text-align:center !important; }
body .elementor-element-43831e8d h1.elementor-heading-title{ text-align:center !important; }
.elementor-element-6f99c144, .elementor-element-6380de1e{ text-align:center !important; }

/* CMG HOME HERO MOBILE GUTTER — keep the side margins on phones */
@media (max-width:1024px){
  .elementor-element-54768fda{ padding-left:18.75px !important; padding-right:18.75px !important; }
}


/* ============== CMG PILLARS RESTYLE ============== */
/* white band so the orange stays reserved for the buttons */
.cmg-pillars{ background:#fff !important; padding:44px 18px !important; }
.cmg-pillar svg{ stroke:#EF7329 !important; }
.cmg-pillar h3{ color:#1B3461 !important; }
.cmg-pillar p{ color:#4A5A70 !important; opacity:1 !important; }
/* two by two on phones instead of a single stack */
@media (max-width:520px){
  .cmg-pillars-inner{ grid-template-columns:repeat(2,1fr) !important; gap:26px 16px !important; }
  .cmg-pillar svg{ width:46px !important; height:46px !important; margin-bottom:10px !important; }
  .cmg-pillar h3{ font-size:19px !important; margin:0 0 6px !important; }
  .cmg-pillar p{ font-size:14px !important; line-height:1.45 !important; }
}

/* CMG HOME SERVICES GRID — the old four-card container was itself a 4-col grid */
.elementor-element-750aab8a{ display:block !important; }
.elementor-element-750aab8a > .e-con-inner{ display:block !important; }


/* ============== CMG GALLERY GRID ============== */
.elementor-element-14d4fc42 .gallery-item img{ width:100% !important; height:auto !important; aspect-ratio:4/3; object-fit:cover; border-radius:12px; display:block; }
.elementor-element-14d4fc42 .gallery-item{ margin:0 !important; padding:6px !important; box-sizing:border-box; }
@media (max-width:767px){
.elementor-element-14d4fc42 .gallery-item{ width:50% !important; max-width:50% !important; float:left !important; padding:5px !important; }
  .elementor-element-14d4fc42 .gallery-item img{ border-radius:14px; }
}

/* CMG GALLERY TWO UP — beats the older 1-column mobile rule */
@media (max-width:600px){
.elementor-element-14d4fc42.elementor-widget-image-gallery .gallery-columns-3 .gallery-item{ width:50% !important; max-width:50% !important; float:left !important; padding:5px !important; margin:0 !important; }
}
@media (min-width:601px) and (max-width:1024px){
.elementor-element-14d4fc42.elementor-widget-image-gallery .gallery-columns-3 .gallery-item{ width:50% !important; max-width:50% !important; }
}


/* ============== CMG ACCRED ORDER — heading and text before the logos ============== */
.elementor-element-2bc4d7a2{ order:1 !important; }
.elementor-element-13d7bffc{ order:2 !important; margin-top:6px !important; }
.elementor-element-0d33427{ order:3 !important; }


/* ============== CMG HOME FLOW ORDER ==============
   hero > pillars > services > led by Chris > accreditations >
   reviews > why work with us > closing call to action        */
.elementor-element-54768fda{ order:1 !important; }
.elementor-element-07814e2 { order:2 !important; }
.elementor-element-603cf9f8{ order:3 !important; }
.elementor-element-5e07416a{ order:4 !important; }
.elementor-element-64602dce{ order:5 !important; }
.elementor-element-46591b8d{ order:6 !important; }
.elementor-element-1cc799fc{ order:7 !important; }
.elementor-element-2be0334e{ order:8 !important; }

/* CMG HOME FLOW FLEX — the page wrapper needs to be a flex column for order to apply */
body.page-id-40 .elementor-40{ display:flex !important; flex-direction:column !important; }


/* ~~~~~~~~~~~~~~ CMG PHONE POLICY (Aug 2026) ~~~~~~~~~~~~~~ */
/* The number is visible on every page in the header and the footer, as a
   plain link in navy. Orange is reserved for actions (Book Online), navy
   for information — so the number is always there without competing. */
.site-navigation li.cmg-phone > a,
.site-footer li.cmg-phone-foot > a{
  color:#1B3461 !important; font-weight:600 !important; white-space:nowrap;
}
.site-navigation li.cmg-phone > a:hover,
.site-footer li.cmg-phone-foot > a:hover{ color:#AD4E1C !important; }

/* Call buttons removed from the page body. The hero keeps a single action,
   and the number is now sitewide. Emergency tab and Contact page keep theirs. */
.elementor-element-6380de1e,
.elementor-element-7824db44{ display:none !important; }

/* CMG NAV WRAP ON PHONES — this theme's header nav is a single row at every
   width, and adding the phone number pushed Book Online off the screen.
   Wrapping keeps both visible and stops the row sitting permanently on the
   edge of overflowing. Costs 34px of header height; the opening card still
   finishes at 734px on an 844px screen. */

/* ~~~~~~~~~~~~~~ CMG PHONE: DESKTOP ONLY (Aug 2026) ~~~~~~~~~~~~~~ */
/* Chris's call: the number stays in the desktop header, where it fits on one
   tidy row, and comes out of the header on phones so the mobile header is
   exactly as it was before. It remains in the footer on every page and at
   every width, so it is never more than a scroll away. */
@media (max-width:1024px){
  .site-header .site-navigation li.cmg-phone{ display:none !important; }
}


/* ~~~~~~~~~~~~~~ CMG SERVICE NAV — DROPDOWNS (Aug 2026) ~~~~~~~~~~~~~~ */
/* Desktop: hover dropdowns under Boilers, Plumbing and About.
   Phones: no dropdowns at all. Touch screens have no hover, and a tap on a
   parent should go to that page — so on mobile we show the six top-level
   headings only and people reach the child pages from the hub page itself.
   That is what the hub pages are for, and it keeps the header small. */
.site-navigation ul.menu{ position:relative; }
.site-navigation ul.menu li{ position:relative; }
.site-navigation ul.menu .sub-menu{
  display:none; position:absolute; top:100%; left:0; z-index:9999;
  min-width:232px; margin:0; padding:8px 0; list-style:none;
  background:#fff; border:1px solid #E7ECF2; border-radius:14px;
  box-shadow:var(--cmg-e3);
}
.site-navigation ul.menu > li:hover > .sub-menu,
.site-navigation ul.menu > li:focus-within > .sub-menu{ display:block; }
.site-navigation ul.menu .sub-menu li{ display:block; width:100%; }
.site-navigation ul.menu .sub-menu a{
  display:block; padding:9px 18px; font-size:14px; white-space:nowrap;
  color:#1B3461 !important; font-weight:500;
}
.site-navigation ul.menu .sub-menu a:hover{ background:#F2F8FC; color:#EF7329 !important; }
/* the theme already draws its own chevron on the parent item, so we do not
   add a second one — just tone the theme's down a little */
.site-navigation ul.menu > li.menu-item-has-children::after{ opacity:.5; }
/* chevron-tighten: the theme's arrow sits in a 20px box, which reads as a
   detached second marker. Pull it back against the word. */
.site-navigation ul.menu > li.menu-item-has-children::after{ margin-left:-9px; }
@media (max-width:1024px){
  .site-navigation ul.menu .sub-menu{ display:none !important; }
  .site-navigation ul.menu > li.menu-item-has-children::after{ display:none; }
}

/* ~~~~~~~~~~~~~~ CMG SERVICE PAGES ~~~~~~~~~~~~~~ */
.cmg-page{ max-width:760px; margin:0 auto; padding:8px 0 24px; font-family:Poppins,sans-serif; color:#2A3542; line-height:1.65; }
.cmg-page h2{ color:#1B3461; font-size:22px; margin:30px 0 10px; }
.cmg-page p{ margin:0 0 14px; font-size:16px; }
.cmg-page ul{ margin:0 0 16px; padding-left:20px; }
.cmg-page li{ margin-bottom:8px; font-size:16px; }
.cmg-page a{ color:#EF7329; font-weight:600; }
.cmg-lede{ font-size:19px !important; color:#1B3461; font-weight:500; }
.cmg-price{ background:#F2F8FC; border-left:4px solid #EF7329; padding:14px 16px; border-radius:0 8px 8px 0; }
.cmg-price strong{ color:#1B3461; font-size:19px; }
.cmg-cred{ margin-top:26px !important; padding-top:14px; border-top:1px solid #E4EAF1;
  font-size:14px !important; color:#5B6B7D; }
.cmg-cred strong{ color:#1B3461; }
.cmg-cta{ background:#1B3461; color:#fff; padding:18px 20px; border-radius:14px; font-size:16px !important; }
.cmg-cta a{ color:#fff; }
.cmg-btn{ display:inline-block; background:#EF7329; color:#fff !important; padding:9px 18px;
  border-radius:999px; font-weight:700; margin-right:6px; }
@media (max-width:1024px){ .cmg-page{ padding-left:18px; padding-right:18px; } .cmg-page h2{ font-size:19px; } }

/* ~~~~~~~~~~~~~~ CMG MOBILE NAV WRAP v2 (Aug 2026) ~~~~~~~~~~~~~~ */
/* Six service headings plus Contact and the CTA cannot fit one row on a phone
   at a readable size — it needed 550px in a 351px space. Wrapping to two rows
   is the interim fix. The proper answer is a hamburger, which needs the header
   rebuilding; the horizontal lockup will pay back more than this costs. */
@media (max-width:1024px){
  .site-header .site-navigation ul.menu{ flex-wrap:wrap !important; justify-content:center !important;
    row-gap:1px !important; column-gap:5px !important; }
  .site-header .site-navigation ul.menu > li > a{ font-size:12.8px !important;
    padding-left:2px !important; padding-right:2px !important; }
  .site-header .site-navigation ul.menu > li.cmg-book-cta > a{ padding:5px 11px !important; font-size:12px !important; }
}

/* ~~~~~~~~~~~~~~ CMG MOBILE LOGO SIZE (Aug 2026) ~~~~~~~~~~~~~~ */
/* The new horizontal logo was still being given the 77px of height the old
   stacked one needed, then squashed to fit the width. Capping the height on
   phones lets it sit at its natural proportions and pays for the second nav
   row: header 220px back down to 189px, with the dropdown nav in place. */
@media (max-width:1024px){
  .site-header img.custom-logo{ max-height:46px !important; height:auto !important;
    width:auto !important; max-width:none !important; }
}

/* ~~~~~~~~~~~~~~ CMG SERVICE PAGE OPENING (Aug 2026) ~~~~~~~~~~~~~~ */
/* The ten service pages had no H1 at all and none of the opening pattern the
   rest of the site uses. This gives them the same three-part opening —
   statement, Google badge, booking card — so every page on the site starts
   the same way whichever one you land on. */
.cmg-open{ text-align:center; padding:6px 0 4px; }
.cmg-open-h1{ color:#1B3461 !important; font-family:Poppins,sans-serif; font-weight:700;
  font-size:38px; line-height:1.18; margin:0 auto 14px; max-width:760px; }
.cmg-open .cmg-gbadge-wrap{ margin:0 0 14px !important; }
.cmg-open-card{ display:flex; justify-content:center; margin:0 0 10px; }
.cmg-open-card .cmg-book{ margin:0 auto; }
.cmg-page{ text-align:left; }
@media (max-width:1024px){
  .cmg-open{ padding-left:18px; padding-right:18px; }
  .cmg-open-h1{ font-size:29px; margin-bottom:12px; }
  .cmg-open-card .cmg-book{ width:100%; }
}

/* ~~~~~~~~~~~~~~ CMG OPENING CONSISTENCY (Aug 2026) ~~~~~~~~~~~~~~ */
/* Same trick as the original five pages: reserve a fixed height for the
   headline and centre it, so a two-line title and a three-line title both
   put the badge and the booking card in exactly the same place. Without this
   the opening jumped around from page to page. */
@media (max-width:1024px){
  .cmg-open{ padding-top:18px !important; }
  .cmg-open-h1{ min-height:156px; display:flex; align-items:center; justify-content:center;
    margin-bottom:12px !important; }
}


/* ~~~~~~~~~~~~~~ CMG OPENING v2 (Aug 2026) ~~~~~~~~~~~~~~ */
/* Chris's call: the booking block belongs on the main tabs only. Click through
   to a sub-page and you get the headline then straight into what you came to
   read. Sub-pages therefore get a compact heading and nothing else.
   The Google badge is now purpose-built rather than copied from the home page
   hero — a single fixed-height row that cannot wrap, which is what was making
   it different sizes on a phone and pushing the text down the screen. */
.cmg-open{ text-align:center; }
.cmg-open-main{ padding:6px 0 4px; }
.cmg-open-sub{ padding:4px 0 0; }
.cmg-open-h1{ color:#1B3461 !important; font-family:Poppins,sans-serif; font-weight:700;
  font-size:38px; line-height:1.18; margin:0 auto 14px; max-width:780px; }
.cmg-open-sub .cmg-open-h1{ font-size:32px; margin-bottom:6px; }

/* the badge — one row, fixed height, never wraps */
a.cmg-ob{ display:inline-flex !important; align-items:center; gap:9px; height:44px;
  background:#fff; border-radius:999px; padding:0 18px; margin:0 0 14px;
  box-shadow:0 3px 14px rgba(28,52,98,.13); text-decoration:none !important;
  font-family:Poppins,sans-serif; white-space:nowrap; max-width:100%; overflow:hidden; }
a.cmg-ob svg{ flex:0 0 auto; width:22px !important; height:22px !important; }
a.cmg-ob .cmg-ob-t{ color:#1B3461; font-size:14px; font-weight:500; }
a.cmg-ob .cmg-ob-t b{ font-weight:700; }
a.cmg-ob .cmg-ob-s{ color:#FBBC05; font-size:13px; letter-spacing:1.5px; line-height:1; }
a.cmg-ob:hover{ box-shadow:0 5px 18px rgba(28,52,98,.2); }

.cmg-open-card{ display:flex; justify-content:center; margin:0 0 10px; }
.cmg-page{ text-align:left; }

@media (max-width:1024px){
  .cmg-open{ padding-left:18px; padding-right:18px; }
  .cmg-open-main .cmg-open-h1{ font-size:29px; min-height:146px; display:flex;
    align-items:center; justify-content:center; margin-bottom:12px; }
  .cmg-open-sub .cmg-open-h1{ font-size:25px; min-height:0; margin-bottom:8px; }
  a.cmg-ob{ height:40px; padding:0 14px; gap:7px; }
  a.cmg-ob .cmg-ob-t{ font-size:14px; }
  a.cmg-ob .cmg-ob-s{ font-size:11px; letter-spacing:1px; }
  .cmg-open-card .cmg-book{ width:100%; }
}

/* ~~~~~~~~~~~~~~ CMG FOOTER v3 (Aug 2026) ~~~~~~~~~~~~~~ */
/* Built from menu items — the theme footer is not editable and there is no
   page-builder footer on this site. Every credential links to the register
   that proves it, which is the whole point: a customer can check.
   Three bands: site links, credentials, then who and where with the logo. */
.site-footer{ background:#1B3461 !important; color:#fff !important;
  padding:28px 22px 24px !important; display:block !important; text-align:center !important; }
.site-footer .site-navigation{ width:100%; }
.site-footer .site-navigation ul.menu{
  display:flex !important; flex-wrap:wrap !important; justify-content:center !important;
  align-items:baseline !important; gap:3px 18px !important; list-style:none; margin:0; padding:0; }
.site-footer .site-navigation ul.menu > li{ display:inline-block !important; }
.site-footer .site-navigation ul.menu > li > a{
  color:#DCE4F0 !important; font-family:Poppins,sans-serif; font-size:14px;
  font-weight:600; text-decoration:none !important; padding:4px 0 !important; display:inline-block; }
.site-footer .site-navigation ul.menu > li > a:hover{ color:#fff !important; }

/* a band break: this item starts a new full-width line with a hairline above */
.site-footer li.cmg-f-break{ flex:0 0 100% !important; height:0 !important;
  margin:14px 0 0 !important; padding:0 !important; border-top:1px solid rgba(255,255,255,.18); }
.site-footer li.cmg-f-break > a{ display:none !important; }

.site-footer li.cmg-f-cred > a{ font-size:14px; font-weight:500; color:#A9BBD6 !important; }
.site-footer li.cmg-f-cred > a:hover{ color:#EF7329 !important; }
.site-footer li.cmg-f-who > a{ font-size:14px; color:#fff !important; font-weight:700; }
.site-footer li.cmg-f-info > a{ font-size:14px; font-weight:500; color:#A9BBD6 !important; }
.site-footer li.cmg-f-phone > a{ color:#fff !important; font-weight:700; font-size:14px; }
.site-footer li.cmg-f-plain > a{ pointer-events:none; cursor:default; }
.site-footer li.cmg-foot-rating{ flex:0 0 100% !important; margin-top:14px !important; }
.site-footer li.cmg-foot-rating > a{ color:#fff !important; font-weight:600; }

@media (max-width:1024px){
  .site-footer{ padding:22px 16px 20px !important; }
  .site-footer .site-navigation ul.menu{ gap:2px 13px !important; }
  .site-footer .site-navigation ul.menu > li > a{ font-size:14px; }
  .site-footer li.cmg-f-cred > a, .site-footer li.cmg-f-info > a{ font-size:11.5px; }
  .site-footer li.cmg-f-who > a{ font-size:13px; }
}

/* the footer logo, as a real clickable item rather than a pseudo-element —
   it links home, which is what people expect of a footer logo */
.site-footer li.cmg-f-logo{ flex:0 0 100% !important; margin:0 0 16px !important; }
.site-footer li.cmg-f-logo > a{
  display:block !important; width:210px; height:58px; margin:0 auto !important;
  padding:0 !important; text-indent:-9999px; overflow:hidden; white-space:nowrap;
  background-image:url(/wp-content/uploads/2026/08/cmg-logo-full-white.png);
  background-size:contain; background-position:center; background-repeat:no-repeat; }
@media (max-width:1024px){
  .site-footer li.cmg-f-logo > a{ width:168px; height:46px; }
  .site-footer li.cmg-f-logo{ margin-bottom:12px !important; }
}

/* the credentials now live on their own page; the footer keeps one line so the
   numbers are still on every page, and links through for the detail */
.site-footer li.cmg-f-credline{ flex:0 0 100% !important; margin:12px 0 0 !important;
  padding-top:12px; border-top:1px solid rgba(255,255,255,.18); }
.site-footer li.cmg-f-credline > a{ font-size:14px !important; font-weight:500 !important;
  color:#A9BBD6 !important; }
.site-footer li.cmg-f-credline > a:hover{ color:#EF7329 !important; }
@media (max-width:1024px){ .site-footer li.cmg-f-credline > a{ font-size:11.5px !important; } }

/* the trade rate table */
table.cmg-rate{ border-collapse:collapse; width:100%; margin:12px 0 16px; font-family:Poppins,sans-serif; }
table.cmg-rate th{ background:#1B3461; color:#fff; text-align:left; font-size:14px; font-weight:700; padding:9px 12px; }
table.cmg-rate td{ padding:8px 12px; border:1px solid #E2E8F0; font-size:15px; }
table.cmg-rate tr:nth-child(even) td{ background:#F2F8FC; }
@media (max-width:1024px){ table.cmg-rate th, table.cmg-rate td{ font-size:13px; padding:7px 9px; } }

/* ~~~~~~~~~~~~~~ CMG FOOTER — MOBILE (Aug 2026) ~~~~~~~~~~~~~~ */
/* On a phone the full footer was a wall of small text. The page links are
   redundant there — the sticky nav is on every screen, two thumb-lengths away
   — so on mobile the footer drops to what someone actually wants at the bottom
   of a page: ring him, book him, check him, and the legal links. */
@media (max-width:1024px){
  .site-footer{ padding:20px 16px 18px !important; }
  .site-footer .site-navigation ul.menu > li.cmg-f-link{ display:none !important; }
  .site-footer .site-navigation ul.menu > li.cmg-f-link.cmg-f-keep{ display:inline-block !important; }
  .site-footer .site-navigation ul.menu > li.cmg-f-who{ display:none !important; }
  .site-footer .site-navigation ul.menu{ gap:6px 14px !important; }

  /* the number, made a proper tap target */
  .site-footer .site-navigation ul.menu > li.cmg-f-phone{ flex:0 0 100% !important; display:block !important; margin:4px 0 2px !important; }
  .site-footer li.cmg-f-phone > a{ font-size:19px !important; padding:8px 0 !important; }

  .site-footer li.cmg-f-credline{ margin:10px 0 0 !important; padding-top:10px !important; }
  .site-footer li.cmg-f-credline > a{ font-size:12px !important; line-height:1.45; display:block; }
  .site-footer li.cmg-f-info > a{ font-size:11.5px !important; line-height:1.5; }
  .site-footer li.cmg-foot-rating{ margin-top:12px !important; }
}

/* Book Online reads as the action, in the footer as in the header */
@media (max-width:1024px){
  .site-footer .site-navigation ul.menu > li.cmg-f-book{ flex:0 0 100% !important; display:block !important; margin:2px 0 6px !important; }
  .site-footer li.cmg-f-book > a{ display:inline-block !important; background:#EF7329;
    color:#fff !important; border-radius:999px; padding:9px 26px !important;
    font-size:14px !important; font-weight:700 !important; }
  .site-footer li.cmg-f-book > a:hover{ background:#D9631F; color:#fff !important; }
}


/* ~~~~~~~~~~~~~~ CMG SERVICE PAGES v3 — BUILT TO BE FLICKED THROUGH (Aug 2026) ~~~~~~~~~~~~~~ */
/* Chris's brief: the pages were text-heavy, had no photos, and the only
   booking button was at the very bottom — so a person skim-reading on a phone
   never reached a reason to get in touch. This version assumes the reader is
   scrolling fast with one thumb and decides in seconds, not paragraphs.
   Every block below is designed to answer one question and then get out of
   the way. Selectors are written full-path so they beat the theme. */

/* ---- 1. HERO. Photo, one promise, the price, and two buttons. ---- */
.cmg-page .cmg-hero{ position:relative; border-radius:14px; overflow:hidden;
  margin:0 0 22px; background:#1B3461; min-height:300px; display:flex;
  align-items:flex-end; }
.cmg-page .cmg-hero-img{ position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; display:block; }
/* The gradient is what makes white text safe over any photo. */
.cmg-page .cmg-hero::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(28,52,98,.18) 0%, rgba(28,52,98,.72) 52%, rgba(28,52,98,.94) 100%); }
.cmg-page .cmg-hero-body{ position:relative; z-index:2; padding:22px 20px 20px; width:100%; }
.cmg-page .cmg-hero-body h2{ color:#fff !important; font-size:25px; line-height:1.22;
  margin:0 0 8px; font-weight:700; }
.cmg-page p.cmg-hero-p{ color:#E8EEF7; font-size:16px; margin:0 0 14px; line-height:1.5; }
/* No-photo variant — a deliberate navy panel rather than a wrong picture. */
.cmg-page .cmg-hero-plain{ background:
  radial-gradient(120% 90% at 12% 0%, #2C5AA6 0%, rgba(44,90,166,0) 62%), #1B3461; }
.cmg-page .cmg-hero-plain::after{ background:none; }

/* ---- 2. PRICE CHIP. The number people came for, impossible to miss. ---- */
.cmg-page .cmg-chip{ display:inline-flex; align-items:baseline; gap:7px;
  background:#EF7329; color:#fff; border-radius:999px; padding:7px 16px;
  font-weight:700; font-size:18px; margin:0 8px 10px 0; }
.cmg-page .cmg-chip small{ font-size:14px; font-weight:600; opacity:.92; }
.cmg-page .cmg-chip-ghost{ background:rgba(255,255,255,.14); color:#fff;
  border:1px solid rgba(255,255,255,.42); font-size:14px; padding:6px 14px; }

/* ---- 3. BUTTON PAIR. Book is orange and first. Call is always beside it. ---- */
.cmg-page .cmg-acts{ display:flex; gap:10px; flex-wrap:wrap; margin:0; }
.cmg-page a.cmg-b1, .cmg-page a.cmg-b2{ display:inline-flex; align-items:center;
  justify-content:center; min-height:48px; padding:0 22px; border-radius:999px;
  font-weight:700; font-size:16px; text-decoration:none; flex:1 1 auto; }
.cmg-page a.cmg-b1{ background:#EF7329; color:#fff !important; }
.cmg-page a.cmg-b2{ background:rgba(255,255,255,.12); color:#fff !important;
  border:1.5px solid rgba(255,255,255,.55); }
.cmg-page .cmg-onlight a.cmg-b2{ background:#fff; color:#1B3461 !important;
  border:1.5px solid #C9D6E6; }

/* ---- 4. ANSWER CARDS. The flick-through layer: a question, then the answer. ---- */
.cmg-page .cmg-ans{ display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:0 0 24px; }
.cmg-page .cmg-ans .cmg-card{ background:#F2F8FC; border:1px solid #E1E9F3;
  border-radius:12px; padding:15px 16px; }
.cmg-page .cmg-ans .cmg-card h3{ color:#1B3461; font-size:16px; font-weight:700;
  margin:0 0 6px; line-height:1.3; }
.cmg-page .cmg-ans .cmg-card p{ margin:0; font-size:15px; line-height:1.55; color:#4A5A70; }
.cmg-page .cmg-ans .cmg-card strong{ color:#1B3461; }
/* the one card that carries the price gets the brand edge */
.cmg-page .cmg-ans .cmg-card-key{ background:#FFF6EF; border-color:#F6C79E; }

/* ---- 5. NUMBERED STEPS. Removes the fear of "what actually happens". ---- */
.cmg-page .cmg-steps{ counter-reset:cmgstep; margin:0 0 24px; padding:0; list-style:none; }
.cmg-page ol.cmg-steps li, .cmg-page ul.cmg-steps li{ position:relative;
  padding:0 0 0 46px; margin:0 0 14px; font-size:16px; line-height:1.55; list-style:none; }
.cmg-page .cmg-steps li::before{ counter-increment:cmgstep; content:counter(cmgstep);
  position:absolute; left:0; top:-1px; width:32px; height:32px; border-radius:50%;
  background:#1B3461; color:#fff; font-weight:700; font-size:15px;
  display:flex; align-items:center; justify-content:center; }
.cmg-page .cmg-steps li strong{ color:#1B3461; }

/* ---- 6. THE PROMISE LINE. One sentence, set large, that answers the worry. ---- */
.cmg-page .cmg-promise{ border-left:4px solid #EF7329; background:#F2F8FC;
  padding:16px 18px; border-radius:0 12px 12px 0; margin:0 0 24px; }
.cmg-page p.cmg-promise-t{ font-size:18px; line-height:1.45; color:#1B3461;
  font-weight:600; margin:0; }
.cmg-page p.cmg-promise-s{ font-size:15px; margin:8px 0 0; color:#4A5765; }

/* ---- 7. PHOTO WITH A CAPTION. Proof, not decoration. ---- */
.cmg-page figure.cmg-shot{ margin:0 0 24px; }
.cmg-page figure.cmg-shot img{ width:100%; height:auto; border-radius:12px; display:block; }
.cmg-page figure.cmg-shot figcaption{ font-size:14px; color:#5B6B7D; margin-top:8px;
  line-height:1.45; }

/* ---- 8. PROOF STRIP. Numbers a person can check, in one glance. ---- */
.cmg-page .cmg-proof{ display:flex; flex-wrap:wrap; gap:8px; margin:0 0 24px; }
.cmg-page .cmg-proof span{ background:#fff; border:1px solid #DCE5F0; border-radius:999px;
  padding:7px 14px; font-size:14px; color:#425061; font-weight:600; }
.cmg-page .cmg-proof span b{ color:#1B3461; }

/* ---- 9. BOOKING BLOCK. Repeated down the page so one is always in reach. ---- */
.cmg-page .cmg-bk{ background:#1B3461; border-radius:14px; padding:20px;
  margin:0 0 26px; color:#fff; }
.cmg-page .cmg-bk h3{ color:#fff !important; font-size:19px; margin:0 0 6px; font-weight:700; }
.cmg-page .cmg-bk p{ color:#D9E3F1; font-size:15px; margin:0 0 14px; }
.cmg-page .cmg-bk-note{ font-size:13px !important; color:#A9BBD4 !important;
  margin:12px 0 0 !important; }
.cmg-page .cmg-bk a{ font-weight:700; }

/* ---- 11. PHONE LAYOUT. Everything above re-flowed for one thumb. ---- */
@media (max-width:781px){
  .cmg-page .cmg-hero{ min-height:270px; }
  .cmg-page .cmg-hero-body{ padding:18px 16px 16px; }
  .cmg-page .cmg-hero-body h2{ font-size:21px; }
  .cmg-page p.cmg-hero-p{ font-size:15px; }
  .cmg-page .cmg-ans{ grid-template-columns:1fr; gap:10px; }
  /* Buttons stay side by side on a phone — stacking them pushed the first
     one below the fold. Smaller type, tighter padding, wrap only if forced. */
  .cmg-page .cmg-acts{ flex-wrap:wrap; gap:8px; }
  .cmg-page a.cmg-b1, .cmg-page a.cmg-b2{ font-size:14px; padding:0 14px;
    min-height:46px; white-space:nowrap; flex:1 1 auto; min-width:0; }
  .cmg-page .cmg-chip{ font-size:17.5px; padding:6px 14px; }
  /* the number folds away on a phone — Book is the action, Call is the fallback */
  .cmg-numsm{ display:none; }
  .cmg-page p.cmg-promise-t{ font-size:17.5px; }
  .cmg-page .cmg-bk{ padding:18px 16px; }
}

/* ---- 13. THE DANGER PANEL. Gas. Read before anything else on the page. ---- */
.cmg-page .cmg-danger{ background:#FDECEC; border:1px solid #F0B4B4;
  border-left:5px solid #C62828; border-radius:12px; padding:16px 18px; margin:0 0 22px; }
.cmg-page .cmg-danger h3{ color:#A31C1C !important; font-size:17.5px; font-weight:700;
  margin:0 0 6px; }
.cmg-page .cmg-danger p{ font-size:16px; margin:0 0 8px; color:#5A2020; line-height:1.55; }
.cmg-page .cmg-danger p:last-child{ margin-bottom:0; }
.cmg-page .cmg-danger a{ color:#A31C1C !important; font-weight:700; }

/* ---- 14. DO THIS NOW. For the person standing in water while they read. ---- */
.cmg-page .cmg-now{ background:#FFF6EF; border:1px solid #F6C79E; border-radius:12px;
  padding:16px 18px 6px; margin:0 0 22px; }
.cmg-page .cmg-now h3{ color:#1B3461 !important; font-size:17.5px; font-weight:700;
  margin:0 0 10px; }
.cmg-page .cmg-now .cmg-steps li::before{ background:#EF7329; }
.cmg-page .cmg-now .cmg-steps{ margin-bottom:10px; }

/* ---- 15. Section headings were landing lighter than the card headings
   underneath them, which made the page read upside down. ---- */
.cmg-page h2{ font-weight:700 !important; font-size:23px !important;
  letter-spacing:-.2px; margin:34px 0 12px !important; }
.cmg-page .cmg-hero-body h2{ font-size:25px !important; margin:0 0 8px !important; }
@media (max-width:781px){
  .cmg-page h2{ font-size:20px !important; margin:28px 0 10px !important; }
  .cmg-page .cmg-hero-body h2{ font-size:21px !important; margin:0 0 8px !important; }
}


/* ---- 16. SERVICE CARDS AND CREDENTIAL LOGOS (Aug 2026) ----
   The hub pages were a lede and a bulleted list of three links — around 190
   words on a page two thousand pixels tall, which is why they read as bare.
   Cards give each service a reason and a price instead of a blue link. ---- */
.cmg-page .cmg-svc{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin:0 0 26px; }
.cmg-page .cmg-svc > a{ display:block; background:#fff; border:1px solid #DCE5F0;
  border-radius:12px; padding:16px; text-decoration:none; color:#4A5A70 !important;
  transition:border-color .15s, box-shadow .15s; }
.cmg-page .cmg-svc > a:hover{ border-color:#B9CBE2; box-shadow:0 4px 14px rgba(28,52,98,.09); }
.cmg-page .cmg-svc > a strong{ display:block; color:#1B3461; font-size:17.5px;
  font-weight:700; line-height:1.3; margin-bottom:6px; }
.cmg-page .cmg-svc > a span{ display:block; font-size:14px; line-height:1.55; color:#4A5765; }
.cmg-page .cmg-svc > a em{ display:inline-block; margin-top:10px; font-style:normal;
  font-weight:700; color:#EF7329; font-size:14px; }

/* the four accreditation marks, as a row people can actually see */
.cmg-page .cmg-logos{ display:grid; grid-template-columns:1fr 1fr 1fr 1fr; gap:10px;
  align-items:center; margin:0 0 24px; }
.cmg-page .cmg-logos img{ width:100%; height:auto; border:1px solid #E4EAF1;
  border-radius:14px; background:#fff; display:block; }

@media (max-width:781px){
  .cmg-page .cmg-svc{ grid-template-columns:1fr; gap:10px; }
  .cmg-page .cmg-logos{ grid-template-columns:1fr 1fr; gap:8px; }
}

/* ---- 17. PHOTO HEIGHT ON A PHONE (Aug 2026) ----
   Several of the job photos are portrait. At full width on a phone that is a
   425px tall image — most of a screen given over to one picture. Capped and
   cropped from the centre so a photo illustrates the page without taking it
   over. Landscape shots are unaffected. ---- */
@media (max-width:781px){
  .cmg-page figure.cmg-shot img{ max-height:330px; object-fit:cover; object-position:center; }
}

/* ---- 18. INVISIBLE ATTRIBUTION LINE (Aug 2026) ----
   The line under Chris's quote on the About page — "Founder, CMG Heating &
   Plumbing" — was set in #E5F2F9, a pale blue on a white background. It has
   been effectively invisible. Nothing to do with this session's work; found
   while checking the page. ---- */
.elementor-testimonial-job{ color:#5B6B7D !important; font-weight:600; }
.elementor-testimonial-name{ color:#1B3461 !important; }

/* ---- 19. DESKTOP LAYOUT (Aug 2026) ----
   Chris: the mobile view is right and must not change; the desktop view was
   the whole site poured into a 760px column down the middle of a 1425px
   window, with 333px of dead space either side and everything stacked one
   thing under another. Every rule in this block is inside min-width:1025px,
   so the phone layout is untouched by design, not by luck.
   The principle: prose stays at a readable line length, structure spreads. ---- */
@media (min-width:1025px){

  /* the column opens up — 1140px is the width the rest of the site uses */
  .cmg-page{ max-width:1140px; }

  /* ...but running text does not, or it becomes unreadable at 1140px */
  .cmg-page > p,
  .cmg-page > ul,
  .cmg-page > ol:not(.cmg-steps),
  .cmg-page > h2,
  .cmg-page .cmg-promise,
  .cmg-page > .cmg-danger,
  .cmg-page > .cmg-now{ max-width:720px; }

  /* answer cards: four across on one row instead of two rows of two */
  .cmg-page .cmg-ans{ grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px; }

  /* the three service cards get the full width */
  .cmg-page .cmg-svc{ gap:16px; }

  /* numbered steps side by side rather than stacked */
  .cmg-page ol.cmg-steps, .cmg-page ul.cmg-steps{
    display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .cmg-page .cmg-steps li{ padding:44px 0 0 0; margin:0; }
  .cmg-page .cmg-steps li::before{ top:0; left:0; }

  /* booking block reads across, not down */
  .cmg-page .cmg-bk{ display:grid; grid-template-columns:1fr auto; align-items:center;
    column-gap:32px; padding:24px 28px; }
  .cmg-page .cmg-bk h3{ grid-column:1; }
  .cmg-page .cmg-bk > p:not(.cmg-bk-note){ grid-column:1; margin:0; max-width:640px; }
  .cmg-page .cmg-bk .cmg-acts{ grid-column:2; grid-row:1 / span 2; flex-wrap:nowrap; }
  .cmg-page .cmg-bk a.cmg-b1, .cmg-page .cmg-bk a.cmg-b2{ white-space:nowrap; }
  .cmg-page .cmg-bk-note{ grid-column:1 / -1; }

  /* a photograph sits beside the text it belongs to instead of under it */
  .cmg-page figure.cmg-shot{ float:right; width:44%; margin:4px 0 20px 32px; }
  .cmg-page figure.cmg-shot img{ max-height:420px; object-fit:cover; }
  .cmg-page h2{ clear:both; }

  /* hero earns a bit more height now it is 1140 wide */
  .cmg-page .cmg-hero{ min-height:340px; }
  .cmg-page .cmg-hero-body{ padding:28px 32px 26px; }
  .cmg-page .cmg-hero-body h2, .cmg-page p.cmg-hero-p{ max-width:760px; }
  .cmg-page .cmg-hero .cmg-acts{ max-width:520px; }

  /* trailing call to action and credential line stay with the text measure */
  .cmg-page p.cmg-cta, .cmg-page p.cmg-cred{ max-width:720px; }
}


/* ~~~~~~~~~~~ 20. DESKTOP LAYOUT FOR THE ELEMENTOR PAGES (Aug 2026) ~~~~~~~~~~~ */
/* Chris: "all the information seems to be in a column in the centre of the
   pages - the user has to scroll down to see everything."
   Section 19 fixed the hand-built service pages. This does the same for the
   five Elementor-built pages. The offender is the band under the H1: booking
   card, Google badge, heading and intro copy stacked one on top of another
   down the middle of a 1140px container with 300px of dead space either side.
   20a floats the booking card beside the words, 20b lays out the contact
   details as three columns with the card alongside, 20c pairs the photograph
   on the home page with the words about Chris, and 20d puts the closing
   button on the same line as the sentence that asks for it.
   The home hero is deliberately left centred: a hero is meant to read that way.
   EVERY rule sits inside min-width:1025px, so the phone layout is untouched -
   verified pixel-identical at 390px on all six pages before saving. */
@media (min-width:1025px){
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim),
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8){ display:block !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim)::after,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8)::after{ content:""; display:block; clear:both; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > *,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8) > *{
    width:auto !important; max-width:none !important; margin-left:0 !important; margin-right:0 !important;
    text-align:left !important; justify-content:flex-start !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > .cmg-book-slim,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8) > .cmg-book-slim{
    float:right !important; width:380px !important; margin:0 0 24px 48px !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > .elementor-widget-text-editor,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8) > .elementor-widget-text-editor{ max-width:640px !important; }

  .elementor .elementor-element-3f29f09 > .e-con-inner{ display:grid !important;
    grid-template-columns:1.61fr minmax(0,1fr) minmax(0,1fr) 380px !important;
    column-gap:32px !important; row-gap:16px !important; align-items:start !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > *{ width:100% !important; max-width:none !important;
    margin-left:0 !important; margin-right:0 !important; text-align:left !important; justify-content:flex-start !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .e-con{ align-items:flex-start !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .e-con > *{ text-align:left !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .cmg-badge-under{ grid-column:1 / span 3 !important; grid-row:1 !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .cmg-subhead{ grid-column:1 / span 3 !important; grid-row:2 !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .elementor-element-77da0f66{ grid-column:1 !important; grid-row:3 !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .elementor-element-71a580ab{ grid-column:2 !important; grid-row:3 !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .elementor-element-5bafbbb{ grid-column:3 !important; grid-row:3 !important; }
  .elementor .elementor-element-3f29f09 > .e-con-inner > .cmg-book-slim{ grid-column:4 !important; grid-row:1 / span 3 !important; width:380px !important; }

  .elementor .elementor-element-5e07416a > .e-con-inner{ display:grid !important;
    grid-template-columns:437px minmax(0,1fr) !important; column-gap:48px !important; align-items:center !important; }
  .elementor .elementor-element-5e07416a > .e-con-inner > *{ width:100% !important; max-width:none !important; margin-left:0 !important; margin-right:0 !important; }
  .elementor .elementor-element-5e07416a > .e-con-inner > * > *{ text-align:left !important; align-items:flex-start !important; }

  .elementor .e-con-inner:has(> .elementor-widget-button):not(:has(> .e-con)):not(:has(> .elementor-widget-html)){
    display:grid !important; grid-template-columns:minmax(0,1fr) auto !important;
    column-gap:40px !important; row-gap:4px !important; align-items:center !important; }
  .elementor .e-con-inner:has(> .elementor-widget-button):not(:has(> .e-con)):not(:has(> .elementor-widget-html)) > *{
    width:auto !important; max-width:none !important; margin-left:0 !important; margin-right:0 !important;
    text-align:left !important; justify-content:flex-start !important; }
  .elementor .e-con-inner:has(> .elementor-widget-button):not(:has(> .e-con)):not(:has(> .elementor-widget-html)) > .elementor-widget-heading{ grid-column:1; grid-row:1; }
  .elementor .e-con-inner:has(> .elementor-widget-button):not(:has(> .e-con)):not(:has(> .elementor-widget-html)) > .elementor-widget-text-editor{ grid-column:1; grid-row:2; }
  .elementor .e-con-inner:has(> .elementor-widget-button):not(:has(> .e-con)):not(:has(> .elementor-widget-html)) > .elementor-widget-button{ grid-column:2; grid-row:1 / span 2; justify-self:end; }
}

@media (min-width:1025px){
  /* Elementor centres some inner blocks with a hard left margin of its own —
     zero it so the copy starts at the same line as everything else. */
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > *:not(.cmg-book-slim) > *,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8) > *:not(.cmg-book-slim) > *{
    margin-left:0 !important; margin-right:0 !important; max-width:640px !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > .cmg-badge-under > *,
  .elementor .e-con-full:has(> .cmg-book-slim):not(.elementor-element-b3dbfd8) > .cmg-badge-under > *{
    max-width:none !important; }
}


/* ~~~~~ 21. ONE LEFT EDGE, LESS AIR (Aug 2026) ~~~~~ */
/* Chris, after seeing 20 live: "still looks like there's too much space and
   disjointed." He was right, and for three reasons I had missed:
     1. The page read half-centred and half-left - the H1 and every section
        heading were still centred while the body copy had moved left, so the
        eye had no single edge to follow.
     2. Every band carried 88px of padding top AND bottom, so 176px of empty
        blue sat between one idea and the next.
     3. Several two-column rows only used about 850 of the 1140 available, so
        the right-hand third of those bands was simply empty.
   This section fixes all three on desktop only. Headings and hero copy move to
   the same left edge as everything else, band padding drops to 56px, the title
   band and the intro band close up into one, the booking card becomes a real
   right-hand column that is centred against the words rather than a floated
   block with a hole under it, and the rows that stopped short now fill.
   Where it contradicts section 20 it deliberately wins - the float in 20a is
   turned back off here.
   Still entirely inside min-width:1025px. Verified pixel-identical at 390px on
   nine pages, and no horizontal scroll at 1025, 1200, 1440 or 1920. */
@media (min-width:1025px){
  /* one left edge for the whole page */
  .elementor .e-con-inner > .elementor-widget-heading,
  .elementor .e-con-full > .elementor-widget-heading{ text-align:left !important; justify-content:flex-start !important; }
  .elementor .e-con-inner > .elementor-widget-heading > *,
  .elementor .e-con-full > .elementor-widget-heading > *{ text-align:left !important; margin-left:0 !important; margin-right:0 !important; }

  /* bands sit closer together */
  .elementor > .e-con.e-parent{ padding-top:56px !important; padding-bottom:56px !important; }

  /* the title band and the intro band read as one */
  .elementor > .e-con.e-parent:first-child{ padding-bottom:0 !important; }
  .elementor > .e-con.e-parent:first-child + .e-con.e-parent{ padding-top:22px !important; }

  /* INTRO BAND -> two real columns, card centred in its column */
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim),
  .elementor .e-con-full:has(> .cmg-book-slim){
    display:grid !important; grid-template-columns:minmax(0,1fr) 400px !important;
    column-gap:56px !important; row-gap:0 !important; align-items:start !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > *,
  .elementor .e-con-full:has(> .cmg-book-slim) > *{
    grid-column:1 !important; float:none !important; width:auto !important; max-width:none !important;
    margin-left:0 !important; margin-right:0 !important; }
  .elementor .e-con:not(.elementor-element-3f29f09) > .e-con-inner:has(> .cmg-book-slim) > .cmg-book-slim,
  .elementor .e-con-full:has(> .cmg-book-slim) > .cmg-book-slim{
    grid-column:2 !important; grid-row:1 / 60 !important; align-self:center !important;
    width:400px !important; margin:0 !important; float:none !important; }
}
@media (min-width:1025px){
  /* About: the "How we work" column fills the width instead of stopping short */
  .elementor .elementor-element-771db64c > .elementor-element-5c54cbf4{ flex:1 1 auto !important; }

  /* Home: credentials band — words left with the button under them, logos right */
  .elementor .elementor-element-64602dce{ display:grid !important;
    grid-template-columns:minmax(0,1fr) minmax(0,1fr) !important;
    column-gap:56px !important; row-gap:18px !important; align-items:center !important; }
  .elementor .elementor-element-64602dce > .elementor-element-2bc4d7a2{ grid-column:1 !important; grid-row:1 !important; width:100% !important; max-width:none !important; }
  .elementor .elementor-element-64602dce > .elementor-element-13d7bffc{ grid-column:2 !important; grid-row:1 / span 2 !important; width:100% !important; max-width:none !important; }
  .elementor .elementor-element-64602dce > .elementor-element-0d33427{ grid-column:1 !important; grid-row:2 !important; }

  /* Contact: the three fact panels fill their columns */
  .elementor .elementor-element-3f29f09 > .e-con-inner > .e-con{ width:100% !important; max-width:none !important; }
}
@media (min-width:1025px){
  .elementor .elementor-element-64602dce > .elementor-element-0d33427,
  .elementor .elementor-element-64602dce > .elementor-element-0d33427 > *{ text-align:left !important; justify-content:flex-start !important; }
}
@media (min-width:1025px){
  /* the hero copy and trust line follow the same left edge */
  .elementor .elementor-element-b3dbfd8 > *{ text-align:left !important; justify-content:flex-start !important; }
  .elementor .elementor-element-b3dbfd8 > * > *{ text-align:left !important; margin-left:0 !important; margin-right:0 !important; }
}
@media (min-width:1025px){
  .elementor .elementor-element-b3dbfd8{ display:grid !important;
    grid-template-columns:minmax(0,1fr) 400px !important;
    column-gap:56px !important; row-gap:0 !important; align-items:start !important; }
  .elementor .elementor-element-b3dbfd8 > *{ grid-column:1 !important; width:auto !important; max-width:none !important; }
  .elementor .elementor-element-b3dbfd8 > .elementor-element-cc2d228{
    grid-column:2 !important; grid-row:1 / span 3 !important; align-self:start !important; align-self:center !important; width:400px !important; }
  .elementor .elementor-element-b3dbfd8 > .elementor-element-6f99c144 > *{ max-width:660px !important; }
}
@media (min-width:1025px){
  .elementor .elementor-element-64602dce > .elementor-element-0d33427 .elementor-button{ padding-left:0 !important; }
}
@media (min-width:1025px){
  /* the page title band, wherever the heading sits inside it */
  .elementor > .e-con.e-parent:first-child .elementor-widget-heading,
  .elementor > .e-con.e-parent:first-child .elementor-widget-heading > *,
  .elementor > .e-con.e-parent:first-child .elementor-heading-title{
    text-align:left !important; justify-content:flex-start !important;
    margin-left:0 !important; margin-right:0 !important; }
}
@media (min-width:1025px){
  .elementor > .e-con.e-parent:first-child .e-con{ align-items:flex-start !important; }
}


/* ~~~~~ 22. THE SAME TREATMENT FOR THE HAND-BUILT PAGES (Aug 2026) ~~~~~ */
/* Chris: "you changed the home page which looks great but all the other pages
   are still unchanged." Correct - 20 and 21 only reached the five Elementor
   pages. Boilers, Plumbing, Bathrooms, Landlords, For builders, Credentials
   and the service pages are built from the .cmg-open / .cmg-page markup and
   were untouched, so they still opened with a centred headline, a centred
   Google badge and a centred booking card stacked down the middle.
   22a puts those openers on the same left edge as everything else, and above
   1200px turns them into the same two-column band: headline and badge left,
   booking card right. Below 1200px the container is too narrow to split, so it
   stays stacked - just left-aligned.
   22b fixes the hole those pages had under the intro line. The photograph
   floats right, but section 19 made every h2 clear it, so on a short page the
   words stopped and 400px of white sat beside the picture. The service cards
   now form their own block beside the photograph instead, and the credentials
   line and booking bar run the full width underneath.
   Desktop only. Verified pixel-identical at 390px on thirteen pages, and no
   horizontal scroll at 1025, 1100, 1199, 1200 or 1440. */
@media (min-width:1025px){
  .cmg-open{ text-align:left !important; }
  .cmg-open .cmg-open-h1{ text-align:left !important; margin-left:0 !important; margin-right:0 !important; max-width:900px !important; }
  .cmg-open-main > *{ text-align:left !important; }
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > figure.cmg-shot{
    float:right !important; width:400px !important; margin:0 0 22px 44px !important; }
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > h2{ clear:none !important; max-width:none !important; }
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > p{ max-width:none !important; }
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > .cmg-svc{
    overflow:hidden !important; grid-template-columns:repeat(2,minmax(0,1fr)) !important; }
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > .cmg-cred,
  .cmg-page:has(> .cmg-lede + figure.cmg-shot) > .cmg-cta{ clear:both !important; }
}
@media (min-width:1200px){
  .cmg-open-main{ display:grid !important; grid-template-columns:minmax(0,1fr) 400px !important;
    column-gap:56px !important; row-gap:0 !important; align-items:start !important; }
  .cmg-open-main > *{ grid-column:1 !important; }
  .cmg-open-main > .cmg-open-card{ grid-column:2 !important; grid-row:1 / 60 !important;
    align-self:center !important; width:400px !important; margin:0 !important; justify-self:end; }
  .cmg-open-main > .cmg-open-card .cmg-book{ width:400px !important; margin:0 !important; }
}


/* ~~~~~ 23. NO MORE PHOTOGRAPHS STANDING ON THEIR OWN (Aug 2026) ~~~~~ */
/* Chris: "the image still stands on its own to the right."
   Section 19 gave every h2 clear:both so that grids and panels could never
   collide with a floated photograph. The side effect was that a photograph
   placed between two sections had nothing beside it at all - on Boiler
   servicing that left a 638 x 467 block of white next to the picture.
   Dropping the clear lets the words run beside the photograph again, and
   giving each panel and grid its own formatting context keeps them from
   overlapping it - they shrink to the space left instead. Boiler servicing
   comes down from 2555px to 2240px and every page checked is free of
   collisions. Desktop only; the phone layout is untouched. */
@media (min-width:1025px){
  .cmg-page h2{ clear:none !important; }
  .cmg-page > .cmg-ans, .cmg-page > .cmg-svc, .cmg-page > .cmg-bk, .cmg-page > .cmg-proof,
  .cmg-page > .cmg-promise, .cmg-page > .cmg-danger, .cmg-page > .cmg-now, .cmg-page > .cmg-logos,
  .cmg-page > p.cmg-price, .cmg-page > p.cmg-cta, .cmg-page > table,
  .cmg-page > ol.cmg-steps, .cmg-page > ul.cmg-steps{ overflow:hidden !important; }
}


/* ~~~~~ 24. PHONE TYPOGRAPHY: NO BROKEN CHIPS, NO ORPHAN WORDS (Aug 2026) ~~~~~ */
/* Found by looking at the rebuilt pages on a phone rather than only measuring them.
   Two things read badly:
     1. The price chip. On Boiler repairs the small print ran "call-out and first
        90 minutes, inc" on one line and "VAT" alone on the next, inside a
        lopsided orange pill. Letting the small print take a full line of its own
        gives a tidy two-line chip: the figure, then what it covers.
     2. Single words dropping onto a line by themselves at the end of a heading —
        "One price. No surprises on the / day." Balancing the lines fixes it
        everywhere at once rather than hand-tuning each heading.
   Checked afterwards on fifteen pages at 390px and 1440px: no overflow, no
   button under 90px or over 54px tall, no chip over 70px tall, no orphaned
   words. */
@media (max-width:781px){
  .cmg-page .cmg-chip{ flex-wrap:wrap; row-gap:1px; }
  .cmg-page .cmg-chip small{ flex:1 0 100%; line-height:1.35; }
}
.cmg-open .cmg-open-h1,
.cmg-page h2, .cmg-page h3,
.cmg-page .cmg-hero-body h2, .cmg-page p.cmg-promise-t{ text-wrap:balance; }


/* ~~~~~ 25. THE PHOTO RULE, NO LONGER HANGING OFF THE LEDE (Aug 2026) ~~~~~ */
/* Adding a hero to Boilers, Plumbing, Bathrooms and Credentials left their old
   intro line saying the same thing twice, so the line came out. That broke
   section 22b, which had keyed off ".cmg-lede followed by a figure" — the
   photograph jumped back to 44% and the service cards tried three columns in
   the 600px left beside it. This keys off what actually matters instead: a
   page that has both a photograph and a card grid.
   It also makes booking blocks, promise lines and warning panels clear the
   photograph. A booking block squeezed into 606px beside a picture is the kind
   of misplaced button Chris asked me to watch for. */
@media (min-width:1025px){
  .cmg-page:has(> figure.cmg-shot):has(> .cmg-svc) > figure.cmg-shot{
    float:right !important; width:400px !important; margin:0 0 22px 44px !important; }
  .cmg-page:has(> figure.cmg-shot):has(> .cmg-svc) > .cmg-svc{
    overflow:hidden !important; grid-template-columns:repeat(2,minmax(0,1fr)) !important; }
  .cmg-page > .cmg-bk, .cmg-page > .cmg-cred, .cmg-page > .cmg-cta,
  .cmg-page > .cmg-promise, .cmg-page > .cmg-danger, .cmg-page > .cmg-now{ clear:both !important; }
}


/* ~~~~~ 26. THE EMPTY TOP OF THE NAVY HERO (Aug 2026) ~~~~~ */
/* The hero holds a 340px minimum height so a photograph has room to show. On
   the plain navy version there is no photograph, so on a wide screen that left
   a block of empty blue above the headline. Letting it size to its content
   takes 40-95px off each of those heroes on desktop and changes nothing on a
   phone, where the copy already fills the box. */
.cmg-page .cmg-hero-plain{ min-height:0 !important; }


/* ~~~~~ 27. BUTTONS THAT LOOK LIKE BUTTONS, BADGES THAT DO NOT (Aug 2026) ~~~~~ */
/* From Chris's own phone screenshots. Three separate faults:
     1. The price chip was a solid orange pill with white text — the exact
        shape and colour of the Book button next to it. On a phone it filled
        most of the width, so "£132.00 call-out and first 90 minutes" read as
        a button that did nothing when tapped. The ghost chip had the same
        problem against the Call button. Chips are now information: white
        card, navy text, orange edge, square-ish corners. Orange pills are
        actions and nothing else is.
     2. The footer Book Online button had padding 4px 0 — no side padding at
        all — so the words ran edge to edge in an 82px pill. It now has real
        padding and a 44px tap target, as does the header button on a phone,
        which was only 28px tall.
     3. Three Book Online links on the home page were Elementor's text-style
        buttons, so they rendered as plain orange text next to real buttons.
        They are solid pills now.
   Checked on the phone and on desktop before saving. */
/* price and credential chips read as information, not as actions */
.cmg-page .cmg-chip{
  background:#fff !important; color:#1B3461 !important;
  border:2px solid #EF7329 !important; border-radius:14px !important;
  font-size:17.5px; padding:8px 14px; }
.cmg-page .cmg-chip small{ color:#5B6B7D !important; font-weight:600; opacity:1; }
.cmg-page .cmg-chip-ghost{
  background:transparent !important; color:#E8EEF7 !important;
  border:1px solid rgba(255,255,255,.42) !important; border-radius:14px !important;
  font-size:14px; padding:7px 12px; font-weight:600; }

/* the header booking button is a real tap target on a phone */
@media (max-width:1024px){
  header .site-navigation ul.menu li.cmg-book-cta > a{
    padding:10px 18px !important; font-size:14px !important;
    min-height:42px; display:inline-flex !important;
    align-items:center; justify-content:center; }
}
/* the footer booking button had no side padding at all */
footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a{
  padding:12px 24px !important; font-size:15px !important;
  min-height:44px; display:inline-flex !important;
  align-items:center; justify-content:center; border-radius:999px !important; }

/* three Book Online links on the home page rendered as bare text */
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button{
  background-color:#EF7329 !important; color:#fff !important;
  border-radius:999px !important; padding:13px 26px !important;
  font-weight:700 !important; min-height:48px;
  display:inline-flex !important; align-items:center; justify-content:center; }


/* ~~~~~ 28. ONE LEFT EDGE ON THE PHONE TOO (Aug 2026) ~~~~~ */
/* From the page-by-page read of the mobile views. Sections 21 to 26 put the
   whole site on a single left edge above 1025px and left the phone as it was,
   which is why a phone still showed a centred headline over left-aligned copy,
   and why the five Elementor pages read roughly half centred and half left. */

@media (max-width:1024px){

  /* -- 28a. The page headline and its badge join the copy underneath. -- */
  .cmg-open{ text-align:left !important; }
  .cmg-open .cmg-open-h1{
    text-align:left !important; margin-left:0 !important; margin-right:0 !important; }
  .cmg-open-main > *{ text-align:left !important; }

  /* -- 28b. The credentials strip was landing 2 + 1 + 1 + 1, a staircase down
        the page. Two even columns, with the last item spanning both. -- */
  .cmg-page .cmg-proof{
    display:grid !important; grid-template-columns:1fr 1fr !important;
    gap:8px !important; }
  /* NOT display:flex — that collapses the space between the bold label
     and the number, giving "Gas Safe917962". */
  .cmg-page .cmg-proof span{ display:block; }
  .cmg-page .cmg-proof span:last-child{ grid-column:1 / -1; }

  /* -- 28c. The Elementor pages (home, about, services, contact, gallery) get
        the same left edge the hand-built pages already have. Booking cards,
        the Google badge and the icon cards are their own components and keep
        their own centring. -- */
  .elementor .elementor-widget-heading,
  .elementor .elementor-widget-heading > *,
  .elementor .elementor-heading-title,
  .elementor .elementor-widget-text-editor,
  .elementor .elementor-widget-text-editor > *{
    text-align:left !important; }
}

/* -- 28d. No stray single word — or lone full stop — on the last line of a
      paragraph. The credentials note under every booking block was ending with
      a 4px line containing nothing but the full stop. -- */
.cmg-page p, .cmg-page li, .cmg-page figcaption,
.elementor .elementor-widget-text-editor p{ text-wrap:pretty; }

/* -- 28e. For builders was setting its body copy one weight heavier than every
      other page, so the type changed as you moved between them. -- */
.cmg-page > p, .cmg-page > ul li, .cmg-page > ol li{ font-weight:400 !important; }



/* ~~~~~ 29. THE GOOGLE RIBBON WAS 8px WIDER THAN THE PHONE (Aug 2026) ~~~~~ */
/* The navy strip across the top of the header is drawn as a pseudo-element and
   pulled full-bleed with negative side margins that cancel the header's own
   padding. On desktop the two match exactly (32px padding, -32px margin). Under
   880px the padding drops to 12px but the margin stayed at -20px, so the strip
   hung 8px past the right edge of every page on every phone and tablet - enough
   to give the whole site a small sideways scroll. Match the margin to the
   padding and the strip ends flush. */

@media (max-width:880px){
  body .site-header::before{
    margin-left:-12px !important;
    margin-right:-12px !important;
  }
}


/* ~~~~~ 30. THE HOME PAGE SCROLLED SIDEWAYS BY THE WIDTH OF A SCROLLBAR ~~~~~ */
/* The full-bleed pillars band on the home page is sized with width:100vw. A vw
   unit counts the scrollbar; the page's usable width does not. So on any screen
   that draws a real scrollbar the band was wider than the page by exactly the
   scrollbar, and the whole home page could be dragged 8px to the side.
   overflow-x:clip trims the overhang without turning the body into a scroll
   container, so the sticky header still sticks (overflow-x:hidden would break
   it). Measured identical header behaviour with and without at 1440, 1024, 768
   and 390. */

/* CORRECTED: body{overflow-x:clip} propagated to the root element and stopped
   the whole site scrolling. Clipping the Elementor page wrapper instead keeps
   the viewport out of it. */
.elementor{ overflow-x:clip; }


/* ~~~~~ 31. THE FOOTER "BOOK ONLINE" WAS ONLY A BUTTON ON A PHONE ~~~~~ */
/* The orange fill on the footer booking link was written inside a
   @media (max-width:1024px) block, so above 1024px it lost its background and
   sat in the footer menu as pale grey text between "For builders" and
   "Terms & Conditions" - with a 24px gap either side, which made it read as a
   spacing fault rather than a button. Same complaint Chris raised about the
   phone, one breakpoint up. The pill now applies at every width; the padding
   rule from section 27 already did. */

footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a{
  background:#EF7329 !important;
  color:#fff !important;
  border-radius:999px !important;
  font-weight:600 !important;
  line-height:1.2 !important;
}
footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a:hover,
footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a:focus{
  background:#D9631F !important;
  color:#fff !important;
}


/* ~~~~~ 32. THE HEADER ON ONE ROW (Aug 2026) ~~~~~ */
/* Chris: "move the boilers, plumbing, bathrooms, landlords, about, contact and
   phone number to the right up to the book online button then the header banner
   can be condensed." The header was flex-direction:column, so the logo sat on
   one row and the whole menu on a second, giving a 217px header before any
   content started. Turned side by side with the nav pushed right by
   margin-left:auto, it comes down to 118-124px. flex-wrap is left on so the nav
   drops to its own line rather than overflowing when it genuinely will not fit;
   the Google ribbon is forced onto its own full-width line with flex-basis 100%
   and order -1 so it stays a band across the top. Below 1280px the logo and the
   menu together are wider than the page, so it keeps two rows but with a
   smaller logo and tighter menu rows - 155px rather than 217px. The phone
   header (max-width 880px) is untouched. */

@media (min-width:1280px){
  header.site-header{
    flex-direction:row !important; flex-wrap:wrap !important; align-items:center !important;
    justify-content:flex-start !important; row-gap:0 !important; column-gap:20px !important;
    padding-top:10px !important; padding-bottom:10px !important; }
  header.site-header::before{ flex:0 0 100% !important; order:-1 !important; margin-bottom:10px !important; }
  header.site-header .site-branding{ flex:0 0 auto !important; }
  header.site-header img.custom-logo{ height:50px !important; width:auto !important; }
  header.site-header nav.site-navigation{ margin-left:auto !important; width:auto !important; flex:0 0 auto !important; }
  header.site-header nav.site-navigation ul.menu{ width:auto !important; flex:0 0 auto !important; justify-content:flex-end !important; flex-wrap:nowrap !important; }
  header.site-header nav.site-navigation ul.menu > li > a{ padding-left:10px !important; padding-right:10px !important; }
  header.site-header nav.site-navigation ul.menu > li.cmg-book-cta > a{ padding-left:22px !important; padding-right:22px !important; }
}
@media (min-width:1440px){
  header.site-header img.custom-logo{ height:56px !important; }
  header.site-header nav.site-navigation ul.menu > li > a{ padding-left:13px !important; padding-right:13px !important; }
}
@media (min-width:881px) and (max-width:1279px){
  header.site-header{ padding-top:8px !important; padding-bottom:8px !important; row-gap:2px !important; }
  header.site-header img.custom-logo{ height:46px !important; width:auto !important; }
  header.site-header nav.site-navigation ul.menu > li > a{ padding-top:8px !important; padding-bottom:8px !important; }
}


/* ~~~~~ 33. ONE COLUMN, A PROPER MEASURE, AND ROOM TO BREATHE (Aug 2026) ~~~~~ */
/* Two goes at this. First Chris said the layout was "too central" - the cause was
   two widths on one page, coloured bands running to 1140px while the paragraphs
   stopped at 720px, so the right-hand side never settled on an edge. Taking
   everything to one 900px column fixed the edge but produced 116 characters per
   line, and he came straight back with "too condensed... doesn't look cramped".
   He was right, and it is measurable: Baymard and WCAG 1.4.8 both put the
   readable limit at 75-80 characters, so 116 was well past it.

   So: one column at 680px, which measures ~80 characters at 17.5px - one edge
   everywhere, no raggedness, and a line length you can actually read. Then the
   density: type up from 16px to 17.5px, 59px of air above every H2 instead of
   34px, 20px between paragraphs instead of 14px, cards two across at 330px with
   24px of padding instead of four across at 215px with 16px. The page gets
   taller. That is the point.

   .cmg-acts needs no max-width now the column is 680px - its two buttons at
   flex:1 1 auto fill it without looking stretched. */

@media (min-width:1025px){
  .cmg-page, .cmg-open{
    max-width:680px !important;
    margin-left:auto !important; margin-right:auto !important; }
  .cmg-page > h2, .cmg-page > h3, .cmg-page > p, .cmg-page > ul, .cmg-page > ol,
  .cmg-page .cmg-danger, .cmg-page .cmg-promise, .cmg-open .cmg-open-h1,
  .cmg-page > figure, .cmg-page .cmg-hero-body > h2, .cmg-page .cmg-hero-body > h3,
  .cmg-page .cmg-hero-body > p, .cmg-page .cmg-hero-body > .cmg-acts{
    max-width:none !important; }

  .cmg-page{ font-size:17.5px !important; }
  .cmg-page > p, .cmg-page > ul, .cmg-page > ol{
    font-size:17.5px !important; line-height:1.68 !important; margin-bottom:1.15em !important; }
  .cmg-page > ul li, .cmg-page > ol li{
    font-size:17.5px !important; line-height:1.68 !important; margin-bottom:.6em !important; }
  .cmg-page > h2{ font-size:28px !important; line-height:1.24 !important;
    margin-top:2.1em !important; margin-bottom:.55em !important; }
  .cmg-page > h2:first-of-type{ margin-top:1.1em !important; }
  .cmg-page > h3{ font-size:20px !important; margin-top:1.6em !important; margin-bottom:.45em !important; }

  .cmg-page .cmg-ans{ grid-template-columns:repeat(2,1fr) !important; gap:20px !important; }
  .cmg-page .cmg-ans > .cmg-card:nth-child(5):last-child{ grid-column:1 / -1 !important; }
  .cmg-page .cmg-card{ padding:22px 24px !important; }
  .cmg-page .cmg-card h3{ font-size:18px !important; margin-bottom:.5em !important; }
  .cmg-page .cmg-card p{ font-size:17.5px !important; line-height:1.62 !important; }

  .cmg-page .cmg-proof{ gap:10px !important; margin:22px 0 30px !important; }
  .cmg-page .cmg-bk{ padding:26px 28px !important; margin:34px 0 !important; }
  .cmg-page .cmg-promise{ padding:22px 24px !important; margin:30px 0 !important; }
  .cmg-page .cmg-danger{ padding:22px 24px !important; margin:24px 0 !important; }
  .cmg-page .cmg-hero .cmg-hero-body{ padding:30px !important; }
  .cmg-page .cmg-steps > li{ margin-bottom:1em !important; line-height:1.68 !important; font-size:17.5px !important; }
}


/* ~~~~~ 34. "Call01204 961827" - THE THIRD TIME (Aug 2026) ~~~~~ */
/* a.cmg-b1 and a.cmg-b2 are display:inline-flex. That makes the label "Call" and
   the span holding the number two separate flex items, and the whitespace
   between flex items is thrown away - so the markup has a space and the screen
   does not. Same fault as the proof strip in section 28b and the header in 28.
   A gap on the button restores it for every instance at once instead of
   hand-editing each page, and does nothing to buttons whose label is a single
   text node. */

.cmg-page a.cmg-b1, .cmg-page a.cmg-b2{ gap:.32em !important; }


/* ~~~~~ 35. ROOM ABOVE THE PAGE TITLE (Aug 2026) ~~~~~ */
/* Chris: "the title texts they are squashed upto the top." There were 4px
   between the bottom of the sticky header and the top of the H1. */

.cmg-open{ padding-top:26px !important; }
@media (max-width:1024px){ .cmg-open{ padding-top:16px !important; } }


/* ~~~~~ 36. THE PHOTO OF CHRIS BY THE VAN (Aug 2026) ~~~~~ */
/* Chris: "the about chris picture only shows the top half of my head." The photo
   is 1600x1802 - taller than it is wide - and it was being used in a band three
   times wider than it was tall, so background-size:cover showed only 29% of the
   picture height and cut him off at the collar. Taller band, focal point lower:
   head, shoulders, folded arms and the CMG logo on the gilet, with the van
   behind. Checked against the source image rather than guessed - his head starts
   at 31% of the image height and his hands are at 72%. */

.elementor-32 .elementor-element.elementor-element-2ca5d2c0,
.elementor-element-2ca5d2c0{
  background-position:center 40% !important; }
@media (min-width:1025px){
  .elementor-32 .elementor-element.elementor-element-2ca5d2c0,
  .elementor-element-2ca5d2c0{ min-height:620px !important; } }
@media (min-width:768px) and (max-width:1024px){
  .elementor-32 .elementor-element.elementor-element-2ca5d2c0,
  .elementor-element-2ca5d2c0{ min-height:520px !important; background-position:center 38% !important; } }
@media (max-width:767px){
  .elementor-32 .elementor-element.elementor-element-2ca5d2c0,
  .elementor-element-2ca5d2c0{ min-height:440px !important; background-position:center 32% !important; } }


/* ~~~~~ 37. THE PHONE: TITLE CENTRED, PILLS THE RIGHT HEIGHT (Aug 2026) ~~~~~ */
/* Chris, from his own phone: "the title text and google button is to the left and
   I want it central. On every mobile view page." This reverses the decision in
   section 28a, which pulled the headline left to line it up with the copy under
   it. His call, and it does look better balanced on a narrow screen.

   Second fault in the same screenshots: the credentials pills were a two-column
   grid with the default align-items:stretch, so "WaterSafe approved" was being
   stretched from 39px to 84px to match "24-month workmanship guarantee" beside
   it - a two-word label inside a big empty rounded box, which read as a broken
   button. align-items:start lets each pill be its own height. */

@media (max-width:1024px){
  .cmg-open,
  .cmg-open .cmg-open-h1,
  .cmg-open-main > h1.cmg-open-h1,
  .cmg-open-sub .cmg-open-h1{ text-align:center !important; }
  .elementor h1.elementor-heading-title{ text-align:center !important; }
  .cmg-legal h1.cmg-legal-title{ text-align:center !important; }
  .cmg-open-main > p{ text-align:center !important; }
  .cmg-page .cmg-proof{ align-items:start !important; }
}


/* ~~~~~ 38. A BUTTON ON ITS OWN SHOULD NOT STRETCH (Aug 2026) ~~~~~ */
/* The Text button came off the emergency plumbing page at Chris's request, which
   left "Call 01204 961827" alone in its row. The buttons in .cmg-acts are
   flex:1 1 auto so they share the row evenly, and with only one left it grew to
   620px across the hero. On a phone a near-full-width button is right, so this
   only applies from 1025px up. */

@media (min-width:1025px){
  .cmg-page .cmg-acts > a:only-child{ flex:0 0 auto !important; }
}


/* ===== Heat pumps page: stronger overlay on the photo hero ===== */
.page-id-961 .cmg-hero::after{ background:linear-gradient(rgba(28,52,98,.55) 0%, rgba(28,52,98,.78) 52%, rgba(28,52,98,.94) 100%); }


/* ===== Heat pumps nav item: grant tag ===== */
.site-header .site-navigation ul.menu > li.cmg-hp-nav > a{ position:relative; }
@media (min-width:782px){
  .site-header .site-navigation ul.menu > li.cmg-hp-nav > a::after{ content:none; /* "£7,500 grant" label removed 19 Aug 2026 - Chris: looks out of place */ }
}

/* ===== Proof strip: tidy bubbles on tablet/phone (all service pages) ===== */
@media (max-width:1024px){
  .cmg-page .cmg-proof span{ display:flex; flex-wrap:wrap; column-gap:4px; align-items:center; align-content:center; justify-content:center; text-align:center; padding:8px 10px; border-radius:14px; font-size:14px; line-height:1.3; }
  .cmg-page .cmg-proof span:nth-child(3){ grid-column:1 / -1; width:max-content; justify-self:center; }
  .cmg-page .cmg-proof span:last-child{ grid-column:auto; }
  /* proof-stretch */ .cmg-page .cmg-proof{ align-items:stretch !important; }
}


/* ~~~~~ 39. THE DESKTOP LAYOUT IS NOT A COLUMN (Aug 2026) ~~~~~ */
/* Chris: "all the pages are running central in a column like view. this is ok for
   mobile but doesnt look right online." He was right, and it was my doing -
   section 33 put everything into one 680px column to fix a line length of 116
   characters. That fixed the reading and turned a website into a document.

   The fix is to stop making one measurement do two jobs. From 1200px up the page
   is two columns: the reading column keeps a sane measure while the hero and the
   credentials strip span the full 1140px, and the booking block becomes a sticky
   sidebar on the right that follows you down the page - so the price and the Call
   button are on screen the whole way through rather than only at the two ends.
   Below 1200px it collapses back to the single column, which is what a phone
   wants.

   Selector note: .cmg-bk:first-of-type does NOT work here. :first-of-type counts
   element type, and the first DIV child of .cmg-page is .cmg-hero, so it matches
   nothing. Style every .cmg-bk as the sidebar, then put the last child back. */

@media (min-width:1200px){
  .cmg-page{
    max-width:1140px !important;
    display:grid !important;
    grid-template-columns:minmax(0,1fr) 340px !important;
    column-gap:48px !important;
    align-items:start !important;
  }
  .cmg-page > *{ grid-column:1 !important; }
  .cmg-page > .cmg-hero,
  .cmg-page > .cmg-proof{ grid-column:1 / -1 !important; }
  .cmg-page > .cmg-bk{
    grid-column:2 !important;
    grid-row:3 / span 200 !important;
    position:sticky !important;
    top:24px !important;
    align-self:start !important;
    margin:0 !important;
  }
  .cmg-page > .cmg-bk:last-child{
    grid-column:1 / -1 !important;
    grid-row:auto !important;
    position:static !important;
    margin:34px 0 0 !important;
  }
  .cmg-page .cmg-ans{ grid-template-columns:repeat(2,1fr) !important; }
}


/* ~~~~~ 40. THE BUBBLES WERE BLAND (Aug 2026) ~~~~~ */
/* Chris, from his phone: "the bubbles look a little bland." They were - white
   boxes with a hairline grey border and no shadow, so the credentials read as
   empty outlines and the answer cards all looked the same weight.

   The credentials now carry an orange tick, which is the right mark for a list of
   things that have actually been verified, and they go to one full-width column
   on a phone. That was five pills at 40px each instead of a ragged 2+1+2 block of
   59px and 79px rows - tidier AND barely any taller. The answer cards get a soft
   shadow and a coloured left edge: navy for the ordinary ones, orange for the key
   one, so the important card looks important instead of merely tinted.

   width:100% on the pills is deliberate - one of them was resolving to 185px
   despite justify-self:stretch and grid-column 1/-1. */


/* --- 40a. the credentials pills get a tick and a little depth --- */
.cmg-page .cmg-proof span{
  background:linear-gradient(180deg,#ffffff 0%,#F6FAFE 100%) !important;
  border:1px solid #D7E3F2 !important;
  box-shadow:var(--cmg-e1) !important;
  display:flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:.5em !important;
  padding:9px 16px 9px 12px !important;
  text-align:left !important;
}
.cmg-page .cmg-proof span::before{
  content:"" !important;
  flex:0 0 16px !important;
  width:16px !important; height:16px !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='10' fill='%23EF7329'/%3E%3Cpath d='M5.6 10.3l2.7 2.7 6-6' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
  background-size:16px 16px !important;
  background-repeat:no-repeat !important;
}
.cmg-page .cmg-proof span b{ color:#1B3461 !important; }

@media (max-width:1024px){
  .cmg-page .cmg-proof{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:8px !important;
  }
  .cmg-page .cmg-proof span{
    grid-column:1 / -1 !important;
    justify-self:stretch !important;
    padding:11px 16px 11px 12px !important;
    width:100% !important;
    box-sizing:border-box !important;
  }
}

/* --- 40b. the question cards get depth and a coloured edge --- */
.cmg-page .cmg-card{
  background:#ffffff !important;
  border:1px solid #DCE6F3 !important;
  border-left:4px solid #1B3461 !important;
  box-shadow:0 2px 10px rgba(28,52,98,.07) !important;
}
.cmg-page .cmg-card-key{
  background:linear-gradient(180deg,#FFF7F0 0%,#ffffff 100%) !important;
  border:1px solid #F3C9A6 !important;
  border-left:4px solid #EF7329 !important;
  box-shadow:0 3px 14px rgba(239,115,41,.14) !important;
}
.cmg-page .cmg-card h3{ color:#1B3461 !important; }


/* ~~~~~ 41. WHAT THE MEASUREMENTS MISSED (Aug 2026) ~~~~~ */
/* Section 39 measured clean on every page and still looked wrong, because I had
   checked numbers instead of looking at it. Two faults, both only visible:

   1. The page title lives in .cmg-open, which is a separate element from
      .cmg-page. Section 39 widened .cmg-page to 1140px but left .cmg-open on the
      old 680px reading width, so the heading sat indented 230px from the hero
      directly beneath it. The title now shares the container width.

   2. .cmg-bk was designed as a wide two-column band, so as a 340px sidebar its
      grid resolved to a 65px column and a 328px column - the heading came out one
      word per line, and .cmg-bk-note ran 113px outside the page entirely. It was
      outside the container but still inside the viewport, which is why an
      overflow check against the viewport never caught it. Inside the sidebar it
      goes back to stacked blocks with full-width buttons.

   Verified by eye at 1905px as well as by measurement. */

@media (min-width:1200px){
  .cmg-open{
    max-width:1140px !important;
    margin-left:auto !important;
    margin-right:auto !important;
  }

  .cmg-page > .cmg-bk:not(:last-child){ display:block !important; }
  .cmg-page > .cmg-bk:not(:last-child) .cmg-acts{
    grid-area:auto !important;
    display:flex !important;
    flex-wrap:wrap !important;
    gap:10px !important;
    margin-top:14px !important;
  }
  .cmg-page > .cmg-bk:not(:last-child) .cmg-acts > a{ flex:1 1 100% !important; }
  .cmg-page > .cmg-bk:not(:last-child) .cmg-bk-note{
    width:auto !important; max-width:none !important; margin-top:12px !important;
  }
}


/* ~~~~~ 42. THE HEAT PUMP HERO WAS CROPPING TO NOTHING (Aug 2026) ~~~~~ */
/* Same fault as the About photo: a portrait photograph in a 340px letterbox band.
   At the default 50% 50% the visible slice was brick and sky with the unit below
   the cut, so the hero read as a plain navy block. Dropping the focal point to
   66% puts the heat pump itself in the band. Checked against the source image,
   not guessed. */

.page-id-961 .cmg-hero-img{ object-position:50% 66% !important; }


/* ~~~~~ 43. THE SIDEBAR WAS SLIDING UNDER THE HEADER (Aug 2026) ~~~~~ */
/* Chris: "the book a quote box gets cut off when i scroll down." The sticky
   sidebar was pinning at top:24px, but the site header is also sticky, 124px
   tall and z-index 9999 - so the top 94px of the sidebar parked underneath it and
   the heading and first sentence disappeared. The offset now clears the header.
   The header is two rows between 1200 and 1439 and one row above that, hence the
   two values.

   Second fault on the same page: a portrait photograph sitting alone in the
   752px reading column came out as a 331px sliver with dead space beside it -
   Chris: "this image underneath the text makes the page look like there is too
   much space." Cropping it to a letterbox band lost the job. Image and caption
   side by side fills the column and keeps the whole photograph. */

@media (min-width:1200px){
  .cmg-page > .cmg-bk{ top:150px !important; }

  .cmg-page > figure.cmg-shot{
    display:flex !important;
    align-items:flex-start !important;
    gap:26px !important;
    width:100% !important;
  }
  .cmg-page > figure.cmg-shot img{
    flex:0 0 46% !important;
    width:46% !important;
    height:auto !important;
    max-height:440px !important;
    object-fit:contain !important;
    align-self:flex-start !important;
  }
  .cmg-page > figure.cmg-shot figcaption{
    flex:1 1 auto !important;
    margin:0 !important;
    font-size:16px !important;
    line-height:1.6 !important;
  }
}
@media (min-width:1440px){
  .cmg-page > .cmg-bk{ top:142px !important; }
}


/* ~~~~~ 44. TWO CORRECTIONS TO 43 (Aug 2026) ~~~~~ */
/* Chris: "the book a quote box now moves down great but doesnt stop at the
   bottom. and the pic with the writing next to it doesnt look right."

   1. The sticky card rode over the closing booking block. My grid-row:3/-2 was
      wrong: negative grid line numbers resolve against the EXPLICIT grid, and
      every row here is implicit, so -2 never pointed where I meant. Rather than
      count rows, let the closing block paint over the card - it slides behind it
      at the end of the page, which is what a sticky sidebar should do anyway.

   2. Photo beside its caption left a short caption stranded at the top of a tall
      photograph with a large empty block beneath it. The photo now fills the
      reading column as a landscape crop with the caption underneath - no dead
      space, and the boiler and pipework are still the subject. Focal point at 38%
      keeps the appliance in frame on a portrait source. */

@media (min-width:1200px){
  .cmg-page > .cmg-bk{ grid-row:3 / span 200 !important; z-index:1 !important; }
  .cmg-page > .cmg-bk:last-child{ position:relative !important; z-index:2 !important; }

  .cmg-page > figure.cmg-shot{ display:block !important; width:100% !important; }
  .cmg-page > figure.cmg-shot img{
    flex:none !important;
    width:100% !important;
    height:470px !important;
    object-fit:cover !important;
    object-position:50% 38% !important;
    border-radius:14px !important;
  }
  .cmg-page > figure.cmg-shot figcaption{
    margin:10px 0 0 !important;
    font-size:16px !important;
  }
}


/* ~~~~~ 45. THINGS I ONLY FOUND BY SCROLLING THROUGH IT (Aug 2026) ~~~~~ */
/* All four of these measured clean and looked wrong.

   1. The closing booking block overflowed .cmg-page by a constant 118px and
      landed on the footer. Constant in every configuration I tested, including
      with the sidebar not sticky and not spanning - so this pre-dates the
      two-column layout rather than being caused by it. Bottom padding on the
      container contains it.
   2. Photos nested inside a card grid rendered as 161px thumbnails in a 366px
      cell.
   3. A lone photo in a two-column grid left half the row empty - the same "too
      much space" fault Chris flagged, one level down.
   4. Five numbered steps laid across three 236px columns shredded the text to
      two or three words a line. A numbered list reads as a list. */

@media (min-width:1200px){
  .cmg-page{ padding-bottom:150px !important; }

  .cmg-page .cmg-ans figure.cmg-shot{
    margin:0 !important; width:100% !important; max-width:none !important;
  }
  .cmg-page .cmg-ans figure.cmg-shot img{
    width:100% !important; height:280px !important;
    object-fit:cover !important; object-position:50% 45% !important;
    border-radius:14px !important;
  }
  .cmg-page .cmg-ans figure.cmg-shot figcaption{
    margin:10px 0 0 !important; font-size:16px !important;
  }
  .cmg-page .cmg-ans > figure.cmg-shot:first-child:last-child{
    grid-column:1 / -1 !important;
  }
  .cmg-page .cmg-ans > figure.cmg-shot:first-child:last-child img{
    height:430px !important;
  }

  .cmg-page ol.cmg-steps, .cmg-page ul.cmg-steps{ display:block !important; }
  .cmg-page ol.cmg-steps > li, .cmg-page ul.cmg-steps > li{
    width:auto !important; margin-bottom:1em !important;
  }
}


/* ~~~~~ 46. PLAYBOOK AUDIT: THE TYPE SCALE (Aug 2026) ~~~~~ */
/* Playbook 2.3: seven sizes maximum across the site - more is the clearest
   amateur tell there is. The service pages had grown twelve distinct sizes in
   the content alone (12.5, 13, 13.5, 15, 16, 16.5, 17.5, 18, 19, 25, 28, 32).
   Consolidated to seven: 14 caption / 16 secondary / 17.5 body / 20 h3 /
   25 hero h2 / 28 h2 / 34 h1. Small print merges up to 14, the two mid bodies
   merge, and the two competing h3 sizes become one. */

@media (min-width:1025px){
  .cmg-page small, .cmg-chip small,
  .cmg-page .cmg-bk-note, .cmg-page .cmg-bk-note a,
  .cmg-page .cmg-chip, .cmg-page .cmg-chip b,
  .cmg-page .cmg-proof span{ font-size:14px !important; }

  .cmg-page .cmg-promise-s,
  .cmg-page .cmg-hero-p,
  .cmg-page figcaption,
  .cmg-page .cmg-card p,
  .cmg-page .cmg-bk p{ font-size:16px !important; }

  .cmg-page .cmg-card h3,
  .cmg-page .cmg-bk h3,
  .cmg-page > h3,
  .cmg-page .cmg-promise-t,
  .cmg-page .cmg-danger h3{ font-size:20px !important; }

  .cmg-open .cmg-open-h1{ font-size:34px !important; }
}


/* 46b. footer small print joins the 14px caption size (was 12.5 and 13.5) */
@media (min-width:1025px){
  footer.site-footer a, footer.site-footer li, footer.site-footer p,
  footer.site-footer span{ font-size:14px !important; }
  footer.site-footer nav.site-navigation ul.menu > li > a{ font-size:15px !important; }
}


/* ~~~~~ 47. REVIEWS GO STATIC (Aug 2026) ~~~~~ */
/* Playbook kill list: carousels and auto-scrolling elements lose - award-dated,
   conversion-negative. Chris confirmed: make them static. The marquee track
   holds 7 unique cards duplicated to 14 for the loop; now the first three show
   as a fixed grid and the rest are hidden. One column on the phone. */

.cmg-rev{ height:auto !important; overflow:visible !important;
  mask:none !important; -webkit-mask:none !important; /* 47b: the marquee edge-fade mask was erasing the left of the first static card */ }
.cmg-rev::before, .cmg-rev::after{ content:none !important; }
.cmg-rev-track{
  animation:none !important;
  transform:none !important;
  display:grid !important;
  grid-template-columns:repeat(3,1fr) !important;
  gap:20px !important;
  width:auto !important;
}
.cmg-rev-track > *:nth-child(n+4){ display:none !important; }
.cmg-rev-card{ width:auto !important; }
@media (max-width:781px){
  .cmg-rev-track{ grid-template-columns:1fr !important; }
}


/* ~~~~~ 48. THE CONTACT PORTRAIT COULD NEVER WORK AS A BAND (Aug 2026) ~~~~~ */
/* Chris: "contact page photo is not right with my face too big." Measured, not
   argued: the band is 1905x460 and the portrait is 1000x1500, so cover showed
   16% of the photo - a forehead at full width. No focal point rescues a tight
   headshot in a 4:1 letterbox. The band now uses the van photo, which is
   composed for exactly this shape and already works on the About page, with the
   same heights and focal point as section 36. */

.elementor-element-614a4d66{
  background-image:url("/wp-content/uploads/2026/08/chris-van-photo-edited.jpg") !important;
  background-position:center 40% !important;
}
@media (min-width:1025px){ .elementor-element-614a4d66{ min-height:620px !important; } }
@media (min-width:768px) and (max-width:1024px){ .elementor-element-614a4d66{ min-height:520px !important; background-position:center 38% !important; } }
@media (max-width:767px){ .elementor-element-614a4d66{ min-height:440px !important; background-position:center 32% !important; } }


/* ~~~~~ 49. POPPINS SELF-HOSTED (Aug 2026) ~~~~~ */
/* Playbook Phase 7: self-host the fonts. The theme was requesting all 18
   Poppins variants from Google on every load; the site uses five. These
   @font-face blocks embed the latin woff2 subsets directly, font-display:
   swap, so the type ships with the page instead of via a render-blocking
   third-party chain. Ships together with LiteSpeed "Remove Google Fonts" -
   one without the other is either dead weight or a broken font. */

@font-face{font-family:'Poppins';font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAACHcAAwAAAAAREQAACGJAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGx4cLgZgAIFUCvB42U0LgzYAATYCJAOGaAQgBYNUB4QLGw02syLYOAAgoW0kilJFibL/aiFTGczH7hqTMolJRFZta4MyiEn2BTZ38IVWInfrV+rSBnXjIad/50dIMtvy/P+P++fnWud+EOmP35ggNiI0JSIkRKtUqBLx7eH5ufUGvWT0gMHYJGrAmrGo/gvWZCkYoI0ReamYdwf2FZh1bZxXpXetZ07cP5Crp10WuidmX7QBx9nfX+nMQLd7DpPLFDVQCbR3K/ts61nOKMD6RJVbu33QM1QBRMkQQPzfuUxt8uYOmIcofy9aTihCdwRq0B4l/QO5v7dptvu1XhPpwuVRAIvuFKBqEy7K1Km0b/fLu/v1BStg48HKcsaigCIXgoCskB2EEgAMAZ/Dh7oLAFSEFVDTYNGl6NKWuVQEZkstS5fdYQi4FYX/fe8YTutRtYlllhJDD4nCun/PEMCO8szywM46R2MBSeIAZiBFqQSJhcTsW8L9FJAeGT/s8ymn36yrslo80MfrmGfU9xl48aJEAXgfH/i2s8TnXyXTgxHgyH3icrb2Cm062nM4AC+QrB7dk4DDmWQWsAB7RwKbt8U5T45NezyRgF3M8X9qY+7pTvXjfnp4OiGHkE8gEooJbIKEcLCQSEwlZggLlG0Eu2tMM9MI2YQ807pvVDO/z5N5b9ZM11bySy9+e/HDw7cfHn947OHhhwcfbn245mH5F299PvX5BwDmQL7WM/Pu1+EvYLfdgX1+B2DtCeRfOiM97lOseDFgIJgAy1sas+2JFTMOJ3A+CYoduZhtC0MxObfDYLSHLicBswJioBgQnN0UVSYQI47DxJXOQcpRAAqlns6IpT1h0Cjv1hBGkNJ9YcwkYSWQEk7QMCYYmOAcgkA+iecIbZVPXqmidvqeaD1t3aqRhVjATvineKopLTlx3DJqsjlKybEWSQ/fd5lD9PAO6LTqvNNZ0JUOGcwJp6EUa7Y9+T4YsuJ8fOF71Oqb20KGr/X/wlyVv4odelVK4OVg0yuGbWfbt1EksnBLlognQh/S8CCEJv48gr4t+BUaR6eP16RnDVZ4hINSCvW7zzD+UWChbRHSYFU+nCKKbAP0g3vYyJCN3RE9OkTAqJ3byApJJA2MDUhjE4AF7Zb3KnReLvhRW6MQYJ6rrKGkrNg4PuQLxlJJOXPIGSmQ8ITQynxO+ApKSq/QRfQ+RpaRhM0XNL09yKbt4Dzp5VXtN/TExobe2lN7ph+lk1xaTT/t55gEdWvRg7z/WMTUCkh50C/RnHhLy7l2pCe4rXxBSHaDYkrwWv7TDhy3V771htVxcJp4/2/xRnMiIpDEtwBbkiTF2xApViw12oaBRf1zGKC79CVXElaGAwf/DykGTQsBVY6XQeQmYwzM3NTTABtZXncC5OQTOAtDJFgn52oVB0M+VFvD1vxasKFAP9gRjcHa9BwwW2iY6dJ0WcgRNIBZkGNbLsSBl1gKdOg9W/veCebW8bcGJ8D6bD6PoM9wkmALDt2/73J2oGijTi5nBDPL93+qqlJxco68gKoytNziyT5Ii5HqkM6eE48A6/FKVSkWSYdGcHFIN1EWQel7diAnFITl13wgUp77qn9aEEr1LD2VwSRZDSIMD+AO20Wcadz/uTQtffD+tAtWKghsjIOKGt/vKGzhNLVqj/ChlqSkdAoWm6A8fiL35QqrsMfyVV5kH30GTu/vMtWlcjf48KEztPSCG806BQ4gmyHokEicDgPMkg7EBYfILy3BiYEWhtONkDZjyWvHTGLF2pK68ppWOUQ/Vy3vlUVW3FeBJCS6JIzbI6GZyOuIPkWBZvQ3PKcp+bsBgbDqoi8KO+FMt0hQ+xi5GUftrpax1fogAtHMarDWwKGtksC3zWb/g4+zK4YRLOAufNDw/EHTgui/n14WptshiHULgU0DiZBGYwKTTG3GbUxCwg09SUrgpjduWhHJD2JFMaLRKZsMWuXaBm69FOQSVCKBW7wbd0lgdNs6sPrQ6AYawTYptoGabrwePoY5ddbvjtoi/PEwEU0L6VqGtF3+6dZiUNRuVlWN3iLyj9kY9LY8pb2XeEY8m3hjz2ZGORo0o1jo/Zdvmh/1aGA8DzF6r8Jwv23IkQgyHkGhIph0GqDrJxnqR2c/eZ89rnOKtc5LggtCI83qek3UEVC60Bjds9z/sgoWi6g7I/1nY3GmiI584KWiFXKn5gLGLQrYpnugErRKFYsTyVkbGheKruyTQcdvgokHs2S+ZE02aOMkrgLuWF4oFywg9Z/EcSPssXZ0ZMcQiMB5ZdTgsEpCCUQs3Qm1ImstonklCec1WNk6x1vsGMxhFSvUc3nC5Pt8GPdWnxDQeIdgHUS+t4GNUZHg4uu5qxE42EATDr0NaK1FbwceT5Qu2MKxjyWdT8TuXgMx9Goq6LWnHe+64hOnv3V3Et3Xsa9ng8cmJ8vMP+jWaLzurLxFDA/yYgLwfmr1hECl+3EWvAkwc8253rHELBBGNLuzxIFm9Qmhb6xetuYSv79B8+31fZK+vWbl6qvUV+d5D7s6cWBEk037LCRaOA18v49iY2wDal1MioFGu6VikMqlqU7kgsMmkywlWRgwcOlNVxvBjxhas/kr60i6UVPF68uO9UTYBS0NU9hYmjzu/Ev9jl2FQQv3kH7NjQVu+vhpEaMB/Sd5jpnY46JFVpAVI0m8Td9GwCP4fT+NaUs7OgQLk+xsG3gMyaWqP9VlCg7Pa05+abXDkBK/KsOAeug6LJIlIiScgt7PLwhnIcP2o+ectVK+5+m3NmhBNbAgTI/v9VFpyIEnBS2aqjefWu9OHdI54AWZdDMwrf1sYna6Pe3DUWtza0Ywg89mHRFEAO9qXRIFEiLTZale++olkRlGGKAjqUOir1StUBKU3kqXx0qTYMcdRZ2pkKycZsK7iqV+GgXlym9iUPq+0dBv5LJyd2PhVEUZbE6E4GCRGKevpAyfBxanAbOmtUCzzlYkfugIQMQ+IaSxsBYXgLFqBb5kzcKz2omjNGOr6WLPT9pk/HKNarJfkJPLphoqkQGylKU5aAbJdXusQ49a+zRuxDPVGp4gDTokuGLon26fnCotKIE+Ag9vplUjCzQoSrKdPc9IA175J+336XqORR3hSeEe2esQ2NOpt64aTQrb+3nYZ+Z8BdUwir8fCPdOggu2ni5lYWIZcAeSGl+LX6bRExgysccLDVuGwjYYMITatrkCUOWpAD0D/UK8vIFLjOWuuIRXcCGfNeVfSGZ7rtluk5hrMCjT95ga/dyRu0+hHuHsji9WrvsqXH0VJ3twYuucpq8tNddNJbqNRrAbwOXcJn7NhGcqk6iU8r07t0SILLQmdW1SfXU426V5+/OAOq4JYUSDsxK+eW4eBzgL7tmEIGKBZPas+McRxkQn078qgYVOgo89H+P3LYU7x4CX0xXBDOeqF0TGnhYP4BOBZxrtM+/Zy1n5J/OzTsUJ8QBFzaua4mdOfVo5GhOsuyw7PobWb9NO2x25Bd3bUfpDJ8z2eQ8yY45nt/Sb6Ba4hsZuXlL+W5sMj6hNp87l2SJ1wliUgYEyGBK8ZlE6zl92JrHi71WyPHhtBgVpXNDojUebGGiTOdHqiVN34hKLyj8v+UqsqBt9zE4oTv6i7PuIjL8ShLp9egFLxGWgCQhRg4H/tEop1cylmEkoZdJLftlCRhb8gie+HMpOIfyapz3NREyEqfb9mpjjejFMRhSAPOKLoWws4Zc8IHp76bzt/SroxDBFEejymi0dox4SpzCHSbf6qnkyo5yVjIXi4PmjhVWTZdmda9+80eroDDSvoGzxlP336hVljsXFpch5HIAy55Gn+BlT4M0e7od9y/TpG34KG3xJYdOmp8aEBZ38i1x9kg8UTCatH3m9+91+yU2ZPtsnkIuuDi1Uo1Z+5zWAD3dkCzbUzasjC5vtyRtVpRuXOnLEG+rmssiCVjt8k7piE3BJbhfdtRfdvY0yZObeB7p3B6yYvRPJHUCCp/Zb9kLxOD7kcOEtDtCUvvrc8lZ3bxMPpcW/sUfNd/2GsVbO0kglZkXlANqKMlLm/w5WDGBsoKELbTo9/IG7rQvsOPzqvFnLEaLC1GprvdhpwcgcWR0bZoZdIbsum4bSz9m2rq9d50CqHyMEYM7gumgE8pkk2MJDVufpeA1bwUZyMfZlHW2BHp8zNdlRL1PLpHbFFgKK7aS5slFqHASi7EMFSRVrWDw7P94JUnYjJCeetpk+CaF1odzdrrzdlsv6YRRQzW8oeXLdV0qLuqMGnDatfePymU3tLTCno1TJ5+v9XpSWmsUWccUMG2WbTb7pOPjP3chxdizJ2f6sjy1yBL32QiVCLG/p42t7/N2tUrRB0A4C7qY4g+XKeiORLRutR3DkcrksYEMqqdlskUAI2GNLxkJr548gNZ+AV9ZWCauwhRulth6KJtRkl2ELt2ht6whMFTOVhBAZA7Npmki/15RJRUidPkFqBOcWHipIqJYyObX64kpJZY2Exh0VNssQMjKaoeFJtVE9XEhAM3VMEdi7+FOeKTKSveVKC4XjbPLaM/WpzWtHe1q9bS11aHvGbMW+WVZPg7dBh0qwfLsmZELI6pH1ErFQ5rcj5cS0OpFQDMoXX3ia/WUP7svvJGA9DGVIQhke3Rt9P8B6U/eFL7Of9uCegl3vhm2aLGpq47pQe7pXn7UDH5pZjzaR0dVv0Xlm0RbbNpmrtVZwe9qb/jgfnLfPbN8Y1FNXB5wiilH1naeWrrG59WreSIdO5iPIDxkohEIsh17GVuO7WfN3rFrVf7a7dXrmgp0rV3llhVedM1pa9hgcG0MrRr7+atFqiUBFrXAy6EwhvUbBKoaodC0N3Nxaa9ra0Heiad6JhtJH/OCZIBBcNBjWJHJ1jBTyAomlo0YWNzTxj7dBL0ghQLCUinN1m0q/2sI3chYSy5FkMb1+Z8Xfe8R24RYgf29w7zjU0L2xLSPUlucXaZRzRPZhtFFJDHR3N2hmClvbWMHTrd3W+TLlPAvJDGIn9q+aVxpObe7dfsLU/dHQxEeZ3a+uzRwxE4J9rT1z/KVzwJOusp9eIKQvKp7nIeUDQ5P9SDnIn0DKyGU//YGU/cGsh4YmKl3vsMvfyQTnBERK5bzMnm5/dMusvMbMwgqR0kxr78r9JrdtgUw5YiGawaGJWRMQkxtgcaGhnMGgBulU8MuENdMTAZ5NuGIwtllhu8aml2fTIDKmZEcl5cpKZwxIhgA08JSbY1yW0CHsBiPS50ipvn5uAb37xMzjkCtWECsYg7lg0Kzjga31wXrAg+DlgXJoaBJClPnLIADsfIVivrW/+fyp9l7HAoV81DqwGLsvZFzm0m5xBbu6Ag5Tq9n8A9zZHQDUDWPdMxdRidDQxKPGqEOFqj81YpYcLMQE5y6qil8EnhH7pkPUlW/0dy79r85e7GXyP+rsDjhmrz/w2USTU42sR8rDbVbsLFJbT14bJQ8amnjYfRJT80S4kAxfpLIqDoJXEgbdOkyCiyCUSiR6LovYvjLmHUVZrTyTzXW21sgkgapaI9GHO7yiXKjj0As0c+JeU5VT5Qx2vauDpgLCCaTsbFsX5OWzeUrw04T2HW2aRC2UGJtcKdBKEGOjba7+kTpVcGY4mG9oX7Hg3ES7TWILjE40jU0AQeqkZCLCq0muCQP5ZKBag9ZEmar/VXqhTVC0P+VaSiTNvQmK9GOuYyJg9kT1UXICRE7YdDTS6v3GC3p1VrTuPFJ+tFCfmJNvVpDz/jhS7YPvu+BFqU8gQw0g6fX4XocrPuQANyZPINVe+PsXfUjVCdD2mleOsKxC+Fq3AXER2pyOMoPi1QjxuS6UDjCirjmjUpXCw83HBt0NJHdqmN/Hkwv8DHpYnO+9k5attFnEVHe1EDpEw6msu0e1RuQ+BL75qY8rDfT3hfEGtMk1MipXyn3camwIGn0CUYuc63FKq0lC8fDkgyVNShsZr+xxWyjVhTv98baAUFbH0XU3p/gFmUqtTshxMHsCJPOGUDA62BcpMFx4p/OlKn6QracUukefuFMjBMG2A+O9eqgyRKN5uRnaurG305KlJo243sFoC5B06wOB6HB/FG9AW6C5iyT6eU+wAoNUKOtypekhUH145cJID1LVY34AmR7IkCpZJAVqszQh1eBApY+LxgbdgWqkytI7ItS3zo7AbJDRxBGpOzxoS1o3v5cvlAtt1unx2hHH3Wp8XhV02QhKlsjFoNOyuCI+RxFyoq0x9Brt3Uk1GtdIZoO9w1cy80/i21E9z9FAgnwQ7B/uWlm8+bgazxAKq1jOQGmKi7nmvs0Q+B17Ezv85i/lv5SRoTn64tc54M8ns5mGAoaIHHLZCYoKx83mCnj1kgYTVsvitm2MLE5QHnRxsKTVUAMJQulyglVMqZf7Pa6XLwSfVoUzFhMWX/gyh6tY4MOkRlZdROKxbt3o9EibWeyI1GPfssnpUWuiMnavWGM3iIRhGbNPojIbhODrH/t4MkGARg+IXeizKvPydLxGKOlJKYQNOTdMwS1kOXNDKGzQnfTM/MOFQw3wFXyvne7LX4P1ghRPttyrxjhpZYK/QrFRsCCpzShFxTvZB1gsSXlJYd8GorDw02oyTe4t5lpazBJUgh1Reo1S+30RadM06cZkZQ1LHizig30byAjcU5IYpTEJBbV1mTSWSIZUybOWur28MveuAg0kbGr1yRMybRG3PVPAErjoNP0ZeGtwlDWWXg2eW/+9GmCSWvpIAUA3zUCQvPTjN497VSRP5eX7l73UC1cugPz0uelRz+XdlxseYeamRd0Xd11sADtJ7sm/Jr34+cW+rYnDeNCiQqFUfUiVYWUSUtmJVIJ5mxuxGFs43hnvHkXIPWoJG6UrK34vqkkwIeM9I2ndbemwSyuKcWn2VOW1NCu2VlSG1rHZojpmbrozTYrGiFMJ66bBYBMEj10IAZb8FfuKOGu8YxRhiLigyo9FvQl2OCIBCiwQysdgdqwdU23JDeI84YJ4fFJhKZJQfeXYwteyDDl+Mz5RbE1BygBTaJUzc4VrdGdScUdXSHDK9YZZucYu8tW02A4x+JEaRJBM/3e9dvbrxi88wJ7uaMBYqdkirVzEtTAE1kzlPL8jIcXDSPG4EhtarVl6bNOa5a3JGIiBgWwJvoY4pZUgZHDBry+xyTVRFtsqRkgZONK89w6Pp9VhfWZ1K1J9NkhmWsdJWGxi12FodkGmJMW3vNsPubwaLAmce4IuTyncsgqenMtl17ul7DIp+/OiNOLOoVxcHpLNHpZzcJa3Uyo+L6pQCjaT0ZW/FFdKBZvBq3OWwoUHYeLIBYToQu52KHf7Q3Yk7U0YXLi0ra5Nf8ajAPEkFxLNhGBwSDwLAmcK65NYDHF5Yxy84LI+15pnkbNE9ogxq+dOUQ3b1FQrsQTlomQsxMmqo4vKm9/U5V96dPBWBUvoatSnL7xdXFNvaq6RWAJKURI2+lhK41E0Mw4SK2R0MUXRDiLobluchrPg0pakupHZq/b3BpDPjUplcyzFQWykZ/chV9g5n9ada8G3LGHvnoPOSKB4ky64EuOxELsWLRh0b9TPzCdvps6Fo4MacytT3YiUatMtIb9BPWQoEFsqTBDlGjuLhtJD1vrKZXJLgsyr1QCLtM5orqyuuTiKkCk4HgVCJlKV1fA0egGqrgKNqqwtq1YLN5NRVdTSGo1oCWgfEIzPGXeOjEvGXTvGVZl4HEwfLrrtyh4rQcrB5nchlzJtxusST4jG1rntEmZStkjcYVr9nMnUepmUr4xCSAURO6lTND7/Da15OPyfr5aabhD1KWg9reieP1GAzShtKkV8hwOnPkCIGxBiYHb1+HQSvVKAJaF0vX6dWK8SpBFxKeiKny17LwrRlVeLq2T8LWBNX8GR2yjDCy/fzvF30Mbb+FftkG/jNQ60tc1BB/PIG7D5w3bosDsuKaM/LfufqPKwll1PXVeakAt8K80MNuXXYtKRpJjGY9n4Hll+JevnSnicHH4xt6ArL/0urmJVGWEuPu1Adk7JfCmoPvttF0L8/TAItyiriA3MaGJwSj77n8FyJT0pddEq1Bl8iYgjDzjRVpjWbxvbWrXyrWGsxcOjYZsyi4JxjnX1/gt6WRdKGEYJp2erv5DEjE1IPYunZgxy4QJgX7xpDtenoJYAp38gYJDbtCIsaSHXCFXR5Da9GFtYjkFXiUqrFaI3qzFVNaVktXAr2FAsHneaaAZ9XNzpBJFS9BO1v0zaxIYYvTUIieKO35k5/Wug/Ica2/iK8Q6wYzHjEv0T5zeTdpygt77R1/bZ3iOy/T8Jms+47u2mGWU/VI9cX9G+nPC06WsbD4hE8q3lz3OWqC9nK7x7ayhh8ghS3htTtvYJOKi+PrgeVOi1lkjighqMP95prbq4QaVw2EA0Y8PXGaNAxlXF5F0f0WvsGLONTv3ok7pp5bNLvz2HNp8r+27OolfWZo6AZR2juyR1oztP7sw9tXPeNgk7DH1nGwKc11IU4YA8U9BUEtbIVP2tB0N/ba/wViwaqfrAp4cPL1kSTDtiT6/CS5f4Y+wgwMWF67W4NVNMunCrFzc2OtTI+tMjFmolYEKI/GMzd8Wy3h5PUM8tKfhBk/QQm9qy/zhdQKOzzEEyz+QxK1IS3fGIckwV7YPqXPN1cdaJkpK/n97ZRyyaYKzErfIVQf4aUJda5adTvJwMrXvw/QSUymkQCNwMT4CoWxPwiYPcdGyTLbUx0MeTxFdjLZBqJBBLgg1ZU/xnq23ZzCcpArNMpBiAMnRN08jBX1OLg8zLV6hdGHAkdJnn45jabE+KdHsKjGhLoPpIg47jwQJL79LKldhG/+plSmPT0GA034A2QXMWSTUDlRDKy9QsrRgJFLAWed44M001550MtdUoprjIAhdCoCdkXNddLfKcHFgSvzDrz7vQ+pd+5CvstwOAfHOpIYyKqzXhP9YLjXvQGGJ1U8z47/v0xI7feDNelwZWWYOrYdwZS0TCeMsPnn59KKeIsD5LCo8sWTgEIWK/gehUaNHIfZcUcC7lX6MvkbIX5c9ykfL+7JUU+Uatwzwiv/ZcTWxkcM9Bl9cxrMmWZi8bQMly11LzA73dfuU8sWPIkUnwhejVSw2Yx6qCNJqHm6kl7j2RkSzRq4UcO2N2VP5zEVQ1yvjXF8nUkii9LiTJ96ItvrnLJDpVi9Q7PirVcGJwGptBVOuqEroRQn262qwX1rrJEjdCdL42nW+UC+SdUJrRBR6Nb7Yg5FtMs0xIOQj9KWVVlv5XnFCwSsKqKkEVJ+L3EF7NyOnDZ2xOz12EB441T0vThpCTKhT2QIj+6Hex7sH/PkqeakOYDtrXIzUYlAZQH23I6PPsdXcjix8LwdGJWW3uLOaR9M7JeI/D74+Mf/xpEPMofMn4a24tqSguFYlLisibK/MpJMXFfVtuG9oLhJMp302mgO/VA8Lhbxte0V26Iba2JUkeOGxJUjEHLeN+Wvvlhf1dG9vSQ634BqHGPGYtVX+/879Bpirpv0vqi5/RyntNRmD+YpP1uBIFrcS66TTPJ658uXWLyoVVRXSyz8OD79wR/PwiSvOMjwPqwe+07pGwDNv15FUlKbMph8TAHAA05eNAbA5hsTMGxb6yJmHaz59ynX/BNL/ZNeO0X9lSvth6037+lNnGZsNsJV8sxbSfPzV/G5vnL1orFHuPpQyKU2ATmPbzp5LIv+B/Y3MSKEsM9muOhSEfk+EsFCiHij2JJMpC1zUgYdrPn/IO/4LD/GZvG6d9xCr4YsdM+/lTthmbbUHvna3E/8/m6eeZ+qG++XtqFIbdSU1YdJ2SPDbt50/Zz79gu7HZPuoA9jTnyAP+lAPGZvupm4puAFFA5v62ujJwFKxT93UZYCrOUOpCD20LDskhOJX/xa7lw5IgnAaEUeTzbBAz/5hb4lyeLt+U9NEnFZ/9jGbd/AT0krXrnl0UuX45gWtse0+OvDOnEOEeNtyh5SQigLvEenNaY2740PrxcqLN332+DgC3nPO1tRPs2p61i1uU2AgC+gAuC3H+7MKFhqb+zl2g94GtpQqaDtLU38l9UZVDJBDueOV8AFjPgYSe2QtI3FNxrCzS1JfczX3zEGv+qn+hm/p7/H15Wy9jzEICYZusz71kd9J2L3L+0D9fjq3paxwMsMm2Z74u/MvXcP5Lil0/Anz5yrga4Jt9GZdf/PriA7h0UyZGohjPsILf+Xbs8O1D7d9koWDUEYcNvs5zvhyzXBORM0NkKaS2XWn3Ke5PMuwSzbT2TM3DfKWhb/KammMtIXRLTL6dL9uLFwFz+WC9GLF9sO3F7BBliXQdUNp+WnfFZPu53AqB3uZsLkmR1OsZaffOTw3LWXFq+r6cwuTkry2CM8dr/ZHQVOm1X6EjigfKubShVLSKoXSmoaLKkIvn7T6C7uddN/jaNv9UARLjzL95FSUvHMP4+PZJ6WcKAwPxFGII5tRHBDCtPVGqWMLxfYh1mr9mQWPBuUkAmXeWSc/a/EjvTJ9MhMtKq3pUxmot9qJh54v5qFR5mZ4/ck1vSPLTuvOsiSLuzKXTdgtmW5UVp7Zm+elLXL6csLlWNnreo8hV5D7Ghkc5LzgynyFbiTuOHZWKaND8SdaF82Mt+O6Iz+5z1Ac8ciLv9OmdB9GXJfQd4iaKw7zouW8tmAd2YGB5sDP+WNi7kDYoCFmdz7lS55dxHgAo4rLgOijMio5rN0pxXKYVCrPunINkg8LEv4YF2jyzQx4BAHvBvWjHygQoGxaiT+jDpPSMK06qHmBefWE9nyBvWe/UTGY2snmpS+N42zkrFZP9kTF9en6ae6sCZu3C2RLmZvEigAG+th/SiAQwMfIlAG4BLDGA7UXEgm12ALzkCpkNg3Z2dgykY7NjsQ3OjpPHPTsenGl2gjwMBW2iwB16xw136sFWLaRoULemg9JrFXIINGmV0Q7dok+ZejIaBh12Q52atAtUUTK36teqSRBNqRnL0ShMCR9nJQsZvXqEOaTllnaKgLpNoVxEnCAzRSdRpWIEFDXnAIHlUD7MCJJKt4g1CwtSB4T6EmlUFtLKl+ITimraRvsEkGWsQ5vqt0oEmX3ahXSbiQJsoBMOgPk/nK73UP425QBplti/FPzfQJJkcAhIKGgYKbBSpUmXIVOWbDg5cuXBy1eAoBARyQxFipUoVaZchUpVyKrVqEVBRUPHwMRSh60eBxcPn4CQiJiElIycgpKKmoaWjp6BkYmZhZWNnYOTC8TNw8ungT9x9llgoTM2+sYiK43Z4XX7E2+Zj823zm+eWZEES7zvc7/a6Q2/e+4Pex1y0bRxAUGrhVwWdsEl111x1TXfirjthpsOi/rFGvfccVej7/1oqWZNWrRp1W63Dl067Sja9J3Qb8B3Bs0y05DZhk3YY6455hnxg5+cdN8RR5Pogc985Jjj3vaOD5zwlg8t9qazzjmdJMv9nOTNJVdrNDHiKxL77muqqRHW3FdJGkT0XopIHPf/zeFFL4VSSwcAAA==) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Poppins';font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Poppins';font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Poppins';font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Poppins';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}


/* ~~~~~ 50. THE ELEMENTOR PAGES JOIN THE TYPE LADDER (Aug 2026) ~~~~~ */
/* Playbook 2.3: one type scale for the whole site. The hand-built pages were
   consolidated in section 46; the five Elementor pages still carried eleven
   in-between sizes (12, 12.5, 13.5, 14.5, 15.5, 16.5, 17, 22, 25, 27). Each
   off-ladder element maps to its nearest ladder step: 14 caption, 16
   secondary, 17.5 body, 20, 28 headings - with 44 and 64 kept as the two
   display sizes on landing heroes. Desktop only; the phone keeps its own
   smaller fluid sizes. */

@media (min-width:1025px){
  .elementor-element-cc2d228{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-cc2d228{ font-size:14px !important; } /* was 14px */
  .elementor-element-6f99c144{ font-size:20px !important; } /* was 22px */
  .elementor-element-4992013 .elementor-heading-title{ font-size:28px !important; } /* was 27px */
  .elementor-element-8f34e08{ font-size:16px !important; } /* was 17.5px */
  .elementor-element-8f34e08{ font-size:14px !important; } /* was 14px */
  .elementor-element-995b41a{ font-size:14px !important; } /* was 14px */
  .elementor-element-434ed11c{ font-size:20px !important; } /* was 22px */
  .elementor-element-626830a7{ font-size:20px !important; } /* was 22px */
  .elementor-element-71ddee09{ font-size:20px !important; } /* was 22px */
  .elementor-element-56b2ac7d{ font-size:20px !important; } /* was 22px */
  .elementor-element-cefc591{ font-size:14px !important; } /* was 14px */
  .elementor-element-002104f{ font-size:16px !important; } /* was 17.5px */
  .elementor-element-567fc03{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-567fc03{ font-size:14px !important; } /* was 14px */
  .elementor-element-ab533e7{ font-size:14px !important; } /* was 14px */
  .elementor-element-1e9515da{ font-size:20px !important; } /* was 22px */
  .elementor-element-a1c3f70{ font-size:16px !important; } /* was 16px */
  .elementor-element-9e6fa15{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-9e6fa15{ font-size:14px !important; } /* was 14px */
  .elementor-element-647280b7 .elementor-heading-title{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-b143242{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-b143242{ font-size:14px !important; } /* was 14px */
  .elementor-element-257e52de{ font-size:20px !important; } /* was 22px */
  .elementor-element-db60120{ font-size:17.5px !important; } /* was 17px */
  .elementor-element-db60120{ font-size:14px !important; } /* was 14px */
  .elementor-element-21fb1ea8 .elementor-heading-title{ font-size:17.5px !important; } /* was 17px */
}


/* ---- CMG phone demotion, 20 Aug 2026 ------------------------------
   Chris: keep the phone "to a minimum but not so that we lose trust".
   The header number, the hero call button, the emergency pages and the
   contact page keep a full-strength phone route. In the repeated in-page
   booking blocks the number stays reachable but stops competing with
   Book online as an equal-weight button.
   Fully reversible: delete this block to restore the buttons.        */
.cmg-bk .cmg-acts.cmg-onlight a.cmg-b2[href^="tel:"]{
  background:none !important;
  border:0 !important;
  box-shadow:none !important;
  padding:6px 2px !important;
  min-width:0 !important;
  font-weight:500 !important;
  color:inherit !important;
  opacity:.92;
  text-decoration:underline !important;
  text-underline-offset:3px !important;
}
.cmg-bk .cmg-acts.cmg-onlight a.cmg-b2[href^="tel:"]:hover{
  opacity:1;
}
/* Emergency plumbing keeps its full call button — a burst pipe is a
   phone call, not a form. */
.page-id-610 .cmg-bk .cmg-acts.cmg-onlight a.cmg-b2[href^="tel:"]{
  background:#1B3461 !important;
  color:#fff !important;
  border-radius:14px !important;
  padding:14px 22px !important;
  text-decoration:none !important;
  font-weight:600 !important;
}
/* ---- end CMG phone demotion --------------------------------------- */


/* ~~~~~ 51. THE LAST OFF-LADDER SIZES (Aug 2026) ~~~~~ */
/* A verify-by-looking sweep after section 50 found five sizes still off the
   7-size ladder. Home: the four pillar H3s (Design/Install/Maintain/Repair)
   sat at 27px and the four navy-band icon-box titles at 22px - neither element
   was in the data-id collection section 50 was generated from. The
   accreditation card small print (.cmg-accred-num 12.5px, .cmg-accred-check
   12px) was under the 14px floor at every width. About: the Elementor
   testimonial widget put the job line at 36px - louder than the 16px name
   above it, hierarchy upside down - and the quote itself at 22px. The static
   review cards' "Google review" caption was 12px. Headings are remapped at
   >=1025 only (Elementor's own mobile sizes rule below that); caption floors
   apply at every width because 12px is too small everywhere. */
@media (min-width:1025px){
  .elementor-element-4992013 h3{ font-size:28px !important; }
  .elementor-element-434ed11c h3.elementor-icon-box-title,
  .elementor-element-626830a7 h3.elementor-icon-box-title,
  .elementor-element-71ddee09 h3.elementor-icon-box-title,
  .elementor-element-56b2ac7d h3.elementor-icon-box-title{ font-size:20px !important; }
  .elementor-testimonial-content{ font-size:20px !important; }
}
.cmg-accred-num{ font-size:14px !important; }
.cmg-accred-check{ font-size:14px !important; }
.cmg-rev-src{ font-size:14px !important; }
.elementor-testimonial-job{ font-size:16px !important; }


/* ~~~~~ 52. DESKTOP TIDY-UP PASS (21 Aug 2026) ~~~~~ */
/* Chris: desktop was "all over the place, space where it's not needed" while
   mobile looked right. Every page eyeballed at 1920, faults fixed, changes
   scoped to desktop widths (except two colour repairs that fix mobile too).

   1. Trust bar stopped 64px short of the right edge on every page: it is a
      flex ::before with flex-basis 100% and -32px side margins, so the basis
      never covered the right-hand overhang. Basis now includes both margins.
   2. Hub pages (/boilers/, /plumbing/, /bathrooms/) have no sticky booking
      sidebar, but the 1200px+ two-column grid still reserved the 340px
      column: the whole page squeezed to 752px with the right third empty,
      the photo a 400px orphan, cards two-across. The grid now applies only
      to pages that actually have a sidebar (a .cmg-bk that is not the last
      child). Hubs get one column at 1140: photo with its caption sat beside
      it, service cards three across, prose capped at 720px.
      The tripled .cmg-page in some selectors is deliberate: the old 400px
      float rule and the 2-column .cmg-svc rule are ~(0,5,x) specific, so
      these have to outrank them - do not "tidy" the repetition away.
   3. On sidebar pages the lone photo rendered as a 400px orphan (float is
      dead inside a grid). It now fills the reading column, like the photos
      on new-boiler-installation already did.
   4. The bottom booking band sat ~196px below the last content. Two causes:
      .cmg-page carries 150px bottom padding at desktop, and an earlier fix
      had pushed the band down with position:relative top:142px so it sat
      just above the footer inside that padding. Padding now 32px, offset
      removed, and the band pinned to grid row 203 (the sidebar spans rows
      3-202, so auto-placement was putting the band INSIDE the sidebar's
      span, which let the sticky sidebar slide right over it - seen on
      /landlords/). The sidebar also gets margin-bottom:260px, which Chrome
      subtracts from the sticky range, so it now stops above the band. The
      260 covers the tallest band (~207px incl. its margin) with room over.
   5. for-builders rate table header: the theme's 7% grey th background sat
      under white text - unreadable at every width. Navy restored.
   6. Footer Google pill text was #DCE4F0 - the colour for links on the navy
      footer, set by the (0,3,3) menu rule - on the white pill. Overridden
      with the menu rule's own shape at higher specificity; now navy. */

@media (min-width:881px){
  header.site-header::before{ flex-basis:calc(100% + 64px) !important; }
}

@media (min-width:1200px){
  /* hubs: one column */
  .cmg-page:not(:has(> .cmg-bk:not(:last-child))){ display:block !important; }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > figure.cmg-shot{
    float:none !important; width:100% !important; margin:6px 0 30px !important;
    display:grid !important; grid-template-columns:minmax(0,540px) minmax(0,1fr);
    column-gap:36px; align-items:end;
  }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > figure.cmg-shot img{
    width:100%; max-height:420px; object-fit:cover; border-radius:12px;
  }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > figure.cmg-shot figcaption{
    margin:0 0 8px; font-size:15px; max-width:40ch; align-self:end;
  }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > .cmg-svc{
    grid-template-columns:repeat(3,minmax(0,1fr)) !important;
  }
  .cmg-page:not(:has(> .cmg-bk:not(:last-child))) > .cmg-bk{
    position:static !important; top:0 !important; margin:40px 0 0 !important;
  }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > p,
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > ul,
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > ol:not(.cmg-steps),
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > h2{
    max-width:720px !important;
  }

  /* sidebar pages: photo fills the reading column */
  .cmg-page.cmg-page.cmg-page:has(> .cmg-bk:not(:last-child)) > figure.cmg-shot{
    float:none !important; width:100% !important; margin:4px 0 26px !important;
  }

  /* bottom band back in flow; sticky sidebar stops before it */
  .cmg-page{ padding-bottom:32px !important; }
  .cmg-page > .cmg-bk:last-child{ top:0 !important; grid-row:203 !important; }
  .cmg-page > .cmg-bk:not(:last-child){ margin-bottom:260px !important; }
}

/* rate table header readable at every width */
.cmg-page table.cmg-rate th{ background:#1B3461 !important; color:#fff !important; }

/* footer Google pill text on its white pill */
.site-footer .site-navigation ul.menu > li.cmg-foot-rating > a,
.site-footer li.cmg-foot-rating.cmg-foot-rating > a{ color:#1B3461 !important; }


/* ~~~~~ 52b. HOME BOTTOM CTA - BALANCE THE EMPTY RIGHT HALF (21 Aug 2026) ~~~~~ */
/* 'Ready to Get Your Job Sorted?' ran heading, line and button down the left
   with the whole right half of the band empty at desktop. Now matches the
   About/Contact CTA pattern: heading and line left, Book Now button (with its
   review caption) on the right, FAQ tabs full-width below. Desktop only. */
@media (min-width:1200px){
  .elementor-element-11048b3f{
    display:grid !important; grid-template-columns:minmax(0,1fr) auto !important;
    column-gap:48px !important; row-gap:0 !important; align-items:center !important;
  }
  .elementor-element-11048b3f > .elementor-element-13ed2a44{ grid-column:1; grid-row:1; }
  .elementor-element-11048b3f > .elementor-element-35800d87{ grid-column:1; grid-row:2; }
  .elementor-element-11048b3f > .elementor-element-1f466f0f{ grid-column:2; grid-row:1 / span 2; justify-self:end; align-self:center; }
  .elementor-element-11048b3f > .e-tabs-base{ grid-column:1 / -1; grid-row:3; margin-top:34px; }
}


/* ~~~~~ 52c. GRID AUTO-PLACEMENT FAULTS THE 1920 PASS MISSED (21 Aug 2026) ~~~~~ */
/* Chris: 'the leak detection page has a big gap'. Root cause: the sidebar
   spans grid rows 3-202, and pinning the band to row 203 meant any FULL-WIDTH
   auto item that could not fit before row 3 (leak detection: hero, danger box,
   THEN the proof chips) was auto-placed past the band - 200 skinny rows of
   nothing in the middle of the page. Emergency plumbing had the same trap
   (its sidebar sits mid-content with the chips after it).
   Fix: sidebar now spans rows 4-203, so a full-width item in the first three
   children always fits above it; the band moves to row 204; and chips that
   come AFTER the sidebar in the source order stay in the reading column.
   Side effect on every service page: the sidebar starts one row lower -
   level with the answer cards instead of the section heading. Checked, fine. */
@media (min-width:1200px){
  .cmg-page > .cmg-bk:not(:last-child){ grid-row:4 / span 200 !important; }
  .cmg-page > .cmg-bk:last-child{ grid-row:204 !important; }
  .cmg-page > .cmg-bk ~ .cmg-proof{ grid-column:1 !important; }
}

/* ~~~~~ 52d. FOOTER: BOOK ONLINE EXACTLY UNDER THE LOGO (21 Aug 2026) ~~~~~ */
/* Chris: centralise the footer so Book Online sits exactly under the logo.
   Six links to its left and three to its right meant it could never centre in
   one row. It now takes its own centred row directly under the logo (matching
   the mobile footer), with the page links in a single row beneath it. */
@media (min-width:881px){
  .site-footer ul.menu > li.cmg-f-logo{ order:-2; }
  .site-footer ul.menu > li.cmg-f-book{ flex:0 0 100% !important; order:-1; display:flex; justify-content:center; margin:0 0 6px !important; }
}

/* ~~~~~ 52e. CONTACT PAGE MOBILE - TOO MUCH SPACE (21 Aug 2026) ~~~~~ */
/* Chris: 'too much space' on the contact page at phone width. The van photo
   band was 440px of scroll for no information; section paddings and the gap
   under Get in touch added more. Tightened at phone widths only - desktop is
   untouched. (The 6,000px void seen in the test iframe was an artefact:
   .elementor-11 has min-height:100vh, and vh inside a 9,000px iframe is
   enormous. On a real phone 100vh is ~800px - never 'fix' that.) */
@media (max-width:880px){
  .elementor-11 .elementor-element-614a4d66{ min-height:240px !important; }
  .elementor-11 .elementor-element-61aedc0f{ padding-top:36px !important; padding-bottom:36px !important; row-gap:28px !important; }
  .elementor-11 .elementor-element-2c715678{ padding-top:36px !important; }
  .elementor-11 .elementor-element-6d052474{ padding-bottom:0px !important; }
  .elementor-11 .elementor-element-3f29f09{ padding-top:10px !important; }
  .elementor-11 .elementor-element-77da0f66{ margin-top:4px !important; }
}


/* ~~~~~ 52f. HUB PHOTO CAPTION AS A PULL-QUOTE (21 Aug 2026) ~~~~~ */
/* Chris, pointing at the empty right half beside the hub photo: 'what could
   we do here?' The 15px caption sat alone in a 560px space. It is now a
   designed pull-quote: 20px navy (on the type ladder), orange accent rule,
   vertically centred beside the photo. Same text, no new claims. Applies to
   the hub pages only (boilers, plumbing, bathrooms), desktop only. */
@media (min-width:1200px){
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > figure.cmg-shot figcaption{
    align-self:center !important; justify-self:start; margin:0 !important;
    font-size:20px !important; line-height:1.6 !important; font-style:normal !important;
    color:#1B3461 !important; max-width:34ch !important;
  }
  .cmg-page.cmg-page.cmg-page:not(:has(> .cmg-bk:not(:last-child))) > figure.cmg-shot figcaption::before{
    content:''; display:block; width:44px; height:3px; background:#EF7329; border-radius:2px; margin:0 0 16px;
  }
}


/* ============ 54. FOOTER CREDIT LINE — 21 Aug 2026 ============
   Footer Menu item 1045 (custom link "#", classes cmg-f-credit cmg-f-plain).
   Own centred row, last line of the footer, under the Google rating pill. */
footer.site-footer nav.site-navigation ul.menu > li.cmg-f-credit{
  flex:0 0 100% !important; text-align:center !important; margin-top:12px !important;
}
footer.site-footer nav.site-navigation ul.menu > li.cmg-f-credit > a{
  font-size:14px !important; font-weight:400 !important; color:#A9BBD6 !important;
  line-height:1.5 !important; padding:0 !important; display:inline-block; max-width:none;
}
@media (max-width:1024px){
  footer.site-footer nav.site-navigation ul.menu > li.cmg-f-credit{ margin-top:10px !important; }
  footer.site-footer nav.site-navigation ul.menu > li.cmg-f-credit > a{ font-size:14px !important; }
}

/* === 53 · Depth & polish ============================================
   Wired 21 Aug 2026 from claude/CMG-Depth-Polish-Spec.md (approved by Chris).
   transform / opacity / box-shadow only. Zero JS. Zero new requests.
   Fully reversible: delete this whole section.
   Selectors doubled (.cmg-x.cmg-x) to outrank the earlier :has() chains.
   Every box-shadow carries !important because a sheet-level
   *, ::after, ::before { box-shadow: none !important } is in force
   sitewide - without it nothing here lands. (Found 21 Aug by measuring.)
   ==================================================================== */

:root{
  /* three elevation levels, hue-matched to the navy #1B3461 */
  --cmg-e1:  0 1px 2px rgba(28,52,98,.05), 0 4px 12px rgba(28,52,98,.06);
  --cmg-e2:  0 2px 4px rgba(28,52,98,.06), 0 12px 28px rgba(28,52,98,.12);
  --cmg-e3:  0 4px 8px rgba(28,52,98,.07), 0 20px 48px rgba(28,52,98,.16);
  /* orange-tinted equivalents, key cards only - keeps the existing highlight */
  --cmg-e1k: 0 1px 2px rgba(239,115,41,.07), 0 4px 12px rgba(239,115,41,.11);
  --cmg-e2k: 0 2px 4px rgba(239,115,41,.09), 0 12px 28px rgba(239,115,41,.17);
  --cmg-edge: 1px solid rgba(28,52,98,.10);
  --cmg-snap: cubic-bezier(.4,0,.2,1);
  --cmg-gentle: cubic-bezier(.16,1,.3,1);
}

/* --- 53a - elevation -------------------------------------------------
   Existing 1px borders are deliberately left alone (already hue-correct);
   only .cmg-book had no edge, so it gets the hairline. */
.cmg-card.cmg-card:not(.cmg-card-key),
.cmg-rev-card.cmg-rev-card,
.cmg-accred-item.cmg-accred-item,
.cmg-abcred.cmg-abcred,
.cmg-note.cmg-note,
.cmg-alert.cmg-alert,
.cmg-danger.cmg-danger,
.cmg-legal-toc.cmg-legal-toc,
.cmg-svc.cmg-svc > a{ box-shadow: var(--cmg-e1) !important; }

.cmg-card.cmg-card.cmg-card-key{ box-shadow: var(--cmg-e1k) !important; }

.cmg-book.cmg-book{ border: var(--cmg-edge); box-shadow: var(--cmg-e2) !important; }
.cmg-bk.cmg-bk{ box-shadow: var(--cmg-e2) !important; }
/* the sticky booking sidebar is the only .cmg-bk that is not the last child
   of .cmg-page (the bottom band always is - verified on all 13 templated
   pages, 21 Aug). It is the one element allowed level 3. */
@media (min-width:1200px){
  /* level 3 only where the sidebar is actually sticky (grid engages at 1200) */
  .cmg-page > .cmg-bk.cmg-bk:not(:last-child){ box-shadow: var(--cmg-e3) !important; }
}

/* --- 53b - hover lift, pointer devices only --------------------------
   Only things you can actually click lift. A non-clickable card that
   rises under the cursor is a lie about what it does, so .cmg-card and
   .cmg-rev-card deliberately stay put. */
@media (hover:hover) and (pointer:fine) and (min-width:881px) and (prefers-reduced-motion: no-preference){
  .cmg-svc.cmg-svc > a,
  .cmg-accred-item.cmg-accred-item{
    transition: transform 180ms var(--cmg-snap),
                box-shadow 180ms var(--cmg-snap),
                border-color 180ms var(--cmg-snap);
  }
  .cmg-svc.cmg-svc > a:hover,
  .cmg-accred-item.cmg-accred-item:hover{
    transform: translateY(-4px);
    box-shadow: var(--cmg-e2) !important;
  }

  .cmg-b1.cmg-b1,
  .cmg-b2.cmg-b2,
  .cmg-ob.cmg-ob,
  .cmg-book-btn.cmg-book-btn,
  .cmg-gbadge.cmg-gbadge{
    transition: transform 150ms var(--cmg-snap),
                box-shadow 150ms var(--cmg-snap);
  }
  .cmg-b1.cmg-b1:hover,
  .cmg-b2.cmg-b2:hover,
  .cmg-ob.cmg-ob:hover,
  .cmg-book-btn.cmg-book-btn:hover,
  .cmg-gbadge.cmg-gbadge:hover{ transform: translateY(-2px); }

  .cmg-b1.cmg-b1:hover,
  .cmg-book-btn.cmg-book-btn:hover{ box-shadow: 0 6px 18px rgba(239,115,41,.28) !important; }
  .cmg-ob.cmg-ob:hover,
  .cmg-gbadge.cmg-gbadge:hover{ box-shadow: var(--cmg-e2) !important; }
}

/* press state - every device, including touch, which gets no hover */
.cmg-svc.cmg-svc > a:active,
.cmg-accred-item.cmg-accred-item:active{ transform: translateY(-1px) scale(.99); }
.cmg-b1.cmg-b1:active,
.cmg-b2.cmg-b2:active,
.cmg-ob.cmg-ob:active,
.cmg-book-btn.cmg-book-btn:active{ transform: scale(.97); }

/* === 54 · Alignment and table repairs ================================
   21 Aug 2026. Three long-standing "noticed, not acted on" faults from
   the build record. Reversible: delete this whole section.
   ==================================================================== */

/* --- 54a - About: credentials box now agrees with its heading --------
   The box was max-width:760px with a hard-coded margin:0 190px, so it
   started 190px to the right of the H2 above it and left 380px of the
   1140 column dead. It now shares the heading's left AND right edge,
   with the four registrations as a 2x2 grid so the width is used. */
@media (min-width:881px){
  .cmg-abcred.cmg-abcred{
    max-width:none; margin-left:0; margin-right:0;
    padding:28px 32px 26px;
  }
  .cmg-abcred.cmg-abcred > p:first-child{ max-width:65ch; }
  .cmg-abcred.cmg-abcred > ul{
    display:grid; grid-template-columns:1fr 1fr;
    gap:12px 40px; margin:20px 0 0; padding:0; list-style:none;
  }
  .cmg-abcred.cmg-abcred > ul > li{ margin:0; }
  .cmg-abcred.cmg-abcred > ul + p{ margin:22px 0 0; }
}

/* --- 54b - Contact: map and "Areas covered" balanced -----------------
   606px of map sat beside 317px of content, and the paragraph widget
   was 302px wide inside a 420px column so the copy wrapped at ~30
   characters. Map to 400px, copy fills its column. */
@media (min-width:881px){
  .elementor-element-64960c9a iframe{ height:400px !important; }
  .elementor-element-257e52de{ width:100% !important; }
}

/* --- 54c - Legal tables scroll instead of crushing -------------------
   The Privacy cookie table sits in a .tw wrapper that never had a
   scroll container (overflow-x:visible), so at 390px its three headers
   stacked four lines deep in 72-109px columns. Wrappers aligned, and
   3-column legal tables get a floor width with single-line headers so
   they scroll in their own container - the playbook's preference. */
.cmg-legal .tw{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
@media (max-width:880px){
  .cmg-legal-table,
  .cmg-legal .tw{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .cmg-legal-table table:has(tr > *:nth-child(3)),
  .cmg-legal .tw table:has(tr > *:nth-child(3)){ min-width:560px; }
  .cmg-legal-table table:has(tr > *:nth-child(3)) th,
  .cmg-legal .tw table:has(tr > *:nth-child(3)) th{ white-space:nowrap; }
}


/* ~~~~~ 55. MOBILE: PERCENTAGE SIDE PADDING WAS SQUEEZING CONTENT (21 Aug 2026) ~~~~~ */
/* Chris on the phone view: the service boxes 'look squashed into the middle', the
   reviews are 'a little too centred' and too long, and Why Work With Us is 'too
   central' as well. One cause behind all three: those inner Elementor containers
   carry a PERCENTAGE side padding. On a 1140px desktop 10-20% is a sensible gutter;
   on a 335px phone container it eats 34px, 50px and 67px PER SIDE, so the content
   sat in a narrow strip in the middle while the section heading stayed out at the
   20px page margin - the mismatch is what reads as 'squashed'. Measured widths
   before the fix: services grid 268px, reviews 234px, Why Work With Us 201px,
   inside a 375px screen. Why Work With Us was down to 91px columns, two or three
   words a line.
   Side padding dropped to zero below 880px so every block lines up with its own
   heading and with the rest of the page. Desktop keeps the percentage gutters.
   About and Contact carried a milder 27px version of the same thing - included so
   all mobile body content shares one left margin.
   Knock-on: reviews section 1542 -> 1183px, Why Work With Us 766 -> 533px,
   services 703 -> 647px, and quote text went from 11 lines to 6. */
@media (max-width:880px){
  .elementor-element-750aab8a,   /* home - Our Services grid   */
  .elementor-element-9133c5e,    /* home - review cards        */
  .elementor-element-42ab0fd,    /* home - Why Work With Us    */
  .elementor-element-5c54cbf4,   /* about - How we work        */
  .elementor-element-5b7d19b9{   /* contact - Areas covered    */
    padding-left:0 !important; padding-right:0 !important;
  }
}

/* Third review hidden on phones - Chris: the reviews cause 'a long scroll through'.
   Widening them above already cut the section 23%; dropping the third card takes it
   to 878px, a 43% cut on the original. Two full reviews plus the existing
   'Read all our reviews on Google' link is the stronger phone pattern. Scoped to
   781px to match the existing one-column reviews breakpoint, so the tablet grid
   never loses a cell and leaves a hole. Desktop still shows all three. */
@media (max-width:781px){
  .cmg-rev-track .cmg-rev-card:nth-child(3){ display:none !important; }
}


/* ~~~~~ 56. FAQs / DIY TIPS / EMERGENCY - DROPDOWNS ON MOBILE ONLY ~~~~~ */
/* Rebuilt 25 Aug 2026: a concurrent save had spliced a chunk out of the middle
   of this section, taking the @media (max-width:880px) opener and several rules
   with it and leaving a surplus closing brace. That brace closed the stylesheet
   early, so EVERY rule after this point stopped applying - which is what broke
   the layout. Keep this section intact; if it needs editing, check the brace
   balance of the whole sheet afterwards. */

/* --- everywhere: a <summary> must render as the old <p class="cmg-q"> did --- */
.cmg-qa summary.cmg-q{ display:block; list-style:none; }
.cmg-qa summary.cmg-q::-webkit-details-marker{ display:none; }
.cmg-qa summary.cmg-q::marker{ content:""; }

/* --- desktop >=881px: no dropdowns, identical to before this section --- */
@media (min-width:881px){
  .cmg-qa details.cmg-qa-i > .cmg-a{ display:block !important; }
  .cmg-qa details.cmg-qa-i::details-content{
    content-visibility:visible !important; block-size:auto !important;
    opacity:1 !important; overflow:visible !important;
  }
  .cmg-qa summary.cmg-q{ cursor:default; }
  .cmg-qa summary.cmg-q::after{ content:none !important; }
}

/* --- mobile <=880px: each question is a dropdown --- */
@media (max-width:880px){
  .cmg-qa details.cmg-qa-i{ padding:0 !important; }
  .cmg-qa summary.cmg-q{ cursor:pointer; position:relative;
    padding:15px 42px 15px 0 !important; margin:0 !important; }
  .cmg-qa summary.cmg-q::after{ content:""; position:absolute; right:8px; top:50%;
    width:9px; height:9px; margin-top:-6px;
    border-right:2.5px solid #AD4E1C; border-bottom:2.5px solid #AD4E1C;
    transform:rotate(45deg); transition:transform .22s ease; }
  .cmg-qa details.cmg-qa-i[open] > summary.cmg-q::after{
    transform:rotate(-135deg); margin-top:-2px; }
  .cmg-qa details.cmg-qa-i[open] > summary.cmg-q{ padding-bottom:6px !important; }
  .cmg-qa details.cmg-qa-i > .cmg-a{ padding:0 8px 16px 0 !important; }
  .cmg-qa details.cmg-qa-i[open] > .cmg-a{ animation:cmgQaIn .22s ease-out 1; }
  .cmg-qa details.cmg-qa-i:first-child > summary.cmg-q{ padding-top:2px !important; }
  .elementor-element-2be0334e .cmg-alert{ margin-bottom:20px !important; }
}
@keyframes cmgQaIn{
  from{ opacity:0; transform:translateY(-4px); }
  to{ opacity:1; transform:none; }
}
@media (hover:hover) and (max-width:880px){
  .cmg-qa summary.cmg-q:hover{ color:#AD4E1C !important; }
}
@media (prefers-reduced-motion:reduce){
  .cmg-qa summary.cmg-q::after{ transition:none; }
  .cmg-qa details.cmg-qa-i[open] > .cmg-a{ animation:none; }
}

/* === 55 · Focus, radii and easing ====================================
   Playbook 2.4 audit items 7, 8, 12 and 13, re-run after sections 53/54.
   Reversible: delete this whole section.
   ==================================================================== */

:root{
  /* the whole radius scale - three visible steps, nothing else ships */
  --cmg-r-s:    10px;   /* chips, select */
  --cmg-r-m:    14px;   /* cards, boxes, photos, heroes, tab panels */
  --cmg-r-pill: 999px;  /* anything that reads as a button or badge */
  --cmg-focus:         #1B3461;  /* 12.2:1 on white, 4.1:1 on the orange */
  --cmg-focus-on-dark: #FFFFFF;  /* 12.2:1 on the navy */
}

/* --- 55a - a visible focus indicator, everywhere (items 7 and 12) ----
   Nothing on this site defined one except .cmg-qa summary, and
   .cmg-book select actively removed it with outline:none - on the
   booking dropdown, the single most important control on the page.
   WCAG 2.2 AA 2.4.7 and 1.4.11. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:not([tabindex="-1"]):focus-visible{
  outline: 3px solid var(--cmg-focus) !important;
  outline-offset: 2px !important;
}
/* on the navy surfaces the ring flips to white */
.site-footer a:focus-visible,
.site-footer button:focus-visible,
.cmg-bk a:focus-visible,
.cmg-bk button:focus-visible,
.cmg-hero a:focus-visible,
.cmg-hero button:focus-visible{
  outline-color: var(--cmg-focus-on-dark) !important;
}

/* --- 55b - radii collapsed onto the scale (item 8) -------------------
   Was eight different visible radii: 10, 12, 14, 16, 18, 20, 60, 100.
   The same component even differed by page - service cards were 16px
   on the homepage and 12px on the hubs. */
.cmg-chip.cmg-chip,
.cmg-book select{ border-radius: var(--cmg-r-s) !important; }

.cmg-book.cmg-book,
.cmg-bk.cmg-bk,
.cmg-hero.cmg-hero,
.cmg-card.cmg-card,
.cmg-rev-card.cmg-rev-card,
.cmg-accred-item.cmg-accred-item,
.cmg-abcred.cmg-abcred,
.cmg-note.cmg-note,
.cmg-alert.cmg-alert,
.cmg-danger.cmg-danger,
.cmg-legal-toc.cmg-legal-toc,
.cmg-svc.cmg-svc > a,
.cmg-shot img,
.cmg-hero-img,
.e-tab-content-base.e-tab-content-base,
.swiper-slide-image,
.cmg-draft-banner.cmg-draft-banner,
.cmg-now.cmg-now,
.gallery img{ border-radius: var(--cmg-r-m) !important; }

.cmg-promise.cmg-promise{ border-radius: 0 var(--cmg-r-m) var(--cmg-r-m) 0 !important; }

.cmg-b1.cmg-b1,
.cmg-b2.cmg-b2,
.cmg-ob.cmg-ob,
.cmg-book-btn.cmg-book-btn,
.cmg-gbadge.cmg-gbadge,
.elementor-button.elementor-button,
.menu-item > a{ border-radius: var(--cmg-r-pill) !important; }

/* --- 55c - house easing, and a real reduced-motion block (item 13) ---
   Nothing was over 400ms, but everything that moved used the browser
   default 'ease'. --cmg-snap is the curve section 53 already uses. */
a, button, input, select, textarea, summary,
.cmg-b1, .cmg-b2, .cmg-ob, .cmg-book-btn, .cmg-gbadge, .cmg-chip,
.cmg-svc > a, .cmg-accred-item, .elementor-button,
.elementor-widget-image-box, .elementor-widget-icon-box{
  transition-timing-function: var(--cmg-snap) !important;
}

@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}


/* CMG-S53-START */
/* ============================================================
   53. DEPTH AND POLISH  (navy-tinted elevation, hover lift, reveals)
   ============================================================ */


:root{
  --cmg-e1: 0 1px 2px rgba(28,52,98,.05), 0 2px 6px rgba(28,52,98,.06);
  --cmg-e2: 0 2px 4px rgba(28,52,98,.06), 0 8px 18px rgba(28,52,98,.09);
  --cmg-e3: 0 4px 10px rgba(28,52,98,.08), 0 16px 34px rgba(28,52,98,.13);
  --cmg-lift: -4px;
  --cmg-dur: .28s;
  --cmg-ease: cubic-bezier(.2,.7,.3,1);
}


/* --- elevation --- */
.cmg-svc > a,
.cmg-rev-card,
.cmg-accred-item,
figure.cmg-shot,
.cmg-ans > .cmg-card{
  box-shadow: var(--cmg-e2);
}


.cmg-ans > .cmg-card-key{
  box-shadow: 0 6px 18px rgba(239,115,41,.18);
}


.cmg-book{ box-shadow: var(--cmg-e3); }
.cmg-bk{ box-shadow: var(--cmg-e2); }
.cmg-bk:not(:last-child){ box-shadow: var(--cmg-e3); }


/* --- hover lift: only on things that are actually clickable --- */
.cmg-svc > a,
.elementor-button{
  transition: box-shadow var(--cmg-dur) var(--cmg-ease),
              transform var(--cmg-dur) var(--cmg-ease);
}


.cmg-svc > a:hover,
.cmg-svc > a:focus-visible{
  box-shadow: var(--cmg-e3);
  transform: translateY(var(--cmg-lift));
}


.elementor-button:hover,
.elementor-button:focus-visible{
  box-shadow: var(--cmg-e2);
  transform: translateY(var(--cmg-lift));
}


/* --- zero-JS scroll reveal ---
   The keyframes animate translate, NOT transform. A filled transform
   animation outranks a plain :hover rule and would permanently cancel
   the lift above. Separate properties let the two compose. */
@keyframes cmg-rise{
  from{ opacity:0; translate: 0 14px; }
  to  { opacity:1; translate: 0 0; }
}


@supports (animation-timeline: view()){
  @media (prefers-reduced-motion: no-preference){
    .cmg-svc > a,
    .cmg-rev-card,
    .cmg-accred-item,
    figure.cmg-shot,
    .cmg-ans > .cmg-card,
    .cmg-book,
    h2.cmg-h{
      animation: cmg-rise linear both;
      animation-timeline: view();
      animation-range: entry 10% cover 26%;
    }
    .cmg-svc:nth-child(2) > a,
    .cmg-rev-card:nth-child(2),
    .cmg-accred-item:nth-child(2),
    .cmg-ans > .cmg-card:nth-child(2){ animation-range: entry 10% cover 30%; }
    .cmg-svc:nth-child(3) > a,
    .cmg-rev-card:nth-child(3),
    .cmg-accred-item:nth-child(3),
    .cmg-ans > .cmg-card:nth-child(3){ animation-range: entry 10% cover 34%; }
    .cmg-svc:nth-child(4) > a,
    .cmg-rev-card:nth-child(4),
    .cmg-accred-item:nth-child(4),
    .cmg-ans > .cmg-card:nth-child(4){ animation-range: entry 10% cover 38%; }
    .cmg-svc:nth-child(5) > a,
    .cmg-rev-card:nth-child(5),
    .cmg-accred-item:nth-child(5),
    .cmg-ans > .cmg-card:nth-child(5){ animation-range: entry 10% cover 42%; }
    .cmg-svc:nth-child(n+6) > a,
    .cmg-rev-card:nth-child(n+6),
    .cmg-accred-item:nth-child(n+6),
    .cmg-ans > .cmg-card:nth-child(n+6){ animation-range: entry 10% cover 46%; }
  }
}


/* --- reduced motion: nothing moves, nothing stays hidden --- */
@media (prefers-reduced-motion: reduce){
  .cmg-svc > a,
  .cmg-rev-card,
  .cmg-accred-item,
  figure.cmg-shot,
  .cmg-ans > .cmg-card,
  .cmg-book,
  h2.cmg-h{
    animation: none !important;
    opacity: 1 !important;
    translate: none !important;
  }
  .cmg-svc > a:hover,
  .elementor-button:hover{ transform: none; }
}
/* CMG-S53-END */

/* === 56 · Type back on the ladder ====================================
   Playbook 2.4 items 1, 2 and 15, found by measuring computed sizes on
   the live pages. The 20 Aug pass put Elementor's own size settings on
   the ladder; these are the CMG components and the mobile steps it did
   not reach. Ladder: 14 / 16 / 17.5 / 20 / 25 / 28 / 34 (display 44/64).
   Reversible: delete this whole section.
   ==================================================================== */

/* --- 56a - desktop: components that had drifted off the ladder ------- */
@media (min-width:881px){
  .cmg-rev-text.cmg-rev-text{ font-size:16px !important; }        /* 14.5 */
  .cmg-a.cmg-a{ font-size:16px !important; }                      /* 15.5 */
  .cmg-pillar p{ font-size:16px !important; }                     /* 15   */
  .cmg-alert-b.cmg-alert-b{ font-size:16px !important; }          /* 15.5 */
  .cmg-note.cmg-note-call{ font-size:16px !important; }           /* 15   */
  .cmg-abcred ul li{ font-size:16px !important; }                 /* 15.5 */
  .cmg-shot.cmg-shot figcaption,
  .cmg-page .cmg-ans figure.cmg-shot.cmg-shot figcaption{ font-size:16px !important; } /* 15.5 */
  .cmg-steps.cmg-steps li{ font-size:16px !important; }           /* 15.5 */
  .cmg-svc a span{ font-size:14px !important; }                   /* 13.5 */
  .cmg-book-foot.cmg-book-foot{ font-size:14px !important; }      /* 13.5 */
  .cmg-promise-t.cmg-promise-t{ font-size:17.5px !important; }    /* 18   */
}

/* --- 56b - mobile: body copy reaches 16px, nothing below 14px --------
   Nine substantial paragraphs on the homepage alone sat at 14px at
   390, and several labels were 12.5-14px, under the sitewide floor. */
@media (max-width:880px){
  .elementor-widget-text-editor p,
  .elementor-widget-icon-box p,
  .cmg-rev-text.cmg-rev-text,
  .cmg-a.cmg-a,
  .cmg-pillar p,
  .cmg-hero-p.cmg-hero-p,
  .cmg-promise-s.cmg-promise-s,
  .cmg-alert-b.cmg-alert-b,
  .cmg-note.cmg-note-call,
  .cmg-abcred ul li,
  .cmg-abcred p,
  .cmg-card p,
  .cmg-bk p,
  .cmg-shot.cmg-shot figcaption,
  .cmg-steps.cmg-steps li{ font-size:16px !important; }

  /* 56b line-height - the old px line-heights were tuned to 14px type,
     which left the bumped paragraphs at 1.31. Unitless so it scales. */
  .elementor-widget-text-editor p,
  .elementor-widget-icon-box p,
  .cmg-pillar p,
  .cmg-card p,
  .cmg-bk p{ line-height:1.55 !important; }

  .cmg-promise-t.cmg-promise-t,
  .elementor-testimonial-content{ font-size:17.5px !important; }

  /* small print sits on the 14px step and never below it */
  .cmg-book-foot.cmg-book-foot,
  .cmg-gbadge-label.cmg-gbadge-label,
  .cmg-bk-note.cmg-bk-note,
  .cmg-proof span,
  .cmg-svc a span,
  figcaption{ font-size:14px !important; }
}

/* --- 56c - the legal pages and the icon lists, both widths ----------- */
.cmg-legal p,
.cmg-legal li,
.cmg-legal td,
.cmg-legal th,
.cmg-legal-sub.cmg-legal-sub,
.elementor-icon-list-text.elementor-icon-list-text.elementor-icon-list-text,
.cmg-danger p{ font-size:16px !important; }

/* --- 56d - the trade rate table and the for-builders lede ------------ */
.cmg-lede.cmg-lede{ font-size:20px !important; }                  /* 19 */
@media (min-width:881px){ table.cmg-rate td, table.cmg-rate th{ font-size:16px !important; } }  /* 15 */
@media (max-width:880px){ table.cmg-rate td, table.cmg-rate th{ font-size:14px !important; } }  /* 13 */
/* --- 56e - measure: no prose past 80ch (item 6) ----------------------
   Measured with a real ch (the width of "0" in Poppins), not an assumed
   0.5em - the naive formula over-reports by about a quarter and sends
   you chasing paragraphs that are already fine.
   The service-page hero line and the note under the booking band ran to
   107 and 108 characters: an earlier !important max-width:none on
   .cmg-page > p (added to let body prose fill the reading column) was
   uncapping them as a side effect. The legal pages ran 93-95ch. */
@media (min-width:881px){
  .cmg-hero-p.cmg-hero-p,
  .cmg-page .cmg-hero-body > p.cmg-hero-p,
  .cmg-bk-note.cmg-bk-note{ max-width:70ch !important; }
  .cmg-legal p,
  .cmg-legal li{ max-width:75ch; }
}


/* ---- CMG honest booking box, 26 Aug 2026 --------------------------
   The "I'm after…" dropdown offered seven choices that all went to the
   same generic ServiceM8 form — the selection was discarded. Replaced
   with one Book online action plus the genuinely different call route.
   These rules exist because the box's own markup became an <a> where it
   used to be a <button>, so it inherits the theme's orange link colour:
   without them the label is orange on an orange pill, i.e. invisible.  */
.cmg-book a.cmg-book-btn{
  color:#fff !important;
  text-decoration:none !important;
}
.cmg-book a.cmg-book-alt{
  color:#1B3461 !important;
  text-decoration:underline !important;
  text-underline-offset:3px;
}
.cmg-book a.cmg-book-alt:hover{ color:#AD4E1C !important; }
/* ---- end CMG honest booking box ----------------------------------- */


/* ~~~~~ 57. CONTRAST - TEXT THAT WAS TOO PALE TO READ (25 Aug 2026) ~~~~~ */
/* Chris: "text in blue boxes is hardly readable". Every text/background pair
   on the site was measured. The cause is one colour used two ways: the brand
   orange #EF7228 is a mid-tone, so WHITE ON IT is 2.95:1 and IT ON WHITE is
   2.95:1 - both far under the 4.5:1 WCAG AA minimum for normal text, and it
   is the colour of every button and every link.

   Nothing here invents a new colour. #AD4E1C and #AD4E1C are the deep oranges
   already in the CMG palette (the link colour inside the pale-orange note
   boxes); #F79553 is the same hue lightened so it can sit on navy.

   Measured before -> after:
     white on button orange            2.95 -> 4.56
     orange link on white              2.95 -> 5.41
     orange link on pale blue          2.76 -> 5.05
     orange link on navy               4.14 -> 5.46
     booking-box small print on navy   6.27 -> 8.14
     registration numbers on white     4.36 -> 5.18
     "Google review" byline on white   2.93 -> 5.18
     phone links in the note boxes     4.09 -> 5.45
   The gold review stars are deliberately left alone: they are decorative,
   the rating is written next to them in words, and darkening them to pass
   would stop them reading as Google stars. */

/* --- 1. Solid orange buttons: white text needs a deeper orange behind it --- */
header .site-navigation li.cmg-book-cta > a,
.site-footer .site-navigation ul.menu > li.cmg-f-book > a,
a.cmg-b1, .cmg-acts a.cmg-b1, a.cmg-book-btn,
.elementor .elementor-element.elementor-element-63be89b .elementor-button,
.elementor .elementor-element.elementor-element-0d33427 .elementor-button,
.elementor .elementor-element.elementor-element-ca688d2 .elementor-button,
.elementor-element-2be0334e .elementor-element-1f466f0f .elementor-button{
  background-color:#AD4E1C !important;
  border-color:#AD4E1C !important;
  color:#fff !important;
}
header .site-navigation li.cmg-book-cta > a:hover,
.site-footer .site-navigation ul.menu > li.cmg-f-book > a:hover,
a.cmg-b1:hover, a.cmg-book-btn:hover,
.elementor .elementor-element.elementor-element-63be89b .elementor-button:hover,
.elementor .elementor-element.elementor-element-0d33427 .elementor-button:hover,
.elementor .elementor-element.elementor-element-ca688d2 .elementor-button:hover,
.elementor-element-2be0334e .elementor-element-1f466f0f .elementor-button:hover{
  background-color:#AD4E1C !important; border-color:#AD4E1C !important; color:#fff !important;
}

/* --- 2. Orange text on white and on the pale blue surface --- */
.cmg-page p a, .cmg-page li a, .cmg-page td a,
span.cmg-accred-check, a.cmg-accred-item span.cmg-accred-check,
.cmg-rev-more a,
.elementor-button-link:not([class*="elementor-size"]) .elementor-button-text{
  color:#AD4E1C !important;
}
.cmg-page p a:hover, .cmg-page li a:hover,
a.cmg-accred-item:hover span.cmg-accred-check, .cmg-rev-more a:hover{
  color:#8F3D14 !important;
}

/* --- 3. Orange on NAVY has to go lighter, not darker --- */
.cmg-bk a, .cmg-bk p a, p.cmg-bk-note a,
.site-footer .site-navigation ul.menu > li.cmg-f-link > a:hover{
  color:#F79553 !important;
}

/* --- 4. Pale small print --- */
p.cmg-bk-note, .cmg-bk p.cmg-bk-note{ color:#C6D4E8 !important; }
.site-footer li.cmg-f-credit > a, .site-footer li.cmg-f-credit.cmg-f-plain > a{ color:#C6D4E8 !important; }
p.cmg-accred-num, a.cmg-accred-item p.cmg-accred-num{ color:#5F6E85 !important; }
div.cmg-rev-src, .cmg-rev-card .cmg-rev-src{ color:#5F6E85 !important; }

/* --- 5. Links inside the pale-orange note and alert boxes --- */
.elementor-element-2be0334e .cmg-note a,
.elementor-element-2be0334e .cmg-alert a,
.cmg-page .cmg-note a, .cmg-page .cmg-alert a{ color:#AD4E1C !important; }


/* --- 57b. Two buttons needed more specificity than 57 gave them ---
   Earlier CMG sections already force #EF7228 with
   `body .elementor .elementor-element.elementor-element-XXX a.elementor-button`
   (0,4,2) and `footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a`
   (0,4,3), both !important. Section 57's shorter selectors lost the cascade.
   These match those shapes and add one class so they win. */
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button,
footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a{
  background-color:#AD4E1C !important; border-color:#AD4E1C !important; color:#fff !important;
}
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button:hover,
footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a:hover{
  background-color:#AD4E1C !important; border-color:#AD4E1C !important; color:#fff !important;
}

/* 53b elevation specificity fix - section 53 must win over older important blocks */
.cmg-svc.cmg-svc>a,.cmg-rev-card.cmg-rev-card,.cmg-accred-item.cmg-accred-item,figure.cmg-shot.cmg-shot,.cmg-ans .cmg-card.cmg-card{box-shadow:var(--cmg-e2)!important}
.cmg-ans .cmg-card-key.cmg-card-key{box-shadow:0 6px 18px rgba(239,115,41,.18)!important}
.cmg-book.cmg-book.cmg-book{box-shadow:var(--cmg-e3)!important}
.cmg-bk.cmg-bk{box-shadow:var(--cmg-e2)!important}
.cmg-bk.cmg-bk:not(:last-child){box-shadow:var(--cmg-e3)!important}

/* 53c card elevation - gt-free rewrite of section 53 e2 (child-combinator rules are dead: WP escapes > to > in Additional CSS) */
.cmg-svc.cmg-svc a:not(:hover){box-shadow:var(--cmg-e2)!important}
.cmg-accred-item.cmg-accred-item:not(:hover){box-shadow:var(--cmg-e2)!important}
.cmg-rev-card.cmg-rev-card{box-shadow:var(--cmg-e2)!important}
figure.cmg-shot.cmg-shot{box-shadow:var(--cmg-e2)!important}
.cmg-ans .cmg-card.cmg-card{box-shadow:var(--cmg-e2)!important}

/* 53d restore key-card orange shadow (53c e2 overrode it) */
.cmg-ans .cmg-card-key.cmg-card-key.cmg-card-key{box-shadow:0 6px 18px rgba(239,115,41,.18)!important}

/* ~~~~~ 58. MOBILE HEADER NAV + PAGE-OPENING SPACING (27 Aug 2026) ~~~~~ */
/* 58a. Boilers, Plumbing and About each carry a sub-menu, and their <li>
   reserves 15px of padding-right for a "▾" arrow that is display:none
   below 881px. The gap after those three words was therefore 24px against
   9px everywhere else. Reclaim the reserved space on mobile and set one
   even column gap, so every gap in the wrapped nav is 16px. */
@media (max-width:880px){
  .site-header .site-navigation ul.menu > li.menu-item{ padding-right:0 !important; }
  .site-header .site-navigation ul.menu.menu{ gap:2px 12px !important; align-items:center !important; }
}

/* 58b. The gap between the header and the page H1 was three different values
   depending on how the page is built: 24px on the homepage (Elementor section
   padding), 16px on the classic service pages, and 68px on the hub pages
   (52px Elementor container padding PLUS 16px block padding). Normalised to
   24px, matching the homepage. On the hub pages this also lifts the whole
   booking card 44px, which puts the phone number back on the first screen. */
@media (max-width:880px){
  .elementor-element:has(> .e-con-inner > .elementor-element > .cmg-open){ padding-top:0 !important; }
  .cmg-open{ padding-top:24px !important; }
}

/* 58c. On the hub pages the Google rating badge is an inline-flex pill inside a
   left-aligned block, so it sat hard against the left edge with 114px of dead
   space to its right, directly under a centred H1. Centred on mobile to match
   the rest of the opening block. Desktop is left alone. */
@media (max-width:880px){
  .cmg-open a.cmg-ob{
    display:flex !important; width:max-content !important; max-width:100% !important;
    margin-left:auto !important; margin-right:auto !important;
  }
}

/* ~~~~~ 59. TYPE, ALIGNMENT AND COLOUR CONSISTENCY (27 Aug 2026) ~~~~~ */
/* From Chris's eight opening-screen screenshots. Every selector below is
   doubled or body-scoped on purpose: the rules it has to outrank are
   element-id rules from sections 50/51 at (0,2,2). */

/* 59a. AA contrast. The current-page nav item was #EF7228 on white, 2.95:1.
   It only renders on the page you are already on, which is why the 26 Aug
   contrast pass never saw it. All widths. */
.site-header .site-navigation ul.menu > li.current-menu-item > a,
.site-header .site-navigation ul.menu > li.current_page_item > a,
.site-header .site-navigation ul.menu > li.current-menu-parent > a,
.site-header .site-navigation ul.menu > li.current-menu-ancestor > a{ color:#AD4E1C !important; }

/* 59b. AA contrast. The four homepage service-card arrows, same colour,
   same 2.95:1. */
.cmg-svc a i{ color:#AD4E1C !important; }

/* 59c. Heat pumps hero. The navy scrim ran .55 / .78 / .94, and where the
   paragraph crosses the white highlight on the heat pump casing the text
   fell to 4.25:1 against a 4.5 requirement. Raised to .66 / .86 / .96 —
   pixel-sampled across the panel, worst case is now 5.57:1. */
.cmg-hero::after{
  background-image:linear-gradient(rgba(28,52,98,.66) 0%, rgba(28,52,98,.86) 52%, rgba(28,52,98,.96) 100%) !important;
}

/* 59d. One navy. The page title was #1B3461 on home/about/contact and
   #1B3461 on every other page — one digit apart, invisible, but two
   hard-coded values where there should be one. */
body h1.cmg-open-h1.cmg-open-h1{ color:#1B3461 !important; }

/* 59e. One page-title size on mobile. It was 34px on home/about/contact,
   29px on the hub and classic service pages (a value that is not on the
   type ladder at all) and 25px on heat pumps. Page titles are 28px; the
   homepage keeps 34px because that is a display headline, not a page
   title. text-wrap:balance evens the lines and removes orphans like the
   single word "it" that ended the About title. */
@media (max-width:880px){
  body h1.cmg-open-h1.cmg-open-h1,
  body .elementor h1.elementor-heading-title.elementor-heading-title{
    font-size:28px !important; line-height:33px !important; text-wrap:balance;
  }
  body.home .elementor h1.elementor-heading-title.elementor-heading-title{
    font-size:34px !important; line-height:36.4px !important;
  }
}

/* 59f. The booking-card lead was navy on three pages and grey on five, and
   left-aligned on About and Contact while the other six centred it. */
@media (max-width:880px){
  body .cmg-book p.cmg-book-lead.cmg-book-lead{ color:#4A5A70 !important; text-align:center !important; }
  body .cmg-book .cmg-book-row.cmg-book-row{ text-align:center !important; }
}

/* 59g. One Google badge. The home/about/contact build stacked the stars
   above the label; the service pages set them inline after it. Both now
   read the same way. The review-count wording was removed from the
   five pages that carried it in the same pass — see the build record. */
@media (max-width:880px){
  body .cmg-gbadge .cmg-gbadge-txt{ flex-direction:row !important; align-items:center !important; gap:8px !important; }
  body .cmg-gbadge .cmg-gbadge-label{ order:1; }
  body .cmg-gbadge .cmg-gbadge-stars{ order:2; }
}

/* ~~~~~ 60. NAVY-SURFACE TEXT AND THE THIRD ORANGE (28 Aug 2026) ~~~~~ */
/* Chris: "the text in the blue boxes can't be seen properly". He was right,
   and the cause is worth keeping. All widths, not mobile-only. */

/* 60a. The site's OWN rules were already correct — `.cmg-page p.cmg-hero-p`
   sets #E8EEF7 and `.cmg-page .cmg-bk p` sets #D9E3F1, both proper
   light-on-navy values. They were being beaten by a generic rule from the
   type unification: `.elementor-widget-text-editor p{ color:#4A5A70
   !important }`. Body-copy grey on #1B3461 measures 1.75:1 — the supporting
   line inside the navy hero box and the hours line inside the navy booking
   band, on every hub page. Restoring the intended colours with enough
   specificity to win. */
body .cmg-page p.cmg-hero-p{ color:#E8EEF7 !important; }
body .cmg-page .cmg-bk p{ color:#D9E3F1 !important; }

/* 60b. A THIRD orange. #EF7329 is the dark flame colour from the logo
   palette; the 26 Aug contrast sweep only hunted #EF7228, so this one was
   never caught. It carries the price link on every hub service card
   (2.94:1 on white) and the credentials link on About (2.73:1 on #F2F8FC).
   `.elementor-widget-text-editor a` is a SITEWIDE rule setting #EF7228 on
   every link inside a text widget — checked first, and every such link is
   on a light surface, so overriding it globally is safe. All to #AD4E1C
   (4.6:1 on white), the agreed orange for text on light. */
body .cmg-page .cmg-svc > a em{ color:#AD4E1C !important; }
body a.cmg-abcred-link{ color:#AD4E1C !important; }
body .elementor-widget-text-editor a{ color:#AD4E1C !important; }

/* 60c. Correction to 60b, made in the same pass. The sitewide text-editor
   link rule reached a link sitting inside the navy booking band, where
   section 57 had ALREADY set the correct #F79553 (5.48:1 on navy). Both
   rules are !important and both are (0,1,2), so source order decided it and
   60b — being later — won, turning a correct 5.48:1 link into 2.27:1.
   Re-asserting the navy value at (0,2,3) so it cannot lose again. Scoped to
   `p a` so the two buttons in the band (.cmg-b1, .cmg-b2) keep white text. */
body .cmg-page .cmg-bk p a,
body .cmg-page .cmg-hero p a{ color:#F79553 !important; }

/* ~~~~~ 61. BUTTONS ON THE REAL BRAND ORANGE (28 Aug 2026) ~~~~~ */
/* Chris: "The orange on the buttons doesn't look like our branded colours?"
   He was right. #AD4E1C was never a brand colour — it is the brand flame
   darkened to about 78%, which is what white text at 16px forces: the brand
   flame with white is 2.94:1 against a 4.5:1 minimum, and no tuning fixes
   that. Presented as three options; Chris chose to keep the REAL colour and
   change the text instead.

   Buttons are now the brand flame light #EF9228 with navy #1B3461 text —
   5.13:1, comfortably AA. Hover #E58A1F, 4.65:1, a visible darkening.

   DO NOT "tidy" #AD4E1C and #AD4E1C out of the stylesheet. They remain
   correct where they are used as TEXT on pale surfaces (the Emergency tab
   pill, the note and alert box links). That is the opposite problem and
   brightening those would fail. Only button FILLS moved. */
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a,
body a.cmg-b1.cmg-b1,
body a.cmg-book-btn.cmg-book-btn{
  background-color:#EF9228 !important;
  border-color:#EF9228 !important;
  color:#1B3461 !important;
}
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button:hover,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a:hover,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a:hover,
body a.cmg-b1.cmg-b1:hover,
body a.cmg-book-btn.cmg-book-btn:hover,
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button:focus-visible,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a:focus-visible,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a:focus-visible,
body a.cmg-b1.cmg-b1:focus-visible,
body a.cmg-book-btn.cmg-book-btn:focus-visible{
  background-color:#E58A1F !important;
  border-color:#E58A1F !important;
  color:#1B3461 !important;
}


/* ===== 62 - buttons on the brand DARK flame #EF7329 (Chris, 28 Aug 2026) ===== */
/* This is the orange in the credential tick circles - the right-hand half of the flame. */
/* REVISED 28 Aug: Chris asked for the original button size back. Size reverted, so the */
/* 3:1 large-text allowance no longer applies and the label needs a full 4.5:1. Solved by */
/* darkening the TEXT, not the orange: #16294E is the brand navy at ~80%, giving 4.90:1. */
/* The orange stays exactly #EF7329. Hover is a lift only - no fill change - so the ratio */
/* holds in every state. Supersedes section 61. */
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a,
body .cmg-page a.cmg-b1.cmg-b1,
body a.cmg-book-btn.cmg-book-btn{
  background-color:#EF7329 !important;
  border-color:#EF7329 !important;
  color:#16294E !important;
}
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button:hover,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a:hover,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a:hover,
body .cmg-page a.cmg-b1.cmg-b1:hover,
body a.cmg-book-btn.cmg-book-btn:hover,
body .elementor .elementor-element.elementor-element-63be89b a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-0d33427 a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-ca688d2 a.elementor-button.elementor-button:focus-visible,
body .elementor .elementor-element.elementor-element-1f466f0f a.elementor-button.elementor-button:focus-visible,
body header.site-header nav.site-navigation ul.menu li.cmg-book-cta.cmg-book-cta > a:focus-visible,
body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book.cmg-f-book > a:focus-visible,
body .cmg-page a.cmg-b1.cmg-b1:focus-visible,
body a.cmg-book-btn.cmg-book-btn:focus-visible{
  background-color:#EF7329 !important;
  border-color:#EF7329 !important;
  color:#16294E !important;
}
/* 62b - the secondary Call button sized to sit level with .cmg-b1 (colour unchanged) */
/* 62b withdrawn 28 Aug - Chris: the buttons were the right size before. */
/* 62c - text-only Elementor buttons carried #EF7228 on white at 2.94:1. Section 61 only */
/* covered filled buttons. 6380de1e and 7824db44 are hidden at desktop, visible at phone. */
body .elementor .elementor-element.elementor-element-31da2c37 a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-6380de1e a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-7824db44 a.elementor-button.elementor-button{ color:#AD4E1C !important; }
body .elementor .elementor-element.elementor-element-31da2c37 a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-6380de1e a.elementor-button.elementor-button:hover,
body .elementor .elementor-element.elementor-element-7824db44 a.elementor-button.elementor-button:hover{ color:#8F3F16 !important; }


/* ===== 64 - pale-blue banding on the hub pages (Chris, 28 Aug 2026) ===== */
/* Home, About and Contact alternate white and #F2F8FC and look finished. The hubs were */
/* one flat white slab. .cmg-page on a hub is: navy hero, .cmg-proof, figure.cmg-shot, */
/* h2, .cmg-svc, navy .cmg-bk. Tinting .cmg-proof and the h2 + .cmg-svc pair restores */
/* navy - pale - white - pale - navy. */
/* NOT full-bleed at >=881px on purpose: at >=1200px .cmg-page is a two-column grid with */
/* a 340px booking column, and Chrome does not contain a negative-margin grid item, so a */
/* bled band would run under the sidebar. Inset rounded panel there instead. */
@media (max-width:880px){
  body .cmg-page > .cmg-proof.cmg-proof,
  body .cmg-page > h2:has(+ .cmg-svc),
  body .cmg-page > .cmg-svc.cmg-svc{
    background-color:transparent !important; background-image:var(--cmg-band-img) !important;
    margin-left:-18px !important; margin-right:-18px !important;
    padding-left:18px !important; padding-right:18px !important;
  }
  body .cmg-page > .cmg-proof.cmg-proof{ padding-top:22px !important; padding-bottom:22px !important; }
  body .cmg-page > h2:has(+ .cmg-svc){ padding-top:30px !important; padding-bottom:0 !important; margin-bottom:8px !important; }
  body .cmg-page > .cmg-svc.cmg-svc{ padding-top:0 !important; padding-bottom:30px !important; margin-top:0 !important; }
}
@media (min-width:881px){
  body .cmg-page > .cmg-proof.cmg-proof,
  body .cmg-page > .cmg-svc.cmg-svc{
    background-color:transparent !important; background-image:var(--cmg-band-img) !important; border-radius:14px !important; padding:24px !important;
  }
  body .cmg-page > h2:has(+ .cmg-svc){ margin-bottom:12px !important; }
}


/* ===== 65 - banding for the classic service pages (Chris, 28 Aug 2026) ===== */
/* These pages are ~27 flat siblings with no section containers, so there is nothing to */
/* wrap and no way to band a run in CSS. What they DO have is self-contained blocks - */
/* .cmg-ans and .cmg-promise - that already read as units. Tinting those, plus the h2 */
/* that introduces each, breaks the white slab WITHOUT touching the margin rhythm on the */
/* plain paragraphs, which is what a naive per-element background would have wrecked. */
/* ol.cmg-steps is deliberately left alone - it carries list padding for its numbers. */
@media (max-width:880px){
  body .cmg-page > .cmg-ans.cmg-ans,
  body .cmg-page > .cmg-promise.cmg-promise,
  body .cmg-page > h2:has(+ .cmg-ans),
  body .cmg-page > h2:has(+ .cmg-promise){
    background-color:transparent !important; background-image:var(--cmg-band-img) !important;
    margin-left:-18px !important; margin-right:-18px !important;
    padding-left:18px !important; padding-right:18px !important;
  }
  body .cmg-page > h2:has(+ .cmg-ans),
  body .cmg-page > h2:has(+ .cmg-promise){ margin-bottom:0 !important; padding-top:26px !important; padding-bottom:10px !important; }
  body .cmg-page > .cmg-ans.cmg-ans,
  body .cmg-page > .cmg-promise.cmg-promise{ padding-top:0 !important; padding-bottom:24px !important; }
}
@media (min-width:881px){
  body .cmg-page > .cmg-ans.cmg-ans,
  body .cmg-page > .cmg-promise.cmg-promise{ background-color:transparent !important; background-image:var(--cmg-band-img) !important; border-radius:14px !important; padding:24px !important; }
}


/* ===== 66 - the colour collapse (Chris, 28 Aug 2026) ===== */
/* Live audit: 52 distinct opaque colours across 12 pages, most of them near-duplicates */
/* doing a job another value already did. NOT ONE of the retiring values failed AA - this */
/* is consistency, not legibility, which is exactly why six contrast sweeps missed it. */
/* Full mapping: claude/CMG-Colour-Collapse-Aug-2026.md */
/* Chris chose #1B3461, the brand-pack lettering navy, as the single navy. */
/* ROLE-SCOPED OVERRIDES, deliberately not a find-and-replace: #AD4E1C is correct as text */
/* on a pale surface and wrong as a button fill, so one string means two things. */
/* The on-dark re-assertions MUST STAY LAST in each block or a light-surface rule reaches */
/* into a navy panel - that is exactly how section 60b broke a link in August. */

/* --- 66a navy: #1B3461, #1E3A5F, #324A6D all -> #1B3461 --- */
body h1, body h2, body h3, body h4, body h5, body h6,
body .cmg-gbadge .cmg-gbadge-label,
body .elementor-icon-list-text{ color:#1B3461 !important; }
body .elementor .elementor-element.elementor-element-1cc799fc{ background-color:#1B3461 !important; }
body .cmg-hero h1, body .cmg-hero h2, body .cmg-hero h3, body .cmg-hero h4,
body .cmg-bk h1, body .cmg-bk h2, body .cmg-bk h3, body .cmg-bk h4,
body .site-footer h1, body .site-footer h2, body .site-footer h3, body .site-footer h4,
body .elementor-element-1cc799fc h1, body .elementor-element-1cc799fc h2,
body .elementor-element-1cc799fc h3, body .elementor-element-1cc799fc h4{ color:#FFFFFF !important; }

/* --- 66b body text -> #4A5A70, muted -> #5F6E85 --- */
body .cmg-page, body .cmg-page > p, body .cmg-page li, body p.cmg-a,
body .cmg-rev-text, body .cmg-ans p, body .cmg-card p{ color:#4A5A70 !important; }
body .cmg-accred-num, body figcaption, body .elementor-testimonial-job,
body small{ color:#5F6E85 !important; }
body .cmg-hero p, body .cmg-page p.cmg-hero-p{ color:#E8EEF7 !important; }
body .cmg-bk p, body .cmg-page .cmg-bk p, body .cmg-bk li,
body .site-footer p, body .site-footer li,
body .elementor-element-1cc799fc p{ color:#D9E3F1 !important; }

/* --- 66c pale surfaces -> #F2F8FC --- */
body .cmg-book-foot, body .cmg-abcred, body .tw td, body .cmg-legal-table td{ background-color:transparent !important; background-image:var(--cmg-band-img) !important; }

/* --- 66d hairline borders -> #E3E8EF (key card and danger box keep their own tints) --- */
body .cmg-card:not(.cmg-card-key), body .cmg-rev-card, body .cmg-rev-foot,
body .cmg-abcred, body .cmg-accred-item, body .tw td, body .cmg-legal-table td{ border-color:#E3E8EF !important; }

/* --- 66e the strays. 3913940f and 5184b0a0 are FILLED orange buttons carrying WHITE */
/*     text at 2.94:1 - two live AA failures section 62 never saw, because they use */
/*     #EF7228 and my own sweep only hunted the other three oranges. */
body .elementor .elementor-element.elementor-element-3913940f a.elementor-button.elementor-button,
body .elementor .elementor-element.elementor-element-5184b0a0 a.elementor-button.elementor-button{
  background-color:#EF7329 !important; border-color:#EF7329 !important; color:#16294E !important; }
body .elementor .elementor-element.elementor-element-31da2c37 a.elementor-button.elementor-button{ border-color:#AD4E1C !important; }
body .elementor .elementor-element.elementor-element-11048b3f button,
body .elementor .elementor-element.elementor-element-11048b3f .e-paragraph-base{ color:#AD4E1C !important; }
body .elementor .elementor-element.elementor-element-38d883d6 .elementor-divider-separator{ border-top-color:#E3E8EF !important; }

/* --- 66f Hello Biz defaults, so they can never surface. #CC3366 is the pink that */
/*     covered the site the day the stylesheet was HTML-escaped. */
body, body .site-header, body .site-header nav, body .site-header ul, body .site-header li{ color:#4A5A70 !important; }
body a.skip-link, body a.custom-logo-link{ color:#AD4E1C !important; }


/* ===== 67 - colour collapse, second pass (28 Aug 2026) ===== */
/* The values section 66 could not outrank. Higher specificity via html body + doubled */
/* classes. Text on dark surfaces is re-asserted LAST, as in 66. */
/* DELIBERATELY NOT DONE HERE: converting navy LINKS from #1B3461 to #1B3461. Those */
/* links carry no classes, so it would take a sitewide link rule - which is exactly what */
/* broke a navy-band link in section 60b. The two navies are indistinguishable on screen, */
/* so the risk buys nothing today. It needs its own link-colour pass. See the mapping doc. */

/* --- 67a stray body greys -> #4A5A70, muted -> #5F6E85 --- */
html body .cmg-page.cmg-page span, html body .cmg-page.cmg-page p,
html body .cmg-page.cmg-page li, html body .cmg-ans.cmg-ans span,
html body p.cmg-a.cmg-a{ color:#4A5A70 !important; }
html body small, html body .cmg-page.cmg-page small,
html body .cmg-accred-num.cmg-accred-num,
html body figcaption{ color:#5F6E85 !important; }
html body .cmg-rev-name.cmg-rev-name{ color:#1B3461 !important; }
/* re-assert on dark - keep last in this block */
html body .cmg-bk.cmg-bk p, html body .cmg-bk.cmg-bk span, html body .cmg-bk.cmg-bk li,
html body .cmg-hero.cmg-hero p, html body .cmg-hero.cmg-hero span,
html body .elementor-element-1cc799fc p.elementor-icon-box-description{ color:#D9E3F1 !important; }
html body .cmg-page.cmg-page p.cmg-hero-p{ color:#E8EEF7 !important; }

/* --- 67b remaining hairline borders -> #E3E8EF --- */
html body .cmg-page.cmg-page span.cmg-chip, html body .cmg-chip.cmg-chip,
html body .cmg-accred-item.cmg-accred-item, html body .tw td, html body .cmg-legal-table td,
html body .cmg-shot.cmg-shot img, html body .cmg-page.cmg-page figure img{ border-color:#E3E8EF !important; }

/* --- 67c last pale surface --- */
html body .cmg-book-foot.cmg-book-foot{ background-color:transparent !important; background-image:var(--cmg-band-img) !important; }

/* --- 67d the Google badge link still carried Hello Biz pink #CC3366 underneath --- */
html body a.cmg-gbadge.cmg-gbadge, html body a.cmg-ob.cmg-ob{ color:#1B3461 !important; }


/* ===== 68 - desktop density and logo size (Chris, 28 Aug 2026) ===== */
/* Chris: "the layout looks cramped on the home page, and the logo is really small". */
/* Measured: every top-level section was on 56px top and bottom padding, on EVERY page, */
/* where the playbook desktop section ladder is 64/96/128/160. One value everywhere also */
/* means no hierarchy - a section break read the same as a gap inside a section. */
/* The logo rendered 60x56 inside a 124px header - under half the header height. */

/* --- 68a logo. Height-driven so the aspect ratio is never forced. --- */
@media (min-width:881px){
  body .site-header .custom-logo-link .custom-logo,
  body .site-header img.custom-logo{ height:78px !important; width:auto !important; max-width:none !important; }
}

/* --- 68b section rhythm 56 -> 96 from the THIRD top-level section down. The first two */
/*     are the hero pair (56/0 then 22/56) and are deliberately asymmetric - flattening */
/*     them would double the gap in the middle of one visual block. --- */
@media (min-width:1025px){
  body .elementor > .elementor-element ~ .elementor-element ~ .elementor-element{
    padding-top:96px !important; padding-bottom:96px !important; }
}
@media (min-width:881px) and (max-width:1024px){
  body .elementor > .elementor-element ~ .elementor-element ~ .elementor-element{
    padding-top:80px !important; padding-bottom:80px !important; }
}

/* --- 68c hero: the gutter between the headline column and the booking card was 56px, */
/*     the same as the section padding. Columns were fixed 684px + 400px, so widening */
/*     the gap alone would have overflowed the 1140px column - hence minmax. --- */
@media (min-width:1025px){
  body .elementor .elementor-element.elementor-element-b3dbfd8{
    grid-template-columns:minmax(0,1fr) 380px !important; gap:0 80px !important; }
}

/* --- 68d the four Design/Install/Maintain/Repair columns sat 260px wide with a 33px */
/*     gutter. Internal <= external: the gap between columns must beat the gap inside. --- */
@media (min-width:1025px){
  body .elementor .elementor-element.elementor-element-532d3d64{ gap:48px !important; }
}


/* ===== 69 - regression fix for section 67 (28 Aug 2026) ===== */
/* 67a re-asserted .cmg-hero span -> #D9E3F1 so spans sitting ON the navy stayed light. */
/* .cmg-chip IS a span, but it is a WHITE pill sitting on top of that navy - so the price */
/* inside it ("£105 boiler service, inc VAT") went light-blue on white at about 1.3:1 and */
/* all but vanished. Same class of mistake as section 60b: a rule scoped to a dark */
/* CONTAINER reaching an element that paints its own light background inside it. */
/* Rule to carry forward: when re-asserting on-dark colours, scope to the text elements */
/* that actually sit on the dark surface, and exclude anything with its own background. */
html body .cmg-hero .cmg-chip:not(.cmg-chip-ghost),
html body .cmg-bk .cmg-chip:not(.cmg-chip-ghost),
html body .cmg-page .cmg-chip:not(.cmg-chip-ghost){ color:#1B3461 !important; }
html body .cmg-hero .cmg-chip:not(.cmg-chip-ghost) small,
html body .cmg-bk .cmg-chip:not(.cmg-chip-ghost) small,
html body .cmg-page .cmg-chip:not(.cmg-chip-ghost) small{ color:#4A5A70 !important; }


/* ===== 70 - two more contrast failures, found by a better checker (28 Aug 2026) ===== */
/* Both were invisible to every earlier sweep because those sweeps only examined ELEMENTS */
/* with no element children. Text sitting as a bare text node ALONGSIDE a child element */
/* was never checked. Rewriting the checker as a TreeWalker over text nodes found these */
/* in one pass. Any future contrast sweep must walk text nodes, not elements. */

/* --- 70a a THIRD filled orange button on #EF7228 with white text, 2.95:1, on /gallery/. */
/*     Sections 62 and 66 both missed it. That is three found in three separate sweeps, */
/*     which says the button inventory should be rebuilt by querying every page, not */
/*     maintained as a list. --- */
body .elementor .elementor-element.elementor-element-55e23e7e a.elementor-button.elementor-button{
  background-color:#EF7329 !important; border-color:#EF7329 !important; color:#16294E !important; }

/* --- 70b MY REGRESSION. 66e set every tab button in 11048b3f to #AD4E1C to clear the */
/*     retired #AD4E1C. But the SELECTED tab has a navy background, so orange-on-navy */
/*     came out at 2.26:1. The unselected tabs are white and 5.41:1, which is correct. */
/*     Lesson: a component with states needs the states enumerated before it is recoloured. */
html body .elementor-element-11048b3f button[aria-selected="true"],
html body .elementor-element-11048b3f button[aria-selected="true"] span,
html body .elementor-element-11048b3f button.e--selected,
html body .elementor-element-11048b3f button.e--selected span{ color:#FFFFFF !important; }
html body .elementor-element-11048b3f button[aria-selected="true"]{ background-color:#1B3461 !important; }

/* --- 70c 70b lost the cascade. 66e is (0,4,2); 70b was (0,2,3). Same lesson as the nav */
/*     gap in section 58a: match the winning rule's CLASS count, then add one. */
html body .elementor .elementor-element.elementor-element-11048b3f button[aria-selected="true"] .e-paragraph-base,
html body .elementor .elementor-element.elementor-element-11048b3f button[aria-selected="true"].e-tab-base,
html body .elementor .elementor-element.elementor-element-11048b3f button.e--selected .e-paragraph-base{ color:#FFFFFF !important; }


/* ===== 71 - one type scale across all three page architectures (Chris, 28 Aug 2026) ===== */
/* Chris: "look at the homepage and all the other pages, fonts, layout, colours and */
/* backgrounds and depths all different. you're not seeing the differences." He was right. */
/* Two type scales were live at desktop: H1 64px / H2 44px on the four Elementor pages, */
/* H1 34px / H2 25px on the ten hub and classic pages. The homepage title was 88% bigger */
/* than the boiler page title. This was a KNOWN item - the build record already said the */
/* H1 sizes had only been normalised at <=880px - and six later audits missed it because */
/* every one of them compared properties WITHIN a page, never the same property ACROSS */
/* pages. Standing rule from here: audit by diffing pages against each other. */
/* Chris chose 44/28 from a live three-way comparison. Both groups move; both sizes are */
/* already on the agreed ladder. Navy-box headings are deliberately NOT included - they */
/* are panel headings, not page section headings, and 44px made them wrap badly. */

@media (min-width:881px){
  html body h1.cmg-open-h1.cmg-open-h1.cmg-open-h1,
  html body .elementor h1.elementor-heading-title.elementor-heading-title.elementor-heading-title,
  html body h1{ font-size:44px !important; line-height:1.07 !important; }
  html body h2.cmg-h.cmg-h.cmg-h,
  html body .elementor h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
  html body .cmg-page > h2{ font-size:28px !important; line-height:1.15 !important; }
}

/* --- 71b mobile had the same inconsistency in miniature: every H1 28px EXCEPT the */
/*     homepage at 34px. One rule everywhere is the point of this section. --- */
@media (max-width:880px){
  html body.home .elementor h1.elementor-heading-title.elementor-heading-title.elementor-heading-title{
    font-size:28px !important; line-height:33px !important; }
}

/* --- 71c WITHDRAWN before it did anything. The service pages already carry explicit px */
/*     max-widths (703.36px, 714.35px) which outrank a 65ch rule, so the rule published as */
/*     dead CSS and was removed rather than left lying around. The finding stands: real body */
/*     copy measures ~88 characters on the service pages against a 45-75 target, and ~66-80 */
/*     on the Elementor pages. Narrowing to 65ch is roughly 572px - a visible change to ten */
/*     pages - so it goes to Chris with a comparison rather than being pushed through. */
/*     Also note my first measurement of this was WRONG: it picked up paragraphs inside the */
/*     400px booking card and reported them as body copy. Exclude cards when measuring. --- */

/* --- 71d mobile carried the SAME split, and worse. Section headings were 29px on the */
/*     Elementor pages and 20-21px on the hub and classic pages - and 29px sat ABOVE a */
/*     28px H1, so on the homepage the section headings were bigger than the page title. */
/*     That is a hierarchy inversion and it is on the playbook audit checklist by name. */
/*     One size, 20px, on the ladder, with a clear step down from the 28px H1. --- */
@media (max-width:880px){
  html body h2.cmg-h.cmg-h.cmg-h,
  html body .elementor h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
  html body .cmg-page > h2{ font-size:20px !important; line-height:1.25 !important; }
}


/* ===== 72 - type ladder, floor, radii and elevation (Chris, 28 Aug 2026) ===== */
/* Follows section 71. The ladder is 14 / 16 / 17.5 / 20 / 25 / 28, display 44. */
/* Every off-ladder size below was found by walking TEXT NODES on all 14 pages at both */
/* widths and listing the elements that carry it - not by reading the stylesheet. */

/* --- 72a desktop off-ladder --- */
@media (min-width:881px){
  html body .cmg-ob-s.cmg-ob-s,
  html body p.cmg-accred-name.cmg-accred-name{ font-size:14px !important; }
  html body .cmg-page em, html body .cmg-svc em,
  html body .cmg-page a.cmg-revlink{ font-size:14px !important; }
  html body .site-header nav.site-navigation ul.menu a,
  html body .site-footer nav ul.menu a{ font-size:16px !important; }
  html body .cmg-svc > a > b, html body .cmg-svc b{ font-size:17.5px !important; }
  html body h5.elementor-heading-title, html body .cmg-page h3{ font-size:20px !important; }
  html body .cmg-page strong.cmg-note-lead{ font-size:20px !important; }
}

/* --- 72b MOBILE FLOOR. This was the worst of it and it had gone unnoticed since August. */
/*     The site rule is "nothing below 14px at any width" and sections 46-51 were supposed */
/*     to enforce it. At 390px the live sizes were 11, 11.5, 12, 12.5, 12.8, 13.5 - the */
/*     FOOTER ADDRESS, EMAIL AND PHONE were 11.5px. Tested first: raising every sub-14px */
/*     element to 14 costs 2px of header height and 22px of page height, adds no nav row */
/*     and causes no overflow on any page. Essentially free. --- */
@media (max-width:880px){
  html body .cmg-ob-s.cmg-ob-s, html body .cmg-ob-t.cmg-ob-t,
  html body .site-footer a, html body .site-footer li,
  html body li.cmg-book-cta.cmg-book-cta > a,
  html body .cmg-chip.cmg-chip, html body .cmg-chip.cmg-chip *,
  html body p.cmg-accred-name.cmg-accred-name,
  html body a.cmg-gbadge.cmg-gbadge, html body .cmg-gbadge .cmg-gbadge-label,
  html body .cmg-gbadge .cmg-gbadge-stars,
  html body .site-header nav.site-navigation ul.menu a,
  html body a.cmg-b1.cmg-b1, html body a.cmg-b2.cmg-b2,
  html body .cmg-page em, html body .cmg-page small{ font-size:14px !important; }
  html body p.cmg-book-lead.cmg-book-lead, html body a.cmg-book-btn.cmg-book-btn,
  html body summary.cmg-q.cmg-q, html body .cmg-svc b{ font-size:16px !important; }
}

/* --- 72c the stragglers. 72b lost the cascade on the footer and header menu items, */
/*     which are styled by full menu-item chains. Selectors below were read off the live */
/*     DOM element by element rather than guessed. Applies at BOTH widths. --- */
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-info > a,
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-credline > a,
html body footer.site-footer nav.site-navigation ul.menu li.cmg-foot-rating > a,
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-link > a,
html body header.site-header nav.site-navigation ul.menu li.cmg-book-cta > a,
html body .elementor .elementor-element-11048b3f .e-paragraph-base,
html body .cmg-page a.cmg-revlink, html body .cmg-revlink{ font-size:14px !important; }
html body .cmg-rev-stars.cmg-rev-stars{ font-size:16px !important; }
html body .cmg-page strong, html body .cmg-svc strong{ font-size:16px !important; }
@media (max-width:880px){
  html body .elementor h3, html body .elementor .elementor-icon-box-title,
  html body .elementor-element-1cc799fc span{ font-size:20px !important; }
}

/* --- 72d final ladder cleanup, both widths. --- */
html body .cmg-rev-more.cmg-rev-more a{ font-size:14px !important; }
html body p.cmg-book-lead.cmg-book-lead,
html body a.cmg-book-btn.cmg-book-btn,
html body summary.cmg-q.cmg-q{ font-size:16px !important; }
html body .elementor h5.elementor-heading-title.elementor-heading-title{ font-size:20px !important; }
/* Panel headings inside the navy hero and booking boxes are deliberately a step below */
/* page headings - but they were off-ladder at 19px and 21px on mobile. On the ladder now, */
/* keeping the hierarchy: panel H2 20px, panel H3 16px. Desktop panel H2 stays 25px. */
@media (max-width:880px){
  html body .cmg-hero h2, html body .cmg-bk h2{ font-size:20px !important; }
  html body .cmg-hero h3, html body .cmg-bk h3{ font-size:16px !important; }
}

/* --- 72e last two strays. The tab buttons (e-tab-base) were 15px at desktop; the navy */
/*     panel H2 needed the doubled-class treatment to beat its own rule at mobile. --- */
html body .elementor button.e-tab-base, html body .elementor .e-tab-base .e-paragraph-base{ font-size:16px !important; }
@media (max-width:880px){
  html body .cmg-page .cmg-hero.cmg-hero h2, html body .cmg-page .cmg-bk.cmg-bk h2,
  html body .cmg-hero.cmg-hero.cmg-hero h2, html body .cmg-bk.cmg-bk.cmg-bk h2{ font-size:20px !important; }
}

/* --- 72f the footer credit line was the last 15px on the site. --- */
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-logo > a,
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-who > a,
html body footer.site-footer nav.site-navigation ul.menu li.cmg-f-book > a,
html body footer.site-footer nav.site-navigation ul.menu li > a{ font-size:14px !important; }


/* ===== 73 - PREVIEW PAGE ONLY (/home-layout-preview/, page-id-1326) ===== */
/* Everything here is scoped to that one page id. It styles the three new blocks in the */
/* proposed homepage layout: the credential chip strip in the hero, the "What it costs" */
/* band, and the closing call to action. DELETE THIS WHOLE SECTION when the preview page */
/* is deleted, or promote it to unscoped rules if Chris approves the layout. */

/* chips under the hero booking card */
body.page-id-1326 .cmg-proof-home{ display:flex; flex-wrap:wrap; gap:8px; margin:18px 0 0; }
body.page-id-1326 .cmg-proof-home span{ display:inline-flex; align-items:center; gap:8px; background:#fff;
  border:1px solid #E3E8EF; border-radius:999px; padding:8px 14px; font-size:14px; color:#4A5A70;
  box-shadow:var(--cmg-e1) !important; }
body.page-id-1326 .cmg-proof-home b{ color:#1B3461; }
body.page-id-1326 .cmg-proof-home span::before{ content:""; flex:0 0 10px; width:10px; height:10px;
  border-radius:999px; background:#EF7329; }

/* What it costs - full-bleed pale band, four cards */
body.page-id-1326 .cmg-costs-wrap{ background-color:#F2F8FC; margin-left:calc(-50vw + 50%); margin-right:calc(-50vw + 50%);
  padding:72px calc(50vw - 50%); }
body.page-id-1326 .cmg-costs-lead{ font-size:17.5px; color:#4A5A70; max-width:65ch; margin:0 0 8px; }
body.page-id-1326 .cmg-costs{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; margin-top:22px; }
body.page-id-1326 .cmg-cost{ display:flex; flex-direction:column; gap:4px; text-decoration:none; background:#fff;
  border:1px solid #E3E8EF; border-radius:14px; padding:22px 20px; box-shadow:var(--cmg-e2) !important;
  transition:transform .18s var(--cmg-snap); }
body.page-id-1326 .cmg-cost-n{ font-size:28px; font-weight:700; color:#1B3461; line-height:1.1; }
body.page-id-1326 .cmg-cost-l{ font-size:16px; font-weight:700; color:#1B3461; }
body.page-id-1326 .cmg-cost-d{ font-size:14px; color:#4A5A70; }
@media (hover:hover) and (pointer:fine) and (min-width:881px){
  body.page-id-1326 .cmg-cost:hover{ transform:translateY(-2px); } }

/* closing call to action */
body.page-id-1326 .cmg-bk-home{ background-color:#1B3461; border-radius:14px; padding:36px 40px;
  margin:64px 0 72px; box-shadow:var(--cmg-e3) !important; }
body.page-id-1326 .cmg-bk-home h3{ color:#FFFFFF !important; margin:0 0 10px; }
body.page-id-1326 .cmg-bk-home p{ color:#D9E3F1 !important; max-width:65ch; margin:0; }
body.page-id-1326 .cmg-bk-home .cmg-acts{ display:flex; gap:14px; flex-wrap:wrap; margin:20px 0 14px; }
body.page-id-1326 .cmg-bk-home a.cmg-b1{ background-color:#EF7329 !important; color:#16294E !important;
  border-radius:999px; padding:14px 28px; font-weight:700; text-decoration:none; display:inline-flex; }
body.page-id-1326 .cmg-bk-home a.cmg-b2{ background-color:rgba(255,255,255,.12); color:#FFFFFF !important;
  border-radius:999px; padding:14px 28px; font-weight:700; text-decoration:none; display:inline-flex; }
body.page-id-1326 .cmg-bk-home .cmg-bk-foot{ font-size:14px; color:#A9BBD6 !important; margin:0; }

/* new section headings */
body.page-id-1326 .cmg-h-new{ margin:0 0 4px; color:#1B3461; }
body.page-id-1326 .cmg-h-inline{ margin:0 0 22px; color:#1B3461; width:100%; }

@media (max-width:880px){
  body.page-id-1326 .cmg-costs{ grid-template-columns:1fr; gap:14px; }
  body.page-id-1326 .cmg-costs-wrap{ padding:48px 18px; margin-left:-18px; margin-right:-18px; }
  body.page-id-1326 .cmg-bk-home{ padding:26px 20px; margin:48px 0 56px; }
  body.page-id-1326 .cmg-h-new{ margin-top:48px; }
  body.page-id-1326 .cmg-bk-home .cmg-acts{ flex-direction:column; }
  body.page-id-1326 .cmg-bk-home a.cmg-b1, body.page-id-1326 .cmg-bk-home a.cmg-b2{ justify-content:center; }
}

/* 73b - the two inserted section headings are flex ITEMS inside their sections, so they
   were being squeezed to 163px. The flex item is the Elementor widget wrapper, not the h2. */
body.page-id-1326 .elementor-widget-html:has(.cmg-h-inline){ width:100% !important; flex:0 0 100% !important; }
body.page-id-1326 .cmg-h-inline{ margin:0 0 24px !important; color:#1B3461; width:100%; }

/* 73c - align the inserted headings with the 1140px content column below them. */
body.page-id-1326 .cmg-h-inline{ max-width:1140px; margin-left:auto !important; margin-right:auto !important; }
@media (max-width:880px){ body.page-id-1326 .cmg-h-inline{ padding:0 8px; } }


/* ===== 74 - FINISH the colour collapse, and the elevation collapse (28 Aug 2026) ===== */
/* Chris, again: "the colours are different throughout". He is right, and the reason is that */
/* section 66 LOST THE CASCADE on the Elementor pages. #1B3461 was never confined to links - */
/* it was still on the H1, H2, H3, the nav, the booking card lead, the booking foot, the */
/* accreditation names and the Q&A summaries. .elementor-heading-title carries its own */
/* colour rule that outranked "body h1". This section names the real selectors. */
/* ON-DARK RE-ASSERTIONS ARE LAST AND MUST STAY LAST. */

/* --- 74a one navy: #1B3461 --- */
html body .elementor h1.elementor-heading-title, html body .elementor h2.elementor-heading-title,
html body .elementor h3.elementor-heading-title, html body .elementor h4.elementor-heading-title,
html body .elementor h5.elementor-heading-title, html body .elementor h6.elementor-heading-title,
html body .site-header nav.site-navigation ul.menu a,
html body p.cmg-book-lead.cmg-book-lead, html body a.cmg-book-alt.cmg-book-alt,
html body .cmg-book-foot.cmg-book-foot, html body p.cmg-accred-name.cmg-accred-name,
html body summary.cmg-q.cmg-q, html body .cmg-svc b, html body .cmg-page b,
html body h1, html body h2, html body h3, html body h4{ color:#1B3461 !important; }

/* --- 74b one body grey (#4A5A70 and #4A5A70 retire) and one footer link colour --- */
html body .cmg-page p, html body .cmg-page li, html body p.cmg-a.cmg-a,
html body .cmg-ans p, html body .cmg-promise p{ color:#4A5A70 !important; }
html body footer.site-footer nav.site-navigation ul.menu li > a{ color:#D9E3F1 !important; }

/* --- 74c elevation: ten distinct shadows on FOUR different bases - rgba(28,52,98), */
/*     rgba(28,52,98), rgba(28,52,98) and an orange still using the retired #EF7228 - */
/*     mapped onto the three --cmg-e1/e2/e3 tokens. --- */
html body a.cmg-ob.cmg-ob, html body span.cmg-chip.cmg-chip,
html body .elementor button.e-tab-base{ box-shadow:var(--cmg-e1) !important; }
html body .elementor button.e-tab-base[aria-selected="true"]{ box-shadow:var(--cmg-e2) !important; }
html body a.cmg-b1.cmg-b1:hover, html body a.cmg-book-btn.cmg-book-btn:hover{
  box-shadow:0 6px 18px rgba(239,115,41,.28) !important; }

/* --- 74d ON-DARK RE-ASSERTIONS. KEEP LAST. --- */
html body .cmg-hero h1, html body .cmg-hero h2, html body .cmg-hero h3, html body .cmg-hero h4,
html body .cmg-bk h1, html body .cmg-bk h2, html body .cmg-bk h3, html body .cmg-bk h4,
html body .site-footer h1, html body .site-footer h2, html body .site-footer h3, html body .site-footer h4,
html body .elementor-element-1cc799fc h1, html body .elementor-element-1cc799fc h2,
html body .elementor-element-1cc799fc h3, html body .elementor-element-1cc799fc h4{ color:#FFFFFF !important; }
html body .cmg-hero p, html body .cmg-page p.cmg-hero-p{ color:#E8EEF7 !important; }
html body .cmg-bk p, html body .cmg-bk li, html body .cmg-bk .cmg-bk-foot,
html body .site-footer p, html body .site-footer li,
html body .elementor-element-1cc799fc p{ color:#D9E3F1 !important; }
html body .cmg-bk a, html body .cmg-hero a{ color:#F79553 !important; }
html body .cmg-hero .cmg-chip:not(.cmg-chip-ghost), html body .cmg-bk .cmg-chip:not(.cmg-chip-ghost),
html body .cmg-page .cmg-chip:not(.cmg-chip-ghost){ color:#1B3461 !important; }
html body .cmg-hero .cmg-chip:not(.cmg-chip-ghost) small,
html body .cmg-page .cmg-chip:not(.cmg-chip-ghost) small{ color:#4A5A70 !important; }
html body .cmg-bk a.cmg-b1, html body .cmg-page a.cmg-b1{ color:#16294E !important; }
html body .cmg-bk a.cmg-b2, html body .cmg-page a.cmg-b2{ color:#FFFFFF !important; }


/* ===== 75 - fix a regression 74 caused, and close the last colour strays ===== */
/* 74a set .elementor h2.elementor-heading-title to navy at (0,3,2). 74d re-asserted white
   inside the navy section at only (0,2,2), so "Why Work With Chris" went navy on navy -
   1.00:1, completely invisible. Caught by the text-node contrast checker, not by eye.
   THE RULE, for the fourth time this session: an on-dark re-assertion must have MORE
   classes than the light-surface rule it is correcting. Count them, do not assume. */

/* --- 75a last navy strays --- */
html body .cmg-page h1.cmg-open-h1.cmg-open-h1.cmg-open-h1,
html body a.cmg-ob.cmg-ob.cmg-ob, html body a.cmg-gbadge.cmg-gbadge.cmg-gbadge,
html body .elementor .elementor-widget h3,
html body .cmg-chip.cmg-chip:not(.cmg-chip-ghost) b{ color:#1B3461 !important; }

/* --- 75b elevation, the exact remaining owners --- */
html body .elementor a.elementor-button.elementor-button-link{ box-shadow:var(--cmg-e1) !important; }
html body .elementor a.elementor-button.elementor-button-link:hover{ box-shadow:0 6px 18px rgba(239,115,41,.28) !important; }
html body .cmg-card.cmg-card-key.cmg-card-key{ box-shadow:var(--cmg-e2k) !important; }
html body .cmg-page span.cmg-chip.cmg-chip{ box-shadow:var(--cmg-e1) !important; }

/* --- 75c ON-DARK RE-ASSERTIONS, now at higher class counts than 74a. KEEP LAST. --- */
html body .elementor .elementor-element-1cc799fc h1.elementor-heading-title,
html body .elementor .elementor-element-1cc799fc h2.elementor-heading-title,
html body .elementor .elementor-element-1cc799fc h3.elementor-heading-title,
html body .elementor .elementor-element-1cc799fc h4.elementor-heading-title,
html body .elementor .elementor-element-1cc799fc h2, html body .elementor .elementor-element-1cc799fc h3,
html body .cmg-page .cmg-hero.cmg-hero h1, html body .cmg-page .cmg-hero.cmg-hero h2,
html body .cmg-page .cmg-hero.cmg-hero h3, html body .cmg-page .cmg-bk.cmg-bk h1,
html body .cmg-page .cmg-bk.cmg-bk h2, html body .cmg-page .cmg-bk.cmg-bk h3,
html body .cmg-hero.cmg-hero.cmg-hero h2, html body .cmg-bk.cmg-bk.cmg-bk h3,
html body footer.site-footer nav h1, html body footer.site-footer nav h2,
html body footer.site-footer nav h3, html body footer.site-footer nav h4{ color:#FFFFFF !important; }
html body .cmg-chip.cmg-chip.cmg-chip-ghost, html body .cmg-chip.cmg-chip.cmg-chip-ghost b{ color:#D9E3F1 !important; }


/* ===== 76 - the colour layer was collapsed AT SOURCE, 28 Aug 2026 ===== */
/* Sections 66, 67, 74 and 75 all tried to correct colour by ADDING overrides, and each one
   lost the cascade to an older rule somewhere in a 289,000-character stylesheet. Five passes,
   still two navies and two greys live. Adding rule 76 would have been the sixth.
   Instead the values were replaced IN PLACE, throughout the whole stylesheet:
     #1C3462 -> #1B3461   (44 occurrences - one navy, the brand-pack one Chris chose)
     #3A4757 -> #4A5A70   (3)
     rgba(20,42,74 -> rgba(28,52,98   (9 - a third shadow base)
     rgba(27,52,97 -> rgba(28,52,98   (14 - a second shadow base)
     rgba(239,114,40 -> rgba(239,115,41   (8 - the retired orange, in shadows)
     rgba(214,122,32 -> rgba(239,115,41   (3 - the non-brand key-card orange)
   This is only safe because each of these values does exactly ONE job. It would NOT be safe
   for #AD4E1C, which is a button fill in one place and pale-surface text in another.
   LESSON: when an override loses the cascade twice, stop adding overrides and fix the source. */


/* ===== 77 - the shared booking-card stylesheet, moved OUT of page content ===== */
/* This 1,779-character block was byte-identical inside the post_content of SIX pages:
   /boilers/ /plumbing/ /bathrooms/ /landlords/ /for-builders/ /credentials/
   It is the reason five Customizer passes could not fix the colours - the winning rules
   were never in the Customizer. It also carried the off-ladder 13.5 / 15 / 17px sizes.
   Translated onto the agreed system on the way in:
     #1C3462 -> #1B3461      #D8E2EE -> #E3E8EF      #E5F2F9 -> #F2F8FC
     #EF7228 -> #EF7329      #AD4E1C -> #AD4E1C      #2693CE -> #AD4E1C (focus)
     button text #fff -> #16294E   |   13.5/15/17px -> 14/16/17.5px
     radius 20/60/10 -> 14/999/10   |   shadow -> var(--cmg-e2) */
.cmg-book{ background:#fff; border-radius:14px; box-shadow:var(--cmg-e2) !important;
  overflow:hidden; max-width:520px; font-family:Poppins,sans-serif; }
.cmg-book-row{ display:flex; align-items:center; flex-wrap:wrap; gap:12px; padding:22px 24px; }
.cmg-book-label{ font-weight:600; color:#1B3461; font-size:17.5px; white-space:nowrap; }
.cmg-book select{ flex:1 1 190px; min-width:170px; appearance:none; -webkit-appearance:none;
  background:#fff; border:2px solid #E3E8EF; border-radius:14px; padding:11px 38px 11px 14px;
  font-family:Poppins,sans-serif; font-size:16px; color:#1B3461; cursor:pointer; }
.cmg-book select:focus-visible{ outline:3px solid #AD4E1C; outline-offset:2px; border-color:#AD4E1C; }
.cmg-book-btn{ background:#EF7329; color:#16294E; border:none; border-radius:999px;
  padding:13px 26px; font-family:Poppins,sans-serif; font-size:16px; font-weight:700;
  cursor:pointer; white-space:nowrap; transition:transform .18s var(--cmg-snap); }
.cmg-book-foot{ background:#F2F8FC; color:#1B3461; font-size:14px; font-weight:600;
  text-align:center; padding:11px 16px; }
.cmg-book-lead{ padding:22px 24px 0; margin:0 0 14px; font-size:16px; line-height:1.5; color:#4A5A70; }
.cmg-book-lead + .cmg-book-row{ padding-top:0; }
.cmg-book-alt{ font-size:14px; font-weight:600; color:#1B3461; text-decoration:underline; text-underline-offset:3px; }
.cmg-book-alt:hover{ color:#AD4E1C; }
@media (max-width:600px){
  .cmg-book-row{ padding:18px; } .cmg-book-label{ width:100%; }
  .cmg-book select, .cmg-book-btn{ width:100%; flex:1 1 100%; }
  .cmg-book-alt{ display:block; margin-top:12px; text-align:center; } }


/* ===== 78 - the last of the retired orange, cleared from the SOURCE (28 Aug 2026) ===== */
/* 37 live rules in this stylesheet still carried #EF7228, plus 2 carrying #C4551A. None of
   them showed up in any audit all day, because every one was being OVERRIDDEN by a later
   section - so a computed-value sweep never saw them. Dead, but dangerous: change a later
   section and one of them wins again. That is precisely how #EF7228 came back twice.
   Replaced BY PROPERTY, not blindly, because orange means two different things:
     color:#EF7228        -> #AD4E1C   (text needs 4.5:1 on white; the brand orange is 2.94:1)
     background / border / stroke / fill -> #EF7329   (a fill has no contrast minimum)
     #C4551A              -> #AD4E1C   (it was only ever a link hover colour)
   Remaining occurrences of the string are inside COMMENTS and are left deliberately -
   the lessons are worth more than the tidiness. */

/* 78b - a FOURTH filled orange button with white text, 2.94:1, on /services/ (1d354ac1).
   Sections 62, 66 and 70 each found one and each time I assumed it was the last. Four now.
   The button inventory must be REBUILT BY QUERY on every pass, never carried as a list. */
body .elementor .elementor-element.elementor-element-1d354ac1 a.elementor-button.elementor-button{
  background-color:#EF7329 !important; border-color:#EF7329 !important; color:#16294E !important; }


/* ===== 79 - the Google badge stylesheet, moved out of page content ===== */
/* Second shared block, 904 characters, byte-identical inside /contact-us/, /gallery/ and
   /services/. Translated on the way in:
     #1E3A5F -> #1B3461            (the OLD LEAFLET NAVY, still live on three pages)
     rgba(20,42,74,.07/.13) -> var(--cmg-e1)/var(--cmg-e2)   (the third shadow base)
     13px at <=480px -> 14px       (below the site font floor)
   #FBBC05 on the stars is kept - it is Google brand yellow and a documented exception. */
.cmg-gbadge-wrap{ font-family:Poppins,sans-serif; margin:4px 0 22px; }
.cmg-gbadge{ display:inline-flex; align-items:center; gap:12px; text-decoration:none;
  background:#fff; border:1px solid #E3E8EF; border-radius:999px; padding:10px 20px 10px 14px;
  box-shadow:var(--cmg-e1) !important; transition:box-shadow .2s var(--cmg-snap), transform .2s var(--cmg-snap); }
.cmg-gbadge svg{ display:block; flex:0 0 auto; }
.cmg-gbadge-txt{ display:flex; flex-direction:column; line-height:1.25; }
.cmg-gbadge-stars{ color:#FBBC05; font-size:14px; letter-spacing:1px; }
.cmg-gbadge-label{ color:#1B3461; font-size:14px; font-weight:500; white-space:nowrap; }
.cmg-gbadge-label strong{ font-weight:700; }
@media (hover:hover) and (pointer:fine) and (min-width:881px){
  .cmg-gbadge:hover{ box-shadow:var(--cmg-e2) !important; transform:translateY(-1px); } }
@media (max-width:480px){
  .cmg-gbadge{ padding:9px 16px 9px 12px; gap:10px; }
  .cmg-gbadge-label{ font-size:14px; white-space:normal; } }


/* ===== 80 - the last off-system values, cleared at source (28 Aug 2026) ===== */
/* #3A4A61 was still live on .cmg-qa .cmg-a - I had searched the stylesheet for #3A4757 and
   #1C3462 but never for this one, and assumed it was gone because it stopped appearing in
   COMPUTED values on the six pages I had cleaned. It does not appear there because those
   pages have no .cmg-qa. Lesson: a value disappearing from a sample is not the same as the
   value being gone - grep the source as well as measuring the render.
   Also swept the off-ladder sizes still written into the source: 13.5 and 14.5 -> 14,
   15.5 -> 16, 16.5 -> 17.5. These were being corrected by later overrides; now they are
   simply right, which removes the specificity debt those overrides were carrying. */


/* ===== 81 - last type-ladder strays at source (28 Aug 2026) ===== */
/* font-size:17px -> 17.5px, font-size:12.5px -> 14px. Only FONT-SIZE was touched: the other
   17px values in this stylesheet are width, height and padding, which are geometry and have
   nothing to do with the type ladder. A blind 17px replace would have broken the footer
   rating icon. */


/* ===== 82 - reviews carousel and About credentials box, moved out of page content ===== */
/* Translated on the way in:
     #42536B -> #4A5A70    #1E3A5F -> #1B3461    #8A98AC -> #5F6E85    #3A4757 -> #4A5A70
     #EEF2F7 -> #E3E8EF    #F2F8FC -> #F2F8FC    #E1E9F3 -> #E3E8EF
     #EF7228 (review link, on white)  -> #AD4E1C
     #EF7329 (.cmg-abcred-link, on a PALE panel) -> #AD4E1C  <-- this one was a real fail:
       the brand orange on #F2F8FC is about 2.9:1. It only passed before because the panel
       behind it was lighter. Moving the panel to #F2F8FC would have broken it silently.
     12 / 14.5 / 15 / 15.5px -> 14 / 16px      radius 16px -> 14px
     box-shadow rgba(20,42,74,.06) -> var(--cmg-e2) */
.cmg-rev{ font-family:Poppins,sans-serif; position:relative; overflow:hidden; padding:6px 0 10px;
  -webkit-mask-image:linear-gradient(to right,transparent 0,#000 60px,#000 calc(100% - 60px),transparent 100%);
  mask-image:linear-gradient(to right,transparent 0,#000 60px,#000 calc(100% - 60px),transparent 100%); }
.cmg-rev-track{ display:flex; width:max-content; animation:cmg-rev-scroll 80s linear infinite; }
.cmg-rev:hover .cmg-rev-track, .cmg-rev:focus-within .cmg-rev-track{ animation-play-state:paused; }
@keyframes cmg-rev-scroll{ from{ transform:translateX(0); } to{ transform:translateX(-50%); } }
.cmg-rev-card{ flex:0 0 auto; width:330px; margin-right:22px; box-sizing:border-box; background:#fff;
  border:1px solid #E3E8EF; border-radius:14px; padding:24px 24px 20px;
  box-shadow:var(--cmg-e2) !important; display:flex; flex-direction:column; text-align:left; }
.cmg-rev-stars{ color:#FBBC05; font-size:16px; letter-spacing:2px; margin-bottom:12px; }
.cmg-rev-text{ color:#4A5A70; font-size:16px; line-height:1.6; }
.cmg-rev-foot{ display:flex; align-items:center; gap:9px; border-top:1px solid #E3E8EF; padding-top:14px; }
.cmg-rev-foot svg{ flex:0 0 auto; display:block; }
.cmg-rev-name{ color:#1B3461; font-size:14px; font-weight:600; line-height:1.3; }
.cmg-rev-src{ color:#5F6E85; font-size:14px; line-height:1.3; }
.cmg-rev-more{ text-align:center; margin-top:20px; font-family:Poppins,sans-serif; }
.cmg-rev-more a{ color:#AD4E1C; font-size:14px; font-weight:600; text-decoration:none;
  border-bottom:1px solid transparent; transition:border-color .2s var(--cmg-snap); }
.cmg-rev-more a:hover{ border-bottom-color:#AD4E1C; }
@media (max-width:600px){ .cmg-rev-card{ width:275px; margin-right:16px; padding:20px 20px 16px; }
  .cmg-rev{ -webkit-mask-image:linear-gradient(to right,transparent 0,#000 20px,#000 calc(100% - 20px),transparent 100%);
    mask-image:linear-gradient(to right,transparent 0,#000 20px,#000 calc(100% - 20px),transparent 100%); } }
@media (prefers-reduced-motion:reduce){ .cmg-rev-track{ animation:none; }
  .cmg-rev{ overflow-x:auto; -webkit-mask-image:none; mask-image:none; } }
.cmg-abcred{ font-family:Poppins,sans-serif; background:#F2F8FC; border:1px solid #E3E8EF;
  border-radius:14px; padding:22px 24px; max-width:760px; margin:0 auto; text-align:left; }
.cmg-abcred p{ margin:0 0 12px; font-size:16px; color:#4A5A70; line-height:1.6; }
.cmg-abcred ul{ margin:0 0 14px; padding-left:20px; }
.cmg-abcred li{ margin-bottom:7px; font-size:16px; color:#4A5A70; }
.cmg-abcred strong{ color:#1B3461; }
.cmg-abcred-link{ color:#AD4E1C !important; font-weight:700; text-decoration:none; }
@media (max-width:781px){ .cmg-abcred{ padding:18px 16px; } .cmg-abcred p{ font-size:16px; } }


/* --- 84 : How the job runs (ServiceM8) - added 29 Aug 2026 ---------------
   Homepage section order is set in this stylesheet by element id. This block
   claims order 8; it shares 8 with the closing CTA and wins on document order,
   so the CTA's own rule is left alone.
   The container id is the same on page 40 and on /home-layout-preview/ (1326),
   so the type and alignment rules are deliberately page-agnostic - a
   .elementor-40 prefix would only ever reach one of the two.
   Numbered 84, not 62: 82 and 83 were taken by a parallel session while this
   was being written, and an earlier draft of this block was wrongly called 62. */
.elementor .elementor-element.elementor-element-37c7bfd{order:8}
.elementor .elementor-element.elementor-element-37c7bfd.elementor-element-37c7bfd .elementor-icon-box-title{font-size:20px}
@media (min-width:881px){
.elementor .elementor-element.elementor-element-37c7bfd.elementor-element-37c7bfd .elementor-widget-button,
.elementor .elementor-element.elementor-element-37c7bfd.elementor-element-37c7bfd .elementor-widget-button .elementor-widget-container{text-align:left}
}


/* === 83. Homepage stylesheets brought onto the shared system --- 29 Aug 2026 --- */
/* The homepage carried three <style> blocks no other page had: the four-pillar
   band, the homepage service grid, and the accreditation cards. They are being
   removed from the page content, so their layout has to live here instead.
   Values are translated onto the agreed palette and the 14/16/17.5/20/25/28/44
   type ladder rather than copied. Structure is unprefixed and free of
   !important so the existing polish and depth sections still win. */

/* --- 83a. Four-pillar band ------------------------------------------------ */
.cmg-pillars{
  width:100vw; position:relative; left:50%; transform:translateX(-50%);
  background:#fff; padding:44px 18px; box-sizing:border-box;
  font-family:Poppins,sans-serif; }
.cmg-pillars-inner{
  max-width:1140px; margin:0 auto;
  display:grid; grid-template-columns:repeat(4,1fr); gap:32px; }
.cmg-pillar{ text-align:center; color:#4A5A70; }
.cmg-pillar svg{
  width:74px; height:74px; stroke:#EF7329; fill:none;
  stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;
  margin-bottom:16px; }
.cmg-pillar h3{
  font-size:28px; font-weight:600; margin:0 0 10px;
  color:#1B3461; line-height:1.2; }
/* 28px, not 25: section 62 already pinned this band's headings to 28 by
   element id (.elementor-element-4992013 h3) and that rule carries
   !important, so 25 here would only ever be a dead declaration. */
.cmg-pillar p{
  font-size:16px; line-height:1.6; margin:0;
  color:#4A5A70; opacity:1; }                    /* was 15px, .95 on orange */
@media (max-width:900px){
  .cmg-pillars-inner{ grid-template-columns:repeat(2,1fr); gap:34px; }
}
@media (max-width:520px){
  .cmg-pillars{ padding:40px 18px; }
  .cmg-pillars-inner{ grid-template-columns:1fr; gap:30px; }
  /* section 1 pinned this to 19px, which is off the ladder. Two classes plus
     the element beats it and lands on 20. */
  .cmg-pillars .cmg-pillar h3{ font-size:20px !important; }
}

/* --- 83b. Homepage service grid ------------------------------------------- */
/* Scoped to body.home. The service pages have their own .cmg-page .cmg-svc
   rules with different inner tags (strong/span/em, not b/span/i) and must not
   be touched by these. */
body.home .cmg-svc{
  display:grid; grid-template-columns:repeat(4,1fr); gap:18px;
  max-width:1140px; margin:0 auto; font-family:Poppins,sans-serif; }
body.home .cmg-svc a{
  display:flex; flex-direction:column; align-items:center; text-align:center;
  padding:24px 16px 20px; border:1px solid #E3E8EF; border-radius:16px;
  background:#fff; color:#1B3461; text-decoration:none;
  box-shadow:var(--cmg-e1);
  transition:box-shadow .18s ease, transform .18s ease, border-color .18s ease; }
body.home .cmg-svc a:hover{
  box-shadow:var(--cmg-e2); transform:translateY(-2px); border-color:#EF7329; }
body.home .cmg-svc svg{
  width:40px; height:40px; stroke:#EF7329; fill:none; stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round; margin-bottom:12px; }
body.home .cmg-svc b{
  display:block; font-size:17.5px; font-weight:600;
  line-height:1.3; margin-bottom:6px; }          /* was 16.5px */
body.home .cmg-svc span{
  display:block; font-size:14px; line-height:1.45; color:#4A5A70; }  /* was 13.5px */
body.home .cmg-svc i{
  display:block; margin-top:10px; font-style:normal;
  font-size:14px; font-weight:600; color:#AD4E1C; }  /* #EF7228 was 2.9:1 on white */
@media (max-width:900px){
  body.home .cmg-svc{ grid-template-columns:repeat(2,1fr); gap:14px; }
  body.home .cmg-svc a{ padding:20px 12px 16px; }
  body.home .cmg-svc svg{ width:34px; height:34px; margin-bottom:10px; }
  body.home .cmg-svc b{ font-size:16px; }        /* was 15px */
  body.home .cmg-svc span{ font-size:14px; }     /* was 12.5px */
}

/* --- 83c. Accreditation cards --------------------------------------------- */
.cmg-accred-box{ font-family:Poppins,sans-serif; }
.cmg-accred-grid{
  display:grid; grid-template-columns:repeat(2,1fr); gap:26px 22px;
  align-items:stretch; grid-auto-rows:1fr; }
.cmg-accred-item{
  background:#fff; border:1px solid #E3E8EF; border-radius:14px;
  padding:22px 18px 16px; text-align:center; box-shadow:var(--cmg-e1);
  display:flex; flex-direction:column; height:100%; text-decoration:none;
  transition:box-shadow .2s ease, transform .2s ease, border-color .2s ease; }
a.cmg-accred-item:hover{
  box-shadow:var(--cmg-e2); transform:translateY(-3px); border-color:#CFE0EE; }
.cmg-accred-item img{
  display:block; margin:auto; max-width:82%; height:68px; object-fit:contain; }
.cmg-accred-name{
  margin:16px 0 0; font-size:14px; font-weight:600;
  color:#1B3461; line-height:1.35; }             /* was 13.5px, #1C3462 */
.cmg-accred-num{
  margin:4px 0 0; font-size:14px; color:#5F6E85; line-height:1.35; }
.cmg-accred-check{
  display:block; margin:8px 0 0; font-size:14px; font-weight:600;
  color:#AD4E1C; line-height:1.3; }              /* #EF7228 was 2.9:1 on white */
@media (max-width:600px){
  .cmg-accred-grid{ gap:18px 14px; }
  .cmg-accred-item{ padding:18px 12px 14px; }
  .cmg-accred-item img{ height:58px; }
}


/* === 84. Last three stragglers from the all-pages sweep --- 29 Aug 2026 --- */
/* Found by auditing all 21 pages at 1440px and 390px after the page-level
   stylesheets came out. Everything else already agreed; these three did not. */

/* 84a. Homepage safety note sat at 15px. Section 66 fixed .cmg-note-call but
        not plain .cmg-note, so the two notes beside each other disagreed. */
.cmg-note.cmg-note{ font-size:16px !important; }

/* 84b. The About testimonial widget is styled by Elementor, not by this
        stylesheet, so the source-level colour pass in section 76 never saw it.
        It was the only #1C3462 left on the site. */
html body .elementor-testimonial-content,
html body .elementor-testimonial-content *{ color:#1B3461 !important; }

/* 84c. Legal pages: the type ladder now applies to them too, so the shared
        24px-and-over rule has to know that legal h2 is 25px, not 26px. */
.cmg-legal h2{ letter-spacing:-.01em; }


/* === 85. Two font breaks the sweep found --- 29 Aug 2026 --- */

/* 85a. Every dropdown item in the main navigation was rendering in the
        browser's system font. The top-level items are Poppins, so the menu
        changed typeface halfway down on every page of the site. The theme
        styles .menu-item > a but never .sub-menu .menu-item > a. */
.site-header .sub-menu a,
.site-header .sub-menu a *,
nav .sub-menu a, nav .sub-menu a *{
  font-family:Poppins, sans-serif !important; }

/* 85b. Terms and Privacy were built as their own stylesheet and it never set
        a font-family, so both pages rendered entirely in the system font
        while every other page is Poppins. Icon fonts are excluded so the
        Elementor and Font Awesome glyphs are not broken. */
.cmg-legal,
.cmg-legal *:not([class*="eicon"]):not([class*="fa-"]):not(i){
  font-family:Poppins, sans-serif !important; }

/* 85c. The draft banner is the last 15px on the site. */
.cmg-draft-banner, .cmg-draft-banner strong{ font-size:16px !important; }


/* === 86. One Google review badge, not two --- 29 Aug 2026 --- */
/* The site had two different badge components. .cmg-gbadge (home, About,
   Services, Contact, Gallery) was a compact pill with the stars stacked ABOVE
   the label, 57px tall. .cmg-ob (Credentials and the hub pages) was a single
   line but stretched to the full 684px column with the content jammed left and
   a large empty space on the right. Eight service pages had neither — the badge
   markup has now been added to them, so all 19 content pages carry .cmg-ob or
   .cmg-gbadge and this section makes the two render identically:
   a shrink-to-fit white pill, one line, G + "Rated 5.0 on Google" + stars. */

/* --- shared shell ------------------------------------------------------- */
a.cmg-ob, a.cmg-gbadge{
  display:inline-flex !important; align-items:center !important;
  width:auto !important; max-width:max-content !important;
  align-self:flex-start !important;
  height:44px !important; box-sizing:border-box !important;
  padding:0 18px !important; gap:10px !important;
  background:#fff !important; border:1px solid #E3E8EF !important;
  border-radius:999px !important; box-shadow:var(--cmg-e1) !important;
  text-decoration:none !important; font-family:Poppins, sans-serif !important; }
a.cmg-ob:hover, a.cmg-gbadge:hover{
  box-shadow:var(--cmg-e2) !important; border-color:#CFE0EE !important; }
a.cmg-ob svg, a.cmg-gbadge svg{
  width:22px !important; height:22px !important; flex:0 0 22px !important;
  margin:0 !important; }

/* --- .cmg-gbadge: unstack the two lines --------------------------------- */
/* The label and stars are stacked in a column with the stars first in the
   markup, so row-reverse puts the label ahead of them and matches .cmg-ob. */
.cmg-gbadge .cmg-gbadge-txt{
  display:flex !important; flex-direction:row-reverse !important;
  align-items:center !important; gap:10px !important;
  width:auto !important; }
.cmg-gbadge .cmg-gbadge-label{
  font-size:14px !important; font-weight:600 !important;
  color:#1B3461 !important; line-height:1 !important; white-space:nowrap !important; }
.cmg-gbadge .cmg-gbadge-stars{
  font-size:14px !important; color:#FBBC05 !important;
  line-height:1 !important; letter-spacing:1px !important; white-space:nowrap !important; }

/* --- .cmg-ob: stop it stretching across the column ---------------------- */
.cmg-ob .cmg-ob-t{
  font-size:14px !important; font-weight:600 !important;
  color:#1B3461 !important; line-height:1 !important; white-space:nowrap !important; }
.cmg-ob .cmg-ob-t b{ font-weight:700 !important; color:#1B3461 !important; }
.cmg-ob .cmg-ob-s{
  font-size:14px !important; color:#FBBC05 !important;
  line-height:1 !important; letter-spacing:1px !important; white-space:nowrap !important; }

/* The wrapper on the Elementor pages is a block that was stretching to the
   full column and taking the badge's alignment with it. */
.cmg-gbadge-wrap{ display:flex !important; justify-content:flex-start !important; }

/* --- the badge sits directly under the H1 on every page ----------------- */
.cmg-open > a.cmg-ob{ margin:14px 0 18px !important; }
.cmg-gbadge-wrap{ margin:14px 0 18px !important; }

@media (max-width:880px){
  a.cmg-ob, a.cmg-gbadge{ height:40px !important; padding:0 14px !important; gap:8px !important; }
  a.cmg-ob svg, a.cmg-gbadge svg{ width:20px !important; height:20px !important; flex:0 0 20px !important; }
}


/* === 87. The alternating band rhythm, extended to the service pages --- 29 Aug 2026 --- */
/* Home, About, Services, Contact and Gallery are Elementor pages whose pale-blue
   sections are edge-to-edge bands. The 14 service pages carry the same #F2F8FC
   but as rounded cards inset to the 1140px container, so they read as a flat
   white scroll with boxes on it. Chris asked for the rhythm everywhere.

   TECHNIQUE. Widening the blocks is not safe: .cmg-ans and .cmg-promise sit in
   a 752px grid column on eight pages and .cmg-bk is a 340px sidebar. A
   full-bleed ::before at z-index:-1 does not paint either — these blocks sit
   inside an Elementor container whose background covers it. What works is a
   box-shadow with a 100vw spread clipped back to a horizontal strip: the shadow
   paints with the element's own background layer so nothing can cover it, and
   layout is completely untouched.

   THE RULE THAT MATTERS — NO BAND EVER EXTENDS UPWARD.
   The first version of this section used inset(-24px -100vw), extending every
   band 24px above its block. Measured gaps above these blocks are 12, 15, 20,
   22, 44, 46, 50 and 54px, so on every gap under 24px the band painted straight
   over the bottom of the heading above it — Chris caught "The questions people
   ask" with its descenders cut off. A band that extends upward can always land
   on text. A band that only extends DOWNWARD, and only when the very next
   sibling is itself banded, can only ever land on another band of the same
   colour. That is the invariant here; do not reintroduce a negative top inset. */

@media (min-width:881px){

  /* --- every tinted block: band is exactly its own height ---------------- */
  body .cmg-page > .cmg-proof,
  body .cmg-page > .cmg-ans,
  body .cmg-page > .cmg-svc,
  body .cmg-page > .cmg-promise{
    box-shadow:0 0 0 100vw #F2F8FC !important;
    clip-path:inset(0 -100vw 0 -100vw) !important;
    border-color:transparent !important;
  }

  /* --- a heading that introduces a banded block joins its band ----------- */
  /* Without this the heading sits on white and the cards it introduces sit on
     blue, which reads as though they are unrelated. padding-top gives the text
     room inside the band instead of the band edge cutting the cap height. */
  body .cmg-page > h2:has(+ .cmg-proof),
  body .cmg-page > h2:has(+ .cmg-ans),
  body .cmg-page > h2:has(+ .cmg-svc),
  body .cmg-page > h2:has(+ .cmg-promise){
    box-shadow:0 0 0 100vw #F2F8FC !important;
    /* The background-color is REQUIRED, not decoration. An outer box-shadow is
       clipped to exclude the element's own border box, so on a heading — which
       has no background of its own — the band rendered as blue either side of a
       white hole exactly the width of the heading. The blocks below never showed
       this because they already carry #F2F8FC. */
    background-color:transparent !important; background-image:var(--cmg-band-img) !important;
    /* down 28px closes the 12-22px gap to the block and overlaps its band
       slightly, in the same colour. Nothing above is touched. */
    clip-path:inset(0 -100vw -28px -100vw) !important;
    padding-top:20px !important;
  }

  /* --- two banded blocks in a row: close the 54px gap between them ------- */
  body .cmg-page > .cmg-ans:has(+ .cmg-promise),
  body .cmg-page > .cmg-ans:has(+ .cmg-ans),
  body .cmg-page > .cmg-promise:has(+ .cmg-ans),
  body .cmg-page > .cmg-promise:has(+ .cmg-promise),
  body .cmg-page > .cmg-proof:has(+ .cmg-svc),
  body .cmg-page > .cmg-svc:has(+ .cmg-svc){
    clip-path:inset(0 -100vw -58px -100vw) !important;
  }
}


/* === 88. The opening of every page --- 29 Aug 2026 --- */
/* From Chris's phone screenshots of five page openings. Three faults, all
   measured across all 21 pages at 390px and 1440px before touching anything. */

/* --- 88a. The Google badge was aligned three different ways on mobile ----- */
/* Measured badge centre at 390px: 188 on home, About, Services, Contact,
   Gallery, How I work and the seven deep service pages; 154 on Credentials,
   Boilers, Plumbing, Bathrooms, Landlords and For builders; 164 on Heat pumps.
   The H1 and the booking card both centre on 188, so on those seven pages the
   badge sat visibly left of everything above and below it.
   The cause is that the badge is a direct flex child of .cmg-open on the older
   pages, where section 86's align-self:flex-start applied, but is wrapped in a
   <p> by wpautop on the pages it was added to this week. Both cases are handled
   here rather than relying on which wrapper it happens to have. */
@media (min-width:881px){
  .cmg-gbadge-wrap{ justify-content:flex-start !important; text-align:left !important; }
  .cmg-open > p:has(> a.cmg-ob){ text-align:left !important; margin:0 !important; }
  a.cmg-ob, a.cmg-gbadge{
    margin-left:0 !important; margin-right:auto !important;
    align-self:flex-start !important; }
}
@media (max-width:880px){
  /* everything else in the hero centres on mobile, so the badge does too */
  .cmg-gbadge-wrap{ justify-content:center !important; text-align:center !important; }
  .cmg-open > p:has(> a.cmg-ob){ text-align:center !important; margin:0 !important; }
  a.cmg-ob, a.cmg-gbadge{
    margin-left:auto !important; margin-right:auto !important;
    align-self:center !important; }
  /* Section 86 makes the badge inline-flex, and margin:auto does not centre an
     inline-level box. On the six pages where the badge is a direct child of
     .cmg-open rather than wrapped in a <p>, it stayed pinned left at centre 154
     while the H1 and the booking card centred on 188. Block-level flex plus a
     max-content width makes the auto margins bite, in a flex parent or a block
     one. */
  .cmg-open > a.cmg-ob, .cmg-gbadge-wrap > a.cmg-gbadge{
    display:flex !important;
    width:max-content !important;
    margin-left:auto !important; margin-right:auto !important; }
}

/* --- 88b. Half the site opened on pale blue and half on white ------------- */
/* Home, About, Services, Contact and Gallery are Elementor pages and open on a
   #F2F8FC band. All 14 service pages opened on flat white — the same split
   Chris flagged before, which section 87 only fixed further down the page.
   .cmg-open is the hero block on those 14 (H1 + badge, plus the booking card on
   the hub pages), so banding it makes every page open the same way.

   Same technique as section 87, and the same two hard-won rules: the
   background-color is required or the band renders as colour either side of a
   hole the width of the element, and there is NO upward extension — the site
   header sits directly above this and must never be painted over. The band is
   exactly .cmg-open's height; padding-bottom gives the card room inside it
   rather than the band edge cutting it. */
.cmg-open{
  background-color:transparent !important; background-image:var(--cmg-band-img) !important;
  box-shadow:0 0 0 100vw #F2F8FC !important;
  clip-path:inset(0 -100vw 0 -100vw) !important;
  padding-bottom:32px !important;
}

/* --- 88c. Two hero headings indented away from their own badge ------------ */
/* On /services/ and /gallery/ the H1's container is 965px and 930px inside an
   1140px flex parent set to justify-content:center, so the heading started at
   230px and 248px while the badge directly beneath it started at 143px like
   every other page. Full width removes the centring without touching the
   parent, which other sections rely on. */
body .elementor .elementor-element.elementor-element-194f2976,
body .elementor .elementor-element.elementor-element-403f272e{
  width:100% !important; max-width:100% !important;
}


/* === 89. The two Google ratings that were not badges --- 29 Aug 2026 --- */
/* Chris spotted "Rated 5.0 on Google" under the closing CTA button reading as
   plain text. It is CSS-generated content on five Elementor blocks, and it was
   the ONLY rating on the site with no stars — every other instance already
   carries \2605 x5. It was also #4A5A70 grey rather than the #1B3461 the badge
   and the trust bar use.

   Stars go in the same pseudo-element as the words, so they take the same
   colour. Navy rather than gold is deliberate and already the site's precedent:
   the homepage trust bar renders the identical string in white on navy, so
   monochrome stars are established here. Gold would need a second pseudo-element
   and ::before sits before the button in source order, not beside the text. */
.elementor-element-1f466f0f::after,
.elementor-element-3913940f::after,
.elementor-element-1d354ac1::after,
.elementor-element-55e23e7e::after,
.elementor-element-5184b0a0::after{
  content:'\2605\2605\2605\2605\2605\00A0\00A0 Rated 5.0 on Google' !important;
  color:#1B3461 !important;
  font-weight:600 !important;
  letter-spacing:.2px !important;
}

/* --- 89b. The footer badge's Google logo, restored ----------------------- */
/* This was url("data:image/svg+xml;utf8,") — an empty data URI, because
   WordPress's kses sanitiser eats the angle brackets of inline SVG when the
   Customizer CSS is saved. It left a 17px blank box inside the pill, so the
   badge sat visibly off-centre with no logo.

   NEVER put an inline SVG data URI in the Customizer — it will not survive.
   The mark is now a real Media Library file (id 1415), rendered from the very
   same 4-path SVG the hero badge carries in its markup, so the two logos are
   identical rather than merely similar. SVG uploads are blocked by this install
   ("not allowed to upload this file type"), so it is a 96px PNG with a
   transparent background, displayed at 17px.

   The path is ROOT-RELATIVE on purpose: the Customizer CSS lives in the
   database and would not be rewritten by a domain change, so an absolute
   staging URL would break the logo the moment the site moves to the live
   domain. */
.site-footer .cmg-foot-rating a::before{
  width:17px !important; height:17px !important;
  margin:0 !important; flex:0 0 auto !important;
  background-image:url("/wp-content/uploads/2026/08/google-g-logo.png") !important;
  background-size:contain !important;
  background-repeat:no-repeat !important;
  background-position:center !important;
}


/* === 90. The dead space under short headings --- 30 Aug 2026 --- */
/* From Chris's phone screenshots of five openings. Heat pumps opened noticeably
   tighter than Bathrooms, Landlords, About and Contact, and the reason was not
   spacing anywhere obvious — it was a min-height on the H1 itself.

   Measured at 390px, the hero H1 box against the height of the text inside it:
     Elementor pages (home, About, Services, Contact, Gallery)  box 148, min-height 148px
     Hub pages (Boilers, Plumbing, Bathrooms, Landlords, etc.)  box 146, min-height 146px
     Deep service pages (Heat pumps, New boiler, Emergency...)  box  66, min-height 0

   Three different values. A two-line heading is 72px of text, so on the eight
   pages with a 146-148px floor that is roughly 75px of empty space between the
   heading and the badge — and none at all on the other eight. The floor was
   presumably meant to reserve three lines so the hub pages lined up with each
   other, but it never applied to the deep pages, so it made the site less
   consistent rather than more.

   Every hero heading is now its natural height, with one deliberate gap beneath
   it. The badge then sits the same distance under the heading on all 19 pages;
   its absolute position varies with heading length, which is correct — it is the
   GAP that has to be consistent, not the y coordinate.

   Desktop is untouched: the 146px floor already sits inside a mobile media
   query and computes to auto at 1440px. */
@media (max-width:880px){
  .cmg-open .cmg-open-h1,
  .cmg-open-main .cmg-open-h1,
  .cmg-open-sub .cmg-open-h1,
  .elementor h1.elementor-heading-title{
    min-height:0 !important;
    margin-bottom:0 !important;
  }
  /* One gap above and below the badge on every page. 20px is not arbitrary:
     the five Elementor pages space their hero with a flex container gap of
     20px that no margin rule can override, so the service pages are matched to
     it rather than the other way round. The wrapper's own margins are zeroed on
     the Elementor pages so the container gap is the only thing acting — a
     stray 4px margin-bottom on the homepage wrapper was making its
     badge-to-card gap 24px against everyone else's 20px. */
  .cmg-open > a.cmg-ob,
  .cmg-open > p:has(> a.cmg-ob){
    margin-top:20px !important;
    margin-bottom:20px !important;
  }
  .cmg-gbadge-wrap{
    margin:0 !important;
  }
}


/* === 91. Contact's badge sat 10px under its heading, not 20 --- 30 Aug 2026 --- */
/* After section 90 the heading-to-badge gap measured 20px on 18 of the 19
   content pages and 10px on Contact. The cause is structural rather than a
   stylesheet value: on the other four Elementor pages the badge's container is
   a direct child of the hero grid, so the grid's 20px row-gap separates it from
   the heading. On Contact it sits inside an extra unnamed wrapper DIV, so the
   grid gap never applies between the two and only half the spacing lands.

   Scoped to the page rather than to the wrapper, because the wrapper has no
   class of its own to hook and any structural selector here would be guessing
   at Elementor's output. Page id 11 is Contact. */
@media (max-width:880px){
  body.page-id-11 .cmg-gbadge-wrap{ margin-top:10px !important; }
}


/* === 92. One page opening, on desktop as well as mobile --- 30 Aug 2026 --- */
/* Chris measured this by eye before I measured it by script, which is the wrong
   way round. At 1440px the 19 content pages opened with FOUR different heading
   tops (204/234/260/278), FOUR different booking-card tops (260/278/394/416),
   FOUR different card left edges (883/890/902/903), a 56px white strip above
   the blue band on six pages and none on the rest, and NO booking card at all
   on eight pages. Every earlier desktop check I ran looked at heading position,
   badge position and background colour — all of which matched — and never at
   which components were present. */

@media (min-width:881px){

  /* --- 92a. The band starts flush under the header everywhere -------------- */
  /* Credentials, Boilers, Plumbing, Bathrooms, Landlords and For builders each
     had 56px of padding-top on the Elementor section that wraps the hero, so
     the blue band began 56px down the page with white above it. Matched by
     :has() rather than by element id, because the id differs on every page. */
  body .elementor > .elementor-element:has(.cmg-open){ padding-top:0 !important; }

  /* --- 92b. One hero grid ------------------------------------------------- */
  /* The hub-page layout, now applied to every .cmg-open page: heading and badge
     in the left column, booking card in the right, card top-aligned with the
     heading. The eight pages that had no card have had one added to their
     markup; this places it. */
  body .cmg-open{
    display:grid !important;
    grid-template-columns:minmax(0,1fr) 400px !important;
    gap:0 56px !important;
    align-items:start !important;
    padding:26px 0 32px !important;
    text-align:left !important;
  }
  body .cmg-open > .cmg-open-h1{ grid-column:1 !important; }
  body .cmg-open > a.cmg-ob,
  body .cmg-open > p:has(> a.cmg-ob){ grid-column:1 !important; }
  body .cmg-open > .cmg-open-card{
    grid-column:2 !important;
    grid-row:1 / span 20 !important;
    display:block !important;
    margin:0 !important;
  }
  body .cmg-open > .cmg-open-card .cmg-book{
    width:100% !important; max-width:400px !important; margin:0 !important;
  }
  /* Anything else that lands in .cmg-open stays in the left column rather than
     dropping under the card. */
  body .cmg-open > p:not(:has(> a.cmg-ob)){ grid-column:1 !important; }
}


/* === 93. Every heading starts at the same point --- 30 Aug 2026 --- */
/* The five Elementor pages (home, About, Services, Contact, Gallery) carry
   padding-top:56px on their first section, and the homepage adds another 54px
   on the inner container. That put their headings at 234px and 278px while the
   14 .cmg-open pages sit at 204px.

   Scoped with :not(:has(.cmg-open)) so it cannot undo section 92a, which sets
   the wrapping section to zero on the pages whose hero IS .cmg-open. Without
   that guard this rule would come later in the stylesheet, win, and put the
   56px strip straight back. */
@media (min-width:881px){
  body .elementor > .elementor-element:first-child:not(:has(.cmg-open)){
    padding-top:26px !important;
  }
  body .elementor > .elementor-element:first-child:not(:has(.cmg-open)) > .e-con-inner{
    padding-top:0 !important;
  }
}


/* === 94. The homepage's own 54px --- 30 Aug 2026 --- */
/* Section 93 cleared the first section's padding on the Elementor pages, but the
   homepage carries a further 54px on its hero grid (element b3dbfd8), which sits
   one level below the .e-con-inner that rule targets. It left the homepage
   heading at 248px against 204px everywhere else. */
@media (min-width:881px){
  /* 10px, not 0: the homepage's first section begins 10px higher up the page
     than every other page's does, so zero here lands the heading at 194 against
     everyone else's 204. */
  body.home .elementor .elementor-element.elementor-element-b3dbfd8{
    padding-top:10px !important;
  }
}


/* === 95. Hero spacing onto the 8-point scale --- 30 Aug 2026 --- */
/* Chris: "the text and google bubble spacing ... looks a little too close to
   the text" and "the header text sometimes looks pushed up into the top of the
   page". Both are real and both were off-scale.

   Measured at 1440px before this section:
     header -> heading   26px on 18 pages, 36px on the homepage
     heading -> badge    FIVE values — 0px (home), 6px (8 pages), 20px, 22px, 28px
     badge -> body copy  4px on the homepage
   At 390px: heading -> badge 20px, badge -> copy 21px and 25px.

   None of 0, 4, 6, 20, 21, 22, 25, 26, 28 or 36 is on the project's spacing
   scale (4/8/16/24/32/40/48/64/96), which is why it reads as untidy rather than
   as any particular mistake. 24px for the two component gaps and 48px desktop /
   32px mobile to open the section, both scale values. */

@media (min-width:881px){
  .cmg-open{ padding-top:48px !important; }
  body .elementor > .elementor-element:first-child:not(:has(.cmg-open)){
    padding-top:48px !important;
  }
  .cmg-open > a.cmg-ob,
  .cmg-open > p:has(> a.cmg-ob){ margin:24px 0 !important; }
  .cmg-gbadge-wrap{ margin:24px 0 !important; }
}

@media (max-width:880px){
  .cmg-open{ padding-top:32px !important; }
  .cmg-open > a.cmg-ob,
  .cmg-open > p:has(> a.cmg-ob){ margin:24px 0 !important; }
  .cmg-gbadge-wrap{ margin:24px 0 !important; }
}


/* === 96. Section 95, corrected --- 30 Aug 2026 --- */
/* 95 moved the numbers but did not land them, for three reasons worth keeping:

   1. SPECIFICITY. 95 wrote `.cmg-open{padding-top:48px}` (0,1,0) against
      section 92b's `body .cmg-open{padding:26px 0 32px}` (0,1,1). Later source
      order does not beat higher specificity, so the 14 .cmg-open pages stayed
      at 26px while the five Elementor pages moved to 48px.
   2. THE HEADING'S OWN MARGIN ADDS. .cmg-open-h1 carries margin-bottom 14px on
      the hub pages and 6px on the deep pages, which stacked on top of the 24px
      badge margin to give 38px and 30px.
   3. MARGIN AND ROW-GAP BOTH APPLY on the Elementor pages. Their hero container
      has row-gap:20px, so a margin on .cmg-gbadge-wrap adds to it rather than
      replacing it. On the homepage the heading is not even a sibling of the
      badge, so the row-gap never falls between them and the measured gap was 0.

   So: zero the heading margin and let one margin govern on .cmg-open pages;
   zero the wrapper margin and set the row-gap on Elementor pages; and give the
   homepage the margin it needs because no gap applies to it. */

@media (min-width:881px){
  html body .cmg-open{ padding-top:48px !important; }
  html body .cmg-open > .cmg-open-h1{ margin-bottom:0 !important; }
  html body .cmg-open > a.cmg-ob,
  html body .cmg-open > p:has(> a.cmg-ob){ margin:24px 0 !important; }

  html body .elementor .cmg-gbadge-wrap{ margin:0 !important; }
  html body .elementor-element:has(> .elementor-element > .cmg-gbadge-wrap){
    row-gap:24px !important;
  }
  html body.home .cmg-gbadge-wrap{ margin-top:24px !important; }
}

@media (max-width:880px){
  html body .cmg-open{ padding-top:32px !important; }
  html body .cmg-open > .cmg-open-h1{ margin-bottom:0 !important; }
  html body .cmg-open > a.cmg-ob,
  html body .cmg-open > p:has(> a.cmg-ob){ margin:24px 0 !important; }
  html body .elementor .cmg-gbadge-wrap{ margin:0 !important; }
  html body .elementor-element:has(> .elementor-element > .cmg-gbadge-wrap){
    row-gap:24px !important;
  }
  html body.home .cmg-gbadge-wrap{ margin-top:24px !important; }
}


/* === 97. The last three off-scale gaps --- 30 Aug 2026 --- */
/* After 96: header->heading 48px on 18 of 19 (homepage 58), heading->badge 24px
   on 14 of 19 (homepage 48, four Elementor pages 22). Three causes:

   - The homepage matched BOTH levers at once — the row-gap rule applied AND the
     homepage margin-top did, giving 24+24. The margin is no longer needed.
   - The homepage's own hero grid still carried 10px more top padding than the
     other pages need to reach 48.
   - About, Services, Contact and Gallery put .cmg-gbadge-wrap as a DIRECT child
     of the gapped container, not a grandchild, so 96's
     :has(> .elementor-element > .cmg-gbadge-wrap) never matched them. Both
     shapes are covered now. */

@media (min-width:881px){
  html body.home .cmg-gbadge-wrap{ margin-top:0 !important; }
  body.home .elementor .elementor-element.elementor-element-b3dbfd8{
    padding-top:0 !important;
  }
}

@media (min-width:881px), (max-width:880px){
  html body .elementor-element:has(> .cmg-gbadge-wrap),
  html body .elementor-element:has(> .elementor-element > .cmg-gbadge-wrap){
    row-gap:24px !important;
  }
}


/* === 98. Mobile, the five Elementor pages --- 30 Aug 2026 --- */
/* At 390px the 14 .cmg-open pages now sit at 32px header->heading and 24px
   heading->badge. The five Elementor pages did not follow: 24px header->heading
   on all five, and heading->badge of 48px (home), 20px (About, Services,
   Gallery) and 10px (Contact).

   Home was doubling — section 97 removed its extra margin only in the desktop
   block. The other four keep their heading in a separate top-level section from
   their badge, so the gap between them is section padding, not a component gap:
   zeroing the first section's bottom padding and setting the badge section's
   top padding to 24 makes it exactly 24 regardless of what either section
   contained before. Mobile only — on desktop that second section also carries
   the booking card, and moving its padding would move the card with it. */

@media (max-width:880px){
  html body .elementor > .elementor-element:first-child:not(:has(.cmg-open)){
    padding-top:32px !important;
    padding-bottom:0 !important;
  }
  html body.home .cmg-gbadge-wrap{ margin-top:0 !important; }
  html body .elementor > .elementor-element:has(.cmg-gbadge-wrap):not(:first-child){
    padding-top:24px !important;
  }
  /* The homepage's hero grid keeps its own 24px on top of the section's 32,
     which is why it measured 56 against everyone else's 32. Section 97 zeroed
     it on desktop only. */
  body.home .elementor .elementor-element.elementor-element-b3dbfd8{
    padding-top:0 !important;
  }
}


/* === 99. The promise card and the credentials box --- 30 Aug 2026 --- */

/* --- 99a. Why the tracking block "looks lost" ---------------------------- */
/* Chris: "The time tracking part looks like its lost and doesnt stand out at
   all." It is a real card — .cmg-promise, background #F2F8FC, 14px radius — but
   section 87 put a full-width #F2F8FC BAND behind it. Card and band are the
   same colour, so the card erased itself and left bare text on a blue strip.
   My own change caused it, on all nine pages that use this block.

   White on the blue band restores the card, and a 4px accent rule on the left
   gives it the weight Chris is asking for. It borrows the pattern .cmg-alert
   already uses on the emergency pages rather than inventing a new one, and it
   matches the booking card's white-on-blue treatment in the hero. Padding goes
   to 24/32 — the old 20px/22px was on no scale at all. */
.cmg-promise{
  background:#fff !important;
  border:1px solid #E3E8EF !important;
  border-left:4px solid #EF7329 !important;
  border-radius:14px !important;
  padding:24px 32px !important;
  box-shadow:var(--cmg-e1) !important;
}
.cmg-promise .cmg-promise-t{ margin:0 0 8px !important; color:#1B3461 !important; }
.cmg-promise .cmg-promise-s{ margin:0 !important; }

/* --- 99b. The credentials box on About ----------------------------------- */
/* Chris: "looks a little underdeveloped and the text is too close to the box."
   Both fair. Padding was 28px/32px/26px — three values, two of them off the
   scale — and the four credentials sat in a 2x2 grid occupying the left 60% of
   an 1140px box, leaving a large empty right-hand side that read as unfinished.
   Four across fills the width, and 32px all round gives the text room. */
.cmg-abcred{
  padding:32px !important;
  border:1px solid #E3E8EF !important;
  border-radius:14px !important;
}
.cmg-abcred > p:first-child{ margin:0 0 24px !important; max-width:65ch !important; }
.cmg-abcred ul{
  display:grid !important;
  grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  gap:16px 24px !important;
  margin:0 0 24px !important;
  padding:0 !important;
  list-style:none !important;
}
.cmg-abcred li{ margin:0 !important; }
.cmg-abcred > p:last-child{ margin:0 !important; }

@media (max-width:1024px){
  .cmg-abcred ul{ grid-template-columns:repeat(2,minmax(0,1fr)) !important; }
}
@media (max-width:880px){
  .cmg-abcred{ padding:24px !important; }
  .cmg-abcred ul{ grid-template-columns:1fr !important; gap:12px !important; }
  .cmg-promise{ padding:20px 24px !important; }
}

/* ============================================================
   100. Header dropdown width + Contact page column labels
   ------------------------------------------------------------
   a) The Boilers dropdown was min-width:232px (194px inner) while
      "Heating system maintenance" needs 240px, so it overflowed the
      panel by 46px with white-space:nowrap. Let each dropdown size
      to its own longest item, with 232px as the floor so short
      menus (Plumbing, About) keep a consistent minimum.
   b) The three Contact column labels were H2 at 28px - the same
      size as the section heading above them - inside 208/113/116px
      cells. Drop them to the 17.5px step, weight 600, navy, with a
      single 8px gap to the content beneath.
   ============================================================ */

@media (min-width:881px){
  .site-header nav.site-navigation ul.sub-menu{
    min-width:280px !important;
    width:max-content !important;
    max-width:340px !important;
  }
  .site-header nav.site-navigation ul.sub-menu > li{
    width:100% !important;
  }
  .site-header nav.site-navigation ul.sub-menu > li > a{
    white-space:nowrap !important;
    width:100% !important;
    box-sizing:border-box !important;
  }
}

body .elementor-element-3e52a42d h2.elementor-heading-title,
body .elementor-element-675930e2 h2.elementor-heading-title,
body .elementor-element-5ff19d8b h2.elementor-heading-title{
  font-size:17.5px !important;
  line-height:1.4 !important;
  font-weight:600 !important;
  color:#1B3461 !important;
  letter-spacing:0 !important;
  margin:0 0 8px !important;
}
body .elementor-element-3e52a42d,
body .elementor-element-675930e2,
body .elementor-element-5ff19d8b{
  margin-bottom:8px !important;
}

/* ============================================================
   101. Contact page column labels - beat the site-wide h2 lock
   ------------------------------------------------------------
   Section 100b set these to 17.5px but lost the specificity
   battle to the site-wide heading lock
   (html body .elementor h2.elementor-heading-title x3 = 0,4,2).
   An earlier attempt at 18px on the same three columns had died
   the same way and had been sitting inert. This selector is
   0,5,2 and wins. Labels drop from 28px (identical to the
   "Get in touch" heading above them) to the 17.5px step, so the
   column heads read as labels, not as section headings.
   ============================================================ */

html body .elementor .elementor-element-77da0f66 h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
html body .elementor .elementor-element-71a580ab h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
html body .elementor .elementor-element-5bafbbb h2.elementor-heading-title.elementor-heading-title.elementor-heading-title{
  font-size:17.5px !important;
  line-height:1.4 !important;
  font-weight:600 !important;
  color:#1B3461 !important;
  letter-spacing:0 !important;
  margin:0 0 8px !important;
}

/* ============================================================
   102. Contact header - sentence case labels + column balance
   ------------------------------------------------------------
   The labels rendered as "Opening Hours" because Elementor's
   accent typography applies text-transform:capitalize, while a
   long-dead rule further up tried uppercase and never won. The
   rest of the site is sentence case, so force none.
   The three columns were an even 221/221/221 while column one
   needs 287px for "Monday to Friday, 8:00am - 5:00pm" on one
   line and columns two and three need only 158px and 136px.
   Rebalancing to 296/184/184 within the same 664px removes the
   ragged five-line wrap without touching anything else.
   ============================================================ */

html body .elementor .elementor-element-77da0f66 h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
html body .elementor .elementor-element-71a580ab h2.elementor-heading-title.elementor-heading-title.elementor-heading-title,
html body .elementor .elementor-element-5bafbbb h2.elementor-heading-title.elementor-heading-title.elementor-heading-title{
  text-transform:none !important;
}

/* (the column ratio itself is edited in place in the 1025px block above,
   which is more specific than anything appended here could be) */

/* ============================================================
   103. The same portrait was running twice, full-bleed
   ------------------------------------------------------------
   Chris: "my full blown face image appers twice on the site,
   does this look good?" It did not. chris-van-photo-edited.jpg
   was the ONLY large photograph on the whole site and it ran as
   an identical 1905x620 full-bleed band on both About
   (2ca5d2c0) and Contact (614a4d66) - same crop, same focal
   point, same height. At that width his face renders about
   230px tall, so seeing it twice reads as a billboard, not a
   portrait.
   The portrait keeps its place on About, which is the page it
   belongs to. The Contact copy is removed. Nothing new is
   published to take its place - the Contact page's job is the
   details and the booking card, and a decorative band between
   them was only ever filling space.
   ============================================================ */

@media (min-width:881px){
  body .elementor .elementor-element-614a4d66{ display:none !important; }
}

/* ============================================================
   104. The two panels Chris said were lost or underdeveloped
   ------------------------------------------------------------
   Both faults had the same cause: section 87's banding rules
   are (0,3,1) and every attempt to restyle these two panels was
   written at (0,1,0), so section 99 was published and did
   nothing at all. Verified by reading the cascade, not by
   assuming: getComputedStyle on .cmg-promise still returned
   background #F2F8FC, padding 20px 22px and a transparent left
   border after 99 went live.

   .cmg-promise - "the time tracking part looks like its lost".
   It was: section 87 painted it the same colour as the band it
   sits in and set border-color:transparent, which killed the
   orange rule it was designed with. It is now a white card with
   that rule restored, and the clip-path is opened 24px top and
   bottom so the pale band still shows around it rather than
   ending at the card edge. Clearance above measured on all nine
   pages that carry it: 50px on /how-i-work/, 54px on the rest,
   so 24px never reaches the element above.

   .cmg-abcred - "the qualified, reg and ins looks a little
   underdeveloped and the text is too close to the box". 99
   fixed the padding but left the fill at #F2F8FC, identical to
   the band behind it, so the box was a 1px outline round
   nothing. White, like every other card on the site. The
   heading above it was sitting flush against it (measured gap
   0px against 32px of internal padding, which breaks the
   internal <= external rule); 32px now.
   ============================================================ */

html body .cmg-page > .cmg-promise.cmg-promise.cmg-promise{
  background-color:#fff !important;
  background-image:none !important;
  border-style:solid !important;
  border-width:1px 1px 1px 4px !important;
  border-color:#E3E8EF #E3E8EF #E3E8EF #EF7329 !important;
  border-radius:0 14px 14px 0 !important;
  padding:24px 32px !important;
  clip-path:inset(-24px -100vw -24px -100vw) !important;
}
@media (max-width:880px){
  html body .cmg-page > .cmg-promise.cmg-promise.cmg-promise{
    padding:20px 24px !important;
    clip-path:inset(-16px -100vw -16px -100vw) !important;
  }
}

html body .cmg-abcred.cmg-abcred{
  background-color:#fff !important;
  margin-top:32px !important;
}

/* ============================================================
   105. One mobile gutter
   ------------------------------------------------------------
   Measured at 390px, H1 left edge, every published page:
     Elementor pages (home, about, services, gallery, contact) 20px
     hub pages (boilers, plumbing, bathrooms, landlords,
       credentials, for-builders) and 2 of the 8 sub-pages   18px
     the other 6 sub-pages (how-i-work, heat-pumps,
       boiler-repairs, heating-system-maintenance,
       emergency-plumbing, leak-detection)                   28px
     terms and privacy                                       10px
   Four different left edges, none of them on the 8-point
   scale. The 28px group came from main.site-main carrying a
   10px padding that an older rule only zeroed on some pages,
   stacked on .cmg-open's own 18px.
   Gutter is now set once per architecture: 16px below 480px
   and 24px from 480 to 880, per the playbook's page-margin
   ladder. main.site-main and .page-content are zeroed so the
   value can only be declared in one place.
   ============================================================ */

@media (max-width:880px){
  body main.site-main{ padding-left:0 !important; padding-right:0 !important; }
  body .page-content{ padding-left:0 !important; padding-right:0 !important; }
}
@media (max-width:880px){
  /* a .cmg-open nested inside an Elementor container must not add a second
     gutter on top of the container's own - the hub pages were doubling to 32px */
  body .elementor .cmg-open{ padding-left:0 !important; padding-right:0 !important; }
}
@media (max-width:479px){
  body .page-content > .cmg-open{ padding-left:16px !important; padding-right:16px !important; }
  body .page-content > .cmg-legal{ padding-left:16px !important; padding-right:16px !important; }
}
@media (min-width:480px) and (max-width:880px){
  body .page-content > .cmg-open{ padding-left:24px !important; padding-right:24px !important; }
  body .page-content > .cmg-legal{ padding-left:24px !important; padding-right:24px !important; }
}

/* ============================================================
   106. Making 105 actually land
   ------------------------------------------------------------
   105 set the ladder but three groups still missed it, all for
   cascade reasons, all measured rather than assumed:
     - the top-level container rule only ever matched .e-con-full,
       so every e-con-boxed page (services, gallery, and all six
       hub pages) got no gutter at all once 105 zeroed the
       nested .cmg-open;
     - two containers, 54768fda and 07814e2, were excluded by
       :not() in the original rule and were still sitting on a
       percentage padding - 18.75px at 375px wide, and 10px -
       which is why the home page hero did not line up with the
       sections below it on the same page;
     - the old selector is (0,5,0), so anything appended at
       (0,3,2) lost. This one is (0,8,2) and wins.
   Result: one gutter, declared once, 16px below 480px and 24px
   from 480 to 880, on all 21 published pages.
   ============================================================ */

@media (max-width:479px){
  html body [data-elementor-type] > .e-con.e-con.e-con.e-con.e-con.e-con{ padding-left:16px !important; padding-right:16px !important; }
  html body [data-elementor-type] > .e-con.e-con.e-con.e-con.e-con.e-con > .e-con-inner{ padding-left:0 !important; padding-right:0 !important; }
}
@media (min-width:480px) and (max-width:880px){
  html body [data-elementor-type] > .e-con.e-con.e-con.e-con.e-con.e-con{ padding-left:24px !important; padding-right:24px !important; }
  html body [data-elementor-type] > .e-con.e-con.e-con.e-con.e-con.e-con > .e-con-inner{ padding-left:0 !important; padding-right:0 !important; }
}

/* ============================================================
   107. .cmg-pillars was still on its own 18px inset
   ------------------------------------------------------------
   The pillars strip on the home page is a 100vw full-bleed
   block, so its own left/right padding IS the gutter for its
   content. It was 18px (40px 18px below 520), which left the
   home page with 16px everywhere else and 18px there. Same
   ladder as 105/106.
   ============================================================ */

@media (max-width:479px){
  html body .cmg-pillars.cmg-pillars{ padding-left:16px !important; padding-right:16px !important; }
}
@media (min-width:480px) and (max-width:880px){
  html body .cmg-pillars.cmg-pillars{ padding-left:24px !important; padding-right:24px !important; }
}

/* ============================================================
   108. One booking card, not two
   ------------------------------------------------------------
   Chris: "the hovering blue box on the right of this last page
   is missing on many of the pages". It was not missing so much
   as wearing a different coat. Audited all 19 content pages:
     14 pages carry .cmg-bk   - navy, sticky at top:142px
      4 pages carry .cmg-book - white, static
      the home page carries neither
   Same job, same position on the page, two different colours.
   The four white ones (about, services, gallery, contact) are
   now navy, using the exact values read off .cmg-bk:
   #1B3461 ground, #fff headings and links, #D9E3F1 body,
   #EF7329 button with #16294E label. The home page still has
   no card at all - that one needs markup, not CSS.
   ============================================================ */

html body .cmg-book.cmg-book{
  background-color:#1B3461 !important;
  border-color:transparent !important;
  color:#D9E3F1 !important;
}
html body .cmg-book.cmg-book .cmg-book-lead{ color:#FFFFFF !important; }
html body .cmg-book.cmg-book .cmg-book-foot{
  color:#D9E3F1 !important;
  background-color:transparent !important;
  border-top:1px solid rgba(255,255,255,.16) !important;
  padding:14px 24px 22px !important;
}
html body .cmg-book.cmg-book .cmg-book-row{ color:#D9E3F1 !important; }
html body .cmg-book.cmg-book .cmg-book-row a:not(.cmg-book-btn){ color:#FFFFFF !important; }
html body .cmg-book.cmg-book a.cmg-book-btn{ background-color:#EF7329 !important; color:#16294E !important; }
html body .cmg-book.cmg-book strong, html body .cmg-book.cmg-book b{ color:#FFFFFF !important; }

/* ============================================================
   109. Palette, radius and elevation consolidation
   ------------------------------------------------------------
   Rendered inventory across all 21 pages at 1440px found more
   values in use than the system defines. Consolidated in place:
     deep orange written four ways (#AD4E1C 39, #A8481C 7,
       #B3441A 1, #C0562A) -> #AD4E1C
     pale blue written four ways (#F2F8FC 35, #F4F7FB 7,
       #F5F8FC 1, #F7FAFD 1) -> #F2F8FC
     navy written three ways - #0B2A46 was mine, added in 101
       and 102 for the Contact labels -> #1B3461
     .cmg-alert-b's one-off warm brown #5A3524 -> the site body
       grey #4A5A70, keeping the alert's orange heading for its
       hierarchy instead of two bespoke browns
     card radius written two ways (14px, 10px x8) -> 14px
     a single stray 3px radius -> 4px, the scale's small step
     three single-layer shadows that bypassed the e1/e2/e3
       tokens (175 rendered uses between them) -> the tokens
   #F79553 stays: it is the deep orange lightened for navy
   grounds and is doing a real job.
   ============================================================ */

/* ============================================================
   110. Tap targets
   ------------------------------------------------------------
   Measured at 390px on every page. Everything below was under
   the 44px the playbook sets, and two of them are conversion
   controls, not compliance trivia:
     main nav links            53x37  (every page)
     .cmg-book-alt "Need someone today? Call 01204 961827"
                               286x21  (on 19 pages)
     the Google rating badge   272x40
     footer utility links      29px high
     Book Online button        109x42
     carousel bullets          6x6
   Heights are set with min-height and flex centring rather than
   by growing padding, so nothing reflows sideways.
   ============================================================ */

@media (max-width:880px){
  html body .site-header nav.site-navigation ul.menu > li > a{
    display:flex !important; align-items:center !important;
    min-height:44px !important;
    padding-top:0 !important; padding-bottom:0 !important;
  }
}

html body a.cmg-book-alt{
  display:flex !important; align-items:center !important; justify-content:center !important;
  min-height:44px !important;
}
html body a.cmg-gbadge, html body a.cmg-ob{
  min-height:44px !important; height:44px !important;
}
html body footer.site-footer nav a,
html body footer.site-footer ul a{
  display:inline-flex !important; align-items:center !important; min-height:44px !important;
}
html body a.cmg-book-btn, html body a.cmg-b1, html body a.cmg-b2{
  min-height:44px !important;
  display:inline-flex !important; align-items:center !important; justify-content:center !important;
}
html body .swiper-pagination-bullet{
  width:24px !important; height:24px !important;
  box-sizing:border-box !important;
  padding:9px !important;
  background-clip:content-box !important;
}

/* 110b. The tail of the tap-target list. WCAG 2.2 AA asks 24x24;
   the playbook asks 44 for primary controls. Primary controls got
   44 above. These are standalone secondary links sitting at 21-24px
   and three atomic buttons one pixel short - taking the links to 24
   rather than 44 so link lists do not balloon. */

/* 110c. The a:not([class]) pair that used to be here was far too broad:
   it caught the What I do service cards on every hub page, which are
   unclassed anchors inside .cmg-page, and turned each one into an
   inline-flex ROW - label, body and price jammed side by side with no
   gap in a 316px box. Standalone secondary links revert to their
   natural height; they are inline text links, which 2.5.8 exempts. */
html body a.cmg-accred-check,
html body a.cmg-rev-more{
  display:inline-flex !important; align-items:center !important; min-height:24px !important;
}
html body .e-atomic-element button,
html body button.e-atomic-element{ min-height:44px !important; }

/* ============================================================
   111. One card-padding ladder
   ------------------------------------------------------------
   Sixteen different paddings were in use across what is visually
   one family of cards: 22/24, 24/24/20, 26/28, 20/22, 24/22,
   24/32, 22/18/16, 14/18, 18/22, 20/24, 16/18/6, 14/16, 32,
   30/34, 24/16/20, 16. None of the odd ones read as a decision;
   they read as sixteen separate afternoons.
   Three steps now, all on the 8-point scale, sized by how much
   the card is carrying - which is what the playbook actually
   asks for (16-20 for a small cell, 24-32 for a wide one):
     16px  small notices and price/status chips
     24px  cards that sit in a grid, and the booking card
     32px  the two full-width feature panels Chris signed off
           at that size (credentials, and the promise card)
   Capped at 24px below 880px so a phone is not paying 32px of
   padding out of a 358px column.
   ============================================================ */

html body .cmg-note, html body .cmg-draft-banner,
html body .cmg-price, html body .cmg-now, html body .cmg-alert{
  padding:16px !important;
}
html body .cmg-card, html body .cmg-rev-card, html body .cmg-accred-item,
html body .cmg-bk, html body .cmg-ans, html body .cmg-proof,
html body .cmg-svc, html body .cmg-danger, html body .cmg-legal-toc{
  padding:24px !important;
}
html body .cmg-abcred.cmg-abcred{ padding:32px !important; }
html body .cmg-page > .cmg-promise.cmg-promise.cmg-promise{ padding:32px !important; }

html body a.cmg-b1, html body a.cmg-b2, html body a.cmg-book-btn{
  padding:12px 24px !important;
}

@media (max-width:880px){
  html body .cmg-abcred.cmg-abcred{ padding:24px !important; }
  html body .cmg-page > .cmg-promise.cmg-promise.cmg-promise{ padding:24px !important; }
  html body .cmg-card, html body .cmg-rev-card, html body .cmg-accred-item,
  html body .cmg-bk, html body .cmg-ans, html body .cmg-proof,
  html body .cmg-svc, html body .cmg-danger, html body .cmg-legal-toc{
    padding:20px !important;
  }
}

/* ============================================================
   112. Text layout - measure, and the centred paragraphs
   ------------------------------------------------------------
   Measured with a real character-width probe per element, not
   an em estimate. Body prose was running at 77-84 characters a
   line across the site; the readable range is 45-75, target 65.
   Worst offenders by count:
     .cmg-legal p        x151 at 84ch  (Terms and Privacy)
     .cmg-page p         x34  at 77-84ch
     ol.cmg-steps li     x10  at 79-84ch
     .cmg-hero-body p    x3   at 84ch
   All of them are left-ranged, so a max-width cap is safe -
   nothing here is centred and nothing gets pushed off centre.
   68ch keeps a little of the width while landing inside the
   range on every page.

   The four home-page pillars centred a 3-4 line paragraph each.
   The playbook is blunt about this: centre a hero, never a
   paragraph - and a centred multi-line paragraph rags on both
   edges, so the eye has to hunt for the start of every line.
   Ranged left now, icon included, which also matches every
   other section on the site. The short one-line card captions
   elsewhere stay centred; those are labels, not paragraphs.
   ============================================================ */

html body .cmg-legal p,
html body .cmg-legal li,
html body .cmg-page > p,
html body .cmg-page li,
html body .cmg-hero-body p{
  max-width:68ch !important;
}

html body .cmg-pillar{ text-align:left !important; }
html body .cmg-pillar > svg{ margin-left:0 !important; margin-right:auto !important; display:block !important; }

/* 111b. Two corrections to 111, both caught by re-measuring the
   live page instead of trusting the publish.
   (a) .cmg-card, .cmg-bk and .cmg-ans ignored 111 entirely -
       still 22/24, 26/28 and 20/22. Doubling the class takes
       the selector above whatever was holding them.
   (b) .cmg-svc and .cmg-proof are not cards at all, they are the
       1140px-wide grid and flex CONTAINERS that hold the cards.
       Giving .cmg-svc 24px of padding pushed the whole What I Do
       card row 24px in from the heading above it, so the section
       no longer started on the same line as its own title.
       Containers get no padding; their gaps go on the scale
       (18px -> 24px, 10px -> 16px). */

html body .cmg-card.cmg-card{ padding:24px !important; }
html body .cmg-bk.cmg-bk{ padding:24px !important; }
html body .cmg-ans.cmg-ans{ padding:24px !important; gap:24px !important; }

html body .cmg-svc.cmg-svc{ padding:0 !important; gap:24px !important; }
html body .cmg-proof.cmg-proof{ padding:24px 0 !important; gap:16px !important; }

@media (max-width:880px){
  html body .cmg-card.cmg-card{ padding:20px !important; }
  html body .cmg-bk.cmg-bk{ padding:20px !important; }
  html body .cmg-ans.cmg-ans{ padding:20px !important; gap:16px !important; }
  html body .cmg-svc.cmg-svc{ gap:16px !important; }
  html body .cmg-proof.cmg-proof{ padding:20px 0 !important; }
}

/* 111c. The last two that were still holding out. */
html body .cmg-danger.cmg-danger{ padding:24px !important; }
html body .cmg-svc.cmg-svc.cmg-svc{ padding:0 !important; }
@media (max-width:880px){
  html body .cmg-danger.cmg-danger{ padding:20px !important; }
}

/* ============================================================
   113. The "What I do" price cards on the hub pages
   ------------------------------------------------------------
   Boilers, Plumbing, Bathrooms, Landlords, Heat pumps. Each
   card was a flex ROW with no gap at all: a 94px label, a 192px
   description and a 43px price crammed side by side inside a
   364px card. Measured on /boilers/: "New boiler installation"
   ends at x=494 and "Accredited with Baxi" starts at x=494 -
   the label and the body text are touching, with no space
   between them anywhere in the row. The price column at 43px
   broke "From £1,799" over three lines, and the three items were
   vertically aligned three different ways (label centred, body
   top, price centred).
   In a 316px content box these three things cannot sit side by
   side. Stacked now - label, description, price - which is also
   how the home page cards read. Targeted with :has(> strong) so
   the home page icon cards, which are a different shape and are
   fine as they are, keep their own layout.
   ============================================================ */

html body .cmg-svc > a:has(> strong){
  display:grid !important;
  grid-template-columns:minmax(0,1fr) !important;
  gap:8px !important;
  align-items:start !important;
  align-content:start !important;
  text-align:left !important;
}
html body .cmg-svc > a:has(> strong) > strong{
  display:block !important; width:auto !important;
}
html body .cmg-svc > a:has(> strong) > span{
  display:block !important; width:auto !important;
}
html body .cmg-svc > a:has(> strong) > em{
  display:block !important; width:auto !important;
  font-style:normal !important;
  white-space:nowrap !important;
  margin-top:8px !important;
}

/* ============================================================
   114. Mobile section headings were floating off the left edge
   ------------------------------------------------------------
   Measured h2 left edges at 375px. text-align computes to left
   on every one of them, but the heading BOX is shrink-to-fit
   inside a centred flex container, so the heading sits centred
   while the paragraph underneath it starts at the 16px gutter:
     /services/    "What I do" at 141px, "Not sure what you" 67
     /gallery/     "Recent work" 127, "Want something" 33
     /contact-us/  "Opening hours" 122, "Contact" 151,
                   "Address" 151, "Prefer to book" 82
     /            "Ready to Get Your" 41
   against body copy at 16 on all of them. Six different left
   edges on one page.
   Headings now stretch to the column and range left below 880px.
   The hero H1 keeps its centred treatment - that is the opening
   pattern on all 21 pages and a centred hero is the one thing
   the playbook does say to centre.
   ============================================================ */

@media (max-width:880px){
  html body .elementor .elementor-widget-heading{
    width:100% !important;
    align-self:stretch !important;
  }
  html body .elementor .elementor-widget-heading h2.elementor-heading-title,
  html body .elementor .elementor-widget-heading h3.elementor-heading-title,
  html body .elementor .elementor-widget-heading h4.elementor-heading-title{
    text-align:left !important;
  }
}

/* 109b. .cmg-chip was the last off-scale radius at 10px, while the
   accreditation chips beside it are full pills. One pill radius. */
html body .cmg-chip{ border-radius:999px !important; }

/* ============================================================
   115. Option D - the pale band fades instead of stopping
   ------------------------------------------------------------
   Chris picked D from the four treatments. The band no longer
   has an edge: the colour dissolves into white over 40px at the
   top and bottom of each RUN of banded sections (28px on a
   phone). The fade sits inside the section padding, so it never
   washes over text.
   Run boundaries matter - two banded sections that touch must
   not fade into each other and back out again, which would put a
   pale seam between them. Mapped on every page first:
     home      3 runs of one
     about     [2ec9d630 + 91d4751] then two singles
     services  [79337ab3 + 4ed6414] then two singles
     gallery   [2dfa645a + 177d024] then one single
     contact   [6d052474 + 3f29f09] then 61aedc0f - and on
               DESKTOP the portrait between them is hidden, so
               all three become one run; handled per width below
   Gallery closing band gets no bottom fade: the navy footer is
   directly beneath it, and fading to white first would insert a
   pale strip that is not there now.
   Section borders are dropped on faded edges - a 1px line is
   exactly the definition this is removing.
   ============================================================ */

html, :root{
  --cmg-f:40px;
  --cmg-band-flat:linear-gradient(180deg,#F2F8FC 0px,#F2F8FC 100%);
  --cmg-band-both:linear-gradient(180deg,rgba(242,248,252,0) 0px,#F2F8FC var(--cmg-f),#F2F8FC calc(100% - var(--cmg-f)),rgba(242,248,252,0) 100%);
  --cmg-band-top:linear-gradient(180deg,rgba(242,248,252,0) 0px,#F2F8FC var(--cmg-f),#F2F8FC 100%);
  --cmg-band-bot:linear-gradient(180deg,#F2F8FC 0px,#F2F8FC calc(100% - var(--cmg-f)),rgba(242,248,252,0) 100%);
  --cmg-band-img:var(--cmg-band-both);
}
@media (max-width:880px){ html, :root{ --cmg-f:28px; } }

/* the .cmg-page bands are painted by a 100vw box-shadow, not by the element's
   own background, so a gradient on the element alone would not fade the bleed.
   They keep the flat fill until that mechanism is changed. */
html body .cmg-page > *{ --cmg-band-img:var(--cmg-band-flat); }

/* first of a run - fade in only */
html body .elementor-element-2ec9d630,
html body .elementor-element-79337ab3,
html body .elementor-element-2dfa645a,
html body .elementor-element-6d052474{ --cmg-band-img:var(--cmg-band-top); }

/* last of a run - fade out only */
html body .elementor-element-91d4751,
html body .elementor-element-4ed6414,
html body .elementor-element-177d024{ --cmg-band-img:var(--cmg-band-bot); }

/* gallery's closing band sits straight on the navy footer: fade in, hard out */
html body .elementor-element-440f12e7{ --cmg-band-img:var(--cmg-band-top); }

/* contact: the portrait between 3f29f09 and 61aedc0f is hidden above 880px, so
   the three sections are one run on desktop and two runs on a phone */
@media (max-width:880px){
  html body .elementor-element-3f29f09{ --cmg-band-img:var(--cmg-band-bot); }
  html body .elementor-element-61aedc0f{ --cmg-band-img:var(--cmg-band-both); }
}
@media (min-width:881px){
  html body .elementor-element-3f29f09{ --cmg-band-img:var(--cmg-band-flat); }
  html body .elementor-element-61aedc0f{ --cmg-band-img:var(--cmg-band-bot); }
}

/* a faded edge and a 1px rule are the same thing twice */
html body [data-elementor-type] > .e-con{ border-top-color:transparent !important; border-bottom-color:transparent !important; }

/* 115b. The blanket swap in 115 caught four things that are not bands.
   Anything whose pale fill is a TINT rather than a full-width band keeps a
   flat fill; anything painted by the 100vw box-shadow keeps it too, because
   fading the element alone would fade the middle of the stripe and leave the
   bleed hard on both sides. */
html body table td,
html body table th{ --cmg-band-img:var(--cmg-band-flat) !important; }
html body .cmg-book.cmg-book .cmg-book-foot{
  background-image:none !important;
  background-color:transparent !important;
}

/* ============================================================
   116. Option D on the .cmg-page bands as well
   ------------------------------------------------------------
   The hub and service pages do not build their bands from a
   section background - they build them from a 100vw box-shadow
   on the element, with a clip-path cutting it back to the
   element box. A gradient on the element alone would have faded
   the middle of the stripe and left the bleed hard at both
   edges, so those pages were left flat in 115 while this was
   worked out.
   That mechanism is replaced by a full-bleed pseudo-element
   carrying the same gradient the Elementor sections use. It is
   extended by the fade distance top and bottom, so the solid
   colour still starts exactly at the element edge and the fade
   sits outside the content - nothing gets washed over.
   Run logic uses sibling selectors rather than a hand-written
   list: a band with a banded element before it loses its top
   fade, one with a banded element after it loses its bottom
   fade, one with both loses both. It stays right if the page
   content changes.
   ============================================================ */

html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price), html body .cmg-page > h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-open{
  box-shadow:none !important;
  clip-path:none !important;
  background-color:transparent !important;
  background-image:none !important;
  position:relative !important;
  isolation:isolate;
}
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)::before,
html body .cmg-page > h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price))::before,
html body .cmg-open::before{
  content:"" !important;
  position:absolute !important;
  z-index:-1 !important;
  pointer-events:none !important;
  top:calc(-1 * var(--cmg-f)) !important;
  bottom:calc(-1 * var(--cmg-f)) !important;
  /* anchor the strip to the VIEWPORT, not to the element centre. Centring a
     100vw box on the element only reaches both edges when the element is as
     wide as the centred container - a banded h2 is 720px, so its strip landed
     202px short on the right. --cmg-inset is the distance from the viewport
     edge to the container edge at any width. */
  left:calc(-1 * var(--cmg-inset)) !important;
  margin-left:0 !important;
  width:100vw !important;
  background:var(--cmg-band-img) !important;
}

/* run positions  section 120: a banded h2 is part of the run; no :has inside :has */
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price){ --cmg-band-img:var(--cmg-band-both); }
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price) + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price), html body .cmg-page > h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price){ --cmg-band-img:var(--cmg-band-bot); }
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){ --cmg-band-img:var(--cmg-band-top); }
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price) + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price) + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)), html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price) + h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){ --cmg-band-img:var(--cmg-band-flat); }
html body .cmg-open{ --cmg-band-img:var(--cmg-band-both); }

html, :root{ --cmg-gutter:24px; --cmg-inset:max(var(--cmg-gutter), calc(50vw - 570px)); }
@media (max-width:479px){ html, :root{ --cmg-gutter:16px; } }

/* 116b. The full-bleed strips are 100vw wide, and 100vw includes the
   scrollbar, so they overhang the client area by about 8px and that was
   enough to give eight pages a horizontal scrollbar. overflow-x:clip trims
   the overhang WITHOUT creating a scroll container, so the sticky booking
   card still sticks (overflow-x:hidden would have broken it). */
html body main.site-main{ overflow-x:clip !important; }
/* NOT on body: overflow-x:clip on the body propagates to the viewport and stops
   the whole page scrolling - verified, scrollTop stayed at 0 with 2429px of
   document. It has to sit on an inner wrapper. */

/* ============================================================
   116c. The hard line across the hero
   ------------------------------------------------------------
   Chris: "this page and others have this line between the light
   blue and white and it is past the start of the dark blue box".
   Two faults stacked on top of each other.
   1. .cmg-open was still pinned to the FLAT gradient by 115b -
      that line was written when the hero still used the old
      box-shadow band, and its !important beat 116. So the one
      band on the page that Chris sees first was the only one
      that never got the fade.
   2. Its strip is extended 28px past the element at each end,
      which is right for the .cmg-page bands (they butt straight
      up against each other) but wrong here: measured on
      /boilers/ at 390px the hero ends at 856 and the navy panel
      starts at 864, so the strip ran to 884 - twenty pixels
      INTO the dark blue box. Hence a hard edge crossing it.
      The hero has empty space inside it at both ends, so its
      strip stops at the element and fades within it.
   ============================================================ */

html body .cmg-open{ --cmg-band-img:var(--cmg-band-both) !important; }
html body .cmg-open::before{ top:0 !important; bottom:0 !important; }

/* ============================================================
   117. Mobile: the Google badge and the card call-link centred
   ------------------------------------------------------------
   Measured every button and badge against the viewport at 390px.
   Two are off centre while everything around them is centred:

   .cmg-ob - the Google rating badge on the 13 .cmg-page pages
   (hubs and services) sat hard left at 16px while the H1 above
   it is centred. On the five Elementor pages the same badge is
   centred, because there it sits inside a flex wrapper with
   justify-content:center; on the .cmg-page pages it is a bare
   flex box in a plain block with margin:24px 0, so it lands on
   the container edge. Auto side margins centre it.

   .cmg-book-alt - "Need someone today? Call 01204 961827" was
   23px off centre (33 left, 56 right) on the home page,
   how-i-work and every .cmg-page page. Its row is a column flex
   whose align-items leaves children at their content width,
   aligned to the start. align-self centres the link itself.

   Mobile only. On desktop the H1 is ranged left and the badge
   sits directly under it - measured at exactly the same left
   edge, 143px, on all ten pages sampled. That is correct and is
   left alone.
   The paired buttons (.cmg-b1 with .cmg-b2) and the chip rows
   are NOT faults: they sit side by side and the PAIR is centred,
   which is why each one reads as off-centre on its own.
   ============================================================ */

@media (max-width:880px){
  html body a.cmg-ob,
  html body a.cmg-gbadge{
    margin-left:auto !important;
    margin-right:auto !important;
  }
  html body a.cmg-book-alt{
    align-self:center !important;
  }
}

/* 117b. 117 was published and did nothing, again for specificity.
   The badge margin is pinned by `html body .cmg-open > a.cmg-ob`
   (0,3,2) with margin-left:0 !important, inside the same 880px
   media query; `html body a.cmg-ob` is (0,1,2) and loses.
   Doubling the class takes it to (0,4,2). Verified by reading the
   computed margin back off the live page, not by trusting the save. */

@media (max-width:880px){
  html body .cmg-open > a.cmg-ob.cmg-ob,
  html body .cmg-open > p:has(> a.cmg-ob) ,
  html body a.cmg-gbadge.cmg-gbadge{
    margin-left:auto !important;
    margin-right:auto !important;
  }
  html body .cmg-book .cmg-book-row a.cmg-book-alt.cmg-book-alt{
    align-self:center !important;
    margin-left:auto !important;
    margin-right:auto !important;
  }
}

/* 117c. Checking the other buttons turned up the same split on DESKTOP.
   Inside the booking card the lead paragraph is ranged left on every page
   and the credential line under it is centred on every page - but the row
   holding "Book online" and the call link is centred on four pages
   (about, services, gallery, contact) and left on the other seven.
   Left matches the lead directly above it, and it is the majority, so the
   four are brought into line rather than the seven. Mobile is untouched:
   there the lead is centred, so the buttons stay centred with it. */

@media (min-width:881px){
  html body .cmg-book .cmg-book-row{ justify-content:flex-start !important; }
  html body .cmg-book .cmg-book-row a.cmg-book-alt.cmg-book-alt{
    align-self:flex-start !important;
    margin-left:0 !important;
    margin-right:auto !important;
  }
}

/* ============================================================
   118. Killing the pale blue bubbles
   ------------------------------------------------------------
   Chris: "there are light blue bubbles around some of the areas".
   He is right, and it is the same element in every case. The band
   blocks each paint TWO things: the full-bleed faded strip from
   116, and their own pale background with a 14px radius. The
   strip blends; the rounded box on top of it does not, so you see
   a soft band with a hard-edged bubble sitting inside it.
   Found on 13 pages: .cmg-proof every time, plus .cmg-svc and
   .cmg-ans wherever they appear - 24 bubbles in total.
   The element now paints nothing at all. The strip does the whole
   job, and the radius goes with the fill, because a radius on an
   invisible box is what drew the bubble in the first place.
   .cmg-promise and .cmg-price keep theirs - they are real white
   cards sitting inside the band, not the band itself.
   The winning rule was (0,3,1); these are (0,4,2).
   ============================================================ */

html body .cmg-page > .cmg-proof.cmg-proof.cmg-proof,
html body .cmg-page > .cmg-svc.cmg-svc.cmg-svc,
html body .cmg-page > .cmg-ans.cmg-ans.cmg-ans,
html body .cmg-page > h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)):has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){
  background-color:transparent !important;
  background-image:none !important;
  border-radius:0 !important;
  border-color:transparent !important;
}

/* About: this one section takes its pale fill from Elementor's own generated
   stylesheet, not from here, so the swap in 115 never reached it and it was
   the last flat-filled band on the site. Elementor writes it at (0,5,0). */
html body .elementor .elementor-element.elementor-element-91d4751.elementor-element-91d4751.elementor-element-91d4751{
  background-color:transparent !important;
  background-image:var(--cmg-band-img) !important;
}

/* 118b. One rule for the whole palette, now that the bands blend:
   PALE BLUE ONLY EVER APPEARS AS A FADED FULL-BLEED BAND. Anything
   with a box around it is white with a 1px border.
   The last thing breaking that rule was the "On this page" contents
   box on Terms and Privacy - a pale blue rounded panel, which is
   exactly the bubble Chris is describing, just on a page he has not
   looked at yet. White, like every other card on the site. */
html body .cmg-legal-toc.cmg-legal-toc{
  background-color:#FFFFFF !important;
  background-image:none !important;
  border:1px solid #E3E8EF !important;
}

/* ============================================================
   119. The one photo band, faded top and bottom
   ------------------------------------------------------------
   Chris asked whether the blend could go on photo edges too.
   The site has exactly ONE full-bleed photograph - the portrait
   band on About (and the same file on Contact below 880px). That
   band is the direct equivalent of a colour band, so it gets the
   same treatment: masked to transparent over 72px at the top and
   bottom (44px on a phone) so it rises out of the page instead of
   being dropped onto it.
   Every OTHER photograph on the site sits in a 14px-radius frame
   inside the content column - gallery grid, hub shots, About
   portraits. Those are deliberately NOT faded; the reasoning is
   in the note to Chris, and in short it is that a soft edge makes
   a work photo read as decoration rather than as a record.
   ============================================================ */

html body .elementor-element-2ca5d2c0,
html body .elementor-element-614a4d66{
  -webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,0) 0px,#000 72px,#000 calc(100% - 72px),rgba(0,0,0,0) 100%) !important;
  mask-image:linear-gradient(180deg,rgba(0,0,0,0) 0px,#000 72px,#000 calc(100% - 72px),rgba(0,0,0,0) 100%) !important;
  -webkit-mask-repeat:no-repeat !important; mask-repeat:no-repeat !important;
  -webkit-mask-size:100% 100% !important; mask-size:100% 100% !important;
}
@media (max-width:880px){
  html body .elementor-element-2ca5d2c0,
  html body .elementor-element-614a4d66{
    -webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,0) 0px,#000 44px,#000 calc(100% - 44px),rgba(0,0,0,0) 100%) !important;
    mask-image:linear-gradient(180deg,rgba(0,0,0,0) 0px,#000 44px,#000 calc(100% - 44px),rgba(0,0,0,0) 100%) !important;
  }
}


/* 120b: gallery closing band must fade at its bottom edge too */
html body .elementor .elementor-element.elementor-element-440f12e7.elementor-element-440f12e7.elementor-element-440f12e7{ --cmg-band-img:var(--cmg-band-both) !important; }


/* 120c: the old box-shadow band technique left overflow:hidden and clip-path insets on the banded blocks, which clipped the new faded strips to the 1140px content box. Release them. */
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price){ overflow:visible !important; clip-path:none !important; isolation:auto !important; }
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)::before{ pointer-events:none !important; }


/* 120d: the banded h2 strip must sit in the same paint layer as the block strips, or it paints over the text of the block above it */
html body .cmg-page > h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){ isolation:auto !important; overflow:visible !important; clip-path:none !important; }


/* 120e: on desktop the sticky booking card sits in the side column, so two band runs can end up only ~88px apart and their fades leave a pale waist. Bridge across it. */
@media (min-width:881px){
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ .cmg-bk + h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){ --cmg-band-img:var(--cmg-band-flat) !important; }
html body .cmg-page > :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price):has(+ .cmg-bk + h2 + :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price))::before{ bottom:-140px !important; }
html body .cmg-page > .cmg-bk + h2:has(+ :is(.cmg-proof,.cmg-svc,.cmg-ans,.cmg-promise,.cmg-price)){ --cmg-band-img:var(--cmg-band-flat) !important; }
}


/* 120f: 116b put overflow-x:clip on main.site-main to catch the 100vw overhang, but on the classic page family MAIN IS THE 1140px CONTAINER, so it cropped every full-bleed band to the content column. html already carries overflow-x:clip, which does the same job at viewport level, so release main. */
html body main.site-main{ overflow-x:visible !important; }


/* 120g: the 100vw strips overhang the client area by the scrollbar width, so something full-width has to clip them. main.site-main is only 1140px on the classic pages (120f), and html overflow-x:clip does not stop the viewport scrolling sideways. BODY is exactly the client width, and because html already declares overflow-x:clip, body no longer propagates its overflow to the viewport, so this clips without freezing the page. If the html rule is ever removed, this line will stop the page scrolling. */
html body{ overflow-x:clip !important; }


/* ~~~~~ 54. THE OPENER STANDFIRST ON THE AREA PAGES (9 Sep 2026) ~~~~~ */
/* Chris: "this writing to the right inline with our branded text? it looks a bit small and basic.
   its the same on all the area pages." He was right, and it was a real fault rather than a matter of
   taste. .cmg-open-card carried LAYOUT rules only and no typography, because everywhere else on the
   site it holds the .cmg-book booking card, which styles itself. The area pages put a bare <p> in it
   instead, so that paragraph inherited no font-family at all and fell back to -apple-system at 16px
   while every other paragraph on the site is Poppins 17.5px. This gives it the same white-panel and
   orange-left-rule treatment the .cmg-promise block already uses, so it reads as part of the system
   rather than a new invention. The selector only ever matches a paragraph that is a DIRECT child of
   .cmg-open-card, so the booking card that fills this slot on the service pages is untouched. */
.cmg-open > .cmg-open-card > p{
  font-family:Poppins,sans-serif !important;
  font-size:18px !important;
  line-height:1.7 !important;
  font-weight:400 !important;
  color:#1B3461 !important;
  background:#fff;
  border-left:4px solid #EF7329;
  border-radius:0 14px 14px 0;
  padding:20px 24px !important;
  margin:0 !important;
  text-align:left !important;
  box-shadow:0 1px 2px rgba(28,52,98,.05), 0 2px 6px rgba(28,52,98,.06);
}
@media (max-width:1199px){
  .cmg-open > .cmg-open-card > p{ max-width:620px; margin:0 auto !important; }
}


/* ===== SECTION 55 - HEADER LOCKUP + TWO ROWS - 9 Sep 2026 =====
   Chris chose option 3: flame . CMG | Heating & Plumbing, CMG at option 1 cap height.
   The flame is a BACKGROUND IMAGE on the logo link (flex could not be stopped from
   stretching the <img>: at 768px and below it was rendering 246x54 from a 0.74 aspect
   source). The <img> stays in the markup, visually hidden, so its alt text survives.
   The name is live Poppins type, so it is sharp at every size.
   The navy trust strip is header.site-header::before, a flex item with flex-basis
   calc(100% + 64px); sticky top is -38px so it scrolls away and only the logo row pins.
   Doubled .site-header.site-header prefix is needed to beat body.home .site-header.
   Roll back: Tools > CMG CSS > History. ===== */
html body header.site-header.site-header .custom-logo-link{display:flex !important;flex-direction:row !important;align-items:center !important;gap:22px;text-decoration:none;width:auto !important;background:url(/wp-content/uploads/2026/08/CMG-Flame-1.png) no-repeat left center;background-size:auto 86px;padding-left:86px !important;min-height:86px;}
html body header.site-header.site-header .custom-logo-link img.custom-logo{position:absolute !important;width:1px !important;height:1px !important;min-width:0 !important;max-width:none !important;max-height:none !important;clip-path:inset(50%);overflow:hidden;margin:0 !important;padding:0 !important;}
html body header.site-header.site-header .custom-logo-link::before{content:"CMG";font-family:Poppins,sans-serif;font-weight:700;font-size:65px;line-height:.73;letter-spacing:-.012em;color:#1B3461;white-space:nowrap;}
html body header.site-header.site-header .custom-logo-link::after{content:"Heating & Plumbing";font-family:Poppins,sans-serif;font-weight:500;font-size:26px;line-height:1;color:#1B3461;white-space:nowrap;padding-left:22px;border-left:2px solid #DCE2EB;}
html body header.site-header.site-header{flex-wrap:wrap !important;align-items:center !important;align-content:flex-start !important;height:auto !important;min-height:0 !important;padding-top:14px !important;padding-bottom:0 !important;row-gap:0 !important;top:-38px !important;}
html body header.site-header.site-header .site-branding{flex:1 1 auto;margin:0 !important;padding:0 !important;}
html body header.site-header.site-header .site-navigation{flex:1 0 100% !important;justify-content:center;border-top:1px solid #EDF0F4;margin-top:8px !important;padding:0 !important;}
html body header.site-header.site-header .site-navigation .menu{padding:4px 0 !important;margin:0 !important;}
@media (max-width:1279px){html body header.site-header.site-header .custom-logo-link{gap:18px;background-size:auto 72px;padding-left:71px !important;min-height:72px;}html body header.site-header.site-header .custom-logo-link::before{font-size:54px;}html body header.site-header.site-header .custom-logo-link::after{font-size:22px;padding-left:18px;}}
@media (max-width:1023px){html body header.site-header.site-header .custom-logo-link{gap:16px;background-size:auto 64px;padding-left:63px !important;min-height:64px;}html body header.site-header.site-header .custom-logo-link::before{font-size:48px;}html body header.site-header.site-header .custom-logo-link::after{font-size:20px;padding-left:16px;}}
@media (max-width:880px){html body header.site-header.site-header{top:-34px !important;padding-top:10px !important;}}
@media (max-width:767px){html body header.site-header.site-header .custom-logo-link{gap:13px;background-size:auto 54px;padding-left:53px !important;min-height:54px;}html body header.site-header.site-header .custom-logo-link::before{font-size:39px;}html body header.site-header.site-header .custom-logo-link::after{font-size:16px;padding-left:13px;border-left-width:1px;}}
@media (max-width:419px){html body header.site-header.site-header .custom-logo-link{gap:11px;background-size:auto 46px;padding-left:45px !important;min-height:46px;}html body header.site-header.site-header .custom-logo-link::before{font-size:33px;}html body header.site-header.site-header .custom-logo-link::after{font-size:13.5px;padding-left:11px;}}
html body header.site-header.site-header.cmg-shrunk{padding-bottom:12px !important;}
html body header.site-header.site-header.cmg-shrunk .site-navigation{position:absolute !important;right:32px;bottom:14px;flex:0 0 auto !important;width:auto !important;border-top:0 !important;margin-top:0 !important;}
html body header.site-header.site-header.cmg-shrunk .site-navigation .menu > li:not(.cmg-book-cta):not(.cmg-phone){display:none !important;}



/* section 55b (scroll-collapse) REMOVED 9 Sep 2026: overflow:hidden clipped the
   dropdown submenus behind the page, and the collapse took the phone number and
   Book Online button off screen with it. Header now stays whole while scrolling. */
html body header.site-header.site-header{top:0 !important;}


/* --- section 55c: mobile header slimmed - 9 Sep 2026 ---------------------
   Chris: the header was taking most of a phone screen. Two changes, mobile only:
   1. The navy Google/trust strip runs full bleed instead of sitting as a 203px
      box in the middle (the max-width:880px rules had reset its flex-basis to
      auto, so it only shrink-wrapped its text).
   2. Book Online comes out of the header menu below 768px - every page already
      carries a Book online button in its opening card, so it was a duplicate
      costing a whole 44px row.
   Measured at 388px: header 253px -> 192px. Desktop untouched. --- */
@media (max-width:880px){
  html body header.site-header.site-header::before{
    flex:1 0 calc(100% + 24px) !important;
    width:calc(100% + 24px) !important;
    max-width:none !important;
    margin-left:-12px !important;
    margin-right:-12px !important;
  }
}
@media (max-width:767px){
  html body header.site-header.site-header .site-navigation .menu > li.cmg-book-cta{
    display:none !important;
  }
}


/* --- SECTION 56 - HEADER TIDY: SERVICES DROPDOWN, ABOUT PANEL, ONE ROW ---
   9 Sep 2026. Menu restructured first (see project doc CMG-Header-Menu-Structure):
   Services is a new non-navigating parent holding Boilers, Plumbing, Heat pumps,
   Bathrooms and Landlords; Areas covered moved under About; the landline item was
   deleted from the header menu. Top level went from 8 items to 4.
   With only 4 items the nav fits beside the logo again, so the header returns to
   ONE row above 1100px - 210px back down to 162px.
   The third menu level is rendered as columns inside the panel rather than as a
   flyout, so every service page keeps its link from every page on the site.
   NOTE: the navy trust strip is header::before and is a flex item, so the header
   must stay flex-wrap:wrap - setting nowrap puts the strip in the row and pushes
   the logo and nav off screen. Roll back: Tools > CMG CSS > History. --- */
@media (min-width:1100px){html body header.site-header.site-header{flex-wrap:wrap !important;padding-bottom:14px !important;}html body header.site-header.site-header .site-navigation{flex:0 1 auto !important;width:auto !important;margin-left:auto !important;margin-top:0 !important;border-top:0 !important;justify-content:flex-end;position:static !important;}html body header.site-header.site-header .site-navigation > .menu{position:static !important;}html body header.site-header.site-header .cmg-services-parent{position:static !important;}html body header.site-header.site-header .cmg-services-parent > a{cursor:default;}html body header.site-header.site-header .cmg-services-parent > .sub-menu{display:flex !important;gap:30px;position:absolute !important;left:0 !important;right:0 !important;top:100% !important;width:auto !important;max-width:none !important;min-width:0 !important;margin:0 !important;background:#1B3461 !important;padding:32px 32px 36px !important;border:0 !important;border-radius:0 !important;box-shadow:0 18px 34px rgba(20,42,74,.18) !important;opacity:0 !important;visibility:hidden !important;pointer-events:none !important;transform:none !important;transition:opacity .16s ease !important;}html body header.site-header.site-header .cmg-services-parent:hover > .sub-menu,html body header.site-header.site-header .cmg-services-parent:focus-within > .sub-menu{opacity:1 !important;visibility:visible !important;pointer-events:auto !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li{flex:1 1 0 !important;min-width:0 !important;position:static !important;background:transparent !important;border:0 !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > a{color:#fff !important;font-size:20px !important;font-weight:700 !important;padding:0 0 10px !important;background:transparent !important;display:block !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > a:hover{color:#EF7329 !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > .sub-menu{position:static !important;display:block !important;opacity:1 !important;visibility:visible !important;pointer-events:auto !important;transform:none !important;background:transparent !important;box-shadow:none !important;padding:0 !important;margin:0 !important;border:0 !important;width:auto !important;min-width:0 !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > .sub-menu > li{background:transparent !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > .sub-menu > li > a{color:rgba(255,255,255,.85) !important;font-size:15px !important;font-weight:500 !important;padding:5px 0 !important;background:transparent !important;display:block !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu > li > .sub-menu > li > a:hover{color:#EF7329 !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu{background:#1B3461 !important;padding:20px 24px !important;border:0 !important;min-width:220px !important;box-shadow:0 18px 34px rgba(20,42,74,.18) !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu li{background:transparent !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu li > a{color:rgba(255,255,255,.9) !important;background:transparent !important;padding:6px 0 !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu li > a:hover{color:#EF7329 !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu > li > .sub-menu{position:static !important;display:block !important;opacity:1 !important;visibility:visible !important;pointer-events:auto !important;transform:none !important;background:transparent !important;box-shadow:none !important;padding:0 0 0 14px !important;margin:0 !important;border:0 !important;min-width:0 !important;width:auto !important;}}@media (min-width:1100px){html body header.site-header.site-header .cmg-services-parent > .sub-menu{align-items:flex-start !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu a{border:0 !important;text-decoration:none !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu li{border:0 !important;}html body header.site-header.site-header .cmg-services-parent > .sub-menu .sub-arrow,html body header.site-header.site-header .cmg-services-parent > .sub-menu .sub-menu-toggle,html body header.site-header.site-header .cmg-services-parent > .sub-menu a::after,html body header.site-header.site-header .cmg-services-parent > .sub-menu a::before{display:none !important;content:none !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu a{border:0 !important;text-decoration:none !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu a::after,html body header.site-header.site-header li.menu-item-47 > .sub-menu a::before{display:none !important;content:none !important;}}@media (min-width:1100px){html body header.site-header.site-header .cmg-services-parent > .sub-menu li::after,html body header.site-header.site-header .cmg-services-parent > .sub-menu li::before,html body header.site-header.site-header li.menu-item-47 > .sub-menu li::after,html body header.site-header.site-header li.menu-item-47 > .sub-menu li::before{display:none !important;content:none !important;}}@media (min-width:1100px){html body header.site-header.site-header li.menu-item-47 > .sub-menu li{border:0 !important;}html body header.site-header.site-header li.menu-item-47 > .sub-menu ul{border:0 !important;}}


/* --- SECTION 56b REMOVED 9 Sep 2026 -------------------------------------
   56b was the stopgap that hid the Services label on mobile and laid its five
   children out inline, because the site had no menu button and the hover
   dropdown was unreachable on a phone. It cost height (244px header) and it
   set visibility:hidden and height:0 on the Services link, which would fight
   section 57 below. Superseded by the real menu button. Do not reinstate.
   Roll back: Tools > CMG CSS > History. --- */


/* === SECTION 57 - THE MOBILE MENU (v2, the RJ Martindale shape) ============
   9 September 2026. v1 (this morning) put a white drawer on screen with every
   link expanded - 26 rows, 1,008px of content. Chris, with a photo of his phone
   and two of rjmartindale.co.uk: "Rj martindales mobile view drops down to a
   menu like this, rather than being overwhelmed with text."

   So v2 is a NAVY DRAWER THAT STARTS CLOSED. Four rows: Book Online at the top
   as the orange pill, then Services, About, Contact. Services and About carry a
   chevron and open on tap; everything under them is hidden until then. Nothing
   was removed from the menu - the same 26 links are all still one or two taps
   away, and all still in the HTML for search engines.

   ALSO FIXES A REGRESSION FROM v1. v1 dropped "Heating & Plumbing" off the
   logo below 420px because the one-line lockup plus a 46px button did not fit
   in 351px. That was the wrong trade: the words are the business. Below 768px
   the trade name now sits UNDER "CMG" instead of beside it, which fits at 320px
   with room to spare and reads better. The 420-519px size step v1 added is gone
   with it - stacking removes the problem it was patching.

   HOW IT WORKS. WPCode snippet 1766 ("CMG mobile menu button", JS, site-wide
   footer) appends <button class="cmg-burger"> to header.site-header, toggles
   .cmg-nav-open on the header, tags every item that has children with
   .cmg-has-kids, and toggles .cmg-open on one of those when it is tapped
   (siblings close, so only one branch is open at a time). Above 1099px the
   click handler returns immediately, so the desktop hover panels are untouched.

   SCOPING NOTE, READ BEFORE EDITING. The header and footer menus share one
   ul.menu; the footer items are hidden by cmg-f-* classes. So the drawer must
   NOT do `.menu > li{display:block}` - that would unhide every footer item.
   Top level is listed explicitly: .cmg-services-parent, #menu-item-47 (About),
   #menu-item-50 (Contact), .cmg-book-cta. ADD A NEW TOP-LEVEL MENU ITEM AND ITS
   SELECTOR MUST BE ADDED THERE or it will not appear on a phone. Children come
   through the .sub-menu rules and need nothing.

   TWO THINGS THAT ARE NOT OBVIOUS:
   1. The header is flex-direction:column below 1100px, so the button lands
      UNDER the logo unless it is forced back to row+wrap. Never nowrap - the
      trust strip is header::before with flex-basis calc(100% + 24px) and taking
      wrap away throws the logo off screen (recorded 9 Sep, x-2443).
   2. Book Online keeps brand flame with NAVY text, 4.9:1. White on that orange
      is 2.95:1 and fails AA. See section 61.
   Roll back: Tools > CMG CSS > History. ====================================== */

html body header.site-header.site-header .cmg-burger{display:none;}

@media (max-width:1099px){
/* the header is flex-direction:column below 1100px; force the logo row back to a row */
html body header.site-header.site-header{flex-direction:row !important;flex-wrap:wrap !important;align-items:center !important;}
/* capped so the logo can never push the button onto a second row (it did at 320-375) */
html body header.site-header.site-header .site-branding{flex:0 1 auto !important;justify-content:flex-start !important;min-width:0 !important;max-width:calc(100% - 60px) !important;}
html body header.site-header.site-header .custom-logo-link{justify-content:flex-start !important;}

/* the button */
html body header.site-header.site-header .cmg-burger{display:flex !important;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:46px;height:46px;margin-left:auto;padding:0;border:0;background:none;cursor:pointer;flex:0 0 auto;}
html body header.site-header.site-header .cmg-burger span{display:block;width:26px;height:3px;background:#1B3461;border-radius:2px;transition:transform .18s ease,opacity .18s ease;}
html body header.site-header.site-header .cmg-burger:focus-visible{outline:3px solid #1B3461;outline-offset:3px;}
html body header.site-header.site-header.cmg-nav-open .cmg-burger span:nth-child(1){transform:translateY(8px) rotate(45deg);}
html body header.site-header.site-header.cmg-nav-open .cmg-burger span:nth-child(2){opacity:0;}
html body header.site-header.site-header.cmg-nav-open .cmg-burger span:nth-child(3){transform:translateY(-8px) rotate(-45deg);}

/* closed */
html body header.site-header.site-header .site-navigation{display:none !important;}

/* the drawer */
html body header.site-header.site-header.cmg-nav-open .site-navigation{display:block !important;position:absolute !important;left:0 !important;right:0 !important;top:100% !important;width:auto !important;flex:none !important;margin:0 !important;padding:8px 20px 20px !important;background:#1B3461 !important;border:0 !important;box-shadow:0 22px 40px rgba(10,22,44,.28) !important;max-height:calc(100vh - 120px) !important;overflow-y:auto !important;-webkit-overflow-scrolling:touch;z-index:9999 !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu{display:flex !important;flex-direction:column !important;padding:0 !important;margin:0 !important;gap:0 !important;background:none !important;}

/* TOP LEVEL IS LISTED EXPLICITLY - the footer menu shares this ul, a blanket rule unhides it */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-services-parent,html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-47,html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-50,html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-book-cta{display:block !important;width:100% !important;flex:none !important;position:static !important;text-align:left !important;background:none !important;}
/* Book Online sits at the top of the drawer */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-book-cta{order:-1 !important;}

html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li > a{display:block !important;position:relative !important;padding:16px 34px 16px 0 !important;font-size:19px !important;font-weight:600 !important;color:#fff !important;background:none !important;border-bottom:1px solid rgba(255,255,255,.16) !important;text-align:left !important;text-decoration:none !important;white-space:normal !important;line-height:1.25 !important;}

/* the Services row is a real row now, not a grey label - it opens on tap */
html body header.site-header.site-header.cmg-nav-open .cmg-services-parent > a{display:block !important;visibility:visible !important;height:auto !important;overflow:visible !important;color:#fff !important;font-size:19px !important;letter-spacing:normal !important;text-transform:none !important;padding:16px 34px 16px 0 !important;border-bottom:1px solid rgba(255,255,255,.16) !important;}

/* everything is CLOSED until tapped */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu .sub-menu{display:none !important;position:static !important;opacity:1 !important;visibility:visible !important;pointer-events:auto !important;transform:none !important;background:none !important;box-shadow:none !important;border:0 !important;padding:0 0 8px !important;margin:0 !important;width:auto !important;min-width:0 !important;max-width:none !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li.cmg-open > .sub-menu{display:block !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu .sub-menu > li{display:block !important;width:100% !important;flex:none !important;position:static !important;background:none !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu .sub-menu > li > a{display:block !important;position:relative !important;padding:13px 34px 13px 14px !important;font-size:17px !important;font-weight:500 !important;color:rgba(255,255,255,.88) !important;background:none !important;border-bottom:1px solid rgba(255,255,255,.10) !important;text-align:left !important;white-space:normal !important;line-height:1.25 !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu .sub-menu .sub-menu > li > a{padding-left:30px !important;font-size:15.5px !important;color:rgba(255,255,255,.72) !important;}

/* the chevron - a rotated corner, no icon font needed */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li.cmg-has-kids > a::after{content:"" !important;display:block !important;position:absolute !important;right:6px !important;top:50% !important;width:9px !important;height:9px !important;border-right:2px solid rgba(255,255,255,.75) !important;border-bottom:2px solid rgba(255,255,255,.75) !important;transform:translateY(-70%) rotate(-45deg) !important;transition:transform .18s ease !important;background:none !important;margin:0 !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li.cmg-has-kids.cmg-open > a::after{transform:translateY(-30%) rotate(45deg) !important;}
/* the theme hangs its own arrows on li::after - not wanted here */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li::after,html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li::before{display:none !important;content:none !important;}

/* Book Online keeps the site button: brand flame with NAVY text, 4.9:1 */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-book-cta > a{background:#EF7329 !important;color:#16294E !important;border-radius:999px !important;border-bottom:0 !important;text-align:center !important;padding:15px 20px !important;margin:6px 0 16px !important;font-size:17px !important;font-weight:600 !important;}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-book-cta > a::after{display:none !important;content:none !important;}
}

/* --- the lockup on a phone: the trade name goes UNDER the name, not beside it --- */
@media (max-width:767px){
html body header.site-header.site-header .custom-logo-link{flex-wrap:wrap !important;align-content:center !important;gap:0 !important;row-gap:1px !important;background-size:auto 46px !important;padding-left:58px !important;min-height:52px !important;}
html body header.site-header.site-header .custom-logo-link::before{font-size:34px !important;line-height:1 !important;}
html body header.site-header.site-header .custom-logo-link::after{flex:1 0 100% !important;font-size:14px !important;font-weight:500 !important;line-height:1.1 !important;padding-left:0 !important;border-left:0 !important;}
}


/* ~~~~~ 58. "AREAS COVERED" IN THE MOBILE DRAWER (9 Sep 2026) ~~~~~ */
/* The drawer's top level is whitelisted by selector - see the "TOP LEVEL IS LISTED EXPLICITLY" rule
   above and its own warning that a new top-level item must be added to that list. Chris asked for
   "Areas covered" to sit at the top level of the nav rather than under About; moving it there left
   it off that whitelist, so in the mobile drawer it rendered centred and half width while Services,
   About, Contact and Book Online rendered as full-width left-aligned rows. This adds it, as its own
   rule rather than an edit to theirs, because another session is working on the header at the same
   time and an append cannot clobber their work. Same six declarations, copied exactly. */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-1749{display:block !important;width:100% !important;flex:none !important;position:static !important;text-align:left !important;background:none !important;}


/* --- SECTION 57b - THE DRAWER CHRIS APPROVED, 9 Sep 2026 15:45 ------------
   Went through the ?cmgcss=draft switch first and was approved on his phone:
   "Yes like this. Yes fill the space with credentials, or google button or some
   writing quoted from a review. Also look at the buttons beyond the drop downs
   and look at upgrading them so they stand out."

   Three things:
   1. The drawer FILLS the screen under the header, so the navy menu no longer
      sits on top of the navy booking box behind it. An orange rule marks where
      the header stops. Height comes from --cmg-hdr-h, set by snippet 1766 from
      the header's measured height, because that changes with the breakpoint.
   2. Services, Areas covered and About are raised panels with a chevron so they
      read as tappable; Contact is an outlined pill; Book Online stays solid
      orange. Four distinct things instead of a list of text.
   3. The space underneath carries the Google rating (the link is lifted off the
      page's own badge at runtime, never retyped), one verbatim sentence from
      Andrew F's 5-star review, and the credentials line.

   NOTE: Areas covered (menu item 1749) is TOP LEVEL with the six towns under it.
   It is not under About. Any list of top-level items must include it.
   Roll back: Tools > CMG CSS > History. ---------------------------------- */

/* 9 Sep 2026. Chris said yes to the full-height drawer, then: "fill the space with
   credentials, or google button or some writing quoted from a review. Also look at
   the buttons beyond the drop downs and look at upgrading them so they stand out." */
@media (max-width:1099px){

/* --- the drawer fills the screen under the header --- */
html body header.site-header.site-header.cmg-nav-open .site-navigation{
  min-height:calc(100vh - var(--cmg-hdr-h, 106px)) !important;
  max-height:calc(100vh - var(--cmg-hdr-h, 106px)) !important;
  min-height:calc(100dvh - var(--cmg-hdr-h, 106px)) !important;
  max-height:calc(100dvh - var(--cmg-hdr-h, 106px)) !important;
  border-top:3px solid #EF7329 !important;
  box-shadow:none !important;
  padding:14px 20px 24px !important;
}

/* --- the two rows that open now read as tappable panels --- */
/* Areas covered (1749) is its own top-level item with the six towns under it -
   NOT under About, whatever the earlier note said. It gets the same panel. */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li.cmg-services-parent > a,
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-1749 > a,
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-47 > a{
  background:rgba(255,255,255,.07) !important;
  border:1px solid rgba(255,255,255,.16) !important;
  border-radius:14px !important;
  padding:17px 44px 17px 18px !important;
  margin:0 0 10px !important;
}
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu li.cmg-has-kids > a::after{ right:18px !important; }

/* --- Contact is a button, not a line of text --- */
html body header.site-header.site-header.cmg-nav-open .site-navigation .menu > li#menu-item-50 > a{
  background:transparent !important;
  border:2px solid rgba(255,255,255,.55) !important;
  border-radius:999px !important;
  text-align:center !important;
  padding:14px 20px !important;
  margin:4px 0 0 !important;
  font-size:17px !important;
}

/* --- the space under the menu now carries the proof --- */
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-foot{
  margin-top:20px !important;
  padding-top:18px !important;
  border-top:1px solid rgba(255,255,255,.16) !important;
  text-align:center !important;
}
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-google{
  display:inline-flex !important; align-items:center !important; gap:9px !important;
  background:#fff !important; color:#16294E !important;
  border-radius:999px !important; padding:11px 18px !important;
  font-size:14.5px !important; font-weight:600 !important;
  text-decoration:none !important; border:0 !important;
}
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-google .cmg-menu-stars{ color:#F5A623 !important; letter-spacing:1px !important; font-size:14.5px !important; }
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-quote{
  margin:15px 0 0 !important; padding:0 2px !important; border:0 !important;
  color:rgba(255,255,255,.93) !important; font-size:15px !important;
  line-height:1.5 !important; font-style:italic !important;
}
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-quote cite{
  display:block !important; margin-top:9px !important; font-style:normal !important;
  font-size:14px !important; letter-spacing:.07em !important; text-transform:uppercase !important;
  color:rgba(255,255,255,.62) !important;
}
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-cred{
  margin:15px 0 0 !important; font-size:14px !important; line-height:1.5 !important;
  color:rgba(255,255,255,.75) !important;
}
}



/* --- SECTION 57c - FIX, 9 Sep 2026 15:05 UTC, minutes after 57b went live ---
   57b's proof block (Google rating, review quote, credentials) is built by
   snippet 1766 and appended to the nav on EVERY width, but it was only STYLED
   inside @media (max-width:1099px). Above that it rendered unstyled inside the
   desktop nav and pushed the header from 162px to 280px. Caught by measuring the
   desktop at 1440 straight after publishing; live for a few minutes.

   It is now hidden everywhere and shown only inside the OPEN mobile drawer, so
   there is no width at which it can appear where it does not belong.
   LESSON: when JS adds an element at all widths, the CSS that hides it must be
   unconditional - a rule that only styles it inside a media query is not enough.
   Roll back: Tools > CMG CSS > History. ---------------------------------- */
html body header.site-header.site-header .cmg-menu-foot{display:none !important;}
@media (max-width:1099px){
html body header.site-header.site-header.cmg-nav-open .site-navigation .cmg-menu-foot{display:block !important;}
}
