/* Sobrescreve só cores do Material Dashboard. Hex fica em tokens.css. */

:root {
  --bs-primary: var(--primary);
  --bs-body-color: var(--text);
  --bs-body-bg: var(--bg);
  --bs-heading-color: var(--text);
  --bs-link-color: var(--primary);
  --bs-link-hover-color: var(--primary-hover);
  --bs-border-color: var(--border);
}

body {
  color: var(--text);
  background-color: var(--bg);
}

body.bg-light {
  background-color: var(--bg) !important;
}

h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
  color: var(--text);
}

.text-body,
.text-dark {
  color: var(--text) !important;
}

.text-secondary,
.text-muted,
.form-label,
.form-text,
.footer .copyright,
.card-header p:not(.text-white),
.card p.text-xs:not(.text-white),
.card .text-xs:not(.text-white) {
  color: var(--text-muted) !important;
}

/* O tema pinta .text-gradient com degradê claro (contraste baixo); aqui o texto fica na cor sólida da classe. */
.text-gradient {
  background-image: none !important;
  -webkit-text-fill-color: currentColor;
}

.text-primary { color: var(--primary) !important; }
.text-success { color: var(--success) !important; }
.text-danger { color: var(--danger) !important; }
.text-warning { color: var(--warning) !important; }
.text-info { color: var(--info) !important; }

a:not(.btn):not(.nav-link):not(.dropdown-item) {
  color: var(--primary);
}

a:not(.btn):not(.nav-link):not(.dropdown-item):hover {
  color: var(--primary-hover);
}

/* Sidebar: turquesa deixa de ser fundo de área grande. */
#sidenav-main,
#sidenav-main.bg-primary {
  background-color: var(--sidebar-bg) !important;
  background-image: none !important;
}

#sidenav-main .nav-link,
#sidenav-main .nav-link .nav-link-text,
#sidenav-main .text-white,
#sidenav-main .sidebar-icon,
#sidenav-main a {
  color: var(--sidebar-text) !important;
}

#sidenav-main .navbar-nav > .nav-item > .nav-link .nav-link-text {
  color: var(--sidebar-text-muted) !important;
}

#sidenav-main .nav-link[data-bs-toggle="collapse"]:after {
  color: var(--sidebar-text-muted) !important;
}

#sidenav-main .nav-link {
  border-left: 4px solid transparent;
  background-image: none;
}

#sidenav-main .nav-link.active,
#sidenav-main .navbar-nav .nav-link.active,
#sidenav-main .nav-link.active .nav-link-text {
  color: var(--sidebar-text) !important;
  background-color: var(--sidebar-active-bg) !important;
  background-image: none !important;
  border-left-color: var(--brand);
  box-shadow: none;
}

/* Ícone branco: fundo --primary, opacidade cheia. */
.bg-primary,
.icon-shape.bg-gradient-primary,
.icon-shape.bg-gradient-success,
.icon-shape.bg-gradient-info,
.icon-shape.bg-gradient-warning,
.icon-shape.bg-gradient-danger,
.icon-shape.bg-gradient-dark,
.avatar.bg-gradient-secondary,
.avatar.bg-gradient-dark {
  color: var(--sidebar-text);
  background-color: var(--primary) !important;
  background-image: none !important;
}

.icon-shape i,
.avatar .material-icons,
.avatar i {
  color: var(--sidebar-text);
  opacity: 1;
}

.table {
  --bs-table-color: var(--text);
  color: var(--text);
}

.table thead th,
.thead-light th {
  color: var(--text-muted);
}

.card:not(.card-plain) {
  background-color: var(--surface);
  border: 1px solid var(--border);
  box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 8%, transparent);
}

/* Bloco com foto no style (telas de conta) mantém a imagem; a regra só troca o degradê pela cor sólida. */
.btn-primary,
.btn.bg-gradient-primary,
.bg-gradient-primary:not([style*="background-image"]) {
  color: var(--sidebar-text) !important;
  background-color: var(--primary) !important;
  background-image: none !important;
  border-color: var(--primary) !important;
  box-shadow: none;
}

