1348 lines
29 KiB
CSS
1348 lines
29 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;
|
|
/* respeita as quebras de linha da sugestão (um título por linha) */
|
|
white-space: pre-line;
|
|
font-variant-numeric: tabular-nums;
|
|
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);
|
|
}
|
|
|
|
/* Linha temporária do saldo de um pagamento parcial, no razão. */
|
|
.conc-natureza--saldo {
|
|
color: var(--gold);
|
|
background: rgba(var(--gold-rgb), 0.14);
|
|
}
|
|
|
|
.conc-situacao {
|
|
font-size: 0.78rem;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.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);
|
|
}
|
|
|
|
/* Saldo a pagar de um pagamento parcial (linha temporária, não é lançamento
|
|
do arquivo): fundo tracejado discreto para não parecer um lançamento. Não
|
|
é escondida por "Ocultar conciliados", porque ainda está em aberto. */
|
|
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--saldo-parcial td {
|
|
background: rgba(var(--gold-rgb), 0.05);
|
|
border-top: 1px dashed rgba(var(--gold-rgb), 0.35);
|
|
font-style: italic;
|
|
}
|
|
|
|
/* Selecionável: marcado, a barra acrescenta ao vínculo dele. */
|
|
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--saldo-parcial.is-selecionado td {
|
|
background: rgba(var(--accent-rgb), 0.12);
|
|
}
|
|
|
|
.pa-table .conc-subtabela--pendentes tbody tr.conc-linha--saldo-parcial.is-grupo td,
|
|
.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;
|
|
}
|