:root {
  --sn-primary: #4f8a75;
  --sn-primary-dark: #3c6c5b;
  --sn-primary-soft: #e6efe9;
  --sn-ink: #303a36;
  --sn-ink-soft: #6b7570;
  /* Um pouco mais escuro/saturado que antes (#f5f7f5) — era quase idêntico ao
     branco dos cards/tabelas e dificultava enxergar onde o conteúdo começava. */
  --sn-bg: #e7ece7;
  --sn-card: #ffffff;
  /* Um pouco mais escuro que antes (#e1e6e2) — quase da mesma cor do fundo
     da página (--sn-bg), então a borda dos cards/tabelas praticamente
     desaparecia; agora dá pra ver onde um cartão termina e o fundo começa. */
  --sn-border: #d4dbd6;
  --sn-navbar: #2c3733;
  --sn-table-stripe: rgba(79, 138, 117, 0.07);
  --sn-table-hover: rgba(79, 138, 117, 0.12);
  /* Sobrescreve a variável de fonte do próprio Bootstrap — alguns componentes
     (ex.: modais) referenciam essa variável diretamente em vez de só herdar
     do <body>, então só trocar o font-family do body não bastava pra cobrir
     tudo. */
  --bs-font-sans-serif: "Inter", -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
}

* {
  -webkit-tap-highlight-color: transparent;
}

/* A Inter tem x-height maior que a pilha de fontes do sistema usada antes —
   no mesmo tamanho declarado, ela "parece" bem maior. Quase todo o app
   (Bootstrap incluso) usa rem pra font-size/espaçamento, então baixar a
   base de 16px (padrão do navegador) pra 15px encolhe tudo (títulos,
   textos, tabelas, botões) na mesma proporção, sem mexer rule por rule e
   sem bagunçar a hierarquia entre eles.
   2026-08-09: reduzido mais 10% pra dispositivo web/desktop (pedido do
   usuário) — 15px * 0.90 = 13.5px. O @media mobile mais abaixo continua
   com seu próprio valor absoluto, não depende deste. */
html {
  font-size: 13.5px;
}

body {
  background: var(--sn-bg);
  color: var(--sn-ink);
  font-family: "Inter", -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  -webkit-text-size-adjust: 100%;
}

a {
  color: var(--sn-primary-dark);
  text-decoration: none;
}

/* ---------- Navegação ---------- */

.navbar-sn {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: var(--sn-navbar);
  padding: 0;
  min-height: 56px;
  z-index: 1030;
}

.navbar-brand-sn {
  display: flex;
  align-items: center;
  height: 56px;
  padding-left: 1.25rem;
  color: #fff !important;
  font-weight: 600;
  text-decoration: none;
}

/* Botão "abrir menu" — só existe visualmente abaixo do breakpoint mobile
   (ver media query no fim do arquivo); no desktop o menu já fica sempre
   visível (.sidebar-sn fixo), então o botão nem aparece. */
.navbar-menu-btn {
  display: none;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  background: transparent;
  border: 0;
  color: #fff;
  font-size: 1.35rem;
}

.navbar-menu-btn:hover {
  background: rgba(255, 255, 255, 0.08);
}

/* ---------- Menu lateral (fixo no desktop, painel deslizante no mobile) ---------- */

.sidebar-sn {
  position: fixed;
  top: 56px;
  left: 0;
  bottom: 0;
  width: 224px;
  background: var(--sn-navbar);
  color: #fff;
  overflow-y: auto;
  /* Reserva o espaço da barra de rolagem sempre, pra largura do menu não
     "encolher" visivelmente só quando o conteúdo passa da altura da tela. */
  scrollbar-gutter: stable;
  z-index: 1040;
  /* Barra de rolagem fina e escura, combinando com o fundo do menu, em vez
     da barra cinza padrão do navegador. */
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.25) transparent;
}

.sidebar-sn::-webkit-scrollbar {
  width: 6px;
}

.sidebar-sn::-webkit-scrollbar-track {
  background: transparent;
}

.sidebar-sn::-webkit-scrollbar-thumb {
  background-color: rgba(255, 255, 255, 0.25);
  border-radius: 3px;
}

.sidebar-sn::-webkit-scrollbar-thumb:hover {
  background-color: rgba(255, 255, 255, 0.4);
}

main.container-fluid {
  box-sizing: border-box;
  padding-left: calc(224px + 12px);
  padding-top: 56px;
}

/* Fundo escurecido atrás do menu aberto no mobile — clicar nele fecha o
   menu (ver script em View.php). Sem "pointer-events" quando escondido pra
   não bloquear clique no resto da página. */
.sidebar-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 1035;
  opacity: 0;
  transition: opacity 0.2s ease;
}

