/* Motion is optional: content stays visible without JavaScript. */
.button{transition:background .2s,transform .25s,box-shadow .25s}.button:hover{box-shadow:0 8px 22px #245de830}.button:active{transform:translateY(0) scale(.98)}
.text-link{transition:color .2s,border-color .2s}.service-icon{transition:transform .3s,background .3s}.services article:hover .service-icon{transform:translateY(-4px) rotate(-5deg);background:#dae5ff}
.project-visual .mini-browser{transition:transform .55s cubic-bezier(.2,.7,.2,1),box-shadow .55s}.project:hover .mini-browser{transform:translateY(-5px) scale(1.025);box-shadow:0 18px 32px #12223b28}
input,textarea{transition:border-color .2s,box-shadow .2s}input:focus,textarea:focus{box-shadow:0 0 0 4px #245de810}summary:after{transition:transform .25s}details[open] summary:after{transform:rotate(180deg)}
@media(prefers-reduced-motion:no-preference){
 .reveal-ready{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1);transition-delay:var(--reveal-delay,0ms)}
 .reveal-ready.is-visible,.reveal-ready:focus-within{opacity:1;transform:none}
 .main-mock{animation:mock-float 7s ease-in-out 1s 3}.phone{animation:phone-float 6s ease-in-out 1.3s 3}.orbit{animation:halo-breathe 8s ease-in-out 2}
 @keyframes mock-float{0%,100%{transform:rotate(-3deg) translateY(0)}50%{transform:rotate(-2deg) translateY(-9px)}}
 @keyframes phone-float{0%,100%{transform:rotate(6deg) translateY(0)}50%{transform:rotate(4deg) translateY(-7px)}}
 @keyframes halo-breathe{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(.96)}}
 details[open]>p{animation:answer-in .3s ease-out} @keyframes answer-in{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}
 @media(max-width:760px){header nav.open{animation:menu-in .25s ease-out}@keyframes menu-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}}
}
@media(prefers-reduced-motion:reduce){.reveal-ready{opacity:1;transform:none}.main-mock,.phone,.orbit{animation:none!important}*,*:before,*:after{transition:none!important}}
