/* ============================================================================
   bdPrivacy Admin — estilos próprios

   Os tokens e o shell (navbar-vertical, top-header, avatar-btn, page-header)
   vêm de theme.css, o mesmo arquivo do bdPrivacyClient: o admin é da mesma
   família visual, e duplicar o sistema de cores seria garantir que os dois
   divirjam. Aqui ficam só os componentes que o admin tem e o client não.
   ========================================================================== */

:root {
  --adm-radius: 6px;
  --adm-radius-sm: 4px;
}

body { min-height: 100vh; }

/* A sidebar do theme.css é `position: fixed`, então o conteúdo precisa abrir a
   margem dela por conta própria. É o mesmo papel que `#page-content` cumpre no
   bdPrivacyClient; aqui vale para `#admConteudo` sem duplicar aquela regra. */
#admConteudo {
  flex: 1;
  min-width: 0;
  margin-left: var(--bd-sidebar-width);
  width: calc(100% - var(--bd-sidebar-width));
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

/* Nada pisca antes de a sessão ser confirmada. */
body:not(.adm-pronto) #admConteudo { opacity: 0; }
body.adm-pronto #admConteudo { opacity: 1; transition: opacity .18s ease; }

/* ── marca ─────────────────────────────────────────────────────────────── */

.adm-brand-tag {
  display: inline-block;
  margin-left: .4rem;
  padding: .1rem .4rem;
  border-radius: 6px;
  background: rgba(255, 255, 255, .22);
  font-size: .62rem;
  font-weight: 600;
  vertical-align: middle;
}

/* Tela ainda não construída: visível, não clicável, e dizendo por quê. */
.navbar-vertical .nav-link.adm-nav-futuro {
  display: flex;
  align-items: center;
  opacity: .45;
  cursor: default;
}
.adm-nav-obra { font-size: .7rem; opacity: .8; }

/* ── topo ──────────────────────────────────────────────────────────────── */

.adm-migalhas {
  display: flex;
  align-items: center;
  gap: .4rem;
  font-size: .8rem;
  color: var(--bd-muted);
  font-weight: 500;
}
.adm-migalha-sep { font-size: .62rem; opacity: .5; }
.adm-migalha-atual { color: var(--bd-text); font-weight: 700; }

.adm-selo-mock {
  display: inline-flex;
  align-items: center;
  padding: .25rem .6rem;
  border-radius: 4px;
  background: #fff7ed;
  border: 1px solid #fed7aa;
  color: #9a3412;
  font-size: .72rem;
  font-weight: 700;
}

.adm-menu { border-radius: var(--adm-radius); border: 1px solid var(--bd-border); box-shadow: var(--bd-shadow); }

/* ── cartão ────────────────────────────────────────────────────────────── */

.adm-cartao {
  background: var(--bd-card);
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius);
  box-shadow: var(--bd-shadow);
}

/* ── barra da tabela ───────────────────────────────────────────────────── */

.adm-tabela-barra {
  display: flex;
  align-items: center;
  gap: .6rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.adm-busca { position: relative; flex: 1 1 260px; max-width: 380px; }
.adm-busca i {
  position: absolute;
  left: .75rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bd-muted);
  font-size: .8rem;
  pointer-events: none;
}
.adm-busca .form-control {
  padding-left: 2.1rem;
  border-radius: 4px;
  border-color: var(--bd-border);
}
.adm-busca .form-control:focus {
  border-color: var(--bd-primary);
  box-shadow: 0 0 0 3px var(--bd-primary-100);
}

.adm-filtro {
  width: auto;
  min-width: 150px;
  border-radius: 4px;
  border-color: var(--bd-border);
}
.adm-tabela-acoes { margin-left: auto; display: flex; gap: .5rem; }

/* ── tabela ────────────────────────────────────────────────────────────── */

.adm-tabela-wrap { overflow: hidden; }

/* Numa janela estreita a tabela rola em vez de ser cortada. Antes disto, a
   coluna do login único ficava inalcançável abaixo de ~1100px, e é justamente
   a que o suporte precisa ver. */
.adm-tabela-rolagem { overflow-x: auto; }
.adm-tabela { width: 100%; min-width: 720px; border-collapse: collapse; font-size: .82rem; }

.adm-tabela thead th {
  padding: .7rem 1.1rem;
  text-align: left;
  font-size: .7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--bd-muted);
  background: #fbfbfe;
  border-bottom: 1px solid var(--bd-border);
  white-space: nowrap;
}

.adm-th-ordem {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  color: inherit;
  text-transform: inherit;
  letter-spacing: inherit;
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  cursor: pointer;
}
.adm-th-ordem i { font-size: .7rem; opacity: .35; }
.adm-th-ordem:hover i { opacity: .7; }
.adm-th-ordem.is-on { color: var(--bd-primary); }
.adm-th-ordem.is-on i { opacity: 1; }

