/*
|--------------------------------------------------------------------------
| Correções de CSS do kit, carregadas nos três painéis
|--------------------------------------------------------------------------
| Este arquivo é registrado por `KitServiceProvider::configureCorrecoesDeCss()`
| via `FilamentAsset::register()` — o MESMO mecanismo dos plugins. O
| `resources/css/app.css` (Vite) NÃO serve aqui: o painel Filament não carrega o
| Vite da aplicação, e uma regra escrita lá simplesmente nunca chega à tela.
*/

/*
| Devolve as utilitárias `*-primary-*` às variáveis do Filament.
|
| O CSS do `croustibat/filament-jobs-monitor` é registrado como asset GLOBAL
| (`FilamentJobsMonitorServiceProvider.php:36`, `Css::make()` sem escopo de
| painel), então carrega nos três painéis — e dentro dele as classes vêm com a
| paleta âmbar LITERAL, do build daquele pacote:
|
|     .text-primary-600 { color: rgb(217 119 6 / …) }
|     .bg-primary-500   { background-color: rgb(245 158 11 / …) }
|
| Quem usa essas classes fica âmbar mesmo quando `--primary-*` diz outra coisa.
| Não é hipotético: com a identidade visual por organização, o alternador de
| painel (`bezhansalleh/filament-panel-switch`) aparecia em âmbar dentro de um
| painel pintado de verde. O mesmo vale para a timeline do
| `syriable/filament-activitylog` e para qualquer código que use a utilitária.
|
| `:root` na frente só para vencer a especificidade da regra do plugin, que é de
| classe simples. Publicar as views dos quatro vendors resolveria o mesmo e
| custaria manter quatro cópias que quebram a cada upgrade.
|
| Se algum dia o pacote escopar o CSS dele, este bloco fica inofensivo — as
| variáveis são as mesmas que o Filament já publica no `@filamentStyles`.
*/
:root .text-primary-400 { color: var(--primary-400); }
:root .text-primary-500 { color: var(--primary-500); }
:root .text-primary-600 { color: var(--primary-600); }

:root .bg-primary-500 { background-color: var(--primary-500); }
:root .bg-primary-600 { background-color: var(--primary-600); }

:root .border-primary-500 { border-color: var(--primary-500); }
:root .border-primary-600 { border-color: var(--primary-600); }

:root .ring-primary-600 { --tw-ring-color: var(--primary-600); }

/*
| O tema ESCURO do mesmo pacote, que é onde a classe muda de nome.
|
| O `croustibat/filament-jobs-monitor` emite a variante escura já com o prefixo no NOME da
| classe, e com a paleta âmbar do build dele:
|
|     .dark\:text-primary-400:is(.dark *) { color: rgb(251 191 36 / …) }
|
| `.text-primary-400` e `.dark\:text-primary-400` são classes DIFERENTES. A primeira versão
| deste bloco corrigia a primeira — que nenhum vendor declara — e deixava a segunda intacta: o
| monitor de jobs saía âmbar no tema escuro de qualquer painel pintado de outra cor, com o
| bloco de correção logo acima parecendo cuidar do assunto.
|
| Pior: ela escrevia o seletor como `.dark :root …` e `:root .dark …`, e as duas formas nunca
| casam com DOM nenhum — `:root` É o `<html>`, não pode ser descendente de nada nem conter a
| classe que o alternador de tema escreve nele próprio. A forma viva é `.dark:root`; aqui nem
| ela é necessária, porque o `:is(.dark *)` do próprio vendor já condiciona ao tema.
|
| A conta: o vendor é (0,2,0) — `.dark\:text-primary-400` mais o `:is(.dark *)`, e `:is()`
| contribui o MAIOR dos argumentos, ao contrário do `:where()`, que contribui zero. Com o
| `:root` na frente esta regra é (0,3,0) e vence sem depender de ordem de carga.
|
| `tests/Kit/CorrecaoDeCorPrimariaTest.php` é a guarda: ele lê as folhas do `vendor/` em
| runtime, exige que o kit declare a MESMA classe escapada e que vença por especificidade.
*/
:root .dark\:text-primary-400:is(.dark *) { color: var(--primary-400); }

