/* ============================================================
   accessibility.css
   Place at: public/assets_accessibility/css/accessibility.css
   CSP-compliant: no inline styles used anywhere
   All features are driven by toggling classes on <body>
   ============================================================ */

/* ----------------------------------------------------------
   CSS Custom Properties (Design Tokens)
   ---------------------------------------------------------- */
:root {
    --a11y-primary:        #1a5fb4;
    --a11y-primary-hover:  #1248a0;
    --a11y-active:         #2ec27e;
    --a11y-active-hover:   #26a86a;
    --a11y-panel-bg:       #ffffff;
    --a11y-panel-shadow:   0 8px 32px rgba(0, 0, 0, 0.18);
    --a11y-border:         #dde3ea;
    --a11y-text:           #222831;
    --a11y-text-muted:     #6b7280;
    --a11y-btn-bg:         #f4f6fb;
    --a11y-btn-hover:      #e8edf7;
    --a11y-toggle-size:    56px;
    --a11y-panel-width:    320px;
    --a11y-radius:         12px;
    --a11y-z:              99999;
    --a11y-transition:     0.22s ease;
}

/* ----------------------------------------------------------
   Widget Wrapper
   ---------------------------------------------------------- */
#accessibility-widget {
    position: fixed;
    bottom: 28px;
    right: 24px;
    z-index: var(--a11y-z);
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.4;
    color: var(--a11y-text);
}

/* ----------------------------------------------------------
   Toggle Button
   ---------------------------------------------------------- */
.accessibility-toggle-btn {
    display: flex;
    align-items: center;
    gap: 8px;
    background: var(--a11y-primary);
    color: #ffffff;
    border: none;
    border-radius: 50px;
    padding: 0 18px 0 12px;
    height: var(--a11y-toggle-size);
    cursor: pointer;
    box-shadow: 0 4px 16px rgba(26, 95, 180, 0.38);
    transition: background var(--a11y-transition), box-shadow var(--a11y-transition), transform var(--a11y-transition);
    white-space: nowrap;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.01em;
    outline: none;
}

.accessibility-toggle-btn:hover {
    background: var(--a11y-primary-hover);
    transform: translateY(-2px);
    box-shadow: 0 6px 20px rgba(26, 95, 180, 0.45);
}

.accessibility-toggle-btn:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 3px;
}

.accessibility-icon-img {
    display: block;
    filter: brightness(0) invert(1);
    flex-shrink: 0;
}

.accessibility-toggle-label {
    display: inline-block;
}

/* ----------------------------------------------------------
   Panel
   ---------------------------------------------------------- */
.accessibility-panel {
    position: absolute;
    bottom: calc(var(--a11y-toggle-size) + 12px);
    right: 0;
    width: var(--a11y-panel-width);
    background: var(--a11y-panel-bg);
    border-radius: var(--a11y-radius);
    box-shadow: var(--a11y-panel-shadow);
    border: 1px solid var(--a11y-border);
    overflow: hidden;

    /* Hidden state */
    opacity: 0;
    pointer-events: none;
    transform: translateY(12px) scale(0.97);
    transform-origin: bottom right;
    transition:
        opacity var(--a11y-transition),
        transform var(--a11y-transition);
}

.accessibility-panel.is-open {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0) scale(1);
}

/* ----------------------------------------------------------
   Panel Header
   ---------------------------------------------------------- */
.accessibility-panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 16px;
    background: var(--a11y-primary);
    color: #ffffff;
}

.accessibility-panel-title {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: 0.02em;
    color: #ffffff;
}

.accessibility-close-btn {
    background: rgba(255, 255, 255, 0.18);
    border: none;
    color: #ffffff;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 20px;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background var(--a11y-transition);
    flex-shrink: 0;
    outline: none;
}

.accessibility-close-btn:hover {
    background: rgba(255, 255, 255, 0.32);
}

.accessibility-close-btn:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 2px;
}

/* ----------------------------------------------------------
   Panel Body — Feature Grid
   ---------------------------------------------------------- */
.accessibility-panel-body {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    padding: 14px 12px;
}

.accessibility-option-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    gap: 6px;
    background: var(--a11y-btn-bg);
    border: 2px solid transparent;
    border-radius: 10px;
    padding: 10px 4px 8px;
    cursor: pointer;
    font-size: 11px;
    font-weight: 500;
    color: var(--a11y-text);
    text-align: center;
    line-height: 1.25;
    transition:
        background var(--a11y-transition),
        border-color var(--a11y-transition),
        color var(--a11y-transition),
        box-shadow var(--a11y-transition);
    outline: none;
    min-height: 78px;
}

