/* =============================================================================
   p1-financeiro — ferramenta de trabalho, não peça de marketing.

   Densidade alta, tipografia sóbria, zero gradiente. Quem abre isso está
   conferindo dinheiro: o número tem que ser a coisa mais legível da tela.

   Cores e marca vêm da identidade da P1 (preto, ouro, off-white e a
   padronagem). O ouro é acento, nunca preenchimento: se tudo brilha, nada
   chama atenção — e aqui quem precisa chamar é o saldo.
   ============================================================================= */

:root {
  /* paleta oficial */
  --preto:      #161514;
  --preto-2:    #1C1B19;
  --preto-3:    #211F1D;
  --ouro:       #EAAC1F;
  --ouro-hov:   #F2BC3D;
  --ouro-esc:   #9A7314;
  --off:        #F7F0EA;
  --sec:        #A89F94;
  --hairline:   rgba(247, 240, 234, 0.08);
  --hairline-2: rgba(247, 240, 234, 0.16);

  /* papéis na interface */
  --tinta:        var(--off);
  --tinta-fraca:  var(--sec);
  --tinta-fina:   #7C736A;
  --papel:        var(--preto-2);
  --papel-fundo:  var(--preto);
  --linha:        var(--hairline);
  --acento:       var(--ouro);

  /* sinais — abertos o bastante para ler sobre preto sem virar neon */
  --verde:        #63C68A;
  --vermelho:     #E8705F;
  --amarelo:      var(--ouro);

  --raio:         6px;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  /* avisa o navegador que o tema é escuro: barra de rolagem, calendário do
     input[type=date] e menu do select passam a vir escuros de fábrica */
  color-scheme: dark;
  background: var(--papel-fundo);
  color: var(--tinta);
  font: 15px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  -webkit-font-smoothing: antialiased;
}

/* Padronagem oficial gravada no fundo: assinatura da marca, não decoração.
   Fica atrás de tudo e sangra pela direita, como nas placas do site. */
body::before {
  content: "";
  position: fixed;
  top: 0;
  right: 0;
  width: 420px;
  max-width: 32%;
  height: 100%;
  background: url("../img/padronagem-p1.svg") no-repeat 100% 50% / cover;
  opacity: 0.035;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 62%);
  mask-image: linear-gradient(to right, transparent, #000 62%);
  pointer-events: none;
  z-index: 0;
}

/* --------------------------------------------------------------- estrutura */
.topo {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 20px;
  height: 52px;
  background: var(--preto-2);
  border-bottom: 1px solid var(--hairline-2);
  position: sticky;
  top: 0;
  z-index: 20;
}
.topo__marca {
  display: flex;
  align-items: center;
  gap: 9px;
  font-weight: 650;
  letter-spacing: -0.01em;
}
.topo__simbolo { height: 17px; width: auto; display: block; opacity: 0.95; }
.topo__marca small { color: var(--tinta-fina); font-weight: 400; }
.topo__espaco { flex: 1; }
.topo__usuario { color: var(--tinta-fraca); font-size: 13px; }

.abas { display: flex; gap: 2px; }
.abas button {
  border: 0;
  background: transparent;
  padding: 6px 12px;
  border-radius: var(--raio);
  font: inherit;
  font-size: 14px;
  color: var(--tinta-fraca);
  cursor: pointer;
}
.abas button:hover { background: var(--preto-3); color: var(--tinta); }
.abas button[aria-current="true"] {
  background: var(--ouro);
  color: var(--preto);
  font-weight: 600;
}

main {
  position: relative;
  z-index: 1;
  max-width: 1180px;
  margin: 0 auto;
  padding: 20px;
}

.bloco {
  background: var(--papel);
  border: 1px solid var(--linha);
  border-radius: var(--raio);
  padding: 18px;
  margin-bottom: 16px;
}
.bloco__titulo {
  margin: 0 0 4px;
  font-size: 15px;
  font-weight: 650;
}
.bloco__sub { margin: 0 0 14px; color: var(--tinta-fraca); font-size: 13px; }

.barra {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 12px;
  margin-bottom: 16px;
}

