/* ASFARI Lab — motion layer */
:root{--ease-out:cubic-bezier(.16,1,.3,1);--ease-soft:cubic-bezier(.2,.8,.2,1)}
/* reveals */
.rv{opacity:0;transform:translate3d(0,28px,0);transition:opacity .9s var(--ease-out) var(--rvd,0ms),transform .9s var(--ease-out) var(--rvd,0ms);will-change:opacity,transform}
.rv.rv-in{opacity:1;transform:none}
.rv.rv-in:not(.desktop-object){will-change:auto}
/* hero parallax composes with drag (--dx/--dy) */
.hero .desktop-object{transform:translate(calc(var(--dx,0px) + var(--px,0px)),calc(var(--dy,0px) + var(--py,0px))) rotate(var(--angle,0deg));transition:transform .18s var(--ease-soft)}
.hero .desktop-object.dragging{transition:none}
.hero .desktop-object.settling{transition:transform .65s var(--ease-out)}
.hero .hero-content{transform:translate(calc(-50% + var(--px,0px)),calc(-50% + var(--py,0px)));transition:transform .25s var(--ease-soft)}
.hero .hero-glow{transform:translate(var(--px,0px),var(--py,0px));transition:transform .4s var(--ease-soft)}
/* media parallax */
.work-card .project-visual img,.x-frame img,.studio-img img,.svc-shot img{transform:translate3d(0,var(--mp,0px),0) scale(1.06);transition:transform .35s var(--ease-soft)}
.work-card:hover .project-visual img{transform:translate3d(0,var(--mp,0px),0) scale(1.1)}
/* softer hovers everywhere */
.button,.work-card .browser-frame,.round-arrow,.pkg,.hub-card,.svc-tile,.service summary,.faq-item summary,.nav-drop a,.x-frame{transition-timing-function:var(--ease-soft)}
.work-card .browser-frame{transition:transform .7s var(--ease-out),box-shadow .7s var(--ease-out)}
.button{transition:transform .35s var(--ease-out),background .25s,color .25s,box-shadow .35s var(--ease-out)}
.button:hover{transform:translateY(-2px)}
.pkg,.hub-card,.svc-tile{transition:transform .5s var(--ease-out),box-shadow .5s var(--ease-out)}
.pkg:hover,.hub-card:hover,.svc-tile:hover{transform:translateY(-4px)}
details.service .service-body,details.faq-item>*:not(summary){animation:rv-open .6s var(--ease-out)}
@keyframes rv-open{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
/* smooth anchor jumps */
html{scroll-behavior:smooth}
@media(prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}html{scroll-behavior:auto}.work-card .project-visual img,.x-frame img{transform:none}}
