/* =========================================================
   styles.css — tokens e polimento visual do app
   Direção: "agro moderno". UMA família em todo o app: Calibri.
   O contraste vem de peso (títulos em negrito, corpo normal),
   não de misturar famílias. Paleta original intacta
   (verde-lavoura, dourado-soja, terra); acabamento com
   sombras em camadas, pill no item ativo da sidebar, foco
   dourado e movimento só em opacity/transform.
   Nada aqui altera layout das seções: só tokens e casca.
   ========================================================= */
:root{
  --verde-lavoura:#2f6b34; --verde-claro:#5a9e54; --terra:#7a5230; --terra-clara:#a9794a;
  --dourado-soja:#d9a521; --bg:#f6f5f1; --card:#ffffff; --texto:#23291f; --neutro:#8a8d83;
  --pos:#2f6b34; --neg:#b3261e;
  --verde-escuro:#24521f; --verde-tinta:#eef4ec; --borda-suave:#e8e5da;
  --fonte:'Calibri', ui-sans-serif, system-ui, sans-serif;
  --sombra-1:0 1px 2px rgba(35,41,31,.05), 0 1px 1px rgba(35,41,31,.03);
  --sombra-2:0 2px 4px rgba(35,41,31,.05), 0 14px 32px -16px rgba(47,107,52,.22);
  --raio:16px;
  --dur:180ms; --ease:cubic-bezier(.2,.7,.3,1);
}

/* ── Tipografia: família única, contraste por peso e largura ── */
body{
  background:
    radial-gradient(1100px 500px at 88% -10%, rgba(217,165,33,.055), transparent 60%),
    radial-gradient(900px 600px at -8% 108%, rgba(47,107,52,.05), transparent 55%),
    var(--bg);
  color:var(--texto);
  font-size:16px;
  font-family:var(--fonte);
  -webkit-font-smoothing:antialiased;
}
h1, h2, h3, .font-display{
  font-family:var(--fonte);
  font-weight:700;
  letter-spacing:-.015em;
}
table, .kpi, .tabular{font-variant-numeric:tabular-nums;}

/* ── Estrutura base (comportamentos existentes) ─────────── */
.agro-section.hidden{display:none;}
.collapsible > .collapsible-body{display:block;}
.collapsible.collapsed > .collapsible-body{display:none;}
.collapsible > .collapsible-head{cursor:pointer;user-select:none;}
.lc-month-toggle{cursor:pointer;font-weight:700;}
.lc-detail{background:#faf9f5;font-size:0.92em;}
main{min-height:0;}

/* Entrada suave da seção ativa (compositor: opacity/transform) */
@keyframes agro-entrada{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
.agro-section:not(.hidden){animation:agro-entrada 240ms var(--ease);}
@media (prefers-reduced-motion: reduce){
  .agro-section:not(.hidden){animation:none;}
  *{transition-duration:0s !important;}
}

/* ── Topbar ─────────────────────────────────────────────── */
header{
  background:linear-gradient(135deg, var(--verde-lavoura) 0%, var(--verde-escuro) 100%) !important;
  border-bottom:2px solid var(--dourado-soja);
  box-shadow:0 2px 12px rgba(36,82,31,.22);
}
header h1{font-weight:700;letter-spacing:-.01em;}
header select{background:white;border-radius:999px;padding-left:14px;padding-right:28px;min-height:44px;}
header button{border-radius:999px;transition:transform var(--dur) var(--ease), filter var(--dur) var(--ease);min-height:44px;}
header button:hover{filter:brightness(1.05);}
header button:active{transform:scale(.97);}

/* Pílula ativa (aba oficial, verde): degradê diagonal escuro, ponta
   clara já puxando pro verde quase preto do fundo da sidebar
   (--sb-bg:#0f1f14, css/visual-2026.css), não mais o verde vivo do
   selo/logo — pedido do Rodrigo depois de ver as duas versões
   anteriores. Classe global (não escopada em .aghtml), porque a
   pílula aparece em seções com e sem esse wrapper. Sub-abas cinzas
   (um nível abaixo da atividade) continuam sem gradiente — o
   degradê é só do nível principal (16/09/2026). */
.pill-ativo{
  background:linear-gradient(135deg, #0f1f14 0%, #1d4a22 100%) !important;
  color:#fff !important;
}

/* ── Sidebar: item ativo em pill preenchida ─────────────── */
#sidebar{
  width:228px;
  transition:width .2s var(--ease);
  box-shadow:1px 0 0 var(--borda-suave);
}
#sidebar ul{padding-left:8px;padding-right:8px;}
#sidebar .nav-item{
  white-space:nowrap;overflow:hidden;
  border-radius:12px;
  margin:2px 0;
  transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease),
             box-shadow var(--dur) var(--ease);
}
#sidebar .nav-item:hover{background:#f2f1ea;}
#sidebar .nav-item.active{
  background:var(--verde-lavoura);
  color:#fff;
  font-weight:600;
  box-shadow:0 6px 16px -6px rgba(47,107,52,.45);
}
#sidebar .nav-item.active:hover{background:var(--verde-lavoura);}
#sidebar .nav-item .text-base{transition:transform var(--dur) var(--ease);}
#sidebar .nav-item:hover .text-base{transform:scale(1.12);}

