/* "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; font-variant-numeric: tabular-nums; } /* .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; } /* Campo "Razão até": popup nativo do calendário (aberto pelo botão do campo) seguindo o tema, mesmo ajuste do input de competência do Indicador de Desempenho. */ #conc-form-periodo-fim, #conc-atualizar-periodo-fim { color-scheme: dark; } :root[data-theme="light"] #conc-form-periodo-fim, :root[data-theme="light"] #conc-atualizar-periodo-fim { color-scheme: light; } /* Barra de progresso de "Nova Conciliação"/"Atualizar razão": mesmo padrão do Relatório Contábil (.dc-progress). O processamento é uma requisição síncrona, sem percentual real: a subida até ~90% é simulada em JS (pidConcIniciarProgresso) e só fecha quando a resposta volta. */ .conc-progress__bar { width: 100%; height: 6px; border-radius: var(--radius-pill); background: var(--border-subtle); overflow: hidden; } .conc-progress__fill { height: 100%; width: 0%; border-radius: inherit; background: var(--accent); transition: width 0.2s ease-out; } .conc-progress__label { margin-top: var(--space-2); font-size: 0.85rem; color: var(--text-muted); text-align: center; } .conc-form__dica { margin: var(--space-1) 0 0; font-size: 0.78rem; color: var(--text-secondary); } /* "Razão até": texto dd/mm/aaaa digitável (corrige dia inexistente, ver `pidConcCampoData`) + botão que abre o calendário nativo do escondido embaixo dele, que guarda o valor ISO. */ .conc-data-field { position: relative; } /* `!important`: `.modal-field input:not(...)` (components.css) tem especificidade maior; mesmo recurso de `.ips-combo__input`. */ .conc-data-field input[type="text"] { padding-right: 40px !important; } .conc-data-field__btn { position: absolute; top: 50%; right: var(--space-2); transform: translateY(-50%); display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: none; background: none; color: var(--text-muted); cursor: pointer; } .conc-data-field__btn:hover { color: var(--text-primary); } .conc-data-field__picker { position: absolute; right: 0; bottom: 0; width: 1px !important; height: 1px; padding: 0 !important; border: none !important; opacity: 0; pointer-events: none; } .conc-data-field__aviso.is-erro { color: var(--danger); } .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__acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--space-2); } .conc-empresa .btn-outline, .conc-empresa .btn-solid { display: inline-flex; align-items: center; gap: var(--space-2); white-space: nowrap; text-decoration: none; } .conc-empresa__codigo { margin-right: var(--space-2); font-size: 1.05rem; /* mesmo tamanho do nome (pedido do usuário) */ 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); } /* Trilho (parte que falta) com tom e contorno verdes visíveis, para ficar claro quanto ainda falta preencher. */ .conc-progresso__barra { display: flex; height: 10px; border-radius: var(--radius-pill); background: rgba(47, 158, 110, 0.16); box-shadow: inset 0 0 0 1px rgba(47, 158, 110, 0.55); overflow: hidden; } /* Parte que falta: ocupa o resto do trilho só para ter o próprio balão. */ .conc-progresso__falta { flex: 1; height: 100%; } .conc-progresso__feito { display: block; flex: none; height: 100%; background: #2f9e6e; border-radius: var(--radius-pill); transition: width 0.3s ease, background var(--transition-fast), opacity var(--transition-fast); } /* Destaque da parte sob o mouse (a que mostra o balão); a outra apaga. */ .conc-progresso__falta { transition: background var(--transition-fast); } .conc-progresso__feito:hover { background: #3fcf8e; } /* Verde com tracejado diagonal, para não confundir com o verde liso da parte concluída (que fica apagada ao mesmo tempo). */ .conc-progresso__falta:hover { background: repeating-linear-gradient( -45deg, rgba(var(--danger-rgb), 0.85) 0 3px, transparent 3px 7px ); } /* só o tracejado vermelho, sem o verde do trilho por baixo */ .conc-progresso__barra:has(.conc-progresso__falta:hover) { background: transparent; } .conc-progresso__barra:has(.conc-progresso__falta:hover) .conc-progresso__feito { opacity: 0.45; } .conc-progresso__barra:has(.conc-progresso__feito:hover) { background: rgba(47, 158, 110, 0.07); } /* 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; } /* touch-action: sem o atraso de toque duplo (zoom) no clique da linha */ .conc-row { cursor: pointer; touch-action: manipulation; } .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; } /* ---------------- Aba "Relatório" (relatório de análise) ---------------- Trecho de HTML do servidor (templates/conciliacao-fornecedores-relatorio.html), no visual do Portal: tokens de tema, nada de paleta própria na tela. A impressão (fim deste bloco) usa uma paleta clara fixa. */ .conc-relatorio-barra { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); margin-bottom: var(--space-3); } .conc-relatorio-barra__texto { margin-right: auto; font-size: 0.8rem; color: var(--text-muted); } .conc-relatorio-barra .btn-solid { display: inline-flex; align-items: center; gap: 6px; } #conc-relatorio-conteudo.is-carregando { opacity: 0.5; pointer-events: none; } .conc-rel { color: var(--text-primary); font-size: 0.85rem; animation: pidFadeIn 160ms ease-out; } .conc-rel-so-impressao { display: none; } .conc-rel-aviso { display: flex; gap: var(--space-2); align-items: flex-start; margin-bottom: var(--space-4); padding: var(--space-2) var(--space-3); border: 1px solid rgba(var(--gold-rgb), 0.4); border-radius: var(--radius-md); background: rgba(var(--gold-rgb), 0.1); color: var(--gold); font-weight: 600; } .conc-rel-aviso svg { flex-shrink: 0; margin-top: 2px; } /* Parecer */ .conc-rel-parecer { display: grid; grid-template-columns: 220px 1fr; gap: var(--space-4); margin-bottom: var(--space-4); padding: var(--space-4); background: var(--card-bg); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); } .conc-rel-parecer__risco { display: flex; flex-direction: column; justify-content: center; gap: 4px; padding: var(--space-4); border-radius: var(--radius-md); } .conc-rel-parecer__risco--alto { background: rgba(var(--danger-rgb), 0.14); color: var(--danger); } .conc-rel-parecer__risco--moderado { background: rgba(var(--gold-rgb), 0.16); color: var(--gold); } .conc-rel-parecer__risco--baixo { background: rgba(47, 158, 110, 0.14); color: #2f9e6e; } .conc-rel-parecer__rotulo { font-size: 0.7rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; } .conc-rel-parecer__nivel { font-size: 1.7rem; font-weight: 800; line-height: 1.1; } .conc-rel-parecer__nota { font-size: 0.72rem; opacity: 0.85; } .conc-rel-parecer__sintese { margin: 0 0 var(--space-3); padding-left: 18px; font-size: 0.9rem; } .conc-rel-parecer__meta { display: flex; flex-wrap: wrap; gap: 4px var(--space-4); font-size: 0.78rem; color: var(--text-muted); } .conc-rel-parecer__meta strong { color: var(--text-primary); font-weight: 600; } /* Cards */ .conc-rel-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: var(--space-3); margin-bottom: var(--space-6); } .conc-rel-card { padding: var(--space-3) var(--space-4); background: var(--card-bg); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); } .conc-rel-card__label { font-size: 0.68rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-muted); } .conc-rel-card__valor { margin-top: 4px; font-size: 1.15rem; font-weight: 700; font-variant-numeric: tabular-nums; } .conc-rel-card__nota { margin-top: 2px; font-size: 0.72rem; color: var(--text-muted); } .conc-rel-barra { height: 6px; margin-top: var(--space-2); overflow: hidden; border-radius: var(--radius-pill); background: var(--bg-surface-raised); } .conc-rel-barra span { display: block; height: 100%; border-radius: var(--radius-pill); background: #2f9e6e; } .conc-rel-barra--ouro span { background: var(--gold); } .conc-rel-participacao { display: flex; align-items: center; gap: var(--space-2); min-width: 160px; } .conc-rel-participacao .conc-rel-barra { flex: 1; margin: 0; } /* Seções */ .conc-rel-secao { margin-bottom: var(--space-6); } .conc-rel-secao > h2 { display: flex; align-items: center; gap: var(--space-2); margin: 0 0 4px; font-size: 1.05rem; } .conc-rel-num { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--accent); color: var(--accent-contrast); font-size: 0.78rem; } .conc-rel-secao__desc { margin: 0 0 var(--space-3); font-size: 0.82rem; color: var(--text-muted); } .conc-rel-subtitulo { margin: var(--space-4) 0 var(--space-2); font-size: 0.9rem; } .conc-rel-subtitulo small { font-weight: 500; color: var(--text-muted); } .conc-rel-vazio { margin: 0; padding: var(--space-3) var(--space-4); border: 1px dashed var(--border-subtle); border-radius: var(--radius-md); font-size: 0.82rem; color: var(--text-muted); } /* Blocos de risco */ .conc-rel-risco { margin-bottom: var(--space-2); overflow: hidden; background: var(--card-bg); border: 1px solid var(--border-subtle); border-left: 4px solid var(--border-subtle); border-radius: var(--radius-md); } .conc-rel-risco--alta { border-left-color: var(--danger); } .conc-rel-risco--media { border-left-color: var(--gold); } .conc-rel-risco--baixa { border-left-color: var(--accent); } .conc-rel-risco > summary { display: grid; grid-template-columns: auto 1fr auto; gap: 4px var(--space-3); align-items: center; padding: var(--space-3) var(--space-4); list-style: none; cursor: pointer; transition: background var(--transition-fast); } .conc-rel-risco > summary::-webkit-details-marker { display: none; } .conc-rel-risco > summary:hover { background: var(--card-bg-hover); } .conc-rel-risco__titulo { font-weight: 700; } .conc-rel-risco__porque { grid-column: 2 / 4; font-size: 0.78rem; color: var(--text-muted); } .conc-rel-risco__resumo { font-size: 0.78rem; color: var(--text-muted); text-align: right; white-space: nowrap; } .conc-rel-risco__resumo strong { color: var(--text-primary); font-variant-numeric: tabular-nums; } .conc-rel-risco__corpo { padding: var(--space-3) var(--space-4) var(--space-4); border-top: 1px solid var(--border-subtle); } .conc-rel-risco__extra { margin: 0 0 var(--space-3); } /* Etiquetas */ .conc-rel-pill { display: inline-flex; align-items: center; padding: 2px 9px; border-radius: var(--radius-pill); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; white-space: nowrap; } .conc-rel-pill--alta, .conc-rel-pill--divergente { background: rgba(var(--danger-rgb), 0.14); color: var(--danger); } .conc-rel-pill--media, .conc-rel-pill--atencao { background: rgba(var(--gold-rgb), 0.18); color: var(--gold); } .conc-rel-pill--baixa { background: rgba(var(--accent-rgb), 0.14); color: var(--accent); } .conc-rel-pill--parcial { background: rgba(74, 163, 223, 0.15); color: #4aa3df; } .conc-rel-pill--conciliada { background: rgba(47, 158, 110, 0.14); color: #2f9e6e; } .conc-rel-pill--neutro { background: var(--bg-surface-raised); color: var(--text-muted); } /* Tabelas */ .conc-rel-tabela-wrap { overflow-x: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); } .conc-rel-tabela-wrap--espaco { margin-bottom: var(--space-3); } .conc-rel-tabela { width: 100%; border-collapse: collapse; font-size: 0.8rem; } .conc-rel-tabela th, .conc-rel-tabela td { padding: 7px 10px; border-bottom: 1px solid var(--border-subtle); text-align: left; vertical-align: top; } .conc-rel-tabela tbody tr:last-child td { border-bottom: none; } .conc-rel-tabela th { background: var(--bg-surface-raised); color: var(--text-secondary); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; white-space: nowrap; } .conc-rel-tabela .conc-rel-valor { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; } .conc-rel-tabela .conc-rel-centro { text-align: center; } .conc-rel-tabela .conc-rel-conta { white-space: nowrap; color: var(--text-muted); } .conc-rel-col-fornecedor { width: 34%; } .conc-rel-justificativa { font-size: 0.78rem; } .conc-rel-justificativa em, .conc-rel-muted { color: var(--text-muted); } .conc-rel-nowrap { white-space: nowrap; } .conc-rel-sem-just { font-size: 0.76rem; font-weight: 600; color: var(--danger); } .conc-rel-lista-alertas { margin: 0; padding-left: 16px; } .conc-rel-anexo > summary { margin-bottom: var(--space-2); font-weight: 700; cursor: pointer; } .conc-rel-rodape { margin-top: var(--space-5); font-size: 0.72rem; color: var(--text-muted); text-align: center; } @media (max-width: 720px) { .conc-rel-parecer { grid-template-columns: 1fr; } .conc-rel-risco > summary { grid-template-columns: auto 1fr; } .conc-rel-risco__resumo, .conc-rel-risco__porque { grid-column: 1 / 3; text-align: left; } } /* Impressão do relatório: `#conc-impressao` (cópia feita pelo JS) é o único filho do body impresso, com paleta clara fixa (os tokens são redefinidos só dentro dele) e A4 compacto. Linha de tabela, cabeçalho de bloco e cards não quebram entre páginas; o bloco inteiro pode quebrar (com `break-inside: avoid` no bloco, um bloco grande ia inteiro para a página seguinte e deixava a anterior quase em branco). */ #conc-impressao { display: none; } @media print { @page { size: A4; margin: 12mm 10mm; } body.conc-imprimindo > *:not(#conc-impressao) { display: none !important; } body.conc-imprimindo { background: #ffffff !important; } body.conc-imprimindo #conc-impressao { display: block; --text-primary: #211d2b; --text-secondary: #4a4458; --text-muted: #6b6478; --border-subtle: #e2ddea; --card-bg: #ffffff; --card-bg-hover: #ffffff; --bg-surface-raised: #f1edf8; --accent: #3d2178; --accent-rgb: 61, 33, 120; --accent-contrast: #ffffff; --gold: #9a6a0a; --gold-rgb: 180, 135, 42; --danger: #b3261e; --danger-rgb: 179, 38, 30; color: var(--text-primary); font-family: Arial, "Segoe UI", sans-serif; font-size: 10px; line-height: 1.35; } #conc-impressao * { animation: none !important; transition: none !important; box-shadow: none !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; } #conc-impressao .conc-rel { font-size: 1em; } #conc-impressao .conc-rel-so-impressao { display: block; } #conc-impressao .conc-rel-so-tela { display: none; } #conc-impressao .conc-rel-cabecalho-impressao { display: flex; flex-direction: column; gap: 2px; margin-bottom: 8px; padding-bottom: 6px; border-bottom: 2px solid var(--accent); } #conc-impressao .conc-rel-cabecalho-impressao strong { font-size: 1.3em; color: var(--accent); } #conc-impressao .conc-rel-aviso { margin-bottom: 8px; padding: 5px 8px; } #conc-impressao .conc-rel-parecer { grid-template-columns: 140px 1fr; gap: 10px; margin-bottom: 8px; padding: 8px; break-inside: avoid; } #conc-impressao .conc-rel-parecer__risco { padding: 8px; } #conc-impressao .conc-rel-parecer__nivel { font-size: 1.4rem; } #conc-impressao .conc-rel-cards { grid-template-columns: repeat(5, 1fr); gap: 6px; margin-bottom: 12px; } #conc-impressao .conc-rel-card { padding: 6px 8px; break-inside: avoid; } #conc-impressao .conc-rel-secao { margin-bottom: 12px; } #conc-impressao .conc-rel-secao > h2, #conc-impressao .conc-rel-subtitulo { break-after: avoid; } #conc-impressao .conc-rel-risco { overflow: visible; } #conc-impressao .conc-rel-risco > summary { padding: 5px 8px; break-inside: avoid; break-after: avoid; } #conc-impressao .conc-rel-risco__corpo { padding: 5px 8px 8px; } #conc-impressao .conc-rel-tabela-wrap { overflow: visible; } #conc-impressao .conc-rel-tabela th, #conc-impressao .conc-rel-tabela td { padding: 3px 6px; } #conc-impressao .conc-rel-tabela th { white-space: normal; } #conc-impressao .conc-rel-tabela thead { display: table-header-group; } #conc-impressao .conc-rel-tabela tr { break-inside: avoid; } } .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); } /* Ajuste dos vínculos manuais com diferença (coluna "Ajuste", filtro e modal de escolha): parcelamento azul (mesmo tom de Parcial), juros vermelho, desconto verde. */ .conc-ajuste { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; flex: none; border-radius: 50%; } .conc-ajuste + .conc-ajuste { margin-left: 4px; } .conc-ajuste--parcelamento { color: #4aa3df; background: rgba(74, 163, 223, 0.15); } .conc-ajuste--juros { color: var(--danger); background: rgba(var(--danger-rgb), 0.14); } .conc-ajuste--desconto { color: #2f9e6e; background: rgba(47, 158, 110, 0.14); } /* Até três ícones (22px + 4px de espaço) cabem com folga em 100px */ .conc-table th.conc-ajuste-col, .conc-table td.conc-ajuste-col { width: 100px; white-space: nowrap; } /* Cabeçalho "Ajuste ▾": abre o menu do filtro; com filtro ativo, mostra o ícone do ajuste filtrado e fica na cor de destaque. */ .conc-ajuste-th { display: inline-flex; align-items: center; gap: 4px; margin: -3px -6px; padding: 3px 6px; border: 1px solid transparent; border-radius: var(--radius-sm); background: none; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; cursor: pointer; transition: background var(--transition-fast), border-color var(--transition-fast); } .conc-ajuste-th:hover, .conc-ajuste-th[aria-expanded="true"] { background: var(--bg-surface-raised); } .conc-ajuste-th.is-active { color: var(--accent); border-color: rgba(var(--accent-rgb), 0.5); } .conc-ajuste-th__ativo:empty { display: none; } .conc-ajuste-th__ativo .conc-ajuste { width: 18px; height: 18px; } .conc-ajuste-th__ativo .conc-ajuste svg { width: 11px; height: 11px; } .conc-ajuste-menu { position: fixed; z-index: 60; display: flex; flex-direction: column; min-width: 190px; padding: 4px; background: var(--bg-surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); box-shadow: var(--shadow-md); animation: pidFadeIn 120ms ease-out; } .conc-ajuste-menu__opcao { display: flex; align-items: center; gap: var(--space-2); padding: 6px var(--space-2); border: none; border-radius: var(--radius-sm); background: none; color: var(--text-primary); font: inherit; font-size: 0.82rem; text-align: left; cursor: pointer; } .conc-ajuste-menu__opcao:hover { background: var(--card-bg-hover); } .conc-ajuste-menu__opcao.is-active { background: rgba(var(--accent-rgb), 0.14); color: var(--accent); } .conc-ajuste-menu__rotulo { flex: 1; } /* "Todos": círculo vazio no lugar do ícone, para alinhar */ .conc-ajuste--todos { border: 1px dashed var(--border-subtle); } /* Fora dos chips de validadas, a coluna some */ .conc-table--sem-ajuste .conc-ajuste-col { display: none; } /* Modal "Diferença no vínculo": duas opções grandes */ .conc-escolha { display: grid; gap: var(--space-2); margin-top: var(--space-3); } .conc-escolha__opcao { display: flex; align-items: flex-start; gap: var(--space-3); padding: var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--bg-surface-raised); color: var(--text-primary); font: inherit; text-align: left; cursor: pointer; transition: border-color var(--transition-fast), background var(--transition-fast); } .conc-escolha__opcao:hover { border-color: var(--accent); background: rgba(var(--accent-rgb), 0.08); } .conc-escolha__opcao:active { transform: scale(0.99); } .conc-escolha__opcao strong { display: block; } .conc-escolha__opcao small { display: block; margin-top: 2px; font-size: 0.78rem; color: var(--text-secondary); } /* Parcial: saldo de pagamento parcial a pagar nos meses seguintes */ .status-pill--parcial { color: #4aa3df; background: rgba(74, 163, 223, 0.15); } .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); } /* Saldo a pagar do pagamento parcial: dourado, como a linha "Saldo a pagar do vínculo" do razão, alinhado à direita. */ .conc-vinculo-detalhe__saldo { margin-left: auto; padding: 2px var(--space-2); border-radius: var(--radius-sm); color: var(--gold); background: rgba(var(--gold-rgb), 0.14); } .conc-vinculo-detalhe__totais .conc-vinculo-detalhe__saldo strong { color: var(--gold); } /* 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); } /* desfeito pela atualização do razão (não foi ação do contador) */ .conc-historico-vinc__item--removido { border-left-color: #c6a24a; border-left-style: dashed; } /* Modal "Atualizar razão" */ /* Erro da atualização pode listar várias contas (saldo inicial que não bate no acréscimo), uma por linha. */ #conc-atualizar-erro { max-height: 220px; overflow-y: auto; white-space: pre-line; } .conc-atualizar-info { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: var(--space-4); } .conc-atualizar-info p { margin: 0 0 var(--space-2); } .conc-atualizar-info ul { margin: 0 0 var(--space-3); padding-left: var(--space-5); } .conc-atualizar-info li { margin-bottom: var(--space-1); } .conc-atualizar-info strong { color: var(--text-primary); } .conc-atualizar-info__atual { color: var(--text-primary); } .conc-lista-acoes { display: inline-flex; gap: var(--space-2); justify-content: flex-end; } .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; } /* Variante da barra de validação: título com marcador, valor em destaque, detalhe abaixo e seta apontando para a parte da barra (`--conc-tooltip-seta` vem do JS). */ .conc-tooltip--rico { display: flex; flex-direction: column; gap: 2px; min-width: 190px; padding: var(--space-2) var(--space-3) 10px; border-radius: var(--radius-md); white-space: normal; animation: pidFadeSlideUp 140ms ease-out; } .conc-tooltip--rico::after { content: ""; position: absolute; left: var(--conc-tooltip-seta, 50%); bottom: -5px; width: 8px; height: 8px; background: inherit; border-right: inherit; border-bottom: inherit; transform: translateX(-50%) rotate(45deg); } .conc-tooltip--rico.conc-tooltip--abaixo::after { top: -5px; bottom: auto; transform: translateX(-50%) rotate(-135deg); } .conc-tooltip__topo { display: flex; align-items: center; gap: var(--space-2); } .conc-tooltip__marcador { width: 8px; height: 8px; flex: none; border-radius: 50%; } .conc-tooltip__marcador--ok { background: #2f9e6e; } /* mesmo tracejado da parte que falta da barra */ .conc-tooltip__marcador--falta { background: repeating-linear-gradient(-45deg, rgba(var(--danger-rgb), 0.9) 0 2px, transparent 2px 4px); box-shadow: inset 0 0 0 1px rgba(var(--danger-rgb), 0.9); } .conc-tooltip__titulo { font-size: 0.72rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-secondary); } .conc-tooltip__valor { margin-left: auto; padding-left: var(--space-3); font-size: 1rem; color: var(--text-primary); } .conc-tooltip__detalhe { color: var(--text-secondary); } /* Sugestão em linhas (parcela, parcelamento, soma exata): título, uma linha por lançamento em colunas e notas. */ .conc-tooltip--sugestao { display: flex; flex-direction: column; gap: 3px; max-width: 560px; white-space: normal; } .conc-tooltip__cabeca { margin-bottom: 2px; font-weight: 600; } .conc-tooltip__lanc { display: grid; grid-template-columns: auto auto auto 1fr; align-items: center; gap: var(--space-3); padding: 3px var(--space-2); border-radius: var(--radius-sm); background: var(--bg-surface); } /* Cor vem da natureza (.conc-natureza--C/--D/--saldo), como no razão */ .conc-tooltip__seq { padding: 1px 6px; border-radius: var(--radius-pill); font-weight: 600; white-space: nowrap; } /* Mesmo tamanho da data (pedido do usuário); `.conc-tooltip__valor` é o percentual grande do balão da barra de validação, não reaproveitar. */ .conc-tooltip__lanc-valor { text-align: right; white-space: nowrap; } .conc-tooltip__extra { color: var(--text-secondary); white-space: nowrap; } .conc-tooltip__nota { color: var(--text-secondary); } .conc-tooltip__nota--apagada { color: var(--text-muted); font-style: italic; } .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); } /* Linha da diferença de um vínculo fechado com desconto/juros, no razão (mesmas cores do ícone da coluna "Ajuste"). */ .conc-natureza--desconto { color: #2f9e6e; background: rgba(47, 158, 110, 0.14); } .conc-natureza--juros { color: var(--danger); background: rgba(var(--danger-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: 130px; text-align: center !important; } /* Data e hora da validação, abaixo do checkbox */ .conc-validado-data { display: block; margin-top: 2px; font-size: 0.7rem; color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; } .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; touch-action: manipulation; } .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; } /* "Adicionar selecionados" desabilitado: o mouse passa para o invólucro, que mostra a dica no lugar do title nativo. */ .conc-adicionar-dica { display: inline-flex; } .conc-adicionar-dica [data-adicionar]:disabled { pointer-events: none; } .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--ajuste td { border-top: 1px dashed var(--border-subtle); font-style: italic; } .pa-table .conc-subtabela--pendentes tbody tr.conc-linha--ajuste-desconto td { background: rgba(47, 158, 110, 0.05); } .pa-table .conc-subtabela--pendentes tbody tr.conc-linha--ajuste-juros td { background: rgba(var(--danger-rgb), 0.05); } .pa-table .conc-subtabela--pendentes tbody tr.conc-linha--ajuste.is-grupo td, .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; }