@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}@keyframes fadeIn{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}@keyframes colorPulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes wave{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes bounce{0%,80%,to{transform:scale(0);opacity:.5}40%{transform:scale(1);opacity:1}}.typing-message{animation:fadeIn .4s ease-out;position:relative;padding:8px 12px;border-radius:8px;background:linear-gradient(90deg,rgba(var(--message-bg-rgb,100,100,100),.05) 0,rgba(var(--message-bg-rgb,100,100,100),.15) 50%,rgba(var(--message-bg-rgb,100,100,100),.05) 100%);background-size:1000px 100%;animation:fadeIn .4s ease-out,shimmer 2s linear infinite}.typing-message span{animation:colorPulse 2s ease-in-out infinite}.typing-ellipsis{display:inline-flex;align-items:center;gap:2px;margin-left:4px}.typing-ellipsis span,.typing-ellipsis:after,.typing-ellipsis:before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background-color:currentColor;animation:bounce 1.4s ease-in-out infinite}.typing-ellipsis:before{animation-delay:0s}.typing-ellipsis span{animation-delay:.2s}.typing-ellipsis:after{animation-delay:.4s}@keyframes ellipsisRotate{0%{content:""}25%{content:"."}50%{content:".."}75%,to{content:"..."}}