/* ============================================
   LOADING BAR
   ============================================ */
.loading-bar {
    position: fixed;
    top: 0;
    left: 0;
    height: 3px;
    background: linear-gradient(90deg, #3b82f6, #60a5fa, #3b82f6);
    background-size: 200% 100%;
    animation: loading-shimmer 1.5s infinite;
    box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);
    z-index: 99999;
    transition: width 0.3s ease;
}

@keyframes loading-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

/* ============================================
   SKELETON LOADERS
   ============================================ */
.skeleton {
    background: #e5e7eb;
    border-radius: var(--radius-sm);
    animation: skeleton-pulse 1.5s ease-in-out infinite;
}

.skeleton-card {
    border-radius: var(--radius-lg);
    background: var(--border-light);
    height: 120px;
}

.skeleton-line {
    height: 12px;
    border-radius: var(--radius-sm);
    background: var(--border);
    margin-bottom: var(--space-sm);
}

.skeleton-line.w-75 { width: 75%; }
.skeleton-line.w-50 { width: 50%; }
.skeleton-line.w-25 { width: 25%; }

.skeleton-avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--border);
}

@keyframes skeleton-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

/* ============================================
   TRANSITIONS
   ============================================ */
.fade-enter-active,
.fade-leave-active {
    transition: opacity var(--transition-slow);
}

.fade-enter-from,
.fade-leave-to {
    opacity: 0;
}

.slide-enter-active,
.slide-leave-active {
    transition: transform var(--transition-slow), opacity var(--transition-slow);
}

.slide-enter-from {
    transform: translateY(10px);
    opacity: 0;
}

.slide-leave-to {
    transform: translateY(-10px);
    opacity: 0;
}
