body { min-height: 100vh; display: flex; flex-direction: column; }
main { flex: 1 0 auto; }
.navbar .btn-group .btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: .4rem; min-height: 2.5rem;
}
.navbar .btn-icon { width: 2.5rem; padding-left: 0; padding-right: 0; }
.nav-tabs .nav-link { display: inline-flex; align-items: center; gap: .4rem; }
.hp { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.turnstile-slot { min-height: 65px; }
#paywall-modal.paywall-is-dev .modal-content { border-color: #ffc107; }
#paywall-modal.paywall-is-dev .modal-header { background: #ffc107; }
.mw0 { min-width: 0; }

/* Sidebar de faceta acompanha a rolagem: a pesquisa de navegação facetada (Baymard/NN-g) é
   clara em manter o filtro marcado à vista enquanto a pessoa percorre o resultado. */
@media (min-width: 992px) {
  .sidebar-sticky { position: sticky; top: 4.5rem; max-height: calc(100vh - 5.5rem); overflow-y: auto; }
}
.mw-720 { max-width: 720px; }
/* Sem teto de largura: o dono pediu a tela toda, e num monitor largo o teto deixava uma
   faixa morta à direita. Quem segura a legibilidade é o `text-truncate` de cada linha. */

/* `overflow-x-auto` sozinho força overflow-y a virar `auto` (regra do CSS: os dois eixos não
   podem ser visible/auto misturados), e o navegador desenhava uma BARRA DE ROLAGEM VERTICAL
   de 1px de curso na faixa das abas. Travar o eixo Y mata a barra sem perder o scroll lateral
   das abas no mobile. */
.nav-tabs.overflow-x-auto,
#kind-tabs.overflow-x-auto { overflow-y: hidden; scrollbar-width: none; }
.nav-tabs.overflow-x-auto::-webkit-scrollbar,
#kind-tabs.overflow-x-auto::-webkit-scrollbar { height: 0; width: 0; }
#kind-tabs .nav-link { white-space: nowrap; }
#facetas-corpo .form-check-input { cursor: pointer; }
#facetas-corpo [data-toggle-grupo] { background: none; border: 0; }

/* Aba de item: o título trunca para a faixa de abas não virar régua ilegível. */
.mw-160 { max-width: 10rem; }
[data-aba-item] .nav-link { padding-top: .35rem; padding-bottom: .35rem; }

/* A lista chega por JS: sem altura reservada o rodapé pulava (CLS 0,58 em 05/09). A reserva
   some assim que a primeira página é pintada. O ícone do campo de busca reserva a largura da
   fonte de ícones, que chega depois do texto. */
.mosaico-reservado:empty { min-height: 70vh; }
/* A barra da fila mede 51 px + 8 px de margem em qualquer largura (cabeçalho de uma linha): o slot
   reserva isso antes de ela chegar, e o mosaico não desce quando o /api/fila responde. */
.fila-slot { min-height: 3.75rem; }
.input-group-text { min-width: 2.5rem; justify-content: center; }
.mm-codigo { background: var(--bs-tertiary-bg); font-size: .875rem; overflow-x: auto; }
.mm-faq-item summary { cursor: pointer; list-style: none; }
.mm-faq-item summary::before { content: "+"; display: inline-block; width: 1.25rem; color: var(--bs-secondary-color); }
.mm-faq-item[open] summary::before { content: "–"; }
.mm-bloco h2 { letter-spacing: -.01em; }