/* ------------------------------------------------------------------ campos */
.campo { display: flex; flex-direction: column; gap: 4px; }
.campo__rotulo { font-size: 12px; color: var(--tinta-fraca); font-weight: 600; }
.campo__dica { font-size: 11px; color: var(--tinta-fina); }

input, select, textarea {
  font: inherit;
  padding: 7px 9px;
  border: 1px solid var(--hairline-2);
  border-radius: var(--raio);
  background: var(--preto);
  color: var(--tinta);
  min-width: 0;
}
input::placeholder { color: var(--tinta-fina); }
input:focus, select:focus, textarea:focus {
  outline: 2px solid var(--acento);
  outline-offset: -1px;
  border-color: var(--acento);
}
select option { background: var(--preto-2); color: var(--tinta); }
input[type="number"], .num { font-family: var(--mono); text-align: right; }

.botao {
  font: inherit;
  font-weight: 600;
  padding: 8px 14px;
  border: 1px solid var(--ouro);
  border-radius: var(--raio);
  background: var(--ouro);
  color: var(--preto);
  cursor: pointer;
}
.botao:hover { background: var(--ouro-hov); border-color: var(--ouro-hov); }
.botao:disabled { opacity: 0.45; cursor: default; }
.botao--claro {
  background: transparent;
  color: var(--tinta);
  border-color: var(--hairline-2);
  font-weight: 500;
}
.botao--claro:hover { background: var(--preto-3); border-color: var(--sec); }
.botao--fino { padding: 4px 10px; font-size: 13px; font-weight: 500; }
.botao--perigo { background: transparent; color: var(--vermelho); border-color: var(--hairline-2); }
.botao--perigo:hover { background: rgba(232, 112, 95, 0.12); border-color: var(--vermelho); }

/* ----------------------------------------------------------------- estados */
.estado {
  padding: 18px;
  border-radius: var(--raio);
  font-size: 14px;
}
.estado--carregando { color: var(--tinta-fina); }
.estado--vazio {
  color: var(--tinta-fraca);
  background: rgba(247, 240, 234, 0.02);
  border: 1px dashed var(--hairline-2);
}
.estado--erro {
  color: var(--vermelho);
  background: rgba(232, 112, 95, 0.1);
  border: 1px solid rgba(232, 112, 95, 0.35);
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* ---------------------------------------------------------------- cartões */
.cartoes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
  gap: 10px;
}
.cartao {
  background: var(--preto-3);
  border: 1px solid var(--linha);
  border-radius: var(--raio);
  padding: 12px 14px;
}
.cartao__rotulo {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--tinta-fraca);
  font-weight: 650;
}
.cartao__valor {
  font-family: var(--mono);
  font-size: 20px;
  font-weight: 600;
  margin-top: 4px;
  letter-spacing: -0.02em;
}
.cartao__nota { font-size: 11px; color: var(--tinta-fina); margin-top: 3px; }
/* o cartão de destaque é o único lugar onde o ouro vira borda: é o número que
   o operador abriu o sistema para ver */
.cartao--destaque { border-color: var(--ouro); background: rgba(234, 172, 31, 0.06); }
.cartao--destaque .cartao__valor { color: var(--ouro); }
.cartao--positivo .cartao__valor { color: var(--verde); }
.cartao--negativo .cartao__valor { color: var(--vermelho); }

/* Duas fileiras com pesos diferentes: em cima a resposta do mês, embaixo a
   aritmética que sustenta. Se as duas tiverem o mesmo tamanho, o olho não sabe
   por onde começar e a tela volta a ser planilha. */
.cartoes--painel { align-items: stretch; }
@media (min-width: 800px) {
  .cartoes--painel { grid-template-columns: 1.5fr 1fr 1fr 1fr; }
}
.cartao--hero { padding: 16px 18px; border-color: var(--hairline-2); }
.cartao--hero .cartao__rotulo { font-size: 12px; }
.cartao--hero .cartao__valor { font-size: 32px; margin-top: 6px; }

.cartoes--apoio { grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); margin-top: 10px; }
.cartoes--apoio .cartao { background: transparent; padding: 9px 12px; }
.cartoes--apoio .cartao__valor { font-size: 16px; }

