/* Small, purposeful movement across public and dashboard experiences. */
:root{--motion-ease:cubic-bezier(.22,1,.36,1);--motion-fast:160ms;--motion-normal:320ms}
button,.btn,.nav button,.public-nav a,.textbtn,.select-trigger{transition:background-color var(--motion-fast),color var(--motion-fast),border-color var(--motion-fast),transform var(--motion-fast) var(--motion-ease)}
button:active:not(:disabled),.btn:active{transform:scale(.975)}
@media(hover:hover){.btn:hover{transform:translateY(-2px)}.public-nav a:not(.brand-lockup):hover{background-color:#f0f0f0}.public-nav a.btn:hover{background-color:#161616}.nav button:hover{background:#ededed}.card{transition:border-color 200ms}.card:hover{border-color:#c9c9c9}}
.select-trigger svg{transition:transform 220ms var(--motion-ease)}.select-menu:not([hidden]){animation:menu-in 180ms var(--motion-ease) both;transform-origin:top center}.select-menu.opens-up:not([hidden]){transform-origin:bottom center}
dialog[open]{animation:dialog-in 260ms var(--motion-ease) both}dialog[open]::backdrop{animation:backdrop-in 220ms ease both}#toast{animation:toast-in 220ms var(--motion-ease) both}.progress span{transform-origin:left;animation:progress-in 650ms var(--motion-ease) both}.signup-progress span{transition:background-color 250ms}.faq details[open] p{animation:content-in 260ms var(--motion-ease) both}.faq summary:after{transition:transform 200ms}.faq details[open] summary:after{transform:rotate(180deg)}
.motion-enter{animation:content-in 500ms var(--motion-ease) both;animation-delay:var(--entrance-delay,0ms)}.motion-page{animation:page-in 280ms var(--motion-ease) both}.service-flow>span{transition:border-color 200ms,background-color 200ms}.message:last-of-type{animation:content-in 320ms var(--motion-ease) both}.hero::before{animation:artwork-in 900ms var(--motion-ease) both}
@keyframes content-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes page-in{from{opacity:.3}to{opacity:1}}@keyframes menu-in{from{opacity:0;transform:translateY(-4px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes dialog-in{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes backdrop-in{from{opacity:0}to{opacity:1}}@keyframes toast-in{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}@keyframes progress-in{from{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes artwork-in{from{transform:scale(1.025)}to{transform:scale(1)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.motion-enter,.motion-page{opacity:1;transform:none}button:active,.btn:hover,.btn:active{transform:none!important}}
/* Gentle movement of decorative ink only; content remains stationary. */
.hero::before,.header-frame::before{inset:-3%;animation:calligraphy-flow 26s ease-in-out infinite alternate;transform-origin:center;will-change:transform}
@keyframes calligraphy-flow{0%{transform:translate(-.7%,-.35%) scale(1.015)}50%{transform:translate(.35%,.55%) scale(1.025)}100%{transform:translate(.8%,-.2%) scale(1.015)}}
@media(prefers-reduced-motion:reduce){.hero::before,.header-frame::before{animation:none!important;transform:none;will-change:auto}}
