/* OPEX motion layer: transform/opacity only, 150-300ms ease-out */
:root{--d:220ms;--e:cubic-bezier(.2,.7,.2,1)}
@view-transition{navigation:auto}
::view-transition-old(root){animation:vt-out 180ms var(--e) both}
::view-transition-new(root){animation:vt-in 260ms var(--e) both}
@keyframes vt-out{to{opacity:0}}
@keyframes vt-in{from{opacity:0}}
@supports not (view-transition-name:none){body{animation:vt-in 260ms var(--e) both}}
/* reveals: space is reserved (element stays in flow), only opacity/transform change */
.js .rv{opacity:0;transform:translateY(12px);transition:opacity 280ms var(--e),transform 280ms var(--e)}
.js .rv.in{opacity:1;transform:none}
/* hover / focus lift */
.lift{transition:transform var(--d) var(--e);will-change:transform;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--ty,0px))}
.lift:hover,.lift:focus-visible,.lift:focus-within{--ty:-4px}
.btn,.ghost{transition:transform 150ms var(--e),opacity 150ms var(--e);cursor:pointer;border:0}
.btn:hover,.btn:focus-visible{transform:translateY(-2px)}
.btn:active{transform:scale(.97)}
.btn[aria-busy=true]{opacity:.75;pointer-events:none}
.btn .spin{display:none;width:14px;height:14px;border-radius:50%;border:2px solid #fff;border-right-color:transparent;animation:sp 700ms linear infinite}
.btn[aria-busy=true] .spin{display:inline-block}
@keyframes sp{to{transform:rotate(1turn)}}
/* search overlay */
.sx{position:fixed;inset:0;z-index:50;display:grid;place-items:start center;padding-top:14vh;background:rgba(20,24,38,.25);opacity:0;pointer-events:none;transition:opacity 200ms var(--e)}
.sx .win{width:560px;padding:16px;transform:translateY(-8px) scale(.98);transition:transform 220ms var(--e)}
.sx.open{opacity:1;pointer-events:auto}.sx.open .win{transform:none}
.sx input{width:100%;height:46px;border-radius:12px;border:1px solid #e4e6ee;padding:0 14px;font:inherit}
/* mobile menu */
.mm{display:none}
@media (max-width:860px){nav{position:absolute;top:80px;left:0;right:0;flex-direction:column;padding:16px;border-radius:16px;background:#fff;box-shadow:0 20px 40px -12px rgba(20,24,38,.25);opacity:0;transform:translateY(-8px);pointer-events:none;transition:opacity 200ms var(--e),transform 200ms var(--e)}
nav.open{opacity:1;transform:none;pointer-events:auto}.mm{display:inline-flex}}
/* accordion */
details summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;font-weight:700;padding:14px 0}
details summary::after{content:"›";transition:transform 200ms var(--e)}
details[open] summary::after{transform:rotate(90deg)}
details[open] .ac{animation:vt-in 220ms var(--e) both}
@media (prefers-reduced-motion:reduce){
*,*::before,*::after{animation:none!important;transition:none!important}
::view-transition-old(root),::view-transition-new(root){animation:none!important}
.js .rv{opacity:1;transform:none}
.lift,.btn:hover,.btn:active,.lift:hover,.sx .win,nav{transform:none!important}}
