/* =====================================================================
   ds-shell.css — casca da área restrita /dpmg
   =====================================================================
   O que `ds.css` não podia trazer porque não é do design system, e o que
   ele traz mas depende do markup real desta aplicação:

     S1  Menu móvel da navbar (drawer) e detalhes do markup real
     S2  Breadcrumb dentro do container da aplicação
     S3  Cabeçalho de página (main-container / page-header / page-title)
     S4  Paleta de busca global Ctrl+K (dpmg-busca-*)
     S5  Blocos genéricos de página (vazio, meta, container de tabela)

   Carregado por `{% block css_area %}` de templates/html/base.html, logo
   depois de `ds.css` e `ds-compat.css`. Toda cor vem de token do DS.
   ===================================================================== */


/* =====================================================================
   S1 — NAVBAR: o que o componente do DS deixa para quem o consome
   =====================================================================
   `ds.css` define a navbar até o ponto em que ela deixa de ser genérica.
   O comportamento móvel depende de quantos blocos a barra tem — aqui são
   três (menu, bloco de usuário, toggler) — então mora nesta folha, ao
   lado do `ds-navbar.js` que escreve as classes. */

.dpmg-navbar__caret { font-size: 0.7em; opacity: 0.75; }
.dpmg-navbar__item--dropdown.is-open .dpmg-navbar__caret { transform: rotate(180deg); }

/* Item de dropdown correspondente à página atual. O `ds.css` não define
   esta variante porque no protótipo o painel não tinha item ativo; aqui
   tem, e a regra do design system vale igual: `--active` nunca aparece
   sem `aria-current="page"` no mesmo elemento (ver base.html). */
.dpmg-navbar__dropdown-item--active,
.dpmg-navbar__dropdown-item[aria-current="page"] {
  background: var(--ds-green-50);
  color: var(--ds-green-900);
  font-weight: var(--ds-weight-semibold);
}

/* O rótulo "Buscar" e a tecla de atalho somem antes do resto: numa navbar
   com 6 grupos, eles são a primeira coisa dispensável quando o espaço
   aperta, e o ícone sozinho continua nomeando o botão pelo `title`. */
@media (max-width: 1200px) {
  .dpmg-navbar__search-label,
  .dpmg-navbar__search kbd { display: none; }
  .dpmg-navbar__search { padding-inline: var(--ds-space-2); }
}

/* ---- Drawer móvel (abaixo de 1024px) -------------------------------
   O painel fica EM FLUXO, não sobreposto. Menu e bloco de usuário são
   irmãos: se os dois virarem `position:absolute` em `top:100%`, ocupam a
   mesma origem e o posterior no DOM cobre o anterior — medido no
   protótipo, 3 de 6 itens do menu ficavam inclicáveis porque
   `elementFromPoint` devolvia o bloco de usuário. Com `flex-wrap` +
   `order` + `flex-basis:100%` eles empilham e a navbar cresce;
   sobreposição deixa de ser possível por construção. */
@media (max-width: 1024px) {
  .dpmg-navbar.is-menu-open { max-height: 100dvh; overflow-y: auto; }
  .dpmg-navbar.is-menu-open .dpmg-navbar__inner {
    flex-wrap: wrap;
    align-items: flex-start;
    row-gap: var(--ds-space-2);
    padding-bottom: var(--ds-space-4);
  }
  .dpmg-navbar.is-menu-open .dpmg-navbar__brand   { order: 0; }
  .dpmg-navbar.is-menu-open .dpmg-navbar__toggler { order: 1; margin-left: auto; }
  .dpmg-navbar.is-menu-open .dpmg-navbar__menu    { order: 2; }
  .dpmg-navbar.is-menu-open .dpmg-navbar__side    { order: 3; }
  .dpmg-navbar.is-menu-open .dpmg-navbar__menu,
  .dpmg-navbar.is-menu-open .dpmg-navbar__side {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--ds-space-1);
    flex-basis: 100%;
    min-width: 0;
  }
  .dpmg-navbar.is-menu-open .dpmg-navbar__side {
    border-top: 1px solid var(--ds-border-on-brand);
    padding-top: var(--ds-space-3);
  }
  /* O painel do grupo só aparece com `.is-open` — a MESMA fonte de verdade
     do desktop. Sem `.is-open` no seletor, abrir o menu móvel escancararia
     todos os submenus enquanto cada gatilho seguisse anunciando
     `aria-expanded="false"`. */
  .dpmg-navbar.is-menu-open .dpmg-navbar__item--dropdown.is-open > .dpmg-navbar__dropdown {
    display: flex;
    position: static;
    background: transparent;
    border: none;
    box-shadow: none;
    padding: 0 0 var(--ds-space-2) var(--ds-space-4);
  }
  .dpmg-navbar.is-menu-open .dpmg-navbar__dropdown-item { color: rgba(255, 255, 255, 0.85); }
  .dpmg-navbar.is-menu-open .dpmg-navbar__dropdown-item:hover,
  .dpmg-navbar.is-menu-open .dpmg-navbar__dropdown-item--active {
    background: rgba(255, 255, 255, 0.10);
    color: var(--ds-on-brand);
  }
  .dpmg-navbar.is-menu-open .dpmg-navbar__search { justify-content: flex-start; }
}


