/**
 * Accessibility Enhancements
 * WCAG 2.1 AA Compliant | Apple HIG | RTL Support
 */

/* ─── Screen Reader Only Class ─── */
.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;
}

/* ─── Skip Links ─── */
.gov-skip-link {
    position: fixed;
    top: -100%;
    left: 16px;
    z-index: var(--gov-z-tooltip);
    padding: 12px 24px;
    background: var(--gov-navy);
    color: var(--gov-text-inverse);
    font-size: var(--gov-text-sm);
    font-weight: var(--gov-font-semibold);
    text-decoration: none;
    border-radius: 0 0 var(--gov-radius-lg) var(--gov-radius-lg);
    transition: top 0.2s;
}

.gov-skip-link:focus {
    top: 0;
}

/* ─── Focus Traps for Modals ─── */
class FocusTrap {
    constructor(element) {
        this.element = element;
        this.focusableElements = null;
        this.firstElement = null;
        this.lastElement = null;
        this.previousActiveElement = null;
        this.handleKeyDown = this.handleKeyDown.bind(this);
    }

    activate() {
        this.previousActiveElement = document.activeElement;
        this.focusableElements = this.element.querySelectorAll(
            'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
        );
        this.firstElement = this.focusableElements[0];
        this.lastElement = this.focusableElements[this.focusableElements.length - 1];

        this.element.addEventListener('keydown', this.handleKeyDown);
        this.firstElement?.focus();
    }

    deactivate() {
        this.element.removeEventListener('keydown', this.handleKeyDown);
        this.previousActiveElement?.focus();
    }

    handleKeyDown(e) {
        if (e.key === 'Tab') {
            if (e.shiftKey && document.activeElement === this.firstElement) {
                e.preventDefault();
                this.lastElement?.focus();
            } else if (!e.shiftKey && document.activeElement === this.lastElement) {
                e.preventDefault();
                this.firstElement?.focus();
            }
        } else if (e.key === 'Escape') {
            this.deactivate();
            this.element.dispatchEvent(new CustomEvent('focustrap-close'));
        }
    }
}

