/* Marca One v2 (aplicada 26/09/2026): Figtree no texto, servida daqui mesmo
   (static/fonts/figtree, licença OFL). Arquivo variável: um só cobre 400 a 700.
   A Poppins (títulos) vem do Google Fonts no base.html. A Qanelas Soft saiu. */
@font-face {
    font-family: 'Figtree';
    src: url("../fonts/figtree/Figtree-latin-ext.eca8d8b337ff.woff2") format('woff2');
    font-weight: 300 900;
    font-style: normal;
    font-display: swap;
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: 'Figtree';
    src: url("../fonts/figtree/Figtree-latin.202cfb54d4e6.woff2") format('woff2');
    font-weight: 300 900;
    font-style: normal;
    font-display: swap;
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
    /* Cor primária (azul) */
    --cor-primaria: #0057FF;
    /* Títulos escuros (estilo único 26/09/2026; antes azuis). */
    --cor-titulo: #0B1633;
    --cor-primaria-hover: #0046CC;
    --cor-primaria-texto: #0047D1;      /* azul de link/texto (contraste AA) */
    --cor-primaria-suave: #E8F0FF;      /* fundo azul claro (item ativo, etiqueta) */
    --cor-primaria-clara: #7FA6F7;
    --cor-primaria-mais-clara: #C2D6FB;

    /* Cor secundária (laranja) */
    --cor-secundaria: #FF7900;
    --cor-secundaria-hover: #F25D00;
    --cor-secundaria-clara: #FDBD86;
    --cor-secundaria-mais-clara: #FDDCC0;
    --cor-secundaria-suave: #FFF4EA;    /* fundo de alerta (atrasado/parado) */
    --cor-secundaria-texto: #8A3E00;    /* texto de alerta sobre fundo suave */

    /* Cor terciária (azul-céu) */
    --cor-terciaria: #66C0E8;
    --cor-terciaria-clara: #85CBE7;
    --cor-terciaria-mais-clara: #BAE0F0;

    /* Cor sombra (azul-marinho escuro) */
    --cor-sombra: #0A2A6C;

    /* Texto (estilo único 26/09/2026, valores da home nova e do login). */
    --cor-texto: #0B1633;
    --cor-texto-secundario: #55617A;
    --cor-aprovado: #1B873F;
    /* Verde escuro para texto sobre fundo claro de sucesso (o --cor-aprovado dá só 3,9:1 sobre #E3F5E9). Já existia escrito cru como #1C6B34/#256B38; auditoria 25/10 deu nome. */
    --cor-aprovado-texto: #1C6B34;
    --cor-reprovado: #D92D20;
    --cor-reprovado-escura: #B42318;
    --cor-neutra: #6B7280;
    --cor-alerta: #9a6b00;
    /* Laranja escuro dos Indicadores (faixas intermediárias, "sem movimento")
       e da pendência parcial; antes escrito cru como #c07800 em 23 lugares
       (auditoria 28/09). Nome sem "alerta": [style*="--cor-alerta"] no
       .ind-kpi desenha uma faixa lateral. */
    --cor-laranja-escuro: #a05f00;  /* era #c07800 (contraste 3,5:1); auditoria 25/10 subiu para 5,1:1 (WCAG AA) */
    /* Roxo dos status "aguardando cliente" / "vistoria não acompanhada" / "aguardando conversão".
       Estava escrito cru (#9b27af, #f3e5f7) em 6 arquivos; auditoria 25/10 só deu nome, cor idêntica. */
    --cor-roxo: #9b27af;
    --cor-roxo-suave: #f3e5f7;
    /* Já usada como #e3f5e9 cru em vários badges/cartões de sucesso; alguns
       avisos de "salvo com sucesso" já referenciam var(--cor-aprovado-mais-clara,
       #eafaf0) — um tom levemente diferente do resto (achado real 25/09).
       Define o token de verdade aqui pra esses avisos convergirem pro mesmo
       tom sem precisar editar cada tela (a var definida vence o fallback). */
    --cor-aprovado-mais-clara: #e3f5e9;
    --cor-reprovado-mais-clara: #fbe6e4;

    /* Brancos */
    --cor-fundo: #F4F6FA;
    --cor-fundo-alternado: #FAFBFD;
    --cor-superficie: #FFFFFF;
    --cor-borda: #D9E0EC;
    --cor-borda-leve: #EEF1F6;
    --cor-cinza-medio: #C4C4C4;
    --cor-cinza-claro: #E2E2E2;

    /* Marca One v2 (aprovada pela Thais 26/09/2026): Figtree no texto,
       Poppins nos títulos. Documentos gerados (contratos etc.) não usam
       estas fontes e não mudam. */
    --fonte-principal: 'Figtree', 'Segoe UI', system-ui, sans-serif;
    --fonte-titulo: 'Poppins', 'Segoe UI', system-ui, sans-serif;
    /* Escala de espaçamento (auditoria §18, 26/09/2026). Tela nova usa só
       estes; 6px/10px/14px que aparecem soltos são herança anterior à escala. */
    --espaco-xs: 4px;
    --espaco-sm: 8px;
    --espaco-md: 12px;
    --espaco-lg: 16px;
    --espaco-xl: 20px;
    --espaco-xxl: 24px;

    --raio-borda-bloco: 12px;
    --raio-borda-cta: 8px;
    /* Cartão com borda fina, sem sombra (estilo único 26/09/2026). */
    --sombra-card: none;
    --sombra-navbar: 0px 0px 5px 0px #474747;
}

* {
    box-sizing: border-box;
}

body {
    font-family: var(--fonte-principal);
    color: var(--cor-texto);
    background-color: var(--cor-fundo);
    margin: 0;
}

/* Bug conhecido do <fieldset> (usado em toda seção de Detalhes da
   Negociação e outros formulários, pra travar tudo dentro quando
   request.membro.papel == 'corretor'): diferente de uma <div> comum, o
   <fieldset> tem min-width baseado no próprio conteúdo por padrão no CSS
   do navegador — não encolhe pra caber numa tela estreita, empurrando a
   página inteira pra mais larga que o celular (achado real 2026-08-21,
   responsivo mobile do acesso de corretores: 53px de conteúdo cortado
   numa tela de 375px, causa era um <fieldset> com uma barra de
   ferramentas do editor de texto rico dentro). Correção padrão, sem
   efeito nenhum em telas largas onde já havia espaço de sobra.*/
fieldset {
    min-width: 0;
}

h1, h2, h3, h4, h5, h6 {
    color: var(--cor-titulo);
    font-family: var(--fonte-titulo);
    font-weight: 400;
    margin: 0 0 var(--espaco-xl) 0;
}

h1 {
    font-size: 26px;
    font-weight: 600;
    letter-spacing: -0.01em;
}

p {
    font-size: 15px;
    line-height: 1.5;
    color: var(--cor-texto-secundario);
}

a {
    color: var(--cor-primaria);
}

/* Botões */

.botao-principal {
    /* Azul desde a marca One v2 (26/09/2026); antes laranja. Laranja agora é
       só destaque (contadores, avisos, item ativo do menu). */
    background-color: var(--cor-primaria);
    color: #fff;
    border-radius: var(--raio-borda-cta);
    padding: var(--espaco-md) 25px;
    font-family: var(--fonte-principal);
    font-weight: 500;
    text-transform: none;
    border: none;
    cursor: pointer;
    display: inline-block;
    text-decoration: none;
}

.botao-principal:hover {
    background-color: var(--cor-primaria-hover);
}

.botao-contornado {
    background-color: transparent;
    border: 1px solid var(--cor-primaria);
    color: var(--cor-primaria);
    border-radius: var(--raio-borda-cta);
    padding: var(--espaco-md) 25px;
    font-family: var(--fonte-principal);
    font-weight: 500;
    text-transform: none;
    cursor: pointer;
    display: inline-block;
    text-decoration: none;
}

.botao-contornado:hover {
    background-color: var(--cor-primaria);
    color: #fff;
}

/* Ação destrutiva confirmada (ex.: "Sim, excluir"). Antes era
   .botao-principal com style="background-color: var(--cor-reprovado)"
   inline — o inline vencia o :hover, então o botão não reagia ao mouse
   (achado 25/09, unificação das telas de confirmação de exclusão). */
.botao-perigo {
    background-color: var(--cor-reprovado);
    color: #fff;
    border-radius: var(--raio-borda-cta);
    padding: var(--espaco-md) 25px;
    font-family: var(--fonte-principal);
    font-weight: 500;
    text-transform: none;
    border: none;
    cursor: pointer;
    display: inline-block;
    text-decoration: none;
}

.botao-perigo:hover {
    background-color: var(--cor-reprovado-escura);
}

/* Tela de confirmação de exclusão — componente único
   (templates/componentes/confirmar_exclusao.html), usado por Locação,
   Rescisão, Vendas e Jurídico, individual e em lote. */
.confirmacao-exclusao {
    max-width: 560px;
    display: grid;
    gap: var(--espaco-lg);
}

.confirmacao-exclusao__pergunta {
    display: flex;
    gap: var(--espaco-md);
    align-items: flex-start;
    margin: 0;
    color: #333;
}

.confirmacao-exclusao__icone {
    flex: none;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background-color: var(--cor-reprovado-mais-clara);
    color: var(--cor-reprovado);
    display: grid;
    place-items: center;
}

.confirmacao-exclusao__icone svg {
    width: 18px;
    height: 18px;
}

.confirmacao-exclusao__aviso {
    display: block;
    color: var(--cor-reprovado);
    font-weight: 500;
    font-size: 13px;
    margin-top: 2px;
}

.confirmacao-exclusao__dados {
    margin: 0;
    padding: 14px 0;
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 6px var(--espaco-lg);
    font-size: 14px;
    border-top: 1px solid var(--cor-borda-leve);
    border-bottom: 1px solid var(--cor-borda-leve);
}

.confirmacao-exclusao__dados dt {
    color: var(--cor-texto);
}

.confirmacao-exclusao__dados dd {
    margin: 0;
    color: #1d2b45;
    font-weight: 500;
    overflow-wrap: anywhere;
}

.confirmacao-exclusao__itens {
    margin: 0;
    padding: var(--espaco-md) 0;
    list-style: none;
    display: grid;
    gap: var(--espaco-sm);
    border-top: 1px solid var(--cor-borda-leve);
    border-bottom: 1px solid var(--cor-borda-leve);
}

.confirmacao-exclusao__itens li {
    display: grid;
    gap: 1px;
}

.confirmacao-exclusao__itens strong {
    color: #1d2b45;
    font-weight: 500;
}

.confirmacao-exclusao__itens span {
    font-size: 13px;
    color: var(--cor-texto);
}

.confirmacao-exclusao__consequencias {
    background-color: var(--cor-reprovado-mais-clara);
    border-radius: 8px;
    padding: var(--espaco-md) 14px;
}

.confirmacao-exclusao__consequencias p {
    margin: 0;
    font-size: 13px;
    color: #5c1a14;
}

.confirmacao-exclusao__acoes {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin: 0;
}

/* Cartão */

.cartao {
    background-color: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-borda-bloco);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-xl);
}

/* Badges de status */

.badge-status {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 500;
}

.badge-status--aprovado {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

/* Pontinho ao lado do rótulo de um campo que é usado tanto no Contrato de
   Locação quanto no Contrato de Administração (ver CAMPOS_*_COMPARTILHADOS
   em forms.py) — avisa que mudar esse campo afeta os dois contratos.
   Clicável: reúne todos os itens contratuais da tela (ver
   _painel_itens_contratuais.html, incluído em toda tela que usa
   label_com_marcador). Trocou de uma etiqueta de texto cheia ("Item
   Contratual", acima do rótulo — usada de 2026-07-15 até aqui) pra esse
   pontinho discreto a pedido da Thais em 2026-07-17: em telas com muitos
   campos compartilhados (ex. Detalhes da Negociação), a etiqueta repetida
   ficava poluindo a tela. O significado agora é explicado uma vez só, na
   legenda do topo da tela (ver .legenda-item-contratual). Cor laranja (a
   secundária da marca, --cor-secundaria) em vez de azul (a primária) —
   pedido dela no mesmo dia: azul já é usado demais no resto da tela
   (títulos, botões, links), laranja se destaca sem confundir. */
.ponto-item-contratual {
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--cor-secundaria);
    margin-right: 6px;
    margin-bottom: 1px;
    cursor: pointer;
}

.ponto-item-contratual:hover {
    background: var(--cor-secundaria-hover);
    box-shadow: 0 0 0 4px var(--cor-secundaria-mais-clara);
}

/* Colchetes vazios ("[ ]") que sobram no título de uma tarefa de
   Implantação quando a variável ainda não tem valor (ver
   implantacao.services.renderizar_titulo + filtro destacar_pendencia) —
   reproduz o destaque do sistema antigo pra chamar atenção pro que falta
   preencher. Laranja (--cor-secundaria) pelo mesmo motivo do
   .ponto-item-contratual: azul já é usado demais no resto da tela. */
.titulo-a-preencher {
    color: var(--cor-secundaria-texto);
    background: var(--cor-secundaria-mais-clara);
    border-radius: 4px;
    padding: 0 3px;
    font-weight: 600;
}

/* Colchetes já preenchidos ("[CPFL]") no título de uma tarefa de
   Implantação — azul mais escuro que o resto do título (--cor-sombra),
   pra distinguir de relance o dado dinâmico do texto fixo (pedido da
   Thais, 2026-08-25, depois de ver o resultado dos colchetes na tela). */
.titulo-preenchido {
    color: #001B4D;
    font-weight: 600;
}

/* Quando o colchete vira link de verdade (services.renderizar_titulo_html,
   pedido da Thais 2026-08-25: "levar direto pro campo que falta
   preencher") — tira o sublinhado/azul padrão de link, já que a cor de
   destaque acima (laranja ou azul-escuro) já indica que é clicável;
   sublinha só no hover pra dar a pista de que é um link. */
a.titulo-a-preencher, a.titulo-preenchido {
    text-decoration: none;
    cursor: pointer;
}
a.titulo-a-preencher:hover, a.titulo-preenchido:hover {
    text-decoration: underline;
}

/* Legenda única (uma por tela) explicando o pontinho acima — ver
   .ponto-item-contratual. */
.legenda-item-contratual {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    font-size: 12.5px;
    color: var(--cor-texto-secundario);
    margin-bottom: var(--espaco-lg);
}

.legenda-item-contratual .ponto-item-contratual {
    margin-right: 0;
    cursor: default;
    flex-shrink: 0;
}

.legenda-item-contratual .ponto-item-contratual:hover {
    background: var(--cor-secundaria);
    box-shadow: none;
}

/* Painel "Itens contratuais" que o pontinho acima abre (ver
   _painel_itens_contratuais.html) — reúne todo campo compartilhado com o
   Contrato de Administração, esteja ele em qual seção da tela estiver.
   Movido de detalhes_negociacao.html (2026-08-27) pra cá quando o painel
   passou a ser reaproveitado em mais telas (Novo/Editar processo,
   Informativo de Contas). */
