/* Parts the page styles don't cover: what site.js draws, plus the states it switches on. */
html, body { overflow-x: clip; }

/* Menus */
.elementor-nav-menu--dropdown.elementor-nav-menu__container { z-index: 9997; }
.elementor-nav-menu--main .menu-item-has-children { position: relative; }
.elementor-nav-menu--main .sub-menu { display: none; position: absolute; left: 0; top: 100%; width: max-content; min-width: 12em; z-index: 9999; list-style: none; margin: 0; padding: 0; }
.elementor-nav-menu--main .is-open > .sub-menu { display: block; }
.elementor-nav-menu--dropdown .sub-menu { display: none; list-style: none; margin: 0; padding: 0; }
.elementor-nav-menu--dropdown .is-open > .sub-menu { display: block; }

/* Sliders */
.elementor-image-carousel-wrapper { overflow: hidden; touch-action: pan-y; }
.elementor-image-carousel-wrapper .swiper-wrapper { transition-timing-function: ease; }
.swiper-pagination-bullet { display: inline-block; width: 6px; height: 6px; margin: 0 4px; border-radius: 50%; background: #000; opacity: .2; cursor: pointer; }
.swiper-pagination-bullet-active { opacity: 1; }

/* Photo galleries */
.e-gallery-ready { position: relative; }
.e-gallery-ready .e-gallery-item { position: absolute; display: block; }
.e-gallery-ready .e-gallery-image { height: 100%; }

/* Lightbox */
.site-lightbox { width: 100vw; height: 100vh; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; background: rgba(0,0,0, .87); }
.site-lightbox[open] { display: flex; align-items: center; justify-content: center; }
.site-lightbox img { max-width: 86vw; max-height: 90vh; object-fit: contain; }
.site-lightbox button { position: absolute; background: none; border: 0; color: #fff; font-size: 40px; line-height: 1; padding: 16px; cursor: pointer; }
.site-lightbox .lb-close { top: 0; right: 0; }
.site-lightbox .lb-prev { left: 0; top: 50%; transform: translateY(-50%); }
.site-lightbox .lb-next { right: 0; top: 50%; transform: translateY(-50%); }
.site-lightbox.single .lb-prev, .site-lightbox.single .lb-next { display: none; }

/* In-Home Consultation button and its booking window */
.cal-fab, .cal-fab:hover { color: #fff !important; }
.site-started .cal-fab { display: flex; }
.cal-fab { position: fixed; right: 40px; bottom: 24px; z-index: 9990; display: none; align-items: center; height: 64px; padding: 16px 24px; gap: 12px; border-radius: 9999px; background: #18be05; font: 500 16px/24px Inter, ui-sans-serif, system-ui, sans-serif; text-decoration: none; filter: drop-shadow(0 4px 3px rgba(0,0,0, .07)) drop-shadow(0 2px 2px rgba(0,0,0, .06)); transition: transform .15s ease-in-out; }
.cal-fab:hover { transform: scale(1.05); }
.cal-fab svg { flex: none; width: 28px; height: 28px; }
@media (max-width: 767px) { .cal-fab { right: 16px; bottom: 16px; } }
.cal-modal { width: min(1040px, 94vw); height: 90vh; max-height: none; padding: 0; border: 0; background: transparent; overflow: visible; }
.cal-modal::backdrop { background: rgba(0,0,0, .6); }
.cal-modal iframe { width: 100%; height: 100%; border: 0; }
.cal-modal button { position: absolute; top: -38px; right: 0; padding: 0 4px; background: none !important; border: 0; color: #fff !important; font-size: 34px; line-height: 1; cursor: pointer; }

[id^="my-cal-inline"] { scrollbar-width: none; }

/* Form note */
.form-not-connected { width: 100%; margin-top: 10px; font-size: 14px; }

/* Gallery layout rules (grid and masonry), taken from the site's own widget styles. */
.elementor-gallery__container{min-height:1px}
.elementor-gallery-item{border:solid var(--image-border-width) var(--image-border-color);border-radius:var(--image-border-radius);display:block;overflow:hidden;position:relative;text-decoration:none}
.elementor-gallery-item__image.e-gallery-image{transition-duration:var(--image-transition-duration);transition-property:filter,transform}
.e-gallery-item.elementor-gallery-item{transition-property:all}
.e-con-inner>.elementor-widget-gallery,.e-con>.elementor-widget-gallery{width:var(--container-widget-width);--flex-grow:var( --container-widget-flex-grow )}
.e-gallery-container{position:relative;display:flex;flex-wrap:wrap}
.e-gallery-container:not(.e-gallery-grid){transition:padding-bottom var(--animation-duration)}
.e-gallery-item{position:relative;flex-grow:0;flex-shrink:0;transition-property:all;transition-duration:var(--animation-duration)}
.e-gallery-item:not(:hover) .e-gallery-overlay{display:none}
.e-gallery-item.e-gallery-item--hidden{transform:scale3d(0, 0, 0);opacity:0}
.e-gallery-image{background-position:center center;background-size:cover;width:100%;transform-origin:center top;transition:var(--animation-duration)}
.e-gallery-overlay{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-evenly;flex-wrap:wrap;flex-direction:column;color:#fff;background-color:rgba(0,0,0,0.5)}
.e-gallery-overlay__title{font-size:24px}
.e-gallery-grid:not(.e-gallery--animated){display:grid;grid-gap:var(--vgap) var(--hgap);grid-template-columns:repeat(var(--columns), 1fr)}
.e-gallery-grid:not(.e-gallery--animated) .e-gallery-item--hidden{position:absolute}
.e-gallery-grid.e-gallery--animated{padding-bottom:var(--container-aspect-ratio)}
.e-gallery-grid.e-gallery--animated .e-gallery-item{--item-width: calc((100% - ((var(--columns) - 1) * var(--hgap))) / var(--columns));position:absolute;top:calc(((100% / var(--rows)) + (var(--vgap) / var(--rows))) * var(--row));width:var(--item-width)}
.e-gallery-grid .e-gallery-image{padding-bottom:var(--aspect-ratio)}
.e-gallery-justified{padding-bottom:calc(var(--container-aspect-ratio) * 100%)}
.e-gallery-justified .e-gallery-item{position:absolute;width:calc(var(--item-width) * (100% - var(--hgap) * var(--gap-count)));height:var(--item-height);top:calc(var(--item-top) + (var(--row) * var(--vgap)))}
.e-gallery-justified .e-gallery-image{height:100%}
.e-gallery-masonry{height:0;margin-bottom:calc(var(--highest-column-gap-count) * var(--vgap))}
.e-gallery-masonry .e-gallery-item{position:absolute;width:calc(100% / var(--columns) - (var(--hgap) * (var(--columns) - 1) / var(--columns)));top:calc(var(--percent-height) + (var(--items-in-column) * var(--vgap)))}
.e-gallery-masonry .e-gallery-image{padding-bottom:var(--item-height)}
.e-gallery--ltr.e-gallery-grid.e-gallery--animated .e-gallery-item{left:calc(var(--item-width) * var(--column) + (var(--hgap) * var(--column)))}
.e-gallery--ltr.e-gallery-justified .e-gallery-item{left:calc(var(--item-start) * (100% - var(--hgap) * var(--gap-count)) + var(--hgap) * var(--item-row-index))}
.e-gallery--ltr.e-gallery-masonry .e-gallery-item{left:calc((100% / var(--columns) - (var(--hgap) * (var(--columns) - 1) / var(--columns))) * var(--column) + (var(--hgap) * var(--column)))}
.e-gallery--rtl.e-gallery-grid.e-gallery--animated .e-gallery-item{right:calc(var(--item-width) * var(--column) + (var(--hgap) * var(--column)))}
.e-gallery--rtl.e-gallery-justified .e-gallery-item{right:calc(var(--item-start) * (100% - var(--hgap) * var(--gap-count)) + var(--hgap) * var(--item-row-index))}
.e-gallery--rtl.e-gallery-masonry .e-gallery-item{right:calc((100% / var(--columns) - (var(--hgap) * (var(--columns) - 1) / var(--columns))) * var(--column) + (var(--hgap) * var(--column)))}
.e-gallery--lazyload .e-gallery-image:not(.e-gallery-image-loaded){filter:opacity(0);transform:scale(0.5)}

/* Menu: pinned to the top while scrolling, with no solid bar behind it (owner request 2026-11-07).
   The logo, menu bar, social icons and Free Estimate button have their own backgrounds; the phone number is white text with none, so it is hidden while pinned. */
.ehf-header #masthead{position:sticky;top:0;z-index:999}
section.site-sticky{position:sticky;top:0;z-index:999}
/* site.js sets a negative `top` on the pinned header: its upper part (phone number, logo, Free Estimate) scrolls away with the page and only the menu bar stays pinned. */

/* Header logo: the black logo fills its whole white box (no white margin around it). Box size is the one the header always had. */
#masthead .elementor-element-7c60c1e1>.elementor-widget-container{padding:0;height:102px}
#masthead .elementor-element-7c60c1e1 a{display:block;height:100%}
#masthead .elementor-element-7c60c1e1 img{display:block;width:100%;height:100%;object-fit:cover}
@media(max-width:767px){#masthead .elementor-element-7c60c1e1>.elementor-widget-container{height:82px}}

/* Fit-together gallery: photos keep their own shape in full-width rows, positioned by site.js. */
.gallery-justified .elementor-gallery__container{position:relative;display:block}
.gallery-justified .e-gallery-item{display:block}
.gallery-justified .e-gallery-image{width:100%;height:100%;padding-bottom:0;background-size:cover;background-position:center}

/* Google reviews slider (replaces the old Trustindex box). Variants: full (big cards), compact (small cards), hero (one small card). */
.grv{--grv-gap:20px;--grv-blue:#0b0b0c;--grv-orange:#d5a944;position:relative;width:100%;font-family:Inter,sans-serif;color:#3a3a3a;text-align:left}
.grv *{box-sizing:border-box}
.grv-head{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px 14px;margin:0 0 22px;text-align:center}
.grv-score{font:700 32px/1 Outfit,Inter,sans-serif;color:#050505}
.grv-sub{font-size:14px;color:#3a3a3a}
.grv-link{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:var(--grv-blue);text-decoration:none;border:1px solid #e4dcc8;border-radius:999px;padding:7px 14px;background:#fff}
.grv-link:hover{border-color:var(--grv-blue)}
.grv-stars{display:inline-flex;gap:2px;line-height:0}
.grv-stars svg{width:18px;height:18px;fill:#fbbc04}
.grv-g{width:22px;height:22px;flex:none}
.grv-wrap{position:relative}
.grv-track{display:flex;gap:var(--grv-gap);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;padding:4px 2px 14px;-webkit-overflow-scrolling:touch}
.grv-track::-webkit-scrollbar{display:none}
.grv-card{flex:0 0 calc((100% - 2 * var(--grv-gap)) / 3);scroll-snap-align:start;display:flex;flex-direction:column;gap:12px;background:#fff;border:1px solid #e6ebf5;border-radius:16px;box-shadow:0 4px 20px rgba(11,11,12,.10);padding:22px;min-width:0}
.grv-who{display:flex;align-items:center;gap:12px}
.grv-av{width:44px;height:44px;border-radius:50%;object-fit:cover;flex:none;background:#e8edf8}
.grv-name{font:600 16px/1.2 Outfit,Inter,sans-serif;color:#050505}
.grv-when{font-size:13px;color:#6b7686}
.grv-who .grv-g{margin-left:auto}
.grv-text{font-size:15px;line-height:1.6;margin:0;color:#3a3a3a}
.grv-photos{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto}
.grv-photos a{display:block;line-height:0;border-radius:10px;overflow:hidden}
.grv-photos img{width:84px;height:84px;object-fit:cover;display:block}
.grv-more{align-self:flex-start;background:none;border:0;padding:0;font:600 14px Inter,sans-serif;color:var(--grv-blue);cursor:pointer}
.grv-nav{position:absolute;top:50%;transform:translateY(-60%);width:42px;height:42px;border-radius:50%;border:1px solid #e4dcc8;background:#fff;color:var(--grv-blue);box-shadow:0 2px 10px rgba(0,0,0,.12);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2;padding:0}
.grv-nav:hover{background:var(--grv-blue);color:#fff}
.grv-nav svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.grv-prev{left:-12px}.grv-next{right:-12px}
.grv-dots{display:flex;justify-content:center;gap:8px;margin-top:6px}
.grv-dots button{width:9px;height:9px;border-radius:50%;border:0;padding:0;background:#d9cfb6;cursor:pointer}
.grv-dots button.is-on{background:var(--grv-orange);transform:scale(1.25)}
/* compact: smaller cards, text cut to 4 lines with Read more */
.grv-compact{--grv-gap:16px}
.grv-compact .grv-head{margin-bottom:16px}
.grv-compact .grv-score{font-size:26px}
.grv-compact .grv-card{padding:16px;gap:9px;border-radius:14px}
.grv-compact .grv-av{width:36px;height:36px}
.grv-compact .grv-name{font-size:15px}
.grv-compact .grv-text{font-size:14px;line-height:1.5;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden}
.grv-compact .grv-card.is-open .grv-text{display:block;-webkit-line-clamp:unset}
.grv-compact .grv-photos img{width:52px;height:52px}
/* hero: one small card at a time, sits on top of the hero photo */
.grv-hero{max-width:430px;margin:0 auto}
.grv-hero .grv-head{margin-bottom:10px;gap:6px 10px}
.grv-hero .grv-score,.grv-hero .grv-sub{color:#fff}
.grv-hero .grv-score{font-size:22px}
.grv-hero .grv-sub{font-size:13px}
.grv-hero .grv-card{flex-basis:100%;padding:14px 16px;gap:8px;border-radius:14px}
.grv-hero .grv-av{width:34px;height:34px}
.grv-hero .grv-name{font-size:15px}
.grv-hero .grv-text{font-size:13.5px;line-height:1.5;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.grv-hero .grv-nav{width:32px;height:32px}
.grv-hero .grv-prev{left:-14px}.grv-hero .grv-next{right:-14px}
.grv-hero .grv-nav svg{width:15px;height:15px}
@media(max-width:1024px){.grv-card{flex-basis:calc((100% - var(--grv-gap)) / 2)}.grv-prev{left:-6px}.grv-next{right:-6px}}
@media(max-width:767px){.grv-card{flex-basis:100%}.grv-score{font-size:28px}.grv-hero .grv-prev{left:-8px}.grv-hero .grv-next{right:-8px}}
@media(prefers-reduced-motion:reduce){.grv-track{scroll-behavior:auto}}
/* Reviews slider: stronger selectors so the theme's generic button and image rules do not override them. */
.grv img.grv-av{border-radius:50%;width:44px;height:44px}
.grv-compact img.grv-av{width:36px;height:36px}
.grv-hero img.grv-av{width:34px;height:34px}
.grv button.grv-nav{background:#fff;color:var(--grv-blue);border:1px solid #e4dcc8;border-radius:50%;width:42px;height:42px;padding:0;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.grv button.grv-nav:hover,.grv button.grv-nav:focus{background:var(--grv-blue);color:#fff}
.grv-hero button.grv-nav{width:32px;height:32px}
.grv button.grv-more{background:none;color:var(--grv-blue);border:0;border-radius:0;padding:0;box-shadow:none}
.grv button.grv-more:hover,.grv button.grv-more:focus{background:none;color:var(--grv-orange)}
.grv .grv-dots button{background:#d9cfb6;border-radius:50%;width:9px;height:9px;padding:0}
.grv .grv-dots button.is-on{background:var(--grv-orange)}
.grv .grv-photos img{border-radius:0}
/* Full variant: two wide cards per view on desktop and tablet, one on phones. */
.grv-full .grv-card{flex-basis:calc((100% - var(--grv-gap)) / 2);padding:26px 28px}
.grv-full .grv-text{font-size:16px}
@media(max-width:767px){.grv-full .grv-card{flex-basis:100%;padding:20px}}
.grv-compact .grv-track,.grv-hero .grv-track{align-items:flex-start}
.grv button.grv-more{text-transform:none;letter-spacing:0;font-size:14px;line-height:1.4}
@media(max-width:767px){.grv button.grv-nav{display:none}.grv-hero{padding:0 16px;max-width:100%}}
@media(max-width:767px){.grv-hero{padding:0;margin:0;width:calc(100vw - 40px);max-width:430px}}
@media(max-width:767px){.grv{max-width:calc(100vw - 40px)}}
/* Reviews: each card keeps its own height (no stretched empty space below short reviews). */
.grv-track{align-items:flex-start}

/* Home hero: photo slideshow behind the text, dark overlay for contrast, white letters. */
.hero-slides{position:absolute;inset:0;overflow:hidden;z-index:0;background:#0b1530}
.hero-slides .hero-slide{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .6s ease}
.hero-slides .hero-slide.is-on{opacity:1}
.elementor-2325 .elementor-element.elementor-element-5f09312f>.elementor-background-overlay{background-color:transparent;background-image:linear-gradient(180deg,rgba(5,5,5,.72) 0%,rgba(5,5,5,.5) 45%,rgba(5,5,5,.78) 100%);opacity:1}
.elementor-2325 .elementor-element.elementor-element-5f09312f .elementor-heading-title,
.elementor-2325 .elementor-element.elementor-element-5f09312f .elementor-icon-list-text{color:#fff;text-shadow:0 2px 16px rgba(0,0,0,.45)}
@media(prefers-reduced-motion:reduce){.hero-slides .hero-slide{transition:none}}
.elementor-2325 .elementor-element.elementor-element-5f09312f{background-image:none!important}
.hero-slides picture{display:contents}
/* Gallery tiles are real <img> elements now (native lazy loading); they fill the tile like the old background did. */
.e-gallery-image{position:relative;overflow:hidden}
.e-gallery-image>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;max-width:none}

/* menu-toggle icons */
.elementor-menu-toggle:not(.elementor-active) .elementor-menu-toggle__icon--close{display:none}
.elementor-menu-toggle.elementor-active .elementor-menu-toggle__icon--open{display:none}
.screen-reader-text{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* fixwave: Outfit heading font for the legacy pages (same subset files as the Elementor bundles; variable font, one file per range) */
@font-face{font-family:"Outfit";font-style:normal;font-weight:100 900;font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(assets/uploads/elementor/google-fonts/fonts/outfit-qgyvz_mvcbenp4njuktqq4e.woff2) format("woff2")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:100 900;font-display:swap;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;src:url(assets/uploads/elementor/google-fonts/fonts/outfit-qgyvz_mvcbenp4njtetq.woff2) format("woff2")}
.e-landing-page-template h1.elementor-heading-title{font-family:"Outfit",sans-serif!important}
/* lp-* pages: call/text buttons above the form on phones */
.lp-quick-contact{display:none}
@media (max-width:767px){.lp-quick-contact{display:flex;gap:10px;margin:0 0 16px}}
.lp-quick-contact__btn,.form-fallback__btn{flex:1;display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:10px 14px;border-radius:6px;background:#d5a944;color:#0b0b0c;font:700 15px/1.2 Inter,sans-serif;text-decoration:none;text-align:center}
.lp-quick-contact__btn--alt,.form-fallback__btn--alt{background:#0b0b0c}
.lp-quick-contact a.lp-quick-contact__btn,.form-fallback a.form-fallback__btn{color:#fff!important;white-space:nowrap}
.lp-quick-contact__btn:hover,.form-fallback__btn:hover{filter:brightness(.92)}
/* form fallback card (no form endpoint yet) */
.form-fallback{margin-top:16px;padding:18px;border-radius:10px;background:#fff;color:#3a3a3a;box-shadow:0 6px 24px rgba(5,5,5,.18);width:100%}
.form-fallback__title{margin:0 0 6px;font:700 19px/1.3 "Outfit",sans-serif;color:#050505}
.form-fallback__text{margin:0 0 12px;font:400 15px/1.5 Inter,sans-serif}
.form-fallback__actions{display:flex;flex-wrap:wrap;gap:10px}
/* /faqs/: Q&As are <details open> so they keep the old look */
details.elementskit-single-faq>summary{display:block;list-style:none;cursor:default}
details.elementskit-single-faq>summary::-webkit-details-marker{display:none}
/* review slider: 24px hit areas without changing the look */
.grv-dots{gap:0}
.grv-dots button{box-sizing:content-box;border:7.5px solid transparent!important;background-clip:content-box!important}
.grv-more{display:inline-flex;align-items:center;min-height:24px}
/* /services/: no blank band between the hero and "Our services" (the removed template block used to sit there) */
.elementor-page-2477 .elementor-element-6bdf15e5{margin-top:0}
