/* ═══════════════════════════════════════════════════════════════════════════
   ESTILO.CSS — visual base das telas.

   Mesma familia visual da Central de Clientes: fundo gelo com lavagem de
   degrade, cartoes brancos de canto largo, Cormorant Garamond nos titulos e
   Poppins no corpo.

   A identidade de cada area mora nas variaveis --acento*. Trocar de area
   troca UM atributo no <body> (data-ctx) e o sistema inteiro repinta, porque
   todo elemento de destaque usa var(--acento) — nunca um hex solto.

   O verde e o vermelho de valor NAO acompanham a area: entrada e sempre
   --positivo e saida e sempre --negativo. Se seguissem o acento, na area Casa
   (salvia) todo valor pareceria positivo.
═══════════════════════════════════════════════════════════════════════════ */

:root {
  /* casca — vinda da Central de Clientes */
  --gelo:#f4f6f8; --branco:#fff; --gelo-linha:#e7ebf1;
  --tinta:#111; --tinta-suave:#4b5563;
  --sombra:0 4px 24px -8px rgba(30,41,59,.12);

  /* semantica financeira — igual nas tres areas */
  --positivo:#157a4d; --negativo:#b91c1c;
  --atraso-bg:#fef2f2; --atraso-txt:#b91c1c;

  /* derivados: a Central nao tinha "entrada de dinheiro" nem "parcial", entao
     estes fundos foram compostos aqui, dessaturados no mesmo tom da casca. */
  --positivo-bg:#eef7f2; --positivo-linha:#c6e3d5;
  --negativo-linha:#f3cccc;
  --aviso-txt:#8a5a00; --aviso-bg:#fdf6e8; --aviso-linha:#f0dcb4;

  /* raios: cartao / campo-botao / barra-segmento / pilula */
  --raio-cartao:20px; --raio-campo:10px; --raio-barra:12px; --raio-pilula:999px;

  /* largura util; telas largas sobrescrevem no proprio <style> */
  --largura:1100px;

  /* acento antes do data-ctx ser aplicado — evita um piscar sem cor */
  --acento:#9b514c; --acento-claro:#b87168; --acento-escuro:#7a3e3a;
  --acento-bg:#f7efee; --acento-anel:rgba(155,81,76,.22);
  --sombra-acento:0 6px 20px -8px rgba(155,81,76,.30);

  color-scheme: light;
}

/* ── Acento por area ──────────────────────────────────────────────────────
   As tres sao dessaturadas e terrosas, da mesma familia: trocar de area
   parece o mesmo sistema em outro humor, nao outro sistema.
   Branco sobre --acento passa em WCAG AA nas tres (5,71 / 5,31 / 6,40).
   --acento-claro NAO passa (3,5–4,3): so borda e foco, nunca texto. */
body[data-ctx="empresa"] {          /* terracota — a cor da marca */
  --acento:#9b514c; --acento-claro:#b87168; --acento-escuro:#7a3e3a; --acento-bg:#f7efee;
  --acento-anel:rgba(155,81,76,.22);
  --sombra-acento:0 6px 20px -8px rgba(155,81,76,.30);
}
body[data-ctx="pessoal"] {          /* salvia */
  --acento:#4f7360; --acento-claro:#6f9080; --acento-escuro:#3a5648; --acento-bg:#eef3f0;
  --acento-anel:rgba(79,115,96,.22);
  --sombra-acento:0 6px 20px -8px rgba(79,115,96,.30);
}
body[data-ctx="consolidado"] {      /* ameixa */
  --acento:#6b5876; --acento-claro:#877294; --acento-escuro:#4e405a; --acento-bg:#f3f0f5;
  --acento-anel:rgba(107,88,118,.22);
  --sombra-acento:0 6px 20px -8px rgba(107,88,118,.30);
}

/* ── Base ───────────────────────────────────────────────────────────────── */
* { box-sizing: border-box; }

html, body { min-height: 100vh; }

body {
  margin: 0;
  background: var(--gelo);
  color: var(--tinta);
  font-family: "Poppins", system-ui, sans-serif;
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}