.painel-itens-contratuais{display:none;position:fixed;inset:0;z-index:50}
.painel-itens-contratuais.aberto{display:block}
.painel-itens-contratuais-fundo{position:absolute;inset:0;background:rgba(0,0,0,.35)}
.painel-itens-contratuais-conteudo{position:absolute;top:0;right:0;bottom:0;width:min(480px,92vw);background:#fff;box-shadow:-4px 0 24px rgba(0,0,0,.12);padding:22px;overflow-y:auto}
.painel-itens-contratuais-cabecalho{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.painel-itens-contratuais-cabecalho h4{margin:0}
.painel-itens-contratuais-intro{font-size:13px;color:var(--cor-texto-secundario);margin:0 0 18px}
.grupo-item-contratual{margin-bottom:18px}
.titulo-grupo-item-contratual{font-size:11px;font-weight:600;color:var(--cor-texto-secundario);text-transform:uppercase;letter-spacing:.04em;margin:0 0 var(--espaco-sm);padding-bottom:6px;border-bottom:1px solid var(--cor-borda-leve)}

.autosave-status {
    display: inline-block;
    margin-left: 10px;
    font-size: 13px;
    color: var(--cor-texto-secundario);
}

.autosave-status--pendente {
    color: var(--cor-texto-secundario);
}

.autosave-status--salvo {
    color: var(--cor-aprovado);
    font-weight: 600;
}

.autosave-status--erro {
    color: var(--cor-reprovado);
    font-weight: 600;
}

.badge-status--reprovado {
    background-color: #fbe6e4;
    color: var(--cor-reprovado);
}

.badge-status--cancelado {
    background-color: #eceef1;
    color: var(--cor-neutra);
}

/* Situação de Análise de Crédito pausada (STATUS_CHOICES) — vinha
   duplicada igual em lista_analises.html e detalhe_analise.html
   (achado real 25/09); centralizada aqui pra não reescrever de novo em
   toda tela nova do módulo. */
.badge-status--pausado {
    background-color: #eceef1;
    color: var(--cor-neutra);
}

.badge-status--impedimento {
    background-color: #fff1dc;
    color: #b45f06;
}

.badge-status--desistencia {
    background-color: #fce4ec;
    color: #c2185b;
}

/* Cada status com cor própria — não repetir cor entre status (pedido da
   Thais 2026-07-26). Paleta espelhada da função badge() em
   indicadores.html, que já tinha sido ajustada antes só ali. */
.badge-status--em_analise,
.badge-status--gerado { /* Contrato de Administração: documento gerado */
    background-color: #e3ecfd;
    color: var(--cor-primaria);
}

.badge-status--contrato_enviado_assinatura,
.badge-status--aguardando_assinaturas { /* Contrato de Administração */
    background-color: #e5f4fb;
    color: #0A2A6C;
}

.badge-status--aguardando_documento {
    background-color: #fff2e2;
    color: var(--cor-secundaria-texto);
}

.badge-status--aguardando_data_inicio {
    background-color: #eaf0fe;
    color: var(--cor-primaria-clara);
}

.badge-status--aguardando_conversao {
    background-color: var(--cor-roxo-suave);
    color: var(--cor-roxo);
}

/* 3 status novos pedidos pela Thais 2026-08-06 (ver models.STATUS_CHOICES) —
   mesma paleta de indicadores.html/badge(). */
.badge-status--aguardando_retorno_confirmacoes {
    background-color: #fdf3d8;
    color: #9a6b00;
}

.badge-status--contratos_em_elaboracao {
    background-color: #f1e6dc;
    color: #8a5a34;
}

.badge-status--contratos_analise_externa {
    background-color: #dcf3f0;
    color: #0f8a76;
}

/* Status antigos da planilha de importação, não usados por nenhum
   processo desde a auditoria de 2026-07-26 (ver
   esteira_locacao.migrations 0101) — mantidos só pra não quebrar se
   aparecer algum registro histórico bem antigo. */
.badge-status--em_finalizacao,
.badge-status--aguardando_finalizacao_assinaturas {
    background-color: var(--cor-roxo-suave);
    color: var(--cor-roxo);
}

.badge-status--finalizado {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--convertido {
    background-color: #e0e7f5;
    color: var(--cor-sombra);
}

/* Etapas do funil de Rescisão (rescisao/models.py STATUS_CHOICES) — uma cor
   própria por etapa, mesma convenção acima ("não repetir cor entre
   status"). concluido/desistencia/cancelado reaproveitam o badge já
   existente do vocabulário de Locação (mesmo conceito, cor consistente). */
.badge-status--primeiro_email_inquilino {
    background-color: #e8ecfe;
    color: #3550d6;
}

.badge-status--proprietario_informado {
    background-color: #e6e9fb;
    color: #4b3fbf;
}

.badge-status--segundo_email_inquilino {
    background-color: #e1f3fb;
    color: #0e7fa8;
}

.badge-status--anuncio_imovel {
    background-color: #fde8d2;
    color: #c4590a;
}

.badge-status--confirmacao_inquilino {
    background-color: #ddf4ee;
    color: #157c63;
}

.badge-status--entrega_chaves {
    background-color: #fbeed2;
    color: #92650a;
}

.badge-status--vistoria_realizada {
    background-color: #f0e4fb;
    color: #6b21a8;
}

.badge-status--retorno_laudo {
    background-color: #eee3fc;
    color: #5b21b6;
}

.badge-status--retorno_vistoria {
    background-color: #fce4f1;
    color: #a81e63;
}

.badge-status--retorno_inquilino {
    background-color: #fce4e9;
    color: #b0224a;
}

.badge-status--autorizacao_distrato {
    background-color: #f2e7dc;
    color: #7a4a1e;
}

.badge-status--envio_distrato {
    background-color: #ecf1d4;
    color: #5b6e17;
}

.badge-status--concluido {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

/* Status calculado do Pipeline de Rescisão (ProcessoRescisao.status_pipeline,
   Thais 10/09) — pendente_inicio/em_andamento/atrasado ganham cor própria
   aqui; concluido/cancelado reaproveitam os badges já existentes acima
   (mesmo conceito). Cores de em_andamento/atrasado espelham as já usadas
   pros chips de tarefa (chip-andamento/chip-atrasada) em tarefas_processo.html. */
.badge-status--pendente_inicio { /* laranja, a mesma cor dele nos Indicadores; o cinza ficava igual ao do Cancelado (Thais, 05/10/2026) */
    background-color: var(--cor-secundaria-suave);
    color: var(--cor-secundaria-texto);
}

.badge-status--em_andamento {
    background-color: #E8F0FF;
    color: #0046D1;
}

.badge-status--atrasado {
    background-color: #fbe6e4;
    color: var(--cor-reprovado);
}

/* Situação no Kanban da Rescisão (ProcessoRescisao.situacao_kanban, 03/10/2026): em atraso = tarefa atrasada;
   em acompanhamento = passou da data final do aviso prévio sem tarefa atrasada. */
.badge-status--em_atraso {
    background-color: var(--cor-reprovado-mais-clara);
    color: var(--cor-reprovado-escura);
}

.badge-status--acompanhamento {
    background-color: var(--cor-secundaria-suave);
    color: var(--cor-secundaria-texto);
}

/* Status de Tarefa/Implantação (app implantacao) — vinha duplicado quase
   igual em checklist_processo.html, kanban.html e minhas_tarefas.html
   (achado real 25/09); centralizado aqui como os outros badges acima. */
.badge-status--formalizacao {
    background-color: #E8F0FF;
    color: #0046D1;
}

.badge-status--concluida {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--cancelada {
    background-color: #F1F2F5;
    color: #6B7280;
}

.badge-status--nao_iniciada,
.badge-status--rascunho { /* Contrato de Administração: rascunho */
    background-color: #F1F2F5;
    color: #6B7280;
}

.badge-status--aguardando_terceiro {
    background-color: #FFF4DE;
    color: #8A5A00;
}

.badge-status--aguardando_cliente {
    background-color: var(--cor-roxo-suave);
    color: var(--cor-roxo);
}

/* Pontuação de candidato a contrato (rescisao/visualizar_processo.html,
   card "aguardando aprovação" — match automático de e-mail com contrato) —
   vinha 100% inline no template, reinventando .badge-status (achado real
   25/09). Mesmas 3 cores já usadas em outros badges do sistema. */
.badge-status--pontuacao-forte {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--pontuacao-media {
    background-color: var(--cor-secundaria-mais-clara);
    color: var(--cor-secundaria-texto);
}

.badge-status--pontuacao-fraca {
    background-color: #eef1f4;
    color: #4b5563;
}

/* Processo nascido sozinho de e-mail detectado, esperando alguém aprovar
   (services.processar_email_recebido, 10/09) — laranja de destaque
   (convenção "azul demais → laranja pra destaque"), cor própria pra não
   confundir com nenhum dos outros status do Pipeline. */
.badge-status--aprovacao {
    background-color: #FDDCC0;
    color: var(--cor-secundaria-texto);
}

/* Processo judicializado (ProcessoRescisao.em_juridico, 13/09) — vence
   qualquer outro status do Pipeline; cor própria (roxo), fora da paleta
   dos outros badges, pra ficar claro que não é mais um estágio normal do
   funil de rescisão. */
.badge-status--juridico {
    background-color: #ede7f6;
    color: #5e35b1;
}

/* Situação e risco do Processo Jurídico (juridico/models.py SITUACAO_CHOICES
   e RISCO_CHOICES). ativo/remoto reaproveitam o par verde de "aprovado" e
   provavel reaproveita o par vermelho de "reprovado" (mesmo significado:
   bom/ruim), já que são campos diferentes de "aprovado", não aparecem lado
   a lado na mesma coluna. suspenso/possivel usam --cor-alerta (âmbar),
   consolidado aqui como token oficial em vez de cor solta. */
.badge-status--ativo {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--suspenso {
    background-color: #fdf3d8;
    color: var(--cor-alerta);
}

.badge-status--encerrado {
    background-color: #eceef1;
    color: var(--cor-neutra);
}

/* Selo "Segredo de justiça" (ProcessoJuridico.segredo_justica) — preto/branco
   de propósito, alto contraste pra destacar de todos os outros badges de
   status (nunca usada pra nenhum outro status hoje). Vinha 100% inline em
   visualizar_processo.html (achado real 25/09). */
.badge-status--segredo_justica {
    background-color: #2d2d2d;
    color: #fff;
}

.badge-status--provavel {
    background-color: #fbe6e4;
    color: var(--cor-reprovado);
}

.badge-status--possivel {
    background-color: #fdf3d8;
    color: var(--cor-alerta);
}

.badge-status--remoto {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

/* Situação de Atendimento (SITUACAO_ATENDIMENTO_CHOICES) — ativo/concluido
   reaproveitam os badges já existentes (mesmo significado). */
.badge-status--arquivado,
.badge-status--arquivada {
    background-color: #eceef1;
    color: var(--cor-neutra);
}

/* Situação de Intimação (SITUACAO_INTIMACAO_CHOICES). */
.badge-status--pendente {
    background-color: #fdf3d8;
    color: var(--cor-alerta);
}

.badge-status--processada {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

/* Tipo de lançamento financeiro (TIPO_LANCAMENTO_CHOICES). */
.badge-status--receita {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--despesa {
    background-color: #fbe6e4;
    color: var(--cor-reprovado);
}

/* Status calculado de um lançamento financeiro (pago/atrasado/em_aberto —
   não é um CharField com choices, é calculado em views.py a partir de
   pago/data_vencimento). atrasado reaproveita o badge já existente. */
.badge-status--pago {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--em_aberto {
    background-color: #fdf3d8;
    color: var(--cor-alerta);
}

/* Status calculado ativa/desativada (Workflow.ativo, booleano) e sim/não
   (Timesheet.faturavel, booleano) — mesma convenção verde/cinza. */
.badge-status--ativa,
.badge-status--sim {
    background-color: #e3f5e9;
    color: var(--cor-aprovado);
}

.badge-status--desativada,
.badge-status--nao {
    background-color: #eceef1;
    color: var(--cor-neutra);
}

/* Cartão de indicador (KPI) — componente reutilizável entre módulos, ver
   templates/componentes/cartao_indicador.html. Generaliza o padrão que já
   existia (repetido, cada um com seu próprio inline style) nas telas de
   indicadores/pipeline de cada módulo. */
.grade-indicadores {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: var(--espaco-md);
    margin-bottom: var(--espaco-xl);
}

.cartao-indicador {
    padding: 14px var(--espaco-lg);
    display: block;
    text-decoration: none;
    color: inherit;
}

.cartao-indicador__rotulo {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--cor-texto-secundario);
}

.cartao-indicador__valor {
    font-size: 26px;
    font-weight: 600;
    margin-top: var(--espaco-xs);
}

.cartao-indicador--alerta {
    border-left: 4px solid var(--cor-alerta);
}

.cartao-indicador--alerta .cartao-indicador__valor {
    color: var(--cor-alerta);
}

.cartao-indicador--perigo {
    border-left: 4px solid var(--cor-reprovado);
}

.cartao-indicador--perigo .cartao-indicador__valor {
    color: var(--cor-reprovado);
}

/* Painel de indicadores (Indicadores de Locação e de Rescisão): cartão grande
   com gráfico (.ind-card) e os números pequenos dentro dele (.ind-kpi). Antes
   cada tela tinha a própria cópia; unificado 26/09/2026. O número pequeno
   segue o desenho do cartão padrão (componentes/cartao_indicador.html) em
   versão compacta (mockup aprovado): rótulo em cima, número embaixo. O HTML
   vem do JS com o número antes do rótulo, por isso column-reverse. */
.ind-card{background:#fff;border:1px solid var(--cor-borda-leve);border-radius:var(--raio-borda-bloco);padding:18px;box-shadow:var(--sombra-card);min-width:0}
.ind-card.ind-full{grid-column:1/-1}
.ind-card-header{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--cor-borda-leve)}
.ind-card-icon{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px}
.ind-card-title{font-size:13px;font-weight:600;color:var(--cor-sombra);flex:1}
.ind-card-total-val{font-size:20px;font-weight:700;color:var(--cor-primaria);line-height:1;font-variant-numeric:tabular-nums}
.ind-card-total-lbl{font-size:10px;color:var(--cor-texto);margin-top:2px}
.ind-kpi-row{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.ind-kpi{flex:1;min-width:92px;background:var(--cor-fundo-alternado);border-radius:8px;padding:var(--espaco-sm) 10px;text-align:left;display:flex;flex-direction:column-reverse;justify-content:flex-end}
.ind-kpi-lbl{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--cor-texto-secundario);line-height:1.3}
.ind-kpi-val{font-size:18px;font-weight:600;color:var(--cor-sombra);margin-top:2px;font-variant-numeric:tabular-nums}
/* Número neutro (o JS pinta de azul) fica marinho, como no cartão padrão;
   vermelho e âmbar ganham a faixa lateral de atenção. */
.ind-kpi-val[style*="--cor-primaria)"]{color:var(--cor-sombra)!important}
.ind-kpi:has(> .ind-kpi-val[style*="--cor-reprovado"]){box-shadow:inset 3px 0 0 var(--cor-reprovado)}
.ind-kpi:has(> .ind-kpi-val[style*="--cor-alerta"]){box-shadow:inset 3px 0 0 var(--cor-alerta)}

/* Tabela de lista simples — componente reutilizável pra telas de listagem
   que não precisam do recurso de redimensionar/densidade automática de
   coluna (isso continua só em .tabela-processos, ver esteira_locacao). */
.tabela-lista {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.tabela-lista thead tr {
    text-align: left;
    border-bottom: 1px solid var(--cor-borda-leve);
}

.tabela-lista th {
    background: var(--cor-fundo-alternado);
    border-bottom: 1px solid var(--cor-borda);
    text-align: left;
    padding: 10px 14px;
    font-size: 12px;
    color: var(--cor-texto-secundario);
    font-weight: 600;
    white-space: nowrap;
}

.tabela-lista th a {
    color: inherit;
    text-decoration: none;
}

.tabela-lista th a:hover {
    color: var(--cor-primaria);
}

.tabela-lista td {
    padding: 10px 14px;
    border-bottom: 1px solid var(--cor-borda-leve);
}

.tabela-lista tbody tr:hover {
    background: var(--cor-fundo-alternado);
}

.tabela-lista tbody tr:last-child td {
    border-bottom: none;
}

/* Variante compacta: mesma altura de linha das pipelines de Locação,
   Rescisão e Vendas (.tabela-compacta). Usada nas listas do Jurídico
   (pedido da Thais 26/09: linhas estavam mais altas que nas outras). */
.tabela-lista--compacta th,
.tabela-lista--compacta td {
    padding: 7px var(--espaco-md);
}

.tabela-lista--compacta .badge-status {
    font-size: 12px;
    padding: 3px 9px;
}

.tabela-lista--compacta .botao-excluir-icone {
    width: 28px;
    height: 28px;
}

/* Painel de pendências de cadastro (tela do processo) — visualmente
   diferente dos cartões brancos de cadastro: fundo colorido conforme o
   estado geral, badges compactos em vez de grade de campos. */

.painel-pendencias {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 14px 18px;
    border-radius: 12px;
    border-left: 4px solid var(--cor-secundaria);
    background-color: #fdece0;
    margin-bottom: var(--espaco-xl);
}

.painel-pendencias--completo {
    border-left-color: var(--cor-aprovado);
    background-color: #e3f5e9;
}

.painel-pendencias__cabecalho {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--espaco-md);
}

.painel-pendencias__titulo {
    font-size: 14px;
    font-weight: 600;
    color: var(--cor-texto);
    margin: 0;
}

.painel-pendencias__resumo {
    font-size: 13px;
    color: var(--cor-texto-secundario);
    white-space: nowrap;
}

.painel-pendencias__lista {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-sm);
}

.badge-pendencia {
    display: inline-block;
    padding: var(--espaco-xs) var(--espaco-md);
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 500;
    background-color: rgba(255, 255, 255, 0.6);
    cursor: default;
}

.badge-pendencia--completo {
    color: var(--cor-aprovado);
}

.badge-pendencia--parcial {
    color: var(--cor-secundaria-texto);
    border-bottom: 1px dotted var(--cor-secundaria-hover);
}

.badge-pendencia--nao-iniciado {
    color: var(--cor-neutra);
}

/* Seção alternada */

.secao-alternada {
    background-color: var(--cor-fundo-alternado);
}

.oculto {
    /* !important porque esse elemento às vezes também tem outra classe que
       já declara display (ex.: .botao-acao, .grade-campos) — sem isso, a
       ordem no arquivo decide e "oculto" pode perder mesmo estando aplicado. */
    display: none !important;
}

/* Formulários */

.secao-formulario {
    margin-bottom: 25px;
}

.secao-formulario:last-child {
    margin-bottom: 0;
}

.secao-formulario h3,
.secao-formulario h4 {
    margin-top: 0;
    margin-bottom: 15px;
    font-size: 18px;
}

.secao-formulario h4 {
    font-size: 14px;
    font-weight: 500;
    color: var(--cor-texto-secundario);
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.grade-campos {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 15px var(--espaco-xl);
    align-items: start;
}

.campo-formulario {
    margin-bottom: 5px;
}

/* Campo condicional (ex.: só de Pessoa Física, some quando é Jurídica)
   dentro de uma .grade-campos — usa visibility em vez de display:none pra
   MANTER o espaço reservado na grade. Sem isso, o campo seguinte "escorrega"
   pra preencher o buraco e acaba caindo numa coluna diferente da mesma
   grade em outro cartão onde o campo não sumiu (ex.: CPF do Proprietário
   Jurídico numa coluna, CPF do Locatário Física em outra — pedido da
   Thais 2026-08-15, ver Raio-X do ONE). Não usar a classe genérica
   ".oculto" aqui: ela é display:none!important e é reaproveitada em muitos
   outros lugares do sistema onde sumir de vez (sem reservar espaço) é o
   comportamento certo. */
.campo-formulario.campo-invisivel {
    visibility: hidden;
}

/* Selo "Atualiza ao vivo" (cartão de composição de cálculo que recalcula
   sozinho ao digitar) — estava copiado igual em cada tela que tinha esse
   selo (Informativo de Contas de Rescisão); centralizado aqui 07/09 pra
   toda tela nova só precisar da classe, sem repetir o style inline. */
.badge-ao-vivo {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
    color: var(--cor-aprovado);
    background: #e3f5e9;
    border-radius: 999px;
    padding: var(--espaco-xs) 10px;
    margin-bottom: 14px;
}
.badge-ao-vivo .ponto {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--cor-aprovado);
}

/* Menu "Baixar" (Word/Excel/PDF) — antes duplicado em cada tela que tinha
   esse botão (Detalhes da Negociação, Informativo de Contas, Apuração de
   Comissões); centralizado aqui 2026-08-15 (item 49 do Raio-X do ONE) pra
   toda tela nova só precisar do HTML, sem copiar CSS de novo. */
.menu-relatorio-wrap {
    position: relative;
    display: inline-block;
}

.menu-relatorio {
    position: absolute;
    right: 0;
    top: calc(100% + 4px);
    background: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    box-shadow: var(--sombra-card);
    min-width: 200px;
    display: none;
    z-index: 5;
    overflow: hidden;
}

.menu-relatorio.aberto {
    display: block;
}

.menu-relatorio a {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    padding: 9px var(--espaco-md);
    font-size: 13px;
    color: var(--cor-texto);
    text-decoration: none;
    font-family: inherit;
}

.menu-relatorio a:hover {
    background: var(--cor-fundo-alternado);
}

/* Revertido em 15/08 — display:block no <table> quebrava o alinhamento das
   colunas em tabelas com largura ajustável por JS (ver Pipeline: coluna de
   ações ficava fora da área visível). A ideia de rolar tabela larga no
   celular (item 36 do Raio-X do ONE) precisa de um contêiner com
   overflow-x envolvendo a tabela, não display:block nela mesma — fica
   pendente até ser feito assim, com mais cuidado. */

.campo-linha-toda {
    grid-column: 1 / -1;
}

.campo-formulario label {
    display: block;
    font-weight: 500;
    font-size: 14px;
    line-height: 1.3;
    min-height: 37px;
    margin-bottom: 5px;
    color: var(--cor-texto-secundario);
}

.valor-visualizacao {
    font-size: 14px;
    color: var(--cor-texto);
    padding: 10px;
    min-height: 20px;
    background-color: var(--cor-fundo);
    border-radius: 6px;
    box-sizing: border-box;
}

.campo-formulario input,
.campo-formulario select,
.campo-formulario textarea {
    width: 100%;
    max-width: 240px;
    padding: 10px;
    border: 1px solid var(--cor-borda);
    border-radius: 6px;
    font-family: var(--fonte-principal);
    font-size: 14px;
    color: var(--cor-texto);
    background-color: #fff;
    box-sizing: border-box;
}

.campo-formulario textarea {
    max-width: none;
}

/* Campo numérico com unidade fixa ao lado (ex.: Área construída → "m²") —
   a unidade nunca é digitável, só um rótulo mostrado colado no campo
   (pedido da Thais 2026-08-28: o campo em si só aceita número). */
.campo-sufixo-wrap {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    max-width: 240px;
}

.campo-sufixo-wrap input {
    max-width: none;
}

.campo-sufixo {
    font-size: 13px;
    color: var(--cor-texto-secundario);
    white-space: nowrap;
}

/* Campo de checkbox solto (ex.: "Incluir no contrato") — o quadradinho nu
   ficava dentro da mesma caixa de campo de texto (largura 100%, padding
   10px), então sobrava um retângulo grande e vazio com um checkbox minúsculo
   perdido lá dentro, sem nada ao lado ancorando (pedido da Thais 2026-08-28:
   "parece que ficam soltos"). Vira um cartão compacto com o rótulo do lado
   do quadradinho (não mais em cima) e destaque em laranja quando marcado —
   mesma convenção do resto do sistema (azul = padrão, laranja = destaque).*/
/* Escolha múltipla como etiquetas clicáveis (ex.: Categorias da pessoa no
   Jurídico, 26/09). Checkbox de verdade por baixo, só o visual muda. */
.opcoes-etiqueta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-sm);
    margin: 0;
    padding: 0;
    border: 0;
}

.opcoes-etiqueta legend {
    width: 100%;
    padding: 0;
    margin-bottom: var(--espaco-sm);
    font-size: 13px;
    font-weight: 500;
    color: var(--cor-texto);
}

.opcao-etiqueta {
    position: relative;
    display: inline-flex;
}

.opcao-etiqueta input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}

.opcao-etiqueta span {
    font-size: 13px;
    padding: 5px var(--espaco-md);
    border: 1px solid var(--cor-borda);
    border-radius: 999px;
    background-color: #fff;
    color: var(--cor-texto-secundario);
    transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}

.opcao-etiqueta input:checked + span {
    border-color: var(--cor-primaria);
    color: var(--cor-primaria);
    background-color: var(--cor-fundo-alternado);
}

.opcao-etiqueta input:checked + span::before {
    content: "✓ ";
}

.opcao-etiqueta input:focus-visible + span {
    outline: 2px solid var(--cor-primaria-clara);
    outline-offset: 1px;
}

.campo-formulario:has(> input[type="checkbox"]) {
    display: flex;
    flex-direction: row-reverse;
    align-items: center;
    justify-content: flex-end;
    gap: var(--espaco-sm);
    padding: 9px var(--espaco-md);
    background-color: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: 6px;
}

.campo-formulario:has(> input[type="checkbox"]:checked) {
    border-color: var(--cor-secundaria);
    background-color: var(--cor-secundaria-mais-clara);
}

.campo-formulario:has(> input[type="checkbox"]) label {
    display: inline;
    min-height: 0;
    margin-bottom: 0;
    font-size: 14px;
    font-weight: 500;
    color: var(--cor-texto);
    cursor: pointer;
}

.campo-formulario input[type="checkbox"] {
    width: 18px;
    height: 18px;
    max-width: none;
    padding: 0;
    border-radius: 4px;
    accent-color: var(--cor-secundaria);
    cursor: pointer;
    flex-shrink: 0;
}

/* Seleção de taxas (caixa-dropdown) */

.campo-taxas-dropdown {
    position: relative;
}

.caixa-seletor-taxas {
    width: 100%;
    max-width: 240px;
    padding: 10px;
    border: 1px solid var(--cor-borda);
    border-radius: 6px;
    font-family: var(--fonte-principal);
    font-size: 14px;
    color: var(--cor-texto);
    background-color: #fff;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-sm);
    box-sizing: border-box;
}

.caixa-seletor-taxas.aberta {
    border-color: var(--cor-primaria);
}

.texto-resumo-taxas {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.texto-resumo-taxas.vazio {
    color: #a7b0c0;
}

.seta-taxas {
    font-size: 10px;
    color: var(--cor-texto-secundario);
    transition: transform 0.15s ease;
    flex-shrink: 0;
}

.caixa-seletor-taxas.aberta .seta-taxas {
    transform: rotate(180deg);
}

.painel-opcoes-taxas {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    width: max(100%, 260px);
    background: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(20, 30, 60, 0.12);
    padding: var(--espaco-sm);
    z-index: 20;
    display: none;
}

.painel-opcoes-taxas.aberto {
    display: block;
}

.campo-taxas-dropdown .opcao-taxa {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: var(--espaco-sm);
    border-radius: 6px;
    font-size: 14px;
    font-weight: 400;
    color: var(--cor-texto);
    cursor: pointer;
    min-height: 0;
    margin: 0;
}

.campo-taxas-dropdown .opcao-taxa:hover {
    background: var(--cor-fundo-alternado);
}

.opcao-taxa input {
    margin: 2px 0 0;
    flex-shrink: 0;
    width: auto;
    max-width: none;
}

.titulo-taxa {
    flex: 1;
    min-width: 0;
}

.preco-taxa {
    margin-left: auto;
    color: var(--cor-texto-secundario);
    font-variant-numeric: tabular-nums;
    font-size: 13px;
    white-space: nowrap;
    flex-shrink: 0;
    padding-top: 1px;
}

.caixa-total-taxas {
    width: 100%;
    max-width: 240px;
    padding: 10px;
    border: 1px solid var(--cor-borda);
    border-radius: 6px;
    background-color: var(--cor-fundo-alternado);
    font-family: var(--fonte-principal);
    font-size: 14px;
    font-weight: 600;
    color: var(--cor-titulo);
    font-variant-numeric: tabular-nums;
    box-sizing: border-box;
}

/* Seleção múltipla genérica (filtros de categoria) — mesmo padrão visual
   do dropdown de taxas acima, sem preço/total, pra permitir marcar vários
   valores ao mesmo tempo num filtro. */

.campo-multisselecao {
    position: relative;
}

.caixa-seletor-multi {
    width: 100%;
    max-width: 240px;
    padding: 10px;
    border: 1px solid var(--cor-borda);
    border-radius: 6px;
    font-family: var(--fonte-principal);
    font-size: 14px;
    color: var(--cor-texto);
    background-color: #fff;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-sm);
    box-sizing: border-box;
}

.caixa-seletor-multi.aberta {
    border-color: var(--cor-primaria);
}

.texto-resumo-multi {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.texto-resumo-multi.vazio {
    color: #a7b0c0;
}

.seta-multi {
    font-size: 10px;
    color: var(--cor-texto-secundario);
    transition: transform 0.15s ease;
    flex-shrink: 0;
}

.caixa-seletor-multi.aberta .seta-multi {
    transform: rotate(180deg);
}

.painel-opcoes-multi {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    width: max(100%, 220px);
    max-height: 260px;
    overflow-y: auto;
    background: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(20, 30, 60, 0.12);
    padding: var(--espaco-xs);
    z-index: 20;
    display: none;
}

.painel-opcoes-multi.aberto {
    display: block;
}

.opcao-multi {
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 1px 6px;
    border-radius: 6px;
    font-size: 11px;
    line-height: 1.25;
    font-weight: 400;
    color: var(--cor-texto);
    cursor: pointer;
    min-height: 0;
    margin: 0;
}

.opcao-multi:hover {
    background: var(--cor-fundo-alternado);
}

.opcao-multi input {
    margin: 0;
    flex-shrink: 0;
    width: 13px;
    height: 13px;
    max-width: none;
}

/* Barra de ações (Locação) */

.barra-acoes {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    padding-bottom: 18px;
    border-bottom: 1px solid var(--cor-borda-leve);
}

.botao-acao {
    background-color: #fff;
    border: 1px solid var(--cor-borda);
    color: var(--cor-texto-secundario);
    border-radius: var(--raio-borda-cta);
    padding: 10px 18px;
    font-family: var(--fonte-principal);
    font-weight: 500;
    font-size: 14px;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-sm);
    /* Botão nunca deve quebrar o próprio texto em 2 linhas (achado real
       2026-09-09: "Próxima →" da paginação — igual em Locação/Rescisão/
       Vendas, mesmo botão — quebrava "Próxima" e "→" em linhas separadas
       numa janela estreita, ficando enorme e feio). */
    white-space: nowrap;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}

.botao-acao:hover {
    background-color: var(--cor-fundo-alternado);
    border-color: var(--cor-primaria-clara);
    color: var(--cor-primaria);
}

/* Estado "selecionado" de um par/grupo de botões de apoio que alterna a
   visão da tela (ex.: Solicitações: individual × agrupado por pessoa). */
.botao-acao--ativo,
.botao-acao--ativo:hover {
    border-color: var(--cor-primaria);
    color: var(--cor-primaria);
    background-color: var(--cor-fundo-alternado);
}

/* Abas de uma área (ex.: Financeiro: Receitas e Despesas / Extrato /
   Solicitações) ou de situação de uma lista (Pendentes / Arquivadas / Todas).
   Visual que o Financeiro do Jurídico já usava inline; virou padrão 26/09. */
.abas {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-xs);
    margin-bottom: var(--espaco-lg);
    border-bottom: 1px solid var(--cor-borda);
}

.aba {
    padding: var(--espaco-sm) 14px;
    margin-bottom: -1px;
    font-size: 13px;
    font-weight: 600;
    color: var(--cor-texto-secundario);
    text-decoration: none;
    border-bottom: 2px solid transparent;
}

.aba:hover {
    color: var(--cor-primaria);
}

.aba--ativa {
    color: var(--cor-primaria);
    border-bottom-color: var(--cor-primaria);
}

.botao-acao .icone-botao {
    font-size: 15px;
    line-height: 1;
}

/* Excluir com texto — topo da tela de um registro e "Excluir selecionados".
   Padrão único aprovado 25/09 (antes eram ~10 visuais diferentes). */
.botao-acao--perigo {
    color: var(--cor-reprovado);
}
.botao-acao--perigo:hover {
    background-color: var(--cor-reprovado-mais-clara);
    border-color: var(--cor-reprovado);
    color: var(--cor-reprovado-escura);
}
.botao-acao[disabled] {
    opacity: .45;
    cursor: not-allowed;
}

/* Excluir só com ícone — linhas de tabela e itens dentro de um registro.
   Sempre com title/aria-label dizendo o que apaga ("Excluir comentário"). */
.botao-excluir-icone {
    display: inline-grid;
    place-items: center;
    width: 32px;
    height: 32px;
    padding: 0;
    border-radius: var(--raio-borda-cta);
    border: 1px solid transparent;
    background: transparent;
    color: var(--cor-reprovado);
    cursor: pointer;
    flex-shrink: 0;
    text-decoration: none;
    transition: background-color .15s ease, border-color .15s ease;
}
.botao-excluir-icone:hover {
    background-color: var(--cor-reprovado-mais-clara);
    border-color: #f3c9c3;
}
.botao-excluir-icone .icone-svg {
    vertical-align: 0;
}

.botao-acao--somente-icone {
    width: 40px;
    height: 40px;
    padding: 0;
    flex-shrink: 0;
}

.selo-contagem {
    background: var(--cor-secundaria);
    color: var(--cor-titulo);  /* 7:1 sobre o laranja; branco dava 2,6:1 (auditoria 25/10) */
    font-size: 11px;
    font-weight: 700;
    border-radius: 999px;
    padding: 1px 7px;
    font-variant-numeric: tabular-nums;
}

/* Layout com barra lateral (navegação da área, ex. Locação) — usado só
   dentro do block content da tela, não no <main> do base.html, porque a
   barra é específica da área (ver regra-navegacao-menu-topo: funcionalidades
   de área nunca vão no menu do topo, ficam na tela da própria área). */

.layout-com-lateral {
    display: flex;
    align-items: flex-start;
    gap: var(--espaco-xxl);
}

.barra-lateral-area {
    width: 180px;
    flex-shrink: 0;
    background: var(--cor-sombra);
    border: 1px solid var(--cor-sombra);
    border-radius: var(--raio-borda-bloco);
    padding: var(--espaco-lg) 10px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    transition: width 0.15s ease;
}

.conteudo-com-lateral {
    flex: 1;
    min-width: 0;
}

.item-lateral {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px var(--espaco-md);
    border-radius: 8px;
    font-size: 14px;
    font-weight: 500;
    color: rgba(255, 255, 255, .78);
    text-decoration: none;
    background: none;
    border: none;
    border-left: 3px solid transparent;
    width: 100%;
    text-align: left;
    cursor: pointer;
    font-family: var(--fonte-principal);
}

.item-lateral:hover {
    background-color: rgba(255, 255, 255, .07);
    color: #fff;
}

.item-lateral--ativo,
.item-lateral--ativo:hover {
    background-color: rgba(255, 121, 0, .18);
    border-left-color: var(--cor-secundaria);
    color: #fff;
}

.item-lateral span:first-child {
    display: flex;
    align-items: center;
    gap: 10px;
}

/* Menu lateral recolhível (pedido da Thais 21/09: "ocupar mais espaço na
   tela", pra todos os módulos que usam .barra-lateral-area). O HTML de
   cada módulo continua igual — quem separa o texto num
   .rotulo-item-lateral (pra poder esconder só ele) e gera um monograma
   pros itens sem ícone (caso do Jurídico, que não tem ícones no menu) é o
   script no fim de base.html; aqui só fica a aparência recolhida. */
.barra-lateral-area--recolhida {
    width: 52px;
    padding-left: 6px;
    padding-right: 6px;
}

.barra-lateral-area--recolhida .item-lateral {
    justify-content: center;
    padding-left: var(--espaco-sm);
    padding-right: var(--espaco-sm);
}

/* !important aqui de propósito: ".item-lateral span:first-child" (acima)
   é mais específica que essas regras por ter um seletor de elemento
   (span) a mais na conta de especificidade — sem isso, ela vence e o
   rótulo/monograma ficam sempre visíveis mesmo recolhido/expandido. */
.barra-lateral-area--recolhida .item-lateral > *:nth-child(n+2),
.barra-lateral-area--recolhida .rotulo-item-lateral,
.barra-lateral-area--recolhida .submenu-lateral,
.barra-lateral-area--recolhida .seta-submenu-lateral {
    display: none !important;
}

.monograma-item-lateral {
    display: none;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    border-radius: 6px;
    background: rgba(255, 255, 255, .12);
    color: #fff;
    font-size: 10px;
    font-weight: 700;
    flex-shrink: 0;
}

.barra-lateral-area--recolhida .monograma-item-lateral {
    display: inline-flex !important;
}

.botao-recolher-lateral {
    border-top: 1px solid rgba(255, 255, 255, .12);
    margin-top: 6px;
}

.icone-recolher-lateral {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    flex-shrink: 0;
    font-weight: 700;
    font-size: 13px;
}

.divisor-lateral {
    height: 1px;
    background: rgba(255, 255, 255, .12);
    margin: 10px var(--espaco-xs);
}

.submenu-lateral {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.item-lateral-sub {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: var(--espaco-sm) var(--espaco-md) var(--espaco-sm) 30px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 500;
    color: rgba(255, 255, 255, .68);
    text-decoration: none;
}

.item-lateral-sub:hover {
    background-color: rgba(255, 255, 255, .07);
    color: #fff;
}

.item-lateral-sub--ativo,
.item-lateral-sub--ativo:hover {
    background-color: rgba(255, 121, 0, .18);
    color: #fff;
}

/* Terceiro nível do menu lateral (ex.: Minutas Contratuais dentro do
Console) - mesma linguagem visual do .item-lateral-sub, só mais recuado e
com fonte um pouco menor, pra marcar a hierarquia. */
.item-lateral-sub-sub {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    padding: 7px var(--espaco-md) 7px 46px;
    border-radius: 8px;
    font-size: 12.5px;
    font-weight: 500;
    color: rgba(255, 255, 255, .68);
    text-decoration: none;
}

.item-lateral-sub-sub:hover {
    background-color: rgba(255, 255, 255, .07);
    color: #fff;
}

.item-lateral-sub-sub .icone-svg {
    width: 13px;
    height: 13px;
}

.seta-submenu-lateral {
    font-size: 13px;
    transition: transform 0.15s ease;
}

.item-lateral[aria-expanded="true"] .seta-submenu-lateral {
    transform: rotate(180deg);
}

/* Rótulo de agrupamento dentro de um .submenu-lateral (ex.: "Negociação" /
   "Partes" dentro do menu do processo em Locação) — pra quando os
   subitens de um item expansível têm categorias próprias, sem precisar de
   mais um nível de menu. */
.rotulo-grupo-lateral {
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: #C2793D;
    padding: var(--espaco-md) var(--espaco-md) var(--espaco-xs) 30px;
}

/* Botão "abrir menu" no celular, pra barra lateral "longa" (ver
   .barra-lateral-area--longa abaixo) — escondido no desktop. */
.botao-abrir-lateral {
    display: none;
}

/* Ícone de linha (SVG), usado no lugar de emoji dentro de botões/textos. */
.icone-svg {
    width: 15px;
    height: 15px;
    flex-shrink: 0;
    vertical-align: -3px;
}

/* Sininho de notificações, barra superior */
.sino-notificacoes {
    position: relative;
    display: flex;
    align-items: center;
}

.sino-notificacoes button {
    background: none;
    border: none;
    color: #fff;
    cursor: pointer;
    padding: var(--espaco-xs);
    display: flex;
    align-items: center;
    position: relative;
}

.sino-notificacoes .icone-svg {
    width: 19px;
    height: 19px;
}

.sino-notificacoes .contador-notificacoes {
    position: absolute;
    top: -2px;
    right: -2px;
    background: var(--cor-secundaria);
    color: var(--cor-titulo);
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    padding: 2px var(--espaco-xs);
    border-radius: 999px;
    min-width: 14px;
    text-align: center;
}

.sino-notificacoes .painel-notificacoes {
    display: none;
    position: absolute;
    top: calc(100% + 10px);
    right: 0;
    width: 340px;
    max-height: 400px;
    overflow-y: auto;
    background: #fff;
    color: var(--cor-texto);
    border-radius: 10px;
    box-shadow: var(--sombra-navbar);
    z-index: 20;
    text-align: left;
}

.sino-notificacoes .painel-notificacoes.aberto {
    display: block;
}

.sino-notificacoes .painel-notificacoes__cabecalho {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--espaco-md) 14px;
    border-bottom: 1px solid #eee;
    font-size: 13px;
    font-weight: 600;
    color: var(--cor-titulo);
}

.sino-notificacoes .painel-notificacoes__cabecalho button {
    background: none;
    border: none;
    color: var(--cor-texto-secundario);
    font-size: 12px;
    font-weight: 500;
    cursor: pointer;
    padding: 0;
}

.sino-notificacoes .painel-notificacoes__vazio {
    padding: var(--espaco-xl) 14px;
    font-size: 13px;
    color: var(--cor-texto-secundario);
}

.sino-notificacoes .item-notificacao {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    padding: var(--espaco-md) 14px;
    border-bottom: 1px solid #f2f2f2;
    font-size: 13px;
}

.sino-notificacoes .item-notificacao:last-child {
    border-bottom: none;
}

.sino-notificacoes .item-notificacao__titulo {
    font-weight: 600;
    color: var(--cor-titulo);
    margin-bottom: 2px;
}

.sino-notificacoes .item-notificacao__mensagem {
    color: var(--cor-texto);
    white-space: pre-line;
}

.sino-notificacoes .item-notificacao__hora {
    color: var(--cor-texto-secundario);
    font-size: 11px;
    margin-top: var(--espaco-xs);
}

.sino-notificacoes .item-notificacao form {
    margin: 0;
    flex-shrink: 0;
}

.sino-notificacoes .item-notificacao button[type="submit"] {
    background: none;
    border: none;
    color: var(--cor-texto-secundario);
    cursor: pointer;
    font-size: 16px;
    line-height: 1;
    padding: 0 2px;
}

.sino-notificacoes .item-notificacao button[type="submit"]:hover {
    color: var(--cor-reprovado);
}

/* Ícone "Empresa" na barra superior (2026-09-09) — reúne itens que não são
   exclusivos de um módulo (Administradoras, Usuários, Diagnóstico,
   Relatório), antes espalhados dentro do console de Locação e invisíveis
   pra quem trabalha só em Rescisão/Vendas. Mesmo padrão visual do
   .sino-notificacoes acima. */
.painel-empresa-topo {
    position: relative;
    display: flex;
    align-items: center;
}

/* Botão em pílula, mesmo padrão do .seletor-papel__botao ao lado — o
   ícone sozinho (2026-09-09) era pequeno demais e genérico demais pra
   identificar sem passar o mouse; texto "Empresa" resolve isso. */
.painel-empresa-topo > button {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.3);
    color: #fff;
    font: inherit;
    font-size: 13px;
    font-weight: 500;
    padding: 6px var(--espaco-md) 6px 10px;
    border-radius: 999px;
    cursor: pointer;
}

.painel-empresa-topo > button:hover {
    background: rgba(255, 255, 255, 0.22);
}

.painel-empresa-topo .icone-svg {
    width: 17px;
    height: 17px;
}

.painel-empresa {
    display: none;
    position: absolute;
    top: calc(100% + 10px);
    right: 0;
    width: 230px;
    background: #fff;
    color: var(--cor-texto);
    border-radius: 10px;
    box-shadow: var(--sombra-navbar);
    padding: 6px;
    z-index: 20;
    text-align: left;
}

.painel-empresa.aberto {
    display: block;
}

.item-painel-empresa {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 10px;
    border-radius: 8px;
    border: none;
    background: none;
    color: var(--cor-texto);
    font-size: 13.5px;
    font-family: inherit;
    text-decoration: none;
    cursor: pointer;
}

.item-painel-empresa:hover {
    background-color: var(--cor-fundo-alternado);
    color: var(--cor-primaria);
}

.item-painel-empresa .seta-submenu-lateral {
    margin-left: auto;
}

.submenu-painel-empresa {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.item-painel-empresa-sub {
    display: block;
    padding: var(--espaco-sm) 10px var(--espaco-sm) 30px;
    border-radius: 8px;
    font-size: 13px;
    color: var(--cor-texto);
    text-decoration: none;
}

.item-painel-empresa-sub:hover {
    background-color: var(--cor-fundo-alternado);
    color: var(--cor-primaria);
}

.divisor-painel-empresa {
    height: 1px;
    background: var(--cor-borda-leve);
    margin: 6px var(--espaco-xs);
}

/* Rótulo do módulo atual + seletor de módulo em grade, no cabeçalho (opção
   escolhida pela Thais 23/09 entre 4 mockups: em vez de todos os módulos
   soltos numa lista que quebra linha, a barra mostra só o módulo atual e
   o ícone de grade abre um painel com todos pra escolher). Reaproveita o
   ícone que antes só linkava pra "home" sem funcionar como seletor de
   verdade. */
.rotulo-modulo-atual {
    color: #fff;
    font-size: 14px;
    font-weight: 600;
}

.seletor-modulo-topo {
    position: relative;
    display: flex;
    align-items: center;
    margin-right: auto;
}

.seletor-modulo-topo > button {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.3);
    color: #fff;
    font: inherit;
    font-size: 13px;
    font-weight: 500;
    padding: 6px var(--espaco-md) 6px 10px;
    border-radius: 999px;
    cursor: pointer;
}

.seletor-modulo-topo > button:hover {
    background: rgba(255, 255, 255, 0.22);
}

.grade-modulos {
    display: none;
    position: absolute;
    top: calc(100% + 10px);
    left: 0;
    width: 340px;
    background: #fff;
    border-radius: 12px;
    box-shadow: var(--sombra-navbar);
    padding: var(--espaco-md);
    z-index: 20;
    text-align: left;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
}

.grade-modulos.aberto {
    display: grid;
}

.item-modulo {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    text-decoration: none;
    color: var(--cor-texto);
    padding: var(--espaco-md) var(--espaco-xs);
    border-radius: 10px;
    text-align: center;
    font-size: 12px;
    font-weight: 500;
}

.item-modulo:not(.item-modulo--indisponivel):hover {
    background-color: var(--cor-fundo-alternado);
}

.item-modulo.atual {
    color: var(--cor-secundaria-texto);
}

.item-modulo--indisponivel {
    color: var(--cor-cinza-medio);
    cursor: default;
}

.icone-modulo {
    width: 34px;
    height: 34px;
    border-radius: 9px;
    background: var(--cor-primaria);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 13px;
}

.item-modulo.atual .icone-modulo {
    background: var(--cor-secundaria);
}

/* Ícone do módulo no lugar das iniciais (Thais 27/09/2026) */
.icone-modulo .icone-svg { width: 18px; height: 18px; }

.item-modulo--indisponivel .icone-modulo {
    background: var(--cor-cinza-claro);
    color: var(--cor-cinza-medio);
}

/* Seletor de papel no topo (pedido da Thais, 2026-08-21) — só aparece pra
   quem tem mais de um vínculo (ver request.membros_disponiveis,
   TenantMiddleware). Bolinha laranja (cor de destaque, ver identidade
   visual) sinaliza "isso é uma escolha sua, dá pra trocar". */
.seletor-papel {
    position: relative;
}

.seletor-papel__botao {
    display: flex;
    align-items: center;
    gap: var(--espaco-sm);
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.3);
    color: #fff;
    font: inherit;
    font-size: 13px;
    font-weight: 500;
    padding: 6px 10px 6px var(--espaco-md);
    border-radius: 999px;
    cursor: pointer;
}

.seletor-papel__botao:hover {
    background: rgba(255, 255, 255, 0.22);
}

.seletor-papel__bolinha {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--cor-secundaria);
    flex: none;
}

.seletor-papel__seta {
    opacity: 0.85;
    font-size: 10px;
}

.seletor-papel__menu {
    display: none;
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    background: #fff;
    border-radius: 10px;
    box-shadow: var(--sombra-navbar);
    min-width: 220px;
    padding: 6px;
    z-index: 20;
    text-align: left;
}

.seletor-papel__menu.aberto {
    display: block;
}

.seletor-papel__legenda {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--cor-texto-secundario);
    padding: var(--espaco-sm) 10px var(--espaco-xs);
}

.seletor-papel__item {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    background: none;
    border: none;
    text-align: left;
    padding: 9px 10px;
    border-radius: 8px;
    font: inherit;
    font-size: 13.5px;
    color: var(--cor-texto);
    cursor: pointer;
}

.seletor-papel__item:hover {
    background: var(--cor-fundo);
}

.seletor-papel__item.ativo {
    background: var(--cor-secundaria-mais-clara);
    color: #7a3d00;
    font-weight: 600;
}

.seletor-papel__check {
    color: var(--cor-secundaria-texto);
    font-weight: 700;
    font-size: 13px;
}

/* Tabela de processos — padding/borda base movidos pra cá 24/09 (antes
   repetidos por célula via style="" em cada template que usa essa
   tabela — mesma limpeza de duplicação já feita em .tabela-lista). As
   variantes .tabela-compacta/tabela-super-compacta/tabela-ultra-compacta
   continuam sobrescrevendo com !important. */
.tabela-processos {
    width: 100%;
    border-collapse: collapse;
}

.tabela-processos thead tr {
    text-align: left;
    border-bottom: 1px solid var(--cor-borda-leve);
}

.tabela-processos th,
.tabela-processos td {
    padding: 10px;
}

.tabela-processos tbody tr {
    border-bottom: 1px solid var(--cor-borda-leve);
}

.tabela-processos th a {
    color: var(--cor-texto-secundario);
    text-decoration: none;
    font-weight: 600;
}

.tabela-processos th a:hover {
    color: var(--cor-primaria);
}

.alca-redimensionar-coluna {
    position: absolute;
    top: 0;
    right: -4px;
    width: 8px;
    height: 100%;
    cursor: col-resize;
    z-index: 5;
    user-select: none;
}

.alca-redimensionar-coluna:hover,
.alca-redimensionar-coluna.redimensionando {
    background: var(--cor-primaria-clara);
    opacity: 0.6;
}

/* min-width == max-width de propósito: cada coluna precisa reservar sempre
   a mesma largura, senão a largura "natural" da tabela varia conforme o
   comprimento do texto de cada linha (célula com texto curto ocupa menos
   espaço que uma com texto longo). Como a densidade automática (ver JS em
   lista_processos.html) decide o tamanho da fonte medindo essa largura
   natural, uma largura variável fazia a fonte mudar sozinha ao trocar a
   ordenação/paginação — trocar de página muda quais linhas aparecem, não
   a quantidade de colunas, então a largura não devia mudar por causa disso. */
.celula-tabela {
    min-width: 220px;
    max-width: 220px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Status tem rótulos mais longos ("Aguardando finalização de assinaturas") —
   ganha um limite maior que as outras colunas pra não cortar o texto. */
.celula-campo-status {
    min-width: 300px;
    max-width: 300px;
}

/* Densidade automática: quanto mais colunas escolhidas (ou menos espaço a tabela
   tiver na tela), menor a fonte/espaçamento, pra caber sem precisar de rolagem
   horizontal. As classes tabela-compacta/tabela-super-compacta/tabela-ultra-compacta
   são calculadas no servidor pela quantidade de colunas, mas também podem ser
   aplicadas/escaladas no navegador (ver script em lista_processos.html) se mesmo
   assim não couber na tela do usuário. */
.tabela-compacta th,
.tabela-compacta td {
    font-size: 13px;
    padding: 7px !important;
}

.tabela-compacta .celula-tabela {
    min-width: 160px;
    max-width: 160px;
}

.tabela-compacta .celula-campo-status {
    min-width: 260px;
    max-width: 260px;
}

.tabela-compacta .badge-status {
    font-size: 12px;
    padding: 3px 9px;
}

.tabela-super-compacta th,
.tabela-super-compacta td {
    font-size: 12px;
    padding: 5px !important;
}

.tabela-super-compacta .celula-tabela {
    min-width: 130px;
    max-width: 130px;
}

.tabela-super-compacta .celula-campo-status {
    min-width: 240px;
    max-width: 240px;
}

.tabela-super-compacta .badge-status {
    font-size: 11px;
    padding: 2px 7px;
}

.tabela-ultra-compacta th,
.tabela-ultra-compacta td {
    font-size: 11px;
    padding: var(--espaco-xs) !important;
}

.tabela-ultra-compacta .celula-tabela {
    min-width: 100px;
    max-width: 100px;
}

.tabela-ultra-compacta .celula-campo-status {
    min-width: 210px;
    max-width: 210px;
}

.tabela-ultra-compacta .badge-status {
    font-size: 10px;
    padding: 2px 6px;
}

.botao-icone {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 16px;
    line-height: 1;
    padding: var(--espaco-xs);
    text-decoration: none;
}

/* Aviso de limite de chamadas à D4Sign (item 33 do Raio-X do ONE) —
   usado no Diagnóstico e na tela de envio de assinatura digital. */
.diag-limite {
    margin-top: var(--espaco-lg);
    padding: 14px var(--espaco-lg);
    border-radius: 8px;
    font-size: 13px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--espaco-md);
}
.diag-limite.diag-limite--ok {
    background: var(--cor-fundo-alternado);
    color: var(--cor-texto-secundario);
}
.diag-limite.diag-limite--perto {
    background: var(--cor-secundaria-mais-clara);
    color: var(--cor-secundaria-texto);
}

/* Indicador de carregamento em ações demoradas (item 19 do Raio-X do ONE)
   — aplicado automaticamente pelo script global em base.html. */
.botao-carregando {
    cursor: wait !important;
    opacity: 0.75;
    padding-left: 34px !important;
    position: relative;
}
.botao-carregando::before {
    animation: girar-carregando 0.7s linear infinite;
    border: 2px solid currentColor;
    border-radius: 50%;
    border-right-color: transparent;
    border-top-color: transparent;
    content: "";
    height: 14px;
    left: 12px;
    opacity: 0.85;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 14px;
}
@keyframes girar-carregando {
    to { transform: translateY(-50%) rotate(360deg); }
}

.link-menu-topo {
    color: #fff;
    text-decoration: none;
    font-weight: 500;
    font-size: 15px;
}

/* ---------- Responsivo (mobile first, 2026-08-21) ----------
   Ponto de partida: acesso de corretores ao ONE (Pipeline, Visão Geral,
   Detalhes da Negociação) também precisa funcionar bem no celular, já
   que é assim que eles costumam abrir o sistema. Visão Geral/Detalhes da
   Negociação já tinham um shell responsivo próprio (_shell_processo.html,
   2026-08-15); esta seção cobre o cabeçalho global (usado em toda tela,
   inclusive Pipeline) e o layout de barra lateral mais antigo do Pipeline
   (.layout-com-lateral), que não tinha nenhum ajuste ainda. Um breakpoint
   só (640px) — o app não tem uma faixa "tablet" distinta hoje. */
@media (max-width: 640px) {
    .cabecalho-topo-base {
        justify-content: flex-start;
    }
    .nav-topo-base ul {
        gap: 14px !important;
        font-size: 13px;
    }
    .info-usuario-topo {
        width: 100%;
        justify-content: space-between !important;
    }
    /* Nome completo do usuário ocupa a linha inteira num nome longo — some
       no celular (o "Sair" e o sino continuam); tela estreita já mostra o
       usuário logado noutro lugar quando precisa (ex. cabeçalho da marca). */
    .info-usuario-topo > span {
        display: none;
    }

    .layout-com-lateral {
        display: block;
    }
    .barra-lateral-area {
        width: 100%;
        margin-bottom: 14px;
    }
    /* A barra lateral do Pipeline fica sempre visível no celular (ao
       contrário do menu do processo em _shell_processo.html) — pro
       corretor ela já é curta (só "Pipeline"), e pra quem tem acesso
       completo, empilhada faz mais sentido que escondida atrás de um
       botão extra numa tela que é a porta de entrada do sistema. */
    .conteudo-com-lateral {
        min-width: 0;
    }

    /* Recolher não ajuda no celular (a barra já fica empilhada em largura
       total, ver comentário acima) — esconde o botão em vez de deixar um
       clique que não muda nada visível. */
    .botao-recolher-lateral {
        display: none;
    }

    /* Barra lateral "longa" (ex. menu do processo em Locação, com 10+
       abas) — ao contrário da barra curta do Pipeline (sempre empilhada
       visível, ver acima), essa ficaria pesada demais empilhada por
       padrão. Some no celular até clicar em .botao-abrir-lateral.
       Modificador pra qualquer barra lateral futura com o mesmo
       problema, não só a do processo (24/09). */
    .barra-lateral-area--longa {
        display: none;
    }
    .barra-lateral-area--longa.barra-lateral-area--aberta {
        display: flex;
    }
    .botao-abrir-lateral {
        display: flex;
        align-items: center;
        gap: var(--espaco-sm);
        width: 100%;
        margin-bottom: 14px;
        padding: 10px 14px;
        border-radius: 8px;
        border: 1px solid var(--cor-borda);
        background: #fff;
        color: var(--cor-titulo);
        font-size: 13.5px;
        font-weight: 600;
        font-family: var(--fonte-principal);
        cursor: pointer;
    }

    .cartao {
        padding: 14px var(--espaco-lg);
    }
}

/* Bloco "Atualização do processo" — componente único
   (templates/componentes/atualizacao_processo.html), usado na Visão Geral de
   Locação, Rescisão e Vendas. Antes eram 3 cópias com <style> próprio
   (unificado 25/09). */
.atualizacao-processo{background:var(--cor-fundo);border-radius:10px;padding:14px var(--espaco-lg);margin-bottom:var(--espaco-xl);scroll-margin-top:90px}
.atualizacao-processo-titulo{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--cor-texto-secundario);margin-bottom:10px}
.atualizacao-processo-vazio{font-size:13px;color:var(--cor-texto-secundario);font-style:italic;margin:0}
.atualizacao-processo .ver-historico{margin-top:10px}
.atualizacao-processo .ver-historico summary{font-size:11.5px;font-weight:600;color:var(--cor-primaria);cursor:pointer;list-style:none}
.atualizacao-processo .ver-historico summary::-webkit-details-marker{display:none}
.atualizacao-processo-historico{margin-top:var(--espaco-sm);display:flex;flex-direction:column;gap:0}
.atualizacao-processo-item{font-size:12.5px;line-height:1.5;padding-top:9px;margin-top:9px;border-top:1px solid var(--cor-borda);display:flex;justify-content:space-between;gap:8px}
.atualizacao-processo-item:first-child{padding-top:0;margin-top:0;border-top:none}
.atualizacao-processo-item .autor{font-weight:700;color:var(--cor-titulo)}
.atualizacao-processo-item .quando{color:var(--cor-texto-secundario);font-size:11px}
.atualizacao-processo-item .texto{margin-top:2px}
.atualizacao-processo-form{display:flex;gap:var(--espaco-sm);margin-top:12px}
.atualizacao-processo-form input[type=text]{flex:1;font:inherit;font-size:13px;padding:9px var(--espaco-md);border-radius:8px;border:1px solid var(--cor-borda)}
.atualizacao-processo-form button{font:inherit;font-size:13px;font-weight:600;color:#fff;background:var(--cor-primaria);border:none;border-radius:8px;padding:9px var(--espaco-lg);cursor:pointer}
.atualizacao-processo .impl-item-menu{position:relative;flex-shrink:0}
.atualizacao-processo .impl-item-menu summary{list-style:none;cursor:pointer;color:var(--cor-texto-secundario)}
.atualizacao-processo .impl-item-menu summary::-webkit-details-marker{display:none}
.atualizacao-processo .impl-item-menu .menu-caixa{
  position:absolute;left:auto;right:0;top:calc(100% + 4px);z-index:5;background:#fff;
  border:1px solid var(--cor-borda);border-radius:8px;box-shadow:0 8px 24px -10px rgba(20,30,60,.25);
  padding:var(--espaco-sm);width:220px;max-width:min(220px, 80vw);
  /* Existe outra regra ".impl-item-menu .menu-caixa" na página (comentário
     de tarefa, tag, tipo etc.) com left:0 e width:300px fixos — como CSS
     mistura propriedades de regras diferentes que não competem entre si
     (essa não declara "right", a nossa não declarava "left"), o menu
     abria com left:0 herdado dela e ficava 300px fora da tela (achado
     2026-08-09, olhando o computed style de verdade no navegador). Precisa
     sobrescrever left/width aqui explicitamente, não só right/min-width. */
}
.atualizacao-processo .impl-item-menu textarea{width:100%;font:inherit;font-size:12px;border:1px solid var(--cor-borda);border-radius:6px;padding:6px var(--espaco-sm);margin-bottom:6px}
.atualizacao-processo .impl-item-menu .linha-botoes{display:flex;justify-content:flex-end;gap:6px}
.atualizacao-processo .impl-item-menu .linha-botoes button{font-size:11.5px;padding:var(--espaco-xs) 10px;border-radius:6px;border:1px solid var(--cor-borda);background:#fff;cursor:pointer}
.atualizacao-processo .impl-item-menu .linha-botoes button.excluir{color:var(--cor-reprovado);border-color:#F3C9C3}

/* ---------- Casca das telas de um processo ----------
   Componente único templates/componentes/processo_shell.html (Locação,
   Rescisão, Vendas). Até 25/09 estas regras eram copiadas no <style> de
   cada _shell_processo.html (Vendas tinha perdido .acoes-topo e
   .subtitulo-nome-data; Rescisão/Vendas, o max-width:none dos textareas
   largos). Navegação (menu lateral) usa .barra-lateral-area/.item-lateral
   definidos acima; aqui só o CONTEÚDO das telas do processo. */
.tela-processo{background:var(--cor-fundo)}

.tela-processo .topo-pagina{
  display:flex;align-items:flex-end;justify-content:space-between;gap:var(--espaco-xl);margin-bottom:var(--espaco-xxl);flex-wrap:wrap;
}
.tela-processo .topo-pagina h1{font-size:24px;margin:0}
.tela-processo .topo-pagina .subtitulo{font-size:13px;color:var(--cor-texto-secundario);margin-top:6px}
.tela-processo .topo-pagina .subtitulo-nome-data{font-size:16px;font-weight:600;color:var(--cor-sombra);margin:2px 0 0}
.tela-processo .acoes-topo{display:flex;gap:10px;flex-wrap:wrap}

.tela-processo .secao{padding:26px 28px;margin-bottom:var(--espaco-xl);scroll-margin-top:24px}
.tela-processo .secao-cabecalho{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--espaco-xl);gap:16px}
.tela-processo .secao-titulo-grupo{display:flex;align-items:center;gap:12px}
.tela-processo .secao-icone{
  width:34px;height:34px;border-radius:9px;background:var(--cor-primaria-mais-clara);color:var(--cor-primaria);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.tela-processo .secao-icone svg{width:17px;height:17px}
.tela-processo .secao-titulo-grupo h4{font-size:16px;font-weight:700;margin:0;color:var(--cor-titulo)}
.tela-processo .secao-titulo-grupo .contagem{font-size:12px;color:var(--cor-texto-secundario);font-weight:500;margin-top:1px}

.tela-processo .grade-campos{grid-template-columns:repeat(auto-fill, minmax(min(260px, 100%), 1fr))}
/* Preenchimento sutil nos campos (igual ao mockup aprovado) — usa o mesmo
   tom do fundo da página (--cor-fundo), não o branco do card, pra criar
   contraste entre "campo" e "cartão" sem introduzir uma cor nova. */
.tela-processo .campo-formulario input,
.tela-processo .campo-formulario select,
.tela-processo .campo-formulario textarea{
  /* min(260px, 100%), não só 260px fixo — numa tela bem estreita (320px,
     ex. iPhone SE) o padding da .secao/.cartao-pessoa some com espaço
     suficiente pra sobrar menos que 260px, e o campo empurrava a página
     ~2px além da viewport (achado real 2026-08-21, responsivo mobile). */
  max-width:min(260px, 100%);
  background-color:var(--cor-fundo);
}
.tela-processo .campo-formulario textarea.campo-auto-expandir,
.tela-processo .campo-formulario textarea.campo-textarea-largo{max-width:none}
/* Qualquer campo (não só textarea) dentro de .campo-linha-toda deve ocupar
   a largura toda — achado real na Rescisão (endereço do Empreendimento
   cortado num <select> mesmo dentro de .campo-linha-toda, porque só
   textarea.campo-auto-expandir ganhava max-width:none aqui). Portado de
   volta pro shell de Locação em 07/09 pra não ter o mesmo bug latente. */
.tela-processo .campo-formulario.campo-linha-toda input,
.tela-processo .campo-formulario.campo-linha-toda select,
.tela-processo .campo-formulario.campo-linha-toda textarea{max-width:none}
.tela-processo .campo-formulario input:focus,
.tela-processo .campo-formulario select:focus,
.tela-processo .campo-formulario textarea:focus{
  background-color:#fff;
  border-color:var(--cor-primaria-clara);
}
.tela-processo .caixa-seletor-taxas{max-width:260px;background-color:var(--cor-fundo)}

/* Campo apontado por um link de pendência OU pela busca do projeto
   (pedido da Thais 2026-08-04, ver esteira_locacao/busca_processo.py) —
   #id_<campo> na URL + :target realça o campo de verdade. Era só de
   visualizar_processo.html (achado original das pendências); subiu pro
   shell compartilhado pra valer em TODA aba que usa .campo-formulario
   (Detalhes da Negociação, Informativo de Contas...), não só na Visão
   Geral. Precisa de margem de rolagem — o cabeçalho fixo do topo cobriria
   o campo sem isso. */
.tela-processo .campo-formulario input:target,
.tela-processo .campo-formulario select:target,
.tela-processo .campo-formulario textarea:target{
    outline:2px solid var(--cor-terciaria);
    outline-offset:1px;
    background-color:var(--cor-terciaria-mais-clara, #eaf6fb);
}
.tela-processo input,.tela-processo select,.tela-processo textarea{scroll-margin-top:90px}

@media print{
  .tela-processo .barra-lateral-area,
  .tela-processo .botao-abrir-lateral{display:none !important}
  .tela-processo .layout-com-lateral{display:block}
}


/* ---------- Filtro sob demanda (aprovado 25/09, piloto: Pipeline de Locação) ----------
   Ver static/js/filtro_sob_demanda.js. Só "+ Filtro", etiquetas dos filtros
   ligados e "Ordenar por" ficam na tela; o resto abre em menus flutuantes. */
.filtro-sd {
    margin-bottom: 18px;
}
/* Dentro do cartão da lista (26/09): vira o cabeçalho do cartão, separado
   da contagem/tabela por uma linha. */
.cartao > .filtro-sd {
    margin: 0 0 14px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--cor-borda-leve);
}
.filtro-sd__barra {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-sm);
    align-items: center;
}
.filtro-sd__adicionar,
.botao-colunas-barra {
    display: inline-flex;
    gap: 7px;
    align-items: center;
    font: 500 14px var(--fonte-principal);
    color: var(--cor-texto-secundario);
    background: #fff;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-borda-cta);
    padding: var(--espaco-sm) var(--espaco-lg);
    cursor: pointer;
}
.filtro-sd__adicionar:hover,
.botao-colunas-barra:hover,
.filtro-sd__adicionar[aria-expanded="true"] {
    border-color: var(--cor-primaria);
    color: var(--cor-primaria);
}
.filtro-sd__etiquetas {
    display: contents;
}
.filtro-sd__busca {
    font: 13px var(--fonte-principal);
    padding: 7px 10px;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-borda-cta);
    background: #fff;
    flex: 0 1 240px;
    min-width: 140px;
}
/* Itens extras da barra (ex.: "Colunas", "Exportar relatório" nas Tarefas)
   ficam depois do "Ordenar por", alinhados à direita. */
.filtro-sd__extras {
    display: flex;
    gap: var(--espaco-sm);
    align-items: center;
}
.filtro-sd__etiqueta {
    display: inline-flex;
    align-items: center;
    font-size: 13px;
    background: #eef3ff;
    color: #1d2b45;
    border: 1px solid #d6e2ff;
    border-radius: 999px;
    overflow: hidden;
}
.filtro-sd__etiqueta button {
    font: inherit;
    color: inherit;
    border: 0;
    background: transparent;
    cursor: pointer;
}
.filtro-sd__etiqueta-corpo {
    padding: 5px var(--espaco-xs) 5px var(--espaco-md);
}
.filtro-sd__etiqueta-corpo b {
    font-weight: 600;
}
.filtro-sd__etiqueta-corpo:not(:disabled):hover {
    text-decoration: underline;
}
.filtro-sd__etiqueta-corpo:disabled {
    cursor: default;
}
.filtro-sd__etiqueta-tirar {
    padding: 5px 10px 5px 6px;
    font-size: 15px;
    line-height: 1;
    color: var(--cor-texto) !important;
}
.filtro-sd__etiqueta-tirar:hover {
    color: var(--cor-reprovado) !important;
}
.filtro-sd__limpar {
    font: 13px var(--fonte-principal);
    color: var(--cor-primaria);
    background: none;
    border: 0;
    cursor: pointer;
    padding: var(--espaco-xs);
}
.filtro-sd__limpar:hover {
    text-decoration: underline;
}
.filtro-sd__ordem {
    margin-left: auto;
    display: flex;
    gap: 6px;
    align-items: center;
    font-size: 13px;
}
.filtro-sd__ordem label {
    white-space: nowrap;
    color: var(--cor-texto-secundario);
}
.filtro-sd__ordem select {
    font: 13px var(--fonte-principal);
    padding: 6px var(--espaco-sm);
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    background: #fff;
    max-width: 220px;
    min-width: 0;
}
.filtro-sd__direcao {
    flex-shrink: 0;
    width: 34px;
    height: 34px;
    font-size: 16px;
}
.filtro-sd__menu {
    position: absolute;
    z-index: 30;
    width: 280px;
    max-width: calc(100vw - 32px);
    max-height: 70vh;
    overflow-y: auto;
    background: #fff;
    border: 1px solid var(--cor-borda-leve);
    border-radius: 10px;
    box-shadow: 0 12px 32px -10px rgba(20, 30, 60, .3);
    padding: var(--espaco-sm);
    display: grid;
    gap: 2px;
}
.filtro-sd__menu-titulo,
.filtro-sd__menu-grupo {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: #1d2b45;
    margin: var(--espaco-sm) var(--espaco-sm) 3px;
}
/* Nome do grupo em negrito e com linha acima, pra separar as categorias
   do menu "+ Filtro" (pedido da Thais 26/09). */
.filtro-sd__menu-grupo:not(:first-child) {
    border-top: 1px solid var(--cor-borda-leve);
    padding-top: 10px;
    margin-top: 6px;
}
.filtro-sd__opcao {
    text-align: left;
    font: 13px var(--fonte-principal);
    color: #1d2b45;
    background: none;
    border: 0;
    border-radius: 6px;
    padding: 7px var(--espaco-sm);
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    gap: var(--espaco-sm);
}
.filtro-sd__opcao:hover,
.filtro-sd__opcao:focus-visible,
.filtro-sd__opcao--atual {
    background: #f2f6ff;
}
.filtro-sd__opcao small {
    color: var(--cor-primaria);
    font-size: 11px;
}
.filtro-sd__entrada {
    font: 13px var(--fonte-principal);
    padding: 7px 9px;
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    margin: var(--espaco-xs) 6px;
}
.filtro-sd__lista {
    display: grid;
    max-height: 260px;
    overflow-y: auto;
}
.filtro-sd__marcar {
    display: flex;
    gap: var(--espaco-sm);
    align-items: center;
    font-size: 13px;
    color: #1d2b45;
    padding: 5px var(--espaco-sm);
    border-radius: 6px;
    cursor: pointer;
}
.filtro-sd__marcar:hover {
    background: #f2f6ff;
}
.filtro-sd__marcar input {
    width: auto;
    margin: 0;
}
.filtro-sd__intervalo {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
    padding: var(--espaco-xs) var(--espaco-sm);
}
.filtro-sd__intervalo label {
    display: grid;
    gap: 2px;
    font-size: 11px;
    color: var(--cor-texto-secundario);
}
.filtro-sd__intervalo input {
    font: 12.5px var(--fonte-principal);
    padding: 6px;
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    min-width: 0;
}
.filtro-sd__menu-rodape {
    display: flex;
    justify-content: flex-end;
    padding: var(--espaco-sm) var(--espaco-xs) 2px;
    margin-top: 6px;
    border-top: 1px solid var(--cor-borda-leve);
}
@media (max-width: 640px) {
    .filtro-sd__ordem {
        margin-left: 0;
        width: 100%;
    }
    .filtro-sd__ordem select {
        flex: 1 1 0;
        max-width: none;
    }
}

/* ==========================================================================
   LAYOUT DO ONE COM BARRA LATERAL (aprovado pela Thais 26/09/2026, modelo
   enviado por ela; estilo da home nova). A barra azul do topo saiu: logo,
   sino, Empresa, Módulo, menu do módulo e usuário ficam numa barra lateral
   branca (templates/base.html + componentes/barra_lateral_topo.html). O
   miolo do menu vem de <app>/_menu_modulo.html; telas de processo trocam
   pelas abas do processo (componentes/processo_shell.html).
   ========================================================================== */
.app-one { display: flex; align-items: flex-start; gap: var(--espaco-xxl); min-height: 100vh; padding: var(--espaco-lg); }
/* Sem teto de largura (Thais, 06/10/2026): em monitor grande, o conteúdo ficava
   com muito espaço vazio sobrando dos dois lados mesmo depois dos 1800px de teto
   que tinha antes — ocupa toda a área que sobra da barra lateral, em qualquer tela. */
.app-one__conteudo { flex: 1; min-width: 0; padding: var(--espaco-sm) var(--espaco-xs) 32px; }

.lateral-app {
    position: sticky; top: var(--espaco-lg);
    width: 232px; flex: 0 0 232px;
    height: calc(100vh - 2 * var(--espaco-lg));
    display: flex; flex-direction: column; gap: var(--espaco-lg);
    background: var(--cor-superficie); border: 1px solid var(--cor-borda); border-radius: 14px;
    padding: 18px var(--espaco-md) var(--espaco-md);
    transition: width .15s ease, flex-basis .15s ease;
}
.lateral-app__topo { display: flex; align-items: center; justify-content: space-between; padding: 0 6px; }
.lateral-app__logo img { display: block; width: 96px; height: auto; }
.lateral-app__bloco { display: flex; flex-direction: column; gap: 6px; }
.lateral-app__rotulo { font-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--cor-texto-secundario); padding: 0 6px; }
.lateral-app button.lateral-app__empresa, .lateral-app span.lateral-app__empresa {
    align-self: flex-start; display: inline-flex; align-items: center; gap: 6px;
    background: var(--cor-primaria-suave); color: var(--cor-primaria-texto);
    font: 600 13px var(--fonte-principal); border: 0; border-radius: 8px; padding: 6px 11px; margin-left: 6px; cursor: pointer;
}
.lateral-app .lateral-app__empresa--fixa { cursor: default; }
.lateral-app button.lateral-app__modulo {
    display: flex; justify-content: space-between; align-items: center; width: 100%;
    background: var(--cor-superficie); border: 1px solid var(--cor-borda); border-radius: 10px;
    padding: 9px var(--espaco-md); font: 600 14px var(--fonte-principal); color: var(--cor-texto); cursor: pointer;
}
.lateral-app button.lateral-app__modulo:hover { border-color: var(--cor-primaria-clara); }

/* Menu do módulo */
.lateral-app .barra-lateral-area {
    width: auto; flex: 1 1 auto; min-height: 0; overflow-y: auto;
    background: none; border: 0; border-radius: 0; padding: 0; gap: 2px;
}
/* o menu lateral rola com a roda do mouse, sem mostrar a barra */
.lateral-app .barra-lateral-area { scrollbar-width: none; -ms-overflow-style: none; }
.lateral-app .barra-lateral-area::-webkit-scrollbar { display: none; }
.lateral-app .item-lateral {
    color: var(--cor-texto); font-size: 13.5px; font-weight: 500;
    padding: 9px var(--espaco-md); border-radius: 10px; border-left: 0; justify-content: space-between;
}
.lateral-app .item-lateral svg { color: var(--cor-texto-secundario); flex: 0 0 auto; }
.lateral-app .item-lateral > span:first-child { display: flex; align-items: center; gap: var(--espaco-md); }
.lateral-app .item-lateral:hover { background: var(--cor-fundo-alternado); color: var(--cor-texto); }
.lateral-app .item-lateral--ativo,
.lateral-app .item-lateral--ativo:hover { background: var(--cor-primaria); color: #fff; font-weight: 600; }
.lateral-app .item-lateral--ativo svg { color: #fff; }
.lateral-app .item-lateral--voltar { color: var(--cor-texto-secundario); }
.lateral-app .divisor-lateral { background: var(--cor-borda-leve); margin: var(--espaco-sm) var(--espaco-xs); }
.lateral-app .submenu-lateral { padding: 2px 0 4px; }
.lateral-app .item-lateral-sub,
.lateral-app .item-lateral-sub-sub {
    color: var(--cor-texto-secundario); background: none; border: 0; width: 100%; cursor: pointer;
    font-family: inherit; text-align: left; justify-content: flex-start;
}
.lateral-app .item-lateral-sub { padding: 7px var(--espaco-md) 7px 42px; font-size: 13px; }
.lateral-app .item-lateral-sub > span { display: flex; align-items: center; gap: 10px; }
.lateral-app .item-lateral-sub[data-submenu-toggle] { justify-content: space-between; }
.lateral-app .item-lateral-sub-sub { padding: 6px var(--espaco-md) 6px 58px; font-size: 12.5px; }
.lateral-app .item-lateral-sub:hover,
.lateral-app .item-lateral-sub-sub:hover { background: var(--cor-fundo-alternado); color: var(--cor-texto); }
.lateral-app .sigla-modulo {
    width: 20px; height: 20px; border-radius: 6px; display: inline-grid; place-items: center;
    background: var(--cor-primaria-suave); color: var(--cor-primaria-texto); font-size: 10.5px; font-weight: 700;
}
.lateral-app .item-lateral--ativo .sigla-modulo { background: rgba(255, 255, 255, .2); color: #fff; }
/* botão "Recolher menu" que o JS do base.html acrescenta no fim do menu */
.lateral-app .botao-recolher-lateral { margin-top: auto; color: var(--cor-texto-secundario); font-size: 12.5px; }

/* Usuário no pé */
.lateral-app__usuario { border-top: 1px solid var(--cor-borda-leve); padding-top: var(--espaco-md); }
.lateral-app__usuario-botao {
    display: flex; align-items: center; gap: 10px; width: 100%; background: none; border: 0;
    padding: 2px 6px; cursor: pointer; text-align: left; font-family: inherit; color: var(--cor-texto);
}
.lateral-app__avatar {
    width: 34px; height: 34px; flex: 0 0 34px; border-radius: 8px; display: grid; place-items: center;
    background: var(--cor-primaria-suave); color: var(--cor-primaria-texto); font-weight: 700; font-size: 12.5px;
}
.lateral-app__usuario-texto { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.lateral-app__usuario-texto b { font-size: 13px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lateral-app__usuario-texto small { font-size: 11.5px; color: var(--cor-texto-secundario); }

/* Painéis que abrem (sino, Empresa, Módulo, usuário) */
.lateral-app .sino-notificacoes button { color: var(--cor-texto-secundario); border-radius: 8px; padding: 6px; }
.lateral-app .sino-notificacoes button:hover { background: var(--cor-fundo-alternado); }
.lateral-app .sino-notificacoes .painel-notificacoes { left: 0; right: auto; top: calc(100% + 8px); }
.lateral-app .seletor-modulo-topo, .lateral-app .painel-empresa-topo { position: relative; display: flex; flex-direction: column; align-items: stretch; text-align: left; margin-right: 0; }
.lateral-app .painel-empresa { left: 6px; right: auto; top: calc(100% + 6px); }
.lateral-app .grade-modulos { left: 0; top: calc(100% + 6px); }
.lateral-app .seletor-papel__menu { left: 0; right: auto; top: auto; bottom: calc(100% + 8px); }

/* Recolhida: só ícones */
.lateral-app--recolhida { width: 76px; flex-basis: 76px; }
.lateral-app--recolhida .lateral-app__bloco,
.lateral-app--recolhida .lateral-app__usuario-texto,
.lateral-app--recolhida .lateral-app__usuario .seletor-papel__seta,
.lateral-app--recolhida .sino-notificacoes { display: none; }
.lateral-app--recolhida .lateral-app__logo img { width: 30px; height: 30px; object-fit: cover; object-position: left; }
.lateral-app--recolhida .item-lateral { justify-content: center; padding-left: 0; padding-right: 0; }
.lateral-app--recolhida .item-lateral .selo-contagem { display: none; }

/* Telas antigas que ainda embrulham o conteúdo em .layout-com-lateral (o menu
   delas saiu pra barra lateral): o embrulho vira bloco normal. */
.app-one__conteudo .layout-com-lateral { display: block; }
.app-one__conteudo .conteudo-com-lateral { max-width: none; }

/* Botão "Menu" do celular */
.lateral-app__abrir { display: none; }
@media (max-width: 900px) {
    .app-one { flex-direction: column; gap: var(--espaco-md); padding: var(--espaco-md); }
    .lateral-app__abrir {
        display: inline-flex; align-items: center; gap: 6px; background: var(--cor-superficie);
        border: 1px solid var(--cor-borda); border-radius: 10px; padding: 8px 12px; font: 600 14px var(--fonte-principal);
        color: var(--cor-texto); cursor: pointer;
    }
    .lateral-app { display: none; position: static; width: 100%; flex-basis: auto; height: auto; }
    .lateral-app--aberta { display: flex; }
    .app-one__conteudo { width: 100%; padding: 0; }
}

/* Cabeçalho de página (layout novo 26/09/2026, modelo da Thais): área em
   letras pequenas, título grande (uma palavra pode ir em azul com <em>),
   linha de resumo e o botão principal à direita. */
.cabecalho-pagina { display: flex; justify-content: space-between; align-items: flex-end; gap: var(--espaco-lg); flex-wrap: wrap; margin-bottom: var(--espaco-xl); }
.cabecalho-pagina__area { font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--cor-texto-secundario); }
.cabecalho-pagina__titulo { font: 500 44px/1.05 var(--fonte-titulo); letter-spacing: -.02em; color: var(--cor-titulo); margin: 4px 0 6px; text-wrap: balance; }
.cabecalho-pagina__titulo em { font-style: normal; color: var(--cor-primaria); }
.cabecalho-pagina__resumo { margin: 0; color: var(--cor-texto-secundario); font-size: 14px; }
.cabecalho-pagina .botao-principal { display: inline-flex; align-items: center; gap: 8px; border-radius: 10px; padding: 12px 20px; font-weight: 600; }
@media (max-width: 700px) { .cabecalho-pagina__titulo { font-size: 32px; } }

/* Busca + filtro fora do cartão da tabela (layout novo) */
.filtro-sd--fora { margin: 0 0 var(--espaco-lg); padding: 0; background: none; border: 0; }
.filtro-sd--fora .filtro-sd__busca { flex: 0 1 360px; min-width: 200px; }
.filtro-sd--fora .filtro-sd__ordem { margin-left: auto; }

/* Contador de filtros ligados no botão "Filtro" (filtro_sob_demanda.js) */
.filtro-sd__contador {
    display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 6px;
    border-radius: 999px; background: var(--cor-primaria); color: #fff; font-size: 11px; font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.filtro-sd__contador[hidden] { display: none; }

/* Título de tela no formato novo quando a tela ainda não usa o bloco
   .cabecalho-pagina inteiro (26/09/2026): área + título grande. */
.cabecalho-pagina__bloco { min-width: 0; }
.cabecalho-pagina__bloco .cabecalho-pagina__titulo { margin-bottom: var(--espaco-xs); }

/* Tabelas dos Indicadores no celular (opção B aprovada pela Thais 27/09/2026):
   cada linha vira um cartãozinho, nome em cima e os outros campos em pares
   rótulo/valor (duas colunas). Rótulo vem de data-rotulo, escrito por
   static/js/tabela_cartoes_celular.js. Texto longo ocupa a linha inteira;
   linha de uma célula só (aviso "sem dados", detalhe aberto) também.
   Prefixo .app-one__conteudo: vence o <style> próprio das telas de Indicadores. */
@media (max-width: 700px) {
    .app-one__conteudo .ind-mini-table, .app-one__conteudo .ind-results-table { display: block; width: 100%; }
    .app-one__conteudo .ind-mini-table thead, .app-one__conteudo .ind-results-table thead {
        position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
    }
    .app-one__conteudo .ind-mini-table tbody, .app-one__conteudo .ind-results-table tbody { display: grid; gap: 8px; }
    .app-one__conteudo .ind-mini-table tr, .app-one__conteudo .ind-results-table tr {
        display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6px 12px;
        border: 1px solid var(--cor-borda-leve); border-radius: 10px; padding: 10px 12px; background: var(--cor-superficie, #fff);
    }
    .app-one__conteudo .ind-mini-table td, .app-one__conteudo .ind-results-table td {
        display: block; padding: 0; border: 0; min-width: 0; white-space: normal;
        text-align: left !important; /* várias células têm text-align:center no style="" */ overflow-wrap: anywhere;
        font-variant-numeric: tabular-nums;
    }
    .app-one__conteudo .ind-mini-table td[data-rotulo]::before, .app-one__conteudo .ind-results-table td[data-rotulo]::before {
        content: attr(data-rotulo); display: block; font-size: 10px; font-weight: 600; color: var(--cor-texto-secundario);
    }
    .app-one__conteudo .ind-mini-table td[data-rotulo=""]::before, .app-one__conteudo .ind-results-table td[data-rotulo=""]::before { content: none; }
    .app-one__conteudo .ind-mini-table td:first-child, .app-one__conteudo .ind-results-table td:first-child,
    .app-one__conteudo .ind-mini-table td.celula-longa, .app-one__conteudo .ind-results-table td.celula-longa,
    .app-one__conteudo .ind-mini-table td.celula-cheia, .app-one__conteudo .ind-results-table td.celula-cheia { grid-column: 1 / -1; }
    .app-one__conteudo .ind-mini-table td:first-child, .app-one__conteudo .ind-results-table td:first-child { font-weight: 600; font-size: 13px; }
    .app-one__conteudo .ind-mini-table td:first-child::before, .app-one__conteudo .ind-results-table td:first-child::before { content: none; }
    .app-one__conteudo .ind-mini-table tr:has(> td.celula-cheia:only-child), .app-one__conteudo .ind-results-table tr:has(> td.celula-cheia:only-child) { padding: 0; border: 0; background: none; }
    /* Gráfico de barras por mês (12 colunas): rola dentro do próprio cartão
       em vez de empurrar a página inteira pro lado. */
    .ind-mchart { overflow-x: auto; overflow-y: hidden; }
    .ind-mcol { flex: 0 0 auto; min-width: 44px; }
}

/* Água no Informativo de Contas da Rescisão (aprovado pela Thais 27/09/2026):
   barra com os dias do inquilino e do proprietário na conta, quem paga e,
   quando for o caso, a escolha do empate ou da estimativa. */
.agua-aviso { font-size: 12.5px; color: var(--cor-texto-secundario); margin: 0 0 8px; }
.agua-divisao { display: grid; gap: 8px; margin-top: 12px; }
.agua-barra { display: flex; height: 26px; border-radius: 8px; overflow: hidden; font-size: 11.5px; font-weight: 600; color: #fff; }
.agua-barra span { display: flex; align-items: center; justify-content: center; min-width: 0; white-space: nowrap; overflow: hidden; padding: 0 6px; }
.agua-barra__inquilino { background: var(--cor-primaria); }
.agua-barra__proprietario, .agua-barra__conta { background: var(--cor-texto-secundario); }
.agua-barra__estimativa { background: var(--cor-secundaria); }
.agua-legenda { font-size: 12px; color: var(--cor-texto-secundario); font-variant-numeric: tabular-nums; }
.agua-decisao { font-size: 13px; background: var(--cor-primaria-suave); border-radius: 9px; padding: 9px 12px; }
.agua-escolha { display: flex; flex-wrap: wrap; gap: 6px 18px; align-items: center; font-size: 13px; background: var(--cor-secundaria-suave); border-radius: 9px; padding: 9px 12px; }
.agua-escolha label { display: inline-flex; align-items: center; gap: 6px; margin: 0; font-weight: 500; }
.agua-escolha span { font-weight: 600; }

/* Parados há 5 dias ou mais na Pipeline (aprovado pela Thais 27/09/2026):
   aviso laranja no resumo (liga/desliga o filtro ?parados=1) e marca
   "parado há X dias" embaixo do Status. Laranja = destaque de atenção. */
.alerta-parados { display: inline-flex; align-items: center; gap: 6px; margin-left: 8px; background: var(--cor-secundaria-suave); color: var(--cor-secundaria-texto); border: 1px solid transparent; border-radius: 999px; padding: 2px 10px 2px 8px; font-weight: 600; font-size: 13px; text-decoration: none; }
.alerta-parados::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--cor-secundaria); }
.alerta-parados:hover, .alerta-parados:focus-visible { border-color: var(--cor-secundaria); text-decoration: none; }
.alerta-parados--ativo { background: var(--cor-secundaria); color: var(--cor-titulo); }
.alerta-parados--ativo::before { background: var(--cor-titulo); }
.marca-parado { display: block; margin-top: 4px; color: var(--cor-secundaria-texto); font-size: 11px; font-weight: 600; white-space: normal; line-height: 1.3; }
.marca-parado::before { content: "● "; color: var(--cor-secundaria); font-size: 10px; }

/* Cabeçalho novo nas telas de dentro do processo (aprovado pela Thais
   27/09/2026): componentes/cabecalho_processo.html. Título = nome da pessoa
   (um pouco menor que o das listas, porque nome é comprido); embaixo, status,
   Score e dados do imóvel na mesma linha. Vence .tela-processo .topo-pagina h1. */
.tela-processo .topo-pagina .cabecalho-pagina__titulo { font-size: 36px; margin: 4px 0 8px; }
.cabecalho-processo__resumo { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.cabecalho-processo .subtitulo { margin-top: 4px; }
.cabecalho-processo__titulo-longo { overflow-wrap: anywhere; } /* número CNJ do Jurídico não tem espaço pra quebrar */
@media (max-width: 700px) { .tela-processo .topo-pagina .cabecalho-pagina__titulo { font-size: 28px; } }
@media print { .tela-processo .topo-pagina .cabecalho-pagina__titulo { font-size: 20px; margin: 0 0 4px; } }

/* Barra lateral azul-marinho (pedido da Thais 26/09/2026): fundo marinho da
   marca, letras e ícones brancos, logo branca. Os painéis que abrem
   (Empresa, Módulo, sino, usuário) continuam brancos. */
.lateral-app { background: var(--cor-sombra); border-color: var(--cor-sombra); color: #fff; }
.lateral-app .lateral-app__rotulo { color: rgba(255, 255, 255, .55); }
.lateral-app button.lateral-app__empresa,
.lateral-app span.lateral-app__empresa { background: rgba(255, 255, 255, .12); color: #fff; }
.lateral-app button.lateral-app__modulo { background: rgba(255, 255, 255, .06); border-color: rgba(255, 255, 255, .22); color: #fff; }
.lateral-app button.lateral-app__modulo:hover { border-color: rgba(255, 255, 255, .45); }
.lateral-app .lateral-app__topo .sino-notificacoes > button { color: rgba(255, 255, 255, .8); }
.lateral-app .lateral-app__topo .sino-notificacoes > button:hover { background: rgba(255, 255, 255, .1); color: #fff; }
.lateral-app .item-lateral { color: rgba(255, 255, 255, .82); }
.lateral-app .item-lateral svg { color: rgba(255, 255, 255, .7); }
.lateral-app .item-lateral:hover { background: rgba(255, 255, 255, .08); color: #fff; }
.lateral-app .item-lateral--ativo,
.lateral-app .item-lateral--ativo:hover { background: var(--cor-primaria); color: #fff; }
.lateral-app .item-lateral--ativo svg { color: #fff; }
.lateral-app .item-lateral--voltar { color: rgba(255, 255, 255, .65); }
.lateral-app .divisor-lateral { background: rgba(255, 255, 255, .12); }
.lateral-app .item-lateral-sub,
.lateral-app .item-lateral-sub-sub { color: rgba(255, 255, 255, .68); }
.lateral-app .item-lateral-sub:hover,
.lateral-app .item-lateral-sub-sub:hover { background: rgba(255, 255, 255, .08); color: #fff; }
.lateral-app .sigla-modulo { background: rgba(255, 255, 255, .14); color: #fff; }
.lateral-app .botao-recolher-lateral { color: rgba(255, 255, 255, .6); }
.lateral-app__usuario { border-top-color: rgba(255, 255, 255, .12); }
.lateral-app .lateral-app__usuario-botao { color: #fff; }
.lateral-app .lateral-app__usuario-texto small { color: rgba(255, 255, 255, .6); }
.lateral-app .lateral-app__avatar { background: rgba(255, 255, 255, .14); color: #fff; }
.lateral-app .lateral-app__usuario .seletor-papel__seta { color: rgba(255, 255, 255, .6); }
/* O que abre por cima volta pro texto escuro */
.lateral-app .painel-empresa,
.lateral-app .grade-modulos,
.lateral-app .seletor-papel__menu,
.lateral-app .painel-notificacoes { color: var(--cor-texto); }
@media (max-width: 900px) {
    .lateral-app__abrir { background: var(--cor-sombra); border-color: var(--cor-sombra); color: #fff; }
}

/* Barra lateral sempre na frente do conteúdo (achado da Thais 26/09: o painel
   de Módulos abria por baixo da tabela da Pipeline). Módulo atual em azul
   (laranja fica só pra alerta). */
.lateral-app { z-index: 40; }
.lateral-app .grade-modulos,
.lateral-app .painel-empresa,
.lateral-app .painel-notificacoes,
.lateral-app .seletor-papel__menu { z-index: 50; box-shadow: 0 12px 32px rgba(10, 42, 108, .22); }
.lateral-app .item-modulo.atual { color: var(--cor-primaria-texto); background: var(--cor-primaria-suave); }
.lateral-app .item-modulo.atual .icone-modulo { background: var(--cor-primaria); }


/* Aviso em faixa (componentes/aviso.html). Auditoria 02/10/2026, item B6: um componente no lugar das faixas
   com cor escrita à mão em cada tela. Só tokens. */
.aviso { margin: 14px 0; padding: 10px 12px; border-radius: 8px; font-size: 13px; }
.aviso--sucesso { background: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado); }
.aviso--alerta { background: var(--cor-secundaria-suave); color: var(--cor-secundaria-texto); }
.aviso--erro { background: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado-escura); }

/* Prévia de e-mail na tela de conferência (rescisao/conferir_email.html). */
.previa-email { width: 100%; min-height: 480px; border: .5px solid var(--cor-borda); border-radius: 8px; background: var(--cor-superficie); }
.previa-email--texto { min-height: 0; padding: 12px; white-space: pre-wrap; }
.rotulo-secundario { color: var(--cor-texto-secundario); }
.grade-envio-email { display: grid; grid-template-columns: 90px minmax(0, 1fr); row-gap: 10px; align-items: center; }

/* Selo de situação de um e-mail rastreado (Relatório de e-mail e Controle de e-mails da Rescisão). Só tokens. */
.selo-status-email { display: inline-block; font-size: 11.5px; font-weight: 600; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.selo-status-email--enviado, .selo-status-email--pendente { background: var(--cor-fundo-alternado); color: var(--cor-texto-secundario); }
.selo-status-email--entregue { background: var(--cor-primaria-suave); color: var(--cor-primaria); }
.selo-status-email--engajou { background: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado); }
.selo-status-email--problema { background: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado); }

/* Gráfico de barras simples (Controle de e-mails da Rescisão). Altura da barra vem do template, em px (0 a 100). */
.grafico-barras { display: flex; align-items: flex-end; gap: var(--espaco-md); min-height: 150px; padding-top: var(--espaco-md); }
.grafico-barras__coluna { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 4px; }
.grafico-barras__barra { width: 100%; min-height: 2px; background: var(--cor-primaria); border-radius: 4px 4px 0 0; }
.grafico-barras__valor { font-size: 13px; font-weight: 600; }
.grafico-barras__dia { font-size: 11px; color: var(--cor-texto-secundario); text-align: center; }

/* Controle de e-mails da Rescisão: faixa de liga/pausa e confirmação dentro de <details>. */
.controle-envio__confirmar { display: flex; gap: var(--espaco-md); align-items: center; flex-wrap: wrap; margin-top: var(--espaco-md); }
.controle-envio details > summary { cursor: pointer; list-style: none; display: inline-block; }
.tabela-lista details > summary { cursor: pointer; color: var(--cor-primaria-texto); }

/* Botão contornado pequeno, para dentro de linha de tabela (Controle de e-mails da Rescisão). */
.botao-contornado--pequeno { padding: 4px 12px; font-size: 12.5px; line-height: 1.3; white-space: nowrap; }
.celula-acoes { display: flex; flex-direction: column; align-items: flex-start; gap: var(--espaco-xs); }

/* Edição do texto do e-mail antes de enviar (rescisao/conferir_email.html). */
.editor-email { border: 1.5px solid var(--cor-primaria); border-radius: 8px; padding: 12px; background: var(--cor-superficie); min-height: 140px; line-height: 1.5; }
.editor-email:focus { outline: none; box-shadow: 0 0 0 3px var(--cor-primaria-suave); }
.barra-editor-email { display: flex; gap: var(--espaco-xs); align-items: center; margin-bottom: 6px; }

/* O atributo hidden perde para qualquer display escrito por nós (flex nos botões e na barra do editor): aqui ele vence. */
#form-conferir [hidden] { display: none !important; }

/* Seleção em lote nas listas (Assinaturas e Intimações, 03/10/2026): caixinha em cada linha, "selecionar todas" no
   cabeçalho e a faixa com as ações. */
.col-selecao{width:36px;text-align:center;}
.col-selecao input{width:16px;height:16px;cursor:pointer;}
tbody tr.linha-selecionada{background:var(--cor-primaria-suave);}
.barra-selecao{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:10px 14px;border-radius:8px;
  background:var(--cor-primaria-suave);color:var(--cor-primaria-texto);font-size:13px;
}
.barra-selecao[hidden]{display:none;}
.barra-selecao__contagem{font-weight:600;}
.barra-selecao__rotulo{margin-left:auto;}


/* =====================================================================================================================
   Componentes promovidos da Carteira para o padrão do ONE (11/10/2026)
   Antes viviam em carteira.css com prefixo ct-. São genéricos: qualquer módulo pode usar. Só tokens, nenhuma cor escrita à mão.
   ===================================================================================================================== */

/* Tom: cada bloco colorido lê a cor da variável --tom (perigo, alerta, info, ok, neutro, destaque). */
.tom-perigo { --tom: var(--cor-reprovado-escura); }
.tom-alerta { --tom: var(--cor-secundaria-texto); }
.tom-info { --tom: var(--cor-primaria-texto); }
.tom-ok { --tom: var(--cor-aprovado); }
.tom-neutro { --tom: var(--cor-texto-secundario); }
.tom-destaque { --tom: var(--cor-sombra); }

/* Ícone SVG que acompanha o tamanho do texto (o .icone-svg padrão tem 15px fixos). */
.icone-svg--em { width: 1em; height: 1em; vertical-align: -0.125em; }

/* Cartão: cabeçalho, título e subtítulo. */
.cartao__cab { margin: 0 0 16px; }
.cartao__titulo { font-size: 14px; font-weight: 700; color: var(--cor-titulo); margin: 0; }
.cartao__sub { font-size: 12px; color: var(--cor-texto-secundario); margin: 2px 0 0; }

/* Botões: variações do .botao-acao. */
.botao-acao--pequeno { padding: 5px 10px; font-size: 11.5px; font-weight: 600; border-radius: 8px; }
.botao-acao--largo { display: flex; width: 100%; margin-top: 8px; }
.botao-acao--forte, .botao-acao--forte:hover { background-color: var(--cor-aprovado); border-color: var(--cor-aprovado); color: #fff; }

/* Aviso em faixa: tons informativo e neutro, e versão com ícone à esquerda. */
.aviso--info { background: var(--cor-primaria-suave); color: var(--cor-primaria-texto); }
.aviso--neutro { background: var(--cor-fundo-alternado); color: var(--cor-texto-secundario); }
.aviso--com-icone { display: flex; gap: 8px; align-items: flex-start; line-height: 1.45; }
.aviso--com-icone .icone-svg { margin-top: 2px; }

/* Abas em pílula (variação de .abas). */
.abas--pilulas { border-bottom: 0; gap: 8px; }
.abas--pilulas .aba { padding: 9px 16px; margin: 0; border: 1px solid var(--cor-borda); border-radius: 12px; background: var(--cor-superficie); }
.abas--pilulas .aba:hover { background: var(--cor-fundo-alternado); color: var(--cor-titulo); }
.abas--pilulas .aba--ativa, .abas--pilulas .aba--ativa:hover { background: var(--cor-primaria); border-color: var(--cor-primaria); color: #fff; }

/* Selo pequeno com tom (variação de .badge-status). */
.badge-status--mini { font-size: 10px; font-weight: 600; padding: 2px 8px; background-color: var(--cor-primaria-suave); color: var(--cor-primaria-texto); }
.badge-status--info { background-color: var(--cor-primaria-suave); color: var(--cor-primaria-texto); }
.badge-status--neutro { background-color: var(--cor-fundo-alternado); color: var(--cor-texto-secundario); }
.badge-status--alerta { background-color: var(--cor-secundaria-suave); color: var(--cor-secundaria-texto); }
.badge-status--perigo { background-color: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado-escura); }
.badge-status--ok { background-color: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado); }

/* Indicador colorido: ícone em círculo, valor grande, rótulo e dica. A cor vem de .tom-*. */
.grade-indicadores { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; }
.indicador-cor { display: flex; align-items: center; gap: 12px; padding: 16px; border-radius: 16px; border: 1px solid color-mix(in srgb, var(--tom) 38%, var(--cor-borda)); background: color-mix(in srgb, var(--tom) 9%, var(--cor-superficie)); color: inherit; text-decoration: none; min-width: 0; }
a.indicador-cor:hover { box-shadow: 0 4px 14px rgba(10, 42, 108, .08); }
.indicador-cor--ativo { box-shadow: 0 0 0 2px var(--tom); }
.indicador-cor__icone { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 999px; background: color-mix(in srgb, var(--tom) 18%, var(--cor-superficie)); color: var(--tom); font-size: 20px; }
.indicador-cor__valor { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; font-size: 20px; font-weight: 800; line-height: 1.1; letter-spacing: -.02em; color: var(--tom); font-variant-numeric: tabular-nums; }
.indicador-cor__badge { font-size: 11px; font-weight: 700; padding: 2px 7px; border-radius: 999px; background: var(--tom); color: #fff; letter-spacing: 0; }
.indicador-cor__rotulo { font-size: 12px; color: var(--tom); margin-top: 3px; }
.indicador-cor__dica { font-size: 10.5px; color: var(--cor-texto-secundario); margin-top: 1px; }

/* Gráfico de colunas: variações do .grafico-barras (altura definida, barras finas, coluna clicável, barra empilhada ou em dupla). */
.grafico-barras--proporcional { height: 170px; padding-top: 22px; gap: 6px; }
.grafico-barras--proporcional .grafico-barras__coluna { height: 100%; border-radius: 8px; text-decoration: none; color: inherit; }
.grafico-barras--proporcional .grafico-barras__coluna { gap: 0; }
.grafico-barras--proporcional .grafico-barras__valor { font-size: 11px; font-weight: 700; color: var(--cor-titulo); }
.grafico-barras--proporcional .grafico-barras__dia { font-size: 11px; }
.grafico-barras--proporcional .grafico-barras__barra { width: min(34px, 100%); background: var(--tom, var(--cor-primaria)); border-radius: 5px 5px 0 0; }
.grafico-barras__coluna--ativa, a.grafico-barras__coluna:hover { background: var(--cor-fundo-alternado); }
.grafico-barras__coluna--ativa { background: var(--cor-primaria-suave); }
.grafico-barras__empilha { display: flex; flex-direction: column; width: min(34px, 100%); border-radius: 5px 5px 0 0; overflow: hidden; min-height: 2px; }
.grafico-barras__parte { display: block; }
.grafico-barras__parte--ok { background: var(--cor-aprovado); }
.grafico-barras__parte--info { background: var(--cor-primaria); }
.grafico-barras__parte--alerta { background: var(--cor-secundaria); }
.grafico-barras__dupla { display: flex; align-items: flex-end; justify-content: center; gap: 2px; width: 100%; flex: 1; min-height: 0; }
.grafico-barras__dupla > i { display: block; width: min(16px, 45%); border-radius: 4px 4px 0 0; min-height: 0; background: var(--tom, var(--cor-primaria)); }
.grafico-linha { width: 100%; height: auto; display: block; }
.grafico-linha text { fill: var(--cor-texto-secundario); font-size: 11px; }
.grafico-linha circle { fill: var(--cor-superficie); stroke: var(--cor-primaria); stroke-width: 2; }
.grafico-linha a:hover circle, .grafico-linha a.ativo circle { fill: var(--cor-primaria); }
.grafico-linha polyline { fill: none; stroke: var(--cor-primaria); stroke-width: 2.5; }
.legenda-grafico { display: flex; gap: 16px; flex-wrap: wrap; font-size: 11.5px; color: var(--cor-texto-secundario); margin-top: 10px; }
.legenda-grafico i { display: inline-block; width: 10px; height: 10px; border-radius: 4px; margin-right: 6px; background: var(--tom); vertical-align: -1px; }

/* Barras horizontais rotuladas (nome, valor e uma barra com a cor da série). */
.barras-rotuladas { display: grid; gap: 12px; }
.barras-rotuladas__linha { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 4px; }
.barras-rotuladas__nome { font-size: 13px; color: var(--cor-texto-secundario); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.barras-rotuladas__nome small { font-size: 11px; }
.barras-rotuladas__valor { font-size: 12px; font-weight: 800; color: var(--cor-titulo); font-variant-numeric: tabular-nums; white-space: nowrap; }
.barras-rotuladas__fio { height: 8px; border-radius: 999px; background: var(--tom, var(--cor-primaria)); min-width: 4px; }
.barras-rotuladas__fio--zero { min-width: 0; }
.cor-serie-0 { --tom: var(--cor-reprovado); } .cor-serie-1 { --tom: var(--cor-secundaria); } .cor-serie-2 { --tom: var(--cor-alerta); }
.cor-serie-3 { --tom: var(--cor-sombra); } .cor-serie-4 { --tom: var(--cor-aprovado); } .cor-serie-5 { --tom: var(--cor-primaria); }
.cor-serie-6 { --tom: var(--cor-terciaria); } .cor-serie-7 { --tom: var(--cor-neutra); }
.cor-faixa-0 { --tom: var(--cor-alerta); } .cor-faixa-1 { --tom: var(--cor-secundaria); } .cor-faixa-2 { --tom: var(--cor-reprovado); } .cor-faixa-3 { --tom: var(--cor-reprovado-escura); }

/* Rosca (gráfico de pizza com furo) com lista clicável ao lado. */
.rosca { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.rosca__roda { position: relative; width: 128px; height: 128px; flex: none; }
.rosca__roda svg { transform: rotate(-90deg); }
.rosca__centro { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; }
.rosca__centro b { font-size: 24px; font-weight: 800; line-height: 1; color: var(--cor-titulo); }
.rosca__centro small { font-size: 10px; color: var(--cor-texto-secundario); }
.rosca__lista { flex: 1; min-width: 160px; display: grid; gap: 6px; }
.rosca__item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--cor-texto-secundario); text-decoration: none; }
.rosca__item:hover { color: var(--cor-titulo); }
.rosca__item i { width: 10px; height: 10px; border-radius: 4px; background: var(--tom); flex: none; }
.rosca__item span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rosca__item b { color: var(--cor-titulo); font-variant-numeric: tabular-nums; }
.rosca__item small { width: 36px; text-align: right; font-size: 10px; }

/* Mapa de calor por mês (clicar filtra). A intensidade vem de --n (0 a 4) e o tom de .tom-*. */
.mapa-calor { display: flex; gap: 6px; margin: 0 0 12px; }
.mapa-calor__mes { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 6px; text-decoration: none; color: var(--cor-texto-secundario); font-size: 10px; }
.mapa-calor__celula { width: 100%; height: 44px; border-radius: 8px; display: grid; place-items: center; font-size: 10px; font-weight: 700; background: color-mix(in srgb, var(--tom) calc(var(--n) * 22%), var(--cor-superficie)); color: var(--tom); }
.mapa-calor__celula[data-n="0"] { background: color-mix(in srgb, var(--tom) 7%, var(--cor-superficie)); }
.mapa-calor__celula[data-n="3"], .mapa-calor__celula[data-n="4"] { color: #fff; }
.mapa-calor__mes--ativo .mapa-calor__celula { box-shadow: 0 0 0 2px var(--cor-primaria), 0 0 0 4px var(--cor-superficie); }
.mapa-calor__mes--ativo > span { color: var(--cor-primaria); font-weight: 700; }
.mapa-calor__mes:hover .mapa-calor__celula { filter: brightness(.96); }
.mapa-calor__escala { display: flex; align-items: center; gap: 8px; font-size: 10px; color: var(--cor-texto-secundario); margin: 0 0 14px; }
.mapa-calor__escala i { display: inline-block; width: 16px; height: 8px; border-radius: 2px; background: color-mix(in srgb, var(--tom) calc(var(--n) * 22%), var(--cor-superficie)); }

/* Controle segmentado (alternar entre 2 ou 3 visões), chips de filtro e recortes rápidos com contagem. */
.controle-segmentado { display: inline-flex; overflow: hidden; border: 1px solid var(--cor-borda); border-radius: 8px; }
.controle-segmentado a { padding: 6px 12px; font-size: 12px; color: var(--cor-texto-secundario); text-decoration: none; background: var(--cor-superficie); border-left: 1px solid var(--cor-borda); }
.controle-segmentado a:first-child { border-left: 0; }
.controle-segmentado a.ativo { background: var(--cor-primaria); color: #fff; }
.chips { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 0 0 12px; }
.chip { padding: 6px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; border: 1px solid var(--cor-borda); background: var(--cor-superficie); color: var(--cor-texto-secundario); text-decoration: none; }
.chip:hover { background: var(--cor-fundo-alternado); }
.chip.ativo { background: var(--cor-primaria); border-color: var(--cor-primaria); color: #fff; }
.chip--limpar { margin-left: auto; background: var(--cor-reprovado-mais-clara); border-color: transparent; color: var(--cor-reprovado-escura); }
/* cartões do mesmo tamanho; o respiro de 3px deixa o anel do cartão ativo aparecer inteiro (o overflow cortava a borda) */
.recortes { display: grid; grid-auto-flow: column; grid-auto-columns: 176px; gap: 8px; overflow-x: auto; padding: 3px 3px 7px; margin: -3px -3px 1px; }
.recortes__item { display: flex; align-items: center; gap: 8px; flex: none; padding: 8px 12px; border-radius: 12px; text-decoration: none; text-align: left; border: 1px solid color-mix(in srgb, var(--tom) 35%, var(--cor-borda)); background: color-mix(in srgb, var(--tom) 8%, var(--cor-superficie)); color: var(--tom); }
.recortes__item .icone-svg { font-size: 16px; }
.recortes__item b { display: block; font-size: 12.5px; line-height: 1.2; }
.recortes__item small { display: block; font-size: 11px; opacity: .85; }
.recortes__item--ativo { box-shadow: 0 0 0 2px var(--tom); }
.recortes__item--desligado { opacity: .5; pointer-events: none; }
.recortes__rotulo { font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--cor-texto-secundario); margin: 0 0 6px; }

/* Menu suspenso aberto por um botão (<details>). */
.menu-suspenso { position: relative; }
.menu-suspenso > summary { list-style: none; }
.menu-suspenso > summary::-webkit-details-marker { display: none; }
.menu-suspenso__lista { position: absolute; right: 0; z-index: 30; margin-top: 8px; min-width: 200px; background: var(--cor-superficie); border: 1px solid var(--cor-borda); border-radius: 12px; box-shadow: 0 12px 32px rgba(10, 42, 108, .14); overflow: hidden; }
.menu-suspenso__lista button, .menu-suspenso__lista a { display: block; width: 100%; text-align: left; padding: 11px 16px; border: 0; border-bottom: 1px solid var(--cor-borda-leve); background: transparent; color: var(--cor-titulo); font: inherit; font-size: 13.5px; cursor: pointer; text-decoration: none; }
.menu-suspenso__lista button:last-child, .menu-suspenso__lista a:last-child { border-bottom: 0; }
.menu-suspenso__lista button:hover, .menu-suspenso__lista a:hover { background: var(--cor-fundo-alternado); }

/* Subitem do menu lateral que ainda não existe (ex.: IPTU, Energia e Gás dentro de Cobrança). */
.item-lateral-sub--breve {
    opacity: .45;
    cursor: default;
}

.item-lateral-sub--breve small {
    font-size: 10px;
    margin-left: auto;
}

/* Icones de linha do ONE (Tabler Icons, licenca MIT). Uso: <i class="ic ic-check" aria-hidden="true"></i>. Herdam a cor do texto. */
.ic{display:inline-block;width:1.1em;height:1.1em;vertical-align:-0.18em;background-color:currentColor;-webkit-mask:var(--ic) center/contain no-repeat;mask:var(--ic) center/contain no-repeat;flex:none}
.ic-caret-down-cheio{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22black%22%3E%3Cpath d=%22M18 9c.852 0 1.297 .986 .783 1.623l-.076 .084l-6 6a1 1 0 0 1 -1.32 .083l-.094 -.083l-6 -6l-.083 -.094l-.054 -.077l-.054 -.096l-.017 -.036l-.027 -.067l-.032 -.108l-.01 -.053l-.01 -.06l-.004 -.057v-.118l.005 -.058l.009 -.06l.01 -.052l.032 -.108l.027 -.067l.07 -.132l.065 -.09l.073 -.081l.094 -.083l.077 -.054l.096 -.054l.036 -.017l.067 -.027l.108 -.032l.053 -.01l.06 -.01l.057 -.004l12.059 -.002z%22 /%3E%3C/svg%3E")}
.ic-circle-cheio{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22black%22%3E%3Cpath d=%22M7 3.34a10 10 0 1 1 -4.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 4.995 -8.336z%22 /%3E%3C/svg%3E")}
.ic-star-cheio{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22black%22%3E%3Cpath d=%22M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z%22 /%3E%3C/svg%3E")}
.ic-alert-triangle{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 9v4%22 /%3E %3Cpath d=%22M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z%22 /%3E %3Cpath d=%22M12 16h.01%22 /%3E%3C/svg%3E")}
.ic-arrow-down{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 5l0 14%22 /%3E %3Cpath d=%22M18 13l-6 6%22 /%3E %3Cpath d=%22M6 13l6 6%22 /%3E%3C/svg%3E")}
.ic-arrow-up-right{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M17 7l-10 10%22 /%3E %3Cpath d=%22M8 7l9 0l0 9%22 /%3E%3C/svg%3E")}
.ic-arrows-horizontal{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M7 8l-4 4l4 4%22 /%3E %3Cpath d=%22M17 8l4 4l-4 4%22 /%3E %3Cpath d=%22M3 12l18 0%22 /%3E%3C/svg%3E")}
.ic-building-bank{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 21l18 0%22 /%3E %3Cpath d=%22M3 10l18 0%22 /%3E %3Cpath d=%22M5 6l7 -3l7 3%22 /%3E %3Cpath d=%22M4 10l0 11%22 /%3E %3Cpath d=%22M20 10l0 11%22 /%3E %3Cpath d=%22M8 14l0 3%22 /%3E %3Cpath d=%22M12 14l0 3%22 /%3E %3Cpath d=%22M16 14l0 3%22 /%3E%3C/svg%3E")}
.ic-calendar{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z%22 /%3E %3Cpath d=%22M16 3v4%22 /%3E %3Cpath d=%22M8 3v4%22 /%3E %3Cpath d=%22M4 11h16%22 /%3E %3Cpath d=%22M11 15h1%22 /%3E %3Cpath d=%22M12 15v3%22 /%3E%3C/svg%3E")}
.ic-camera{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2%22 /%3E %3Cpath d=%22M9 13a3 3 0 1 0 6 0a3 3 0 0 0 -6 0%22 /%3E%3C/svg%3E")}
.ic-chart-bar{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z%22 /%3E %3Cpath d=%22M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z%22 /%3E %3Cpath d=%22M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z%22 /%3E %3Cpath d=%22M4 20h14%22 /%3E%3C/svg%3E")}
.ic-chart-line{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 19l16 0%22 /%3E %3Cpath d=%22M4 15l4 -6l4 2l4 -5l4 4%22 /%3E%3C/svg%3E")}
.ic-check{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12l5 5l10 -10%22 /%3E%3C/svg%3E")}
.ic-circle-check{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0%22 /%3E %3Cpath d=%22M9 12l2 2l4 -4%22 /%3E%3C/svg%3E")}
.ic-clipboard-list{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2%22 /%3E %3Cpath d=%22M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z%22 /%3E %3Cpath d=%22M9 12l.01 0%22 /%3E %3Cpath d=%22M13 12l2 0%22 /%3E %3Cpath d=%22M9 16l.01 0%22 /%3E %3Cpath d=%22M13 16l2 0%22 /%3E%3C/svg%3E")}
.ic-clock{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0%22 /%3E %3Cpath d=%22M12 7v5l3 3%22 /%3E%3C/svg%3E")}
.ic-coin{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0%22 /%3E %3Cpath d=%22M14.8 9a2 2 0 0 0 -1.8 -1h-2a2 2 0 1 0 0 4h2a2 2 0 1 1 0 4h-2a2 2 0 0 1 -1.8 -1%22 /%3E %3Cpath d=%22M12 7v10%22 /%3E%3C/svg%3E")}
.ic-confetti{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 5h2%22 /%3E %3Cpath d=%22M5 4v2%22 /%3E %3Cpath d=%22M11.5 4l-.5 2%22 /%3E %3Cpath d=%22M18 5h2%22 /%3E %3Cpath d=%22M19 4v2%22 /%3E %3Cpath d=%22M15 9l-1 1%22 /%3E %3Cpath d=%22M18 13l2 -.5%22 /%3E %3Cpath d=%22M18 19h2%22 /%3E %3Cpath d=%22M19 18v2%22 /%3E %3Cpath d=%22M14 16.518l-6.518 -6.518l-4.39 9.58a1 1 0 0 0 1.329 1.329l9.579 -4.39z%22 /%3E%3C/svg%3E")}
.ic-device-floppy{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2%22 /%3E %3Cpath d=%22M12 14m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0%22 /%3E %3Cpath d=%22M14 4l0 4l-6 0l0 -4%22 /%3E%3C/svg%3E")}
.ic-door-exit{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M13 12v.01%22 /%3E %3Cpath d=%22M3 21h18%22 /%3E %3Cpath d=%22M5 21v-16a2 2 0 0 1 2 -2h7.5m2.5 10.5v7.5%22 /%3E %3Cpath d=%22M14 7h7m-3 -3l3 3l-3 3%22 /%3E%3C/svg%3E")}
.ic-folder{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2%22 /%3E%3C/svg%3E")}
.ic-handshake{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572%22 /%3E %3Cpath d=%22M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25%22 /%3E %3Cpath d=%22M12.5 15.5l2 2%22 /%3E %3Cpath d=%22M15 13l2 2%22 /%3E%3C/svg%3E")}
.ic-home{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12l-2 0l9 -9l9 9l-2 0%22 /%3E %3Cpath d=%22M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7%22 /%3E %3Cpath d=%22M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6%22 /%3E%3C/svg%3E")}
.ic-key{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z%22 /%3E %3Cpath d=%22M15 9h.01%22 /%3E%3C/svg%3E")}
.ic-lock-open{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 11m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z%22 /%3E %3Cpath d=%22M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0%22 /%3E %3Cpath d=%22M8 11v-5a4 4 0 0 1 8 0%22 /%3E%3C/svg%3E")}
.ic-lock{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z%22 /%3E %3Cpath d=%22M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0%22 /%3E %3Cpath d=%22M8 11v-4a4 4 0 1 1 8 0v4%22 /%3E%3C/svg%3E")}
.ic-magnet{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 13v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a2 2 0 0 0 6 0v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a8 8 0 0 1 -16 0%22 /%3E %3Cpath d=%22M4 8l5 0%22 /%3E %3Cpath d=%22M15 8l4 0%22 /%3E%3C/svg%3E")}
.ic-mail{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z%22 /%3E %3Cpath d=%22M3 7l9 6l9 -6%22 /%3E%3C/svg%3E")}
.ic-menu-2{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 6l16 0%22 /%3E %3Cpath d=%22M4 12l16 0%22 /%3E %3Cpath d=%22M4 18l16 0%22 /%3E%3C/svg%3E")}
.ic-paperclip{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M15 7l-6.5 6.5a1.5 1.5 0 0 0 3 3l6.5 -6.5a3 3 0 0 0 -6 -6l-6.5 6.5a4.5 4.5 0 0 0 9 9l6.5 -6.5%22 /%3E%3C/svg%3E")}
.ic-pencil{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4%22 /%3E %3Cpath d=%22M13.5 6.5l4 4%22 /%3E%3C/svg%3E")}
.ic-phone{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2%22 /%3E%3C/svg%3E")}
.ic-receipt{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16l-3 -2l-2 2l-2 -2l-2 2l-2 -2l-3 2m4 -14h6m-6 4h6m-2 4h2%22 /%3E%3C/svg%3E")}
.ic-refresh{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4%22 /%3E %3Cpath d=%22M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4%22 /%3E%3C/svg%3E")}
.ic-search{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0%22 /%3E %3Cpath d=%22M21 21l-6 -6%22 /%3E%3C/svg%3E")}
.ic-settings{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z%22 /%3E %3Cpath d=%22M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0%22 /%3E%3C/svg%3E")}
.ic-shield{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3%22 /%3E%3C/svg%3E")}
.ic-speakerphone{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M18 8a3 3 0 0 1 0 6%22 /%3E %3Cpath d=%22M10 8v11a1 1 0 0 1 -1 1h-1a1 1 0 0 1 -1 -1v-5%22 /%3E %3Cpath d=%22M12 8h0l4.524 -3.77a.9 .9 0 0 1 1.476 .692v12.156a.9 .9 0 0 1 -1.476 .692l-4.524 -3.77h-8a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h8%22 /%3E%3C/svg%3E")}
.ic-square-check{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z%22 /%3E %3Cpath d=%22M9 12l2 2l4 -4%22 /%3E%3C/svg%3E")}
.ic-square{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z%22 /%3E%3C/svg%3E")}
.ic-star{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z%22 /%3E%3C/svg%3E")}
.ic-trophy{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M8 21l8 0%22 /%3E %3Cpath d=%22M12 17l0 4%22 /%3E %3Cpath d=%22M7 4l10 0%22 /%3E %3Cpath d=%22M17 4v8a5 5 0 0 1 -10 0v-8%22 /%3E %3Cpath d=%22M5 9m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0%22 /%3E %3Cpath d=%22M19 9m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0%22 /%3E%3C/svg%3E")}
.ic-users{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0%22 /%3E %3Cpath d=%22M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2%22 /%3E %3Cpath d=%22M16 3.13a4 4 0 0 1 0 7.75%22 /%3E %3Cpath d=%22M21 21v-2a4 4 0 0 0 -3 -3.85%22 /%3E%3C/svg%3E")}
.ic-world{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0%22 /%3E %3Cpath d=%22M3.6 9h16.8%22 /%3E %3Cpath d=%22M3.6 15h16.8%22 /%3E %3Cpath d=%22M11.5 3a17 17 0 0 0 0 18%22 /%3E %3Cpath d=%22M12.5 3a17 17 0 0 1 0 18%22 /%3E%3C/svg%3E")}
.ic-x{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M18 6l-12 12%22 /%3E %3Cpath d=%22M6 6l12 12%22 /%3E%3C/svg%3E")}
.ic-zzz{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M4 12h6l-6 8h6%22 /%3E %3Cpath d=%22M14 4h6l-6 8h6%22 /%3E%3C/svg%3E")}

/* Botões compactos da barra de ações das tarefas (Vendas, Rescisão, Implantação): antes copiados em cada tela (DS-09, 26/10/2026) */
.botao-compacto{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:12px;font-weight:400;border:none;background:var(--cor-primaria);color:#fff;border-radius:8px;padding:6px 14px;cursor:pointer}
.botao-compacto:hover{filter:brightness(1.1)}
.acoes-topo-tarefa button:not(.botao-compacto){ font:inherit;font-size:11.5px;font-weight:400;border:1px solid var(--cor-borda-leve);background:#fff;color:var(--cor-titulo); border-radius:8px;padding:5px 10px;cursor:pointer; }
.acoes-topo-tarefa button:not(.botao-compacto):hover{border-color:var(--cor-primaria);color:var(--cor-primaria)}
.acoes-topo-tarefa button svg{width:13px;height:13px;vertical-align:-2px;margin-right:3px}
.botao-compacto-icone{padding:5px 7px !important}
.botao-compacto-icone svg{margin-right:0 !important}
.acoes-topo-tarefa details.botao-compacto-icone>summary{padding:5px 7px}
.acoes-topo-tarefa form.botao-compacto-icone{margin:0}

/* Padrão único de botão (DS-09, 26/10/2026): variações pequena e larga + 'hidden' respeitado no contornado. */
.botao-principal--pequeno { padding: 6px 12px; font-size: 12.5px; line-height: 1.3; }
.botao-principal--largo { display: block; width: 100%; text-align: center; }
.botao-contornado[hidden] { display: none; }

/* Padrão único de selo (DS-10, 26/10/2026): 12px, pílula, 5 tons. As cores por status (badge-status--aprovado etc.) continuam valendo. */
.badge-status--sucesso { background-color: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado-texto); }
.badge-status--erro { background-color: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado-escura); }
.badge-status--aviso { background-color: var(--cor-secundaria-suave); color: var(--cor-laranja-escuro); }
.badge-status--info { background-color: var(--cor-primaria-suave); color: var(--cor-primaria-texto); }
.badge-status--neutro { background-color: var(--cor-borda-leve); color: var(--cor-texto-secundario); }

/* Tons que a Carteira usa nas etiquetas (cz, az, lj, vm, vx, vd, ro) e mais dois do selo padrão. */
.badge-status--roxo { background-color: var(--cor-roxo-suave); color: var(--cor-roxo); }
.badge-status--erro-forte { background-color: var(--cor-reprovado-escura); color: #fff; }
.badge-status--tom-cz { background-color: var(--cor-borda-leve); color: var(--cor-texto-secundario); }
.badge-status--tom-az { background-color: var(--cor-primaria-suave); color: var(--cor-primaria-texto); }
.badge-status--tom-lj { background-color: var(--cor-secundaria-suave); color: var(--cor-laranja-escuro); }
.badge-status--tom-vm { background-color: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado-escura); }
.badge-status--tom-vx { background-color: var(--cor-reprovado-escura); color: #fff; }
.badge-status--tom-vd { background-color: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado-texto); }
.badge-status--tom-ro { background-color: var(--cor-roxo-suave); color: var(--cor-roxo); }

/* Reincidência do débito (Carteira): do verde ao vermelho forte, na mesma escada dos tons padrão. */
.badge-status--reinc-novo { background-color: var(--cor-aprovado-mais-clara); color: var(--cor-aprovado-texto); }
.badge-status--reinc-reincidente { background-color: var(--cor-secundaria-suave); color: var(--cor-laranja-escuro); }
.badge-status--reinc-frequente { background-color: var(--cor-reprovado-mais-clara); color: var(--cor-reprovado-escura); }
.badge-status--reinc-cronico { background-color: var(--cor-reprovado-escura); color: #fff; }
.ic-arrow-back-up{--ic:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22black%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M9 14l-4 -4l4 -4%22 /%3E %3Cpath d=%22M5 10h11a4 4 0 1 1 0 8h-1%22 /%3E%3C/svg%3E")}
/* Ao imprimir, o navegador costuma esconder cores de fundo, e o ícone é desenhado por cor de fundo: força aparecer. */
@media print { .ic, .badge-status { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }

/* Classes utilitárias (DS-01, 27/10/2026): no lugar dos style="..." repetidos nas telas. Levam !important porque substituem um estilo
   que antes ficava dentro do próprio elemento e vencia qualquer regra de classe. */
.erro-campo { color: var(--cor-reprovado) !important; font-size: 13px !important; }
.texto-secundario-13 { font-size: 13px !important; color: var(--cor-texto-secundario) !important; margin: 0 0 10px !important; }
.texto-centro { text-align: center !important; }
.texto-direita { text-align: right !important; }
.sem-quebra { white-space: nowrap !important; }
.rolagem-x { overflow-x: auto !important; }
.m-0 { margin: 0 !important; }
.mt-0 { margin-top: 0 !important; }
.mt-6 { margin-top: 6px !important; }
.mt-8 { margin-top: 8px !important; }
.mt-10 { margin-top: 10px !important; }
.mt-14 { margin-top: 14px !important; }
.mt-16 { margin-top: 16px !important; }
.mt-20 { margin-top: 20px !important; }
.mb-20 { margin-bottom: 20px !important; }
.py-6 { padding-top: 6px !important; padding-bottom: 6px !important; }
.p-18 { padding: 18px !important; }

/* DS-01, segunda leva (27/10/2026) */
.sem-margem-rolagem-x { padding: 0 !important; overflow-x: auto !important; }
.linha-apagada { padding: 6px 0 !important; color: var(--cor-texto-secundario) !important; }
.vazio-centro { padding: 24px 14px !important; text-align: center !important; color: var(--cor-texto-secundario) !important; }
.fundo-aprovado-claro { background: var(--cor-aprovado-mais-clara) !important; }
.fundo-primaria-claro { background: var(--cor-primaria-mais-clara) !important; }
.p-10 { padding: 10px !important; }
.nota-13-mb20 { font-size: 13px !important; color: var(--cor-texto-secundario) !important; margin-bottom: 20px !important; }
.flex-quebra-10 { display: flex !important; gap: 10px !important; flex-wrap: wrap !important; }
.flex-entre-mb8 { display: flex !important; align-items: center !important; justify-content: space-between !important; margin: 0 0 8px !important; gap: 10px !important; }
.col-num-70 { width: 70px !important; text-align: right !important; font-variant-numeric: tabular-nums !important; }
.nota-12 { font-size: 12px !important; color: var(--cor-texto-secundario) !important; }
.linha-apagada-dir { padding: 6px 10px 6px 0 !important; color: var(--cor-texto-secundario) !important; }
.nota-11 { font-size: 11px !important; color: var(--cor-texto-secundario) !important; }
.texto-13-5-medio { font-size: 13.5px !important; font-weight: 500 !important; }
.fundo-secundaria-suave { background: var(--cor-secundaria-suave) !important; }
.mb-16 { margin-bottom: 16px !important; }
.mb-14 { margin-bottom: 14px !important; }
.mb-0 { margin-bottom: 0 !important; }
.mt-2 { margin-top: 2px !important; }
.gap-12 { gap: 12px !important; }
.peso-medio { font-weight: 500 !important; }
.pl-20 { padding-left: 20px !important; }
.nota-14 { font-size: 14px !important; color: var(--cor-texto-secundario) !important; }

/* DS-01, padronização (27/10/2026): escala única de tamanho de letra. Os soltos 11,5/12,5/13,5px foram arredondados para o tamanho
   da escala mais próximo (para cima). Levam !important porque substituem um style="font-size" que vencia qualquer regra de classe. */
:root {
    --fonte-xs: 11px;
    --fonte-sm: 12px;
    --fonte-md: 13px;
    --fonte-lg: 14px;
    --fonte-xl: 16px;
}
.fonte-11 { font-size: var(--fonte-xs) !important; }
.fonte-12 { font-size: var(--fonte-sm) !important; }
.fonte-13 { font-size: var(--fonte-md) !important; }
.fonte-14 { font-size: var(--fonte-lg) !important; }
.fonte-16 { font-size: var(--fonte-xl) !important; }

/* Boleto rescisório × residual no Informativo de Contas (Thais, 29/10/2026) */
.boletos-composicao { display: flex; flex-direction: column; gap: 16px; }
.boleto-caixa { border: 1px solid var(--cor-borda-leve); border-radius: 12px; padding: 14px 16px; background: var(--cor-fundo-cartao, #fff); }
.boleto-caixa--residual { border-color: var(--cor-primaria); }
.boleto-caixa__topo { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; font-size: 13px; text-transform: uppercase; letter-spacing: .04em; }
.boleto-caixa__selo { font-size: 11.5px; font-weight: 600; text-transform: none; letter-spacing: 0; color: var(--cor-primaria); }
.boleto-linha { display: flex; justify-content: space-between; gap: 14px; padding: 9px 0; border-bottom: 1px solid var(--cor-borda-leve); font-size: 13.5px; }
.boleto-linha__detalhe { display: block; font-size: 11.5px; color: var(--cor-texto-secundario); margin-top: 2px; }
.boleto-linha__lado { display: flex; align-items: center; gap: 6px; }
.boleto-linha__valor { font-variant-numeric: tabular-nums; white-space: nowrap; font-weight: 500; }
.boleto-linha__valor--credito { color: var(--cor-aprovado); }
.boleto-linha__controles { display: inline-flex; gap: 4px; margin-left: 6px; }
.boleto-linha__controles button, .boleto-ok { border: none; background: none; cursor: pointer; font-size: 13px; padding: 2px; }
.boleto-excluir { color: var(--cor-reprovado); }
.boleto-excluir--volta, .boleto-ok { color: var(--cor-aprovado); }
.boleto-linha--excluida { opacity: .5; }
.boleto-linha--excluida .boleto-linha__nome, .boleto-linha--excluida .boleto-linha__valor { text-decoration: line-through; }
.boleto-input { width: 100px; padding: 5px 7px; border: 1px solid var(--cor-borda); border-radius: 6px; font-size: 13px; text-align: right; font-variant-numeric: tabular-nums; }
.boleto-total { display: flex; justify-content: space-between; align-items: baseline; padding-top: 12px; margin-top: 4px; border-top: 2px solid var(--cor-sombra); }
.boleto-total strong { font-size: 18px; color: var(--cor-primaria); font-variant-numeric: tabular-nums; }
.boleto-criar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 12px; font-size: 12px; color: var(--cor-texto-secundario); }
.boleto-vazio, .boleto-nota { font-size: 12px; color: var(--cor-texto-secundario); margin: 8px 0 0; }