.accessibility-option-btn:hover {
    background: var(--a11y-btn-hover);
    border-color: var(--a11y-primary);
}

.accessibility-option-btn:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 2px;
}

.accessibility-option-btn.is-active {
    background: #e6f9f0;
    border-color: var(--a11y-active);
    color: #1a7a50;
}

.accessibility-option-btn.is-active .accessibility-option-icon img {
    filter: none;
}

.accessibility-option-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
}

.accessibility-option-icon img {
    display: block;
    width: 28px;
    height: 28px;
    object-fit: contain;
    /* Default: make icons match primary colour */
    filter: invert(27%) sepia(60%) saturate(700%) hue-rotate(195deg) brightness(90%);
}

.accessibility-option-label {
    display: block;
    pointer-events: none;
}

/* ----------------------------------------------------------
   Panel Footer
   ---------------------------------------------------------- */
.accessibility-panel-footer {
    padding: 0 12px 14px;
    display: flex;
    justify-content: center;
}

.accessibility-reset-btn {
    background: none;
    border: 1px solid var(--a11y-border);
    color: var(--a11y-text-muted);
    border-radius: 6px;
    padding: 6px 18px;
    font-size: 12px;
    cursor: pointer;
    transition: background var(--a11y-transition), color var(--a11y-transition), border-color var(--a11y-transition);
    outline: none;
    width: 100%;
    font-weight: 500;
}

.accessibility-reset-btn:hover {
    background: #fee2e2;
    border-color: #f87171;
    color: #b91c1c;
}

.accessibility-reset-btn:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 2px;
}

/* ----------------------------------------------------------
   TTS Status Bar
   ---------------------------------------------------------- */
.accessibility-tts-bar {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: var(--a11y-primary);
    color: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
    padding: 10px 20px;
    z-index: calc(var(--a11y-z) - 1);
    font-size: 13px;
    font-weight: 500;

    /* hidden by default */
    transform: translateY(100%);
    transition: transform var(--a11y-transition);
    pointer-events: none;
}

.accessibility-tts-bar.is-visible {
    transform: translateY(0);
    pointer-events: auto;
}

.accessibility-tts-status-text {
    flex: 1;
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.accessibility-tts-stop-btn {
    background: rgba(255, 255, 255, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.5);
    color: #ffffff;
    border-radius: 5px;
    padding: 4px 14px;
    cursor: pointer;
    font-size: 12px;
    font-weight: 600;
    flex-shrink: 0;
    transition: background var(--a11y-transition);
    outline: none;
}

.accessibility-tts-stop-btn:hover {
    background: rgba(255, 255, 255, 0.35);
}

.accessibility-tts-stop-btn:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 2px;
}

/* ==============================================================
   FEATURE CLASSES — toggled on <body> by JS
   ============================================================== */

/* ----------------------------------------------------------
   1. Smart Contrast
   ---------------------------------------------------------- */
body.a11y-smart-contrast {
    background-color: #000000 !important;
    color: #ffffff !important;
}

body.a11y-smart-contrast *:not(script):not(style):not([aria-hidden]) {
    background-color: #000000 !important;
    color: #ffffff !important;
    border-color: #ffffff !important;
}

body.a11y-smart-contrast a,
body.a11y-smart-contrast a * {
    color: #ffdd57 !important;
}

body.a11y-smart-contrast button:not(.accessibility-option-btn):not(.accessibility-toggle-btn):not(.accessibility-close-btn):not(.accessibility-reset-btn):not(.accessibility-tts-stop-btn),
body.a11y-smart-contrast input,
body.a11y-smart-contrast select,
body.a11y-smart-contrast textarea {
    background-color: #1a1a1a !important;
    color: #ffffff !important;
    border: 1px solid #aaaaaa !important;
}

body.a11y-smart-contrast img {
    filter: brightness(0.85) contrast(1.2);
}

/* Preserve widget panel colours under contrast mode */
body.a11y-smart-contrast #accessibility-widget,
body.a11y-smart-contrast #accessibility-widget * {
    background-color: revert !important;
    color: revert !important;
    border-color: revert !important;
}

/* ----------------------------------------------------------
   2. Big Cursor
   ---------------------------------------------------------- */
body.a11y-big-cursor,
body.a11y-big-cursor * {
    cursor: url("../images/cursor-large.svg") 8 8, auto !important;
}

body.a11y-big-cursor a,
body.a11y-big-cursor button,
body.a11y-big-cursor [role="button"],
body.a11y-big-cursor label,
body.a11y-big-cursor select {
    cursor: url("../images/cursor-large-pointer.svg") 8 8, pointer !important;
}

/* ----------------------------------------------------------
   3. Keyboard Navigation
   ---------------------------------------------------------- */
