/* Websiten motion kit (shared): press feedback, ripple, loading spinner. Source of truth: engines/shared/motion — copies are made by tools/sync-motion.sh */
/* page-level transitions are intentionally absent: the themes already reveal their content, a second page animation made it play twice */
html{scroll-behavior:smooth}
:is(button,[role=button],input[type=submit],a.btn,a[class*="-btn"],a[class*="-buy"]):not(:disabled):active{transform:scale(.96)!important}
.ws-ripple{position:absolute;border-radius:50%;pointer-events:none;background:currentColor;opacity:.25;transform:scale(0);animation:ws-rip .6s ease-out forwards}
@keyframes ws-rip{to{transform:scale(1);opacity:0}}
.ws-loading{pointer-events:none}
.ws-loading::after{content:"";display:inline-block;flex:none;width:1em;height:1em;margin-left:.6em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ws-spin .65s linear infinite;vertical-align:-.15em}
@keyframes ws-spin{to{transform:rotate(360deg)}}
