/* Visible, bounded motion. Static HTML is the default until JS observes a node. */
[data-reveal]{--reveal-delay:0ms}
.reveal-pending{opacity:0;transform:translate3d(0,58px,0)}
.reveal-ready{transition:opacity 800ms var(--ease) var(--reveal-delay),transform 1000ms var(--ease) var(--reveal-delay),box-shadow 400ms var(--ease),border-color 350ms}
.reveal-ready.is-revealed{opacity:1;transform:none}
.headline-line{display:block;overflow:hidden;padding-block:.065em;margin-block:-.065em}
.headline-line>span{display:block;transform-origin:left bottom;transition:transform 1100ms cubic-bezier(.16,1,.3,1) var(--reveal-delay,0ms)}
.headline-line:nth-child(2)>span{transition-delay:calc(var(--reveal-delay,0ms) + 110ms)}
.reveal-pending .headline-line>span{transform:translate3d(0,113%,0) rotate(2deg)}
.is-revealed .headline-line>span{transform:none}
[data-reveal=photo]{transform-origin:center bottom}
[data-reveal=photo].reveal-pending{transform:translate3d(0,54px,0) scale(.96)}
.model-image::after,.project-image::after{content:"";position:absolute;inset:-1px;background:#c4d8c5;transform:translateX(102%);pointer-events:none;z-index:2;transition:transform 1150ms cubic-bezier(.2,.8,.2,1) var(--reveal-delay,0ms);border-left:1px solid #f4f6f270}
.project-image::after{background:#2d5c48}
.reveal-pending .model-image::after,.reveal-pending .project-image::after{transform:translateX(0)}
.reveal-pending .model-image img,.reveal-pending .project-image img{transform:scale(.91);opacity:.6}
.model-image img,.project-image img{transition:transform 1100ms cubic-bezier(.16,1,.3,1) var(--reveal-delay,0ms),opacity 700ms var(--ease) var(--reveal-delay,0ms)}
.is-revealed .step-marker{background:#d0eed9;color:#17462f;box-shadow:0 0 0 5px #d0eed91a}
.model-image,.project-image{--tilt-x:0deg;--tilt-y:0deg;transform:perspective(1000px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y));transition:transform 550ms var(--ease),box-shadow 400ms var(--ease),background-color 300ms}
.image-expand{z-index:3;transition:background-color 300ms,color 300ms,transform 400ms var(--ease)}
.quote-form{transition:border-color 300ms,box-shadow 500ms var(--ease)}
.quote-form:focus-within{border-color:#a4c6ad;box-shadow:0 0 0 5px #b9e3cb0a,0 22px 65px #050e0a38}
.button:active .button-icon{transform:translate(4px,-4px)}
.closing-cta{position:relative;isolation:isolate;overflow:hidden}
.closing-cta:before,.closing-cta:after{content:"";position:absolute;z-index:-1;width:clamp(240px,35vw,600px);aspect-ratio:1;border:1px solid #9fbaa37a;border-radius:50%;top:15%;transform:translateY(var(--closing-drift,0px));pointer-events:none}
.closing-cta:before{left:-16%}.closing-cta:after{right:-16%;top:-48%}
@media(hover:hover) and (pointer:fine){
  .model-image:is(:hover,:focus-visible),.project-image:is(:hover,:focus-visible){box-shadow:0 20px 38px #123c2230}
  .model-image:is(:hover,:focus-visible) img,.project-image:is(:hover,:focus-visible) img{transform:scale(1.035);opacity:1;transition-delay:0ms;transition-duration:700ms}
  .model-image:is(:hover,:focus-visible) .image-expand,.project-image:is(:hover,:focus-visible) .image-expand{background:#175944;color:#fff;transform:translate(-2px,-2px)}
}
@media(max-width:760px){.reveal-pending{transform:translate3d(0,38px,0)}[data-reveal=photo].reveal-pending{transform:translate3d(0,36px,0) scale(.97)}.headline-line>span{transition-duration:900ms}.closing-cta:before,.closing-cta:after{opacity:.5}}
@media(prefers-reduced-motion:reduce){
  .reveal-pending,.reveal-ready,.reveal-ready.is-revealed,[data-reveal=photo].reveal-pending{opacity:1!important;transform:none!important;transition:none!important}
  .headline-line>span,.model-image,.project-image{transform:none!important;transition:none!important}
  .model-image::after,.project-image::after{display:none!important}.model-image img,.project-image img{opacity:1!important;transform:none!important}
  .closing-cta:before,.closing-cta:after{transform:none}
}
@media print{.reveal-pending,.reveal-ready{opacity:1!important;transform:none!important}.headline-line>span{transform:none!important}.model-image::after,.project-image::after{display:none!important}}
