/* Fade In Animation */
.fade-in {
    animation: fadeIn 0.5s ease forwards;
    opacity: 0;
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

/* Glitch Effect */
.glitch-text {
    position: relative;
}

.glitch-text:hover {
    animation: glitch 0.3s cubic-bezier(.25, .46, .45, .94) both infinite;
    color: var(--accent-gold);
}

@keyframes glitch {
    0% { transform: translate(0); }
    20% { transform: translate(-2px, 2px); }
    40% { transform: translate(-2px, -2px); }
    60% { transform: translate(2px, 2px); }
    80% { transform: translate(2px, -2px); }
    100% { transform: translate(0); }
}

/* Typing Indicator Pulse */
.typing-indicator::after {
    content: '|';
    display: inline-block;
    margin-left: 2px;
    animation: blink 1s infinite;
    color: var(--accent-gold);
}

@keyframes blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}

/* Processing Pulse */
.processing {
    opacity: 0.5;
    transition: opacity 0.2s;
}