/* ---- Rodapé: reset da lista -----------------------------------------
   O reset do `ds.css` é `ul[class] { list-style: none; padding: 0 }` — só
   alcança lista COM classe, de propósito, para não roubar os marcadores de
   listas de conteúdo. As colunas do rodapé usam `<ul>` sem classe (o
   seletor de estilo é `.dpmg-footer__col ul`), então caíam fora do reset e
   apareciam com marcador. */
.dpmg-footer__col ul { list-style: none; padding: 0; margin: 0; }

/* =====================================================================
   S2 — BREADCRUMB
   =====================================================================
   A macro `trilha()` emite `<nav class="dpmg-breadcrumb"><ol>…` direto,
   sem container interno. O `ds.css` estiliza a faixa e a lista, mas quem
   alinha a trilha à mesma coluna do conteúdo é esta regra. */
.dpmg-breadcrumb > ol {
  width: 100%;
  max-width: var(--ds-container-max);
  margin-inline: auto;
  padding-inline: var(--ds-space-6);
}
@media (max-width: 480px) {
  .dpmg-breadcrumb > ol { padding-inline: var(--ds-space-4); }
}
/* A macro não envolve o rótulo da página atual em <a>, então a cor precisa
   vir do próprio <li> — que é onde `aria-current` está. */
.dpmg-breadcrumb li[aria-current="page"] { color: var(--ds-text); font-weight: var(--ds-weight-medium); }


/* =====================================================================
   S3 — CONTAINER E CABEÇALHO DE PÁGINA
   =====================================================================
   `.main-container` é o invólucro de conteúdo de praticamente toda página
   da área restrita; `.page-header` é a faixa de título dos formulários de
   petição e das ferramentas; `.page-title` é o título centrado com
   sublinhado dourado dos hubs. Os três vêm do CSS antigo e continuam no
   markup — o que muda é a pele. */
.main-container {
  width: 100%;
  max-width: var(--ds-container-max);
  margin-inline: auto;
  padding: var(--ds-space-8) var(--ds-space-6) var(--ds-space-9);
}
@media (max-width: 480px) {
  .main-container { padding: var(--ds-space-6) var(--ds-space-4) var(--ds-space-8); }
}
/* Largura de leitura para formulário e documento — o mesmo
   `--ds-content-max` que o design system reserva ao conteúdo textual. */
.main-container--estreito,
.dpmg-page { max-width: var(--ds-content-max); margin-inline: auto; }

/* Faixa de título. O gradiente é o mesmo da navbar, para as duas
   superfícies de marca da página falarem a mesma língua. O texto
   secundário usa `--ds-text-muted-on-brand` (5,38:1 contra a ponta clara
   do gradiente, 8,28:1 contra a escura) — `--ds-text-muted` foi desenhado
   para fundo branco e mediria 1,97:1 aqui. */
.page-header {
  background: linear-gradient(155deg, var(--ds-green-700), var(--ds-green-900));
  color: var(--ds-on-brand);
  padding: var(--ds-space-8) var(--ds-space-6);
  margin-bottom: var(--ds-space-7);
  text-align: center;
  box-shadow: var(--ds-shadow-navbar);
}
.page-header h1 {
  margin: 0;
  color: var(--ds-on-brand);
  font-family: var(--ds-font-display);
  font-size: var(--ds-text-2xl);
  font-weight: var(--ds-weight-bold);
  line-height: var(--ds-leading-tight);
}
.page-header p {
  margin: var(--ds-space-2) auto 0;
  max-width: 74ch;
  color: var(--ds-text-muted-on-brand);
  font-size: var(--ds-text-base);
}
@media (max-width: 480px) {
  .page-header { padding: var(--ds-space-6) var(--ds-space-4); }
  .page-header h1 { font-size: var(--ds-text-xl); }
}

/* Título de hub: centrado, com o filete dourado abaixo. O filete é a
   assinatura visual que os hubs já tinham; o que muda é a espessura e a
   cor virem de token. */