.offcanvas-sn-item {
  display: flex;
  align-items: center;
  padding: 0.9rem 1.25rem;
  color: #fff;
  text-decoration: none;
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  transition: background 0.15s ease;
}

.offcanvas-sn-item:hover {
  background: rgba(255, 255, 255, 0.08);
  color: #fff;
}

.offcanvas-sn-item.active {
  background: rgba(255, 255, 255, 0.14);
  color: #fff;
  font-weight: 600;
}

/* "Sair" precisa se destacar dos outros itens do menu (ação diferente,
   não é navegação) — vermelho suave, sem competir com o vermelho de erro. */
.offcanvas-sn-item.text-danger {
  color: #ff8a80 !important;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  margin-top: auto;
}

.offcanvas-sn-item.text-danger:hover {
  color: #ff8a80 !important;
  background: rgba(255, 255, 255, 0.08);
}

.offcanvas-sn-footer {
  margin-top: auto;
  padding: 1rem 1.25rem;
  color: rgba(255, 255, 255, 0.65);
  font-size: 0.85rem;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
}

/* ---------- Botões ---------- */

.btn-sn-primary {
  background: var(--sn-primary);
  border-color: var(--sn-primary-dark);
  color: #ffffff;
  font-weight: 600;
}

.btn-sn-primary:hover,
.btn-sn-primary:focus {
  background: var(--sn-primary-dark);
  border-color: var(--sn-primary-dark);
  color: #fff;
}

/* ---------- Cartões ---------- */

.card-sn {
  background: var(--sn-card);
  border: 1px solid var(--sn-border);
  border-radius: 12px;
  box-shadow: 0 1px 2px rgba(48, 58, 54, 0.04);
}

/* Observação com várias linhas (ver formatarObservacao() em src/bootstrap.php) */
.observacao-lista {
  margin: 0;
  padding-left: 1.1rem;
}

.observacao-lista li {
  margin-bottom: 0.15rem;
}

.observacao-lista li:last-child {
  margin-bottom: 0;
}

/* Espaçamento interno um pouco mais enxuto que o padrão do Bootstrap
   (1rem) — aplicado a todo .card-sn, ou seja, a maioria das páginas
   internas, pra reduzir o ar em volta do conteúdo sem apertar demais. */
.card-sn > .card-header {
  padding: 0.6rem 1.1rem;
}

.card-sn > .card-body {
  padding: 0.9rem 1.1rem;
}

/* Cabeçalho de página: usado em read.php (nome do cliente + tipo + ações) e,
   padronizado, em todas as outras páginas (título da página) — é sempre o
   primeiro bloco visual, separado do card de conteúdo abaixo. */
.ficha-header,
.page-header {
  border-left: 4px solid var(--sn-primary);
}

.ficha-header .btn {
  white-space: nowrap;
}

/* Tabelas de dados da ficha (label à esquerda, valor à direita) — largura do
   rótulo encolhe pro conteúdo (truque width:1% + nowrap) em vez de uma
   fatia fixa de 40%, que deixava um vão grande entre um rótulo curto (ex:
   "Nome") e o valor real quando a tabela ficava larga (2026-08-11). O
   rótulo mais longo da tabela passa a definir a largura da coluna pra
   todas as linhas, de forma consistente. */
.ficha-dados-tabela th {
  width: 1%;
  white-space: nowrap;
  color: var(--sn-ink-soft);
  font-weight: 500;
  border-color: var(--sn-border);
}

.ficha-dados-tabela td {
  border-color: var(--sn-border);
}

.ficha-dados-tabela tr:last-child th,
.ficha-dados-tabela tr:last-child td {
  border-bottom: none;
}

/* Conteúdo abaixo das abas (read.php, lista.php) — mesmo acabamento visual
   (sombra leve, cantos arredondados embaixo) dos cards de conteúdo do resto
   do sistema, pra não parecer um componente diferente. */
.tab-content.bg-white {
  border-radius: 0 0 10px 10px;
  box-shadow: 0 1px 3px rgba(48, 58, 54, 0.06);
}

/* Aba ativa e inativa usam a MESMA cor cheia (--sn-primary-dark), sem
   transparência nenhuma — a diferença é só peso da fonte, fundo e borda
   inferior no .active (pedido explícito pra não usar opacidade). */
.nav-tabs .nav-link {
  color: var(--sn-primary-dark);
  font-weight: 500;
  background-color: rgba(60, 108, 91, 0.16);
  border-bottom: 2px solid transparent;
  transition: border-color 0.15s ease;
}

.nav-tabs .nav-link:hover {
  border-bottom-color: var(--sn-border);
}

.nav-tabs .nav-link.active {
  color: var(--sn-primary-dark);
  font-weight: 700;
  background-color: var(--sn-card);
  border-bottom: 2px solid var(--sn-primary-dark);
}

