/*
 * ===================================================================
 * A CARA DA CASTELAPI NO PAINEL — tokens do manual, §09
 * ===================================================================
 *
 * ⛔ **NENHUMA COR FORA DOS TOKENS.** Os valores abaixo são cópia literal do
 * bloco `tokens oficiais — css` do manual de identidade (Rev 1.3.1). Não se
 * inventa cor, não se "aproxima" um tom, não se acrescenta um cinza porque
 * ficou faltando.
 *
 * ⛔ **SEM SOMBRA PROFUNDA E SEM GRADIENTE.** O manual é explícito (§09 e §04):
 * superfícies se separam por COR e por BORDA de 1 px em linha, não por
 * profundidade. O Filament vem com sombras de fábrica em cartão, menu suspenso
 * e modal — a seção "geometria flat" no fim deste arquivo as desliga. Se
 * alguém reintroduzir uma, é aqui que se apaga.
 *
 * ⚠️ ESTE ARQUIVO É CSS PURO, DE PROPÓSITO. O tema próprio do Filament exige
 * compilar Tailwind, e **não há node nem npm na imagem** (`docker/Dockerfile`,
 * PHP-FPM alpine). Um tema que precisa de build seria um tema que ninguém
 * consegue reconstruir na VM — e, com o bind mount, editar este arquivo publica
 * na hora, sem passo de compilação para esquecer.
 *
 * ⚠️ Ele é injetado pelo gancho `STYLES_AFTER`, o último da cabeça da página, e
 * não pelo registro normal de asset. Motivo: o registro normal renderiza dentro
 * de `@filamentStyles`, que vem ANTES do tema — as regras perderiam para o tema
 * em todo empate de especificidade, e o painel ficaria metade Castelapi.
 */

:root {
    /* --- paleta oficial (manual §05 e §09) --- */
    --castelapi-graphite: #252B33;
    --castelapi-graphite-deep: #20242B;
    --castelapi-graphite-soft: #9AA3B2;
    --castelapi-graphite-muted: #8A8171;
    --castelapi-bone: #F6F3EC;
    --castelapi-bone-dim: #F1ECE0;
    --castelapi-line: #E3DCCB;
    --castelapi-honey: #D9982F;
    --castelapi-honey-text: #7D5A16;
    --castelapi-terracotta: #B65C38;
    --castelapi-terracotta-text: #9E4A28;
    --castelapi-terracotta-light: #C97A54;
    --castelapi-success: #3D6B44;

    /* ⛔ RAIO 4 px EM TUDO (manual §09). O Filament escalona quatro raios;
       aqui os quatro valem o mesmo, senão o botão sai com um canto e o cartão
       com outro — e a diferença é justamente o que o manual não quer. */
    --radius-sm: 4px;
    --radius-md: 4px;
    --radius-lg: 4px;
    --radius-xl: 4px;
    --radius-2xl: 4px;
    --radius-3xl: 4px;
}

/* ===================================================================
 * Superfícies: osso de fundo, branco no que é "papel", linha nas bordas
 * =================================================================== */

.fi-body {
    background-color: var(--castelapi-bone);
    color: var(--castelapi-graphite);
}

.fi-sidebar,
.fi-topbar > nav {
    background-color: #FFFFFF;
    border-color: var(--castelapi-line);
}

.fi-topbar > nav {
    border-bottom: 1px solid var(--castelapi-line);
}

.fi-sidebar {
    border-right: 1px solid var(--castelapi-line);
}

/* Superfície rebaixada = osso-suave, o nome oficial de `bone-dim`. */
.fi-ta-header-cell,
.fi-ta-head,
.fi-section-header,
.fi-fo-repeater-item-header {
    background-color: var(--castelapi-bone-dim);
}

/* ===================================================================
 * ⛔ Foco SEMPRE em mel, 2 px (manual §09)
 * ===================================================================
 *
 * ⚠️ E o foco é a única coisa deste arquivo que NÃO é enfeite: quem navega por
 * teclado depende dele para saber onde está. `outline` (e não `box-shadow`)
 * porque `outline` sobrevive ao modo de alto contraste do sistema, onde
 * `box-shadow` some — e some justamente para quem mais precisa dele.
 */
:where(.fi-body) :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
    outline: 2px solid var(--castelapi-honey);
    outline-offset: 2px;
    border-radius: 4px;
}