.adm-tabela tbody td {
  padding: .7rem 1.1rem;
  border-bottom: 1px solid var(--bd-border);
  vertical-align: middle;
}
.adm-tabela tbody tr:last-child td { border-bottom: 0; }
.adm-tabela tbody tr.is-clickable { cursor: pointer; }
.adm-tabela tbody tr.is-clickable:hover { background: #fbfaff; }
.adm-tabela .td-strong { font-weight: 700; }
.adm-tabela .td-code {
  font-family: ui-monospace, Menlo, monospace;
  font-size: .74rem;
  color: var(--bd-muted);
}
.adm-tabela td.num { font-variant-numeric: tabular-nums; text-align: right; }
.adm-col-sel { width: 42px; }

.adm-tabela-rodape {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: .7rem 1.1rem;
  border-top: 1px solid var(--bd-border);
  background: #fbfbfe;
  flex-wrap: wrap;
}
.adm-tabela-contagem { font-size: .78rem; color: var(--bd-muted); }
.adm-paginacao { margin-left: auto; display: flex; align-items: center; gap: .3rem; }
.adm-paginacao .btn { border-radius: 8px; border: 1px solid var(--bd-border); background: #fff; }
.adm-pagina-atual {
  font-size: .76rem;
  color: var(--bd-muted);
  padding: 0 .5rem;
  font-variant-numeric: tabular-nums;
}

/* ── chip ──────────────────────────────────────────────────────────────── */

.adm-chip {
  display: inline-block;
  padding: .16rem .55rem;
  border-radius: 4px;
  font-size: .7rem;
  font-weight: 700;
  border: 1px solid transparent;
  white-space: nowrap;
}
.adm-chip-cinza    { background: #f3f4f6; color: #4b5563; border-color: #e5e7eb; }
.adm-chip-verde    { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
.adm-chip-ambar    { background: #fffbeb; color: #b45309; border-color: #fde68a; }
.adm-chip-vermelho { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
.adm-chip-roxo     { background: var(--bd-primary-100); color: var(--bd-primary-600); border-color: var(--bd-primary-200); }

/* ── estado vazio e esqueleto ──────────────────────────────────────────── */

.adm-vazio {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 2.5rem 1rem;
  color: var(--bd-muted);
}
.adm-vazio i { font-size: 1.9rem; opacity: .3; margin-bottom: .6rem; }
.adm-vazio strong { font-size: .92rem; color: var(--bd-text); font-weight: 700; }
.adm-vazio span { font-size: .8rem; margin-top: .2rem; }

.adm-skel {
  display: inline-block;
  height: 11px;
  border-radius: 6px;
  background: linear-gradient(90deg, #eef0f6 25%, #f7f8fc 50%, #eef0f6 75%);
  background-size: 200% 100%;
  animation: adm-brilho 1.3s infinite;
}
@keyframes adm-brilho {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .adm-skel { animation: none; }
}

/* ── toast ─────────────────────────────────────────────────────────────── */

.adm-toasts {
  position: fixed;
  right: 1.2rem;
  bottom: 1.2rem;
  z-index: 1090;
  display: flex;
  flex-direction: column;
  gap: .5rem;
  max-width: 380px;
}
.adm-toast {
  display: flex;
  align-items: flex-start;
  gap: .6rem;
  padding: .7rem .9rem;
  border-radius: var(--adm-radius-sm);
  background: #fff;
  border: 1px solid var(--bd-border);
  box-shadow: 0 4px 12px rgba(15, 23, 42, .08);
  font-size: .82rem;
  animation: adm-entra .18s ease;
}
.adm-toast.saindo { opacity: 0; transform: translateX(10px); transition: all .2s ease; }
.adm-toast i { font-size: .95rem; margin-top: .06rem; }
.adm-toast-ok i    { color: var(--bd-success); }
.adm-toast-erro    { border-color: #fecaca; }
.adm-toast-erro i  { color: var(--bd-danger); }
.adm-toast-aviso i { color: var(--bd-warning); }
.adm-toast-info i  { color: var(--bd-primary); }
@keyframes adm-entra { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: none; } }

/* ── modal ─────────────────────────────────────────────────────────────── */

.adm-modal { border-radius: 8px; border: 1px solid var(--bd-border); }
.adm-modal .modal-header { border-bottom: 1px solid var(--bd-border); padding: 1.1rem 1.3rem; }
.adm-modal .modal-title { font-size: 1.02rem; font-weight: 600; margin: 0; }
.adm-modal-sub { font-size: .78rem; color: var(--bd-muted); margin: .2rem 0 0; }
.adm-modal .modal-body { padding: 1.3rem; }
.adm-modal .modal-footer { border-top: 1px solid var(--bd-border); padding: .9rem 1.3rem; }
.adm-modal .form-label { font-size: .78rem; font-weight: 700; margin-bottom: .3rem; }

.adm-alerta {
  display: flex;
  gap: .7rem;
  padding: .8rem .9rem;
  border-radius: var(--adm-radius-sm);
  font-size: .82rem;
}
.adm-alerta i { font-size: 1.05rem; }
.adm-alerta strong { display: block; font-weight: 600; }
.adm-alerta span { display: block; font-size: .78rem; opacity: .88; margin-top: .15rem; }
/* Ênfase dentro do corpo do aviso: `strong` ali é o título e é block, então
   grifar uma frase no meio do texto quebrava a linha em três. */
.adm-alerta span b { font-weight: 700; }
.adm-alerta-perigo { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }
.adm-alerta-aviso  { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }

/* ── formulário em passos ──────────────────────────────────────────────── */

.adm-passos-trilha {
  display: flex;
  gap: .4rem;
  list-style: none;
  padding: 0;
  margin: 0 0 1.1rem;
  flex-wrap: wrap;
}
.adm-passos-trilha li {
  display: flex;
  align-items: center;
  gap: .45rem;
  padding: .35rem .8rem .35rem .4rem;
  border-radius: 4px;
  background: #fff;
  border: 1px solid var(--bd-border);
  font-size: .78rem;
  color: var(--bd-muted);
}
.adm-passo-num {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #eef0f6;
  font-size: .72rem;
  font-weight: 700;
  color: var(--bd-muted);
}
.adm-passos-trilha li.is-atual { border-color: var(--bd-primary-200); background: var(--bd-primary-100); color: var(--bd-primary-600); }
.adm-passos-trilha li.is-atual .adm-passo-num { background: var(--bd-primary); color: #fff; }
.adm-passos-trilha li.is-feito .adm-passo-num { background: var(--bd-success); color: #fff; }
.adm-passos-trilha li.is-feito { color: var(--bd-text); }

.adm-passo-corpo { padding: 1.4rem; }
.adm-passo-titulo { font-size: 1.02rem; font-weight: 600; margin: 0 0 .2rem; }
.adm-passo-ajuda { font-size: .82rem; color: var(--bd-muted); margin: 0 0 1.1rem; }
.adm-passos-rodape { display: flex; justify-content: space-between; margin-top: 1rem; }

/* ── painel lateral ────────────────────────────────────────────────────── */

.adm-painel-fundo {
  position: fixed;
  inset: 0;
  z-index: 1055;
  background: rgba(15, 23, 42, 0);
  transition: background .2s ease;
  display: flex;
  justify-content: flex-end;
}
.adm-painel-fundo.aberto { background: rgba(15, 23, 42, .35); }
.adm-painel-fundo.saindo { background: rgba(15, 23, 42, 0); }

.adm-painel {
  width: min(560px, 100%);
  background: var(--bd-card);
  height: 100%;
  display: flex;
  flex-direction: column;
  transform: translateX(100%);
  transition: transform .22s ease;
  box-shadow: -10px 0 40px rgba(15, 23, 42, .16);
}
.adm-painel-fundo.aberto .adm-painel { transform: none; }
.adm-painel-fundo.saindo .adm-painel { transform: translateX(100%); }

.adm-painel-topo {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1.2rem 1.4rem;
  border-bottom: 1px solid var(--bd-border);
}
.adm-painel-topo h3 { font-size: 1.05rem; font-weight: 600; margin: 0; }
.adm-painel-topo p { font-size: .78rem; color: var(--bd-muted); margin: .15rem 0 0; }
.adm-painel-topo .btn-close { margin-left: auto; }
.adm-painel-corpo { padding: 1.4rem; overflow-y: auto; flex: 1; }

body.adm-sem-rolagem { overflow: hidden; }

/* ── login ─────────────────────────────────────────────────────────────── */

/* Mesma entrada do bdPrivacy Client, valor por valor.

   Não é gosto: é a mesma pessoa, com a mesma senha, entrando em dois produtos da
   mesma casa. Duas telas de entrada diferentes para a mesma credencial fazem quem
   entra hesitar sobre onde está — e hesitar na tela de senha é o pior lugar para
   isso acontecer. Os valores abaixo vêm de `bdPrivacyClient/pages/sign-in.html`. */
.adm-login {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  background: var(--bd-bg, #f6f7fb);
}
.adm-login-cartao {
  width: 100%;
  max-width: 420px;
  background: #fff;
  border: 1px solid var(--bd-border, #e8e8ef);
  border-radius: 8px;
  padding: 2.5rem;
}
.adm-login-marca { display: flex; align-items: center; justify-content: center; margin-bottom: 1.5rem; }
.adm-login-marca img { width: 96px; height: 96px; object-fit: contain; }
.adm-login-sub {
  text-align: center;
  color: #6b7280;
  font-size: .9rem;
  margin-bottom: 1.75rem;
}
.adm-login-cartao .form-label { font-weight: 600; font-size: .82rem; color: #374151; margin-bottom: .35rem; }
.adm-login-cartao .form-control { border-radius: 6px; border-color: #e8e8ef; font-size: .875rem; padding: .65rem .875rem; }
.adm-login-cartao .form-control:focus { border-color: var(--bd-primary); box-shadow: 0 0 0 3px rgba(114, 107, 194, .12); }
.adm-login-cartao .btn-primary { font-weight: 700; border-radius: 6px; padding: .7rem; width: 100%; }

/* ── indicadores do painel ─────────────────────────────────────────────── */

.adm-indicadores {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}
.adm-indicador { padding: 1.1rem 1.2rem; }
.adm-indicador-rotulo {
  font-size: .72rem;
  font-weight: 600;
  color: var(--bd-muted);
}
.adm-indicador-valor {
  font-size: 1.7rem;
  font-weight: 700;
  line-height: 1.15;
  margin-top: .3rem;
  font-variant-numeric: tabular-nums;
}
.adm-indicador-nota { font-size: .76rem; color: var(--bd-muted); margin-top: .15rem; }

@media (max-width: 991.98px) {
  .adm-tabela-acoes { margin-left: 0; width: 100%; }

  /* Abaixo de 992px o `theme.css` tira a sidebar da tela
     (`transform: translateX(-100%)`) e a traz de volta com a classe `open`.
     O conteúdo precisa acompanhar, senão fica um vão morto do tamanho da
     sidebar ausente. É o que `#page-content` já faz no client; aqui vale para
     `#admConteudo`.

     Uma tentativa anterior colapsava a sidebar numa faixa de ícones, o que
     brigava com o `theme.css`: a sidebar saía da tela do mesmo jeito, e sobrava
     a margem. Seguir o mecanismo que já existe é mais barato que manter dois. */
  #admConteudo { margin-left: 0; width: 100%; }

  .adm-nav-abrir { display: inline-flex !important; }

  /* Fundo escuro atrás da sidebar aberta: sem ele, o conteúdo continua clicável
     por baixo e não há como fechar a não ser navegando. */
  .adm-nav-fundo {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: rgba(15, 23, 42, .4);
  }
}

/* Botão de abrir o menu. Escondido no desktop, onde a sidebar está sempre lá. */
.adm-nav-abrir {
  display: none;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 8px;
  border: 1px solid var(--bd-border);
  background: #fff;
  color: var(--bd-text);
  margin-right: .6rem;
  flex: 0 0 auto;
}

/* ============================================================================
   Sprint F1 — clientes
   ========================================================================== */

.adm-ajuda { font-size: .74rem; color: var(--bd-muted); margin-top: .25rem; line-height: 1.4; }
.adm-opcional {
  font-size: .66rem;
  font-weight: 600;
  color: var(--bd-muted);
  text-transform: lowercase;
  letter-spacing: 0;
}
.adm-subtitulo {
  font-size: .72rem;
  font-weight: 600;
  color: var(--bd-muted);
  margin: 1.2rem 0 .5rem;
}

.adm-chips { display: flex; flex-wrap: wrap; gap: .25rem; }

/* ── escolha em cartão (plano, situação) ───────────────────────────────── */

.adm-planos { display: grid; gap: .6rem; }

.adm-plano,
.adm-escolha {
  display: flex;
  align-items: flex-start;
  gap: .7rem;
  padding: .85rem 1rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  cursor: pointer;
  background: #fff;
  transition: border-color .12s ease, background .12s ease;
}
.adm-plano:hover, .adm-escolha:hover { border-color: var(--bd-primary-200); background: #fcfcff; }

/* O estado marcado vem do próprio input, e não de uma classe posta no render:
   o rádio muda sem redesenhar, e a classe ficaria presa na primeira opção. */
.adm-plano:has(input:checked),
.adm-escolha:has(input:checked) {
  border-color: var(--bd-primary);
  background: var(--bd-primary-100);
}

.adm-plano input, .adm-escolha input { margin-top: .2rem; flex: 0 0 auto; }
.adm-plano strong, .adm-escolha strong { display: block; font-size: .88rem; font-weight: 600; }
.adm-plano span, .adm-escolha span { display: block; font-size: .78rem; color: var(--bd-muted); margin-top: .1rem; }
.adm-plano-telas { font-size: .72rem; color: var(--bd-primary-600); font-weight: 700; margin-top: .35rem; }

.adm-escolhas { display: grid; gap: .6rem; }

/* ── revisão / lista de pares ──────────────────────────────────────────── */

.adm-revisao { margin: 0; font-size: .84rem; }
.adm-revisao > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: .55rem 0;
  border-bottom: 1px solid var(--bd-border);
}
.adm-revisao > div:last-child { border-bottom: 0; }
.adm-revisao dt { font-weight: 600; color: var(--bd-muted); margin: 0; }
.adm-revisao dd { margin: 0; text-align: right; font-weight: 600; word-break: break-word; }

/* ── abas do painel de detalhe ─────────────────────────────────────────── */

.adm-abas {
  display: flex;
  gap: .2rem;
  border-bottom: 1px solid var(--bd-border);
  margin: -.4rem 0 1.2rem;
  overflow-x: auto;
}
.adm-aba {
  border: 0;
  background: none;
  padding: .6rem .8rem;
  font-size: .82rem;
  font-weight: 700;
  color: var(--bd-muted);
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  white-space: nowrap;
  cursor: pointer;
}
.adm-aba:hover { color: var(--bd-text); }
.adm-aba.is-on { color: var(--bd-primary); border-bottom-color: var(--bd-primary); }

/* ── trilha ────────────────────────────────────────────────────────────── */

.adm-trilha { list-style: none; padding: 0; margin: 0; }
.adm-trilha li {
  padding: .8rem 0 .8rem 1.1rem;
  border-left: 2px solid var(--bd-border);
  position: relative;
}
.adm-trilha li::before {
  content: '';
  position: absolute;
  left: -5px;
  top: 1.1rem;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bd-primary);
}
.adm-trilha-topo { display: flex; justify-content: space-between; gap: .8rem; align-items: baseline; }
.adm-trilha-topo strong { font-size: .84rem; font-weight: 600; }
.adm-trilha-topo span { font-size: .72rem; color: var(--bd-muted); white-space: nowrap; }
.adm-trilha-detalhe { font-size: .8rem; margin-top: .15rem; }
.adm-trilha-motivo {
  font-size: .78rem;
  margin-top: .35rem;
  padding: .4rem .6rem;
  background: var(--bd-primary-100);
  border-radius: 8px;
  color: var(--bd-primary-600);
}

/* ── esqueleto fora de tabela ──────────────────────────────────────────── */

.adm-skel-bloco { display: flex; flex-direction: column; gap: .7rem; padding: .5rem 0; }
.adm-skel-bloco .adm-skel { height: 14px; }

/* ============================================================================
   Sprint F2 — usuários e planos
   ========================================================================== */

/* ── senha temporária ──────────────────────────────────────────────────── */

.adm-senha-temp {
  font-family: ui-monospace, Menlo, monospace;
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-align: center;
  padding: 1rem;
  border-radius: var(--adm-radius-sm);
  background: var(--bd-primary-100);
  border: 1px dashed var(--bd-primary-200);
  color: var(--bd-primary-600);
  user-select: all;
}

/* ── editor de plano ───────────────────────────────────────────────────── */

.adm-editor-plano {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: 1.5rem;
  align-items: start;
}

.adm-grade { display: grid; gap: .5rem; max-height: 52vh; overflow-y: auto; padding-right: .3rem; }

.adm-grade-tela {
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  overflow: hidden;
  background: #fbfbfe;
}
.adm-grade-tela.is-on { background: #fff; border-color: var(--bd-primary-200); }

.adm-grade-cabeca {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .6rem .8rem;
  cursor: pointer;
  font-size: .86rem;
}
.adm-grade-cabeca i { color: var(--bd-muted); }
.adm-grade-tela.is-on .adm-grade-cabeca i { color: var(--bd-primary); }
.adm-grade-cabeca input[disabled] { opacity: .55; cursor: default; }

.adm-grade-acoes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(215px, 1fr));
  gap: .2rem .8rem;
  padding: .1rem .8rem .7rem 2.4rem;
  border-top: 1px solid var(--bd-border);
}
.adm-grade-acao { display: flex; align-items: center; gap: .45rem; font-size: .78rem; cursor: pointer; }
.adm-grade-acao input[disabled] + span { opacity: .4; }
.adm-grade-acao input[disabled] { opacity: .4; cursor: default; }
.adm-grade-vazia {
  padding: .1rem .8rem .6rem 2.4rem;
  font-size: .74rem;
  color: var(--bd-muted);
  font-style: italic;
}

/* ── preview do menu do cliente ────────────────────────────────────────── */

.adm-preview { position: sticky; top: 0; }
.adm-preview-menu {
  background: var(--bd-sidebar-bg);
  border-radius: var(--adm-radius);
  padding: .9rem .7rem;
  min-height: 120px;
}
.adm-preview-marca {
  display: flex;
  align-items: center;
  gap: .5rem;
  color: #fff;
  font-weight: 600;
  font-size: .82rem;
  padding: 0 .5rem .8rem;
  border-bottom: 1px solid rgba(255,255,255,.15);
  margin-bottom: .5rem;
}
.adm-preview-marca span {
  width: 24px; height: 24px;
  border-radius: 7px;
  background: rgba(255,255,255,.22);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: .68rem;
}
.adm-preview-item {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .4rem .55rem;
  border-radius: 8px;
  color: rgba(255,255,255,.9);
  font-size: .78rem;
  font-weight: 600;
}
.adm-preview-item i { opacity: .85; font-size: .82rem; }
.adm-preview-nota {
  display: flex;
  flex-direction: column;
  margin-top: .6rem;
  padding: .55rem .7rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fff;
}
.adm-preview-nota strong { font-size: .82rem; }
.adm-preview-nota span { font-size: .74rem; color: var(--bd-muted); }

/* ── override de telas por cliente ─────────────────────────────────────── */

.adm-override { display: grid; gap: .3rem; }
.adm-override-item {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .45rem .7rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  font-size: .82rem;
  cursor: pointer;
  background: #fbfbfe;
}
.adm-override-item.is-on { background: #fff; border-color: var(--bd-primary-200); }
.adm-override-item.is-excecao { border-color: var(--bd-warning); background: #fffdf6; }
.adm-override-item input[disabled] { opacity: .55; cursor: default; }
.adm-override-marca {
  margin-left: auto;
  font-size: .7rem;
  font-style: normal;
  font-weight: 700;
  color: var(--bd-warning);
}
.adm-override-padrao { color: var(--bd-muted); font-weight: 500; }

.adm-perde {
  font-size: .74rem;
  color: var(--bd-danger);
  font-weight: 600;
  margin-top: .35rem;
}

@media (max-width: 1199.98px) {
  .adm-editor-plano { grid-template-columns: 1fr; }
  .adm-grade { max-height: none; }
  .adm-preview { position: static; }
}

/* ============================================================================
   Sprint F3 — listas de domínio
   ========================================================================== */

.adm-mestre-detalhe {
  display: grid;
  grid-template-columns: 290px 1fr;
  gap: 1.2rem;
  align-items: start;
}

/* ── mestre ────────────────────────────────────────────────────────────── */

#mestre {
  background: var(--bd-card);
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius);
  box-shadow: var(--bd-shadow);
  padding: .8rem;
  position: sticky;
  top: 1rem;
  max-height: calc(100vh - 2rem);
  overflow-y: auto;
}
#mestre .adm-busca { max-width: none; }

.adm-mestre-area {
  font-size: .68rem;
  font-weight: 600;
  color: var(--bd-muted);
  padding: .8rem .5rem .3rem;
}
.adm-mestre-item {
  display: flex;
  align-items: center;
  gap: .5rem;
  width: 100%;
  border: 0;
  background: none;
  text-align: left;
  padding: .45rem .55rem;
  border-radius: var(--adm-radius-sm);
  font-size: .82rem;
  color: var(--bd-text);
  cursor: pointer;
}
.adm-mestre-item:hover { background: #f7f7fc; }
.adm-mestre-item.is-on { background: var(--bd-primary-100); color: var(--bd-primary-600); font-weight: 700; }
.adm-mestre-nome { flex: 1; min-width: 0; }
.adm-mestre-conta {
  font-size: .72rem;
  color: var(--bd-muted);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.adm-mestre-item.is-on .adm-mestre-conta { color: var(--bd-primary-600); }
.adm-mestre-conta .bi-eye-slash-fill { color: var(--bd-warning); margin-left: .15rem; }
.adm-mestre-rodape {
  font-size: .72rem;
  color: var(--bd-muted);
  padding: .8rem .55rem .2rem;
  border-top: 1px solid var(--bd-border);
  margin-top: .6rem;
}

/* ── detalhe ───────────────────────────────────────────────────────────── */

#detalhe {
  background: var(--bd-card);
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius);
  box-shadow: var(--bd-shadow);
  padding: 1.3rem;
  min-height: 300px;
}
.adm-detalhe-topo { display: flex; gap: 1rem; align-items: flex-start; flex-wrap: wrap; }
.adm-detalhe-topo h3 { font-size: 1.1rem; font-weight: 600; margin: 0; }
.adm-detalhe-topo p { font-size: .84rem; color: var(--bd-muted); margin: .2rem 0 0; }
.adm-detalhe-topo > div:last-child { margin-left: auto; }

/* Referência de onde o vocabulário vive hoje. É nota de rodapé, não informação de
   operação: fica legível para quem procura, sem competir com a descrição da lista. */
.adm-origem {
  font-size: .7rem;
  color: var(--bd-muted);
  opacity: .7;
  margin-top: .45rem;
  font-family: var(--bs-font-monospace, ui-monospace, SFMono-Regular, Menlo, monospace);
}

.adm-detalhe-chips { display: flex; flex-wrap: wrap; gap: .35rem; margin: 1rem 0 1.2rem; }

.adm-listas-corpo { display: grid; grid-template-columns: 1fr 260px; gap: 1.4rem; align-items: start; }

/* ── itens, com arrastar-soltar ────────────────────────────────────────── */

.adm-itens { display: flex; flex-direction: column; gap: .3rem; }

.adm-item {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .5rem .6rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fff;
}
.adm-item.is-inativo { background: #fbfbfe; opacity: .7; }
.adm-item.arrastando { opacity: .35; border-style: dashed; }

.adm-item-arrasta { cursor: grab; color: #cbd0dd; font-size: 1rem; line-height: 1; }
.adm-item-arrasta:active { cursor: grabbing; }
.adm-item:hover .adm-item-arrasta { color: var(--bd-muted); }

.adm-item-ordem {
  width: 22px;
  text-align: center;
  font-size: .7rem;
  font-weight: 600;
  color: var(--bd-muted);
  font-variant-numeric: tabular-nums;
}
.adm-item-corpo { flex: 1; min-width: 0; }
.adm-item-rotulo { font-size: .84rem; font-weight: 700; }
.adm-item-chave {
  font-family: ui-monospace, Menlo, monospace;
  font-size: .7rem;
  color: var(--bd-muted);
  word-break: break-word;
}
.adm-item-sinais {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  font-size: .68rem;
  color: var(--bd-muted);
  white-space: nowrap;
}
.adm-item-sinais .is-alerta { color: var(--bd-warning); font-weight: 700; }
.adm-item-sinais .is-clone { color: var(--bd-primary); font-weight: 700; }
.adm-item-editar { border: 1px solid var(--bd-border); border-radius: 8px; padding: .2rem .45rem; }

/* ── preview do select ─────────────────────────────────────────────────── */

.adm-preview-select {
  position: sticky;
  top: 1rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  padding: .9rem;
  background: #fbfbfe;
}

.adm-csv {
  font-family: ui-monospace, Menlo, monospace;
  font-size: .76rem;
  white-space: pre;
  overflow-wrap: normal;
  overflow-x: auto;
}

@media (max-width: 1399.98px) {
  .adm-listas-corpo { grid-template-columns: 1fr; }
  .adm-preview-select { position: static; }
}
@media (max-width: 991.98px) {
  .adm-mestre-detalhe { grid-template-columns: 1fr; }
  #mestre { position: static; max-height: 320px; }
}

/* ============================================================================
   Sprint F4 — biblioteca de conteúdo
   ========================================================================== */

.adm-aba-conta {
  display: inline-block;
  margin-left: .35rem;
  padding: .05rem .4rem;
  border-radius: 4px;
  background: #eef0f6;
  font-size: .66rem;
  /* 700, não 800: agora a contagem carrega unidade ("40 riscos · 3 modelos")
     e peso de número solto deixava o rótulo gritando ao lado do nome da aba. */
  font-weight: 700;
  color: var(--bd-muted);
  vertical-align: middle;
  white-space: nowrap;
}
.adm-aba.is-on .adm-aba-conta { background: var(--bd-primary-100); color: var(--bd-primary-600); }

.adm-subaba { display: flex; gap: .2rem; margin-bottom: 1rem; }

/* ── cartões de conteúdo ───────────────────────────────────────────────── */

.adm-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: .8rem;
}
.adm-card {
  text-align: left;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius);
  background: var(--bd-card);
  padding: .9rem 1rem;
  cursor: pointer;
  transition: border-color .12s ease, box-shadow .12s ease;
  display: flex;
  flex-direction: column;
  gap: .35rem;
}
.adm-card:hover { border-color: var(--bd-primary-200); box-shadow: var(--bd-shadow); }
.adm-card.is-estatico { cursor: default; }
.adm-card.is-estatico:hover { border-color: var(--bd-border); box-shadow: none; }
.adm-card-topo { display: flex; align-items: center; gap: .5rem; }
.adm-card-topo strong { font-size: .9rem; font-weight: 600; flex: 1; min-width: 0; }
.adm-card p { font-size: .78rem; color: var(--bd-muted); margin: 0; line-height: 1.45; }
.adm-card-rodape { font-size: .72rem; color: var(--bd-muted); margin-top: auto; padding-top: .3rem; }
.adm-card-alerta { color: var(--bd-warning); font-weight: 700; }

/* ── editor de sequência ordenável ─────────────────────────────────────── */

.adm-seq { display: flex; flex-direction: column; gap: .35rem; }
.adm-seq-item {
  display: flex;
  align-items: flex-start;
  gap: .5rem;
  padding: .4rem .5rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fff;
}
.adm-seq-item.arrastando { opacity: .35; border-style: dashed; }
.adm-seq-item.alvo { border-color: var(--bd-primary); }
.adm-seq-item .adm-item-arrasta { padding-top: .3rem; }
.adm-seq-item .adm-item-ordem { padding-top: .45rem; }
.adm-seq-campos { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: .3rem; }
.adm-seq-ajuda { font-size: .76rem; }
.adm-seq-dias { display: flex; align-items: center; gap: .4rem; }
.adm-seq-dias input { width: 80px; }
.adm-seq-dias span { font-size: .76rem; color: var(--bd-muted); }
.adm-seq-check {
  display: flex;
  align-items: center;
  gap: .3rem;
  font-size: .72rem;
  color: var(--bd-muted);
  white-space: nowrap;
  padding-top: .45rem;
  cursor: pointer;
}
.adm-seq-remover { border: 1px solid var(--bd-border); border-radius: 8px; padding: .2rem .4rem; }

/* ── editor de tipo de incidente, com preview ──────────────────────────── */

.adm-editor-incidente {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: 1.5rem;
  align-items: start;
}
.adm-preview-incidente {
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fbfbfe;
  padding: .9rem;
  position: sticky;
  top: 0;
}
.adm-preview-cabeca { display: flex; gap: .6rem; align-items: flex-start; }
.adm-preview-cabeca i { color: var(--bd-warning); font-size: 1.1rem; }
.adm-preview-cabeca strong { display: block; font-size: .88rem; font-weight: 600; }
.adm-preview-cabeca span { font-size: .74rem; color: var(--bd-muted); }
.adm-preview-sub {
  font-size: .68rem;
  font-weight: 600;
  color: var(--bd-muted);
  margin: .9rem 0 .35rem;
}
.adm-preview-passos { margin: 0; padding-left: 1.1rem; font-size: .78rem; }
.adm-preview-passos li { margin-bottom: .25rem; }
.adm-preview-tarefas { list-style: none; margin: 0; padding: 0; }
.adm-preview-tarefas li {
  display: flex;
  justify-content: space-between;
  gap: .5rem;
  font-size: .76rem;
  padding: .3rem 0;
  border-bottom: 1px solid var(--bd-border);
}
.adm-preview-tarefas li:last-child { border-bottom: 0; }
.adm-preview-tarefas em { font-style: normal; color: var(--bd-muted); white-space: nowrap; }

/* ── editor de diagnóstico ─────────────────────────────────────────────── */

.adm-soma {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
  padding: .6rem .8rem;
  border-radius: var(--adm-radius-sm);
  font-size: .82rem;
  margin-bottom: .8rem;
}
.adm-soma.is-ok { background: #ecfdf5; border: 1px solid #a7f3d0; color: #047857; }
.adm-soma.is-erro { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }
.adm-soma-nota { margin-left: auto; font-size: .76rem; opacity: .9; }

.adm-bloco {
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  margin-bottom: .6rem;
  overflow: hidden;
}
.adm-bloco-topo {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .5rem .6rem;
  background: #fbfbfe;
  border-bottom: 1px solid var(--bd-border);
}
.adm-bloco-peso { display: flex; align-items: center; gap: .35rem; }
.adm-bloco-peso input { width: 78px; }
.adm-bloco-peso span { font-size: .74rem; color: var(--bd-muted); }
.adm-bloco-perguntas { padding: .6rem; display: flex; flex-direction: column; gap: .5rem; }
.adm-pergunta { display: flex; flex-direction: column; gap: .3rem; }
.adm-opcoes { display: flex; flex-wrap: wrap; gap: .3rem; }
.adm-opcao {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  font-size: .72rem;
  padding: .15rem .5rem;
  border-radius: 4px;
  background: #f3f4f6;
  color: #4b5563;
}
.adm-opcao em { font-style: normal; font-weight: 600; color: var(--bd-primary-600); }

/* ── seletor de cor ────────────────────────────────────────────────────── */

.adm-cor { display: flex; align-items: center; gap: .4rem; }
.adm-cor input[type="color"] {
  width: 34px; height: 34px;
  padding: 2px;
  border: 1px solid var(--bd-border);
  border-radius: 8px;
  background: #fff;
  cursor: pointer;
}

@media (max-width: 1199.98px) {
  .adm-editor-incidente { grid-template-columns: 1fr; }
  .adm-preview-incidente { position: static; }
}

/* ============================================================================
   Sprint F5 — parâmetros e publicação
   ========================================================================== */

/* Os cartões de parâmetro viraram tabela em 2026-08-21: parâmetro tem sete
   atributos, é registro e não item de escolha. Ver `.adm-tabela-param`. */

.adm-direcao {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .55rem .7rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fbfbfe;
  font-size: .78rem;
  min-height: 38px;
}
.adm-direcao i { color: var(--bd-primary); font-size: 1rem; }

.adm-excecoes { display: flex; flex-direction: column; gap: .3rem; }
.adm-excecao {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .45rem .7rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  font-size: .8rem;
}
.adm-excecao span { flex: 1; min-width: 0; }
.adm-excecao em { font-style: normal; font-size: .72rem; color: var(--bd-muted); }
.adm-excecao.is-erro { border-color: #fecaca; background: #fef2f2; }
.adm-excecao.is-erro em { color: var(--bd-danger); font-weight: 700; }

/* ── publicação ────────────────────────────────────────────────────────── */

.adm-pub { display: grid; grid-template-columns: 1fr 300px; gap: 1.4rem; align-items: start; }
.adm-pub-acao { position: sticky; top: 1rem; }

.adm-diff-area {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .6rem 1rem;
  border-bottom: 1px solid var(--bd-border);
  background: #fbfbfe;
  font-size: .78rem;
  font-weight: 600;
  border-radius: var(--adm-radius) var(--adm-radius) 0 0;
}
.adm-diff-area span {
  margin-left: auto;
  font-size: .7rem;
  padding: 0 .4rem;
  border-radius: 4px;
  background: var(--bd-primary-100);
  color: var(--bd-primary-600);
}

.adm-diff { padding: .6rem 1rem; border-bottom: 1px solid var(--bd-border); }
.adm-diff:last-child { border-bottom: 0; }
.adm-diff-alvo { font-size: .84rem; font-weight: 700; display: flex; gap: .5rem; align-items: baseline; }
.adm-diff-alvo em {
  font-style: normal;
  font-size: .7rem;
  font-weight: 600;
  color: var(--bd-muted);
}
.adm-diff-valores {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
  margin: .35rem 0 .2rem;
  font-size: .8rem;
}
.adm-diff-valores i { color: var(--bd-muted); font-size: .75rem; }
.adm-diff-de {
  padding: .1rem .45rem;
  border-radius: 6px;
  background: #fef2f2;
  color: #991b1b;
  text-decoration: line-through;
}
.adm-diff-para { padding: .1rem .45rem; border-radius: 6px; background: #ecfdf5; color: #047857; font-weight: 700; }
.adm-diff-novo { padding: .1rem .45rem; border-radius: 6px; background: var(--bd-primary-100); color: var(--bd-primary-600); font-weight: 700; }
.adm-diff-quem { font-size: .7rem; color: var(--bd-muted); }

@media (max-width: 1199.98px) {
  .adm-pub { grid-template-columns: 1fr; }
  .adm-pub-acao { position: static; }
}

/* ============================================================================
   Sprint F6 — suporte, saúde e registro
   ========================================================================== */

/* ── busca grande da ficha 360 ─────────────────────────────────────────── */

.adm-busca-grande { position: relative; max-width: 620px; margin-bottom: 1.4rem; }
.adm-busca-grande > i {
  position: absolute;
  left: 1rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bd-muted);
  pointer-events: none;
}
.adm-busca-grande .form-control {
  padding-left: 2.6rem;
  height: 46px;
  border-radius: 4px;
  border-color: var(--bd-border);
  font-size: .92rem;
}
.adm-busca-grande .form-control:focus {
  border-color: var(--bd-primary);
  box-shadow: 0 0 0 4px var(--bd-primary-100);
}

.adm-sugestoes {
  position: absolute;
  top: calc(100% + .4rem);
  left: 0;
  right: 0;
  z-index: 20;
  background: var(--bd-card);
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius);
  box-shadow: none;
  overflow: hidden;
  max-height: 330px;
  overflow-y: auto;
}
.adm-sugestao {
  display: flex;
  align-items: center;
  gap: .8rem;
  width: 100%;
  border: 0;
  background: none;
  text-align: left;
  padding: .6rem .9rem;
  border-bottom: 1px solid var(--bd-border);
  cursor: pointer;
}
.adm-sugestao:last-child { border-bottom: 0; }
.adm-sugestao:hover { background: var(--bd-primary-100); }
.adm-sugestao div { flex: 1; min-width: 0; }
.adm-sugestao strong { display: block; font-size: .84rem; font-weight: 700; }
.adm-sugestao span { display: block; font-size: .74rem; color: var(--bd-muted); }
.adm-sugestao em { font-style: normal; font-size: .7rem; color: var(--bd-muted); white-space: nowrap; }
.adm-sugestao-vazia { padding: .9rem; font-size: .82rem; color: var(--bd-muted); }

/* ── diagnóstico ───────────────────────────────────────────────────────── */

.adm-diagnostico {
  display: flex;
  gap: .9rem;
  padding: 1rem 1.1rem;
  border-radius: var(--adm-radius);
  margin-bottom: 1.2rem;
  border: 1px solid;
}
.adm-diagnostico > i { font-size: 1.3rem; margin-top: .1rem; }
.adm-diagnostico strong { display: block; font-size: .95rem; font-weight: 600; }
.adm-diagnostico ul { margin: .5rem 0 0; padding-left: 1.1rem; }
.adm-diagnostico li { font-size: .82rem; margin-bottom: .3rem; }
.adm-diagnostico li em {
  display: block;
  font-style: normal;
  font-size: .74rem;
  opacity: .85;
  font-weight: 700;
}
.adm-diagnostico.is-bloqueio { background: #fef2f2; border-color: #fecaca; color: #991b1b; }
.adm-diagnostico.is-aviso { background: #fffbeb; border-color: #fde68a; color: #92400e; }
.adm-diagnostico.is-ok { background: #ecfdf5; border-color: #a7f3d0; color: #047857; }

/* ── ficha ─────────────────────────────────────────────────────────────── */

.adm-ficha {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: .9rem;
}
.adm-ficha-cartao { padding: 1rem 1.1rem; }
.adm-ficha-topo {
  display: flex;
  align-items: center;
  gap: .5rem;
  font-size: .72rem;
  font-weight: 600;
  color: var(--bd-muted);
  margin-bottom: .5rem;
}
.adm-ficha-topo i { color: var(--bd-primary); font-size: .9rem; }

/* O cartão da pessoa do chamado fica fora da grade: largura inteira, logo abaixo
   do diagnóstico, porque é a coisa que foi perguntada. */
.adm-cartao-pessoa {
  margin-bottom: .9rem;
  border-left: 3px solid var(--bd-primary);
}
.adm-cartao-pessoa .adm-revisao {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: 0 1.4rem;
}

.adm-mini-lista { margin-top: .7rem; display: flex; flex-direction: column; gap: .35rem; }
.adm-mini-item {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
  font-size: .78rem;
  padding: .4rem .55rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
}
.adm-mini-item > span:first-child { flex: 1; min-width: 0; }
.adm-mini-erro {
  flex-basis: 100%;
  font-family: ui-monospace, Menlo, monospace;
  font-size: .68rem;
  color: var(--bd-danger);
  word-break: break-word;
}

/* ── saúde ─────────────────────────────────────────────────────────────── */

.adm-saude { display: grid; grid-template-columns: 1fr 320px; gap: 1rem; align-items: start; }

.adm-ind-ruim .adm-indicador-valor { color: var(--bd-danger); }
.adm-ind-aviso .adm-indicador-valor { color: var(--bd-warning); }
.adm-ind-ok .adm-indicador-valor { color: var(--bd-success); }

.adm-grupo-erro {
  display: flex;
  align-items: center;
  gap: .7rem;
  padding: .5rem 0;
  border-bottom: 1px solid var(--bd-border);
}
.adm-grupo-erro:last-child { border-bottom: 0; }
.adm-grupo-conta {
  min-width: 30px;
  text-align: center;
  font-size: .78rem;
  font-weight: 600;
  padding: .15rem .4rem;
  border-radius: 4px;
  background: #f3f4f6;
  color: #4b5563;
}
.adm-grupo-conta.is-alto { background: #fef2f2; color: #b91c1c; }
.adm-grupo-erro code { font-size: .74rem; color: var(--bd-text); word-break: break-word; }

/* ── registro ──────────────────────────────────────────────────────────── */

.adm-reg-cabeca { display: flex; align-items: baseline; gap: .7rem; flex-wrap: wrap; }
.adm-reg-cabeca strong { font-size: .95rem; font-weight: 600; }
.adm-reg-cabeca code {
  font-size: .7rem;
  color: var(--bd-primary-600);
  background: var(--bd-primary-100);
  padding: .1rem .35rem;
  border-radius: 5px;
}

.adm-reg-lista { display: flex; flex-direction: column; gap: .35rem; }
.adm-reg-item {
  display: flex;
  align-items: center;
  gap: .6rem;
  flex-wrap: wrap;
  padding: .5rem .6rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  font-size: .8rem;
}
.adm-reg-item.is-pendente { background: #fffdf6; border-color: #fde68a; }
.adm-reg-id {
  font-family: ui-monospace, Menlo, monospace;
  font-size: .72rem;
  font-weight: 700;
  color: var(--bd-muted);
}
.adm-reg-texto { flex: 1; min-width: 220px; }

.adm-reg-grade {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: .6rem;
}
.adm-reg-tela {
  padding: .7rem .8rem;
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  font-size: .82rem;
}

@media (max-width: 1199.98px) {
  .adm-saude { grid-template-columns: 1fr; }
}
.adm-reg-demanda {
  font-size: .7rem;
  font-weight: 700;
  color: var(--bd-warning);
  white-space: nowrap;
}

/* Sequência em modo leitura: sem alça, sem botão, campos travados. */
.adm-seq.is-leitura .adm-seq-item { background: #fbfbfe; }
.adm-seq.is-leitura .form-control:disabled { background: transparent; border-color: transparent; padding-left: 0; }

.adm-selo-papel {
  display: inline-flex;
  align-items: center;
  padding: .25rem .6rem;
  border-radius: 4px;
  background: var(--bd-primary-100);
  border: 1px solid var(--bd-primary-200);
  color: var(--bd-primary-600);
  font-size: .72rem;
  font-weight: 700;
}

/* Estado de erro de carregamento, com repetição. */
.adm-erro-bloco {
  display: flex;
  align-items: center;
  gap: .9rem;
  padding: 1.1rem 1.2rem;
  border: 1px solid #fecaca;
  border-radius: var(--adm-radius);
  background: #fef2f2;
  color: #991b1b;
}
.adm-erro-bloco > i { font-size: 1.4rem; }
.adm-erro-bloco div { flex: 1; min-width: 0; }
.adm-erro-bloco strong { display: block; font-size: .9rem; font-weight: 600; }
.adm-erro-bloco span { display: block; font-size: .8rem; opacity: .9; }
.adm-erro-bloco .btn { white-space: nowrap; border: 1px solid #fecaca; }

/* Indicador que também é ação (o cartão de catálogo do Painel). */
.adm-indicador-acao {
  text-align: left;
  cursor: pointer;
  font: inherit;
  transition: border-color .12s ease, box-shadow .12s ease;
}
.adm-indicador-acao:hover { border-color: var(--bd-warning); box-shadow: var(--bd-shadow); }
.adm-indicador-acao .adm-indicador-nota i { color: var(--bd-warning); }

.adm-pub-diff { max-height: 46vh; overflow-y: auto; padding-right: .3rem; }

/* ============================================================================
   Carregando — mesmo tratamento do bdPrivacyClient (`bdprivacy.css:690`)
   ========================================================================== */

/* Barra fina no topo, ligada à contagem de requisições em voo. Só entra depois
   de 180ms: pisca-pisca em requisição rápida cansa mais do que informa. */
.adm-carregando {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 3px;
  z-index: 2000;
  background: var(--bd-primary-100);
  overflow: hidden;
  opacity: 0;
  transition: opacity .15s ease;
  pointer-events: none;
}
.adm-carregando.is-on { opacity: 1; }
.adm-carregando span {
  display: block;
  height: 100%;
  width: 34%;
  border-radius: 0 3px 3px 0;
  background: var(--bd-primary);
  animation: adm-carregando 1.1s ease-in-out infinite;
}
@keyframes adm-carregando {
  from { transform: translateX(-100%); }
  to { transform: translateX(340%); }
}
@media (prefers-reduced-motion: reduce) {
  .adm-carregando span { animation: none; width: 100%; }
}

/* O primeiro cabeçalho de grupo do menu não precisa do respiro de cima: ele já
   vem logo depois do Painel, que é item avulso. */
.navbar-vertical .navbar-nav .navbar-heading { list-style: none; }
.navbar-vertical .navbar-nav .nav-item + .navbar-heading { padding-top: .9rem; }

/* ============================================================================
   Sprint F8 — feriados, modelos de e-mail, papéis-modelo
   ========================================================================== */

.adm-feriados { display: grid; grid-template-columns: 1fr 300px; gap: 1.2rem; align-items: start; }
.adm-feriados-barra { display: flex; align-items: center; gap: .6rem; margin-bottom: .8rem; }
.adm-feriados-barra select { width: auto; min-width: 190px; }

@media (max-width: 1199.98px) { .adm-feriados { grid-template-columns: 1fr; } }
.adm-override-item.is-indisponivel { opacity: .55; cursor: default; background: #fbfbfe; }

.adm-var {
  border: 1px dashed var(--bd-primary-200);
  background: var(--bd-primary-100);
  color: var(--bd-primary-600);
  border-radius: 4px;
  padding: .15rem .55rem;
  font-family: ui-monospace, Menlo, monospace;
  font-size: .72rem;
  font-weight: 700;
  cursor: pointer;
}
.adm-var:hover { background: var(--bd-primary-200); }
.adm-var-ruim { background: #fef2f2; color: #b91c1c; padding: 0 .2rem; border-radius: 4px; }

.adm-email-previa { border: 1px solid var(--bd-border); border-radius: var(--adm-radius-sm); overflow: hidden; }
.adm-email-cabeca {
  display: flex; gap: .6rem; align-items: flex-start;
  padding: .7rem .8rem; background: #fbfbfe; border-bottom: 1px solid var(--bd-border);
}
.adm-email-cabeca i { color: var(--bd-primary); }
.adm-email-cabeca strong { display: block; font-size: .86rem; font-weight: 600; }
.adm-email-cabeca span { font-size: .72rem; color: var(--bd-muted); }
.adm-email-corpo { padding: .8rem; font-size: .84rem; line-height: 1.55; }

/* Seletor de nível do papel-modelo: três estados, não dois. */
.adm-niveis { display: flex; gap: .2rem; margin-left: auto; }
.adm-nivel {
  padding: .12rem .45rem;
  border: 1px solid var(--bd-border);
  border-radius: 4px;
  font-size: .68rem;
  font-weight: 700;
  color: var(--bd-muted);
  cursor: pointer;
  background: #fff;
  white-space: nowrap;
}
.adm-nivel input { position: absolute; opacity: 0; pointer-events: none; }
.adm-nivel.is-on { background: var(--bd-primary); border-color: var(--bd-primary); color: #fff; }
.adm-nivel:has(input:disabled) { opacity: .55; cursor: default; }

/* ============================================================================
   Parâmetros — tabela no lugar dos cartões
   ========================================================================== */

.adm-param-barra {
  display: flex;
  align-items: center;
  gap: .8rem;
  flex-wrap: wrap;
  margin-bottom: 1.2rem;
}

.adm-filtro-chip {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .35rem .8rem;
  border-radius: 4px;
  border: 1px solid var(--bd-border);
  background: #fff;
  font-size: .8rem;
  font-weight: 600;
  color: var(--bd-text);
  cursor: pointer;
}
.adm-filtro-chip:hover { border-color: var(--bd-primary-200); }
.adm-filtro-chip.is-on { background: var(--bd-primary); border-color: var(--bd-primary); color: #fff; }
.adm-filtro-chip .cont {
  padding: 0 .35rem;
  border-radius: 4px;
  background: #eef0f6;
  color: var(--bd-muted);
  font-size: .7rem;
  font-weight: 600;
}
.adm-filtro-chip.is-on .cont { background: rgba(255,255,255,.25); color: #fff; }

.adm-param-alerta {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  font-size: .78rem;
  color: var(--bd-danger);
  font-weight: 600;
}

.adm-tabela-param td { vertical-align: top; }
.adm-tabela-param tr.is-clickable td { padding-top: .8rem; padding-bottom: .8rem; }

.adm-param-valor-celula { white-space: nowrap; }
.adm-param-valor-celula strong { font-size: 1.15rem; font-weight: 700; }
.adm-param-valor-celula span { display: block; font-size: .7rem; color: var(--bd-muted); font-weight: 500; }

/* A coluna larga: o fundamento é o que faz o número sobreviver a uma troca de
   pessoa, e estava em cinza pequeno no rodapé de um cartão. */
.adm-param-fundamento {
  font-size: .8rem;
  line-height: 1.5;
  color: var(--bd-text);
  max-width: 460px;
}

.adm-param-direcao {
  display: inline-flex;
  align-items: center;
  gap: .2rem;
  font-size: .76rem;
  color: var(--bd-primary-600);
  font-weight: 600;
  white-space: nowrap;
}
.adm-tabela-param .adm-param-excecoes {
  display: block;
  margin: .25rem 0 0;
  font-size: .72rem;
  color: var(--bd-muted);
  font-weight: 700;
}
.adm-tabela-param .adm-param-excecoes.is-erro { color: var(--bd-danger); }

/* Estado de curadoria: informação permanente, não alerta. Chip discreto em vez
   de faixa de 87px no topo de toda visita. */
.adm-estado-curadoria {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .35rem .75rem;
  margin-bottom: 1rem;
  border-radius: 4px;
  background: #fffbeb;
  border: 1px solid #fde68a;
  color: #92400e;
  font-size: .78rem;
  cursor: help;
}
.adm-estado-curadoria i { font-size: .82rem; }
.adm-estado-curadoria em { font-style: normal; opacity: .75; font-size: .72rem; }

/* ============================================================================
   Registro — duas zonas: o que é código e o que é texto
   ========================================================================== */

/* A zona cinza existe para a edição não parecer poder que não tem: quem muda o
   rótulo de uma ação de permissão precisa ver, no mesmo modal, que a chave que
   o servidor confere continua a mesma. */
.adm-zona-codigo {
  background: #f6f7fb;
  border: 1px solid var(--bd-border);
  border-radius: .6rem;
  padding: .75rem .9rem;
  margin-bottom: .25rem;
}
.adm-zona-codigo-topo {
  display: flex;
  align-items: center;
  gap: .4rem;
  font-size: .72rem;
  font-weight: 700;
  color: var(--bd-muted);
  margin-bottom: .6rem;
}
.adm-zona-codigo-topo code {
  margin-left: auto;
  font-size: .7rem;
  color: var(--bd-muted);
  text-transform: none;
  letter-spacing: 0;
}
.adm-zona-codigo dl { margin: 0; display: grid; gap: .5rem; }
.adm-zona-codigo dl > div { display: grid; grid-template-columns: 9.5rem 1fr; gap: .75rem; }
.adm-zona-codigo dt { font-size: .78rem; font-weight: 600; color: var(--bd-muted); }
.adm-zona-codigo dd { margin: 0; font-size: .82rem; font-weight: 600; color: var(--bd-text); }
.adm-zona-codigo dd span {
  display: block;
  font-size: .74rem;
  font-weight: 400;
  color: var(--bd-muted);
  margin-top: .1rem;
}

/* Chip que abre edição. Herda o desenho do chip, ganha só o affordance. */
.adm-chip-botao {
  display: inline-block;
  border: 1px solid var(--bd-border);
  background: #f1f3f9;
  color: var(--bd-text);
  border-radius: 4px;
  /* Mesma métrica do `.adm-chip`: os dois convivem lado a lado na grade de
     permissão e 1px de diferença de altura aparece como linha desalinhada. */
  padding: .15rem .55rem;
  font-size: .7rem;
  font-weight: 600;
  line-height: 1.5;
  cursor: pointer;
}
.adm-chip-botao:hover { border-color: var(--bd-primary-400, #9a94d8); background: #eceaf8; }
.adm-chip-botao.is-roxo {
  background: var(--bd-primary-100);
  color: var(--bd-primary-600);
  border-color: transparent;
}

/* Prévia do texto do gatilho com as variáveis já resolvidas: é o que o cliente
   lê, e sem isso não dá para conferir a edição sem publicar. */
.adm-previa-texto {
  border: 1px solid var(--bd-border);
  border-left: 3px solid var(--bd-primary-500, #726bc2);
  border-radius: .4rem;
  background: #fff;
  padding: .6rem .75rem;
  font-size: .84rem;
  color: var(--bd-text);
}

.adm-reg-marca { color: var(--bd-primary-500, #726bc2); font-size: .78rem; }
.adm-reg-item.is-clickable { cursor: pointer; }
.adm-reg-item.is-clickable:hover { background: #f6f7fb; }
.adm-reg-tela strong.is-clickable { cursor: pointer; }
.adm-reg-tela strong.is-clickable:hover { color: var(--bd-primary-600); }
.adm-revisao > div.is-clickable { cursor: pointer; }
.adm-revisao > div.is-clickable:hover { background: #f6f7fb; }

/* Referência de onde o número vive hoje. Sai da lista, onde competia com o nome do
   parâmetro, e fica no rodapé do modal: quem administra decide pelo fundamento, quem
   investiga um chamado já está com o parâmetro aberto. */
.adm-referencia {
  margin-top: 1rem;
  padding-top: .75rem;
  border-top: 1px solid var(--bd-border);
  font-size: .7rem;
  color: var(--bd-muted);
  opacity: .7;
  font-family: var(--bs-font-monospace, ui-monospace, SFMono-Regular, Menlo, monospace);
}

/* ============================================================================
   Exceção de parâmetro por cliente — criação e ajuste
   ========================================================================== */

/* Subtítulo que carrega a ação da própria seção. O botão precisa ficar junto do
   título: solto no rodapé da lista, ele some quando a lista está vazia, que é
   justamente quando alguém mais precisa dele. */
.adm-subtitulo-acao {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
}

/* Estado vazio de uma seção dentro de modal: uma linha, não um cartão. */
.adm-vazio-linha {
  display: flex;
  align-items: baseline;
  gap: .45rem;
  padding: .6rem .75rem;
  border: 1px dashed var(--bd-border);
  border-radius: var(--adm-radius-sm);
  font-size: .8rem;
  color: var(--bd-muted);
}
.adm-vazio-linha i { color: var(--bd-muted); opacity: .7; }

/* Ação que desfaz, separada do salvar: fica fora do fluxo do formulário para
   ninguém clicar nela achando que está confirmando. */
.adm-acao-secundaria {
  margin-top: 1.1rem;
  padding-top: .85rem;
  border-top: 1px solid var(--bd-border);
  display: flex;
  align-items: center;
  gap: .7rem;
  flex-wrap: wrap;
}
.adm-acao-secundaria span { font-size: .75rem; color: var(--bd-muted); flex: 1; min-width: 12rem; }

/* Cabeçalho de aba que carrega a ação de criar. Alinhado à direita, acima da
   grade: no fim da lista o botão sumiria justamente quando a lista está vazia. */
.adm-aba-cabeca {
  display: flex;
  justify-content: flex-end;
  margin-bottom: .85rem;
}
.adm-aba-cabeca:empty { display: none; }

/* ============================================================================
   Notas do atendimento
   ========================================================================== */

.adm-notas { display: flex; flex-direction: column; gap: .6rem; }

.adm-nota {
  background: var(--bd-surface, #fff);
  border: 1px solid var(--bd-border);
  border-left: 3px solid var(--bd-primary-400, #9a94d8);
  border-radius: var(--adm-radius-sm);
  padding: .7rem .9rem;
}
.adm-nota p { margin: 0 0 .5rem; font-size: .85rem; line-height: 1.55; white-space: pre-wrap; }
.adm-nota-rodape {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .6rem;
  font-size: .72rem;
  color: var(--bd-muted);
}

/* ============================================================================
   Editor de modelo de coletor — composição de blocos
   ========================================================================== */

.adm-blocos-coletor { display: flex; flex-direction: column; gap: .5rem; }

.adm-bloco-coletor {
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  padding: .6rem .75rem;
  background: #fff;
}
.adm-bloco-coletor[draggable="true"] { cursor: grab; }

.adm-bloco-coletor-topo {
  display: flex;
  align-items: center;
  gap: .5rem;
  font-size: .85rem;
}
.adm-bloco-coletor-topo .td-code { font-size: .7rem; color: var(--bd-muted); }
.adm-bloco-coletor-topo .btn { margin-left: auto; }
.adm-bloco-coletor .adm-alca { color: var(--bd-muted); opacity: .6; }
.adm-bloco-coletor .adm-ajuda { margin-top: .2rem; }

.adm-bloco-coletor-campos {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
  gap: .5rem;
  margin-top: .55rem;
}
.adm-bloco-coletor-campos label {
  display: flex;
  flex-direction: column;
  gap: .15rem;
  font-size: .7rem;
  color: var(--bd-muted);
}

.adm-chip-botao[disabled] { opacity: .4; cursor: not-allowed; }

/* Ação inline dentro de uma linha de definição: parece link porque abre detalhe,
   não porque muda estado. */
.adm-link-inline {
  border: 0;
  background: none;
  padding: 0;
  margin-left: .4rem;
  font-size: .76rem;
  font-weight: 600;
  color: var(--bd-primary-600);
  text-decoration: underline;
  cursor: pointer;
}
.adm-link-inline:hover { color: var(--bd-primary-700, #5b54a8); }

/* Setas de ordenar dentro da tabela de planos. Compactas e empilhadas: ocupam
   uma coluna estreita e não competem com o nome do plano. */
.adm-ordem { display: flex; flex-direction: column; gap: 1px; }
.adm-ordem button {
  border: 1px solid var(--bd-border);
  background: #fff;
  color: var(--bd-muted);
  border-radius: 4px;
  line-height: 1;
  padding: .1rem .3rem;
  font-size: .68rem;
  cursor: pointer;
}
.adm-ordem button:hover { border-color: var(--bd-primary-400, #9a94d8); color: var(--bd-primary-600); }

/* Exceção mais permissiva que o padrão, na ficha: mesma marca vermelha da tela de
   Parâmetros, para o suporte reconhecer o caso sem precisar aprender duas
   convenções para a mesma coisa. */
.adm-mini-item.is-erro {
  border-color: #fecaca;
  background: #fef2f2;
}
.adm-mini-item.is-erro strong { color: var(--bd-danger); }

/* Intervalo de datas na barra da tabela da trilha. Compacto, ao lado dos filtros:
   "o que mudou plano em agosto" precisa do tipo de ação e do período juntos. */
.adm-periodo { display: flex; align-items: center; gap: .35rem; flex-wrap: wrap; }
.adm-periodo label { font-size: .72rem; color: var(--bd-muted); }
.adm-periodo input[type="date"] { width: auto; min-width: 8.5rem; }

/* Barra de ação em massa. Só aparece com algo selecionado, e fica na própria
   barra da tabela: separada dali, seria um bloco que surge e empurra a lista. */
.adm-massa {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .25rem .5rem .25rem .7rem;
  background: var(--bd-primary-100);
  border-radius: 4px;
}
.adm-massa strong { font-size: .78rem; color: var(--bd-primary-600); white-space: nowrap; }

/* ============================================================================
   Preview de documento com seções — política e RIPD
   ========================================================================== */

.adm-preview-doc {
  border: 1px solid var(--bd-border);
  border-radius: var(--adm-radius-sm);
  background: #fbfbfe;
  padding: .9rem;
  position: sticky;
  top: 0;
}
.adm-preview-doc .adm-preview-cabeca i { color: var(--bd-primary-500, #726bc2); }

/* A completude é o cálculo do client, não decoração: é ele que explica por que ao
   menos uma seção precisa ser obrigatória. */
.adm-preview-completude { margin-top: .8rem; }
.adm-preview-completude .adm-barra {
  height: 6px;
  border-radius: 3px;
  background: #e9e7f3;
  overflow: hidden;
}
.adm-preview-completude .adm-barra span {
  display: block;
  height: 100%;
  background: var(--bd-primary-500, #726bc2);
}
.adm-preview-completude em {
  display: block;
  font-style: normal;
  font-size: .7rem;
  color: var(--bd-muted);
  margin-top: .3rem;
}

.adm-preview-alerta {
  margin-top: .8rem;
  padding: .5rem .65rem;
  border-radius: var(--adm-radius-sm);
  background: #fffbeb;
  border: 1px solid #fde68a;
  color: #92400e;
  font-size: .74rem;
  line-height: 1.45;
}
.adm-preview-alerta i { margin-right: .3rem; }

.adm-preview-secoes { margin: 0; padding-left: 1.15rem; font-size: .78rem; }
.adm-preview-secoes li { margin-bottom: .5rem; }
.adm-preview-secoes strong { font-weight: 700; }
.adm-preview-secoes em {
  font-style: normal;
  font-size: .64rem;
  font-weight: 700;
  color: var(--bd-primary-600);
  margin-left: .35rem;
}
.adm-preview-secoes span { display: block; color: var(--bd-muted); font-size: .72rem; margin-top: .1rem; }
.adm-preview-secoes li:not(.is-obrigatoria) strong { font-weight: 500; }

.adm-preview-vazio {
  font-size: .76rem;
  color: var(--bd-muted);
  padding: .6rem;
  border: 1px dashed var(--bd-border);
  border-radius: var(--adm-radius-sm);
}

.adm-preview-doc .adm-preview-nota {
  margin-top: .8rem;
  padding-top: .6rem;
  border-top: 1px solid var(--bd-border);
  font-size: .7rem;
  color: var(--bd-muted);
}

/* Duas colunas como no editor de incidente: edita à esquerda, vê à direita. */
.adm-editor-doc { display: grid; grid-template-columns: 1fr 320px; gap: 1.2rem; align-items: start; }
@media (max-width: 900px) {
  .adm-editor-doc { grid-template-columns: 1fr; }
  .adm-preview-doc { position: static; }
}
