  .fade-in {
            animation: fadeIn 0.8s ease-out forwards;
        }
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(30px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .bounce-in {
            animation: bounceIn 1s ease-out forwards;
        }
        @keyframes bounceIn {
            0% { opacity: 0; transform: scale(0.3); }
            50% { opacity: 1; transform: scale(1.1); }
            70% { transform: scale(0.9); }
            100% { opacity: 1; transform: scale(1); }
        }
        .loading-dots {
            display: inline-block;
            position: relative;
            width: 80px;
            height: 20px;
        }
        .loading-dots div {
            position: absolute;
            top: 8px;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background: #fff;
            animation: loading-dots 1.2s linear infinite;
        }
        .loading-dots div:nth-child(1) { left: 8px; animation-delay: 0s; }
        .loading-dots div:nth-child(2) { left: 32px; animation-delay: -0.4s; }
        .loading-dots div:nth-child(3) { left: 56px; animation-delay: -0.8s; }
        @keyframes loading-dots {
            0%, 80%, 100% { transform: scale(0); opacity: 0.5; }
            40% { transform: scale(1); opacity: 1; }
        }
        .heart-beat {
            animation: heartBeat 1.5s ease-in-out infinite;
        }
        @keyframes heartBeat {
            0%, 100% { transform: scale(1); }
            14% { transform: scale(1.1); }
            28% { transform: scale(1); }
            42% { transform: scale(1.1); }
            70% { transform: scale(1); }
        }