.animated-underline{position:relative;text-decoration:none;display:inline-block}.animated-underline:after{content:"";position:absolute;width:100%;transform:scaleX(0);height:2px;bottom:0;left:0;background-color:var(--accent-color);transform-origin:bottom right;transition:transform .3s ease-out}.animated-underline:hover:after{transform:scaleX(1);transform-origin:bottom left}.animated-underline-small-muted{position:relative;text-decoration:none;display:inline-block}.animated-underline-small-muted:after{content:"";position:absolute;width:100%;transform:scaleX(0);height:1px;bottom:0;left:0;background-color:hsl(var(--muted-foreground));transform-origin:bottom right;transition:transform .3s ease-out}.animated-underline-small-muted:hover:after{transform:scaleX(1);transform-origin:bottom left}@keyframes slide-in-from-bottom{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slide-in-from-left{0%{transform:translateX(-30px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes slide-in-from-right{0%{transform:translateX(30px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-in{animation-duration:.5s;animation-fill-mode:both;animation-timing-function:ease-out}.slide-in-from-bottom{animation-name:slide-in-from-bottom}.slide-in-from-left{animation-name:slide-in-from-left}.slide-in-from-right{animation-name:slide-in-from-right}.fade-in{animation-name:fade-in}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-500{animation-delay:.5s}@keyframes particle-enter{0%{opacity:0;transform:translate(calc(-50% + var(--offsetX)),calc(-50% + var(--offsetY))) scale(0)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes particle-loading{0%,to{transform:translate(-50%,-50%) scale(1)}50%{transform:translate(calc(-50% + var(--driftX)),calc(-50% + var(--driftY))) scale(1.01)}}@keyframes particle-disperse{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(calc(-50% + var(--disperseX)),calc(-50% + var(--disperseY))) scale(0)}}.animate-particle-enter{animation:particle-enter .2s ease-out forwards;animation-delay:var(--delay)}.animate-particle-loading{animation:particle-loading 2.5s cubic-bezier(.45,0,.55,1) infinite;animation-delay:var(--loadingDelay)}.animate-particle-disperse{animation:particle-disperse .3s ease-out forwards}