/* Lavagem de degrade: o fundo nunca e branco puro nem cinza chapado. Fixo e
   sem eventos de ponteiro para nao interceptar clique nenhum. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background:
    radial-gradient(circle at 20% 0%, rgba(148,163,184,.07) 0%, transparent 42%),
    radial-gradient(circle at 80% 100%, rgba(148,163,184,.06) 0%, transparent 42%);
}

h1, h2, h3 {
  font-family: "Cormorant Garamond", Georgia, serif;
  margin: 0 0 14px;
  line-height: 1.15;
  font-weight: 600;
  letter-spacing: .005em;
}
h1 { font-size: 40px; color: var(--acento); }
h2 { font-size: 26px; }
h3 { font-size: 20px; }

a { color: var(--acento-escuro); }

/* Barra de 4px no topo: e ela que faz a troca de area ser sentida antes de
   lida. Fica acima do ::before do body. */
.barra-topo {
  height: 4px;
  position: relative;
  z-index: 3;
  background: linear-gradient(90deg,
    var(--acento-escuro) 0%, var(--acento) 50%, var(--acento-claro) 100%);
}

.conteudo {
  position: relative;
  z-index: 1;
  max-width: var(--largura);
  margin: 0 auto;
  padding: 28px 20px 72px;
}
.centro { max-width: 420px; margin: 0 auto; }

.fraco { color: var(--tinta-suave); }
.pequeno { font-size: 13px; }
.direita { text-align: right; }
.espaco { margin-top: 20px; }

/* ── Algarismos de largura fixa ───────────────────────────────────────────
   MEDIDO no navegador: a Poppins do Google Fonts NAO traz a tabela 'tnum'.
   Com ela, "R$ 1.111,11" mede 53,6px e "R$ 9.999,99" mede 79,6px no mesmo
   tamanho — 26px de diferenca, e a coluna de dinheiro nao alinha na vertical.
   Por isso as celulas de VALOR (e so elas) usam a monoespacada do sistema,
   como previsto no plano. O resto da tela continua em Poppins. */
.valor, .valor-positivo, .valor-negativo, .resumo-valor, .resumo-num,
.tabela td.num, .quadro .valor, .previa-valor, .baixas-lista .bx-valor {
  font-family: ui-monospace, Menlo, Consolas, monospace;
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
  letter-spacing: -.01em;
}

/* Frases COM numero dentro (nao coluna): seguem em Poppins. */
.aba-sub, .tabela th.num {
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
}

/* ── Cabecalho (montado por UI.montarTopo) ──────────────────────────────── */
.topo {
  position: relative;
  z-index: 2;
  background: var(--branco);
  border-bottom: 1px solid var(--gelo-linha);
  box-shadow: var(--sombra);
}

