portal_publico/static/css/conciliacao-fornecedores.css

1326 lines
28 KiB
CSS

/* "Conciliação de Fornecedores" (Utilitários) — .conc-* — só usado em
conciliacao-fornecedores.html. Carrega perfis-acesso.css também, pra
reaproveitar .pa-table/.pa-table-wrap/.pa-search/.status-pill (mesmo
padrão de nao-conformidades.css/dashboard-contabil.css). */
.conc-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--space-4);
margin-bottom: var(--space-5);
}
.conc-header h2 {
margin: 0 0 var(--space-1);
}
.conc-subtitle {
color: var(--text-secondary);
font-size: 0.9rem;
margin: 0;
max-width: 760px;
}
.conc-empty {
color: var(--text-muted);
font-style: italic;
padding: var(--space-4);
text-align: center;
}
.conc-num {
text-align: right !important;
white-space: nowrap;
}
/* .pa-table td:last-child (perfis-acesso.css) alinha a última coluna à
direita; na tabela de fornecedores ela é a Situação, e numa célula de
aviso com colspan ela é a única. */
.conc-table td:last-child,
.pa-table td.conc-empty {
text-align: left;
}
.pa-table td.conc-empty {
text-align: center;
}
.conc-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-3);
flex-wrap: wrap;
margin-bottom: var(--space-3);
}
.conc-toolbar .pa-search {
margin-left: auto;
}
/* ---------------- Formulário de nova conciliação ---------------- */
.conc-form {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: var(--space-5);
margin-bottom: var(--space-5);
animation: pidFadeSlideUp 160ms ease-out;
}
.conc-form__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: var(--space-3) var(--space-4);
}
.conc-form__empresa {
margin: var(--space-1) 0 0;
font-size: 0.82rem;
font-weight: 600;
color: var(--accent);
min-height: 1.2em;
}
.conc-form__empresa.is-erro {
color: var(--danger);
}
.conc-form__empresa.is-carregando {
color: var(--text-muted);
font-weight: 400;
}
.conc-form__hint {
margin: var(--space-1) 0 0;
font-size: 0.75rem;
color: var(--text-muted);
}
.conc-file-field {
display: flex;
align-items: center;
gap: var(--space-3);
flex-wrap: wrap;
}
.conc-file-field__btn {
display: inline-flex;
align-items: center;
gap: var(--space-2);
cursor: pointer;
}
.conc-file-field__input {
display: none;
}
.conc-file-field__name {
font-size: 0.85rem;
color: var(--text-secondary);
}
/* ---------------- Cabeçalho da empresa ---------------- */
.conc-voltar-btn {
display: inline-flex;
align-items: center;
gap: var(--space-1);
margin-bottom: var(--space-3);
}
.conc-empresa {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-4);
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: var(--space-3) var(--space-4);
margin-bottom: var(--space-4);
}
.conc-empresa .btn-outline {
display: inline-flex;
align-items: center;
gap: var(--space-2);
white-space: nowrap;
}
.conc-empresa__codigo {
margin-right: var(--space-2);
font-size: 0.75rem;
font-weight: 700;
color: var(--accent);
letter-spacing: 0.04em;
}
.conc-empresa__nome {
display: inline;
margin: 0;
font-size: 1.05rem;
}
.conc-empresa__meta {
display: flex;
flex-wrap: wrap;
gap: var(--space-1) var(--space-5);
margin-top: 4px;
font-size: 0.78rem;
color: var(--text-secondary);
}
.conc-empresa__meta strong {
color: var(--text-primary);
font-weight: 600;
}
.conc-alertas-gerais {
margin-bottom: var(--space-4);
}
.conc-filtro-alerta {
font-size: 0.82rem;
color: var(--text-secondary);
margin: 0 0 var(--space-3);
}
.conc-filtro-alerta button {
color: var(--accent);
font-weight: 600;
margin-left: var(--space-2);
}
/* ---------------- Faixa de indicadores ---------------- */
.conc-cards {
margin-bottom: var(--space-3);
}
.conc-kpis {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.4fr);
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
overflow: hidden;
}
.conc-kpi,
.conc-progresso {
padding: var(--space-3) var(--space-4);
display: flex;
flex-direction: column;
gap: 2px;
text-align: left;
font: inherit;
color: inherit;
background: none;
border: 0;
border-right: 1px solid var(--border-subtle);
}
.conc-progresso {
border-right: 0;
justify-content: center;
gap: 6px;
}
button.conc-kpi {
cursor: pointer;
transition: background var(--transition-fast);
}
button.conc-kpi:hover {
background: var(--card-bg-hover);
}
button.conc-kpi.is-active {
box-shadow: inset 0 -2px 0 var(--accent);
}
.conc-kpi__rotulo {
font-size: 0.72rem;
color: var(--text-secondary);
}
.conc-kpi__valor {
font-size: 1.35rem;
font-weight: 700;
line-height: 1.2;
color: var(--text-primary);
}
.conc-kpi__detalhe {
font-size: 0.72rem;
color: var(--text-muted);
}
.conc-kpi--warning .conc-kpi__valor {
color: var(--gold);
}
.conc-kpi--danger .conc-kpi__valor {
color: var(--danger);
}
.conc-progresso__topo {
display: flex;
justify-content: space-between;
font-size: 0.82rem;
color: var(--text-secondary);
}
.conc-progresso__topo strong {
color: var(--text-primary);
}
.conc-progresso__barra {
height: 8px;
border-radius: var(--radius-pill);
background: var(--bg-surface-raised);
overflow: hidden;
}
.conc-progresso__barra span {
display: block;
height: 100%;
background: #2f9e6e;
border-radius: var(--radius-pill);
transition: width 0.3s ease;
}
/* Apontamentos menores em etiquetas clicáveis (filtram a tabela). */
.conc-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--space-2);
margin-top: var(--space-3);
}
.conc-tags__rotulo {
font-size: 0.75rem;
color: var(--text-muted);
}
.conc-tag {
font-size: 0.75rem;
padding: 3px 10px;
border-radius: var(--radius-pill);
border: 1px solid var(--border-subtle);
background: var(--bg-surface);
color: var(--text-secondary);
transition: border-color var(--transition-fast), background var(--transition-fast);
}
.conc-tag strong {
color: var(--text-primary);
}
.conc-tag--warning strong {
color: var(--gold);
}
.conc-tag--danger strong {
color: var(--danger);
}
.conc-tag--info strong {
color: var(--accent);
}
.conc-tag:hover,
.conc-tag.is-active {
border-color: var(--accent);
}
.conc-tag.is-active {
background: rgba(var(--accent-rgb), 0.12);
}
/* ---------------- Chips de filtro ---------------- */
.conc-chip-row {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
}
.conc-chip {
padding: 4px 12px;
border-radius: var(--radius-pill);
border: 1px solid var(--border-subtle);
background: var(--bg-surface);
color: var(--text-secondary);
font-size: 0.8rem;
font-weight: 600;
transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);
}
.conc-chip:hover {
color: var(--text-primary);
}
.conc-chip.is-active {
border-color: var(--accent);
color: var(--accent);
background: rgba(var(--accent-rgb), 0.12);
}
.conc-chip__count {
margin-left: 4px;
font-weight: 700;
opacity: 0.8;
}
/* ---------------- Tabela de fornecedores ---------------- */
.conc-table th[data-sort] {
cursor: pointer;
user-select: none;
white-space: nowrap;
}
.conc-sort-icon {
color: var(--text-muted);
font-size: 0.75rem;
}
.conc-table th.is-sort-asc .conc-sort-icon,
.conc-table th.is-sort-desc .conc-sort-icon {
color: var(--accent);
}
.conc-expand-col {
width: 32px;
}
.conc-row {
cursor: pointer;
}
.conc-row.is-aberta td {
background: var(--bg-surface-raised);
}
/* Com algum fornecedor expandido, os demais ficam com o fundo mais escuro do
tema (`--bg-canvas`, mesmo tom das linhas em destaque do Relatório
Contábil) pra destacar o que está em análise (pedido do usuário). Fora do
hover, pra `.pa-table tr:hover td` continuar dando o feedback de sempre.
O conteúdo também fica apagado: o fundo vai no `tr` e a opacidade no `td`
(com fundo transparente), senão a opacidade clarearia o fundo junto. */
:is(#conc-contas-body, #conc-venc-body):has(> tr.conc-row.is-aberta) > tr.conc-row:not(.is-aberta):not(:hover) {
background: var(--bg-canvas);
}
:is(#conc-contas-body, #conc-venc-body):has(> tr.conc-row.is-aberta) > tr.conc-row:not(.is-aberta):not(:hover) > td {
background: transparent;
opacity: 0.35;
}
/* ---------------- Abas do detalhe ---------------- */
.conc-abas {
margin-bottom: var(--space-3);
}
.conc-abas .conc-chip__count {
margin-left: 4px;
}
.conc-venc-intro {
margin: var(--space-2) 0 var(--space-3);
font-size: 0.8rem;
color: var(--text-muted);
}
.conc-venc-dias {
font-size: 0.74rem;
color: var(--text-muted);
}
.conc-expand-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
border-radius: var(--radius-sm);
color: var(--text-secondary);
}
.conc-expand-chevron {
transition: transform var(--transition-fast);
}
.conc-row.is-aberta .conc-expand-chevron {
transform: rotate(90deg);
}
.conc-conta-numero {
font-variant-numeric: tabular-nums;
color: var(--text-secondary);
white-space: nowrap;
}
.conc-fornecedor__nome {
font-weight: 600;
}
.conc-fornecedor__alerta {
display: block;
font-size: 0.75rem;
color: var(--text-muted);
margin-top: 2px;
}
.conc-valor {
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.conc-valor--devedor {
color: var(--danger);
}
.conc-valor--zero {
color: var(--text-muted);
}
.conc-valor--vencido {
color: var(--gold);
font-weight: 600;
}
.conc-status {
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.conc-status svg {
flex-shrink: 0;
}
.status-pill--ok {
color: #2f9e6e;
background: rgba(47, 158, 110, 0.14);
}
.status-pill--danger {
color: var(--danger);
background: rgba(var(--danger-rgb), 0.14);
}
.status-pill--warning {
color: var(--gold);
background: rgba(var(--gold-rgb), 0.18);
}
.status-pill--neutral {
color: var(--text-secondary);
background: var(--bg-surface-raised);
}
.status-pill--validada {
color: var(--accent);
background: rgba(var(--accent-rgb), 0.14);
}
/* ---------------- Detalhe expandido ---------------- */
.pa-table td.conc-detail-cell {
background: var(--bg-surface-raised);
padding: var(--space-4) var(--space-5);
text-align: left;
cursor: default;
}
/* Só a célula externa da linha de detalhe (`>`): sem isso a regra pegava
também todas as células das sub-tabelas de lançamentos. */
.conc-detail-row:hover > td {
background: var(--bg-surface-raised);
}
.conc-detail {
display: flex;
flex-direction: column;
gap: var(--space-4);
animation: pidFadeIn 140ms ease-out;
}
.conc-alertas {
display: flex;
flex-direction: column;
gap: var(--space-2);
margin: 0;
padding: 0;
list-style: none;
}
.conc-alerta {
display: flex;
align-items: flex-start;
gap: var(--space-2);
font-size: 0.85rem;
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-sm);
background: var(--bg-surface);
border-left: 3px solid var(--border-subtle);
color: var(--text-primary);
}
.conc-alerta--alta {
border-left-color: var(--danger);
}
.conc-alerta--media {
border-left-color: var(--gold);
}
.conc-alerta--baixa {
border-left-color: var(--accent);
}
.conc-alerta__severidade {
font-size: 0.68rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
padding-top: 2px;
min-width: 44px;
}
.conc-alerta--alta .conc-alerta__severidade {
color: var(--danger);
}
.conc-alerta--media .conc-alerta__severidade {
color: var(--gold);
}
.conc-alerta--baixa .conc-alerta__severidade {
color: var(--accent);
}
.conc-detail__secao-titulo {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
flex-wrap: wrap;
margin: 0 0 var(--space-2);
}
.conc-detail__secao-titulo h4 {
margin: 0;
font-size: 0.9rem;
}
.conc-detail__titulo-grupo {
display: flex;
align-items: center;
gap: var(--space-4);
flex-wrap: wrap;
}
.conc-detail__acoes {
display: flex;
align-items: center;
gap: var(--space-3);
flex-wrap: wrap;
}
.conc-selecao-resumo {
font-size: 0.8rem;
color: var(--text-secondary);
}
.conc-selecao-resumo strong {
color: var(--text-primary);
}
.conc-subtabela {
width: 100%;
border-collapse: collapse;
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
overflow: hidden;
}
.conc-subtabela th {
text-align: left;
font-size: 0.68rem;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-muted);
padding: var(--space-2) var(--space-3);
border-bottom: 1px solid var(--border-subtle);
}
.conc-subtabela td {
padding: var(--space-2) var(--space-3);
border-bottom: 1px solid var(--border-subtle);
font-size: 0.82rem;
color: var(--text-primary);
vertical-align: top;
}
.conc-subtabela tr:last-child td {
border-bottom: none;
}
/* As sub-tabelas ficam dentro da .pa-table de fornecedores, então
`.pa-table tr:hover td` (perfis-acesso.css) casava com toda célula delas
sempre que o mouse estava em qualquer ponto da linha de detalhe, clareando
todos os lançamentos de uma vez. Estas três regras têm especificidade
maior que aquela: fundo neutro por padrão, destaque só na linha sob o
mouse, e seleção por último para vencer o hover. */
.pa-table .conc-subtabela tr td {
background: transparent;
}
.pa-table .conc-subtabela tbody tr:hover td {
background: var(--card-bg-hover);
}
.pa-table .conc-subtabela tr.is-selecionado td {
background: rgba(var(--accent-rgb), 0.12);
}
.conc-subtabela__check {
width: 28px;
}
/* Histórico e sugestão em uma linha só, cortados com reticências (texto
completo no `title`), para a altura da linha não variar com a largura da
tela (pedido do usuário). `max-width: 0` + largura em % faz a célula ceder
espaço em vez de alargar a tabela, igual à coluna de fornecedor. */
.conc-subtabela td.conc-historico {
max-width: 0;
width: 30%;
}
.conc-historico__texto,
.conc-historico__contrapartida {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.conc-historico__contrapartida {
font-size: 0.72rem;
color: var(--text-muted);
}
.conc-subtabela td.conc-situacao {
max-width: 0;
width: 34%;
}
.conc-subtabela td.conc-situacao .conc-sugestao {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Conta saindo da lista por não caber mais no filtro (ex.: acabou de ser
validada). `removerConta()` tira a linha ao fim da animação. */
.conc-table tbody tr.is-saindo {
animation: pidConcSaida 160ms ease-in forwards;
pointer-events: none;
}
@keyframes pidConcSaida {
to {
opacity: 0;
}
}
/* Botão "i" no canto da barra do razão: abre o histórico de vinculações. */
.conc-info-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
padding: 0;
border: 1px solid var(--border-subtle);
border-radius: 50%;
background: transparent;
color: var(--text-secondary);
cursor: pointer;
transition: color var(--transition-fast), border-color var(--transition-fast);
}
.conc-info-btn:hover,
.conc-info-btn:focus-visible {
color: var(--accent);
border-color: rgba(var(--accent-rgb), 0.55);
}
.conc-info-btn:active {
transform: scale(0.94);
}
/* Versão menor, na linha vinculada do razão, ao lado do "Desfazer". */
.conc-info-btn--linha {
width: 20px;
height: 20px;
margin-left: 2px;
vertical-align: middle;
}
.conc-info-btn--linha svg {
width: 13px;
height: 13px;
}
/* Modal do detalhe de um vínculo. */
.conc-vinculo-detalhe__criterio {
margin: 0 0 var(--space-2);
font-size: 0.78rem;
color: var(--text-secondary);
}
.conc-vinculo-detalhe__totais {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
margin-top: var(--space-2);
padding-top: var(--space-2);
border-top: 1px solid var(--border-subtle);
font-size: 0.8rem;
color: var(--text-secondary);
}
.conc-vinculo-detalhe__totais strong {
color: var(--text-primary);
}
/* Modal "Histórico de vinculações". */
.conc-historico-vinc {
max-height: 60vh;
overflow-y: auto;
}
.conc-historico-vinc__lista {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.conc-historico-vinc__item {
border: 1px solid var(--border-subtle);
border-left: 3px solid #2f9e6e;
border-radius: var(--radius-sm);
padding: var(--space-2) var(--space-3);
}
.conc-historico-vinc__item--acrescentou {
border-left-color: var(--accent);
}
.conc-historico-vinc__item--desfez {
border-left-color: var(--danger);
}
.conc-historico-vinc__cabecalho {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: var(--space-2);
font-size: 0.85rem;
margin-bottom: var(--space-1);
}
.conc-historico-vinc__tipo {
font-size: 0.78rem;
color: var(--text-secondary);
}
.conc-historico-vinc__quem {
margin-left: auto;
font-size: 0.75rem;
color: var(--text-muted);
}
.conc-historico-vinc__lancs {
list-style: none;
margin: 0;
padding: 0;
}
/* seq. | data | natureza | histórico (+ contrapartida) | valor | "acrescentado" */
.conc-historico-vinc__lanc {
display: grid;
grid-template-columns: 90px 80px 64px minmax(0, 1fr) 100px auto;
align-items: center;
gap: var(--space-2);
padding: 3px 0;
font-size: 0.8rem;
color: var(--text-secondary);
}
.conc-historico-vinc__lanc + .conc-historico-vinc__lanc {
border-top: 1px solid var(--border-subtle);
}
/* `min-width: 0` para as reticências de histórico/contrapartida valerem
dentro da coluna flexível do grid. */
.conc-historico-vinc__texto {
min-width: 0;
}
.conc-historico-vinc__texto .conc-historico__texto {
color: var(--text-primary);
}
.conc-historico-vinc__lanc.is-acrescentado {
color: var(--text-primary);
}
.conc-historico-vinc__seq {
font-weight: 600;
color: var(--text-primary);
}
.conc-historico-vinc__novo {
font-size: 0.68rem;
font-weight: 700;
text-transform: uppercase;
color: var(--accent);
}
.conc-historico-vinc__vazio {
margin: var(--space-3) 0;
font-size: 0.85rem;
color: var(--text-muted);
}
/* Texto completo do que foi cortado acima, no visual do Portal (mesmo de
`.dc-hover-tooltip__texto`). Criado por `pidConcMostraTooltip()`. */
.conc-tooltip {
position: fixed;
/* acima de `.modal-overlay` (100) e do modal de confirmação (150): também
é usado no modal "Histórico de vinculações" */
z-index: 200;
width: max-content;
max-width: 420px;
padding: var(--space-2) var(--space-3);
background: var(--bg-surface-raised);
color: var(--text-primary);
/* Borda na cor do tema + sombra média: com a borda neutra e a sombra
leve de `.dc-hover-tooltip__texto`, o balão se confundia com o fundo
escuro da tabela (pedido do usuário). */
border: 1px solid rgba(var(--accent-rgb), 0.55);
border-radius: var(--radius-sm);
box-shadow: var(--shadow-md);
font-size: 0.75rem;
font-style: normal;
line-height: 1.4;
white-space: normal;
pointer-events: none;
animation: pidFadeIn 120ms ease-out;
}
.conc-natureza {
font-size: 0.7rem;
font-weight: 700;
padding: 1px 6px;
border-radius: var(--radius-pill);
}
.conc-natureza--C {
color: var(--accent);
background: rgba(var(--accent-rgb), 0.12);
}
.conc-natureza--D {
color: var(--coral);
background: rgba(var(--coral-rgb), 0.14);
}
.conc-situacao {
font-size: 0.78rem;
color: var(--text-secondary);
}
.conc-situacao--vencido,
.conc-situacao--nao_vinculado {
color: var(--gold);
}
.conc-situacao--excedente {
color: var(--danger);
font-weight: 600;
}
.conc-vinculo {
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
background: var(--bg-surface);
margin-bottom: var(--space-2);
}
.conc-vinculo__header {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-3);
padding: var(--space-2) var(--space-3);
border-bottom: 1px solid var(--border-subtle);
font-size: 0.8rem;
color: var(--text-secondary);
}
.conc-vinculo__header strong {
color: var(--text-primary);
}
.conc-vinculo .conc-subtabela {
border: none;
border-radius: 0;
}
.conc-vinculos-lista {
max-height: 420px;
overflow-y: auto;
}
.conc-validacao {
display: flex;
flex-direction: column;
gap: var(--space-2);
border-top: 1px solid var(--border-subtle);
padding-top: var(--space-4);
}
.conc-validacao textarea {
width: 100%;
min-height: 64px;
resize: vertical;
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-surface);
color: var(--text-primary);
font: inherit;
font-size: 0.85rem;
}
.conc-validacao textarea:focus {
outline: none;
border-color: var(--accent);
}
.conc-validacao__info {
font-size: 0.78rem;
color: var(--text-muted);
}
.conc-btn-sm {
padding: 4px 12px;
font-size: 0.8rem;
}
.conc-sem-pendencias {
font-size: 0.85rem;
color: var(--text-muted);
font-style: italic;
margin: 0;
}
.conc-detail button:disabled {
opacity: 0.45;
cursor: not-allowed;
}
/* Checkbox de "validado" no fim de cada linha de fornecedor (atalho do
botão "Marcar como validada" do detalhe, mesmo endpoint). */
.conc-table th.conc-validado-col,
.conc-table td.conc-validado-col {
width: 90px;
text-align: center !important;
}
.conc-validado-check {
width: 18px;
height: 18px;
cursor: pointer;
accent-color: var(--accent);
}
/* ---------------- Toggle de validadas ---------------- */
.conc-toggle {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 0.8rem;
color: var(--text-secondary);
white-space: nowrap;
flex-shrink: 0;
margin-left: auto;
cursor: pointer;
}
.conc-toggle input {
accent-color: var(--accent);
}
.conc-toggle .conc-chip__count {
margin-left: 0;
}
/* ---------------- Filtros e cabeçalho fixos ao rolar ---------------- */
/* Sempre com `>`: as sub-tabelas de lançamentos ficam dentro desta tabela,
e um seletor descendente fixava o thead delas no meio da lista. */
/* A página rola pela janela e a .topbar (layout.css) já é sticky com
--topbar-height; os filtros ficam logo abaixo dela e o cabeçalho da
tabela logo abaixo dos filtros (altura fixa de --conc-toolbar-altura
para o cálculo bater). .pa-table-wrap tem overflow:hidden, que anularia
o sticky do thead: esta tabela abre mão dele. */
.conc-detail-view,
#conc-detail-view {
--conc-toolbar-altura: 52px;
--conc-thead-altura: 41px;
--conc-selecao-altura: 44px;
}
.conc-toolbar--fixa {
position: sticky;
top: var(--topbar-height);
z-index: 15;
flex-wrap: nowrap;
height: var(--conc-toolbar-altura);
margin-bottom: 0;
background: var(--bg-canvas);
}
.conc-toolbar--fixa .pa-search {
margin-left: 0;
width: 210px;
flex-shrink: 0;
}
.conc-table-wrap {
overflow: visible;
}
.conc-table > thead > tr > th {
position: sticky;
top: calc(var(--topbar-height) + var(--conc-toolbar-altura));
z-index: 10;
}
.conc-table > thead > tr > th:first-child {
border-top-left-radius: var(--radius-md);
}
.conc-table > thead > tr > th:last-child {
border-top-right-radius: var(--radius-md);
}
/* ---------------- Linhas compactas ---------------- */
.conc-table tbody tr.conc-row > td {
padding-top: 7px;
padding-bottom: 7px;
}
.conc-fornecedor__nome {
font-size: 0.86rem;
}
.conc-fornecedor__alerta {
font-size: 0.72rem;
}
/* Coluna do fornecedor flexível e cortada com reticências (max-width:0 +
largura em % faz a célula ceder espaço em vez de alargar a tabela). */
.conc-table tbody tr.conc-row > td:nth-child(3) {
max-width: 0;
width: 40%;
}
.conc-table tbody tr.conc-row > td:nth-child(3) span {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* "Recolher" no fim da área expandida, à direita das ações da observação. */
.conc-recolher-btn {
display: inline-flex;
align-items: center;
gap: 4px;
margin-left: auto;
}
/* ---------------- Sugestões (dedução da ferramenta, não fato) ---------------- */
.conc-sugestao-tag {
display: inline-block;
margin-right: 6px;
padding: 0 6px;
border-radius: var(--radius-pill);
border: 1px dashed var(--text-muted);
font-size: 0.64rem;
font-weight: 700;
font-style: normal;
letter-spacing: 0.03em;
text-transform: uppercase;
color: var(--text-secondary);
vertical-align: 1px;
}
/* Sugestão numa linha própria, abaixo do fato, em tom neutro: não herda a
cor de alerta da situação (dourado/vermelho), que é do fato. */
.conc-sugestao {
display: block;
margin-top: 3px;
font-style: italic;
font-weight: 400;
color: var(--text-muted);
}
.conc-vinculo--parcial {
border-left: 3px solid var(--gold);
}
/* ---------------- Barra de seleção fixa na conta expandida ---------------- */
/* Com muitos lançamentos, a soma da seleção e o "Vincular selecionados"
ficam fixos logo abaixo do thead da tabela de fornecedores (pedido do
usuário), e o thead da lista de pendentes logo abaixo da barra. O sticky
vale dentro da célula de detalhe: some quando a conta sai da tela. */
.conc-selecao-barra {
position: sticky;
top: calc(var(--topbar-height) + var(--conc-toolbar-altura) + var(--conc-thead-altura));
z-index: 9;
min-height: var(--conc-selecao-altura);
margin: 0 calc(-1 * var(--space-5)) 0;
padding: var(--space-2) var(--space-5);
background: var(--bg-surface-raised);
border-bottom: 1px solid var(--border-subtle);
}
/* overflow:hidden (do raio da borda) faria a tabela virar o contêiner de
rolagem do próprio thead e anularia o sticky */
.conc-subtabela--pendentes {
overflow: visible;
}
.conc-subtabela--pendentes > thead > tr > th {
position: sticky;
top: calc(var(--topbar-height) + var(--conc-toolbar-altura) + var(--conc-thead-altura) + var(--conc-selecao-altura));
z-index: 8;
background: var(--bg-surface);
}
/* Linha do lançamento pendente é clicável (marca/desmarca a seleção). */
.conc-subtabela--pendentes tbody tr {
cursor: pointer;
user-select: none;
}
.conc-subtabela--pendentes tbody tr .conc-historico {
user-select: text;
}
.conc-subtabela__check input {
cursor: pointer;
accent-color: var(--accent);
}
.conc-vinculo__acoes {
display: inline-flex;
gap: var(--space-2);
flex-shrink: 0;
}
.conc-vinculo__acoes button:disabled {
opacity: 0.45;
cursor: not-allowed;
}
/* ---------------- Razão desde a primeira pendência ---------------- */
/* Linhas já vinculadas aparecem apagadas, sem seleção; passando o mouse,
o vínculo inteiro (as outras linhas dele) acende. */
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--vinculada {
cursor: default;
}
/* Toggle "Ocultar conciliados" ao lado do título do razão. */
.pa-table .conc-subtabela--pendentes.is-ocultando-conciliados tbody tr.conc-linha--vinculada {
display: none;
}
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--vinculada td {
color: var(--text-muted);
}
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--vinculada.is-grupo td {
background: rgba(47, 158, 110, 0.1);
color: var(--text-primary);
}
/* Hover na sugestão: a linha e as do outro lado da sugestão. Dourado (a
cor das situações "em aberto há mais de 3 meses"/"pagamento não
vinculado"): não o verde de `.is-grupo`, porque a sugestão ainda não é
vínculo, nem o roxo, que já é o de linha selecionada (`.is-selecionado`). */
.pa-table .conc-subtabela--pendentes tbody tr.is-sugestao-grupo td {
background: rgba(var(--gold-rgb), 0.1);
color: var(--text-primary);
}
.conc-valor--saldo {
color: var(--text-secondary);
}
.conc-vinculado {
display: inline-flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
}
.conc-vinculado-tag {
font-size: 0.68rem;
font-weight: 700;
padding: 1px 7px;
border-radius: var(--radius-pill);
color: #2f9e6e;
background: rgba(47, 158, 110, 0.14);
}
.conc-vinculado__tipo {
font-size: 0.76rem;
}
.conc-link-btn {
font-size: 0.76rem;
font-weight: 600;
color: var(--accent);
background: none;
border: 0;
padding: 0;
cursor: pointer;
}
.conc-link-btn:hover {
text-decoration: underline;
}