/* No celular a sidebar nasce recolhida (só ícones). Sem isso a coluna
   de conteúdo fica com menos de 120px de largura útil em 390px,
   estreita demais pra qualquer cartão, tabela virada em cartão ou
   texto. Acima de 640px a sidebar fica sempre expandida (o botão
   "Recolher" manual foi removido a pedido do Rodrigo em 23/08/2026). */
@media (max-width:640px){
  #sidebar{width:64px;}
  #sidebar .label{display:none;}
}

/* Campo editável dentro de tabela compacta (text-xs herda 12px pro
   <input>, abaixo do mínimo de acessibilidade). Sempre 16px de fonte
   (evita zoom automático do iOS); alvo de toque de 44px só no celular,
   onde a densidade da tabela importa menos que o dedo acertar o campo. */
.inp-toque{font-size:1rem !important;}
@media (max-width:640px){ .inp-toque{min-height:44px;} }

/* Botão pequeno de tabela (Editar/Remover/Incluir) — alvo de toque de
   44px só no celular, mesma régua do .inp-toque acima; no desktop
   continua compacto, do jeito que já era. */
.btn-toque{}
@media (max-width:640px){
  .btn-toque{min-height:44px; display:inline-flex; align-items:center; justify-content:center;}
}

/* Campo de destaque (fonte grande, sem borda de caixa, ex.: "Dinheiro
   em caixa hoje") já tem fonte acima de 16px — só falta altura de
   toque no celular, sem herdar o font-size:1rem do .inp-toque, que
   diminuiria o número em vez de só facilitar o toque. */
@media (max-width:640px){ .inp-alvo{min-height:44px;} }

/* Jornada "Abrir e saber como estou" (Gauntlet, jornada 1): a Visão
   Geral usa a utilidade Tailwind .text-neutro (#8a8d83) em dezenas de
   legendas do modo Completo — medido contra fundo branco, fecha só
   3,38:1, abaixo dos 4,5:1 que o auditor de acessibilidade exige pra
   texto normal. Escopado só a esta seção (não mexe no token global
   nem em nenhuma outra tela) com o mesmo tom já usado em
   css/visao-simples.css: #5c5f54, 6,52:1 contra branco. */
#sec-painel_financeiro .text-neutro{color:#5c5f54;}

/* Mesmo achado, mesma correção, na tela de login (js/sections/login.js)
   — também é "caminho de entrada do app" desta jornada. O subtítulo do
   cartão já usava #5c5f54 direto no style; os textos de apoio menores
   (troca de senha obrigatória, conta em preparo, sem fazenda ainda)
   ainda usavam .text-neutro puro. */
#tela-login .text-neutro{color:#5c5f54;}

/* Mesmo achado, mesma correção, na tela Fluxo de Caixa (Gauntlet, jornada
   2 — "lançar dinheiro"): texto de ajuda da Caixa de Entrada, chips de
   cultura não selecionados e, dentro do card Ciclo Produtivo (montado por
   js/sections/armazenagem.js mas exibido aqui), a aba "Tabela" não
   selecionada e os rótulos "Propriedade"/"Talhão" do filtro — todos com
   .text-neutro puro, medidos entre 3,07:1 e 3,38:1, abaixo dos 4,5:1
   exigidos. Mesmo tom já usado nas duas correções acima. */
#sec-operacao .text-neutro{color:#5c5f54;}

