/* ════════════════════════════════════════════════════════════════════════════
   Portal do Titular (aluno/responsável) — mockup "Portal do Titular (DSAR)".
   Prefixo `tt-`. Cores da marca vêm das variáveis definidas no <body>.
   ════════════════════════════════════════════════════════════════════════════ */

body.le-titular {
  background: #F2F5FD;
  font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
  -webkit-font-smoothing: antialiased;
  color: #12275A;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  margin: 0;
}
body.le-titular a { color: var(--marca-primaria); text-decoration: none; }

/* ⚠️ A regra acima tem especificidade (0,1,2) e vence qualquer `.classe` sozinha — foi assim que
   o texto do botão "+ Nova solicitação" ficou azul sobre azul, ou seja, invisível (o texto estava
   lá; só não dava para ler). Todo BOTÃO que é um <a> precisa reafirmar a cor com este mesmo peso.
   Mesmo tropeço do link "Já tenho conta" no fluxo de conta. */
body.le-titular a.sl-btn-azul { color: #fff; }
body.le-titular a.sl-btn-claro,
body.le-titular a.pv-btn-claro { color: #33445F; }

/* ── Header ────────────────────────────────────────────────────────────────── */
.tt-topo { height: 96px; flex: none; background: var(--marca-bar); display: flex; align-items: center; padding: 0 34px; gap: 24px; }
.tt-logo { background: #fff; border-radius: 8px; padding: 6px 10px; display: flex; }
.tt-logo img { width: 104px; height: auto; display: block; }
.tt-sep { width: 1px; height: 44px; background: rgba(255, 255, 255, .32); }
.tt-titulo { font-size: 19.5px; font-weight: 600; color: #fff; }
.tt-escudo { width: 44px; height: 44px; flex: none; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; }
.tt-lema { display: flex; flex-direction: column; gap: 3px; }
.tt-lema-1 { font-size: 14.5px; font-weight: 700; color: #fff; }
.tt-lema-2 { font-size: 14px; color: #DCE6FA; }
/* Faixa de 5 cores do design — é a assinatura visual do portal. */
.tt-faixa { width: 150px; height: 3px; border-radius: 2px; background: linear-gradient(90deg, #E8453C, #F5A623, #37C77F, #2E9BF0, #8B5CF6); }
.tt-sair, a.tt-sair { font-size: 13px; font-weight: 600; color: #DCE6FA; }
a.tt-sair:hover { color: #fff; }

/* ── Corpo ─────────────────────────────────────────────────────────────────── */
.tt-corpo { flex: 1; padding: 26px 34px 30px; display: flex; flex-direction: column; gap: 18px; }
.tt-abre { display: flex; align-items: flex-start; gap: 10px; }
.tt-abre h1 { margin: 0; font-size: 38px; font-weight: 800; letter-spacing: -.02em; color: #0B3FBF; }
.tt-abre p { margin: 12px 0 0; font-size: 15px; line-height: 1.6; color: #2B4368; max-width: 420px; }
.tt-abre p.destaque { font-weight: 500; color: #1E3A6B; margin-top: 14px; }
.tt-abre strong { font-weight: 700; color: #0B3FBF; }
.tt-ilustra { width: 290px; height: auto; flex: none; display: block; }

.tt-h2 { margin: 6px 0 0; font-size: 19px; font-weight: 700; color: #0B3FBF; }

.tt-acoes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.tt-acao {
  background: #fff; border: 1px solid #E4EAF5; border-radius: 12px; padding: 18px 16px 14px;
  display: flex; flex-direction: column; gap: 12px; cursor: pointer; color: inherit;
  box-shadow: 0 1px 3px rgba(18, 39, 90, .05);
  transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease;
}
.tt-acao:hover { border-color: #9FC0F7; box-shadow: 0 6px 18px rgba(11, 63, 191, .12); transform: translateY(-2px); }
.tt-acao-ic { width: 44px; height: 44px; border-radius: 11px; display: flex; align-items: center; justify-content: center; }
.tt-acao b { font-size: 16.5px; font-weight: 700; color: #0B3FBF; line-height: 1.25; }
.tt-acao span { font-size: 11.5px; line-height: 1.5; color: #5D7092; }
.tt-acao-seta { display: flex; justify-content: center; margin-top: 2px; }

/* Cartão desabilitado: aparece, apagado, com o motivo — some seria pior que dizer "ainda não". */
.tt-acao.indisponivel { opacity: .55; cursor: default; }
.tt-acao.indisponivel:hover { transform: none; border-color: #E4EAF5; box-shadow: 0 1px 3px rgba(18, 39, 90, .05); }

.tt-resumo { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.tt-card {
  background: #fff; border: 1px solid #E4EAF5; border-radius: 12px; padding: 16px 18px;
  box-shadow: 0 1px 3px rgba(18, 39, 90, .05);
}
.tt-card-tit { font-size: 15px; font-weight: 700; color: #0B3FBF; }
.tt-card-num { font-size: 30px; font-weight: 800; color: #12275A; line-height: 1.15; margin-top: 6px; }
.tt-card-sub { font-size: 12px; color: #5D7092; margin-top: 2px; }

/* ── Nova solicitação ──────────────────────────────────────────────────────── */
.tt-trilha { display: flex; align-items: flex-start; }
.tt-etapa { display: flex; align-items: flex-start; gap: 10px; flex: none; }
.tt-etapa span:first-child {
  width: 22px; height: 22px; flex: none; border-radius: 50%; background: #CFD8E6; color: #fff;
  font-size: 11.5px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-top: 1px;
}
.tt-etapa.ativa span:first-child, .tt-etapa.feita span:first-child { background: var(--marca-primaria); }
.tt-etapa b { display: block; font-size: 12.5px; font-weight: 600; color: #5B6E90; }
.tt-etapa.ativa b, .tt-etapa.feita b { font-weight: 700; color: var(--marca-primaria); }
.tt-etapa i { display: block; font-style: normal; font-size: 11px; color: #8A96AB; margin-top: 2px; }
.tt-trilho { flex: 1; height: 2px; background: #E1E8F4; margin: 12px 14px 0; }
.tt-trilho.ativo { background: var(--marca-primaria); }

.tt-dados-titular { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-top: 10px; }
.tt-dados-titular span { display: block; font-size: 11.5px; font-weight: 600; color: #5B6E90; }
.tt-dados-titular b { display: block; font-size: 12.5px; font-weight: 600; color: #0B2A5E; margin-top: 3px; word-break: break-word; }

.tt-direitos { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 12px; }
.tt-direito input { position: absolute; opacity: 0; pointer-events: none; }
.tt-direito-cx {
  display: block; border: 1px solid #E4EAF5; border-radius: 10px; padding: 12px 14px; cursor: pointer;
  transition: border-color .14s ease, background .14s ease;
}
.tt-direito-cx b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.tt-direito-cx i { display: block; font-style: normal; font-size: 11.5px; line-height: 1.5; color: #5D7092; margin-top: 3px; }
.tt-direito-cx:hover { border-color: #9FC0F7; }
.tt-direito input:checked + .tt-direito-cx { border-color: var(--marca-primaria); background: #F5F9FF; box-shadow: 0 0 0 1px var(--marca-primaria) inset; }

.tt-textarea {
  width: 100%; box-sizing: border-box; border: 1px solid #DFE6F2; border-radius: 9px; padding: 12px 14px;
  font-family: inherit; font-size: 13.5px; line-height: 1.55; color: #12275A; resize: vertical;
}
.tt-textarea:focus { outline: none; border-color: var(--marca-primaria); }

.tt-prazo { display: flex; align-items: flex-start; gap: 12px; font-size: 12.5px; line-height: 1.55; color: #33445F; }

/* ────────────────────────────────────────────────────────────────────────────
   SHELL: barra lateral + barra superior.
   Porte do bloco `hasShell` de `Portal do Titular (DSAR).dc.html`. Medidas e cores
   copiadas do mockup uma a uma.
   ──────────────────────────────────────────────────────────────────────────── */
.tt-app { min-height: 100vh; display: flex; background: #fff; color: #0D2A5E; }

.tt-side {
  width: 242px; flex: none; align-self: stretch;
  background: linear-gradient(180deg, #00214F 0%, #001336 100%);
  display: flex; flex-direction: column; padding: 0 0 20px;
  position: sticky; top: 0; height: 100vh;
}
.tt-side-logo { padding: 22px 0 6px; display: flex; justify-content: center; }
.tt-side-logo img { width: 112px; height: auto; display: block; }
.tt-side-marca {
  padding: 10px 0 16px 24px; font-size: 11.5px; font-weight: 600;
  letter-spacing: .07em; color: #A9BAD6;
}
.tt-nav { display: flex; flex-direction: column; gap: 3px; padding: 0 16px; }
.tt-nav-item {
  display: flex; align-items: center; gap: 11px; border-radius: 9px; padding: 11px 9px;
  font-size: 14px; white-space: nowrap; cursor: pointer; text-decoration: none;
  color: #DCE5F5; font-weight: 500;
}
.tt-nav-item:hover { background: rgba(255, 255, 255, .07); color: #fff; }
.tt-nav-item.on {
  background: #0D3FBF; color: #fff; font-weight: 600; box-shadow: 0 3px 10px rgba(13, 63, 191, .35);
}
.tt-nav-item.on:hover { background: #0D3FBF; }
/* Separador do grupo de itens de quem trabalha na escola: sem ele, "Consultar titular" ficaria
   colado em "Fale com o DPO" e pareceria mais um item do titular. */
.tt-nav-secao {
  margin: 16px 0 6px; padding: 0 9px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .07em; text-transform: uppercase; color: #7C90B4;
}
.tt-side-vazio { flex: 1; min-height: 90px; }
.tt-side-badge { padding: 0 22px; }
.tt-side-badge img { width: 100%; height: auto; display: block; border-radius: 10px; }

.tt-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.tt-bar {
  height: 56px; flex: none; background: linear-gradient(90deg, #001133 0%, #0A3ECB 55%, #0B45E8 100%);
  display: flex; align-items: center; padding: 0 22px; gap: 15px;
}
.tt-bar-ic {
  width: 32px; height: 32px; flex: none; border-radius: 9px; background: rgba(255, 255, 255, .14);
  display: flex; align-items: center; justify-content: center;
}
.tt-bar-tit { font-size: 16.5px; font-weight: 600; color: #fff; }
.tt-bar-lema { display: flex; align-items: center; gap: 10px; }
.tt-bar-lema div { display: flex; flex-direction: column; gap: 1px; }
.tt-bar-lema .l1 { font-size: 12px; font-weight: 700; color: #fff; }
.tt-bar-lema .l2 { font-size: 10.5px; font-weight: 400; color: #C9D9F8; }
.tt-bar-eu {
  display: flex; align-items: center; gap: 9px; background: #fff; border-radius: 20px;
  padding: 5px 11px 5px 5px; cursor: pointer; text-decoration: none;
}
.tt-bar-eu div { display: flex; flex-direction: column; }
.tt-bar-eu .n { font-size: 12px; font-weight: 700; color: #12275A; }
.tt-bar-eu .p { font-size: 10.5px; font-weight: 400; color: #7387A6; }
.tt-bar-av {
  width: 30px; height: 30px; flex: none; border-radius: 50%; background: var(--marca-acento);
  color: #fff; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
/* Voltar na barra: presente em toda tela interna. Fica ANTES do bloco de identidade para não
   competir com o "Sair" — trocar um pelo outro por engano custa a sessão. */
.tt-bar-voltar {
  display: flex; align-items: center; gap: 8px; flex: none; border: 1px solid rgba(255, 255, 255, .3);
  background: rgba(255, 255, 255, .14); color: #fff; border-radius: 9px; padding: 7px 13px;
  font-family: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer;
}
.tt-bar-voltar:hover { background: rgba(255, 255, 255, .26); }
.tt-bar-sair {
  width: 32px; height: 32px; flex: none; border-radius: 9px; background: rgba(255, 255, 255, .14);
  display: flex; align-items: center; justify-content: center; text-decoration: none;
}
.tt-bar-sair:hover { background: rgba(255, 255, 255, .28); }

/* ── Chat do DPO flutuante ────────────────────────────────────────────────── */
.tt-chat-abrir {
  position: fixed; right: 26px; bottom: 26px; z-index: 89; width: 56px; height: 56px;
  border: 0; border-radius: 50%; background: var(--marca-primaria); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 22px rgba(13, 42, 94, .28);
}
.tt-chat-abrir:hover { background: #093AB9; }
/* ═══ MESMO DESENHO DO CHAT DA ASSISTENTE (pedido do cliente, 24/08/2026) ═══════════════════
   A conversa com o DPO tinha medidas próprias — outro tamanho, outro raio, outra sombra, outro
   avatar, outra tipografia. Duas janelas de conversa no mesmo produto, parecidas mas não iguais,
   é o tipo de diferença que ninguém sabe explicar e todo mundo percebe.

   Os valores abaixo são OS MESMOS de `.hm-chat` (wwwroot/css/home.css). Mexeu num, mexe no outro.

   ⚠️ O cabeçalho passou a usar `var(--marca-bar)` no lugar de um gradiente fixo `#0232B5→#0B45DD`.
   Não é só estética: a cor é por ESCOLA, e o gradiente cravado fazia a conversa do titular
   aparecer azul-padrão dentro de um portal personalizado com outra marca.

   ⚠️ `100dvh`, não `vh`: no celular a barra de endereço come o campo de digitação. */
.tt-chat {
  position: fixed; right: 22px; bottom: 22px; z-index: 90;
  width: min(390px, calc(100vw - 24px)); height: min(560px, calc(100dvh - 40px));
  display: flex; flex-direction: column; min-height: 0; background: #fff; border: 1px solid #E4EAF5;
  border-radius: 15px; overflow: hidden; box-shadow: 0 18px 48px rgba(11, 42, 94, .26);
  font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
  animation: ttChatIn .18s ease-out;
}
.tt-chat[hidden] { display: none; }
@keyframes ttChatIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }

.tt-chat-topo {
  flex: none; background: var(--marca-bar); padding: 13px 15px;
  display: flex; align-items: center; gap: 11px;
}
/* Círculo, como o da assistente — era quadrado de canto arredondado. */
.tt-chat-topo img { width: 38px; height: 38px; flex: none; border-radius: 50%; object-fit: cover; object-position: top center; background: #fff; display: block; }
.tt-chat-topo .nome { font-size: 14.5px; font-weight: 700; color: #fff; }
.tt-chat-topo .estado { display: flex; align-items: center; gap: 6px; margin-top: 1px; font-size: 11px; font-weight: 500; color: #DCE6FA; }
.tt-chat-topo .ponto { width: 6px; height: 6px; border-radius: 50%; background: #4ADE80; }
.tt-chat-fechar {
  width: 28px; height: 28px; flex: none; border-radius: 7px; background: none;
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}
.tt-chat-fechar:hover { background: rgba(255, 255, 255, .16); }

.tt-chat-fio {
  flex: 1; min-height: 0; overflow-y: auto; background: #F7F9FE; padding: 15px;
  display: flex; flex-direction: column; gap: 9px;
  scrollbar-width: thin; scrollbar-color: #B9C6DA #EEF1F7;
}
.tt-chat-fio::-webkit-scrollbar { width: 10px; }
.tt-chat-fio::-webkit-scrollbar-track { background: #EEF1F7; border-radius: 6px; }
.tt-chat-fio::-webkit-scrollbar-thumb { background: #B9C6DA; border-radius: 6px; border: 2px solid #EEF1F7; }

.tt-msg { display: flex; gap: 9px; align-items: flex-end; }
.tt-msg img { width: 26px; height: 26px; flex: none; border-radius: 50%; object-fit: cover; display: block; }
/* Balão com as medidas de `.hm-fala`: 84% de largura, raio 12 com o canto do lado "colado" em 4,
   fonte 13/1.55 e respiro 10×13. A hora é exclusiva daqui e fica, só que na mesma escala. */
.tt-msg-balao {
  max-width: 84%; background: #fff; border: 1px solid #E4EAF5; border-radius: 12px 12px 12px 4px; padding: 10px 13px;
}
.tt-msg-balao .txt { font-size: 13px; font-weight: 400; line-height: 1.55; color: #2B4368; overflow-wrap: anywhere; }
.tt-msg-balao .hora { font-size: 10px; font-weight: 500; color: #A3AEC2; margin-top: 4px; }
.tt-msg.eu { justify-content: flex-end; }
.tt-msg.eu .tt-msg-balao { background: var(--marca-primaria); border: 0; border-radius: 12px 12px 4px 12px; }
.tt-msg.eu .txt { color: #fff; }
.tt-msg.eu .hora { color: #C3D6FB; }

/* Rodapé com as medidas de `.hm-chat-pe`: campo com borda própria e botão 42×42 raio 9.
   Os atalhos são exclusivos daqui (a assistente não tem) e ficam acima, na mesma linguagem. */
.tt-chat-pe { flex: none; background: #fff; border-top: 1px solid #EFF2F7; padding: 11px 13px; }
.tt-chat-atalhos { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 9px; }
.tt-chat-atalho {
  border: 1px solid #C6D6F5; background: #fff; border-radius: 20px; padding: 5px 11px;
  font-family: inherit; font-size: 11px; font-weight: 600; color: var(--marca-primaria); cursor: pointer;
}
.tt-chat-atalho:hover { background: #EDF4FF; }
.tt-chat-campo { display: flex; align-items: center; gap: 9px; }
.tt-chat-campo input {
  flex: 1; min-width: 0; border: 1px solid #DFE6F2; border-radius: 9px; padding: 11px 13px;
  font-family: inherit; font-size: 13px; color: #12275A; background: #fff; outline: none;
}
.tt-chat-campo input:focus { border-color: var(--marca-primaria); }
.tt-chat-enviar {
  width: 42px; height: 42px; flex: none; border-radius: 9px; background: var(--marca-primaria);
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}
.tt-chat-enviar:hover { background: #093AB9; }
.tt-chat-aviso { display: flex; align-items: center; gap: 7px; margin-top: 9px; }
.tt-chat-aviso span { font-size: 11px; font-weight: 400; line-height: 1.45; color: #8A96AB; }

/* Cartão verde de protocolo aberto pelo chat */
.tt-msg-proto { max-width: 88%; background: #F1FAF5; border: 1px solid #B7E3CB; border-radius: 11px 11px 11px 3px; padding: 11px 13px; }
.tt-msg-proto .tit { display: flex; align-items: center; gap: 8px; font-size: 11.5px; font-weight: 700; color: #127C48; }
.tt-msg-proto .cod { font-size: 15px; font-weight: 800; letter-spacing: .02em; color: #0B2A5E; margin-top: 7px; font-family: ui-monospace, Menlo, monospace; }
.tt-msg-proto .txt { font-size: 11px; font-weight: 400; line-height: 1.5; color: #33445F; margin-top: 6px; }
/* ⚠️ Sem `body.le-titular` na frente: o widget também abre na tela de entrada (`body.hm`), e ali
   o link do protocolo ficava com a cor de link do tema em vez do verde do cartão. A especificidade
   vem de `a.tt-msg-proto-link` mesmo, que já basta para vencer as regras de `a` das cascas. */
a.tt-msg-proto-link {
  display: inline-block; margin-top: 9px; font-size: 11.5px; font-weight: 700; color: #127C48;
}
a.tt-msg-proto-link:hover { text-decoration: underline; }

/* ⚠️ NA TELA DE ENTRADA NÃO EXISTE A BOLHA FLUTUANTE. Ali a porta é o botão "Falar com o DPO" do
   cartão do Encarregado, à vista no meio da página; a bolha seria um segundo botão para a mesma
   coisa, no canto, cobrindo o rodapé. Mesma regra que já vale nas telas com botão próprio. */
body.hm .tt-chat-abrir { display: none !important; }

@media (max-width: 980px) {
  .tt-app { flex-direction: column; }
  .tt-side { width: auto; height: auto; position: static; padding-bottom: 12px; }
  .tt-side-vazio, .tt-side-badge { display: none; }
  .tt-nav { flex-direction: row; overflow-x: auto; }
  .tt-bar { height: auto; padding: 10px 14px; flex-wrap: wrap; gap: 10px; }
  .tt-bar-lema { display: none; }
  /* Tela cheia no celular, exatamente como `.hm-chat` faz na mesma largura: meia tela numa
     conversa longa é pior que tela cheia, e o teclado virtual já come metade do que sobra.
     `100dvh` e não `vh` — com `vh`, a barra de endereço tapa o campo de digitação. */
  .tt-chat { right: 0; bottom: 0; width: 100vw; height: 100dvh; border-radius: 0; border: 0; }
}

/* Botão voltar das telas de segundo nível. O menu lateral cobre a navegação principal, mas quem
   entra numa tela a partir de outra precisa do caminho de volta. */
body.le-titular a.tt-voltar {
  align-self: flex-start; display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid #DFE6F2; background: #fff; color: #33445F; border-radius: 8px;
  padding: 8px 14px; font-size: 12.5px; font-weight: 600; text-decoration: none;
}
body.le-titular a.tt-voltar:hover { background: #F5F8FD; border-color: #C6D6F5; }

/* ── Personalizar: busca de escola e logo. Prefixo `pz-` ──────────────────── */
.pz-buscar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 13px; }
.pz-busca {
  flex: 1; min-width: 260px; display: flex; align-items: center; gap: 9px; background: #fff;
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 13px;
}
.pz-busca input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 13px; color: #12275A; background: transparent; }
.pz-logo { display: flex; align-items: center; gap: 14px; margin-top: 6px; }
.pz-logo-atual {
  width: 118px; height: 54px; flex: none; border-radius: 9px; display: flex; align-items: center;
  justify-content: center; padding: 6px; box-sizing: border-box;
}
.pz-logo-atual img { max-width: 100%; max-height: 100%; display: block; }
.pz-logo-atual i { font-style: normal; font-size: 11px; color: rgba(255, 255, 255, .8); }
.pz-dica { display: block; font-size: 11.5px; color: #8A96AB; margin-top: 5px; }
.pz-link { margin-top: 14px; font-size: 12px; color: #5B6E90; }

/* ────────────────────────────────────────────────────────────────────────────
   Gerar link por escola. Prefixo `gl-`.
   ──────────────────────────────────────────────────────────────────────────── */
.gl-corpo { padding: 20px 24px 26px; display: flex; flex-direction: column; gap: 13px; background: #F7F9FD; }
.gl-topo { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
.gl-h1 { margin: 0; font-size: 28px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.gl-sub { margin: 7px 0 0; font-size: 13.5px; line-height: 1.5; color: #4B5D80; max-width: 80ch; }
.gl-filtros { display: flex; gap: 10px; flex-wrap: wrap; }
.gl-busca {
  flex: 1; min-width: 240px; display: flex; align-items: center; gap: 9px; background: #fff;
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 13px;
}
.gl-busca input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 13px; color: #12275A; background: transparent; }
.gl-btn-claro, body.le-titular a.gl-btn-claro {
  display: inline-flex; align-items: center; gap: 8px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 9px; padding: 10px 14px; font-family: inherit; font-size: 13px;
  font-weight: 600; cursor: pointer; text-decoration: none; white-space: nowrap;
}
.gl-btn-claro:hover, body.le-titular a.gl-btn-claro:hover { background: #F5F8FD; color: #33445F; }

.gl-lista { display: flex; flex-direction: column; gap: 12px; }
.gl-cartao {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 15px 17px;
  display: flex; flex-direction: column; gap: 12px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.gl-cartao.inativa { opacity: .68; }
.gl-cab { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.gl-preview {
  width: 110px; height: 46px; flex: none; border-radius: 8px; display: flex; align-items: center;
  justify-content: center; padding: 6px; box-sizing: border-box;
}
.gl-preview img { max-width: 100%; max-height: 100%; display: block; }
.gl-sem-logo { font-size: 10.5px; color: rgba(255, 255, 255, .8); }
.gl-cab b { display: block; font-size: 15px; font-weight: 700; color: #0B2A5E; }
.gl-cab i { display: block; font-style: normal; font-size: 11.5px; color: #8A96AB; margin-top: 2px; }

.gl-link { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.gl-link input {
  flex: 1; min-width: 240px; border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 13px;
  font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; color: #12275A; background: #FBFCFE;
}
.gl-copiar {
  border: 0; background: var(--marca-primaria); color: #fff; border-radius: 9px; padding: 10px 16px;
  font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; min-width: 90px;
}
.gl-copiar:hover { background: #093AB9; }
.gl-copiar.ok { background: #17A05A; }
body.le-titular a.gl-abrir {
  border: 1px solid #DFE6F2; border-radius: 9px; padding: 10px 14px; font-size: 12.5px;
  font-weight: 600; color: #33445F; text-decoration: none;
}
body.le-titular a.gl-abrir:hover { background: #F5F8FD; }
.gl-html { font-size: 11.5px; color: #8A96AB; }
.gl-html code {
  display: block; margin-top: 4px; background: #F5F8FD; border: 1px solid #EDF1F7; border-radius: 7px;
  padding: 8px 11px; font-size: 11.5px; color: #33445F; overflow-x: auto; white-space: nowrap;
}
.gl-p { margin: 0; font-size: 13px; color: #5B6E90; }
.gl-nota { margin: 0; font-size: 11.5px; line-height: 1.5; color: #8A96AB; }

/* ────────────────────────────────────────────────────────────────────────────
   Escolas e instituições. Prefixo `em-`.
   ──────────────────────────────────────────────────────────────────────────── */
.em-corpo { padding: 20px 24px 26px; display: flex; flex-direction: column; gap: 13px; background: #F7F9FD; }
.em-h1 { margin: 0; font-size: 28px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.em-sub { margin: 7px 0 0; font-size: 13.5px; line-height: 1.5; color: #4B5D80; max-width: 80ch; }

.em-duas { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 13px; align-items: start; }
.em-cartao {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 16px 18px;
  display: flex; flex-direction: column; gap: 11px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.em-cartao h2 { margin: 0; font-size: 16px; font-weight: 700; color: #0B2A5E; }
.em-p { margin: 0; font-size: 12.5px; line-height: 1.55; color: #5B6E90; }
.em-p code { background: #F1F5FC; border-radius: 5px; padding: 1px 6px; font-size: 11.5px; color: #33445F; }
.em-campo { display: flex; flex-direction: column; gap: 5px; }
.em-campo > span:first-child { font-size: 12px; font-weight: 700; color: #1E3A6B; }
.em-campo i { font-style: normal; font-weight: 500; color: #8A96AB; }
.em-campo input {
  border: 1px solid #DFE6F2; border-radius: 9px; padding: 10px 13px; font-family: inherit;
  font-size: 13px; color: #12275A; background: #fff;
}
.em-campo input:focus { outline: none; border-color: var(--marca-primaria); }
.em-msg { font-size: 11.5px; font-weight: 600; color: #C42D25; }
.em-msg:empty { display: none; }
.em-arquivo { font-size: 12.5px; color: #33445F; }
.em-btn {
  align-self: flex-start; border: 0; background: var(--marca-primaria); color: #fff; border-radius: 9px;
  padding: 11px 18px; font-family: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer;
}
.em-btn:hover { background: #093AB9; }
.em-btn.claro { background: #fff; color: #33445F; border: 1px solid #DFE6F2; }
.em-btn.claro:hover { background: #F5F8FD; }

.em-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; overflow-x: auto; }
.em-linha {
  display: grid; grid-template-columns: minmax(0, 2fr) 170px 100px 110px 120px 220px;
  gap: 0 14px; align-items: center; padding: 12px 18px; border-top: 1px solid #F0F3F8;
  font-size: 12.5px; min-width: 1020px;
}
.em-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; border-top: 0; }
.em-linha.inativa { opacity: .62; }
.em-linha .nome { display: flex; align-items: center; gap: 10px; min-width: 0; }
.em-linha .nome b { font-weight: 700; color: #12275A; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.em-cor { width: 10px; height: 26px; flex: none; border-radius: 4px; }
.em-preview {
  width: 62px; height: 40px; flex: none; border-radius: 8px; display: flex; align-items: center;
  justify-content: center; padding: 5px; box-sizing: border-box;
}
.em-preview img { max-width: 100%; max-height: 100%; display: block; }
/* O link fica junto do nome, na mesma célula: é o que a escola vai copiar, então precisa estar
   à mão sem abrir outra tela. */
.em-link { display: flex; align-items: center; gap: 6px; margin-top: 5px; }
.em-link input {
  flex: 1; min-width: 0; max-width: 320px; border: 1px solid #E1E7F0; border-radius: 7px;
  padding: 5px 9px; font-family: ui-monospace, Menlo, monospace; font-size: 11px; color: #5B6E90;
  background: #FBFCFE;
}
.em-copiar {
  border: 0; background: var(--marca-primaria); color: #fff; border-radius: 7px; padding: 6px 11px;
  font-family: inherit; font-size: 11px; font-weight: 700; cursor: pointer; white-space: nowrap;
}
.em-copiar:hover { background: #093AB9; }
.em-copiar.ok { background: #17A05A; }
body.le-titular a.em-btn-mini {
  display: inline-flex; align-items: center; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 8px; padding: 7px 12px; font-size: 12px; font-weight: 600;
  text-decoration: none; white-space: nowrap;
}
body.le-titular a.em-btn-mini:hover { background: #F5F8FD; }
.em-linha .cnpj { font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; color: #5B6E90; }
.em-linha .num { font-weight: 700; color: #33445F; }
.em-tag { border-radius: 20px; padding: 3px 10px; font-size: 10.5px; font-weight: 700; }
.em-tag.ok { background: #E7F6EE; color: #127C48; }
.em-tag.off { background: #EEF2FA; color: #7A89A6; }
.em-linha .acao { display: flex; gap: 7px; justify-content: flex-end; align-items: center; flex-wrap: wrap; }
.em-btn-mini {
  border: 1px solid #DFE6F2; background: #fff; color: #33445F; border-radius: 8px; padding: 7px 12px;
  font-family: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
}
.em-btn-mini:hover { background: #F5F8FD; }
.em-vazio { margin: 0; padding: 26px 18px; font-size: 13px; color: #8A96AB; }
.em-nota { margin: 0; font-size: 11.5px; line-height: 1.5; color: #8A96AB; }

@media (max-width: 1000px) { .em-duas { grid-template-columns: 1fr; } }

/* ────────────────────────────────────────────────────────────────────────────
   Lista de titulares. Prefixo `tl-`.
   ──────────────────────────────────────────────────────────────────────────── */
.tl-corpo { padding: 20px 24px 26px; display: flex; flex-direction: column; gap: 13px; background: #F7F9FD; }
.tl-topo { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
.tl-h1 { margin: 0; font-size: 28px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.tl-sub { margin: 7px 0 0; font-size: 13.5px; line-height: 1.5; color: #4B5D80; max-width: 82ch; }

.tl-filtros {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 12px 14px;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.tl-busca {
  flex: 1; min-width: 240px; display: flex; align-items: center; gap: 9px;
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 13px;
}
.tl-busca input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 13px; color: #12275A; background: transparent; }
.tl-sel, .tl-motivo select {
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 12px; background: #fff;
  font-family: inherit; font-size: 13px; color: #12275A;
}
.tl-btn-claro, body.le-titular a.tl-btn-claro {
  display: inline-flex; align-items: center; gap: 8px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 9px; padding: 10px 14px; font-family: inherit; font-size: 13px;
  font-weight: 600; cursor: pointer; text-decoration: none; white-space: nowrap;
}
.tl-btn-claro:hover, body.le-titular a.tl-btn-claro:hover { background: #F5F8FD; color: #33445F; }

.tl-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; overflow-x: auto; }
/* A faixa do motivo fica no TOPO da tabela e destacada: é a condição para qualquer linha abrir. */
.tl-motivo {
  display: flex; align-items: center; gap: 12px; padding: 13px 18px; background: #FFF8F3;
  border-bottom: 1px solid #F5E0D3; flex-wrap: wrap;
}
.tl-motivo > span { font-size: 13px; font-weight: 700; color: #8A5A00; }
.tl-motivo select { min-width: 300px; }
.tl-motivo i { font-style: normal; font-size: 11.5px; color: #A07A45; }

.tl-linha {
  display: grid; grid-template-columns: minmax(0, 1.6fr) 150px 140px 120px 150px 130px;
  gap: 0 14px; align-items: center; padding: 12px 18px; border-top: 1px solid #F0F3F8;
  font-size: 12.5px; min-width: 940px;
}
.tl-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; }
.tl-linha .titular { display: flex; align-items: center; gap: 11px; min-width: 0; }
.tl-linha .titular b { display: block; font-weight: 600; color: #12275A; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl-linha .titular i { display: block; font-style: normal; font-size: 11.5px; color: #8A96AB; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl-av {
  width: 32px; height: 32px; flex: none; border-radius: 50%; background: var(--marca-acento);
  color: #fff; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.tl-tag { background: #EEF2FA; color: #5B6E90; border-radius: 20px; padding: 3px 10px; font-size: 10.5px; font-weight: 700; }
.tl-linha .cpf { font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; color: #5B6E90; }
.tl-linha .data { color: #33445F; }
.tl-id { border-radius: 20px; padding: 3px 10px; font-size: 10.5px; font-weight: 700; }
.tl-id.ok { background: #E7F6EE; color: #127C48; }
.tl-id.pendente { background: #FEF7E8; color: #8A5A00; }
.tl-linha .acao { display: flex; justify-content: flex-end; }
.tl-btn-abrir {
  display: inline-flex; align-items: center; gap: 8px; border: 1px solid #B9D0F8; background: #fff;
  color: var(--marca-primaria); border-radius: 8px; padding: 8px 13px; font-family: inherit;
  font-size: 12.5px; font-weight: 700; cursor: pointer;
}
/* Virou LINK (era <button>): sem isto herdava o sublinhado e a cor de link da casca do DPO. */
.tl-btn-abrir, a.tl-btn-abrir { text-decoration: none; white-space: nowrap; }
.tl-btn-abrir:hover, a.tl-btn-abrir:hover { background: #EDF4FF; color: var(--marca-primaria); }
.tl-vazio { margin: 0; padding: 26px 18px; font-size: 13px; color: #8A96AB; }
.tl-rodape {
  display: flex; align-items: center; gap: 14px; padding: 12px 18px; border-top: 1px solid #F0F3F8;
  font-size: 12px; color: #8A96AB; flex-wrap: wrap;
}
.tl-paginas { flex: 1; display: flex; gap: 14px; justify-content: flex-end; }
body.le-titular .tl-paginas a { font-size: 12.5px; font-weight: 700; color: var(--marca-primaria); }
.tl-nota { margin: 0; font-size: 11.5px; line-height: 1.5; color: #8A96AB; }

@media (max-width: 900px) { .tl-h1 { font-size: 23px; } }

/* ────────────────────────────────────────────────────────────────────────────
   Minhas consultas — porte do bloco `isConsultas`. Prefixo `mc-`.
   ──────────────────────────────────────────────────────────────────────────── */
.mc-corpo { padding: 20px 24px 26px; display: flex; flex-direction: column; gap: 14px; background: #F7F9FD; }
.mc-topo { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
.mc-h1 { margin: 0; font-size: 28px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.mc-sub { margin: 7px 0 0; font-size: 13.5px; line-height: 1.5; color: #4B5D80; max-width: 78ch; }
body.le-titular a.mc-btn-acento {
  display: inline-flex; align-items: center; gap: 9px; border: 0; background: var(--marca-acento);
  color: #fff; border-radius: 9px; padding: 12px 18px; font-size: 13.5px; font-weight: 700;
  text-decoration: none; white-space: nowrap;
}
body.le-titular a.mc-btn-acento:hover { filter: brightness(.94); color: #fff; }

.mc-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 13px; }
.mc-kpi {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 16px 18px;
  display: flex; align-items: center; gap: 14px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.mc-kpi-ic { width: 44px; height: 44px; flex: none; border-radius: 11px; display: flex; align-items: center; justify-content: center; }
.mc-kpi-ic.azul { background: #E4EEFE; }
.mc-kpi-ic.verde { background: #E7F6EE; }
.mc-kpi-ic.laranja { background: #FEF1DF; }
.mc-kpi b { display: block; font-size: 26px; font-weight: 800; color: #0B2A5E; line-height: 1.1; }
.mc-kpi span { display: block; font-size: 13px; font-weight: 600; color: #33445F; margin-top: 2px; }
.mc-kpi i { display: block; font-style: normal; font-size: 11.5px; color: #8A96AB; }

.mc-filtros {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 12px 14px;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.mc-busca {
  flex: 1; min-width: 240px; display: flex; align-items: center; gap: 9px;
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 13px;
}
.mc-busca input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 13px; color: #12275A; background: transparent; }
.mc-sel {
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 12px; background: #fff;
  font-family: inherit; font-size: 13px; color: #12275A;
}
.mc-btn-claro, body.le-titular a.mc-btn-claro {
  display: inline-flex; align-items: center; gap: 8px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 9px; padding: 10px 14px; font-family: inherit; font-size: 13px;
  font-weight: 600; cursor: pointer; text-decoration: none; white-space: nowrap;
}
.mc-btn-claro:hover, body.le-titular a.mc-btn-claro:hover { background: #F5F8FD; color: #33445F; }

.mc-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; overflow-x: auto; }
.mc-linha {
  display: grid; grid-template-columns: 165px minmax(0, 1.3fr) 150px 130px minmax(0, 1.1fr) 90px;
  gap: 0 14px; align-items: center; padding: 12px 18px; border-top: 1px solid #F0F3F8;
  font-size: 12.5px; min-width: 900px;
}
.mc-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; border-top: 0; }
.mc-linha .proto { font-family: ui-monospace, Menlo, monospace; font-weight: 700; color: #12275A; font-size: 12px; }
.mc-linha .titular { display: flex; align-items: center; gap: 10px; min-width: 0; }
.mc-linha .titular b { font-weight: 600; color: #33445F; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mc-av {
  width: 28px; height: 28px; flex: none; border-radius: 50%; background: var(--marca-acento);
  color: #fff; font-size: 10.5px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.mc-linha .cpf { font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; color: #5B6E90; }
.mc-linha .data { color: #33445F; font-weight: 500; }
.mc-linha .motivo { color: var(--marca-primaria); font-weight: 500; }
.mc-linha .motivo em {
  font-style: normal; margin-left: 7px; background: #F4EDFE; color: #6B21A8; border-radius: 20px;
  padding: 2px 8px; font-size: 10px; font-weight: 700;
}
.mc-linha .acao { display: flex; gap: 8px; justify-content: flex-end; align-items: center; }
body.le-titular a.mc-pdf {
  display: flex; align-items: center; justify-content: center; width: 30px; height: 30px;
  border: 1px solid #F8D3D0; border-radius: 8px; background: #FFF6F5;
}
body.le-titular a.mc-pdf:hover { background: #FDECEA; }
body.le-titular a.mc-abrir { display: flex; }
.mc-vazio { margin: 0; padding: 26px 18px; font-size: 13px; color: #8A96AB; }
.mc-rodape {
  display: flex; align-items: center; gap: 14px; padding: 12px 18px; border-top: 1px solid #F0F3F8;
  font-size: 11.5px; color: #8A96AB; flex-wrap: wrap;
}
.mc-rodape .mc-nota { flex: 1; min-width: 260px; text-align: right; }

@media (max-width: 1000px) {
  .mc-kpis { grid-template-columns: 1fr; }
  .mc-rodape .mc-nota { text-align: left; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Portal de Dados Pessoais — busca e resultado na MESMA página. Prefixo `dp2-`.
   ──────────────────────────────────────────────────────────────────────────── */
.dp2-corpo { padding: 18px 24px 26px; display: flex; flex-direction: column; gap: 13px; background: #F7F9FD; }

.dp2-migalha { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #5B6E90; }
.dp2-migalha .sep { color: #C3CEE0; }
.dp2-migalha b { color: var(--marca-primaria); font-weight: 700; }

.dp2-topo {
  display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.25fr); gap: 20px;
  align-items: start; background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 18px 20px;
}
.dp2-titulo { display: flex; align-items: flex-start; gap: 13px; }
.dp2-escudo {
  width: 44px; height: 44px; flex: none; border-radius: 11px; background: var(--marca-acento);
  display: flex; align-items: center; justify-content: center;
}
.dp2-titulo h1 { margin: 0; font-size: 27px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
/* O segundo termo do título sai na cor de acento, como no design. */
.dp2-titulo h1 em { font-style: normal; color: var(--marca-acento); }
.dp2-titulo p { margin: 8px 0 0; font-size: 13px; line-height: 1.5; color: #4B5D80; }
.dp2-titulo p strong { color: var(--marca-primaria); font-weight: 700; }

.dp2-busca { display: flex; flex-direction: column; gap: 11px; }
.dp2-busca-lin { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
.dp2-campo-grupo { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.dp2-motivo { flex: 1; min-width: 230px; }
.dp2-rot { font-size: 12px; font-weight: 700; color: #1E3A6B; }
.dp2-input {
  border: 1px solid #DFE6F2; border-radius: 9px; padding: 10px 13px; background: #fff;
  font-family: inherit; font-size: 13px; color: #12275A; min-width: 170px; box-sizing: border-box;
}
.dp2-input:focus { outline: none; border-color: var(--marca-primaria); }
.dp2-abas { display: flex; gap: 8px; }
.dp2-aba input { position: absolute; opacity: 0; width: 0; height: 0; }
.dp2-aba span {
  display: flex; align-items: center; gap: 8px; border: 1px solid #DFE6F2; border-radius: 9px;
  padding: 10px 14px; font-size: 12.5px; font-weight: 600; color: #5B6E90; cursor: pointer; background: #fff;
}
.dp2-aba span:hover { border-color: #9FC0F7; }
.dp2-aba input:checked + span {
  border-color: var(--marca-acento); color: var(--marca-acento); background: #FFF6F3; font-weight: 700;
}
.dp2-btn {
  border: 0; background: var(--marca-primaria); color: #fff; border-radius: 9px; padding: 11px 22px;
  font-family: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; white-space: nowrap;
}
.dp2-btn:hover { background: #093AB9; }
.dp2-msg { font-size: 11.5px; font-weight: 600; color: #C42D25; }
.dp2-msg:empty { display: none; }
.dp2-erro { background: #FDECEA; border: 1px solid #F5C6C2; border-radius: 9px; padding: 10px 13px; font-size: 12.5px; font-weight: 600; color: #B3261E; }
.dp2-nota { display: flex; align-items: flex-start; gap: 9px; font-size: 11.5px; line-height: 1.5; color: #5B6E90; }

.dp2-protocolo {
  display: flex; align-items: center; gap: 11px; background: #F7F3FE; border: 1px solid #E2D7FA;
  border-radius: 10px; padding: 11px 15px; font-size: 12.5px; color: #4B3B72; flex-wrap: wrap;
}
.dp2-protocolo b { font-family: ui-monospace, Menlo, monospace; color: #4C1D95; }
.dp2-protocolo span { flex: 1; min-width: 200px; }

.dp2-ficha {
  display: flex; align-items: center; gap: 16px; background: #fff; border: 1px solid #E9EDF4;
  border-radius: 12px; padding: 14px 18px; flex-wrap: wrap;
}
.dp2-av {
  width: 44px; height: 44px; flex: none; border-radius: 50%; background: var(--marca-acento); color: #fff;
  font-size: 14px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.dp2-ficha-nome b { display: block; font-size: 17px; font-weight: 700; color: #0B2A5E; }
.dp2-tag {
  display: inline-block; margin-top: 3px; background: #E0ECFD; color: #1B4BE0; border-radius: 6px;
  padding: 2px 8px; font-size: 10px; font-weight: 700; letter-spacing: .04em;
}
.dp2-sep { width: 1px; height: 34px; background: #EDF1F7; }
.dp2-ficha-col span { display: block; font-size: 11.5px; color: #5B6E90; }
.dp2-ficha-col b { display: block; font-size: 13px; font-weight: 700; color: #0B2A5E; margin-top: 2px; }
.dp2-ficha-col b.ok { color: #127C48; }
.dp2-ficha-col b.pendente { color: #B36A00; }

.dp2-abas-dados { display: flex; gap: 26px; border-bottom: 1px solid #E4EAF3; padding: 0 4px; }
.dp2-aba-dados {
  display: flex; align-items: center; gap: 8px; padding: 10px 2px 11px; font-size: 13.5px;
  font-weight: 600; color: #8A96AB;
}
.dp2-aba-dados.on { color: var(--marca-acento); box-shadow: inset 0 -2px 0 var(--marca-acento); font-weight: 700; }
.dp2-aba-dados.off em { font-style: normal; font-size: 10.5px; background: #EEF2FA; color: #7A89A6; border-radius: 20px; padding: 2px 8px; }

.dp2-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; overflow-x: auto; }
.dp2-tab-cab { display: flex; align-items: center; gap: 14px; padding: 15px 18px; flex-wrap: wrap; }
.dp2-tab-cab b { display: block; font-size: 15px; font-weight: 700; color: #0B2A5E; }
.dp2-tab-cab span { display: block; font-size: 12px; color: #5B6E90; margin-top: 2px; }
.dp2-tab-cab > div { flex: 1; min-width: 240px; }
.dp2-contagem { font-size: 12px; color: #5B6E90; white-space: nowrap; }
body.le-titular a.dp2-btn-claro {
  display: inline-flex; align-items: center; gap: 7px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 8px; padding: 8px 13px; font-size: 12px; font-weight: 600;
  text-decoration: none; white-space: nowrap;
}
body.le-titular a.dp2-btn-claro:hover { background: #F5F8FD; }

.dp2-linha {
  display: grid; grid-template-columns: 34px 170px minmax(0, 1fr) minmax(0, 1.3fr) 44px; gap: 0 12px;
  align-items: center; padding: 11px 18px; border-top: 1px solid #F0F3F8; font-size: 12.5px;
  min-width: 760px;
}
.dp2-linha-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; border-top: 1px solid #E9EDF4; }
.dp2-ic { color: #A9B4C7; display: flex; }
.dp2-cat { color: #5B6E90; }
.dp2-dado { color: #33445F; font-weight: 500; }
.dp2-valor { font-weight: 700; color: #0B2A5E; word-break: break-word; }
.dp2-valor i { font-style: normal; font-weight: 400; color: #A9B4C7; }
.dp2-valor.revelado { color: var(--marca-acento); }
/* Sensível marcado na própria linha: quem lê a tabela precisa saber, de relance, o que exige
   mais cuidado ao repassar. */
.dp2-linha.sensivel .dp2-cat, .dp2-linha.sensivel .dp2-dado { color: #8B3BF0; }
/* O ícone da linha sensível acompanha a cor roxa da categoria — no desenho ele é a primeira
   coisa que distingue essas linhas das demais. */
.dp2-linha.sensivel .dp2-ic { color: #8B3BF0; }
.dp2-olho { display: flex; justify-content: flex-end; }
.dp2-btn-olho { border: 0; background: transparent; cursor: pointer; padding: 4px; display: flex; }
.dp2-btn-olho:disabled { opacity: .4; cursor: default; }

/* Barra "Ver todos os campos (N)" do desenho: faixa salmão clara, texto laranja da marca,
   ocupando a largura do cartão. É o mesmo alternador de "Mostrar vazios" do cabeçalho. */
.dp2-vertodos {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  padding: 12px 18px; border-top: 1px solid #FBE3D8;
  background: #FEF6F2; color: #E8590C;
  font-size: 12.5px; font-weight: 600; text-decoration: none;
}
.dp2-vertodos:hover { background: #FDEDE4; }
.dp2-vertodos svg { transition: transform .15s ease; }
.dp2-vertodos svg.aberto { transform: rotate(180deg); }

/* "Status da consulta · Concluída" traz o visto ao lado do texto. */
.dp2-ficha-col b.ok { display: flex; align-items: center; gap: 5px; }

.dp2-rodape { padding: 13px 18px; border-top: 1px solid #F0F3F8; font-size: 11.5px; color: #8A96AB; }

.dp2-recentes { background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 14px 18px; }
.dp2-recentes > b { display: block; font-size: 14px; font-weight: 700; color: #0B2A5E; margin-bottom: 8px; }
/* ⚠️ Vale para as DUAS cascas. Ficou preso a `body.le-titular` e, quando a mesma tela passou a
   ser servida no portal do controlador, os links perderam o layout e viraram uma parede de texto
   sublinhado — o conteúdo estava certo e só a regra não alcançava. */
body.le-titular .dp2-recentes a,
body.le-controlador .dp2-recentes a {
  display: flex; align-items: center; gap: 14px; padding: 9px 0; border-top: 1px solid #F0F3F8;
  font-size: 12.5px; color: #33445F; text-decoration: none;
}
.dp2-recentes .proto { font-family: ui-monospace, Menlo, monospace; font-weight: 700; color: var(--marca-primaria); }
.dp2-recentes .mot { flex: 1; min-width: 0; }
.dp2-recentes .data { color: #8A96AB; }

@media (max-width: 1200px) {
  .dp2-topo { grid-template-columns: 1fr; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Nova solicitação — porte do bloco `isNova`. Prefixo `nv-`.
   ──────────────────────────────────────────────────────────────────────────── */
.nv-corpo { padding: 16px 22px 26px; background: #F7F9FD; }
.nv-grade { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 14px; align-items: start; }
.nv-esq { min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.nv-dir { display: flex; flex-direction: column; gap: 12px; }

.nv-migalha { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #5B6E90; flex-wrap: wrap; }
.nv-migalha .sep { color: #C3CEE0; }
body.le-titular .nv-migalha a { color: #5B6E90; }
body.le-titular .nv-migalha a:hover { color: var(--marca-primaria); }
.nv-migalha b { color: #0B2A5E; font-weight: 700; }

.nv-ola {
  display: flex; align-items: center; gap: 14px; background: #EEF4FE; border-radius: 12px;
  padding: 13px 18px;
}
.nv-ola-ic { width: 46px; height: 46px; flex: none; border-radius: 11px; background: var(--marca-primaria); display: flex; align-items: center; justify-content: center; }
.nv-ola b { display: block; font-size: 15px; font-weight: 700; color: #0B2A5E; }
.nv-ola span { display: block; font-size: 12.5px; color: #2B4368; margin-top: 2px; }
.nv-ola-logo { height: 34px; width: auto; flex: none; display: block; }

.nv-h1 { margin: 4px 0 0; font-size: 26px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }

.nv-trilha { display: flex; align-items: flex-start; padding: 4px 0 2px; }
.nv-etapa { display: flex; align-items: flex-start; gap: 9px; }
.nv-etapa > span {
  width: 24px; height: 24px; flex: none; border-radius: 50%; background: #E1E8F4; color: #7387A6;
  font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.nv-etapa.feita > span, .nv-etapa.ativa > span { background: var(--marca-primaria); color: #fff; }
.nv-etapa b { display: block; font-size: 13px; font-weight: 700; color: #7387A6; }
.nv-etapa i { display: block; font-style: normal; font-size: 11px; color: #8A96AB; margin-top: 1px; }
.nv-etapa.feita b, .nv-etapa.ativa b { color: #0B2A5E; }
.nv-trilho { flex: 1; height: 2px; background: #E1E8F4; margin: 12px 14px 0; }
.nv-trilho.ativo { background: var(--marca-primaria); }

.nv-form { display: flex; flex-direction: column; gap: 12px; }
.nv-sobre {
  display: flex; align-items: flex-start; gap: 12px; background: #F3F7FE; border: 1px solid #DCE7FB;
  border-radius: 11px; padding: 13px 16px;
}
.nv-sobre b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.nv-sobre span { display: block; font-size: 12.5px; line-height: 1.55; color: #2B4368; margin-top: 3px; }

.nv-bloco { background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 15px 17px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04); }
.nv-bloco h2 { margin: 0; font-size: 15.5px; font-weight: 700; color: #0B2A5E; }
.nv-bloco h2 em { font-style: normal; font-weight: 500; color: #8A96AB; font-size: 13px; }
.nv-bloco-sub { margin: 5px 0 12px; font-size: 12.5px; color: #5B6E90; }
.nv-bloco-cab { display: flex; align-items: center; gap: 12px; }
.nv-bloco-cab h2 { flex: 1; }

.nv-dados { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; margin-top: 12px; }
.nv-dados span { display: block; font-size: 11.5px; font-weight: 600; color: #5B6E90; }
.nv-dados b { display: block; font-size: 12.5px; font-weight: 600; color: #0B2A5E; margin-top: 3px; word-break: break-word; }

/* Cartões de escopo e formato: a caixa/bolinha fica à direita, como no design. O <input> real
   fica escondido mas presente — some-lo quebraria o envio e o teclado. */
.nv-escopo, .nv-formatos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; }
.nv-op {
  position: relative; display: flex; align-items: flex-start; gap: 12px; border: 1px solid #E4EAF3;
  border-radius: 10px; padding: 12px 40px 12px 14px; cursor: pointer; background: #fff;
  transition: border-color .14s ease, background .14s ease;
}
.nv-op:hover { border-color: #9FC0F7; }
.nv-op input { position: absolute; opacity: 0; width: 0; height: 0; }

/* Cartão informativo do escopo: mesma caixa, sem nada de clicável.
   Sem `cursor: pointer` e sem realce no hover — os dois prometiam um clique que não existe.
   O respiro da direita volta ao normal: ele existia só para a caixa de marcar não encostar
   no texto, e não há mais caixa. */
.nv-op-info { cursor: default; padding-right: 14px; }
.nv-op-info:hover { border-color: #E4EAF3; }
.nv-op-ic { width: 34px; height: 34px; flex: none; border-radius: 9px; display: flex; align-items: center; justify-content: center; }
.nv-op-txt { flex: 1; min-width: 0; }
.nv-op-txt b { display: block; font-size: 13px; font-weight: 700; color: #0B2A5E; }
.nv-op-txt i { display: block; font-style: normal; font-size: 11.5px; line-height: 1.45; color: #5B6E90; margin-top: 3px; }
.nv-caixa, .nv-bolinha {
  position: absolute; right: 14px; top: 14px; width: 18px; height: 18px; flex: none;
  border: 1.6px solid #C6D0E2; background: #fff;
}
.nv-caixa { border-radius: 5px; }
.nv-bolinha { border-radius: 50%; }
.nv-op input:checked ~ .nv-caixa, .nv-op input:checked ~ .nv-bolinha {
  border-color: var(--marca-primaria); background: var(--marca-primaria);
  box-shadow: inset 0 0 0 3px #fff;
}
.nv-op input:checked ~ .nv-caixa { box-shadow: none; }
.nv-op input:checked ~ .nv-caixa::after {
  content: ''; position: absolute; left: 5px; top: 1px; width: 5px; height: 10px;
  border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg);
}
.nv-op:has(input:checked) { border-color: var(--marca-primaria); background: #F5F9FF; }
.nv-op input:focus-visible ~ .nv-caixa, .nv-op input:focus-visible ~ .nv-bolinha { outline: 2px solid var(--marca-acento); outline-offset: 2px; }
.nv-op.indisponivel { opacity: .6; cursor: default; }
.nv-op.indisponivel:hover { border-color: #E4EAF3; }

.nv-area { position: relative; }
.nv-area textarea {
  width: 100%; box-sizing: border-box; border: 1px solid #DFE6F2; border-radius: 9px;
  padding: 12px 14px 26px; font-family: inherit; font-size: 13px; line-height: 1.55; color: #12275A; resize: vertical;
}
.nv-area textarea:focus { outline: none; border-color: var(--marca-primaria); }
.nv-contador { position: absolute; right: 12px; bottom: 10px; font-size: 11px; color: #8A96AB; }

.nv-selos { display: flex; align-items: center; gap: 11px; background: #F1FAF5; border: 1px solid #B7E3CB; border-radius: 10px; padding: 11px 14px; }
.nv-selo { flex: 1; display: flex; align-items: center; gap: 10px; }
.nv-selo b { display: block; font-size: 12.5px; font-weight: 700; color: #14603C; }
.nv-selo i { display: block; font-style: normal; font-size: 11.5px; color: #2F6B4F; }
.nv-selo.aviso b { color: #8A5A00; }
.nv-selo.aviso i { color: #96702A; }
.nv-selo-escudo { width: 34px; height: 34px; flex: none; border-radius: 9px; background: #fff; display: flex; align-items: center; justify-content: center; }
/* Se qualquer um dos dois selos estiver pendente, a faixa não pode ficar verde: a cor é o
   resumo que a pessoa lê de relance. */
.nv-selos:has(.nv-selo.aviso) { background: #FEF7E8; border-color: #F5DFAE; }

.nv-aceite { display: flex; align-items: flex-start; gap: 10px; margin-top: 13px; cursor: pointer; }
.nv-aceite input { width: 16px; height: 16px; flex: none; margin-top: 1px; accent-color: var(--marca-primaria); }
.nv-aceite span { font-size: 12.5px; line-height: 1.5; color: #33445F; }
.nv-msg { display: block; font-size: 11.5px; font-weight: 600; color: #C42D25; margin-top: 6px; }
.nv-msg:empty { display: none; }
.nv-erro { background: #FDECEA; border: 1px solid #F5C6C2; border-radius: 9px; padding: 11px 14px; font-size: 12.5px; font-weight: 600; color: #B3261E; }

.nv-acoes { display: flex; gap: 12px; }
body.le-titular a.nv-btn-cancelar {
  flex: 0 0 200px; display: flex; align-items: center; justify-content: center; border: 1px solid #DFE6F2;
  background: #fff; color: #33445F; border-radius: 9px; padding: 14px 20px; font-size: 14px; font-weight: 600; text-decoration: none;
}
body.le-titular a.nv-btn-cancelar:hover { background: #F5F8FD; }
.nv-btn-enviar {
  flex: 1; display: flex; align-items: center; justify-content: center; gap: 10px; border: 0;
  background: var(--marca-primaria); color: #fff; border-radius: 9px; padding: 14px 20px;
  font-family: inherit; font-size: 14.5px; font-weight: 700; cursor: pointer;
}
.nv-btn-enviar:hover { background: #093AB9; }
.nv-termos { margin: 0; text-align: center; font-size: 11.5px; color: #8A96AB; }

body.le-titular a.nv-btn-claro {
  display: inline-flex; align-items: center; gap: 7px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 8px; padding: 8px 13px; font-size: 12px; font-weight: 600; text-decoration: none;
}
body.le-titular a.nv-btn-claro:hover { background: #F5F8FD; }

/* ── Coluna lateral ───────────────────────────────────────────────────────── */
.nv-painel { background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 14px 16px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04); }
.nv-painel h2 { margin: 0 0 11px; font-size: 15px; font-weight: 700; color: #0B2A5E; }
.nv-painel-cab { display: flex; align-items: center; gap: 10px; margin-bottom: 11px; }
.nv-painel-cab h2 { margin: 0; }
.nv-painel-ic { width: 32px; height: 32px; flex: none; border-radius: 9px; background: #E4EEFE; display: flex; align-items: center; justify-content: center; }
.nv-painel p, .nv-p { margin: 0 0 4px; font-size: 12.5px; line-height: 1.5; color: #5B6E90; }

.nv-resumo { display: flex; flex-direction: column; gap: 10px; }
.nv-resumo > div { display: flex; align-items: baseline; gap: 10px; font-size: 12px; }
.nv-resumo span { flex: 1; color: #5B6E90; }
.nv-resumo b { font-weight: 700; color: #12275A; text-align: right; }
.nv-tag { background: #FEF1DF; color: #B36A00; border-radius: 20px; padding: 3px 10px; font-size: 10.5px; font-weight: 700; }

.nv-passos { display: flex; flex-direction: column; gap: 11px; }
.nv-passos > div { display: flex; align-items: flex-start; gap: 10px; }
.nv-passos > div > span {
  width: 22px; height: 22px; flex: none; border-radius: 50%; background: #E4EEFE; color: var(--marca-primaria);
  font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.nv-passos b { display: block; font-size: 12.5px; font-weight: 700; color: #0B2A5E; }
.nv-passos i { display: block; font-style: normal; font-size: 11.5px; line-height: 1.45; color: #5B6E90; margin-top: 2px; }

.nv-ajuda { position: relative; background: linear-gradient(160deg, #EEF4FE, #E3ECFD); border-color: #D3E2FB; overflow: hidden; padding-bottom: 16px; }
.nv-ajuda p { color: #2B4368; max-width: 190px; }
.nv-btn-assistente {
  margin-top: 12px; display: inline-flex; align-items: center; gap: 9px; border: 1px solid #C6D6F5;
  background: #fff; color: var(--marca-primaria); border-radius: 9px; padding: 10px 14px;
  font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; position: relative; z-index: 2;
}
.nv-btn-assistente:hover { background: #F4F8FF; }
.nv-ajuda-img { position: absolute; right: -14px; bottom: -6px; height: 132px; width: auto; display: block; z-index: 1; }

/* <a> E <button>: o "Abrir chat com o DPO" virou botão para abrir o chat na própria tela,
   e o seletor preso à tag deixaria o botão sem estilo nenhum — parecendo quebrado. */
body.le-titular a.nv-btn-dpo,
body.le-titular button.nv-btn-dpo {
  width: 100%; margin-top: 10px; display: flex; align-items: center; justify-content: center; gap: 9px;
  border: 0; cursor: pointer; font-family: inherit;
  background: var(--marca-primaria); color: #fff; border-radius: 9px; padding: 11px 16px;
  font-size: 13px; font-weight: 700; text-decoration: none;
}
body.le-titular a.nv-btn-dpo:hover,
body.le-titular button.nv-btn-dpo:hover { background: #093AB9; color: #fff; }

.nv-protegidos {
  display: flex; align-items: flex-start; gap: 11px; background: #F1FAF5; border: 1px solid #B7E3CB;
  border-radius: 11px; padding: 13px 15px;
}
.nv-protegidos b { display: block; font-size: 13px; font-weight: 700; color: #14603C; }
.nv-protegidos span { display: block; font-size: 11.5px; line-height: 1.5; color: #2F6B4F; margin-top: 3px; }

@media (max-width: 1300px) {
  .nv-grade { grid-template-columns: 1fr; }
  .nv-escopo, .nv-formatos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .nv-dados { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 780px) {
  .nv-corpo { padding: 14px 14px 20px; }
  .nv-escopo, .nv-formatos, .nv-dados { grid-template-columns: 1fr; }
  .nv-trilha { flex-direction: column; gap: 10px; align-items: stretch; }
  .nv-trilho { display: none; }
  .nv-acoes { flex-direction: column-reverse; }
  body.le-titular a.nv-btn-cancelar { flex: 1; }
  .nv-ola-logo, .nv-ajuda-img { display: none; }
}

/* Botão voltar das telas de segundo nível. O menu lateral cobre a navegação principal, mas quem
   entra numa tela a partir de outra precisa do caminho de volta. */
body.le-titular a.tt-voltar {
  align-self: flex-start; display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid #DFE6F2; background: #fff; color: #33445F; border-radius: 8px;
  padding: 8px 14px; font-size: 12.5px; font-weight: 600; text-decoration: none;
}
body.le-titular a.tt-voltar:hover { background: #F5F8FD; border-color: #C6D6F5; }

/* ────────────────────────────────────────────────────────────────────────────
   Documentos — porte do bloco `isDocumentos`. Prefixo `dc-`.
   ──────────────────────────────────────────────────────────────────────────── */
.dc-corpo { padding: 20px 26px 26px; display: flex; flex-direction: column; gap: 14px; }
.dc-h1 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.dc-sub { margin: 8px 0 0; font-size: 14px; font-weight: 400; color: var(--marca-primaria); }

.dc-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; overflow-x: auto; }
.dc-linha {
  display: grid; grid-template-columns: minmax(240px, 1.6fr) 190px 190px 100px 230px; gap: 0 14px;
  align-items: center; padding: 13px 18px; border-bottom: 1px solid #F0F3F8; font-size: 12.5px;
  min-width: 960px;
}
.dc-linha:last-child { border-bottom: 0; }
.dc-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; }
.dc-linha .doc { display: flex; align-items: center; gap: 11px; min-width: 0; }
.dc-linha .doc b { font-weight: 600; color: #12275A; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-ic { width: 34px; height: 34px; flex: none; border-radius: 9px; display: flex; align-items: center; justify-content: center; }
.dc-ic.azul { background: #E4EEFE; }
.dc-ic.verde { background: #E7F6EE; }
.dc-ic.roxo { background: #F2EAFD; }
.dc-ic.laranja { background: #FEF1DF; }
.dc-linha .cat, .dc-linha .data { color: #5B6E90; }
.dc-linha .fmt { font-weight: 700; }
.dc-linha .fmt.pdf { color: #E2453C; }
.dc-linha .fmt.csv { color: #17A05A; }
.dc-linha .fmt.outro { color: #5B6E90; }
.dc-linha .acoes { display: flex; gap: 8px; justify-content: flex-end; }
/* `a.` e `body.le-titular` no seletor pelo mesmo motivo dos botões da tela de solicitações:
   a regra genérica de link tem especificidade maior e apagaria o texto do botão azul. */
body.le-titular a.dc-btn-claro {
  display: inline-flex; align-items: center; gap: 7px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 8px; padding: 8px 13px; font-size: 12px; font-weight: 600; text-decoration: none;
}
body.le-titular a.dc-btn-claro:hover { background: #F5F8FD; }
body.le-titular a.dc-btn-azul {
  display: inline-flex; align-items: center; gap: 7px; border: 0; background: var(--marca-primaria);
  color: #fff; border-radius: 8px; padding: 8px 13px; font-size: 12px; font-weight: 700; text-decoration: none;
}
body.le-titular a.dc-btn-azul:hover { background: #093AB9; color: #fff; }
.dc-nota {
  display: flex; align-items: flex-start; gap: 11px; background: #F3F7FE; border: 1px solid #DCE7FB;
  border-radius: 10px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: #2B4368;
}

/* ────────────────────────────────────────────────────────────────────────────
   Fale com o DPO (página cheia) — porte do bloco `isDpo`. Prefixo `dp-`.
   ⚠️ Prefixo próprio de propósito: `tt-chat*` agora é do widget FLUTUANTE da casca, e reusar
   aquelas classes aqui deixaria esta página com `position:fixed`.
   ──────────────────────────────────────────────────────────────────────────── */
.dp-corpo { padding: 20px 26px 26px; display: flex; flex-direction: column; gap: 14px; }
.dp-h1 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.dp-sub { margin: 8px 0 0; font-size: 14px; font-weight: 400; color: #4B5D80; }
.dp-grade { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 14px; align-items: start; }
.dp-lado { display: flex; flex-direction: column; gap: 13px; }
.dp-painel {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 14px 16px;
  box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.dp-painel h2 { margin: 0 0 12px; font-size: 16px; font-weight: 700; color: #0B2A5E; }

/* Altura fixa e menor: a conversa não deve empurrar o resto da página para fora da tela.
   `height` (não `min-height`) porque só assim o fio interno rola sozinho — com min-height o
   painel crescia junto com as mensagens e a rolagem ia parar na página inteira. */
.dp-conversa { padding: 0; overflow: hidden; display: flex; flex-direction: column; height: 460px; }
.dp-conversa-cab { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-bottom: 1px solid #EFF2F7; }
.dp-conversa-ic { width: 38px; height: 38px; flex: none; border-radius: 10px; background: #E8F0FE; display: flex; align-items: center; justify-content: center; }
.dp-conversa-cab b { display: block; font-size: 15px; font-weight: 700; color: #0B2A5E; }
.dp-conversa-cab i { display: flex; align-items: center; gap: 6px; font-style: normal; font-size: 11.5px; color: #5B6E90; margin-top: 2px; }
.dp-ponto { width: 6px; height: 6px; border-radius: 50%; background: #4ADE80; flex: none; }

.dp-dpo-faixa { display: flex; align-items: center; gap: 11px; background: linear-gradient(90deg, #0232B5, #0B45DD); padding: 11px 16px; }
.dp-dpo-faixa img { width: 34px; height: 34px; flex: none; border-radius: 9px; object-fit: cover; display: block; }
.dp-dpo-faixa b { display: block; font-size: 13px; font-weight: 700; color: #fff; }
.dp-dpo-faixa i { display: flex; align-items: center; gap: 6px; font-style: normal; font-size: 10.5px; color: #BFD2F7; margin-top: 2px; }

.dp-fio { flex: 1; min-height: 0; overflow-y: auto; background: #F7F9FD; padding: 16px; display: flex; flex-direction: column; gap: 12px; }
.dp-msg { display: flex; gap: 9px; align-items: flex-end; }
.dp-msg img { width: 28px; height: 28px; flex: none; border-radius: 50%; object-fit: cover; display: block; }
.dp-balao { max-width: 76%; background: #fff; border: 1px solid #E4EAF3; border-radius: 11px 11px 11px 3px; padding: 10px 13px; }
.dp-balao .txt { font-size: 12.5px; font-weight: 400; line-height: 1.55; color: #2B4368; white-space: pre-line; }
.dp-balao .hora { font-size: 9.5px; font-weight: 500; color: #A3AEC2; margin-top: 4px; }
.dp-msg.eu { justify-content: flex-end; }
.dp-msg.eu .dp-balao { background: var(--marca-primaria); border: 0; border-radius: 11px 11px 3px 11px; }
.dp-msg.eu .txt { color: #fff; }
.dp-msg.eu .hora { color: #C3D6FB; }
.dp-proto { max-width: 84%; background: #F1FAF5; border: 1px solid #B7E3CB; border-radius: 11px 11px 11px 3px; padding: 12px 14px; }
.dp-proto .tit { display: flex; align-items: center; gap: 8px; font-size: 11.5px; font-weight: 700; color: #127C48; }
.dp-proto .cod { font-size: 15px; font-weight: 800; letter-spacing: .02em; color: #0B2A5E; margin-top: 7px; font-family: ui-monospace, Menlo, monospace; }
.dp-proto .txt { font-size: 11.5px; line-height: 1.5; color: #33445F; margin-top: 6px; }

.dp-pe { flex: none; background: #fff; border-top: 1px solid #EDF1F7; padding: 12px 16px 14px; }
.dp-atalhos { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.dp-atalho {
  border: 1px solid #C6D6F5; background: #fff; border-radius: 20px; padding: 6px 12px;
  font-family: inherit; font-size: 11px; font-weight: 600; color: var(--marca-primaria); cursor: pointer;
}
.dp-atalho:hover { background: #EDF4FF; }
.dp-campo { display: flex; align-items: center; gap: 8px; border: 1px solid #E1E7F0; border-radius: 9px; padding: 9px 11px; }
.dp-campo input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 12.5px; color: #12275A; background: transparent; }
.dp-enviar { width: 30px; height: 30px; flex: none; border: 0; border-radius: 7px; background: var(--marca-primaria); display: flex; align-items: center; justify-content: center; cursor: pointer; }
.dp-enviar:hover { background: #093AB9; }
.dp-resolveu { display: flex; align-items: center; gap: 10px; margin-top: 10px; font-size: 11.5px; color: #5B6E90; }
.dp-btn-nao {
  border: 1px solid #F8C9C4; background: #FFF6F5; border-radius: 8px; padding: 6px 11px;
  font-family: inherit; font-size: 11px; font-weight: 700; color: #C42D25; cursor: pointer;
}
.dp-btn-nao:hover { background: #FDECEA; }
.dp-aviso { display: flex; align-items: center; gap: 7px; margin-top: 10px; }
.dp-aviso span { font-size: 10px; font-weight: 400; color: #8A96AB; }

.dp-linhas { display: flex; flex-direction: column; gap: 11px; }
.dp-linhas > div { display: flex; align-items: center; gap: 9px; font-size: 12.5px; }
.dp-linhas span { flex: 1; color: #5B6E90; }
.dp-linhas b { font-weight: 700; color: #12275A; text-align: right; }

.dp-assuntos { display: flex; flex-direction: column; }
.dp-assuntos button {
  display: flex; align-items: center; gap: 11px; width: 100%; border: 0; border-bottom: 1px solid #F2F5F9;
  background: transparent; padding: 11px 0; font-family: inherit; cursor: pointer; text-align: left;
}
.dp-assuntos button:last-child { border-bottom: 0; }
.dp-assuntos button:hover b { color: var(--marca-primaria); }
.dp-assuntos b { flex: 1; min-width: 0; font-size: 12.5px; font-weight: 600; color: #33445F; }
.dp-assuntos .ic { width: 28px; height: 28px; flex: none; border-radius: 8px; display: flex; align-items: center; justify-content: center; }
.dp-assuntos .ic.azul { background: #E4EEFE; }
.dp-assuntos .ic.laranja { background: #FEF1DF; }
.dp-assuntos .ic.verde { background: #E7F6EE; }
.dp-assuntos .ic.roxo { background: #F2EAFD; }

.dp-registrada {
  display: flex; align-items: flex-start; gap: 11px; background: #F1FAF5; border: 1px solid #B7E3CB;
  border-radius: 11px; padding: 13px 15px;
}
.dp-registrada b { display: block; font-size: 13px; font-weight: 700; color: #14603C; }
.dp-registrada span { display: block; font-size: 11.5px; line-height: 1.5; color: #2F6B4F; margin-top: 3px; }

@media (max-width: 1200px) {
  .dp-grade { grid-template-columns: 1fr; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Minhas solicitações — porte do bloco `isSolicitacoes`. Prefixo `sl-`.
   ──────────────────────────────────────────────────────────────────────────── */
.sl-corpo { padding: 18px 22px 26px; background: #F7F9FD; }
.sl-grade { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 14px; align-items: start; }
.sl-esq { min-width: 0; display: flex; flex-direction: column; gap: 13px; }
.sl-dir { display: flex; flex-direction: column; gap: 13px; }

.sl-h1 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.sl-sub { margin: 7px 0 0; font-size: 14px; font-weight: 400; color: #4B5D80; }

.sl-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.sl-kpi {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 14px 15px;
  display: flex; align-items: center; gap: 13px; box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.sl-kpi-ic { width: 42px; height: 42px; flex: none; border-radius: 11px; display: flex; align-items: center; justify-content: center; }
.sl-kpi-ic.azul { background: #E4EEFE; }
.sl-kpi-ic.laranja { background: #FEF1DF; }
.sl-kpi-ic.verde { background: #E7F6EE; }
.sl-kpi-ic.roxo { background: #F2EAFD; }
.sl-kpi b { display: block; font-size: 25px; font-weight: 800; color: #0B2A5E; line-height: 1.1; }
.sl-kpi span { display: block; font-size: 12.5px; font-weight: 600; color: #33445F; margin-top: 2px; }
.sl-kpi i { display: block; font-style: normal; font-size: 11px; font-weight: 400; color: #8A96AB; }

.sl-filtros {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 12px 14px;
  display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap;
}
.sl-busca {
  display: flex; align-items: center; gap: 8px; border: 1px solid #E1E7F0; border-radius: 8px;
  padding: 8px 11px; background: #fff; min-width: 190px;
}
.sl-busca input { flex: 1; min-width: 0; border: 0; outline: none; font-family: inherit; font-size: 12.5px; color: #12275A; background: transparent; }
.sl-filtros label { display: flex; flex-direction: column; gap: 4px; }
.sl-filtros label span { font-size: 11.5px; font-weight: 600; color: #5B6E90; }
.sl-filtros select {
  border: 1px solid #E1E7F0; border-radius: 8px; padding: 8px 11px; background: #fff;
  font-family: inherit; font-size: 12.5px; color: #12275A; min-width: 150px;
}
/* ⚠️ `a.` no seletor de propósito: a casca tem uma regra `body.le-titular a { color: … }` com
   especificidade maior que uma classe sozinha, e ela apagava o texto do botão azul (o texto
   estava lá, na cor errada). Mesmo tropeço do link "Já tenho conta" no fluxo de conta. */
.sl-btn-claro, a.sl-btn-claro, button.sl-btn-claro {
  display: inline-flex; align-items: center; gap: 7px; border: 1px solid #DFE6F2; background: #fff;
  color: #33445F; border-radius: 8px; padding: 9px 13px; font-family: inherit; font-size: 12.5px;
  font-weight: 600; cursor: pointer; text-decoration: none;
}
.sl-btn-claro:hover, a.sl-btn-claro:hover { background: #F5F8FD; color: #33445F; }
.sl-btn-azul, a.sl-btn-azul {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 0;
  background: var(--marca-primaria); color: #fff; border-radius: 8px; padding: 10px 15px;
  font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; text-decoration: none;
}
.sl-btn-azul:hover, a.sl-btn-azul:hover { background: #093AB9; color: #fff; }
.sl-btn-azul.cheio, a.sl-btn-azul.cheio { width: 100%; box-sizing: border-box; margin-top: 14px; padding: 13px 16px; font-size: 13.5px; }

/* A tabela tem 8 colunas e não cabe em tela estreita. Ela rola DENTRO do próprio quadro —
   deixar a página inteira rolar na horizontal quebra o resto do layout. */
.sl-tabela { background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; overflow-x: auto; }
.sl-linha {
  display: grid; grid-template-columns: 140px minmax(150px, 1.2fr) 110px 130px 130px 130px 70px 30px;
  gap: 0 12px; align-items: center; padding: 11px 15px; border-bottom: 1px solid #F0F3F8;
  font-size: 12.5px; text-decoration: none; min-width: 940px;
}
.sl-linha:hover { background: #F8FAFE; }
.sl-cab { background: #FBFCFE; font-weight: 600; color: #5B6E90; }
.sl-cab:hover { background: #FBFCFE; }
/* A linha aberta no painel lateral fica marcada — sem isso não dá para saber a qual pedido o
   painel da direita se refere. */
.sl-linha.sel { background: #F5F9FF; box-shadow: inset 3px 0 0 var(--marca-primaria); }
.sl-linha .proto { font-weight: 700; color: var(--marca-primaria); font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; }
.sl-linha .tipo, .sl-linha .data, .sl-linha .canal { font-weight: 500; color: #33445F; }
.sl-linha .prazo { font-weight: 600; color: #33445F; }
.sl-linha .prazo i { display: block; font-style: normal; font-size: 10.5px; font-weight: 600; margin-top: 2px; }
.sl-linha .prazo i.ok { color: #127C48; }
.sl-linha .prazo i.aviso { color: #B36A00; }
.sl-linha .prazo i.vencido { color: #C42D25; }
.sl-linha .anexos { font-weight: 600; color: #5B6E90; text-align: center; }
.sl-linha .acao { display: flex; justify-content: flex-end; }
.sl-sit { display: inline-block; border-radius: 20px; padding: 3px 10px; font-size: 11px; font-weight: 700; white-space: nowrap; }
.sl-sit.andamento { background: #E4EEFE; color: #0B3FBF; }
.sl-sit.aviso { background: #FEF1DF; color: #B36A00; }
.sl-sit.ok { background: #E7F6EE; color: #127C48; }
.sl-sit.recusada { background: #FDECEA; color: #B3261E; }
.sl-vazio { margin: 0; padding: 26px 16px; font-size: 13px; color: #8A96AB; }

.sl-analises { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.sl-painel {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 14px 16px;
  box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.sl-painel-tit { display: flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 700; color: #0B2A5E; margin-bottom: 12px; }
.sl-painel-tit i { font-style: normal; font-size: 11px; font-weight: 500; color: #8A96AB; }
.sl-vazio-p { margin: 0; padding: 16px 0; font-size: 12.5px; color: #8A96AB; }

.sl-rosca { display: flex; align-items: center; gap: 14px; }
.sl-rosca-num { font-size: 22px; font-weight: 800; fill: #0B2A5E; }
.sl-rosca-lab { font-size: 10px; font-weight: 500; fill: #8A96AB; }
.sl-legenda { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.sl-legenda div { display: flex; align-items: center; gap: 8px; font-size: 11.5px; }
.sl-legenda .ponto { width: 8px; height: 8px; flex: none; border-radius: 50%; }
.sl-legenda b { flex: 1; min-width: 0; font-weight: 500; color: #33445F; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sl-legenda i { font-style: normal; font-weight: 700; color: #12275A; }

.sl-pct { margin-left: auto; display: flex; flex-direction: column; align-items: flex-end; border-radius: 8px; padding: 4px 9px; font-size: 15px; font-weight: 800; }
.sl-pct.ok { background: #E7F6EE; color: #127C48; }
.sl-pct.aviso { background: #FEF1DF; color: #B36A00; }
.sl-pct em { font-style: normal; font-size: 9.5px; font-weight: 600; }
.sl-barras { display: flex; align-items: flex-end; gap: 12px; height: 130px; }
.sl-barras > div { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; }
.sl-barras .barra { width: 100%; max-width: 54px; border-radius: 6px 6px 0 0; min-height: 3px; }
.sl-barras .barra.verde { background: #2FA96A; }
.sl-barras .barra.amarela { background: #F5A623; }
.sl-barras .barra.vermelha { background: #E2453C; }
.sl-barras i { font-style: normal; font-size: 10px; color: #5B6E90; margin-top: 6px; text-align: center; line-height: 1.3; }
.sl-barras b { font-size: 12px; font-weight: 700; color: #12275A; }

.sl-media { display: flex; align-items: baseline; gap: 8px; }
.sl-media b { font-size: 40px; font-weight: 800; color: #0B2A5E; line-height: 1; }
.sl-media span { font-size: 13px; font-weight: 600; color: #5B6E90; }
.sl-media-txt { font-size: 11.5px; color: #8A96AB; margin-top: 4px; }
.sl-meta { display: flex; align-items: center; gap: 10px; margin-top: 14px; padding-top: 12px; border-top: 1px solid #EFF2F7; font-size: 11.5px; color: #5B6E90; }
.sl-tag { margin-left: auto; border-radius: 20px; padding: 3px 10px; font-size: 10.5px; font-weight: 700; }
.sl-tag.ok { background: #E7F6EE; color: #127C48; }
.sl-tag.aviso { background: #FEF1DF; color: #B36A00; }

/* ── Confirmação de protocolo aberto ──────────────────────────────────────── */
.sl-modal-fundo {
  position: fixed; inset: 0; z-index: 120; background: rgba(11, 42, 94, .45);
  display: flex; align-items: center; justify-content: center; padding: 24px;
  animation: slModalFundo .16s ease-out;
}
@keyframes slModalFundo { from { opacity: 0; } to { opacity: 1; } }
.sl-modal {
  width: 100%; max-width: 470px; max-height: 90vh; overflow-y: auto; background: #fff;
  border-radius: 14px; padding: 26px 26px 22px; text-align: center;
  box-shadow: 0 18px 48px rgba(11, 42, 94, .3); animation: slModal .18s ease-out;
}
@keyframes slModal { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.sl-modal-ic {
  width: 62px; height: 62px; margin: 0 auto; border-radius: 50%; background: #E7F6EE;
  display: flex; align-items: center; justify-content: center;
}
.sl-modal h2 { margin: 16px 0 0; font-size: 21px; font-weight: 800; color: #0B2A5E; }
.sl-modal-sub { margin: 7px 0 0; font-size: 13px; line-height: 1.5; color: #5B6E90; }
/* O protocolo é o dado que a pessoa precisa levar embora — por isso em destaque e em fonte
   monoespaçada, que é a que não confunde 0 com O na hora de anotar. */
.sl-modal-proto {
  margin: 16px 0; padding: 13px; background: #F5F9FF; border: 1px dashed #B9D0F8; border-radius: 10px;
  font-family: ui-monospace, Menlo, monospace; font-size: 20px; font-weight: 800;
  letter-spacing: .04em; color: var(--marca-primaria);
}
.sl-modal-linhas { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; text-align: left; }
.sl-modal-linhas .largo { grid-column: 1 / -1; }
.sl-modal-linhas span { display: block; font-size: 11px; font-weight: 600; color: #8A96AB; }
.sl-modal-linhas b { display: block; font-size: 12.5px; font-weight: 700; color: #0B2A5E; margin-top: 2px; }
.sl-modal-nota {
  margin: 16px 0 0; padding: 11px 13px; background: #F3F7FE; border-radius: 9px;
  font-size: 11.5px; line-height: 1.5; color: #2B4368; text-align: left;
}
.sl-modal-acoes { display: flex; gap: 10px; margin-top: 18px; }
.sl-modal-acoes > a { flex: 1; justify-content: center; }

/* ── Painel lateral de detalhes ───────────────────────────────────────────── */
.sl-det-cab { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.sl-det-cab h2 { flex: 1; margin: 0; font-size: 16px; font-weight: 700; color: #0B2A5E; }
.sl-det-proto { background: #F1F5FC; border-radius: 7px; padding: 4px 9px; font-size: 10.5px; color: #5B6E90; }
.sl-det-proto b { font-family: ui-monospace, Menlo, monospace; font-size: 11px; color: #12275A; }
.sl-det-linhas { display: flex; flex-direction: column; gap: 9px; }
.sl-det-linhas > div { display: flex; align-items: baseline; gap: 10px; font-size: 12px; }
.sl-det-linhas span { flex: 1; color: #5B6E90; }
.sl-det-linhas b { font-weight: 700; color: #12275A; text-align: right; }
.sl-det-linhas b i { font-style: normal; font-weight: 600; font-size: 10.5px; }
.sl-det-linhas b i.ok { color: #127C48; }
.sl-det-linhas b i.aviso { color: #B36A00; }
.sl-det-linhas b i.vencido { color: #C42D25; }

.sl-det-bloco { margin-top: 16px; padding-top: 14px; border-top: 1px solid #EFF2F7; }
.sl-det-bloco h3 { margin: 0 0 8px; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.sl-det-bloco p { margin: 0; font-size: 12px; line-height: 1.55; color: #33445F; white-space: pre-line; }
.sl-nada { margin: 0; font-size: 12px; color: #8A96AB; }

.sl-tempo { display: flex; flex-direction: column; }
.sl-tempo-item { display: flex; gap: 11px; padding-bottom: 14px; position: relative; }
.sl-tempo-item:not(:last-child)::before {
  content: ''; position: absolute; left: 4.5px; top: 14px; bottom: 0; width: 1px; background: #E1E8F4;
}
.sl-tempo-item .bolinha { width: 10px; height: 10px; flex: none; border-radius: 50%; background: #D8DFEA; margin-top: 4px; z-index: 1; }
.sl-tempo-item.feito .bolinha { background: var(--marca-primaria); }
.sl-tempo-item b { display: block; font-size: 12.5px; font-weight: 700; color: #0B2A5E; }
.sl-tempo-item em { display: block; font-style: normal; font-size: 10.5px; color: #8A96AB; margin-top: 2px; }
.sl-tempo-item i { display: block; font-style: normal; font-size: 11.5px; line-height: 1.5; color: #5B6E90; margin-top: 3px; }

.sl-anexo { display: flex; align-items: center; gap: 9px; padding: 8px 0; font-size: 12px; text-decoration: none; }
.sl-anexo span { flex: 1; min-width: 0; color: #12275A; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sl-anexo i { font-style: normal; font-size: 10.5px; color: #8A96AB; }

.sl-ajuda { display: flex; align-items: center; gap: 12px; }
.sl-ajuda-ic { width: 40px; height: 40px; flex: none; border-radius: 10px; background: var(--marca-primaria); display: flex; align-items: center; justify-content: center; }
.sl-ajuda b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.sl-ajuda span { display: block; font-size: 11.5px; color: #5B6E90; margin-top: 2px; }

@media (max-width: 1400px) {
  .sl-grade { grid-template-columns: 1fr; }
  .sl-analises { grid-template-columns: 1fr; }
}
@media (max-width: 900px) {
  .sl-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sl-h1 { font-size: 24px; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Seus Direitos — porte do bloco `isDireitos` do mockup. Prefixo `dr-`.
   ──────────────────────────────────────────────────────────────────────────── */
.dr-corpo { padding: 16px 26px 26px; display: flex; flex-direction: column; gap: 12px; background: #fff; }
.dr-migalha { font-size: 14.5px; font-weight: 500; color: #4B5D80; }
.dr-h1 { margin: 4px 0 0; font-size: 36px; font-weight: 800; letter-spacing: -.025em; color: #0B2A5E; }
.dr-sub { margin: 8px 0 0; font-size: 14.5px; font-weight: 400; color: #4B5D80; }

/* ⚠️ DUAS COLUNAS, e não mais posicionamento absoluto (20/09/2026). A assistente era uma imagem
   `absolute` sobre a faixa, com o balão flutuando ao lado — e sobrava um vazio azul embaixo dela,
   enquanto o "Fale com o DPO" era outra faixa, fina, logo abaixo. Agora a saudação é uma linha
   com o texto à esquerda e UM cartão à direita: fala da assistente, o convite para o chat e o
   botão, na ordem em que a pessoa lê. Sem absoluto, a faixa cresce com o conteúdo em vez de
   depender de uma altura combinada. */
.dr-saudacao {
  position: relative; background: #EEF4FE; border-radius: 12px; padding: 16px 20px 16px 26px;
  margin-top: 6px; box-sizing: border-box;
  display: flex; align-items: stretch; gap: 20px;
}
.dr-saudacao-txt { flex: 1; min-width: 0; align-self: center; }
.dr-saudacao .tit { font-size: 19px; font-weight: 700; color: #0B2A5E; }
.dr-saudacao p { margin: 8px 0 0; font-size: 14px; font-weight: 400; color: #2B4368; }
.dr-saudacao p + p { margin-top: 5px; }

/* O cartão da assistente: branco sobre o azul da faixa, para destacar que ali é o atalho de ajuda. */
.dr-assist {
  width: 340px; flex: none; background: #fff; border: 1px solid #E2EAF7; border-radius: 12px;
  padding: 14px; display: flex; flex-direction: column; gap: 12px;
  box-shadow: 0 4px 14px rgba(13, 42, 94, .08); box-sizing: border-box;
}
.dr-assist-topo { display: flex; align-items: flex-end; gap: 10px; }
/* ⚠️ Sem margem negativa: ela faria a imagem invadir o traço que separa a fala do convite ao
   chat. O ganho visual de "apoiar" a assistente na linha não paga um cruzamento de elementos que
   muda de lugar conforme a fonte do sistema. */
.dr-assistente { height: 104px; width: auto; display: block; flex: none; }
.dr-balao {
  flex: 1; min-width: 0; background: #F5F9FF; border: 1px solid #E2EAF7; border-radius: 10px;
  padding: 10px 12px; font-size: 12px; font-weight: 400; line-height: 1.5; color: #2B4368;
}
.dr-assist-dpo { display: flex; align-items: flex-start; gap: 10px; border-top: 1px solid #EEF2F9; padding-top: 12px; }
.dr-assist-dpo b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.dr-assist-dpo i { display: block; font-style: normal; font-size: 12px; line-height: 1.5; color: #5B6E90; margin-top: 2px; }
.dr-assist .dr-btn-dpo { margin-top: 0; }

/* ── O cartão da assistente no canto (23/09/2026, pedido do dono) ─────────────────────────────
   Ele morava dentro da faixa de saudação e, por ser alto, esticava a faixa inteira — o texto
   ficava centralizado no meio de um vazio enorme. No canto, ele é o que sempre foi (o atalho de
   ajuda) e devolve à página o espaço do topo.

   ⚠️ O conteúdo ganha respiro embaixo (`padding-bottom`): sem isso o cartão fixo cobriria as
   últimas linhas de "Minhas solicitações recentes", e quem rolasse até o fim acharia que a lista
   acaba antes do fim.

   ⚠️ z-index 88 — ABAIXO do painel do chat (120) e do botão da casca (89). O cartão não pode
   ficar por cima da conversa que ele mesmo abre. */
.dr-assist-canto {
  position: fixed; right: 26px; top: 104px; z-index: 88;
  width: 300px; max-width: calc(100vw - 32px);
  padding: 10px; gap: 8px;
}

/* A assistente encolhe e o balão fica ao lado: é o que faz o cartão caber no vazio da saudação. */
.dr-assist-canto .dr-assistente { height: 64px; }
.dr-assist-canto .dr-balao { font-size: 11.5px; padding: 7px 9px; line-height: 1.4; }
.dr-assist-canto .dr-assist-dpo { padding-top: 8px; gap: 8px; }
.dr-assist-canto .dr-assist-dpo i { display: none; }
.dr-assist-canto .dr-btn-dpo { padding: 9px 12px; font-size: 13px; }

/* ⚠️ Respiro à DIREITA, não embaixo: o cartão agora mora no alto, e é a coluna da direita dos
   cartões de direito que ele poderia alcançar. O padding some junto com o cartão no celular. */
body.le-titular:has(.dr-assist-canto) .dr-corpo { padding-bottom: 0; }

/* Tela baixa: sem altura para um cartão fixo, ele volta ao fim da página. */
@media (max-height: 760px) {
  .dr-assist-canto { position: static; top: auto; width: auto; max-width: none; margin-top: 16px; }
  .dr-assist-canto .dr-assistente { height: 104px; }
  .dr-assist-canto .dr-assist-dpo i { display: block; }
}

/* 🔴 NO CELULAR ELE VOLTA PARA O FIM DA PÁGINA. Um cartão fixo de 320px numa tela de 390px cobre
   metade do que a pessoa veio ler — e o que ela veio fazer aqui é exercer um direito, não pedir
   ajuda. Fixo só onde sobra tela. */
@media (max-width: 900px) {
  .dr-assist-canto { position: static; top: auto; width: auto; max-width: none; margin-top: 16px; }
  /* No fluxo, a assistente volta ao tamanho de sempre — aqui não há vazio para caber. */
  .dr-assist-canto .dr-assistente { height: 104px; }
  .dr-assist-canto .dr-assist-dpo i { display: block; }
}

.dr-direitos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.dr-card {
  background: #fff; border: 1px solid #E4EAF3; border-radius: 11px; padding: 12px 14px;
  display: flex; flex-direction: column; gap: 9px;
}
/* O primeiro cartão vem destacado no mockup — é a porta de entrada mais usada (acesso aos dados). */
.dr-card.destaque { background: #F5F9FF; border: 2px solid #2E6BF5; }

/* ── Cartão sob o cursor / em foco (07/09/2026, pedido do dono) ───────────────────────────────
   "Ao passar o cursor ou clicar, mudar a cor da borda para mostrar que aquela opção está
   selecionada."

   ⚠️ LOGO DEPOIS DO `.destaque`, e não no fim do arquivo. `.dr-card.destaque` e `.dr-card:hover`
   têm a MESMA especificidade (0,2,0), então quem vier depois vence: escrito antes, o primeiro
   cartão seria o único que não reagiria ao cursor — e é justamente o que a pessoa olha primeiro.

   ⚠️ O anel é `box-shadow`, não `border` mais grossa. Engrossar a borda no hover muda o tamanho
   da caixa e empurra os vizinhos meio pixel — o grid inteiro treme quando o cursor passeia.

   ⚠️ SEM `transform`. Já custou caro no iAgrow: `:hover` com transform engole o primeiro toque no
   iOS, e a pessoa precisa tocar duas vezes para abrir. Aqui só mudam cor e sombra. */
.dr-card {
  transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease;
}

/* ⚠️ Só onde existe cursor de verdade. No celular o `:hover` GRUDA no último elemento tocado, e
   o cartão ficaria "selecionado" sozinho depois do toque, sem jeito de desfazer — mesmo cuidado
   dos painéis do resumo, no fim deste arquivo. */
@media (hover: hover) and (pointer: fine) {
  .dr-card:hover {
    border-color: var(--marca-primaria);
    background: #F8FBFF;
    box-shadow: 0 0 0 3px rgba(46, 107, 245, .16);
  }
  .dr-card:hover .dr-card-btn { background: #EDF4FF; border-color: var(--marca-primaria); }
}

/* No toque e no teclado quem marca é o FOCO: o dedo ou o Tab levam o foco ao botão de dentro, e
   o cartão inteiro acende. Fora do `@media` de propósito — é o que dá o retorno visual no celular,
   onde o `:hover` não serve. */
.dr-card:focus-within {
  border-color: var(--marca-primaria);
  background: #F8FBFF;
  box-shadow: 0 0 0 3px rgba(46, 107, 245, .22);
}

/* ⚠️ O DESTAQUE DO CARTÃO 1 SAI QUANDO OUTRO É ESCOLHIDO (07/09/2026, relatado pelo dono).
   O primeiro cartão nasce com borda azul fixa (`.destaque`, o realce do mockup). Com o realce
   de cursor/foco, apontar para o cartão 5 deixava DOIS cartões azuis ao mesmo tempo — e a
   borda, que existe para dizer "é esta", passava a dizer "são estas duas".

   Enquanto houver um cartão sob o cursor ou com foco, o destaque fixo se apaga; ele volta
   assim que o cursor sai da grade. Quando o escolhido É o próprio cartão 1, o `:not()`
   preserva o realce dele.

   ⚠️ A borda continua com 2px, só perde a COR. Trocar para 1px mudaria o tamanho da caixa e
   empurraria os vizinhos — o mesmo tremor que a sombra em anel existe para evitar.

   ⚠️ `:has()` é o que permite fazer isto sem uma linha de JavaScript. Em navegador antigo, que
   não o entende, a regra inteira é ignorada e a tela volta a ser exatamente o que era hoje:
   o cartão 1 continua azul. Piora nada, e não quebra nada. */
@media (hover: hover) and (pointer: fine) {
  .dr-direitos:has(.dr-card:hover) .dr-card.destaque:not(:hover) {
    background: #fff;
    border-color: #E4EAF3;
    box-shadow: none;
  }
}

.dr-direitos:has(.dr-card:focus-within) .dr-card.destaque:not(:focus-within) {
  background: #fff;
  border-color: #E4EAF3;
  box-shadow: none;
}

/* Quem pediu menos movimento continua vendo a borda mudar — só sem a transição. */
@media (prefers-reduced-motion: reduce) {
  .dr-card { transition: none; }
}
.dr-card-topo { display: flex; align-items: flex-start; gap: 12px; }
.dr-card-ic {
  width: 42px; height: 42px; flex: none; border-radius: 11px;
  display: flex; align-items: center; justify-content: center;
}
.dr-card-tit { font-size: 14.5px; font-weight: 700; color: #0B2A5E; }
.dr-card-txt { font-size: 12.5px; font-weight: 400; line-height: 1.5; color: #5B6E90; margin-top: 5px; }
.dr-card-btn {
  border: 1px solid #B9D0F8; background: #fff; color: var(--marca-primaria); border-radius: 8px;
  padding: 9px 12px; font-size: 12.5px; font-weight: 700; cursor: pointer; text-decoration: none;
  display: flex; align-items: center; justify-content: center; gap: 8px; position: relative;
}
.dr-card-btn:hover { background: #EDF4FF; color: var(--marca-primaria); }
.dr-card-btn svg { position: absolute; right: 12px; }

.dr-baixo { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, .95fr) minmax(0, .8fr); gap: 12px; align-items: start; }
.dr-coluna { display: flex; flex-direction: column; gap: 12px; }
.dr-painel {
  background: #fff; border: 1px solid #E4EAF3; border-radius: 11px; padding: 14px 16px;
  box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.dr-painel-cab { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.dr-painel-cab h2 { flex: 1; margin: 0; font-size: 17px; font-weight: 700; color: #0B2A5E; }
.dr-painel-cab a {
  display: flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 700;
  color: var(--marca-primaria);
}

.dr-tabela-linha {
  display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1.3fr) 120px 100px; gap: 0 12px;
  align-items: center; padding: 10px 0; border-bottom: 1px solid #EDF1F7; font-size: 12.5px;
  text-decoration: none;
}
.dr-tabela-cab { font-weight: 600; color: #5B6E90; }
/* O protocolo passou a dividir a célula com o badge de mensagens novas. */
.dr-tabela-linha .proto { font-weight: 600; color: var(--marca-primaria); display: flex; align-items: center; gap: 7px; }

/* Mensagem nova da instituição. Vermelho e não a cor da marca: é a única coisa desta
   lista que pede uma ação da pessoa hoje, e a cor da marca aparece em tudo em volta. */
.dr-novas {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  min-width: 19px; height: 19px; padding: 0 6px;
  background: #C2334D; color: #fff; border-radius: 999px;
  font-size: 11px; line-height: 1; font-weight: 700; font-variant-numeric: tabular-nums;
}
/* O número sozinho não diz de que é; o leitor de tela precisa da frase. */
.dr-so-leitor {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap;
}
.dr-tabela-linha .tipo { font-weight: 500; color: #33445F; }
.dr-tabela-linha .prazo { font-weight: 500; color: #33445F; }
.dr-sit { border-radius: 20px; padding: 3px 10px; font-size: 11px; font-weight: 700; white-space: nowrap; }
.dr-sit.andamento { background: #E4EEFE; color: #0B3FBF; }
.dr-sit.aviso { background: #FEF1DF; color: #B36A00; }
.dr-sit.ok { background: #E7F6EE; color: #127C48; }
.dr-sit.recusada { background: #FDECEA; color: #B3261E; }
.dr-vazio { margin: 0; padding: 18px 0; font-size: 12.5px; color: #8A96AB; }

.dr-passos { display: flex; flex-direction: column; gap: 12px; }
.dr-passo { display: flex; align-items: flex-start; gap: 11px; }
.dr-passo > span {
  width: 26px; height: 26px; flex: none; border-radius: 50%; background: #E4EEFE;
  color: var(--marca-primaria); font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.dr-passo b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.dr-passo i { display: block; font-style: normal; font-size: 12px; line-height: 1.5; color: #5B6E90; margin-top: 3px; }

.dr-escudo, .dr-dpo-ic {
  width: 34px; height: 34px; flex: none; border-radius: 9px; background: #E7F6EE;
  display: flex; align-items: center; justify-content: center;
}
.dr-dpo-ic { background: var(--marca-primaria); }

.dr-tag { display: inline-block; border-radius: 20px; padding: 4px 11px; font-size: 11.5px; font-weight: 700; }
.dr-tag.ok { background: #E7F6EE; color: #127C48; }
.dr-tag.aviso { background: #FEF7E8; color: #8A5A00; }
.dr-acesso { margin-top: 12px; }
.dr-acesso span { display: block; font-size: 12px; font-weight: 500; color: #5B6E90; }
.dr-acesso b { display: block; font-size: 13px; font-weight: 700; color: #12275A; margin-top: 2px; }

.dr-dpo p { margin: 0; font-size: 12.5px; font-weight: 400; line-height: 1.5; color: #5B6E90; }
.dr-btn-dpo {
  margin-top: 12px; width: 100%; border: 0; background: var(--marca-primaria); color: #fff;
  border-radius: 9px; padding: 11px 16px; font-family: inherit; font-size: 13.5px; font-weight: 700;
  cursor: pointer;
}
.dr-btn-dpo:hover { background: #093AB9; }

@media (max-width: 1400px) {
  .dr-direitos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dr-baixo { grid-template-columns: 1fr; }
  /* ⚠️ Estreitou, o cartão DESCE em vez de sumir (20/09/2026). Antes a assistente e o balão eram
     escondidos aqui — e com eles ia embora o único convite para falar com o DPO nesta tela, que
     é justamente onde a dúvida aparece. Some a moldura de duas colunas, não o conteúdo. */
  .dr-saudacao { flex-direction: column; }
  .dr-assist { width: 100%; }
  .dr-saudacao-txt { max-width: 100%; }
}
@media (max-width: 700px) {
  .dr-corpo { padding: 14px 14px 20px; }
  .dr-direitos { grid-template-columns: 1fr; }
  .dr-h1 { font-size: 28px; }
  .dr-tabela-linha { grid-template-columns: 1fr 1fr; row-gap: 4px; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Privacidade e Segurança — porte do bloco `isPriv` do mockup. Prefixo `pv-`.
   ──────────────────────────────────────────────────────────────────────────── */
.pv-h1 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E; }
.pv-sub { margin: 8px 0 0; font-size: 14.5px; font-weight: 400; color: #4B5D80; }

.pv-estados { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 13px; }
.pv-estado {
  border-radius: 11px; padding: 15px 17px; display: flex; align-items: center; gap: 14px;
  background: #EFF9F3; border: 1px solid #D7EDE1;
}
.pv-estado.aviso { background: #FEF7E8; border-color: #F5DFAE; }
.pv-estado.neutro { background: #F6F9FE; border-color: #E1E9F7; }
.pv-estado-ic {
  width: 44px; height: 44px; flex: none; border-radius: 11px; background: #fff;
  display: flex; align-items: center; justify-content: center;
}
.pv-estado .tit { font-size: 15px; font-weight: 700; color: #0B2A5E; }
.pv-estado .txt { font-size: 12.5px; font-weight: 400; color: #33445F; margin-top: 3px; }

.pv-duas { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 13px; align-items: start; }
.pv-painel {
  background: #fff; border: 1px solid #E9EDF4; border-radius: 11px; padding: 16px 18px;
  box-shadow: 0 1px 2px rgba(13, 42, 94, .04);
}
.pv-painel h2 { margin: 0 0 4px; font-size: 17px; font-weight: 700; color: #0B2A5E; }
.pv-painel-sub { font-size: 12.5px; font-weight: 400; color: #5B6E90; margin-bottom: 14px; }

.pv-metodos { display: flex; flex-direction: column; gap: 10px; }
.pv-metodo {
  display: flex; align-items: center; gap: 13px; border: 1px solid #E4EAF3; border-radius: 9px;
  padding: 12px 14px;
}
.pv-metodo.ativo { border-color: #D7EDE1; background: #FBFEFC; }
/* Método sem provedor contratado fica visível e apagado: botão que não ativa faria a pessoa
   acreditar que tem um segundo caminho de acesso, e ela só descobriria no dia em que precisasse. */
.pv-metodo.indisponivel { opacity: .62; }
.pv-metodo-ic {
  width: 38px; height: 38px; flex: none; border-radius: 10px; background: #F1F5FC;
  display: flex; align-items: center; justify-content: center;
}
.pv-metodo-ic.verde { background: #E7F6EE; }
.pv-metodo-txt { flex: 1; min-width: 0; }
.pv-metodo-txt b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.pv-metodo-txt i { display: block; font-style: normal; font-size: 12px; font-weight: 400; color: #5B6E90; margin-top: 2px; }
.pv-tag-ativo {
  flex: none; background: #E7F6EE; color: #127C48; border-radius: 20px; padding: 4px 11px;
  font-size: 11.5px; font-weight: 700;
}
.pv-tag-off {
  flex: none; background: #EEF2FA; color: #5B6E90; border-radius: 20px; padding: 4px 11px;
  font-size: 11.5px; font-weight: 700;
}
.pv-btn-ativar {
  flex: none; border: 1px solid #B9D0F8; background: #fff; color: var(--marca-primaria);
  border-radius: 7px; padding: 7px 13px; font-size: 12px; font-weight: 700; text-decoration: none;
}
.pv-btn-ativar:hover { background: #EDF4FF; }

.pv-senha {
  margin-top: 14px; padding-top: 13px; border-top: 1px solid #EFF2F7;
  display: flex; align-items: center; gap: 14px;
}
.pv-senha span { flex: 1; font-size: 12.5px; font-weight: 400; color: #5B6E90; }
.pv-btn-claro {
  flex: none; border: 1px solid #DFE6F2; background: #fff; color: #33445F; border-radius: 7px;
  padding: 8px 14px; font-size: 12.5px; font-weight: 600; text-decoration: none;
}
.pv-btn-claro:hover { background: #F5F8FD; color: #33445F; }

.pv-consentimentos { display: flex; flex-direction: column; gap: 11px; }
.pv-consent { display: flex; align-items: center; gap: 12px; padding-bottom: 11px; border-bottom: 1px solid #F2F5F9; }
.pv-consent:last-child { padding-bottom: 0; border-bottom: 0; }
.pv-consent-txt { flex: 1; min-width: 0; }
.pv-consent-txt b { display: block; font-size: 13px; font-weight: 700; color: #0B2A5E; }
.pv-consent-txt i { display: block; font-style: normal; font-size: 11.5px; font-weight: 400; color: #5B6E90; margin-top: 2px; }

/* Chave 38×21 com bola de 15px — as medidas do mockup. É um <button> de formulário: a CSP é
   `script-src 'self'` e um toggle dependente de script falharia calado. */
.pv-chave {
  width: 38px; height: 21px; flex: none; border: 0; border-radius: 11px; background: #D8DFEA;
  display: flex; align-items: center; justify-content: flex-start; padding: 0 3px;
  box-sizing: border-box; cursor: pointer; transition: background .14s ease;
}
.pv-chave.on { background: var(--marca-primaria); justify-content: flex-end; }
.pv-chave span { width: 15px; height: 15px; border-radius: 50%; background: #fff; display: block; }
.pv-chave:focus-visible { outline: 2px solid var(--marca-acento); outline-offset: 2px; }

.pv-nota {
  margin-top: 14px; display: flex; align-items: flex-start; gap: 11px; background: #F6F9FE;
  border-radius: 9px; padding: 11px 13px;
}
.pv-nota span { font-size: 11.5px; font-weight: 400; line-height: 1.5; color: #33445F; }
.pv-aviso {
  margin-bottom: 12px; border-radius: 9px; padding: 10px 13px; font-size: 12px; font-weight: 600;
  background: #FEF7E8; border: 1px solid #F5DFAE; color: #8A5A00;
}
.pv-aviso.ok { background: #F1FAF5; border-color: #B7E3CB; color: #14603C; }

/* ── Histórico de segurança ───────────────────────────────────────────────── */
.pv-hist { padding: 16px 18px 6px; }
.pv-hist-cab { display: flex; align-items: baseline; gap: 12px; margin-bottom: 6px; }
.pv-hist-cab h2 { flex: 1; margin: 0; }
.pv-hist-cab a { font-size: 12.5px; font-weight: 700; color: var(--marca-primaria); }
.pv-hist-linha {
  display: grid; grid-template-columns: 180px minmax(0, 1fr) 260px 140px; gap: 0 16px;
  align-items: center; padding: 10px 0; border-bottom: 1px solid #EDF1F7; font-size: 12.5px;
}
.pv-hist-cabecalho { font-weight: 600; color: #5B6E90; }
.pv-hist-linha .data { font-weight: 600; color: #33445F; }
.pv-hist-linha .evento { font-weight: 500; color: #0B2A5E; }
.pv-hist-linha .disp { font-weight: 400; color: #5B6E90; }
.pv-hist-linha .ip { font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; color: #5B6E90; }
.pv-vazio { margin: 0; padding: 22px 0; font-size: 13px; color: #8A96AB; }

@media (max-width: 1080px) {
  .pv-estados, .pv-duas { grid-template-columns: 1fr; }
  .pv-hist-linha { grid-template-columns: 1fr 1fr; row-gap: 4px; }
}

/* ── Consentimento por finalidade ──────────────────────────────────────────── */
.tt-finalidades { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.tt-finalidade {
  display: flex; align-items: center; gap: 16px;
  border: 1px solid #E4EAF5; border-radius: 10px; padding: 13px 15px; background: #fff;
}
.tt-finalidade.fixa { background: #F7F9FD; }
.tt-finalidade b { display: block; font-size: 13.5px; font-weight: 700; color: #0B2A5E; }
.tt-finalidade i { display: block; font-style: normal; font-size: 12px; line-height: 1.5; color: #5D7092; margin-top: 3px; }
.tt-finalidade u { display: block; text-decoration: none; font-size: 11.5px; font-weight: 600; color: #8A96AB; margin-top: 5px; }

/* Chave = <button> de formulário. Sem JS: a CSP é `script-src 'self'` e um toggle dependente de
   script falharia calado. O <button> também dá foco por teclado de graça. */
.tt-chave {
  flex: none; width: 46px; height: 26px; border-radius: 20px; border: 0; cursor: pointer;
  background: #CFD8E8; padding: 0; position: relative; transition: background .16s ease;
}
.tt-chave.on { background: var(--marca-primaria); }
.tt-chave:focus-visible { outline: 2px solid var(--marca-acento); outline-offset: 2px; }
.tt-chave-bola {
  position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 2px rgba(11, 42, 94, .3); transition: transform .16s ease;
}
.tt-chave.on .tt-chave-bola { transform: translateX(20px); }

.tt-selo {
  flex: none; border-radius: 20px; padding: 4px 11px; font-size: 11px; font-weight: 700;
  background: #EEF2FA; color: #5B6E90;
}

/* ── Formulário (Atualizar cadastro) ───────────────────────────────────────── */
.tt-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.tt-form label { display: block; }
.tt-form label > span:first-child { display: block; font-size: 11.5px; font-weight: 600; color: #5B6E90; margin-bottom: 5px; }
.tt-form input {
  width: 100%; box-sizing: border-box; border: 1px solid #DFE6F2; border-radius: 9px; padding: 11px 13px;
  font-family: inherit; font-size: 13.5px; color: #12275A; background: #fff;
}
.tt-form input:focus { outline: none; border-color: var(--marca-primaria); }
/* Campo travado precisa PARECER travado — senão a pessoa digita e perde o texto ao salvar. */
.tt-form input:disabled { background: #F4F7FC; color: #7A89A6; }

/* ── Minhas solicitações ───────────────────────────────────────────────────── */
.tt-lista { display: flex; flex-direction: column; gap: 12px; }
.tt-item {
  background: #fff; border: 1px solid #E4EAF5; border-radius: 12px; padding: 16px 18px;
  box-shadow: 0 1px 3px rgba(18, 39, 90, .05);
}
.tt-item-topo { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.tt-protocolo { font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; font-weight: 700; color: #0B2A5E; }
.tt-item-data { font-size: 12px; color: #8A96AB; }
.tt-status { border-radius: 20px; padding: 4px 11px; font-size: 11px; font-weight: 700; }
.tt-status.andamento { background: #E4EEFE; color: #0B3FBF; }
.tt-status.aviso { background: #F4EDFE; color: #6B21A8; }
.tt-status.ok { background: #E7F6EE; color: #127C48; }
.tt-status.erro { background: #FDECEA; color: #C42D25; }
/* `DireitosModel.Situacao` devolve a classe "recusada", que nunca existiu aqui — o estado era
   inalcançável enquanto nenhuma tela conseguia recusar um pedido. Sem esta linha, a etiqueta de
   uma solicitação recusada sairia sem fundo nenhum. */
.tt-status.recusada { background: #FDECEA; color: #B3261E; }

.tt-item-tit { font-size: 16px; font-weight: 700; color: #12275A; margin-top: 10px; }
.tt-item-txt { margin: 6px 0 0; font-size: 13px; line-height: 1.55; color: #4B5D80; }
.tt-item-pe { display: flex; align-items: center; gap: 14px; margin-top: 12px; flex-wrap: wrap; }
.tt-prazo-tag { font-size: 12px; font-weight: 600; color: #5B6E90; }
.tt-prazo-tag.hoje { color: #B36A00; }
.tt-prazo-tag.atrasada { color: #C42D25; font-weight: 700; }
.tt-prazo-tag.ok { color: #127C48; }
.tt-ver-resposta { font-size: 12.5px; font-weight: 700; }

/* ── Meus direitos ─────────────────────────────────────────────────────────── */
.tt-direitos-grade { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.tt-direito-card {
  background: #fff; border: 1px solid #E4EAF5; border-radius: 12px; padding: 18px;
  display: flex; flex-direction: column; gap: 10px; box-shadow: 0 1px 3px rgba(18, 39, 90, .05);
}
.tt-direito-ic { width: 42px; height: 42px; border-radius: 11px; background: #E4EEFE; display: flex; align-items: center; justify-content: center; }
.tt-direito-card b { font-size: 16px; font-weight: 700; color: #0B3FBF; }
.tt-direito-card > span:not(.tt-direito-ic) { font-size: 12.5px; line-height: 1.55; color: #5D7092; flex: 1; }
.tt-direito-btn {
  display: inline-flex; align-items: center; gap: 8px; align-self: flex-start;
  font-size: 12.5px; font-weight: 700; color: var(--marca-primaria);
}

/* ⚠️ AQUI FICAVA UM SEGUNDO "Chat com o DPO", removido em 27/08/2026.
   Ele vestia a página cheia `/Titular/Dpo`, que foi retirada em 20/08/2026 quando o widget
   flutuante virou a única porta. A marcação morreu; o CSS ficou — e, por vir DEPOIS na mesma
   folha, continuava vencendo o desenho do widget: reescrevia `.tt-chat` (raio 13, max-width 760),
   `.tt-chat-topo`, `.tt-chat-pe` e `.tt-msg`, que o widget usa de verdade.

   É o motivo pelo qual a conversa com o Encarregado nunca ficava igual à da assistente, mesmo com
   o bloco lá em cima copiado valor a valor de `.hm-chat`: o arquivo se desfazia da própria cópia
   umas mil linhas adiante. Regra duplicada não avisa que existe — só ganha.

   Estavam neste bloco, e não são usadas por marcação nenhuma: .tt-chat-thread, .tt-chat-av,
   .tt-chat-nome, .tt-chat-status, .tt-ponto, .tt-balao, .tt-hora, .tt-protocolo-*, .tt-atalho(s),
   .tt-chat-form, .tt-enviar, .tt-chat-protocolo, .tt-btn-protocolo. O widget tem as suas
   (.tt-msg-balao, .tt-chat-atalho, .tt-chat-campo, .tt-chat-enviar), definidas lá em cima. */

/* ── Privacidade, resposta e documentos ────────────────────────────────────── */
.tt-estado { font-size: 20px; font-weight: 800; margin-top: 8px; }
.tt-estado.ok { color: #127C48; }
.tt-estado.aviso { color: #B36A00; }

.tt-consentimentos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-top: 12px; }
.tt-consent { background: #F7F9FD; border: 1px solid #EDF1F7; border-radius: 10px; padding: 12px 14px; }
.tt-consent span { display: block; font-size: 11.5px; font-weight: 600; color: #5B6E90; }
.tt-consent b { display: block; font-size: 14px; font-weight: 700; margin-top: 4px; }
.tt-consent b.ok { color: #127C48; }
.tt-consent b.aviso { color: #B36A00; }
.tt-consent i { display: block; font-style: normal; font-size: 11px; color: #8A96AB; margin-top: 3px; }

.tt-duas-col { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: start; }
.tt-resposta { border-left: 4px solid var(--marca-primaria); }
.tt-resposta-data { font-size: 11.5px; color: #8A96AB; margin-top: 4px; }
.tt-resposta-txt { margin: 10px 0 0; font-size: 14px; line-height: 1.65; color: #2B4368; white-space: pre-wrap; }

.tt-timeline { margin-top: 12px; display: flex; flex-direction: column; gap: 14px; position: relative; }
.tt-evento { display: flex; gap: 12px; }
.tt-evento-ponto {
  width: 10px; height: 10px; flex: none; border-radius: 50%; background: var(--marca-primaria);
  margin-top: 5px; box-shadow: 0 0 0 3px #E4EEFE;
}
.tt-evento b { display: block; font-size: 13.5px; font-weight: 700; color: #12275A; }
.tt-evento i { display: block; font-style: normal; font-size: 11.5px; color: #8A96AB; margin-top: 2px; }
.tt-evento span { display: block; font-size: 12.5px; line-height: 1.5; color: #5D7092; margin-top: 4px; }

/* Avaliação do atendimento: cinco botões de verdade, sem JS — a CSP do projeto é
   `script-src 'self'` e um seletor de estrelas com onclick não entraria de qualquer forma. */
.tt-nota { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.tt-nota-btn {
  width: 42px; height: 42px; border: 1px solid #DDE5F2; background: #fff; border-radius: 10px;
  font-family: inherit; font-size: 15px; font-weight: 700; color: #12275A; cursor: pointer;
}
.tt-nota-btn:hover { border-color: var(--marca-primaria); background: #F4F8FF; }
.tt-nota-legenda { font-size: 11.5px; color: #8A96AB; margin-left: 4px; }

.tt-anexos { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.tt-anexo {
  display: flex; align-items: center; gap: 11px; background: #F7F9FD; border: 1px solid #EDF1F7;
  border-radius: 10px; padding: 11px 13px;
}
.tt-anexo b { display: block; font-size: 13px; font-weight: 600; color: #12275A; word-break: break-word; }
.tt-anexo i { display: block; font-style: normal; font-size: 11px; color: #8A96AB; margin-top: 2px; }
.tt-anexo-link { flex: none; font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; font-weight: 700; }

@media (max-width: 1080px) {
  .tt-consentimentos, .tt-duas-col { grid-template-columns: 1fr; }
  .tt-direitos-grade { grid-template-columns: 1fr; }
  .tt-trilha { overflow-x: auto; padding-bottom: 4px; }
  .tt-trilho { min-width: 24px; }
  .tt-dados-titular, .tt-direitos, .tt-form { grid-template-columns: 1fr; }
  .tt-topo { height: auto; flex-wrap: wrap; gap: 12px; padding: 12px 16px; }
  .tt-titulo { font-size: 15px; }
  .tt-lema, .tt-escudo { display: none; }
  .tt-corpo { padding: 18px 14px 24px; }
  .tt-abre { flex-direction: column; }
  .tt-ilustra { display: none; }
  .tt-abre h1 { font-size: 28px; }
  .tt-acoes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tt-resumo { grid-template-columns: 1fr; }
}

/* ── Bloco de análises fixo no rodapé (pedido de 15/08/2026) ───────────────────
   Os três painéis (tipo, prazo, tempo médio) ficam grudados na base da janela e
   a lista de solicitações rola POR BAIXO deles. São o resumo que o titular quer
   ver o tempo todo; rolando junto, some justamente quando a lista fica longa. */
.sl-analises {
  position: sticky;
  bottom: 0;
  z-index: 5;
  background: #F4F7FC;
  padding: 10px 0 12px;
  margin-top: 6px;
  box-shadow: 0 -10px 18px -12px rgba(11, 27, 58, .28);
}

/* Em tela baixa o bloco fixo comeria a área útil: solto, volta a rolar junto. */
@media (max-height: 720px), (max-width: 1100px) {
  .sl-analises { position: static; box-shadow: none; }
}

/* "Ver resposta" — o segundo botão do slide 5, abaixo de "Acompanhar detalhes". */
.sl-btn-ver, a.sl-btn-ver {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  background: var(--marca-primaria); color: #fff; border: 0; border-radius: 10px;
  font-family: inherit; font-size: 13px; font-weight: 700; padding: 11px 16px;
  cursor: pointer; text-decoration: none;
}
body.le-titular a.sl-btn-ver { color: #fff; }
.sl-btn-ver:hover, a.sl-btn-ver:hover { background: #093AB9; color: #fff; }
.sl-btn-ver.cheio, a.sl-btn-ver.cheio { width: 100%; box-sizing: border-box; margin-top: 9px; padding: 13px 16px; font-size: 13.5px; }

/* ── Quem respondeu no chat (15/08/2026) ───────────────────────────────────────
   Roteiro e pessoa apareciam iguais, e o titular ficava esperando um encarregado
   que nunca tinha entrado na conversa. */
.dp-quem, .tt-msg-balao .quem {
  font-size: 10px; font-weight: 700; letter-spacing: .02em; margin-bottom: 3px;
}
.dp-quem.auto, .tt-msg-balao .quem.auto { color: #8A96AB; }
.dp-quem.gente, .tt-msg-balao .quem.gente { color: var(--marca-primaria); }

/* ── Modal renderizado no servidor ────────────────────────────────────────────
   ⚠️ Mora AQUI, e não em controlador.css, porque os dois portais usam: o do
   controlador para os dados do documento e o do DPO para acrescentar dado do
   titular. Ficando lá, o modal do DPO renderizava sem estilo nenhum e virava
   texto solto no fim da página — o botão parecia não fazer nada.
   titular.css é carregado pelas TRÊS cascas. ------------------------------ */

.dp2-modal-fundo {
    position: fixed;
    inset: 0;
    background: rgba(16, 26, 46, .42);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 22px;
    z-index: 60;
}

.dp2-modal {
    width: min(560px, 100%);
    max-height: calc(100vh - 44px);
    overflow: auto;
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 18px 46px rgba(16, 26, 46, .22);
}

.dp2-modal-topo {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    padding: 18px 20px 14px;
}

.dp2-modal-topo b {
    display: block;
    font-size: 15px;
    font-weight: 700;
    color: #16233D;
    line-height: 1.3;
}

.dp2-modal-topo span {
    display: block;
    font-size: 11.5px;
    color: #8A96AB;
    margin-top: 2px;
}

.dp2-modal-x {
    margin-left: auto;
    flex: none;
    width: 26px;
    height: 26px;
    border-radius: 7px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #8A96AB;
    text-decoration: none;
}

.dp2-modal-x:hover {
    background: #F1F4FA;
    color: #16233D;
}

.dp2-modal-corpo {
    padding: 0 20px 4px;
    border-top: 1px solid #EDF1F7;
}

.dp2-modal-secao {
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 16px 0 10px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--marca-primaria, #0B45DD);
}

.dp2-modal-secao.sensivel {
    color: #9333EA;
}

.dp2-modal-grade {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
    gap: 12px 18px;
}

.dp2-modal-grade span {
    display: block;
    font-size: 10.5px;
    color: #8A96AB;
    line-height: 1.4;
}

.dp2-modal-grade b {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: #16233D;
    line-height: 1.4;
    margin-top: 1px;
    word-break: break-word;
}

.dp2-modal-origem {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    margin: 16px 0 0;
    padding: 10px 12px;
    border-radius: 8px;
    background: #F6F8FC;
    font-size: 11px;
    color: #6C7A90;
    line-height: 1.5;
}

.dp2-modal-pe {
    padding: 16px 20px 18px;
    display: flex;
    justify-content: center;
}

.dp2-modal-pe .dp2-btn {
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 118px;
}


/* ── Terceira saída do chat: falar com uma pessoa (16/08/2026) ─────────────────
   Antes só havia "resolveu" ou "abrir protocolo". Quem queria falar com gente
   era empurrado a abrir um pedido com prazo legal, ou a desistir. */
.dp-btn-humano {
  border: 1px solid #C6D6F5; background: #F5F8FD; border-radius: 8px; padding: 7px 13px;
  font-family: inherit; font-size: 12px; font-weight: 700; color: var(--marca-primaria);
  cursor: pointer;
}
.dp-btn-humano:hover { background: #EAF1FD; }
.dp-aguardando { font-size: 11.5px; color: #127C48; font-weight: 600; }

/* ⚠️ O atributo [hidden] tem que ganhar de QUALQUER display.
   Sem isto, uma regra banal como `.dp2-campo-grupo { display: flex }` torna o atributo inerte: o
   elemento continua na tela, e o JS que faz `el.hidden = true` parece nao funcionar. Foi o que
   deixou os campos de CPF e e-mail visiveis ao mesmo tempo no Portal de Dados Pessoais — e antes
   disso ja' tinha custado um remendo pontual (.tt-chat[hidden]) para o mesmo motivo.
   Regra unica em vez de um remendo por componente: o proximo componente nasce certo. */
[hidden] { display: none !important; }

/* ── Barra de ações do rodapé (Portal de Dados Pessoais) ─────────────────────
   Exportar / Gerar relatório / Nova consulta + a nota explicando para que servem. Os três
   botões mantêm a mesma altura e a nota ocupa o espaço que sobra, quebrando para baixo em
   tela estreita em vez de espremer os rótulos. */
/* Fixa no rodapé, com o conteúdo passando por baixo: numa lista de 26 campos as ações saíam da
   tela justamente quando alguém termina de ler e quer exportar ou abrir nova consulta.
   `sticky` em vez de `fixed` de propósito — já nasce com a largura do conteúdo, acompanha o menu
   lateral sem calcular offset, e ocupa o próprio espaço no fim da página, então a última linha
   da tabela nunca fica presa atrás da barra. */
.dp2-acoes {
  position: sticky;
  bottom: 0;
  z-index: 5;
  display: flex; align-items: stretch; gap: 12px; flex-wrap: wrap;
  background: #fff; border: 1px solid #E9EDF4; border-radius: 12px; padding: 12px 14px;
  box-shadow: 0 -6px 18px rgba(13, 42, 94, .07);
}
.dp2-acao {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 12px 20px; border: 1px solid #D8E1F2; border-radius: 9px;
  background: #fff; color: #33445F; font-size: 13px; font-weight: 600;
  text-decoration: none; white-space: nowrap; cursor: pointer;
}
.dp2-acao:hover { background: #F5F8FE; }
/* "Gerar relatório" em azul e "Nova consulta" preenchido em laranja, como no desenho. */
.dp2-acao.azul { color: var(--marca-primaria); border-color: #CBD9F6; }
.dp2-acao.azul:hover { background: #F0F5FF; }
.dp2-acao.acento {
  background: var(--marca-acento); border-color: var(--marca-acento); color: #fff;
}
.dp2-acao.acento:hover { background: #E8590C; border-color: #E8590C; }
.dp2-acoes-nota {
  flex: 1 1 260px; display: flex; align-items: center; gap: 9px;
  padding-left: 14px; border-left: 1px solid #E9EDF4;
  font-size: 12px; color: #5B6E90; line-height: 1.45;
}
@media (max-width: 900px) {
  .dp2-acoes-nota { border-left: 0; padding-left: 0; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Ajustes de 20/08/2026, pedidos do cliente olhando as telas em produção.
   ──────────────────────────────────────────────────────────────────────────── */

/* ⚠️ AQUI FICAVA O TERCEIRO "Chat do DPO", removido em 27/08/2026.
   Em 20/08 o cliente pediu mais área para ler e escrever, e este bloco esticou o widget para
   460×680 com fonte e respiros próprios. Em 27/08 ele pediu o contrário e mais claro: a conversa
   com o Encarregado tem de ser IGUAL à da assistente virtual — "o design, o tamanho, a posição na
   página". O pedido novo vence, e a única forma de as duas ficarem iguais é existir UM tamanho.

   Esse tamanho é o de `.hm-chat`, copiado no bloco lá em cima. Se um dia a conversa precisar de
   mais área, mude `.hm-chat` no home.css e o espelho aqui — nunca só um dos dois. */

/* ── Bloco de análises: menos altura ───────────────────────────────────────────
   Os três painéis (tipo, prazo, tempo médio) ficam grudados na base e comiam a
   área de leitura da lista — que é o conteúdo principal da tela. Aqui eles
   continuam inteiros, só mais baixos: nenhum número saiu. */
.sl-analises { padding: 6px 0 8px; margin-top: 4px; gap: 10px; }
.sl-painel { padding: 10px 12px; }
.sl-painel-tit { font-size: 13px; margin-bottom: 8px; }
.sl-vazio-p { padding: 8px 0; }

/* A rosca é desenhada com width/height no SVG; o CSS reduz sem mexer no viewBox. */
.sl-rosca { gap: 12px; }
.sl-rosca svg { width: 98px; height: 98px; }
.sl-legenda { gap: 4px; }
.sl-legenda div { font-size: 11px; }

.sl-barras { height: 74px; gap: 10px; }
.sl-barras i { margin-top: 4px; font-size: 9.5px; }

.sl-media b { font-size: 28px; }
.sl-media-txt { margin-top: 2px; }
.sl-meta { margin-top: 8px; padding-top: 8px; }
.sl-pct { font-size: 13px; padding: 3px 8px; }

/* ⚠️ A causa real da altura reclamada não era o tamanho de cada painel: abaixo de 1400px eles
   viram UMA COLUNA (regra do desenho, porque o container encolhe) e o bloco — que fica grudado
   no rodapé — passava a ocupar TRÊS alturas empilhadas. Numa tela de 1366px, resolução
   comuníssima, sobrava quase nada para a lista.

   A correção NÃO é forçar três colunas num container estreito (tentado antes: as colunas caíram
   para 59px e os painéis ficaram ilegíveis). É parar de grudar no rodapé exatamente onde ele
   empilha: empilhado, o bloco rola junto com a página e devolve a altura à lista. */
@media (max-width: 1400px) {
  .sl-analises { position: static; box-shadow: none; }
}

/* "Resumo no portal": marcado e não desmarcável — é o único canal que o portal sempre entrega.
   Não usa `.indisponivel` (que esmaece): ele está ATIVO, só não é opcional. */
.nv-op.fixo { cursor: default; }
.nv-op.fixo:hover { border-color: var(--marca-primaria); }

/* Logo do menu numa placa branca: o arquivo é a versão escura da marca (a única não cortada),
   e o menu é azul-escuro. Mesmo tratamento do cabeçalho do /titular. */
.tt-side-logo { padding: 20px 0 10px; }
.tt-side-logo img {
  width: 132px; background: #fff; border-radius: 10px; padding: 8px 12px; box-sizing: border-box;
}

/* ── Conversa com o DPO: área de leitura ampliada (pedido do cliente, 20/08/2026)
   Eram 460px fixos, e a fresta de leitura sobrava com ~330px: numa conversa de
   várias mensagens a pessoa lia por um buraco e rolava a cada duas linhas.

   O painel agora GRUDA e ocupa a janela inteira. Sem o `sticky` ele começava
   200px abaixo do topo (cabeçalho + título da página) e perdia essa faixa; assim
   o título rola para fora e a conversa fica com a tela toda.

   ⚠️ Triplicar em números absolutos não cabe na tela: o teto físico de leitura é
   a janela menos o cabeçalho e o campo de digitar. Numa tela de 900px isso dá
   ~2,2× o que havia; num monitor grande, passa de 3×. Forçar mais que isso só
   empurraria o campo de texto para fora da vista, que é pior que a fresta.

   `dvh` e não `vh` porque no celular a barra do navegador come a última faixa —
   justamente onde fica o campo de texto. */
.dp-conversa {
  position: sticky;
  top: 12px;
  height: calc(100dvh - 24px);
  max-height: 1200px;
}

/* Cabeçalho e rodapé do painel mais enxutos: cada pixel que sai deles entra na
   área de leitura, que é o que a pessoa reclamou. */
.dp-conversa-cab { padding: 11px 16px; }

/* Texto maior e mais arejado: a queixa era de leitura, não só de espaço. */
.dp-fio { padding: 20px; gap: 14px; }
.dp-balao .txt { font-size: 13.5px; line-height: 1.6; }

@media (max-width: 900px) {
  /* Em celular não gruda: com o teclado virtual aberto, painel fixo some por baixo. */
  .dp-conversa { position: static; height: clamp(420px, calc(100dvh - 104px), 1200px); }
}

/* Foto do encarregado no cabeçalho único da conversa — ver o comentário em Dpo.cshtml. */
.dp-cab-foto {
  width: 40px; height: 40px; flex: none; border-radius: 10px; object-fit: cover;
  object-position: top center; display: block; background: #E8F0FE;
}

/* ════════════════════════════════════════════════════════════════════════════
   /Titular/Resposta — réplica do slide 6 do titular.pptx. Prefixo `rs-`.
   Medidas e pesos vieram do print aprovado; quando algo parecer "quase certo",
   o print é a fonte.
   ════════════════════════════════════════════════════════════════════════════ */
.rs-corpo { flex: 1; min-width: 0; padding: 22px 26px 40px; display: flex; flex-direction: column; gap: 16px; }

/* Recado da página (avaliação registrada, "já foi avaliado", erro de anexo). Fica ANTES da trilha,
   no topo do conteúdo: recado no meio da página passa despercebido justamente por quem acabou de
   clicar e está olhando para onde clicou. */
.rs-recado {
  margin-bottom: 14px; padding: 11px 14px; border-radius: 10px;
  background: #EEF5FF; border: 1px solid #C9DDFB; color: #12447E;
  font-size: 12.5px; line-height: 1.5;
}
.rs-recado.alerta { background: #FEF7E8; border-color: #F5DFAE; color: #8A5A00; }

.rs-trilha { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #8A96AB; }
.rs-trilha a { color: #5B6E90; text-decoration: none; }
.rs-trilha a:hover { color: var(--marca-primaria); }
.rs-trilha b { color: var(--marca-primaria); font-weight: 700; }

.rs-titulo { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.rs-titulo h1 {
  margin: 0; font-size: 25px; font-weight: 800; letter-spacing: -.02em; color: #0B2A5E;
  text-wrap: balance;
}
.rs-selo { border-radius: 20px; padding: 4px 12px; font-size: 12px; font-weight: 700; background: #EFF9F3; color: #127C48; }
.rs-selo.aviso { background: #FEF1DF; color: #B36A00; }
.rs-selo.perigo { background: #FDECEA; color: #B3261E; }
.rs-sub { margin: 0; font-size: 13.5px; line-height: 1.6; color: #4B5D80; max-width: 92ch; }

/* Faixa de identificação: seis colunas no desenho, quebrando conforme a largura. */
.rs-faixa {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 14px 20px;
  background: #fff; border: 1px solid #E4EAF3; border-radius: 12px; padding: 15px 18px;
}
.rs-faixa span { display: block; font-size: 11px; font-weight: 600; color: #2E6BF6; margin-bottom: 3px; }
.rs-faixa b { display: block; font-size: 13.5px; font-weight: 700; color: #0B1B3A; word-break: break-word; }
.rs-status { display: flex; align-items: center; gap: 6px; color: #127C48 !important; }
.rs-status.aviso { color: #B36A00 !important; }
.rs-status.perigo { color: #B3261E !important; }

.rs-bloco {
  background: #fff; border: 1px solid #E4EAF3; border-radius: 12px; padding: 20px 22px;
}
.rs-bloco h2 { margin: 0 0 14px; font-size: 17px; font-weight: 800; color: #0B2A5E; }
.rs-h2-sens { margin-top: 22px !important; }

.rs-duas { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px 40px; }
.rs-duas > section { min-width: 0; }

/* Rótulo azul à esquerda e valor à direita, como no print. `dl` porque é literalmente
   uma lista de termo e definição — e leitor de tela anuncia o par. */
.rs-lista { margin: 0; display: flex; flex-direction: column; gap: 9px; }
.rs-lista > div { display: grid; grid-template-columns: minmax(0, 200px) minmax(0, 1fr); gap: 12px; align-items: start; }
.rs-lista dt { font-size: 12.5px; font-weight: 500; color: #2E6BF6; }
.rs-lista dd { margin: 0; font-size: 12.5px; font-weight: 600; color: #12275A; word-break: break-word; }
.rs-lista dd i { display: block; font-style: normal; font-size: 11px; font-weight: 400; color: #8A96AB; margin-top: 2px; }
.rs-vazio { margin: 0; font-size: 12.5px; line-height: 1.55; color: #8A96AB; }

.rs-parecer { margin: 0; font-size: 13px; line-height: 1.7; color: #2B4368; white-space: pre-line; }

.rs-espera b { display: block; font-size: 16px; font-weight: 800; color: #0B2A5E; margin-bottom: 8px; }
.rs-espera p { margin: 0; font-size: 13px; line-height: 1.65; color: #4B5D80; }

/* ── Avaliação: nota à esquerda, comentário no meio, botão à direita ───────── */
.rs-aval-form { display: grid; grid-template-columns: minmax(0, 320px) minmax(0, 1fr) auto; gap: 24px; align-items: start; }
.rs-avaliacao h2 { margin-bottom: 6px; }
.rs-aval-txt p { margin: 0 0 14px; font-size: 12.5px; color: #5B6E90; }
.rs-aval-rot { display: block; font-size: 12px; font-weight: 600; color: #33445F; margin-bottom: 8px; }

.rs-notas { display: flex; gap: 10px; flex-wrap: wrap; }
.rs-nota input { position: absolute; opacity: 0; width: 0; height: 0; }
.rs-nota span {
  display: flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 50%; border: 1.6px solid #C6D6F5;
  font-size: 13px; font-weight: 700; color: var(--marca-primaria); cursor: pointer;
  font-variant-numeric: tabular-nums; transition: background .12s ease, border-color .12s ease;
}
.rs-nota span:hover { background: #EDF4FF; }
.rs-nota input:checked + span { background: var(--marca-primaria); border-color: var(--marca-primaria); color: #fff; }
.rs-nota input:focus-visible + span { outline: 2px solid var(--marca-acento); outline-offset: 2px; }

.rs-aval-coment-campo textarea {
  width: 100%; box-sizing: border-box; border: 1px solid #DFE6F2; border-radius: 9px;
  padding: 11px 13px; font-family: inherit; font-size: 12.5px; line-height: 1.55; color: #12275A;
  resize: vertical; min-height: 92px;
}
.rs-aval-coment-campo textarea:focus { outline: none; border-color: var(--marca-primaria); }
.rs-aval-acao { display: flex; align-items: flex-end; height: 100%; }
.rs-aval-coment { margin: 8px 0 0; font-size: 12.5px; font-style: italic; color: #5B6E90; }

/* ── Rodapé de ações ──────────────────────────────────────────────────────── */
.rs-acoes { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 4px; }
.rs-espaco { flex: 1; }
.rs-btn, a.rs-btn, body.le-titular a.rs-btn {
  display: inline-flex; align-items: center; gap: 9px; border: 0; border-radius: 10px;
  background: var(--marca-primaria); color: #fff; text-decoration: none;
  font-family: inherit; font-size: 13.5px; font-weight: 700; padding: 13px 20px; cursor: pointer;
}
.rs-btn:hover, body.le-titular a.rs-btn:hover { background: #093AB9; color: #fff; }
.rs-btn-claro, a.rs-btn-claro, body.le-titular a.rs-btn-claro {
  display: inline-flex; align-items: center; gap: 9px; border: 1px solid #C6D6F5; border-radius: 10px;
  background: #fff; color: #33445F; text-decoration: none;
  font-family: inherit; font-size: 13.5px; font-weight: 600; padding: 12px 18px; cursor: pointer;
}
.rs-btn-claro:hover, body.le-titular a.rs-btn-claro:hover { background: #F4F8FF; color: var(--marca-primaria); }

@media (max-width: 1200px) {
  .rs-faixa { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .rs-aval-form { grid-template-columns: 1fr; }
  .rs-aval-acao { justify-content: flex-start; }
}
@media (max-width: 900px) {
  .rs-corpo { padding: 16px 14px 32px; }
  .rs-duas { grid-template-columns: 1fr; gap: 22px; }
  .rs-faixa { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rs-lista > div { grid-template-columns: 1fr; gap: 1px; }
}

/* Painel de detalhes acende ao ser selecionado. A âncora `#detalhe` já leva o olho até ele;
   o realce diz que o clique na linha produziu ESTE resultado — sem isso a página recarregava
   praticamente igual e parecia que nada tinha acontecido. */
.sl-dir:target > .sl-painel:first-child { border-color: var(--marca-primaria); }

/* ⚠️ O badge flutuante do chat fica no canto inferior direito — exatamente onde o rodapé desta
   tela põe "Baixar meus dados (zip)", e ele cobria o botão.

   Duas coisas juntas, porque uma só não basta: o badge sobe para acima da linha de ações, e o
   conteúdo ganha um respiro no pé para nada mais terminar embaixo dele. Só subir o badge
   resolveria enquanto a página tivesse este tamanho; só o respiro o deixaria pairando sobre
   espaço vazio, ainda no caminho do olho de quem procura o botão. */
body.le-titular .rs-corpo { padding-bottom: 96px; }
body.le-titular:has(.rs-corpo) .tt-chat-abrir { bottom: 104px; }

@media (max-width: 900px) {
  body.le-titular .rs-corpo { padding-bottom: 84px; }
  body.le-titular:has(.rs-corpo) .tt-chat-abrir { bottom: 92px; }
}

/* Campo de CPF recusado: a borda diz ONDE e o .dp2-msg diz O QUÊ. Sem a borda, o aviso fica
   solto embaixo de um formulário longo e não se sabe de qual campo ele fala. */
.dp2-campo-grupo.invalido .dp2-input { border-color: #E4867E; background: #FFFBFB; }
.dp2-campo-grupo.invalido .dp2-input:focus { border-color: #C42D25; }

/* ===== Espera do "Gerar relatório" ===== */
.rel-espera {
  position: fixed; inset: 0; z-index: 300; display: flex; align-items: center; justify-content: center;
  background: rgba(11, 26, 46, .45); backdrop-filter: blur(2px);
}
.rel-espera[hidden] { display: none; }
.rel-espera-caixa {
  background: #fff; border-radius: 14px; padding: 26px 30px 22px; text-align: center;
  box-shadow: 0 18px 50px rgba(11, 26, 46, .22); min-width: 268px;
}
.rel-espera-caixa b { display: block; margin-top: 14px; font-size: 15px; color: #12275A; }
.rel-espera-caixa span { display: block; margin-top: 4px; font-size: 12.5px; color: #5B6E90; }

/* As barras crescem em alturas diferentes e em tempos diferentes — um gráfico sendo montado, e
   não uma barra de progresso que promete uma porcentagem que ninguém está medindo. */
.rel-barra { display: flex; align-items: flex-end; justify-content: center; gap: 7px; height: 62px; }
.rel-barra i {
  width: 13px; border-radius: 4px 4px 2px 2px; background: linear-gradient(180deg, #4E8CF7, #1152F0);
  animation: relSobe 1.25s ease-in-out infinite;
}
.rel-barra i:nth-child(1) { height: 34%; animation-delay: 0s; }
.rel-barra i:nth-child(2) { height: 62%; animation-delay: .12s; }
.rel-barra i:nth-child(3) { height: 45%; animation-delay: .24s; }
.rel-barra i:nth-child(4) { height: 82%; animation-delay: .36s; }
.rel-barra i:nth-child(5) { height: 55%; animation-delay: .48s; }
@keyframes relSobe {
  0%, 100% { transform: scaleY(.35); opacity: .55; }
  50%      { transform: scaleY(1);   opacity: 1; }
}
.rel-barra i { transform-origin: bottom; }

/* Quem pediu menos movimento vê as barras paradas, sem perder o aviso de que algo está em curso. */
@media (prefers-reduced-motion: reduce) {
  .rel-barra i { animation: none; opacity: .85; }
}

/* ── Painéis do resumo: aproximar com o cursor ────────────────────────────────────────────────
   Pedido de 24/08/2026. Os três painéis ("por tipo", "cumprimento de prazo", "tempo médio")
   moram num rodapé fixo e ficam pequenos; o cursor em cima aproxima o que a pessoa está lendo.

   ⚠️ No FIM do arquivo de propósito: `.sl-painel` é declarado duas vezes aqui (linha ~1248 e
   ~2075, a segunda mais compacta), e regra de mesma especificidade que vem depois vence. Escrever
   isto junto da primeira faria a segunda desfazer metade — a armadilha da folha duplicada.

   ⚠️ `position: relative` + `z-index`: sem eles o painel ampliado passa POR BAIXO dos vizinhos e
   o efeito vira um recorte estranho no meio da linha.

   ⚠️ Só onde existe cursor de verdade (`hover: hover`). No celular, `:hover` gruda no último
   elemento tocado e o painel ficaria ampliado sozinho depois do toque, sem jeito de desfazer. */
@media (hover: hover) and (pointer: fine) {
  .sl-painel {
    position: relative;
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
    transform-origin: center;
  }

  .sl-painel:hover,
  .sl-painel:focus-within {
    transform: scale(1.06);
    z-index: 6;
    border-color: #C9D9F5;
    box-shadow: 0 14px 30px -10px rgba(11, 42, 94, .28);
  }
}

/* Quem pediu menos movimento continua tendo o destaque — só sem o salto de escala. */
@media (prefers-reduced-motion: reduce) {
  .sl-painel { transition: none; }
  .sl-painel:hover, .sl-painel:focus-within { transform: none; }
}

/* ── Direitos: sem o botão flutuante do chat ──────────────────────────────────────────────────
   Pedido de 24/08/2026. Esta tela já traz o cartão "Fale com o DPO" com o botão "Abrir chat", e
   o botão redondo no canto oferecia a MESMA coisa a dois palmos dele — duas portas para a mesma
   sala, e a pessoa parando para descobrir a diferença entre elas.

   ⚠️ OCULTO POR CSS, e não removido do HTML. O `chat-dpo.js` desiste logo na entrada quando não
   encontra `[data-chat-abrir]`:
       var abrir = document.querySelector('[data-chat-abrir]');
       if (!painel || !abrir) { return; }
   Tirar o botão do DOM mataria o chat INTEIRO nesta página — inclusive o "Abrir chat" do cartão
   e a abertura automática por `?chat=1`, que é justamente o endereço deste pedido. Escondido, o
   elemento continua existindo e o script segue funcionando; e o `abrir.style.display = ''` que
   ele faz ao fechar devolve o controle a esta regra, que o mantém escondido.

   ⚠️ A regra é GERAL, e não uma linha por tela: vale onde a página já tem a própria porta para o
   chat — `[data-chat-abrir-bloco]` (Direitos, Nova, Solicitações) ou `.rs-corpo` (a resposta, cujo
   "Falar com o DPO" usa o mesmo `data-chat-abrir`). Escrever uma exceção por endereço faria a
   próxima tela nascer com as duas portas de novo, e ninguém lembraria por quê. */
body.le-titular:has([data-chat-abrir-bloco]) .tt-chat-abrir,
body.le-titular:has(.rs-corpo) .tt-chat-abrir { display: none !important; }

/* ── Chat congelado: protocolo encerrado ──────────────────────────────────────────────────────
   O histórico continua na tela; o que sai é o campo de escrever. A conversa é a prova do
   atendimento — some justamente quando a pessoa mais quer reler o que foi respondido. */
.tt-chat-congelado {
  display: flex; flex-direction: column; gap: 6px;
  margin: 0 0 10px; padding: 10px 12px;
  background: #F6F8FC; border: 1px solid #E1E7F2; border-radius: 10px;
  font-size: 11.5px; line-height: 1.5; color: #5B6E90;
}
.tt-chat-congelado a { align-self: flex-start; font-size: 11.5px; font-weight: 700; color: #0B3FBF; }

/* ── Conversa com o titular na tela de atendimento (/dpo/Atender) ─────────────────────────────
   O painel reaproveita `.tt-chat` inteiro — mesmo desenho do widget das outras telas. Aqui só o
   que o contexto do DPO exige.

   ⚠️ `z-index` acima do da casca do DPO: `.tt-chat` nasce com 90, e o cabeçalho fixo do /dpo
   passava por cima do topo do painel. */
.dsr-chat-flutuante { z-index: 120; }

/* Sem avatar neste painel: quem fala é o encarregado logado, e a foto do DPO ao lado do nome do
   TITULAR faria parecer que a conversa é com outra pessoa. */
.dsr-chat-flutuante .tt-chat-topo { padding-left: 16px; }

/* O campo de envio aqui é um <form> comum (POST), não o input do widget. Alinha igual. */
.dsr-chat-flutuante .tt-chat-campo button { flex: none; }

/* ── Escolas dentro de uma marca (/dpo/Marca) ─────────────────────────────────────────────────
   Abre embaixo da linha da marca, e só da marca pedida: com 12.000 escolas na rede, desenhar
   todas as listas de uma vez é a mesma "tela que não abre" que o N+1 causava. */
.em-escolas {
  background: #F7F9FD; border: 1px solid #E4EAF5; border-top: 0;
  border-radius: 0 0 11px 11px; padding: 14px 16px; margin: -6px 0 12px;
}
.em-escolas-topo { display: flex; flex-wrap: wrap; gap: 12px; justify-content: space-between; margin-bottom: 10px; }
.em-buscar { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.em-buscar input[type="search"] {
  width: min(340px, 60vw); padding: 7px 11px; font-family: inherit; font-size: 13px;
  border: 1px solid #D5DFF0; border-radius: 8px; background: #fff; color: #23324E;
}
.em-buscar input[type="file"] { font-size: 11.5px; max-width: 240px; }

.em-escolas-lista { display: flex; flex-direction: column; gap: 1px; background: #E4EAF5; border-radius: 9px; overflow: hidden; }
.em-escola {
  display: flex; align-items: center; gap: 14px; justify-content: space-between;
  background: #fff; padding: 9px 12px; flex-wrap: wrap;
}
.em-escola b { display: block; font-size: 13.5px; color: #12275A; }
.em-escola i { font-style: normal; font-size: 11px; color: #8A96AB; }

/* Botão da marca aberta: fica marcado, senão não há como saber qual lista está na tela. */
.em-btn-mini.aceso { background: #E4EEFE; border-color: #B9D0F8; color: #0B3FBF; }

/* ── "Não resolveu? Falar com o DPO" ──────────────────────────────────────────────────────────
   Linha fixa no pé do chat enquanto quem responde é o assistente. Discreta de propósito: ela é
   uma saída, não uma chamada para ação — quem está satisfeito com a resposta não deve ser
   empurrado para o Encarregado, e quem não está precisa achar o caminho sem procurar. */
.tt-chat-humano {
  display: flex; align-items: center; gap: 8px; margin-bottom: 9px;
  font-size: 11.5px; color: #6B7A93;
}
.tt-chat-humano button {
  border: 1px solid #C6D6F5; background: #F5F8FD; border-radius: 8px; padding: 5px 10px;
  font-family: inherit; font-size: 11px; font-weight: 700; color: #0B45DD; cursor: pointer;
}
.tt-chat-humano button:hover { background: #E9F0FC; border-color: #A9C2EE; }
.tt-chat-humano button:focus-visible { outline: 2px solid #0B45DD; outline-offset: 1px; }

/* Estado depois do pedido: some o botão, entra o aviso de que há gente a caminho. Sem ele, a
   tela fica igual à de antes e a pessoa não sabe se o pedido foi registrado. */
.tt-chat-esperando {
  display: flex; align-items: center; gap: 7px; margin-bottom: 9px;
  font-size: 11.5px; color: #17553B; background: #E7F3EC; border: 1px solid #BFE0CC;
  border-radius: 8px; padding: 6px 10px; line-height: 1.35;
}
.tt-chat-esperando .ponto {
  width: 7px; height: 7px; border-radius: 50%; background: #17A05A; flex: none;
}

/* ── Avisos no navegador (ver Pages/Shared/_Avisos.cshtml) ─────────────────── */
.tt-avisos .le-btn-claro { align-self: flex-start; margin-top: 12px; cursor: pointer; }
.tt-avisos .le-btn-claro[disabled] { opacity: .55; cursor: default; }
.tt-avisos-estado { margin-top: 10px; font-size: 13px; color: var(--le-apoio, #5D7092); }
.tt-avisos-estado.ok { color: #127C48; font-weight: 600; }
.tt-avisos-estado.fraco { color: #8A96AB; }

/* Caminho extra que a casca pode pôr no rodapé do chat — na escola, "Abrir chat completo".
   Fica discreto de propósito: é saída, não a ação principal do widget. */
a.tt-chat-link {
  display: inline-block; margin-top: 9px;
  font-size: 11.5px; font-weight: 700; color: var(--marca-primaria, #0B45DD); text-decoration: none;
}
a.tt-chat-link:hover { text-decoration: underline; }

/* ⚠️ AQUI FICAVA `.ct-chat`, que reposicionava o widget no canto inferior ESQUERDO e trocava o
   rodapé. Saiu em 28/08/2026: o pedido foi que a conversa da escola fosse IDÊNTICA à do titular,
   e a casca do controlador passou a incluir o mesmo `_ChatDpo`. As regras que sobrarem com esse
   prefixo pertencem ao BOTÃO da barra lateral (`.ct-chat-abrir`), que continua sendo dela. */

/* ── Filtros da lista de titulares ─────────────────────────────────────────────────────────
   Grade, e não uma linha de flex: com seis campos em flex-wrap, a última linha sobra com um
   campo esticado na largura toda e o formulário fica torto. `auto-fit` com mínimo em ch faz
   as colunas caberem no espaço que houver, do notebook ao monitor grande. */
.tl-filtros { flex-direction: column; align-items: stretch; gap: 12px; }

.tl-campos {
  display: grid; gap: 10px 12px;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}

.tl-campo { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.tl-campo > span { font-size: 11.5px; font-weight: 600; color: #5A6B88; letter-spacing: .01em; }

.tl-campo input, .tl-campo .tl-sel {
  width: 100%; box-sizing: border-box;
  border: 1px solid #E1E7F0; border-radius: 9px; padding: 10px 12px; background: #fff;
  font-family: inherit; font-size: 13px; color: #12275A; outline: none;
}

.tl-campo input:focus, .tl-campo .tl-sel:focus { border-color: #9DB8E8; box-shadow: 0 0 0 3px #E8F0FD; }
.tl-campo input::placeholder { color: #A9B5C9; }

.tl-acoes { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

.tl-btn-filtrar {
  display: inline-flex; align-items: center; gap: 8px; border: 0; cursor: pointer;
  background: var(--marca-primaria, #0B45DD); color: #fff; border-radius: 9px;
  padding: 10px 18px; font-family: inherit; font-size: 13px; font-weight: 600;
}

.tl-btn-filtrar:hover { filter: brightness(1.07); }

/* A casca do DPO pinta os links da lateral; sem isto o "Limpar filtros" herdava a cor dela. */
body.le-dpo .tl-btn-claro, body.le-dpo a.tl-btn-claro { background: #fff; color: #33445F; }
body.le-dpo a.tl-btn-claro:hover { background: #F5F8FD; color: #33445F; }

/* ── Sino do titular e badge do menu ────────────────────────────────────────────────────────
   Só aparecem com contagem real — ver o comentário no _TitularLayout. */
.tt-bar-sino {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; flex: none; border-radius: 10px;
  background: rgba(255,255,255,.16); color: #fff; text-decoration: none;
}
.tt-bar-sino:hover { background: rgba(255,255,255,.26); color: #fff; }

.tt-bar-badge {
  position: absolute; top: -4px; right: -4px; min-width: 18px; height: 18px; padding: 0 5px;
  display: flex; align-items: center; justify-content: center; box-sizing: border-box;
  border-radius: 20px; background: #E5484D; color: #fff; border: 2px solid #12275A;
  font-style: normal; font-size: 10.5px; font-weight: 800; line-height: 1;
}

.tt-nav-item { position: relative; }

.tt-nav-badge {
  margin-left: auto; min-width: 20px; height: 19px; padding: 0 6px;
  display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
  border-radius: 20px; background: #E5484D; color: #fff;
  font-style: normal; font-size: 10.5px; font-weight: 800; line-height: 1;
}

/* ── Ficha do titular (modal servido pelo servidor) ─────────────────────────────────────────
   Sem JavaScript: a CSP do projeto proíbe script inline, e um modal que dependesse de script
   simplesmente não abriria. Quem decide se ele existe é o `?ver=` na URL. */
.tl-ok {
  display: flex; align-items: flex-start; gap: 9px;
  padding: 10px 13px; border-radius: 9px; font-size: 12.5px; line-height: 1.55;
  background: #F2F8F4; border: 1px solid #CBE5D5; color: #2C5F45;
}

.tl-modal-fundo {
  position: fixed; inset: 0; z-index: 90;
  display: flex; align-items: center; justify-content: center; padding: 24px;
  background: rgba(12, 24, 51, .45);
}

/* O fundo inteiro é um link de fechar: clicar fora é o primeiro gesto de qualquer pessoa, e
   sem script esta é a única forma de tê-lo. Fica ATRÁS do cartão. */
.tl-modal-sair { position: absolute; inset: 0; display: block; }

.tl-modal {
  position: relative; z-index: 1;
  width: min(760px, 100%); max-height: calc(100vh - 48px);
  display: flex; flex-direction: column;
  background: #fff; border-radius: 14px; overflow: hidden;
  box-shadow: 0 24px 60px rgba(10, 22, 50, .32);
}

.tl-modal-cab {
  display: flex; align-items: center; gap: 13px; flex: none;
  padding: 16px 18px; border-bottom: 1px solid #EDF1F7; background: #FAFCFF;
}
.tl-modal-cab b { display: block; font-size: 15.5px; color: #0B2A5E; word-break: break-word; }
.tl-modal-cab i { display: block; margin-top: 2px; font-style: normal; font-size: 12px; color: #7A879E; word-break: break-word; }

.tl-av.grande { width: 42px; height: 42px; flex: none; font-size: 14px; }

.tl-modal-x {
  margin-left: auto; flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 8px; color: #66748C; text-decoration: none;
}
.tl-modal-x:hover { background: #EEF2F8; color: #17325E; }

/* `min-height: 0` junto com o flex do pai: sem ele o corpo não encolhe e a página inteira é
   que rola — o cabeçalho e o rodapé do modal saem da tela. */
.tl-modal-corpo { flex: 1; min-height: 0; overflow-y: auto; padding: 16px 18px; }

.tl-receita {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 13px 15px; border-radius: 11px; margin-bottom: 16px;
  border: 1px solid #EADFC6; background: #FBF9F3;
}
.tl-receita.on { border-color: #CBE5D5; background: #F2F8F4; }

.tl-receita-txt { flex: 1; min-width: 220px; }
.tl-receita-txt b { display: block; font-size: 13.5px; color: #4A3B18; }
.tl-receita.on .tl-receita-txt b { color: #22503A; }
.tl-receita-txt i { display: block; margin-top: 4px; font-style: normal; font-size: 12px; line-height: 1.55; color: #6B5426; }
.tl-receita.on .tl-receita-txt i { color: #3D6B53; }

.tl-receita-btn {
  flex: none; cursor: pointer; border: 0; border-radius: 9px; padding: 10px 16px;
  font-family: inherit; font-size: 12.5px; font-weight: 600; color: #fff; background: #1F7A4C;
}
/* Marcado, o botão DESMARCA — e desmarcar devolve a pessoa ao primeiro acesso inteiro. O peso
   visual muda junto com a consequência. */
.tl-receita.on .tl-receita-btn { background: #fff; color: #8A3A3A; border: 1px solid #EFD2D2; }
.tl-receita-btn:hover { filter: brightness(1.08); }
.tl-receita.on .tl-receita-btn:hover { background: #FDF4F4; filter: none; }

.tl-grupo { margin-bottom: 14px; }
.tl-grupo-tit {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
  color: #7A879E; padding-bottom: 7px; border-bottom: 1px solid #EDF1F7; margin-bottom: 4px;
}

.tl-campos-ficha { margin: 0; }
.tl-campos-ficha > div {
  display: grid; grid-template-columns: minmax(150px, .8fr) minmax(0, 1.6fr);
  gap: 12px; padding: 8px 2px; border-bottom: 1px solid #F5F7FB;
}
.tl-campos-ficha > div:last-child { border-bottom: 0; }
.tl-campos-ficha dt { font-size: 12.5px; color: #7A879E; }
.tl-campos-ficha dd { margin: 0; font-size: 13px; color: #17325E; font-weight: 600; word-break: break-word; }
/* Vazio aparece como "—", e não some: saber que a escola NÃO tem aquele dado é resposta. */
.tl-campos-ficha dd.vazio { color: #B4BECD; font-weight: 500; }

.tl-modal-pe {
  flex: none; display: flex; justify-content: flex-end;
  padding: 13px 18px; border-top: 1px solid #EDF1F7; background: #FAFCFF;
}

@media (max-width: 620px) {
  .tl-modal-fundo { padding: 0; align-items: stretch; }
  .tl-modal { width: 100%; max-height: 100vh; border-radius: 0; }
  .tl-campos-ficha > div { grid-template-columns: 1fr; gap: 2px; }
}

/* Solicitação encerrada: "Falar com o DPO" vira um <details> que revela o recado em vez de abrir
   conversa. Ver AreaTitular/Resposta.cshtml — é HTML puro porque a CSP é `script-src 'self'` e o
   recado não merece um arquivo de script. */
.rs-chat-fim { position: relative; }
.rs-chat-fim > summary {
  list-style: none; cursor: pointer;
  display: inline-flex; align-items: center; gap: 8px;
}
.rs-chat-fim > summary::-webkit-details-marker { display: none; }
.rs-chat-fim > summary::marker { content: ""; }
.rs-chat-fim-recado {
  margin-top: 10px; padding: 12px 14px;
  background: #FFF6E8; border: 1px solid #F2DDB4; border-radius: 10px;
  font-size: 13px; line-height: 1.55; color: #7A5A12; max-width: 420px;
}
.rs-chat-fim-recado b { display: block; color: #5E4409; margin-bottom: 2px; }

/* ── Badge de mensagem nova no "Falar com o DPO" ─────────────────────────────────────────────
   Mesmo número do sino da barra, pintado pelo titular-aviso.js. Ver a nota lá: uma fonte só. */
.rs-badge-chat {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 17px; height: 17px; padding: 0 5px; margin-left: 7px;
    border-radius: 9px; background: #DC2626; color: #fff;
    font: 600 10.5px/1 Poppins, sans-serif; font-style: normal;
    vertical-align: 1px;
}
.rs-badge-chat[hidden] { display: none; }

/* ── Encerrar / reabrir a conversa (05/09/2026) ───────────────────────────────────────────────
   Duas peças do rodapé do widget, uma de cada vez: com a conversa ativa aparece "Encerrar
   chamada"; encerrada, o campo de escrever some e entra "Abrir conversa".

   ⚠️ `.tt-chat-estado` é PRIMO de `.tt-chat-congelado`, não sinônimo: aquele é o protocolo
   encerrado (sem volta, o caminho é abrir outra solicitação), este é reversível pelos dois lados.
   Cores diferentes de propósito — verde-acinzentado para "terminou bem", e não o cinza de aviso. */
.tt-chat-estado {
  display: flex; flex-direction: column; gap: 8px; align-items: flex-start;
  margin: 0 0 10px; padding: 10px 12px;
  background: #F1F6F3; border: 1px solid #CFE3D8; border-radius: 10px;
  font-size: 11.5px; line-height: 1.5; color: #35604B;
}
.tt-chat-estado button {
  border: 1px solid #0B45DD; background: #0B45DD; border-radius: 8px; padding: 6px 12px;
  font-family: inherit; font-size: 11px; font-weight: 700; color: #fff; cursor: pointer;
}
.tt-chat-estado button:hover { background: #0A3AB8; border-color: #0A3AB8; }
.tt-chat-estado button:focus-visible { outline: 2px solid #0B45DD; outline-offset: 2px; }

.tt-chat-fim { display: flex; justify-content: flex-end; margin: 8px 0 2px; }
.tt-chat-fim button {
  border: 1px solid #E4D2D0; background: #FFF8F7; border-radius: 8px; padding: 5px 10px;
  font-family: inherit; font-size: 10.5px; font-weight: 700; color: #A8443C; cursor: pointer;
}
.tt-chat-fim button:hover { background: #FDEDEB; border-color: #F2C3BE; }
.tt-chat-fim button:focus-visible { outline: 2px solid #C42D25; outline-offset: 1px; }

/* A pergunta "posso encerrar?" que vem depois de cada resposta do Encarregado. Mesmo desenho da
   pergunta "resolveu?" — é o mesmo lugar do fio, e duas gramáticas visuais ali confundiriam. */
.tt-chat-encerrar-sim {
  border: 1px solid #B7E3CB; background: #F1FAF5; border-radius: 8px; padding: 6px 11px;
  font-family: inherit; font-size: 11px; font-weight: 700; color: #127C48; cursor: pointer;
}
.tt-chat-encerrar-nao {
  border: 1px solid #D8DFEA; background: #F7F9FC; border-radius: 8px; padding: 6px 11px;
  font-family: inherit; font-size: 11px; font-weight: 700; color: #5B6E90; cursor: pointer;
}

/* ── "Outros dados pessoais" com MUITOS campos (06/09/2026) ───────────────────────────────────
   Blocos de 10 linhas lado a lado, embrulhando conforme a largura. O corte de 10 é feito no
   servidor (ver Resposta.cshtml): `column-count` distribuiria por ALTURA, e um valor longo faria
   uma coluna com 7 linhas ao lado de outra com 13 — o pedido é contagem, não altura.

   `flex: 1 1 300px` e não largura fixa: com 12 campos são duas colunas confortáveis; com 60, o
   navegador acomoda quantas couberem, e no celular vira uma só. O objetivo é o titular ver o
   extrato inteiro sem rolar. */
.rs-colunas { display: flex; flex-wrap: wrap; gap: 22px 40px; align-items: flex-start; }
.rs-colunas > .rs-lista { flex: 1 1 300px; min-width: 0; }

/* ════════════════════════════════════════════════════════════════════════════
   Correção de dados (art. 18, III) — etapas 1 e 2. Prefixo `cor-`.
   ════════════════════════════════════════════════════════════════════════════ */

.cor-corpo { padding: 26px 34px 60px; display: flex; flex-direction: column; gap: 16px; }

.cor-migalha { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #7A88A8; }
.cor-migalha b { color: #12275A; }

.cor-saudacao {
  display: flex; align-items: flex-start; gap: 14px;
  background: #fff; border: 1px solid #E1E8F7; border-radius: 14px; padding: 16px 18px;
}
.cor-saudacao-ic {
  width: 40px; height: 40px; border-radius: 11px; flex: none;
  background: var(--marca-primaria); display: flex; align-items: center; justify-content: center;
}
.cor-saudacao b { display: block; font-size: 15px; color: #12275A; margin-bottom: 3px; }
.cor-saudacao p { margin: 0; font-size: 12.5px; color: #64769A; line-height: 1.55; }

.cor-h1 { margin: 4px 0 0; font-size: 25px; font-weight: 800; color: #12275A; letter-spacing: -.02em; }

/* ── Trilho das etapas ── */
.cor-passos { list-style: none; margin: 0; padding: 0; display: flex; gap: 10px; flex-wrap: wrap; }
.cor-passos li { display: flex; align-items: center; gap: 10px; flex: 1 1 220px; min-width: 0; }
.cor-passos li + li::before {
  content: ""; height: 1px; background: #D8E1F4; flex: 1; min-width: 20px; margin-right: 4px;
}
.cor-passo-n {
  width: 26px; height: 26px; border-radius: 50%; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; background: #E7ECF7; color: #8A96AB;
}
.cor-passos .atual .cor-passo-n { background: var(--marca-primaria); color: #fff; }
.cor-passos .feito .cor-passo-n { background: #17A05A; color: #fff; }
.cor-passos b { display: block; font-size: 12.5px; color: #8A96AB; }
.cor-passos .atual b, .cor-passos .feito b { color: #12275A; }
.cor-passos i { font-style: normal; font-size: 11px; color: #96A2BA; }

.cor-aviso { border-radius: 11px; padding: 11px 14px; font-size: 12.5px; font-weight: 600; }
.cor-aviso.ok { background: #ECFAF2; border: 1px solid #17A05A; color: #0E7A45; }
.cor-aviso.erro { background: #FDECEF; border: 1px solid #C2334D; color: #A3283E; }

/* ── Grade ── */
.cor-grade { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 16px; align-items: start; }
.cor-col { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
@media (max-width: 1080px) { .cor-grade { grid-template-columns: minmax(0, 1fr); } }

.cor-info {
  display: flex; gap: 12px; background: #EEF3FE; border: 1px solid #D6E2FB;
  border-radius: 13px; padding: 14px 16px;
}
.cor-info-ic { flex: none; margin-top: 2px; }
.cor-info b { display: block; font-size: 13px; color: #12275A; margin-bottom: 4px; }
.cor-info p { margin: 0 0 5px; font-size: 12.5px; color: #4A5D82; line-height: 1.6; }
.cor-info p:last-child { margin-bottom: 0; }

.cor-card { background: #fff; border: 1px solid #E1E8F7; border-radius: 14px; padding: 17px 19px; }
.cor-card h2 { margin: 0 0 12px; font-size: 14.5px; font-weight: 700; color: #12275A; }
.cor-sub { margin: -6px 0 12px; font-size: 12px; color: #7A88A8; line-height: 1.6; }
.cor-dupla { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; }

.cor-ident { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; }
.cor-ident span { display: block; font-size: 10.5px; color: #8A96AB; margin-bottom: 2px; }
.cor-ident b { font-size: 13px; color: #12275A; word-break: break-word; }

/* ── Legenda e selos ── */
.cor-legenda { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 12px; }
.cor-selo {
  display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
  padding: 4px 10px; border-radius: 999px; font-size: 10.5px; font-weight: 700;
}
.cor-selo::before { content: "●"; font-size: 8px; }
.cor-ok { background: #E7F6EE; color: #0E7A45; }
.cor-doc { background: #E4EEFE; color: #1152F0; }
.cor-prot { background: #F1F3F7; color: #64769A; }
.cor-prot::before { content: "🔒"; font-size: 9px; }
.cor-novo { background: #FEF1DF; color: #A56A12; }

.cor-btn-add {
  margin-left: auto; background: #fff; border: 1px solid var(--marca-primaria);
  color: var(--marca-primaria); border-radius: 9px; padding: 7px 13px;
  font-family: inherit; font-size: 12px; font-weight: 700; cursor: pointer;
}
.cor-btn-add:hover { background: #EEF3FE; }

/* ── Tabela do extrato ── */
.cor-tabela-rola { overflow-x: auto; }
.cor-tabela { width: 100%; border-collapse: collapse; font-size: 12px; }
.cor-tabela th {
  text-align: left; padding: 6px 10px; border-bottom: 1px solid #E1E8F7;
  font-size: 10.5px; font-weight: 700; color: #64769A; white-space: nowrap;
}
.cor-tabela th i { display: block; font-style: normal; font-size: 9.5px; color: #A3AEC4; font-weight: 500; }
/* ⚠️ LINHAS APERTADAS (07/09/2026, pedido do dono: "tirar o espaço entre linhas para ganhar
   mais espaço na página"). São dez campos: cada 4px de folga aqui vira 40px de rolagem lá.
   O respiro que sobra é o que separa uma linha da outra — abaixo disto os campos encostam e
   a pessoa perde de vista em que linha está digitando. */
.cor-tabela td { padding: 4px 10px; border-bottom: 1px solid #F1F5FC; color: #33445F; vertical-align: middle; }
.cor-campo { font-weight: 700; color: #12275A; white-space: nowrap; }
.cor-atual { color: #4A5D82; }
/* ⚠️ Cinza e em itálico: é a marca de que o portal NÃO tem esse dado — nunca um valor. */
.cor-atual.vazio { color: #A3AEC4; font-style: italic; }
.cor-linha-nova { background: #FFFBF3; }
.cor-tracinho { color: #C2CADA; }

.cor-tabela input[type=text], .cor-tabela textarea {
  width: 100%; min-width: 190px; box-sizing: border-box; background: #fff;
  border: 1px solid #DFE6F2; border-radius: 8px; padding: 6px 9px;
  font-family: inherit; font-size: 12px; color: #12275A; resize: vertical;
}
/* A caixa de divergência abre com UMA linha e cresce ao arrastar. `display: block` tira os
   ~4px que o navegador reserva embaixo de todo elemento em linha — de longe parecem folga da
   tabela, e some da altura de dez linhas de uma vez. */
.cor-tabela textarea { display: block; min-height: 30px; line-height: 1.4; }
.cor-tabela textarea.curto { border-color: #E0A64A; }
/* O contador cabe ao lado da caixa, não embaixo: em linha própria, ele acrescentava uma
   terceira altura só para as seis linhas protegidas — e eram justamente as mais altas. */
.cor-conta { display: block; text-align: right; font-size: 9.5px; color: #A3AEC4; line-height: 1.2; }
.cor-conta.curto { color: #A56A12; font-weight: 700; }

.cor-doc-col { text-align: center; }
.cor-clipe {
  display: inline-flex; align-items: center; gap: 3px; cursor: pointer; color: #64769A;
  padding: 5px; border-radius: 7px;
}
.cor-clipe:hover { background: #F1F5FC; color: var(--marca-primaria); }
.cor-clipe input[type=file] { position: absolute; width: 1px; height: 1px; opacity: 0; }
.cor-clipe-n { font-size: 10px; color: #17A05A; }

.cor-novo-item {
  display: flex; align-items: center; gap: 8px; margin-top: 8px;
  background: #FFFBF3; border: 1px solid #F2E2C4; border-radius: 9px;
  padding: 7px 11px; font-size: 12px; color: #33445F;
}
.cor-novo-x {
  margin-left: auto; background: none; border: 0; color: #A56A12;
  font-size: 15px; line-height: 1; cursor: pointer; padding: 0 4px;
}

.cor-rodape-info {
  display: flex; align-items: flex-start; gap: 8px; margin: 12px 0 0;
  background: #EEF3FE; border-radius: 10px; padding: 10px 12px;
  font-size: 11.5px; color: #4A5D82; line-height: 1.55;
}
.cor-rodape-info svg { flex: none; margin-top: 1px; }

/* ── Divergências e arquivos (etapa 2) ── */
.cor-diverg { display: flex; gap: 10px; padding: 9px 0; border-bottom: 1px solid #F1F5FC; }
.cor-diverg:last-child { border-bottom: 0; }
.cor-diverg-ic { flex: none; margin-top: 2px; }
.cor-diverg b { display: block; font-size: 12.5px; color: #12275A; }
.cor-diverg p { margin: 2px 0 0; font-size: 11.5px; color: #64769A; line-height: 1.55; }

.cor-arquivos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.cor-arquivos li {
  display: flex; align-items: center; gap: 9px;
  background: #F7F9FE; border: 1px solid #E9EFFA; border-radius: 9px; padding: 8px 11px;
}
.cor-arq-ic { flex: none; display: flex; }
.cor-arq-nome { font-size: 12px; color: #12275A; word-break: break-word; flex: 1; min-width: 0; }
.cor-arq-tam { font-size: 11px; color: #8A96AB; white-space: nowrap; }
.cor-arq-x { display: inline; }
.cor-arq-x button {
  background: none; border: 0; color: #A3AEC4; font-size: 16px; line-height: 1;
  cursor: pointer; padding: 0 2px;
}
.cor-arq-x button:hover { color: #C2334D; }

/* ── Botões ── */
.cor-botoes { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.cor-botoes-2 { justify-content: flex-start; }
.cor-botoes-2 .cor-confirmar { margin-left: auto; }

.cor-btn, .cor-btn-claro, .cor-btn-cancelar {
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
  border-radius: 10px; padding: 11px 20px; font-family: inherit;
  font-size: 13px; font-weight: 700; cursor: pointer; border: 1px solid transparent;
}
.cor-btn { background: var(--marca-primaria); color: #fff; }
.cor-btn:hover { filter: brightness(.94); }
.cor-btn:disabled { opacity: .7; cursor: default; }
.cor-btn-claro { background: #fff; border-color: #D8E1F4; color: #33445F; }
.cor-btn-claro:hover { background: #F4F7FD; }
.cor-btn-cancelar { background: #fff; border-color: #F0C2CB; color: #C2334D; }
.cor-btn-cancelar:hover { background: #FDF3F5; }

/* ⚠️ `body.le-titular a` pinta TODO link com a cor da marca e vence uma classe sozinha — foi
   assim que um botão já ficou com texto azul sobre fundo azul, ou seja, ilegível. Todo botão que
   é um <a> reafirma a cor com o mesmo peso. Ver o aviso no topo deste arquivo. */
body.le-titular a.cor-btn { color: #fff; }
body.le-titular a.cor-btn-claro { color: #33445F; }
body.le-titular a.cor-btn-cancelar { color: #C2334D; }

/* ── Lateral ── */
.cor-lateral { display: flex; flex-direction: column; gap: 12px; }
.cor-painel { background: #fff; border: 1px solid #E1E8F7; border-radius: 13px; padding: 15px 16px; }
.cor-painel-cab { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.cor-painel-cab b { font-size: 13px; color: #12275A; }
.cor-linha {
  display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
  padding: 7px 0; border-bottom: 1px solid #F4F7FD; font-size: 12px;
}
.cor-linha:last-child { border-bottom: 0; }
.cor-linha span { color: #8A96AB; }
.cor-linha b { color: #12275A; text-align: right; }
.cor-tag { background: #FEF1DF; color: #A56A12; border-radius: 999px; padding: 3px 10px; font-size: 10.5px; }

.cor-passo-n2 { display: flex; gap: 9px; padding: 7px 0; }
.cor-passo-n2 > span {
  width: 20px; height: 20px; border-radius: 50%; flex: none; background: #EEF3FE;
  color: var(--marca-primaria); font-size: 11px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.cor-passo-n2 b { display: block; font-size: 12px; color: #12275A; }
.cor-passo-n2 i { font-style: normal; font-size: 11px; color: #8A96AB; line-height: 1.5; }

.cor-ajuda-txt { margin: 0 0 10px; font-size: 11.5px; color: #64769A; line-height: 1.6; }
.cor-btn-ajuda {
  display: block; width: 100%; margin-bottom: 7px; background: #F4F7FD;
  border: 1px solid #E1E8F7; border-radius: 9px; padding: 9px 12px;
  font-family: inherit; font-size: 12px; font-weight: 600; color: #33445F; cursor: pointer;
}
.cor-btn-ajuda:hover { background: #EEF3FE; }
.cor-btn-dpo {
  display: block; width: 100%; background: var(--marca-primaria); color: #fff;
  border: 0; border-radius: 9px; padding: 10px 12px;
  font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
}
.cor-painel-seg { background: #F4FBF7; border-color: #CFEBDC; }

/* ── Janela "Inserir novos dados" ── */
.cor-modal {
  position: fixed; inset: 0; z-index: 60; background: rgba(9, 22, 54, .45);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.cor-modal[hidden] { display: none; }
.cor-modal-cx {
  background: #fff; border-radius: 15px; padding: 20px 22px; width: 100%; max-width: 430px;
  box-shadow: 0 20px 50px rgba(9, 22, 54, .25);
}
.cor-modal-cx h3 { margin: 0 0 4px; font-size: 16px; color: #12275A; }
.cor-modal-cx label { display: block; margin-bottom: 11px; }
.cor-modal-cx label > span { display: block; font-size: 11px; font-weight: 700; color: #64769A; margin-bottom: 4px; }
.cor-modal-cx input[type=text] {
  width: 100%; box-sizing: border-box; background: #fff; border: 1px solid #DFE6F2;
  border-radius: 9px; padding: 9px 11px; font-family: inherit; font-size: 12.5px; color: #12275A;
}
.cor-modal-nota {
  margin: 0 0 14px; background: #F7F9FE; border-radius: 9px; padding: 9px 11px;
  font-size: 11px; color: #64769A; line-height: 1.55;
}
.cor-modal-btns { display: flex; gap: 9px; justify-content: flex-end; }

/* Comprovante do envio, na etapa 3 (Resposta) — ver o comentário em Resposta.cshtml. */
.rs-comprovante {
  background: #F4FBF7; border: 1px solid #17A05A; border-radius: 13px;
  padding: 15px 17px; margin-bottom: 14px;
}
.rs-comprovante-cab { display: flex; align-items: flex-start; gap: 11px; margin-bottom: 12px; }
.rs-comprovante-ic { flex: none; margin-top: 1px; }
.rs-comprovante-cab b { display: block; font-size: 14px; color: #0E7A45; }
.rs-comprovante-cab p { margin: 2px 0 0; font-size: 12px; color: #4A5D82; }
.rs-comprovante-itens {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 11px; margin: 0;
}
.rs-comprovante-itens dt { font-size: 10.5px; color: #8A96AB; margin-bottom: 2px; }
.rs-comprovante-itens dd { margin: 0; font-size: 12.5px; font-weight: 700; color: #12275A; }
.rs-comprovante-resumo {
  margin-top: 12px; padding-top: 11px; border-top: 1px solid #CFEBDC;
}
.rs-comprovante-resumo span { display: block; font-size: 10.5px; color: #8A96AB; margin-bottom: 3px; }
.rs-comprovante-resumo p { margin: 0; font-size: 12px; color: #33445F; line-height: 1.6; }
.cor-clipe.escolhido { color: #17A05A; background: #ECFAF2; }
.cor-clipe-novo {
  display: block; max-width: 120px; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; font-size: 9.5px; font-weight: 600; color: #0E7A45;
}

/* Campo recusado na digitação (CPF, data, e-mail, telefone). A regra que VALE é a do servidor —
   isto é só o aviso que aparece enquanto a pessoa ainda está na linha. */
.cor-tabela input.invalido,
.cor-modal-cx input.invalido { border-color: #C2334D; background: #FFFAFB; }
.cor-erro-campo {
  display: block; margin-top: 3px; font-size: 10px; color: #C2334D; line-height: 1.3;
}
.cor-erro-campo[hidden] { display: none; }
.cor-modal-cx select {
  width: 100%; box-sizing: border-box; background: #fff; border: 1px solid #DFE6F2;
  border-radius: 9px; padding: 9px 11px; font-family: inherit; font-size: 12.5px; color: #12275A;
}

/* ── Modal "solicitação enviada com sucesso" (etapa 3) ────────────────────────────────────── */
.rs-ok-modal {
  position: fixed; inset: 0; z-index: 80; background: rgba(9, 22, 54, .5);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.rs-ok-modal[hidden], .rs-ok-modal.fechado { display: none; }
.rs-ok-cx {
  background: #fff; border-radius: 16px; padding: 26px 26px 22px; width: 100%; max-width: 420px;
  text-align: center; box-shadow: 0 24px 60px rgba(9, 22, 54, .3);
}
.rs-ok-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 62px; height: 62px; border-radius: 50%; background: #ECFAF2; margin-bottom: 12px;
}
.rs-ok-cx h2 { margin: 0 0 6px; font-size: 18px; color: #12275A; }
.rs-ok-txt { margin: 0 0 16px; font-size: 12.5px; color: #64769A; line-height: 1.6; }

/* O protocolo é o dado que a pessoa leva embora — por isso grande, em fonte de largura fixa e
   fácil de selecionar com o dedo. */
.rs-ok-proto {
  background: #F4FBF7; border: 1px solid #CFEBDC; border-radius: 12px;
  padding: 12px 14px; margin-bottom: 14px;
}
.rs-ok-proto span { display: block; font-size: 10.5px; color: #8A96AB; margin-bottom: 3px; }
.rs-ok-proto b {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 20px; font-weight: 700; color: #0E7A45; letter-spacing: .02em;
  user-select: all;
}
.rs-ok-itens {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
  gap: 10px; margin: 0 0 14px; text-align: left;
}
.rs-ok-itens dt { font-size: 10px; color: #8A96AB; margin-bottom: 2px; }
.rs-ok-itens dd { margin: 0; font-size: 12px; font-weight: 700; color: #12275A; }
.rs-ok-nota {
  margin: 0 0 16px; background: #F7F9FE; border-radius: 9px; padding: 9px 11px;
  font-size: 11px; color: #64769A; line-height: 1.55;
}
.rs-ok-btn {
  width: 100%; background: var(--marca-primaria); color: #fff; border: 0; border-radius: 10px;
  padding: 12px 18px; font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer;
}
.rs-ok-btn:hover { filter: brightness(.94); }

/* ── Tela 04: "Adicionar campos" (até 6 pares) ────────────────────────────────────────────── */
.cor-modal-largo { max-width: 620px; max-height: 88vh; overflow-y: auto; }
.cor-modal-cab { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cor-modal-x {
  background: none; border: 0; color: #8A96AB; font-size: 22px; line-height: 1;
  cursor: pointer; padding: 0 4px;
}
.cor-modal-x:hover { color: #12275A; }
.cor-modal-limite {
  display: flex; align-items: center; gap: 6px; margin: 0 0 14px;
  font-size: 11px; color: var(--marca-primaria);
}
.cor-par { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 560px) { .cor-par { grid-template-columns: 1fr; } }
.cor-btn-mais {
  width: 100%; margin-bottom: 14px; background: #fff; border: 1px dashed #C9D6EC;
  border-radius: 9px; padding: 10px 12px; font-family: inherit; font-size: 12px;
  font-weight: 700; color: var(--marca-primaria); cursor: pointer;
}
.cor-btn-mais:hover:not(:disabled) { background: #F4F7FD; border-color: var(--marca-primaria); }
/* Desabilitado DIZ por quê (o texto vira "Máximo de 6 campos atingido"): botão que só para de
   responder parece defeito. */
.cor-btn-mais:disabled { color: #A3AEC4; border-color: #E1E8F7; cursor: default; }

/* ── Andamento campo a campo (etapa 3, correção de dados) ─────────────────────────────────── */
.rs-campos { background: #fff; border: 1px solid #E1E8F7; border-radius: 13px; padding: 16px 18px; margin-bottom: 14px; }
.rs-campos-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.rs-campos-cab h2 { margin: 0; font-size: 15px; color: #12275A; }
.rs-campos-cab span { font-size: 11.5px; color: #8A96AB; }
.rs-campos-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.rs-campos-lista li { border: 1px solid #EDF1F9; border-radius: 11px; padding: 11px 13px; }
.rs-campo-topo { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 7px; }
.rs-campo-topo b { font-size: 13px; color: #12275A; }
.rs-campo-selo { padding: 3px 10px; border-radius: 999px; font-size: 10.5px; font-weight: 700; white-space: nowrap; }
.rs-campo-selo.ok { background: #ECFAF2; color: #0E7A45; }
.rs-campo-selo.nao { background: #FDECEF; color: #A3283E; }
.rs-campo-selo.aguarda { background: #E8F0FF; color: #17509E; }
.rs-campo-corpo { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.rs-campo-corpo span { font-size: 12px; color: #33445F; word-break: break-word; }
.rs-campo-corpo i { display: block; font-style: normal; font-size: 10px; color: #8A96AB; margin-bottom: 2px; }
.rs-campo-motivo {
  margin: 9px 0 0; background: #F7F9FE; border-radius: 8px; padding: 8px 10px;
  font-size: 11.5px; color: #33445F; line-height: 1.55;
}
.rs-campos-nota { margin: 12px 0 0; font-size: 11.5px; color: #64769A; line-height: 1.6; }

/* Aviso de sucesso do envio, sobre a propria tela da correcao */
.cor-ok-modal {
  position: fixed; inset: 0; z-index: 80; background: rgba(9, 22, 54, .5);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.cor-ok-cx {
  background: #fff; border-radius: 16px; padding: 26px 26px 22px; width: 100%; max-width: 430px;
  text-align: center; box-shadow: 0 24px 60px rgba(9, 22, 54, .3);
}
.cor-ok-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 62px; height: 62px; border-radius: 50%; background: #ECFAF2; margin-bottom: 12px;
}
.cor-ok-cx h2 { margin: 0 0 6px; font-size: 18px; color: #12275A; }
.cor-ok-txt { margin: 0 0 16px; font-size: 12.5px; color: #64769A; line-height: 1.6; }
.cor-ok-proto {
  background: #F4FBF7; border: 1px solid #CFEBDC; border-radius: 12px; padding: 12px 14px; margin-bottom: 14px;
}
.cor-ok-proto span { display: block; font-size: 10.5px; color: #8A96AB; margin-bottom: 3px; }
.cor-ok-proto b {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 20px; font-weight: 700; color: #0E7A45; letter-spacing: .02em; user-select: all;
}
.cor-ok-itens {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
  gap: 10px; margin: 0 0 14px; text-align: left;
}
.cor-ok-itens dt { font-size: 10px; color: #8A96AB; margin-bottom: 2px; }
.cor-ok-itens dd { margin: 0; font-size: 12px; font-weight: 700; color: #12275A; }
.cor-ok-nota {
  margin: 0 0 16px; background: #F7F9FE; border-radius: 9px; padding: 9px 11px;
  font-size: 11px; color: #64769A; line-height: 1.55;
}
.cor-ok-btns { display: flex; gap: 9px; }
.cor-ok-btns > a { flex: 1; justify-content: center; }

.cor-dica-salva {
  margin-left: auto; margin-right: 10px; font-style: normal;
  font-size: 11px; color: #8A96AB; text-align: right;
}
@media (max-width: 560px) { .cor-dica-salva { margin: 0; width: 100%; text-align: left; } }
