/* Streaming message animation (ellipsis) */
.message.streaming .message-content {
    position: relative;
}

.message .streaming-dots {
    display: inline-flex;
    gap: 2px;
    margin-left: 6px;
    opacity: 0.7;
}

.message .streaming-dots span {
    animation: streamingDot 1.2s infinite;
}

.message .streaming-dots span:nth-child(2) {
    animation-delay: 0.2s;
}

.message .streaming-dots span:nth-child(3) {
    animation-delay: 0.4s;
}

.contact-preview.streaming::after {
    content: " ...";
    animation: streamingPreview 1.2s infinite;
}

@keyframes streamingDot {
    0%, 80%, 100% { opacity: 0.2; }
    40% { opacity: 1; }
}

@keyframes streamingPreview {
    0%, 80%, 100% { opacity: 0.2; }
    40% { opacity: 1; }
}