/* Mesmo achado, mesma correção, na jornada "Tirar os papéis do banco"
   (Gauntlet, jornada 3): o parágrafo de apoio do cartão "Papéis para o
   banco" (js/sections/dossie.js) e o texto auxiliar espalhado pelas
   telas de Contabilidade, Crédito e Avaliação (etiqueta de cronograma,
   nota de garantia, mensagem "Nenhuma operação cadastrada" etc.), mais
   as mensagens de carregando/em construção destas três seções em
   index.html — tudo em .text-neutro puro, mesma medição de 3,38:1 sobre
   branco, abaixo dos 4,5:1 exigidos. Mesmo tom das correções acima. */
#sec-dossie .text-neutro,
#sec-notas .text-neutro,
#sec-avaliacao .text-neutro{color:#5c5f54;}

/* Mesmo achado, mesma correção, na jornada "Escolher de onde os
   documentos chegam, e ver o que já entrou" (Gauntlet, volta 2):
   js/sections/canais.js e js/sections/documentos.js usam
   .text-neutro puro em todo texto de apoio (endereço de e-mail,
   avisos do Telegram/WhatsApp, legenda de tipo/canal do documento,
   estado vazio etc.), mesma medição de 3,38:1 sobre branco, abaixo
   dos 4,5:1 exigidos. Mesmo tom das correções acima. */
#sec-canais .text-neutro,
#sec-documentos .text-neutro{color:#5c5f54;}

/* Mesmo achado, mesma correção, na jornada "Saber o que a fazenda tem,
   de relance" (Gauntlet, volta 2): a aba Estoque de Patrimônio
   (js/sections/armazenagem.js, renderizada dentro de #sec-patrimonial)
   usa .text-neutro puro em textos de apoio (link "ver armazéns abaixo",
   linha "Disponível: ... → destino: ...", botão "↩ Desfazer", total de
   rebanho por unidade, estado vazio de estoque), medido entre 3,18:1 e
   3,38:1 sobre branco/branco-cartão, abaixo dos 4,5:1 exigidos. Mesmo
   tom das correções acima. */
#sec-patrimonial .text-neutro{color:#5c5f54;}

/* ── Cards e KPIs ───────────────────────────────────────── */
.card{
  background:var(--card);
  border:1px solid var(--borda-suave);
  border-radius:var(--raio);
  padding:16px;
  box-shadow:var(--sombra-1);
  transition:box-shadow var(--dur) var(--ease);
}
.card:hover{box-shadow:var(--sombra-2);}
.kpi{font-weight:700;color:var(--verde-lavoura);}
.val-pos{color:var(--pos);} .val-neg{color:var(--neg);}

/* ── Controles: foco visível e toque de movimento ───────── */
:focus-visible{outline:2px solid var(--dourado-soja);outline-offset:2px;border-radius:6px;}
button{transition:background-color var(--dur) var(--ease), transform var(--dur) var(--ease),
       box-shadow var(--dur) var(--ease), filter var(--dur) var(--ease), opacity var(--dur) var(--ease);}
