@keyframes spin{to{transform:rotate(360deg)}}.animate-spin,.spin{animation:spin 1s linear infinite}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes monthGridFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes weekFadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes lvFadeIn{0%{opacity:0}to{opacity:1}}@keyframes lvSlideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes usherSlideUp{0%{opacity:0;transform:translateY(20px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes usherPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.2)}}@keyframes usherBounce{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-6px)}}@keyframes usherShimmer{0%{opacity:.3}50%{opacity:.7}to{opacity:.3}}@keyframes usherDots{0%{content:"."}33%{content:".."}66%{content:"..."}}.usher-typing:after{content:"...";animation:usherDots 1.5s infinite}@keyframes livePulse{0%{transform:scale(1);opacity:.5}to{transform:scale(1.7);opacity:0}}@keyframes liveGlow{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes liveBreathe{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}@keyframes liveBar{0%,to{height:6px}50%{height:22px}}@keyframes liveDot{0%,80%,to{opacity:.3;transform:scale(.7)}40%{opacity:1;transform:scale(1.3)}}@keyframes schedModalIn{0%{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes reportToastIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes reportToastPulse{0%,to{opacity:.5}50%{opacity:1}}@keyframes notifSlideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes tourFadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes profileDropIn{0%{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes blink{50%{opacity:0}}@keyframes feedbackFadeIn{0%{opacity:0}to{opacity:1}}@keyframes feedbackSlideUp{0%{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideDown{0%{opacity:0;transform:translate(-50%) translateY(-12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes float1{0%,to{transform:translate(0) rotate(0)}50%{transform:translate(30px,-20px) rotate(5deg)}}@keyframes float2{0%,to{transform:translate(0) rotate(0)}50%{transform:translate(-20px,30px) rotate(-3deg)}}@keyframes bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}