.topo-linha {
  max-width: var(--largura);
  margin: 0 auto;
  padding: 16px 20px 14px;
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.topo-marca {
  font-family: "Cormorant Garamond", Georgia, serif;
  font-size: 30px;
  font-weight: 600;
  line-height: 1;
  color: var(--acento);
  margin-right: auto;
}

/* Seletor de area — controle segmentado */
.areas {
  display: inline-flex;
  gap: 4px;
  background: var(--gelo);
  border: 1px solid var(--gelo-linha);
  padding: 4px;
  border-radius: var(--raio-barra);
}

.area {
  border: 0;
  background: transparent;
  color: var(--tinta-suave);
  font: inherit;
  font-size: 13.5px;
  font-weight: 500;
  padding: 7px 18px;
  border-radius: 9px;
  cursor: pointer;
  white-space: nowrap;
  transition: background .15s, color .15s;
}

.area:hover:not(:disabled):not([aria-pressed="true"]) { background: var(--branco); color: var(--tinta); }
.area[aria-pressed="true"] {
  background: var(--acento-bg); color: var(--acento-escuro); font-weight: 600;
  box-shadow: inset 0 0 0 1px var(--acento-anel);
}
.area:disabled { opacity: .38; cursor: not-allowed; }

/* Navegador de mes — mesmo formato de segmento */
.mes {
  display: flex;
  align-items: center;
  gap: 2px;
  background: var(--gelo);
  border: 1px solid var(--gelo-linha);
  border-radius: var(--raio-barra);
  padding: 3px;
}

.mes-nome {
  min-width: 132px;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: var(--tinta);
}

.mes-seta {
  border: 0;
  background: transparent;
  color: var(--tinta-suave);
  font: inherit;
  font-size: 17px;
  line-height: 1;
  width: 28px;
  height: 28px;
  border-radius: 9px;
  cursor: pointer;
  transition: background .15s, color .15s;
}

.mes-seta:hover { background: var(--branco); color: var(--acento-escuro); }

.sair {
  border: 1px solid var(--gelo-linha);
  background: transparent;
  color: var(--acento-escuro);
  font: inherit;
  font-size: 13.5px;
  font-weight: 500;
  padding: 8px 16px;
  border-radius: var(--raio-campo);
  cursor: pointer;
  transition: background .15s;
}

.sair:hover { background: var(--gelo-linha); }

/* Menu das telas — hairline dentro do mesmo bloco branco */
.menu {
  border-top: 1px solid var(--gelo-linha);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.menu-linha {
  max-width: var(--largura);
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  gap: 2px;
  white-space: nowrap;
}

.menu a {
  color: var(--tinta-suave);
  text-decoration: none;
  font-size: 13.5px;
  font-weight: 500;
  padding: 12px 14px;
  border-bottom: 2px solid transparent;
  transition: color .15s, background .15s;
}

.menu a:hover { color: var(--acento-escuro); background: var(--gelo); }
.menu a[aria-current="page"] { color: var(--acento); font-weight: 600; border-bottom-color: var(--acento); }

/* ── Cartao ─────────────────────────────────────────────────────────────── */
.card {
  background: var(--branco);
  border: 1px solid rgba(231, 235, 241, .7);
  border-radius: var(--raio-cartao);
  box-shadow: var(--sombra);
  padding: 22px 24px;
  margin-bottom: 18px;
}

.card-titulo {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--tinta-suave);
  margin-bottom: 12px;
}

/* ── Campos ─────────────────────────────────────────────────────────────── */
.campo { margin-bottom: 14px; }

.campo label {
  display: block;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .02em;
  color: var(--tinta-suave);
  margin-bottom: 6px;
}

.campo input,
.campo select,
.campo textarea {
  width: 100%;
  font-family: inherit;
  font-size: 15px;
  color: var(--tinta);
  background: var(--gelo);
  padding: 11px 14px;
  border: 1px solid var(--gelo-linha);
  border-radius: var(--raio-campo);
  outline: none;
  transition: border-color .15s, background .15s;
}

.campo textarea { resize: vertical; line-height: 1.5; }

.campo input:focus,
.campo select:focus,
.campo textarea:focus {
  border-color: var(--acento-claro);
  background: var(--branco);
}

/* Seta do select desenhada em SVG inline: a nativa muda de forma em cada
   sistema e destoa do resto. */
.campo select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 42px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%234b5563' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 16px center;
}

input[type="checkbox"] { accent-color: var(--acento); }

/* ── Botoes ─────────────────────────────────────────────────────────────── */
.botao {
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  background: var(--acento);
  color: #fff;
  border: 1px solid var(--acento);
  padding: 11px 20px;
  border-radius: var(--raio-campo);
  cursor: pointer;
  box-shadow: var(--sombra-acento);
  transition: background .15s, transform .05s;
}

.botao:hover:not(:disabled) { background: var(--acento-escuro); border-color: var(--acento-escuro); }
.botao:active:not(:disabled) { transform: translateY(1px); }
.botao:disabled { opacity: .5; cursor: not-allowed; box-shadow: none; }
.botao-largo { width: 100%; }

/* Fantasma: transparente com borda, como na Central */
.botao-secundario {
  background: transparent;
  color: var(--acento-escuro);
  border-color: var(--gelo-linha);
  box-shadow: none;
}

