/* ==========================================================================
   ADMIN BRUTAL — reskin visual (piloto: layout.html + painel.html)
   TODA regra aqui DEVE começar com "body.admin-brutal" — é o que impede
   vazamento para as outras ~24 telas do admin, que compartilham os mesmos
   dashboard-redesign.css/dashboard.css mas não têm essa classe no <body>.
   Ver docs/superpowers/specs/2026-08-02-admin-brutalismo-design.md
   ========================================================================== */

body.admin-brutal {
    font-family: var(--admin-brutal-font-sys);
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
    /* Redefine tokens de superfície DENTRO do escopo — qualquer elemento que já
       usa var(--surface-card)/var(--surface-bg)/var(--text-primary) (health-section,
       loading-container-new, empty-state-new, stat-badge azul via ancestral, etc.)
       herda o valor correto automaticamente, sem precisar de regra por seletor. */
    --surface-bg: var(--admin-brutal-bg);
    --surface-card: var(--admin-brutal-bg);
    --surface-card-elevated: var(--admin-brutal-bg);
    --surface-card-hover: var(--admin-brutal-border);
    --border-color: var(--admin-brutal-border);
    /* FIX ROUND 1 (Task 14 review, achado Important 3): --border-subtle
       (_admin-tokens.css:264, dentro de :root puro) nunca foi remapeada —
       diferente de --app-border, que JÁ tem remap explícito abaixo. Ficava
       fixa em #333333 nos 2 temas (quase invisível no escuro, tom errado no
       claro); e onde a fonte usa a forma shorthand pura (`border:
       var(--border-subtle)`, sem width/style), o valor computado resolve
       pra `0px none` — sem borda nenhuma. Remap direto resolve a cor; os
       seletores que usam a forma shorthand quebrada ganham override
       específico com width/style explícitos mais abaixo (.cf-stat, .cf-row,
       .cf-api-chip, .mav-card, .mav-subsection, .mav-header). */
    --border-subtle: var(--admin-brutal-border);
    --text-primary: var(--admin-brutal-fg);
    /* Task 12: família --app-* (alias em _admin-tokens.css:273-280, usada por
       admin-resta-um.css/.js e módulos irmãos admin-artilheiro/admin-capitao/
       admin-luva-ouro, ainda fora do rollout) remapeada pelo mesmo motivo
       acima — inclusive corrige estilos INLINE (`style="color:var(--app-
       warning)"` etc., ver admin-resta-um.js:172,226,355,367,382,496-497,
       633,642,664,671) que nenhuma regra por seletor alcançaria sem
       !important por elemento.
       --app-border (#333333 fixo) e --app-text-muted (#9ca3af fixo) não têm
       indireção; --app-warning/--app-danger/--app-success encadeiam para
       --color-warning/danger/success GLOBAIS (não remapeados, usados fora do
       admin-brutal) — colapsam monocromático, mesmo precedente de "nenhuma
       cor de status sobrevive" já aplicado a .stat-badge, .alert- (variantes)
       e .mercado-dot.
       FIX ROUND 1 (Task 13 review, achado 2): --app-bg/--app-surface/
       --app-text-primary são definidas SÓ em :root (_admin-tokens.css:273-
       274,279) como var(--surface-bg)/var(--surface-card)/var(--text-primary)
       — indireção de 2 níveis. O comentário original desta task assumia que
       "vêm corretas de graça" por encadearem para --surface-bg/--surface-card/
       --text-primary (redefinidas acima); medido via Playwright/
       getComputedStyle que isso NÃO se sustenta na prática (retornava o valor
       de :root, não o override deste escopo). Remapeadas DIRETO aqui, mesmo
       padrão de --app-border/--app-text-muted (indireção de 1 nível só,
       resolvida no próprio body.admin-brutal), eliminando a indireção via
       :root. Corrige de uma vez `.xx-admin-header`/`.xx-card`/`.xx-stat`
       (Task 13, admin-artilheiro/admin-capitao/admin-luva-ouro) e
       `.ru-admin-header`/`.ru-card`/`.ru-stat`/`.ru-edicao-card` (Task 12,
       admin-resta-um) — os 9+4 overrides pontuais de background que essas
       tasks escreveram para compensar ficam redundantes e foram removidos. */
    --app-border: var(--admin-brutal-border);
    --app-text-muted: var(--admin-brutal-muted);
    --app-warning: var(--admin-brutal-fg);
    --app-danger: var(--admin-brutal-fg);
    --app-success: var(--admin-brutal-fg);
    --app-bg: var(--admin-brutal-bg);
    --app-surface: var(--admin-brutal-bg);
    --app-text-primary: var(--admin-brutal-fg);
    /* FIX ROUND 1 (Task 15 review, achado Critical 2): --bg-card
       (_admin-tokens.css:259) é definida SÓ em :root como
       var(--surface-card) — mesma indireção de 2 níveis via :root já
       comprovada quebrada para --app-bg/--app-surface/--app-text-primary
       (Task 13 review, comentário acima). O comentário da seção FERRAMENTAS-
       RODADAS.CSS mais abaixo (e o da seção FLUXO-FINANCEIRO.CSS, Task 11)
       afirmavam "já herda de graça por derivar de --surface-card" — mesma
       suposição não validada que já se provou falsa para --app-bg. Remap
       direto aqui elimina a indireção pra qualquer descendente de
       body.admin-brutal, incluindo .rodadas-header (ferramentas-rodadas.css:
       19,70,227) e, de graça, fluxo-financeiro.css/capitao-luxo.css (que
       redefinem --bg-card de novo só em :root, mesmo padrão quebrado —
       corrige os 2 sem exigir mudança nos arquivos-fonte). */
    --bg-card: var(--admin-brutal-bg);
    /* Task 18 (verificação final, achado Critical): --sidebar-text/--sidebar-
       text-muted (style.css:33-34, #e0e0e0/#a0a0a0 fixos, pensados pro admin
       OLD que era permanentemente escuro) nunca foram remapeadas — diferente
       das ~15 variáveis acima. style.css:387 (".sidebar a, a:link, a:visited,
       a:active { color: var(--sidebar-text) !important }") empata em
       especificidade (0,2,1) com a correção em .sidebar-accordion-item acima
       (mesma especificidade, ambos !important) e vence por ordem de carga
       (style.css depois de admin-brutal.css no <head> de gerenciar.html,
       detalhe-liga.html e outras ~23 telas — confirmado via medição real:
       rgb(224,224,224) sobre rgb(255,255,255), contraste 1.14:1). Mesmo
       padrão de --app-border/--text-primary: remap direto na fonte elimina a
       dependência de ordem de cascata em vez de tentar vencer na
       especificidade seletor-a-seletor. Cobre de graça .liga-item/
       .liga-details (style.css:336,368, mesmas variáveis, mesmo !important). */
    --sidebar-text: var(--admin-brutal-fg);
    --sidebar-text-muted: var(--admin-brutal-muted);
}

body.admin-brutal * {
    border-radius: 0 !important;
}
/* box-shadow zerado por padrão, MAS preservando :focus-visible — a regra
   anterior (`* { box-shadow: none !important }`) matava o outline de foco de
   teclado implementado via box-shadow em vários componentes (acessibilidade). */
body.admin-brutal *:not(:focus-visible) {
    box-shadow: none !important;
}
body.admin-brutal *:focus-visible {
    outline: 2px solid var(--admin-brutal-accent);
    outline-offset: 2px;
}

/* FIX (review final, Important 3): `body.admin-brutal *` NÃO casa
   ::before/::after (pseudo-elemento não é filho real do DOM que `*`
   percorre) — os 2 blankets acima nunca alcançaram os pseudo-elementos.
   Levantamento contou 20 regras de ::before/::after com border-radius
   não-zero e 4 com box-shadow no CSS carregado pelo admin; 12 já tinham
   sido neutralizadas à mão ao longo do rollout (comentários espalhados
   confirmam caso a caso), 8 não. Fecha a classe inteira de uma vez, no
   mesmo espírito dos 2 blankets acima. EXCEÇÃO: `.loading::after`
   (spinner circular, ver regra logo abaixo) precisa de border-radius:50%
   deliberado — teria virado quadrado com este blanket; override explícito
   dela agora usa `!important` para vencer este blanket. */
body.admin-brutal *::before,
body.admin-brutal *::after {
    border-radius: 0 !important;
    box-shadow: none !important;
}

/* ---- Fundo do shell (app-container / app-main) ----
   style.css:85-89 pinta .app-container com --bg-primary (#0a0a0a, escuro)
   sem nenhuma condição de tema — precisa ser sobrescrito aqui senão o
   tema claro do admin-brutal mostra texto escuro sobre fundo escuro.
   !important necessário APENAS em .app-main: ele também carrega a classe
   .dashboard-redesign, cuja regra em dashboard-redesign.css:9-10 já usa
   "background: var(--surface-bg) !important" (--surface-bg: #121212,
   _admin-tokens.css:30, sem variante clara) — sem !important aqui,
   perdemos para aquele !important existente. .app-container não tem
   !important concorrente, então especificidade normal já resolve. */
