/* Gentle motion, independent of the site's existing layout and transforms. */
.cosmos{overflow:hidden}
.cosmos::after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 51%,#c878ff24,transparent 34%);opacity:.3;animation:space-breathe 7s ease-in-out infinite alternate}
.hero-single .hero-phone{animation:phone-float 6s ease-in-out infinite}
.mini-wave i{transform-origin:center;animation:voice-wave 1.3s ease-in-out infinite alternate}
.mini-wave i:nth-child(2n){animation-delay:-.7s}
.mini-wave i:nth-child(3n){animation-delay:-.3s}
.mini-wave i:nth-child(4n){animation-delay:-1s}
.motion-reveal{transition:opacity .7s ease,translate .7s cubic-bezier(.2,.7,.2,1);transition-delay:var(--reveal-delay,0ms)}
.motion-reveal:not(.is-visible){opacity:0;translate:0 22px}
.motion-reveal.is-visible{opacity:1;translate:0 0}
.motion-reveal:focus-within{opacity:1;translate:0 0;transition-delay:0ms}
.store-button,.hero-downloads .store-button{position:relative;overflow:hidden;transition:transform .25s ease,background .25s ease,border-color .25s ease,box-shadow .25s ease}
.store-button::after{content:'';position:absolute;inset:-80% -100%;pointer-events:none;background:linear-gradient(110deg,transparent 43%,#ffffff20 50%,transparent 57%);transform:translateX(-60%);opacity:0;transition:transform .65s ease,opacity .25s ease}
.store-button:hover::after,.store-button:focus-visible::after{transform:translateX(60%);opacity:1}
.store-button:hover,.store-button:focus-visible{border-color:#dfc0ff99;box-shadow:0 10px 30px #a45bf32b,inset 0 1px 0 #fff3}
.store-button:active{transform:translateY(0) scale(.98)}
.legal-card img{transition:translate .35s ease}
.legal-card:hover img,.legal-card:focus-visible img{translate:0 -7px}
header nav a{position:relative}
header nav a::after{content:'';position:absolute;left:0;right:0;bottom:-7px;height:2px;border-radius:2px;background:#cba2ff;transform:scaleX(0);transform-origin:left;transition:transform .25s ease}
header nav a:hover::after,header nav a:focus-visible::after{transform:scaleX(1)}
dialog[open]{animation:dialog-enter .25s ease-out}
dialog[open]::backdrop{animation:backdrop-enter .25s ease-out}
.motion-suspended .cosmos::after,.motion-suspended .hero-phone,.motion-suspended .mini-wave i{animation-play-state:paused}
@keyframes space-breathe{to{opacity:1}}
@keyframes phone-float{0%,100%{translate:0 0}50%{translate:0 -10px}}
@keyframes voice-wave{from{scale:1 .55}to{scale:1 1.15}}
@keyframes dialog-enter{from{opacity:0;translate:0 12px;scale:.98}to{opacity:1;translate:0 0;scale:1}}
@keyframes backdrop-enter{from{opacity:0}to{opacity:1}}
@media(max-width:600px){@keyframes phone-float{0%,100%{translate:0 0}50%{translate:0 -6px}}}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 *,*::before,*::after{animation:none!important;transition:none!important}
 .motion-reveal:not(.is-visible){opacity:1;translate:none}
 .hero-single .hero-phone,.mini-wave i{translate:none;scale:1}
}
