.activity-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.progress-gradient{background:linear-gradient(-45deg,#ee7752,#e73c7e,#23a6d5,#23d5ab);background-size:400% 400%;animation:gradientShift 15s ease infinite}@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.activity-slide-in{animation:slideInFromRight .5s ease-out}@keyframes slideInFromRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.step-breathing{animation:breathe 3s ease-in-out infinite}@keyframes breathe{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.shimmer{position:relative;overflow:hidden}.shimmer:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:shimmer 2s infinite}@keyframes shimmer{0%{left:-100%}to{left:100%}}.status-fade-in{animation:fadeInUp .6s ease-out}@keyframes fadeInUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.connection-pulse{position:relative}.connection-pulse:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:currentColor;opacity:.3;transform:translate(-50%,-50%) scale(1);animation:connectionPulse 2s infinite}@keyframes connectionPulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.3}70%{transform:translate(-50%,-50%) scale(1.4);opacity:0}to{transform:translate(-50%,-50%) scale(1.4);opacity:0}}.timeline-item{position:relative;transition:all .3s ease}.timeline-item:hover{background:#1890ff0d;border-radius:4px}.enhanced-progress{background:linear-gradient(90deg,#1890ff,#52c41a);background-size:200% 100%;animation:progressFlow 3s ease infinite}@keyframes progressFlow{0%{background-position:200% 0}to{background-position:-200% 0}}.badge-bounce{animation:bounce .6s ease}@keyframes bounce{0%,20%,53%,80%,to{transform:translateY(0)}40%,43%{transform:translateY(-8px)}70%{transform:translateY(-4px)}90%{transform:translateY(-2px)}}.loading-dots:after{content:"";animation:loadingDots 1.5s infinite}@keyframes loadingDots{0%,20%{content:""}40%{content:"."}60%{content:".."}80%,to{content:"..."}}