.botao-secundario:hover:not(:disabled) {
  background: var(--gelo-linha);
  color: var(--acento-escuro);
  border-color: var(--gelo-linha);
}

/* ── Tabela ─────────────────────────────────────────────────────────────── */
.tabela-caixa { overflow-x: auto; -webkit-overflow-scrolling: touch; }

.tabela {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}

.tabela th {
  text-align: left;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--tinta-suave);
  border-bottom: 1px solid var(--gelo-linha);
  padding: 10px;
  white-space: nowrap;
}

/* .tabela th vence .direita por especificidade; sem isto o cabecalho da coluna
   de valores fica a esquerda e os numeros a direita. */
.tabela th.direita { text-align: right; }

.tabela td {
  border-bottom: 1px solid var(--gelo-linha);
  padding: 11px 10px;
  vertical-align: middle;
}

.tabela tbody tr:hover { background: var(--gelo); }

/* Atraso NAO usa o acento da area: e sempre vermelho, em qualquer area. */
.tabela tr.atrasado { background: var(--atraso-bg); }
.tabela tr.atrasado:hover { background: #fbe4e4; }

/* Coluna curta e NAO-monetaria: titulo e conteudo centralizados.
   Alinhar "PARCELAS" (8 letras) a direita sobre "3x" (2 caracteres) e
   tecnicamente certo e opticamente errado: as bordas coincidem, mas o olho
   alinha pela MASSA do texto, e o titulo le como torto. MEDIDO: com a coluna
   a direita, o centro optico do titulo caia 11,94px longe do centro dos
   valores; centralizando os dois, o desvio some.
   Dinheiro NAO entra aqui — continua em .num, a direita, porque so assim a
   virgula cai sempre na mesma coluna e da para comparar grandezas varrendo de
   cima para baixo. Centralizar dinheiro destroi exatamente isso.
   Nome `meio` e nao `centro` de proposito: `.centro` ja existe e carrega
   max-width/margin do cartao de login. */
.tabela th.meio, .tabela td.meio { text-align: center; }

/* ── Botao de icone ─────────────────────────────────────────────────────────
   Usado nas colunas de acao das tabelas. O desenho e SVG inline com
   stroke:currentColor — sem biblioteca de icones (seria uma ida a rede por dois
   desenhos) e sem emoji (muda de forma E de cor em cada sistema).
   currentColor e o que faz o hover da lixeira pintar o desenho junto com o
   botao, sem uma linha de CSS a mais.
   40x40 e o alvo minimo de toque: no celular um icone de 17px sem area em
   volta e impossivel de acertar com o dedo.
   O fundo so aparece no hover/foco: com borda permanente, dois botoes por
   linha numa tabela cheia viram grade dentro da grade. */
.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--tinta-suave);
  cursor: pointer;
  transition: background .15s, color .15s;
}

.icon-btn svg { display: block; width: 17px; height: 17px; }
.icon-btn:hover:not(:disabled) { background: var(--gelo-linha); color: var(--acento-escuro); }
.icon-btn:focus-visible {
  outline: 2px solid var(--acento-claro);
  outline-offset: -2px;
  background: var(--gelo-linha);
  color: var(--acento-escuro);
}
.icon-btn:disabled { opacity: .4; cursor: not-allowed; }

/* Perigo: vermelho FIXO, nunca o acento da area — na area Casa (salvia) um
   "apagar" pintado de verde nao avisaria nada. Vermelho so no hover/foco: em
   repouso os dois icones tem o mesmo peso, e a cor aparece na hora de decidir. */
.icon-btn.perigo:hover:not(:disabled) { background: var(--atraso-bg); color: var(--negativo); }
.icon-btn.perigo:focus-visible {
  outline-color: var(--negativo);
  background: var(--atraso-bg);
  color: var(--negativo);
}

/* ── Valores e avisos ───────────────────────────────────────────────────── */
.valor-positivo { color: var(--positivo); }
.valor-negativo { color: var(--negativo); }

