/* Card rails use native scroll snapping; all source cards remain in the document. */
.rail-shell{min-width:0;max-width:100%;position:relative}
.card-rail{--card-width:calc((100% - 48px)/3);display:flex!important;gap:24px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;padding:6px 2px 14px;scroll-padding-inline:2px;align-items:stretch}
.card-rail::-webkit-scrollbar{display:none}
.card-rail:focus-visible{outline:2px solid var(--blue);outline-offset:6px}
.card-rail>*{flex:0 0 var(--card-width);min-width:0;scroll-snap-align:start;scroll-snap-stop:always;transition:transform .45s var(--ease),box-shadow .45s var(--ease),border-color .3s}
.card-rail>*:hover,.card-rail>*:focus-visible{transform:translateY(-5px)}
.card-rail-services{--card-width:calc((100% - 24px)/2)}
.card-rail-methods,.card-rail-workshop{--card-width:calc((100% - 36px)/2.5)}
.card-rail-locations{--card-width:calc((100% - 24px)/1.85)}
.card-rail-clients{--card-width:calc((100% - 72px)/4)}
.service-directory .card-rail>.service-card:last-child{display:block;grid-column:auto;padding-bottom:25px}
.service-directory .card-rail>.service-card:last-child .service-card-copy{padding:25px 5px 0}
.service-directory .card-rail>.service-card:last-child .service-card-image{height:285px}
.card-rail .service-card-image,.card-rail .method-card>img{overflow:hidden}
.card-rail .method-card>img,.card-rail .component-card>img{transition:transform .8s var(--ease)}
.card-rail .method-card:hover>img,.card-rail .component-card:hover>img{transform:scale(1.035)}
.client-logos.card-rail{margin-top:35px;gap:0;--card-width:25%;padding-block:10px}
.client-logos.card-rail>div{border-bottom:0!important;border-right:1px solid var(--line)!important;height:138px;padding:25px}
.client-logos.card-rail img{filter:none;opacity:.85}
.rail-controls{display:flex;align-items:center;gap:22px;padding-block:16px 0;color:var(--muted);font-size:.75rem}
.rail-counter{font-variant-numeric:tabular-nums;letter-spacing:.08em;white-space:nowrap;color:var(--ink);min-width:65px}
.rail-progress{height:2px;flex:1;background:#dce5ed;overflow:hidden;max-width:290px}
.rail-progress>span{display:block;width:100%;height:100%;background:var(--blue);transform:scaleX(var(--rail-progress,.2));transform-origin:left;transition:transform .65s var(--ease)}
.rail-toggle{background:none;border:0;border-bottom:1px solid #bbcad5;color:var(--muted);font-size:.75rem;padding:7px 0;min-height:38px;margin-left:auto}
.rail-toggle:hover{color:var(--blue-dark)}.rail-toggle:disabled{cursor:default;opacity:.55}
.rail-direction{display:flex;gap:10px}
.rail-direction button{background:transparent;border:1px solid #c7d5df;color:var(--ink);padding:8px 16px;min-height:40px;font-size:.75rem;font-weight:700;transition:background .25s,border-color .25s}
.rail-direction button:hover{background:#e9f3fb;border-color:#75acda}
.service-motion-shell .rail-controls{border-top:1px solid var(--line);margin-top:28px}
.will-reveal{transition-delay:var(--reveal-delay,0ms)}
.technical-image img,.about-collage img{transition:transform 1s var(--ease)}
.technical-card:hover .technical-image img,.about-collage>div:hover img{transform:scale(1.03)}
@media(max-width:1100px){.card-rail-documents,.card-rail-components{--card-width:calc((100% - 24px)/2)}.card-rail-methods,.card-rail-workshop{--card-width:calc((100% - 28px)/2.2)}}
@media(max-width:800px){.card-rail-locations{--card-width:87%}.card-rail-services{--card-width:77%}.card-rail-methods,.card-rail-workshop{--card-width:calc((100% - 24px)/2)}.client-logos.card-rail{--card-width:33.3333%}.rail-controls{gap:16px}.rail-progress{max-width:180px}}
@media(max-width:600px){.card-rail{gap:18px;--card-width:89%;padding-bottom:10px}.card-rail-services,.card-rail-documents,.card-rail-components,.card-rail-methods,.card-rail-workshop,.card-rail-locations{--card-width:89%}.client-logos.card-rail{--card-width:50%;gap:0}.client-logos.card-rail>div{height:115px;padding:22px}.rail-controls{gap:12px;flex-wrap:wrap;font-size:.6875rem;padding-top:13px}.rail-counter{min-width:58px}.rail-progress{max-width:none;min-width:35px}.rail-toggle{font-size:.6875rem;min-height:40px}.rail-direction{gap:7px}.rail-direction button{padding:8px 12px;font-size:.6875rem;min-height:40px}.service-motion-shell .rail-controls{margin-top:23px}.service-directory .card-rail>.service-card:last-child .service-card-image{height:240px}.service-directory .card-rail>.service-card:last-child .service-card-copy{padding:25px 5px 0}}
html[data-motion=off] .will-reveal{opacity:1;transform:none;transition:none}html[data-motion=off] .rail-progress>span,html[data-motion=off] .card-rail>*,html[data-motion=off] .card-rail .method-card>img,html[data-motion=off] .card-rail .component-card>img,html[data-motion=off] .technical-image img,html[data-motion=off] .about-collage img{transition:none}html[data-motion=off] .card-rail>*:hover,html[data-motion=off] .card-rail>*:focus-visible{transform:none}html[data-motion=off] .card-rail{scroll-behavior:auto}

/* Every section enters again when it returns to the viewport. */
.motion-block{opacity:1;transform:none;filter:none}
html[data-motion=on] .motion-block{opacity:0;transform:translate3d(0,42px,0);filter:none;transition-property:transform,opacity;transition-duration:.85s,.7s!important;transition-timing-function:cubic-bezier(.16,1,.3,1);transition-delay:var(--entry-delay,0ms)}
html[data-motion=on] .motion-block.is-visible{opacity:1;transform:none;filter:none}
html[data-motion=on] .navigation{transform:translateY(-24px);filter:none}
html[data-motion=on] .navigation.is-visible{transform:none}
.about-home-image,.portfolio-photo,.about-collage>div,.panorama,.detail-image,.technical-image,.contact-panorama>div:first-child{overflow:hidden}
html[data-motion=on] .hero-image,html[data-motion=on] .about-home-image img,html[data-motion=on] .portfolio-photo img,html[data-motion=on] .about-collage img,html[data-motion=on] .panorama img,html[data-motion=on] .detail-image img,html[data-motion=on] .technical-image img,html[data-motion=on] .contact-panorama img{animation:photograph-depth 18s ease-in-out infinite alternate;animation-duration:18s!important;transform-origin:center right}
@keyframes photograph-depth{from{transform:scale(1.01)}to{transform:scale(1.055) translateX(6px)}}
/* The opening copy arrives line by line within a stable layout. */
.hero-title-line{display:inline-block;max-width:100%}
.hero-intro{--hero-delay:60ms}
.hero-title-line:nth-child(1){--hero-delay:140ms}
.hero-title-line:nth-child(3){--hero-delay:270ms}
.hero-title-line:nth-child(5){--hero-delay:400ms}
.hero-description{--hero-delay:580ms}
.hero-actions.hero-arrival{--hero-delay:740ms}
html[data-motion=on] .hero-content:not(.is-visible) .hero-arrival{opacity:0;transform:translateY(18px)}
html[data-motion=on] .hero-content.is-visible .hero-arrival{animation:hero-copy-arrival .8s cubic-bezier(.16,1,.3,1) backwards;animation-duration:.8s!important;animation-delay:var(--hero-delay,0ms)}
@keyframes hero-copy-arrival{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
/* Interior page headings use the same entrance sequence as the opening. */
.intro-title-line{display:inline-block;max-width:100%}
html[data-motion=on] .intro-motion:not(.is-visible) .intro-arrival{opacity:0;transform:translateY(18px)}
html[data-motion=on] .intro-motion.is-visible .intro-arrival{animation:hero-copy-arrival .8s cubic-bezier(.16,1,.3,1) backwards;animation-duration:.8s!important;animation-delay:var(--intro-delay,0ms)}
.rail-controls{flex-wrap:wrap;gap:18px;font-size:.8125rem}
.rail-progress{height:4px;max-width:340px;min-width:45px;border-radius:3px}
.rail-progress>span{transition:transform .12s linear!important;transition-duration:.12s!important}
.rail-counter{font-weight:700;font-size:.8125rem}
.rail-auto-state{display:flex;align-items:center;gap:7px;font-size:.75rem;color:var(--blue-dark);white-space:nowrap}
.rail-auto-state i{width:6px;height:6px;border-radius:50%;background:var(--blue);box-shadow:0 0 0 4px #248bef14}
.rail-toggle{border:1px solid #bad5ea;padding:10px 15px;color:var(--ink);background:#edf6fc;min-height:43px;font-size:.75rem;font-weight:700}
.rail-toggle:hover{background:#dceffc;border-color:var(--blue)}
.rail-direction{flex-wrap:wrap}.rail-direction button{min-height:43px}
.site-motion-toggle{position:fixed;z-index:40;bottom:18px;right:20px;display:flex;align-items:center;gap:10px;min-height:43px;padding:10px 15px;background:rgba(5,28,48,.91);border:1px solid #436680;color:#ecf5fc;font-size:.75rem;font-weight:600;box-shadow:0 6px 22px #051c3026;backdrop-filter:blur(12px)}
.site-motion-toggle:hover{background:#123e5f;border-color:var(--sky)}
.motion-bars{display:flex;align-items:center;gap:3px;height:16px;width:16px}
.motion-bars i{width:2px;background:#66c0ff;height:12px;transform-origin:center;animation:motion-meter .8s ease-in-out infinite alternate;animation-duration:.8s!important}
.motion-bars i:nth-child(2){animation-delay:.2s}.motion-bars i:nth-child(3){animation-delay:.4s}
@keyframes motion-meter{from{transform:scaleY(.35)}to{transform:scaleY(1)}}
.site-footer{padding-bottom:62px}
html[data-motion=off] .motion-block{opacity:1!important;transform:none!important;filter:none!important;transition:none!important}
html[data-motion=off] .motion-card,html[data-motion=off] .hero-image,html[data-motion=off] .about-home-image img,html[data-motion=off] .portfolio-photo img,html[data-motion=off] .about-collage img,html[data-motion=off] .panorama img,html[data-motion=off] .detail-image img,html[data-motion=off] .technical-image img,html[data-motion=off] .contact-panorama img,html[data-motion=off] .motion-bars i{animation:none!important;transform:none}
html[data-motion=off] .rail-auto-state{display:none}
.rail-shell[data-playing=false] .rail-auto-state i{background:#91a5b5;box-shadow:none}
html[data-motion=on] .mobile-nav:not([hidden]){animation:menu-arrival .6s cubic-bezier(.16,1,.3,1) backwards;animation-duration:.6s!important}
@keyframes menu-arrival{from{opacity:0;transform:translateY(-24px)}to{opacity:1;transform:none}}
body.modal-open .hero-image,body.modal-open .about-home-image img,body.modal-open .portfolio-photo img,body.modal-open .about-collage img,body.modal-open .panorama img,body.modal-open .detail-image img,body.modal-open .technical-image img,body.modal-open .contact-panorama img{animation-play-state:paused!important}
html[data-motion=on] .motion-block:not(.is-visible) img,html[data-motion=on] .hero:not(.is-visible) .hero-image{animation-play-state:paused!important}
@media(max-width:600px){html[data-motion=on] .motion-block{transform:translateY(30px)}html[data-motion=on] .motion-block.is-visible{transform:none}.rail-controls{gap:10px}.rail-toggle{padding:8px 11px;font-size:.6875rem}.rail-progress{min-width:35px}.rail-counter{font-size:.6875rem}}
