/* ══════════════════════════════════════════════════════════════════════════
   Financeiro Pessoal — design system próprio. Tema claro/escuro por
   [data-theme] no <html> (fallback em prefers-color-scheme).
   Tokens `--c-*`, shell `sys-*`, componentes `fp-*`.
   ══════════════════════════════════════════════════════════════════════════ */
:root {
    --c-bg: #f1f5f9;
    --c-surface: #ffffff;
    --c-surface-2: #f8fafc;
    --c-surface-3: #eef2f7;
    --c-ink: #0f172a;
    --c-ink-soft: #334155;
    --c-muted: #64748b;
    --c-line: #e2e8f0;
    --c-line-soft: #eef2f7;

    --c-brand: #0d9488;
    --c-brand-dark: #0f766e;
    --c-brand-soft: #ccfbf1;
    --c-brand-ink: #115e59;

    --c-in: #16a34a;   --c-in-bg: #dcfce7;   --c-in-ink: #166534;
    --c-out: #dc2626;  --c-out-bg: #fee2e2;  --c-out-ink: #b91c1c;
    --c-warn: #d97706; --c-warn-bg: #fef3c7; --c-warn-ink: #92400e;
    --c-info: #2563eb; --c-info-bg: #dbeafe; --c-info-ink: #1e40af;
    --c-neutral-bg: #e2e8f0; --c-neutral-ink: #475569;

    --c-shadow: 0 1px 2px rgba(15,23,42,.05), 0 8px 24px rgba(15,23,42,.06);
    --c-shadow-sm: 0 1px 2px rgba(15,23,42,.08);
    --c-radius: 14px;
    --c-radius-sm: 10px;

    /* A barra lateral é sempre escura: é a assinatura visual do sistema e o
       que separa a navegação do conteúdo sem precisar de borda. */
    --c-nav-bg: #0f2027;
    --c-nav-bg-2: #16323c;
    --c-nav-ink: #b6cbd4;
    --c-nav-ink-forte: #f0f7fa;
    --c-nav-muted: #6f909e;

    --sys-nav-w: 236px;
    --sys-top-h: 60px;
}

:root[data-theme="dark"] {
    --c-bg: #070e14;
    --c-surface: #0f1b23;
    --c-surface-2: #152530;
    --c-surface-3: #1b2f3b;
    --c-ink: #e8f1f6;
    --c-ink-soft: #c2d5df;
    --c-muted: #8aa5b3;
    --c-line: #1e3441;
    --c-line-soft: #172a34;

    --c-brand: #2dd4bf;
    --c-brand-dark: #14b8a6;
    --c-brand-soft: #0b3b38;
    --c-brand-ink: #99f6e4;

    --c-in: #4ade80;   --c-in-bg: #0d3320;   --c-in-ink: #86efac;
    --c-out: #f87171;  --c-out-bg: #3b1213;  --c-out-ink: #fca5a5;
    --c-warn: #fbbf24; --c-warn-bg: #3a2a08; --c-warn-ink: #fcd34d;
    --c-info: #60a5fa; --c-info-bg: #10233f; --c-info-ink: #93c5fd;
    --c-neutral-bg: #1e3441; --c-neutral-ink: #a8c0cc;

    --c-shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.35);
    --c-shadow-sm: 0 1px 2px rgba(0,0,0,.45);
    --c-nav-bg: #060d12;
    --c-nav-bg-2: #0d1c24;
}

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --c-bg: #070e14;
        --c-surface: #0f1b23;
        --c-surface-2: #152530;
        --c-surface-3: #1b2f3b;
        --c-ink: #e8f1f6;
        --c-ink-soft: #c2d5df;
        --c-muted: #8aa5b3;
        --c-line: #1e3441;
        --c-line-soft: #172a34;
        --c-brand: #2dd4bf;
        --c-brand-dark: #14b8a6;
        --c-brand-soft: #0b3b38;
        --c-brand-ink: #99f6e4;
        --c-in: #4ade80;   --c-in-bg: #0d3320;   --c-in-ink: #86efac;
        --c-out: #f87171;  --c-out-bg: #3b1213;  --c-out-ink: #fca5a5;
        --c-warn: #fbbf24; --c-warn-bg: #3a2a08; --c-warn-ink: #fcd34d;
        --c-info: #60a5fa; --c-info-bg: #10233f; --c-info-ink: #93c5fd;
        --c-neutral-bg: #1e3441; --c-neutral-ink: #a8c0cc;
        --c-shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.35);
        --c-nav-bg: #060d12;
        --c-nav-bg-2: #0d1c24;
    }
}

