/* ==========================================
   AzriaSolutions Animation System
   Professional, consistent, accessible
   ========================================== */

/* ===== Animation Timing System ===== */
:root {
    /* Durations */
    --anim-duration-fast: 150ms;
    --anim-duration-base: 300ms;
    --anim-duration-slow: 500ms;
    --anim-duration-slower: 800ms;

    /* Easing Functions - Consistent across all animations */
    --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
    --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
    --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
    --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);

    /* Delays for stagger effects */
    --stagger-delay: 100ms;
}

/* ===== Accessibility: Reduced Motion ===== */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }

    /* Disable specific animations */
    .animate-on-scroll,
    [data-animate] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}

/* ===== Scroll Animation Base States ===== */
/* Elements start hidden, animate in when visible */
[data-animate] {
    opacity: 0;
    transition:
        opacity var(--anim-duration-slow) var(--ease-out),
        transform var(--anim-duration-slow) var(--ease-out);
}

[data-animate].is-visible {
    opacity: 1;
}

/* ===== Animation Types ===== */

/* Fade Up */
[data-animate="fade-up"] {
    transform: translateY(30px);
}

[data-animate="fade-up"].is-visible {
    transform: translateY(0);
}

/* Fade Down */
[data-animate="fade-down"] {
    transform: translateY(-30px);
}

[data-animate="fade-down"].is-visible {
    transform: translateY(0);
}

/* Fade Left (for RTL) */
[data-animate="fade-left"] {
    transform: translateX(30px);
}

[data-animate="fade-left"].is-visible {
    transform: translateX(0);
}

/* Fade Right (for RTL) */
[data-animate="fade-right"] {
    transform: translateX(-30px);
}

[data-animate="fade-right"].is-visible {
    transform: translateX(0);
}

/* Scale Up */
[data-animate="scale-up"] {
    transform: scale(0.9);
}

[data-animate="scale-up"].is-visible {
    transform: scale(1);
}

/* Fade Only */
[data-animate="fade"] {
    /* Just opacity, no transform */
}

/* ===== Stagger Delays ===== */
[data-animate-delay="1"] { transition-delay: calc(var(--stagger-delay) * 1); }
[data-animate-delay="2"] { transition-delay: calc(var(--stagger-delay) * 2); }
[data-animate-delay="3"] { transition-delay: calc(var(--stagger-delay) * 3); }
[data-animate-delay="4"] { transition-delay: calc(var(--stagger-delay) * 4); }
[data-animate-delay="5"] { transition-delay: calc(var(--stagger-delay) * 5); }
[data-animate-delay="6"] { transition-delay: calc(var(--stagger-delay) * 6); }

/* ===== Utility Classes for Immediate Use ===== */

/* Hover lift effect for cards */
.hover-lift {
    transition:
        transform var(--anim-duration-base) var(--ease-out),
        box-shadow var(--anim-duration-base) var(--ease-out);
}

.hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 40px rgba(43, 155, 138, 0.15);
}

/* Button scale effect */
.hover-scale {
    transition: transform var(--anim-duration-fast) var(--ease-spring);
}

.hover-scale:hover {
    transform: scale(1.02);
}

.hover-scale:active {
    transform: scale(0.98);
}

/* Glow effect for buttons */
.hover-glow {
    transition: box-shadow var(--anim-duration-base) var(--ease-out);
}

.hover-glow:hover {
    box-shadow: 0 0 20px rgba(43, 155, 138, 0.4);
}

/* Link underline animation */
.link-animate {
    position: relative;
    text-decoration: none;
}

.link-animate::after {
    content: '';
    position: absolute;
    bottom: -2px;
    right: 0;
    width: 0;
    height: 2px;
    background: currentColor;
    transition: width var(--anim-duration-base) var(--ease-out);
}

.link-animate:hover::after {
    width: 100%;
}

/* Focus ring animation */
.focus-ring {
    transition:
        box-shadow var(--anim-duration-fast) var(--ease-out),
        border-color var(--anim-duration-fast) var(--ease-out);
}

.focus-ring:focus {
    outline: none;
    box-shadow: 0 0 0 3px rgba(43, 155, 138, 0.3);
    border-color: var(--accent, #2b9b8a);
}

/* ===== Counter Animation Placeholder ===== */
[data-counter] {
    /* Will be animated by JS */
    font-variant-numeric: tabular-nums;
}

/* ===== Smooth Transitions for Theme Changes ===== */
.theme-transition,
.theme-transition *,
.theme-transition *::before,
.theme-transition *::after {
    transition:
        background-color var(--anim-duration-slow) var(--ease-smooth),
        border-color var(--anim-duration-slow) var(--ease-smooth),
        color var(--anim-duration-slow) var(--ease-smooth),
        box-shadow var(--anim-duration-slow) var(--ease-smooth) !important;
}

/* ===== Loading States ===== */

/* Skeleton loading shimmer */
.skeleton {
    background: linear-gradient(
        90deg,
        var(--neutral-200, #e5e5e5) 0%,
        var(--neutral-100, #f5f5f5) 50%,
        var(--neutral-200, #e5e5e5) 100%
    );
    background-size: 200% 100%;
    animation: skeleton-shimmer 1.5s ease-in-out infinite;
    border-radius: 4px;
}

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

/* Pulse animation for loading indicators */
@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

.pulse {
    animation: pulse 2s ease-in-out infinite;
}

/* Spinner for loading states */
@keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

.spinner {
    animation: spin 1s linear infinite;
}