/* ===================================================================
 * Links em terracota-texto (5,5:1 sobre osso — AA no manual §05).
 * O terracota PURO tem 4,1:1 e só passa acima de 18 pt: em link de tabela,
 * que é texto pequeno, ele reprovaria. Por isso a versão -texto.
 * =================================================================== */
.fi-link,
.fi-ta-text-item-label.fi-ta-text-item-label-has-url,
.fi-prose a {
    color: var(--castelapi-terracotta-text);
}

.fi-link:hover,
.fi-prose a:hover {
    color: var(--castelapi-terracotta);
}

/* ===================================================================
 * ⛔ GEOMETRIA FLAT — sem sombra profunda, sem gradiente (manual §04 e §09)
 * ===================================================================
 *
 * As sombras de fábrica do Filament saem; no lugar entra a borda de 1 px em
 * linha, que é como o manual separa superfícies. O `!important` é deliberado e
 * é o único do arquivo: as classes utilitárias do Tailwind que aplicam sombra
 * vêm com especificidade igual e ordem posterior, então sem ele a regra perde
 * em metade dos componentes e o painel fica com sombra em uns cartões e não em
 * outros — pior que sombra em todos.
 */
.fi-section,
.fi-wi,
.fi-ta-ctn,
.fi-modal-window,
.fi-dropdown-panel,
.fi-fo-field-wrp-input,
.fi-input-wrp {
    box-shadow: none !important;
    border: 1px solid var(--castelapi-line);
    background-image: none;
}

.fi-btn {
    box-shadow: none !important;
    background-image: none;
}

/* ===================================================================
 * Tipografia: Sora nos títulos, Archivo no corpo, mono nos dados
 * ===================================================================
 *
 * O corpo (`--font-family`) e o mono (`--mono-font-family`) o painel declara
 * pelo `->font()`/`->monoFont()`. Sora não tem lugar próprio no Filament — ela
 * é a voz do logotipo e dos títulos, e entra aqui.
 */
.fi-header-heading,
.fi-modal-heading,
.fi-section-header-heading,
.fi-ta-empty-state-heading,
.fi-sidebar-header {
    font-family: 'Sora', 'Archivo', ui-sans-serif, system-ui, sans-serif;
    font-weight: 600;
    letter-spacing: -0.01em;
}

/* Dado técnico em mono — CNPJ, valor, competência, número de fatura. É a
   regra do manual (§09, "rótulos em mono") e resolve um problema real: em
   fonte proporcional os algarismos não alinham em coluna, e conferir uma
   coluna de valores desalinhados é onde o olho erra. */
.fi-ta-text-item-label.fi-ta-text-item-label-font-mono,
.fi-in-text-item-label-font-mono {
    font-variant-numeric: tabular-nums;
}

/* ===================================================================
 * Modo escuro — grafite-profundo de fundo, osso no texto (manual §10)
 * ===================================================================
 * O painel abre em claro (o `->defaultThemeMode()` decide), mas quem virar a
 * chave tem de continuar dentro da marca, e não cair no cinza-azulado de
 * fábrica do Filament.
 */
.dark .fi-body {
    background-color: var(--castelapi-graphite-deep);
    color: var(--castelapi-bone);
}

.dark .fi-sidebar,
.dark .fi-topbar > nav,
.dark .fi-section,
.dark .fi-wi,
.dark .fi-ta-ctn,
.dark .fi-modal-window,
.dark .fi-dropdown-panel {
    background-color: var(--castelapi-graphite);
    border-color: rgba(246, 243, 236, 0.12);
}

.dark .fi-ta-header-cell,
.dark .fi-ta-head,
.dark .fi-section-header {
    background-color: var(--castelapi-graphite-deep);
}

/* Sobre escuro o link volta ao mel: terracota-texto tem contraste baixo aí, e
   mel sobre grafite dá 5,8:1 — AA pelo próprio manual (§05). */
.dark .fi-link,
.dark .fi-prose a {
    color: var(--castelapi-honey);
}

/* Texto secundário sobre escuro = grafite-suave, o nome oficial do token. */
.dark .fi-ta-text-item-description,
.dark .fi-section-header-description {
    color: var(--castelapi-graphite-soft);
}
