/* Design system — tokens (paleta neutra provisória, decisão Q11) */
:root {
    --cor-primaria: #2563eb;
    --cor-primaria-escura: #1d4ed8;
    --cor-fundo: #f4f5f7;
    --cor-superficie: #ffffff;
    --cor-borda: #e2e4e9;
    --cor-texto: #1f2430;
    --cor-texto-suave: #6b7280;

    --cor-credito: #16a34a;
    --cor-debito: #dc2626;
    --cor-estimado: #d97706;
    --cor-atrasado: #b91c1c;
    --cor-conciliado: #2563eb;

    --espaco-1: 4px;
    --espaco-2: 8px;
    --espaco-3: 16px;
    --espaco-4: 24px;
    --espaco-5: 32px;

    --raio-sm: 6px;
    --raio-md: 10px;

    --largura-sidebar: 240px;
    --altura-header: 56px;
    --altura-rodape: 32px;
    --altura-bottom-nav: 60px;

    color-scheme: light;
}

@media (prefers-color-scheme: dark) {
    :root:not([data-tema="claro"]) {
        --cor-fundo: #14161c;
        --cor-superficie: #1c1f27;
        --cor-borda: #2b2f3a;
        --cor-texto: #e7e9ee;
        --cor-texto-suave: #9aa1b1;
        color-scheme: dark;
    }
}

:root[data-tema="escuro"] {
    --cor-fundo: #14161c;
    --cor-superficie: #1c1f27;
    --cor-borda: #2b2f3a;
    --cor-texto: #e7e9ee;
    --cor-texto-suave: #9aa1b1;
    color-scheme: dark;
}

* { box-sizing: border-box; }

html, body {
    margin: 0;
    padding: 0;
    background: var(--cor-fundo);
    color: var(--cor-texto);
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    font-size: clamp(14px, 1vw + 12px, 16px);
}

a { color: var(--cor-primaria); }

.app-shell {
    display: grid;
    /* Recolhido é o padrão (sem classe no <html>) — script inline no <head> decide antes do
       primeiro paint, com base no localStorage, pra não piscar aberto e depois fechar. */
    grid-template-columns: 0 1fr;
    grid-template-rows: var(--altura-header) 1fr var(--altura-rodape);
    grid-template-areas:
        "header header"
        "sidebar conteudo"
        "rodape rodape";
    min-height: 100vh;
    transition: grid-template-columns 0.18s ease;
}

:root.menu-aberto .app-shell {
    grid-template-columns: var(--largura-sidebar) 1fr;
}

.app-sidebar { overflow: hidden; }

.botao-menu {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    font-size: 1.1rem;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    background: var(--cor-superficie);
    color: var(--cor-texto);
    cursor: pointer;
}

.app-header {
    grid-area: header;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
    padding: 0 var(--espaco-3);
    background: var(--cor-superficie);
    border-bottom: 1px solid var(--cor-borda);
}

.app-header__marca { font-weight: 700; }

.app-header__acoes { display: flex; align-items: center; gap: var(--espaco-2); }

.botao {
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-1);
    padding: var(--espaco-1) var(--espaco-3);
    border-radius: var(--raio-sm);
    border: 1px solid var(--cor-borda);
    background: var(--cor-superficie);
    color: var(--cor-texto);
    cursor: pointer;
    font-size: 0.9rem;
    text-decoration: none;
    min-height: 44px;
}

.botao--primario {
    background: var(--cor-primaria);
    border-color: var(--cor-primaria);
    color: #fff;
}

.app-sidebar {
    grid-area: sidebar;
    background: var(--cor-superficie);
    border-right: 1px solid var(--cor-borda);
    /* Sem padding aqui: com box-sizing:border-box, padding no próprio item de grid impede
       que ele encolha até 0 (o box nunca fica menor que padding+borda) — quando recolhido,
       sobrava uma tira de ~17px sempre visível. O respiro fica no <nav> interno, que
       desaparece junto com overflow:hidden do pai. */
}

.app-sidebar nav {
    padding: var(--espaco-3) var(--espaco-2);
}

.app-sidebar nav a {
    display: block;
    padding: var(--espaco-2) var(--espaco-2);
    border-radius: var(--raio-sm);
    color: var(--cor-texto);
    text-decoration: none;
    min-height: 44px;
    display: flex;
    align-items: center;
}

.app-sidebar nav a[aria-current="page"],
.app-sidebar nav a:hover {
    background: var(--cor-fundo);
    color: var(--cor-primaria);
}

.app-conteudo {
    grid-area: conteudo;
    padding: var(--espaco-4);
}

.app-rodape {
    grid-area: rodape;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
    padding: 0 var(--espaco-3);
    background: var(--cor-superficie);
    border-top: 1px solid var(--cor-borda);
    font-size: 0.75rem;
    color: var(--cor-texto-suave);
    overflow-x: auto;
    white-space: nowrap;
}

.cartao {
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-md);
    padding: var(--espaco-3);
}

a.cartao {
    display: block;
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s;
}

a.cartao:hover {
    border-color: var(--cor-primaria);
}

.grade-kpi {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--espaco-3);
    margin-bottom: var(--espaco-4);
}

