.elementor-kit-5068{--e-global-color-primary:#00508A;--e-global-color-secondary:#00508A;--e-global-color-text:#111827;--e-global-color-accent:#00B0E0;--e-global-typography-primary-font-family:"Sora";--e-global-typography-primary-font-weight:700;--e-global-typography-secondary-font-family:"Sora";--e-global-typography-secondary-font-weight:700;--e-global-typography-text-font-family:"Inter";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Inter";--e-global-typography-accent-font-weight:600;color:#111827;font-family:"Inter", Sans-serif;font-weight:400;}.elementor-kit-5068 e-page-transition{background-color:#FFBC7D;}.elementor-kit-5068 a{color:#00508A;}.elementor-kit-5068 a:hover{color:#00508A;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1140px;}.e-con{--container-max-width:1140px;}.elementor-widget:not(:last-child){margin-block-end:20px;}.elementor-element{--widgets-spacing:20px 20px;--widgets-spacing-row:20px;--widgets-spacing-column:20px;}{}h1.entry-title{display:var(--page-title-display);}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}:root { --color-primary:#00508A; --color-primary-dark:#031A2C; --color-accent:#00B0E0; --color-accent-dark:#006C94; --color-secondary:#00508A; --color-text:#111827; --color-text-muted:#374151; --color-border-strong:#9CA3AF; --color-border:#E5E7EB; --color-surface-alt:#F3F4F6; --color-surface:#FFFFFF; --color-success:#15803D; --color-warning:#B45309; --color-error:#B91C1C; --color-rating:#FBBF24; --font-heading:Sora; --font-body:Inter; --size-display:clamp(2.375rem, 1.5rem + 3.8vw, 4.25rem); --size-h1:clamp(2.125rem, 1.4rem + 3.2vw, 3.75rem); --size-h2:clamp(1.75rem, 1.3rem + 2vw, 2.75rem); --size-h3:clamp(1.25rem, 1.1rem + 0.7vw, 1.5rem); --size-h4:1.125rem; --size-body-lg:1.125rem; --size-body:1rem; --size-small:0.875rem; --size-eyebrow:0.8125rem; --space-section:clamp(4rem, 2.5rem + 5vw, 7.5rem); --space-gutter:clamp(1rem, 0.5rem + 2vw, 2rem); --size-container:1200px; --space-2:0.5rem; --space-4:1rem; --space-6:1.5rem; --space-8:2rem; --space-12:3rem; --radius-sm:2px; --radius-md:5px; --radius-lg:10px; --color-heading:#00508A; --color-outline:#00508A; --color-on-dark:#FFFFFF; --color-card:#FFFFFF; --color-field:#FFFFFF; --color-field-text:#111827; --weight-heading:600; --case-heading:none; --size-cta:1rem; --color-on-accent:#062F4F; --shadow-card:0 0 0 1px var(--color-border); --shadow-raised:0 0 0 1px var(--color-border), 0 16px 40px rgba(17,24,39,.08); --font-script:Caveat; }
/* Start custom CSS *//* GM structural CSS: see design-system/kit.md. Source of truth for kit 5068 → custom_css.
   Theme-safe: colors come only from role variables (--color-heading, --color-outline, --color-on-dark, --color-card…),
   so the same CSS works for light (neutral) and dark (BTD) skins. */
/* Page canvas follows the skin (the legacy kit body-background setting is unreliable) */
body{background-color:var(--color-surface);color:var(--color-text);font-family:var(--font-body),system-ui,sans-serif;}
.elementor-location-header{position:sticky;top:0;z-index:100;}
.admin-bar .elementor-location-header{top:32px;}
@media (max-width:782px){.admin-bar .elementor-location-header{top:46px;}}
@media (max-width:600px){.admin-bar .elementor-location-header{top:0;}}
@media (max-width:767px){body{padding-bottom:calc(56px + env(safe-area-inset-bottom));}}
/* Header nav layout */
.elementor-location-header .elementor-widget-nav-menu{flex:1 1 auto;position:static;}
@media (max-width:1024px){.elementor-location-header .elementor-widget-nav-menu{flex:0 0 auto;order:3;}}
@media (max-width:767px){.elementor-location-header .icon-call{margin-left:auto;}}
.elementor-location-header .elementor-nav-menu--dropdown.elementor-nav-menu__container{position:absolute;top:100%;left:0;right:0;width:auto;margin-top:0;z-index:99;}
.elementor-location-header .elementor-nav-menu--main .elementor-item{font-family:var(--font-body);font-size:var(--size-body);font-weight:600;color:var(--color-text);padding:12px 14px;}
.elementor-location-header .elementor-nav-menu--main .elementor-item:hover,.elementor-location-header .elementor-nav-menu--main .elementor-item.elementor-item-active{color:var(--color-outline);}
.elementor-location-header .elementor-nav-menu--main .elementor-item:after{background-color:var(--color-accent);height:3px;}
.elementor-location-header .elementor-menu-toggle{font-size:28px;color:var(--color-heading);background:transparent;width:48px;height:48px;}
.elementor-location-header .elementor-menu-toggle svg{fill:var(--color-heading);}
.elementor-location-header .elementor-nav-menu--dropdown{background:var(--color-surface);box-shadow:0 8px 24px rgba(17,24,39,.12);}
.elementor-location-header .elementor-nav-menu--dropdown .elementor-item{font-family:var(--font-body);font-weight:600;color:var(--color-text);padding:16px 20px;font-size:1.0625rem;border-top:1px solid var(--color-border);}
.elementor-location-header .elementor-nav-menu--dropdown .elementor-item:hover{background:var(--color-surface-alt);color:var(--color-outline);}
/* Icons: CSS masks filled with currentColor / role colors, so they follow the theme and hover states automatically. */
.elementor .btn-phone{position:relative;}
.elementor .btn-phone::before{content:"";position:absolute;left:1rem;top:50%;width:1.125rem;height:1.125rem;transform:translateY(-50%);background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") no-repeat center/contain;}
.elementor .icon-call{position:relative;}
.elementor .icon-call::before{content:"";position:absolute;left:50%;top:50%;width:1.375rem;height:1.375rem;transform:translate(-50%,-50%);background-color:var(--color-on-accent,var(--color-on-dark));-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") no-repeat center/contain;}
/* Generic service icon (wrench). Per client, swap it for real icons (e-svg) once assets exist. */
.elementor .svc-icon{position:relative;}
.elementor .svc-icon::before{content:"";position:absolute;left:50%;top:50%;width:28px;height:28px;transform:translate(-50%,-50%);background-color:var(--color-outline);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z'/%3E%3C/svg%3E") no-repeat center/contain;}
.card-link:hover .svc-icon{background-color:var(--color-outline);}
.card-link:hover .svc-icon::before{background-color:var(--color-surface);}
/* Check-mark lists (hero proof bullets, "what's included") */
.check-list ul{list-style:none;margin:0;padding:0;}
.check-list li{position:relative;padding-left:1.75rem;}
.check-list li::before{content:"\2713";position:absolute;left:0;top:0;font-weight:800;color:var(--color-success);}
.section-dark .check-list li::before,.cta-band .check-list li::before{color:var(--color-rating);}
/* Rating stars: first <span> inside a .rating-line (Elementor strips class attrs from inline HTML) */
.rating-line > span:first-child{color:var(--color-rating);letter-spacing:.1em;}
/* Process steps: connector line behind the numbers (desktop only) */
/* (drawn per step: a ::before on the grid itself becomes a grid item and overflows) */
@media (min-width:1025px){.elementor .step{position:relative;}.elementor .step:not(:last-child)::after{content:"";position:absolute;top:28px;left:calc(50% + 36px);width:calc(100% - 72px + var(--space-8));height:2px;background:var(--color-border-strong);}}
/* Swipeable row on mobile (reviews carousel) */
@media (max-width:767px){.elementor .snap-row{grid-template-columns:none !important;grid-template-rows:none !important;grid-auto-flow:column;grid-auto-columns:86%;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;margin-right:calc(-1 * var(--space-gutter));padding-right:var(--space-gutter);padding-bottom:.5rem;}.elementor .snap-row > *{scroll-snap-align:start;}}
/* Service-area city boxes: the whole box is the link target */
.elementor .area-link > a{display:block;flex:1;margin:-.75rem -1rem;padding:.75rem 1rem;}
/* FAQ accordion +/− indicator (the V4 icon slot renders empty without an uploaded SVG) */
/* Elementor's accordion base CSS sets the icon box to 200×20px and prints after the kit, so the size is forced here (seen as a wide white pill on every site, design review 2026-10-11) */
.elementor .faq-header .e-accordion-item-icon-base{flex:0 0 auto;width:32px !important;height:32px !important;border-radius:999px;background:var(--color-card);border:1px solid var(--color-border);display:flex;align-items:center;justify-content:center;}
.faq-header .e-accordion-item-icon-base::before{content:"+";font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1;color:var(--color-outline);}
details[open] > .faq-header .e-accordion-item-icon-base::before{content:"\2212";}
.faq-header:hover .faq-q{color:var(--color-outline);}
/* Templated pages' FAQ ([pse_faq], pse-core): the faq-* global classes are only printed on pages that place the FAQ
   component, so on a service or city page the shortcode's list came out bare (browser triangles, 28px questions, no
   rules between items: 1 Call Technologies, 2026-10-12). These rules give it the component's look everywhere. */
.elementor .pse-faq{display:flex;flex-direction:column;}
.elementor .pse-faq .faq-item{border-bottom:1px solid var(--color-border);}
.elementor .pse-faq .faq-item:first-child{border-top:1px solid var(--color-border);}
.elementor .pse-faq .faq-header{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1.5rem 0;cursor:pointer;list-style:none;}
.elementor .pse-faq .faq-header::-webkit-details-marker{display:none;}
.elementor .pse-faq .faq-header::after{content:"+";flex:0 0 auto;width:32px;height:32px;border-radius:999px;background:var(--color-card);border:1px solid var(--color-border);display:flex;align-items:center;justify-content:center;font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1;color:var(--color-outline);}
.elementor .pse-faq details[open] > .faq-header::after{content:"\2212";}
.elementor .pse-faq .faq-q{margin:0;font-family:var(--font-body);font-size:1.125rem;font-weight:600;line-height:1.4;letter-spacing:-.015em;}
.elementor .pse-faq .faq-a{padding:0 0 1.5rem;max-width:70ch;font-size:1rem;line-height:1.7;color:var(--color-text);}
.elementor .pse-faq .faq-a p{margin:0;}
/* Inline links inside body copy: visibly links (a11y) */
.elementor .e-paragraph-base a:not([class]),.elementor .e-heading-base a:not([class]){color:var(--color-secondary);text-decoration:underline;text-underline-offset:2px;}
.elementor .e-paragraph-base a:not([class]):hover{color:var(--color-outline);}
.section-dark .e-paragraph-base a:not([class]),.cta-band .e-paragraph-base a:not([class]),.elementor-location-footer .e-paragraph-base a:not([class]){color:inherit;}
/* Warning-sign lists (symptoms): "!" marker in warning color */
.flag-list ul{list-style:none;margin:0;padding:0;}
.flag-list li{position:relative;padding-left:2rem;}
.flag-list li::before{content:"!";position:absolute;left:0;top:.35em;width:1.25rem;height:1.25rem;border-radius:999px;background:var(--color-warning);color:#fff;font-size:.8125rem;font-weight:800;line-height:1.25rem;text-align:center;}
/* Sticky side card: its grid column must stretch so position:sticky has room to travel */
.content-grid > :last-child{align-self:stretch;}
/* ...but a side-card placed directly in the grid (the pSEO singles) must not stretch, or it is as tall as the article and has nowhere to stick */
.content-grid > .side-card{align-self:start;}
/* Form controls: inputs/selects inherit token sizing even where V4 defaults set 12px */
.elementor .form-input{height:auto;}
.elementor select.form-input{appearance:auto;}
.elementor .form-input::placeholder{color:#6B7280;opacity:1;}
/* Phone buttons: keep room for the icon regardless of the order btn-outline / btn-outline-light print in (their padding shorthand can land after btn-phone) */
.elementor a.btn-phone{padding-inline-start:2.75rem;}
/* In-page jumps to form fields (e.g. Contact hero "Fill Out the Form" → #qf-site) clear the sticky header and show the field above */
.elementor [id^="qf-"]{scroll-margin-top:220px;}
/* Forms inside a padded .form-card: drop the form's own 20px inset so fields align with the card heading */
.elementor .form-card > form.e-form-base{padding-inline:0;}
/* Keyboard a11y (QA 2026-09-28, ported from BTD): visible focus ring on every link/button (several links had none); the page body is programmatically focused by the skip link, so it gets no ring; focused elements scroll clear of the sticky header; the header's duplicate skip link is removed (the theme's is first and works) */
.elementor a:focus-visible,.elementor button:focus-visible,.elementor summary:focus-visible,.elementor [role="button"]:focus-visible,.elementor input:focus-visible,.elementor select:focus-visible,.elementor textarea:focus-visible{outline:3px solid var(--color-outline);outline-offset:3px;}
#content:focus{outline:none;}
html{scroll-padding-top:110px;}
.elementor-location-header .skip-link{display:none;}
/* Design rules (design-system/design-rules.md; first review 2026-10-11): one kit change per rule, every site inherits it.
   Tap targets: 44px hit areas on text links and chips without changing how they look (the padding is the hit area, margins keep the layout). */
.elementor a.link-arrow,.elementor .link-arrow > a{display:inline-block;padding-block:.625rem;margin-block:-.625rem;}
.elementor-location-footer .e-paragraph-base > a.e-paragraph-link-base,.elementor .footer-link > a{display:inline-block;padding-block:.5rem;margin-block:-.5rem;}
.elementor .area-link{min-height:44px;display:inline-flex;align-items:center;}
.elementor .area-link > a,.elementor .chip,.elementor .svc-row{min-height:44px;}
.elementor-location-header .elementor-nav-menu--main .elementor-item{min-height:44px;}
.elementor-location-header a:has(img){display:inline-flex;align-items:center;min-height:44px;}
/* Widows: balance heading lines (no effect where unsupported); long words still wrap instead of spilling. */
.elementor h1,.elementor h2,.elementor h3{text-wrap:balance;overflow-wrap:anywhere;}
.elementor .faq-header .faq-q{min-width:0;overflow-wrap:anywhere;}
/* Measure: running text stays readable at tablet and desktop widths. */
.elementor .prose,.elementor .prose > *,.elementor .lead{max-width:70ch;}
/* Headings inside a templated page's article (post content): they came out in the body face at the browser's size and
   weight, so an article's H2 looked like a different site from the section headings around it (1 Call Technologies,
   2026-10-12). The heading face, weight and colour, one step down the scale because they sit inside a section. */
.elementor .prose :is(h2,h3,h4){font-family:var(--font-heading);font-weight:var(--weight-heading,700);color:var(--color-heading);line-height:1.2;text-transform:var(--case-heading,none);}
.elementor .prose h2{font-size:var(--size-h3);margin-block:var(--space-8) .75rem;}
.elementor .prose :is(h3,h4){font-size:var(--size-h4);margin-block:var(--space-6) var(--space-2);}
.elementor .prose :is(h2,h3,h4):first-child{margin-block-start:0;}
.elementor .prose :is(p,ul,ol){margin-block:0 var(--space-4);}
.elementor .prose :is(p,ul,ol):last-child{margin-block-end:0;}
.elementor .prose :is(ul,ol){padding-inline-start:1.25rem;}
.elementor .prose li + li{margin-block-start:.5rem;}
/* Link lists from [pse_links] (pse-core): like the FAQ, the shortcode's markup relies on global classes that are only
   printed where a component uses them, so on a sub-service page the heading was the body face and the row a bare
   link. The heading, the rows and the boxes get their look here. A single row or box is centred. */
.elementor .elementor-shortcode .section-head h2{margin:0;font-family:var(--font-heading);font-weight:var(--weight-heading,700);font-size:var(--size-h2);color:var(--color-heading);line-height:1.15;text-transform:var(--case-heading,none);}
.elementor .pse-rows{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.elementor .pse-rows:has(> .svc-row:only-child){grid-template-columns:minmax(0,560px);justify-content:center;}
.elementor .pse-rows > .svc-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.25rem;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-md);font-family:var(--font-body);font-weight:600;font-size:var(--size-body);color:var(--color-heading);text-decoration:none;}
.elementor .elementor-shortcode > .area-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,276px));justify-content:center;gap:12px;}
@media (max-width:767px){.elementor .pse-rows{grid-template-columns:1fr;}.elementor .elementor-shortcode > .area-list{grid-template-columns:repeat(2,1fr);}}
/* Treatments (design-system/treatments.json): a style-less treat-* class on a wrapper around a component; these rules restyle the
   component's root section and its children without touching the component or its global classes. Bands: */
.elementor .treat-band-tint > .section{background-color:var(--color-surface-alt);}
.elementor .treat-band-dark > .section,.elementor .treat-band-photo > .section{background-color:var(--color-primary);color:var(--color-on-dark);}
.elementor .treat-band-dark > .section :is(h1,h2,h3,h4,p,li,span,.stat-value,.stat-label,.faq-q,.review-text,.review-meta),.elementor .treat-band-photo > .section :is(h1,h2,h3,h4,p,li,span,.stat-value,.stat-label,.faq-q,.review-text,.review-meta){color:var(--color-on-dark);}
.elementor .treat-band-dark > .section .eyebrow,.elementor .treat-band-photo > .section .eyebrow{color:var(--color-rating);}
.elementor .treat-band-dark > .section .check-list li::before,.elementor .treat-band-photo > .section .check-list li::before{color:var(--color-rating);}
.elementor .treat-band-dark > .section :is(.card,.card-link,.review-card,.faq-item,.step),.elementor .treat-band-photo > .section :is(.card,.card-link,.review-card,.faq-item,.step){background-color:rgba(255,255,255,.08);border-color:rgba(255,255,255,.18);}
.elementor .treat-band-dark > .section .btn-outline,.elementor .treat-band-photo > .section .btn-outline{color:var(--color-on-dark);border-color:var(--color-on-dark);}
.elementor .treat-band-photo{position:relative;background-image:var(--treat-photo);background-size:cover;background-position:center;}
.elementor .treat-band-photo > .section{background-color:rgba(11,61,110,.82);background-color:color-mix(in srgb,var(--color-primary) 84%,transparent);}
/* a light card inside a dark or photo band keeps its own dark text (the form card in a hero: white on white otherwise, Carlson city hero 2026-10-11) */
.elementor .treat-wrap:is(.treat-band-dark,.treat-band-photo) > .section :is(.form-card,.side-card,.nap-card) :is(h1,h2,h3,h4,p,li,span,label){color:var(--color-text);}
.elementor .treat-wrap:is(.treat-band-dark,.treat-band-photo) > .section :is(.form-card,.side-card,.nap-card) :is(h1,h2,h3,h4){color:var(--color-heading);}
/* a component whose root is already a dark band (cta-band, section-dark hero) lets the photo through the same overlay */
.elementor .treat-wrap.treat-band-photo > :is(.cta-band,.section-dark){background:rgba(11,61,110,.88);background:color-mix(in srgb,var(--color-primary) 89%,transparent);}
/* Alignment and density */
.elementor .treat-align-left > .section .section-head{margin-inline:0;text-align:left;align-items:flex-start;max-width:60ch;}
.elementor .treat-align-center > .section .section-head{margin-inline:auto;text-align:center;align-items:center;}
.elementor .treat-dense > .section{padding-block:clamp(2rem,1.5rem+2vw,3.5rem);}
.elementor .treat-airy > .section{padding-block:clamp(4.5rem,3rem+6vw,9rem);}
.elementor .treat-airy > .section .section-head{max-width:640px;}
/* Media side in two-column sections: flip the grid's reading order (the second child is the photo/card by default) */
.elementor .treat-media-left > .section .e-grid > :first-child{order:2;}
.elementor .treat-media-left > .section .e-grid > :last-child{order:1;}
@media (max-width:767px){.elementor .treat-media-left > .section .e-grid > *{order:0;}}
/* Edge: let the inner container run wall to wall */
.elementor .treat-edge > .section > .container{max-width:none;padding-inline:0;}
/* Accents (design-system/accents.json): style-less accent-* classes placed by the plan; the kit CSS does the drawing.
   The treatment wrapper around a component is the positioning context for the accents that sit over it. On a dark or
   photo band the accents switch to the rating gold (the wrapper's component root carries section-dark / cta-band, or the
   wrapper carries a band-dark/band-photo treatment). */
.elementor .e-con.treat-wrap{position:relative;display:flex;flex-direction:column;padding:0;}
.elementor .treat-wrap > .e-component,.elementor .treat-wrap > section,.elementor .treat-wrap > .section{width:100%;}
.elementor .accent-stamp,.elementor .accent-micro,.elementor .accent-script{box-sizing:border-box;}
/* the accent text rules must beat Elementor's e-default-p/e-default-span (same specificity, printed later) */
.elementor .treat-wrap > .accent-script,.elementor .treat-wrap > .accent-stamp{font-family:inherit;}
/* stamp: a rotated outlined label over the section's top-left (static above it on phones) */
.elementor .accent-stamp{position:absolute;z-index:2;top:calc(var(--space-section) * .5);left:max(var(--space-gutter),calc((100% - var(--size-container,1200px))/2 + var(--space-gutter)));width:auto;margin:0;display:inline-block;padding:.35em .9em;border:2px solid var(--color-accent-dark,var(--color-accent));border-radius:6px;color:var(--color-accent-dark,var(--color-accent));font-family:var(--font-heading);font-size:var(--size-small);font-weight:800;letter-spacing:.14em;text-transform:uppercase;line-height:1.2;transform:rotate(-4deg);transform-origin:left top;background:transparent;white-space:nowrap;}
.elementor .treat-wrap:is(.treat-band-dark,.treat-band-photo) .accent-stamp,.elementor .treat-wrap:has(> .section-dark,> .cta-band,> .hero-min) .accent-stamp{color:var(--color-rating);border-color:var(--color-rating);}
/* The stamp sits INSIDE its section, above the first line, on every width (owner, 2026-10-11: tucked against the top edge it was cut off under the sticky header). The section makes room for it. */
.elementor .e-con.treat-wrap:has(> .accent-stamp) > :is(.section,.section-dark,.cta-band,.hero-min){padding-block-start:calc(var(--space-section) + 2.5rem);}
@media (max-width:767px){.elementor .accent-stamp{top:1.5rem;transform:rotate(-2deg);font-size:.75rem;color:var(--color-accent-dark,var(--color-accent)) !important;border-color:var(--color-accent-dark,var(--color-accent)) !important;}}
/* micro-stats: a small label/value strip in the section's top-right corner at desktop, a dark strip under the section on phones */
.elementor .accent-micro{position:absolute;z-index:2;top:.75rem;left:auto;right:max(var(--space-gutter),calc((100% - var(--size-container,1200px))/2 + var(--space-gutter)));width:auto;max-width:calc(100% - 2 * var(--space-gutter));margin:0;display:inline-flex;gap:var(--space-6);padding:.5rem .9rem;border-radius:var(--radius-md);background:rgba(17,24,39,.72);color:#fff;}
.elementor .accent-micro .accent-micro-item{display:flex;flex-direction:column;gap:.1rem;min-width:0;width:auto;padding:0;}
.elementor .accent-micro .accent-micro-label{font-size:.6875rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;opacity:.8;line-height:1.2;white-space:nowrap;}
.elementor .accent-micro .accent-micro-value{font-family:var(--font-heading);font-size:var(--size-body);font-weight:800;line-height:1.2;white-space:nowrap;}
@media (max-width:767px){.elementor .accent-micro{position:static;order:99;width:100%;max-width:none;margin:0;border-radius:0;justify-content:space-between;padding:.75rem var(--space-gutter);background:var(--color-primary);}}
/* underline: a hand-drawn accent underline under <em> in the section's headings (Elementor keeps <em> in overrides; it strips <mark> and class attributes) */
.elementor .accent-underline :is(h1,h2,h3) em{font-style:normal;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 12' preserveAspectRatio='none'%3E%3Cpath d='M2 8 C 20 2, 40 10, 60 5 S 90 3, 98 7' fill='none' stroke='%23C4480A' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:100% .35em;background-position:0 100%;padding-bottom:.12em;}
.elementor .treat-wrap.accent-underline:is(.treat-band-dark,.treat-band-photo) :is(h1,h2,h3) em,.elementor .treat-wrap.accent-underline:has(> .section-dark,> .cta-band,> .hero-min) :is(h1,h2,h3) em{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 12' preserveAspectRatio='none'%3E%3Cpath d='M2 8 C 20 2, 40 10, 60 5 S 90 3, 98 7' fill='none' stroke='%23FBBF24' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E");}
/* script-aside: one handwritten line inside the section's bottom padding, bottom-left (a wrapper child like the stamp) */
.elementor .accent-script{position:absolute;z-index:2;bottom:.5rem;left:max(var(--space-gutter),calc((100% - var(--size-container,1200px))/2 + var(--space-gutter)));width:auto;margin:0;font-family:var(--font-script,'Caveat'),cursive;font-size:clamp(1.375rem,1.1rem + 1vw,1.875rem);line-height:1.2;color:var(--color-accent-dark,var(--color-accent));transform:rotate(-2deg);transform-origin:left bottom;}
.elementor .treat-wrap:is(.treat-band-dark,.treat-band-photo) .accent-script,.elementor .treat-wrap:has(> .section-dark,> .cta-band,> .hero-min) .accent-script{color:var(--color-rating);}
@media (max-width:767px){.elementor .accent-script{position:static;order:98;margin:var(--space-3) var(--space-gutter) var(--space-4);color:var(--color-accent-dark,var(--color-accent)) !important;}}
/* ticker: a full-width accent band of short lines that scrolls slowly; still and wrapping under reduced motion */
.elementor .accent-ticker{width:100%;overflow:hidden;background:var(--color-accent);color:var(--color-on-accent,#fff);padding:.75rem 0;}
.elementor .accent-ticker .accent-ticker-row{display:flex;gap:3rem;width:max-content;padding-inline:1.5rem;animation:accent-ticker 38s linear infinite;font-family:var(--font-heading);font-weight:700;font-size:var(--size-body-lg);white-space:nowrap;}
.elementor .accent-ticker .accent-ticker-row > *{margin:0;}
.elementor .accent-ticker .accent-ticker-row > *::before{content:"\2691";margin-right:1rem;opacity:.85;}
.elementor .accent-ticker:hover .accent-ticker-row{animation-play-state:paused;}
@keyframes accent-ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.elementor .accent-ticker .accent-ticker-row{animation:none;width:auto;flex-wrap:wrap;justify-content:center;gap:1rem 2rem;}.elementor .accent-ticker .accent-ticker-row > .accent-ticker-dup{display:none;}}
/* text logo link: a 44px hit area like the image logo */
.elementor-location-header .logo-text,.elementor-location-header .logo-text > a{display:inline-flex;align-items:center;min-height:44px;}
/* Cards in one row share a height; the link sits at the bottom of each. */
.elementor .e-grid:has(> .card-link),.elementor .e-grid:has(> .card){align-items:stretch;grid-template-rows:auto;}
.elementor .card-link,.elementor .card{display:flex;flex-direction:column;}
.elementor .card-link > :last-child,.elementor .card > :last-child{flex:1;}

/* Breadcrumb links are tap targets on phones too (design-rules tap_targets: 44px) */
@media (max-width:767px){.elementor .crumbs a{display:inline-flex;align-items:center;min-height:44px;padding-inline:4px;}}

/* The root wrapper Elementor puts around a document (build-composition wraps root content in an e-div-block) keeps the
   atomic default 10px padding, which frames every full-bleed band with a strip of page background. Sections own their padding. */
.elementor[data-elementor-type] > .e-con.e-div-block-base{padding:0;}

/* Phones: on a dark or photo band the stamp stays inside the band (top right, in its padding) in the rating gold;
   the static, dark-accent version above is for stamps that sit on the light page background. */
@media (max-width:767px){.elementor .e-con.treat-wrap:is(.treat-band-dark,.treat-band-photo) > .accent-stamp{position:absolute;top:.6rem;right:var(--space-gutter);left:auto;margin:0;transform:rotate(-2deg);font-size:.6875rem;color:var(--color-rating) !important;border-color:var(--color-rating) !important;}}

/* Treatment band-light (gold standard 2026-10-11: light pages, one dark band at most). Turns a component whose root is
   a dark band (the form hero, a cta-band) into a light one: surface-alt ground, heading and text colours, the
   outline button in the outline colour, the form card set off by a border instead of the dark ground. */
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.section,.hero-min){background:var(--color-surface-alt);color:var(--color-text);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) :is(h1,h2,h3,h4){color:var(--color-heading);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) :is(p,li,span,label){color:var(--color-text);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .eyebrow{color:var(--color-text-muted);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .check-list li::before{color:var(--color-success,#15803D);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) :is(.btn-outline-light,.btn-outline){color:var(--color-outline);border-color:var(--color-outline);background-color:transparent;}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .btn-outline-light.btn-phone::before{background-color:var(--color-outline);filter:none;}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .btn-cta{color:var(--color-on-accent);}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .btn-cta :is(span,p){color:inherit;}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .e-paragraph-base a:not([class]){color:var(--color-heading);text-decoration:underline;}
.elementor .e-con.treat-wrap.treat-band-light > :is(.section-dark,.cta-band,.hero-min) .form-card{border:1px solid var(--color-border);box-shadow:var(--shadow-raised);}
/* on the light band the stamp text is the heading colour (the dark accent reads 4.46:1 on surface-alt at 14px, just under AA); the border keeps the accent */
.elementor .e-con.treat-wrap.treat-band-light > .accent-stamp{color:var(--color-heading) !important;border-color:var(--color-accent-dark,var(--color-accent)) !important;}

/* Sub-headings follow the brand heading weight (a 700 H2 beside a 600 serif H1 reads heavier than the headline). */
.elementor :is(h2,h3).e-heading-base{font-weight:var(--weight-heading,700);}

/* Templated service and city pages carry a keyword phrase as the H1 ("Air Conditioning Installation & Repair in
   Duluth, MN"), not a three-word line. A profile may raise size-h1 to 60–72px for Home; on singles that ran to four
   lines and pushed the CTA to the edge of a laptop screen (Carlson v3, 2026-10-11), so they stop at 52px. */
.elementor[data-elementor-type="single"] h1.e-heading-base{font-size:min(var(--size-h1),clamp(2rem,1.4rem + 2.4vw,3.25rem));}
/* Accent "cut" (design-system/accents.json): a straight, square-ended rule under the marked <em>, like a saw cut. For brands whose
   look is cut and built (stone, steel, concrete), where the hand-drawn underline reads as the wrong hand. Works under any
   <em> in the section, so it also serves the keyword-eyebrow hero, whose big line is a <p>. Accent colour on every band. */
.elementor .accent-cut em{font-style:normal;padding-bottom:.12em;background:linear-gradient(var(--color-accent),var(--color-accent)) no-repeat 0 100% / 100% .085em;}
/* Forms read down the left edge: heading, labels and help text left-aligned on every site, whatever band the form sits in
   (owner, 2026-10-11; a centred band used to centre the labels). The note under the button keeps its own alignment. */
.elementor .form-card{text-align:left;}
.elementor .form-card :is(.form-label,label,.form-field,.e-form-label-base){text-align:left;}
/* Closing CTA (split-form): the testimonial beside the form is optional. Its paragraphs default to empty, and an empty one takes no room. */
.elementor .cta-band :is(.review-text,.review-meta):empty{display:none;}
/* Closing CTA, centred layouts (band, photo-band): the three value points run as one centred row and stack on phones. In split-form the list is deeper in the tree and stays a column. */
.elementor .cta-band > .container > .check-list ul{display:flex;flex-wrap:wrap;justify-content:center;gap:.125rem var(--space-8);}
.elementor .cta-band > .container > .check-list li{text-align:left;}
@media (max-width:767px){.elementor .cta-band > .container > .check-list ul{flex-direction:column;align-items:flex-start;width:fit-content;margin-inline:auto;}}
/* Closing CTA value points default to empty (a sample list would be a claim on every page that does not set it); an empty list takes no room. */
.elementor .cta-band .check-list:empty{display:none;}
/* Script aside: the reset above (font-family: inherit on a wrapper's accent children) also outranked the script face itself, so the aside rendered in the body font. And on a band-light hero the root is still .section-dark, which turned the aside gold on a light ground. */
.elementor .treat-wrap > .accent-script{font-family:var(--font-script,'Caveat'),cursive;}
.elementor .e-con.treat-wrap.treat-band-light > .accent-script{color:var(--color-accent-dark,var(--color-accent));}
/* Accent "tagline" (design-system/accents.json): the brand's own line as a full-width band. The line takes the script face when
   the site loads one and the heading face when it does not (the heading face is named second so an unloaded script never
   falls to the system cursive). Selectors carry three classes to outrank the default paragraph styles printed later. */
.elementor .e-con.accent-tagline{width:100%;padding:var(--space-12) var(--space-gutter);flex-direction:column;align-items:center;gap:var(--space-4);text-align:center;background-color:var(--color-accent);color:var(--color-on-accent,#fff);}
.elementor .accent-tagline > .e-paragraph-base{max-width:26ch;font-family:var(--font-script,var(--font-heading)),var(--font-heading),sans-serif;font-size:clamp(2rem,1.3rem + 3.4vw,3.75rem);line-height:1.15;font-weight:400;color:inherit;}
.elementor .accent-tagline > .e-con{width:auto;padding:0;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:.25rem var(--space-8);}
.elementor .accent-tagline > .e-con > .e-paragraph-base{font-family:var(--font-heading);font-weight:700;font-size:var(--size-eyebrow);letter-spacing:.22em;text-transform:uppercase;color:inherit;opacity:.9;}
/* The hero's quote form shows on phones too (owner, 2026-10-12: standard on every site). The form hero puts its form column in
   a .hide-mobile wrapper; under 768px the column now follows the headline, button and phone number instead of disappearing.
   The first phone screen is unchanged. (Four classes, to outrank the global .hide-mobile printed later.) */
@media (max-width:767px){.elementor .e-con.hide-mobile:has(.form-card){display:flex;}}
/* Service area: every town is the same box (owner, 2026-10-12). Measured on a build: linked towns were 70px tall and unlinked
   ones 50px, because the 44px tap-target minimum sat on the link INSIDE a box that already had padding. The minimum now
   sits on the box, the link fills it, and linked and unlinked towns share one height, padding, weight and border. A linked
   town is told apart by its colour and hover, not by its size. In the chips fallback (fewer than eight towns) a linked
   town and an unlinked one used to be two different shapes; there they are the same box as well. */
.elementor .area-list > .area-link,.elementor .chip-row:has(> .area-link) > :is(.area-link,.chip){box-sizing:border-box;display:flex;align-items:center;min-height:52px;height:auto;margin:0;padding:.75rem 1rem;font-family:var(--font-body);font-size:var(--size-body);font-weight:600;line-height:1.3;text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-card);}
.elementor .chip-row:has(> .area-link) > .chip{color:var(--color-text);}
.elementor .area-list > .area-link > a,.elementor .chip-row > .area-link > a{display:flex;align-items:center;align-self:stretch;flex:1;min-height:0;margin:-.75rem -1rem;padding:.75rem 1rem;}
.elementor .area-list{align-items:stretch;}
.elementor .chip-row:has(> .area-link){align-items:stretch;gap:var(--space-4);}
@media (max-width:767px){.elementor .chip-row:has(> .area-link){gap:var(--space-2);}.elementor .chip-row:has(> .area-link) > :is(.area-link,.chip){flex:1 1 calc(50% - var(--space-2));}}
/* The note under the form button was 13px, under the 14px minimum; it was only on desktop before the form showed on phones. */
.elementor .form-card > .e-paragraph-base:last-child{font-size:var(--size-small);}
/* FAQ: no focus box across the open question (owner, 2026-10-11 on BTD staging and again 2026-10-12 on a mockup: the fix was only in
   BTD's own kit). Opening a question drew the 3px focus outline round the whole header row. Focus now shows on the icon's
   circle and the question's colour: still visible to a keyboard user, no box across the row. The plus and minus are also
   centred in their circle on a build (Elementor positions every container's ::before absolutely, and the icon is one). */
.elementor .faq-header .e-accordion-item-icon-base{position:relative;}
.elementor .faq-header .e-accordion-item-icon-base::before{position:static;inset:auto;width:auto;height:auto;transform:none;display:block;line-height:1;margin-top:-1px;}
.elementor summary.faq-header:focus-visible,.elementor summary.faq-header:focus{outline:none;}
.elementor summary.faq-header:focus-visible .e-accordion-item-icon-base{outline:3px solid var(--color-outline);outline-offset:2px;}
.elementor summary.faq-header:focus-visible .faq-q{color:var(--color-outline);}

/* Accent photo strip (design-system/accents.json "photo-strip"): the client's photographs edge to edge after a section.
   Equal heights, thin gaps; on phones the row scrolls sideways with a snap instead of shrinking to thumbnails. */
.elementor .e-con.accent-strip{width:100%;max-width:none;padding:0;flex-direction:row;flex-wrap:nowrap;gap:4px;background-color:var(--color-surface);overflow:hidden;}
.elementor .accent-strip > .e-image-base{flex:1 1 0;min-width:0;width:100%;max-width:none;height:clamp(180px,24vw,340px);object-fit:cover;display:block;border-radius:0;}
@media (max-width:767px){
  .elementor .e-con.accent-strip{overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
  .elementor .accent-strip > .e-image-base{flex:0 0 72%;height:200px;scroll-snap-align:start;}
}
/* Accent split tiles ("split-tiles"): two or three linked photo tiles, the label in wide capitals over the foot of the picture. */
.elementor .e-con.accent-tiles{width:100%;padding:0;flex-direction:row;gap:var(--space-4);}
.elementor .e-con.accent-tile{position:relative;flex:1 1 0;min-width:0;padding:0;overflow:hidden;text-decoration:none;display:block;}
.elementor .accent-tile > .e-image-base{width:100%;max-width:none;height:clamp(260px,34vw,460px);object-fit:cover;display:block;border-radius:0;transition:transform .6s ease;}
.elementor .accent-tile::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(0,0,0,.72) 0%,rgba(0,0,0,.18) 45%,rgba(0,0,0,0) 70%);pointer-events:none;}
.elementor .accent-tile > .e-paragraph-base{position:absolute;z-index:1;left:var(--space-6);right:var(--space-6);bottom:var(--space-6);margin:0;color:#fff;font-family:var(--font-body);font-weight:700;font-size:var(--size-small);letter-spacing:.18em;text-transform:uppercase;}
.elementor .accent-tile > .e-paragraph-base::after{content:" →";}
.elementor a.accent-tile:hover > .e-image-base{transform:scale(1.04);}
@media (prefers-reduced-motion:reduce){.elementor .accent-tile > .e-image-base{transition:none;}.elementor a.accent-tile:hover > .e-image-base{transform:none;}}
@media (max-width:767px){.elementor .e-con.accent-tiles{flex-direction:column;}.elementor .e-con.accent-tile{flex:0 0 auto;width:100%;}.elementor .accent-tile > .e-image-base{height:240px;}}
/* Page photo (templates/singles, values page_photo.kinds): the page's own photograph behind the hero, under an even
   dark veil, so the H1, the buttons and the form stay in the first screen and read on any picture (white on the veil
   over a white photo is still 4.6:1 where the text sits). No featured image: the component's own dark hero. */
.elementor .e-con.treat-wrap.page-photo{position:relative;isolation:isolate;padding:0;}
.elementor .treat-wrap.page-photo > .e-image-base{position:absolute;inset:0;z-index:-1;width:100%;height:100%;max-width:none;object-fit:cover;display:block;border-radius:0;}
.elementor .e-con.treat-wrap.page-photo > :is(.section-dark,.hero-min,.cta-band){padding-block:clamp(2.5rem,1.5rem + 3.5vw,4.5rem);}
.elementor .e-con.treat-wrap.page-photo:has(> img[src]) > :is(.section-dark,.hero-min,.cta-band){background:linear-gradient(90deg,rgba(0,0,0,.66) 0%,rgba(0,0,0,.56) 45%,rgba(0,0,0,.22) 100%);}
@media (max-width:767px){.elementor .e-con.treat-wrap.page-photo:has(> img[src]) > :is(.section-dark,.hero-min,.cta-band){background:linear-gradient(180deg,rgba(0,0,0,.6) 0%,rgba(0,0,0,.58) 70%,rgba(0,0,0,.4) 100%);}}
@media (max-width:767px){.elementor .e-con.treat-wrap.page-photo:has(> .accent-stamp) > :is(.section-dark,.hero-min,.cta-band){padding-block-start:4rem;}}

/* FAQ rows are never boxes (owner, 2026-10-12, Superior Flooring: a client rule that squared the cards also boxed the FAQ
   items, text flush against a side border; the third time an FAQ border had to be asked for). An FAQ item is a row with
   one hairline under it. This carries more weight than a card rule in a client's kit-extra.css, so a "cards" rule that
   lists .faq-item can no longer box the rows; a client that truly wants boxed FAQs writes that rule on purpose
   (.elementor details.faq-item.faq-item) with padding. The focus box across an open question is fixed above. */
.elementor details.faq-item{border-inline:0;border-block-start:0;border-radius:0;box-shadow:none;outline:none;}

/* 1 Call Technologies: client rules appended to the kit CSS (new-site-build §1.4; the mockup renderer includes them too).
   The look comes from their logo and their current site (content/1-call-technologies/art/art.json "_language"): two
   blues, a wide technical wordmark, grid lines meeting at nodes, and a near-black navy hero lit by soft cyan glows.
   Owner, 2026-10-12: darker, polished, with a wow factor. The drawn pieces arrive through art.css; these rules are the
   few places the brand shows beyond colour and type. Keep it to these.
   Specificity: the kit CSS prints before the global classes, so a rule that changes a property a global class sets
   carries one more class than the class itself. */

/* 1. Ground: the kit's neutral grey cooled a step toward their blue. #374151 on #F2F6F9 is 9.5:1. */
body{--color-surface-alt:#F2F6F9;--color-border:#DCE5EC;}

/* 2. Type: the wordmark is wide and even, so headings sit a little tight and labels are tracked wide. */
.elementor .e-heading-base{letter-spacing:-.015em;}
.elementor .section-head .eyebrow{letter-spacing:.18em;}

/* 3. The dark bands: one deep navy, lit from a corner, instead of the kit's flat primary. White on #031A2C is 17:1,
      on #0A4B7C 9:1. */
.elementor .section-dark.section-dark,.elementor .cta-band.cta-band,.elementor .e-con.treat-wrap.treat-band-dark > .section{background:radial-gradient(120% 140% at 85% 0%,#0A4B7C 0%,#052C4A 42%,var(--color-primary-dark) 78%);}
.elementor .e-con.treat-wrap.treat-band-dark{background:var(--color-primary-dark);}
/* The proof bar is not a .section, so the dark treatment needs telling: it closes the hero, in the same navy. */
.elementor .e-con.treat-wrap.treat-band-dark > .trust-bar{background:var(--color-primary-dark);border-color:rgba(0,176,224,.28);}
.elementor .e-con.treat-wrap.treat-band-dark > .trust-bar .stat-value{color:#fff;}
.elementor .e-con.treat-wrap.treat-band-dark > .trust-bar .stat-label{color:rgba(255,255,255,.78);}

/* 4. Hero: their current site's first screen, redrawn. Three soft cyan glows drift very slowly behind the words
      (CSS only, no image); the keyword line is the H1, set as a cyan label; the second half of their headline is the
      cyan half; ticks in cyan. Gold stays on the review stars only. */
.elementor .section-dark:has(h1){position:relative;isolation:isolate;overflow:hidden;}
.elementor .section-dark:has(h1) > *{position:relative;z-index:1;}
.elementor .section-dark:has(h1)::before{content:"";position:absolute;z-index:0;inset:-20%;pointer-events:none;background:radial-gradient(22rem 22rem at 12% 78%,rgba(0,176,224,.26),transparent 70%),radial-gradient(28rem 28rem at 62% 8%,rgba(0,176,224,.18),transparent 70%),radial-gradient(18rem 18rem at 92% 86%,rgba(0,176,224,.22),transparent 70%);}
@media (prefers-reduced-motion:no-preference){.elementor .section-dark:has(h1)::before{animation:onecall-drift 26s ease-in-out infinite alternate;}}
@keyframes onecall-drift{from{transform:translate3d(-2%,1%,0) scale(1);}to{transform:translate3d(3%,-2%,0) scale(1.08);}}
.elementor .section-dark.section-dark:has(h1)::after{background:var(--color-accent);}
/* The cyan label is the Home hero's small keyword H1 only: there the H1 is the first line. On a service or city page
   the H1 is the big title under a label, so it stays white at heading tracking and its label takes the cyan. */
.elementor .section-dark.section-dark h1:first-child{letter-spacing:.14em;color:var(--color-accent);}
.elementor .section-dark.section-dark p:has(+ h1){color:var(--color-accent);}
.elementor :is(.section-dark,.cta-band) :is(.e-heading-base,.e-paragraph-base) em{font-style:normal;color:var(--color-accent);}
.elementor .section-dark.section-dark .check-list li::before,.elementor .cta-band.cta-band .check-list li::before{color:var(--color-accent);}
.elementor .section-dark .form-card{box-shadow:0 0 0 1px rgba(0,176,224,.35),0 24px 60px -20px rgba(0,176,224,.45),0 30px 60px -30px rgba(0,0,0,.6);}

/* 5. Labels on every dark band in the logo's cyan, not the kit's gold. */
.elementor .cta-band.cta-band > .container > p:first-child,.elementor .e-con.treat-wrap.treat-band-dark .section-head .eyebrow{color:var(--color-accent);}

/* 6. The one action glows a little on dark ground; cards on light ground pick up a cyan edge when lifted. */
.elementor :is(.section-dark,.cta-band) .btn-cta{box-shadow:0 0 0 1px rgba(0,176,224,.4),0 10px 30px -8px rgba(0,176,224,.55);}
@media (hover:hover){.elementor .card-link.card-link:hover{border-color:var(--color-accent);box-shadow:0 18px 40px -22px rgba(0,80,138,.55);}}

/* 7. Industries strip (their own list): quiet capitals on the deep navy, hairlines in cyan, and the
      logo node between each name in place of the kit flag. */
.elementor .accent-ticker.accent-ticker{background:var(--color-primary-dark);color:rgba(255,255,255,.82);border-block:1px solid rgba(0,176,224,.28);letter-spacing:.16em;text-transform:uppercase;font-size:var(--size-small);}
.elementor .accent-ticker.accent-ticker .accent-ticker-row{font-weight:600;font-size:var(--size-small);}
.elementor .accent-ticker.accent-ticker .accent-ticker-row > *::before{content:"\25CF";color:var(--color-accent);opacity:1;font-size:.7em;vertical-align:.15em;}

/* 8. Footer logo. The mark is a two-blue globe, which turns into a white disc when a footer whitens it, so it sits
      on a white plate in its own colours. First .elementor-kit-5068: the mockup's stand-in footer. Second: the staging footer
      (8872), whose logo link carries the id footer-logo. The header logo (id site-logo) is held to the mockup's
      80px so the five menu items stay on one row. */
.elementor .mock-footer .mock-logo.mock-logo img,.elementor #footer-logo img{filter:none;background:#fff;padding:10px 14px;border-radius:var(--radius-md,5px);box-sizing:content-box;}
.elementor #footer-logo img{width:149px;height:auto;}
.elementor #site-logo img{width:auto;height:80px;}
@media (max-width:767px){.elementor #site-logo img{height:56px;}}

/* 9. Review stars stay gold on the dark reviews band (the dark treatment turns every span white). */
.elementor .e-con.treat-wrap.treat-band-dark > .section .rating-line span{color:var(--color-rating);}

/* 10. Jump to the form. On a page with the quote form its buttons point at #quote (the form card). A little room
       above it so the form's heading sits clear of the sticky header (measured at 375px, 2026-10-12: with 1.5rem the
       card lands about 70px under the 64px header). The glide is Elementor's own (frontend.min.css sets
       scroll-behavior: smooth unless the visitor asked for less motion); nothing is added here. */
.elementor #quote{scroll-margin-top:1.5rem;}

/* 11. Contact card: the "Get directions" link under the address is a real tap target on a phone (44px), not a
       19px line of text. Their Google profile gets 4 to 17 direction requests a week. */
.elementor .nap-card a[href*="google.com/maps"]{display:inline-flex;align-items:center;min-height:44px;font-weight:600;text-decoration:underline;}

/* 12. Four weights, not five. The template footer's phone number is set at 800 for the template's own heading face;
       this site's headings are Sora 600, so the footer number uses the same weight as the rest (design review:
       "5 weights: 400, 500, 600, 700, 800"). */
.elementor-location-footer.elementor-location-footer a[href^="tel:"]:not(.mobile-call-bar-btn){font-weight:700;}

/* 13. Header menu on one row. With Industries added, five items need 541px and the row has 524px beside the logo, the
       phone and the review button, so Contact dropped to a second line at every desktop width. Tighter side padding on
       the top-level links (14px to 9px) buys 50px. Dropdown items are not touched. */
@media (min-width:1025px){.elementor .elementor-nav-menu--main .elementor-nav-menu > li > a.elementor-item,.elementor-location-header .elementor-nav-menu--main .elementor-nav-menu > li > a.elementor-item{padding-inline:9px;}}
/* 13b. Between the burger menu (1024px and under) and a full laptop width, the row is narrower still: smaller menu type,
        and the two header buttons give up some padding, so the five items still fit on one line. */
@media (min-width:1025px) and (max-width:1279px){
.elementor-location-header .elementor-nav-menu--main .elementor-nav-menu > li > a.elementor-item{padding-inline:5px;font-size:.875rem;}
.elementor-location-header a:is(.btn-cta,.btn-phone,[class*="btn-"]){padding-inline:.75rem;font-size:.875rem;}
.elementor-location-header #site-logo img{max-height:64px;}
}

/* 14. Short page headers (hero-min: About, Contact, the hubs, industry pages). The hero's glow layer is sized for the tall
       Home hero; on a 275px header its 18 to 28rem glows were cut off by the layer's own edges and showed as lighter
       rectangles. Here the layer is made much taller than the header, so each glow fades out inside it. */
.elementor .hero-min.section-dark:has(h1)::before{inset:-160% -20%;}

/* 1-call-technologies: original artwork, generated 2026-10-12 by skills/new-site-build/scripts/art-css.js from content/1-call-technologies/art/. Edit the SVG or art.json, not this file. */
/* linework: network.svg */
.elementor .section-dark:has(h1){position:relative;overflow:hidden;isolation:isolate;}
.elementor .section-dark:has(h1) > *{position:relative;z-index:1;}
.elementor .section-dark:has(h1)::after{content:"";position:absolute;z-index:0;left:50%;translate:-50% 0;bottom:-2%;width:min(104%, 1320px);aspect-ratio:2 / 1;background:var(--color-primary);opacity:0.2;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 760 380' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='560' cy='196' r='150'/%3E%3Cellipse cx='560' cy='196' rx='62' ry='150'/%3E%3Cellipse cx='560' cy='196' rx='116' ry='150'/%3E%3Cpath d='M424 132 Q560 92 696 132'/%3E%3Cpath d='M418 246 Q560 296 702 246'/%3E%3Cpath d='M-10 60 H230 Q262 60 284 82 L330 124 Q346 138 368 138 H448'/%3E%3Cpath d='M-10 150 H190 Q214 150 232 164 L262 188 Q276 198 296 198 H410'/%3E%3Cpath d='M-10 236 H120 Q146 236 166 250 L196 270 Q210 280 230 280 H420'/%3E%3Cpath d='M-10 322 H300 Q330 322 352 306 L392 276 Q404 268 420 268 H498'/%3E%3Cpath d='M90 60 V-10 M150 236 V150'/%3E%3Cg fill='%23000' stroke='none'%3E%3Ccircle cx='448' cy='138' r='9'/%3E%3Ccircle cx='410' cy='198' r='7'/%3E%3Ccircle cx='420' cy='280' r='8'/%3E%3Ccircle cx='498' cy='268' r='9'/%3E%3Ccircle cx='560' cy='111' r='8'/%3E%3Ccircle cx='622' cy='196' r='6'/%3E%3Ccircle cx='660' cy='262' r='9'/%3E%3Ccircle cx='676' cy='126' r='7'/%3E%3Ccircle cx='90' cy='60' r='5'/%3E%3Ccircle cx='150' cy='150' r='5'/%3E%3Ccircle cx='150' cy='236' r='5'/%3E%3Ccircle cx='262' cy='322' r='5'/%3E%3C/g%3E%3C/svg%3E") no-repeat center bottom / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 760 380' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='560' cy='196' r='150'/%3E%3Cellipse cx='560' cy='196' rx='62' ry='150'/%3E%3Cellipse cx='560' cy='196' rx='116' ry='150'/%3E%3Cpath d='M424 132 Q560 92 696 132'/%3E%3Cpath d='M418 246 Q560 296 702 246'/%3E%3Cpath d='M-10 60 H230 Q262 60 284 82 L330 124 Q346 138 368 138 H448'/%3E%3Cpath d='M-10 150 H190 Q214 150 232 164 L262 188 Q276 198 296 198 H410'/%3E%3Cpath d='M-10 236 H120 Q146 236 166 250 L196 270 Q210 280 230 280 H420'/%3E%3Cpath d='M-10 322 H300 Q330 322 352 306 L392 276 Q404 268 420 268 H498'/%3E%3Cpath d='M90 60 V-10 M150 236 V150'/%3E%3Cg fill='%23000' stroke='none'%3E%3Ccircle cx='448' cy='138' r='9'/%3E%3Ccircle cx='410' cy='198' r='7'/%3E%3Ccircle cx='420' cy='280' r='8'/%3E%3Ccircle cx='498' cy='268' r='9'/%3E%3Ccircle cx='560' cy='111' r='8'/%3E%3Ccircle cx='622' cy='196' r='6'/%3E%3Ccircle cx='660' cy='262' r='9'/%3E%3Ccircle cx='676' cy='126' r='7'/%3E%3Ccircle cx='90' cy='60' r='5'/%3E%3Ccircle cx='150' cy='150' r='5'/%3E%3Ccircle cx='150' cy='236' r='5'/%3E%3Ccircle cx='262' cy='322' r='5'/%3E%3C/g%3E%3C/svg%3E") no-repeat center bottom / contain;pointer-events:none;}
@media (max-width:767px){.elementor .section-dark:has(h1)::after{width:190vw;left:50%;right:auto;translate:-38% 0;top:10px;bottom:auto;opacity:0.14;-webkit-mask-position:center top;mask-position:center top;}}
@media (prefers-reduced-motion:no-preference){@keyframes art-draw{from{clip-path:inset(0 100% 0 0);}to{clip-path:inset(0 0 0 0);}}.elementor .section-dark:has(h1)::after{animation:art-draw 1.6s cubic-bezier(.3,.6,.2,1) .25s both;}}
/* icon: icon-it.svg */
.elementor .card-link:nth-child(1) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9 H42 V32 H6 Z'/%3E%3Cpath d='M24 32 V40 M15 40 H33'/%3E%3Cpath d='M11 21 H18 L21 15 L25 26 L28 21 H33'/%3E%3Ccircle cx='36' cy='21' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9 H42 V32 H6 Z'/%3E%3Cpath d='M24 32 V40 M15 40 H33'/%3E%3Cpath d='M11 21 H18 L21 15 L25 26 L28 21 H33'/%3E%3Ccircle cx='36' cy='21' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}
/* icon: icon-phone.svg */
.elementor .card-link:nth-child(2) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 8 H17 L20 17 L16 20 Q20 28 28 32 L31 28 L40 31 V37 Q40 40 37 40 Q22 39 14 28 Q8 20 8 11 Q8 8 11 8 Z'/%3E%3Cpath d='M28 9 Q39 9 39 20'/%3E%3Ccircle cx='28' cy='9' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 8 H17 L20 17 L16 20 Q20 28 28 32 L31 28 L40 31 V37 Q40 40 37 40 Q22 39 14 28 Q8 20 8 11 Q8 8 11 8 Z'/%3E%3Cpath d='M28 9 Q39 9 39 20'/%3E%3Ccircle cx='28' cy='9' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}
/* icon: icon-shield.svg */
.elementor .card-link:nth-child(3) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M24 5 L40 11 V23 Q40 35 24 43 Q8 35 8 23 V11 Z'/%3E%3Cpath d='M24 14 V20 M24 28 V34 M15 24 H20 M28 24 H33'/%3E%3Ccircle cx='24' cy='24' r='3' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M24 5 L40 11 V23 Q40 35 24 43 Q8 35 8 23 V11 Z'/%3E%3Cpath d='M24 14 V20 M24 28 V34 M15 24 H20 M28 24 H33'/%3E%3Ccircle cx='24' cy='24' r='3' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}
/* icon: icon-cloud.svg */
.elementor .card-link:nth-child(4) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 30 Q6 30 6 22.5 Q6 16 12.5 15 Q14 7 23 7 Q31 7 33.5 14 Q42 14 42 22 Q42 30 34 30 Z'/%3E%3Cpath d='M24 30 V38'/%3E%3Ccircle cx='24' cy='41' r='2.8' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 30 Q6 30 6 22.5 Q6 16 12.5 15 Q14 7 23 7 Q31 7 33.5 14 Q42 14 42 22 Q42 30 34 30 Z'/%3E%3Cpath d='M24 30 V38'/%3E%3Ccircle cx='24' cy='41' r='2.8' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}
/* icon: icon-automation.svg */
.elementor .card-link:nth-child(5) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 10 H18 Q24 10 27 16 L31 22 M10 24 H31 M10 38 H18 Q24 38 27 32 L31 26'/%3E%3Ccircle cx='36' cy='24' r='6'/%3E%3Ccircle cx='8' cy='10' r='2.6' fill='%23000' stroke='none'/%3E%3Ccircle cx='8' cy='24' r='2.6' fill='%23000' stroke='none'/%3E%3Ccircle cx='8' cy='38' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 10 H18 Q24 10 27 16 L31 22 M10 24 H31 M10 38 H18 Q24 38 27 32 L31 26'/%3E%3Ccircle cx='36' cy='24' r='6'/%3E%3Ccircle cx='8' cy='10' r='2.6' fill='%23000' stroke='none'/%3E%3Ccircle cx='8' cy='24' r='2.6' fill='%23000' stroke='none'/%3E%3Ccircle cx='8' cy='38' r='2.6' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}
/* icon: icon-card.svg */
.elementor .card-link:nth-child(6) > .svc-icon::before{content:"";display:block;flex:0 0 auto;width:28px;height:28px;margin:0;background:var(--color-primary);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 11 H42 V37 H6 Z'/%3E%3Cpath d='M6 19 H42'/%3E%3Cpath d='M24 30 H36'/%3E%3Ccircle cx='13' cy='30' r='2.8' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' width='48' height='48' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 11 H42 V37 H6 Z'/%3E%3Cpath d='M6 19 H42'/%3E%3Cpath d='M24 30 H36'/%3E%3Ccircle cx='13' cy='30' r='2.8' fill='%23000' stroke='none'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none;}

/* motion: subtle */
@media (prefers-reduced-motion: no-preference){
  /* Hover life: a card that is a link lifts; its arrow leans; buttons press. */
  .elementor :is(.card-link,.review-card){transition:transform .22s cubic-bezier(.2,.7,.2,1),box-shadow .22s ease;}
  .elementor .card-link:hover{transform:translateY(-4px);box-shadow:var(--shadow-raised);}
  .elementor .card-link .link-arrow{transition:transform .22s cubic-bezier(.2,.7,.2,1);}
  .elementor .card-link:hover .link-arrow{transform:translateX(4px);}
  .elementor :is(.btn-cta,.btn-primary,.btn-outline,.btn-outline-light){transition:transform .15s ease,box-shadow .15s ease,background-color .15s ease,color .15s ease;}
  .elementor :is(.btn-cta,.btn-primary):hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(17,24,39,.16);}
  .elementor :is(.btn-cta,.btn-primary,.btn-outline,.btn-outline-light):active{transform:translateY(1px);box-shadow:none;}
  .elementor .card-link .e-image-base{transition:filter .3s ease;}
  .elementor .card-link:hover .e-image-base{filter:saturate(1.08) contrast(1.03);}

}

/* Scroll reveals: section heads, cards, steps and photos rise in as they enter the viewport, a row one after another.
   Driven on every browser by the small script in design-system/kit-motion.js (IntersectionObserver): it marks the
   elements that are below the screen ("m-rv"), adds "m-js" to <html>, and "m-in" as each one arrives. Without the
   script nothing is hidden. One path for every browser, on purpose: the first two versions used CSS scroll-driven
   animations where available and showed nothing on the owner's iPhone, twice, with no way to test Safari here. */
@media (prefers-reduced-motion: no-preference){
  html.m-js .m-rv{opacity:0;transform:translateY(26px);transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1);transition-delay:var(--m-d,0s);will-change:opacity,transform;}
  html.m-js .m-rv.m-in{opacity:1;transform:none;}
  /* Touch has no hover: a card or button answers the tap instead. */
  @media (hover: none){
    .elementor .card-link:active{transform:scale(.985);}
    .elementor :is(.btn-cta,.btn-primary,.btn-outline,.btn-outline-light):active{transform:scale(.97);}
  }
}

/* Reduce Motion (a common phone setting) asks for no movement, not for a dead page: the same elements arrive by a
   plain fade, with no travel. Nothing in the expressive level runs. */
@media (prefers-reduced-motion: reduce){
  html.m-js .m-rv{opacity:0;transition:opacity .5s ease;}
  html.m-js .m-rv.m-in{opacity:1;}
}

/* motion: expressive */
@media (prefers-reduced-motion: no-preference){
  /* Hero load sequence: the lines under the headline, the buttons and the form or card settle in one after another.
     The H1 and the hero photo do not fade (largest paint). */
  @keyframes m-settle{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:none;}}
  .elementor :is(.hero-layout,.hero-min) :is(.lead,.check-list,.rating-line),
  .elementor .treat-wrap > :is(.section-dark,.hero-min) :is(.lead,.check-list,.rating-line),
  .elementor :is(.hero-layout,.hero-min) :is(.btn-cta,.btn-outline,.btn-outline-light),
  .elementor .treat-wrap > :is(.section-dark,.hero-min) :is(.btn-cta,.btn-outline,.btn-outline-light){animation:m-settle .55s cubic-bezier(.2,.7,.2,1) both;animation-delay:.12s;}
  .elementor :is(.hero-layout,.hero-min) :is(.btn-cta,.btn-outline,.btn-outline-light),
  .elementor .treat-wrap > :is(.section-dark,.hero-min) :is(.btn-cta,.btn-outline,.btn-outline-light){animation-delay:.24s;}
  .elementor :is(.hero-layout,.hero-min,.section-dark) :is(.form-card,.side-card,.card){animation:m-settle .6s cubic-bezier(.2,.7,.2,1) both;animation-delay:.3s;}
  /* The trust bar sits on the fold of most pages, so it is part of the load sequence, not a scroll reveal (a scroll
     reveal left its numbers half-faded at rest): the four proofs step up one after another. */
  .elementor .trust-bar .stat{animation:m-settle .5s cubic-bezier(.2,.7,.2,1) both;animation-delay:.4s;}
  .elementor .trust-bar .stat:nth-child(2){animation-delay:.48s;}
  .elementor .trust-bar .stat:nth-child(3){animation-delay:.56s;}
  .elementor .trust-bar .stat:nth-child(4){animation-delay:.64s;}
  /* The stamp lands like a stamp. */
  @keyframes m-stamp{0%{opacity:0;transform:rotate(-9deg) scale(1.5);}60%{opacity:1;transform:rotate(-2deg) scale(.96);}100%{opacity:1;transform:rotate(-3deg) scale(1);}}
  .elementor .treat-wrap > .accent-stamp{animation:m-stamp .5s cubic-bezier(.3,1.3,.5,1) both;animation-delay:.55s;}
  /* The underline accent draws itself under its word. */
  @keyframes m-draw{from{background-size:0% .5em;}to{background-size:100% .5em;}}
  @keyframes m-cut{from{background-size:0% .085em;}to{background-size:100% .085em;}}
  .elementor .accent-cut em{animation:m-cut .5s cubic-bezier(.7,0,.2,1) both;animation-delay:.4s;}
  .elementor .accent-underline :is(h1,h2,h3) em{animation:m-draw .7s ease-out both;animation-delay:.4s;background-repeat:no-repeat;background-position:0 100%;}

  @supports (animation-timeline: view()){
    /* The page's one photo band breathes: the photo drifts a little as the band crosses the screen. */
    @keyframes m-drift{from{background-position:50% 35%;}to{background-position:50% 65%;}}
    .elementor .e-con.treat-wrap.treat-band-photo{background-size:auto 135%;animation:m-drift linear both;animation-timeline:view();animation-range:cover 0% cover 100%;}
    /* A thin progress line under the header shows how far down the page the visitor is. */
    @keyframes m-progress{from{transform:scaleX(0);}to{transform:scaleX(1);}}
    .elementor-location-header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--color-accent);transform-origin:0 50%;animation:m-progress linear both;animation-timeline:scroll(root);pointer-events:none;}
  }
}/* End custom CSS */