/* ---------------------------------------------------------------- tabelas */
.tabela { width: 100%; border-collapse: collapse; font-size: 14px; }
.tabela th {
  text-align: left;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--tinta-fraca);
  border-bottom: 1px solid var(--hairline-2);
  padding: 7px 8px;
  white-space: nowrap;
}
.tabela td { padding: 8px; border-bottom: 1px solid var(--linha); vertical-align: middle; }
.tabela tr:last-child td { border-bottom: 0; }
.tabela tbody tr:hover { background: rgba(247, 240, 234, 0.03); }
.tabela tfoot td { border-bottom: 0; color: var(--tinta-fraca); }
.tabela tfoot tr:first-child td {
  border-top: 1px solid var(--hairline-2);
  padding-top: 10px;
  color: var(--tinta);
}
.tabela .num, .tabela td.num { font-family: var(--mono); text-align: right; white-space: nowrap; }

.etiqueta {
  display: inline-block;
  font-size: 11px;
  padding: 2px 7px;
  border-radius: 99px;
  background: rgba(247, 240, 234, 0.05);
  color: var(--tinta-fraca);
  border: 1px solid var(--hairline-2);
  white-space: nowrap;
}
.etiqueta--alerta {
  background: rgba(234, 172, 31, 0.12);
  color: var(--ouro);
  border-color: rgba(234, 172, 31, 0.35);
}

/* ------------------------------------------------------------ grade de dias */
.grade-dias {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(112px, 1fr));
  gap: 6px;
}
.dia {
  border: 1px solid var(--linha);
  border-radius: var(--raio);
  padding: 6px 8px;
  background: var(--preto-3);
}
.dia--fds { background: rgba(247, 240, 234, 0.02); }
.dia__cabeca {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  color: var(--tinta-fraca);
  margin-bottom: 3px;
}
.dia input { width: 100%; padding: 4px 6px; font-size: 14px; }
.dia--salvando input { border-color: var(--ouro); }
.dia--salvo input { border-color: var(--verde); }
.dia--falhou input { border-color: var(--vermelho); background: rgba(232, 112, 95, 0.12); }

/* ------------------------------------------------------------------ avisos */
#avisos {
  position: fixed;
  right: 16px;
  bottom: 16px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 50;
}
.aviso {
  background: var(--off);
  color: var(--preto);
  padding: 9px 14px;
  border-radius: var(--raio);
  font-size: 13px;
  font-weight: 500;
  max-width: 380px;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45);
}
.aviso--ruim { background: var(--vermelho); color: #2A0F0B; }

/* ------------------------------------------------------------------ login */
.login {
  position: relative;
  overflow: hidden;
  max-width: 340px;
  margin: 12vh auto;
  background: var(--preto-2);
  border: 1px solid var(--hairline-2);
  border-radius: var(--raio);
  padding: 26px;
}
.login__padrao {
  position: absolute;
  top: 0;
  right: 0;
  width: 190px;
  height: 100%;
  object-fit: cover;
  object-position: 100% 50%;
  opacity: 0.05;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 55%);
  mask-image: linear-gradient(to right, transparent, #000 55%);
  pointer-events: none;
}
.login > *:not(.login__padrao) { position: relative; z-index: 1; }
.login__marca { height: 26px; width: auto; display: block; margin-bottom: 14px; }
.login h1 { font-size: 18px; margin: 0 0 4px; font-weight: 650; }
.login p { color: var(--tinta-fraca); font-size: 13px; margin: 0 0 18px; }
.login .campo { margin-bottom: 12px; }
.login .botao { width: 100%; margin-top: 4px; }

.oculto { display: none !important; }

/* Rótulo, campo e dica ocupam três faixas da MESMA grade, não três caixas
   empilhadas. Sem isso, o único campo que tem dica fica mais alto e sobe o
   input meia linha — a fileira deixa de ser uma fileira. */
.linha-formulario {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  grid-template-rows: auto auto auto;
  column-gap: 12px;
  row-gap: 4px;
  align-items: start;
}
.linha-formulario > .campo {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: span 3;
}
.caixa-check { display: flex; align-items: center; gap: 6px; font-size: 13px; }
.caixa-check input { min-width: auto; }
.caixa-check input[type="checkbox"] { accent-color: var(--ouro); }
