/* Recursos de acessibilidade comuns ao sistema interno e aos portais.
   Carregado depois das folhas do tema: os ajustes de contraste precisam vencer
   os tokens originais. */

/* ---------- Tokens com contraste mínimo de 4,5:1 ---------- */
:root {
    --a11y-foco: #0b57d0;
    --a11y-foco-sombra: rgba(11, 87, 208, 0.35);

    --cor-sobre-fundo: #ffffff;
    --cor-primaria-fundo: #4f46e5;
    --cor-indigo-fundo: #566bd2;
    --cor-roxo-fundo: #764ba2;
    --cor-violeta-fundo: #6d28d9;
    --cor-azul-fundo: #1d4ed8;
    --cor-info-fundo: #0369a1;
    --cor-sucesso-fundo: #047857;
    --cor-aviso-fundo: #b45309;
    --cor-laranja-fundo: #c2410c;
    --cor-perigo-fundo: #b91c1c;
    --cor-rosa-fundo: #be185d;
    --cor-teal-fundo: #0f766e;
    --cor-neutra-fundo: #64748b;

    --cor-sucesso-claro: #dcfce7;
    --cor-aviso-claro: #fef3c7;
    --cor-perigo-claro: #fee2e2;
    --cor-info-claro: #dbeafe;
    --cor-neutra-claro: #f1f5f9;
    --cor-primaria-claro: #e0e7ff;
    --cor-violeta-claro: #ede9fe;

    --cor-primaria-escuro: #4338ca;
    --cor-azul-escuro: #1d4ed8;
    --cor-info-escuro: #0369a1;
    --cor-laranja-escuro: #9a3412;
    --cor-teal-escuro: #0f766e;
    --cor-sucesso-escuro: #166534;
    --cor-aviso-escuro: #92400e;
    --cor-perigo-escuro: #b91c1c;
    --cor-neutra-escuro: #475569;
    --cor-violeta-escuro: #5b21b6;
    --cor-grafite: #111827;
}

:root:not([data-theme-mode="dark"]) {
    --text-muted: #5f6b85;
    --header-prime-color: #56687f;
    --menu-prime-color: #56687f;
}

:root:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]) {
    --cor-primaria-texto: #4338ca;
    --cor-azul-texto: #1d4ed8;
    --cor-info-texto: #0369a1;
    --cor-laranja-texto: #9a3412;
    --cor-sucesso-texto: #166534;
    --cor-aviso-texto: #92400e;
    --cor-perigo-texto: #b91c1c;
    --cor-neutra-texto: #475569;
    --cor-rosa-texto: #be185d;
    --cor-violeta-texto: #6d28d9;
    --bs-code-color: var(--cor-rosa-texto);
}

:root:not([data-bs-theme="dark"]):not([data-theme-mode="dark"]) {
    --bs-secondary-color: #595f66;
}

[data-bs-theme="dark"],
[data-theme-mode="dark"] {
    --bs-secondary-color: #c4c8cc;
    --a11y-foco: #8ab4f8;
    --a11y-foco-sombra: rgba(138, 180, 248, 0.45);
}

/* Texto secundário, texto de erro e botão secundário do tema claro abaixo de
   4,5:1 (#6c757d sobre #f5f6fa, #ff383c e branco sobre #ff5a29). */
html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) .text-muted {
    color: #5c636a !important;
}

html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) .text-danger {
    color: var(--cor-perigo-texto) !important;
}

