: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;
}

/* Alinhamento justificado pra texto corrido — refinado em 2026-08-08 a
   pedido do usuário: a versão anterior era uma regra CSS pura (p, td
   { text-align: justify }, sem exceção), mas CSS não tem como medir quantos
   caracteres um texto tem nem "saber" que uma célula é de nome. Por isso a
   regra agora só entra em vigor via classe .js-justificado, adicionada pelo
   assets/js/justificar-texto.js quando o texto tem mais de 50 caracteres E
   não é uma coluna/linha de nome (checagem que só dá pra fazer em JS,
   olhando o <th>/cabeçalho correspondente em tempo de execução). */
.js-justificado {
  text-align: justify;
}

/* ---------- 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);
}

/* Busca no topo — existia no shell v1 (#search em matrix-style.css,
   direto pra mapos/pesquisar) e ficou de fora na fundação do shell v2;
   restaurada em 2026-08-08 a pedido do usuário, mesmo destino/parâmetro
   (Mapos::pesquisar(), campo "termo"). */
.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;
}

/* ---------- 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;
  /* MAPOS tem grupos com submenu (analise-novo/bv-novo não têm) — abrir um
     grupo grande (ex: Configurações, 7 itens) pode passar da altura da
     tela, fazendo o navegador reservar espaço pra barra de rolagem só
     nesse momento. Sem isso, a largura do menu "encolhe" visivelmente toda
     vez que a barra aparece/some. scrollbar-gutter reserva esse espaço
     sempre, então a largura fica estável independente do grupo estar
     aberto ou não. */
  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 (destoava do resto do menu). */
  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);
}

/* 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;
}

/* Cabeçalhos de cartão com vários botões de ação (Editar/Imprimir/WhatsApp
   etc.) quebravam a página com scroll horizontal em telas estreitas —
   Bootstrap ".d-flex" não quebra linha por padrão (flex-wrap: nowrap).
   Aplicado sempre (não só dentro do @media mobile) porque o mesmo problema
   aparece em qualquer largura insuficiente pro total de botões, não só
   abaixo de 768px — telas de tablet com título longo também estouravam. */
.card-header.d-flex {
  flex-wrap: wrap;
  row-gap: 0.5rem;
}

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

/* Legenda de cor do calendário de OS no Dashboard (mapos/painel.php) — as
   cores precisam bater com o switch($os->status) de Mapos::calendario(),
   que monta os eventos do FullCalendar. */
.legenda-cor {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 3px;
  margin-right: 0.3rem;
}

/* 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
   fixa de 40% deixava rótulos curtos ("Nome", "Email", "Rua") longe do
   valor, com um vão em branco enorme entre o texto e a borda da coluna
   (achado 2026-08-09). "width:1%" + "white-space:nowrap" é o truque
   padrão pra coluna encolher só até o tamanho do próprio conteúdo (o
   navegador ainda respeita o rótulo mais comprido de cada tabela —
   "Precisa de Padronização?" etc. continuam cabendo, só não força TODA
   coluna a ocupar 40% à toa) — o valor (<td>, sem width definido) absorve
   o espaço que sobra. */
.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 (a maioria não tinha, então os <td>
   ficavam brancos iguais ao fundo do card por trás - achado 2026-08-08).
   Primeira tentativa usou só a variável --bs-table-bg-type (mesma que
   .table-striped do Bootstrap usa) esperando que a cadeia de fallback do
   próprio Bootstrap desse conta do resto - na prática, em linhas com <th>
   (rótulo) + <td> (valor) misturados, só um dos dois pegava a cor, deixando
   a linha meio colorida/meio branca (achado 2026-08-08, reportado pelo
   usuário). Trocado por background-color direto nos dois seletores, sem
   depender de variável CSS encadeada - mais previsível. O hover continua
   por cima porque é box-shadow (outra camada de pintura, não conflita com
   background-color por especificidade). */
.table-sn > tbody > tr:nth-of-type(odd) > td,
.table-sn > tbody > tr:nth-of-type(odd) > th {
  background-color: var(--sn-table-stripe);
}

/* Fonte suave de tabela — nasceu escopada só nas abas Anotações/Problemas/OS
   de clientes/visualizar (achado 2026-08-08: texto grande demais lá) e foi
   generalizada pra todo o sistema no mesmo dia, a pedido do usuário ("aplique
   em todo o sistema, pois precisa ficar agradavelmente visualizado em todo o
   sistema"). .status-badge tem font-size/color próprios (não herda daqui). */