button:active{transform:scale(.98);}
input, select, textarea{
  font-family:var(--fonte);
  transition:border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
input:focus, select:focus, textarea:focus{
  border-color:var(--verde-claro);
  box-shadow:0 0 0 3px rgba(90,158,84,.15);
}

/* ── Tabelas: cabeçalho padronizado em todo o app ─────────
   As seções usam utilitários inline (bg-verde-lavoura text-white)
   no thead; este override consciente moderniza todas de uma vez:
   verde-tinta com texto verde e fio inferior, em vez do bloco
   verde sólido. */
thead tr[class*="bg-verde-lavoura"]{background:var(--verde-tinta) !important;color:var(--verde-lavoura) !important;}
thead tr[class*="bg-verde-lavoura"] th{font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:700;border-bottom:2px solid var(--verde-lavoura);}

/* ── Scrollbar (WebKit + Firefox) ───────────────────────── */
*{scrollbar-width:thin;scrollbar-color:#c9c5b8 transparent;}
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:#c9c5b8;border-radius:8px;border:2px solid var(--bg);}
::-webkit-scrollbar-thumb:hover{background:var(--verde-claro);}

/* ── Impressão: casca fora, conteúdo dentro ─────────────── */
@media print{
  body{background:#fff;}
}

/* ── Jornada "Tirar os papéis do banco" (Gauntlet, jornada 3) ──
   Duas peças pequenas e reaproveitáveis, escritas com os tokens
   do visual atual (nada de sistema de tema novo). */

/* Termo técnico com tradução ao lado: a versão do produtor vem
   sempre primeiro no texto; isto só estiliza o termo técnico que
   aparece depois, entre parênteses. */
.termo-tec{ color:#6b6e64; font-weight:400; }

/* Tabela larga vira lista de cartões no celular: cada <tr> empilha
   como um cartão com rótulo:valor por linha, sem rolagem horizontal.
   Precisa de <table class="tabela-cartoes"> e data-rotulo por <td>. */
@media (max-width:640px){
  .tabela-cartoes thead{display:none;}
  .tabela-cartoes, .tabela-cartoes tbody, .tabela-cartoes tr, .tabela-cartoes td{display:block;width:100%;}
  .tabela-cartoes tr{margin-bottom:10px;padding:10px 12px;border:1px solid var(--borda-suave);border-radius:12px;background:var(--card);}
  .tabela-cartoes tfoot tr{background:var(--verde-tinta)!important;}
  /* flex-wrap:wrap (achado da jornada Patrimônio, rótulo longo + valor
     numa linha só podia estourar a largura do cartão em telas de 390px
     mesmo com o texto empilhado); só entra em ação quando rótulo+valor
     não cabem lado a lado, nunca muda o layout de uma linha que já
     cabia. */
  .tabela-cartoes td{display:flex!important;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;padding:4px 0!important;text-align:right;border:0!important;white-space:normal!important;}
  /* Rótulo do cartão em #5c5f54, não var(--neutro) (#8a8d83, 3,38:1
     sobre branco): mesmo achado e mesma correção das demais regras
     desta jornada, aqui na peça reaproveitável que vira tabela larga em
     cartão empilhado no celular. */
  .tabela-cartoes td::before{content:attr(data-rotulo);font-weight:600;color:#5c5f54;text-align:left;white-space:normal;}
}

/* Célula de Ações com vários botões (ex.: Caixa de Entrada — Confirmar/
   Editar/Descartar): no desktop os botões ficam lado a lado, compactos;
   em cartão empilhado (.tabela-cartoes, abaixo de 640px) eles ficam em
   linha cheia, um embaixo do outro, cada um com alvo de toque de 44px,
   em vez de espremidos lado a lado numa célula estreita. */
.acoes-pend{display:inline-flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;}
@media (max-width:640px){
  .tabela-cartoes td[data-rotulo="Ações"]{display:block!important;text-align:left;}
  .tabela-cartoes td[data-rotulo="Ações"]::before{display:block;margin-bottom:8px;}
  .tabela-cartoes .acoes-pend{display:flex;flex-direction:column;gap:8px;}
  .tabela-cartoes .acoes-pend button{width:100%;}
}

/* ── Login: texto de exemplo (placeholder) legível ───────
   O placeholder padrão do navegador fica claro demais sobre
   fundo branco (abaixo de 4,5:1); é a única pista de formato
   nos campos de e-mail e senha antes de o produtor digitar. */
#login-email::placeholder,
#login-senha::placeholder,
#cad-conta::placeholder,
#cad-email::placeholder,
#cad-senha::placeholder,
#senha-nova::placeholder,
#senha-repita::placeholder{
  color:#4b5563;
  opacity:1;
}

/* ── Modal genérico (js/modal.js): mesmo ajuste no placeholder dos
   campos de formulário — o cinza padrão do Preflight do Tailwind
   (#9CA3AF) mede 2,54:1 sobre fundo branco, abaixo do mínimo de 4,5:1
   (Gauntlet de UX, jornada "lançar dinheiro"). Todo campo do modal
   genérico recebe id="agro-f-<id-do-campo>" (ver modal.js). */
[id^="agro-f-"]::placeholder{
  color:#4b5563;
  opacity:1;
}

/* ── Qualquer campo de telefone do app: mesmo ajuste, generalizado
   por tipo em vez de id — é o terceiro lugar onde o cinza padrão do
   Preflight (#9CA3AF, 2,54:1 sobre branco) reprova o veto de
   contraste do auditor (mínimo 4,5:1). Cobre js/sections/canais.js
   (campo de telefone do Telegram/WhatsApp) e qualquer campo type="tel"
   futuro, sem precisar repetir o mesmo ajuste por id de novo. */
input[type="tel"]::placeholder{
  color:#4b5563;
  opacity:1;
}