/*
| DT-02 — contraste do indicador de ambiente no tema CLARO.
|
| O badge do `pxlrbt/filament-environment-indicator` sai com
| `fi-badge fi-color fi-text-color-600 dark:fi-text-color-400`
| (`vendor/pxlrbt/filament-environment-indicator/resources/views/badge.blade.php:4-11`).
| No tema Filament isso resolve para texto `--color-600` sobre fundo `--color-50`
| (`vendor/filament/filament/dist/theme.css`:
| `.fi-badge.fi-color{background-color:var(--color-50);color:var(--text)}` e
| `.fi-text-color-600{--text:var(--color-600)}`), e o par não alcança o mínimo WCAG
| AA de 4,5:1 para texto pequeno. Medido com as paletas do próprio Filament, via
| `Color::convertToRgb()`:
|
|     Pink   600/50 = 4,16:1     Pink   700/50 = 5,41:1
|     Orange 600/50 = 3,39:1     Orange 700/50 = 4,92:1
|     Red    600/50 = 4,36:1     Red    700/50 = 5,87:1
|     Blue   600/50 = 4,82:1     Blue   700/50 = 6,28:1
|
| São as quatro cores que o plugin pode escolher, e `Color::Pink` é o default do
| ambiente `local`/`testing` (`EnvironmentIndicatorPlugin.php:54-59`). Três das
| quatro reprovavam; subir um degrau resolve as quatro.
|
| Só o tema claro é tocado, de propósito: no escuro o `.fi-badge.fi-color` usa
| `color: var(--dark-text)`, que a utilitária `dark:fi-text-color-400` preenche —
| variável DIFERENTE, e aquele lado já passa o limiar.
|
| `.environment-indicator.fi-badge` são duas classes (0,2,0) contra a classe única
| de `.fi-text-color-600` (0,1,0): vence por especificidade, não por ordem de
| carregamento — que entre assets registrados não é garantida.
|
| Guarda: `tests/Kit/ContrasteDoIndicadorDeAmbienteTest.php` lê o degrau DESTE
| arquivo e recalcula o contraste. Depois de editar: `php artisan filament:assets`.
*/
.environment-indicator.fi-badge { --text: var(--color-700); }

/*
| Contraste do item ATIVO da navegação no topo (`->topNavigation()`).
|
| Só tem efeito em painel configurado com navegação no topo. Com o menu lateral,
| que é o padrão do kit, o Filament não emite `.fi-topbar-item` nenhum — os itens
| ficam dentro de `@if ($hasTopNavigation …)` em
| `vendor/filament/filament/resources/views/livewire/topbar.blade.php:120-246` —
| e este bloco não casa com nada.
|
| O item ativo é pintado por
| `vendor/filament/filament/resources/css/components/topbar.css:80-82`:
|
|     .fi-topbar-item.fi-active .fi-topbar-item-label { @apply text-primary-600 … }
|
| O fundo do botão ativo é `bg-gray-50` (mesma folha, linha 73). O par
| primary-600/gray-50 não alcança o mínimo WCAG AA de 4,5:1 para texto pequeno — o
| rótulo é 14 px. Medido com as paletas do próprio Filament, via
| `Color::convertToRgb()`:
|
|     Amber  600/50 = 3,06:1     Amber  700/50 = 4,81:1
|     Yellow 600/50 = 2,81:1     Yellow 700/50 = 4,72:1
|     Lime   600/50 = 2,93:1     Lime   700/50 = 4,77:1
|     Green  600/50 = 3,08:1     Green  700/50 = 4,73:1
|     Blue   600/50 = 5,02:1     Blue   700/50 = 6,54:1
|
| Nove das vinte e uma paletas reprovam no 600; nenhuma reprova no 700. `Amber` é o
| default quando `KIT_COR_PRIMARIA` está vazio, então a instalação recém-feita cai
| justamente no pior caso.
|
| O `:root` à frente é o que faz a regra vencer: o seletor do Filament tem três
| classes (0,3,0) e este tem (0,4,0) — vence por especificidade, não por ordem de
| carregamento, que entre assets registrados não é garantida.
|
| **E é exatamente por vencer que o par ESCURO é obrigatório.** A regra escura do
| Filament é
|
|     .fi-topbar-item.fi-active .fi-topbar-item-label:where(.dark,.dark *)
|
| e `:where()` contribui ZERO especificidade: ela também é (0,3,0), e só vence a
| clara por ordem de origem. Sem o par escuro, a regra acima venceria nos DOIS temas
| e pintaria `--primary-700` sobre fundo escuro — o rótulo cairia de ~6–10:1 para
| ~2,3–3,2:1, **pior do que o defeito que ela corrige**.
|
| **Um seletor só, e ele é `.dark:root`** — a classe na PRÓPRIA raiz. O Filament
| escreve `dark` no `<html>`, e `:root` É o `<html>`: `.dark :root` (descendente) e
| `:root .dark` (a raiz contendo um `.dark`) nunca casam, e seriam letra morta.
|
| `.dark:root` + três classes = (0,5,0), contra os (0,4,0) da regra clara: vence por
| especificidade, e não vaza para o claro, porque exige a classe.
|
| Guarda: `tests/Kit/ContrasteDaNavegacaoNoTopoTest.php` lê os DOIS degraus deste
| arquivo e recalcula o contraste contra `gray-50` e `gray-900`. Depois de editar:
| `php artisan filament:assets`.
*/
:root .fi-topbar-item.fi-active .fi-topbar-item-label { color: var(--primary-700); }