/* Seletor de sistema (usuarios.php: Análise/OS) — nav-pills fica com o azul
   padrão do Bootstrap sem isso, destoando do verde do resto do site. */
.nav-pills .nav-link {
  color: var(--sn-primary-dark);
  font-weight: 500;
}

.nav-pills .nav-link.active {
  background-color: var(--sn-primary-dark);
  color: #fff;
  font-weight: 700;
}

/* ---------- Badges (tons mais suaves, sem perder distinção semântica) ---------- */

.badge-aprovado { background: #4f8a63; }
.badge-pendente { background: #b7833f; }

/* Selos de status em lista.php (Comissão, Aguardando Análise, Negado em
   Todos, financiador aprovado) — sem nowrap, o texto quebra dentro do selo
   numa coluna estreita e ele perde a cara de "pill" (vira uma caixa alta e
   torta). Cada selo sempre numa linha só; se não couber, a própria célula
   decide (ver .table-sn td.text-nowrap para CPF/Cidade ao lado). */
.pill-status {
  display: inline-block;
  white-space: nowrap;
  font-size: 0.6rem;
}

/* ---------- Tabelas ---------- */

/* Envelope visual da tabela — separa claramente do fundo da página (que fica
   bem parecido com branco quando é só a tabela "solta"): borda, sombra leve e
   cantos arredondados, igual em toda página que tenha tabela. */
.table-card {
  background: var(--sn-card);
  border: 1px solid var(--sn-border);
  border-radius: 10px;
  box-shadow: 0 1px 3px rgba(48, 58, 54, 0.07);
  /* Importante: table-card é usado junto com table-responsive no mesmo
     elemento. "overflow: hidden" nos dois eixos cancelava o
     "overflow-x: auto" do Bootstrap, então a tabela nunca conseguia rolar
     horizontalmente — o conteúdo (e o botão de excluir) ficava só cortado,
     sem jeito de alcançar. overflow-y: hidden mantém os cantos arredondados
     sem bloquear a rolagem horizontal. */
  overflow-x: auto;
  overflow-y: hidden;
}

/* Coluna de ações (lixeira) sempre visível, mesmo com a tabela rolada
   horizontalmente — evita depender do usuário achar/arrastar até o fim
   da rolagem só pra excluir uma ficha. */
.table-sn td:last-child,
.table-sn th:last-child {
  position: sticky;
  right: 0;
  background-color: var(--sn-card);
  box-shadow: -6px 0 6px -6px rgba(0, 0, 0, 0.15);
}

.table-card > .table {
  margin-bottom: 0;
}

.table-sn {
  --bs-table-bg: var(--sn-card);
  --bs-table-striped-bg: var(--sn-table-stripe);
  --bs-table-hover-bg: var(--sn-table-hover);
}

/* Zebra striping discreto pra toda .table-sn, sem precisar da classe
   .table-striped no HTML de cada view (2026-08-11, pedido pra valer em
   todas as páginas do sistema — a maioria das tabelas não tinha essa
   classe, então ficavam todas brancas). Mesmo padrão já usado no MAPOS:
   background-color direto nos dois seletores (td e th), não só a variável
   --bs-table-bg-type que o Bootstrap usa — em linhas com <th> (rótulo) +
   <td> (valor) misturados, só um dos dois pegava a cor com a variável
   sozinha, deixando a linha meio colorida/meio branca. */
.table-sn > tbody > tr:nth-of-type(odd) > td,
.table-sn > tbody > tr:nth-of-type(odd) > th {
  background-color: var(--sn-table-stripe);
}

.table-sn thead {
  background: var(--sn-primary-soft);
  color: var(--sn-ink);
  border-bottom: 2px solid var(--sn-primary);
}

.table-sn thead th {
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-weight: 700;
  color: var(--sn-primary-dark);
}

.table-sn td, .table-sn th {
  vertical-align: middle;
  padding: 0.65rem 0.85rem;
}

/* Tabelas de dados da ficha (read.php: endereço, financiadores aprovados
   etc.) — no desktop as linhas ficavam com respiro grande demais herdado
   do .table-sn geral; no celular o espaçamento permanece o mesmo de antes
   (ver override dentro de @media max-width: 767.98px). */
.ficha-dados-tabela td, .ficha-dados-tabela th {
  padding: 0.3rem 0.85rem;
}

/* Links dentro de tabelas (nome do cliente/vendedor) com um pouco mais de
   peso — sem isso, o verde de --sn-primary-dark em peso normal fica apagado
   perto do texto comum da linha, principalmente em cima de fundo colorido
   (linha-verde/venda-alta, que já são tons de verde). */
.table-sn a {
  font-weight: 600;
}

/* Tabelas de ranking/leaderboard (index.php) — linhas bem mais próximas que
   as tabelas de listagem de fichas, que precisam de espaço pra botões de
   ação; aqui é só nome + número. */
.table-sn.table-compacta td,
.table-sn.table-compacta th {
  padding: 0.3rem 0.85rem;
}

/* Relatórios densos com muitas colunas/linhas (estoque_relatorio_retiradas —
   original tinha CSS próprio de 0.8rem/0.4rem inline, perdido na migração
   pro table-sn padrão, que ficava grande demais pra esse volume de dado).
   Fonte igual ao thead (que já é 0.8rem em qualquer table-sn) — corpo e
   cabeçalho do mesmo tamanho, em vez do corpo herdar o tamanho normal do
   Bootstrap e destoar do cabeçalho. */
.table-sn.table-denso td,
.table-sn.table-denso th {
  padding: 0.4rem 0.6rem;
  font-size: 0.8rem;
}

/* Mesma ideia de espaçamento vertical enxuto acima, só que pras linhas de
   vendedores.php — que são <div>, não <table>, então não dá pra reusar o
   seletor de td/th acima. O botão "Editar" (.btn.btn-sm) tem padding vertical
   próprio maior que isso — reduzido à parte (classe "py-0" no botão em
   vendedores.php) senão ele sozinho definia a altura da linha e a redução
   aqui não tinha efeito nenhum. */
.linha-compacta {
  padding-top: 0.15rem;
  padding-bottom: 0.15rem;
}

/* <hr> entre cada vendedor (index.php) — bem discreto, só pra separar
   visualmente uma linha da outra sem competir com o conteúdo. */
.tabela-limitada hr.linha-divisora {
  margin: 0;
  border: 0;
  border-top: 1px solid var(--sn-border);
  opacity: 1;
}

/* "Ver mais/Ver menos" (index.php): linhas do índice AN_LIMITE_LINHAS em
   diante vêm do servidor com "linha-extra d-none" (escondidas, sem ocupar
   espaço). O clique no botão remove o "d-none" e, no frame seguinte,
   adiciona "linha-extra-visivel" — só aí a opacidade transiciona de 0 a 1,
   dando o efeito de fade suave (o inverso, ao recolher, espera a transição
   acabar antes de voltar o "d-none", ver o <script> em index.php). */
.linha-extra {
  transition: opacity 0.25s ease;
}

.linha-extra:not(.linha-extra-visivel) {
  opacity: 0;
}

.btn-ver-mais-icone {
  transition: transform 0.25s ease;
}

.btn-ver-mais.expandido .btn-ver-mais-icone {
  transform: rotate(180deg);
}

.an-medalha-ouro { color: #d4af37; }
.an-medalha-prata { color: #a7a7ad; }
.an-medalha-bronze { color: #b5651d; }

/* Badge "Super Meta" (index.php) — mesma paleta bronze/prata/ouro dos
   medalhões acima (an-medalha-*), reaproveitada aqui como fundo em vez de
   cor de texto, pra manter as duas ideias de "faixa atingida" consistentes
   visualmente. super-meta-3 é a faixa mais alta (200.000 por padrão). */
.super-meta-badge {
  display: inline-block;
  padding: .25em .6em;
  border-radius: .375rem;
  font-weight: 600;
  color: #fff;
  white-space: nowrap;
}
.super-meta-1 { background-color: #b5651d; }
.super-meta-2 { background-color: #8d8d94; }
.super-meta-3 { background-color: #b8860b; }

/* Linhas mais respiráveis e uma divisória sutil entre elas — o padrão do
   Bootstrap (só a divisória do <thead>) deixava linhas de relatório densas
   difíceis de acompanhar visualmente da esquerda pra direita. */
.table-sn > :not(caption) > * > * {
  border-bottom-color: var(--sn-border);
  transition: background-color 0.12s ease-in-out;
}

/* Linha inteira clicável (fin_geral, pre_geral, re_geral, vendas etc. — ver
   data-href + listener em app.js): cursor de "clicável" na linha toda, não
   só no link do nome que já existia. */
tr[data-href] {
  cursor: pointer;
}

/* Texto em <small> (padrão herdado do template antigo, usado na maioria das
   linhas de relatório) ficava pequeno demais pra leitura confortável dentro
   da tabela nova — meio-termo entre o small do Bootstrap (0.875em) e o texto
   normal. */
.table-sn small {
  font-size: 0.82rem;
}

/* Selos de financiadores aprovados (pre_geral, re_geral, fin_geral,
   fin_individual — .lista-selos: nome + selo(s) empilhados com <br>). O vão
   grande entre eles no desktop não é controlável por line-height nem
   vertical-align — testado (Chromium real): mudar line-height de 1.5 a 0.1,
   ou vertical-align baseline/top/middle/bottom, não altera o vão nem 1px,
   porque o .badge tem texto próprio e o navegador usa a métrica de fonte
   dele, não a do container, pra espaçar entre linhas dominadas por
   inline-block. Solução: vira flex-column (gap exato, sem depender de
   line-height) e esconde os <br> (viram redundantes/sem função no layout
   flex). No celular mantém o comportamento original em linha (ver override
   dentro de @media max-width: 767.98px). */
.lista-selos {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
}

.lista-selos br {
  display: none;
}

/* Cantos do cabeçalho acompanham o arredondamento do .table-card por fora —
   sem isso, o fundo colorido do <thead> "vazava" quadrado por cima do canto
   arredondado do envelope. */
.table-card .table-sn thead tr:first-child th:first-child {
  border-top-left-radius: 10px;
}
.table-card .table-sn thead tr:first-child th:last-child {
  border-top-right-radius: 10px;
}

/* ---------- Categorias de dados (read.php) ---------- */

.dados-categoria {
  margin-bottom: 1.75rem;
}

.dados-categoria:last-child {
  margin-bottom: 0;
}

.dados-categoria-titulo {
  display: inline-block;
  background: var(--sn-primary-soft);
  color: var(--sn-primary-dark);
  font-weight: 700;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 0.35rem 0.8rem;
  border-radius: 6px;
  margin-bottom: 0.75rem;
}

/* ---------- Miniaturas de arquivos anexados (read.php) ---------- */

.arquivo-thumb {
  position: relative;
  cursor: pointer;
  background: var(--sn-card);
  border: 1px solid var(--sn-border);
  border-radius: 10px;
  padding: 0.5rem;
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
}

.arquivo-thumb:hover,
.arquivo-thumb:focus-visible {
  border-color: var(--sn-primary);
  box-shadow: 0 2px 8px rgba(48, 58, 54, 0.12);
  outline: none;
}

.arquivo-thumb-preview {
  aspect-ratio: 1 / 1;
  border-radius: 6px;
  background: var(--sn-primary-soft);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  position: relative;
}

.arquivo-thumb-preview img,
.arquivo-thumb-preview video {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.arquivo-thumb-pdf-badge {
  position: absolute;
  bottom: 0.35rem;
  right: 0.35rem;
  width: 1.6rem;
  height: 1.6rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1rem;
  color: var(--sn-primary-dark);
  background: rgba(255, 255, 255, 0.85);
  border-radius: 50%;
  pointer-events: none;
}

.arquivo-thumb-icone {
  font-size: 2.5rem;
  color: var(--sn-primary-dark);
}

.arquivo-thumb-play {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 2rem;
  color: #fff;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);
  pointer-events: none;
}

.arquivo-thumb-nome {
  margin-top: 0.4rem;
  font-size: 0.75rem;
  color: var(--sn-ink-soft);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.arquivo-thumb-excluir {
  position: absolute;
  top: 0.35rem;
  right: 0.35rem;
  z-index: 2;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}

/* Seleção em lote pra mesclar no PDF do contrato (2026-09-03) -- mesma
   ideia visual de "Enviar na OS" no MAPOS. */
.arquivo-thumb-marcado {
  border-color: var(--sn-primary);
  box-shadow: 0 0 0 2px var(--sn-primary);
}

.arquivo-thumb-checkbox-contrato {
  position: absolute;
  top: 0.35rem;
  left: 0.35rem;
  z-index: 2;
  width: 1.15rem;
  height: 1.15rem;
}

/* ---------- Modal de visualização / carrossel de arquivos (read.php) ---------- */

.preview-arquivo-conteudo {
  min-height: 200px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}

.preview-arquivo-conteudo img,
.preview-arquivo-conteudo video {
  max-width: 100%;
  max-height: 70vh;
  border-radius: 6px;
}

/* Modal de arquivo de read.php ~10% menor no total (2026-08-14, pedido do
   usuário: "está muito para baixo e muito grande" + "reduza mais 5%",
   2 reduções de 5% aplicadas em cima uma da outra) — só #modalArquivo, não
   #modalVisualizarArquivo (dados_comissao.php, não reportado como
   problema). 800px é o --bs-modal-width padrão do .modal-lg do Bootstrap;
   70vh era o teto de altura de imagem/vídeo. */
#modalArquivo .modal-dialog {
  max-width: 722px;
}
#modalArquivo .preview-arquivo-conteudo img,
#modalArquivo .preview-arquivo-conteudo video {
  max-height: 63.2vh;
}

/* Modal em si sem borda visível (o visualizador de PDF nativo, dentro do
   <embed>/<iframe>, desenha sua própria borda ao redor da página — isso não
   dá pra estilizar de fora, é conteúdo do plugin — então aqui só cuidamos da
   moldura que É nossa: o card do modal). Só a sombra suave já separa o modal
   do fundo, sem precisar de uma linha de borda "grossa" por cima.
   #modalVisualizarArquivo é o modal de dados_comissao.php; #modalArquivo é o
   modal equivalente de read.php — mesmo tratamento visual nos dois. */
#modalVisualizarArquivo .modal-content,
#modalArquivo .modal-content {
  border: 0;
  border-radius: 10px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
}

/* Espaçamento bem enxuto nesses dois modais — o padrão do Bootstrap (1rem em
   header/body/footer) somado ao padding horizontal que .preview-arquivo-
   -conteudo já tinha (2.5rem) deixava até 3.5rem de moldura branca de cada
   lado no modal de read.php. Aqui o conteúdo (PDF/imagem/vídeo) ocupa quase
   toda a área do modal. */
#modalVisualizarArquivo .modal-header,
#modalArquivo .modal-header,
#modalVisualizarArquivo .modal-footer,
#modalArquivo .modal-footer {
  padding: 0.5rem 0.75rem;
}

#modalArquivo .modal-body {
  padding: 0.5rem;
}

.carrossel-seta {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 3;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 50%;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.carrossel-seta-anterior {
  left: 0.5rem;
}

.carrossel-seta-proxima {
  right: 0.5rem;
}

/* ---------- Formulários ---------- */

.field-required::after {
  content: " *";
  color: #a24b42;
}

.form-control:focus,
.form-select:focus {
  border-color: var(--sn-primary);
  box-shadow: 0 0 0 0.2rem rgba(79, 138, 117, 0.18);
}

.form-label {
  font-weight: 500;
  color: var(--sn-ink);
}

/* Campos bloqueados (preenchidos automaticamente, ex: nome/nascimento via
   CPF, cidade/uf via CEP) — aparência visivelmente opaca/travada, pra ficar
   claro que não dá pra digitar ali. */
.form-control[readonly] {
  background-color: #e7e9e6;
  opacity: 0.65;
  cursor: not-allowed;
  border-style: dashed;
}

.form-text {
  color: var(--sn-ink-soft);
}

/* ---------- Utilidades ---------- */

.text-muted {
  color: var(--sn-ink-soft) !important;
}

/* ==========================================================================
   Responsivo / mobile
   ========================================================================== */

@media (max-width: 767.98px) {
  /* Reduz a fonte em 10% no mobile (pedido do usuário, 2026-08-09, mesma
     lógica aplicada no MAPOS e no bv-novo) — como quase tudo no app usa rem
     (ver comentário em "html" no topo do arquivo), encolher só a base
     (15px * 0.90 = 13.5px) encolhe título, texto, tabela e botão na mesma
     proporção, sem mexer regra por regra. */
  html {
    font-size: 13.5px;
  }

  /* Menu lateral vira painel deslizante — some da tela por padrão (fora da
     viewport à esquerda) e só entra com a classe "aberto" (alternada no
     clique do botão hambúrguer, ver View.php). */
  .navbar-menu-btn {
    display: flex;
  }

  /* Tela de login (login.php/logout.php): menos respiro em volta do card e
     logo um pouco menor pra caber melhor numa tela pequena sem exigir
     rolagem; campos e botão maiores que o padrão (alvo de toque mínimo
     recomendado, ~44px) pra ficar fácil de tocar sem errar. */
  .tela-auth-conteudo {
    padding: 1rem;
  }

  .tela-auth-card {
    padding: 2rem 1.25rem;
  }

  .tela-auth-logo {
    width: 110px;
  }

  .tela-auth .form-control,
  .tela-auth .btn {
    min-height: 44px;
  }

  /* No celular mantém o espaçamento original (mesmo do .table-sn geral) —
     a redução acima é só pro desktop. */
  .ficha-dados-tabela td, .ficha-dados-tabela th {
    padding: 0.65rem 0.85rem;
  }

  /* Selos de financiadores empilhados (ver .lista-selos acima): no celular
     volta pro display original do <small> (inline — mudar pra "block" aqui
     mudaria o cálculo de linha/vão do navegador e não reproduziria o
     espaçamento de antes), sem flex e sem esconder o <br>. */
  .lista-selos {
    display: inline;
  }

  .lista-selos br {
    display: inline;
  }

  .sidebar-sn {
    transform: translateX(-100%);
    transition: transform 0.25s ease;
    box-shadow: 4px 0 16px rgba(0, 0, 0, 0.25);
  }

  .sidebar-sn.aberto {
    transform: translateX(0);
  }

  .sidebar-backdrop.visivel {
    display: block;
    opacity: 1;
  }

  /* Sem o menu ocupando espaço fixo na lateral, o conteúdo usa a largura
     toda — mesma folga (12px) que o container-fluid do Bootstrap já usa por
     padrão nas laterais. */
  main.container-fluid {
    padding-left: 12px;
  }

  main.container {
    padding-left: 12px;
    padding-right: 12px;
    padding-bottom: 32px !important;
  }

  .card-sn {
    padding: 1.25rem !important;
    border-radius: 10px;
  }

  h1.h4, .h4 {
    font-size: 1.15rem;
  }

  h2.h5, .h5 {
    font-size: 1.05rem;
  }

  h2.h6, .h6 {
    font-size: 0.95rem;
  }

  /* Botões de ação principais ocupam a largura toda no celular, mais fácil de tocar */
  form .btn-sn-primary,
  form button[type="submit"] {
    width: 100%;
  }

  /* Grupos de botões (ex: ações da ficha) empilham e ocupam a largura toda */
  .d-flex.gap-2:not(.flex-nowrap) {
    flex-wrap: wrap;
  }
  .d-flex.gap-2:not(.flex-nowrap) > .btn {
    flex: 1 1 auto;
  }

  /* Tabelas: fonte um pouco menor pra caber mais colunas na tela sem cortar */
  .table-sn {
    font-size: 0.85rem;
  }

  /* Menos espaço interno nas células (padrão do Bootstrap é 0.5rem dos dois
     lados) — em telas estreitas isso sozinho já rouba bastante espaço de
     colunas como CPF/Cidade/Ações, empurrando o botão de excluir pra fora
     da tela. */
  .table-sn td,
  .table-sn th {
    padding-left: 0.4rem;
    padding-right: 0.4rem;
  }

  /* Coluna de Ações (só o ícone da lixeira) não precisa do respiro padrão —
     encosta mais perto da borda pra sobrar espaço pras outras colunas. */
  .table-sn td.text-end,
  .table-sn th.text-end {
    padding-left: 0.25rem;
    padding-right: 0.5rem;
  }

  /* Tabela de meta.php: 4 colunas de valor em moeda são muito pra tela
     pequena — fonte ainda menor que o padrão e células mais compactas. */
  .table-meta {
    font-size: 0.72rem;
  }

  .table-meta td,
  .table-meta th {
    padding: 0.4rem 0.35rem;
  }

  /* Tabs por texto pequeno ficam mais fáceis de tocar com mais respiro vertical.
     As 3 abas (Pré-Análise/Venda em Andamento/Venda Formalizada) precisam
     aparecer completas (nada cortado/precisando rolar) — com nav-fill (ver
     lista.php) cada uma ocupa 1/3 da largura; o texto pode quebrar em 2
     linhas se não couber numa só, em vez de esconder ou exigir rolagem. */
  .nav-tabs .nav-link {
    padding: 0.5rem 0.35rem;
    font-size: 0.72rem;
    white-space: normal;
    text-align: center;
    line-height: 1.15;
  }

  .nav-tabs {
    flex-wrap: nowrap;
  }

  /* Campo de arquivo nativo do navegador trunca o nome do arquivo escolhido
     numa área muito estreita — fonte um pouco menor deixa mais texto visível
     antes de cortar. */
  input[type="file"].form-control {
    font-size: 0.8rem;
  }

  /* Cards de navegação da home em coluna única já é padrão do Bootstrap (col-sm-6),
     aqui só garantimos respiro consistente entre eles */
  .card-sn h2.h5 {
    margin-bottom: 0.35rem;
  }

  /* Selos de status em lista.php (Aguardando Análise, Negado em Todos,
     financiadores aprovados, comissão) — botão mais baixo (menos padding
     vertical) e um respiro entre eles quando empilhados, que no celular
     ficavam colados um no outro. */
  .pill-status {
    padding-top: 0.1rem;
    padding-bottom: 0.1rem;
    margin-bottom: 0.25rem;
  }
}

/* Telas bem estreitas (celulares pequenos/antigos) — mais um nível de ajuste
   fino além dos 767.98px acima, pra texto/tabela não ficarem apertados. */
@media (max-width: 380px) {
  body {
    font-size: 0.94rem;
  }

  h1.h4, .h4 {
    font-size: 1.05rem;
  }

  .card-sn {
    padding: 1rem !important;
  }

  .table-sn {
    font-size: 0.78rem;
  }

  .table-meta {
    font-size: 0.68rem;
  }

  .table-meta td,
  .table-meta th {
    padding: 0.35rem 0.25rem;
  }

  .form-label {
    font-size: 0.9rem;
  }

  .btn {
    font-size: 0.9rem;
  }
}

@media (max-width: 400px) {
  .navbar-brand-sn {
    font-size: 0.95rem;
  }
}

/* Realce de linha em tabelas de comissão (comissao.php) — equivalente às
   classes .verde/.vermelho/.azul do sistema antigo. Tons pastéis (em vez das
   cores saturadas originais) para não competir visualmente com o resto da
   página e manter o texto legível por cima. */
.linha-verde td { background-color: #dcefe1; }
.linha-vermelha td { background-color: #f6e0de; }
.linha-azul td { background-color: #eef1ee; }

/* A coluna de ações fica "sticky" com fundo fixo (.table-sn td:last-child,
   pensado pra manter um ícone de lixeira visível na rolagem horizontal) —
   nessas linhas coloridas isso deixava a última célula sempre branca,
   destoando do resto da linha. Mesma especificidade do seletor sticky
   (classe + pseudo-classe + elemento); "tr." a mais garante que estas
   vençam independente da ordem no arquivo. */
tr.linha-verde > td:last-child { background-color: #dcefe1; }
tr.linha-vermelha > td:last-child { background-color: #f6e0de; }
tr.linha-azul > td:last-child { background-color: #eef1ee; }

/* vendas.php/venda_detalhada.php: cores de faixa de média mensal —
   DIFERENTES das cores de comissao.php (.linha-*) mesmo a "azul" original
   tendo o mesmo nome de classe no sistema antigo, por isso nomes de classe
   distintos aqui.
   Achado 2026-08-13 (pedido do usuário: linha continuava verde mesmo com
   "NÃO CONTABILIZA"): o seletor `.table-sn > tbody > tr:nth-of-type(odd) >
   td` do zebra striping (acima, linha ~388) tem especificidade MAIOR
   (2 classes + 3 elementos) que `.venda-baixa td` (1 classe + 1 elemento) —
   em toda linha de posição ÍMPAR na tabela, o cinza do listrado vencia e
   escondia a cor por baixo, mesmo com a classificação PHP já corrigida.
   Reescrito no mesmo formato/especificidade do seletor do striping (empata
   e ganha por vir depois no arquivo), em vez de só ".venda-baixa td". */
/* venda-baixa: tom original (#f6e0de) era um rosa quase sem saturação —
   trocado por um vermelho/coral mais forte (2026-08-13, pedido do usuário),
   mesma família pastel mas com mais presença que laranja/verde ao lado. */
.table-sn > tbody > tr.venda-baixa > td { background-color: #eca199; }
/* venda-media: tom original (#faf1d7, um bege bem claro) não lia como
   "laranja" na tela — trocado por um pêssego mais saturado, mesmo padrão
   pastel do vermelho/verde ao lado (2026-08-13, pedido do usuário). */
.table-sn > tbody > tr.venda-media > td { background-color: #fbdcae; }
.table-sn > tbody > tr.venda-alta > td { background-color: #dcefe1; }

/* ---------- Telas avulsas de autenticação (login.php, logout.php) ---------- */

.tela-auth {
  background: var(--sn-bg);
}

.tela-auth-conteudo {
  min-height: 100vh;
  /* 100dvh (altura "dinâmica" da viewport) — no celular, a barra de
     endereço do navegador some/aparece ao rolar, e 100vh sozinho conta a
     altura como se ela estivesse sempre visível, fazendo o conteúdo
     "pular"/cortar embaixo. Navegador sem suporte a dvh ignora esta linha e
     fica só com o 100vh acima. */
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
}

.tela-auth-card {
  max-width: 380px;
  width: 100%;
  padding: 2.5rem 2rem;
}

.tela-auth-icone {
  width: 64px;
  height: 64px;
  margin: 0 auto 1.25rem;
  border-radius: 50%;
  background: var(--sn-primary-soft);
  color: var(--sn-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.75rem;
}

/* Logo no lugar do ícone genérico só em login.php (logout.php mantém o
   ícone de check dentro do círculo, .tela-auth-icone acima). */
.tela-auth-logo {
  display: block;
  width: 140px;
  max-width: 100%;
  margin: 0 auto 1.25rem;
}

/* Busca na navbar (2026-08-14, pedido do usuário — mesmo padrão já usado
   no MAPOS, ver mapos-design-system.css), aponta pra pesquisar.php. */
.navbar-search-sn {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  margin-right: 1rem;
}

.navbar-search-sn input {
  width: 140px;
  padding: 0.3rem 0.6rem;
  border-radius: 6px;
  border: 1px solid rgba(255, 255, 255, 0.25);
  background: rgba(255, 255, 255, 0.12);
  color: #fff;
  font-size: 0.85rem;
}

.navbar-search-sn input::placeholder {
  color: rgba(255, 255, 255, 0.65);
}

.navbar-search-sn input:focus {
  outline: none;
  background: #fff;
  color: var(--sn-ink);
}

.navbar-search-sn button {
  display: flex;
  align-items: center;
  background: transparent;
  border: 0;
  color: #fff;
  opacity: 0.85;
  padding: 0.3rem;
}

.navbar-search-sn button:hover {
  opacity: 1;
}

@media (max-width: 767.98px) {
  .navbar-search-sn {
    margin-right: 0.5rem;
  }

  .navbar-search-sn input {
    width: 90px;
  }
}
