.btn-loader{--duration:4s;--active:var(--foreground);--track:color-mix(in oklab, var(--foreground) 50%, transparent);animation:1s linear infinite btn-spin}@keyframes btn-spin{0%{rotate:none}to{rotate:360deg}}.btn-loader.variant-default{--active:var(--primary-foreground);--track:color-mix(in oklab, var(--primary-foreground) 50%, transparent)}.btn-loader.variant-secondary{--active:var(--secondary-foreground);--track:color-mix(in oklab, var(--secondary-foreground) 50%, transparent)}.btn-loader.variant-destructive{--active:var(--destructive);--track:color-mix(in oklab, var(--destructive) 50%, transparent)}.btn-loader.variant-link{--active:var(--brand);--track:color-mix(in oklab, var(--brand) 50%, transparent)}.active{stroke:var(--active);stroke-linecap:round;stroke-dashoffset:360px;animation:active-animation var(--duration) ease-in-out infinite}.track{stroke:var(--track);stroke-linecap:round;stroke-dashoffset:360px;animation:track-animation var(--duration) ease-in-out infinite}@keyframes active-animation{0%{stroke-dasharray:0 0 0 360 0 360}12.5%{stroke-dasharray:0 0 270 90 270 90}25%{stroke-dasharray:0 270 0 360 0 360}37.5%{stroke-dasharray:0 270 270 90 270 90}50%{stroke-dasharray:0 540 0 360 0 360}50.001%{stroke-dasharray:0 180 0 360 0 360}62.5%{stroke-dasharray:0 180 270 90 270 90}75%{stroke-dasharray:0 450 0 360 0 360}87.5%{stroke-dasharray:0 450 270 90 270 90}87.501%{stroke-dasharray:0 90 270 90 270 90}to{stroke-dasharray:0 360 1 360 0 360}}@keyframes track-animation{0%{stroke-dasharray:0 20 320 40 320 40}12.5%{stroke-dasharray:0 290 50 310 50 310}25%{stroke-dasharray:0 290 320 40 320 40}37.5%{stroke-dasharray:0 560 50 310 50 310}37.501%{stroke-dasharray:0 200 50 310 50 310}50%{stroke-dasharray:0 200 320 40 320 40}62.5%{stroke-dasharray:0 470 50 310 50 310}62.501%{stroke-dasharray:0 110 50 310 50 310}75%{stroke-dasharray:0 110 320 40 320 40}87.5%{stroke-dasharray:0 380 50 310 50 310}to{stroke-dasharray:0 380 320 40 320 40}}
.btn-ripple{opacity:0;pointer-events:none;-webkit-tap-highlight-color:transparent;background:currentColor;border-radius:50%;animation:.5s ease-out forwards btn-ripple;position:absolute}@keyframes btn-ripple{0%{opacity:.15;transform:scale(0)}to{opacity:0;transform:scale(1)}}
