portal_publico/static/css/perfis-acesso.css

827 lines
16 KiB
CSS

.pa-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-5);
gap: var(--space-4);
flex-wrap: wrap;
}
.pa-header h2 {
font-size: 1.15rem;
font-weight: 700;
}
.pa-toolbar {
display: flex;
align-items: center;
gap: var(--space-3);
}
/* Filtro de status (Ativos/Inativos/Todos) da lista de usuários — mesmo
espírito visual de .ind-departamento-chip (indicador-desempenho.css). */
.ua-status-filtros {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
}
.ua-status-chip {
padding: var(--space-2) var(--space-4);
border-radius: var(--radius-pill);
border: 1px solid var(--border-subtle);
font-size: 0.8rem;
font-weight: 600;
color: var(--text-secondary);
background: var(--bg-surface);
transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);
}
.ua-status-chip:hover {
border-color: var(--accent);
color: var(--text-primary);
}
.ua-status-chip.is-active {
background: var(--accent);
border-color: var(--accent);
color: var(--accent-contrast);
}
/* Ordenação por coluna na tabela de usuários (#ua-table) — mesma linguagem
visual do ícone ↕ estático já usada em #ips-list-table
(importacao-plano-saude.css) e no modal de Ramais (ramais-lookup.css). */
#ua-table th[data-sort] {
cursor: pointer;
user-select: none;
white-space: nowrap;
}
.ua-sort-icon {
color: var(--text-muted);
font-size: 0.75rem;
}
#ua-table th[data-sort].is-sort-asc .ua-sort-icon,
#ua-table th[data-sort].is-sort-desc .ua-sort-icon {
color: var(--accent);
}
/* Marca visualmente um código cadastral (folha/Questor/Tareffa/Contabit)
ou ramal não preenchido — ordenar a coluna agrupa essas linhas, para
achar quem ainda está sem cadastro. */
.ua-campo-vazio {
color: var(--text-muted);
font-style: italic;
}
.pa-search {
position: relative;
width: 260px;
}
.pa-search input {
width: 100%;
padding: var(--space-2) var(--space-3);
padding-right: var(--space-6);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-surface);
color: var(--text-primary);
font-size: 0.85rem;
outline: none;
}
.pa-search input:focus {
border-color: var(--accent);
}
.pa-search svg {
position: absolute;
right: var(--space-3);
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
}
/* Tabela de perfis */
.pa-table-wrap {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
overflow: hidden;
}
.pa-table {
width: 100%;
border-collapse: collapse;
}
.pa-table th {
text-align: left;
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-muted);
padding: var(--space-3) var(--space-4);
background: var(--bg-surface-raised);
border-bottom: 1px solid var(--border-subtle);
}
.pa-table td {
padding: var(--space-3) var(--space-4);
border-bottom: 1px solid var(--border-subtle);
font-size: 0.88rem;
color: var(--text-primary);
transition: background var(--transition-fast);
}
.pa-table tr:last-child td {
border-bottom: none;
}
.pa-table tr:hover td {
background: var(--card-bg-hover);
}
.pa-name-link {
color: var(--accent);
font-weight: 600;
}
.pa-name-link:hover {
text-decoration: underline;
}
.status-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 2px 10px;
border-radius: var(--radius-pill);
font-size: 0.72rem;
font-weight: 700;
}
.status-pill--ativo {
color: #2f9e6e;
background: rgba(47, 158, 110, 0.14);
}
.status-pill--inativo {
color: var(--text-muted);
background: var(--bg-surface-raised);
}
.badge-total-access {
font-size: 0.62rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.03em;
color: var(--gold);
border: 1px solid var(--gold);
border-radius: var(--radius-pill);
padding: 1px 6px;
margin-left: var(--space-2);
}
.pa-row-actions {
display: flex;
gap: var(--space-1);
justify-content: flex-end;
}
.pa-table td:last-child {
text-align: right;
}
.pa-empty-row td {
text-align: center;
color: var(--text-muted);
padding: var(--space-6);
}
.pa-footer {
padding: var(--space-3) var(--space-4);
font-size: 0.78rem;
color: var(--text-muted);
border-top: 1px solid var(--border-subtle);
}
/* Modal "Nova Aplicação" — busca de aplicação/ferramenta + gerenciamento de
acesso por perfil (ver CLAUDE.md). Reaproveita .checklist-box (busca de
aplicação) e .pa-table (gerenciamento por perfil), só com estilos próprios
pra caber os dois estados dentro do mesmo .modal-card. */
.pa-app-modal-card {
max-width: 640px;
}
.pa-app-result-item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 2px;
width: 100%;
padding: var(--space-2) var(--space-3);
border: none;
border-radius: var(--radius-sm);
background: transparent;
color: var(--text-primary);
text-align: left;
cursor: pointer;
transition: background var(--transition-fast);
}
.pa-app-result-item:hover {
background: var(--card-bg-hover);
}
.pa-app-result-item__label {
font-size: 0.9rem;
font-weight: 600;
}
.pa-app-result-item__module {
font-size: 0.76rem;
color: var(--text-muted);
}
.pa-app-manage-title {
font-size: 1rem;
font-weight: 700;
margin: var(--space-3) 0 var(--space-2);
}
.pa-app-manage-table-wrap {
max-height: 360px;
overflow-y: auto;
}
.pa-app-manage-table-wrap .pa-table th:not(:first-child),
.pa-app-manage-table-wrap .pa-table td:not(:first-child) {
text-align: center;
}
.pa-app-manage-table-wrap .pa-table td input[type="checkbox"] {
width: 16px;
height: 16px;
accent-color: var(--accent);
}
/* Tela de edição */
.pa-edit-card {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: var(--space-5);
margin-bottom: var(--space-5);
}
.pa-edit-card h2 {
margin-bottom: var(--space-4);
}
.ua-edit-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-4);
flex-wrap: wrap;
padding-bottom: var(--space-4);
margin-bottom: var(--space-5);
border-bottom: 1px solid var(--border-subtle);
}
.ua-edit-header h2 {
margin-bottom: 0;
}
.ua-section + .ua-section {
margin-top: var(--space-5);
}
.ua-section-title {
font-size: 0.78rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-muted);
margin-bottom: var(--space-3);
}
.pa-field-row.ua-permissions-row {
grid-template-columns: 1fr 1fr;
}
@media (max-width: 900px) {
.ua-permissions-row {
grid-template-columns: 1fr;
}
}
.pa-back {
display: inline-flex;
align-items: center;
gap: var(--space-2);
color: var(--text-secondary);
font-size: 0.85rem;
font-weight: 600;
margin-bottom: var(--space-4);
}
.pa-back:hover {
color: var(--accent);
}
.pa-field-row {
display: grid;
grid-template-columns: 140px 1fr;
gap: var(--space-4);
}
.pa-field-row--auto {
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.pa-field label {
display: block;
font-size: 0.78rem;
font-weight: 600;
color: var(--text-secondary);
margin-bottom: var(--space-2);
}
.pa-field .required {
color: var(--danger);
}
.pa-field-error {
min-height: 1em;
margin-top: var(--space-2);
font-size: 0.78rem;
color: var(--danger);
}
.pa-field input:not([type="checkbox"]):not([type="radio"]):not([type="file"]) {
width: 100%;
padding: var(--space-3);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-canvas);
color: var(--text-primary);
font-size: 0.9rem;
outline: none;
}
.pa-field input:focus {
border-color: var(--accent);
}
.pa-field input[readonly] {
opacity: 0.65;
}
.pa-field select {
width: 100%;
padding: var(--space-3);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-canvas);
color: var(--text-primary);
font-size: 0.9rem;
outline: none;
}
.pa-field select:focus {
border-color: var(--accent);
}
.ua-active-toggle {
flex-shrink: 0;
max-width: 360px;
}
.ua-inline-add {
display: flex;
gap: var(--space-2);
margin-top: var(--space-2);
}
.ua-inline-add input {
flex: 1;
}
/* Campo cadastral com vinculação externa futura (Código da Folha/Questor/
Tareffa) — input + botão "Vincular" formando uma única caixa (mesmo
estilo de referência mostrado pelo usuário: campo de busca com o botão
"Buscar" encostado à direita, separado por uma linha divisória);
desabilitado de propósito, já que a busca/vínculo de verdade com a
ferramenta externa (ex.: view do Tareffa no banco) ainda não foi
implementada. */
.ua-field-link {
display: flex;
align-items: stretch;
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
overflow: hidden;
background: var(--bg-canvas);
}
.ua-field-link:focus-within {
border-color: var(--accent);
}
.ua-field-link input {
flex: 1;
min-width: 0;
border: none !important;
border-radius: 0 !important;
background: transparent !important;
}
.ua-vincular-btn {
display: flex;
align-items: center;
gap: var(--space-2);
flex-shrink: 0;
padding: 0 var(--space-3);
border-left: 1px solid var(--border-subtle);
background: var(--bg-surface-raised);
color: var(--text-secondary);
font-size: 0.82rem;
font-weight: 600;
white-space: nowrap;
}
.ua-vincular-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.ua-vincular-btn:not(:disabled):hover {
color: var(--accent);
background: var(--bg-surface);
}
.ua-liderados-field {
margin-top: var(--space-3);
}
.ua-departamento-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
}
.ua-departamento-item__actions {
display: flex;
gap: var(--space-1);
flex-shrink: 0;
}
.ua-departamento-action {
width: 22px;
height: 22px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-sm);
color: var(--text-muted);
transition: color var(--transition-fast), background var(--transition-fast);
}
.ua-departamento-action:hover {
color: var(--text-primary);
background: var(--bg-surface-raised);
}
.ua-departamento-action[data-dep-delete]:hover {
color: var(--danger);
}
/* Tabs */
.pa-tabs {
display: flex;
gap: var(--space-5);
border-bottom: 1px solid var(--border-subtle);
margin-bottom: var(--space-5);
}
.pa-tab {
padding: var(--space-3) 0;
font-size: 0.9rem;
font-weight: 600;
color: var(--text-muted);
border-bottom: 2px solid transparent;
margin-bottom: -1px;
}
.pa-tab.is-active {
color: var(--accent);
border-color: var(--accent);
}
.pa-tab-panel[hidden] {
display: none;
}
/* Permissões */
.pa-permissions {
display: grid;
grid-template-columns: 240px 1fr;
gap: var(--space-5);
align-items: start;
}
.pa-module-list {
display: flex;
flex-direction: column;
gap: var(--space-1);
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: var(--space-2);
max-height: 480px;
overflow-y: auto;
}
.pa-module-item {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-sm);
font-size: 0.85rem;
font-weight: 600;
color: var(--text-secondary);
width: 100%;
text-align: left;
}
.pa-module-item:hover {
background: var(--bg-surface-raised);
color: var(--text-primary);
}
.pa-module-item.is-active {
background: var(--accent);
color: var(--accent-contrast);
}
.pa-module-item__index {
width: 22px;
height: 22px;
border-radius: var(--radius-sm);
background: var(--bg-surface-raised);
color: var(--text-secondary);
display: flex;
align-items: center;
justify-content: center;
font-size: 0.75rem;
flex-shrink: 0;
}
.pa-module-item.is-active .pa-module-item__index {
background: rgba(255, 255, 255, 0.25);
color: var(--accent-contrast);
}
.pa-module-item__label {
flex: 1;
}
.pa-module-item__check {
margin-left: auto;
color: var(--gold);
}
.pa-module-item__check[hidden] {
display: none;
}
.pa-tree-panel {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: var(--space-4);
}
.pa-tree-search {
position: relative;
margin-bottom: var(--space-4);
}
.pa-tree-search input {
width: 100%;
padding: var(--space-2) var(--space-3);
padding-right: var(--space-6);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-canvas);
color: var(--text-primary);
font-size: 0.85rem;
outline: none;
}
.pa-tree-search svg {
position: absolute;
right: var(--space-3);
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
}
.perm-node {
display: flex;
align-items: center;
gap: var(--space-2);
padding: var(--space-2) 0;
font-size: 0.88rem;
cursor: pointer;
}
.perm-node--root {
font-weight: 700;
color: var(--text-primary);
}
.perm-node--module {
padding-left: var(--space-5);
font-weight: 600;
color: var(--accent);
}
.perm-node--module label {
display: flex;
align-items: center;
gap: var(--space-2);
flex: 1;
}
.perm-node--group {
padding-left: var(--space-7);
font-weight: 600;
color: var(--text-primary);
}
.perm-node--group label {
display: flex;
align-items: center;
gap: var(--space-2);
flex: 1;
}
.perm-node--group.is-hidden {
display: none;
}
.perm-children--nested {
padding-left: calc(var(--space-7) + var(--space-4));
}
.perm-expand {
color: var(--text-muted);
transition: transform var(--transition-fast);
display: flex;
}
.perm-expand.is-open {
transform: rotate(90deg);
}
.perm-children {
padding-left: var(--space-7);
display: flex;
flex-direction: column;
}
.perm-children[hidden] {
display: none;
}
.perm-node--leaf {
color: var(--text-secondary);
}
.perm-node--leaf.is-hidden {
display: none;
}
.perm-node input[type="checkbox"] {
width: 16px;
height: 16px;
accent-color: var(--accent);
}
/* Usuários do escritório — duas tabelas lado a lado (disponíveis pra
vincular / já vinculados a este perfil), cada uma com checkbox de
seleção múltipla, busca por coluna e ordenação por nome; "Vincular"/
"Desvincular" operam em lote sobre a seleção da tabela correspondente. */
.pa-users-dual {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-5);
align-items: start;
}
@media (max-width: 900px) {
.pa-users-dual {
grid-template-columns: 1fr;
}
}
.pa-users-panel__header {
display: flex;
align-items: center;
justify-content: flex-end;
gap: var(--space-2);
margin-bottom: var(--space-3);
}
.pa-users-table__checkbox {
width: 40px;
}
.pa-users-table th input[type="checkbox"] {
width: 15px;
height: 15px;
accent-color: var(--accent);
vertical-align: middle;
}
.pa-users-table td input[type="checkbox"] {
width: 15px;
height: 15px;
accent-color: var(--accent);
}
.pa-users-table__sort {
cursor: pointer;
user-select: none;
white-space: nowrap;
}
.pa-users-table__sort.is-sort-asc .ua-sort-icon,
.pa-users-table__sort.is-sort-desc .ua-sort-icon {
color: var(--accent);
}
.pa-users-table__filters th {
background: var(--bg-surface);
padding: var(--space-2) var(--space-4);
}
.pa-users-table__filters input {
width: 100%;
padding: var(--space-1) var(--space-2);
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: var(--bg-canvas);
color: var(--text-primary);
font-size: 0.8rem;
font-weight: 400;
text-transform: none;
letter-spacing: normal;
outline: none;
}
.pa-users-table__filters input:focus {
border-color: var(--accent);
}
.pa-users-panel .pa-table-wrap {
max-height: 360px;
overflow-y: auto;
}
.pa-users-panel .pa-table thead {
position: sticky;
top: 0;
z-index: 1;
}
.pa-users-panel .btn-solid:disabled,
.pa-users-panel .btn-danger-outline:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pa-edit-actions {
display: flex;
gap: var(--space-3);
justify-content: flex-end;
margin-top: var(--space-5);
}
@media (max-width: 900px) {
.pa-field-row {
grid-template-columns: 1fr;
}
.pa-permissions {
grid-template-columns: 1fr;
}
}