@keyframes fx-spin{to{transform:rotate(360deg)}}@keyframes fx-shimmer-text{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes fx-bounce-ball{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}@keyframes fx-bounce-shadow{0%,to{opacity:.3;transform:scaleX(1)}50%{opacity:.1;transform:scaleX(.5)}}@keyframes fx-dot-bounce{0%,80%,to{opacity:.5;transform:scale(0)}40%{opacity:1;transform:scale(1)}}@keyframes fx-bar-bounce{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}@keyframes fx-circle-fade{0%,to{opacity:.3}50%{opacity:1}}@keyframes fx-pulse-ring{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(2)}}@keyframes fx-slide-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes fx-progress-stripes{0%{background-position:0 0}to{background-position:40px 0}}.fx-loader-spinner{border:3px solid #0000;border-top-color:var(--brand-primary,#8b5cf6);border-right-color:var(--brand-primary,#8b5cf6);border-radius:50%;width:48px;height:48px;animation:.8s linear infinite fx-spin;position:relative}.fx-loader-dots{gap:8px;display:inline-flex}.fx-loader-dots span{background:var(--brand-primary,#8b5cf6);border-radius:50%;width:12px;height:12px;animation:1.4s ease-in-out infinite both fx-dot-bounce}.fx-loader-dots span:first-child{animation-delay:-.32s}.fx-loader-dots span:nth-child(2){animation-delay:-.16s}.fx-loader-dots span:nth-child(3){animation-delay:0}.fx-loader-bars{align-items:flex-end;gap:5px;height:36px;display:inline-flex}.fx-loader-bars span{background:var(--brand-primary,#8b5cf6);border-radius:3px;width:6px;height:100%;animation:1s ease-in-out infinite fx-bar-bounce}.fx-loader-bars span:first-child{animation-delay:0s}.fx-loader-bars span:nth-child(2){animation-delay:.1s}.fx-loader-bars span:nth-child(3){animation-delay:.2s}.fx-loader-bars span:nth-child(4){animation-delay:.3s}.fx-loader-bars span:nth-child(5){animation-delay:.4s}.fx-loader-circle-fade{border:3px solid var(--brand-primary,#8b5cf6);border-radius:50%;width:48px;height:48px;animation:1.2s ease-in-out infinite fx-circle-fade}.fx-text-shimmer{background:linear-gradient(90deg,currentColor 0% 40%,#fffc 50%,currentColor 60% 100%) 0 0/200% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.2s linear infinite fx-shimmer-text}.fx-toast{animation:.3s ease-out fx-slide-in}.fx-upload-progress{background:#8b5cf626;border-radius:3px;height:6px;position:relative;overflow:hidden}.fx-upload-progress-bar{background:linear-gradient(90deg,var(--brand-primary,#8b5cf6),#ec4899);background-size:40px 100%;border-radius:3px;height:100%;transition:width .3s;position:relative}.fx-upload-progress-bar:after{content:"";background:linear-gradient(90deg,#0000,#ffffff4d,#0000) 0 0/40px 100%;animation:1s linear infinite fx-progress-stripes;position:absolute;inset:0}.fx-btn-shine-sweep{position:relative;overflow:hidden}.fx-btn-shine-sweep:before{content:"";background:linear-gradient(90deg,#0000,#ffffff4d,#0000);width:100%;height:100%;transition:left .5s;position:absolute;top:0;left:-100%}.fx-btn-shine-sweep:hover:before{left:100%}.fx-card-glass{-webkit-backdrop-filter:blur(12px);background:#ffffff14;border:1px solid #ffffff1f;border-radius:16px;box-shadow:0 8px 32px #0000001f}.fx-bg-mesh{background:radial-gradient(at 20% 20%,#8b5cf626 0px,transparent 50%),radial-gradient(at 80% 10%,#ec48991a 0px,transparent 50%),radial-gradient(at 60% 80%,#22d3ee14 0px,transparent 50%),var(--brand-bg,#f8fafc)}.fx-bg-grid{background:linear-gradient(#8b5cf60f 1px,transparent 1px)0 0/40px 40px,linear-gradient(90deg,#8b5cf60f 1px,transparent 1px)0 0/40px 40px,var(--brand-bg,#f8fafc)}
