@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&display=swap";
:root{--ink:#0a1119;--navy:#101d2a;--blue:#1476d4;--cyan:#39a9ff;--paper:#f5f6f7;--line:#d9dee3;--white:#fff;--muted:#697581}*{box-sizing:border-box}html{scroll-behavior:smooth}body{color:var(--ink);background:var(--paper);margin:0;font-family:DM Sans,Arial,sans-serif}a{color:inherit;text-decoration:none}.shell{width:min(1180px,100% - 48px);margin:auto}.utility{color:#bfccd7;letter-spacing:.13em;text-transform:uppercase;background:#071019;font-size:11px}.utility-inner{justify-content:space-between;padding:10px 0;display:flex}.utility i{background:var(--blue);vertical-align:middle;border-radius:50%;width:3px;height:3px;margin:0 10px;display:inline-block}header{border-bottom:1px solid var(--line);z-index:20;background:#fff;height:82px;position:sticky;top:0}.nav{align-items:center;gap:30px;height:100%;display:flex}.brand{align-items:center;gap:10px;margin-right:auto;display:flex}.brand-mark{letter-spacing:-9px;color:var(--ink);padding-right:8px;font-family:Manrope;font-size:31px;font-style:italic;font-weight:800}.brand-mark span{color:var(--blue)}.brand-name{letter-spacing:.05em;font:800 18px/1 Manrope}.brand-name small{letter-spacing:.22em;color:#5f6b76;font:600 7px/1.6 Manrope;display:block}.nav nav{gap:25px;font-size:13px;font-weight:600;display:flex}.nav nav a:hover{color:var(--blue)}.nav-phone{font-weight:700}.btn{background:var(--blue);color:#fff;cursor:pointer;border:none;justify-content:center;align-items:center;gap:22px;padding:17px 21px;font-size:13px;font-weight:700;transition:all .2s;display:inline-flex}.btn:hover{background:#0d5fae;transform:translateY(-1px)}.btn-small{padding:13px 17px}.hero{background:var(--navy);color:#fff;min-height:680px;position:relative;overflow:hidden}.hero:before{content:"";background:radial-gradient(circle at 75% 45%,#1b3a55 0,#0000 37%),linear-gradient(120deg,#0000 0 60%,#1476d41f 60%);position:absolute;inset:0}.hero-lines{opacity:.09;background-image:linear-gradient(#fff 1px,#0000 1px),linear-gradient(90deg,#fff 1px,#0000 1px);background-size:80px 80px;position:absolute;inset:0}.hero-grid{grid-template-columns:1.1fr .9fr;align-items:center;gap:50px;min-height:680px;display:grid;position:relative}.eyebrow,.kicker{letter-spacing:.19em;color:var(--blue);margin-bottom:21px;font-size:11px;font-weight:700}.eyebrow span{background:var(--cyan);vertical-align:middle;width:30px;height:2px;margin-right:9px;display:inline-block}h1,h2{letter-spacing:-.045em;margin:0;font-family:Manrope}h1{font-size:clamp(48px,5.5vw,76px);line-height:1.02}h1 em,h2 em{color:var(--cyan);font-style:normal}.hero-copy>p{color:#b7c5d2;max-width:630px;margin:27px 0;font-size:19px;line-height:1.65}.hero-actions{align-items:center;gap:28px;display:flex}.text-link{border-bottom:1px solid #7990a5;padding:10px 0;font-size:14px;font-weight:700}.hero-proof{color:#aebbc7;text-transform:uppercase;letter-spacing:.08em;border-top:1px solid #40505f;align-items:center;gap:14px;margin-top:45px;padding-top:23px;font-size:10px;display:flex}.hero-proof strong{color:#fff;font:800 21px Manrope}.hero-proof b{color:#476071;margin-left:16px}.hero-visual{background:linear-gradient(135deg,#ffffff0a,#1476d41f);border:1px solid #416079;height:490px;position:relative;box-shadow:0 30px 80px #060c12}.blueprint-tag{letter-spacing:.12em;color:#9dc9ef;font:700 11px Manrope;position:absolute;top:18px;left:18px}.blueprint-tag span{color:#6b8295;margin-top:5px;display:block}.door-frame{border:7px solid #9db1c0;border-bottom-width:12px;width:57%;height:68%;position:absolute;top:18%;left:21%}.operator{letter-spacing:.14em;text-align:center;color:#9db1c0;border:2px solid #708da4;height:35px;padding-top:10px;font-size:8px;position:absolute;top:-42px;left:-7px;right:-7px}.door{transform-origin:0;background:linear-gradient(100deg,#64b0e240,#08142080);border-left:2px solid #7c9aad;position:absolute;inset:0;transform:perspective(500px)rotateY(-16deg)}.door:after{content:"";background:#d8e5ed;border-radius:50%;width:6px;height:6px;position:absolute;top:50%;right:12px}.door span{letter-spacing:.2em;color:#7595ac;font-size:8px;position:absolute;bottom:12px;left:12px}.push,.control{color:#162332;text-align:center;background:#ddd;border:3px solid #637e92;width:42px;height:42px;padding-top:12px;font-size:6px;font-weight:800;position:absolute;top:45%;right:-57px}.plan-note{letter-spacing:.1em;color:#7190a8;font-size:9px;position:absolute}.note-one{top:30%;right:20px}.note-two{bottom:27%;right:18px}.note-three{bottom:18%;left:17px}.trust{border-bottom:1px solid var(--line);background:#fff}.trust-row{color:#89949d;letter-spacing:.12em;justify-content:space-between;align-items:center;gap:25px;height:85px;font-size:11px;display:flex}.trust-row span{color:var(--blue);font-weight:700}.trust-row b{font:700 12px Manrope}.section{padding:110px 0}.split{grid-template-columns:1fr 1fr;gap:110px;display:grid}.section h2{font-size:clamp(38px,4vw,58px);line-height:1.08}.intro-copy{color:#55616c;font-size:18px;line-height:1.65}.intro-copy p:first-child{color:var(--ink);font-weight:500}.under-link{border-bottom:2px solid var(--blue);color:var(--ink);gap:40px;margin-top:16px;padding-bottom:6px;font-size:13px;font-weight:700;display:inline-flex}.scope{background:#fff}.section-head{justify-content:space-between;align-items:end;margin-bottom:60px;display:flex}.section-head>p{color:#64707a;max-width:390px;line-height:1.7}.scope-grid{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}.scope-item{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:180px;padding:26px;position:relative}.scope-item span{color:var(--blue);letter-spacing:.15em;font-size:10px}.scope-item h3{margin:45px 25px 0 0;font:700 17px/1.3 Manrope}.scope-item i{color:#8c969e;font-style:normal;position:absolute;bottom:17px;right:19px}.sectors{color:#fff;background:#0a141e}.light{color:var(--cyan)}.sectors .section-head>p{color:#9eafbd}.sector-list{border-top:1px solid #30404e}.sector-list article{border-bottom:1px solid #30404e;grid-template-columns:70px 1fr 1.5fr 50px;align-items:center;min-height:105px;transition:all .2s;display:grid}.sector-list article:hover{background:#111f2c;padding-left:10px}.sector-list span{color:var(--cyan);font-size:10px}.sector-list h3{font:600 20px Manrope}.sector-list p{color:#9dabb7;font-size:14px}.sector-list a{border:1px solid #486070;border-radius:50%;place-items:center;width:38px;height:38px;display:grid}.washroom{background:#e8edf0}.wash-grid{grid-template-columns:1fr 1fr;align-items:center;gap:100px;display:grid}.wash-diagram{background:#1a2a39;border:12px solid #253747;height:500px;position:relative;box-shadow:0 25px 60px #9da6ab}.wash-label{color:#7693a9;letter-spacing:.16em;font-size:9px;position:absolute;top:18px;left:18px}.wash-door{background:#d4dde1;border:5px solid #9fb2bf;width:44%;height:72%;position:absolute;bottom:0;left:28%}.person{color:#2076b8;font-size:64px;position:absolute;top:42%;left:50%;transform:translate(-50%,-50%)}.indicator{color:#fff;background:#1a8b56;padding:5px;font-size:7px;position:absolute;top:10px;right:12px}.control{top:55%;right:auto}.left-control{left:10%}.right-control{right:10%}.wash-grid>div:last-child>p{color:#56636e;font-size:18px;line-height:1.6}.wash-grid ul{margin:25px 0;padding:0;list-style:none}.wash-grid li{border-bottom:1px solid #c6d0d5;padding:10px 0;font-size:14px;font-weight:600}.wash-grid li:before{content:"✓";color:var(--blue);margin-right:12px}.dark-btn{background:var(--ink)}.process{background:#fff}.process h2{margin-bottom:60px}.steps{border-top:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}.steps>div{border-right:1px solid var(--line);min-height:220px;padding:28px}.steps>div:first-child{border-left:1px solid var(--line)}.steps b{color:var(--blue);font-size:11px}.steps h3{margin-top:50px;font:700 17px Manrope}.steps p{color:#6b7680;font-size:13px;line-height:1.6}.areas{background:#eef1f3}.areas p{color:#58656f;font-size:17px;line-height:1.7}.quote{background:var(--blue);color:#fff;padding:110px 0}.quote-grid{grid-template-columns:1fr .9fr;gap:130px;display:grid}.quote h2{font-size:58px}.quote p{color:#d4e9fa;font-size:17px;line-height:1.6}.big-phone{border-bottom:2px solid #fff;margin-top:30px;font:700 28px Manrope;display:inline-block}.quote form{grid-template-columns:1fr 1fr;gap:20px;display:grid}.quote label{letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:700}.quote label:last-of-type{grid-column:1/-1}.quote input,.quote select,.quote textarea{color:#fff;background:0 0;border:1px solid #7ab8ea;width:100%;margin-top:8px;padding:15px;font:14px DM Sans}.quote select option{color:#111}.quote input::placeholder,.quote textarea::placeholder{color:#b7d9f5}.white-btn{color:var(--blue);background:#fff;grid-column:1/-1}.white-btn:hover{background:#e8f5ff}footer{color:#a3b0bb;background:#071019;padding:65px 0 25px}.footer-grid{grid-template-columns:1.6fr 1fr 1fr 1fr;gap:50px;display:grid}.footer-brand{color:#fff;align-self:start}.footer-grid>div:not(:first-child){flex-direction:column;gap:10px;font-size:12px;display:flex}.footer-grid b{color:#fff;margin-bottom:10px}.copyright{border-top:1px solid #25333e;justify-content:space-between;margin-top:50px;padding-top:23px;font-size:10px;display:flex}.copyright span{color:#62717d}@media (max-width:900px){.nav nav,.nav-phone{display:none}.hero-grid,.split,.wash-grid,.quote-grid{grid-template-columns:1fr}.hero-grid{padding:75px 0}.hero-visual{display:none}.trust-row{justify-content:flex-start;overflow:auto}.section{padding:75px 0}.split,.wash-grid,.quote-grid{gap:55px}.scope-grid{grid-template-columns:1fr 1fr}.sector-list article{grid-template-columns:45px 1fr 35px}.sector-list p{display:none}.steps,.footer-grid{grid-template-columns:1fr 1fr}.section-head{display:block}.section-head>p{margin-top:25px}.quote h2{font-size:44px}}@media (max-width:560px){.shell{width:min(100% - 30px,1180px)}.utility-inner span:first-child{display:none}.utility-inner{justify-content:center}.nav{gap:15px}.brand-name{font-size:14px}.btn-small{gap:0;font-size:0}.btn-small span{font-size:14px}h1{font-size:44px}.hero{min-height:auto}.hero-grid{min-height:620px}.hero-actions{flex-direction:column;align-items:stretch;gap:12px}.hero-actions .text-link{text-align:center}.hero-proof{flex-wrap:wrap}.scope-grid,.steps,.footer-grid{grid-template-columns:1fr}.sector-list h3{font-size:16px}.wash-diagram{height:360px}.quote form{grid-template-columns:1fr}.quote label,.quote label:last-of-type,.white-btn{grid-column:1}.quote h2{font-size:39px}.copyright{line-height:2;display:block}.nav .brand{margin-right:auto}}.brand img{width:230px;height:auto;display:block}.footer-brand{background:#fff;padding:10px}@media (max-width:560px){.brand img{width:175px}}.hero-photo{background:#071019;border:0}.hero-photo>img{object-fit:cover;filter:saturate(.82)contrast(1.06);width:100%;height:100%;display:block}.hero-photo:after{content:"";background:linear-gradient(#0000 45%,#050d15eb);position:absolute;inset:0}.photo-caption{z-index:2;flex-direction:column;gap:5px;display:flex;position:absolute;bottom:25px;left:28px;right:28px}.photo-caption span{letter-spacing:.16em;color:var(--cyan);font-size:9px}.photo-caption b{font:700 17px/1.25 Manrope}.photo-caption small{color:#a9bac8;font-size:11px}.projects{background:#fff}.project-grid{grid-template-columns:repeat(3,1fr);gap:22px;display:grid}.project-card{border:1px solid var(--line);background:#f7f8f9}.project-image{background:#dfe4e7;height:245px;position:relative;overflow:hidden}.project-image img{object-fit:cover;width:100%;height:100%;transition:transform .45s;display:block}.project-card:hover .project-image img{transform:scale(1.025)}.project-image span{color:#fff;letter-spacing:.1em;text-transform:uppercase;background:#081119e0;padding:7px 9px;font-size:9px;position:absolute;bottom:12px;left:12px}.project-copy{padding:24px}.project-copy small{color:var(--blue);letter-spacing:.15em;font-size:10px}.project-copy h3{margin:18px 0 8px;font:700 19px/1.25 Manrope}.project-copy p{color:#66727c;margin:0;font-size:12px;line-height:1.55}.wash-photo{background:#152331;height:510px;position:relative;overflow:hidden;box-shadow:0 25px 60px #9da6ab}.wash-photo img{object-fit:cover;width:100%;height:100%;display:block}.wash-photo span{color:#fff;letter-spacing:.12em;background:#081119e6;padding:12px;font-size:9px;position:absolute;bottom:16px;left:16px;right:16px}.support{color:#fff;background:#0a141e}.support-grid{grid-template-columns:1fr 1fr;align-items:start;gap:100px;display:grid}.support h2{font-size:clamp(38px,4vw,58px)}.support p{color:#a8b5c0;max-width:540px;line-height:1.7}.support-list{border-top:1px solid #30404e}.support-list>div{border-bottom:1px solid #30404e;grid-template-columns:55px 1fr;align-items:center;min-height:86px;display:grid}.support-list span{color:var(--cyan);font-size:10px}.support-list h3{font:600 17px Manrope}.credentials{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}.credential-row{align-items:center;gap:24px;min-height:145px;display:flex}.credential-row>div{border-right:1px solid var(--line);align-items:center;gap:14px;min-width:0;padding-right:24px;display:flex}.credential-row img{object-fit:contain;width:108px;max-height:62px}.credential-row p{flex-direction:column;gap:4px;margin:0;display:flex}.credential-row b{font:700 13px Manrope}.credential-row span{color:#76818a;font-size:10px}.credential-row>a{margin-left:0}.credential-brand{border-right:1px solid var(--line);justify-content:flex-start;align-items:center;min-width:155px;padding-right:24px;display:flex}.credential-row .credential-brand img{width:155px;max-height:62px}.credential-cta{white-space:nowrap;margin-left:auto!important}@media (max-width:900px){.project-grid{grid-template-columns:1fr 1fr}.support-grid{grid-template-columns:1fr;gap:50px}.credential-row{flex-wrap:wrap;padding:28px 0}.credential-row>div{border:0}.credential-row>a{margin-left:0}.wash-photo{height:430px}}@media (max-width:560px){.project-grid{grid-template-columns:1fr}.project-image{height:220px}.credential-row{display:block}.credential-row>div{margin-bottom:25px;padding:0}.credential-row>a{display:inline-flex}.wash-photo{height:330px}}.reviews-cta{border-bottom:1px solid var(--line);background:#eef4f8;padding:64px 0}.reviews-cta-inner{justify-content:space-between;align-items:center;gap:48px;display:flex}.reviews-cta h2{max-width:760px;font-size:clamp(30px,3.3vw,46px);line-height:1.1}.reviews-cta .kicker{margin-bottom:14px}.reviews-cta .btn{flex:none}@media (max-width:700px){.reviews-cta-inner{flex-direction:column;align-items:flex-start;gap:30px}}.review-carousel{margin-top:42px}.review-summary{color:#56636e;align-items:center;gap:14px;margin-bottom:24px;font-size:15px;display:flex}.review-summary strong{color:var(--ink);font:800 35px/1 Manrope}.google-g{color:#4285f4;background:#fff;border:1px solid #d6dde2;border-radius:50%;place-items:center;width:42px;height:42px;font:800 20px/1 Manrope;display:grid;box-shadow:0 4px 12px #06162414}.review-stars{color:#f6b900;letter-spacing:2px;font-size:20px}.review-track-wrap{position:relative}.review-track{scroll-snap-type:x mandatory;scrollbar-width:none;gap:24px;padding:4px 2px 18px;display:flex;overflow-x:auto}.review-track::-webkit-scrollbar{display:none}.review-card{scroll-snap-align:start;background:#fff;border:1px solid #dce3e8;flex-direction:column;flex:0 0 calc(33.3333% - 16px);min-height:340px;padding:30px;display:flex;box-shadow:0 12px 30px #06162412}.review-person{align-items:center;gap:14px;display:flex}.review-avatar{color:#fff;border-radius:50%;place-items:center;width:52px;height:52px;font:700 22px/1 Manrope;display:grid}.review-person h3{margin:0;font:700 16px/1.3 Manrope}.review-person small{color:#71808b;margin-top:4px;display:block}.review-card>.review-stars{margin:22px 0 16px}.review-card blockquote{color:#2e3b45;margin:0 0 24px;font-size:15px;line-height:1.65}.review-card>a{color:var(--blue);text-transform:uppercase;letter-spacing:.05em;margin-top:auto;font-size:13px;font-weight:800}.review-arrow{z-index:2;background:var(--blue);color:#fff;cursor:pointer;border:0;border-radius:50%;width:44px;height:44px;font:400 32px/1 Arial;position:absolute;top:50%;box-shadow:0 7px 18px #0068be40}.review-prev{left:-22px}.review-next{right:-22px}.review-dots{justify-content:center;gap:7px;margin-top:4px;display:flex}.review-dots span{background:#b9c7d1;border-radius:50%;width:7px;height:7px}.review-dots span.active{background:var(--blue)}@media (max-width:900px){.review-card{flex-basis:calc(50% - 12px)}}@media (max-width:700px){.review-carousel{width:100%;margin-top:32px}.review-summary{flex-wrap:wrap}.review-summary span:last-child{flex-basis:100%}.review-card{flex-basis:88%;min-height:360px;padding:24px}.review-arrow{display:none}.review-track{margin-right:-15px}.review-stars{font-size:18px}}.parts-hero{background:var(--navy);color:#fff;padding:95px 0;position:relative;overflow:hidden}.parts-hero:before{content:"";background:radial-gradient(circle at 75% 35%,#1c4666,#0000 38%);position:absolute;inset:0}.parts-hero-grid{grid-template-columns:1.05fr .95fr;align-items:center;gap:75px;display:grid;position:relative}.parts-hero h1{font-size:clamp(48px,5.5vw,74px);line-height:1.02}.parts-hero p{color:#b7c5d2;max-width:650px;font-size:18px;line-height:1.65}.parts-feature{border:1px solid #416079;height:470px;position:relative;overflow:hidden}.parts-feature img{object-fit:cover;width:100%;height:100%}.parts-feature span{letter-spacing:.13em;background:#081119e6;padding:12px;font-size:9px;position:absolute;bottom:16px;left:16px;right:16px}.parts-intro{background:#eef1f3}.parts-catalogue{background:#fff}.parts-grid{border-left:1px solid var(--line);border-top:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}.parts-grid article{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:230px;padding:26px}.parts-grid article>span{color:var(--blue);letter-spacing:.14em;font-size:10px}.parts-grid h3{margin:45px 0 12px;font:700 17px/1.3 Manrope}.parts-grid p{color:#697580;font-size:12px;line-height:1.6}.parts-band{color:#fff;background:#0a141e;padding:90px 0}.parts-band-grid{grid-template-columns:1fr 1fr;gap:100px;display:grid}.parts-band h2{font-size:clamp(38px,4vw,58px)}.parts-band p{color:#a8b5c0;line-height:1.7}.parts-feature-contain{background:#fff}.parts-feature-contain img{object-fit:contain;padding:36px}.parts-feature-carousel img{animation:.35s parts-feature-in}.parts-feature-arrow{z-index:2;color:#fff;cursor:pointer;background:#081119b8;border:1px solid #ffffff8c;border-radius:50%;place-items:center;width:42px;height:42px;font:400 30px/1 Arial;transition:background .2s,border-color .2s;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.parts-feature-arrow:hover,.parts-feature-arrow:focus-visible{background:var(--blue);outline-offset:2px;border-color:#fff;outline:2px solid #fff}.parts-feature-prev{left:14px}.parts-feature-next{right:14px}.parts-feature-dots{z-index:3;gap:7px;display:flex;position:absolute;bottom:76px;left:50%;transform:translate(-50%)}.parts-feature-dots button{cursor:pointer;background:#08111973;border:1px solid #fff;border-radius:50%;width:8px;height:8px;padding:0}.parts-feature-dots button.active{background:var(--blue)}@keyframes parts-feature-in{0%{opacity:.25}to{opacity:1}}.brand-badges{flex-wrap:wrap;gap:7px;margin-top:18px;display:flex}.parts-grid article .brand-badge{letter-spacing:.02em;text-transform:none;background:#fff;border:1px solid #cfd8df;align-items:center;min-height:25px;padding:5px 9px;font:700 10px/1 Manrope;display:inline-flex}.parts-grid article .brand-badge-bea{color:#123e73}.parts-grid article .brand-badge-dormakaba{color:#1d4f82;border-left:3px solid #d3292f}.part-card{border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:430px;color:var(--ink);text-align:left;cursor:pointer;background:#fff;flex-direction:column;align-items:flex-start;padding:26px;transition:background .2s,box-shadow .2s;display:flex}.part-card:hover,.part-card:focus-visible{box-shadow:inset 0 0 0 2px var(--blue);background:#f2f7fb;outline:0}.part-card[aria-expanded=true]{box-shadow:inset 0 -3px 0 var(--blue);background:#eaf4fc}.part-number{color:var(--blue);letter-spacing:.14em;font-size:10px}.part-card-media{place-items:center;width:100%;height:90px;margin:24px 0 0;display:grid;position:relative}.part-card-logos,.part-card-image{justify-content:flex-start;align-items:center;gap:16px;transition:opacity .2s,transform .25s;display:flex;position:absolute;inset:0}.part-card-logos img{object-fit:contain;width:auto;max-width:132px;max-height:38px;display:block}.part-card-logos .brand-badge{font-size:10px}.part-card-image{opacity:0;background:#f4f7f9;border:1px solid #e1e7eb;place-items:center;display:grid;overflow:hidden;transform:translateY(4px)}.part-card-image img{object-fit:contain;width:100%;height:100%;padding:8px;display:block}.part-card:hover .part-card-logos,.part-card:focus-visible .part-card-logos,.part-card[aria-expanded=true] .part-card-logos{opacity:0}.part-card:hover .part-card-image,.part-card:focus-visible .part-card-image,.part-card[aria-expanded=true] .part-card-image{opacity:1;transform:translateY(0)}.part-card h3{margin:22px 0 12px;font:700 17px/1.3 Manrope}.part-card p{color:#697580;margin:0;font:12px/1.6 DM Sans}.part-card-action{width:100%;color:var(--blue);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;margin-top:auto;padding-top:18px;font:700 10px/1 Manrope;display:flex}.part-card-action i{font:18px/1 Manrope}.part-showcase{border:1px solid var(--line);background:#f6f8f9;grid-template-columns:1.08fr .92fr;margin-top:24px;display:grid}.part-showcase-image{background:#fff;place-items:center;min-height:500px;display:grid;position:relative;overflow:hidden}.part-showcase-image>img{object-fit:contain;width:100%;height:500px;padding:42px 72px 64px;display:block}.part-image-nav{width:46px;height:46px;color:var(--blue);cursor:pointer;background:#fffffff0;border:1px solid #ccd7df;border-radius:50%;font:400 34px/40px Manrope;position:absolute;top:50%;transform:translateY(-50%);box-shadow:0 5px 18px #122b3c1f}.part-image-nav:hover,.part-image-nav:focus-visible{color:#fff;background:var(--blue);outline-offset:2px;outline:2px solid #fff}.part-image-prev{left:18px}.part-image-next{right:18px}.part-image-dots{gap:9px;display:flex;position:absolute;bottom:25px;left:50%;transform:translate(-50%)}.part-image-dots button{border:1px solid var(--blue);cursor:pointer;background:#fff;border-radius:50%;width:10px;height:10px;padding:0}.part-image-dots button.active{background:var(--blue)}.part-image-count{color:#697580;letter-spacing:.08em;font:700 11px/1 Manrope;position:absolute;bottom:20px;right:24px}.part-showcase-copy{padding:44px}.part-showcase-number{letter-spacing:.16em;color:var(--blue);font:700 10px/1 Manrope}.part-showcase h3{letter-spacing:-.035em;margin:22px 0 0;font:700 clamp(27px,3vw,39px)/1.12 Manrope}.part-showcase .brand-badge{background:#fff;border:1px solid #cfd8df;align-items:center;min-height:27px;padding:6px 10px;font:700 10px/1 Manrope;display:inline-flex}.part-showcase .brand-badge-bea{color:#123e73}.part-showcase .brand-badge-dormakaba{color:#1d4f82;border-left:3px solid #d3292f}.part-showcase .brand-badge-camden{color:#135c9a}.part-showcase .brand-badge-rci{color:#b6292f}.part-showcase .brand-badge-kantech{color:#1566a9}.part-showcase .brand-badge-aiphone{color:#d71920}.part-showcase .brand-badge-inaxsys{color:#28323c}.part-showcase-copy>p{color:#596671;margin:22px 0;font-size:15px;line-height:1.65}.part-showcase ul{margin:0 0 24px;padding:0;list-style:none}.part-showcase li{border-bottom:1px solid var(--line);padding:10px 0;font-size:13px}.part-showcase li:before{content:"✓";color:var(--blue);margin-right:10px}.part-card-logos img.aiphone-logo{object-fit:cover;object-position:center;width:132px;max-width:none;height:38px;max-height:none}.part-card-logos.door-release-logos{grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;padding:0 14px;display:grid}.part-card-logos.door-release-logos img.door-release-logo{justify-self:center;max-width:76px;max-height:30px}.light-link{color:#fff;border-color:var(--cyan)}.tech-hero{padding:110px 0}.tech-hero .shell{position:relative}.tech-hero p{max-width:760px}.tech-products{background:#eef1f3}.tech-grid{gap:34px;display:grid}.tech-card{border:1px solid var(--line);background:#fff;grid-template-columns:.78fr 1.22fr;display:grid}.tech-card-image{border-right:1px solid var(--line);background:#f7f8f9;place-items:center;min-height:560px;padding:54px;display:grid}.tech-card-image img{object-fit:contain;width:100%;height:100%;max-height:450px}.tech-card-copy{padding:48px}.tech-card-copy h2{margin-bottom:18px;font-size:clamp(32px,3.2vw,48px)}.tech-card-copy>p{color:#596771;font-size:16px;line-height:1.7}.tech-specs{border-top:1px solid var(--line);margin:28px 0}.tech-specs div{border-bottom:1px solid var(--line);grid-template-columns:160px 1fr;gap:20px;padding:13px 0;display:grid}.tech-specs dt{color:#697581;font-size:13px}.tech-specs dd{margin:0;font-size:14px;font-weight:700}.tech-card-copy h3{margin:28px 0 12px;font:700 17px Manrope}.tech-card-copy ul{grid-template-columns:1fr 1fr;gap:8px 26px;margin:0;padding:0;list-style:none;display:grid}.tech-card-copy li{font-size:14px;line-height:1.45}.tech-card-copy li:before{content:"✓";color:var(--blue);margin-right:8px}.tech-links{flex-wrap:wrap;align-items:center;gap:24px;margin-top:32px;display:flex}.tech-note{background:#fff}@media (max-width:800px){.tech-card{grid-template-columns:1fr}.tech-card-image{border-right:0;border-bottom:1px solid var(--line);min-height:330px}.tech-card-copy{padding:30px}.tech-specs div{grid-template-columns:1fr;gap:5px}.tech-card-copy ul{grid-template-columns:1fr}}@media (max-width:900px){.parts-hero-grid,.parts-band-grid{grid-template-columns:1fr}.parts-feature{height:360px}.parts-grid{grid-template-columns:1fr 1fr}.parts-hero{padding:70px 0}.part-showcase{grid-template-columns:1fr}.part-showcase-image,.part-showcase-image img{height:330px;min-height:330px}}@media (max-width:560px){.parts-grid{grid-template-columns:1fr}.parts-feature{height:300px}.part-card{min-height:390px}.part-card-media{height:120px}.part-showcase-copy{padding:28px}.part-showcase-image{min-height:330px}.part-showcase-image>img{height:330px;padding:40px 54px 62px}.part-image-nav{width:40px;height:40px;font-size:29px}.part-image-prev{left:8px}.part-image-next{right:8px}}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:30px}.project-image{background:#edf0f2;height:auto;overflow:hidden}.project-image img{object-fit:contain;width:100%;height:auto}.project-copy{min-height:145px}.project-image span{z-index:2}@media (max-width:700px){.project-grid{grid-template-columns:1fr}.project-copy{min-height:0}}#quote .kicker,#quote h2 em{color:#000}.hero-video{background:#050b10;border:0}.hero-video video{object-fit:contain;background:#050b10;width:100%;height:100%;animation:.45s video-in;display:block}.hero-video:after{content:"";pointer-events:none;background:linear-gradient(#0000 48%,#050d15f0);position:absolute;inset:0}.video-caption{z-index:2;color:#fff;flex-direction:column;gap:5px;display:flex;position:absolute;bottom:29px;left:28px;right:28px}.video-caption span{letter-spacing:.16em;color:var(--cyan);font-size:9px}.video-caption b{font:700 17px/1.25 Manrope}.video-caption small{color:#a9bac8;font-size:11px}.video-dots{z-index:3;gap:6px;display:flex;position:absolute;top:20px;right:20px}.video-dots button{cursor:pointer;background:#ffffff6b;border:0;border-radius:50%;width:7px;height:7px;padding:0}.video-dots button.active{background:var(--cyan);box-shadow:0 0 0 3px #39a9ff2e}@keyframes video-in{0%{opacity:.35}to{opacity:1}}@media (prefers-reduced-motion:reduce){.hero-video video{animation:none}}.service-copy{color:#56636e;font-size:17px;line-height:1.7}.service-copy>p{margin-top:0}.service-copy ul{grid-template-columns:1fr 1fr;gap:0 24px;margin:26px 0 0;padding:0;list-style:none;display:grid}.service-copy li{color:var(--ink);border-bottom:1px solid #ccd4d9;padding:13px 0;font-size:14px;font-weight:600}.service-copy li:before{content:"✓";color:var(--blue);margin-right:10px}.service-soft{background:#fff}.service-faq{background:#eef1f3}.service-faq details{border-top:1px solid #cbd3d8}.service-faq details:last-child{border-bottom:1px solid #cbd3d8}.service-faq summary{cursor:pointer;justify-content:space-between;gap:20px;padding:22px 0;font:700 16px/1.4 Manrope;list-style:none;display:flex}.service-faq summary::-webkit-details-marker{display:none}.service-faq summary span{color:var(--blue);font-size:22px}.service-faq details[open] summary span{transform:rotate(45deg)}.service-faq details p{color:#596771;margin:0 38px 24px 0;line-height:1.7}.service-faq-photo{color:#fff;background:linear-gradient(#040f1dc2,#040f1dc2),url(/projects/gastown-vancouver-faq.png) 50% 58%/cover no-repeat}.service-faq-photo h2,.service-faq-photo summary{color:#fff}.service-faq-photo details,.service-faq-photo details:last-child{border-color:#ffffff47}.service-faq-photo details p{color:#ffffffd1}.footer-grid a:hover{color:var(--cyan)}.related-services{color:#fff;background:#0a141e}.related-services .kicker{color:var(--cyan)}.related-grid{border-top:1px solid #30404e;border-left:1px solid #30404e;grid-template-columns:repeat(2,1fr);display:grid}.related-grid a{border-bottom:1px solid #30404e;border-right:1px solid #30404e;justify-content:space-between;align-items:center;min-height:88px;padding:22px;font:600 16px/1.35 Manrope;transition:all .2s;display:flex}.related-grid a:hover{color:var(--cyan);background:#111f2c}@media (max-width:700px){.service-copy ul,.related-grid{grid-template-columns:1fr}.parts-hero h1{font-size:43px}}.areas{color:#fff;background-image:linear-gradient(90deg,#040e18eb 0%,#040e18d1 48%,#040e18ad 100%),url(/vancouver-skyline-regional-support.jpg);background-position:50%;background-repeat:no-repeat;background-size:cover}.areas .kicker{color:var(--cyan)}.areas h2{color:#fff;text-shadow:0 2px 16px #0000006b}.areas p{color:#e5edf4;text-shadow:0 1px 10px #0000008c}@media (max-width:900px){.areas{background-image:linear-gradient(#040e18db,#040e18db),url(/vancouver-skyline-regional-support.jpg);background-position:58%}}:root a,:root button,:root summary{transition:color .2s,background-color .2s}:root a:hover,:root a:focus-visible,:root button:hover,:root button:focus-visible,:root summary:hover,:root summary:focus-visible{color:var(--blue)}:root a:hover :is(h1,h2,h3,h4,p,span,strong,small,b,i),:root a:focus-visible :is(h1,h2,h3,h4,p,span,strong,small,b,i),:root button:hover :is(h1,h2,h3,h4,p,span,strong,small,b,i),:root button:focus-visible :is(h1,h2,h3,h4,p,span,strong,small,b,i){color:inherit}:root .btn:hover,:root .btn:focus-visible{color:var(--blue);background:#fff;transform:translateY(-1px)}.quote .form-wide,.quote .privacy-consent,.quote .form-status{grid-column:1/-1}.quote .privacy-consent{letter-spacing:0;text-transform:none;align-items:flex-start;gap:10px;font-size:12px;line-height:1.5;display:flex}.quote .privacy-consent input{flex:none;width:18px;height:18px;margin:1px 0 0}.quote .privacy-consent a{text-underline-offset:3px;text-decoration:underline}.quote .form-status{color:#fff;background:#ffffff1f;margin:0;padding:14px 16px;font-size:13px;line-height:1.5}.quote .form-status.error{background:#550c0c59}.quote button:disabled{cursor:wait;opacity:.7}.form-honeypot{width:1px!important;height:1px!important;position:absolute!important;left:-10000px!important;overflow:hidden!important}.legal-header{height:auto;padding:22px 0;position:static}.legal-nav{justify-content:space-between;align-items:center;gap:24px;display:flex}.legal-nav img{width:min(260px,55vw);height:auto;display:block}.legal-page{padding:95px 0 120px}.legal-page article{max-width:850px}.legal-page h1{margin-bottom:16px;font-size:clamp(44px,6vw,72px)}.legal-updated{color:#697581;margin-bottom:55px}.legal-page section{border-top:1px solid var(--line);padding:30px 0}.legal-page section:last-child{border-bottom:1px solid var(--line)}.legal-page h2{letter-spacing:-.02em;margin-bottom:13px;font-size:25px}.legal-page p{color:#4f5d68;font-size:16px;line-height:1.7}.legal-page p a{text-underline-offset:3px;font-weight:700;text-decoration:underline}@media (max-width:560px){.legal-page{padding:65px 0 85px}.legal-nav .under-link{gap:12px}.quote .privacy-consent{grid-column:1}}.part-image-label{color:var(--ink);letter-spacing:.08em;text-transform:uppercase;font:700 12px/1 Manrope;position:absolute;bottom:20px;left:24px}footer{padding-top:48px}.credentials .credential-row{min-height:120px}.footer-brand{background:#f7f9fa;border:1px solid #1d2b37;border-radius:2px;width:max-content;max-width:100%;padding:6px}.footer-brand img{width:210px;max-width:100%}.copyright{margin-top:42px}@media (max-width:560px){.footer-brand img{width:185px}}.footer-layout{grid-template-columns:minmax(190px,.85fr) minmax(0,4.15fr);align-items:start;gap:48px;display:grid}.footer-layout .footer-grid{grid-template-columns:1.35fr 1fr 1.15fr 1fr 1fr;gap:30px;display:grid}.footer-layout .footer-grid>div{flex-direction:column;gap:10px;min-width:0;font-size:12px;display:flex}.footer-layout .footer-grid b{line-height:1.35}.footer-layout .footer-grid a,.footer-layout .footer-grid span{line-height:1.45}@media (max-width:1100px){.footer-layout{grid-template-columns:1fr}.footer-layout .footer-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:760px){.footer-layout .footer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.footer-layout .footer-grid{grid-template-columns:1fr;gap:32px}}.quote-short,.menu-toggle,.nav .mobile-panel{display:none}@media (max-width:900px){.menu-toggle{border:1px solid var(--line);width:44px;height:44px;color:var(--ink);cursor:pointer;background:#fff;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.menu-toggle:hover,.menu-toggle[aria-expanded=true]{border-color:var(--blue);color:var(--blue)}.nav .mobile-panel.open{border-bottom:1px solid var(--line);background:#fff;max-height:calc(100vh - 82px);padding:6px 0 14px;display:block;position:absolute;top:100%;left:0;right:0;overflow:auto;box-shadow:0 18px 40px #06162424}.mobile-panel a{color:var(--ink);border-bottom:1px solid #eef1f3;padding:15px 24px;font:700 16px/1.2 Manrope;display:block}.mobile-panel a:hover{color:var(--blue);background:#f5f8fa}.mobile-panel .mobile-phone{color:var(--blue);border-bottom:0;margin-top:6px}.nav{gap:14px}}@media (max-width:560px){.btn-small.quote-btn{gap:8px;padding:11px 14px;font-size:13px}.btn-small.quote-btn span{font-size:13px}.quote-full{display:none}.quote-short{display:inline}.nav{gap:10px}}@media (max-width:380px){.brand img{width:140px}.btn-small.quote-btn{padding:10px 11px}}.sector-list a span{font-size:18px;line-height:1}.sector-list a:hover{border-color:var(--cyan)}