* { box-sizing: border-box; }

/* Todo ícone do sistema é um SVG inline sem width/height próprios (ver
   `_icones.html`). Sem um tamanho padrão ele estica até o tamanho do container:
   já rendeu um "Sair" invisível na barra lateral e um alerta ocupando meia
   tela. Esta regra é a rede de proteção — as específicas abaixo continuam
   vencendo, porque são mais específicas. */
svg { width: 16px; height: 16px; flex: 0 0 auto; }

html, body {
    margin: 0;
    padding: 0;
    background: var(--c-bg);
    color: var(--c-ink);
    font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
                 "Helvetica Neue", Arial, sans-serif;
    font-size: 14px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
}

a { color: var(--c-brand-dark); text-decoration: none; }
a:hover { text-decoration: underline; }
:root[data-theme="dark"] a { color: var(--c-brand); }

/* Todo número de dinheiro usa a mesma largura de dígito: sem isso, colunas de
   valor numa matriz de 12 meses deixam de se alinhar verticalmente. */
.num, .fp-tabela td.num, .fp-tabela th.num, .fp-kpi__valor, .fp-cell input {
    font-variant-numeric: tabular-nums;
    font-feature-settings: "tnum" 1;
    text-align: right;
    white-space: nowrap;
}

/* ─── Shell ─────────────────────────────────────────────────────────────── */
.sys-shell { display: flex; min-height: 100vh; }

.sys-nav {
    width: var(--sys-nav-w);
    flex: 0 0 var(--sys-nav-w);
    background: linear-gradient(180deg, var(--c-nav-bg), var(--c-nav-bg-2));
    color: var(--c-nav-ink);
    display: flex;
    flex-direction: column;
    position: sticky;
    top: 0;
    height: 100vh;
}

