/* Animations */
@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(20px); }
    to { opacity: 1; transform: translateY(0); }
}


.animate-up {
    animation: fadeInUp 0.6s cubic-bezier(0.23, 1, 0.32, 1) forwards;
}

/* Edge Flow Animation */
@keyframes drawnet-flow {
    from { stroke-dashoffset: 20; }
    to { stroke-dashoffset: 0; }
}

.flow-animation path {
    stroke-dasharray: 5, 5;
    animation: drawnet-flow 1s linear infinite;
}

/* Modal Animations */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes scaleUp { from { opacity: 0; transform: scale(0.9) translateY(20px); } to { opacity: 1; transform: scale(1) translateY(0); } }
@keyframes scaleDown { from { opacity: 1; transform: scale(1) translateY(0); } to { opacity: 0; transform: scale(0.9) translateY(20px); } }

.animate-fade-in { animation: fadeIn 0.3s ease forwards; }
.animate-fade-out { animation: fadeOut 0.2s ease forwards; }
.animate-scale-up { animation: scaleUp 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.28) forwards; }
.animate-scale-down { animation: scaleDown 0.3s ease forwards; }