body.a11y-keyboard-nav *:focus {
    outline: 3px solid #f9c846 !important;
    outline-offset: 4px !important;
    box-shadow: 0 0 0 6px rgba(249, 200, 70, 0.3) !important;
    border-radius: 3px !important;
}

body.a11y-keyboard-nav a:focus,
body.a11y-keyboard-nav button:focus,
body.a11y-keyboard-nav input:focus,
body.a11y-keyboard-nav select:focus,
body.a11y-keyboard-nav textarea:focus,
body.a11y-keyboard-nav [tabindex]:focus {
    outline: 3px solid #1a5fb4 !important;
    outline-offset: 4px !important;
    box-shadow: 0 0 0 6px rgba(26, 95, 180, 0.25) !important;
}

/* Skip-link helper that appears on keyboard focus */
body.a11y-keyboard-nav .skip-to-content:focus,
body.a11y-keyboard-nav #skip-to-main:focus {
    position: fixed !important;
    top: 8px !important;
    left: 8px !important;
    z-index: 999999 !important;
    background: #1a5fb4 !important;
    color: #ffffff !important;
    padding: 10px 20px !important;
    border-radius: 6px !important;
    font-weight: 700 !important;
    text-decoration: none !important;
}

/* ----------------------------------------------------------
   4. Bigger Text  — driven by --a11y-font-scale on <html>
      JS sets:  document.documentElement.style.setProperty(
                  '--a11y-font-scale', value + '%')
      100% = default (no change). Range 100–200.
   ---------------------------------------------------------- */
:root {
    --a11y-font-scale: 100%;
}

/* Only applies when the user has moved the slider above 100 */
html.a11y-font-scaling body,
html.a11y-font-scaling body p,
html.a11y-font-scaling body span,
html.a11y-font-scaling body li,
html.a11y-font-scaling body td,
html.a11y-font-scaling body th,
html.a11y-font-scaling body label,
html.a11y-font-scaling body a,
html.a11y-font-scaling body div,
html.a11y-font-scaling body input,
html.a11y-font-scaling body select,
html.a11y-font-scaling body textarea {
    font-size: var(--a11y-font-scale) !important;
    line-height: 1.6 !important;
}

html.a11y-font-scaling body h1 { font-size: calc(var(--a11y-font-scale) * 1.8) !important; }
html.a11y-font-scaling body h2 { font-size: calc(var(--a11y-font-scale) * 1.55) !important; }
html.a11y-font-scaling body h3 { font-size: calc(var(--a11y-font-scale) * 1.35) !important; }
html.a11y-font-scaling body h4 { font-size: calc(var(--a11y-font-scale) * 1.15) !important; }
html.a11y-font-scaling body h5,
html.a11y-font-scaling body h6 { font-size: var(--a11y-font-scale) !important; }

/* Keep the widget itself from blowing up */
html.a11y-font-scaling #accessibility-widget,
html.a11y-font-scaling #accessibility-widget * {
    font-size: revert !important;
    line-height: revert !important;
}

/* ----------------------------------------------------------
   Font Size Slider — widget UI
   ---------------------------------------------------------- */
.accessibility-font-slider-section {
    border-top: 1px solid var(--a11y-border);
    padding: 12px 16px 14px;
    background: var(--a11y-btn-bg);
}

.accessibility-font-slider-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}

.accessibility-font-slider-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    color: var(--a11y-text);
}

.accessibility-font-slider-label img {
    filter: invert(27%) sepia(60%) saturate(700%) hue-rotate(195deg) brightness(90%);
    flex-shrink: 0;
}

.accessibility-font-slider-value {
    font-size: 12px;
    font-weight: 700;
    color: var(--a11y-primary);
    min-width: 38px;
    text-align: right;
}

.accessibility-font-slider-track {
    display: flex;
    align-items: center;
    gap: 10px;
}

.accessibility-font-slider-cap {
    font-size: 12px;
    font-weight: 700;
    color: var(--a11y-text-muted);
    flex-shrink: 0;
    line-height: 1;
    user-select: none;
}

.accessibility-font-slider-cap-lg {
    font-size: 20px;
}

/* The <input type="range"> itself */
.accessibility-font-slider {
    flex: 1;
    -webkit-appearance: none;
    appearance: none;
    height: 5px;
    border-radius: 99px;
    background: linear-gradient(
        to right,
        var(--a11y-primary) 0%,
        var(--a11y-primary) var(--a11y-slider-pct, 0%),
        var(--a11y-border)  var(--a11y-slider-pct, 0%),
        var(--a11y-border)  100%
    );
    outline: none;
    cursor: pointer;
    border: none;
    padding: 0;
    margin: 0;
    transition: background var(--a11y-transition);
}