.table-sn td {
  font-size: 0.9rem;
  color: var(--sn-ink-soft);
}

.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;
}

/* Rótulo em destaque dentro da tabela th/td (clientes/visualizar.php) —
   sobrescreve a cor/peso neutros de .ficha-dados-tabela th (precisa de
   .ficha-dados-tabela th.dado-label pra ganhar em especificidade, só
   ".dado-label" sozinho perde pra ".ficha-dados-tabela th"). Pedido do
   usuário, 2026-08-26: rótulo maiúsculo/negrito pra diferenciar bem do
   valor; .dado-label-sm é usado nos rótulos mais curtos (Situação,
   Geração) que ficavam grandes demais ao lado do valor. */
.ficha-dados-tabela th.dado-label {
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--sn-primary-dark);
}

.ficha-dados-tabela th.dado-label.dado-label-sm {
  font-size: 0.6rem;
}

/* ---------- 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;
}

/* Miniatura de PDF: o visualizador nativo do navegador embutido num
   iframe minúsculo já renderiza a 1a página — evita depender de
   Imagick/Ghostscript no servidor só para gerar uma miniatura. */
.arquivo-thumb-preview iframe.arquivo-thumb-pdf {
  width: 100%;
  height: 100%;
  border: 0;
  background: #fff;
  pointer-events: none;
}

.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;
}

/* Seleção em lote pra "Enviar na OS" (achado 2026-08-10, pedido do usuário)
   — antes só dava pra marcar uma foto por vez, abrindo o modal dela. O
   checkbox reflete o estado salvo (enviar_os já vem "checked" do banco) e
   também serve pra montar a seleção nova antes de salvar em lote — ver
   JS em clientes/editarCliente.php e clientes/visualizar.php.
   "stopPropagation" no clique do checkbox evita abrir o modal (o
   ".arquivo-thumb" inteiro é role="button" com data-bs-toggle="modal"). */
.arquivo-thumb-checkbox {
  position: absolute;
  top: 0.4rem;
  left: 0.4rem;
  z-index: 5;
  width: 1.15rem;
  height: 1.15rem;
  cursor: pointer;
}

.arquivo-thumb.arquivo-thumb-marcado {
  border-color: var(--sn-primary);
  box-shadow: 0 0 0 2px var(--sn-primary-soft);
}

.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);
}