.btn-primary:hover,
.btn-primary:active,
.btn.bg-gradient-primary:hover,
.btn.bg-gradient-primary:active,
.btn.bg-gradient-primary:focus {
  color: var(--sidebar-text) !important;
  background-color: var(--primary-hover) !important;
  background-image: none !important;
  border-color: var(--primary-hover) !important;
  opacity: 1;
}

.btn-link {
  color: var(--primary) !important;
}

.btn-link:hover,
.btn-link:focus {
  color: var(--primary-hover) !important;
}

.btn-outline-primary {
  color: var(--primary);
  border-color: var(--primary);
  background-image: none;
}

/* Ação neutra (Cancelar): texto escuro e borda cinza; o hover só acende o fundo. */
.btn-outline-secondary {
  --bs-btn-color: var(--text);
  --bs-btn-border-color: var(--text-muted);
  --bs-btn-hover-color: var(--text);
  --bs-btn-hover-bg: var(--bg);
  --bs-btn-hover-border-color: var(--text-muted);
  --bs-btn-active-color: var(--text);
  --bs-btn-active-bg: var(--bg);
  --bs-btn-active-border-color: var(--text-muted);
  --bs-btn-disabled-color: var(--text-muted);
  color: var(--text);
  border-color: var(--text-muted);
}

.btn-outline-danger {
  color: var(--danger);
  border-color: var(--danger);
}

/* O tema esmaece o hover (opacity .75 e cor antiga) com :hover:not(.active); o seletor igual é necessário para vencer. */
.btn-outline-primary:hover:not(.active),
.btn-outline-primary:focus {
  color: var(--primary-hover);
  background-color: transparent;
  border-color: var(--primary-hover);
  opacity: 1;
}

.btn-outline-secondary:hover:not(.active),
.btn-outline-secondary:focus,
.btn-outline-secondary:active {
  color: var(--text);
  background-color: var(--bg);
  border-color: var(--text-muted);
  opacity: 1;
}

.btn-outline-danger:hover:not(.active),
.btn-outline-danger:focus,
.btn-outline-danger:active {
  color: var(--danger);
  background-color: var(--danger-bg);
  border-color: var(--danger);
  opacity: 1;
}

/* Sólidos de status: texto claro sobre a cor do token. O hover escurece o fundo e não o texto. */
.btn-success,
.btn.bg-gradient-success,
.btn-danger,
.btn.bg-gradient-danger,
.btn-info,
.btn.bg-gradient-info,
.btn-warning,
.btn.bg-gradient-warning,
.btn-dark,
.btn.bg-gradient-dark {
  color: var(--sidebar-text) !important;
  background-image: none !important;
  box-shadow: none;
}

.btn-success,
.btn.bg-gradient-success {
  background-color: var(--success) !important;
  border-color: var(--success) !important;
}

.btn-danger,
.btn.bg-gradient-danger {
  background-color: var(--danger) !important;
  border-color: var(--danger) !important;
}

.btn-info,
.btn.bg-gradient-info {
  background-color: var(--info) !important;
  border-color: var(--info) !important;
}

.btn-warning,
.btn.bg-gradient-warning {
  background-color: var(--warning) !important;
  border-color: var(--warning) !important;
}

.btn-dark,
.btn.bg-gradient-dark {
  background-color: var(--text) !important;
  border-color: var(--text) !important;
}

.btn-success:hover,
.btn-success:focus,
.btn-success:active,
.btn.bg-gradient-success:hover,
.btn.bg-gradient-success:focus,
.btn.bg-gradient-success:active,
.btn-danger:hover,
.btn-danger:focus,
.btn-danger:active,
.btn.bg-gradient-danger:hover,
.btn.bg-gradient-danger:focus,
.btn.bg-gradient-danger:active,
.btn-info:hover,
.btn-info:focus,
.btn-info:active,
.btn.bg-gradient-info:hover,
.btn.bg-gradient-info:focus,
.btn.bg-gradient-info:active,
.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active,
.btn.bg-gradient-warning:hover,
.btn.bg-gradient-warning:focus,
.btn.bg-gradient-warning:active,
.btn-dark:hover,
.btn-dark:focus,
.btn-dark:active,
.btn.bg-gradient-dark:hover,
.btn.bg-gradient-dark:focus,
.btn.bg-gradient-dark:active {
  color: var(--sidebar-text) !important;
  background-image: none !important;
  opacity: 1;
}

