/* Short, composited motion for touch interactions. Large lists stay still
   during rerenders so scrolling remains responsive on older Android devices. */
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(20px);
            }

            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        @keyframes scaleIn {
            from {
                opacity: 0;
                transform: scale(0.9);
            }

            to {
                opacity: 1;
                transform: scale(1);
            }
        }

        .quick-item {
            transition: transform 180ms ease, background-color 180ms ease, box-shadow 180ms ease;
        }

        .quick-item:active {
            transform: scale(.96);
        }

        .btn-primary,
        .glass-btn {
            transition: transform 180ms ease, background-color 180ms ease, box-shadow 180ms ease;
        }

        @media (hover: hover) {
            .btn-primary:hover {
                transform: translateY(-2px);
                box-shadow: 0 8px 20px rgba(59, 130, 246, .2);
            }
        }

        .btn-primary:active,
        .glass-btn:active {
            transform: scale(.98);
        }

        button,
        a {
            touch-action: manipulation;
        }

        @media (prefers-reduced-motion: reduce) {
            .nav-btn,
            .q-item,
            .quick-item,
            .btn-primary,
            .glass-btn {
                animation: none !important;
                transition-duration: 0.01ms !important;
            }
        }
