/*
 * VA-32 #29 (2026-05-25) — Polished animations.
 *
 * Subtle motion to give the UI a more premium feel without becoming
 * distracting. Honors `prefers-reduced-motion`.
 */

@media (prefers-reduced-motion: no-preference) {

    /* ---- Page entrance ---- */
    body:not(.va-no-anim) > .admin-page-wrap,
    body:not(.va-no-anim) > .mt-wrap,
    body:not(.va-no-anim) > .tv-wrap,
    body:not(.va-no-anim) > .pp-wrap,
    body:not(.va-no-anim) > .cd-wrap,
    body:not(.va-no-anim) > .af-wrap,
    body:not(.va-no-anim) > .mr-wrap {
        animation: va-fade-in 0.28s ease-out;
    }

    @keyframes va-fade-in {
        from { opacity: 0; transform: translateY(8px); }
        to   { opacity: 1; transform: translateY(0); }
    }

    /* ---- Card hover lift ---- */
    .kpi-card, .admin-card, .mt-card, .mr-card, .tv-card, .cd-section, .pp-card, .pp-item, .mt-kpi, .kpi {
        transition: transform 0.18s ease, box-shadow 0.18s ease;
    }
    .kpi-card:hover, .mt-kpi:hover, .kpi:hover, .pp-item:hover {
        transform: translateY(-2px);
        box-shadow: 0 8px 22px rgba(15, 23, 42, 0.10);
    }

    /* ---- Button press feedback ---- */
    .btn, button:not(.bulk-close):not(.va-pd-close):not(.star-btn):not(.del):not(.vkh-close) {
        transition: transform 0.08s ease, filter 0.12s ease, box-shadow 0.15s ease;
    }
    .btn:active,
    button:not(.bulk-close):not(.va-pd-close):not(.star-btn):not(.del):not(.vkh-close):active {
        transform: scale(0.97);
    }
    .btn:hover {
        filter: brightness(1.04);
    }

    /* ---- Table row hover ---- */
    .table tbody tr,
    .admin-table tbody tr,
    .mt-table tbody tr {
        transition: background 0.12s ease;
    }

    /* ---- Form input focus ---- */
    .form-control, .form-select, input, select, textarea {
        transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
    }

    /* ---- Link underline grow ---- */
    a:not(.btn):not(.va-pd-item):not(.va-pd-all-link):not(.va-fab-btn):not(.va-nav-link):not(.admin-menu-item):not(.pp-tag-pill) {
        position: relative;
    }

    /* ---- Modal entrance (existing modals already animate; only add to ones that don't) ---- */
    .modal-content { animation: va-modal-pop 0.22s ease; }
    @keyframes va-modal-pop {
        from { opacity: 0; transform: scale(0.95) translateY(10px); }
        to   { opacity: 1; transform: scale(1) translateY(0); }
    }

    /* ---- Toast slide already exists in saved-filters.js — extend to other floaters ---- */
    .alert {
        animation: va-slide-down 0.25s ease;
    }
    @keyframes va-slide-down {
        from { opacity: 0; transform: translateY(-8px); }
        to   { opacity: 1; transform: translateY(0); }
    }

    /* ---- Status badges pulse if urgent ---- */
    .badge-pill[style*="dc2626"],
    .badge.bg-danger,
    .badge-void {
        animation: va-urgent-pulse 2.4s ease-in-out infinite;
    }
    @keyframes va-urgent-pulse {
        0%, 100% { opacity: 1; }
        50%      { opacity: 0.65; }
    }

    /* ---- Skeleton shimmer for loading bits (.va-loading) ---- */
    .va-loading {
        background: linear-gradient(90deg, #e2eaf1 25%, #f1f5f9 50%, #e2eaf1 75%);
        background-size: 200% 100%;
        animation: va-shimmer 1.4s linear infinite;
        color: transparent;
        border-radius: 4px;
    }
    @keyframes va-shimmer {
        from { background-position: 200% 0; }
        to   { background-position: -200% 0; }
    }

    /* ---- Dark-mode tweaks ---- */
    body.va-dark-mode .va-loading {
        background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%);
        background-size: 200% 100%;
    }
}
