:root{--accent:#86c440;--accent-ink:#2f6b16;--ink:#13241b;--coal:#1d3327;--paper:#fff;--mist:#f3f7f0;--line:#13241b21;--line-dark:#ffffff1a;--text-soft:#13241bb8;--text-mute:#13241b85;--font-poster:"Archivo Black", "Arial Black", sans-serif;--font-display:"Instrument Sans", system-ui, -apple-system, sans-serif;--pad:clamp(1.15rem, 4vw, 3.5rem);--maxw:1240px;--header-h:78px;--radius:4px;--ease:cubic-bezier(.22, 1, .36, 1)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font:400 1rem/1.6 var(--font-display);-webkit-font-smoothing:antialiased;margin:0;overflow-x:hidden}img,video,svg{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}ul{margin:0;padding:0;list-style:none}h1,h2,h3,p{margin:0}:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:2px}.wrap{width:100%;max-width:var(--maxw);padding-inline:var(--pad);margin-inline:auto}.section{padding-block:clamp(3.5rem,8vw,6.5rem);position:relative}.section--paper{background:var(--paper)}.section--mist{background:var(--mist)}.section--dark{background:var(--ink);color:#fff}.section--dark .body{color:#ffffffbd}.section--dark .body strong{color:#fff}.section--dark .kicker{color:var(--accent)}.grid-tex:before{content:"";pointer-events:none;z-index:0;background-image:linear-gradient(#ffffff0b 1px,#0000 1px),linear-gradient(90deg,#ffffff0b 1px,#0000 1px);background-size:64px 64px;position:absolute;inset:0;mask-image:radial-gradient(85% 70% at 50% 40%,#000 30%,#0000 100%)}.section>.wrap{z-index:1;position:relative}.h-hero,.h-section,.h-card{font-family:var(--font-poster);text-transform:uppercase;letter-spacing:-.005em;font-weight:400}.h-hero{font-size:clamp(2.25rem,4.9vw,3.9rem);line-height:.98}.h-section{font-size:clamp(1.85rem,3.6vw,2.95rem);line-height:1.03}.h-card{font-size:clamp(1.25rem,2vw,1.55rem);line-height:1.1}.kicker{font:700 .73rem/1 var(--font-display);letter-spacing:.17em;text-transform:uppercase;color:var(--accent-ink);align-items:center;gap:.55rem;margin-bottom:.9rem;display:inline-flex}.kicker:before{content:"";background:currentColor;flex:none;width:22px;height:2px}.body{color:var(--text-soft);font-size:1.04rem;line-height:1.75}.body+.body{margin-top:1.1rem}.body strong{color:var(--ink);font-weight:600}.measure{max-width:62ch}.micro{font:700 .7rem/1 var(--font-display);letter-spacing:.14em;text-transform:uppercase}.nb{display:block}@media (width<=640px){.nb{display:inline}.nb:before{content:" "}}.btn{font:700 .82rem/1 var(--font-display);letter-spacing:.1em;text-transform:uppercase;border-radius:var(--radius);transition:background .28s var(--ease), color .28s var(--ease), transform .28s var(--ease), border-color .28s var(--ease);border:2px solid #0000;justify-content:center;align-items:center;gap:.55rem;padding:1.05rem 1.75rem;display:inline-flex}.btn--primary{background:var(--accent);color:var(--ink)}.btn--primary:hover{background:var(--ink);color:#fff;transform:translateY(-2px)}.btn--ink{background:var(--ink);color:#fff}.btn--ink:hover{background:var(--accent);color:var(--ink);transform:translateY(-2px)}.btn--ghost{color:#fff;border-color:#ffffff73}.btn--ghost:hover{color:var(--ink);background:#fff;border-color:#fff}.btn--outline{border-color:var(--ink);color:var(--ink)}.btn--outline:hover{background:var(--ink);color:#fff}.header{z-index:100;height:var(--header-h);transition:background .3s var(--ease), border-color .3s var(--ease);border-bottom:1px solid #0000;align-items:center;display:flex;position:fixed;inset:0 0 auto}.header.stuck{background:var(--ink);border-bottom-color:var(--line-dark)}.header__inner{justify-content:space-between;align-items:center;gap:1.5rem;width:100%;display:flex}.header__logo{color:#fff;align-items:baseline;gap:.5rem;display:flex}.header__logo b{font-family:var(--font-poster);text-transform:uppercase;letter-spacing:-.01em;font-size:1.18rem;font-weight:400}.header__logo span{font:700 .6rem/1 var(--font-display);letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}.header__nav{align-items:center;gap:1.6rem;display:flex}.header__nav a{font:600 .84rem/1 var(--font-display);color:#ffffffdb;transition:color .2s var(--ease)}.header__nav a:hover{color:var(--accent)}.header__cta{align-items:center;gap:.7rem;display:flex}.header__phone{white-space:nowrap;font:700 .88rem/1 var(--font-display);color:#fff;border-radius:var(--radius);transition:all .25s var(--ease);border:1px solid #ffffff47;flex:none;align-items:center;gap:.5rem;padding:.8rem 1.1rem;display:inline-flex}.header__phone svg{flex:none}.header__phone:hover{background:var(--accent);color:var(--ink);border-color:var(--accent)}.header__burger{color:#fff;justify-content:center;align-items:center;width:44px;height:44px;display:none}@media (width<=1040px){.header__nav,.header__cta .btn{display:none}.header__burger{flex:none;display:inline-flex}.header__inner{gap:.75rem}}@media (width<=560px){.header__inner{gap:.5rem}.header__phone{gap:.4rem;padding:.7rem .8rem;font-size:.82rem}.brandmark{flex:none}}@media (width<=380px){.header__phone{padding:.65rem .7rem;font-size:.78rem}}.mobile-menu{z-index:99;background:var(--ink);padding:calc(var(--header-h) + 1rem) var(--pad) 2rem;-webkit-overflow-scrolling:touch;opacity:0;visibility:hidden;transition:opacity .3s var(--ease), visibility .3s;flex-direction:column;justify-content:center;display:flex;position:fixed;inset:0;overflow-y:auto}.mobile-menu.open{opacity:1;visibility:visible}.mobile-menu nav{flex-direction:column;display:flex}.mobile-menu nav a{font-family:var(--font-poster);text-transform:uppercase;color:#fff;border-bottom:1px solid var(--line-dark);padding:.5rem 0;font-size:clamp(1.5rem,6.5vw,2.2rem);line-height:1.1;display:block}.mobile-menu nav a:hover{color:var(--accent)}.mobile-menu__foot{flex-direction:column;gap:.7rem;margin-top:1.8rem;display:flex}.mobile-menu__foot .btn{width:100%}.hero{text-align:center;background:var(--ink);color:#fff;min-height:100svh;padding:calc(var(--header-h) + 3rem) 0 clamp(4rem,9vw,6rem);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.hero__media{z-index:0;will-change:transform;position:absolute;inset:0}.hero__media video,.hero__media img{object-fit:cover;object-position:center;width:100%;height:100%;position:absolute;inset:0}.hero--still .hero__media img{transform-origin:52% 46%;animation:26s ease-in-out infinite alternate heroDrift}@keyframes heroDrift{0%{transform:scale(1.02)}to{transform:scale(1.14)}}.hero__scrim{z-index:1;pointer-events:none;background:radial-gradient(74% 62% at 50% 45%,#16181c85 0%,#16181cbd 100%),linear-gradient(#16181cb8 0%,#16181c33 24%,#16181c4d 60%,#16181ceb 100%);position:absolute;inset:0}.hero__grain{z-index:1;pointer-events:none;opacity:.5;background-image:linear-gradient(#ffffff08 1px,#0000 1px),linear-gradient(90deg,#ffffff08 1px,#0000 1px);background-size:72px 72px;position:absolute;inset:0;mask-image:radial-gradient(70% 60%,#0000 30%,#000 100%)}.hero__content{z-index:2;width:100%;max-width:900px;padding-inline:var(--pad);flex-direction:column;align-items:center;margin-inline:auto;display:flex;position:relative}.hero__eyebrow{font:700 .72rem/1 var(--font-display);letter-spacing:.2em;text-transform:uppercase;color:var(--accent);text-shadow:0 2px 12px #0009;align-items:center;gap:.6rem;margin-bottom:1.35rem;display:inline-flex}.hero__eyebrow:before,.hero__eyebrow:after{content:"";background:currentColor;width:24px;height:2px}.lockup{flex-direction:column;align-items:center;gap:.35rem;margin-bottom:1.5rem;display:flex}.lockup__name{font-family:var(--font-poster);text-transform:uppercase;letter-spacing:-.022em;text-shadow:0 18px 48px #0000009e;font-size:clamp(2.6rem,9.2vw,6.4rem);font-weight:400;line-height:.86}.lockup__rule{align-items:center;gap:.85rem;width:100%;max-width:min(560px,84vw);display:flex}.lockup__rule:before,.lockup__rule:after{content:"";background:#ffffff6b;flex:1;height:2px}.lockup__sub{font:700 clamp(.72rem,1.7vw,1rem)/1 var(--font-display);letter-spacing:.42em;text-transform:uppercase;color:#fff;text-shadow:0 2px 12px #0009;padding-left:.42em}.hero__title{text-shadow:0 14px 40px #0000008c;text-wrap:balance;margin-bottom:1.2rem}.hero__sub{color:#fffffff0;text-shadow:0 2px 16px #0000009e;max-width:44ch;margin:0 auto 2.1rem;font-size:clamp(1rem,1.75vw,1.28rem);font-weight:500;line-height:1.62}.hero__ctas{flex-wrap:wrap;justify-content:center;gap:.85rem;margin-bottom:2.3rem;display:flex}.hero__trust{font:700 .78rem/1.4 var(--font-display);letter-spacing:.11em;text-transform:uppercase;color:#fffffff0;text-shadow:0 2px 12px #0009;flex-wrap:wrap;justify-content:center;gap:.7rem 1.9rem;display:flex}.hero__trust li{align-items:center;gap:.55rem;display:flex}.hero__trust li:before{content:"";background:var(--accent);border-radius:50%;flex:none;width:8px;height:8px}.hero__cue{z-index:2;font:700 .64rem/1 var(--font-display);letter-spacing:.2em;text-transform:uppercase;color:#ffffffb8;flex-direction:column;align-items:center;gap:.55rem;display:flex;position:absolute;bottom:1.6rem;left:50%;transform:translate(-50%)}.hero__cue i{background:linear-gradient(#ffffffb3,#0000);width:1px;height:34px;position:relative;overflow:hidden}.hero__cue i:after{content:"";background:var(--accent);animation:cueRun 2.1s var(--ease) infinite;position:absolute;inset:0}@keyframes cueRun{0%{transform:translateY(-100%)}60%,to{transform:translateY(100%)}}.hero--page{min-height:min(76svh,760px)}.hero--page .hero__title{max-width:18ch}@media (width<=540px){.hero__ctas{flex-direction:column;align-items:stretch;width:100%}.hero__ctas .btn{width:100%}.hero__cue{display:none}}.js .hero:not(.in) .hero__content>*{opacity:0;transform:translateY(24px)}.js .hero.in .hero__content>*{animation:heroRise .95s var(--ease) backwards;animation-delay:calc(var(--i,0) * .13s + 60ms)}@keyframes heroRise{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}.ticker{background:var(--accent);border-block:3px solid var(--ink);padding:.85rem 0;overflow:hidden}.ticker__track{width:max-content;animation:30s linear infinite tickerscroll;display:flex}.ticker__group{font-family:var(--font-poster);text-transform:uppercase;color:var(--ink);align-items:center;gap:1.4rem;padding-right:1.4rem;font-size:clamp(1rem,2.1vw,1.5rem);display:flex}.ticker__dot{opacity:.45}@keyframes tickerscroll{0%{transform:none}to{transform:translate(-33.333%)}}.strip__head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:2.4rem;display:flex}.strip__scroll{scroll-snap-type:x proximity;scroll-padding-left:var(--pad);padding:0 var(--pad) 1.2rem;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;gap:1rem;display:flex;overflow-x:auto}.strip__scroll::-webkit-scrollbar{height:8px}.strip__scroll::-webkit-scrollbar-track{background:#00000012}.strip__scroll::-webkit-scrollbar-thumb{background:var(--accent);border-radius:4px}.strip__item{aspect-ratio:4/5;scroll-snap-align:start;border-radius:6px;flex:0 0 clamp(255px,29vw,360px);position:relative;overflow:hidden}.strip__item img{object-fit:cover;width:100%;height:100%;transition:transform .65s var(--ease)}.strip__item:hover img{transform:scale(1.07)}.strip__overlay{color:#fff;background:linear-gradient(#0000 0%,#16181c0d 42%,#16181ce0 100%);flex-direction:column;justify-content:flex-end;padding:1.2rem;display:flex;position:absolute;inset:0}.strip__cat{font:700 .66rem/1 var(--font-display);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:.35rem}.strip__title{font:600 1rem/1.3 var(--font-display)}.svc__head{border-bottom:1px solid var(--line-dark);grid-template-columns:1.3fr 1fr;align-items:end;gap:3rem;margin-bottom:2.8rem;padding-bottom:1.8rem;display:grid}.svc__grid{grid-template-columns:repeat(3,1fr);gap:1.3rem;display:grid}@media (width<=1040px){.svc__grid{grid-template-columns:repeat(2,1fr)}.svc__head{grid-template-columns:1fr;gap:1.4rem}}@media (width<=620px){.svc__grid{grid-template-columns:1fr}}.svc-card{color:#fff;background-color:var(--coal);border:1px solid var(--line-dark);transition:transform .35s var(--ease), border-color .35s var(--ease), box-shadow .35s var(--ease);background-image:repeating-linear-gradient(135deg,#ffffff07 0 1px,#0000 1px 8px);border-radius:10px;flex-direction:column;display:flex;position:relative;overflow:hidden}.svc-card:after{content:"";background:var(--accent);transform-origin:0;height:4px;transition:transform .4s var(--ease);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.svc-card:hover{border-color:var(--accent);transform:translateY(-8px);box-shadow:0 30px 60px -28px #000000bf}.svc-card:hover:after{transform:scaleX(1)}.svc-card__media{aspect-ratio:5/4;position:relative;overflow:hidden}.svc-card__media img{object-fit:cover;width:100%;height:100%;transition:transform .7s var(--ease)}.svc-card__media:before{content:"";z-index:1;background:linear-gradient(#16181c26 0%,#0000 40%,#16181cdb 100%);position:absolute;inset:0}.svc-card__media:after{content:"";z-index:1;background:var(--accent);mix-blend-mode:multiply;opacity:0;transition:opacity .4s var(--ease);position:absolute;inset:0}.svc-card:hover .svc-card__media img{transform:scale(1.09)}.svc-card:hover .svc-card__media:after{opacity:.1}.svc-card__body{flex-direction:column;flex:1;padding:1.4rem 1.4rem 1.7rem;display:flex}.svc-card__name{font-family:var(--font-poster);text-transform:uppercase;margin-bottom:.55rem;font-size:1.28rem;line-height:1.1}.svc-card__desc{color:#ffffffad;flex:1;margin-bottom:1.1rem;font-size:.93rem;line-height:1.6}.svc-card__cta{font:700 .76rem/1 var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:var(--accent);align-items:center;gap:.45rem;display:inline-flex}.svc-card:hover .svc-card__cta svg{transform:translate(5px)}.svc-card__cta svg{transition:transform .3s var(--ease)}.intro__grid{grid-template-columns:1fr 1fr;align-items:center;gap:clamp(2rem,5vw,4rem);display:grid}@media (width<=900px){.intro__grid{grid-template-columns:1fr}}.intro__media{aspect-ratio:4/3;border-radius:6px;position:relative;overflow:hidden;box-shadow:0 30px 60px -30px #00000080}.intro__media img{object-fit:cover;width:100%;height:100%}.stats{border-top:1px solid var(--line);grid-template-columns:repeat(2,1fr);gap:1.5rem 1rem;margin-top:2rem;padding-top:2rem;display:grid}.stat__val{font-family:var(--font-poster);color:var(--accent-ink);font-size:clamp(1.6rem,2.8vw,2.2rem);line-height:1}.stat__label{font:700 .7rem/1.3 var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:var(--text-mute);margin-top:.35rem}.section--dark .stat__val{color:var(--accent)}.section--dark .stat__label{color:#ffffff8c}.section--dark .stats{border-top-color:var(--line-dark)}.certs{grid-template-columns:repeat(3,1fr);gap:1.2rem;display:grid}@media (width<=860px){.certs{grid-template-columns:1fr}}.cert{background:var(--coal);border:1px solid var(--line-dark);border-radius:8px;padding:2.1rem 1.7rem 1.9rem;position:relative;overflow:hidden}.cert:before{content:"";background:var(--accent);height:4px;position:absolute;inset:0 0 auto}.cert__name{font-family:var(--font-poster);text-transform:uppercase;color:#fff;margin-bottom:.5rem;font-size:1.22rem;line-height:1.15}.cert__note{color:#ffffffa8;font-size:.9rem;line-height:1.6}.proc__grid{grid-template-columns:1fr 1fr;align-items:center;gap:clamp(2rem,5vw,4rem);display:grid}@media (width<=900px){.proc__grid{grid-template-columns:1fr}}.proc__steps{flex-direction:column;gap:1.15rem;margin-top:1.8rem;display:flex}.proc__step{grid-template-columns:auto 1fr;align-items:start;gap:1rem;display:grid}.proc__n{background:var(--accent);width:38px;height:38px;color:var(--ink);font:700 .8rem/1 var(--font-display);border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.proc__name{font:700 1.02rem/1.3 var(--font-display);margin-bottom:.2rem}.proc__desc{color:var(--text-soft);font-size:.94rem;line-height:1.6}.section--dark .proc__desc{color:#ffffffb3}.proc__media{aspect-ratio:4/3;border-radius:6px;overflow:hidden;box-shadow:0 30px 60px -30px #0000008c}.proc__media img{object-fit:cover;width:100%;height:100%}.why__grid{grid-template-columns:repeat(3,1fr);gap:1.2rem;display:grid}@media (width<=880px){.why__grid{grid-template-columns:1fr 1fr}}@media (width<=560px){.why__grid{grid-template-columns:1fr}}.why__item{background:var(--paper);border-top:4px solid var(--accent);border-radius:0 0 6px 6px;padding:1.9rem 1.5rem}.section--paper .why__item{background:var(--mist)}.why__title{font-family:var(--font-poster);text-transform:uppercase;margin:0 0 .55rem;font-size:1.08rem;line-height:1.15}.why__desc{color:var(--text-soft);font-size:.93rem;line-height:1.65}.area__grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.9rem;margin-top:2.2rem;display:grid}.area__card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);transition:all .28s var(--ease);flex-direction:column;gap:.3rem;padding:1.15rem 1.25rem;display:flex}.area__card:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:0 16px 32px -20px #00000059}.area__name{font-family:var(--font-poster);text-transform:uppercase;font-size:1.02rem}.area__county{font:600 .74rem/1 var(--font-display);letter-spacing:.08em;text-transform:uppercase;color:var(--text-mute)}.band{background:var(--accent);color:var(--ink);padding-block:clamp(2.6rem,6vw,4rem)}.band__inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:2rem;display:flex}.band h2{font-family:var(--font-poster);text-transform:uppercase;max-width:20ch;font-size:clamp(1.5rem,3vw,2.3rem);line-height:1.08}.faq__layout{grid-template-columns:1fr 1.45fr;align-items:start;gap:clamp(2rem,5vw,4rem);display:grid}@media (width<=900px){.faq__layout{grid-template-columns:1fr}}.faq__call{background:var(--ink);color:#fff;border-radius:var(--radius);font:700 .84rem/1 var(--font-display);transition:background .25s var(--ease), color .25s var(--ease);align-items:center;gap:.6rem;margin-top:1.4rem;padding:.95rem 1.35rem;display:inline-flex}.faq__call:hover{background:var(--accent);color:var(--ink)}.faq__item{border-top:1px solid var(--line)}.faq__item:last-child{border-bottom:1px solid var(--line)}.faq__trigger{text-align:left;grid-template-columns:1fr auto;align-items:center;gap:1.4rem;width:100%;padding:1.35rem .2rem;display:grid}.faq__q{font:600 1.04rem/1.35 var(--font-display)}.faq__icon{border:2px solid var(--ink);width:38px;height:38px;transition:all .3s var(--ease);border-radius:50%;flex:none;justify-content:center;align-items:center;display:flex}.faq__trigger:hover .faq__icon,.faq__trigger[aria-expanded=true] .faq__icon{background:var(--accent);border-color:var(--accent)}.faq__trigger[aria-expanded=true] .faq__icon{transform:rotate(45deg)}.faq__answer{max-height:0;transition:max-height .4s var(--ease);overflow:hidden}.faq__answer.open{max-height:520px}.faq__answer p{color:var(--text-soft);max-width:68ch;padding:0 .2rem 1.35rem;font-size:.97rem;line-height:1.75}.contact{scroll-margin-top:calc(var(--header-h) + 12px);position:relative;overflow:hidden}.contact:before{content:"";pointer-events:none;opacity:.16;background:radial-gradient(circle,var(--accent) 0%,#0000 70%);width:540px;height:540px;position:absolute;bottom:-220px;left:-160px}.contact__grid{z-index:1;grid-template-columns:1fr 1fr;align-items:start;gap:clamp(2rem,5vw,4rem);display:grid;position:relative}@media (width<=900px){.contact__grid{grid-template-columns:1fr}.contact__form{order:-1}}.channels{flex-direction:column;gap:.85rem;margin-top:1.9rem;display:flex}.channel{color:#fff;border:1px solid var(--line-dark);transition:all .3s var(--ease);background:#ffffff0b;border-radius:6px;align-items:center;gap:1rem;padding:1rem;display:flex}a.channel:hover{background:var(--coal);border-color:var(--accent);transform:translate(6px)}.channel__icon{background:var(--accent);width:44px;height:44px;color:var(--ink);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.channel>span:last-child{flex-direction:column;min-width:0;display:flex}.channel__label{font:700 .68rem/1 var(--font-display);letter-spacing:.14em;text-transform:uppercase;color:#ffffff94;display:block}.channel__val{font:600 1.02rem/1.3 var(--font-display);overflow-wrap:anywhere;margin-top:.3rem;display:block}.form{background:var(--paper);color:var(--ink);border-radius:8px;padding:1.9rem;box-shadow:0 40px 90px -30px #0000008c}@media (width<=480px){.form{padding:1.4rem}}.form--hero{box-shadow:none}.field{margin-bottom:1rem}.field label{font:700 .7rem/1 var(--font-display);letter-spacing:.12em;text-transform:uppercase;color:var(--text-mute);margin-bottom:.45rem;display:block}.field input,.field select,.field textarea{width:100%;font:400 1rem/1.4 var(--font-display);color:var(--ink);background:var(--mist);border:1px solid var(--line);border-radius:var(--radius);transition:border-color .2s var(--ease), background .2s var(--ease);padding:.85rem .9rem}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);background:#fff;outline:none}.field textarea{resize:vertical;min-height:108px}.form__row{grid-template-columns:1fr 1fr;gap:.8rem;display:grid}@media (width<=520px){.form__row{grid-template-columns:1fr;gap:0}}.form__submit{width:100%;margin-top:.4rem}.form__note{color:var(--text-mute);text-align:center;margin-top:.9rem;font-size:.82rem;line-height:1.5}.form__note a{color:var(--accent-ink);font-weight:600}.form__status{border-radius:var(--radius);margin-top:.9rem;padding:.85rem 1rem;font-size:.9rem;line-height:1.5;display:none}.form__status.ok{color:#1c6b38;background:#1e783c1a;border:1px solid #1e783c47;display:block}.form__status.err{color:#9d2626;background:#b4282814;border:1px solid #b4282840;display:block}.hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.phero{background:var(--ink);color:#fff;padding-top:var(--header-h);position:relative;overflow:hidden}.phero__media{position:absolute;inset:0}.phero__media img{object-fit:cover;width:100%;height:100%}.phero__media:after{content:"";background:linear-gradient(90deg,#16181cf0 0%,#16181cb8 45%,#16181c73 100%);position:absolute;inset:0}.phero__inner{z-index:1;max-width:780px;padding-block:clamp(3rem,8vw,5.5rem);position:relative}.crumbs{font:600 .74rem/1 var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:#ffffff8c;flex-wrap:wrap;gap:.5rem;margin-bottom:1.2rem;display:flex}.crumbs a:hover{color:var(--accent)}.prose{max-width:68ch}.prose h2{font-family:var(--font-poster);text-transform:uppercase;margin:2.4rem 0 1rem;font-size:clamp(1.5rem,2.6vw,2rem);line-height:1.08}.prose h3{font:700 1.1rem/1.3 var(--font-display);margin:1.8rem 0 .6rem}.prose p{color:var(--text-soft);margin-bottom:1.1rem;font-size:1.04rem;line-height:1.78}.checks{gap:.7rem;margin:1.2rem 0 1.8rem;display:grid}.checks li{color:var(--text-soft);grid-template-columns:auto 1fr;align-items:start;gap:.7rem;font-size:1rem;line-height:1.55;display:grid}.checks li:before{content:"";background:var(--accent);border-radius:3px;flex:none;width:18px;height:18px;margin-top:.2rem;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5' fill='none' stroke='%23000' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5' fill='none' stroke='%23000' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat}.split{grid-template-columns:1.5fr 1fr;align-items:start;gap:clamp(2rem,5vw,3.5rem);display:grid}@media (width<=900px){.split{grid-template-columns:1fr}}.aside{top:calc(var(--header-h) + 20px);background:var(--mist);border-top:4px solid var(--accent);border-radius:8px;padding:1.6rem;position:sticky}@media (width<=900px){.aside{position:static}}.aside h3{font-family:var(--font-poster);text-transform:uppercase;margin-bottom:.7rem;font-size:1.2rem;line-height:1.1}.aside ul{flex-direction:column;gap:.5rem;margin-top:1rem;display:flex}.aside ul a{font:600 .93rem/1.4 var(--font-display);color:var(--text-soft);gap:.5rem;display:flex}.aside ul a:hover{color:var(--accent-ink)}.footer{background:var(--ink);color:#fff;padding-block:clamp(3rem,6vw,4.5rem) 1.5rem}.footer__grid{grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:2.5rem;display:grid}@media (width<=900px){.footer__grid{grid-template-columns:1fr 1fr;gap:2rem}}@media (width<=560px){.footer__grid{grid-template-columns:1fr}}.footer h2{font:700 .74rem/1 var(--font-display);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:1.1rem}.footer ul{flex-direction:column;gap:.6rem;display:flex}.footer a{color:#ffffffbd;font-size:.93rem}.footer a:hover{color:var(--accent)}.footer__blurb{color:#fff9;max-width:34ch;margin-top:.9rem;font-size:.93rem;line-height:1.7}.footer__legal{border-top:1px solid var(--line-dark);color:#ffffff73;flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:3rem;padding-top:1.4rem;font-size:.82rem;display:flex}.js .reveal{opacity:0;transition:opacity .8s var(--ease), transform .8s var(--ease)}.js .reveal:not(.in){transform:translateY(22px)}.js .reveal.in{opacity:1}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation:none!important}.js .reveal{opacity:1;transform:none}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:999;background:var(--accent);color:var(--ink);border-radius:var(--radius);padding:.8rem 1.2rem;transition:top .2s;position:absolute;top:-60px;left:8px}.skip-link:focus{top:8px}.js .stagger>*{opacity:0;transition:opacity .75s var(--ease), transform .75s var(--ease)}.js .stagger:not(.in)>*{transform:translateY(26px)}.js .stagger.in>*{opacity:1}.js .stagger.in>:first-child{transition-delay:20ms}.js .stagger.in>:nth-child(2){transition-delay:.1s}.js .stagger.in>:nth-child(3){transition-delay:.18s}.js .stagger.in>:nth-child(4){transition-delay:.26s}.js .stagger.in>:nth-child(5){transition-delay:.34s}.js .stagger.in>:nth-child(6){transition-delay:.42s}.js .stagger.in>:nth-child(n+7){transition-delay:.5s}.js .wipe{clip-path:inset(0 100% 0 0);transition:clip-path 1.05s var(--ease)}.js .wipe.in{clip-path:inset(0)}.px{will-change:transform}.stat__val{font-variant-numeric:tabular-nums}.js .unmask{clip-path:inset(0 0 100%);transition:clip-path 1.1s var(--ease)}.js .unmask.in{clip-path:inset(0)}.callbar{z-index:90;background:var(--line-dark);transition:transform .35s var(--ease);gap:1px;display:none;position:fixed;bottom:0;left:0;right:0;transform:translateY(110%)}.callbar.show{transform:none}.callbar a{font:700 .8rem/1 var(--font-display);letter-spacing:.06em;text-transform:uppercase;flex:1;justify-content:center;align-items:center;gap:.5rem;padding:.95rem .5rem;display:flex}.callbar__call{background:var(--accent);color:var(--ink)}.callbar__quote{background:var(--ink);color:#fff}@media (width<=820px){.callbar{display:flex}.footer{padding-bottom:calc(1.5rem + 56px)}}@media (prefers-reduced-motion:reduce){.js .stagger>*{opacity:1;transform:none}.js .wipe,.js .unmask{clip-path:none}.js .hero__content>*,.js .hero:not(.in) .hero__content>*{opacity:1!important;animation:none!important;transform:none!important}.hero--still .hero__media img,.hero__cue i:after{animation:none}.px{transform:none!important}}.crumbs--bar{background:var(--coal);color:#fff9;border-bottom:1px solid var(--line-dark);margin:0;padding:.85rem 0}.crumbs--bar .wrap{flex-wrap:wrap;gap:.5rem;display:flex}.crumbs--bar a{color:#ffffffbf}.crumbs--bar a:hover{color:var(--accent)}.brandmark{align-items:center;gap:.6rem;display:flex}.brandmark img{width:auto;height:42px;display:block}.footer .brandmark img{height:64px}.hero__logo{filter:drop-shadow(0 18px 44px #0000009e);width:clamp(270px,34vw,470px);max-width:88vw;height:auto;margin-bottom:1.4rem}@media (width<=640px){.brandmark img{height:34px}.footer .brandmark img{height:54px}}ul.social{flex-flow:wrap;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.footer ul.social{flex-direction:row;gap:.5rem;margin-top:1.1rem}.mobile-menu ul.social{margin-top:.4rem}.social a{border-radius:var(--radius);color:#ffffffd1;border:1px solid var(--line-dark);width:40px;height:40px;transition:background .25s var(--ease), color .25s var(--ease), transform .25s var(--ease), border-color .25s var(--ease);background:#ffffff0f;justify-content:center;align-items:center;display:inline-flex}.social a:hover{background:var(--accent);color:var(--ink);border-color:var(--accent);transform:translateY(-3px)}.social--light a{color:var(--text-soft);border-color:var(--line);background:0 0}.social--light a:hover{background:var(--accent);color:var(--ink);border-color:var(--accent)}.header__prog{background:var(--accent);transform-origin:0;opacity:0;width:100%;height:2px;transition:opacity .35s var(--ease);pointer-events:none;position:absolute;bottom:-1px;left:0;transform:scaleX(0)}.header.stuck .header__prog{opacity:1}.ticker--js .ticker__track{will-change:transform;animation:none}.proc__steps{position:relative}.proc__rail{background:var(--line);z-index:0;width:2px;position:absolute;top:19px;bottom:19px;left:18px;overflow:hidden}.section--dark .proc__rail,.section--mist .proc__rail{background:#16181c29}.proc__rail i{background:var(--accent);transform-origin:50% 0;will-change:transform;position:absolute;inset:0;transform:scaleY(1)}.proc__step{z-index:1;position:relative}.proc-scrub .proc__rail i{transform:scaleY(0)}.proc-scrub .proc__n{color:var(--text-soft);transition:background .45s var(--ease), color .45s var(--ease);background:#16181c1a}.section--dark .proc-scrub .proc__n{color:#ffffffbf;background:#ffffff24}.proc-scrub .proc__step.lit .proc__n{background:var(--accent);color:var(--ink)}.grid-tex:before{transform:translate3d(0, var(--gridY,0px), 0);inset:-90px 0}@media (prefers-reduced-motion:reduce){.header__prog{display:none}.ticker__track{animation:none!important}.ticker--js .ticker__track{transform:none!important}.proc-scrub .proc__rail i{transform:scaleY(1)!important}.proc-scrub .proc__n{background:var(--accent);color:var(--ink)}.grid-tex:before{transform:none!important}}

/* ==========================================================================
   MOTION + INTERACTION LAYER v2
   Every entrance state below is gated on .js so that with JavaScript blocked
   the content paints fully visible. Nothing here hardcodes a brand color.
   ========================================================================== */

/* --- token safety: text on an accent fill, accent text on a dark surface --- */
.btn--primary{color:var(--on-accent,var(--ink))}
.proc__n,.channel__icon,.callbar__call,.skip-link,.ticker__group,.band{color:var(--on-accent,var(--ink))}
.proc-scrub .proc__step.lit .proc__n{color:var(--on-accent,var(--ink))}
.header__phone:hover,.header__logo span{color:var(--on-accent,var(--ink))}
.header__logo span{color:var(--accent-lite,var(--accent))}
.hero__eyebrow,.section--dark .kicker,.svc-card__cta,.footer h2,.section--dark .stat__val{color:var(--accent-lite,var(--accent))}
.header__nav a:hover,.footer a:hover,.crumbs a:hover,.mobile-menu nav a:hover{color:var(--accent-lite,var(--accent))}
.svc-card:hover{border-color:var(--accent)}

/* --- scroll progress bar: readable on a dark header even with a dark accent --- */
.header__prog{background:var(--accent-lite,var(--accent));height:3px;box-shadow:0 0 10px var(--accent-lite,var(--accent))}

/* ==========================================================================
   1. DIRECTIONAL REVEALS
   .reveal--left | --right | --up | --down | --scale | --blur | --rotate
   --d  per element entry delay      --rv  duration override
   ========================================================================== */
/* Nothing here asserts `transform` once the element has landed. A reveal that keeps
   declaring transform:none outranks .svc-card:hover and silently kills every card lift. */
.js .reveal--left:not(.stagger),.js .reveal--right:not(.stagger),.js .reveal--up:not(.stagger),.js .reveal--down:not(.stagger),.js .reveal--scale:not(.stagger),.js .reveal--blur:not(.stagger),.js .reveal--rotate:not(.stagger){opacity:0;transition:opacity var(--rv,.85s) var(--ease) var(--d,0ms),transform var(--rv,.85s) var(--ease) var(--d,0ms),filter var(--rv,.85s) var(--ease) var(--d,0ms)}
.js .reveal--left:not(.stagger):not(.in){transform:translate3d(calc(var(--rvd,56px) * -1),0,0);will-change:transform,opacity}
.js .reveal--right:not(.stagger):not(.in){transform:translate3d(var(--rvd,56px),0,0);will-change:transform,opacity}
.js .reveal--up:not(.stagger):not(.in){transform:translate3d(0,var(--rvd,48px),0);will-change:transform,opacity}
.js .reveal--down:not(.stagger):not(.in){transform:translate3d(0,calc(var(--rvd,44px) * -1),0);will-change:transform,opacity}
.js .reveal--scale:not(.stagger):not(.in){transform:scale(.94);will-change:transform,opacity}
.js .reveal--blur:not(.stagger):not(.in){transform:translate3d(0,18px,0);filter:blur(10px);will-change:transform,opacity,filter}
.js .reveal--rotate:not(.stagger):not(.in){transform:translate3d(0,40px,0) rotate(1.8deg);will-change:transform,opacity}
.js .reveal--left.in,.js .reveal--right.in,.js .reveal--up.in,.js .reveal--down.in,.js .reveal--scale.in,.js .reveal--blur.in,.js .reveal--rotate.in{opacity:1}
.reveal--fast{--rv:.7s}
.reveal--slow{--rv:.95s}
.reveal--far{--rvd:64px}

/* --- stagger, now direction aware. The container stays neutral, the children move. --- */
.js .stagger>*{transition:opacity .78s var(--ease),transform .78s var(--ease),filter .78s var(--ease)}
.js .stagger.reveal--left:not(.in)>*{transform:translate3d(-48px,0,0)}
.js .stagger.reveal--right:not(.in)>*{transform:translate3d(48px,0,0)}
.js .stagger.reveal--up:not(.in)>*{transform:translate3d(0,40px,0)}
.js .stagger.reveal--down:not(.in)>*{transform:translate3d(0,-36px,0)}
.js .stagger.reveal--scale:not(.in)>*{transform:scale(.94)}
.js .stagger.reveal--blur:not(.in)>*{transform:translate3d(0,16px,0);filter:blur(9px)}
.js .stagger.reveal--rotate:not(.in)>*{transform:translate3d(0,34px,0) rotate(1.6deg)}
.js .stagger.in>:nth-child(1){transition-delay:var(--d,0ms)}
.js .stagger.in>:nth-child(2){transition-delay:calc(var(--d,0ms) + var(--sg,88ms))}
.js .stagger.in>:nth-child(3){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*2)}
.js .stagger.in>:nth-child(4){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*3)}
.js .stagger.in>:nth-child(5){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*4)}
.js .stagger.in>:nth-child(6){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*5)}
.js .stagger.in>:nth-child(7){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*6)}
.js .stagger.in>:nth-child(8){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*7)}
.js .stagger.in>:nth-child(9){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*8)}
.js .stagger.in>:nth-child(n+10){transition-delay:calc(var(--d,0ms) + var(--sg,88ms)*9)}
.stagger--fast{--sg:52ms}
.stagger--slow{--sg:145ms}

