@keyframes fly-envelope {
    0% {
        transform: translateX(0) translateY(0) rotate(0deg);
    }
    25% {
        transform: translateX(10px) translateY(-2px) rotate(3deg);
    }
    50% {
        transform: translateX(25px) translateY(0) rotate(0deg);
    }
    75% {
        transform: translateX(10px) translateY(2px) rotate(-3deg);
    }
    100% {
        transform: translateX(0) translateY(0) rotate(0deg);
    }
}

.animate-fly-envelope {
    animation: fly-envelope 4s ease-in-out infinite;
    display: inline-flex;
    align-items: center;
}


@keyframes type-bounce {
    0%, 100% { transform: translateY(0) scale(1); }
    50% { transform: translateY(-1px) scale(1.05); }
}

@keyframes type-dot {
    0%, 100% { transform: translateY(0); opacity: 0.3; }
    50% { transform: translateY(-3px); opacity: 1; }
}

.animate-type-bounce {
    animation: type-bounce 1s infinite ease-in-out;
}

.animate-type-dot-1 {
    animation: type-dot 1.5s infinite 0s ease-in-out;
}

.animate-type-dot-2 {
    animation: type-dot 0.8s infinite 0.2s ease-in-out;
}

.animate-type-dot-3 {
    animation: type-dot 1.5s infinite 0.4s ease-in-out;
}

@keyframes link-pulse {
    0%, 100% {
        transform: scale(1) rotate(0deg);
        opacity: 0.8;
    }
    50% {
        transform: scale(1.12) rotate(5deg);
        opacity: 1;
        filter: drop-shadow(0 0 4px rgba(16, 185, 129, 0.4));
    }
}

.animate-link-pulse {
    animation: link-pulse 2s infinite ease-in-out;
}

@keyframes book-shake {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-1px); }
}

@keyframes scan-line {
    0%, 100% { top: 0%; opacity: 0.3; }
    50% { top: 80%; opacity: 1; }
}

.animate-book-shake {
    animation: book-shake 1.5s infinite ease-in-out;
}

.animate-scan-line {
    animation: scan-line 1.2s infinite ease-in-out;
}
