.filter-sidebar {
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease;
}
@media (max-width: 1023px) {
    .filter-sidebar {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        z-index: 60;
        width: 320px;
        max-width: 85vw;
        transform: translateX(-100%);
        opacity: 0;
        overflow-y: auto;
    }
    .filter-sidebar.open {
        transform: translateX(0);
        opacity: 1;
    }
}
.filter-overlay {
    position: fixed;
    inset: 0;
    z-index: 55;
    background: rgba(0, 0, 0, 0.4);
    backdrop-filter: blur(2px);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease;
}
.filter-overlay.active {
    opacity: 1;
    pointer-events: auto;
}
.filter-section {
    overflow: hidden;
    transition: max-height 0.3s ease, opacity 0.2s ease;
}
.filter-section.collapsed {
    max-height: 0;
    opacity: 0;
}
.filter-section.expanded {
    max-height: 500px;
    opacity: 1;
}
.filter-badge {
    animation: badgeIn 0.2s ease-out;
}
@keyframes badgeIn {
    0% { transform: scale(0.8); opacity: 0; }
    100% { transform: scale(1); opacity: 1; }
}
.sort-option:checked + label {
    background: #eff6ff;
    border-color: #3b82f6;
    color: #1d4ed8;
}
.dark .sort-option:checked + label {
    background: rgba(59, 130, 246, 0.15);
    border-color: #3b82f6;
    color: #93c5fd;
}
@keyframes heartPop {
    0% { transform: scale(1); }
    30% { transform: scale(1.3); }
    60% { transform: scale(0.9); }
    100% { transform: scale(1); }
}
.heart-pop {
    animation: heartPop 0.4s ease;
}