/* ==========================================================================
   2. HOVER + MICRO INTERACTION LAYER
   Everything behind @media (hover:hover) so a touch device never sticks.
   ========================================================================== */
.why__item,.area__card,.strip__item,.cert{position:relative}
.why__item,.area__card{overflow:hidden}
.why__item:after,.area__card:after,.strip__item:after{content:"";background:var(--accent);transform-origin:0 50%;height:3px;transition:transform .45s var(--ease);position:absolute;bottom:0;left:0;right:0;z-index:2;transform:scaleX(0)}
.strip__item:after{height:4px}
.why__item{transition:transform .38s var(--ease),box-shadow .38s var(--ease)}
.area__card{transition:transform .32s var(--ease),box-shadow .32s var(--ease),border-color .32s var(--ease)}
.strip__item{transition:transform .42s var(--ease),box-shadow .42s var(--ease)}
.cert{transition:transform .38s var(--ease),box-shadow .38s var(--ease),border-color .38s var(--ease)}
.cert:before{transition:height .38s var(--ease)}
.cert__name,.area__name,.strip__title{transition:color .28s var(--ease),transform .38s var(--ease)}
.svc-card__name{transition:color .28s var(--ease)}
.intro__media img,.proc__media img{transition:transform .8s var(--ease)}

@media (hover:hover){
  .why__item:hover{transform:translateY(-6px);box-shadow:0 26px 52px -26px #16181c73}
  .area__card:hover{transform:translateY(-6px);box-shadow:0 24px 46px -24px #16181c8c;border-color:var(--accent)}
  .strip__item:hover{transform:translateY(-8px);box-shadow:0 34px 62px -30px #16181cb3}
  .cert:hover{transform:translateY(-6px);box-shadow:0 30px 58px -28px #000000bf;border-color:var(--accent)}
  .why__item:hover:after,.area__card:hover:after,.strip__item:hover:after{transform:scaleX(1)}
  .cert:hover:before{height:7px}
  .cert:hover .cert__name{color:var(--accent-lite,var(--accent))}
  .area__card:hover .area__name{color:var(--accent-ink)}
  .strip__item:hover .strip__title{transform:translateY(-3px)}
  .svc-card:hover .svc-card__name{color:var(--accent-lite,var(--accent))}
  .intro__media:hover img,.proc__media:hover img{transform:scale(1.05)}
}

/* --- buttons: sheen sweep + a real pressed state --- */
.btn{isolation:isolate;position:relative;overflow:hidden}
.btn:before{content:"";pointer-events:none;background:linear-gradient(105deg,#0000 34%,#ffffff5c 47%,#ffffff5c 53%,#0000 66%);transition:transform .75s var(--ease);position:absolute;inset:0;transform:translate3d(-130%,0,0)}
@media (hover:hover){.btn:hover:before{transform:translate3d(130%,0,0)}}
.btn:active{transform:translateY(1px) scale(.975)}
.faq__call:active,.channel:active,.header__phone:active{transform:scale(.985)}

/* --- links in body copy and lists: underline grows from the left --- */
@media (hover:hover){
  .body a,.prose a,.checks a,.footer ul a,.aside ul a,.form__note a,.footer__legal a{background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 100%;background-size:0 1px;transition:background-size .42s var(--ease),color .25s var(--ease)}
  .body a:hover,.prose a:hover,.checks a:hover,.footer ul a:hover,.aside ul a:hover,.form__note a:hover,.footer__legal a:hover{background-size:100% 1px}
}

/* --- nav: accent underline grows from center --- */
.header__nav a,.crumbs a{position:relative}
.header__nav a:after,.crumbs a:after{content:"";background:var(--accent-lite,var(--accent));transition:left .3s var(--ease),right .3s var(--ease);height:2px;position:absolute;bottom:-7px;left:50%;right:50%}
.crumbs a:after{bottom:-3px}
@media (hover:hover){.header__nav a:hover:after,.crumbs a:hover:after{left:0;right:0}}

/* --- .tilt : opt in pointer follow 3D, driven by motion.js, max 6deg --- */
.tilt{transform:perspective(900px) rotateX(var(--ry,0deg)) rotateY(var(--rx,0deg));transition:transform .45s var(--ease)}
.tilt.tilt--live{transition:transform .12s linear}
@media (hover:hover){.tilt:hover{transform:perspective(900px) rotateX(var(--ry,0deg)) rotateY(var(--rx,0deg)) translateY(-8px)}}

/* --- .magnetic : opt in CTA pull, driven by motion.js, max 8px --- */
.magnetic{transform:translate3d(var(--mx,0px),var(--my,0px),0);transition:transform .35s var(--ease)}
.magnetic.magnetic--live{transition:transform .1s linear}
@media (hover:hover){.magnetic:hover{transform:translate3d(var(--mx,0px),calc(var(--my,0px) - 2px),0)}}
.magnetic:active{transform:translate3d(var(--mx,0px),1px,0) scale(.975)}

/* ==========================================================================
   3. CUSTOM SELECT (progressive enhancement, native select stays the value)
   ========================================================================== */
.sel{position:relative}
.sel .sel__native{clip:rect(0 0 0 0);white-space:nowrap;background:0 0;border:0;width:1px;height:1px;min-height:0;margin:-1px;padding:0;position:absolute;overflow:hidden;pointer-events:none}
.sel__trigger{width:100%;font:400 1rem/1.4 var(--font-display);color:var(--ink);text-align:left;background:var(--mist);border:1px solid var(--line);border-radius:var(--radius);transition:border-color .22s var(--ease),background .22s var(--ease),box-shadow .22s var(--ease);justify-content:space-between;align-items:center;gap:.75rem;padding:.85rem .9rem;display:flex}
.sel__trigger:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.sel.open .sel__trigger{border-color:var(--accent);background:var(--paper);box-shadow:0 0 0 3px #16181c14}
@media (hover:hover){.sel__trigger:hover{border-color:var(--accent);background:var(--paper)}}
.sel__value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.sel--empty .sel__value{color:var(--text-mute)}
.sel__chev{color:var(--text-mute);transition:transform .3s var(--ease),color .3s var(--ease);flex:none}
.sel.open .sel__chev{color:var(--accent-ink);transform:rotate(180deg)}
.sel__panel{z-index:40;max-height:min(288px,52vh);background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);opacity:0;visibility:hidden;transform-origin:50% 0;transition:opacity .22s var(--ease),transform .26s var(--ease),visibility .26s;margin:0;padding:.34rem;list-style:none;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:auto;box-shadow:0 30px 60px -26px #16181c8c,0 2px 6px #16181c1a;transform:translateY(-8px) scale(.985)}
.sel.open .sel__panel{opacity:1;visibility:visible;transform:none}
.sel__panel:focus-visible{outline:3px solid var(--accent);outline-offset:-1px}
.sel__opt{font:400 .97rem/1.35 var(--font-display);color:var(--ink);border-radius:calc(var(--radius) + 1px);cursor:pointer;transition:background .18s var(--ease),color .18s var(--ease);align-items:center;gap:.6rem;padding:.62rem .7rem;display:flex}
.sel__opt:before{content:"";background:#0000;border-radius:2px;transition:background .18s var(--ease);flex:none;align-self:stretch;width:3px}
.sel__opt.act{background:#16181c0f}
.sel__opt[aria-selected=true]{color:var(--accent-ink);font-weight:600}
.sel__opt[aria-selected=true]:before{background:var(--accent)}
.sel__opt[aria-disabled=true]{color:var(--text-mute);cursor:default}
@media (hover:hover){.sel__opt:hover{background:#16181c0f}}
.form--dark .sel__trigger,.section--dark .sel__trigger{color:#fff;background:#ffffff0f;border-color:var(--line-dark)}

/* ==========================================================================
   4. REDUCED MOTION: every new effect is dead, every hidden state is visible
   ========================================================================== */
@media (prefers-reduced-motion:reduce){
  .js .reveal--left,.js .reveal--right,.js .reveal--up,.js .reveal--down,.js .reveal--scale,.js .reveal--blur,.js .reveal--rotate{opacity:1!important;filter:none!important;transform:none!important}
  .js .stagger>*,.js .stagger.reveal--left>*,.js .stagger.reveal--right>*,.js .stagger.reveal--up>*,.js .stagger.reveal--down>*,.js .stagger.reveal--scale>*,.js .stagger.reveal--blur>*,.js .stagger.reveal--rotate>*{opacity:1!important;filter:none!important;transform:none!important;transition-delay:0s!important}
  .why__item:hover,.area__card:hover,.strip__item:hover,.cert:hover,.svc-card:hover,.btn:hover,.btn:active,.magnetic,.magnetic:hover,.magnetic:active,.tilt,.tilt:hover,.strip__item:hover .strip__title,.intro__media:hover img,.proc__media:hover img{transform:none!important}
  .btn:before{display:none}
  .header__nav a:after,.crumbs a:after{transition:none!important}
  .sel__panel{transition:none!important}
  .sel.open .sel__chev{transform:none!important}
}

/* ==========================================================================
   5. CRO LAYER
   Added for the CRO Master Checklist rebuild. Additive only: nothing above is
   edited. Every block names the rule it closes and the measured result behind
   it. No literal brand color appears here, so palette-patch.py stays correct.
   ========================================================================== */

/* --- rule 12 (ROBUST, HubSpot +16% to +28%): conversion page with no nav ---
   The bare header keeps the logo and the phone and nothing else, so the only
   forward action on the page is the form. */
.header--bare .header__cta--bare{display:flex}
@media (width<=1040px){.header--bare .header__cta--bare{display:flex}}
.footer--bare{padding-block:2.2rem 1.4rem}
.footer__blurb--bare{color:#ffffffbd;max-width:none;margin-top:0;font-size:.9rem}
.footer--bare .footer__legal{margin-top:1.2rem}
.callbar--bare .callbar__call{flex:1}

/* --- rules 49, 53, 55, 56, 57: the form ---------------------------------- */
/* 55 (ROBUST, Baymard: only 14% of checkouts mark BOTH states) */
.form__legend{color:var(--text-soft);margin-bottom:1.1rem;font-size:.82rem;line-height:1.4}
.field label .req,.form__legend .req{color:var(--accent-ink);margin-left:.25rem;font-weight:700}
.field label .opt,.form__more-toggle .opt{color:var(--text-soft);text-transform:none;letter-spacing:0;margin-left:.4rem;font-weight:400}
/* 49 (ROBUST, HubSpot: 4 fields to 3 measured nearly +50% across 40,000 pages).
   Email and property address live behind this disclosure, closed by default, so
   the form reads as three fields and neither field is lost. */
.form__more{border-top:1px solid var(--line);margin:.2rem 0 1.1rem;padding-top:.9rem}
.form__more-toggle{font:700 .74rem/1 var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:var(--text-soft);cursor:pointer;align-items:center;gap:.4rem;min-height:44px;display:flex}
.form__more-toggle::marker,.form__more-toggle::-webkit-details-marker{color:var(--accent-ink)}
.form__more[open] .form__more-toggle{margin-bottom:.7rem}
.form__more-toggle:hover{color:var(--ink)}
/* 56 (ROBUST, Baymard: 31% of tested sites had no inline validation) */
.field.is-err input,.field.is-err select{border-color:#b3261e;background:#fff6f5}
.field.is-ok input,.field.is-ok select{border-color:#1c6b38}
.field__err{color:#b3261e;margin-top:.35rem;font-size:.82rem;line-height:1.4}
/* 57 (ROBUST, VWO 100+ tests: a trust cue at the CTA lifted conversion +42%
   for first-time visitors to a brand they do not already know) */
.form__privacy{color:var(--text-soft);justify-content:center;align-items:flex-start;gap:.45rem;margin-top:.9rem;font-size:.84rem;line-height:1.45;display:flex}
.form__privacy svg{flex:none;margin-top:.22rem}

/* --- rules 19, 21, 24, 26: social proof ---------------------------------- */
/* Star glyphs paint the real fraction. 4.9 renders as 4.9, never rounded to a
   flat 5, because rule 20 (ROBUST, Spiegel) records that 46% of shoppers
   distrust a perfect score. The amber is the review convention rather than the
   brand accent, which keeps rule 14's accent isolation intact. */
.stars{line-height:0;display:inline-block;position:relative}
.stars__track,.stars__fill{flex-wrap:nowrap;gap:2px;display:flex}
.stars__track{color:#16181c30}
.stars__fill{color:#e8a33d;width:100%;position:absolute;inset:0;overflow:hidden}
.rev__aggregate--dark .stars__track,.section--dark .stars__track{color:#ffffff40}
.rev__head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:1.6rem;margin-bottom:2.4rem;display:flex}
/* 24 (ROBUST, NNG): the claim itself is the link out to the platform. */
.rev__aggregate{border:1px solid var(--line);border-radius:var(--radius);transition:border-color .28s var(--ease),transform .28s var(--ease);flex-wrap:wrap;align-items:center;gap:.5rem 1rem;min-height:48px;padding:1rem 1.2rem;display:flex}
a.rev__aggregate:hover{border-color:var(--accent);transform:translateY(-2px)}
.rev__aggregate--dark{border-color:var(--line-dark);background:#ffffff0f;color:#fff}
.rev__agg-num{font-family:var(--font-poster);font-size:2.1rem;line-height:1}
.rev__agg-body{flex-direction:column;gap:.35rem;display:flex}
.rev__agg-count{font:600 .82rem/1.3 var(--font-display);color:var(--text-soft)}
.rev__aggregate--dark .rev__agg-count{color:#ffffffbd}
.rev__agg-go{font:700 .74rem/1 var(--font-display);letter-spacing:.09em;text-transform:uppercase;color:var(--accent-ink);align-items:center;gap:.4rem;margin-left:auto;display:inline-flex}
.rev__aggregate--dark .rev__agg-go{color:var(--accent-lite,var(--accent))}
.rev__proof{flex-wrap:wrap;align-items:center;gap:1.2rem;display:flex}
.rev__proof .rev__aggregate{flex:0 0 auto}
/* Hard cap of 6 badges is enforced in the generator, not here: the checklist's
   myth list records 7 or more measuring 8% worse. */
.rev__badges{flex-wrap:wrap;gap:.55rem;display:flex}
.rev__badge{font:600 .82rem/1 var(--font-display);color:var(--text-soft);background:var(--mist);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:.4rem;padding:.75rem .9rem;display:inline-flex}
.rev__badge svg{color:#1c6b38;flex:none}
.rev__grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.3rem;display:grid}
.rev{background:var(--mist);border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:1rem;margin:0;padding:1.6rem;display:flex}
.rev__text{color:var(--ink);margin:0;font-size:1.02rem;line-height:1.6}
.rev__who{align-items:center;gap:.8rem;margin-top:auto;display:flex}
.rev__who-body{flex-direction:column;min-width:0;display:flex}
.rev__face{object-fit:cover;border-radius:50%;flex:none;width:48px;height:48px}
.rev__face--initial{background:var(--ink);color:#fff;font-family:var(--font-poster);place-items:center;font-size:1.15rem;display:grid}
.rev__name{font-size:.98rem;font-weight:700}
.rev__meta{color:var(--text-soft);margin-top:.15rem;font-size:.82rem}
/* 26 (ROBUST, Spiegel +15%): the local-services equivalent of a verified buyer. */
.rev__verified{font:600 .74rem/1 var(--font-display);color:#1c6b38;align-items:center;gap:.35rem;margin-top:.4rem;display:inline-flex}
.rev-inline{margin-bottom:1rem}
.rev-inline .rev__aggregate{width:100%}

/* --- rule 15 (ROBUST, GoodUI 7% to 12.8%, +84%): the repeated CTA --------- */
.cta-row{background:var(--mist);border-block:1px solid var(--line);padding-block:2.2rem}
.cta-row__inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1.4rem;display:flex}
.cta-row__line{font-family:var(--font-poster);text-transform:uppercase;font-size:clamp(1.15rem,2vw,1.5rem);line-height:1.1}
.cta-row__sub{color:var(--text-soft);margin-top:.4rem;font-size:.95rem}
.cta-row__acts{flex-wrap:wrap;gap:.7rem;display:flex}
@media (width<=680px){.cta-row__acts{width:100%}.cta-row__acts .btn{flex:1 1 100%}}

/* --- rule 38 (DIRECTIONAL, CXL eye tracking): a cue that points AT the CTA - */
.cue-down{padding-bottom:3.4rem;position:relative}
.cue-down:after{content:"";background:linear-gradient(var(--accent-ink),#0000);width:2px;height:1.6rem;position:absolute;bottom:1.1rem;left:50%;transform:translateX(-50%)}
.cue-down:before{content:"";border-right:2px solid var(--accent-ink);border-bottom:2px solid var(--accent-ink);width:10px;height:10px;position:absolute;bottom:.8rem;left:50%;transform:translateX(-50%)rotate(45deg)}

/* --- opening hours, read off the contractor's own site ------------------- */
.channel--hours{align-items:flex-start}
.hours{flex-direction:column;gap:.3rem;margin-top:.3rem;display:flex}
.hours li{justify-content:space-between;gap:1.2rem;font:600 .93rem/1.35 var(--font-display);display:flex}
.hours__days{color:#ffffffbd}
.hours__time{white-space:nowrap}
.contact__finance{color:var(--accent-lite,var(--accent));margin-top:.7rem;font-weight:600}

/* --- rule 37 (ROBUST, CXL +24.5%): /quote/ left column carries proof ------ */
.quote__proof{flex-direction:column;align-items:flex-start;gap:1.1rem;display:flex}
.quote__proof .rev__badges{gap:.5rem}
.quote__proof .rev__badge{color:#ffffffd1;background:#ffffff0f;border-color:var(--line-dark)}
.hero__trust--left{text-align:left;justify-content:flex-start;gap:.6rem 1.4rem}

/* --- rules 18 and 70 (ROBUST, Apple HIG 44pt / Google 48px) --------------- */
/* Only the elements on the conversion path are raised here. */
.callbar a{min-height:52px;padding:1.15rem .5rem}
.header__phone{min-height:48px}
.social a{place-items:center;width:48px;height:48px;display:grid}

@media (prefers-reduced-motion:reduce){
  a.rev__aggregate:hover{transform:none}
}

/* --- the optional-fields disclosure needs a visible affordance -------------
   `display:flex` on a <summary> removes the browser's default triangle, so the
   control rendered as plain text with nothing saying it opens. Caught by looking
   at the screenshot, not by any gate. An explicit chevron replaces the marker. */
.form__more-toggle{list-style:none;justify-content:flex-start}
.form__more-toggle::-webkit-details-marker{display:none}
.form__more-toggle:after{content:"";border-right:2px solid currentColor;border-bottom:2px solid currentColor;width:7px;height:7px;margin-top:-3px;margin-left:.2rem;transition:transform .25s var(--ease);transform:rotate(45deg)}
.form__more[open] .form__more-toggle:after{margin-top:2px;transform:rotate(-135deg)}

/* ==========================================================================
   CRO fix 6: contrast (rules 60, 61) and tap targets (rules 18, 70)
   Additive block. Measured values, not estimates. Method and numbers:
   contrast computed with scripts/contrast-gate.py's WCAG 2.1 formula,
   box sizes read from live getBoundingClientRect() at 390x844 in Chrome.
   ========================================================================== */

/* --- rules 60 and 61: text under the 4.5:1 AA floor ----------------------
   --text-mute was #16181c85 (alpha .522), measured 3.61:1 on --paper and
   3.52:1 on --mist. Both fail. It styles the label on every field of the only
   conversion mechanism on the site, which is the worst possible placement for
   text a 20/40 eye cannot resolve.

   Every selector that reads this token sits on a light surface (.field label,
   .form__note, .stat__label, .area__county, .sel__value, .sel__chev,
   .sel__opt[aria-disabled]), so darkening the token itself fixes all of them
   at once. Checked each one rather than assuming.

   #16181ca5 (alpha .647) measures 5.43:1 on --paper and 5.26:1 on --mist.
   It stays visibly lighter than --text-soft (alpha .722), so the three step
   type hierarchy of ink, soft, mute survives. */
:root{--text-mute:#16181ca5}

/* An outline button sitting ON the accent band inherited --ink, measured
   2.71:1 against the accent fill. The band already flips its own text to
   --on-accent for exactly this reason; the button was missed. --on-accent is
   white on this brand and measures 6.68:1 on the fill. Never hardcode the
   value: dark and light brand accents resolve it differently. */
.band .btn--outline{color:var(--on-accent,var(--ink));border-color:var(--on-accent,var(--ink))}
.band .btn--outline:hover{background:var(--on-accent,var(--ink));color:var(--accent)}

/* --- rules 18 and 70: every tap target reaches 48px ---------------------
   Measured before: sticky call bar 45.4px, header phone 39.4px, social icons
   40x40px, burger 44x44px, brandmark 34px, FAQ call link 44.7px, and 17
   footer and menu links at 18px with no row spacing. Google Material and the
   W3C both put the floor at 48px; Apple's HIG says 44pt. Hold 48. */
.callbar a{min-height:52px;padding:1.15rem .5rem}
.header__phone{min-height:48px}
.social a{width:48px;height:48px}
.header__burger{width:48px;height:48px}
.brandmark{min-height:48px;align-items:center;display:inline-flex}
.faq__call{min-height:48px;align-items:center;display:inline-flex}

/* Floors, so these can never regress below the standard as their padding or
   font size is retuned. All three already measured over 48px; a floor costs
   nothing and removes the need to re-measure after every type change. */
.btn{min-height:48px}
.faq__trigger{min-height:48px}
.sel__trigger{min-height:48px}

/* Footer and mobile menu link lists were 18px rows touching each other, which
   fails the spacing half of rule 70 as well as the size half. Padding rather
   than a fixed height keeps the text baseline where the design put it. */
.footer ul a,.aside ul a,.mobile-menu a{min-height:48px;align-items:center;display:inline-flex}
.footer__legal a{min-height:48px;align-items:center;display:inline-flex}

/* Deliberately NOT enlarged, each for a stated reason:
   .hp            the honeypot. It has to stay invisible or it stops trapping.
   .sel__native   the visually hidden native <select> behind the custom one.
                  It is 1x1 by design and the 48px trigger is its real target.
   .field label   a label forwards focus to its input but is not the primary
                  control, and inflating every label to 48px would pull the
                  form apart vertically. The inputs themselves clear 48px. */

/* --- rule 34 (ROBUST, NNG: 57% of viewing time is above the fold) ----------
   Measured at 1440x900 on /quote/: the submit button sat at 909px, nine pixels
   under the fold. These four declarations are scoped to the in-hero form only,
   so the contact-block form keeps its roomier spacing. Input font size is left
   at 16px on purpose (rule 59, iOS auto-zoom on focus). */
.hero .form--hero{padding:1.5rem}
.hero .form--hero h3{margin-bottom:.5rem;font-size:1.15rem}
.hero .form--hero .form__legend{margin-bottom:.8rem}
.hero .form--hero .field{margin-bottom:.72rem}
.hero .form--hero .form__more{margin:.1rem 0 .85rem;padding-top:.7rem}

/* --- rule 70, second pass. Found by re-measuring, not by assuming the first
   pass was complete. All values below are the measured layout box at 390px. */

/* Was 29px wide by 48px tall: the mark alone is narrow on mobile. */
.brandmark{min-width:48px;justify-content:center}

/* The optional-fields disclosure measured 44px. */
.form__more-toggle{min-height:48px;align-items:center}

/* Breadcrumb links measured 12px tall. */
.crumbs a{min-height:48px;align-items:center;display:inline-flex}

/* Phone links sitting inside a sentence measured 16px, 19px and 43px tall.
   inline-flex would break the line they live in, so the hit area grows with
   padding and is pulled back with an equal negative margin: the touch target
   passes 48px and the text sits exactly where it did. Each of these is the
   only link in its paragraph, so no two hit areas can overlap. */
.form__note a,.footer__blurb a,.aside .body a{padding-block:1.05rem;margin-block:-1.05rem}.form__more:not([open]) .field{display:none}

/* --- rule 60, the failure a computed-style sweep cannot see -----------------
   .strip__cat sat in the accent color ON TOP of a photograph. Any checker that
   resolves a background by walking up to the nearest opaque ancestor reports
   this as accent-on-white and gets the wrong answer in both directions. Read
   off the actual painted pixels of a 390px screenshot, the kicker measured
   2.27:1 against its real backdrop and 3.10:1 in the flattest part of the
   scrim. Both fail 4.5:1.

   Strengthening the scrim does not rescue it: --accent-lite has a relative
   luminance of 0.2387, so it needs a backdrop under 0.0141 to reach 4.5:1, and
   even a 96% opaque scrim over a bright photo only reaches 4.38:1. A mid
   luminance color cannot sit on unpredictable imagery and stay legible.

   So the kicker inherits .strip__overlay's own white, which measured 11.03:1
   on the same backdrop. No literal color is introduced. It also serves rule
   14, which wants the accent isolated to the CTA rather than repeated over
   every portfolio card. Weight, size, letter-spacing and uppercase still
   separate the kicker from the title below it. */
.strip__cat{color:inherit;opacity:.86}

/* ==========================================================================
   TRUST SEALS, WHY-US ICONS, AND PHOTO SERVICE-AREA CARDS
   Additive block. Nothing above this line is edited.

   The client read the site and named four dead spots: credentials printed as
   words instead of marks, why-us cards with no icons, a service area grid of
   plain text, and the same word-only credentials again on the dark row. Every
   rule below exists to fix one of those and every color is a token.
   ========================================================================== */

/* --- 1. the Google mark inside the rating ---------------------------------
   The G sits at the head of the aggregate, so the 4.9 and the 528 read as
   Google's numbers rather than ours. The svg is inline markup with its own
   four brand fills; nothing here recolors it. */
.rev__agg-mark{flex:none;align-items:center;display:inline-flex;margin-right:.15rem}
.rev__agg-mark svg{width:22px;height:22px;display:block}
.rev__aggregate--dark .rev__agg-mark svg,.rev__aggregate .rev__agg-mark svg{opacity:1}

/* --- 2. the seals ---------------------------------------------------------
   Every mark is boxed to one height, so a row of badges with wildly different
   aspect ratios still lines up on its baseline. 42px is the measured height in
   both the light proof block and the dark quote hero.

   The two supplied badges are RGBA but almost entirely opaque, so they need no
   plate on either surface. --seal-plate is defined anyway and left transparent:
   a contractor whose badge is a white knockout sets it once and every seal on
   both surfaces gets a plate, with no markup change. */
.seals{--seal-h:42px;--seal-plate:#0000;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem 1.6rem;width:100%;display:grid;list-style:none;margin:0;padding:0}
.seal{flex-direction:column;align-items:flex-start;gap:.6rem;display:flex}
.seal__mark{background:var(--seal-plate);border-radius:3px;align-items:center;height:var(--seal-h);display:inline-flex}
.seal__mark img{width:auto;height:var(--seal-h);max-width:100%;object-fit:contain;display:block}
.seal__mark--drawn{color:var(--accent-ink);gap:.5rem;padding-right:.2rem}
.seal__mark--drawn svg{flex:none;width:26px;height:26px}
.seal__word{font-family:var(--font-poster);text-transform:uppercase;letter-spacing:-.005em;color:var(--ink);font-size:1.06rem;line-height:1.1}
.seal__note{color:var(--text-soft);max-width:34ch;font-size:.855rem;line-height:1.55}

/* Dark surfaces: the quote hero and anywhere .section--dark wraps a seal row.
   The badges are opaque so they carry themselves; only the drawn shield and
   the note text need lifting off the ink. */
.seals--dark .seal__mark--drawn,.section--dark .seal__mark--drawn{color:var(--accent-lite,var(--accent))}
.seals--dark .seal__word,.section--dark .seal__word{color:#fff}
.seals--dark .seal__note,.section--dark .seal__note{color:#ffffffad}

/* The /quote/ hero runs the marks with no notes, in one tight row, because
   rule 34 is measured in pixels on that page. */
.seals--compact{grid-template-columns:none;flex-wrap:wrap;align-items:center;gap:1.1rem 1.4rem;display:flex}
.seals--compact .seal{--seal-h:34px;flex-direction:row;align-items:center}

/* The proof block stacks: rating first, then the seal row across the width. */
.rev__proof{flex-direction:column;align-items:flex-start;gap:1.7rem;display:flex}
.rev__proof .rev__aggregate{flex:0 0 auto}

/* --- 3. the certifications row, dark -------------------------------------
   Same mark, same plain sentence, on the ink section. The card already carried
   a name and a note; it was the mark that was missing. */
.cert__seal{align-items:center;height:46px;margin-bottom:1.1rem;display:flex}
.cert__seal .seal__mark{--seal-h:46px}
.cert__seal .seal__mark--drawn{color:var(--accent-lite,var(--accent))}
.cert__seal .seal__word{color:#fff}

/* --- 4. why-us icons ------------------------------------------------------
   44px, stroked, inheriting the accent through currentColor on the wrapper so
   no literal color is introduced. */
.why__icon{color:var(--accent-ink);align-items:center;height:44px;margin-bottom:1rem;display:flex}
.why__icon svg{width:44px;height:44px;display:block}
.section--dark .why__icon{color:var(--accent-lite,var(--accent))}
.why__item{transition:transform .38s var(--ease),box-shadow .38s var(--ease),color .28s var(--ease)}

/* --- 5. the service area grid, with photographs --------------------------
   Built out of the .svc-card language: media box, scrim, name over it, county
   under it, and the lift plus zoom plus accent edge every other card on the
   site already does. The .area__card:after accent rail from the hover layer
   still applies, so the edge treatment is literally the same rule. */
.area__grid--media{grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:1.15rem;margin-top:2.4rem}
.area__card--media{background:var(--paper);border:1px solid var(--line);border-radius:8px;gap:0;padding:0;overflow:hidden}
.area__media{aspect-ratio:16/10;display:block;position:relative;overflow:hidden}
.area__media img{object-fit:cover;width:100%;height:100%;transition:transform .7s var(--ease)}
.area__media:before{content:"";z-index:1;background:linear-gradient(#16181c1f 0%,#0000 38%,#16181ceb 100%);position:absolute;inset:0}
.area__media:after{content:"";z-index:1;background:var(--accent);mix-blend-mode:multiply;opacity:0;transition:opacity .4s var(--ease);position:absolute;inset:0}
.area__card--media .area__name{color:#fff;z-index:2;text-shadow:0 1px 12px #16181c8c;font-size:1.12rem;position:absolute;bottom:.85rem;left:1.05rem;right:1.05rem}
.area__body{justify-content:space-between;align-items:center;gap:.8rem;padding:.95rem 1.05rem 1rem;display:flex}
.area__go{color:var(--accent-ink);align-items:center;display:inline-flex;transition:transform .3s var(--ease)}
@media (hover:hover){
  .area__card--media:hover .area__media img{transform:scale(1.07)}
  .area__card--media:hover .area__media:after{opacity:.12}
  .area__card--media:hover .area__go{transform:translate(4px)}
}

/* --- 6. narrow screens ---------------------------------------------------- */
@media (max-width:900px){
  .seals{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.3rem}
}
@media (max-width:560px){
  .seals{--seal-h:36px;grid-template-columns:1fr}
  .cert__seal{height:38px}
  .cert__seal .seal__mark{--seal-h:38px}
  .why__icon,.why__icon svg{height:40px}
  .why__icon svg{width:40px}
}

/* The drawn shield is alone in a .cert card now that the word moved to the h3
   under it, so it grows to fill the same 46px box the badge images occupy. */
.cert__seal .seal__mark--drawn svg{width:38px;height:38px}.seal__mark--drawn{border:1px solid var(--line);border-radius:3px;min-width:118px;justify-content:center;padding:0 .85rem;gap:.55rem}.seal__mark--drawn svg{width:calc(var(--seal-h) * .58);height:calc(var(--seal-h) * .58)}.section--dark .seal__mark--drawn,.seals--dark .seal__mark--drawn{border-color:var(--line-dark);background:#ffffff0a}.cert .seal__mark--drawn{min-width:132px}