/* Thumb — Chrome / Safari */
.accessibility-font-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--a11y-primary);
    border: 3px solid #ffffff;
    box-shadow: 0 1px 6px rgba(26, 95, 180, 0.45);
    cursor: pointer;
    transition: transform var(--a11y-transition), background var(--a11y-transition);
}

.accessibility-font-slider::-webkit-slider-thumb:hover {
    transform: scale(1.18);
    background: var(--a11y-primary-hover);
}

/* Thumb — Firefox */
.accessibility-font-slider::-moz-range-thumb {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--a11y-primary);
    border: 3px solid #ffffff;
    box-shadow: 0 1px 6px rgba(26, 95, 180, 0.45);
    cursor: pointer;
    transition: transform var(--a11y-transition), background var(--a11y-transition);
}

.accessibility-font-slider::-moz-range-thumb:hover {
    transform: scale(1.18);
    background: var(--a11y-primary-hover);
}

/* Track fill — Firefox */
.accessibility-font-slider::-moz-range-progress {
    background: var(--a11y-primary);
    border-radius: 99px;
    height: 5px;
}

.accessibility-font-slider:focus-visible {
    outline: 3px solid #f9c846;
    outline-offset: 3px;
}

/* Static info tile (for Bigger Text icon in grid — no toggle behaviour) */
.accessibility-option-static {
    cursor: default;
    opacity: 0.65;
    pointer-events: none;
}

.accessibility-option-static:hover {
    background: var(--a11y-btn-bg);
    border-color: transparent;
}

/* ----------------------------------------------------------
   5. Legible Fonts
   ---------------------------------------------------------- */
body.a11y-legible-fonts,
body.a11y-legible-fonts p,
body.a11y-legible-fonts span,
body.a11y-legible-fonts li,
body.a11y-legible-fonts td,
body.a11y-legible-fonts th,
body.a11y-legible-fonts label,
body.a11y-legible-fonts a,
body.a11y-legible-fonts div,
body.a11y-legible-fonts h1,
body.a11y-legible-fonts h2,
body.a11y-legible-fonts h3,
body.a11y-legible-fonts h4,
body.a11y-legible-fonts h5,
body.a11y-legible-fonts h6,
body.a11y-legible-fonts input,
body.a11y-legible-fonts button,
body.a11y-legible-fonts select,
body.a11y-legible-fonts textarea {
    font-family: "Arial", "Helvetica Neue", Helvetica, sans-serif !important;
    letter-spacing: 0.04em !important;
    word-spacing: 0.1em !important;
}

/* ----------------------------------------------------------
   6. Grayscale
   ---------------------------------------------------------- */
body.a11y-grayscale {
    filter: grayscale(100%);
}

/* ----------------------------------------------------------
   7. Highlight Links
   ---------------------------------------------------------- */
body.a11y-highlight-links a {
    background-color: #fff9c4 !important;
    color: #1a1a1a !important;
    text-decoration: underline !important;
    text-decoration-color: #e67e22 !important;
    text-decoration-thickness: 2px !important;
    outline: 1px solid #e67e22 !important;
    border-radius: 3px !important;
    padding: 0 2px !important;
}

body.a11y-highlight-links a:hover {
    background-color: #ffe082 !important;
    text-decoration-thickness: 3px !important;
}

body.a11y-highlight-links a:visited {
    background-color: #e8d5f5 !important;
    text-decoration-color: #8e44ad !important;
    outline-color: #8e44ad !important;
}

/* ----------------------------------------------------------
   8. Read Page (TTS)
      The JS highlights the currently-spoken word/sentence;
      this class drives the visual highlight.
   ---------------------------------------------------------- */
.a11y-tts-highlight {
    background-color: #fffde7 !important;
    outline: 2px solid #f9c846 !important;
    border-radius: 3px !important;
}

/* ==============================================================
   Responsive
   ============================================================== */
@media (max-width: 400px) {
    :root {
        --a11y-panel-width: calc(100vw - 24px);
    }

    #accessibility-widget {
        right: 12px;
        bottom: 16px;
    }

    .accessibility-panel {
        right: 0;
    }

    .accessibility-panel-body {
        grid-template-columns: repeat(4, 1fr);
        gap: 6px;
        padding: 10px 8px;
    }

    .accessibility-option-btn {
        font-size: 10px;
        padding: 8px 2px 6px;
        min-height: 70px;
    }
}

/* ==============================================================
   Print — hide widget entirely
   ============================================================== */
@media print {
    #accessibility-widget,
    .accessibility-tts-bar {
        display: none !important;
    }
}