html:not([data-contraste="alto"]) .btn-secondary,
html:not([data-contraste="alto"]) .btn-secondary:hover,
html:not([data-contraste="alto"]) .btn-secondary:focus {
    background-color: var(--cor-laranja-fundo) !important;
    border-color: var(--cor-laranja-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-bs-theme="dark"] .text-danger {
    color: #f87171 !important;
}

[data-theme-mode="dark"] {
    --text-muted: rgba(255, 255, 255, 0.72);
    --a11y-foco: #8ab4f8;
    --a11y-foco-sombra: rgba(138, 180, 248, 0.45);
}

[data-theme-mode="dark"],
[data-bs-theme="dark"] {
    --cor-primaria-texto: #a5b4fc;
    --cor-azul-texto: #93c5fd;
    --cor-info-texto: #7dd3fc;
    --cor-laranja-texto: #fdba74;
    --cor-sucesso-texto: #86efac;
    --cor-aviso-texto: #fbbf24;
    --cor-perigo-texto: #fca5a5;
    --cor-neutra-texto: #cbd5e1;
    --cor-rosa-texto: #f9a8d4;
    --cor-violeta-texto: #c4b5fd;
    --bs-code-color: var(--cor-rosa-texto);
}

:where(html:not([data-contraste="alto"])) .btn-success,
:where(html:not([data-contraste="alto"])) .btn-success:focus,
:where(html:not([data-contraste="alto"])) .btn-check:focus + .btn-success {
    background-color: var(--cor-sucesso-fundo) !important;
    border-color: var(--cor-sucesso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-success:hover,
:where(html:not([data-contraste="alto"])) .btn-success:active,
:where(html:not([data-contraste="alto"])) .btn-success.active,
:where(html:not([data-contraste="alto"])) .btn-success.show,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-success,
:where(html:not([data-contraste="alto"])) .btn-check:active + .btn-success {
    background-color: color-mix(in srgb, var(--cor-sucesso-fundo) 85%, black) !important;
    border-color: color-mix(in srgb, var(--cor-sucesso-fundo) 85%, black) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-danger,
:where(html:not([data-contraste="alto"])) .btn-danger:focus,
:where(html:not([data-contraste="alto"])) .btn-check:focus + .btn-danger {
    background-color: var(--cor-perigo-fundo) !important;
    border-color: var(--cor-perigo-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-danger:hover,
:where(html:not([data-contraste="alto"])) .btn-danger:active,
:where(html:not([data-contraste="alto"])) .btn-danger.active,
:where(html:not([data-contraste="alto"])) .btn-danger.show,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-danger,
:where(html:not([data-contraste="alto"])) .btn-check:active + .btn-danger {
    background-color: color-mix(in srgb, var(--cor-perigo-fundo) 85%, black) !important;
    border-color: color-mix(in srgb, var(--cor-perigo-fundo) 85%, black) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-warning,
:where(html:not([data-contraste="alto"])) .btn-warning:focus,
:where(html:not([data-contraste="alto"])) .btn-check:focus + .btn-warning {
    background-color: var(--cor-aviso-fundo) !important;
    border-color: var(--cor-aviso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-warning:hover,
:where(html:not([data-contraste="alto"])) .btn-warning:active,
:where(html:not([data-contraste="alto"])) .btn-warning.active,
:where(html:not([data-contraste="alto"])) .btn-warning.show,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-warning,
:where(html:not([data-contraste="alto"])) .btn-check:active + .btn-warning {
    background-color: color-mix(in srgb, var(--cor-aviso-fundo) 85%, black) !important;
    border-color: color-mix(in srgb, var(--cor-aviso-fundo) 85%, black) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-info,
:where(html:not([data-contraste="alto"])) .btn-info:focus,
:where(html:not([data-contraste="alto"])) .btn-check:focus + .btn-info {
    background-color: var(--cor-info-fundo) !important;
    border-color: var(--cor-info-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-info:hover,
:where(html:not([data-contraste="alto"])) .btn-info:active,
:where(html:not([data-contraste="alto"])) .btn-info.active,
:where(html:not([data-contraste="alto"])) .btn-info.show,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-info,
:where(html:not([data-contraste="alto"])) .btn-check:active + .btn-info {
    background-color: color-mix(in srgb, var(--cor-info-fundo) 85%, black) !important;
    border-color: color-mix(in srgb, var(--cor-info-fundo) 85%, black) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-purple,
:where(html:not([data-contraste="alto"])) .btn-purple:focus {
    background-color: var(--cor-violeta-fundo) !important;
    border-color: var(--cor-violeta-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-purple:hover,
:where(html:not([data-contraste="alto"])) .btn-purple:active,
:where(html:not([data-contraste="alto"])) .btn-purple.active {
    background-color: color-mix(in srgb, var(--cor-violeta-fundo) 85%, black) !important;
    border-color: color-mix(in srgb, var(--cor-violeta-fundo) 85%, black) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-purple {
    color: var(--cor-violeta-texto) !important;
    border-color: var(--cor-violeta-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-purple:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-purple:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-purple:active,
:where(html:not([data-contraste="alto"])) .btn-outline-purple.active {
    background-color: var(--cor-violeta-fundo) !important;
    border-color: var(--cor-violeta-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-primary {
    color: var(--cor-primaria-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-primary:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-primary:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-primary:active,
:where(html:not([data-contraste="alto"])) .btn-outline-primary.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-primary {
    background-color: var(--cor-primaria-fundo) !important;
    border-color: var(--cor-primaria-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-secondary {
    color: var(--cor-laranja-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-secondary:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-secondary:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-secondary:active,
:where(html:not([data-contraste="alto"])) .btn-outline-secondary.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-secondary {
    background-color: var(--cor-laranja-fundo) !important;
    border-color: var(--cor-laranja-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-success {
    color: var(--cor-sucesso-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-success:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-success:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-success:active,
:where(html:not([data-contraste="alto"])) .btn-outline-success.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-success {
    background-color: var(--cor-sucesso-fundo) !important;
    border-color: var(--cor-sucesso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-danger {
    color: var(--cor-perigo-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-danger:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-danger:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-danger:active,
:where(html:not([data-contraste="alto"])) .btn-outline-danger.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-danger {
    background-color: var(--cor-perigo-fundo) !important;
    border-color: var(--cor-perigo-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-warning {
    color: var(--cor-aviso-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-warning:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-warning:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-warning:active,
:where(html:not([data-contraste="alto"])) .btn-outline-warning.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-warning {
    background-color: var(--cor-aviso-fundo) !important;
    border-color: var(--cor-aviso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-info {
    color: var(--cor-info-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-outline-info:hover,
:where(html:not([data-contraste="alto"])) .btn-outline-info:focus,
:where(html:not([data-contraste="alto"])) .btn-outline-info:active,
:where(html:not([data-contraste="alto"])) .btn-outline-info.active,
:where(html:not([data-contraste="alto"])) .btn-check:checked + .btn-outline-info {
    background-color: var(--cor-info-fundo) !important;
    border-color: var(--cor-info-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .text-secondary {
    color: var(--cor-laranja-texto) !important;
}

:where(html:not([data-contraste="alto"])) .text-success {
    color: var(--cor-sucesso-texto) !important;
}

:where(html:not([data-contraste="alto"])) .text-warning {
    color: var(--cor-aviso-texto) !important;
}

:where(html:not([data-contraste="alto"])) .text-info {
    color: var(--cor-info-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-primary {
    color: var(--cor-primaria-escuro) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-secondary {
    color: var(--cor-laranja-escuro) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-success {
    color: var(--cor-sucesso-escuro) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-danger {
    color: var(--cor-perigo-escuro) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-warning {
    color: var(--cor-aviso-escuro) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"])) .alert-info {
    color: var(--cor-info-escuro) !important;
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-primary {
    color: var(--cor-primaria-texto) !important;
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-secondary {
    color: var(--cor-laranja-texto) !important;
}

:where(html:not([data-contraste="alto"])) .btn-link {
    --bs-btn-color: var(--cor-azul-texto);
    --bs-btn-hover-color: var(--cor-azul-texto);
    --bs-btn-active-color: var(--cor-azul-texto);
}

:where(html:not([data-contraste="alto"])) .list-group-item.active {
    background-color: var(--cor-primaria-fundo) !important;
    border-color: var(--cor-primaria-fundo);
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-success {
    color: var(--cor-sucesso-texto) !important;
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-danger {
    color: var(--cor-perigo-texto) !important;
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-warning {
    color: var(--cor-aviso-texto) !important;
}

:where(html[data-theme-mode="dark"]:not([data-contraste="alto"])) .alert-info {
    color: var(--cor-info-texto) !important;
}

[data-theme-mode="dark"] .alert a:not(.btn) {
    color: inherit !important;
}

.bg-primary-lt,
.badge.bg-primary-lt {
    background-color: var(--cor-primaria-claro) !important;
    color: var(--cor-primaria-escuro) !important;
}

.bg-secondary-lt,
.badge.bg-secondary-lt {
    background-color: var(--cor-neutra-claro) !important;
    color: var(--cor-neutra-escuro) !important;
}

.bg-success-lt,
.badge.bg-success-lt {
    background-color: var(--cor-sucesso-claro) !important;
    color: var(--cor-sucesso-escuro) !important;
}

.bg-danger-lt,
.badge.bg-danger-lt {
    background-color: var(--cor-perigo-claro) !important;
    color: var(--cor-perigo-escuro) !important;
}

.bg-warning-lt,
.badge.bg-warning-lt {
    background-color: var(--cor-aviso-claro) !important;
    color: var(--cor-aviso-escuro) !important;
}

.bg-info-lt,
.badge.bg-info-lt {
    background-color: var(--cor-info-claro) !important;
    color: var(--cor-info-escuro) !important;
}

.bg-purple-lt,
.badge.bg-purple-lt {
    background-color: var(--cor-violeta-claro) !important;
    color: var(--cor-violeta-escuro) !important;
}

:where(html:not([data-contraste="alto"])) .bg-purple,
:where(html:not([data-contraste="alto"])) .badge.bg-purple {
    background-color: var(--cor-violeta-fundo) !important;
}

:where(html:not([data-contraste="alto"])) .text-purple {
    color: var(--cor-violeta-texto) !important;
}

[data-theme-mode="dark"] .badge.bg-primary {
    background-color: var(--cor-primaria-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-secondary {
    background-color: var(--cor-laranja-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-success {
    background-color: var(--cor-sucesso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-danger {
    background-color: var(--cor-perigo-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-warning {
    background-color: var(--cor-aviso-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-info {
    background-color: var(--cor-info-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .badge.bg-purple {
    background-color: var(--cor-violeta-fundo) !important;
    color: var(--cor-sobre-fundo) !important;
}

[data-theme-mode="dark"] .bg-primary-lt {
    background-color: color-mix(in srgb, var(--cor-primaria-fundo) 30%, transparent) !important;
    color: var(--cor-primaria-texto) !important;
}

[data-theme-mode="dark"] .bg-secondary-lt {
    background-color: color-mix(in srgb, var(--cor-neutra-fundo) 30%, transparent) !important;
    color: var(--cor-neutra-texto) !important;
}

[data-theme-mode="dark"] .bg-success-lt {
    background-color: color-mix(in srgb, var(--cor-sucesso-fundo) 30%, transparent) !important;
    color: var(--cor-sucesso-texto) !important;
}

[data-theme-mode="dark"] .bg-danger-lt {
    background-color: color-mix(in srgb, var(--cor-perigo-fundo) 30%, transparent) !important;
    color: var(--cor-perigo-texto) !important;
}

[data-theme-mode="dark"] .bg-warning-lt {
    background-color: color-mix(in srgb, var(--cor-aviso-fundo) 30%, transparent) !important;
    color: var(--cor-aviso-texto) !important;
}

[data-theme-mode="dark"] .bg-info-lt {
    background-color: color-mix(in srgb, var(--cor-info-fundo) 30%, transparent) !important;
    color: var(--cor-info-texto) !important;
}

[data-theme-mode="dark"] .bg-purple-lt {
    background-color: color-mix(in srgb, var(--cor-violeta-fundo) 30%, transparent) !important;
    color: var(--cor-primaria-texto) !important;
}

[data-theme-mode="dark"] {
    --bs-primary-bg-subtle: #031633;
    --bs-secondary-bg-subtle: #161719;
    --bs-success-bg-subtle: #051b11;
    --bs-info-bg-subtle: #032830;
    --bs-warning-bg-subtle: #332701;
    --bs-danger-bg-subtle: #2c0b0e;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-primary-subtle {
    color: var(--cor-primaria-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-primary-subtle {
    color: var(--cor-primaria-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-secondary-subtle {
    color: var(--cor-neutra-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-secondary-subtle {
    color: var(--cor-neutra-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-success-subtle {
    color: var(--cor-sucesso-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-success-subtle {
    color: var(--cor-sucesso-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-danger-subtle {
    color: var(--cor-perigo-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-danger-subtle {
    color: var(--cor-perigo-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-warning-subtle {
    color: var(--cor-aviso-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-warning-subtle {
    color: var(--cor-aviso-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-info-subtle {
    color: var(--cor-info-escuro) !important;
}

[data-theme-mode="dark"] .badge.bg-info-subtle {
    color: var(--cor-info-texto) !important;
}

:where(html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"])) .badge.bg-purple-transparent {
    color: var(--cor-primaria-texto) !important;
}

:where(html:not([data-contraste="alto"])) .page-item.active .page-link {
    background-color: var(--cor-primaria-fundo);
    border-color: var(--cor-primaria-fundo);
    color: var(--cor-sobre-fundo);
}

:where(html:not([data-contraste="alto"])) .alert .alert-link {
    color: inherit !important;
}

[data-theme-mode="dark"] .btn-dark,
[data-theme-mode="dark"] .bg-dark,
html[data-theme-mode="dark"]:not([data-contraste="alto"]) .badge.bg-dark {
    color: var(--cor-grafite) !important;
}

.identidade-build,
.identidade-build .identidade-build__ambiente,
.identidade-build .identidade-build__revisao {
    color: var(--text-muted) !important;
    opacity: 1 !important;
}

/* ---------- Tamanho de fonte ajustável (até 200%) ---------- */
html[data-fonte="110"] { font-size: 110%; }
html[data-fonte="125"] { font-size: 125%; }
html[data-fonte="150"] { font-size: 150%; }
html[data-fonte="175"] { font-size: 175%; }
html[data-fonte="200"] { font-size: 200%; }

html[data-fonte] body {
    overflow-wrap: anywhere;
}

html[data-fonte="150"] .table-responsive,
html[data-fonte="175"] .table-responsive,
html[data-fonte="200"] .table-responsive {
    overflow-x: auto;
}

/* ---------- Pular para o conteúdo ---------- */
.a11y-atalhos-pulo {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2147483640;
    list-style: none;
    margin: 0;
    padding: 0;
}

.a11y-atalhos-pulo a {
    position: absolute;
    left: -10000px;
    top: 0.5rem;
    white-space: nowrap;
    padding: 0.6rem 1rem;
    background: #0b1f3a;
    color: #ffffff !important;
    font-weight: 700;
    border-radius: 0 0 0.375rem 0;
    text-decoration: underline;
}

.a11y-atalhos-pulo a:focus,
.a11y-atalhos-pulo a:focus-visible {
    left: 0.5rem;
    outline: 3px solid #ffbf00;
    outline-offset: 2px;
}

[tabindex="-1"]:focus:not(:focus-visible) {
    outline: none;
}

/* ---------- Foco visível ---------- */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[role="button"]:focus-visible,
[role="tab"]:focus-visible,
[role="menuitem"]:focus-visible,
[tabindex]:not([tabindex="-1"]):focus-visible,
.btn:focus-visible,
.nav-link:focus-visible,
.side-menu__item:focus-visible,
.form-control:focus-visible,
.form-select:focus-visible,
.form-check-input:focus-visible {
    outline: 3px solid var(--a11y-foco) !important;
    outline-offset: 2px !important;
    box-shadow: 0 0 0 5px var(--a11y-foco-sombra) !important;
}

/* ---------- Barra de acessibilidade ---------- */
.a11y-barra {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    flex-wrap: wrap;
}

.a11y-barra .a11y-botao {
    min-width: 2.25rem;
    min-height: 2.25rem;
    padding: 0.25rem 0.5rem;
    border: 1px solid currentColor;
    border-radius: 0.375rem;
    background: transparent;
    color: inherit;
    font-weight: 700;
    line-height: 1;
}

.a11y-barra .a11y-botao[aria-pressed="true"] {
    background: #0b1f3a;
    color: #ffffff;
}

.a11y-menu .dropdown-item[aria-pressed="true"]::after {
    content: " (ativado)";
    font-weight: 700;
}

.a11y-rodape {
    padding: 0.75rem 1rem;
    font-size: 0.875rem;
    text-align: center;
}

.a11y-rodape a,
.a11y-rodape .btn-link {
    color: #0a58ca;
    text-decoration: underline;
}

[data-theme-mode="dark"] .a11y-rodape a,
[data-theme-mode="dark"] .a11y-rodape .btn-link,
[data-bs-theme="dark"] .a11y-rodape a,
[data-bs-theme="dark"] .a11y-rodape .btn-link {
    color: #8ab4f8;
}

/* ---------- Diálogo de atalhos ---------- */
.a11y-atalhos-lista kbd {
    display: inline-block;
    min-width: 1.6em;
    padding: 0.1em 0.4em;
    border: 1px solid #5f6b85;
    border-radius: 0.25rem;
    background: #f3f4f6;
    color: #111827;
    font-family: monospace !important;
    text-align: center;
}

/* ---------- Alto contraste ----------
   Fundo preto, texto branco, links e foco amarelos. Vale por cima do tema claro
   e do escuro. Imagens, vídeos e gráficos mantêm as cores originais. As regras
   de exceção repetem o atributo para superar a especificidade da regra geral. */
html[data-contraste="alto"] {
    --a11y-foco: #ffff00;
    --a11y-foco-sombra: rgba(255, 255, 0, 0.5);
    --text-muted: #ffffff;
    --bs-body-bg: #000000;
    --bs-body-color: #ffffff;
    --bs-secondary-color: #ffffff;
    --bs-border-color: #ffffff;
    --bs-link-color: #ffff00;
    --bs-link-hover-color: #ffff00;
    color-scheme: dark;
}

html[data-contraste="alto"],
html[data-contraste="alto"] body,
html[data-contraste="alto"] body *:not(img):not(svg):not(svg *):not(video):not(canvas):not(iframe):not(.a11y-preserva-cor):not(.a11y-preserva-cor *) {
    background-color: #000000 !important;
    background-image: none !important;
    color: #ffffff !important;
    border-color: #ffffff !important;
    text-shadow: none !important;
    box-shadow: none !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] a,
html[data-contraste="alto"][data-contraste][data-contraste] a *,
html[data-contraste="alto"][data-contraste][data-contraste] .btn-link,
html[data-contraste="alto"][data-contraste][data-contraste] .nav-link,
html[data-contraste="alto"][data-contraste][data-contraste] .nav-link * {
    color: #ffff00 !important;
    text-decoration: underline;
}

html[data-contraste="alto"][data-contraste][data-contraste] .btn,
html[data-contraste="alto"][data-contraste][data-contraste] .form-control,
html[data-contraste="alto"][data-contraste][data-contraste] .form-select,
html[data-contraste="alto"][data-contraste][data-contraste] .form-check-input,
html[data-contraste="alto"][data-contraste][data-contraste] .input-group-text,
html[data-contraste="alto"][data-contraste][data-contraste] .card,
html[data-contraste="alto"][data-contraste][data-contraste] .modal-content,
html[data-contraste="alto"][data-contraste][data-contraste] .dropdown-menu,
html[data-contraste="alto"][data-contraste][data-contraste] .alert,
html[data-contraste="alto"][data-contraste][data-contraste] .badge,
html[data-contraste="alto"][data-contraste][data-contraste] table,
html[data-contraste="alto"][data-contraste][data-contraste] th,
html[data-contraste="alto"][data-contraste][data-contraste] td {
    border: 1px solid #ffffff !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] .btn:hover,
html[data-contraste="alto"][data-contraste][data-contraste] .nav-link.active,
html[data-contraste="alto"][data-contraste][data-contraste] .side-menu__item.active,
html[data-contraste="alto"][data-contraste][data-contraste] .dropdown-item:hover,
html[data-contraste="alto"][data-contraste][data-contraste] .dropdown-item:focus,
html[data-contraste="alto"][data-contraste][data-contraste] .page-item.active .page-link {
    background-color: #ffff00 !important;
    color: #000000 !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] .btn:hover *,
html[data-contraste="alto"][data-contraste][data-contraste] .nav-link.active *,
html[data-contraste="alto"][data-contraste][data-contraste] .side-menu__item.active *,
html[data-contraste="alto"][data-contraste][data-contraste] .dropdown-item:hover *,
html[data-contraste="alto"][data-contraste][data-contraste] .dropdown-item:focus * {
    background-color: transparent !important;
    color: #000000 !important;
}

html[data-contraste="alto"][data-contraste][data-contraste][data-contraste][data-contraste] .side-menu__item.active {
    background-color: #ffff00 !important;
    color: #000000 !important;
}

html[data-contraste="alto"][data-contraste][data-contraste][data-contraste][data-contraste] .nav-tabs .badge {
    background: #000000 !important;
    color: #ffffff !important;
    border: 1px solid #ffffff !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] .form-check-input:checked {
    background-color: #ffff00 !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] ::placeholder {
    color: #d9d9d9 !important;
    opacity: 1;
}

html[data-contraste="alto"][data-contraste][data-contraste] .modal-backdrop {
    background-color: #000000 !important;
    opacity: 0.85 !important;
}

html[data-contraste="alto"][data-contraste][data-contraste] .a11y-atalhos-lista kbd {
    background: #000000 !important;
    color: #ffffff !important;
    border-color: #ffffff !important;
}

/* Barra flutuante das telas sem cabeçalho (login, portais antes do acesso). */
.a11y-barra-flutuante {
    position: fixed;
    top: 0.5rem;
    right: 0.5rem;
    z-index: 1040;
    padding: 0.25rem;
    border-radius: 0.5rem;
    background: #ffffff;
    color: #0b1f3a;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
}

.a11y-barra-flutuante a {
    color: #0b1f3a;
    padding: 0 0.25rem;
    text-decoration: underline;
    font-weight: 600;
}

/* Botões da ajuda online sobre o fundo claro dos cartões (#0d6efd e #735dff
   ficavam abaixo de 4,5:1). */
html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) #ajuda-app .btn-link,
html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) #ajuda-app .btn-outline-primary {
    color: #0a58ca !important;
    border-color: #0a58ca !important;
}

html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) #ajuda-app .btn-outline-primary:hover {
    background-color: #0a58ca !important;
    color: #ffffff !important;
}


/* Item ativo do menu lateral no tema claro: branco sobre #6366f1 dá 4,47:1,
   abaixo do mínimo de 4,5:1. Só o fundo escurece; o branco do texto já fica
   acima de 4,5:1 num tom mais escuro da mesma família (6,29:1). */
html:not([data-theme-mode="dark"]):not([data-bs-theme="dark"]):not([data-contraste="alto"]) .side-menu__item.active {
    background-color: var(--cor-primaria-fundo) !important;
}

/* Diálogo que mostra uma página inteira do sistema (declaração de
   acessibilidade, ajuda). Limita a altura para o conteúdo rolar dentro do
   diálogo, em vez de esticar a janela. */
.a11y-dialogo { margin: auto; }
.a11y-dialogo-pagina { width: min(880px, 92vw); max-height: 86vh; }
.a11y-dialogo-pagina[open] { display: flex; flex-direction: column; }
.a11y-dialogo-pagina .a11y-dialogo-corpo { overflow-y: auto; overscroll-behavior: contain; }
.a11y-dialogo-pagina .a11y-dialogo-corpo :where(h1, .h1) { font-size: 1.35rem; }
.a11y-dialogo-pagina .a11y-dialogo-corpo img { max-width: 100%; height: auto; }
