@keyframes tabContentFadeIn {
    from {
        opacity: 0;
        transform: translateY(15px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes loading-bar-stripes {
    from { background-position: 0 0; }
    to { background-position: 30px 0; }
}

/* Обновленная анимация для скелета загрузки */
@keyframes pulse {
    0% {
        background-color: var(--skeleton-color);
    }
    50% {
        background-color: #e1e5e9; /* Слегка темнее для эффекта пульсации */
    }
    100% {
        background-color: var(--skeleton-color);
    }
}

@keyframes modalSlideUp {
    from { opacity: 0; transform: translateY(30px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes shake {
    10%, 90% { transform: translate3d(-1px, 0, 0); }
    20%, 80% { transform: translate3d(2px, 0, 0); }
    30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
    40%, 60% { transform: translate3d(4px, 0, 0); }
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(-5px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes popoverReveal {
    from { opacity: 0; transform: translateY(-12px) scale(0.96); }
    to { opacity: 1; transform: translateY(0) scale(1); }
}