/* ==========================================================================
   Accessibility layer — loaded last on both the public and admin shells so
   the focus styles win the cascade over scattered `outline:none` resets.
   ========================================================================== */

/* Screen-reader-only utility: visually hidden, still announced by AT.
   (Used by e.g. form labels; was referenced in markup but never defined,
   which left those labels visible.) */
.sr-only {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}
/* A visually-hidden element that becomes visible on focus (skip links). */
.sr-only-focusable:focus,
.sr-only-focusable:focus-within {
    position: static !important;
    width: auto !important;
    height: auto !important;
    margin: 0 !important;
    overflow: visible !important;
    clip: auto !important;
    white-space: normal !important;
}

/* Consistent keyboard focus ring for every interactive element. Only fires
   for keyboard / assistive-tech focus (:focus-visible), so mouse users are
   unaffected. !important is intentional: it overrides the various
   `outline:none` rules across the codebase, and a visible focus indicator is
   a WCAG 2.4.7 (AA) requirement that must not be suppressed. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible,
[contenteditable="true"]:focus-visible {
    outline: 2px solid var(--accent, #c8102e) !important;
    outline-offset: 2px !important;
    border-radius: 3px;
}

/* Honour the user's reduced-motion preference across all animation. */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        scroll-behavior: auto !important;
    }
}
