/* ==============================================
   CORE ACCESSIBILITY PRIMITIVES
   Shared focus, motion, and touch target contracts.
   ============================================== */

/* ==============================================
   FOCUS VISIBLE PRIMITIVES
   ============================================== */
a[href]:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[role="button"]:focus-visible,
[tabindex]:not([tabindex="-1"]):focus-visible,
.footer-nav-item:focus-visible,
.spa-topbar-shell button:focus-visible,
.spa-topbar-shell a[href]:focus-visible,
.modal button:focus-visible,
.modal a[href]:focus-visible,
.modal [role="button"]:focus-visible,
.modal [tabindex]:not([tabindex="-1"]):focus-visible {
    outline: var(--focus-ring-width) solid var(--focus-ring-color);
    outline-offset: var(--focus-ring-offset);
    box-shadow: var(--focus-ring-shadow);
}

/* ==============================================
   REDUCED MOTION
   ============================================== */
@media (prefers-reduced-motion: reduce) {
    html:focus-within {
        scroll-behavior: auto;
    }

    *,
    *::before,
    *::after {
        /* Accessibility owner: keep reduced-motion overrides effective across later route CSS. */
        animation-duration: var(--motion-duration-none) !important;
        animation-delay: var(--motion-duration-none) !important;
        animation-iteration-count: 1 !important;
        scroll-behavior: auto !important;
        transition-duration: var(--motion-duration-none) !important;
        transition-delay: var(--motion-duration-none) !important;
    }
}

/* ==============================================
   TOUCH TARGET PRIMITIVES
   ============================================== */
.touch-target,
.footer-nav-item {
    min-width: var(--touch-target-min);
    min-height: var(--touch-target-min);
}

.app-actions,
.modal .modal-actions,
.modal .modal-action-row,
.spa-topbar-shell__root {
    gap: max(var(--touch-target-gap), var(--space-sm));
}