.btn-success:hover,
.btn-success:focus,
.btn-success:active,
.btn.bg-gradient-success:hover,
.btn.bg-gradient-success:focus,
.btn.bg-gradient-success:active {
  background-color: color-mix(in srgb, var(--success) 82%, #000) !important;
  border-color: color-mix(in srgb, var(--success) 82%, #000) !important;
}

.btn-danger:hover,
.btn-danger:focus,
.btn-danger:active,
.btn.bg-gradient-danger:hover,
.btn.bg-gradient-danger:focus,
.btn.bg-gradient-danger:active {
  background-color: color-mix(in srgb, var(--danger) 82%, #000) !important;
  border-color: color-mix(in srgb, var(--danger) 82%, #000) !important;
}

.btn-info:hover,
.btn-info:focus,
.btn-info:active,
.btn.bg-gradient-info:hover,
.btn.bg-gradient-info:focus,
.btn.bg-gradient-info:active {
  background-color: color-mix(in srgb, var(--info) 82%, #000) !important;
  border-color: color-mix(in srgb, var(--info) 82%, #000) !important;
}

.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active,
.btn.bg-gradient-warning:hover,
.btn.bg-gradient-warning:focus,
.btn.bg-gradient-warning:active {
  background-color: color-mix(in srgb, var(--warning) 82%, #000) !important;
  border-color: color-mix(in srgb, var(--warning) 82%, #000) !important;
}

.btn-dark:hover,
.btn-dark:focus,
.btn-dark:active,
.btn.bg-gradient-dark:hover,
.btn.bg-gradient-dark:focus,
.btn.bg-gradient-dark:active {
  background-color: color-mix(in srgb, var(--text) 82%, #000) !important;
  border-color: color-mix(in srgb, var(--text) 82%, #000) !important;
}

/* Neutro sólido (o tema traz verde claro com texto branco). Mesmo contraste do Cancelar. */
.btn-secondary,
.btn.bg-gradient-secondary,
.btn-light,
.btn.bg-gradient-light,
.btn-white,
.btn.bg-gradient-white {
  color: var(--text) !important;
  background-color: var(--bg) !important;
  background-image: none !important;
  border: 1px solid var(--text-muted) !important;
  box-shadow: none;
}

.btn-secondary:hover,
.btn-secondary:focus,
.btn-secondary:active,
.btn.bg-gradient-secondary:hover,
.btn.bg-gradient-secondary:focus,
.btn.bg-gradient-secondary:active,
.btn-light:hover,
.btn-light:focus,
.btn-light:active,
.btn.bg-gradient-light:hover,
.btn.bg-gradient-light:focus,
.btn.bg-gradient-light:active,
.btn-white:hover,
.btn-white:focus,
.btn-white:active,
.btn.bg-gradient-white:hover,
.btn.bg-gradient-white:focus,
.btn.bg-gradient-white:active {
  color: var(--text) !important;
  background-color: var(--surface) !important;
  background-image: none !important;
  border-color: var(--text-muted) !important;
  opacity: 1;
}

.btn-outline-success,
.btn-outline-info,
.btn-outline-warning,
.btn-outline-dark {
  background-color: transparent;
  background-image: none;
}

.btn-outline-success {
  color: var(--success);
  border-color: var(--success);
}

.btn-outline-info {
  color: var(--info);
  border-color: var(--info);
}

.btn-outline-warning {
  color: var(--warning);
  border-color: var(--warning);
}

.btn-outline-dark {
  color: var(--text);
  border-color: var(--text);
}

.btn-outline-success:hover:not(.active),
.btn-outline-success:focus,
.btn-outline-success:active {
  color: var(--success);
  background-color: var(--success-bg);
  border-color: var(--success);
  opacity: 1;
}

.btn-outline-info:hover:not(.active),
.btn-outline-info:focus,
.btn-outline-info:active {
  color: var(--info);
  background-color: var(--info-bg);
  border-color: var(--info);
  opacity: 1;
}

.btn-outline-warning:hover:not(.active),
.btn-outline-warning:focus,
.btn-outline-warning:active {
  color: var(--warning);
  background-color: var(--warning-bg);
  border-color: var(--warning);
  opacity: 1;
}

.btn-outline-dark:hover:not(.active),
.btn-outline-dark:focus,
.btn-outline-dark:active {
  color: var(--text);
  background-color: var(--bg);
  border-color: var(--text);
  opacity: 1;
}

/* Sobre fundo escuro (404, rodapé): o texto claro permanece no hover. */
.btn-outline-light,
.btn-outline-white {
  color: var(--sidebar-text);
  border-color: var(--sidebar-text);
  background-color: transparent;
  background-image: none;
}

.btn-outline-light:hover:not(.active),
.btn-outline-light:focus,
.btn-outline-light:active,
.btn-outline-white:hover:not(.active),
.btn-outline-white:focus,
.btn-outline-white:active {
  color: var(--sidebar-text);
  background-color: transparent;
  border-color: var(--sidebar-text);
  opacity: 1;
}

/* O tema esmaece todo botão no clique (opacity .85) e o outline no hover (.75). */
.btn.btn:hover:not(:disabled),
.btn.btn:focus:not(:disabled),
.btn.btn:active:not(:disabled),
.btn.btn:active:hover:not(:disabled) {
  opacity: 1;
}

.mask.bg-gradient-primary {
  background-color: var(--sidebar-bg) !important;
  background-image: none !important;
}

/* Rodapé das telas públicas fica sobre a foto, que vai de clara a escura; o halo escuro mantém o texto branco legível nos dois casos. */
.footer.footer-sobre-imagem {
  z-index: 2;
}

.footer.footer-sobre-imagem .copyright,
.footer.footer-sobre-imagem .nav-footer {
  color: var(--sidebar-text) !important;
  font-weight: 500;
  text-shadow:
    0 0 2px var(--sidebar-bg),
    0 0 3px var(--sidebar-bg),
    0 1px 4px var(--sidebar-bg);
}

.form-control,
select,
textarea {
  color: var(--text);
  border-color: var(--text-muted);
}

.form-control::placeholder {
  color: var(--text-muted);
  opacity: 1;
}

.input-group.input-group-outline .form-control {
  border-color: var(--text-muted);
}

/* Preenchido sem foco: contorno neutro de 1px. A borda de cima fica transparente para abrir o recorte atrás do label. */
.input-group.input-group-outline.is-filled .form-label:before,
.input-group.input-group-outline.is-filled .form-label:after {
  border-top-color: var(--text-muted);
  box-shadow: none;
}

.input-group.input-group-outline.is-filled .form-label + .form-control {
  border-color: var(--text-muted) !important;
  border-top-color: transparent !important;
  box-shadow: none;
}

/* Foco vem depois do preenchido para vencer quando as duas classes coexistem. */
.input-group.input-group-outline.is-focused .form-label {
  color: var(--primary) !important;
}

/* Foco: só a cor muda para --primary, em 1px. Sem sombra interna: borda + sombra vira linha dupla em escala de tela fracionária (125%, 150%). */
.input-group.input-group-outline.is-focused .form-label:before,
.input-group.input-group-outline.is-focused .form-label:after {
  border-top-color: var(--primary);
  box-shadow: none;
}

.input-group.input-group-outline.is-focused .form-label + .form-control {
  border-color: var(--primary) !important;
  border-top-color: transparent !important;
  box-shadow: none;
}

/* Campo sem label (só placeholder): mesmo contorno no foco. */
.input-group.input-group-outline.is-focused > .form-control:first-child {
  border-color: var(--primary) !important;
  box-shadow: none;
}

/* Select não recebe is-focused do script do tema; :focus-within cobre o foco nele com o label já flutuando. */
.input-group.input-group-outline.is-filled:focus-within .form-label,
.input-group.input-group-outline.legenda-fixa:focus-within .form-label {
  color: var(--primary) !important;
}

.input-group.input-group-outline.is-filled:focus-within .form-label:before,
.input-group.input-group-outline.is-filled:focus-within .form-label:after,
.input-group.input-group-outline.legenda-fixa:focus-within .form-label:before,
.input-group.input-group-outline.legenda-fixa:focus-within .form-label:after {
  border-top-color: var(--primary);
  box-shadow: none;
}

.input-group.input-group-outline.is-filled:focus-within .form-label + .form-control,
.input-group.input-group-outline.legenda-fixa:focus-within .form-label + .form-control {
  border-color: var(--primary) !important;
  border-top-color: transparent !important;
  box-shadow: none;
}

.input-group.input-group-outline.is-invalid.is-focused .form-label,
.input-group.input-group-outline.is-invalid.is-filled .form-label {
  color: var(--danger) !important;
}

.input-group.input-group-outline.is-valid.is-focused .form-label,
.input-group.input-group-outline.is-valid.is-filled .form-label {
  color: var(--success) !important;
}

.alert-success,
.alert.alert-success {
  color: var(--success) !important;
  background-color: var(--success-bg) !important;
  background-image: none !important;
  border-color: var(--success) !important;
}

.alert-danger,
.alert.alert-danger {
  color: var(--danger) !important;
  background-color: var(--danger-bg) !important;
  background-image: none !important;
  border-color: var(--danger) !important;
}

.alert-warning,
.alert.alert-warning {
  color: var(--warning) !important;
  background-color: var(--warning-bg) !important;
  background-image: none !important;
  border-color: var(--warning) !important;
}

.alert-info,
.alert.alert-info,
.alert-secondary,
.alert.alert-secondary {
  color: var(--info) !important;
  background-color: var(--info-bg) !important;
  background-image: none !important;
  border-color: var(--info) !important;
}

.badge-primary,
.badge.bg-primary {
  color: var(--primary) !important;
  background-color: var(--info-bg) !important;
  background-image: none !important;
}

.badge-success,
.badge.bg-success {
  color: var(--success) !important;
  background-color: var(--success-bg) !important;
  background-image: none !important;
}

.badge-warning,
.badge.bg-warning {
  color: var(--warning) !important;
  background-color: var(--warning-bg) !important;
  background-image: none !important;
}

.badge-danger,
.badge.bg-danger {
  color: var(--danger) !important;
  background-color: var(--danger-bg) !important;
  background-image: none !important;
}

.badge-info,
.badge.bg-info,
.badge-secondary,
.badge.bg-secondary {
  color: var(--info) !important;
  background-color: var(--info-bg) !important;
  background-image: none !important;
}

.page-item .page-link,
.page-item span,
.dataTable-wrapper .dataTable-bottom .dataTable-pagination .dataTable-pagination-list li a,
.dataTable-wrapper .dataTable-top .dataTable-dropdown label,
.dataTable-wrapper .dataTable-bottom .dataTable-info {
  color: var(--primary);
}

.dataTable-wrapper .dataTable-container .table thead tr th {
  color: var(--text-muted);
  opacity: 1;
}

.dataTable-wrapper .dataTable-bottom .dataTable-pagination .dataTable-pagination-list .active a,
.dataTable-wrapper .dataTable-bottom .dataTable-pagination .dataTable-pagination-list .active a:hover,
.page-item.active .page-link {
  color: var(--sidebar-text) !important;
  background-color: var(--primary) !important;
  background-image: none !important;
  border-color: var(--primary) !important;
}

.dataTable-wrapper .dataTable-top .dataTable-search input {
  color: var(--text);
  border-color: var(--text-muted);
}

a:focus-visible,
button:focus-visible,
.btn:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
.form-control:focus-visible,
.dataTable-wrapper .dataTable-top .dataTable-search input:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}

/* No campo outlined o foco já é o contorno de 2px em --primary; o outline extra vira linha dupla. */
.input-group.input-group-outline.is-focused .form-control:focus-visible,
.input-group.input-group-outline.is-filled .form-control:focus-visible,
.input-group.input-group-outline.legenda-fixa .form-control:focus-visible {
  outline: none;
}