/* ---------- 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 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 15% no mobile (pedido do usuário, 2026-08-09) — como
     quase tudo no app usa rem (ver comentário em "html" no topo do
     arquivo), encolher só a base (15px * 0.85 = 12.75px) encolhe título,
     texto, tabela e botão na mesma proporção, sem mexer regra por regra. */
  html {
    font-size: 12.75px;
  }

  /* 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;
  }

  /* Caixa de busca mais estreita no celular — hambúrguer + logo já ocupam
     boa parte da navbar de 56px de altura. */
  .navbar-search-sn {
    margin-right: 0.5rem;
  }

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

  /* Logo da navbar — o comentário acima ("hambúrguer + logo já ocupam boa
     parte da navbar") nunca tinha mexido no tamanho da própria logo: ela
     ficava travada nas dimensões nativas do arquivo (180x23px), que
     somadas ao botão hambúrguer (56px) + caixa de busca (90px + botão +
     margens) já estouram a largura de telas de celular estreitas
     (achado 2026-08-09) — a logo ficava cortada/espremida contra os
     outros elementos da navbar. Só a largura é fixada aqui; a altura fica
     "auto" pra manter a proporção original (180:23) sem distorcer a
     imagem — mesma abordagem já usada em .tela-auth-logo (login.php). */
  .navbar-brand-sn {
    padding-left: 0.75rem;
  }

  .navbar-brand-sn img {
    width: 120px;
    height: auto;
  }

  /* 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;
  }

  /* TESTE (2026-08-09, pedido do usuário): larga tabela/lista até quase a
     borda do card no celular. O .card-sn ganha 1.25rem de padding próprio
     SÓ no mobile (regra acima) que se soma ao padding que .card-body já
     tinha por padrão (0.9rem/1.1rem) — empilhados, isso come ~2.35rem
     (35px+) de cada lado da tela só de respiro visual, sobrando pouca
     largura pra ler dado de verdade. Opt-in via classe (não mexe no
     padding de formulário/texto do resto do card, só do elemento que
     ganhar essa classe) — testando em relatorios/clientes_view.php
     (Rotas); se aprovado, aplicar a mesma classe nas outras
     tabelas/listas do sistema. */
  .largura-total-mobile {
    margin-left: -1.85rem;
    margin-right: -1.85rem;
  }

  /* Mesma ideia, mas pra quando só existe UMA camada de padding pra
     cancelar (o elemento é filho direto de .card-sn, sem .card-body no
     meio, ou o .card-body ali é ".p-0"/sem padding próprio) — usar o valor
     de -1.85rem nesses casos ultrapassaria a borda do card de verdade. */
  .largura-total-mobile-leve {
    margin-left: -1.25rem;
    margin-right: -1.25rem;
  }

  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;
  }

  /* Abas com texto menor/mais compacto ficam mais fáceis de tocar. O
     "flex-wrap: nowrap" que existia aqui (2026-08-08) era pensado só pra
     uma tela com exatamente 3 abas usando nav-fill (1/3 da largura cada) —
     forçado pra TODO ".nav-tabs" do sistema, quebrava qualquer página com
     mais abas (clientes/editarCliente.php tem 4, garantias/garantias.php
     tem 8): sem nav-fill nem espaço pra quebrar linha, as abas ficavam
     espremidas/descontroladas ou vazavam a largura da tela (achado
     2026-08-09). Removido — o padrão do Bootstrap (".nav" já é
     flex-wrap:wrap) resolve sozinho, empilhando as abas em mais de uma
     linha quando não cabem numa só. */
  .nav-tabs .nav-link {
    padding: 0.5rem 0.35rem;
    font-size: 0.72rem;
    white-space: normal;
    text-align: center;
    line-height: 1.15;
  }

  /* 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;
  }

  /* Calendário de OS do Dashboard (mapos/painel.php) — o FullCalendar não
     tem NENHUM tratamento responsivo próprio: a barra de ferramentas
     (prev/next/hoje + título + dayGridMonth/dayGridWeek) é um
     "display:flex" sem quebra de linha e o título tem font-size:1.75em
     fixo (ver fullcalendar.min.css) — numa tela estreita o título grande
     espreme as setas/botão "hoje", ficando desproporcional (achado
     2026-08-09). Cada "chunk" (esquerda/centro/direita) vira uma linha
     própria, empilhada e centralizada.
     "!important" necessário em font-size/padding: o <link> do
     fullcalendar.min.css fica DENTRO do conteúdo da página (painel.php),
     carregando DEPOIS de mapos-design-system.css (que é só do <head>
     compartilhado) — com a MESMA especificidade (".fc .fc-toolbar-title"
     nos dois lados), a regra que carrega por último vence, então sem
     "!important" o 1.75em fixo do FullCalendar continuava ganhando mesmo
     com essa regra presente. */
  .fc .fc-toolbar {
    flex-wrap: wrap;
    row-gap: 0.5rem;
  }

  .fc .fc-toolbar-chunk {
    display: flex;
    justify-content: center;
    width: 100%;
  }

  .fc .fc-toolbar-title {
    font-size: 1.15em !important;
  }

  .fc .fc-button {
    padding: 0.3em 0.55em !important;
    font-size: 0.8em !important;
  }
}