/* ─── Live Regions for Dynamic Content ─── */
.gov-live-region {
    position: absolute;
    left: -10000px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

/* ─── Semantic Landmark Roles ─── */
[role="banner"] {
    /* Header/nav area */
}

[role="navigation"] {
    /* Navigation area */
}

[role="main"] {
    /* Main content area */
}

[role="complementary"] {
    /* Sidebar/aside */
}

[role="contentinfo"] {
    /* Footer */
}

[role="search"] {
    /* Search area */
}

/* ─── Accessible Icon Buttons ─── */
.gov-icon-button {
    position: relative;
}

.gov-icon-button .sr-only-icon-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ─── Accessible Progress Indicators ─── */
.gov-progress {
    display: inline-block;
    width: 100%;
    height: 8px;
    background-color: var(--gov-surface-secondary);
    border-radius: var(--gov-radius-full);
    overflow: hidden;
}

.gov-progress__bar {
    height: 100%;
    background-color: var(--gov-navy);
    border-radius: var(--gov-radius-full);
    transition: width 0.3s var(--gov-ease-out);
}

.gov-progress--indeterminate .gov-progress__bar {
    animation: gov-progress-indeterminate 2s linear infinite;
}

@keyframes gov-progress-indeterminate {
    0% { transform: translateX(-100%); }
    100% { transform: translateX(100%); }
}

/* ─── Accessible Notifications ─── */
.gov-notification {
    position: fixed;
    top: 20px;
    right: 20px;
    z-index: var(--gov-z-modal);
    max-width: 400px;
    padding: 16px;
    background: var(--gov-surface);
    border: 2px solid var(--gov-border);
    border-radius: var(--gov-radius-lg);
    box-shadow: var(--gov-shadow-lg);
    display: flex;
    align-items: flex-start;
    gap: 12px;
    animation: gov-notification-slide-in 0.3s var(--gov-ease-out);
}

[dir="rtl"] .gov-notification {
    right: auto;
    left: 20px;
}

.gov-notification--success {
    border-color: var(--gov-success);
}

.gov-notification--warning {
    border-color: var(--gov-warning);
}

.gov-notification--error {
    border-color: var(--gov-error);
}

.gov-notification--info {
    border-color: var(--gov-info);
}

@keyframes gov-notification-slide-in {
    from {
        opacity: 0;
        transform: translateY(-20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ─── Accessible Tooltips ─── */
.gov-tooltip {
    position: relative;
    display: inline-block;
}

.gov-tooltip__content {
    position: absolute;
    bottom: 100%;
    left: 50%;
    transform: translateX(-50%);
    padding: 8px 12px;
    background: var(--gov-navy);
    color: var(--gov-text-inverse);
    font-size: var(--gov-text-xs);
    font-weight: var(--gov-font-medium);
    white-space: nowrap;
    border-radius: var(--gov-radius-md);
    margin-bottom: 8px;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.2s, visibility 0.2s;
    z-index: var(--gov-z-tooltip);
    pointer-events: none;
}

.gov-tooltip:hover .gov-tooltip__content,
.gov-tooltip:focus .gov-tooltip__content {
    opacity: 1;
    visibility: visible;
}

/* ─── Accessible Modal ─── */
.gov-modal {
    position: fixed;
    inset: 0;
    z-index: var(--gov-z-modal);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: rgba(10, 30, 58, 0.5);
    animation: gov-modal-fade-in 0.2s var(--gov-ease-out);
}

.gov-modal__backdrop {
    position: absolute;
    inset: 0;
    cursor: pointer;
}

.gov-modal__content {
    position: relative;
    width: 100%;
    max-width: 600px;
    max-height: 90vh;
    overflow: auto;
    background: var(--gov-surface);
    border-radius: var(--gov-radius-xl);
    box-shadow: var(--gov-shadow-xl);
    animation: gov-modal-slide-up 0.3s var(--gov-ease-out);
}

@keyframes gov-modal-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes gov-modal-slide-up {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ─── Accessible Drawer/Sidebar ─── */
.gov-drawer {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    z-index: var(--gov-z-modal);
    width: 320px;
    max-width: 90vw;
    background: var(--gov-surface);
    box-shadow: var(--gov-shadow-xl);
    transform: translateX(100%);
    transition: transform 0.3s var(--gov-ease-out);
}

[dir="rtl"] .gov-drawer {
    right: auto;
    left: 0;
    transform: translateX(-100%);
}

.gov-drawer--open {
    transform: translateX(0);
}

.gov-drawer__backdrop {
    position: fixed;
    inset: 0;
    z-index: var(--gov-z-modal-backdrop);
    background: rgba(10, 30, 58, 0.5);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
}

.gov-drawer__backdrop--open {
    opacity: 1;
    visibility: visible;
}

/* ─── Accessible Table ─── */
.gov-table {
    width: 100%;
    border-collapse: collapse;
}

.gov-table th,
.gov-table td {
    padding: 12px 16px;
    text-align: left;
    border-bottom: 1px solid var(--gov-border);
}

[dir="rtl"] .gov-table th,
[dir="rtl"] .gov-table td {
    text-align: right;
}

.gov-table th {
    font-weight: var(--gov-font-semibold);
    color: var(--gov-text-secondary);
    background-color: var(--gov-surface-elevated);
}

.gov-table tr:hover {
    background-color: var(--gov-surface-elevated);
}

/* ─── Accessible Form ─── */
.gov-form-group {
    margin-bottom: 20px;
}

.gov-form-label {
    display: block;
    margin-bottom: 8px;
    font-weight: var(--gov-font-semibold);
    color: var(--gov-text-primary);
}

.gov-form-help {
    display: block;
    margin-top: 4px;
    font-size: var(--gov-text-sm);
    color: var(--gov-text-tertiary);
}

.gov-form-error {
    display: block;
    margin-top: 4px;
    font-size: var(--gov-text-sm);
    color: var(--gov-error);
}

/* ─── Keyboard Navigation Hints ─── */
.gov-kbd {
    display: inline-block;
    padding: 2px 6px;
    font-family: var(--gov-font-mono);
    font-size: var(--gov-text-xs);
    background: var(--gov-surface-elevated);
    border: 1px solid var(--gov-border);
    border-radius: var(--gov-radius-sm);
    box-shadow: var(--gov-shadow-xs);
}

/* ─── High Visibility Mode Support ─── */
@media (prefers-contrast: more) {
    .gov-button {
        border-width: 3px;
    }

    .gov-input {
        border-width: 3px;
    }

    .gov-card {
        border-width: 2px;
    }
}

/* ─── Export for JavaScript ─── */
if (typeof window !== 'undefined') {
    window.FocusTrap = FocusTrap;
}

if (typeof module !== 'undefined' && module.exports) {
    module.exports = { FocusTrap };
}
