/* Shared motion language. Content remains visible without JavaScript. */
:root{--motion-ease:cubic-bezier(.22,1,.36,1)}
.ui-arrived{animation:ui-arrive .85s var(--motion-ease) both}
@keyframes ui-arrive{from{opacity:.45;translate:0 22px}to{opacity:1;translate:0 0}}
.button,.large-cta,.offer-explore{transition:translate .3s var(--motion-ease),box-shadow .3s,background .3s,color .3s}
.button svg,.large-cta svg,.text-link svg{transition:translate .35s var(--motion-ease),rotate .35s}
.button:focus-visible,.large-cta:focus-visible,.project-card button:focus-visible{outline:3px solid #448fbb;outline-offset:5px}
.button:active,.large-cta:active{scale:.98}
.scope-grid .why-card,.why-grid .why-card,.journey-stage{isolation:isolate;position:relative}
.scope-grid .why-card:before,.why-grid .why-card:before{content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:radial-gradient(330px circle at var(--light-x,50%) var(--light-y,50%),#c5df3740,transparent 75%);opacity:0;transition:opacity .4s}
.scope-grid .why-card:focus-within:before,.why-grid .why-card:focus-within:before{opacity:1}
.why-icon{transition:rotate .5s var(--motion-ease),scale .5s var(--motion-ease)}
.photo-frame{overflow:hidden}.photo-frame img{transition:scale 1s var(--motion-ease)}
.since-label{transition:translate .6s var(--motion-ease),rotate .6s var(--motion-ease)}
.project-card .project-open{transition:rotate .5s var(--motion-ease),background .35s,scale .4s}
.project-card .project-info{transition:translate .5s var(--motion-ease)}
.project-filters button,.project-filters label{transition:background .3s,color .3s,box-shadow .3s,translate .3s}
.journey .process-tabs button{transition:background .35s,translate .35s,color .35s}
.journey .process-tabs button>span{transition:scale .35s,box-shadow .35s}
.journey .process-tabs button[aria-selected="true"]>span{box-shadow:0 0 0 6px #c5dd3620}
.contact-orb{position:relative;transition:rotate .6s var(--motion-ease),scale .6s var(--motion-ease)}
.contact-orb:after{content:'';position:absolute;inset:-12px;border:1px solid currentColor;border-radius:50%;opacity:.25;transition:inset .5s,opacity .5s}
.contact-bottom a{background-image:linear-gradient(90deg,#bdd930,#4197b3);background-size:0 2px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .45s}
.contact-bottom a:hover{background-size:100% 2px}
.landing-section details[open]>:not(summary),.why-card details[open]>:not(summary){animation:ui-disclose .4s var(--motion-ease) both}
@keyframes ui-disclose{from{opacity:0;translate:0 -7px}to{opacity:1;translate:0 0}}
.form-field input,.form-field textarea,.form-field select{transition:box-shadow .25s,border-color .25s}
.form-field :is(input,textarea,select):focus{box-shadow:0 0 0 4px #bcd63825;border-color:#7f9e15}
.scope-choices label:has(input:checked){box-shadow:0 0 0 3px #bed63820}
@media(hover:hover) and (pointer:fine){
.button:hover,.large-cta:hover{translate:0 -3px;box-shadow:0 9px 22px #08243e20}
.button:hover svg,.large-cta:hover svg,.text-link:hover svg{translate:3px -2px}
.scope-grid .why-card:hover:before,.why-grid .why-card:hover:before{opacity:1}
.why-card:hover .why-icon{rotate:-8deg;scale:1.12}
.about-visual:hover .photo-frame img{scale:1.035}.about-visual:hover .since-label{translate:5px -6px;rotate:3deg}
.project-card:hover .project-open{rotate:45deg;scale:1.08;background:#c5df37;color:#08243e}
.project-card:hover .project-info{translate:0 -6px}
.journey .process-tabs button:hover{translate:5px 0}.journey .process-tabs button:hover>span{scale:1.08}
.contact-orb:hover{rotate:10deg;scale:1.05}.contact-orb:hover:after{inset:-20px;opacity:.5}
}
@media(max-width:800px){.ui-arrived{animation-duration:.55s}.button:active,.project-card button:active{filter:brightness(.94)}}
@media(prefers-reduced-motion:reduce){.ui-arrived,.landing-section details[open]>:not(summary),.why-card details[open]>:not(summary){animation:none!important}.button,.large-cta,.offer-explore,.button svg,.large-cta svg,.text-link svg,.why-icon,.photo-frame img,.since-label,.project-card .project-open,.project-card .project-info,.journey .process-tabs button,.journey .process-tabs button>span,.contact-orb,.contact-orb:after,.contact-bottom a,.form-field input,.form-field textarea,.form-field select{transition:none!important}.button:hover,.large-cta:hover,.journey .process-tabs button:hover,.project-card:hover .project-info{translate:none}.about-visual:hover .photo-frame img,.contact-orb:hover,.why-card:hover .why-icon{scale:1;rotate:0}}

/* Re-entrant scroll reveals: reset only after leaving the viewport entirely. */
.ui-scroll-item.ui-arrived{animation:ui-return 850ms cubic-bezier(.16,1,.3,1) var(--enter-delay,0ms) both}
@keyframes ui-return{from{opacity:.2;translate:0 var(--enter-y,34px);scale:.98}to{opacity:1;translate:0 0;scale:1}}
.js .reveal.ui-scroll-item{opacity:1;transform:none}
.offer-deck.has-entered .offer-scene.ui-scroll-item:not(.ui-arrived){animation:none}
@media(max-width:800px){.ui-scroll-item.ui-arrived{animation-duration:650ms;animation-delay:0ms}@keyframes ui-return{from{opacity:.3;translate:0 calc(var(--enter-y,34px) * .65);scale:.99}to{opacity:1;translate:0 0;scale:1}}}
@media(prefers-reduced-motion:reduce){.ui-scroll-item.ui-arrived{animation:none!important;opacity:1;translate:none;scale:1}}
.offer-deck.has-entered .offer-scene.ui-scroll-item.ui-arrived{animation:ui-return 850ms cubic-bezier(.16,1,.3,1) var(--enter-delay,0ms) both}
@media(prefers-reduced-motion:reduce){.offer-deck.has-entered .offer-scene.ui-scroll-item.ui-arrived{animation:none}}