.kpi__valor { font-size: 1.6rem; font-weight: 700; }
.kpi__rotulo { color: var(--cor-texto-suave); font-size: 0.85rem; }

.valor-estimado {
    font-style: italic;
    color: var(--cor-estimado);
    border-bottom: 1px dashed var(--cor-estimado);
}

.valor-atrasado { color: var(--cor-atrasado); font-weight: 600; }
.valor-credito { color: var(--cor-credito); }
.valor-debito { color: var(--cor-debito); }

.pagina-login {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cor-fundo);
}

.form-login {
    width: min(360px, 92vw);
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-md);
    padding: var(--espaco-5);
}

.form-login h1 { font-size: 1.2rem; margin-bottom: var(--espaco-4); }

.campo { margin-bottom: var(--espaco-3); }
.campo label { display: block; margin-bottom: var(--espaco-1); font-size: 0.85rem; }

.campo input, .campo select {
    width: 100%;
    padding: var(--espaco-2);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    background: var(--cor-fundo);
    color: var(--cor-texto);
    min-height: 44px;
}

.erro {
    background: #fee2e2;
    color: #991b1b;
    padding: var(--espaco-2);
    border-radius: var(--raio-sm);
    margin-bottom: var(--espaco-3);
    font-size: 0.85rem;
}

.bottom-nav {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: var(--altura-bottom-nav);
    background: var(--cor-superficie);
    border-top: 1px solid var(--cor-borda);
    align-items: center;
    justify-content: space-around;
    z-index: 20;
}

.bottom-nav a {
    color: var(--cor-texto-suave);
    text-decoration: none;
    font-size: 0.7rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    min-width: 44px;
    min-height: 44px;
    justify-content: center;
}

.tabela-wrap { overflow-x: auto; }

table.tabela {
    width: 100%;
    border-collapse: collapse;
    background: var(--cor-superficie);
}

table.tabela th, table.tabela td {
    text-align: left;
    padding: var(--espaco-2) var(--espaco-3);
    border-bottom: 1px solid var(--cor-borda);
    white-space: nowrap;
}

table.tabela th { color: var(--cor-texto-suave); font-weight: 600; font-size: 0.8rem; }

.tabela__divisor-mes td {
    background: var(--cor-fundo);
    color: var(--cor-texto-suave);
    font-weight: 700;
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    padding-top: var(--espaco-1);
    padding-bottom: var(--espaco-1);
}

.tabela__data-destaque { font-weight: 700; }

.barra-acoes {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--espaco-3);
    margin-bottom: var(--espaco-3);
    flex-wrap: wrap;
}

.badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
}

.badge--estimado { background: #fef3c7; color: #92400e; }
.badge--pendente { background: #dbeafe; color: #1e40af; }
.badge--pago, .badge--recebido { background: #dcfce7; color: #166534; }
.badge--pago_parcial { background: #fed7aa; color: #9a3412; }
.badge--cancelado { background: #e5e7eb; color: #4b5563; }
.badge--atrasado { background: #fecaca; color: #991b1b; }

.form-grade {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: var(--espaco-3);
}

.acoes-linha { display: flex; gap: var(--espaco-2); }
.acoes-linha form { display: inline; }

.link-discreto { color: var(--cor-texto-suave); font-size: 0.85rem; }

.filtro-categorias { position: relative; }
.filtro-categorias summary { cursor: pointer; list-style: none; }
.filtro-categorias summary::-webkit-details-marker { display: none; }
.filtro-categorias__painel {
    position: absolute;
    z-index: 30;
    top: calc(100% + 4px);
    left: 0;
    width: 280px;
    max-height: 320px;
    overflow-y: auto;
}

.calendario-vencimentos {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
    margin-top: var(--espaco-2);
}

.calendario-vencimentos__cabecalho {
    text-align: center;
    font-size: 0.7rem;
    color: var(--cor-texto-suave);
    font-weight: 600;
    padding-bottom: var(--espaco-1);
}

.calendario-vencimentos__dia {
    min-height: 52px;
    border-radius: var(--raio-sm);
    border: 1px solid var(--cor-borda);
    padding: 4px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: 0.7rem;
}

.calendario-vencimentos__dia--hoje { border-color: var(--cor-primaria); border-width: 2px; }
.calendario-vencimentos__numero { font-weight: 600; }

.calendario-vencimentos__itens {
    display: flex;
    flex-wrap: wrap;
    gap: 3px;
    margin-top: 2px;
}

.calendario-vencimentos__item {
    display: inline-block;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    cursor: pointer;
    flex-shrink: 0;
}

.calendario-vencimentos__item:hover {
    outline: 2px solid var(--cor-texto);
    outline-offset: 1px;
}

@media (max-width: 768px) {
    .app-shell {
        /* !important: precisa vencer :root.menu-aberto .app-shell (maior especificidade) —
           no mobile a navegação é a bottom-nav, o menu lateral retrátil não existe aqui. */
        grid-template-columns: 1fr !important;
        grid-template-areas:
            "header"
            "conteudo"
            "rodape";
        padding-bottom: var(--altura-bottom-nav);
    }

    .app-sidebar { display: none; }
    .bottom-nav { display: flex; }
    .app-conteudo { padding: var(--espaco-3); }
}
