/* SPDX-License-Identifier: GPL-3.0-or-later */
/* Panel uses its own palette. No wrappers, content filters or DOM reparenting. */
#unaca11y { --up-bg: var(--ua-surface, #fff); --up-header: var(--ua-raised, #edf5fa); --up-fg: var(--ua-fg, #183347); --up-muted: var(--ua-muted, #344f61); --up-border: var(--ua-border, #516a7c); --up-hover: var(--ua-hover, #e9f2f8); --up-focus: var(--ua-focus, #004e79); font: 16px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--up-fg); color-scheme: var(--ua-scheme, light); }
#unaca11y [hidden], #unaca11y[hidden] { display: none !important; }
#unaca11y *, #unaca11y *::before, #unaca11y *::after { box-sizing: border-box; }
#unaca11y button, #unaca11y select { font: inherit; letter-spacing: normal; }
#unaca11y button { min-height: 44px; padding: 8px 12px; border: 1px solid var(--up-border); border-radius: 10px; background: var(--up-bg); color: var(--up-fg); cursor: pointer; white-space: normal; }
#unaca11y button:hover { background: var(--up-hover); }
#unaca11y button:disabled { opacity: .6; cursor: default; }
#unaca11y :is(button, select, input):focus-visible { outline: 3px solid var(--up-focus); outline-offset: 3px; box-shadow: 0 0 0 5px var(--up-bg); }
#unaca11y-launcher { position: fixed; inset-inline-end: max(16px, env(safe-area-inset-right)); top: 45%; z-index: 1040; display: flex; align-items: center; gap: 8px; max-width: calc(100vw - 32px); box-shadow: 0 4px 18px #1234; }
#unaca11y #unaca11y-launcher { background: #064779; color: #fff; border: 2px solid #fff; }
#unaca11y #unaca11y-launcher:hover { background: #00334f; }
#unaca11y-panel { position: fixed; inset: 12px 12px 12px auto; margin: auto 0; width: min(390px, calc(100vw - 24px)); max-width: none; height: fit-content; max-height: calc(100vh - 24px); max-height: calc(100dvh - 24px); padding: 0; overflow: auto; overscroll-behavior: contain; background: var(--up-bg); color: var(--up-fg); border: 1px solid var(--up-border); border-radius: 18px; box-shadow: 0 16px 60px #0005; font: 16px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
#unaca11y-panel::backdrop { background: rgb(12 28 40 / 45%); }
#unaca11y .unaca11y-header { position: sticky; top: 0; z-index: 2; display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; padding: 20px; background: var(--up-header); border-bottom: 1px solid var(--up-border); }
#unaca11y h2 { font: 700 21px/1.3 system-ui, sans-serif; margin: 0 0 6px; color: var(--up-fg); }
#unaca11y p { margin: 0; font-size: 14px; }
#unaca11y .unaca11y-header button { flex-shrink: 0; }
#unaca11y .unaca11y-body { padding: 20px; }
#unaca11y fieldset { border: 0; margin: 0 0 20px; padding: 0; min-width: 0; }
#unaca11y legend, #unaca11y .unaca11y-select { float: none; font: 700 16px/1.5 system-ui, sans-serif; padding: 0; margin: 0 0 8px; width: auto; }
#unaca11y .unaca11y-size { display: flex; align-items: center; gap: 12px; }
#unaca11y .unaca11y-size button { flex: 1; }
#unaca11y output { min-width: 60px; text-align: center; font-weight: 700; }
#unaca11y .unaca11y-select { display: block; }
#unaca11y select { width: 100%; min-height: 44px; padding: 8px; color: var(--up-fg); background: var(--up-bg); border: 1px solid var(--up-border); border-radius: 8px; }
#unaca11y .unaca11y-options { margin: 16px 0; }
#unaca11y .unaca11y-options label { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 8px 0; margin: 0; cursor: pointer; }
#unaca11y input[type="checkbox"] { appearance: auto; position: static; opacity: 1; flex: 0 0 22px; width: 22px; height: 22px; margin: 0 3px; accent-color: var(--ua-link, #064779); }
#unaca11y #unaca11y-guidehint { color: var(--up-muted); margin: 0 0 8px 37px; }
#unaca11y .unaca11y-presets { display: flex; flex-wrap: wrap; gap: 8px; }
#unaca11y #unaca11y-reset { width: 100%; }
#unaca11y .unaca11y-notice { color: var(--up-muted); margin-top: 16px; }
#unaca11y-guide { position: fixed; inset-inline: 0; top: 50%; height: 4px; background: #fff; border-top: 2px solid #004e79; border-bottom: 2px solid #000; pointer-events: none; z-index: 1035; }
@media (max-width: 600px) {
    #unaca11y-launcher { top: auto; bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
    #unaca11y-panel { inset: auto 8px calc(8px + env(safe-area-inset-bottom, 0px)); width: calc(100vw - 16px); margin: 0; max-height: calc(100dvh - 24px - env(safe-area-inset-bottom, 0px)); border-radius: 18px 18px 8px 8px; }
    #unaca11y .unaca11y-header, #unaca11y .unaca11y-body { padding: 16px; }
}
@media (max-width: 350px) {
    #unaca11y .unaca11y-header { flex-wrap: wrap; }
}
/* Adjust content; keep the panel independent and Moodle's dialogs in their original DOM. */
html.unaca11y-font body :where(p, li, td, th, label, input, textarea, select, h1, h2, h3, h4, h5, h6) { font-family: Arial, Verdana, sans-serif !important; }
html.unaca11y-spacing body :where(p, li, td, th, label, h1, h2, h3, h4, h5, h6) { line-height: 1.5 !important; letter-spacing: .12em !important; word-spacing: .16em !important; }
html.unaca11y-spacing body p { margin-bottom: 2em !important; }
html.unaca11y-links body a[href] { text-decoration: underline !important; text-decoration-thickness: 2px !important; text-underline-offset: 3px; }
html.unaca11y-headings body :where(h1, h2, h3, h4, h5, h6):not(#unaca11y-title) { border-inline-start: 4px solid currentColor; padding-inline-start: .5em; }
html.unaca11y-motion *, html.unaca11y-motion *::before, html.unaca11y-motion *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
/* Appearance rules are component based: pair foreground/background, including states.
   :is(body, #page) deliberately matches both page content and body-level Moodle
   drawers/modals with enough specificity to override the custom Boost Union SCSS.
   No image inversion, wildcard background reset or mutation of inline styles. */
html[data-unaca11y-appearance="dark"] {
    --ua-bg: #101820; --ua-surface: #192733; --ua-raised: #243746;
    --ua-fg: #f4f7fa; --ua-muted: #cad6df; --ua-link: #9de4ff;
    --ua-border: #91a9bb; --ua-hover: #304c60; --ua-selected: #365c74;
    --ua-focus: #ffdf70; --ua-scheme: dark;
    --ua-success: #b8f5c9; --ua-warning: #ffe1a1; --ua-danger: #ffc4c4;
}
html[data-unaca11y-appearance="contrast"] {
    --ua-bg: #000; --ua-surface: #000; --ua-raised: #000;
    --ua-fg: #fff; --ua-muted: #fff; --ua-link: #ffeb66;
    --ua-border: #fff; --ua-hover: #242424; --ua-selected: #343434;
    --ua-focus: #ffeb66; --ua-scheme: dark;
    --ua-success: #b8f5c9; --ua-warning: #ffe1a1; --ua-danger: #ffc4c4;
}
/* Bootstrap 5.3 tokens also cover newly rendered native components. */
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) {
    color-scheme: dark;
    --bs-body-bg: var(--ua-bg); --bs-body-color: var(--ua-fg);
    --bs-emphasis-color: var(--ua-fg); --bs-secondary-color: var(--ua-muted);
    --bs-secondary-bg: var(--ua-surface); --bs-tertiary-bg: var(--ua-raised);
    --bs-heading-color: var(--ua-fg); --bs-link-color: var(--ua-link);
    --bs-link-hover-color: var(--ua-link); --bs-border-color: var(--ua-border);
}
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) body {
    background-color: var(--ua-bg) !important; color: var(--ua-fg) !important;
}
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    #page, #page-wrapper, #page-content, #region-main, #region-main-box, #page-header, #page-footer,
    #nav-drawer, .main-inner, .region-main-content, .secondary-navigation, .moremenu, .navigation,
    .navbar, .navbar.fixed-top, .drawer, .drawerheader, .drawercontent, .courseindex,
    .login-wrapper, .login-container, .loginform, .login-identityproviders, .login-divider,
    .card, .card-header, .card-body, .card-footer, .block, .dashboard-card, .course-card,
    .course-info-container, .course-content, .course-section, .section-item, .activity-item,
    .activity-header, .activity-description, .activityiconcontainer, .activity-information,
    .submissionstatustable, .generalbox, .box, .well, .list-group-item,
    .dropdown-menu, .dropdown-header, .modal-content, .modal-header, .modal-body, .modal-footer,
    .popover, .popover-header, .popover-body, .message-app, .message-app .footer-container,
    .bg-white, .bg-light, .bg-primary, .bg-secondary, .bg-info, .bg-success, .bg-warning, .bg-danger,
    .badge, .badge-pill, .alert, .notification, .que, .que .info, .que .content, .que .formulation,
    .fdescription, .filemanager, .filepicker-filelist, .fp-content, .editor_atto_content,
    .tox .tox-edit-area, .tox .tox-toolbar, .tox .tox-menubar, .tox .tox-statusbar
) { background-color: var(--ua-surface) !important; color: var(--ua-fg) !important; border-color: var(--ua-border) !important; }
/* Explicit text utilities can otherwise survive their parent's new palette. */
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, p, li, label, legend, small,
    .text-dark, .text-body, .text-primary, .text-secondary, .text-white, .text-black,
    .text-muted, .dimmed_text, .activityname, .breadcrumb-item, .card-title, .page-context-header,
    .activity-dates, .activity-dates *, .activity-information *, .login-heading
) { color: var(--ua-fg) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) a[href] {
    color: var(--ua-link) !important; text-decoration: underline;
}
/* Retain the original button border widths and geometry; replace its palette. */
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    button, .btn, input[type="submit"], input[type="button"], input[type="reset"],
    .nav-link, .dropdown-item, .page-link, .custom-file-label, .input-group-text
) { background-color: var(--ua-raised) !important; background-image: none !important; color: var(--ua-fg) !important; border-color: var(--ua-border) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    button, .btn, .nav-link, .dropdown-item, .page-link
):is(:hover, :focus-visible) { background-color: var(--ua-hover) !important; color: var(--ua-fg) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    .btn.active, .nav-link.active, .list-group-item.active, .dropdown-item.active,
    .page-item.active .page-link, [aria-current="page"], .courseindex-item.pageitem
) { background-color: var(--ua-selected) !important; color: var(--ua-fg) !important; border-color: var(--ua-focus) !important; box-shadow: inset 4px 0 0 var(--ua-focus); font-weight: 700; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    a.btn, a.nav-link, a.dropdown-item, a.page-link, a.list-group-item
) :is(span, small, .icon) { color: inherit !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(
    input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]),
    textarea, select, option, .form-control, .custom-select, .form-select
) { background-color: var(--ua-bg) !important; color: var(--ua-fg) !important; border-color: var(--ua-border) !important; caret-color: var(--ua-fg); }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(input, textarea)::placeholder {
    color: var(--ua-muted) !important; opacity: 1;
}
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(input[type="checkbox"], input[type="radio"]) { accent-color: var(--ua-link); }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(table, .table, .generaltable, th, td) {
    --bs-table-color: var(--ua-fg); --bs-table-bg: var(--ua-surface);
    --bs-table-striped-color: var(--ua-fg); --bs-table-striped-bg: var(--ua-raised);
    --bs-table-hover-color: var(--ua-fg); --bs-table-hover-bg: var(--ua-hover);
    background-color: var(--ua-surface) !important; color: var(--ua-fg) !important; border-color: var(--ua-border) !important;
}
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) .table-striped tbody tr:nth-of-type(odd) > * { background-color: var(--ua-raised) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(.alert-success, .text-success) { color: var(--ua-success) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(.alert-warning, .text-warning) { color: var(--ua-warning) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(.alert-danger, .text-danger, .invalid-feedback, .error) { color: var(--ua-danger) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :is(.alert-success, .alert-warning, .alert-danger) :is(p, span, strong, li) { color: inherit !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) .progress { background-color: var(--ua-bg) !important; border: 1px solid var(--ua-border); }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) .progress-bar { background-color: var(--ua-link) !important; color: #000 !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) :is(body, #page) :focus-visible { outline: 3px solid var(--ua-focus) !important; outline-offset: 3px; box-shadow: 0 0 0 2px var(--ua-bg) !important; }
html[data-unaca11y-appearance]:not([data-unaca11y-appearance="original"]) ::selection { background: var(--ua-link); color: #000; }
html[data-unaca11y-appearance="contrast"] :is(body, #page) :is(.card, .block, .course-section, .alert, .badge, button, .btn, .nav-link, input:not([type="hidden"]), textarea, select) { border: 1px solid var(--ua-border) !important; }
/* Preserve a readable, stable panel even when content appearance is changed. */
html body #unaca11y :where(p, h2, legend, label, span) { color: inherit !important; }
html body #unaca11y p { margin-bottom: 0 !important; letter-spacing: normal !important; word-spacing: normal !important; }
html body #unaca11y .unaca11y-notice { margin-top: 16px; }
html.unaca11y-cursor body, html.unaca11y-cursor body * { cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'%3E%3Cpath d='M3 2L3 37L12 28L20 44L27 40L19 25L33 25Z' fill='%23064779' stroke='white' stroke-width='3'/%3E%3C/svg%3E") 3 2, auto !important; }
@media (prefers-reduced-motion: reduce) {
    #unaca11y *, #unaca11y *::before, #unaca11y *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
@media (forced-colors: active) {
    #unaca11y button, #unaca11y-panel { border: 2px solid ButtonText; }
    #unaca11y :focus-visible { outline: 3px solid Highlight; }
    #unaca11y-guide { background: Highlight; }
}
@media print { #unaca11y { display: none !important; } }