body.admin-brutal .app-container {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .app-main {
    background: var(--admin-brutal-bg) !important;
}
/* .page-content é filho direto de .app-main.dashboard-redesign e tem SUA
   PRÓPRIA regra "background: var(--surface-bg) !important" em
   dashboard-redesign.css:14-15 — cobre 100% da área visível por cima do
   fix acima. Sem isto, o fundo escuro reaparece embaixo das seções que a
   Task 3 deixou transparent (dashboard-header, quick-actions-section
   etc.), reproduzindo o mesmo bug de contraste. */
body.admin-brutal .page-content {
    background: var(--admin-brutal-bg) !important;
}

/* ---- Sidebar shell ---- */
/* !important necessário: dashboard-redesign.css define
   background/border-right/box-shadow com !important no mesmo seletor
   (linhas ~1160-1173) — sem isso nossa regra (embora mais específica)
   perde para o !important existente. Não alteramos o arquivo original. */
body.admin-brutal .app-sidebar.sidebar-redesign {
    background: var(--admin-brutal-bg) !important;
    border-right: 3px solid var(--admin-brutal-border) !important;
    box-shadow: none !important;
}

body.admin-brutal .sidebar-logo-new {
    border-bottom: 2px solid var(--admin-brutal-border);
    background: transparent;
}
body.admin-brutal .sidebar-logo-new h1,
body.admin-brutal .sidebar-logo-new p {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
/* dashboard-redesign.css:1303 pinta o <span> "Cartola" de laranja fixo — a
   regra é sobre o <span> (não herdada do h1), então o color acima no h1 não
   basta; precisa sobrescrever o próprio span. */
body.admin-brutal .sidebar-logo-text h1 span {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-logo-icon {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-radius: 0;
}

body.admin-brutal .sidebar-toggle-btn {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* FIX (review final, Important 3): tooltip do sidebar colapsado
   (dashboard-redesign.css:1237-1250, ::after com `content: attr(data-
   tooltip)`) usa `color: #e5e7eb` e `border: 1px solid #333` hardcoded,
   sem variante de tema — legível só por acaso no escuro, ilegível/
   invertido no claro. `background: var(--surface-card)` já remapeado de
   graça (bloco raiz). box-shadow/border-radius já zerados pelo blanket
   novo de pseudo-elemento (nenhum !important na fonte). Presente nas 21
   telas com sidebar colapsável. */
body.admin-brutal .app-sidebar.sidebar-collapsed .sidebar-accordion-header:hover::after,
body.admin-brutal .app-sidebar.sidebar-collapsed .sidebar-menu-item:hover::after {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
}

/* color com !important: style.css define ".sidebar a, .sidebar a:link,
   .sidebar a:visited, .sidebar a:active { color: var(--sidebar-text)
   !important }" — .sidebar-menu-item é <a> dentro de <nav class="sidebar
   app-sidebar sidebar-redesign">, então cai nesse seletor. Sem !important
   aqui, nossa cor (mesmo mais específica) perde para o !important existente. */
body.admin-brutal .sidebar-menu-item {
    border-radius: 0;
    color: var(--admin-brutal-fg) !important;
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .sidebar-menu-item:hover,
body.admin-brutal .sidebar-menu-item.active {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .sidebar-menu-item .material-icons {
    color: currentColor;
}

body.admin-brutal .sidebar-accordion {
    border-bottom: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .sidebar-accordion-header {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-muted);
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 12px;
}
body.admin-brutal .sidebar-accordion-header:hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:2288 dá fundo laranja translúcido em .active — a
   regra acima só cobre :hover. */
body.admin-brutal .sidebar-accordion-header.active {
    background: transparent;
}
/* dashboard-redesign.css:2314-2315 pinta o ícone do título de laranja em
   hover/active; :2330 pinta a seta de laranja quando o accordion abre. */
body.admin-brutal .sidebar-accordion-header:hover .sidebar-accordion-title .material-icons,
body.admin-brutal .sidebar-accordion-header.active .sidebar-accordion-title .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-accordion.open .sidebar-accordion-arrow {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-accordion-content {
    background: transparent;
}
/* color com !important: mesmo motivo do .sidebar-menu-item acima —
   .sidebar-accordion-item também é <a> dentro de <nav class="sidebar ...">. */
body.admin-brutal .sidebar-accordion-item {
    color: var(--admin-brutal-fg) !important;
    border-radius: 0;
}
body.admin-brutal .sidebar-accordion-item:hover,
body.admin-brutal .sidebar-accordion-item.active {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .sidebar-accordion-item .material-icons {
    color: currentColor;
}
/* dashboard-redesign.css:2381 aplica border-left laranja (--color-primary)
   no estado .active sem !important — neutralizamos aqui. */
body.admin-brutal .sidebar-accordion-item.active {
    border-left: none;
}
body.admin-brutal .sidebar-accordion-item.active .sidebar-accordion-badge {
    background: transparent;
    color: var(--admin-brutal-bg);
}
/* dashboard-redesign.css:2010 dá fundo laranja translúcido no placeholder
   "Nenhuma liga" / "Erro ao carregar" dentro do accordion de ligas. */
body.admin-brutal .sidebar-ligas-empty {
    background: transparent;
    color: var(--admin-brutal-muted);
}

body.admin-brutal .sidebar-user-new {
    border-top: 2px solid var(--admin-brutal-border);
    background: transparent;
}
body.admin-brutal .sidebar-user-name {
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:1649-1655 pinta avatar/nome de laranja no hover do
   bloco de usuário; :1671-1679 dá borda laranja translúcida no avatar em repouso. */
body.admin-brutal .sidebar-user-avatar {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .sidebar-user-inner:hover .sidebar-user-avatar {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-user-inner:hover .sidebar-user-name {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-user-role {
    color: var(--admin-brutal-muted);
    font-family: var(--admin-brutal-font-sys);
    text-transform: uppercase;
    font-size: 10.5px;
}
body.admin-brutal .sidebar-user-menu {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .sidebar-user-menu-item {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-user-menu-item:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Mobile ---- */
body.admin-brutal .mobile-sidebar-toggle {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-overlay.active {
    background: rgba(10, 10, 10, 0.55);
}

/* ---- Dashboard header ---- */
body.admin-brutal .dashboard-header {
    background: transparent;
    border-bottom: 3px solid var(--admin-brutal-border);
}
body.admin-brutal .dashboard-header-greeting h2 {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
    font-weight: 800;
}
body.admin-brutal .dashboard-header-mercado,
body.admin-brutal .dashboard-header-rodada {
    color: var(--admin-brutal-muted);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .btn-secondary-new,
body.admin-brutal .btn-primary-new {
    border: 2px solid var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
    text-transform: uppercase;
    font-size: 12px;
    letter-spacing: 0.03em;
}
body.admin-brutal .btn-secondary-new {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-primary-new {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}

/* ---- Progresso da temporada ---- */
body.admin-brutal .progress-bar-track {
    border: 2px solid var(--admin-brutal-border);
    background: transparent;
}
body.admin-brutal .progress-bar-fill {
    background: repeating-linear-gradient(
        135deg,
        var(--admin-brutal-fg),
        var(--admin-brutal-fg) 6px,
        transparent 6px,
        transparent 12px
    );
}
body.admin-brutal .progress-label,
body.admin-brutal .progress-percent {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-muted);
    text-transform: uppercase;
    font-size: 11.5px;
}

/* ---- Stat cards ---- */
body.admin-brutal .stat-card-new {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .stat-label-new {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-muted);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-size: 11px;
}
body.admin-brutal .stat-number-new {
    font-family: "JetBrains Mono", ui-monospace, monospace;
    font-variant-numeric: tabular-nums;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-icon-new {
    background: transparent;
    color: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
}
/* FIX (review final, Important 3): dashboard-redesign.css:356-359 tinta o
   ::before (círculo decorativo de 96px no canto do card, ::before base sem
   background próprio) com rgba verde/azul/amarelo/roxo a 8% conforme a
   variante (.green/.blue/.yellow/.purple) — 4 cores de status vazando,
   mesmo critério de "nenhuma cor de módulo sobrevive" já aplicado no
   resto do arquivo. O blanket de pseudo-elemento (Important 3) só zera
   radius/shadow, não background; oculta o glow por completo. */
body.admin-brutal .stat-card-new.green::before,
body.admin-brutal .stat-card-new.blue::before,
body.admin-brutal .stat-card-new.yellow::before,
body.admin-brutal .stat-card-new.purple::before {
    background: transparent;
}
body.admin-brutal .stat-card-footer {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:443 dá fundo azul (--color-info) fixo no badge —
   mesma classe de vazamento de cor não-tokenizada que o laranja, neutraliza igual.
   border-color acrescentada na Task 15 (editar-liga.css:129 usa border 1px
   solid #2d2d2d própria, não coberta pelas 2 propriedades originais). */
body.admin-brutal .stat-badge {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .live-indicator {
    background: var(--admin-brutal-accent);
    box-shadow: none;
}

/* ---- Atalhos rápidos ---- */
body.admin-brutal .quick-actions-section {
    background: transparent;
}
body.admin-brutal .quick-actions-title {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
    text-transform: uppercase;
    font-size: 12px;
    letter-spacing: 0.08em;
}
body.admin-brutal .quick-action-card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .quick-action-card:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    /* dashboard-unified.css:282 dá border-color laranja fixo no :hover —
       não coberto pelo background/color acima (propriedades diferentes). */
    border-color: var(--admin-brutal-fg);
}
/* dashboard-unified.css:250,300 dá laranja (#FF5500) fixo pro ícone "bolt"
   do cabeçalho e pros ícones dos cards de atalho — neutralizamos aqui.
   Sem !important: body.admin-brutal .foo .material-icons (3 classes) já
   vence .foo .material-icons (2 classes) por especificidade. */
body.admin-brutal .quick-action-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .quick-action-icon .material-icons,
body.admin-brutal .quick-actions-header .material-icons {
    color: currentColor;
}
body.admin-brutal .quick-action-label {
    color: var(--admin-brutal-fg);
    font-weight: 700;
}
body.admin-brutal .quick-action-description {
    color: inherit;
    opacity: 0.65;
}
/* CRÍTICO — hover no tema ESCURO: .quick-action-icon acima tem color própria
   incondicional (--admin-brutal-fg), que NÃO é substituída pela herança do
   :hover do card (mesmo token teria o mesmo hex no dark = ícone invisível
   sobre o fundo do hover). Mesmo problema pro label, que só herdava #fff do
   dashboard-unified.css. Sobrescreve os 3 diretamente no estado :hover,
   forçando a cor de fundo normal (que contrasta com --admin-brutal-fg usado
   como fundo do hover). */
body.admin-brutal .quick-action-card:hover .material-icons,
body.admin-brutal .quick-action-card:hover .quick-action-label,
body.admin-brutal .quick-action-card:hover .quick-action-description {
    color: var(--admin-brutal-bg);
}

/* ---- Busca ---- */
body.admin-brutal .search-section-new {
    border: 2px solid var(--admin-brutal-border);
    background: var(--admin-brutal-bg);
}
body.admin-brutal .search-input-new {
    background: transparent;
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
/* dashboard-redesign.css:485 dá border-color laranja no :focus */
body.admin-brutal .search-input-new:focus {
    border-color: var(--admin-brutal-fg);
}

/* ---- Cards de liga ---- */
body.admin-brutal .liga-card-featured,
body.admin-brutal .liga-card-new,
body.admin-brutal .liga-card-create {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .liga-card-featured-content h3,
body.admin-brutal .liga-card-new h4 {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
    font-weight: 800;
}
/* dashboard-redesign.css:817-819 pinta o h4 de laranja no hover
   (.liga-card-new:hover h4) — neutralizamos aqui. */
body.admin-brutal .liga-card-new:hover h4 {
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:591 e :938 pintam ícone laranja fixo (card
   em destaque + card "criar liga") e no hover do "criar liga". */
body.admin-brutal .liga-icon-large .material-icons,
body.admin-brutal .liga-card-create-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-card-create:hover .liga-card-create-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-tag {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
    border-radius: 0;
}
body.admin-brutal .btn-liga-details,
body.admin-brutal .liga-card-link {
    border: 2px solid var(--admin-brutal-border);
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-liga-details:hover,
body.admin-brutal .liga-card-link:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Toggle de tema ---- */
body.admin-brutal #adminThemeToggle {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal #adminThemeToggle:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* dashboard-redesign.css:274-276 (".btn-secondary-new .material-icons")
   pinta o ícone interno de cinza fixo com especificidade de 2 classes — maior
   que a de um seletor de id sozinho não existiria, mas #adminThemeToggle é o
   BOTÃO, não o ícone; o <span id="adminThemeIcon"> filho não herdava a cor
   certa porque aquela regra de classe vencia a herança. Alvo direto por id
   (especificidade maior) resolve nos dois estados via currentColor. */
body.admin-brutal #adminThemeIcon {
    color: currentColor;
}

/* ---- Loading / Empty states (ilhas escuras remanescentes) ---- */
/* .loading-container-new e .empty-state-new já herdam fundo correto via
   remap de --surface-card no topo do arquivo — aqui só neutralizamos cores
   hardcoded/laranja que não passam por variável de superfície. */
body.admin-brutal .loading-spinner-new {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
body.admin-brutal .empty-icon-new {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .empty-icon-new .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .empty-action-new {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .empty-action-new:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Saúde do Sistema ---- */
/* dashboard-unified.css:119 pinta o ícone de "toggle" de laranja fixo quando
   a seção está aberta (.health-section.open) — não coberto pelo remap de
   tokens (é cor hardcoded, não variável). */
body.admin-brutal .health-section.open .health-toggle-icon {
    color: var(--admin-brutal-fg);
}

/* ---- Modais (Histórico de Acessos / Perfil) ---- */
/* O remap de --surface-card/--surface-card-elevated no topo deste arquivo
   corrige o fundo desses modais no tema claro, mas dashboard-redesign.css
   também fixa `color: white`/`#fff`/`#e5e7eb` hardcoded nesses mesmos
   blocos (:2809-2818, :1898-1903, :1965-1968) — sem isto, texto branco
   sobre o fundo agora claro do modal fica ilegível. */
body.admin-brutal .modal-historico-filtros select {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-perfil-header h2,
body.admin-brutal .modal-perfil-item span {
    color: var(--admin-brutal-fg);
}

/* === STYLE.CSS — componentes genéricos ===
   style.css (public/style.css) é carregado por 24 das ~26 telas do admin
   (via admin-shell.css @import ou <link> direto — ver css-registry.json).
   Cobertura aqui aplica de uma vez a todo o rollout: botões, cards,
   tabelas, formulários, alertas, container, loading e headings genéricos
   que style.css define no escopo raiz (não específicos de nenhuma tela).
   Nenhum !important necessário — grep em public/style.css confirmou que
   nenhuma destas propriedades usa !important nesses seletores. */

/* ---- Botões genéricos ---- */
body.admin-brutal .btn,
body.admin-brutal button,
body.admin-brutal .action-btn {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .btn:hover,
body.admin-brutal button:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .btn.active,
body.admin-brutal button.active {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}

/* ---- Cards genéricos (liga/time/stat) ---- */
body.admin-brutal .liga-card,
body.admin-brutal .time-card,
body.admin-brutal .stat-card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
/* style.css:435-444 usa ::before como friso decorativo gradiente laranja no
   topo do card — vira friso sólido monocromático (mesma cor de fg). */
body.admin-brutal .liga-card::before {
    background: var(--admin-brutal-fg);
    box-shadow: none;
}
body.admin-brutal .liga-card:hover {
    border-color: var(--admin-brutal-fg);
    background: var(--admin-brutal-bg);
}

/* ---- Tabelas genéricas ---- */
body.admin-brutal table,
body.admin-brutal .ranking-table,
body.admin-brutal .mata-mata-table {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
/* FIX (review final, item menor): antes era um único seletor combinado
   `th, td { color: fg }` seguido de `th { background: fg; color: bg }` —
   ambos com a MESMA especificidade (0,1,2), o segundo só vencia por vir
   depois no arquivo. Correto hoje, mas fragilizado a qualquer reordenação
   futura (um th genérico viraria fg-sobre-fg). Split elimina a colisão de
   propriedade: `td` nunca teve `background`/`color` de `th` pra perder,
   `th` nunca herda o `color: fg` do grupo antigo — cada seletor governa
   suas próprias propriedades, sem depender de ordem no arquivo. */
body.admin-brutal td {
    border-bottom: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal th {
    border-bottom: 2px solid var(--admin-brutal-border);
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal tbody tr:hover {
    background: var(--admin-brutal-fg);
}
body.admin-brutal tbody tr:hover td {
    color: var(--admin-brutal-bg);
}
/* style.css:488-490 dá listra sutil branca translúcida nas linhas pares —
   sem cor própria de superfície, não precisa de remap; zera o vazamento. */
body.admin-brutal tr:nth-child(even) {
    background: transparent;
}

/* ---- Formulários genéricos ---- */
body.admin-brutal input,
body.admin-brutal select,
body.admin-brutal .search-input {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal input:focus,
body.admin-brutal select:focus {
    border-color: var(--admin-brutal-accent);
    background: var(--admin-brutal-bg);
}
body.admin-brutal input::placeholder {
    color: var(--admin-brutal-muted);
}

/* ---- Alertas genéricos ----
   style.css:612-634 dá cor semântica (verde/laranja/vermelho/azul) a cada
   variante — colapsa pra monocromático, seguindo o mesmo precedente já
   aplicado a .stat-badge acima (spec §4: ícones/cores recolorem
   monocromáticos, nunca cor de status/módulo). */
body.admin-brutal .alert,
body.admin-brutal .alert-success,
body.admin-brutal .alert-warning,
body.admin-brutal .alert-error,
body.admin-brutal .error-message,
body.admin-brutal .alert-info {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Container genérico ---- */
body.admin-brutal .container {
    background: transparent;
}

/* ---- Loading genérico ---- */
body.admin-brutal .loading {
    color: var(--admin-brutal-fg);
}
/* style.css:665-675 define border-radius:50% no ::after — círculo do spinner
   de loading, exceção intencional. Antes do blanket de pseudo-elemento
   (Important 3, ver acima) isso já era um blind spot deliberado do
   `body.admin-brutal * { border-radius: 0 !important }` original (que não
   alcança ::before/::after). Agora que o blanket NOVO cobre ::before/::after
   também, precisa de `!important` explícito aqui pra reabrir a exceção —
   sem isso o spinner virava quadrado. */
body.admin-brutal .loading::after {
    border-radius: 50% !important;
}
body.admin-brutal .loading::after,
body.admin-brutal .loading-spinner {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}

/* ---- Headings genéricos ---- */
body.admin-brutal h1,
body.admin-brutal h2,
body.admin-brutal h3,
body.admin-brutal h4 {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
/* style.css:707-708 pinta h2 de laranja com glow via text-shadow — zero
   glow no brutalismo (spec §4: zero decoração orgânica), não é box-shadow
   então não é coberto pela regra global de :not(:focus-visible). */
body.admin-brutal h2 {
    text-shadow: none;
}

/* ---- Tabs genéricas ---- */
body.admin-brutal .tabs {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .tab {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .tab.active {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .tab:not(.active):hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}

/* === SUPER-MODAL.CSS — shell de modal & toast (13 telas) ===
   Grep de "!important" e de "::before"/"::after" em super-modal.css inteiro
   (9284 bytes): NENHUMA ocorrência de nenhum dos dois — arquivo mais limpo
   que style.css/dashboard-redesign.css, nenhuma regra abaixo precisou de
   !important e não há blind spot de pseudo-elemento pra cobrir aqui.
   .super-toast e .super-modal usam var(--surface-card-elevated) e
   var(--text-primary) — já chegam corretos de graça via remap de tokens no
   topo deste arquivo (linhas 17-22). As regras abaixo cobrem só o que NÃO
   passa por essas variáveis: cores fixas (rgba hardcoded), var(--text-muted)/
   var(--text-secondary)/var(--text-disabled) (não remapeadas) e cores
   semânticas de status (verde/laranja/vermelho/azul) — colapsadas a
   monocromático, mesmo precedente do .alert-success/warning/error/info e do
   .stat-badge já aplicado na Task 3. */

/* ---- Toasts ---- */
/* border-left é a ÚNICA borda original (demais lados sem borda) — box-shadow
   (única fonte de "flutuação" restante) é zerado pela regra global
   *:not(:focus-visible), então sem borda nos outros 3 lados o toast ficaria
   sem contorno sobre um fundo (--surface-card-elevated) que aqui é idêntico
   ao bg da página. Acrescenta borda completa 2px + widen do lado esquerdo
   pra 4px, preservando a hierarquia visual original (aviso à esquerda). */
body.admin-brutal .super-toast {
    border: 2px solid var(--admin-brutal-border);
    border-left: 4px solid var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .super-toast__close {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .super-toast__close:hover {
    background: var(--admin-brutal-border);
}
/* Variantes de tipo (success/error/warning/info) colapsam pra monocromático —
   mesmo precedente do .alert-* da Task 3: nenhuma cor semântica de status
   sobrevive no admin-brutal. */
body.admin-brutal .super-toast--success,
body.admin-brutal .super-toast--error,
body.admin-brutal .super-toast--warning,
body.admin-brutal .super-toast--info {
    border-left-color: var(--admin-brutal-border);
}
body.admin-brutal .super-toast--success .super-toast__icon,
body.admin-brutal .super-toast--error .super-toast__icon,
body.admin-brutal .super-toast--warning .super-toast__icon,
body.admin-brutal .super-toast--info .super-toast__icon {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .super-toast--success .super-toast__progress,
body.admin-brutal .super-toast--error .super-toast__progress,
body.admin-brutal .super-toast--warning .super-toast__progress,
body.admin-brutal .super-toast--info .super-toast__progress {
    background: var(--admin-brutal-fg);
}

/* ---- Modal shell ----
   .super-modal-backdrop não entra: background rgba(0,0,0,.6) + blur já
   escurecem igual nos dois temas do admin-brutal (fundo claro ou escuro),
   mesmo efeito funcional — fora do escopo de cor/borda desta task. */
/* Mesmo raciocínio do .super-toast acima: bg = --surface-card-elevated =
   --admin-brutal-bg (idêntico ao fundo da página) + box-shadow zerado
   globalmente = modal sem contorno próprio. Borda 3px, mesma espessura dos
   outros blocos estruturais do shell (sidebar, header). */
body.admin-brutal .super-modal {
    border: 3px solid var(--admin-brutal-border);
}
body.admin-brutal .super-modal__icon-wrapper {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
/* 4 variantes (--default/--danger/--warning/--info) colapsam ícone/cor pra
   monocromático — mesmo precedente acima; nenhuma mantém tom próprio. */
body.admin-brutal .super-modal--default .super-modal__icon-wrapper,
body.admin-brutal .super-modal--danger .super-modal__icon-wrapper,
body.admin-brutal .super-modal--warning .super-modal__icon-wrapper,
body.admin-brutal .super-modal--info .super-modal__icon-wrapper {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .super-modal__title {
    font-family: var(--admin-brutal-font-sys);
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
/* var(--text-muted) não é remapeada no topo do arquivo (só --text-primary
   é) — sem isto o texto ficaria cinza fixo (#a0a0a0), sem contraste correto
   no tema claro. */
body.admin-brutal .super-modal__message {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-muted);
}
/* border original é rgba(255,255,255,.15) hardcoded (só funciona no dark) —
   troca pra borda sólida quadrada, convenção dos inputs genéricos (Task 3). */
body.admin-brutal .super-modal__input {
    border: 2px solid var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .super-modal__input:focus {
    border-color: var(--admin-brutal-accent);
}
/* var(--text-disabled) não é remapeada — mesmo motivo do __message acima. */
body.admin-brutal .super-modal__input::placeholder {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .super-modal__btn {
    font-family: var(--admin-brutal-font-sys);
    border: 2px solid var(--admin-brutal-border);
}
/* var(--text-secondary) não é remapeada — mesmo motivo do __message acima. */
body.admin-brutal .super-modal__btn--cancel {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .super-modal__btn--cancel:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* Confirm = CTA primário, mesma convenção do .btn-primary-new/.empty-action-new
   (acento amarelo + ink), não é cor semântica de status. */
body.admin-brutal .super-modal__btn--confirm {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}
body.admin-brutal .super-modal__btn--confirm:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
/* .super-modal--danger é variante de status (destrutivo) — colapsa pra
   monocromático, mesmo precedente do .alert-error/.stat-badge: nenhuma
   variante semântica mantém cor própria no admin-brutal. */
body.admin-brutal .super-modal--danger .super-modal__btn--confirm {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .super-modal--danger .super-modal__btn--confirm:hover {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}

/* === DASHBOARD-REDESIGN.CSS — classes remanescentes (rollout, ~20 telas) ===
   O piloto (layout.html + painel.html) já cobriu sidebar shell, dashboard
   header básico, stat cards, quick actions, busca e liga-card-featured/
   new/create básicos (ver blocos acima). Esta seção cobre o restante do
   arquivo: botões, sub-partes do header, estados loading/error/empty,
   histórico de acessos, detalhes de card de liga, mercado-dot, stat-box,
   modais de histórico/perfil e sub-partes do sidebar ainda não tocadas.
   Confirmação de uso real (painel.html/layout.html/historico-acessos.html/
   fluxo-financeiro.html/gerenciar.html) e ausência de !important nessas
   regras: ver .superpowers/sdd/2026-08-02-admin-brutalismo-rollout/
   task-5-report.md. Classes mortas (só existem no CSS, sem HTML/JS que as
   use) FORAM DELIBERADAMENTE OMITIDAS: liga-card-avatars, sidebar-badge,
   sidebar-divider, sidebar-section-title-new, sidebar-sub-accordion*,
   sidebar-accordion-badge. */

/* ---- Botões ---- */
body.admin-brutal .btn-carregar-mais {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-carregar-mais:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-modal-secondary {
    border: 2px solid var(--admin-brutal-border);
    background: transparent;
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:1990 pinta borda/texto laranja no hover */
body.admin-brutal .btn-modal-secondary:hover {
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}

/* ---- Dashboard header (sub-partes remanescentes) ---- */
body.admin-brutal .dashboard-header-separator {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dashboard-header-progress {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
/* dashboard-redesign.css:188-210 dá cor semântica (laranja/vermelho/azul/
   verde) a cada variante — colapsa pra monocromático, mesmo precedente do
   .alert-success/warning/error/info já aplicado na Task 3. */
body.admin-brutal .dashboard-alert.alert-warning,
body.admin-brutal .dashboard-alert.alert-danger,
body.admin-brutal .dashboard-alert.alert-info,
body.admin-brutal .dashboard-alert.alert-success {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Loading / Error / Empty (variante -new, texto) ---- */
body.admin-brutal .loading-text-new,
body.admin-brutal .empty-title-new {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .loading-subtitle-new,
body.admin-brutal .empty-subtitle-new,
body.admin-brutal .error-message-new {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:993 borda vermelha fixa no container de erro —
   colapsa pra monocromático (mesmo precedente do .alert-error). */
body.admin-brutal .error-container-new {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .error-icon-new {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .error-icon-new .material-icons,
body.admin-brutal .error-title-new {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .retry-btn-new {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .retry-btn-new:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Histórico de acessos (painel.html) ---- */
body.admin-brutal .historico-item {
    background: transparent;
}
/* dashboard-redesign.css:2913 dá wash branco translúcido no hover — mesmo
   vazamento zerado em tr:nth-child(even) acima. */
body.admin-brutal .historico-item:hover {
    background: transparent;
}
/* .historico-avatar não tinha borda própria — bg vem de --surface-card-
   elevated, remapeado pro mesmo tom da página no topo do arquivo, então sem
   borda o círculo (virado quadrado pelo radius:0 global) fica invisível. */
body.admin-brutal .historico-avatar {
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .historico-avatar .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .historico-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .historico-liga,
body.admin-brutal .historico-ultimo {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:2984 pinta o contador de acessos de laranja fixo. */
body.admin-brutal .historico-acessos {
    color: var(--admin-brutal-fg);
}

/* ---- Cards de liga (detalhes remanescentes) ---- */
body.admin-brutal .liga-section-title {
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:516-524 pinta a barrinha de destaque de laranja. */
body.admin-brutal .liga-section-title .accent-bar {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .liga-section-title .accent-bar.gray {
    background: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:527-543 dá cor semântica (verde ativo/cinza
   encerrada) — colapsa monocromático, mesmo precedente do .liga-tag já
   coberto acima. */
body.admin-brutal .liga-status-badge.active,
body.admin-brutal .liga-status-badge.finished {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* h4 aqui teria empate de especificidade com o "body.admin-brutal h4"
   genérico (mesma contagem: 1 classe + 1 tag) — alvo direto garante a
   vitória independente da ordem de carga, além de trocar a fonte brand
   (Russo One) pela fonte de sistema, mesmo precedente do dashboard-header-
   greeting h2 acima. */
body.admin-brutal .liga-card-info h4 {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-card-info p,
body.admin-brutal .liga-card-date,
body.admin-brutal .liga-update-info {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:675 pinta o rodapé do card em destaque com cor
   hardcoded (#18181b) — a variável --surface-card-hover da borda já está
   remapeada no topo do arquivo, só o fundo precisa de override. */
body.admin-brutal .liga-card-featured-footer {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .liga-leader-info .leader .material-icons,
body.admin-brutal .liga-leader-info .leader-name {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-leader-info .leader-points {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:774-786: bg/color hardcoded do avatar de card novo
   (a borda já vem correta via --surface-card-hover remapeada). */
body.admin-brutal .liga-card-avatar {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:797-806 dá cor semântica (cinza amistosa / verde
   ativa) — colapsa monocromático. */
body.admin-brutal .liga-card-type-badge.amistosa,
body.admin-brutal .liga-card-type-badge.ativa {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-card-new-footer {
    border-top-color: var(--admin-brutal-border);
}

/* ---- Indicador de mercado (painel.html) ---- */
/* dashboard-redesign.css:76-98 usa cor semântica por estado (verde aberto/
   vermelho fechado/laranja encerrado) + glow via box-shadow (já zerado pela
   regra global). Colapsa: aberto = destaque (fg), demais = neutro (muted) —
   mesmo precedente de "nunca cor de status" aplicado ao .stat-badge. */
body.admin-brutal .mercado-dot {
    background: var(--admin-brutal-muted);
}
body.admin-brutal .mercado-dot.aberto {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .mercado-dot.fechado,
body.admin-brutal .mercado-dot.encerrado {
    background: var(--admin-brutal-muted);
}

/* ---- Stat box (painel.html / historico-acessos.html) ---- */
body.admin-brutal .stat-box {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .stat-box .stat-value {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-box .stat-label {
    color: var(--admin-brutal-muted);
}

/* ---- Modal Histórico (painel.html) ---- */
/* .modal-historico-overlay não entra: rgba(0,0,0,.85) já escurece igual nos
   dois temas do admin-brutal, mesmo raciocínio do .super-modal-backdrop. */
body.admin-brutal .modal-historico-content {
    background: var(--admin-brutal-bg);
    border: 3px solid var(--admin-brutal-border);
}
/* dashboard-redesign.css:2757 dá gradiente laranja fixo no cabeçalho do
   modal — vira header neutro com borda, mesmo padrão do dashboard-header. */
body.admin-brutal .modal-historico-header {
    background: transparent;
    border-bottom: 3px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-historico-title {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-historico-close {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-historico-close:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .modal-historico-periodo {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modal-historico-stats {
    border-bottom-color: var(--admin-brutal-border);
}
/* dashboard-redesign.css:2878-2900: regra combinada loading/empty/error —
   texto neutro; ícone de erro (laranja/vermelho original) vira monocromático. */
body.admin-brutal .modal-historico-loading,
body.admin-brutal .modal-historico-empty,
body.admin-brutal .modal-historico-error {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modal-historico-error .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-historico-footer {
    border-top-color: var(--admin-brutal-border);
}

/* ---- Modal Perfil (layout.html) ---- */
/* .modal-perfil-overlay não entra: mesmo raciocínio do backdrop acima.
   .modal-perfil-header/.modal-perfil-item já cobertos no piloto (linhas
   499-502) — aqui só o restante da família. */
body.admin-brutal .modal-perfil-content {
    border: 3px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-perfil-close {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-perfil-close .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modal-perfil-close:hover {
    background: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:1871 pinta o ícone de laranja no hover — sem
   sobrescrever, ficaria ilegível sobre o fundo invertido acima. */
body.admin-brutal .modal-perfil-close:hover .material-icons {
    color: var(--admin-brutal-bg);
}
/* dashboard-redesign.css:1883 dá gradiente laranja + glow (glow já zerado
   pela regra global de box-shadow) no avatar do modal de perfil. */
body.admin-brutal .modal-perfil-avatar {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-perfil-avatar .material-icons {
    color: var(--admin-brutal-fg);
}
/* dashboard-redesign.css:1915-1923 dá cor por papel (azul admin / laranja
   super-admin) — colapsa monocromático. */
body.admin-brutal .modal-perfil-badge.admin,
body.admin-brutal .modal-perfil-badge.super-admin {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Sidebar (sub-partes remanescentes, layout.html) ---- */
/* .sidebar-liga-item é <a> dentro de <nav class="sidebar ...">, mesmo motivo
   de !important do .sidebar-menu-item acima (style.css:383-393 força color
   !important em ambos os estados, base e :hover). */
body.admin-brutal .sidebar-liga-item {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .sidebar-liga-item:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .sidebar-temporada-header {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .sidebar-temporada-header:hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-temporada-content {
    border-left-color: var(--admin-brutal-border);
}
/* dashboard-redesign.css:1691-1697: ponto verde + borda preta hardcoded —
   vira indicador monocromático com "anel" na cor do fundo (recorte visual). */
body.admin-brutal .sidebar-user-status-dot {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-bg);
}
body.admin-brutal .sidebar-ligas-loading {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .sidebar-ligas-loading .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-temporadas-toggle {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:2550/2557: wash branco translúcido no estado aberto
   e no hover (a cor do texto no estado aberto já vem de --text-primary,
   remapeada no topo do arquivo — só o fundo precisa de override aqui). */
body.admin-brutal .sidebar-temporadas-wrapper.open .sidebar-temporadas-toggle,
body.admin-brutal .sidebar-temporadas-toggle:hover {
    background: transparent;
}
body.admin-brutal .sidebar-temporadas-toggle:hover {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-temporadas-arrow {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .sidebar-temporadas-wrapper.open .sidebar-temporadas-arrow {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-accordion-action {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-accordion-action:hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-submenu-divider {
    background: var(--admin-brutal-border);
}
body.admin-brutal .sidebar-admin-section {
    border-top-color: var(--admin-brutal-border);
}
/* dashboard-redesign.css:2691 força !important no ícone do título — precisa
   de !important equivalente pra vencer. */
body.admin-brutal .sidebar-admin-section .sidebar-accordion-title .material-icons {
    color: var(--admin-brutal-fg) !important;
}

/* ---- Usuários online (painel.html) ---- */
body.admin-brutal .usuarios-online-empty {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .usuario-online-item,
body.admin-brutal .usuario-online-item:hover {
    background: transparent;
}
/* mesmo raciocínio do .historico-avatar acima: bg remapeado pro tom da
   página, sem borda o círculo (virado quadrado) fica invisível.
   background acrescentado na Task 15 (historico-acessos.css:131-140 usa
   fundo #333 hardcoded, sem passar por variável de superfície). */
body.admin-brutal .usuario-avatar {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .usuario-avatar .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .usuario-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .usuario-liga,
body.admin-brutal .usuario-tempo {
    color: var(--admin-brutal-muted);
}
/* dashboard-redesign.css:2227-2234: badge verde fixo (nome do módulo) —
   colapsa monocromático, mesmo precedente das demais badges acima. */
body.admin-brutal .usuario-modulo {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Liga dot (sidebar, indicador de status — layout.html) ---- */
/* dashboard-redesign.css:1451/1456/1586/1590-1591/1622: cor idle e variantes
   (hover laranja via --color-primary, aposentada cinza fixo, arquivada e
   histórico) não vêm de nenhum token remapeado no topo do arquivo — gap real
   de auditoria, sempre visível na lista de ligas do sidebar. */
body.admin-brutal .sidebar-liga-item .liga-dot {
    background: var(--admin-brutal-muted);
}
body.admin-brutal .sidebar-liga-item:hover .liga-dot {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .sidebar-liga-item.aposentada .liga-dot,
body.admin-brutal .sidebar-liga-item.aposentada .liga-dot.archived {
    background: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
/* dashboard-redesign.css:1622 força !important laranja — precisa de
   !important equivalente pra vencer. */
body.admin-brutal .liga-dot.historico {
    background: var(--admin-brutal-muted) !important;
}

/* ---- Sidebar accordion — estado idle (layout.html) ---- */
/* dashboard-redesign.css:2298/2310/2322: cor idle usa --text-dim, token sem
   variante de light mode — hover/active/admin-section já cobertos acima,
   mas o estado de repouso (o mais visto) ficava sem override. */
body.admin-brutal .sidebar-accordion-title,
body.admin-brutal .sidebar-accordion-title .material-icons,
body.admin-brutal .sidebar-accordion-arrow {
    color: var(--admin-brutal-muted);
}

/* ---- Scrollbars residuais (thumb colorido hardcoded) ---- */
/* dashboard-redesign.css:1332-1335 (laranja via --color-primary) e
   :2122-2124 (verde rgba(16,185,129,.5)) — cor de marca vazando na barra de
   rolagem de dois componentes do sidebar/painel. */
body.admin-brutal .sidebar-nav-new::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}
body.admin-brutal .usuarios-online-lista::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}

/* === LAYOUT-HORIZONTAL.CSS — auditoria (rollout, 3 telas: analisar-participantes,
   criar-liga, ferramentas-rodadas) ===
   Arquivo lido por inteiro (376 linhas): 100% grid/flex/spacing/max-width/padding —
   ZERO propriedade de cor/fundo/borda/sombra em qualquer seletor com uso real em
   HTML/JS. O único bloco do arquivo com cor é `.tabs-horizontal`/`.tab-horizontal`
   (linhas 132-161: border-bottom #2d2d2d, color #9ca3af/#d1d5db, color+border-bottom
   #FF5500 no `.active`) — grep de "tab-horizontal" em todo `public/` (não só nas 3
   telas-alvo) não encontra NENHUM uso em `.html`/`.js`, só a própria definição CSS
   (+ override de scroll mobile em admin-mobile-responsive.css, também sem cor):
   dead code, mesmo critério já documentado na Task 5 (liga-card-avatars,
   sidebar-badge etc.) — DELIBERADAMENTE OMITIDO, nenhuma regra nova precisa ser
   escrita aqui. As 3 telas herdam toda cor/fundo/borda/sombra de
   style.css/dashboard-redesign.css/super-modal.css, já cobertos nos blocos
   acima — verificado via Playwright com `admin-brutal.css` + `body.admin-brutal`
   aplicados temporariamente em analisar-participantes.html (revertido antes do
   commit). Nenhum novo seletor `body.admin-brutal .*` nesta seção. */

/* === GERENCIAR.CSS — reskin (Task 7: gerenciar.html, gerenciar-modulos.html,
   detalhe-liga.html) ===
   Arquivo lido por inteiro (1626 linhas). `.modal-dialog`/`.btn-close` daqui são
   modais BOOTSTRAP escopados por ID (#modalConfigModulo etc.) — família de
   nomes totalmente diferente de `.super-modal`/`.super-toast` (Task 4), sem
   nenhuma sobreposição real (grep confirmou zero ocorrência de `.modal-dialog`,
   `.modal-body` ou `.btn-close` em admin-brutal.css e em dashboard-redesign.css).
   `.btn-modal-secondary` (Modal Premium, seção mais abaixo) já está coberto
   genericamente pela Task 5 (linhas 831-840 acima) — não duplicado aqui.
   `.loading-spinner` já está coberto pela regra genérica da Task 1 (linhas
   627-631) — não duplicado. Classes puramente de layout (grid/flex/padding/
   margin/transform/animation-delay, sem cor/fundo/borda/sombra) foram
   deliberadamente omitidas: `.gerenciar-content`/`.modulos-content`,
   `.modulos-grid`, `.stats-bar`, `.search-container`, `.liga-actions`,
   `.loading-state`/`.empty-state`, `.modulo-card-header`/`.modulo-card-info`,
   `.toggle-switch`/`.toggle-switch input`, `.edicoes-ranges`/
   `.edicao-range-body`, `#previewValores small`, `.modal-header-content`/
   `.modal-title-group`/`.modal-loading`, e todo o bloco `@media (max-width:
   768px)` (só flex-direction/min-width/padding/border-radius:0 redundante com
   o wildcard global). `.modal-body` (bare, linhas 1438-1442 do arquivo-fonte)
   é 100% layout (flex/overflow/padding, zero cor) — precedente idêntico ao já
   registrado na Task 6 para layout-horizontal.css. `.bg-gray-800/900/700`
   (already `transparent !important`) e `.text-white` (já usa
   `var(--text-primary)`, remapeado automaticamente no topo do arquivo) não
   precisam de override — já compatíveis nos dois temas. */

/* ---- Modais Bootstrap (#modalConfigModulo / #modalWizardModulo /
   #modalConfigModulos / #modalDesativarModulo) ---- */
body.admin-brutal #modalConfigModulo .modal-content,
body.admin-brutal #modalWizardModulo .modal-content,
body.admin-brutal #modalConfigModulos .modal-content,
body.admin-brutal #modalDesativarModulo .modal-content {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .modal-header,
body.admin-brutal #modalConfigModulo .modal-footer,
body.admin-brutal #modalWizardModulo .modal-header,
body.admin-brutal #modalWizardModulo .modal-footer,
body.admin-brutal #modalConfigModulos .modal-header,
body.admin-brutal #modalConfigModulos .modal-footer,
body.admin-brutal #modalDesativarModulo .modal-header,
body.admin-brutal #modalDesativarModulo .modal-footer {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .modal-body,
body.admin-brutal #modalWizardModulo .modal-body,
body.admin-brutal #modalConfigModulos .modal-body,
body.admin-brutal #modalDesativarModulo .modal-body {
    background: var(--admin-brutal-bg);
}
/* color já vem correto via var(--text-primary) remapeada no topo do arquivo —
   só a fonte (Russo One hardcoded) precisa de override. */
body.admin-brutal #modalConfigModulo .modal-title,
body.admin-brutal #modalWizardModulo .modal-title,
body.admin-brutal #modalConfigModulos .modal-title,
body.admin-brutal #modalDesativarModulo .modal-title {
    font-family: var(--admin-brutal-font-sys);
}
/* .btn-close é o X padrão do Bootstrap (imagem SVG escura + filter:invert(1)
   pra ficar branca em modal escuro). Fundo do modal aqui vira
   --admin-brutal-bg (branco no tema claro) — com invert(1) o X ficaria branco
   sobre fundo branco (invisível). Neutraliza o invert por padrão (X escuro,
   correto no tema claro) e só reaplica invert no tema escuro, via o mesmo
   atributo `data-admin-theme` que _admin-tokens.css usa para trocar os tokens
   (linha 807) — única exceção do arquivo a não resolver via token, por ser
   filter sobre asset de imagem, não cor. */
body.admin-brutal #modalConfigModulo .btn-close,
body.admin-brutal #modalWizardModulo .btn-close,
body.admin-brutal #modalConfigModulos .btn-close,
body.admin-brutal #modalDesativarModulo .btn-close {
    filter: none;
    opacity: 0.7;
}
:root[data-admin-theme="dark"] body.admin-brutal #modalConfigModulo .btn-close,
:root[data-admin-theme="dark"] body.admin-brutal #modalWizardModulo .btn-close,
:root[data-admin-theme="dark"] body.admin-brutal #modalConfigModulos .btn-close,
:root[data-admin-theme="dark"] body.admin-brutal #modalDesativarModulo .btn-close {
    filter: invert(1);
}
body.admin-brutal #modalConfigModulo .form-label,
body.admin-brutal #modalWizardModulo .form-label,
body.admin-brutal #modalConfigModulos .form-label {
    color: var(--admin-brutal-muted);
}
/* mirror de gerenciar.css:131 (`color: var(--text-muted) !important`) —
   var(--text-muted) não é remapeada no topo do arquivo. */
body.admin-brutal #modalConfigModulo .text-muted,
body.admin-brutal #modalWizardModulo .text-muted,
body.admin-brutal #modalConfigModulos .text-muted,
body.admin-brutal #modalDesativarModulo .text-muted {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal #modalConfigModulo .form-control,
body.admin-brutal #modalConfigModulo .form-select,
body.admin-brutal #modalConfigModulo .input-group-text,
body.admin-brutal #modalWizardModulo .form-control,
body.admin-brutal #modalWizardModulo .form-select,
body.admin-brutal #modalWizardModulo .input-group-text,
body.admin-brutal #modalConfigModulos .form-control,
body.admin-brutal #modalConfigModulos .form-select,
body.admin-brutal #modalConfigModulos .input-group-text {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .form-control::placeholder,
body.admin-brutal #modalWizardModulo .form-control::placeholder,
body.admin-brutal #modalConfigModulos .form-control::placeholder {
    color: var(--admin-brutal-muted);
}
body.admin-brutal #modalConfigModulo .form-control:focus,
body.admin-brutal #modalConfigModulo .form-select:focus,
body.admin-brutal #modalWizardModulo .form-control:focus,
body.admin-brutal #modalWizardModulo .form-select:focus,
body.admin-brutal #modalConfigModulos .form-control:focus,
body.admin-brutal #modalConfigModulos .form-select:focus {
    border-color: var(--admin-brutal-accent);
}
body.admin-brutal #modalConfigModulo .form-check-input,
body.admin-brutal #modalWizardModulo .form-check-input,
body.admin-brutal #modalConfigModulos .form-check-input {
    background-color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .form-check-input:checked,
body.admin-brutal #modalWizardModulo .form-check-input:checked,
body.admin-brutal #modalConfigModulos .form-check-input:checked {
    background-color: var(--admin-brutal-accent);
    border-color: var(--admin-brutal-accent);
}
body.admin-brutal #modalConfigModulo .card,
body.admin-brutal #modalWizardModulo .card,
body.admin-brutal #modalConfigModulos .card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .card-header,
body.admin-brutal #modalWizardModulo .card-header,
body.admin-brutal #modalConfigModulos .card-header {
    background: transparent;
    border-color: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal #modalConfigModulo .card-body,
body.admin-brutal #modalWizardModulo .card-body,
body.admin-brutal #modalConfigModulos .card-body {
    color: var(--admin-brutal-fg);
}
/* .table (tag genérica) já tem fundo/borda cobertos pela regra genérica da
   Task 1 (linhas 554-559) — só o border-color específico das células (que usa
   var(--color-primary-muted), mais específico por causa do #id ancestral)
   precisa de override próprio. */
body.admin-brutal #modalConfigModulo .table td,
body.admin-brutal #modalWizardModulo .table td,
body.admin-brutal #modalConfigModulos .table td {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .valores-grid,
body.admin-brutal #modalWizardModulo .valores-grid {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
/* mirror de gerenciar.css:269-270 (background/border-color !important). */
body.admin-brutal #modalConfigModulo .valores-grid .input-group-text,
body.admin-brutal #modalWizardModulo .valores-grid .input-group-text {
    background: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
}
/* ::after decorativo (friso gradiente laranja que esmaece) — spec §4 "zero
   decoração orgânica": vira friso sólido, mesmo precedente do .liga-card::before. */
body.admin-brutal #modalConfigModulo .valores-grid::after,
body.admin-brutal #modalWizardModulo .valores-grid::after {
    background: var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .edicao-range-card,
body.admin-brutal #modalWizardModulo .edicao-range-card {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .edicao-range-header,
body.admin-brutal #modalWizardModulo .edicao-range-header {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
}
/* mirror de gerenciar.css:328-329 (background/border-color !important). */
body.admin-brutal #modalConfigModulo .edicao-range-body .input-group-text,
body.admin-brutal #modalWizardModulo .edicao-range-body .input-group-text {
    background: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
}
/* background já vem correto via var(--surface-bg) remapeada no topo — só a
   borda (var(--border-default), não remapeada) precisa de override. */
body.admin-brutal #modalConfigModulo .valores-grid-section,
body.admin-brutal #modalWizardModulo .valores-grid-section {
    border-color: var(--admin-brutal-border);
}
/* zonas ganho/neutra/perda: cor semântica (verde/laranja/vermelho) colapsa
   monocromático, mesmo precedente do .alert-success/warning/error/info. */
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-ganho,
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-neutra,
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-perda,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-ganho,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-neutra,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-perda {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal #modalConfigModulo .valores-grid-section.is-alt,
body.admin-brutal #modalWizardModulo .valores-grid-section.is-alt {
    background: transparent;
}
body.admin-brutal #modalConfigModulo .valores-grid-title,
body.admin-brutal #modalWizardModulo .valores-grid-title {
    font-family: var(--admin-brutal-font-sys);
    color: var(--admin-brutal-fg);
}
/* zonas específicas têm 1 classe a mais que a regra acima (especificidade
   maior) — precisa de override próprio pra não perder pro laranja/verde/vermelho
   original. */
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-ganho .valores-grid-title,
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-neutra .valores-grid-title,
body.admin-brutal #modalConfigModulo .valores-grid-section.zone-perda .valores-grid-title,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-ganho .valores-grid-title,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-neutra .valores-grid-title,
body.admin-brutal #modalWizardModulo .valores-grid-section.zone-perda .valores-grid-title {
    color: var(--admin-brutal-fg);
}
body.admin-brutal #modalConfigModulo .btn-success,
body.admin-brutal #modalWizardModulo .btn-success,
body.admin-brutal #modalConfigModulos .btn-success {
    background: var(--admin-brutal-accent);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-accent-ink);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal #modalConfigModulo .btn-success:hover,
body.admin-brutal #modalWizardModulo .btn-success:hover,
body.admin-brutal #modalConfigModulos .btn-success:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal #modalConfigModulo .btn-secondary,
body.admin-brutal #modalWizardModulo .btn-secondary,
body.admin-brutal #modalConfigModulos .btn-secondary,
body.admin-brutal #modalDesativarModulo .btn-secondary {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal #modalConfigModulo .btn-secondary:hover,
body.admin-brutal #modalWizardModulo .btn-secondary:hover,
body.admin-brutal #modalConfigModulos .btn-secondary:hover,
body.admin-brutal #modalDesativarModulo .btn-secondary:hover {
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
/* mirror de gerenciar.css:453 (border-color !important). */
body.admin-brutal #modalConfigModulo .border-gray-700,
body.admin-brutal #modalConfigModulo .border-gray-600,
body.admin-brutal #modalWizardModulo .border-gray-700,
body.admin-brutal #modalWizardModulo .border-gray-600,
body.admin-brutal #modalConfigModulos .border-gray-700,
body.admin-brutal #modalConfigModulos .border-gray-600,
body.admin-brutal #modalDesativarModulo .border-gray-700,
body.admin-brutal #modalDesativarModulo .border-gray-600 {
    border-color: var(--admin-brutal-border) !important;
}
/* botão de perigo (desativar módulo) — colapsa pro par fg/bg invertido, mesmo
   precedente do .super-modal--danger .super-modal__btn--confirm (Task 4). */
body.admin-brutal #modalDesativarModulo .btn-danger {
    background: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-bg);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal #modalDesativarModulo .btn-danger:hover {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}

/* ---- Layout: header/stats/busca/lista de ligas ---- */
body.admin-brutal .gerenciar-header,
body.admin-brutal .modulos-header {
    border-color: var(--admin-brutal-border);
}
/* ::before — friso gradiente laranja no topo do header, vira friso sólido. */
body.admin-brutal .modulos-header::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .modulos-header-icon {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modulos-version-badge {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .gerenciar-header-info p,
body.admin-brutal .modulos-header-info p {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .liga-name {
    color: var(--admin-brutal-fg);
}
/* background adicionado na Task 8: analisar-participantes.css:47 usa
   `background: #252525` hardcoded (as outras 5 fontes de `.btn-voltar` já
   remapeiam via var() ou usam tint laranja — colapsando aqui também, mesmo
   precedente de "zero decoração orgânica" já aplicado a alerts/badges). */
body.admin-brutal .btn-voltar {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .btn-voltar:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .modulos-stat-chip {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .modulos-stat-chip:hover {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .modulos-stat-label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .stat-chip {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .stat-chip-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .stat-chip-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-chip-label {
    color: var(--admin-brutal-muted);
}
/* .search-input: background/border/color/focus/placeholder já cobertos pela
   regra genérica de formulários (Task 1, linhas 582-597) — é um <input>, o
   seletor genérico de tag já vence por especificidade (tag extra "body"). */
body.admin-brutal .search-icon {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .liga-list {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .liga-item {
    border-bottom-color: var(--admin-brutal-border);
}
/* mesmo precedente do .historico-item:hover / .usuario-online-item:hover:
   neutraliza o wash de cor no hover em vez de inverter (evita texto
   --text-primary remapeado ficar ilegível sobre um fundo também remapeado).
   FIX (review final, Important 1): faltava `!important` e `:focus` — sem
   eles, style.css:346-351 (".liga-item:hover, .liga-item:focus { background:
   var(--sidebar-item-hover) !important; border-left-color: var(--laranja)
   !important; ... }") vencia por !important, mantendo o laranja da marca
   visível na lista de ligas da sidebar (22 telas). NÃO remapeamos
   --sidebar-item-hover/--laranja direto no bloco raiz: --laranja tem 30
   consumidores em style.css (badges, tooltips, spinner, focus rings) — o
   remap global colidiria com overrides pontuais já corretos nesta folha
   (ex.: `.loading-spinner` usa --admin-brutal-accent via seletor próprio,
   linha ~724) e teria risco de regressão alto para blast radius pequeno
   ganho aqui. Override cirúrgico na regra específica, mesma técnica já
   usada em outros pares hover deste arquivo.
   Contraste do resultado: `color` já vem de --text-primary (remapeado pra
   --admin-brutal-fg, linha ~19) sobre background transparent (herda o bg
   da sidebar, --admin-brutal-bg) — nunca fg sobre fg. */
body.admin-brutal .liga-item:hover,
body.admin-brutal .liga-item:focus {
    background: transparent !important;
    border-left-color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .liga-info p {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .btn-edit,
body.admin-brutal .btn-modules,
body.admin-brutal .btn-delete {
    background: transparent;
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .btn-edit:hover,
body.admin-brutal .btn-modules:hover,
body.admin-brutal .btn-delete:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .empty-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .empty-icon .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .empty-title {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .empty-subtitle,
body.admin-brutal .loading-text {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .btn-criar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .btn-criar:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* status-message: 4 variantes semânticas (verde/vermelho/amarelo/azul) colapsam
   monocromático, mesmo precedente do .alert-success/warning/error/info. */
body.admin-brutal .status-message.success,
body.admin-brutal .status-message.error,
body.admin-brutal .status-message.warning,
body.admin-brutal .status-message.info {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .section-title {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .section-title .material-icons {
    color: var(--admin-brutal-fg);
}
/* .section-title h2: cor/fonte já cobertos pela regra genérica de heading
   (Task 1/3, linhas 634-640) — vence por especificidade (tag "body" extra). */
body.admin-brutal .section-title .badge {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Módulo card (grid premium) ---- */
body.admin-brutal .modulo-card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}
body.admin-brutal .modulo-card:hover,
body.admin-brutal .modulo-card.ativo:hover {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .modulo-card.ativo,
body.admin-brutal .modulo-card.base {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .modulo-card.base {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .modulo-icon .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modulo-card.ativo .modulo-icon,
body.admin-brutal .modulo-card.base .modulo-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .modulo-card.ativo .modulo-icon .material-icons,
body.admin-brutal .modulo-card.base .modulo-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .badge-base {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* badge-planned (azul) / badge-no-config (cinza) colapsam monocromático,
   mesmo precedente das demais badges de status neste arquivo. */
body.admin-brutal .badge-planned,
body.admin-brutal .badge-no-config {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modulo-desc {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modulo-planned-note {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modulo-noconfig-note {
    color: var(--admin-brutal-muted);
}

/* ---- Toggle switch ---- */
body.admin-brutal .toggle-slider {
    background-color: var(--admin-brutal-border);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .toggle-slider:before {
    background-color: var(--admin-brutal-bg);
}
body.admin-brutal input:checked + .toggle-slider,
body.admin-brutal .toggle-switch input:disabled + .toggle-slider,
body.admin-brutal .toggle-switch input:disabled:checked + .toggle-slider {
    background-color: var(--admin-brutal-fg);
}
body.admin-brutal input:checked + .toggle-slider:before {
    background-color: var(--admin-brutal-bg);
}
/* badge "Sempre Ativo" (verde) colapsa monocromático. */
body.admin-brutal .badge-always-active {
    color: var(--admin-brutal-fg);
    background-color: transparent;
    border: 2px solid var(--admin-brutal-border);
}

/* ---- Botões de ação / CTA ---- */
body.admin-brutal .action-buttons {
    border-top-color: var(--admin-brutal-border);
}
/* .btn-secondary aqui é o botão genérico (fora de modal, usado no rodapé do
   modulo-card) — seletor diferente do `#modalXxx .btn-secondary` acima
   (contextos de DOM distintos, sem conflito).
   FIX (review final, Critical 2): base.css:144-160 define ESTE MESMO
   `.btn-secondary`/`.btn-primary` bare com `!important` em
   background/border/color (consumido por module-config-modal.js:239,
   modulos-wizard.js:157/199/236, renovacao-modals.js, participantes.js —
   rodapé de modal em detalhe-liga.html, a tela mais usada do admin).
   Sem !important espelhado aqui, base.css vencia e todo botão de rodapé
   de modal renderizava laranja da marca (#FF5500), justo o que a spec
   mais explicitamente remove. !important adicionado só nas propriedades
   de cor/fundo/borda que colidem — border-radius/box-shadow já vêm do
   blanket global (linha ~102-114), nenhum dos dois precisa de !important
   aqui pra vencer o blanket (blanket tem token `body` a mais). */
body.admin-brutal .btn-secondary {
    background: transparent !important;
    color: var(--admin-brutal-fg) !important;
    border-color: var(--admin-brutal-border) !important;
}
body.admin-brutal .btn-secondary:hover {
    background: var(--admin-brutal-fg) !important;
    color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .btn-primary {
    background: var(--admin-brutal-accent) !important;
    color: var(--admin-brutal-accent-ink) !important;
    border: 2px solid var(--admin-brutal-border) !important;
}
body.admin-brutal .btn-primary:hover:not(:disabled) {
    background: var(--admin-brutal-fg) !important;
    color: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .btn-outline {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-outline:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Modal Premium (classes "bare", sem escopo de ID — família usada também
   por outros módulos que injetam o mesmo HTML: fluxo-financeiro, luva-de-ouro,
   participantes, renovação, etc. — cobertura aqui se propaga de graça) ---- */
/* .modal-overlay (rgba(0,0,0,.85)) não entra: já escurece igual nos dois temas,
   mesmo raciocínio do .super-modal-backdrop/.modal-historico-overlay (Task 4/5). */
body.admin-brutal .modal-container {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .modal-header {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .modal-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-title {
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .modal-subtitle {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modal-close {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .modal-close:hover {
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-footer {
    border-top-color: var(--admin-brutal-border);
}
/* .btn-modal-secondary já coberto pela Task 5 (linhas 831-840) — não duplicado. */
body.admin-brutal .btn-modal-primary {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .btn-modal-primary:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Achados de verificação visual (gerenciar-modulos.html): estilo inline
   com var() que nenhuma regra de classe consegue vencer por especificidade.
   Corrigido redefinindo a própria custom property num ancestral — o inline
   `style="background: var(--color-primary-muted)"` passa a resolver pro
   valor redefinido aqui, sem precisar de !important. ---- */
/* gerenciar-modulos.html:50,59,68,77 — 4 ícones da stats bar usam
   `style="background: var(--color-X-muted)"` + `style="color: var(--color-X)"`
   no <span> filho; nenhum dos dois é sobrescrito por nenhuma regra de classe
   (inline sempre vence pra mesma propriedade). Redefine as 6 custom
   properties no escopo do próprio `.modulo-stat-icon`, herdadas pelo
   `.material-icons` filho. */
body.admin-brutal .modulos-stat-icon {
    --color-primary-muted: transparent;
    --color-success-muted: transparent;
    --color-info-muted: transparent;
    --color-primary: var(--admin-brutal-fg);
    --color-success: var(--admin-brutal-fg);
    --color-info: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
}
/* gerenciar-modulos.html:36 — <select id="ligaSelect"> usa
   `style="background: var(--color-surface, #0f172a); color: var(--color-text-
   -primary, #f1f5f9); border: 1px solid var(--color-border, #334155); ..."`.
   Essas 3 custom properties NÃO existem em nenhum lugar de _admin-tokens.css
   (grep confirmou) — o fallback hardcoded (navy escuro) sempre vencia,
   inclusive no tema claro do admin-brutal. Redefine as 3 aqui pra que o
   próprio `var(..., fallback)` do inline pare de cair no fallback. */
body.admin-brutal #ligaSelect {
    --color-surface: var(--admin-brutal-bg);
    --color-text-primary: var(--admin-brutal-fg);
    --color-border: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}

/* === ANALISAR-PARTICIPANTES.CSS — reskin (Task 8: analisar-participantes.html) ===
   Arquivo lido por inteiro (1190 linhas, 26406 bytes). Zero `!important`
   confirmado via grep — nenhuma regra abaixo precisou espelhar `!important`.
   Cobre: header/stats/filtros/tabela de participantes, modal de senha
   (individual e em lote), cards de resumo por liga, e o modal "Data Lake"
   (dump de escalação/desempenho por rodada, prefixo `dl-`).

   Duplicidade verificada (Step 1 do brief): as classes `dl-*` (dl-esc-jogador,
   dl-chart-bar, dl-esc-dot, dl-round-control, dl-esc-pontos-valor etc.) são
   EXCLUSIVAS deste arquivo — grep em todo `public/css` confirmou zero
   ocorrência em qualquer outro módulo. Checado contra `public/detalhe-liga.css`
   E `public/css/modules/detalhe-liga-redesign.css` (ambos existem) — zero
   ocorrência de `dl-*` em qualquer um dos dois; não é componente compartilhado.
   Task 11 pode auditar com confiança que colisão já foi descartada.

   Muitas propriedades usam `var(--surface-card, #1a1a1a)`/`var(--text-primary,
   #fff)`/`var(--surface-card-elevated, #2a2a2a)` com fallback — essas 3
   variáveis JÁ são remapeadas no topo do arquivo (linhas 17-22), então
   resolvem certo de graça, sem precisar de override (mesmo precedente do
   bloco SUPER-MODAL.CSS acima). Só entram abaixo as propriedades que NÃO
   passam por essas variáveis: hardcoded hex puro, `var(--color-primary,
   ...)`, `var(--text-muted, ...)` e `var(--text-secondary, ...)` (nenhuma das
   3 remapeada) e fontes de marca (Russo One) hardcoded.

   Classes puramente de layout omitidas: .analisar-content, .stats-grid,
   .participante-info, .acoes-cell, .ligas-resumo, .dl-round-control-left,
   .dl-body, .dl-desemp-main, .dl-desemp-pontos-box, .dl-desemp-esc-stats,
   .dl-esc-info, .dl-esc-pontos, .dl-esc-grupo-icon, .dl-esc-jogador.reserva
   (opacity, não é cor de tema), .dl-chart-container, .dl-chart-bar-wrap,
   .dl-chart-labels e o bloco `@media` inteiro (grid-template-columns/
   flex-direction/min-width, sem cor/fundo/borda). `.analisar-page` usa
   `var(--surface-bg)`, já remapeada — sem override.

   `.stat-card` (fundo/borda) e `.loading-spinner` já cobertos genericamente
   (Task 1/3, linhas 538-547 e 628-631) — não duplicados, só falta `:hover`
   abaixo. `.filtro-select`/`.filtro-input` (elementos `<select>`/`<input>`)
   e `.modal-field input` já são cobertos pelo genérico `body.admin-brutal
   input, select` (linhas 582-594): a comparação de especificidade favorece o
   genérico (mesma contagem de classes, o genérico ganha por ter mais
   seletores de tag) — confirmado por cálculo, sem necessidade de regra nova
   nem duplicação.

   `.stat-icon`/`.stat-value`/`.stat-label`, `.loading-state`/`.empty-state`,
   `.badge-status`+variantes e `.liga-badge` são bare (sem escopo), a mesma
   convenção já usada pra `.modal-title`/`.liga-status-badge`/`.badge-planned`
   neste arquivo ("família usada também por outros módulos... cobertura aqui
   se propaga de graça") — write bare, documentado. Já confirmado por grep que
   o idioma visual (ícone/label mudo, valor em destaque, badge monocromático)
   é o mesmo nos demais arquivos que compartilham os nomes.

   O modal de senha (`#modalSenha`/`#modalSenhaLote`) usa `.modal-content`/
   `.modal-overlay`/`.modal-title` — nomes que colidem por acaso com modais
   BESPOKE de gerenciar.css/historico-acessos.css/luva-de-ouro.css/
   admin-mobile-responsive.css (HTML e propósito totalmente diferentes, não é
   a família "Modal Premium" das linhas 1792+, cujos nomes são
   `.modal-container`/`.btn-modal-primary` — dash em posição diferente,
   coincidência zero). Por isso aqui vai escopado por ID, mesmo padrão da
   Task 7 (#modalConfigModulo etc.), pra não vazar pros outros 4 modais ainda
   não auditados nesta rollout. `.modal-overlay` (rgba(0,0,0,.7)) fica de
   fora: escurece igual nos dois temas, mesmo raciocínio já registrado pra
   `.modal-overlay` do gerenciar.css/historico-acessos.css (Task 7). */

/* ---- Header ---- */
body.admin-brutal .analisar-header {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .analisar-header-info h1 {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .analisar-header-info p {
    color: var(--admin-brutal-muted);
}

/* ---- Stat cards (stats-grid) ---- */
body.admin-brutal .stat-card:hover {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-icon {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .stat-value {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-label {
    color: var(--admin-brutal-muted);
}
/* variantes semânticas (alerta/perigo/sucesso/info/premium) colapsam
   monocromático — mesmo precedente do .alert-success/warning/error/info e do
   .stat-badge (Task 3). Exclusivas deste arquivo, sem risco de vazamento. */
body.admin-brutal .stat-card.alerta .stat-value,
body.admin-brutal .stat-card.perigo .stat-value,
body.admin-brutal .stat-card.sucesso .stat-value,
body.admin-brutal .stat-card.info .stat-value,
body.admin-brutal .stat-card.premium .stat-value {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-card.premium .stat-icon .material-icons {
    color: var(--admin-brutal-fg);
}

/* ---- Filtros ---- */
body.admin-brutal .filtros-bar {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .filtro-grupo label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .filtro-separator {
    background: var(--admin-brutal-border);
}
body.admin-brutal .btn-filtro-acao {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .btn-filtro-acao:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .btn-filtro-secundario {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .btn-filtro-secundario:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}

/* ---- Tabela de participantes ---- */
body.admin-brutal .tabela-container {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .tabela-header {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .tabela-header h3 {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .tabela-count {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .participante-escudo {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .participante-escudo .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .participante-nomes .nome-cartola {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .participante-nomes .nome-time {
    color: var(--admin-brutal-muted);
}
/* badges de status/senha/completude + liga-badge colapsam monocromático,
   mesmo precedente do .liga-status-badge (linha 939-944) e
   .badge-planned/.badge-no-config (linha 1719-1724). */
body.admin-brutal .liga-badge,
body.admin-brutal .badge-status {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .time-id-mono {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .btn-acao-inline {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .btn-acao-inline:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}

/* ---- Toggle Premium (mini) ----
   Mesmo idioma do `.toggle-slider` genérico (linhas 1736-1746): trilho
   monocromático, bolinha sempre em --admin-brutal-bg via `::after` (blind
   spot de pseudo-elemento do wildcard global — precisa de override
   explícito, mesmo achado repetido nas Tasks 3/5/quase-7). */
body.admin-brutal .toggle-slider-premium {
    background: var(--admin-brutal-border);
}
body.admin-brutal .toggle-slider-premium::after {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .toggle-premium-mini input:checked + .toggle-slider-premium {
    background: var(--admin-brutal-fg);
}
/* achado real de verificação (Playwright): sem este override, o estado
   `:checked` do `::after` continua ganhando da regra base acima por
   especificidade (analisar-participantes.css:409 tem 3 classes+pseudo vs a
   regra base de 1 classe+pseudo) e a bolinha ficava amber (#fbbf24) mesmo com
   admin-brutal ativo. */
body.admin-brutal .toggle-premium-mini input:checked + .toggle-slider-premium::after {
    background: var(--admin-brutal-bg);
}

/* ---- Modal de Senha (#modalSenha individual, #modalSenhaLote em lote) ---- */
body.admin-brutal #modalSenha .modal-content,
body.admin-brutal #modalSenhaLote .modal-content {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal #modalSenha .modal-title,
body.admin-brutal #modalSenhaLote .modal-title {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal #modalSenha .modal-title .material-icons,
body.admin-brutal #modalSenhaLote .modal-title .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal #modalSenha .modal-field label,
body.admin-brutal #modalSenhaLote .modal-field label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal #modalSenha .modal-btn-primary,
body.admin-brutal #modalSenhaLote .modal-btn-primary {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal #modalSenha .modal-btn-primary:hover,
body.admin-brutal #modalSenhaLote .modal-btn-primary:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal #modalSenha .modal-btn-secondary,
body.admin-brutal #modalSenhaLote .modal-btn-secondary {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal #modalSenha .modal-btn-secondary:hover,
body.admin-brutal #modalSenhaLote .modal-btn-secondary:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Loading / Empty state (bare, propaga — ver nota no topo da seção) ---- */
body.admin-brutal .loading-state {
    color: var(--admin-brutal-muted);
}
/* base.css:25-34 dá `background: rgba(42,42,42,.3)` própria a `.empty-state`
   (sem !important) — mesclado direto aqui (Critical 2, review final) em
   vez de repetir o seletor numa 2ª regra (evita dedup falso-positivo). */
body.admin-brutal .empty-state {
    color: var(--admin-brutal-muted);
    background: var(--admin-brutal-bg);
}
body.admin-brutal .empty-state .material-icons {
    color: var(--admin-brutal-border);
}

/* ---- Resumo por liga (cards colapsáveis) ---- */
body.admin-brutal .liga-resumo-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .liga-resumo-card:hover,
body.admin-brutal .liga-resumo-card.selected {
    border-color: var(--admin-brutal-fg);
    background: var(--admin-brutal-bg);
}
body.admin-brutal .liga-resumo-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .liga-resumo-stats {
    color: var(--admin-brutal-muted);
}

/* === DATA LAKE MODAL (.modal-dump-content, prefixo dl-*) ===
   Componente de dump de escalação/desempenho por rodada — exclusivo deste
   arquivo (ver nota de duplicidade no topo da seção). Seletores bare diretos,
   sem risco de vazamento pra outros módulos. */
body.admin-brutal .modal-dump-content {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-header {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-close-btn {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-close-btn:hover {
    color: var(--admin-brutal-fg);
    background: transparent;
}
body.admin-brutal .dl-team-badge {
    border-color: var(--admin-brutal-border);
    background: var(--admin-brutal-bg);
}
body.admin-brutal .dl-foto-perfil {
    border-color: var(--admin-brutal-bg);
}
body.admin-brutal .dl-pro-badge {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .dl-team-name {
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .dl-cartoleiro-name {
    color: var(--admin-brutal-muted);
}

body.admin-brutal .dl-round-control {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-round-control .dl-round-select {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-round-control .dl-round-select:focus {
    border-color: var(--admin-brutal-accent);
}
body.admin-brutal .dl-sync-info {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-refresh-btn {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-refresh-btn:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

body.admin-brutal .dl-desemp-card,
body.admin-brutal .dl-escalacao-section,
body.admin-brutal .dl-chart-section,
body.admin-brutal .dl-empty-state {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-desemp-header {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-desemp-header .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-desemp-rodada {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-desemp-pontos-valor {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-desemp-pontos-label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-desemp-stats {
    border-top-color: var(--admin-brutal-border);
    border-bottom-color: var(--admin-brutal-border);
}
/* up/down colapsam monocromático, mesmo precedente das zonas ganho/perda
   (linhas 1464-1474). */
body.admin-brutal .dl-desemp-stat-valor {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-desemp-stat-label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-desemp-esc-item {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-desemp-esc-item strong {
    color: var(--admin-brutal-fg);
}
/* escalados/jogaram/sairam/entraram colapsam monocromático, mesmo precedente
   do .liga-status-badge/.badge-planned. */
body.admin-brutal .dl-esc-dot.escalados,
body.admin-brutal .dl-esc-dot.jogaram,
body.admin-brutal .dl-esc-dot.sairam,
body.admin-brutal .dl-esc-dot.entraram {
    color: var(--admin-brutal-fg);
}

body.admin-brutal .dl-escalacao-header-bar {
    background: var(--admin-brutal-bg);
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-escalacao-header-left {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-escalacao-header-left .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-escalacao-count {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-escalacao-formacao {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-esc-grupo-title {
    background: transparent;
    border-bottom-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-esc-grupo-count {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-esc-jogador {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .dl-esc-jogador:hover {
    background: transparent;
}
/* capitao/luxo: friso lateral colorido + fundo tintado colapsam pra friso
   monocromático sólido, mesmo precedente do .liga-card::before (linha
   542-547) e das zonas ganho/perda. */
body.admin-brutal .dl-esc-jogador.capitao,
body.admin-brutal .dl-esc-jogador.luxo {
    background: transparent;
    border-left-color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-esc-jogador.negativo-bg {
    background: transparent;
}
body.admin-brutal .dl-esc-escudo {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .dl-esc-badge {
    border-color: var(--admin-brutal-bg);
}
body.admin-brutal .dl-esc-badge.badge-c,
body.admin-brutal .dl-esc-badge.badge-l {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .dl-esc-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-esc-pos {
    color: var(--admin-brutal-muted);
}
/* positive/negative colapsam fg (dado relevante); neutral fica muted (sem
   variação real) — mesmo idioma do .mercado-dot (linha 992-999: destaque
   reservado ao estado relevante, resto neutro). */
body.admin-brutal .dl-esc-pontos-valor.positive,
body.admin-brutal .dl-esc-pontos-valor.negative {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-esc-pontos-valor.neutral {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-esc-multiplicador.cap,
body.admin-brutal .dl-esc-multiplicador.lux {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-escalacao-divisoria {
    background: var(--admin-brutal-border);
}
body.admin-brutal .dl-escalacao-banco-title {
    background: transparent;
    border-bottom-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-escalacao-banco-title .material-icons {
    color: var(--admin-brutal-muted);
}

body.admin-brutal .dl-chart-title {
    color: var(--admin-brutal-muted);
}
/* selected em destaque total (fg); positive/negative recuam pra muted; empty
   (sem dado) fica no nível do border — mesmo idioma do .tab.active (linha
   656-659: estado ativo inverte, os demais recuam). */
body.admin-brutal .dl-chart-bar.positive,
body.admin-brutal .dl-chart-bar.negative {
    background: var(--admin-brutal-muted);
}
body.admin-brutal .dl-chart-bar.selected {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .dl-chart-bar.empty {
    background: var(--admin-brutal-border);
}
body.admin-brutal .dl-chart-label {
    color: var(--admin-brutal-border);
}
body.admin-brutal .dl-chart-label.selected {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-chart-tooltip {
    color: var(--admin-brutal-muted);
}

body.admin-brutal .dl-empty-state h4 {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dl-empty-state p {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .btn-sync-dump {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .btn-sync-dump:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .dl-sync-btn {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dl-sync-btn:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

/* === FLUXO-FINANCEIRO.CSS — reskin (Task 9: fluxo-financeiro.html,
   detalhe-liga.html, layout.html) — ALTO RISCO ===
   Arquivo lido por inteiro (3769 linhas, 95666 bytes), em 4 leituras.
   Grep exaustivo de `!important` em propriedades visuais (background|
   border|border-radius|box-shadow|color): 83 ocorrências confirmadas
   (grep total de `!important` no arquivo é 162 — as outras 79 são
   display/position/top/left/width/height/z-index/overflow/border-collapse/
   border-spacing, fora do escopo visual desta task). Lista completa das 83
   e como cada uma foi tratada: ver task-9-report.md.

   ESTE É O ÚNICO ARQUIVO DA ROLLOUT JÁ CARREGADO POR layout.html (o
   próprio shell do piloto, sempre `body.admin-brutal`) — toda regra abaixo
   está ativa em produção imediatamente, não é só teste isolado.

   Achado crítico (linha 124-127): `body { background: var(--bg-primary)
   !important; color: var(--text-primary) !important; }` — seletor `body`
   NU (sem escopo), carregado sempre que este CSS carrega. `--text-primary`
   já resolve certo de graça (remapeada no topo do arquivo, linha 20).
   `--bg-primary` NÃO deriva de `--surface-bg` como os demais aliases (é
   hex fixo #0a0a0a em fluxo-financeiro.css:8) — sem mirror, o `<body>`
   fica preso em preto sólido mesmo no tema claro do admin-brutal, dentro
   do próprio layout.html. Corrigido abaixo com `body.admin-brutal` (mais
   específico que o `body` nu do arquivo-fonte, ambos !important).

   ESTRATÉGIA (evita duplicar 80+ regras por seletor): a maioria dos
   componentes deste arquivo usa um punhado de custom properties LOCAIS
   redefinidas em `:root` (fluxo-financeiro.css:6-51) — `--border-primary`,
   `--text-secondary`/`--text-muted`/`--text-dark`, `--laranja`/
   `--laranja-dark`, `--success`/`--danger`/`--warning`/`--info`, `--chip-*`,
   `--bg-card-hover`, `--gradient-primary`/`--gradient-secondary`,
   `--tesouraria-contador-bg`. NENHUMA destas é remapeada pelo bridge do
   topo do arquivo (só `--surface-*`/`--border-color`/`--text-primary` são;
   `--bg-secondary`/`--bg-tertiary` herdam de graça por derivarem de
   `--surface-bg`/`--surface-card`). `--bg-card` (fluxo-financeiro.css:11,
   redefinida em :root como var(--surface-card), mesma indireção) NÃO herdava
   de graça — FIX ROUND 1 (Task 15 review, achado Critical 2): remap direto
   adicionado ao bloco raiz (linha ~70), mesmo bug já corrigido pra --app-bg
   (Task 13) e pra --bg-card de ferramentas-rodadas.css (Task 15). Redefine-se o conjunto
   restante UMA VEZ, escopado aos containers reais do módulo (não em
   `body.admin-brutal` bare — mesmo cuidado de escopo já usado no bridge
   pontual da Task 7, linha 1854-1862 `.modulos-stat-icon`, evitando
   vazamento pra outras ~20 telas que ainda referenciam os mesmos nomes de
   variável sem ter a classe `admin-brutal` no `<body>`). `--laranja vira
   --admin-brutal-fg (não --accent): usado como estado ativo/selecionado
   (mesmo idioma do `.tab.active`, linha 656-659), não CTA primário
   explícito (esses usam `.btn-primary`, já coberto acima). `--gradient-
   primary`/`--gradient-secondary` viram `--admin-brutal-accent` (estável
   nos dois temas — ver `_admin-tokens.css:802-803`, não redefinido no bloco
   dark) porque avatares/headers que os consomem têm `color: white`
   hardcoded no arquivo-fonte: com `--laranja`/fg (que INVERTE entre temas)
   o texto branco ficaria ilegível no tema escuro (quase-branco sobre
   quase-branco); com accent (amarelo estável) + override pontual de
   `color: var(--admin-brutal-accent-ink)` abaixo, funciona nos dois temas. */
body.admin-brutal {
    background: var(--admin-brutal-bg) !important;
}
body.admin-brutal #fluxo-financeiro,
body.admin-brutal #fluxoFinanceiroContent,
body.admin-brutal .fluxo-financeiro-content,
body.admin-brutal .fluxo-page,
body.admin-brutal .modal-extrato-container,
body.admin-brutal .modal-ajuste-container,
body.admin-brutal #modalNovoParticipante {
    --border-primary: var(--admin-brutal-border);
    --text-secondary: var(--admin-brutal-fg);
    --text-muted: var(--admin-brutal-muted);
    --text-dark: var(--admin-brutal-muted);
    --laranja: var(--admin-brutal-fg);
    --laranja-dark: var(--admin-brutal-fg);
    --bg-card-hover: var(--admin-brutal-border);
    --success: var(--admin-brutal-fg);
    --danger: var(--admin-brutal-fg);
    --warning: var(--admin-brutal-fg);
    --info: var(--admin-brutal-fg);
    --gradient-primary: var(--admin-brutal-accent);
    --gradient-secondary: var(--admin-brutal-accent);
    --chip-credito-bg: transparent;
    --chip-credito-text: var(--admin-brutal-fg);
    --chip-credito-border: var(--admin-brutal-border);
    --chip-debito-bg: transparent;
    --chip-debito-text: var(--admin-brutal-fg);
    --chip-debito-border: var(--admin-brutal-border);
    --chip-neutro-bg: transparent;
    --chip-neutro-text: var(--admin-brutal-muted);
    --chip-neutro-border: var(--admin-brutal-border);
    --chip-2025-bg: transparent;
    --chip-2025-text: var(--admin-brutal-fg);
    --chip-2025-border: var(--admin-brutal-border);
    --chip-ru-bg: transparent;
    --chip-ru-text: var(--admin-brutal-fg);
    --chip-ru-border: var(--admin-brutal-border);
    --tesouraria-contador-bg: var(--admin-brutal-border);
}
/* Graças ao bridge acima, as 6 ocorrências de `!important` a seguir já
   resolvem certo sem override adicional (a custom property que consomem
   já foi redefinida em escopo mais específico): .positivo/.negativo/
   .neutro/.valor-zerado (linhas 55,60,65,69 — via --success/--danger/
   --text-muted), .nav-link.active background/border-color (linha 2030,2032
   — via --laranja), .modal-ajuste-body input:focus border-color (linha
   3271 — via --laranja), .tipo-label/.credito/.debito (linhas 2769,2773,
   2777 — via --text-secondary/--success/--danger). */

/* ---- Avatares/headers com `--gradient-primary` + `color: white` hardcoded
   (fluxo-financeiro.css:204-238,466-472,532-534,800-810,1028-1030) ----
   Background já resolve via bridge acima (--gradient-primary -> accent);
   falta só o texto (fg escuro sobre amarelo, mesmo par usado no
   `.super-modal__btn--confirm`, linha 782-786). */
body.admin-brutal .participante-avatar,
body.admin-brutal .avatar-placeholder,
body.admin-brutal .extrato-header,
body.admin-brutal .saldo-final-positivo,
body.admin-brutal .retry-button,
body.admin-brutal .pos-mito {
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .participante-avatar {
    border-color: var(--admin-brutal-border);
}
/* .saldo-final-negativo/.pos-mico usam gradiente vermelho hex hardcoded
   (não passa por nenhuma variável) + `color: white`/`#fff` — colapsa pro
   mesmo idioma do `.tab.active` (fg vira o destaque, texto no tom do bg). */
body.admin-brutal .saldo-final-negativo,
body.admin-brutal .pos-mico {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* estado ativo com `--laranja`/fg de fundo + `color: #fff` hardcoded —
   mesmo idioma acima (texto no tom do bg, não branco fixo). */
body.admin-brutal .tesouraria-filtro.is-active,
body.admin-brutal .btn-temporada.active {
    color: var(--admin-brutal-bg);
}
/* mirror do !important de fluxo-financeiro.css:2031 (color:#fff!important
   no tab ativo do modal Novo Participante) — precisa de !important pra
   vencer o hardcoded. */
body.admin-brutal #modalNovoParticipante .nav-tabs .nav-link.active {
    color: var(--admin-brutal-bg) !important;
}

/* ---- Valores/status monocromáticos que NÃO passam pelas variáveis
   locais (usam token global `--color-success`/`--color-danger`/
   `--text-dim`, sem remap, ou hex puro) ----
   Mesmo precedente de "nenhuma variante semântica mantém cor própria" já
   aplicado em `.alert-success/warning/error/info` (Task 3) e
   `.badge-planned/.badge-no-config` (Task 7). */
body.admin-brutal .text-success,
body.admin-brutal .text-danger {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .extrato-quitado-item span.valor-positivo,
body.admin-brutal .extrato-quitado-item span.valor-negativo,
body.admin-brutal .extrato-resumo-card .card-value.positivo,
body.admin-brutal .extrato-resumo-card .card-value.negativo {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-quitado-item span.valor-zerado,
body.admin-brutal .extrato-resumo-card .card-value.neutro {
    color: var(--admin-brutal-muted);
}
/* mirror do !important de fluxo-financeiro.css:1922,1926 — `--text-dim` é
   token fixo (#6b7280, _admin-tokens.css:267), sem variante de tema, mesmo
   achado já registrado pro `.sidebar-accordion-title` (linha 1230). */
body.admin-brutal .col-saldo.quitado,
body.admin-brutal .col-saldo.quitado strong {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .pos-g,
body.admin-brutal .pos-z {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
/* filter: drop-shadow colorido (glow verde/vermelho) — zero decoração
   orgânica no brutalismo, mesmo precedente do `h2` (linha 641-646). */
body.admin-brutal .trend-positivo,
body.admin-brutal .trend-negativo {
    filter: none;
}
body.admin-brutal .status-mito,
body.admin-brutal .status-mico {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .status-g4,
body.admin-brutal .status-z4 {
    background: transparent;
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .status-neutro {
    background: transparent;
    color: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .cell-top10.is-mito,
body.admin-brutal .cell-top10.is-mico {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .bg-positive-light,
body.admin-brutal .bg-negative-light {
    background-color: transparent;
}
body.admin-brutal .badge-quitacao-extrato,
body.admin-brutal .badge-novato,
body.admin-brutal .badge-pago-ok,
body.admin-brutal .badge-pendente-pgto {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .badge-quitado {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}

/* ---- Linhas de destaque MITO/MICO/NOVATO (tabela de detalhamento) ----
   mirror do !important de fluxo-financeiro.css:751,756,760,765 (rgba verde/
   vermelho hardcoded + `--color-danger-muted`, nenhum dos dois passa pelo
   bridge acima) e :1895,1899 (`.row-novato`, rgba verde hardcoded). Colapsa
   pra borda lateral monocromática, mesmo idioma do `.rodada-col`/
   `.saldo-col` (borda como único sinal, linhas 774-793 do arquivo-fonte). */
body.admin-brutal .detalhamento-tabela tbody tr.row-mito,
body.admin-brutal .detalhamento-tabela tbody tr.row-mito:hover {
    background: transparent !important;
    border-left-color: var(--admin-brutal-fg);
}
body.admin-brutal .detalhamento-tabela tbody tr.row-mico,
body.admin-brutal .detalhamento-tabela tbody tr.row-mico:hover {
    background: transparent !important;
    border-left-color: var(--admin-brutal-border);
}
body.admin-brutal .row-novato,
body.admin-brutal .row-novato:hover {
    background: transparent !important;
}

/* FIX ROUND 1 (Task 16 review, Critical #1 e #2): `.detalhamento-tabela
   thead th` (fluxo-financeiro.css:719, especificidade (0,1,2)) empata com
   o genérico `body.admin-brutal th` (linha 629, também (0,1,2)) — sem
   !important dos dois lados, ordem de <link> decide, e como
   fluxo-financeiro.css carrega DEPOIS de admin-brutal.css (layout.html:
   admin-brutal.css na linha 25, fluxo-financeiro.css na linha 27), o
   `background` da fonte vence mas o `color` continua vindo do genérico
   `th` acima → par quebrado (bg claro/escuro do genérico + bg da fonte,
   mesmo bug de "meio-par" do `--bg-card` na Task 15).
   Regra explícita com 1 classe a mais (0,2,3) vence deterministicamente,
   independente de ordem — declarando os dois lados do par, não só o bg
   que causou a colisão. Mesmo raciocínio para `tbody tr:nth-child(even)`
   (fluxo-financeiro.css:741, (0,2,2)) vs o genérico `body.admin-brutal
   tr:nth-child(even)` (linha 641, também (0,2,2) — empate puro, zero
   diferença de tipo/classe): regra (0,3,3) abaixo fecha a lacuna. */
body.admin-brutal .detalhamento-tabela thead th {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .detalhamento-tabela tbody tr:nth-child(even) {
    background: transparent;
}

/* ---- Sticky header da tabela de participantes ----
   5 blocos de CSS sobrepostos no arquivo-fonte (v2.0/v2.6/v3.0/v7.0/v9.0,
   todos ainda presentes, história de fixes incrementais nunca limpos),
   cobrindo variações diferentes de seletor pra mesma tabela — mirror de
   TODAS pra garantir que nenhuma sobreviva (linhas 2166-2167,3358-3359,
   3361,3435,3438, todas com gradiente/hex escuro hardcoded +
   box-shadow !important). Vira fundo sólido + borda inferior, sem
   gradiente/glow (mesmo idioma do restante do brutalismo). */
body.admin-brutal .fluxo-participantes-tabela thead th,
body.admin-brutal .tabela-financeira thead th,
body.admin-brutal .fluxo-tabela-container thead th,
body.admin-brutal .fluxo-tabela-container table thead th,
body.admin-brutal #fluxo-financeiro .fluxo-participantes-tabela thead th,
body.admin-brutal #fluxo-financeiro .tabela-financeira thead th,
body.admin-brutal #dynamic-content-area .fluxo-participantes-tabela thead th,
body.admin-brutal #dynamic-content-area .tabela-financeira thead th {
    background: var(--admin-brutal-bg) !important;
    box-shadow: none !important;
    border-bottom: 2px solid var(--admin-brutal-border) !important;
    color: var(--admin-brutal-fg);
}
/* `::after` do próprio th (fluxo-financeiro.css:2170-2178): barra de 2px
   `background: var(--color-primary)` (laranja hardcoded) sobrevivendo por
   cima do border-bottom acima — pseudo-elemento não coberto por engano na
   primeira rodada (achado de code review, Fix round 1). Usa
   `--admin-brutal-accent` (estável nos 2 temas, mesmo critério do bridge
   de `--gradient-primary`, ver nota no topo do arquivo) — não
   `--admin-brutal-border`, pra manter a faixa como destaque de marca em
   vez de se confundir com a própria borda. */
body.admin-brutal .fluxo-participantes-tabela thead th::after {
    background: var(--admin-brutal-accent);
}
/* Header clone (linha 3502-3522): JS clona a tabela num `<table>` fixo no
   viewport durante o scroll. Fundo já resolve certo via `--surface-card`
   (bridge do topo do arquivo, linha 17-22) — box-shadow já é zerado pelo
   wildcard global (calculo de especificidade: wildcard (0,2,1) > seletor
   `.sticky-header-clone table/th` (0,1,1), ambos !important, wildcard
   vence). Só texto/borda ficam hardcoded (`#fff`/`var(--color-primary)`,
   sem variante clara) — branco sobre `--surface-card` que no tema claro é
   branco (--admin-brutal-bg): texto invisível sem este mirror. */
body.admin-brutal .sticky-header-clone th {
    border-bottom-color: var(--admin-brutal-border) !important;
    color: var(--admin-brutal-fg) !important;
}

/* ---- Tesouraria V10 (containers com rgba(255,255,255,x) hardcoded, sem
   variante clara — o `[data-theme="light"]` do arquivo-fonte, linha 3044-
   3067, usa o atributo do TEMA DO APP PARTICIPANTE, nunca presente no
   admin, então nunca dispara aqui) ---- */
body.admin-brutal .tesouraria-stat,
body.admin-brutal .tesouraria-filtros {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .tesouraria-filtro:hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .tesouraria-stat__label {
    color: var(--admin-brutal-muted);
}

/* ---- Cards de participante / stat-cards (rgba hardcoded sem variante
   clara — invisíveis no tema claro: branco translúcido sobre branco) ---- */
body.admin-brutal .participante-card.active {
    background: transparent;
}
body.admin-brutal .participante-stat-card {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .participante-stat-card:hover {
    background: var(--admin-brutal-border);
}
body.admin-brutal .participante-ultima-atualizacao {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}

/* ---- Extrato: header card, integrações, banners e modal fullscreen ----
   Todos com gradiente/rgba escuro hardcoded no fundo (fixo, não deriva de
   `--surface-*`) — preso escuro mesmo no tema claro do admin-brutal. */
body.admin-brutal .extrato-header-card,
body.admin-brutal .modal-extrato-header,
body.admin-brutal .modal-extrato-container {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .extrato-header-card {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-header-card::after {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-saldo-label,
body.admin-brutal .extrato-saldo-atualizado {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .saldo-display {
    color: var(--admin-brutal-fg);
    text-shadow: none;
}
body.admin-brutal .modal-extrato-header {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .modal-extrato-footer {
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .modal-extrato-info h3,
body.admin-brutal .modal-extrato-info span,
body.admin-brutal .modal-extrato-close {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-extrato-close,
body.admin-brutal .ajustes-total {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .modal-extrato-close:hover {
    background: var(--admin-brutal-border);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .extrato-integracoes,
body.admin-brutal .extrato-integracoes-item {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-quitado-banner,
body.admin-brutal .extrato-legado-banner {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-quitado-banner-header .material-icons,
body.admin-brutal .extrato-quitado-banner-header h4,
body.admin-brutal .extrato-legado-banner-header .material-icons,
body.admin-brutal .extrato-legado-banner-header h4 {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .banner-pre-temporada,
body.admin-brutal .extrato-pretemporada {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .banner-pre-temporada .material-icons,
body.admin-brutal .banner-pre-temporada h3 {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .banner-pre-temporada p {
    color: var(--admin-brutal-muted);
}

/* ---- Modal de Ajuste (chrome usa `--surface-white-10/20`, token fixo
   sem variante de tema — invisível no tema claro) ---- */
body.admin-brutal .extrato-ajustes-header,
body.admin-brutal .modal-ajuste-header,
body.admin-brutal .modal-ajuste-footer,
body.admin-brutal .input-ajuste,
body.admin-brutal .modal-ajuste-footer .btn-cancelar {
    border-color: var(--admin-brutal-border);
}
/* FIX (review final): faltava `color` — fluxo-financeiro.css:2712 dá
   `color: var(--text-primary, #fff)` no hover, e `--text-primary` é
   remapeada pra `--admin-brutal-fg`, mesmo hex de `--admin-brutal-border`
   nos 2 temas hoje. Sem isto o ícone `close` desaparecia no hover
   (contraste 1.00:1) — mesma categoria dos pares .ajuste-item:hover
   corrigidos logo abaixo. */
body.admin-brutal .modal-ajuste-close:hover {
    background: var(--admin-brutal-border);
    color: var(--admin-brutal-bg);
}
/* mirror do !important de fluxo-financeiro.css:3220 (`.ajuste-item:hover`,
   rgba branco hardcoded — invisível no tema claro). `color` adicionado em
   Fix round 1 (code review): sem ele o texto herdava `--admin-brutal-fg`,
   mesmo hex de `--admin-brutal-border` nos 2 temas hoje — contraste zero
   no hover, mesma categoria dos outros 2 pares abaixo. */
body.admin-brutal .ajuste-item:hover {
    background: var(--admin-brutal-border) !important;
    color: var(--admin-brutal-bg) !important;
}
/* fluxo-financeiro.css:3223-3229 — botão de ação e ícone dentro do item em
   hover, não cobertos na 1ª rodada: `background: rgba(255,255,255,0.15)`
   e `.material-icons { color: #fff }` ficam quase invisíveis sobre o
   fundo do hover acima (`--admin-brutal-border`, escuro no tema dark).
   Inverte pro par bg/fg oposto do item pai, mesmo padrão desta seção. */
body.admin-brutal .ajuste-item:hover .ajuste-actions button {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .ajuste-item:hover .ajuste-actions button .material-icons {
    color: var(--admin-brutal-fg);
}

/* ---- Scrollbars com thumb em gradiente laranja hardcoded ----
   mesmo achado já registrado pro `.sidebar-nav-new`/`.usuarios-online-lista`
   (linha 1239-1248). */
body.admin-brutal .fluxo-tabela-container::-webkit-scrollbar-thumb,
body.admin-brutal .tabela-wrapper::-webkit-scrollbar-thumb,
body.admin-brutal .ajustes-lista::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}
/* `.fluxo-tabela-container::after` (fluxo-financeiro.css:3160-3173):
   indicador de "tem mais conteúdo pra rolar", `linear-gradient(to right,
   transparent, rgba(0,0,0,0.4))` — assume fundo escuro fixo; borrão cinza
   sobrevivia no tema claro (2º pseudo-elemento não coberto, achado de
   code review, Fix round 1). Faz o gradiente desvanecer pra própria cor
   de fundo do tema (`--admin-brutal-bg`) em vez de preto fixo — some no
   fundo em vez de aparecer como mancha, funciona nos 2 temas sem seletor
   dedicado de tema.
   `.sticky-scroll-active::before` (linha 3464): confirmado `display: none`
   incondicional (comentário "remover em produção" já sinaliza estado
   morto) — inerte, sem ação necessária. */
body.admin-brutal .fluxo-tabela-container::after {
    background: linear-gradient(to right, transparent, var(--admin-brutal-bg));
}

/* ---- Página standalone (fluxo-financeiro.html): grid de ligas ----
   `.fluxo-header`/`.liga-header` usam `border: 1px solid
   var(--color-success)` (verde, token global não remapeado) como friso de
   destaque — mesmo precedente de recolorir monocromático já aplicado ao
   `.liga-card::before` (Task 1, linha 542-547) e `.dashboard-alert`
   (linha 850-860). `.liga-card` (mesmo nome, componente de grid de ligas
   deste arquivo) NÃO entra aqui: já coberto de graça pela regra genérica
   da Task 1 (linha 536-551, `.liga-card`/`.time-card`/`.stat-card`),
   incluindo o fundo (que já achata o mesmo `linear-gradient(...,
   #252525)` hardcoded de fluxo-financeiro.css:3588) e o `:hover` (que já
   troca a borda pra `--admin-brutal-fg`, mais correto que repetir aqui —
   evita duplicar/conflitar com aquela regra, achado real de verificação
   (grep de seletores duplicados apontou `.liga-card`/`.liga-card:hover`
   coincidindo com a Task 1; a duplicata inicial usava um valor de
   `:hover` diferente e pior, corrigido removendo-a). */
body.admin-brutal .fluxo-header,
body.admin-brutal .liga-header {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .fluxo-header::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .fluxo-header h1 .material-icons,
body.admin-brutal .liga-header-info h1 .material-icons,
body.admin-brutal .liga-card-logo .material-icons,
body.admin-brutal .liga-card:hover .liga-card-arrow {
    color: var(--admin-brutal-fg);
}
/* `.empty-state .material-icons` NÃO entra aqui — duplicata real detectada
   em code review (Fix round 1): já coberta desde a linha ~2131
   (`body.admin-brutal .empty-state .material-icons { color:
   var(--admin-brutal-border); }`), pré-existente a esta task. Repetir aqui
   com `--admin-brutal-fg` criava 2ª declaração do mesmo seletor com valor
   diferente — a de baixo vencia por ordem de fonte, sobrescrevendo
   silenciosamente a decisão anterior (inerte hoje só porque os 2 tokens
   têm o mesmo hex nos 2 temas). */
body.admin-brutal .liga-header-back:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Modal "Novo Participante" (#modalNovoParticipante) ----
   Utilitários Bootstrap dark-theme hardcoded (renovacao-modals.js gera o
   HTML: `.bg-gray-700/800/900`, `.border-gray-600/700`, `.text-white`,
   hex fixo, a maioria com `!important` pra vencer o Bootstrap padrão).
   Mirror de TODAS as ocorrências (linhas 1701-1875, 2011-2126). */
body.admin-brutal .bg-gray-700,
body.admin-brutal .bg-gray-800,
body.admin-brutal .bg-gray-900,
body.admin-brutal #panel-manual .form-control,
body.admin-brutal #panel-manual .form-select {
    background-color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .border-gray-600,
body.admin-brutal .border-gray-700,
body.admin-brutal #modalNovoParticipante .nav-tabs,
body.admin-brutal #modalNovoParticipante .nav-tabs .nav-link,
body.admin-brutal #panel-manual .form-control,
body.admin-brutal #panel-manual .form-select {
    border-color: var(--admin-brutal-border) !important;
}
body.admin-brutal .text-white,
body.admin-brutal .modal-content.bg-gray-800,
body.admin-brutal .modal-content .form-label,
body.admin-brutal .modal-content .form-check-label,
body.admin-brutal #panel-manual .form-label {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .modal-content.bg-gray-800 {
    background-color: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .modal-content .card.bg-gray-900 .card-text,
body.admin-brutal .modal-content .card.bg-gray-900 .text-muted {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .modal-content .form-control.bg-gray-700,
body.admin-brutal .modal-content .form-select.bg-gray-700,
body.admin-brutal .modal-content .input-group-text.bg-gray-700,
body.admin-brutal .modal-content textarea.bg-gray-700 {
    background-color: var(--admin-brutal-bg) !important;
    color: var(--admin-brutal-fg) !important;
    border-color: var(--admin-brutal-border) !important;
}
/* mirror do !important de fluxo-financeiro.css:1752,1809 (box-shadow
   laranja no :focus) — sem isto, o anel laranja hardcoded sobrevive em
   cliques de mouse com foco visível mas fora de :focus-visible (o wildcard
   global só zera box-shadow em `:not(:focus-visible)`, e mesmo nesse caso
   este seletor de 4 classes específicas venceria o wildcard por
   especificidade — conferido por cálculo). */
body.admin-brutal .modal-content .form-control.bg-gray-700:focus,
body.admin-brutal .modal-content .form-select.bg-gray-700:focus,
body.admin-brutal .modal-content textarea.bg-gray-700:focus {
    background-color: var(--admin-brutal-bg) !important;
    color: var(--admin-brutal-fg) !important;
    border-color: var(--admin-brutal-accent) !important;
    box-shadow: none !important;
}
body.admin-brutal .modal-content .form-control.bg-gray-700::placeholder {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .modal-content .card.bg-gray-900 {
    background-color: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
    color: var(--admin-brutal-fg);
}
/* fluxo-financeiro.css:1769-1770 — `.card-title` filho do card acima usa
   `color: var(--color-primary)` (laranja) direto, fora do bridge de
   tokens (`--color-primary` só é redefinida no escopo pontual de
   `.modulos-stat-icon`, linha ~1858 — não alcança aqui). Não tinha
   override próprio apesar do comentário da task declarar este range
   "espelhado por completo" (achado de code review, Fix round 1). */
body.admin-brutal .modal-content .card.bg-gray-900 .card-title {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-content .card-header.border-gray-700,
body.admin-brutal .modal-content .modal-header.border-gray-700,
body.admin-brutal .modal-content .modal-footer.border-gray-700,
body.admin-brutal .modal-content .table .border-gray-700 {
    border-color: var(--admin-brutal-border) !important;
}
/* fluxo-financeiro.css:1782-1785 — `.card-header.border-gray-700` (mesmo
   seletor acima) também seta `color: #ffffff` direto, sem `!important`;
   o bloco anterior só cobria `border-color`. Sem este fix, texto branco
   sobre `--admin-brutal-bg` branco no tema claro (títulos dos 6 cards do
   modal "Novo Participante" invisíveis) — mesmo achado de code review. */
body.admin-brutal .modal-content .card-header.border-gray-700 {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .modal-content .resultado-busca-item:hover {
    background-color: var(--admin-brutal-border) !important;
    color: var(--admin-brutal-bg) !important;
}
/* `.btn-close-white` inverte a imagem SVG pra branco (só funciona em fundo
   escuro) — mesmo achado do `#modalConfigModulo .btn-close` acima (linha
   1327-1346): neutraliza por padrão (X escuro, correto no tema claro), só
   reaplica invert no tema escuro. */
body.admin-brutal .modal-content .btn-close-white {
    filter: none;
    opacity: 0.7;
}
:root[data-admin-theme="dark"] body.admin-brutal .modal-content .btn-close-white {
    filter: invert(1);
}
/* `.alert-danger`/`.alert-secondary` (Bootstrap) não colidem com o
   `.alert-error` genérico já coberto (linha 604-613, nomenclatura
   diferente: "error" vs "danger") — precisa de bloco próprio. */
body.admin-brutal .modal-content .alert-info,
body.admin-brutal .modal-content .alert-warning,
body.admin-brutal .modal-content .alert-danger,
body.admin-brutal .modal-content .alert-success,
body.admin-brutal .modal-content .alert-secondary {
    background-color: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-content .table {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .modal-content .spinner-border {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
/* mirror do !important de fluxo-financeiro.css:2063-2066
   (`#modalNovoParticipante .modal-content`): especificidade de ID (1,1,0)
   supera o wildcard genérico `body.admin-brutal * { border-radius: 0
   !important }` (0,1,0) — o wildcard PERDE aqui (achado real: bug de
   especificidade de ID, não de pseudo-elemento, mas mesma categoria de
   "conferir antes de assumir que o wildcard cobre"). Precisa de override
   dedicado escopado ao próprio ID. */
body.admin-brutal #modalNovoParticipante .modal-content {
    background-color: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
    border-radius: 0 !important;
    box-shadow: none !important;
}

/* ==========================================================================
   TASK 10 — extrato-v2.css (Hero/Timeline/Stats/Acertos/Chart/Performance)
   Usado por fluxo-financeiro.html e detalhe-liga.html (SEM layout.html —
   confirmado, nenhum outro HTML referencia este arquivo). Cards com fundo
   rgba(255,255,255,x) + backdrop-filter blur + glow orgânico — mesmo
   idioma "banco Inter dark" já visto no extrato-header-card (linha 2707+).
   ========================================================================== */

/* ---- 5 cards principais: fundo sólido, borda 2px, zero blur ---- */
body.admin-brutal .extrato-hero-v2,
body.admin-brutal .extrato-timeline-v2,
body.admin-brutal .extrato-acertos-v2,
body.admin-brutal .extrato-chart-v2,
body.admin-brutal .extrato-performance-v2 {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}

/* ---- Hero: pseudo-elementos ----
   `::before` (linha 60-70) é overlay de tint colorido por status — sem
   cor própria no brutalismo, vira transparente (mata a cor nas 3
   variantes --positive/--negative/--neutral de uma vez, especificidade
   de `body.admin-brutal .extrato-hero-v2::before` (0,2,2) supera qualquer
   `.extrato-hero-v2--xxx::before` (0,1,1), independente de ordem).
   `::after` (linha 73-86) é blob de glow borrado (`filter: blur(80px)`,
   `border-radius: 50%`) — decoração 100% orgânica, mesmo critério do
   `h2 { text-shadow: none }` (linha 641-646) e `.trend-positivo/negativo
   { filter: none }` (linha 2561-2566): oculta em vez de recolorir. */
body.admin-brutal .extrato-hero-v2::before {
    background: transparent;
}
body.admin-brutal .extrato-hero-v2::after {
    display: none;
}

/* ---- Hero: header (label/ícone, botões de ação) ---- */
body.admin-brutal .extrato-hero-v2__label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .extrato-hero-v2__label .material-icons,
body.admin-brutal .extrato-timeline-v2__title .material-icons,
body.admin-brutal .extrato-acertos-v2__title .material-icons,
body.admin-brutal .extrato-chart-v2__title .material-icons,
body.admin-brutal .extrato-performance-v2__title .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-hero-v2__action-btn {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .extrato-hero-v2__action-btn:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Hero: valor principal e status badge ----
   Neutro recebe muted (recede), positive/negative recebem fg (destaque) —
   mesmo critério de hierarquia do `.status-neutro` (linha 2579-2583). */
body.admin-brutal .extrato-hero-v2__valor--positive,
body.admin-brutal .extrato-hero-v2__valor--negative {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-hero-v2__valor--neutral {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .extrato-hero-v2__status--deve,
body.admin-brutal .extrato-hero-v2__status--receber {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-hero-v2__status--quitado {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}

/* ---- Stats pills ---- */
body.admin-brutal .extrato-stats-v2 {
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-stat-pill-v2 {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}
/* Hover inverte fg/bg — par correto (NUNCA bg=border + texto=fg, mesmo hex
   nos 2 temas, ver _admin-tokens.css:798-811: --admin-brutal-border É
   --admin-brutal-fg). Cobre ícone/valor/label do pill explicitamente. */
body.admin-brutal .extrato-stat-pill-v2:hover {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-stat-pill-v2:hover .extrato-stat-pill-v2__icon,
body.admin-brutal .extrato-stat-pill-v2:hover .extrato-stat-pill-v2__value,
body.admin-brutal .extrato-stat-pill-v2:hover .extrato-stat-pill-v2__label {
    color: var(--admin-brutal-bg);
}
body.admin-brutal .extrato-stat-pill-v2__value--positive,
body.admin-brutal .extrato-stat-pill-v2__value--negative {
    color: var(--admin-brutal-fg);
}

/* ---- Timeline: header/título/borda ---- */
body.admin-brutal .extrato-timeline-v2__header {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-timeline-v2__title,
body.admin-brutal .extrato-acertos-v2__title,
body.admin-brutal .extrato-chart-v2__title,
body.admin-brutal .extrato-performance-v2__title,
body.admin-brutal .extrato-acertos-v2__item-title,
body.admin-brutal .extrato-empty-v2__title {
    color: var(--admin-brutal-fg);
}

/* ---- Timeline: filtros (default/hover/active) ----
   Mesmo padrão do `.extrato-chart-v2__filter-btn` logo abaixo. */
body.admin-brutal .extrato-timeline-v2__filter-btn,
body.admin-brutal .extrato-chart-v2__filter-btn {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .extrato-timeline-v2__filter-btn:hover,
body.admin-brutal .extrato-chart-v2__filter-btn:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .extrato-timeline-v2__filter-btn--active,
body.admin-brutal .extrato-chart-v2__filter-btn--active {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Timeline: scrollbar do container de itens ---- */
body.admin-brutal .extrato-timeline-v2__content {
    scrollbar-color: var(--admin-brutal-muted) transparent;
}
body.admin-brutal .extrato-timeline-v2__content::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}

/* ---- Timeline: grupo (Rodada/Inscrição/Acertos) ----
   `.group-header { border-color: rgba(255,85,0,.1) }` (linha 1134-1136 do
   arquivo-fonte) é INERTE: nenhum border-style/width é setado em
   `.group-header` em lugar nenhum (só `.group` tem border-bottom próprio,
   linha 385-387) — sem `border-style`, o navegador usa `none` por padrão e
   a cor não pinta nada. Confirmado por leitura completa; sem ação. */
body.admin-brutal .extrato-timeline-v2__group {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-timeline-v2__group-header {
    background: transparent;
}
/* Hover do header: mesma lógica de `.row-mito:hover`/`.row-novato:hover`
   (linha 2613-2626) — remove o tint em vez de reinventar contraste, já
   que os filhos (título/subtítulo) não trocam de cor no hover. */
body.admin-brutal .extrato-timeline-v2__group-header:hover {
    background: transparent;
}
body.admin-brutal .extrato-timeline-v2__group-subtitle,
body.admin-brutal .extrato-timeline-v2__expand-icon,
body.admin-brutal .extrato-timeline-v2__detail-label,
body.admin-brutal .extrato-timeline-v2__accumulated-label,
body.admin-brutal .extrato-timeline-v2__totals-title,
body.admin-brutal .extrato-timeline-v2__total-label,
body.admin-brutal .extrato-stat-pill-v2__icon,
body.admin-brutal .extrato-stat-pill-v2__label,
body.admin-brutal .extrato-hero-v2__projecao,
body.admin-brutal .extrato-performance-v2__stat-label,
body.admin-brutal .extrato-performance-v2__bw-label,
body.admin-brutal .extrato-chart-v2__labels,
body.admin-brutal .extrato-acertos-v2__item-meta,
body.admin-brutal .extrato-acertos-v2__empty,
body.admin-brutal .extrato-empty-v2__icon,
body.admin-brutal .extrato-empty-v2__text {
    color: var(--admin-brutal-muted);
}
/* 5 variantes de ícone de grupo (rodada/inscrição/acerto/positive/negative,
   linhas 423-446) colapsam numa regra só — mesmo critério do
   `.pos-g/.pos-z` (linha 2556-2560). */
body.admin-brutal .extrato-timeline-v2__group-icon--rodada,
body.admin-brutal .extrato-timeline-v2__group-icon--inscricao,
body.admin-brutal .extrato-timeline-v2__group-icon--acerto,
body.admin-brutal .extrato-timeline-v2__group-icon--positive,
body.admin-brutal .extrato-timeline-v2__group-icon--negative {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* Badges mito/mico ganham destaque (fg/bg invertido, mesmo par do
   `.status-mito/.status-mico`, linha 2567-2572); zona-g/zona-z ficam
   como outline (mesmo par do `.status-g4/.status-z4`, linha 2573-2578). */
body.admin-brutal .extrato-timeline-v2__group-badge--mito,
body.admin-brutal .extrato-timeline-v2__group-badge--mico {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .extrato-timeline-v2__group-badge--zona-g,
body.admin-brutal .extrato-timeline-v2__group-badge--zona-z {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-timeline-v2__group-value--positive,
body.admin-brutal .extrato-timeline-v2__group-value--negative {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-timeline-v2__group-value--neutral {
    color: var(--admin-brutal-muted);
}

/* ---- Timeline: detalhes expandidos, acumulado e totais ---- */
body.admin-brutal .extrato-timeline-v2__group-details {
    background: transparent;
}
body.admin-brutal .extrato-timeline-v2__detail-item {
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-timeline-v2__detail-value--positive,
body.admin-brutal .extrato-timeline-v2__detail-value--negative {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-timeline-v2__accumulated {
    background: transparent;
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-timeline-v2__totals {
    background: transparent;
    border-top-color: var(--admin-brutal-border);
}

/* ---- Acertos card: header, contador, item, remover ---- */
body.admin-brutal .extrato-acertos-v2__header {
    background: transparent;
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-acertos-v2__count {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-acertos-v2__item {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .extrato-acertos-v2__item-icon--pagamento,
body.admin-brutal .extrato-acertos-v2__item-icon--recebimento {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-acertos-v2__item-remove {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .extrato-acertos-v2__item-remove:hover {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .extrato-acertos-v2__item-remove .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .extrato-acertos-v2__item-remove:hover .material-icons {
    color: var(--admin-brutal-bg);
}

/* ---- Performance card ---- */
body.admin-brutal .extrato-performance-v2__stat-value--mito,
body.admin-brutal .extrato-performance-v2__stat-value--mico,
body.admin-brutal .extrato-performance-v2__stat-value--zona-g,
body.admin-brutal .extrato-performance-v2__stat-value--zona-z {
    color: var(--admin-brutal-fg);
}
/* text-shadow colorido de profundidade — zero glow, mesmo critério do h2
   (linha 641-646). */
body.admin-brutal .extrato-performance-v2__stat-value {
    text-shadow: none;
}

/* ---- Rodada ao vivo (parciais) ----
   Indicador de "ao vivo" é FUNCIONAL (não decoração orgânica) — mantém
   scanline/pulse, só recolore pra monocromático, mesmo critério do
   `.loading::after` (blind spot deliberado, linha 624-631). */
body.admin-brutal .extrato-timeline-v2__group--live {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .extrato-timeline-v2__group--live::before {
    background: linear-gradient(90deg, transparent, var(--admin-brutal-fg), transparent);
}
/* mirror dos 2 `!important` de extrato-v2.css:1205-1206. ATENÇÃO: bg=fg +
   texto=bg (par correto) — NUNCA bg=border+texto=fg (mesmo hex nos 2
   temas, ver nota acima), erro que a Task 9 cometeu 3x. */
body.admin-brutal .extrato-timeline-v2__group-icon--live {
    background: var(--admin-brutal-fg) !important;
    color: var(--admin-brutal-bg) !important;
}
body.admin-brutal .extrato-timeline-v2__live-badge,
body.admin-brutal .extrato-hero-v2__live-badge {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* `.live-dot` SEMPRE aninhado dentro de `.live-badge` (confirmado em
   extrato-render-v2.js:82,513-514, único uso real nos 2 pontos de
   entrada) — herdar `--admin-brutal-fg` (mesmo valor do fundo do badge
   pai, achado real via harness Playwright) deixaria a bolinha invisível
   sobre o próprio fundo. Usa `--admin-brutal-bg` (par oposto, mesmo do
   texto do badge) pra continuar visível. */
body.admin-brutal .extrato-timeline-v2__live-dot,
body.admin-brutal .extrato-hero-v2__live-dot {
    background: var(--admin-brutal-bg);
}

/* ==========================================================================
   Task 11 — detalhe-liga.css + css/modules/detalhe-liga-redesign.css
   (detalhe-liga.html)

   INVESTIGAÇÃO DE SOBREPOSIÇÃO (obrigatória — ver task-11-report.md pro
   detalhamento completo). <link> order na página: detalhe-liga.css (linha 30)
   carrega ANTES de detalhe-liga-redesign.css (linha 33). `comm -12` entre os
   2 arquivos-fonte confirma MUITO mais duplicidade do que os 2 nomes
   apontados no brief (.module-card/.module-icon): também .module-header,
   .module-title, .module-count, .modules-grid, .page-content,
   .dynamic-content, .toast-cache-mini, .modal-cache-mini, .processing-overlay,
   .processing-text, .spinner (+ .material-icons, genérico, ignorado).

   Quem VENCE hoje cada uma (antes desta task):
   - .module-card / .module-icon: detalhe-liga-redesign.css vence — usa
     `.detalhe-liga-redesign .module-card`/`...module-icon` (2-3 classes)
     contra o `.module-card`/`.module-icon` bare (1 classe) de
     detalhe-liga.css. Especificidade decide, INDEPENDENTE da ordem do
     <link> — 2-3 classes sempre bate 1 classe.
   - .module-title: detalhe-liga.css vence — tem `!important` em
     color/font-size/font-weight (linha 251-253); redesign.css não usa
     !important no mesmo seletor, então perde mesmo sendo mais específico
     (regra normal nunca vence !important).
   - .module-count: redesign.css vence — `.detalhe-liga-redesign .module-card
     .module-count` (3 classes) bate `.module-count` bare (1 classe);
     nenhum dos dois usa !important aqui.
   - .dynamic-content: mistura — redesign.css vence em
     background/border/border-radius/padding (mais específico), mas
     detalhe-liga.css continua provendo display/margin-top/animation/
     overflow/transform porque redesign.css não redeclara essas props.
   - .toast-cache-mini: SÃO 3 FONTES, não 2 — existe também um `<style>`
     inline em detalhe-liga.html (~linha 1020) com a MESMA especificidade
     (classe bare) das outras duas; por estar mais abaixo no documento,
     vence hoje por ordem de cascata (nenhuma das 3 usa !important aqui).
   - .liga-header / .liga-titulo / .liga-info: CONFIRMADO morto no DOM atual
     (detalhe-liga.html usa `.liga-header-new`/`#nomeLiga`/`#quantidadeTimes`
     do redesign, não essas classes legadas). Além disso `.liga-header` JÁ
     tem regra própria nesta folha (linha 2849-2850, Task 9/10, mirando
     fluxo-financeiro.css) — repetir o seletor aqui criaria uma 2ª entrada
     duplicada (bug de dedup). Por isso NENHUMA regra nova pra essas 3
     classes: nem seletor pra inventar, nem duplicata pra criar.

   Grep de `!important`: detalhe-liga.css tem 25 ocorrências (não 5, como
   uma nota desatualizada sugeria), detalhe-liga-redesign.css tem 5. Nenhuma
   delas recai sobre .module-card/.module-icon BASE (só sobre
   `.module-card.disabled` e `.module-title`) — confirmado ponto a ponto
   antes de escrever os overrides abaixo.

   Estratégia: cada bloco usa `body.admin-brutal` + classes/ancestrais reais
   suficientes pra bater a fonte MAIS específica entre as encontradas (nunca
   dependeu de qual <link> vem primeiro), com !important só onde a fonte
   original já tem !important (.module-title, .back-button — este último
   tem seletor com ID `#secondary-screen .back-button`; especificidade de
   ID sempre vence classe, exige !important pra vencer).

   Escopo desta task: dedup completo dos 2 arquivos + os itens do brief
   (.admin-tools-grid, .admin-tool-icon, .quick-stat-card, .highlight-table,
   .pos-cell/.pts-cell, .back-button, .module-loading-overlay). Fora do
   escopo, encontrados mas deliberadamente NÃO tocados (nenhum pedido no
   brief, sem cor/gradiente pra corrigir ou já cobertos globalmente):
   .module-header/.modules-grid (puro layout, sem cor), .page-content (já
   global, linha 61-63), .spinner/.processing-overlay/.processing-text
   (não usados no DOM desta página), .modal-cache-mini / .btn-mini-*
   / .input-mini-* / .spinner-mini (modal de recálculo, não pedido),
   .module-card-2026 (card de feature futura "Em Breve", não pedido). */

/* ---- Grid de módulos: card ----
   ::before é a barra de destaque lateral (as 2 fontes têm o mesmo padrão,
   3-4px, opacity 0→1 no hover) — vira friso sólido monocromático, mesmo
   precedente do .liga-card::before (linha 542-547).
   ::after só existe em detalhe-liga.css (glow radial no hover) — decoração
   100% orgânica, mesmo critério do .extrato-hero-v2::after
   (linha 3037-3046): oculta em vez de recolorir.
   .module-card.disabled::before/::after já tem `display:none !important`
   na própria fonte (detalhe-liga.css:399-402) — nenhum conflito, deixado
   intacto. */
body.admin-brutal .module-card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .module-card::before {
    background: var(--admin-brutal-fg);
    box-shadow: none;
}
body.admin-brutal .module-card::after {
    display: none;
}
body.admin-brutal .module-card:hover {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}
/* FIX (review final, Important 2): style.css:858-897 tem UMA TERCEIRA fonte
   pra `.module-card.disabled` (além de detalhe-liga.css:391-405, que já usa
   `!important` e display:none nos pseudo-elementos, deixado intacto) —
   background: linear-gradient(135deg, #1a1a1a, #161616) !important,
   border-color rgba(160,160,160,.3) !important, ::before com gradiente
   #888/#666 !important, .module-icon #999/.module-title #aaa/.module-items
   li #888/li::before #777, tudo !important. style.css carrega DEPOIS de
   detalhe-liga.css em detalhe-liga.html (mesma especificidade .module-
   card.disabled nos 2 arquivos, ambos !important) — vence por ordem,
   produzindo um card quase preto sólido sobre fundo branco no tema claro
   (gradiente também proibido pela spec). Cada seletor abaixo usa
   `!important` espelhando a fonte, valor colapsado pra sólido monocromático
   (nunca gradiente). */
body.admin-brutal .module-card.disabled {
    opacity: 0.5 !important;
    background: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
}
body.admin-brutal .module-card.disabled::before {
    background: var(--admin-brutal-muted) !important;
}
body.admin-brutal .module-card.disabled .module-icon {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .module-card.disabled .module-title {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .module-card.disabled .module-items li {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .module-card.disabled .module-items li::before {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .module-card.disabled:hover {
    border-color: var(--admin-brutal-border) !important;
}
/* Contraste no hover: fundo vira fg, então título/contador precisam virar
   bg (nunca deixar texto=fg sobre fundo=fg — mesmo erro que a Task 9
   cometeu 3x, ver nota linha 3307-3309). */
body.admin-brutal .module-card:hover .module-title,
body.admin-brutal .module-card:hover .module-count {
    color: var(--admin-brutal-bg) !important;
}

/* .module-title: detalhe-liga.css tem !important nesse seletor — precisa
   !important pra vencer mesmo com seletor mais específico. */
body.admin-brutal .module-title {
    color: var(--admin-brutal-fg) !important;
}
/* FIX (achado real via Playwright, harness rodando localmente): a 1ª versão
   usava `body.admin-brutal .module-count` (2 classes) — perde pra
   `.detalhe-liga-redesign .module-card .module-count` (3 classes) do
   redesign.css, que continuava vencendo mesmo depois do "override". Precisa
   passar pelo ancestral real `.module-card` pra igualar o nº de classes
   (3 vs 3) e vencer via o tipo `body` extra (tie-break). */
body.admin-brutal .module-card .module-count {
    color: var(--admin-brutal-muted);
}
/* FIX round 1 (review): detalhe-liga.css:269-272 tem `#participantes-count`
   com especificidade de ID + !important (`color: var(--accent-orange)
   !important`) — vence QUALQUER override de classe, incluindo o de cima.
   Precisa escopar por ID pra igualar a especificidade e vencer só pelo
   `!important` (mesma técnica do `.back-button`, linha ~3639). */
body.admin-brutal #participantes-count {
    color: var(--admin-brutal-fg) !important;
}

/* .module-icon: 11 variantes de cor por `data-module` (participantes,
   ranking-geral, parciais, top10, rodadas, melhor-mes, mata-mata,
   pontos-corridos, luva-de-ouro, artilheiro-campeao, fluxo-financeiro)
   existem NOS 2 arquivos-fonte com paletas diferentes cada — colapsa tudo
   pra monocromático com o ancestral real `.module-card`, em vez de repetir
   11x por módulo.
   FIX (achado real via Playwright: 1ª versão renderizava com o fundo azul
   de "participantes" ainda visível — override não vencia): a variante de
   redesign.css é `.detalhe-liga-redesign .module-card[data-module="x"]
   .module-icon` — 4 classes/attrs (namespace + module-card + attr +
   module-icon), NÃO 3. `body.admin-brutal .module-card .module-icon` só
   tinha 3 classes (admin-brutal + module-card + module-icon) — empatava
   com a variante GENÉRICA (sem data-module) mas perdia pra qualquer
   variante COM data-module, que soma 1 attr a mais. Precisa do ancestral
   real `.detalhe-liga-redesign` (o `<main>` sempre carrega essa classe)
   pra igualar em 4 e vencer pelo tipo `body` extra. `animation:none` mata
   o `pulse-green` do ícone de "parciais" (decoração orgânica). */
body.admin-brutal .detalhe-liga-redesign .module-card .module-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
    animation: none;
}
body.admin-brutal .detalhe-liga-redesign .module-card .module-icon .material-icons {
    color: currentColor;
}
body.admin-brutal .detalhe-liga-redesign .module-card:hover .module-icon,
body.admin-brutal .detalhe-liga-redesign .module-card:hover .module-icon .material-icons {
    background: transparent;
    border-color: var(--admin-brutal-bg);
    color: var(--admin-brutal-bg);
    transform: none;
}
/* FIX round 1 (review): .module-arrow não tinha cobertura nenhuma —
   detalhe-liga-redesign.css:314-317 pinta laranja (`--color-primary`) no
   hover genérico e :303-305 pinta roxo (`--module-capitao-primary`) no
   hover do card de Capitão (13 ocorrências de .module-arrow no DOM,
   incluindo o card `.module-card-capitao` real em detalhe-liga.html:737).
   Um único seletor com o ancestral `.module-card:hover` cobre as duas
   fontes de uma vez. `--admin-brutal-bg` porque o fundo do card no hover
   já vira `--admin-brutal-fg` (linha ~3417) — a seta precisa contrastar
   com esse fundo, não com o normal. */
body.admin-brutal .module-card:hover .module-arrow {
    color: var(--admin-brutal-bg);
}

/* ---- Conteúdo dinâmico (tela secundária dos módulos) ----
   Cobre background/border das 2 fontes; display/margin-top/animation/
   overflow/transform continuam vindo de detalhe-liga.css (redesign.css não
   redeclara essas props — sem conflito de cor pra resolver ali). */
body.admin-brutal .dynamic-content {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}

/* ---- Toast de cache (3ª fonte: <style> inline em detalhe-liga.html
   ~linha 1020, além dos 2 arquivos-fonte) ----
   Fundo/borda/texto monocromáticos; .success/.error colapsam pra fg, mesmo
   critério dos 4 variantes semânticos já usado em .status-message
   (linha 1666-1669) e --success/--danger/--warning remapeados pra fg
   (linha 2460-2462). */
body.admin-brutal .toast-cache-mini {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .toast-cache-mini.success,
body.admin-brutal .toast-cache-mini.error {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .toast-cache-mini .material-symbols-outlined,
body.admin-brutal .toast-cache-mini.success .material-symbols-outlined,
body.admin-brutal .toast-cache-mini.error .material-symbols-outlined {
    color: var(--admin-brutal-fg);
}

/* ---- Ferramentas de administração da liga (seção colapsável) ----
   .admin-tools-grid usa background:#2a2a2a como truque de "linha divisória"
   nos gaps de 1px do grid — vira --admin-brutal-border, que some/aparece
   igual, só monocromático. */
body.admin-brutal .admin-tools-section {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .admin-tools-toggle {
    background: transparent;
}
body.admin-brutal .admin-tools-title,
body.admin-brutal .admin-tools-title .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .admin-tools-toggle:hover {
    background: var(--admin-brutal-border);
}
/* Achado real via Playwright (harness local): fundo vira border/fg no
   hover, mas o texto/ícone do título ("Administração da Liga") ficava
   sem inverter — mesmo bug de contraste que a nota de hover desta folha
   avisa pra nunca deixar acontecer (texto=fg sobre fundo=border, mesmo
   hex nos 2 temas). */
body.admin-brutal .admin-tools-toggle:hover .admin-tools-title,
body.admin-brutal .admin-tools-toggle:hover .admin-tools-title .material-icons {
    color: var(--admin-brutal-bg);
}
body.admin-brutal .admin-toggle-icon,
body.admin-brutal .admin-tools-toggle:hover .admin-toggle-icon,
body.admin-brutal .admin-tools-section:not(.admin-collapsed) .admin-toggle-icon {
    color: var(--admin-brutal-fg);
}
/* FIX round 1 (review): a regra acima cobre o estado normal do ícone com
   `fg`, mas não existia uma regra dedicada pro estado :hover — o ícone
   herdava `fg` mesmo com o fundo do toggle virando `border` no hover
   (mesmo hex nos 2 temas → ícone invisível). Precisa vencer por
   especificidade igual (2 classes) através da ordem de cascata + escopo
   mais específico do ancestral `:hover`. */
body.admin-brutal .admin-tools-toggle:hover .admin-toggle-icon {
    color: var(--admin-brutal-bg);
}
body.admin-brutal .admin-tools-grid {
    background: var(--admin-brutal-border);
    border-top: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .admin-tool-item {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .admin-tool-item:hover,
body.admin-brutal .admin-tool-item.danger:hover {
    background: var(--admin-brutal-fg);
}
/* Contraste no hover: fundo vira fg, label/desc/seta/ícone viram bg. */
body.admin-brutal .admin-tool-item:hover .admin-tool-label,
body.admin-brutal .admin-tool-item:hover .admin-tool-desc,
body.admin-brutal .admin-tool-item:hover .admin-tool-arrow,
body.admin-brutal .admin-tool-item:hover .admin-tool-icon,
body.admin-brutal .admin-tool-item:hover .admin-tool-icon .material-icons {
    color: var(--admin-brutal-bg);
}
/* .admin-tool-icon: 8 variantes de cor (.edit/.teams/.process/.cache/
   .danger/.create/.audit/.modules) — mesmo critério do .module-icon acima,
   colapsa via ancestral real `.admin-tool-item` (especificidade 3 classes
   + tipo body bate as variantes `.admin-tool-icon.tipo`, também 3 classes
   mas sem tipo). */
body.admin-brutal .admin-tool-item .admin-tool-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .admin-tool-item .admin-tool-icon .material-icons {
    color: currentColor;
}
body.admin-brutal .admin-tool-label {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .admin-tool-desc,
body.admin-brutal .admin-tool-arrow {
    color: var(--admin-brutal-muted);
}

/* ---- Quick stats (grid de estatísticas rápidas) ----
   Não encontrado no DOM renderizado de detalhe-liga.html hoje (sem HTML
   estático nem geração via JS) — dead CSS na página atual, mas selector
   real (não inventado) e pedido explicitamente no brief; Playwright não
   consegue confirmar visualmente por não haver elemento pra afetar. */
body.admin-brutal .quick-stat-card {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .quick-stat-card.highlight {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .quick-stat-value,
body.admin-brutal .quick-stat-card.highlight .quick-stat-value {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .quick-stat-label {
    color: var(--admin-brutal-muted);
}

/* ---- Tabela de destaques (mitos/micos) ----
   Mesmo caso do quick-stats: sem uso hoje no DOM de detalhe-liga.html
   (dead CSS), coberto porque o brief pediu explicitamente. positive/
   negative colapsam pra fg, mesmo critério dos outros pares
   positivo/negativo já tratados nesta folha (extrato-hero-v2__valor,
   linha 3072-3078). */
body.admin-brutal .highlight-table thead {
    background: transparent;
}
body.admin-brutal .highlight-table th {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .highlight-table td {
    border-top: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .highlight-table tbody tr:hover {
    background: var(--admin-brutal-border);
}
body.admin-brutal .highlight-table .pos-cell,
body.admin-brutal .highlight-table .pos-cell.gold {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .highlight-table .team-name {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .highlight-table .team-avatar {
    background: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .highlight-table .pts-cell.positive,
body.admin-brutal .highlight-table .pts-cell.negative {
    color: var(--admin-brutal-fg);
}
/* FIX round 1 (review): --admin-brutal-border é literalmente o mesmo hex
   que --admin-brutal-fg nos 2 temas (_admin-tokens.css:799-800/809-810) —
   o hover da linha (`tbody tr:hover`, acima) vira background: border, mas
   as 3 regras de cor acima (mais específicas, sem :hover no seletor)
   continuavam fixando fg o tempo todo, reintroduzindo a colisão fg-sobre-fg
   no hover. Mesmo critério já usado corretamente em outras tabelas desta
   folha (tr:hover + tr:hover td): escopa por `tbody tr:hover` pra vencer
   por especificidade (+1 classe cada) e virar bg só no hover, mantendo fg
   no estado normal. Nota: `.highlight-table` confirmado morto no DOM atual
   (ver comentário linha ~3601) — fix aplicado por completude, sem impacto
   visual hoje. */
body.admin-brutal .highlight-table tbody tr:hover .pos-cell,
body.admin-brutal .highlight-table tbody tr:hover .team-name,
body.admin-brutal .highlight-table tbody tr:hover .pts-cell.positive,
body.admin-brutal .highlight-table tbody tr:hover .pts-cell.negative {
    color: var(--admin-brutal-bg);
}

/* ---- Botão voltar (injetado via JS em detalhe-liga-orquestrador.js:178) ----
   Fonte original usa `#secondary-screen .back-button` (especificidade de
   ID) — precisa !important pra vencer, ID sempre bate classe não importa
   quantas classes empilhar. */
body.admin-brutal .back-button {
    background: transparent !important;
    border: 2px solid var(--admin-brutal-border) !important;
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .back-button:hover {
    background: var(--admin-brutal-fg) !important;
    color: var(--admin-brutal-bg) !important;
}

/* ---- Overlay de loading de módulo (injetado via JS,
   detalhe-liga-orquestrador.js:762-783) ----
   .loading-message já vem de graça via --text-primary remapeado
   (linha 22); .loading-spinner já vem de graça via regra global
   (linha 627-631, mesmo padrão .loading::after). Só backdrop-filter
   (blur — decoração, mesmo critério do .extrato-hero-v2 linha 3027-3028)
   e .loading-submessage (usa --text-muted, não remapeado globalmente)
   precisam de regra própria. */
body.admin-brutal .module-loading-overlay {
    background: var(--admin-brutal-bg);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
}
body.admin-brutal .loading-submessage {
    color: var(--admin-brutal-muted);
}

/* ==========================================================================
   TASK 12 — capitao-luxo.css (detalhe-liga.html) + admin-resta-um.css
   (detalhe-liga.html E admin-resta-um.html)
   ========================================================================== */

/* === CAPITAO-LUXO.CSS — ranking de capitães (detalhe-liga.html) ===
   16288 bytes, namespace .capitao-luxo- (container/header/legenda/tabela),
   .capitao- (chips/histórico), .chip- (dots) e .btn-ver-historico.
   Cores de módulo (roxo, --module-capitao-...) e status globais (--color-
   success-light, --color-danger) colapsam pra monocromático, mesmo precedente
   de .stat-badge/.alert-... /.mercado-dot já aplicado em tasks anteriores.
   Tags h2/h3 confirmadas via public/js/capitao-luxo.js (linhas 161,196) já
   herdam cor/fonte de graça do genérico "h1,h2,h3,h4" (linha ~634-640) — não
   duplicadas aqui (.capitao-luxo-title h3, .capitao-luxo-aguardando-title). */

/* ---- Container ---- */
body.admin-brutal .capitao-luxo-container {
    background: var(--admin-brutal-bg);
    border: 2px solid var(--admin-brutal-border);
}
/* ::after é blob de glow borrado roxo (blur 60px) — decoração 100% orgânica,
   mesmo critério do .extrato-hero-v2::after (linha ~3037-3046): oculta em
   vez de recolorir. */
body.admin-brutal .capitao-luxo-container::after {
    display: none;
}

/* ---- Header ---- */
body.admin-brutal .capitao-luxo-header {
    background: transparent;
    border-bottom: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-badge,
body.admin-brutal .capitao-luxo-info-rodada {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* Ícone dourado military_tech (capitao-luxo.js:197) via style inline
   `color:#fbbf24` — inline sempre vence regra de autor sem !important. */
body.admin-brutal .capitao-luxo-title .material-icons {
    color: var(--admin-brutal-fg) !important;
}

/* ---- Legenda ----
   4 swatches de cor (pts/média/melhor/pior) indicam significado — colapsam
   monocromático. Especificidade de "body.admin-brutal .capitao-luxo-legenda
   .legenda-cor" (3 classes + 1 tipo) já supera cada variante
   ".legenda-cor.pts/.media/.melhor/.pior" (3 classes, 0 tipo — empata em
   classe, perde em tipo), sem precisar repetir a regra 4x. */
body.admin-brutal .capitao-luxo-legenda {
    background: transparent;
    border-bottom-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .capitao-luxo-legenda .legenda-cor {
    background: var(--admin-brutal-fg);
}

/* ---- Tabela ---- */
body.admin-brutal .capitao-luxo-ranking-table thead th {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-ranking-table tbody tr {
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-ranking-table tbody td {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-ranking-table .nome-cartola {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-ranking-table .nome-time {
    color: var(--admin-brutal-muted);
}
/* Escopado por "tbody" (não só ".capitao-luxo-ranking-table"): ".col-pos"
   também existe no <th> do cabeçalho (thead th.col-pos, mesma classe) — sem
   o ancestral tbody, esta regra (3 classes) bateria a regra do thead th (2
   classes + 3 tipos) por contagem de classe e pintaria o texto do
   cabeçalho de fg sobre fundo fg (invisível). Achado real via Playwright. */
body.admin-brutal .capitao-luxo-ranking-table tbody .col-pos,
body.admin-brutal .capitao-luxo-ranking-table tbody .val-pts,
body.admin-brutal .capitao-luxo-ranking-table tbody .val-media,
body.admin-brutal .capitao-luxo-ranking-table tbody .val-melhor,
body.admin-brutal .capitao-luxo-ranking-table tbody .val-pior,
body.admin-brutal .capitao-luxo-ranking-table tbody .val-distintos {
    color: var(--admin-brutal-fg);
}
/* Ícones ouro/prata/bronze (looks_one/looks_two/looks_3, capitao-luxo.js:
   409,411,413) via style inline `color:#ffd700/#c0c0c0/#cd7f32` dentro do
   próprio <td class="col-pos"> — precisa !important, inline vence a regra
   acima (sem !important) que só pinta o texto do td, não o ícone filho. */
body.admin-brutal .capitao-luxo-ranking-table tbody .col-pos .material-icons {
    color: var(--admin-brutal-fg) !important;
}
/* Destaque 1º lugar / pódio: tints de fundo por posição, borda lateral e cor
   dourada especial do col-pos (#fbbf24) — colapsam monocromático.
   `:not(:hover)` obrigatório nas 3 regras de fundo abaixo: sem ele, a
   especificidade delas (3 classes + 3 tipos) vence o hover genérico "tbody
   tr:hover" (2 classes + 3 tipos, linha ~589) mesmo durante o hover — a
   linha ficava com fundo transparente (resolvendo pro bg do container)
   enquanto o texto virava --admin-brutal-bg (herdado do hover), texto
   idêntico ao fundo (achado real via Playwright, fix round 1). */
body.admin-brutal .capitao-luxo-ranking-table tbody tr.destaque-primeiro:not(:hover) {
    background: var(--admin-brutal-muted);
    border-left-color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-ranking-table tbody tr.destaque-primeiro:hover {
    border-left-color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-ranking-table tbody tr.destaque-primeiro .col-pos {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-ranking-table tbody tr.podio-2:not(:hover),
body.admin-brutal .capitao-luxo-ranking-table tbody tr.podio-3:not(:hover) {
    background: transparent;
}
/* Contraste em :hover — as colunas coloridas acima (3 classes cada) são mais
   específicas que o hover genérico de tabela "body.admin-brutal tbody
   tr:hover td" (2 classes + 4 tipos — empata/perde em classe), então
   continuariam fg/muted mesmo com o fundo da linha virando fg no hover —
   mesmo bug já documentado no .highlight-table (linha ~3690, fix round 1).
   Escopa por "tbody tr:hover" (+1 classe) pra vencer e virar bg só no hover.
   ORDEM IMPORTA: precisa vir DEPOIS do bloco ".destaque-primeiro .col-pos"
   acima — mesma especificidade (4 classes + 3 tipos ambos), em empate quem
   vem DEPOIS no arquivo vence; sem essa ordem, a linha 1º lugar mantinha
   fg-sobre-fg no hover mesmo com esta regra existindo (achado real via
   Playwright, contradição do que dizia a 1ª versão desta regra). */
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .col-pos,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .nome-cartola,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .nome-time,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .val-pts,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .val-media,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .val-melhor,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .val-pior,
body.admin-brutal .capitao-luxo-ranking-table tbody tr:hover .val-distintos {
    color: var(--admin-brutal-bg);
}

/* ---- Histórico por rodada (chips) ---- */
body.admin-brutal .capitao-rodada-chip {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-rodada-chip .chip-rodada {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-rodada-chip.chip-parcial-pending,
body.admin-brutal .capitao-rodada-chip.chip-parcial-done {
    border-color: var(--admin-brutal-border);
}
/* Dots de status (pendente/positivo/negativo) colapsam monocromático —
   dot-pending mantém a animação dotPulse (só anima opacity, não cor: sem
   conflito de cascata com nossa declaração estática de background). */
body.admin-brutal .chip-dot.dot-pending,
body.admin-brutal .chip-dot.dot-positive,
body.admin-brutal .chip-dot.dot-negative {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .chip-dot.dot-neutral {
    background: var(--admin-brutal-muted);
}

/* ---- Toggle "ver mais/menos" (com !important na própria fonte) ----
   .capitao-chip-toggle e seu :hover usam !important na fonte
   (capitao-luxo.css:291-301, 6 ocorrências) — nossa regra precisa de
   !important também pra vencer (!important sempre bate normal, não importa
   a especificidade). */
body.admin-brutal .capitao-chip-toggle {
    background: transparent !important;
    border-color: var(--admin-brutal-border) !important;
    color: var(--admin-brutal-fg) !important;
}
/* Contraste em :hover: bg vira fg, texto (fg na base acima) precisa virar bg
   — senão fg-sobre-fg. */
body.admin-brutal .capitao-chip-toggle:hover {
    background: var(--admin-brutal-fg) !important;
    color: var(--admin-brutal-bg) !important;
}

/* ---- Banner rodada final ---- */
body.admin-brutal .capitao-luxo-banner-final {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* .parcial-ativo dispara @keyframes borderPulseCap (capitao-luxo.css:364-371),
   que anima border-color entre 2 tons de roxo — animação sempre vence
   declaração normal de autor na cascata (animation > normal author), então a
   cor estática acima seria ignorada durante o pulso. animation:none mata o
   keyframe, mesmo precedente do .module-icon (linha ~3467-3473: pulse-green). */
body.admin-brutal .capitao-luxo-banner-final.parcial-ativo {
    animation: none;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-banner-final .banner-titulo {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-banner-final .banner-status {
    color: var(--admin-brutal-muted);
}
/* .pulsando só anima opacity (@keyframes textPulseCap) — color é declaração
   estática, sem conflito de cascata, override normal já basta. */
body.admin-brutal .capitao-luxo-banner-final .banner-status.pulsando {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-banner-final .banner-lider {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-banner-final .lider-label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .capitao-luxo-banner-final .lider-nome {
    color: var(--admin-brutal-fg);
}
/* Ícone military_tech/emoji_events do banner (capitao-luxo.js:518) via style
   inline `color:#fbbf24` — precisa !important. */
body.admin-brutal .capitao-luxo-banner-final .banner-content .material-icons {
    color: var(--admin-brutal-fg) !important;
}

/* ---- Loading / Empty / Error ---- */
body.admin-brutal .capitao-luxo-loading .spinner {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
/* var(--text-muted)/var(--text-dim) não são remapeadas no topo do arquivo
   (só --text-primary é) — mesmo motivo já documentado no
   .super-modal__message (linha ~747-753). !important obrigatório: o 2º <p>
   do estado "consolidando" (capitao-luxo.js:370, "Primeira vez pode
   demorar...") tem style inline `color:#888` no próprio elemento — inline
   vence regra de autor sem !important mesmo aqui (1º <p>, sem inline nesse
   elemento, já ficava correto via herança bloqueada por esta regra; o 2º
   não, por ter inline próprio). */
body.admin-brutal .capitao-luxo-loading p {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .capitao-luxo-empty {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .capitao-luxo-empty .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-error {
    color: var(--admin-brutal-fg);
}

/* ---- Aguardando dados (pré-temporada) ---- */
body.admin-brutal .capitao-luxo-aguardando-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .capitao-luxo-aguardando-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-luxo-aguardando-desc {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .capitao-luxo-aguardando-info {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Botão Ver Histórico + Barra de Progresso (layout v2) ---- */
body.admin-brutal .btn-ver-historico {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* Contraste em :hover: fundo vira fg, texto precisa virar bg — mesmo padrão
   já usado em .btn/.quick-action-card/.liga-card-link acima. */
body.admin-brutal .btn-ver-historico:hover {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* Container usa --admin-brutal-muted (não bg/transparent) pra garantir que o
   label centralizado (cor --admin-brutal-bg, ver abaixo) continue legível
   também na parte NÃO preenchida da barra, sem precisar reescrever o
   text-shadow original (mantido intacto na fonte). */
body.admin-brutal .capitao-progresso-container {
    background: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .capitao-progresso-bar {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .capitao-progresso-label {
    color: var(--admin-brutal-bg);
}

/* === ADMIN-RESTA-UM.CSS — detalhe-liga.html E admin-resta-um.html ===
   10236 bytes, namespace .ru-*, compartilhado pelas 2 telas (fix aqui cobre
   as duas simultaneamente). Zero classes em comum com o que Tasks 5/7/11 já
   cobriram em detalhe-liga.html (namespaces .module-, .extrato-, .fluxo-
   e .historico- não colidem com .ru-).
   --app-border/--app-text-muted/--app-warning/--app-danger/--app-success já
   remapeados no topo do arquivo (bloco "Task 12" acima) cobrem de graça boa
   parte das regras originais — inclusive estilos INLINE no JS
   (admin-resta-um.js) que nenhuma regra por seletor alcançaria. Abaixo, só o
   que sobra: cores --module-restaum-* e hardcodes literais (white/rgba
   fixo/gradiente) que não passam por nenhuma var remapeada. Botões
   .ru-btn-ghost e .ru-btn-deletar-edicao são <button> reais (confirmado via
   admin-resta-um.js:546,552) sem nenhuma cor restante fora de --app-* — já
   herdam bg/color/border/:hover de graça do genérico "button"/"button:hover"
   (linha ~514-527, especificidade 2 tipos vs 0 do seletor de classe única da
   fonte) e por isso NÃO precisam de regra própria aqui. */

/* ---- Header ---- */
/* background: var(--app-surface) na fonte — FIX ROUND 1 (Task 13 review,
   achado 2): gap retroativo desta task fechado. --app-surface era
   definida só em :root com indireção de 2 níveis e não recalculava dentro
   de body.admin-brutal; comentário original assumia "vem de graça" sem
   verificar. Corrigido remapeando --app-surface DIRETO no bloco raiz do
   arquivo — nenhuma regra própria necessária aqui, confirmado via
   Playwright/getComputedStyle nos 2 temas. */
body.admin-brutal .ru-admin-header {
    border-color: var(--admin-brutal-border);
}
/* ::before é o friso gradiente 3px no topo — vira friso sólido, mesmo
   precedente do .liga-card::before (linha ~542-547). */
body.admin-brutal .ru-admin-header::before {
    background: var(--admin-brutal-fg);
}
/* ::after é blob de glow borrado (blur 60px) — decoração 100% orgânica,
   mesmo critério do .extrato-hero-v2::after. .ru-admin-header h1 já herda
   cor/fonte de graça do genérico "h1,h2,h3,h4" (linha ~634-640) — é <h1>
   real (admin-resta-um.html:26), não duplicado aqui. */
body.admin-brutal .ru-admin-header::after {
    display: none;
}
body.admin-brutal .ru-admin-header p {
    color: var(--admin-brutal-muted);
}

/* ---- Botão Voltar (<a>, não <button> — confirmado via
   admin-resta-um.html:33) ----
   border/color da base já vêm de graça via --app-border/--app-text-muted
   remapeados — só o :hover (cor de módulo, não --app-*) precisa de override. */
body.admin-brutal .ru-btn-voltar:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

/* ---- Cards ---- */
/* .ru-card: border-color já vinha de graça via --app-border remapeado.
   background (var(--app-surface)) TAMBÉM já vem de graça agora, via o fix
   retroativo do remap direto na raiz (Fix round 1) — ver nota no header
   acima. Nenhuma regra própria necessária para .ru-card. */
body.admin-brutal .ru-card-title {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}

/* ---- Stats ---- */
/* Base "color: white" hardcoded + 2 instâncias com estilo INLINE
   (admin-resta-um.js:355 var(--app-success), :367 var(--module-restaum-
   primary)) — --app-success já remapeado (grátis), mas --module-restaum-
   primary não é --app-*, e estilo inline só é vencido com !important. */
body.admin-brutal .ru-stat-value {
    color: var(--admin-brutal-fg) !important;
}
/* .ru-stat-label já vem de graça via --app-text-muted remapeado.
   .ru-stat background (var(--app-bg)) TAMBÉM já vem de graça agora, via o
   fix retroativo do remap direto na raiz (Fix round 1) — ver nota no
   header acima. Nenhuma regra própria necessária para .ru-stat. */

/* ---- Edição (cards de listagem) ---- */
/* .ru-edicao-card: border-color já vinha de graça via --app-border
   remapeado. background (var(--app-bg)) TAMBÉM já vem de graça agora, via
   o fix retroativo do remap direto na raiz (Fix round 1). Nenhuma regra
   própria necessária para .ru-edicao-card. */
body.admin-brutal .ru-edicao-nome {
    color: var(--admin-brutal-fg);
}
/* .ru-edicao-rodadas já vem de graça via --app-text-muted remapeado. Fundo
   das 3 variantes de status é rgba hardcoded (não var) — colapsa
   transparente; cor já vem de graça via --app-warning/--app-success/
   --app-text-muted remapeados. */
body.admin-brutal .ru-edicao-status.pendente,
body.admin-brutal .ru-edicao-status.em_andamento,
body.admin-brutal .ru-edicao-status.finalizada {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}

/* ---- Participantes ---- */
/* .ru-participante-row border-bottom e .ru-participante-pontos já vêm de
   graça via --app-border/--app-text-muted remapeados. */
body.admin-brutal .ru-participante-nome {
    color: var(--admin-brutal-fg);
}
/* .vivo/.eliminado/.campeao já vêm de graça via --app-success/--app-danger/
   --app-warning remapeados (todos colapsam pra fg). */

/* ---- Botões de ação primária ----
   .ru-btn-primary ("Criar") e .ru-btn-salvar (mutuamente exclusivos no DOM —
   admin-resta-um.js:502,506) são a CTA de acento, mesma convenção do
   .btn-primary-new/.empty-action-new/.retry-btn-new (acento amarelo + ink,
   invertido pra fg/bg no :hover). */
body.admin-brutal .ru-btn-primary,
body.admin-brutal .ru-btn-salvar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .ru-btn-primary:hover:not(:disabled),
body.admin-brutal .ru-btn-salvar:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- Banner de edição (modo edição) ----
   ACHADO: `.ru-edit-banner` está CONFIRMADAMENTE MORTA — o elemento real
   (admin-resta-um.js:401) é renderizado só com `id="ruEditBanner"` e estilo
   INLINE (background/border em --module-restaum-*, não --app-*, não
   remapeado), sem essa classe. Regra abaixo mantida por completude (mesmo
   critério do .highlight-table morto, Task 11), mas o fix real que afeta a
   tela precisa mirar o ID, !important pra vencer o inline (mesma técnica do
   #participantes-count, Task 11). Ícones internos (`<span class="material-
   icons" style="color:var(--module-restaum-primary)">`, linhas 180/234/402/
   495/560) NÃO têm id/classe própria — inalcançáveis sem seletor genérico
   demais (afetaria .material-icons em toda a página) ou invenção de wrapper;
   deixados como estão, achado documentado. */
body.admin-brutal .ru-edit-banner {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .ru-edit-banner .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal #ruEditBanner {
    background: transparent !important;
    border-color: var(--admin-brutal-border) !important;
}
/* Mesmo padrão do #ruEditBanner acima: sem classe própria, background
   inline em --module-restaum-muted (admin-resta-um.js:494). */
body.admin-brutal #ruTaxaPreviewRow {
    background: transparent !important;
}
/* .ru-empty-msg já vem de graça via --app-text-muted remapeado. */

/* ---- Formulário ----
   .ru-form-row/-2col label já vêm de graça via --app-text-muted remapeado;
   inputs/selects já cobertos pela regra genérica "input,select" (linha
   ~582-589, 2 tipos vs 1 da fonte). */
body.admin-brutal .ru-form-section {
    color: var(--admin-brutal-fg);
    border-bottom-color: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .ru-form-checkbox input[type="checkbox"] {
    accent-color: var(--admin-brutal-accent);
}
body.admin-brutal .ru-form-checkbox span {
    color: var(--admin-brutal-fg);
}

/* ---- Timeline (histórico de eliminações) ----
   .ru-timeline-item border-bottom e .ru-timeline-pontos/-date/-desempate já
   vêm de graça via --app-border/--app-text-muted remapeados. */
body.admin-brutal .ru-timeline-rodada {
    background: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .ru-timeline-nome {
    color: var(--admin-brutal-fg);
}

/* ---- Sugestão inteligente de rodadas ---- */
body.admin-brutal .ru-sugestao-rodadas {
    background: transparent;
    border-color: var(--admin-brutal-border);
}

/* ---- Estados (empty/loading) ----
   .ru-empty/.ru-loading já vêm de graça via --app-text-muted remapeado. */

/* ==========================================================================
   TASK 13 — admin-artilheiro.css + admin-capitao.css + admin-luva-ouro.css
   (admin-artilheiro.html / admin-capitao.html / admin-luva-ouro.html —
   1 tela exclusiva por arquivo, zero overlap entre eles)
   ==========================================================================
   Os 3 arquivos (~6.4KB cada) são estruturalmente IDÊNTICOS — mesmo template
   de admin-resta-um.css (Task 12), só o prefixo muda (.ac-/.cl-/.lo-) e a var
   de cor de módulo (--module-artilheiro-/--module-capitao-/--module-luva-).
   Zero !important nas 3 fontes (confirmado via grep -c, 2 passes, 0/0/0).
   --app-border/--app-text-muted (redefinidas DIRETO em body.admin-brutal,
   linha ~38-39) já remapeadas de graça, cobrindo boa parte da base de
   header/liga-selector/card/stat/form/empty/loading nos 3 arquivos.
   ACHADO DE ARQUITETURA, RESOLVIDO NA RAIZ (Fix round 1, Task 13 review,
   achado 2): --app-bg/--app-surface eram definidas SÓ em :root
   (_admin-tokens.css:273-274) como `var(--surface-card)`/`var(--surface-bg)`
   — indireção de 2 níveis que não recalculava dentro de body.admin-brutal
   (medido via Playwright/getComputedStyle: `--app-surface` retornava o
   valor de :root mesmo com `--surface-card` já correto no mesmo elemento).
   Corrigido remapeando --app-bg/--app-surface/--app-text-primary DIRETO no
   bloco raiz de body.admin-brutal (topo do arquivo, linha ~38-42) — mesmo
   padrão de --app-border/--app-text-muted (indireção de 1 nível só,
   resolvida no próprio escopo). `.xx-admin-header`/`.xx-card`/`.xx-stat`
   abaixo não precisam mais de override pontual de background: o remap na
   raiz já resolve para os 3 arquivos desta task E para `.ru-admin-header`/
   `.ru-card`/`.ru-stat`/`.ru-edicao-card` (Task 12, admin-resta-um.css) —
   ver correção retroativa na seção Task 12 abaixo. `.xx-liga-selector
   select` e `.xx-form-row input,select` (mesma variável na fonte) já
   estavam ok antes do fix: vencidos por especificidade pela regra genérica
   "input,select" (linha ~602-609), que declara `background: var(--admin-
   brutal-bg)` DIRETO (sem indireção).
   Cor de módulo (--module-xxx-primary/border/gradient, não --app-*) e
   hardcodes literais "white"/var(--color-success) (global, não remapeado —
   mesmo achado do .ru-btn-salvar, Task 12) também não são alcançados por
   nenhuma var remapeada — cobertos abaixo.
   Pseudo-elementos: exatamente 2 por arquivo (::before/::after em
   .xx-admin-header, 6 no total), todos cobertos abaixo — nenhum wildcard
   genérico alcançaria (regra "* {border-radius:0}" não pega pseudo-
   elementos).
   Regra genérica "input,select" (linha ~602-609, 2 tipos vs 1 classe+1 tipo
   da fonte) e "button" (linha ~535-541, 2 tipos vs 1 classe da fonte) já
   vencem por especificidade de graça — cobrem .xx-liga-selector select
   (color:white na fonte) e a base de .xx-btn/.xx-btn-primary/.xx-btn-salvar/
   .xx-btn-ghost SEM precisar de regra própria; só o :hover destes e o
   tratamento de acento dos botões primários (decisão de design, não bug)
   precisam de override abaixo. */

/* ---- ADMIN-ARTILHEIRO.CSS — admin-artilheiro.html (prefixo .ac-) ---- */

/* Header: background: var(--app-surface) na fonte — resolvido de graça pelo
   remap direto de --app-surface no topo do arquivo (Fix round 1). border-color
   é --module-artilheiro-border (rgba verde), também não --app-*, precisa de
   override. */
body.admin-brutal .ac-admin-header {
    border-color: var(--admin-brutal-border);
}
/* ::before é o friso gradiente 3px no topo (var(--gradient-artilheiro)) —
   vira friso sólido, mesmo precedente do .ru-admin-header::before (Task 12). */
body.admin-brutal .ac-admin-header::before {
    background: var(--admin-brutal-fg);
}
/* ::after é blob de glow borrado verde (blur 60px) — decoração 100%
   orgânica, mesmo critério do .ru-admin-header::after (Task 12). O <h1>
   (admin-artilheiro.html:27) já herda cor/fonte de graça do genérico
   "h1,h2,h3,h4" (linha ~654-660) — não duplicado aqui. */
body.admin-brutal .ac-admin-header::after {
    display: none;
}
/* Ícone military_tech do h1 (admin-artilheiro.html:28) via style inline
   `color:var(--module-artilheiro-primary)` — inline sempre vence regra de
   autor sem !important, mesmo sendo var (a var não é remapeada nesse
   escopo, resolve pro verde de módulo). */
body.admin-brutal .ac-admin-header h1 .material-icons {
    color: var(--admin-brutal-fg) !important;
}

/* Botão Voltar (<a>, confirmado via admin-artilheiro.html:33) — base já
   vem de graça via --app-border/--app-text-muted; só o :hover (cor de
   módulo) precisa. */
body.admin-brutal .ac-btn-voltar:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

/* .ac-card: background (var(--app-surface)) e border-color (var(--app-border))
   já vêm de graça via remap direto (Fix round 1 / Task 12) — nenhuma regra
   própria necessária. */
/* Card title: <span> (admin-artilheiro.js:141), color:white hardcoded —
   nenhuma regra genérica alcança span solto. */
body.admin-brutal .ac-card-title {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}

/* .ac-stat: background (var(--app-bg)) já vem de graça via remap direto
   (Fix round 1) — nenhuma regra própria necessária. */
/* Stat value: color:white hardcoded na base. 2 instâncias com estilo INLINE
   (admin-artilheiro.js:123,133) usam var(--app-success)/var(--app-text-muted)
   — já remapeados, corretos sem esforço extra; a 3a instância (Temporada,
   admin-artilheiro.js:129) não tem inline e cai na base abaixo. */
body.admin-brutal .ac-stat-value {
    color: var(--admin-brutal-fg);
}

/* Ranking (pos/nome/gols): CONFIRMADAMENTE MORTA nesta tela — grep em
   admin-artilheiro.js/.html não acha nenhum uso de .ac-ranking-*, o dashboard
   deste módulo não renderiza ranking nenhum. Mantida por completude, mesmo
   critério do .ru-edit-banner (Task 12). */
body.admin-brutal .ac-ranking-pos,
body.admin-brutal .ac-ranking-gols {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .ac-ranking-nome {
    color: var(--admin-brutal-fg);
}

/* Botões de ação primária: .ac-btn-primary é <button> real na fonte mas
   CONFIRMADAMENTE MORTO nesta tela (grep no JS só acha "ac-btn ac-btn-
   salvar", nunca "ac-btn-primary") — mantido por completude. .ac-btn-salvar
   ("Salvar Configuracoes", admin-artilheiro.js:187) é a CTA de acento, mesma
   convenção do .ru-btn-primary/.ru-btn-salvar (Task 12) e .btn-primary-new
   (acento amarelo + ink, invertido pra fg/bg no :hover). Fundo de
   .ac-btn-salvar na fonte é var(--color-success) — token GLOBAL não
   remapeado (confirmado: só existe remap local em .modulos-stat-icon, não no
   escopo body.admin-brutal), por isso precisa de override mesmo já com a
   regra genérica "button" cobrindo a base monocromática. */
body.admin-brutal .ac-btn-primary,
body.admin-brutal .ac-btn-salvar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .ac-btn-primary:hover:not(:disabled),
body.admin-brutal .ac-btn-salvar:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .ac-btn-ghost: CONFIRMADAMENTE MORTA nesta tela (mesmo grep acima) — sem
   regra própria (Fix round 1, Task 13 review, achado 1): o genérico
   "button:hover" (linha ~535-541) já herda de graça, mesmo precedente do
   .ru-btn-ghost (Task 12). Uma regra "color" isolada aqui perderia só a
   metade do :hover genérico (que também seta background: fg), resultando em
   texto fg sobre fundo fg — contraste zero, mesmo hex nos 2 temas. */

/* Form: .ac-form-section usa cor de módulo (não --app-*) no texto e na
   borda. .ac-form-checkbox: accent-color de módulo no checkbox, color:white
   hardcoded no <span> — nenhuma regra genérica alcança nenhum dos dois. */
body.admin-brutal .ac-form-section {
    color: var(--admin-brutal-fg);
    border-bottom-color: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .ac-form-checkbox input[type="checkbox"] {
    accent-color: var(--admin-brutal-accent);
}
body.admin-brutal .ac-form-checkbox span {
    color: var(--admin-brutal-fg);
}
/* .ac-empty/.ac-loading já vêm de graça via --app-text-muted remapeado. */

/* ---- ADMIN-CAPITAO.CSS — admin-capitao.html (prefixo .cl-) ----
   NÃO confundir com capitao-luxo.css (Task 12, detalhe-liga.html) — namespace
   .cl- aqui é exclusivo de admin-capitao.html, zero overlap de classes com
   .capitao-luxo-* / .capitao-* / .chip-* já cobertos na Task 12. Único
   arquivo dos 3 desta task com seção extra (Consolidação + Ranking Preview),
   por isso o bloco mais extenso. */

/* background: var(--app-surface) na fonte — já vem de graça via remap
   direto (Fix round 1). border-color não é --app-*, precisa de override. */
body.admin-brutal .cl-admin-header {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .cl-admin-header::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .cl-admin-header::after {
    display: none;
}
/* Ícone shield do h1 (admin-capitao.html:28) via style inline
   `color:var(--module-capitao-primary)` — mesma técnica do .ac- acima. */
body.admin-brutal .cl-admin-header h1 .material-icons {
    color: var(--admin-brutal-fg) !important;
}

body.admin-brutal .cl-btn-voltar:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

/* .cl-card: background (var(--app-surface)) já vem de graça via remap direto
   (Fix round 1) — nenhuma regra própria necessária (afeta as 3 instâncias de
   .cl-card nesta tela: Consolidação, Ranking Preview, Formulário). */
body.admin-brutal .cl-card-title {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}

/* .cl-stat: background (var(--app-bg)) já vem de graça via remap direto
   (Fix round 1) — nenhuma regra própria necessária. */
/* Stat value: color:white hardcoded na base. 3 das 4 instâncias têm estilo
   INLINE (admin-capitao.js:160,170) com var(--app-success)/var(--app-
   warning)/var(--app-text-muted), já remapeados; as 2 sem inline (Temporada
   e Participantes, admin-capitao.js:166,174) caem na base abaixo. */
body.admin-brutal .cl-stat-value {
    color: var(--admin-brutal-fg);
}

/* Ranking Preview: ÚNICO dos 3 arquivos onde .cl-ranking-* é REALMENTE usado
   (_renderRankingPreview, admin-capitao.js:398-415, Top 10 de capitães). */
body.admin-brutal .cl-ranking-pos,
body.admin-brutal .cl-ranking-pontos {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .cl-ranking-nome {
    color: var(--admin-brutal-fg);
}

/* Input avulso "Consolidar até rodada" (admin-capitao.js:192-193) — estilo
   INLINE completo no próprio <input id="clRodadaFinal">. `background:
   var(--app-bg)` agora resolve correto sem override: como --app-bg é
   remapeado DIRETO em body.admin-brutal (Fix round 1), o próprio valor
   inline já computa para --admin-brutal-bg — nenhuma regra de background
   é necessária aqui. Sobra só `color:white` hardcoded (literal, não var —
   achado real de auditoria de cores inline em JS), invisível no tema claro
   (branco sobre fundo branco); precisa de override com !important pois
   inline sempre vence regra de autor sem !important — mesma técnica do
   #ruEditBanner (Task 12). */
body.admin-brutal #clRodadaFinal {
    color: var(--admin-brutal-fg) !important;
}

/* Botões de ação primária: .cl-btn-primary é o único .xx-btn-primary REAL
   dos 3 arquivos (botão "Consolidar Ranking", id="clBtnConsolidar",
   admin-capitao.js:196). .cl-btn-salvar ("Salvar Configuracoes",
   admin-capitao.js:268) — mesma convenção de acento do .ac- acima e do
   .ru-btn-primary/.ru-btn-salvar (Task 12); fundo var(--color-success) no
   .cl-btn-salvar é o mesmo achado (token global não remapeado). */
body.admin-brutal .cl-btn-primary,
body.admin-brutal .cl-btn-salvar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .cl-btn-primary:hover:not(:disabled),
body.admin-brutal .cl-btn-salvar:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .cl-btn-ghost: CONFIRMADAMENTE MORTA nesta tela (grep no JS não acha
   "cl-btn-ghost") — sem regra própria (Fix round 1, mesmo motivo do
   .ac-btn-ghost acima). */

body.admin-brutal .cl-form-section {
    color: var(--admin-brutal-fg);
    border-bottom-color: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
/* .cl-form-checkbox é REAL nesta tela (checkbox "Premiar melhor capitao de
   cada rodada", id="clBonusRodada", admin-capitao.js:261-264) — único dos 3
   arquivos onde este bloco não é dead code. */
body.admin-brutal .cl-form-checkbox input[type="checkbox"] {
    accent-color: var(--admin-brutal-accent);
}
body.admin-brutal .cl-form-checkbox span {
    color: var(--admin-brutal-fg);
}
/* .cl-empty/.cl-loading já vêm de graça via --app-text-muted remapeado. */

/* ---- ADMIN-LUVA-OURO.CSS — admin-luva-ouro.html (prefixo .lo-) ---- */

/* background: var(--app-surface) na fonte — já vem de graça via remap
   direto (Fix round 1). border-color não é --app-*, precisa de override. */
body.admin-brutal .lo-admin-header {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .lo-admin-header::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .lo-admin-header::after {
    display: none;
}
/* Ícone sports_mma do h1 (admin-luva-ouro.html:28) via style inline
   `color:var(--module-luva-primary)` — mesma técnica dos 2 acima. */
body.admin-brutal .lo-admin-header h1 .material-icons {
    color: var(--admin-brutal-fg) !important;
}

body.admin-brutal .lo-btn-voltar:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}

/* .lo-card: background (var(--app-surface)) já vem de graça via remap direto
   (Fix round 1) — nenhuma regra própria necessária. */
body.admin-brutal .lo-card-title {
    color: var(--admin-brutal-fg);
    font-family: var(--admin-brutal-font-sys);
}

/* .lo-stat: background (var(--app-bg)) já vem de graça via remap direto
   (Fix round 1) — nenhuma regra própria necessária. */
/* Stat value: color:white hardcoded na base. 2 instâncias com estilo INLINE
   (admin-luva-ouro.js:120,130) usam var(--app-success)/var(--app-text-muted),
   já remapeados; a 3a (Temporada, admin-luva-ouro.js:126) cai na base
   abaixo. */
body.admin-brutal .lo-stat-value {
    color: var(--admin-brutal-fg);
}

/* Ranking (pos/nome/media): CONFIRMADAMENTE MORTA nesta tela — mesmo achado
   do .ac-ranking-* acima, grep em admin-luva-ouro.js/.html não acha nenhum
   uso de .lo-ranking-*. Mantida por completude. */
body.admin-brutal .lo-ranking-pos,
body.admin-brutal .lo-ranking-media {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .lo-ranking-nome {
    color: var(--admin-brutal-fg);
}

/* .lo-btn-primary: CONFIRMADAMENTE MORTO nesta tela (mesmo achado do
   .ac-btn-primary) — mantido por completude. Nota: color da fonte já é
   var(--surface-bg) (remapeado de graça), só o background (cor de módulo)
   precisaria de override de qualquer forma — tratado igual aos outros 2
   pela mesma convenção de acento. .lo-btn-salvar ("Salvar Configuracoes",
   admin-luva-ouro.js:173) segue a mesma convenção; fundo var(--color-success)
   é o mesmo achado de token global não remapeado. */
body.admin-brutal .lo-btn-primary,
body.admin-brutal .lo-btn-salvar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .lo-btn-primary:hover:not(:disabled),
body.admin-brutal .lo-btn-salvar:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .lo-btn-ghost: CONFIRMADAMENTE MORTA nesta tela (mesmo achado dos outros
   2) — sem regra própria (Fix round 1, mesmo motivo do .ac-btn-ghost acima). */

body.admin-brutal .lo-form-section {
    color: var(--admin-brutal-fg);
    border-bottom-color: var(--admin-brutal-border);
    font-family: var(--admin-brutal-font-sys);
}
body.admin-brutal .lo-form-checkbox input[type="checkbox"] {
    accent-color: var(--admin-brutal-accent);
}
body.admin-brutal .lo-form-checkbox span {
    color: var(--admin-brutal-fg);
}
/* .lo-empty/.lo-loading já vêm de graça via --app-text-muted remapeado. */

/* ==========================================================================
   TASK 14 — Telas restantes de arquivo único
   8 arquivos, cada um exclusivo de UMA tela. Zero `!important` confirmado
   nos 8 (grep individual documentado em cada sub-bloco).
   ========================================================================== */

/* ---- admin-gestao.css (admin-gestao.html, "Tema Roxo") ----
   Zero !important confirmado (grep vazio).
   .empty-state/.loading/.alert/.alert-info/.alert-error/input/select/button/
   h1-h4 já cobertos de graça pelos genéricos (linhas ~617-674, 2163-2169) —
   sem regra própria aqui. .form-group input (background/border/color) e
   .add-admin-form/.admins-list (background/border) já vêm de graça via
   --surface-card/--surface-card-hover/--text-primary remapeados no bloco
   raiz. --gestao-accent-muted (definida linha 15, nunca consumida no
   arquivo-fonte) é CONFIRMADAMENTE MORTA — sem regra própria. */
body.admin-brutal .admin-header {
    border-color: var(--admin-brutal-border);
}
/* ::before é o friso gradiente 3px no topo — vira friso sólido, mesmo
   precedente do .ru-admin-header::before (Task 12). */
body.admin-brutal .admin-header::before {
    background: var(--admin-brutal-fg);
}
/* ::after é blob de glow borrado (blur 60px, opacity .12) — decoração 100%
   orgânica, mesmo critério do .ru-admin-header::after. */
body.admin-brutal .admin-header::after {
    display: none;
}
body.admin-brutal .admin-header h1 .material-icons,
body.admin-brutal .add-admin-form h3 .material-icons,
body.admin-brutal .admins-list h3 .material-icons,
body.admin-brutal .access-denied .material-icons {
    color: var(--admin-brutal-fg);
}
/* var(--text-muted, ...) não é remapeada no topo do arquivo. .admin-header p
   é bare (compartilhado com admin-analises-ia.css, Task 14 abaixo — mesmo
   .admin-header/.admin-page/.admin-header::before/::after/.admin-header h1
   .material-icons, cobertos aqui de graça pelo mesmo motivo). */
body.admin-brutal .admin-header p,
body.admin-brutal .gestao-form-hint,
body.admin-brutal .form-group label,
body.admin-brutal .admin-email,
body.admin-brutal .gestao-modal-desc,
body.admin-brutal .access-denied p {
    color: var(--admin-brutal-muted);
}
/* var(--text-disabled) não é remapeada — mesmo critério de .admin-email. */
body.admin-brutal .admin-date {
    color: var(--admin-brutal-muted);
}
/* Focus border usa --gestao-accent (não remapeada) — generic `input:focus`
   (linha ~626) perde a guerra de especificidade pra `.form-group input:focus`
   do arquivo-fonte (0,2,1 > 0,0,2), precisa de override explícito. */
body.admin-brutal .form-group input:focus {
    border-color: var(--admin-brutal-accent);
}
/* .btn-add é a CTA primária do formulário — mesma convenção .ru-btn-primary/
   .lo-btn-primary (accent + accent-ink, invertido pro :hover). */
body.admin-brutal .btn-add {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .btn-add:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .admin-item.super-admin: background var(--gradient-dark) (navy hardcoded,
   não passa por variável de superfície) + border var(--gestao-accent) —
   colapsa pro fundo padrão + borda sólida. */
body.admin-brutal .admin-item.super-admin {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* .admin-avatar: gradiente de módulo + texto var(--text-primary) (já fg,
   de graça) — mesmo idioma do .participante-avatar/.dl-pro-badge (accent
   bg + accent-ink texto, avatar/badge de destaque com texto claro/hardcoded
   por trás vira acento). .admin-avatar.inactive já vem de graça via
   --surface-card-hover remapeado. .admin-avatar.dev usa gradiente
   --color-gold/--color-warning-dark (mesmo critério, colapsa idêntico —
   único avatar "de destaque" no arquivo, sem variante própria). */
body.admin-brutal .admin-avatar,
body.admin-brutal .admin-avatar.dev {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* .badge-super: badge de destaque (super admin) — mesmo idioma do
   .dl-pro-badge (accent + accent-ink). */
body.admin-brutal .badge-super {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* .badge-inactive: estado desabilitado — mesmo idioma do .badge-quitado
   (outline + texto mudo). */
body.admin-brutal .badge-inactive {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
/* .badge-env: tag informativa simples — mesmo idioma do .badge-always-active
   (outline + texto fg). color:var(--text-primary) da fonte já é fg de graça;
   só o background (var(--color-success), token global não remapeado)
   precisa de override. */
body.admin-brutal .badge-env {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
/* .admin-actions-protected: var(--color-success) — colapsa monocromático,
   mesmo precedente de "nenhuma cor de status sobrevive" (--app-success). */
body.admin-brutal .admin-actions-protected {
    color: var(--admin-brutal-fg);
}
/* .btn-action: color var(--text-muted) (não remapeada); background
   transparent e border var(--surface-card-hover) já vêm de graça. */
body.admin-brutal .btn-action {
    color: var(--admin-brutal-muted);
}
/* :hover troca só border-color (var(--text-disabled), não remapeada) +
   color (já fg de graça) — SEM tocar o background (fica transparent, herdado
   da base), evitando o par fundo=border+texto=fg (mesmo hex nos 2 temas)
   que a Task 13 errou 3 vezes. */
body.admin-brutal .btn-action:hover {
    border-color: var(--admin-brutal-fg);
}
/* .btn-action.danger: border-color/color var(--color-danger) — colapsa fg,
   mesmo precedente de .admin-actions-protected. */
body.admin-brutal .btn-action.danger {
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
/* :hover da variante danger usava var(--color-danger-muted) como fundo —
   neutraliza pra transparent (mantém border/color fg da base, já visível
   sem precisar inverter fundo/texto). */
body.admin-brutal .btn-action.danger:hover {
    background: transparent;
}
/* .gestao-modal-overlay (rgba(0,0,0,.5)) não entra: já escurece igual nos
   2 temas, mesmo raciocínio do .modal-historico-overlay (Task 4/5).
   .gestao-modal-content background/.gestao-modal-senha-box background já
   vêm de graça via --surface-card/--surface-card-elevated remapeados. */
body.admin-brutal .gestao-modal-content {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .gestao-modal-title,
body.admin-brutal .gestao-modal-warning {
    color: var(--admin-brutal-fg);
}
/* .gestao-modal-senha-text já vem de graça via --text-primary remapeado. */
/* .gestao-modal-copy-btn: background var(--surface-card-hover) (já
   remapeado -> --admin-brutal-border) + color var(--text-primary) (já
   remapeado -> --admin-brutal-fg) — como border e fg são O MESMO hex nos
   2 temas (_admin-tokens.css:799-800/809-810), o par colapsava em texto
   invisível (fundo=border, texto=fg). Override explícito quebra o par. */
body.admin-brutal .gestao-modal-copy-btn {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
    border: 1px solid var(--admin-brutal-border);
}
/* .gestao-modal-confirm-btn: CTA final do modal — mesma convenção accent +
   accent-ink (era var(--color-success) + var(--text-primary), fg de graça,
   mas colapsa junto pro par accent/accent-ink por ser a CTA primária). */
body.admin-brutal .gestao-modal-confirm-btn {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}

/* ---- admin-telegram.css (admin-telegram.html) ----
   Zero !important confirmado (grep vazio). Sem pseudo-elementos (grep
   ::before/::after vazio). --border-subtle resolve fixo pra #333333
   (_admin-tokens.css:264, sobrescreve o rgba(255,85,0,.1) da linha 220 no
   mesmo :root — "aliases de compatibilidade") — mesmo precedente do
   --app-border fixo já documentado no bloco raiz (linha ~30): funciona nos
   2 temas sem remap, sem regra própria. .tg-broadcast-input/.tg-broadcast-
   textarea (background var(--surface-bg)/color var(--text-primary)),
   .tg-summary-stat/.tg-broadcast-section/.tg-convite-modal/.tg-link-
   container (background var(--surface-card)/var(--surface-card-elevated)/
   var(--surface-bg)) e .tg-convite-modal h3/.tg-identidades-table td.nome-
   time (color var(--text-primary)) já vêm de graça via remap do bloco raiz.
   .tg-convite-modal-backdrop (var(--surface-overlay), rgba(0,0,0,.5)) não
   entra — mesmo raciocínio do .modal-historico-overlay (Task 4/5). */
/* FIX ROUND 1 (Task 14 review, Important 2): .tg-identidades-table thead th
   removido daqui — é <th> real, o genérico `th` (linha ~695-699, split em
   `th`/`td` separados na revisão final — ver Item Menor do relatório) já
   define `background: fg` + `color: bg`; este `color: muted` colidia com o
   par certo (contraste 2.18-2.54, texto quase ilegível). Deixa herdar do
   genérico sem regra própria. */
/* FIX ROUND 2 (Task 14 review): FIX ROUND 1 só removeu `color: muted` e
   deixou herdar do `th` genérico (linha ~695-699) — mas
   `.tg-identidades-table thead th` (admin-telegram.css:118) tem
   especificidade IDÊNTICA (0,1,2) ao genérico `body.admin-brutal th`
   (0,1,2). Empate de especificidade é resolvido por ORDEM NO ARQUIVO, não é
   determinístico: se admin-telegram.css carregar DEPOIS de admin-brutal.css
   (acontece em layout.html), a regra-fonte original volta a vencer com
   `color: var(--text-muted)` (não remapeada, trava em #9ca3af) sobre
   `--admin-brutal-bg` — mesma falha original (2.56:1 no tema claro), agora
   dependente de ordem de <link>. Regra explícita abaixo com 2 classes + 3
   tags (especificidade (0,2,3)) vence os dois de forma determinística,
   independente de ordem de carregamento. */
/* FIX ROUND 1 (Task 16 review, Minor): border-bottom continuava vindo do
   genérico `body.admin-brutal th` (linha ~695-699, 1px na época, hoje 2px
   já no próprio `th`) — a regra explícita acima só cobria background/color,
   não a espessura brutalista de 2px usada no resto das tabelas. */
body.admin-brutal .tg-identidades-table thead th {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-bottom-width: 2px;
}
body.admin-brutal .tg-admin-header p,
body.admin-brutal .tg-summary-stat .stat-label,
body.admin-brutal .tg-status-chip.sem-vinculo,
body.admin-brutal .tg-empty,
body.admin-brutal .tg-convite-modal .participante-nome,
body.admin-brutal .tg-convite-expiry {
    color: var(--admin-brutal-muted);
}
/* var(--text-secondary) não é remapeada — colapsa fg, mesmo precedente já
   usado no bloco raiz pra --text-secondary escopado (linha ~2490). */
body.admin-brutal .tg-btn-voltar,
body.admin-brutal .tg-identidades-table td {
    color: var(--admin-brutal-fg);
}
/* .tg-btn-voltar:hover: background var(--surface-card-hover) (já remapeado
   -> --admin-brutal-border) + color var(--text-primary) (já remapeado ->
   --admin-brutal-fg) — border e fg são O MESMO hex nos 2 temas, o par
   colapsava em texto invisível. Override explícito inverte pro idioma
   padrão de hover (mesmo do `button:hover` genérico, linha ~558-563). */
body.admin-brutal .tg-btn-voltar:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .tg-btn-fechar: MESMO par armadilha, mas na base (não só :hover) —
   background var(--surface-card-hover) (-> border) + color var(--text-
   secondary) (colapsaria fg) = texto invisível nos 2 temas. Neutraliza o
   background pra transparent; :hover (background var(--surface-card-
   elevated) -> bg + color var(--text-primary) -> fg, ambos de graça) já
   funciona sem override adicional — bg/fg divergem entre si e do texto. */
body.admin-brutal .tg-btn-fechar {
    background: transparent;
    color: var(--admin-brutal-fg);
}
/* .tg-summary-stat.vinculados .stat-value: var(--color-success) — colapsa
   monocromático, mesmo precedente do .stat-card.sucesso .stat-value
   (linha ~2006). */
body.admin-brutal .tg-summary-stat.vinculados .stat-value {
    color: var(--admin-brutal-fg);
}
/* .tg-identidades-table tbody tr:hover: background var(--color-primary-
   hover-bg) (laranja translúcido, não remapeado) — vira o mesmo idioma do
   `tbody tr:hover`/`tbody tr:hover td` genérico (linha ~605-610), mas
   escrito com escopo completo pois a especificidade do arquivo-fonte
   (.tg-identidades-table tbody tr:hover, 3 elementos) supera o genérico bare. */
body.admin-brutal .tg-identidades-table tbody tr:hover {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .tg-identidades-table tbody tr:hover td {
    color: var(--admin-brutal-bg);
}
/* Chips/botões de ação (convite/revogar/broadcast/copiar) usam pares
   cor-de-status + fundo tintado (var(--color-primary/-info/-success/-danger)
   + variantes -muted/-text/-border, nenhuma remapeada) — colapsa pro mesmo
   idioma outline (transparent + borda sólida + fg) já usado em .badge-
   always-active/.badge-planned, monocromático nos 2 temas. */
body.admin-brutal .tg-status-chip.vinculado,
body.admin-brutal .tg-btn-convite,
body.admin-brutal .tg-btn-revogar,
body.admin-brutal .tg-btn-broadcast,
body.admin-brutal .tg-btn-copiar {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* :hover das 4 ações inline usava fundo tintado translúcido hardcoded
   (rgba/var(--color-*-hover-bg-strong)) — inverte pro idioma padrão de
   hover (fg bg + bg texto), igual .tg-btn-voltar:hover acima. */
body.admin-brutal .tg-btn-convite:hover,
body.admin-brutal .tg-btn-revogar:hover,
body.admin-brutal .tg-btn-broadcast:hover,
body.admin-brutal .tg-btn-copiar:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
/* .tg-btn-copiar.copiado: estado persistente de confirmação — mesmo idioma
   "ativo/selecionado" do `button.active`/`.tab.active` genérico (linha
   ~564-568): accent + accent-ink, não fg-invert (esse é só :hover). */
body.admin-brutal .tg-btn-copiar.copiado {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}
/* .tg-broadcast-section h2 .material-icons / .tg-link-container .link-text:
   var(--color-info) — colapsa fg, mesmo precedente do ícone de header já
   aplicado em admin-gestao acima. */
body.admin-brutal .tg-broadcast-section h2 .material-icons,
body.admin-brutal .tg-link-container .link-text {
    color: var(--admin-brutal-fg);
}
/* .tg-broadcast-input/.tg-broadcast-textarea :focus usa var(--color-info)
   (não remapeada) — generic `input:focus`/`select:focus` (linha ~626) perde
   a guerra de especificidade pro seletor com classe própria do arquivo-fonte. */
body.admin-brutal .tg-broadcast-input:focus,
body.admin-brutal .tg-broadcast-textarea:focus {
    border-color: var(--admin-brutal-accent);
}
/* .tg-convite-instrucoes: background var(--color-primary-muted) (não
   remapeada) + color var(--text-secondary) (idem) — vira o mesmo idioma
   "banner informativo" do .alert-info genérico (bg sólido + borda + fg). */
body.admin-brutal .tg-convite-instrucoes {
    background: var(--admin-brutal-bg);
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- conferencias-financeiras.css (conferencias-financeiras.html) ----
   Zero !important confirmado (grep vazio). Sem pseudo-elementos (grep
   ::before/::after vazio). --border-subtle resolve fixo #333333 (mesmo
   precedente do --app-border, ver nota na Task 14/admin-telegram acima) —
   usado em .cf-tab/.cf-stat/.cf-row/.cf-detail-row/.cf-btn-ghost/
   .cf-api-chip, sem regra própria. --table-row-stripe (rgba(255,255,255,.02),
   quase imperceptível nos 2 temas) também não entra, mesmo critério.
   .cf-select/.cf-btn-primary color (var(--text-primary)), .cf-row-name
   strong, .cf-stat--count .cf-stat-value e .cf-btn-ghost background
   (var(--surface-card-elevated)) já vêm de graça via remap do bloco raiz.
   --input-bg (-> var(--surface-card)) também remapeado de graça. */
body.admin-brutal .cf-header-titles p,
body.admin-brutal .cf-empty,
body.admin-brutal .cf-loading,
body.admin-brutal .cf-stat-label,
body.admin-brutal .cf-stat-sub,
body.admin-brutal .cf-tab,
body.admin-brutal .cf-chev,
body.admin-brutal .cf-progress-label,
body.admin-brutal .cf-api-chip-label,
body.admin-brutal .cf-saldo.zero,
body.admin-brutal .cf-row-name span {
    color: var(--admin-brutal-muted);
}
/* FIX ROUND 1 (Task 14 review, Important 2): .cf-table th removido do grupo
   acima — é <th> real, o genérico `th` já define background fg + color bg;
   `color: muted` colidia (contraste 2.18-2.54). Herda do genérico. */
/* var(--color-primary)/var(--color-success-light)/var(--color-danger)/
   var(--color-success-text)/var(--color-danger-text)/var(--color-warning)
   (ícones/valores de destaque e status financeiro) — colapsam monocromático,
   mesmo precedente `--chip-credito-text`/`--chip-debito-text` (ambos ->
   fg, linha ~2503-2507): positivo/negativo NÃO se distingue por cor aqui. */
body.admin-brutal .cf-header-titles h1 .material-icons,
body.admin-brutal .cf-loading .material-icons,
body.admin-brutal .cf-stat--receber .cf-stat-value,
body.admin-brutal .cf-stat--pagar .cf-stat-value,
body.admin-brutal .cf-stat--balanco .cf-stat-value,
body.admin-brutal .cf-col-title.receber,
body.admin-brutal .cf-col-title.pagar,
body.admin-brutal .cf-saldo.pos,
body.admin-brutal .cf-saldo.neg,
body.admin-brutal .cf-table td.pos,
body.admin-brutal .cf-table td.neg,
body.admin-brutal .cf-api-chip.ok .cf-api-chip-value,
body.admin-brutal .cf-api-chip.bad .cf-api-chip-value,
body.admin-brutal .cf-api-chip.warn .cf-api-chip-value {
    color: var(--admin-brutal-fg);
}
/* var(--text-secondary) não é remapeada — colapsa fg. */
body.admin-brutal .cf-btn-ghost,
body.admin-brutal .cf-table td {
    color: var(--admin-brutal-fg);
}
/* .cf-header: background var(--gradient-card) (cinza escuro hardcoded) +
   border var(--border-default) (laranja translúcido hardcoded). */
body.admin-brutal .cf-header {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* FIX (review final, Important 3): a checagem "sem pseudo-elementos" do
   comentário acima só olhou conferencias-financeiras.css — .blob-glow é
   utilitário de _admin-tokens.css:550-628, usado inline em
   conferencias-financeiras.html:33 (`class="cf-header blob-glow
   blob-glow--primary"`, MESMO elemento do .cf-header acima — display:none
   no elemento inteiro esconderia o header, não só o glow). Pinta um
   círculo de 300px, border-radius:50%, var(--color-primary) (#FF5500) sob
   blur(60px) via ::before — a spec diz que blob-glow é removido por
   completo (não apenas recolorido). O blanket novo de ::before zera
   border-radius/box-shadow, mas o círculo laranja borrado continuava
   visível (background não é tocado pelo blanket); display:none só no
   pseudo-elemento mata o efeito de vez, nos 2 temas, sem afetar o header. */
body.admin-brutal .blob-glow::before {
    display: none;
}
/* FIX ROUND 1 (Task 14 review, Important 3): .cf-stat/.cf-row/.cf-api-chip
   usam `border: var(--border-subtle)` na fonte (forma shorthand pura, sem
   width/style) — o remap do token no bloco raiz corrige a COR, mas o
   shorthand quebrado (`border-style` cai no initial `none`) continua sem
   renderizar borda nenhuma. Declara width/style explícitos aqui. */
body.admin-brutal .cf-stat,
body.admin-brutal .cf-row,
body.admin-brutal .cf-api-chip {
    border: 1px solid var(--admin-brutal-border);
}
/* .cf-select border via var(--input-border) -> var(--border-default)
   (mesmo laranja hardcoded); :focus var(--input-focus-border) -> var(--color-
   primary) (não remapeada). */
body.admin-brutal .cf-select {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .cf-select:focus {
    border-color: var(--admin-brutal-accent);
}
/* .cf-btn-primary: CTA — mesma convenção accent + accent-ink (era
   var(--gradient-primary) + var(--text-primary), fg de graça, mas colapsa
   junto pro par accent/accent-ink por ser CTA primária, mesmo critério do
   .gestao-modal-confirm-btn acima). */
body.admin-brutal .cf-btn-primary {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* .cf-btn-ghost:hover: background var(--surface-card-hover) (já remapeado
   -> --admin-brutal-border) + color var(--text-secondary) (colapsaria fg,
   ver override acima) — mesmo par border=fg (mesmo hex nos 2 temas) que
   invisibiliza o texto. Inverte pro idioma padrão de hover. */
body.admin-brutal .cf-btn-ghost:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .cf-tab:hover: color var(--text-secondary) (colapsa fg) + border-color
   var(--color-primary-border) (rgba laranja, não remapeada).
   FIX ROUND 1 (Task 14 review, Critical #1): .cf-tab é <button> — o `color:
   fg` aqui colidia com o `background: fg` do genérico `button:hover` (linha
   ~558-563), resultando em texto fg sobre fundo fg (contraste 1.00). Remove
   o `color` e deixa herdar o par certo do genérico (background fg + color
   bg); mantém só o border-color específico. */
body.admin-brutal .cf-tab:hover {
    border-color: var(--admin-brutal-border);
}
/* .cf-tab.active: mesmo idioma "ativo/selecionado" do `button.active`
   genérico (linha ~564-568) — accent + accent-ink. */
body.admin-brutal .cf-tab.active {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}
/* .cf-row:hover/.cf-detail-head:hover: background var(--table-row-hover)
   (laranja translúcido, não remapeado) — wash de hover sem cor de superfície
   própria, mesmo precedente do .historico-item:hover (linha ~937-939). */
body.admin-brutal .cf-row:hover,
body.admin-brutal .cf-detail-head:hover {
    background: transparent;
}
/* .cf-tag/.cf-tag.pos/.cf-tag.neg: background var(--color-neutral-bg)/
   var(--color-success-muted)/var(--color-danger-muted) + color var(--text-
   secondary)/var(--color-success-text)/var(--color-danger-text) — colapsa
   pro idioma outline (transparent + borda + fg), mesmo critério do
   `--chip-credito`/`--chip-debito` (linha ~2502-2507): sem distinção
   positivo/negativo por cor. */
body.admin-brutal .cf-tag,
body.admin-brutal .cf-tag.pos,
body.admin-brutal .cf-tag.neg {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* .cf-progress-fill: var(--gradient-primary) (laranja hardcoded) -> accent. */
body.admin-brutal .cf-progress-fill {
    background: var(--admin-brutal-accent);
}
/* .cf-banner.success/.danger: mesmo idioma do `.alert-error`/`.alert-info`
   genérico (linha ~640-649) — sem distinção de cor entre variantes. */
body.admin-brutal .cf-banner.success,
body.admin-brutal .cf-banner.danger {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- manutencao-avancado.css (modo-manutencao-avancado.html) ----
   Zero !important confirmado (grep vazio). Sem pseudo-elementos (grep
   ::before/::after vazio). --border-subtle fixo #333 (mesmo precedente do
   --app-border) — usado em .mav-header/.mav-card/.mav-subsection/
   .mav-image-preview img, sem regra própria. .mav-select seta SVG inline
   (fill hardcoded #a0a0a0) não entra — mesmo critério, cinza funciona nos
   2 temas, sem variável de cor pra remapear num data-URI. .mav-page
   (var(--surface-bg)), .mav-card/.mav-subsection (var(--surface-card)/
   var(--surface-card-elevated)) e .mav-title/.mav-card-title/.mav-
   subsection-title/.status-value/.mav-radio-label strong/.mav-input(-emoji)/
   .mav-select/.mav-select option/.mav-btn--secondary (var(--text-primary))
   já vêm de graça via remap do bloco raiz. */
body.admin-brutal .mav-status-content,
body.admin-brutal .mav-status-content .status-label,
body.admin-brutal .mav-form-label,
body.admin-brutal .mav-radio-label span,
body.admin-brutal .mav-checkbox-label {
    color: var(--admin-brutal-muted);
}
/* var(--text-disabled) não é remapeada — mesmo critério acima. */
body.admin-brutal .mav-status-content .status-meta,
body.admin-brutal .mav-input::placeholder,
body.admin-brutal .mav-textarea::placeholder,
body.admin-brutal .mav-field-help,
body.admin-brutal .mav-upload-status {
    color: var(--admin-brutal-muted);
}
/* var(--color-warning) (ícone de header) — colapsa monocromático. */
body.admin-brutal .mav-title .material-icons {
    color: var(--admin-brutal-fg);
}
/* var(--color-success)/var(--color-danger) (status ok/alerta) — colapsa
   monocromático. CONFIRMADAMENTE MORTA na prática (manutencao-config.js:
   169-204 usa classes Tailwind text-green-400/text-red-400, não .status-ok/
   .status-alerta) — mantida por completude, mesmo critério já usado em
   outros arquivos desta task pra seletores órfãos. */
body.admin-brutal .mav-status-content .status-ok,
body.admin-brutal .mav-status-content .status-alerta {
    color: var(--admin-brutal-fg);
}
/* var(--border-default) (laranja translúcido hardcoded) usado como borda em
   6 seletores — vira borda sólida padrão. .mav-btn-voltar ganha `color`
   junto (var(--text-muted), não remapeada) no mesmo seletor pra não duplicar. */
body.admin-brutal .mav-btn-voltar {
    color: var(--admin-brutal-muted);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .mav-input,
body.admin-brutal .mav-textarea,
body.admin-brutal .mav-select,
body.admin-brutal .mav-input-emoji,
body.admin-brutal .mav-color-picker,
body.admin-brutal .mav-upload-status,
body.admin-brutal .mav-btn--secondary {
    border-color: var(--admin-brutal-border);
}
/* FIX ROUND 1 (Task 14 review, Important 3): .mav-card/.mav-subsection usam
   `border: var(--border-subtle)` e .mav-header usa `border-bottom:
   var(--border-subtle)` — forma shorthand pura (sem width/style) na fonte.
   O remap do token no bloco raiz corrige a cor, mas o shorthand quebrado
   (`border-style` cai no initial `none`) continua sem renderizar borda.
   Declara width/style explícitos aqui. */
body.admin-brutal .mav-card,
body.admin-brutal .mav-subsection {
    border: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .mav-header {
    border-bottom: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .mav-btn-voltar:hover {
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-fg);
}
/* .mav-status-badge (3 variantes ativo/inativo/carregando): cor de status +
   fundo tintado (nenhum remapeado) — colapsa outline, mesmo idioma do
   .badge-always-active/.badge-planned. .carregando não tinha borda própria
   na fonte — mantém sem borda, só neutraliza fundo/texto. */
body.admin-brutal .mav-status-badge.ativo,
body.admin-brutal .mav-status-badge.inativo {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .mav-status-badge.carregando {
    background: transparent;
    color: var(--admin-brutal-muted);
}
/* .mav-radio-item:hover/.mav-checkbox-item:hover: wash de hover translúcido
   sem cor de superfície própria — mesmo precedente do .historico-item:hover. */
body.admin-brutal .mav-radio-item:hover,
body.admin-brutal .mav-checkbox-item:hover {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .mav-radio-item input,
body.admin-brutal .mav-checkbox-item input {
    accent-color: var(--admin-brutal-accent);
}
/* box-shadow do :focus (anel var(--color-primary-muted)) — simplifica pra
   nenhum anel extra, o border-color accent já sinaliza o foco (mesma lógica
   de simplicidade já usada pro box-shadow global zerado). .mav-input-emoji
   não tem box-shadow própria na fonte, por isso fica de fora deste segundo
   grupo (evita `box-shadow:none` redundante num seletor que já não tem). */
body.admin-brutal .mav-input:focus,
body.admin-brutal .mav-textarea:focus,
body.admin-brutal .mav-select:focus {
    border-color: var(--admin-brutal-accent);
    box-shadow: none;
}
body.admin-brutal .mav-input-emoji:focus {
    border-color: var(--admin-brutal-accent);
}
/* .mav-btn--primary e .mav-btn--success: CTAs — mesma convenção accent +
   accent-ink já usada em .gestao-modal-confirm-btn/.cf-btn-primary. */
body.admin-brutal .mav-btn--primary,
body.admin-brutal .mav-btn--success {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* FIX ROUND 1 (Task 14 review, Critical #2): .mav-btn--secondary é <button>
   — `color: fg` colidia com o `background: fg` do genérico `button:hover`
   (contraste 1.00). Remove o `color`, mantém só border-color. */
body.admin-brutal .mav-btn--secondary:hover {
    border-color: var(--admin-brutal-fg);
}
/* .mav-btn--danger: ação destrutiva — mesma convenção fg-invert do
   `.super-modal--danger .super-modal__btn--confirm` (linha ~831-834),
   distinta da CTA positiva acima. */
body.admin-brutal .mav-btn--danger {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .mav-btn--upload/.mav-btn--remove: cor de status + fundo tintado —
   colapsa outline, mesmo idioma dos .tg-btn-convite/.tg-btn-revogar. */
body.admin-brutal .mav-btn--upload,
body.admin-brutal .mav-btn--remove {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .mav-btn--upload:hover,
body.admin-brutal .mav-btn--remove:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}

/* ---- notificador.css (notificador.html) ----
   Zero !important confirmado (grep vazio). --border-subtle fixo #333 (mesmo
   precedente do --app-border) — usado em .notificador-card/.notificador-
   card-footer/.notificador-btn-icon/.notificador-btn-voltar, sem regra
   própria. .notificador-page (var(--surface-bg)), .notificador-title/
   .notificador-card-title (var(--text-primary)) e .notificador-btn-voltar
   background (var(--surface-card)) já vêm de graça via remap do bloco raiz.
   NOTA: notificador-management.js injeta um modal (SuperModal.show) e 2
   spans com estilo INLINE (var(--text-muted)/var(--color-danger)) fora do
   escopo deste arquivo CSS — fora do escopo desta task (8 arquivos CSS
   1:1 com telas, não JS), não auditado aqui à parte do span do toggle
   (abaixo, por ser trivial de isolar e visível sem interação). */
body.admin-brutal .notificador-toggle span,
body.admin-brutal .notificador-empty {
    color: var(--admin-brutal-muted) !important;
}
/* ::before/::after: só existe o ::after do .toggle-switch (knob). */
/* .toggle-switch escopado a .notificador-toggle pra não vazar pro
   `.toggle-switch`/`.toggle-switch input` de gerenciar.html (componente
   DIFERENTE — lá é layout puro + `.toggle-slider` filho que carrega a cor,
   deliberadamente omitido linha ~1315-1319; aqui é um componente
   autocontido com fundo + ::after próprios, renderizado por
   notificador-management.js:84). Base (OFF) já vem de graça: background
   var(--surface-card-hover) já remapeado -> --admin-brutal-border, mesmo
   idioma do `.toggle-slider` desmarcado. */
body.admin-brutal .notificador-toggle .toggle-switch.active {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .notificador-toggle .toggle-switch::after {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .notificador-btn-novo {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .notificador-card:hover {
    border-color: var(--admin-brutal-fg);
}
/* .categoria-* (4 variantes): cor de status + fundo tintado (nenhuma
   remapeada) — colapsa outline, mesmo idioma do .cf-tag/.badge-planned. */
body.admin-brutal .categoria-success,
body.admin-brutal .categoria-warning,
body.admin-brutal .categoria-info,
body.admin-brutal .categoria-urgent {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* var(--text-secondary) não é remapeada — colapsa fg. */
body.admin-brutal .notificador-card-mensagem,
body.admin-brutal .notificador-btn-icon {
    color: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 14 review, Critical #3): .notificador-btn-icon é
   <button> — `color: fg` colidia com o `background: fg` do genérico
   `button:hover` (contraste 1.00). Remove o `color`, mantém só border-color. */
body.admin-brutal .notificador-btn-icon:hover {
    border-color: var(--admin-brutal-fg);
}
/* .notificador-btn-publicar: ação de publicar (positiva) — mesma convenção
   accent + accent-ink das CTAs. .despublicar: ação destrutiva — mesma
   convenção fg-invert do .mav-btn--danger. */
body.admin-brutal .notificador-btn-publicar {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .notificador-btn-publicar.despublicar {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .notificador-btn-voltar: color var(--text-muted) (não remapeada). */
body.admin-brutal .notificador-btn-voltar {
    color: var(--admin-brutal-muted);
}
/* :hover: background var(--surface-card-hover) (já remapeado ->
   --admin-brutal-border) + color var(--color-primary) (colapsaria fg) —
   mesmo par border=fg (mesmo hex nos 2 temas) que invisibiliza o texto.
   Inverte pro idioma padrão de hover. */
body.admin-brutal .notificador-btn-voltar:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}

/* ---- github-analytics-unified.css (github-analytics-unified.html) ----
   1 !important encontrado (linha 475, `.repo-cleanup-arrow { font-size: 18px
   !important }`) — não é cor/fundo/borda, sem relação com o reskin, sem
   regra própria necessária. 1 pseudo-elemento (`.repo-tab.active::after`,
   linha 106-114, friso de acento). --border-color/--surface-bg/--text-
   primary já vêm de graça via remap do bloco raiz (.repo-page, .repo-tabs/
   .repo-table/.repo-cleanup-toolbar borders, .repo-table td, .repo-modal-
   header h3, .repo-modal-btn-cancel background). var(--brand-primary)/
   var(--surface-elevated)/var(--surface-highlight) NÃO SÃO DEFINIDAS em
   nenhum lugar do codebase (grep em public/css e public/js não acha
   `--brand-primary:`/`--surface-elevated:`/`--surface-highlight:` — só
   usos, aqui e em detalhe-liga.css:15) — bug pré-existente fora do escopo
   desta task (não é reskin, é o arquivo-fonte já quebrado em produção);
   tratadas aqui como "não remapeadas" (mesmo critério de --text-muted),
   com override explícito em vez de depender do fallback de var() inválida. */
/* FIX ROUND 1 (Task 14 review, Important 2): .repo-table th removido daqui —
   é <th> real, o genérico `th` já define background fg + color bg;
   `color: muted` colidia (contraste 2.18-2.54). Herda do genérico. */
body.admin-brutal .repo-header p,
body.admin-brutal .repo-tab,
body.admin-brutal .repo-kpi-label,
body.admin-brutal .repo-section-title,
body.admin-brutal .repo-loading,
body.admin-brutal .repo-search-icon,
body.admin-brutal .repo-search-clear,
body.admin-brutal .repo-search-input::placeholder,
body.admin-brutal .repo-empty,
body.admin-brutal .repo-text-muted,
body.admin-brutal .repo-cleanup-category-title,
body.admin-brutal .repo-pr-author,
body.admin-brutal .repo-checkbox-label,
body.admin-brutal .repo-delete-single-btn,
body.admin-brutal .repo-modal-body p,
body.admin-brutal .repo-modal-btn-cancel,
body.admin-brutal .repo-filter-btn {
    color: var(--admin-brutal-muted);
}
/* Cor de destaque de marca (var(--brand-primary), indefinida) e cores de
   status hardcoded (#ef4444/#f59e0b/#22c55e/#3b82f6) — colapsam
   monocromático, mesmo precedente do .stat-card.sucesso/.perigo etc. */
body.admin-brutal .repo-kpi-value,
body.admin-brutal .repo-kpi-value.danger,
body.admin-brutal .repo-kpi-value.warning,
body.admin-brutal .repo-kpi-value.success,
body.admin-brutal .repo-kpi-value.info,
body.admin-brutal .repo-section-title .material-icons,
body.admin-brutal .repo-branch,
body.admin-brutal .repo-link,
body.admin-brutal .repo-modal-warning {
    color: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 14 review, Important 4): .repo-tab.active tirado do
   grupo acima — é <button>, o genérico `button.active` (linha ~564-568) já
   define `background: accent`; `color: fg` colidia (contraste 1.45 no tema
   escuro, fg quase branco sobre amarelo). accent-ink é o token pensado
   exatamente pra texto sobre acento, funciona nos 2 temas. */
body.admin-brutal .repo-tab.active {
    color: var(--admin-brutal-accent-ink);
}
/* ::after do .repo-tab.active é o friso de acento (2px) sob a aba ativa —
   vira friso sólido fg, mesmo idioma do `.admin-header::before`. */
body.admin-brutal .repo-tab.active::after {
    background: var(--admin-brutal-fg);
}
/* Backgrounds var(--surface-elevated)/var(--surface-highlight) (indefinidas)
   e gradientes cinza-escuro hardcoded (#1a1a1a/#252525) — colapsam fundo
   padrão. .repo-branch-cleanup-btn ganha `color` junto (var(--text-muted),
   não remapeada) no mesmo seletor pra não duplicar. .repo-header/.repo-
   sync-card ganham `border-color` junto pelo mesmo motivo. */
body.admin-brutal .repo-refresh-btn,
body.admin-brutal .repo-kpi-card,
body.admin-brutal .repo-section,
body.admin-brutal .repo-search-input,
body.admin-brutal .repo-modal {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .repo-branch-cleanup-btn {
    color: var(--admin-brutal-muted);
    background: var(--admin-brutal-bg);
}
/* FIX ROUND 2 (Task 14 review, higiene): .repo-branch-cleanup-panel
   unificado num só seletor (background + border-color) — a Rodada 1
   adicionou o `border-color` (Important 6, ver histórico abaixo) como regra
   standalone, deixando o seletor duplicado (1x dentro do grupo de
   background acima, 1x sozinho). Sem conflito de valor, mas redundante — o
   dedup check padrão do rollout só compara seletores standalone e não pega
   esse tipo de duplicata "dentro de grupo vs sozinho". Consolidado aqui,
   fora do grupo compartilhado com os outros seletores (que não têm border
   a neutralizar) pra não misturar responsabilidades. Motivo original do
   border-color (Important 6): .repo-branch-cleanup-panel (fonte,
   github-analytics-unified.css:482-485) tem `border: 1px solid
   rgba(245,158,11,.2)` + `border-left: 3px solid #f59e0b` — `border-color`
   (shorthand) sobrescreve as 4 cores de lado de uma vez, incluindo
   border-left, sem precisar duplicar a regra. */
body.admin-brutal .repo-branch-cleanup-panel {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .repo-header,
body.admin-brutal .repo-sync-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* .repo-header h1: color #ffffff hardcoded — o header tem fundo escuro
   hardcoded (agora sólido bg no override acima), texto branco fixo ficaria
   ilegível no tema claro. */
body.admin-brutal .repo-header h1 {
    color: var(--admin-brutal-fg);
}
/* .repo-header-icon: gradiente laranja (#ff5500/#cc4400) + ícone branco —
   mesmo idioma accent + accent-ink do avatar/badge de destaque. */
body.admin-brutal .repo-header-icon {
    background: var(--admin-brutal-accent);
}
body.admin-brutal .repo-header-icon .material-icons {
    color: var(--admin-brutal-accent-ink);
}
/* Badges/chips (translúcidos + cor de status hardcoded) — colapsa outline,
   mesmo idioma do .cf-tag/.categoria-*. */
body.admin-brutal .repo-badge-merged,
body.admin-brutal .repo-badge-open,
body.admin-brutal .repo-badge-closed,
body.admin-brutal .repo-badge-active,
body.admin-brutal .repo-badge-warning,
body.admin-brutal .repo-badge-orphan,
body.admin-brutal .repo-badge-info,
body.admin-brutal .repo-pr-branch,
body.admin-brutal .repo-modal-branch-list .repo-branch,
body.admin-brutal .repo-delete-batch-btn {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* .repo-sync-icon (3 variantes): círculo tintado + ícone colorido — colapsa
   outline (sem fundo próprio) + ícone fg. */
body.admin-brutal .repo-sync-icon.synced,
body.admin-brutal .repo-sync-icon.behind,
body.admin-brutal .repo-sync-icon.ahead {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .repo-sync-icon.synced .material-icons,
body.admin-brutal .repo-sync-icon.behind .material-icons,
body.admin-brutal .repo-sync-icon.ahead .material-icons {
    color: var(--admin-brutal-fg);
}
/* .repo-sync-trigger/.repo-filter-btn.active: CTA/estado-ativo — mesma
   convenção accent + accent-ink. */
body.admin-brutal .repo-sync-trigger,
body.admin-brutal .repo-filter-btn.active {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
    border-color: var(--admin-brutal-accent);
}
body.admin-brutal .repo-spinner {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
body.admin-brutal .repo-search-input:focus {
    border-color: var(--admin-brutal-accent);
    box-shadow: none;
}
body.admin-brutal .repo-checkbox {
    accent-color: var(--admin-brutal-accent);
}
/* .repo-refresh-btn/.repo-filter-btn :hover: var(--brand-primary)
   (indefinida) como border-color/color — colapsa fg.
   FIX ROUND 1 (Task 14 review, Critical #4/#5): ambos são <button> — o
   `color: fg` colidia com o `background: fg` do genérico `button:hover`
   (contraste 1.00). Remove o `color`, mantém só border-color. */
body.admin-brutal .repo-refresh-btn:hover,
body.admin-brutal .repo-filter-btn:hover {
    border-color: var(--admin-brutal-fg);
}
/* Washes de hover translúcidos sem cor de superfície própria — mesmo
   precedente do .historico-item:hover.
   FIX ROUND 1 (Task 14 review, Critical #8): .repo-search-clear é <button>
   — `background: transparent` aqui neutraliza o `background: fg` do
   genérico `button:hover`, mas o `color: bg` do mesmo genérico sobrevive;
   com o fundo transparente revelando o bg do ancestral (mesmo token bg),
   o texto (bg) ficava sobre fundo (bg) — contraste 1.00. Declara `color`
   junto pra não depender do par do genérico. */
body.admin-brutal .repo-search-clear:hover {
    background: transparent;
    color: var(--admin-brutal-fg);
}
body.admin-brutal .repo-delete-single-btn:hover {
    color: var(--admin-brutal-fg);
    background: transparent;
}
body.admin-brutal .repo-delete-batch-btn:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
/* .repo-branch-cleanup-btn (hover/active): amber hardcoded (#f59e0b) —
   colapsa fg, sem fundo tintado (idioma outline, mesmo critério do
   .btn-action:hover).
   FIX ROUND 1 (Task 14 review, Critical #6): .repo-branch-cleanup-btn é
   <button> — `color: fg` colidia com o `background: fg` do genérico
   `button:hover` (contraste 1.00). Remove o `color`, mantém só border-color. */
body.admin-brutal .repo-branch-cleanup-btn:hover {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .repo-branch-cleanup-btn.active {
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
    background: transparent;
}
body.admin-brutal .repo-modal-btn-cancel:hover {
    border-color: var(--admin-brutal-fg);
}
/* .repo-toast (base): color #fff hardcoded — as 3 variantes abaixo trocam
   o fundo pro admin-brutal-bg (claro no tema claro); sem este override o
   texto branco fixo ficaria ilegível. */
body.admin-brutal .repo-toast {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .repo-toast-success,
body.admin-brutal .repo-toast-error,
body.admin-brutal .repo-toast-warning {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* .repo-modal-btn-confirm: ação destrutiva (deletar branches) — mesma
   convenção fg-invert do `.mav-btn--danger`. :hover repetido explicitamente
   (mesma especificidade do `:hover` da fonte, 0,2,0 — garante a troca
   independente da ordem de carga). */
body.admin-brutal .repo-modal-btn-confirm,
body.admin-brutal .repo-modal-btn-confirm:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* ---- orchestrator.css (admin-orchestrator.html) ----
   Zero !important confirmado (grep vazio). Sem pseudo-elementos (grep
   ::before/::after vazio). Todo seletor já é escopado `.orch-page .orch-*`
   na própria fonte — regras abaixo mantêm o mesmo prefixo. var(--border-
   default) aqui é consumida como `border: 1px solid var(--border-default,
   #333)`, mas a definição real (_admin-tokens.css:220) é o SHORTHAND
   completo `1px solid rgba(255,85,0,.2)` — a substituição produz `1px solid
   1px solid rgba(...)`, inválido, e o fallback `#333` NUNCA entra em jogo
   (só vale quando a custom property não existe). Declaração inválida =
   sem borda nenhuma hoje em produção (bug pré-existente fora do escopo
   desta task, mesma classe do --brand-primary indefinido na task anterior).
   Overrides de border-color abaixo são semanticamente corretos e passam a
   valer se/quando esse bug de shorthand for corrigido; não têm efeito
   colateral no estado quebrado atual. .orch-header h1/.orch-btn-secondary
   color (var(--text-primary)), .orch-semaforo/.orch-stat-card/.orch-
   manager-card/.orch-timeline/.orch-fase-bar background (var(--surface-
   card)) e .orch-fase-arrow (var(--surface-card-hover), já remapeado ->
   --admin-brutal-border) já vêm de graça via remap do bloco raiz. */
body.admin-brutal .orch-page .orch-subtitle,
body.admin-brutal .orch-page .orch-semaforo-info .orch-detail,
body.admin-brutal .orch-page .orch-stat-card .orch-stat-label,
body.admin-brutal .orch-page .orch-manager-tag,
body.admin-brutal .orch-page .orch-timeline-time,
body.admin-brutal .orch-page .orch-loading {
    color: var(--admin-brutal-fg);
}
/* var(--text-disabled) não é remapeada — colapsa muted. */
body.admin-brutal .orch-page .orch-fase-step,
body.admin-brutal .orch-page .orch-empty-state {
    color: var(--admin-brutal-muted);
}
/* var(--color-primary) (laranja #FF5500, indefinida/fallback) — colapsa fg,
   mesmo precedente do --brand-primary na Task anterior. */
body.admin-brutal .orch-page .orch-header h1 .material-icons,
body.admin-brutal .orch-page .orch-semaforo-info .orch-detail span,
body.admin-brutal .orch-page .orch-stat-card .orch-stat-value,
body.admin-brutal .orch-page .orch-section-title .material-icons,
body.admin-brutal .orch-page .orch-loading .material-icons {
    color: var(--admin-brutal-fg);
}
/* .orch-timeline-dot (transicao/consolidacao/erro): pontinho de 10px, só
   `background` na fonte (sem texto/ícone dentro) — separado do grupo acima
   pra NUNCA combinar `color:fg` + `background:fg` no mesmo seletor (glifo
   invisível sobre o próprio fundo, mesma armadilha já evitada nos outros
   7 arquivos desta task). `.outro` fica no tom muted (evento "outro/menos
   relevante"), mesmo idioma do `.mercado-dot`/`.mercado-dot.aberto`. */
body.admin-brutal .orch-page .orch-timeline-dot.transicao,
body.admin-brutal .orch-page .orch-timeline-dot.consolidacao,
body.admin-brutal .orch-page .orch-timeline-dot.erro {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .orch-page .orch-timeline-dot.outro {
    background: var(--admin-brutal-muted);
}
/* .orch-version-badge/.orch-btn-primary: CTA/destaque — accent + accent-ink. */
body.admin-brutal .orch-page .orch-version-badge,
body.admin-brutal .orch-page .orch-btn-primary {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
/* .orch-semaforo-light (4 variantes: aberto/fechado/encerrado/desconhecido):
   cor de status + glow colorido (box-shadow, já zerado globalmente pelo
   wildcard `*:not(:focus-visible)`) — colapsa outline monocromático, sem
   distinção entre estados, mesmo idioma do .repo-sync-icon. A animação
   `orch-pulse-red` (só anima box-shadow) fica sem efeito visível — mesma
   convenção "zero decoração orgânica" já aplicada a glows/blurs. */
body.admin-brutal .orch-page .orch-semaforo-light.aberto,
body.admin-brutal .orch-page .orch-semaforo-light.fechado,
body.admin-brutal .orch-page .orch-semaforo-light.encerrado,
body.admin-brutal .orch-page .orch-semaforo-light.desconhecido {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
/* .orch-manager-badge (6 variantes) e .orch-manager-tag.base/.coleta/
   .financeiro: fundo tintado + cor hex hardcoded — colapsa outline, mesmo
   idioma do repo-badge e categoria (arquivos anteriores desta task). */
body.admin-brutal .orch-page .orch-manager-badge.idle,
body.admin-brutal .orch-page .orch-manager-badge.coletando,
body.admin-brutal .orch-page .orch-manager-badge.processando,
body.admin-brutal .orch-page .orch-manager-badge.consolidando,
body.admin-brutal .orch-page .orch-manager-badge.concluido,
body.admin-brutal .orch-page .orch-manager-badge.erro,
body.admin-brutal .orch-page .orch-manager-tag.base,
body.admin-brutal .orch-page .orch-manager-tag.coleta,
body.admin-brutal .orch-page .orch-manager-tag.financeiro,
body.admin-brutal .orch-connection-status.connected,
body.admin-brutal .orch-connection-status.disconnected {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* .orch-dot.on/.off: pontinho de status de conexão (8px) — colapsa fg, sem
   distinguir on/off por cor (o texto ao lado, "Conectado"/"Desconectado",
   carrega a informação). */
body.admin-brutal .orch-connection-status .orch-dot.on,
body.admin-brutal .orch-connection-status .orch-dot.off {
    background: var(--admin-brutal-fg);
}
/* .orch-manager-card:hover: border-color var(--color-primary-border) (rgba
   laranja translúcida) — colapsa fg. */
body.admin-brutal .orch-page .orch-manager-card:hover {
    border-color: var(--admin-brutal-fg);
}
/* .orch-fase-step.ativa (fase atual): destaque total, mesmo idioma
   "selecionado" já usado no `.dl-chart-bar` (linha ~2384-2390) — fg-invert.
   .completa (fase concluída): nível intermediário, só o texto ganha fg,
   sem inverter fundo — distingue de `.ativa` (fundo invertido) e do estado
   pendente (texto muted, do grupo acima). */
body.admin-brutal .orch-page .orch-fase-step.ativa {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .orch-page .orch-fase-step.completa {
    background: transparent;
    color: var(--admin-brutal-fg);
}
/* .orch-error-icon/.orch-error-text: var(--color-danger)/var(--color-danger-
   text) — colapsa fg, mesmo precedente de status já aplicado acima. */
body.admin-brutal .orch-page .orch-error-icon,
body.admin-brutal .orch-page .orch-error-text {
    color: var(--admin-brutal-fg);
}
/* var(--border-default) — ver nota no topo do bloco (bug de shorthand,
   fica sem efeito até correção da fonte, mas correto semanticamente). */
body.admin-brutal .orch-page .orch-semaforo,
body.admin-brutal .orch-page .orch-stat-card,
body.admin-brutal .orch-page .orch-manager-card,
body.admin-brutal .orch-page .orch-timeline,
body.admin-brutal .orch-page .orch-btn-secondary,
body.admin-brutal .orch-page .orch-fase-bar {
    border-color: var(--admin-brutal-border);
}

/* ---- admin-analises-ia.css (admin-analises-ia.html) ----
   Zero !important confirmado (primeira medição desta task — grep vazio).
   .admin-page/.admin-content/.admin-header/.admin-header::before/::after/
   .admin-header h1 .material-icons/.form-group label/.access-denied — bare,
   COMPARTILHADOS com admin-gestao.css (mesmo nome de classe, mesmo shape:
   border 1px solid <accent-de-módulo>, friso gradiente ::before, blob glow
   ::after, ícone de header cor de módulo) — já cobertos de graça pelo bloco
   admin-gestao acima, SEM duplicar aqui (dedup). --ia-accent/-dark/-light/
   -muted (linhas 2-5, cadeia --module-saude-*) seguem o mesmo padrão de
   --gestao-accent: nenhuma remapeada, colapsa por seletor. .rx-selectors
   select/.rx-card/.rx-resultado/.rx-resultado-header/.rx-section (background/
   border via var(--surface-card)/var(--surface-card-hover)) e .rx-selectors
   label/.rx-resultado-header h3/.rx-kpi-value/.rx-stat-value/.rx-section h4
   (var(--text-primary)) já vêm de graça via remap do bloco raiz. */
/* FIX ROUND 1 (Task 14 review, Important 2): .rx-table th removido daqui —
   é <th> real, o genérico `th` já define background fg + color bg;
   `color: muted` colidia (contraste 2.18-2.54). Herda do genérico. */
body.admin-brutal .rx-card-desc,
body.admin-brutal .rx-tempo,
body.admin-brutal .rx-kpi-icon,
body.admin-brutal .rx-kpi-label,
body.admin-brutal .rx-stat-label,
body.admin-brutal .rx-health-label,
body.admin-brutal .rx-text-muted {
    color: var(--admin-brutal-muted);
}
/* var(--text-secondary) não é remapeada — colapsa fg. */
body.admin-brutal .rx-table td,
body.admin-brutal .rx-list {
    color: var(--admin-brutal-fg);
}
/* var(--ia-accent) (cadeia --module-saude-*, não remapeada) — colapsa fg
   nos ícones, mesmo precedente do --gestao-accent (admin-gestao acima). */
body.admin-brutal .rx-card-icon,
body.admin-brutal .rx-resultado-header h3 .material-icons,
body.admin-brutal .rx-section h4 .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .rx-selectors select:focus {
    border-color: var(--admin-brutal-accent);
}
/* .rx-card:hover/.active: border-color var(--ia-accent) — colapsa fg
   (feedback de interação), mesmo idioma do .stat-card:hover/.notificador-
   card:hover. box-shadow do `.active` (glow var(--ia-accent-muted)) já
   zerado globalmente pelo wildcard `*:not(:focus-visible)`. */
body.admin-brutal .rx-card:hover,
body.admin-brutal .rx-card.active {
    border-color: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 14 review, Critical #7 + Important 5): .rx-card é
   <button> — no :hover, o genérico `button:hover` (linha ~558-563) já vira
   `background: fg` + `color: bg` (herdado por .rx-card-title, que não tem
   color própria). Mas .rx-card-icon (`color: fg`, override acima) e
   .rx-card-desc (`color: muted`, grupo acima) têm color PRÓPRIO que não
   herda o `color: bg` do hover — colidem com o novo fundo fg (ícone
   invisível, contraste ~1; desc com contraste baixo). Override explícito
   pros dois filhos no estado :hover. */
body.admin-brutal .rx-card:hover .rx-card-icon,
body.admin-brutal .rx-card:hover .rx-card-desc {
    color: var(--admin-brutal-bg);
}
/* FIX ROUND 1 (Task 14 review, Important 4): mesmo problema do
   .repo-tab.active em estado .active — o genérico `button.active` (linha
   ~564-568) vira `background: accent`; .rx-card-icon continua com
   `color: fg` (override acima, não escopado a .active), colidindo com o
   novo fundo accent. accent-ink resolve, mesmo critério do .repo-tab.active. */
body.admin-brutal .rx-card.active .rx-card-icon {
    color: var(--admin-brutal-accent-ink);
}
/* FIX ROUND 2 (Task 14 review): mesmo problema do .rx-card-icon acima
   (Important 4), gêmeo esquecido na Rodada 1 — .rx-card-desc continuava
   `color: muted` (grupo linha ~5633) em `.active` (fundo vira accent, linha
   ~5661-5664), contraste 1.64:1 no tema escuro. Posicionada DEPOIS da regra
   de `:hover` (linha ~5673-5676, mesma especificidade (0,4,1)) — resolve
   também o estado combinado `.active:hover`: sem esta regra, o hover
   (`color: bg`) vencia o empate por ordem de arquivo mesmo com o card
   `.active`, resultando em branco sobre amarelo (1.52:1) — pior que o
   4.72:1 que existia antes da correção de hover da Rodada 1. Com esta regra
   depois, `.active` vence o empate, corrigindo os dois estados combinados. */
body.admin-brutal .rx-card.active .rx-card-desc {
    color: var(--admin-brutal-accent-ink);
}
/* .spinner: border var(--surface-card) (já remapeado -> --admin-brutal-bg,
   idêntico ao fundo da página — anel ficaria invisível, só o border-top
   apareceria) — mesmo idioma do `.loading-spinner`/`.loading-spinner-new`
   genérico (linha ~497-500/664-667): anel em border, topo em accent. */
body.admin-brutal .spinner {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
/* var(--color-success)/var(--color-danger)/var(--color-warning) (KPIs,
   valores pos/neg, health score) — colapsam monocromático fg, mesmo
   precedente do .cf-stat--receber/.cf-saldo.pos/.stat-card.sucesso. */
body.admin-brutal .rx-kpi.green .rx-kpi-value,
body.admin-brutal .rx-kpi.green .rx-kpi-icon,
body.admin-brutal .rx-kpi.red .rx-kpi-value,
body.admin-brutal .rx-kpi.red .rx-kpi-icon,
body.admin-brutal .rx-kpi.orange .rx-kpi-value,
body.admin-brutal .rx-kpi.orange .rx-kpi-icon,
body.admin-brutal .rx-val-pos,
body.admin-brutal .rx-val-neg,
body.admin-brutal .rx-health-score.green .rx-health-number,
body.admin-brutal .rx-health-score.orange .rx-health-number,
body.admin-brutal .rx-health-score.red .rx-health-number {
    color: var(--admin-brutal-fg);
}
/* .rx-table tr:hover td: background var(--surface-card-hover) (já
   remapeado -> --admin-brutal-border) + color var(--text-secondary)
   (colapsaria fg, ver override acima) — mesmo par border=fg (mesmo hex nos
   2 temas) que invisibiliza o texto. Inverte pro idioma padrão de hover de
   tabela (mesmo do `tbody tr:hover td` genérico, linha ~605-610). */
body.admin-brutal .rx-table tr:hover td {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* .rx-badge (green/red/orange/muted): fundo tintado + cor de status/muted —
   colapsa outline, mesmo idioma do categoria e cf-tag (arquivos anteriores
   desta task). */
body.admin-brutal .rx-badge.green,
body.admin-brutal .rx-badge.red,
body.admin-brutal .rx-badge.orange,
body.admin-brutal .rx-badge.muted {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* .rx-erro: mesmo idioma do `.alert-error` genérico (bg + borda + fg). */
body.admin-brutal .rx-erro {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}

/* ---- Achados adicionais: estilos INLINE fora dos 8 arquivos CSS-fonte,
   mas em markup ESTÁTICO (visível sem interação, sem esperar fetch/JS) —
   mesmo critério já usado pro --app-warning inline de admin-resta-um.js
   (Task 12, nota do bloco raiz). Requer !important (estilo inline vence
   qualquer regra externa sem ele). var(--app-danger, ...) do modal de
   deleção em github-analytics-unified.html:152 NÃO entra aqui — já resolve
   de graça via --app-danger remapeado no bloco raiz (linha ~54).
   #statusContent (modo-manutencao-avancado.html:58, span inline var(--text-
   disabled) "Carregando...") FICA DE FORA deliberadamente: o conteúdo REAL
   (manutencao-config.js:169-204) não usa `.status-*` da fonte CSS (essas
   classes são CONFIRMADAMENTE MORTAS) — usa classes Tailwind (text-white/
   text-gray-400/text-red-400/text-green-400), fora do escopo desta task
   (não é CSS de módulo, é utility cross-cutting); um seletor bare `span`
   pra pegar só o placeholder "Carregando..." atropelaria essas classes
   Tailwind reais com o mesmo !important. Estilos inline dentro de innerHTML
   gerado por JS *após* fetch (ex.: painéis de erro/detalhe de
   conferencias-financeiras.html) ficam fora — mesmo critério do modal do
   notificador (Task 14 acima), não auditados. */
body.admin-brutal .tg-admin-header h1 .material-icons {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .mav-card-title .material-icons,
body.admin-brutal .mav-subsection-title .material-icons {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .notificador-header p {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal .loading-spinner p {
    color: var(--admin-brutal-muted) !important;
}

/* ==========================================================================
   TASK 15 — Telas recém-extraídas da Fase 0 (criar-liga.css, editar-liga.css,
   ferramentas-rodadas.css, dashboard-saude.css, historico-acessos.css,
   api-football-analytics.css) — última task de reskin CSS do rollout antes
   do wiring final (Task 16).
   Grep de "!important" do ZERO nos 6 (nunca haviam sido medidos, vieram de
   <style> inline extraído nas Tasks 1-2): ZERO ocorrências em todos os 6
   arquivos (grep -o "!important" | wc -l = 0 em cada um, confirmado
   individualmente). Nenhum !important precisou ser escrito abaixo.
   2 achados de merge em blocos JÁ existentes de tasks anteriores (evita
   duplicata de seletor): .stat-badge (linha ~358, ganhou border-color) e
   .usuario-avatar (linha ~1236, ganhou background) — ver comentários nos
   próprios blocos originais.
   ========================================================================== */

/* === CRIAR-LIGA.CSS (criar-liga.html) ===
   Zero !important e zero ::before/::after na fonte (confirmado). 100% cores
   hardcoded (sem custom properties) — critério 5 não se aplica.
   Já cobertos de graça (sem regra nova, confirmado por especificidade):
   .btn-voltar/.btn-voltar:hover (bare, Task 8, linha ~1622), .btn-primary/
   .btn-secondary (bare, linha ~1817-1833), .alert/.alert-success/.alert-error
   (bare genérico, linha ~641-648), .search-input + :focus (genérico "input,
   select, .search-input" + "input:focus", linha ~628-636), .form-input
   (elemento <input>, genérico), .btn-add (bare CTA accent, linha ~4648 —
   <button> em criar-liga.html), .btn-search (é <button> — generic
   button/button:hover cobre bg/color/border; sem CTA accent própria porque
   não é .btn-primary), .loading (bare genérico, linha ~670), .empty-state/
   .empty-state .material-icons (bare genérico, linha ~2174-2180). */
body.admin-brutal .page-header {
    border-bottom-color: var(--admin-brutal-border);
}
/* ---- Progress steps ---- */
body.admin-brutal .step-number {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .step.active .step-number {
    background: var(--admin-brutal-accent);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .step-label {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .step.active .step-label {
    color: var(--admin-brutal-fg);
}
/* ---- Cards de formulário (seletor compartilhado com ferramentas-rodadas.css,
   mesmo idioma visual nas 2 telas) ---- */
body.admin-brutal .form-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .card-header {
    border-bottom-color: var(--admin-brutal-border);
}
/* .card-icon: mesmo idioma do .modal-icon (transparent + borda sólida + fg)
   já usado em tasks anteriores pra caixas de ícone com gradiente laranja. */
body.admin-brutal .card-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .card-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .card-title {
    color: var(--admin-brutal-fg);
}
/* FIX (review final, Critical 2): base.css:243-249 tem
   `color: var(--text-muted) !important` neste MESMO seletor bare — vence
   qualquer regra sem !important independente de especificidade. `!important`
   adicionado aqui pra realmente decidir o computed value final (mesclado
   na regra já existente, dedup: 1 seletor `.card-subtitle` só). */
body.admin-brutal .card-subtitle {
    color: var(--admin-brutal-muted) !important;
}
/* ---- Busca de time e resultado ---- */
body.admin-brutal .search-input-wrapper .material-icons {
    color: var(--admin-brutal-muted);
}
/* .search-result: mesmo idioma outline do .info-box (abaixo) — tint laranja
   rgba na fonte colapsa monocromático. */
body.admin-brutal .search-result {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .result-escudo {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .result-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .result-cartoleiro,
body.admin-brutal .result-id {
    color: var(--admin-brutal-muted);
}
/* ---- Lista de times selecionados ---- */
body.admin-brutal .times-section {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .times-title,
body.admin-brutal .times-title .material-icons {
    color: var(--admin-brutal-fg);
}
/* .times-count: contador em destaque — mesma convenção accent+accent-ink já
   usada em badges numéricos de outras tasks. */
body.admin-brutal .times-count {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .times-list::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}
body.admin-brutal .time-item {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .time-item:hover {
    border-color: var(--admin-brutal-fg);
}
body.admin-brutal .time-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .time-cartoleiro {
    color: var(--admin-brutal-muted);
}
/* .btn-remove: ação destrutiva — outline monocromático + invert no hover,
   mesmo idioma do .mav-btn--upload/-remove e .btn-icon-delete (abaixo). */
body.admin-brutal .btn-remove {
    background: transparent;
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-remove:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}

/* === EDITAR-LIGA.CSS (editar-liga.html) ===
   Zero !important na fonte (confirmado). 2 ocorrências de ::before:
   .toggle-slider-mini::before (knob) e .toggle-switch-mini input:checked +
   .toggle-slider-mini::before — tratadas abaixo, mesmo idioma do
   .toggle-slider/.toggle-slider:before genérico (linha ~1788-1802), que NÃO
   alcança porque o nome da classe tem sufixo "-mini" diferente.
   100% cores hardcoded (sem custom properties) — critério 5 não se aplica.
   Já cobertos de graça (confirmado por especificidade): .btn-voltar/
   .btn-voltar:hover (bare, Task 8), .form-input/.form-select + :focus
   (elementos <input>/<select>, genérico vence por contagem de tag), .data-
   grid th (genérico "body.admin-brutal th" — 2 classes+tag — vence a fonte
   ".data-grid th" — 1 classe+tag), .data-grid td/tbody tr:hover/tbody
   tr:hover td (idem, genérico "th,td"/"tbody tr:hover"/"tbody tr:hover td"
   vence por contagem de tag), .loading-spinner (bare genérico, ".loading::
   after, .loading-spinner", linha ~675), .loading-state/.empty-state (bare
   genérico, linha ~2174), .empty-state h3/.header-text h1 (heading genérico
   h1/h3 — empate de especificidade resolvido por ordem de carga, admin-
   brutal.css carrega depois). .stat-badge (background/color já bare —
   border-color mesclada direto no bloco original, linha ~358, ver nota lá). */
/* ---- Header ---- */
body.admin-brutal .page-header-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .header-text h1 .liga-nome {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .header-text .header-subtitle {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .liga-avatar {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .liga-avatar .material-icons {
    color: var(--admin-brutal-muted);
}
/* .stat-badge .material-icons (laranja fixo)/strong (branco fixo): o bare
   genérico (linha ~358-362) só inverte background/color do próprio badge,
   não alcança estes 2 filhos com cor hardcoded própria. */
body.admin-brutal .stat-badge .material-icons,
body.admin-brutal .stat-badge strong {
    color: var(--admin-brutal-bg);
}
/* ---- Data grid ---- */
body.admin-brutal .data-grid-container {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .table-wrapper::-webkit-scrollbar-thumb {
    background: var(--admin-brutal-muted);
}
/* .col-num também é usada em <th class="col-num"> (editar-liga.html:64) —
   escopo pra td.col-num apenas, senão colidiria com o genérico th
   (background:fg) e quebraria contraste (color:muted sobre bg fg, mesmo
   bug de "meio-par" evitado no .fontes-tbl th acima). O <th> mantém o
   tratamento genérico de th (background:fg/color:bg) sem interferência. */
body.admin-brutal td.col-num {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .avatar-circular {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .avatar-circular .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .cartoleiro-name,
body.admin-brutal .cartoleiro-name.error {
    color: var(--admin-brutal-fg);
}
/* ---- Toggle premium mini (::before = knob) ---- */
body.admin-brutal .toggle-slider-mini {
    background: var(--admin-brutal-border);
}
body.admin-brutal .toggle-slider-mini::before {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .toggle-switch-mini input:checked + .toggle-slider-mini {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .toggle-switch-mini input:checked + .toggle-slider-mini::before {
    background: var(--admin-brutal-bg);
}
/* ---- Ícones de ação (mesmo idioma outline do .mav-btn--upload/-remove) ---- */
body.admin-brutal .btn-icon-save,
body.admin-brutal .btn-icon-clear,
body.admin-brutal .btn-icon-delete,
body.admin-brutal .btn-icon-add {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .btn-icon-save:hover,
body.admin-brutal .btn-icon-clear:hover,
body.admin-brutal .btn-icon-delete:hover,
body.admin-brutal .btn-icon-add:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* ---- Nova linha (adicionar time) ---- */
body.admin-brutal .nova-linha {
    background: transparent;
}
body.admin-brutal .nova-linha td {
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .nova-linha .col-num {
    color: var(--admin-brutal-fg);
}
/* ---- Rodapé fixo ---- */
body.admin-brutal .sticky-footer {
    background: var(--admin-brutal-bg);
    border-top-color: var(--admin-brutal-border);
}
body.admin-brutal .footer-info {
    color: var(--admin-brutal-muted);
}
/* .btn-save-all é <button> — generic button/button:hover já cobriria o
   básico, mas ganha CTA accent própria pra manter consistência com as
   demais telas do rollout (.btn-primary, .mav-btn--primary etc). */
body.admin-brutal .btn-save-all {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .btn-save-all:hover:not(:disabled) {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
/* FIX ROUND 1 (Task 15 review, achado Critical 3): a linha do .data-grid
   vira fg no hover (genérico "tbody tr:hover", linha 619) — mesmo padrão de
   meio-par já corrigido em .highlight-table (linha ~3727) e
   .capitao-luxo-ranking-table (linha ~3895). Textos com color:fg próprio
   (.cartoleiro-name, .nova-linha .col-num) ficam invisíveis (fg sobre fg);
   elementos com fundo transparent (.btn-icon-*, .avatar-circular) deixam o
   fg do hover vazar por trás, escondendo a coluna INTEIRA de ações. */
body.admin-brutal .data-grid tbody tr:hover .cartoleiro-name,
body.admin-brutal .data-grid tbody tr:hover .cartoleiro-name.error {
    color: var(--admin-brutal-bg);
}
/* ".nova-linha" é a PRÓPRIA <tr> (não uma ancestral separada de .col-num) —
   "tr:hover .nova-linha" nunca bateria (exigiria .nova-linha como descendente
   de tr:hover, quando na verdade são o MESMO elemento). Composto
   "tr.nova-linha:hover" na mesma parte do seletor corrige (achado real via
   Playwright, fix round 1 do fix round 1). */
body.admin-brutal .data-grid tbody tr.nova-linha:hover .col-num {
    color: var(--admin-brutal-bg);
}
/* :not(:hover) nos 4 botões: sem ele, esta regra (mais específica que o
   próprio ".btn-icon-save:hover" etc., linha ~6038) venceria mesmo quando o
   MOUSE está exatamente sobre o botão, invertendo o hover próprio do botão.
   Excluído daqui, o próprio :hover do botão volta a ser o único candidato
   quando o alvo é o botão em si. */
body.admin-brutal .data-grid tbody tr:hover .btn-icon-save:not(:hover),
body.admin-brutal .data-grid tbody tr:hover .btn-icon-clear:not(:hover),
body.admin-brutal .data-grid tbody tr:hover .btn-icon-delete:not(:hover),
body.admin-brutal .data-grid tbody tr:hover .btn-icon-add:not(:hover),
body.admin-brutal .data-grid tbody tr:hover .avatar-circular {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .data-grid tbody tr:hover .avatar-circular .material-icons {
    color: var(--admin-brutal-fg);
}
/* .toggle-slider-mini: track usa background:border (=fg, mesmo hex de
   --admin-brutal-fg, ver nota linha ~3716) — some contra o hover genérico
   (fg). Borda bg desenha o contorno do track sobre o fundo fg da linha; o
   knob (::before, background:bg, linha 6021) permanece visível dentro dele. */
body.admin-brutal .data-grid tbody tr:hover .toggle-slider-mini {
    border: 2px solid var(--admin-brutal-bg);
}

/* === FERRAMENTAS-RODADAS.CSS (ferramentas-rodadas.html) ===
   Zero !important e zero ::before/::after na fonte (confirmado).
   Critério 5 (custom properties): usa var(--bg-base/--bg-card/--bg-secondary/
   --border-color/--text-white/--border-subtle). --bg-base/--border-color/
   --text-white(→--text-primary) remapeadas de graça no bloco raiz. --bg-card
   NÃO herdava de graça (FIX ROUND 1, Task 15 review, achado Critical 2): é
   definida só em :root (_admin-tokens.css:259) como var(--surface-card) —
   mesma indireção via :root já quebrada e corrigida para --app-bg (Task 13).
   Remap direto adicionado ao bloco raiz (linha ~70) resolve .rodadas-header
   (linhas 19,70,227 do arquivo-fonte). var(--laranja/--verde/--vermelho/
   --azul/--text-muted/--text-dim/--bg-darker/--bg-elevated) NÃO são
   remapeadas (encadeiam pra --color-primary/success/danger/info globais, ou
   são hex puro fixo em _admin-tokens.css:261-262,267) — tratadas abaixo.
   Já cobertos de graça: .btn-voltar/.btn-voltar:hover (bare, Task 8),
   .btn-primary/.btn-primary:hover (bare CTA accent, linha ~1825-1833),
   .form-card (regra compartilhada com criar-liga.css acima), .form-select/
   .form-input + :focus (elementos <select>/<input>, genérico vence por
   contagem de tag), .rodadas-page (var(--bg-base) já remapeada). .form-
   row/.log-container.visible: puro layout, sem cor/fundo/borda. */
body.admin-brutal .rodadas-header-info p {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .form-label {
    color: var(--admin-brutal-muted);
}
/* .checkbox-wrapper: mesmo idioma outline do .info-box abaixo — tint
   vermelho rgba colapsa monocromático. */
body.admin-brutal .checkbox-wrapper {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .checkbox-wrapper input[type="checkbox"] {
    accent-color: var(--admin-brutal-accent);
}
body.admin-brutal .checkbox-wrapper label strong {
    color: var(--admin-brutal-fg);
}
/* ---- Log de execução ---- */
body.admin-brutal .log-container,
body.admin-brutal .log-header {
    background: var(--admin-brutal-bg);
}
body.admin-brutal .log-header-title {
    color: var(--admin-brutal-muted);
}
/* FIX (review final, item menor): ferramentas-rodadas.css define
   `.log-entry { border-bottom: 1px solid var(--bg-card, #1a1a1a); }` —
   `--bg-card` já é remapeada pra `--admin-brutal-bg` (bloco raiz, linha
   ~83), mesma cor do fundo do container acima (.log-container/.log-header).
   Hairline resolvia pra fundo-sobre-fundo, linhas do log sem separador
   visível nos 2 temas. Mesclado com o `color` que já existia aqui (dedup:
   1 seletor `.log-entry` só, em vez de repetir numa 2ª regra). */
body.admin-brutal .log-entry {
    color: var(--admin-brutal-muted);
    border-bottom-color: var(--admin-brutal-border);
}
body.admin-brutal .log-entry.log-success,
body.admin-brutal .log-entry.log-error,
body.admin-brutal .log-entry.log-info {
    color: var(--admin-brutal-fg);
}
/* ---- Info box (tint azul rgba colapsa monocromático) ----
   Achado inline: ferramentas-rodadas.html:39-43 tem uma 2ª ocorrência de
   .info-box com `style="background:rgba(239,68,68,.05);border-color:
   rgba(239,68,68,.15)"` (alerta vermelho "Plano B", markup estático) +
   filhos com `style="color:#ef4444"` (ícone e <p> em negrito) — inline
   vence regra externa sem !important. A OUTRA ocorrência (linha 52, sem
   inline) já seria coberta sem !important, mas usar !important nela
   também é inócuo (mesmo valor final). */
body.admin-brutal .info-box {
    background: transparent !important;
    border-color: var(--admin-brutal-border) !important;
}
body.admin-brutal .info-box .material-icons {
    color: var(--admin-brutal-fg) !important;
}
body.admin-brutal .info-box p {
    color: var(--admin-brutal-muted) !important;
}

/* === DASHBOARD-SAUDE.CSS (dashboard-saude.html) ===
   Zero !important e zero ::before/::after na fonte (confirmado).
   Critério 5: usa var(--surface-bg/--surface-card/--surface-card-elevated/
   --surface-card-hover/--text-primary/--border-subtle), TODAS já remapeadas
   no bloco raiz — .saude-page, .saude-component-card (base), .saude-
   consolidacoes, .saude-consolidacao-item (base e :hover), .saude-component-
   title, .saude-detail-row, .saude-consolidacoes-title e .saude-
   consolidacao-liga já chegam corretos de graça, SEM regra nova. var(--text-
   secondary/--text-muted/--color-success/--color-warning/--color-danger) e
   var(--gradient-saude/--gradient-card/--module-saude-*) NÃO são remapeados
   — tratados abaixo. .saude-title é <h1> (heading genérico cobre de graça).
   .saude-refresh-btn é <button> — generic button/button:hover (linha ~562-
   574) cobre 100% (background/color/border, base e hover) por contagem de
   tag, vencendo o gradiente verde da fonte — sem regra nova. box-shadow
   (glow verde do :hover e dos 3 status indicators) já zerado globalmente por
   "*:not(:focus-visible) { box-shadow: none !important }" (linha 78-80) —
   sem regra nova. */
body.admin-brutal .saude-subtitle,
body.admin-brutal .saude-last-update,
body.admin-brutal .saude-score-label,
body.admin-brutal .saude-detail-label,
body.admin-brutal .saude-consolidacao-rodada,
body.admin-brutal .saude-consolidacao-time,
body.admin-brutal .saude-component-details,
body.admin-brutal .saude-text-gray {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .saude-spinner {
    border-color: var(--admin-brutal-border);
    border-top-color: var(--admin-brutal-accent);
}
body.admin-brutal .saude-score-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .saude-component-card:hover {
    border-color: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 15 review, achado Important 5): .saude-consolidacao-item
   usa --surface-card-hover (remapeada pra --admin-brutal-border no bloco
   raiz, linha 20) no :hover; .saude-consolidacao-liga usa --text-primary
   (remapeada pra --admin-brutal-fg, linha 33). Como --admin-brutal-border e
   --admin-brutal-fg resolvem pro MESMO hex nos 2 temas (ver nota linha
   ~3716), item e texto ficam ambos fg no hover — invisível. .saude-
   consolidacao-rodada/-time (já pintados --admin-brutal-muted na seção
   abaixo) ficam de graça com contraste reduzido no mesmo hover — incluídos
   aqui por completude, mesmo critério do grupo. */
body.admin-brutal .saude-consolidacao-item:hover .saude-consolidacao-liga,
body.admin-brutal .saude-consolidacao-item:hover .saude-consolidacao-rodada,
body.admin-brutal .saude-consolidacao-item:hover .saude-consolidacao-time {
    color: var(--admin-brutal-bg);
}
body.admin-brutal .saude-component-icon {
    color: var(--admin-brutal-fg);
}
/* Status indicators (online/degraded/offline): 3 cores de status colapsam
   monocromático, mesmo precedente do .mercado-dot/.stat-badge (nenhuma cor
   de status sobrevive no brutalismo). */
body.admin-brutal .saude-status-online,
body.admin-brutal .saude-status-degraded,
body.admin-brutal .saude-status-offline {
    background-color: var(--admin-brutal-fg);
}
body.admin-brutal .saude-text-green,
body.admin-brutal .saude-text-yellow,
body.admin-brutal .saude-text-red {
    color: var(--admin-brutal-fg);
}

/* === HISTORICO-ACESSOS.CSS (historico-acessos.html) ===
   Zero !important na fonte (confirmado). 1 ocorrência de ::before:
   .historico-header::before (friso gradiente azul 3px no topo) — vira friso
   sólido abaixo, mesmo precedente do .liga-card::before/.modulos-header::
   before. 100% cores hardcoded (sem custom properties) — critério 5 não se
   aplica.
   Já cobertos de graça (confirmado por especificidade): .stat-card (bare
   genérico, background+border, linha ~585), .section-title/.section-title
   .material-icons (bare genérico, linha ~1721-1729), .empty-state/.empty-
   state .material-icons (bare genérico), .loading (bare genérico, mesmo
   seletor — admin-brutal.css carrega depois, vence o empate de
   especificidade), .modal-header/.modal-close/.modal-close:hover (bare
   "Modal Premium", linha ~1852-1875 — sem escopo de ID, se propaga pra cá),
   .modal-overlay (rgba(0,0,0,.8) — mesmo precedente de "escurece igual nos
   2 temas", deliberadamente fora), .modal-header h3 (heading genérico h3),
   .padrao-card h4 (heading genérico h4), .usuario-avatar (background
   mesclado direto no bloco original, linha ~1236, ver nota lá; .material-
   icons/.usuario-nome/.usuario-liga já bare, Task 8 analisar-participantes,
   linha ~1236-1245 — mesma classe reaproveitada), .periodo-tab/.periodo-
   tab.active/.periodo-tab:hover (é <button> — generic button/button.active/
   button:hover, linha ~562-580, vence por contagem de tag/classe — cobre
   100% sem regra nova), .stats-grid/.padroes-grid/.bar-chart/.bar-item/
   .usuario-info/.usuario-stats (puro layout, sem cor/fundo/borda). */
body.admin-brutal .historico-header {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .historico-header::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .historico-header h1 .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .historico-header p {
    color: var(--admin-brutal-muted);
}
/* ---- Stat cards do topo (fundo/borda já vêm de graça via .stat-card bare;
   faltam os filhos) ---- */
body.admin-brutal .stat-card-icon.blue,
body.admin-brutal .stat-card-icon.green,
body.admin-brutal .stat-card-icon.purple,
body.admin-brutal .stat-card-icon.orange {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .stat-card-label,
body.admin-brutal .stat-card-detail {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .stat-card-value {
    color: var(--admin-brutal-fg);
}
/* ---- Top usuários ---- */
body.admin-brutal .top-usuarios,
body.admin-brutal .padrao-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .usuario-item {
    background: transparent;
    border: 1px solid transparent;
}
body.admin-brutal .usuario-item:hover {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
/* .usuario-rank: background #333 hardcoded (sem var), sem borda própria —
   mesmo raciocínio do .usuario-avatar (círculo sem borda vira invisível). */
body.admin-brutal .usuario-rank {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .usuario-rank.top3 {
    background: var(--admin-brutal-accent);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .usuario-acessos {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .usuario-ultimo {
    color: var(--admin-brutal-muted);
}
/* ---- Padrões (gráfico de barras) ---- */
body.admin-brutal .padrao-card h4 .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .bar {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .bar-label {
    color: var(--admin-brutal-muted);
}
/* ---- Modal de detalhes (plain, sem escopo de ID/classe extra — as
   variantes existentes em admin-brutal.css são todas .modal-content .xxx ou
   .modal-content.bg-gray-800, nenhuma bare; confirmado sem duplicata). ---- */
body.admin-brutal .modal-content {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}

/* === API-FOOTBALL-ANALYTICS.CSS (api-football-analytics.html) ===
   Zero !important na fonte (confirmado). Zero ::before/::after na fonte.
   100% cores hardcoded (sem custom properties) — critério 5 não se aplica.
   Já cobertos de graça: .refresh-btn/.refresh-btn:hover (é <button> —
   generic button/button:hover, linha ~562-574, vence por contagem de tag —
   cobre 100% background/color/border, base e hover, sem regra nova).
   .fontes-tbl th (genérico "body.admin-brutal th" — 2 classes+tag — vence a
   fonte ".fontes-tbl th" — 1 classe+tag — dá background:fg/color:bg, MESMA
   convenção de todo <th> do rollout; checado explicitamente pra não escrever
   um `color` avulso aqui, que colidiria com esse background e quebraria
   contraste — exemplo do bug de "meio-par" citado no brief, evitado).
   .fontes-tbl td (genérico "body.admin-brutal td" empata em especificidade
   com a fonte — 1 classe+tag nos 2 — admin-brutal.css carrega depois e
   vence: color:fg/border-bottom:2px solid border já aplicados, sem regra
   nova). .ap-grid: puro layout (grid-template-columns), sem cor/fundo/borda. */
body.admin-brutal .ap-back {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .ap-back:hover {
    color: var(--admin-brutal-fg);
}
/* ---- Header compacto ---- */
body.admin-brutal .ap-hdr {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
/* .ap-hdr-icon: mesmo idioma outline do .card-icon (acima) — gradiente verde
   colapsa monocromático. */
body.admin-brutal .ap-hdr-icon {
    background: transparent;
    border: 2px solid var(--admin-brutal-border);
}
body.admin-brutal .ap-hdr-icon .material-icons {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .ap-hdr p {
    color: var(--admin-brutal-muted);
}
/* ---- Fluxo (linha de comando compacta) ---- */
body.admin-brutal .ap-fluxo {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .ap-fluxo label {
    color: var(--admin-brutal-muted);
}
/* ---- Painel API ---- */
body.admin-brutal .api-panel {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .api-panel-hdr {
    border-bottom-color: var(--admin-brutal-border);
}
/* FIX ROUND 1 (Task 15 review, achado Critical 1): .api-panel-title tem
   `color: #fff` fixo na fonte (api-football-analytics.css:24), sem nenhuma
   regra cobrindo — no tema claro (bg branco) o título das 4 seções fica
   branco sobre branco, sempre, não é bug de hover. */
body.admin-brutal .api-panel-title {
    color: var(--admin-brutal-fg);
}
/* ---- Tabela compacta de dados (.dt) ---- */
body.admin-brutal .dt td:first-child {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .dt td:last-child {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .dt tr + tr td {
    border-top-color: var(--admin-brutal-border);
}
/* FIX ROUND 1 (Task 15 review, achado Important 4 + achado extra na
   validação): ".dt" é <table> sem <tbody> explícito no HTML-fonte, mas o
   browser injeta um <tbody> implícito — "tbody tr:hover" (genérico, linha
   619) alcança essas linhas normalmente. ".dt td:first-child"/":last-child"
   (3 classes-equivalente) vencem o hover genérico "tbody tr:hover td" (2
   classes+4 tipos) por contagem de classe — texto muted/fg fica congelado
   no hover enquanto o fundo da linha vira fg (mesmo meio-par). ".dt
   td[style]" (linha ~6485, !important fg) nunca cede ao hover genérico,
   mesmo problema, precisa de !important próprio pra vencer. */
body.admin-brutal .dt tbody tr:hover td:first-child,
body.admin-brutal .dt tbody tr:hover td:last-child {
    color: var(--admin-brutal-bg);
}
body.admin-brutal .dt tbody tr:hover td[style] {
    color: var(--admin-brutal-bg) !important;
}
/* ---- Badge (variantes .on/.sec/.warn) — mesmo idioma outline já usado em
   .badge-planned/.badge-status: transparent + borda sólida + fg, nenhuma
   cor de status sobrevive (o texto do label já comunica o estado). .off
   (inativo/circuito aberto) recebe texto mudo, mesma convenção do
   .badge-quitado/.badge-inactive (estado desabilitado = --admin-brutal-
   muted, distinto dos estados "ativos"). ---- */
body.admin-brutal .badge.on,
body.admin-brutal .badge.sec,
body.admin-brutal .badge.warn {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .badge.off {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
/* FIX ROUND 1 (Task 15 review, achado Important 4): badges dentro de linha
   de tabela (.dt/.fontes-tbl) têm fundo transparent + borda/texto fg — no
   hover da linha (fundo vira fg) o fg do badge vaza por trás e some por
   completo (borda, fundo e texto todos fg). Fundo opaco explícito restaura
   o badge como elemento distinto da linha. */
body.admin-brutal tbody tr:hover .badge.on,
body.admin-brutal tbody tr:hover .badge.sec,
body.admin-brutal tbody tr:hover .badge.warn {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal tbody tr:hover .badge.off {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-muted);
}
/* ---- Barra de quota ----
   --admin-brutal-border e --admin-brutal-fg resolvem pro MESMO hex nos 2
   temas (ver bloco :root em _admin-tokens.css:798-811) — pintar o track com
   border e o fill com fg deixaria os 2 idênticos, escondendo o progresso.
   Track vira outline (transparent + borda), fill fica sólido fg — mesmo
   idioma outline já usado em badges/chips acima. */
body.admin-brutal .quota-bar {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
}
body.admin-brutal .quota-fill.g,
body.admin-brutal .quota-fill.y,
body.admin-brutal .quota-fill.r {
    background: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 15 review, achado Important 4): .quota-bar fica dentro
   de <td colspan="2"> — no hover da linha (fundo vira fg) o fundo transparent
   do track deixa o fg vazar por trás, igualando track+borda+fill (todos fg)
   ao fundo da linha: a barra INTEIRA some. Restaurar o fundo opaco normal
   (idêntico ao estado sem hover) já basta — borda e fill continuam fg. */
body.admin-brutal tbody tr:hover .quota-bar {
    background: var(--admin-brutal-bg);
}
/* ---- Proteções inline ---- */
body.admin-brutal .protecoes span {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
/* ---- Jogos do dia ---- */
body.admin-brutal .jogos-hdr-title {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .jogo-item {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .jogo-teams {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .jogo-score {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .jogo-meta .time {
    color: var(--admin-brutal-fg);
}
body.admin-brutal .jogo-meta .league,
body.admin-brutal .no-jogos {
    color: var(--admin-brutal-muted);
}
/* ---- Tabela de fontes ---- */
/* .fontes-tbl th/td: sem regra própria — ver nota no cabeçalho desta seção
   (já cobertos de graça pelo genérico th/td, evitando o bug de contraste
   "meio-par"). */
body.admin-brutal .fontes-tbl code {
    background: transparent;
    border: 1px solid var(--admin-brutal-border);
    color: var(--admin-brutal-fg);
}
/* FIX ROUND 1 (Task 15 review, achado Important 4): mesmo bug do .badge/
   .quota-bar acima — fundo transparent deixa o fg do hover da linha vazar
   por trás, escondendo o <code>. ".fontes-tbl" é a <table> ANCESTRAL de
   "tr" (não descendente) — "tr:hover .fontes-tbl code" nunca bateria
   (ordem invertida); corrigido pra ".fontes-tbl tbody tr:hover code"
   (achado real via Playwright, fix round 1 do fix round 1). */
body.admin-brutal .fontes-tbl tbody tr:hover code {
    background: var(--admin-brutal-bg);
}
/* .ord: as 5 ocorrências reais (api-football-analytics.html:111-115) usam
   `style="background:#10b981/#8b5cf6/#3b82f6/#f59e0b/#6b7280"` inline —
   vence qualquer regra externa sem !important (achado inline, markup
   estático, mesmo critério já usado pro --app-warning inline de admin-
   resta-um.js). !important só no background (único conflito); color não
   tem inline concorrente. */
body.admin-brutal .ord {
    background: var(--admin-brutal-accent) !important;
    color: var(--admin-brutal-accent-ink);
}

/* ---- Achados inline (markup estático de api-football-analytics.html,
   fora do arquivo CSS-fonte, mesmo critério das "Achados adicionais" no
   fim deste arquivo) ---- */
/* .api-panel-title .material-icons: 4 ocorrências com `style="font-size:
   ...;color:#10b981/#8b5cf6/#3b82f6/#FF5500"` (linhas 39,54,82,105) — ícone
   de cor de marca por API, colapsa monocromático. */
body.admin-brutal .api-panel-title .material-icons {
    color: var(--admin-brutal-fg) !important;
}
/* .jogos-hdr-title .material-icons: `style="font-size:18px;color:#FF5500"`
   (linha 97). */
body.admin-brutal .jogos-hdr-title .material-icons {
    color: var(--admin-brutal-fg) !important;
}
/* .dt td[style]: 2 ocorrências de <td> sem classe própria dentro de tabela
   .dt, com `style="color:#10b981"`/`style="color:#8b5cf6"` (linhas 44,59) —
   texto de status "PRINCIPAL"/"SECUNDARIA", colapsa monocromático. Seletor
   de atributo escopado a `.dt td` pra não pegar nenhum outro <td> com style
   fora dessas 2 linhas (grep confirmou: únicas ocorrências no arquivo). */
body.admin-brutal .dt td[style] {
    color: var(--admin-brutal-fg) !important;
}
/* #af-pct/#jogos-total: 2 spans com `style="color:#6b7280"` (linhas 60,97),
   texto "(0%)"/"(0)" — placeholder estático, JS só atualiza o texto, não o
   style attribute. */
body.admin-brutal #af-pct,
body.admin-brutal #jogos-total {
    color: var(--admin-brutal-muted) !important;
}

/* ==========================================================================
   CRITICAL 2 (review final) — css/base.css (detalhe-liga.html + layout.html)

   base.css NUNCA entrou na lista de arquivos do rollout original — nenhuma
   das ~18 tasks anteriores tem uma seção dedicada a ele (confirmado via
   grep "base.css" nos comentários deste arquivo antes desta seção: só
   aparece em referências cruzadas de outras fontes, nunca como fonte
   própria auditada). Levantamento desta revisão: 41 classes com
   cor/borda/sombra, 26 sem NENHUMA contrapartida aqui (as outras 15 já
   vinham cobertas de graça por regras genéricas/bare de tasks anteriores
   que, sem saber, também bateram seletores de base.css — `.loading-state`/
   `.empty-state` color, linha ~2298; `.spinner` border, linha ~5940;
   `.card-header`/`.card-icon`/`.card-title`/`.card-subtitle` parcial,
   linha ~5998-6015; `.back-button`, linha ~3926; `table`/`th`/`td`
   genéricos). O achado mais grave: `.btn-primary`/`.btn-secondary` de
   base.css usam `!important` e por isso venciam as regras bare já
   existentes aqui (que não tinham `!important`) — corrigido acima, in
   loco, sem duplicar seletor (ver linha ~1900-1926). Seção abaixo cobre o
   restante: zero seletor duplicado com o que já existe acima (checado
   nome a nome antes de escrever). */

/* ---- Loading / Empty state: falta só o `background` (color já coberto
   pela regra combinada de linha ~2298 — dedup: mesclado direto nela em vez
   de repetir o seletor `.empty-state` de novo aqui). ---- */
body.admin-brutal .loading-state-full {
    background: var(--admin-brutal-bg);
}

/* ---- Tabela compacta (table-compact) ----
   th/td já herdam de graça do genérico `body.admin-brutal th`/`td` (linha
   ~683-699, especificidade maior que o `.table-compact th`/`td` bare da
   fonte) — só o container precisa de regra própria. */
body.admin-brutal .table-compact {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}

/* ---- Card genérico (.content-card) ----
   ::before: box-shadow (var(--shadow-primary-glow), sem !important na
   fonte) já zerado pelo blanket de pseudo-elemento (Important 3); só o
   background (friso gradiente laranja) precisa de override explícito. */
body.admin-brutal .content-card {
    background: var(--admin-brutal-bg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .content-card::before {
    background: var(--admin-brutal-fg);
}
/* .card-title h2: color já resolve de graça (`--text-primary` remapeado,
   fonte já usa !important nela) — falta font-family (Inter fixo, deveria
   ser font-sys) e text-shadow (proibido pela spec, "zero sombras"). Nenhum
   dos dois é !important na fonte; especificidade (2 classes/tipos a mais
   que o `.card-title h2` bare) já basta pra vencer. */
body.admin-brutal .card-title h2 {
    font-family: var(--admin-brutal-font-sys);
    text-shadow: none;
}
/* .card-subtitle: !important mesclado direto na regra já existente
   (linha ~6099) em vez de repetir o seletor aqui — ver comentário lá. */

/* ---- Controles de módulo ---- */
body.admin-brutal .module-controls {
    background: transparent;
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .control-info {
    color: var(--admin-brutal-fg);
}

/* ---- Posições de ranking (pódio) ----
   3 variantes com gradiente ouro/prata/bronze + border-left colorida,
   `!important` na fonte — colapsa monocromático, mesmo precedente já
   aplicado a `.position-*`/badges de status no resto do arquivo. Cobre as
   2 formas de seletor da fonte (classe E nth-child direto no ranking). */
body.admin-brutal .position-gold,
body.admin-brutal #ranking-geral .ranking-table tbody tr:nth-child(1),
body.admin-brutal .position-silver,
body.admin-brutal #ranking-geral .ranking-table tbody tr:nth-child(2),
body.admin-brutal .position-bronze,
body.admin-brutal #ranking-geral .ranking-table tbody tr:nth-child(3) {
    background: var(--admin-brutal-bg) !important;
    border-left: 4px solid var(--admin-brutal-border) !important;
}

/* ---- Badges genéricos (.badge/.badge-*) ----
   4 variantes coloridas (primary laranja, secondary laranja translúcido,
   success verde, warning âmbar) sem !important na fonte — colapsa
   monocromático outline, mesmo idioma de `.badge-planned`/`.badge-no-config`
   (linha ~1846-1849). `.badge` base não tem cor própria na fonte (só
   tipografia/padding), sem regra necessária aqui. */
body.admin-brutal .badge-primary {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .badge-secondary {
    background: transparent;
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .badge-success,
body.admin-brutal .badge-warning {
    background: transparent;
    color: var(--admin-brutal-fg);
    border: 1px solid var(--admin-brutal-border);
}

/* ---- #ranking-geral (override agressivo, tudo !important na fonte) ----
   ID na fonte exige ID espelhado aqui — classe nunca bate ID, mesmo com
   !important dos 2 lados (empate de ID é obrigatório, especificidade de
   classe/tipo não decide contra ID ausente). */
body.admin-brutal #ranking-geral h2,
body.admin-brutal #ranking-geral .ranking-title h2,
body.admin-brutal #ranking-geral h2[style*="font-size: 2rem"] {
    text-shadow: none !important;
    font-family: var(--admin-brutal-font-sys) !important;
}
body.admin-brutal #ranking-geral .ranking-subtitle,
body.admin-brutal #ranking-geral [style*="color: #888"],
body.admin-brutal #ranking-geral [style*="color:#888"],
body.admin-brutal #ranking-geral div[style*="font-size: 1rem; color: #888"] {
    color: var(--admin-brutal-muted) !important;
}
body.admin-brutal #ranking-geral {
    background: var(--admin-brutal-bg) !important;
    border-color: var(--admin-brutal-border) !important;
}
/* ::before também tem ID na fonte (especificidade (1,0,1)) — o blanket
   novo de pseudo-elemento (Important 3, `body.admin-brutal *::before`,
   especificidade (0,1,2)) perde contra ID mesmo com !important dos 2
   lados; precisa de override explícito escopado por ID. */
body.admin-brutal #ranking-geral::before {
    background: var(--admin-brutal-fg) !important;
    box-shadow: none !important;
}

/* ---- Module dashboard toolbar (participantes.js e módulos irmãos) ---- */
body.admin-brutal .module-dashboard {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .module-dashboard::before {
    background: var(--admin-brutal-fg);
}
body.admin-brutal .module-toolbar,
body.admin-brutal .temporada-tabs {
    border-bottom-color: var(--admin-brutal-border);
}
/* .stat-badge.stat-success/.stat-warning/.stat-danger: modificadores de
   cor (verde/âmbar/vermelho) do `.stat-badge` bare já coberto na linha
   ~390 (background: fg; color: bg) — sem !important na fonte, mas 2
   classes batem a especificidade do `.stat-badge` genérico (1 classe);
   precisa repetir o par fg/bg aqui com o seletor de 2 classes pra não
   perder pro modificador. */
body.admin-brutal .stat-badge.stat-success,
body.admin-brutal .stat-badge.stat-warning,
body.admin-brutal .stat-badge.stat-danger {
    background: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-bg);
}
/* .temporada-selector: gradiente laranja sólido — CTA de destaque, mesmo
   idioma outline+accent já usado em .badge-base/.modulos-version-badge
   (fundo accent amarelo + ink escuro, nunca laranja de marca). */
body.admin-brutal .temporada-selector {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .temporada-selector:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .temporada-selector:focus {
    box-shadow: none;
    outline: 2px solid var(--admin-brutal-accent);
    outline-offset: 2px;
}
body.admin-brutal .temporada-selector option {
    background: var(--admin-brutal-bg);
    color: var(--admin-brutal-fg);
}
/* ---- Search inline / toolbar buttons / abas de temporada ----
   `--surface-white-10` (rgba branco 10%, token global sem variante de
   tema) usado como borda em 3 componentes — precisa de override pontual
   em cada um (não remapeamos o token global: também é consumido por
   outras ~15 fontes já auditadas com valores esperados diferentes). */
body.admin-brutal .search-inline {
    border-color: var(--admin-brutal-border);
}
body.admin-brutal .search-inline:focus-within {
    border-color: var(--admin-brutal-fg);
    background: transparent;
}
body.admin-brutal .search-inline .material-icons {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .search-inline input::placeholder {
    color: var(--admin-brutal-muted);
}
body.admin-brutal .toolbar-btn {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .toolbar-btn:hover {
    background: transparent;
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .toolbar-btn.btn-primary {
    background: var(--admin-brutal-accent);
    color: var(--admin-brutal-accent-ink);
}
body.admin-brutal .toolbar-btn.btn-primary:hover {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
}
body.admin-brutal .tab-btn {
    border-color: var(--admin-brutal-border);
    color: var(--admin-brutal-muted);
}
body.admin-brutal .tab-btn:hover {
    background: transparent;
    border-color: var(--admin-brutal-fg);
    color: var(--admin-brutal-fg);
}
body.admin-brutal .tab-btn.active {
    background: var(--admin-brutal-fg);
    color: var(--admin-brutal-bg);
    box-shadow: none;
}

/* ---- Badge de status do participante (temporadas futuras) ----
   4 variantes coloridas (verde/azul/âmbar/vermelho) — colapsa outline
   monocromático, mesmo idioma de `.badge-planned`. */
body.admin-brutal .participante-status-badge.badge-success,
body.admin-brutal .participante-status-badge.badge-info,
body.admin-brutal .participante-status-badge.badge-warning,
body.admin-brutal .participante-status-badge.badge-danger {
    background: transparent;
    color: var(--admin-brutal-fg);
    border-color: var(--admin-brutal-border);
}