.alerta {
  border-radius: var(--raio-campo);
  padding: 11px 15px;
  margin-bottom: 14px;
  font-size: 14px;
  border: 1px solid;
}

.alerta-erro { background: var(--atraso-bg); border-color: var(--negativo-linha); color: var(--atraso-txt); }
.alerta-ok { background: var(--positivo-bg); border-color: var(--positivo-linha); color: var(--positivo); }

/* Faixas flutuantes no topo (UI.erro / UI.sucesso) */
.faixa {
  position: fixed;
  top: 16px;
  left: 50%;
  transform: translateX(-50%);
  max-width: calc(100% - 32px);
  z-index: 60;
  padding: 12px 24px;
  border-radius: var(--raio-barra);
  color: #fff;
  font-weight: 500;
  text-align: center;
  cursor: pointer;
  box-shadow: 0 10px 30px -10px rgba(30, 41, 59, .40);
}

.faixa-erro { background: var(--negativo); }
.faixa-ok { background: var(--positivo); }

/* ── Overlay de carregamento ────────────────────────────────────────────── */
.carregando {
  position: fixed;
  inset: 0;
  z-index: 70;
  background: rgba(244, 246, 248, .68);
  backdrop-filter: blur(2px);
  display: flex;
  align-items: center;
  justify-content: center;
}

.girando {
  width: 34px;
  height: 34px;
  border: 3px solid var(--gelo-linha);
  border-top-color: var(--acento);
  border-radius: 50%;
  animation: gira .7s linear infinite;
}

@keyframes gira { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
  .girando { animation-duration: 2.4s; }
}

/* ── Modal ──────────────────────────────────────────────────────────────── */
.modal-fundo {
  position: fixed;
  inset: 0;
  z-index: 80;
  background: rgba(30, 41, 59, .35);
  backdrop-filter: blur(2px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  overflow: auto;
}

/* REGRA CRITICA — nao remover.
   O display:flex acima e regra de autor e VENCE o [hidden] do navegador. Sem
   esta linha, todo modal marcado com [hidden] no HTML nasce aberto e invisivel
   por cima da tela, engolindo todos os cliques: o JavaScript acha que escondeu
   e a pagina inteira para de responder. As telas repetem esta regra no proprio
   <style> como cinto e suspensorio. */
.modal-fundo[hidden] { display: none; }

.modal {
  background: var(--branco);
  border-radius: var(--raio-cartao);
  box-shadow: 0 18px 50px -18px rgba(20, 30, 50, .40);
  padding: 26px 28px;
  max-width: 420px;
  width: 100%;
  margin: auto;
}

.modal h2 { font-size: 26px; color: var(--acento); }

.modal-botoes { display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px; flex-wrap: wrap; }

/* ── Login ──────────────────────────────────────────────────────────────── */
.login-tela {
  position: relative;
  z-index: 1;
  min-height: calc(100vh - 4px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}

.login-card {
  background: var(--branco);
  border-radius: var(--raio-cartao);
  box-shadow: var(--sombra);
  padding: 40px 34px;
  width: 100%;
  max-width: 400px;
  text-align: center;
}

.login-marca {
  font-family: "Cormorant Garamond", Georgia, serif;
  font-size: 44px;
  font-weight: 600;
  line-height: 1;
  color: var(--acento);
}

.login-sub {
  color: var(--tinta-suave);
  font-size: 14px;
  margin: 8px 0 26px;
}

.login-card .campo { text-align: left; }
.login-card .botao { margin-top: 8px; padding: 13px; font-size: 15px; }

@media (max-width: 620px) {
  .topo-linha { padding: 14px 16px 12px; }
  .topo-marca { width: 100%; margin-right: 0; font-size: 26px; }
  .menu-linha { padding: 0 16px; }
  .conteudo { padding: 22px 16px 64px; }
  .card { padding: 18px 16px; border-radius: 16px; }
  .mes-nome { min-width: 110px; }
  h1 { font-size: 32px; }
}