.sys-nav__marca {
    display: flex; align-items: center; gap: 10px;
    padding: 18px 18px 14px;
    color: var(--c-nav-ink-forte);
    font-weight: 700; font-size: 15px; letter-spacing: .2px;
}
.sys-nav__marca:hover { text-decoration: none; }
.sys-nav__logo {
    width: 30px; height: 30px; border-radius: 9px;
    background: linear-gradient(135deg, var(--c-brand), #38bdf8);
    display: grid; place-items: center;
    color: #04231f; font-weight: 800; font-size: 14px;
}

.sys-nav__lista { padding: 6px 10px 20px; overflow-y: auto; flex: 1; }
.sys-nav__grupo {
    font-size: 10.5px; text-transform: uppercase; letter-spacing: .09em;
    color: var(--c-nav-muted); padding: 14px 10px 6px; font-weight: 700;
}
.sys-nav__item {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 10px; margin-bottom: 2px;
    border-radius: var(--c-radius-sm);
    color: var(--c-nav-ink); font-weight: 500; font-size: 13.5px;
}
.sys-nav__item:hover { background: rgba(255,255,255,.06); text-decoration: none;
                       color: var(--c-nav-ink-forte); }
.sys-nav__item--ativo {
    background: rgba(45,212,191,.14); color: #7ff0e2;
    box-shadow: inset 2px 0 0 var(--c-brand);
}
.sys-nav__item svg { width: 17px; height: 17px; flex: 0 0 17px; opacity: .85; }

.sys-nav__rodape { padding: 8px 10px 12px; border-top: 1px solid rgba(255,255,255,.07); }
.sys-nav__user {
    display: flex; align-items: center; gap: 9px;
    color: var(--c-nav-ink); font-size: 12.5px; padding: 7px 6px;
    border-radius: var(--c-radius-sm);
}
.sys-nav__user:hover { background: rgba(255,255,255,.06); text-decoration: none;
                       color: var(--c-nav-ink-forte); }
.sys-nav__nome { flex: 1; min-width: 0; overflow: hidden;
                 text-overflow: ellipsis; white-space: nowrap; }
.sys-nav__avatar {
    width: 28px; height: 28px; border-radius: 50%;
    background: rgba(255,255,255,.1); display: grid; place-items: center;
    color: var(--c-nav-ink-forte); font-weight: 700; font-size: 12px;
    flex: 0 0 28px;
}
/* O "Sair" reusa o item de menu, mas em tom mais discreto: é uma saída, não um
   destino. A regra de tamanho do SVG mora em `.sys-nav__item svg` — um ícone
   sem dimensão explícita aqui renderiza invisível. */
.sys-nav__sair { color: var(--c-nav-muted); margin-top: 2px; }
.sys-nav__sair:hover { color: var(--c-out); background: rgba(248,113,113,.10); }

.sys-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.sys-top {
    height: var(--sys-top-h);
    display: flex; align-items: center; gap: 14px;
    padding: 0 22px;
    background: var(--c-surface);
    border-bottom: 1px solid var(--c-line);
    position: sticky; top: 0; z-index: 20;
}
.sys-top__titulo { font-size: 16px; font-weight: 650; margin: 0; }
.sys-top__acoes { margin-left: auto; display: flex; align-items: center; gap: 8px; }

.sys-conteudo { padding: 22px; flex: 1; }

.sys-menu-btn { display: none; }

@media (max-width: 900px) {
    .sys-nav {
        position: fixed; z-index: 40; left: 0; top: 0;
        transform: translateX(-100%); transition: transform .18s ease;
        box-shadow: 0 0 40px rgba(0,0,0,.4);
    }
    .sys-shell--menu .sys-nav { transform: translateX(0); }
    .sys-menu-btn { display: inline-flex; }
    .sys-conteudo { padding: 14px; }
    .sys-top { padding: 0 14px; }
}

/* ─── Cartões e blocos ──────────────────────────────────────────────────── */
.fp-card {
    background: var(--c-surface);
    border: 1px solid var(--c-line);
    border-radius: var(--c-radius);
    box-shadow: var(--c-shadow-sm);
}
.fp-card__cab {
    display: flex; align-items: center; gap: 10px;
    padding: 14px 16px; border-bottom: 1px solid var(--c-line-soft);
}
.fp-card__titulo { margin: 0; font-size: 14px; font-weight: 650; }
.fp-card__acoes { margin-left: auto; display: flex; gap: 6px; align-items: center; }
.fp-card__corpo { padding: 16px; }
.fp-card__corpo--liso { padding: 0; }

.fp-grid { display: grid; gap: 16px; }
.fp-grid--kpi { grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
.fp-grid--2 { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.fp-grid--3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }

.fp-kpi {
    background: var(--c-surface);
    border: 1px solid var(--c-line);
    border-radius: var(--c-radius);
    padding: 16px 18px;
    box-shadow: var(--c-shadow-sm);
    position: relative; overflow: hidden;
}
.fp-kpi::after {
    content: ""; position: absolute; inset: 0 auto 0 0; width: 3px;
    background: var(--c-neutral-bg);
}
.fp-kpi--in::after { background: var(--c-in); }
.fp-kpi--out::after { background: var(--c-out); }
.fp-kpi--brand::after { background: var(--c-brand); }
.fp-kpi--info::after { background: var(--c-info); }

.fp-kpi__rotulo {
    font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em;
    color: var(--c-muted); font-weight: 650; margin-bottom: 6px;
}
.fp-kpi__valor { font-size: 24px; font-weight: 700; letter-spacing: -.4px;
                 text-align: left; }
.fp-kpi__valor--in { color: var(--c-in-ink); }
.fp-kpi__valor--out { color: var(--c-out-ink); }
.fp-kpi__nota { font-size: 12px; color: var(--c-muted); margin-top: 5px; }
.fp-kpi__moeda { font-size: 14px; font-weight: 600; color: var(--c-muted);
                 margin-right: 3px; }

/* ─── Tabelas ───────────────────────────────────────────────────────────── */
.fp-scroll { overflow-x: auto; }
.fp-tabela { width: 100%; border-collapse: separate; border-spacing: 0;
             font-size: 13px; }
.fp-tabela th {
    text-align: left; font-weight: 650; font-size: 11.5px;
    text-transform: uppercase; letter-spacing: .05em; color: var(--c-muted);
    padding: 9px 12px; background: var(--c-surface-2);
    border-bottom: 1px solid var(--c-line);
    position: sticky; top: 0; z-index: 2; white-space: nowrap;
}
.fp-tabela td { padding: 9px 12px; border-bottom: 1px solid var(--c-line-soft);
                vertical-align: middle; }
.fp-tabela tbody tr:hover td { background: var(--c-surface-2); }
.fp-tabela tfoot td {
    background: var(--c-surface-2); font-weight: 700;
    border-top: 2px solid var(--c-line); border-bottom: none;
}
.fp-tabela--compacta td, .fp-tabela--compacta th { padding: 6px 10px; }
.fp-tabela .grupo td { background: var(--c-surface-3); font-weight: 650; }
.fp-tabela .grupo:hover td { background: var(--c-surface-3); }
.fp-tabela td.destaque, .fp-tabela th.destaque { background: var(--c-brand-soft); }
:root[data-theme="dark"] .fp-tabela td.destaque { background: rgba(45,212,191,.09); }

/* A matriz do orçamento é larga; a primeira coluna precisa acompanhar o
   deslocamento horizontal, senão o usuário perde o nome da linha. */
.fp-matriz { min-width: 1180px; }
.fp-matriz th.rotulo, .fp-matriz td.rotulo {
    position: sticky; left: 0; z-index: 3;
    background: var(--c-surface); min-width: 250px; max-width: 250px;
    border-right: 1px solid var(--c-line);
}
.fp-matriz th.rotulo { z-index: 4; background: var(--c-surface-2); }
.fp-matriz .grupo td.rotulo { background: var(--c-surface-3); }
.fp-matriz tbody tr:hover td.rotulo { background: var(--c-surface-2); }
.fp-matriz .filha td.rotulo { padding-left: 26px; color: var(--c-ink-soft); }
.fp-matriz td.mes-atual, .fp-matriz th.mes-atual {
    box-shadow: inset 0 0 0 1px rgba(13,148,136,.25);
}

.fp-cell { position: relative; }
.fp-cell input {
    width: 100%; border: 1px solid transparent; background: transparent;
    color: inherit; font: inherit; padding: 3px 5px;
    border-radius: 6px; text-align: right;
}
.fp-cell input:hover { border-color: var(--c-line); background: var(--c-surface-2); }
.fp-cell input:focus {
    outline: none; border-color: var(--c-brand);
    background: var(--c-surface); box-shadow: 0 0 0 3px rgba(13,148,136,.15);
}
.fp-cell--salvo input { animation: piscar .7s ease; }
@keyframes piscar {
    from { background: var(--c-brand-soft); } to { background: transparent; }
}

.valor-in { color: var(--c-in-ink); }
.valor-out { color: var(--c-out-ink); }
.valor-zero { color: var(--c-muted); }

/* ─── Formulários ───────────────────────────────────────────────────────── */
.fp-campo { display: flex; flex-direction: column; gap: 5px; }
.fp-campo > label {
    font-size: 11.5px; font-weight: 650; color: var(--c-muted);
    text-transform: uppercase; letter-spacing: .05em;
}
.fp-input, .fp-select, textarea.fp-input {
    background: var(--c-surface); color: var(--c-ink);
    border: 1px solid var(--c-line); border-radius: var(--c-radius-sm);
    padding: 8px 10px; font: inherit; width: 100%;
}
.fp-input:focus, .fp-select:focus {
    outline: none; border-color: var(--c-brand);
    box-shadow: 0 0 0 3px rgba(13,148,136,.15);
}
.fp-select { appearance: none; padding-right: 30px;
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2 4.5 6 8.5 10 4.5z'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right 9px center;
    background-size: 12px; }
.fp-form-grid { display: grid; gap: 12px;
                grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.fp-check { display: flex; align-items: center; gap: 7px; font-size: 13px;
            color: var(--c-ink-soft); cursor: pointer; }
.fp-check input { width: 15px; height: 15px; accent-color: var(--c-brand); }

.fp-btn {
    display: inline-flex; align-items: center; gap: 6px; justify-content: center;
    border: 1px solid var(--c-line); background: var(--c-surface);
    color: var(--c-ink-soft); border-radius: var(--c-radius-sm);
    padding: 8px 13px; font: inherit; font-weight: 600; font-size: 13px;
    cursor: pointer; white-space: nowrap;
}
.fp-btn:hover { background: var(--c-surface-2); text-decoration: none; }
.fp-btn--principal {
    background: var(--c-brand); border-color: var(--c-brand); color: #032e2a;
}
.fp-btn--principal:hover { background: var(--c-brand-dark); border-color: var(--c-brand-dark); }
.fp-btn--perigo { color: var(--c-out-ink); border-color: var(--c-out-bg); }
.fp-btn--perigo:hover { background: var(--c-out-bg); }
.fp-btn--pequeno { padding: 5px 9px; font-size: 12px; }
.fp-btn--fantasma { border-color: transparent; background: transparent; }
.fp-btn--fantasma:hover { background: var(--c-surface-3); }
.fp-btn svg { width: 15px; height: 15px; }

.fp-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.fp-chip {
    border: 1px solid var(--c-line); border-radius: 999px;
    padding: 4px 11px; font-size: 12.5px; font-weight: 600;
    color: var(--c-ink-soft); background: var(--c-surface);
}
.fp-chip:hover { background: var(--c-surface-2); text-decoration: none; }
.fp-chip--ativo { background: var(--c-brand); border-color: var(--c-brand);
                  color: #032e2a; }

.fp-badge {
    display: inline-block; padding: 2px 8px; border-radius: 999px;
    font-size: 11px; font-weight: 700; letter-spacing: .02em;
    background: var(--c-neutral-bg); color: var(--c-neutral-ink);
    white-space: nowrap;
}
.fp-badge--in { background: var(--c-in-bg); color: var(--c-in-ink); }
.fp-badge--out { background: var(--c-out-bg); color: var(--c-out-ink); }
.fp-badge--warn { background: var(--c-warn-bg); color: var(--c-warn-ink); }
.fp-badge--info { background: var(--c-info-bg); color: var(--c-info-ink); }
.fp-badge--brand { background: var(--c-brand-soft); color: var(--c-brand-ink); }

.fp-aviso svg { width: 18px; height: 18px; flex: 0 0 18px; margin-top: 1px; }
.fp-aviso {
    display: flex; gap: 10px; align-items: flex-start;
    padding: 11px 14px; border-radius: var(--c-radius-sm);
    background: var(--c-info-bg); color: var(--c-info-ink);
    font-size: 13px; border: 1px solid transparent;
}
.fp-aviso--warn { background: var(--c-warn-bg); color: var(--c-warn-ink); }
.fp-aviso--erro { background: var(--c-out-bg); color: var(--c-out-ink); }
.fp-aviso--ok { background: var(--c-in-bg); color: var(--c-in-ink); }
.fp-aviso strong { font-weight: 700; }

.fp-vazio { padding: 34px 18px; text-align: center; color: var(--c-muted); }
.fp-vazio strong { display: block; color: var(--c-ink-soft); font-size: 14px;
                   margin-bottom: 4px; }

.fp-barra { height: 6px; border-radius: 999px; background: var(--c-surface-3);
            overflow: hidden; }
.fp-barra > span { display: block; height: 100%; border-radius: 999px;
                   background: var(--c-brand); }
.fp-barra--estourou > span { background: var(--c-out); }

.fp-lista { list-style: none; margin: 0; padding: 0; }
.fp-lista li {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 16px; border-bottom: 1px solid var(--c-line-soft);
    font-size: 13px;
}
.fp-lista li:last-child { border-bottom: none; }
.fp-lista .cresce { flex: 1; min-width: 0; overflow: hidden;
                    text-overflow: ellipsis; white-space: nowrap; }

.fp-ponto { width: 9px; height: 9px; border-radius: 3px; flex: 0 0 9px; }

/* ─── Diálogo ───────────────────────────────────────────────────────────── */
dialog.fp-dialogo {
    border: 1px solid var(--c-line); border-radius: var(--c-radius);
    background: var(--c-surface); color: var(--c-ink);
    padding: 0; width: min(620px, calc(100vw - 28px));
    box-shadow: var(--c-shadow);
}
dialog.fp-dialogo::backdrop { background: rgba(4,12,18,.55); }
dialog.fp-dialogo .fp-card__cab { border-bottom: 1px solid var(--c-line-soft); }
dialog.fp-dialogo .fp-dialogo__pe {
    display: flex; gap: 8px; justify-content: flex-end;
    padding: 12px 16px; border-top: 1px solid var(--c-line-soft);
    background: var(--c-surface-2);
    border-radius: 0 0 var(--c-radius) var(--c-radius);
}

/* ─── Login ─────────────────────────────────────────────────────────────── */
.fp-login {
    min-height: 100vh; display: grid; place-items: center; padding: 20px;
    background: radial-gradient(1100px 520px at 15% -10%, #0f766e22, transparent),
                radial-gradient(900px 460px at 105% 110%, #38bdf822, transparent),
                var(--c-bg);
}
.fp-login__cartao {
    width: min(400px, 100%); background: var(--c-surface);
    border: 1px solid var(--c-line); border-radius: 18px;
    padding: 30px 28px; box-shadow: var(--c-shadow);
}
.fp-login__marca {
    display: flex; align-items: center; gap: 11px; margin-bottom: 22px;
    font-size: 17px; font-weight: 700;
}

/* Login, final de cartão, competência: coisas que se leem caractere a
   caractere e se digitam de volta. Monoespaçado evita confundir l/1 e O/0. */
.mono {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
                 "Liberation Mono", monospace;
    font-size: 12.5px;
    color: var(--c-ink-soft);
}

.mudo { color: var(--c-muted); }
.pequeno { font-size: 12px; }
.negrito { font-weight: 700; }
.centro { text-align: center; }
.direita { text-align: right; }
.linha { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.espaco { margin-top: 16px; }
.sem-quebra { white-space: nowrap; }