.page-title {
  position: relative;
  margin-bottom: var(--ds-space-7);
  padding-bottom: var(--ds-space-4);
  text-align: center;
  font-family: var(--ds-font-display);
  font-size: var(--ds-text-3xl);
  font-weight: var(--ds-weight-bold);
  line-height: var(--ds-leading-tight);
  letter-spacing: var(--ds-tracking-tight);
  color: var(--ds-green-900);
}
.page-title::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 64px;
  height: 3px;
  background: var(--ds-gold-500);
  border-radius: var(--ds-radius-full);
}
.page-title img {
  display: block;
  margin: 0 auto var(--ds-space-4);
  max-height: 80px;
  width: auto;
}
.page-description {
  max-width: 74ch;
  margin: calc(-1 * var(--ds-space-4)) auto var(--ds-space-7);
  text-align: center;
  color: var(--ds-text-muted);
  line-height: var(--ds-leading-relaxed);
}
.section-title {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin: var(--ds-space-8) 0 var(--ds-space-4);
  padding-left: var(--ds-space-4);
  font-family: var(--ds-font-display);
  font-size: var(--ds-text-xl);
  font-weight: var(--ds-weight-semibold);
  color: var(--ds-green-900);
}
.section-title::before {
  content: "";
  position: absolute;
  left: 0; top: 10%;
  width: 4px; height: 80%;
  background: var(--ds-gold-500);
  border-radius: var(--ds-radius-full);
}


/* =====================================================================
   S4 — PALETA DE BUSCA GLOBAL (Ctrl+K)
   =====================================================================
   Markup fixo em base.html, comportamento em static/js/dpmg-busca.js
   (combobox + listbox, foco permanente no campo, item ativo apontado por
   `aria-activedescendant`). Este bloco só troca a pele; nenhuma classe
   muda de nome, porque o JS as escreve em tempo de execução. */
.dpmg-busca-overlay {
  position: fixed;
  inset: 0;
  z-index: var(--ds-z-toast);
  background: rgba(15, 23, 18, 0.55);
  display: flex;
  justify-content: center;
  align-items: flex-start;
  padding: 15vh var(--ds-space-4) var(--ds-space-4);
}
.dpmg-busca-dialog {
  width: 100%;
  max-width: 640px;
  max-height: 70vh;
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: var(--ds-surface);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-lg);
  overflow: hidden;
  animation: ds-busca-entrada var(--ds-duration-base) var(--ds-ease);
}
@keyframes ds-busca-entrada {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: translateY(0); }
}

.dpmg-busca-input-wrap { position: relative; flex: 0 0 auto; border-bottom: 1px solid var(--ds-border); }
.dpmg-busca-input-icone {
  position: absolute; left: var(--ds-space-4); top: 50%;
  transform: translateY(-50%);
  color: var(--ds-text-muted);
  pointer-events: none;
}
.dpmg-busca-input {
  width: 100%;
  border: 0; outline: none; background: transparent;
  color: var(--ds-text);
  font-size: var(--ds-text-md);
  padding: var(--ds-space-4) var(--ds-space-4) var(--ds-space-4) var(--ds-space-9);
}
/* `--ds-text-faint` (5,06:1) e não `--ds-text-muted`: o placeholder é o
   caso que reprovou a auditoria de contraste na v2 justamente por herdar
   um token claro demais. */
.dpmg-busca-input::placeholder { color: var(--ds-text-faint); }