/* 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;
  }

  .largura-total-mobile {
    margin-left: -1.6rem;
    margin-right: -1.6rem;
  }

  .largura-total-mobile-leve {
    margin-left: -1rem;
    margin-right: -1rem;
  }

  .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; }

/* vendas.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. */
.venda-baixa td { background-color: #f6e0de; }
.venda-media td { background-color: #faf1d7; }
.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;
}

/* ==========================================================================
   Específico do MAPOS (não existe em bv-novo/analise-novo/os-novo)
   ========================================================================== */

/* Grupos com submenu no menu lateral (Ordens de Serviço, Problemas,
   Orçamentos, Relatórios, Configurações) — analise-novo/bv-novo não têm
   esse conceito (menu deles é todo plano), então isso não existe no CSS
   copiado acima. Cabeçalho do grupo (.offcanvas-sn-item com
   data-bs-toggle="collapse") + itens filhos recolhíveis (.offcanvas-sn-
   subitem), indentados e num tom mais escuro que o resto do menu, pra ficar
   claro que pertencem ao grupo acima. */
.offcanvas-sn-item .chevron {
  transition: transform 0.15s ease;
}

.offcanvas-sn-item[aria-expanded="true"] .chevron {
  transform: rotate(180deg);
}

.offcanvas-sn-subitem {
  display: block;
  padding: 0.65rem 1.25rem 0.65rem 2.5rem;
  color: rgba(255, 255, 255, 0.85);
  text-decoration: none;
  background: rgba(0, 0, 0, 0.2);
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  font-size: 0.92rem;
}

.offcanvas-sn-subitem:hover {
  background: rgba(0, 0, 0, 0.1);
  color: #fff;
}

.offcanvas-sn-subitem.active {
  color: #fff;
  font-weight: 600;
  border-left: 3px solid var(--sn-primary);
  padding-left: calc(2.5rem - 3px);
}

/* Badge de status de OS/Garantia — usado via helper PHP status_badge().
   Mesma paleta semântica do resto do sistema (verde/azul/amarelo/vermelho/
   cinza), só que com 5 estados em vez dos 2 de .badge-aprovado/-pendente. */
.status-badge {
  display: inline-block;
  padding: 0.3rem 0.7rem;
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
  border-radius: 999px;
  color: #fff;
}
.status-badge.is-success { background-color: #4f8a63; }
.status-badge.is-info    { background-color: #4d7fa3; }
.status-badge.is-warning { background-color: #a3893f; }
.status-badge.is-danger  { background-color: #a24b42; }
.status-badge.is-neutral { background-color: #6b7570; }

/* Estado vazio de tabela ("Nenhum registro encontrado") */
.table-sn .table-empty-state td {
  text-align: center;
  padding: 2rem 1rem;
  color: var(--sn-ink-soft);
  font-style: italic;
}

/* Logo no lugar do texto "Solar Nascente" na navbar. #header h1 em
   matrix-style.css usava esse MESMO logo.png como background,
   height:31px/width:191px SEM background-size — ou seja, a caixa de
   191x31 era só uma área de posicionamento/alinhamento, e a imagem
   desenhava no tamanho NATIVO dela (180x23), sem escalar. 31px de altura
   (achado 2026-08-08 anterior) escalava a imagem pra cima e ficava maior
   que o original de verdade — o tamanho correto é o nativo do arquivo. */
.navbar-brand-sn img {
  height: 23px;
  width: 180px;
  display: block;
}

/* Botões com texto + ícone (<i>...</i> Texto) que só cabem ícone em telas
   estreitas — envolver o texto do botão em <span class="btn-text">Texto</span>
   pra ele desaparecer no celular e sobrar só o ícone + tooltip/title, evitando
   que a linha de botões quebre a página com scroll horizontal. */
@media (max-width: 767.98px) {
  .btn-text {
    display: none;
  }
}

/* Lista de sugestões do autocomplete (jQuery UI) some/fica sem responder ao
   passar o mouse dentro de um modal Bootstrap 5 — achado 2026-08-08 nos
   modais de Adicionar Cliente/Orçamento/Garantia etc. O jQuery UI calcula o
   z-index da lista dinamicamente (element.zIndex() + 1, olhando os
   ancestrais do próprio campo), e dentro de um modal esse cálculo fica
   menor que o z-index do Bootstrap (--bs-modal-zindex: 1055,
   --bs-backdrop-zindex: 1050) — a lista acaba renderizando por baixo do
   modal/backdrop. !important força vencer o z-index inline que o JS calcula
   (senão o inline sempre ganharia de uma regra normal daqui). */
.ui-autocomplete {
  z-index: 1100 !important;
}

/* Botão "copiar" discreto ao lado de um valor exibido (2026-08-14,
   clientes/visualizar.php) — mesmo espírito do .btn-copiar-dado já usado
   em analise-novo/read.php, portado pro design system do MAPOS. */
.btn-copiar-dado {
  border: none;
  background: transparent;
  color: var(--sn-primary, #3c6c5b);
  padding: 0 0 0 6px;
  line-height: 1;
  cursor: pointer;
  vertical-align: middle;
}
.btn-copiar-dado:hover {
  color: var(--sn-primary-dark, #2f5748);
}
.btn-copiar-dado.copiado {
  color: #198754;
}