.dark:root .fi-topbar-item.fi-active .fi-topbar-item-label { color: var(--primary-400); }

/*
| A versão do SISTEMA no rodapé dos painéis (`filament/assinatura-do-rodape.blade.php`), e a do
| kit ao lado quando `kit.exibir_versao` está ligada.
|
| Registrada no render hook `FOOTER` por
| `ConfiguraFilamentGlobal::configuraVersaoNoRodape()`. Sem esta folha o rodapé sairia
| sem estilo nenhum e com o teste verde: o kit não tem `viteTheme()`, então utilitária
| Tailwind que a blade emitisse não existiria na folha compilada do Filament
| (.ai/rules/css-filament.md).
|
| NÃO declara cor, e isso é a decisão do bloco: a cor é herdada do tema e só a opacidade
| é aplicada. Assim o rodapé funciona no claro e no escuro com UMA regra, sem o par
| `.dark:root` — e sem a armadilha que o CHANGELOG da 0.34.2 documenta, em que uma
| sobrescrita de cor com especificidade suficiente para vencer no tema claro vence
| também no escuro, porque a regra escura do Filament usa `:where()`, que contribui
| ZERO especificidade.
|
| Escopo é o nome da classe, que é do kit: `.kit-versao` não colide com utilitária de
| vendor nenhuma. Regra sem escopo só seria defeito se o seletor fosse uma utilitária
| genérica.
*/
.kit-versao {
    padding: 0.5rem 1rem 1rem;
    text-align: center;
    font-size: 0.75rem;
    line-height: 1rem;
    opacity: 0.6;
}

/*
|--------------------------------------------------------------------------
| O rodapé das telas de autenticação cabe na dobra
|--------------------------------------------------------------------------
|
| MEDIDO, não deduzido. Num viewport de 1117px a assinatura saía em y=1122 e o
| recado em y=1186: os dois abaixo da dobra, invisíveis sem rolar. E o recado
| REGREDIU — antes ele vivia dentro do cartão do formulário.
|
| A causa é estrutural. Este kit não usa o layout `simple` do Filament nessas
| telas: usa o do `filament-auth-designer`, cujo `.fi-auth-layout` declara
| `min-height: 100vh` e emite o hook `FOOTER` DEPOIS de fechar a própria div
| (`components/layouts/auth.blade.php:60-63`). O contêiner sozinho já consome a
| dobra inteira, e tudo o que vem depois sobra para fora.
|
| Os três são IRMÃOS diretos de `body.fi-body`, que já tem `min-height: 100vh`
| — então a correção é fazer o body ser a coluna e o layout parar de exigir a
| altura toda. O rodapé encosta no fim da tela, dentro dela.
|
| Escopado por `:has(> .fi-auth-layout)` para valer SÓ nas telas de
| autenticação: o layout de painel autenticado não tem essa classe, e lá o
| `FOOTER` já cai no fluxo normal.
|
| `:has()` tem suporte em todo navegador com atualização desde 2023. Se um
| navegador antigo o ignorar, a regra inteira é descartada e o comportamento
| volta a ser o de hoje — degrada para o estado anterior, não para um pior.
*/
body.fi-body:has(> .fi-auth-layout) {
    display: flex;
    flex-direction: column;
}

body.fi-body:has(> .fi-auth-layout) > .fi-auth-layout {
    min-height: 0;
    flex: 1 1 auto;
}