.dpmg-busca-lista { padding: var(--ds-space-2); overflow-y: auto; flex: 1 1 auto; min-height: 0; }
.dpmg-busca-cabecalho {
  padding: var(--ds-space-2) var(--ds-space-3);
  font-size: var(--ds-text-xs);
  font-weight: var(--ds-weight-semibold);
  text-transform: uppercase;
  letter-spacing: var(--ds-tracking-wide);
  color: var(--ds-text-muted);
}
.dpmg-busca-item {
  display: flex; align-items: center; gap: var(--ds-space-3);
  min-height: 40px;
  padding: var(--ds-space-2) var(--ds-space-3);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text);
  cursor: pointer;
}
.dpmg-busca-item-icone { flex: 0 0 auto; width: 1.25rem; text-align: center; color: var(--ds-text-muted); }
.dpmg-busca-item-titulo { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dpmg-busca-item-externo { flex: 0 0 auto; font-size: var(--ds-text-xs); color: var(--ds-text-muted); }
.dpmg-busca-item-hub {
  flex: 0 0 auto; max-width: 40%;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: var(--ds-text-xs); color: var(--ds-text-muted);
}
.dpmg-busca-item:hover { background: var(--ds-green-50); color: var(--ds-green-900); }
/* O item ativo do listbox não recebe foco do DOM (o foco fica no campo);
   a barra à esquerda é o equivalente visual desse cursor para quem
   enxerga, e o `aria-selected` no <li> é o que o leitor de tela anuncia. */
.dpmg-busca-item.is-selecionado {
  background: var(--ds-green-50);
  color: var(--ds-green-900);
  box-shadow: inset 3px 0 0 var(--ds-green-700);
}
.dpmg-busca-item.is-selecionado .dpmg-busca-item-icone,
.dpmg-busca-item.is-selecionado .dpmg-busca-item-hub { color: var(--ds-green-900); }
.dpmg-busca-vazio { padding: var(--ds-space-4) var(--ds-space-3); color: var(--ds-text-muted); font-size: var(--ds-text-sm); }

.dpmg-busca-rodape {
  flex: 0 0 auto;
  display: flex; flex-wrap: wrap; gap: var(--ds-space-4);
  padding: var(--ds-space-2) var(--ds-space-4);
  border-top: 1px solid var(--ds-border);
  background: var(--ds-surface-alt);
  font-size: var(--ds-text-xs);
  color: var(--ds-text-muted);
}
.dpmg-busca-rodape kbd {
  font: inherit;
  padding: 3px 6px;
  margin-right: 3px;
  border: 1px solid var(--ds-border);
  border-bottom-width: 2px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
}
/* Região aria-live: anuncia a contagem de resultados sem ocupar espaço. */
.dpmg-busca-status {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}


/* =====================================================================
   S5 — BLOCOS GENÉRICOS DE PÁGINA
   ===================================================================== */

/* Estado vazio de lista/tabela — mesma linguagem do `.dpmg-empty` do DS. */
.dpmg-vazio,
.empty-state {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: var(--ds-space-3);
  padding: var(--ds-space-9) var(--ds-space-5);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface-alt);
  color: var(--ds-text-muted);
}

/* Linha de metadados (data, autor, contagem) abaixo de um título. */
.dpmg-meta { font-size: var(--ds-text-sm); color: var(--ds-text-muted); }
.dpmg-meta-sm { font-size: var(--ds-text-xs); color: var(--ds-text-faint); }

/* Invólucro rolável de tabela larga. `overflow-x` sozinho não basta: sem
   a borda e o raio, a tabela encosta na página e o corte não fica óbvio.
   Terceira ocorrência do mesmo defeito na v2: conteúdo cortado dentro de
   `overflow:hidden` não gera rolagem, a auditoria automatizada dá zero e
   o usuário simplesmente não alcança a coluna. */
.table-container,
.table-wrap {
  overflow-x: auto;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

/* Rolagem suave com margem para a navbar grudada — sem isto, âncoras
   internas (#secao) param com o alvo atrás da barra. */
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--ds-navbar-height) + var(--ds-space-4)); }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }


/* =====================================================================
   S6 — MODO DE ALTO CONTRASTE (forced-colors)
   =====================================================================
   O anel de foco do design system é feito de `box-shadow` (anel duplo:
   dourado por dentro, escuro por fora) e vários componentes desligam o
   `outline` de propósito, para o anel não competir com a borda do
   controle. Medido em /dpmg/acesso com 22 paradas de Tab reais: 22 de 22
   têm indicação de foco, e **as 22 são só sombra**, com `outline-style:
   none`.

   Isso é um problema num lugar específico: no modo de alto contraste do
   Windows (`forced-colors: active`), o navegador DESCARTA box-shadow e
   preserva outline. Sem esta regra, quem depende desse modo — e navega
   por teclado — fica sem nenhuma indicação de onde está o foco.

   `CanvasText` é a cor de texto que o próprio sistema operacional define;
   é o valor certo aqui, porque no modo forçado qualquer cor nossa seria
   ignorada de qualquer forma. */
@media (forced-colors: active) {
  :focus-visible {
    outline: 2px solid CanvasText;
    outline-offset: 2px;
  }
  /* Componentes que desligam o outline por causa do anel de sombra
     precisam dele de volta aqui — a sombra não existe neste modo. */
  .dpmg-card__link:focus-visible,
  .dpmg-hub-tile-link:focus-visible,
  .dpmg-hub-tile-sublink:focus-visible,
  .document-link:focus-visible,
  .dpmg-hub-quick-chip:focus-visible,
  .dpmg-hub-mine-chip:focus-visible {
    outline: 2px solid CanvasText;
    outline-offset: 2px;
  }
}
