@charset "UTF-8";
/* =====================================================================
   BIBLIOTECA DIGITAL AR SOUZA — Sistema de design da marca
   Manual de Identidade Visual v3.0 · Tradição que evolui </>

   Arquivo único, sem etapa de build, sem dependências de JavaScript.
   Blocos:
     1. Tokens              11. Publicação (leitura)
     2. Reset e base        12. Botões
     3. Tipografia          13. Formulários
     4. Layout e grade      14. Newsletter
     5. Cabeçalho           15. Rodapé
     6. Hero e busca        16. Utilitários e alertas
     7. Chips e filtros     17. Admin
     8. Cards               18. Responsivo
     9. Áreas               19. Acessibilidade e impressão
    10. Estado vazio

   Princípios: espaço em branco protagonista, tipografia conduzindo a
   hierarquia, nenhuma sombra pesada em repouso, nenhuma cor fora da
   paleta oficial. Modo escuro NÃO é implementado — a marca é definida
   sobre fundo claro.
   ===================================================================== */

/* Tipografia institucional. Os documentos também declaram o <link> no
   <head>; a importação aqui garante a fonte mesmo em páginas isoladas. */
/* A família Barlow é carregada por <link rel="stylesheet"> no <head> das
   páginas, com preconnect — não repetir aqui via @import, que serializaria
   o download da fonte atrás deste arquivo. */

/* =====================================================================
   1. TOKENS
   ===================================================================== */

:root{
  /* Primárias */
  --azul-profundo:#002B8F;   /* base institucional, títulos, rodapé */
  --azul-royal:#0047CC;      /* links e ações */
  --azul-ceu:#3D9BE9;        /* realces sutis */
  /* Secundárias */
  --azul-gelo:#B3D9FF;
  --branco:#FFFFFF;
  --grafite:#1A1A2E;
  /* Neutras */
  --cinza-claro:#F4F6F9;
  --cinza-medio:#8A9BB0;
  --preto:#000000;
  /* Derivadas de sistema (opacidades da paleta oficial, não cores novas) */
  --borda:rgba(138,155,176,.28);
  --borda-forte:rgba(0,43,143,.18);
  --sombra-sutil:0 1px 2px rgba(26,26,46,.04), 0 8px 24px rgba(0,43,143,.06);
  --sombra-media:0 2px 4px rgba(26,26,46,.06), 0 16px 40px rgba(0,43,143,.10);
  --texto:var(--grafite);
  --texto-mudo:#5C6B80;      /* cinza-medio escurecido p/ contraste AA em corpo */
  /* Tipografia */
  --fonte:'Barlow','Helvetica Neue',Calibri,-apple-system,BlinkMacSystemFont,sans-serif;
  --fonte-condensada:'Barlow Condensed','Helvetica Neue',sans-serif;
  /* Métrica */
  --raio:10px; --raio-sm:6px; --raio-lg:16px;
  --container:1200px;
  --transicao:.25s cubic-bezier(.25,.46,.45,.94);
}

/* Tokens complementares — derivados dos oficiais, sem introduzir cor nova.
   Exceção documentada: --acao-destrutiva, vermelho sóbrio reservado
   EXCLUSIVAMENTE a exclusões dentro do painel administrativo. Não é cor
   institucional e nunca aparece no site público. */
:root{
  --azul-tenue:rgba(179,217,255,.22);    /* véu de azul-gelo */
  --azul-tenue-forte:rgba(179,217,255,.38);
  --tinta-suave:rgba(26,26,46,.05);      /* grafite a baixa opacidade */
  --sobre-escuro:rgba(255,255,255,.86);  /* texto secundário em fundo azul */
  --borda-escura:rgba(255,255,255,.18);  /* divisórias em fundo azul */
  --espaco-secao:clamp(4rem, 8vw, 7rem); /* respiro padrão das seções */
  --altura-cabecalho:76px;
  --coluna-leitura:43rem;                /* ~72 caracteres no corpo de 1.0625rem */
  --acao-destrutiva:#B3261E;             /* somente em .admin */
}

/* =====================================================================
   2. RESET E BASE
   ===================================================================== */

*,*::before,*::after{box-sizing:border-box}
*{margin:0}

html{
  color-scheme:light;               /* impede inversão automática do navegador */
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
}

body{
  min-height:100vh;
  font-family:var(--fonte);
  font-size:1.0625rem;
  font-weight:400;
  line-height:1.7;
  color:var(--texto);
  background:var(--branco);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;                /* trava definitiva contra rolagem lateral */
}

img,svg,video,canvas{display:block;max-width:100%}
img{height:auto}
svg{flex:0 0 auto}

ul,ol{list-style:none;padding:0}

button,input,select,textarea{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer}

table{border-collapse:collapse;width:100%}

hr{border:0;border-top:1px solid var(--borda);margin:2rem 0}

[hidden]{display:none !important}

::selection{background:var(--azul-gelo);color:var(--azul-profundo)}

/* Âncoras não podem ficar sob o cabeçalho fixo. */
:target,#conteudo{scroll-margin-top:calc(var(--altura-cabecalho) + 1.5rem)}
#conteudo:focus{outline:none}

/* =====================================================================
   3. TIPOGRAFIA
   ===================================================================== */

h1,h2,h3,h4,h5,h6{
  font-family:var(--fonte);
  color:var(--azul-profundo);
  line-height:1.2;
  text-wrap:balance;
}

h1{font-weight:700;font-size:clamp(2.1rem,4.5vw,3.2rem);letter-spacing:-.015em}
h2{font-weight:700;font-size:clamp(1.6rem,2.6vw,2.15rem);letter-spacing:-.01em;line-height:1.25}
h3{font-weight:600;font-size:1.15rem;line-height:1.35}
h4{font-weight:600;font-size:1.0625rem;line-height:1.4}
h5,h6{font-weight:600;font-size:.9375rem;line-height:1.45}

/* Parágrafos sequenciais fora de componentes com gap. */
p + p{margin-top:1em}
/* Componentes que já separam os filhos por `gap` não somam essa margem —
   sem esta regra o rótulo da métrica, o texto do estado vazio e o aviso do
   formulário ganham 1em extra além do espaçamento do próprio componente. */
:where(.vazio,.metrica,.card,.area,.hero__stat,.campo,.newsletter__form,
       .newsletter__texto,.rodape__marca,.rodape__col,.admin__bloco,.login__form,
       .zona-upload,.alerta,.filtros,.secao__cabecalho,.publicacao__cabecalho,
       .modal__rodape,.admin__conta,.card__meta,.publicacao__meta) > p + p{margin-top:0}

a{
  color:var(--azul-royal);
  text-decoration:underline;
  text-underline-offset:.2em;
  text-decoration-thickness:1px;
  transition:color var(--transicao);
}
a:hover{color:var(--azul-profundo)}

strong,b{font-weight:600;color:var(--grafite)}
em,i{font-style:italic}
small{font-size:.8125rem;font-weight:300}

code,kbd,samp{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:.9em;
  background:var(--cinza-claro);
  border:1px solid var(--borda);
  border-radius:var(--raio-sm);
  padding:.1em .35em;
}

/* Rótulo de seção (kicker) — condensada, versalete largo. */
.kicker,
.hero__kicker,
.secao__kicker{
  display:block;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--azul-royal);
}

/* Cabeçalho editorial de seção — título + apoio, alinhados à esquerda. */
.secao__cabecalho{
  display:flex;
  flex-direction:column;
  gap:.6rem;
  max-width:64ch;
  margin-bottom:clamp(2rem,4vw,3rem);
}
.secao__titulo{font-weight:700;font-size:clamp(1.6rem,2.6vw,2.15rem)}
.secao__texto{color:var(--texto-mudo);font-size:1.0625rem}

/* Bloco de leitura corrida usado fora do corpo da publicação. */
.texto-fluxo > * + *{margin-top:1.1em}

/* =====================================================================
   4. LAYOUT E GRADE
   ===================================================================== */

.container{
  width:100%;
  max-width:var(--container);
  margin-inline:auto;
  padding-inline:clamp(1.25rem,4vw,2rem);
}
.container--leitura{max-width:820px}

.secao{padding:var(--espaco-secao) 0}
.secao--clara{background:var(--cinza-claro)}

.secao--escura{
  background:var(--azul-profundo);
  color:var(--sobre-escuro);
}
/* :where() mantém especificidade zero: os componentes declarados adiante
   (cards brancos, botões) preservam suas próprias cores. */
.secao--escura :where(h1,h2,h3,h4,.secao__titulo){color:var(--branco)}
.secao--escura :where(.kicker,.hero__kicker,.secao__kicker){color:var(--azul-gelo)}
.secao--escura :where(.secao__texto,.texto-mudo,p){color:var(--sobre-escuro)}
.secao--escura :where(a){color:var(--azul-gelo)}
.secao--escura :where(a:hover){color:var(--branco)}
.secao--escura :where(hr){border-top-color:var(--borda-escura)}

.grade{
  display:grid;
  grid-template-columns:1fr;
  gap:clamp(1.25rem,2.5vw,2rem);
}
.grade--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grade--3{grid-template-columns:repeat(3,minmax(0,1fr))}

/* =====================================================================
   5. CABEÇALHO
   ===================================================================== */

.cabecalho{
  position:sticky;
  top:0;
  z-index:50;
  background:rgba(255,255,255,.94);
  border-bottom:1px solid var(--borda);
  backdrop-filter:saturate(140%) blur(10px);
  -webkit-backdrop-filter:saturate(140%) blur(10px);
}

.cabecalho__interno{
  display:flex;
  align-items:center;
  gap:clamp(1rem,3vw,2.5rem);
  min-height:var(--altura-cabecalho);
  width:100%;
  max-width:var(--container);
  margin-inline:auto;
  padding-inline:clamp(1.25rem,4vw,2rem);
}

/* Logotipo: altura fixa e largura automática — nunca distorcer.
   44px de altura ≈ 109px de largura, acima do mínimo de 90px do manual. */
.cabecalho__marca{
  display:inline-flex;
  align-items:center;
  flex:0 0 auto;
  margin-right:auto;
  text-decoration:none;
}
.cabecalho__marca img{height:44px;width:auto}

.cabecalho__nav{
  display:flex;
  align-items:center;
  gap:.25rem;
}

.cabecalho__link{
  position:relative;
  display:inline-flex;
  align-items:center;
  min-height:44px;
  padding:.4rem .8rem;
  border-radius:var(--raio-sm);
  font-size:.9375rem;
  font-weight:500;
  color:var(--texto);
  text-decoration:none;
  white-space:nowrap;
  transition:color var(--transicao),background-color var(--transicao);
}
.cabecalho__link:hover{color:var(--azul-royal);background:var(--cinza-claro)}

.cabecalho__link--ativo{color:var(--azul-profundo);font-weight:600}
.cabecalho__link--ativo::after{
  content:"";
  position:absolute;
  left:.8rem;
  right:.8rem;
  bottom:.15rem;
  height:2px;
  border-radius:2px;
  background:var(--azul-royal);
}

.cabecalho__acoes{
  display:flex;
  align-items:center;
  gap:.6rem;
  flex:0 0 auto;
}

/* Botão hambúrguer — só existe abaixo de 900px (bloco 18).
   Aceita ícone SVG ou três traços em <span>. */
.cabecalho__menu-btn{
  display:none;
  flex-direction:column;        /* empilha os traços do ícone em <span> */
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  flex:0 0 auto;
  border:1px solid var(--borda);
  border-radius:var(--raio-sm);
  color:var(--azul-profundo);
  background:var(--branco);
  transition:border-color var(--transicao),background-color var(--transicao);
}
.cabecalho__menu-btn:hover{border-color:var(--borda-forte);background:var(--cinza-claro)}
.cabecalho__menu-btn svg{width:22px;height:22px}
.cabecalho__menu-btn span{
  display:block;
  width:20px;
  height:2px;
  border-radius:2px;
  background:currentColor;
}
.cabecalho__menu-btn span + span{margin-top:4px}

/* Submenu de frentes — <details> + <summary class="cabecalho__link">,
   sem JavaScript. A lista flutua abaixo do rótulo no desktop. */
.cabecalho__submenu{position:relative}
.cabecalho__submenu > summary{
  display:inline-flex;
  align-items:center;
  gap:.4rem;
  list-style:none;
  cursor:pointer;
}
.cabecalho__submenu > summary::-webkit-details-marker{display:none}
.cabecalho__submenu > summary::after{
  content:"";
  width:.42rem;
  height:.42rem;
  border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;
  transform:translateY(-2px) rotate(45deg);
  transition:transform var(--transicao);
}
.cabecalho__submenu[open] > summary{color:var(--azul-royal)}
.cabecalho__submenu[open] > summary::after{transform:translateY(1px) rotate(225deg)}

.cabecalho__submenu-lista{
  position:absolute;
  top:calc(100% + .35rem);
  left:0;
  z-index:60;
  display:flex;
  flex-direction:column;
  gap:.1rem;
  min-width:290px;
  padding:.45rem;
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio);
  box-shadow:var(--sombra-media);
}
.cabecalho__submenu-lista .cabecalho__link{
  justify-content:flex-start;
  gap:.65rem;
  min-height:42px;
  padding:.5rem .65rem;
  white-space:normal;
}
.cabecalho__submenu-lista .cabecalho__link--ativo{background:var(--cinza-claro)}
.cabecalho__submenu-lista .cabecalho__link--ativo::after{display:none}
/* O ícone da área entra reduzido e sem moldura dentro do menu. */
.cabecalho__submenu-lista .area__icone{
  width:26px;
  height:26px;
  background:transparent;
  border-radius:0;
  color:var(--azul-royal);
}
.cabecalho__submenu-lista .area__icone svg{width:20px;height:20px}

/* =====================================================================
   6. HERO E BUSCA
   ===================================================================== */

.hero{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  padding:clamp(3.5rem,7vw,6rem) 0 clamp(3rem,6vw,5rem);
  border-bottom:1px solid var(--borda);
  background:linear-gradient(180deg,
    var(--branco) 0%,
    var(--cinza-claro) 60%,
    rgba(179,217,255,.22) 100%);
}

/* Grafismo geométrico discreto: malha de pontos em azul-gelo, esmaecida
   por máscara no canto superior direito. Nunca compete com o texto. */
@supports ((mask-image:radial-gradient(#000,transparent)) or (-webkit-mask-image:radial-gradient(#000,transparent))){
  .hero::before{
    content:"";
    position:absolute;
    inset:0;
    z-index:-1;
    pointer-events:none;
    background-image:radial-gradient(circle,var(--azul-gelo) 1px,transparent 1px);
    background-size:26px 26px;
    opacity:.55;
    -webkit-mask-image:radial-gradient(120% 95% at 100% 0%,#000 0%,transparent 62%);
    mask-image:radial-gradient(120% 95% at 100% 0%,#000 0%,transparent 62%);
  }
}

.hero__kicker{margin-bottom:1rem}

.hero__titulo{
  max-width:20ch;
  font-weight:700;
  font-size:clamp(2.1rem,4.5vw,3.2rem);
  letter-spacing:-.015em;
  color:var(--azul-profundo);
}

.hero__subtitulo{
  margin-top:1.25rem;
  max-width:62ch;
  font-size:clamp(1.0625rem,1.6vw,1.1875rem);
  line-height:1.65;
  color:var(--texto-mudo);
}

.hero__acoes{
  display:flex;
  flex-wrap:wrap;
  gap:.85rem;
  margin-top:2rem;
}

.hero__stats{
  display:flex;
  flex-wrap:wrap;
  gap:clamp(1.5rem,4vw,3.5rem);
  margin-top:clamp(2.5rem,5vw,3.5rem);
  padding-top:clamp(1.75rem,3vw,2.25rem);
  border-top:1px solid var(--borda);
}
.hero__stat{display:flex;flex-direction:column;gap:.15rem}
.hero__stat-numero{
  font-family:var(--fonte-condensada);
  font-weight:700;
  font-size:clamp(2rem,3.6vw,2.75rem);
  line-height:1;
  color:var(--azul-profundo);
  font-variant-numeric:tabular-nums;
}
.hero__stat-rotulo{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--texto-mudo);
}

/* Hero em fundo institucional escuro (variação opcional). */
.hero--escuro{background:var(--azul-profundo);border-bottom-color:transparent}
.hero--escuro :where(.hero__titulo,.hero__stat-numero){color:var(--branco)}
.hero--escuro :where(.hero__kicker,.hero__stat-rotulo){color:var(--azul-gelo)}
.hero--escuro :where(.hero__subtitulo){color:var(--sobre-escuro)}
.hero--escuro :where(.hero__stats){border-top-color:var(--borda-escura)}

/* Busca ------------------------------------------------------------- */

/* O formulário de busca do hero traz um botão de envio ao lado do campo:
   a linha é flex para que o botão não caia solto abaixo do input. */
.busca{
  position:relative;
  display:flex;
  align-items:center;
  gap:.6rem;
  width:100%;
  max-width:560px;
}
.busca > .btn{flex:0 0 auto}

.busca__input{
  flex:1 1 auto;
  min-width:0;
  width:100%;
  min-height:52px;
  padding:.85rem 1.1rem .85rem 3.1rem;
  font-size:1rem;
  color:var(--texto);
  background:var(--branco);
  border:1px solid var(--borda-forte);
  border-radius:var(--raio);
  box-shadow:var(--sombra-sutil);
  transition:border-color var(--transicao),box-shadow var(--transicao);
}
/* Texto de apoio: --cinza-medio não alcança 4.5:1 sobre branco. */
.busca__input::placeholder{color:var(--texto-mudo)}
.busca__input:hover{border-color:var(--azul-ceu)}
.busca__input:focus{border-color:var(--azul-royal)}

/* Sem o ícone na marcação, o campo dispensa o recuo reservado a ele. */
.busca:not(:has(.busca__icone)) .busca__input{padding-left:1.1rem}

.busca__icone{
  position:absolute;
  left:1.1rem;
  top:50%;
  transform:translateY(-50%);
  width:20px;
  height:20px;
  color:var(--cinza-medio);
  pointer-events:none;
}

/* =====================================================================
   7. CHIPS E FILTROS
   ===================================================================== */

.filtros{
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  margin:1.5rem 0 0;
}

.chip{
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  min-height:40px;
  padding:.4rem 1rem;
  font-size:.875rem;
  font-weight:500;
  color:var(--texto);
  text-decoration:none;
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:999px;
  white-space:nowrap;
  transition:color var(--transicao),border-color var(--transicao),
             background-color var(--transicao);
}
.chip:hover{color:var(--azul-royal);border-color:var(--azul-ceu)}

.chip--ativo{
  color:var(--branco);
  background:var(--azul-profundo);
  border-color:var(--azul-profundo);
  font-weight:600;
}
.chip--ativo:hover{color:var(--branco);background:var(--azul-royal);border-color:var(--azul-royal)}

.chip__contagem{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:1.55rem;
  padding:0 .35rem;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  line-height:1.6;
  color:var(--texto-mudo);
  background:var(--cinza-claro);
  border-radius:999px;
  font-variant-numeric:tabular-nums;
}
.chip--ativo .chip__contagem{color:var(--branco);background:rgba(255,255,255,.20)}

.secao--escura .chip{background:transparent;border-color:var(--borda-escura);color:var(--branco)}
.secao--escura .chip:hover{border-color:var(--azul-gelo);color:var(--azul-gelo)}
.secao--escura .chip--ativo{background:var(--branco);border-color:var(--branco);color:var(--azul-profundo)}
.secao--escura .chip--ativo .chip__contagem{background:var(--azul-tenue-forte);color:var(--azul-profundo)}

/* =====================================================================
   8. CARDS
   ===================================================================== */

.card{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:.85rem;
  height:100%;
  padding:clamp(1.5rem,2.5vw,1.9rem);
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio);
  color:var(--texto);
  text-decoration:none;
  transition:transform var(--transicao),box-shadow var(--transicao),
             border-color var(--transicao);
}
.card:hover,
.card:focus-within{
  transform:translateY(-3px);
  box-shadow:var(--sombra-media);
  border-color:var(--borda-forte);
}

.card__topo{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
}

.card__area{
  display:inline-flex;
  align-items:center;
  gap:.45rem;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.12em;
  color:var(--azul-royal);
  text-decoration:none;
}
.card__area:hover{color:var(--azul-profundo)}
.card__area svg{width:18px;height:18px}

.card__edicao{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.1em;
  color:var(--texto-mudo);   /* "Edição N" é texto: --cinza-medio ficaria em 2.8:1 */
  white-space:nowrap;
  font-variant-numeric:tabular-nums;
}

.card__titulo{
  font-size:1.15rem;
  font-weight:600;
  line-height:1.35;
  color:var(--azul-profundo);
  text-wrap:pretty;
}
.card__titulo a{color:inherit;text-decoration:none}
.card__titulo a:hover{color:var(--azul-royal);text-decoration:underline}

.card__resumo{
  font-size:.9375rem;
  line-height:1.65;
  color:var(--texto-mudo);
  display:-webkit-box;
  -webkit-line-clamp:4;
  line-clamp:4;
  -webkit-box-orient:vertical;
  overflow:hidden;
}

.card__meta{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.3rem .85rem;
  margin-top:auto;
  padding-top:.4rem;
  font-size:.8125rem;
  color:var(--texto-mudo);
}
.card__meta-item{display:inline-flex;align-items:center;gap:.4rem}
.card__meta-item svg{width:15px;height:15px;color:var(--cinza-medio)}
.card__meta-item + .card__meta-item::before{
  content:"";
  width:3px;
  height:3px;
  border-radius:50%;
  background:var(--cinza-medio);
  margin-right:.45rem;
}

.card__acoes{
  display:flex;
  flex-wrap:wrap;
  gap:.6rem;
  margin-top:auto;
  padding-top:1rem;
  border-top:1px solid var(--borda);
}
/* Quando há meta, ela já ocupa o espaço livre — as ações seguem logo abaixo. */
.card__meta ~ .card__acoes{margin-top:0}

/* Destaque: um filete superior em azul-royal, nada mais chamativo. */
.card--destaque{border-top:3px solid var(--azul-royal)}

/* =====================================================================
   9. ÁREAS TEMÁTICAS
   ===================================================================== */

.area{
  display:flex;
  flex-direction:column;
  gap:.9rem;
  height:100%;
  padding:clamp(1.5rem,2.5vw,1.9rem);
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio);
  color:var(--texto);
  text-decoration:none;
  transition:transform var(--transicao),box-shadow var(--transicao),
             border-color var(--transicao);
}
.area:hover,
.area:focus-within{
  transform:translateY(-3px);
  box-shadow:var(--sombra-media);
  border-color:var(--borda-forte);
}

.area__cabecalho{display:flex;align-items:center;gap:.9rem}

.area__icone{
  display:grid;
  place-items:center;
  width:46px;
  height:46px;
  flex:0 0 auto;
  border-radius:var(--raio-sm);
  background:var(--cinza-claro);
  color:var(--azul-profundo);
  transition:background-color var(--transicao),color var(--transicao);
}
.area__icone svg{width:24px;height:24px}
.area:hover .area__icone{background:var(--azul-tenue-forte);color:var(--azul-royal)}

.area__titulo{
  font-size:1.15rem;
  font-weight:600;
  line-height:1.3;
  color:var(--azul-profundo);
}
.area__titulo a{color:inherit;text-decoration:none}
.area__titulo a:hover{color:var(--azul-royal)}

.area__descricao{
  font-size:.9375rem;
  line-height:1.65;
  color:var(--texto-mudo);
}

.area__contagem{
  margin-top:auto;
  padding-top:.5rem;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.12em;
  color:var(--azul-royal);
  font-variant-numeric:tabular-nums;
}

/* Áreas sobre fundo institucional escuro. */
.secao--escura .area{
  background:rgba(255,255,255,.06);
  border-color:var(--borda-escura);
  color:var(--sobre-escuro);
}
.secao--escura .area:hover{background:rgba(255,255,255,.10);border-color:var(--azul-gelo)}
.secao--escura .area__titulo,
.secao--escura .area__titulo a{color:var(--branco)}
.secao--escura .area__descricao{color:var(--sobre-escuro)}
.secao--escura .area__contagem{color:var(--azul-gelo)}
.secao--escura .area__icone{background:rgba(255,255,255,.10);color:var(--azul-gelo)}
.secao--escura .area:hover .area__icone{background:rgba(255,255,255,.16);color:var(--branco)}

/* =====================================================================
   10. ESTADO VAZIO
   ===================================================================== */

/* Comunica "em preparação editorial", jamais erro. */
.vazio{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:.85rem;
  padding:clamp(2.5rem,6vw,4rem) 1.5rem;
  text-align:center;
  background:var(--cinza-claro);
  border:2px dashed var(--borda);
  border-radius:var(--raio);
}
.grade + .vazio{margin-top:clamp(1.25rem,2.5vw,2rem)}
.vazio__icone{width:48px;height:48px;color:var(--cinza-medio)}
.vazio__icone svg{width:100%;height:100%}
.vazio__titulo{font-size:1.15rem;font-weight:600;color:var(--azul-profundo)}
.vazio__texto{max-width:54ch;font-size:.9375rem;color:var(--texto-mudo)}

.secao--escura .vazio{
  background:rgba(255,255,255,.05);
  border-color:var(--borda-escura);
}
.secao--escura .vazio__titulo{color:var(--branco)}
.secao--escura .vazio__texto{color:var(--sobre-escuro)}
.secao--escura .vazio__icone{color:var(--azul-gelo)}

/* =====================================================================
   11. PUBLICAÇÃO (LEITURA)
   ===================================================================== */

.publicacao{padding:clamp(2.5rem,5vw,4rem) 0 clamp(3rem,6vw,5rem)}

/* Coluna de leitura confortável, centralizada dentro do container.
   A medida vem de um token em rem: `72ch` resolveria em larguras diferentes
   em cada bloco (o resumo é maior que o corpo) e desalinharia a coluna. */
.publicacao__cabecalho,
.publicacao__resumo,
.publicacao__corpo,
.publicacao__download{
  max-width:var(--coluna-leitura);
  margin-inline:auto;
}

.publicacao__cabecalho{display:flex;flex-direction:column;gap:1.1rem}

.publicacao__trilha{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  font-size:.875rem;
  color:var(--texto-mudo);
}
.publicacao__trilha ol,
.publicacao__trilha ul{display:flex;flex-wrap:wrap;align-items:center}
.publicacao__trilha a{color:var(--azul-royal);text-decoration:none}
.publicacao__trilha a:hover{text-decoration:underline}
.publicacao__trilha li + li::before{
  content:"/";
  margin:0 .5rem;
  color:var(--cinza-medio);
}
/* Separadores decorativos vindos da marcação são suprimidos para não duplicar. */
.publicacao__trilha [aria-hidden="true"]{display:none}
/* Na página de leitura a trilha acompanha a coluna do artigo; nas demais
   páginas ela segue a largura do container. */
.publicacao__trilha:has(+ .publicacao){max-width:var(--coluna-leitura);margin-inline:auto}

.publicacao__titulo{
  font-weight:700;
  font-size:clamp(2rem,4vw,2.85rem);
  line-height:1.15;
  letter-spacing:-.015em;
  color:var(--azul-profundo);
}

.publicacao__meta{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.3rem .85rem;
  font-size:.875rem;
  color:var(--texto-mudo);
}
.publicacao__meta > * + *::before{
  content:"";
  display:inline-block;
  width:3px;
  height:3px;
  border-radius:50%;
  background:var(--cinza-medio);
  margin-right:.5rem;
  vertical-align:middle;
}

.publicacao__resumo{
  margin-top:clamp(1.75rem,3vw,2.25rem);
  padding-left:1.25rem;
  border-left:3px solid var(--azul-gelo);
  font-size:1.1875rem;
  line-height:1.65;
  color:var(--texto-mudo);
}

/* Corpo renderizado a partir do markdown-lite (servidor). */
.publicacao__corpo{
  margin-top:clamp(2rem,4vw,2.75rem);
  font-size:1.0625rem;
  line-height:1.8;
}
.publicacao__corpo > * + *{margin-top:1.15em}
.publicacao__corpo h2{
  margin-top:2.4em;
  font-size:clamp(1.4rem,2.2vw,1.75rem);
  font-weight:700;
  line-height:1.25;
}
.publicacao__corpo h3{margin-top:2em;font-size:1.15rem;font-weight:600}
.publicacao__corpo h2 + *,
.publicacao__corpo h3 + *{margin-top:.75em}
.publicacao__corpo p{color:var(--texto)}
.publicacao__corpo ul,
.publicacao__corpo ol{padding-left:1.35rem}
.publicacao__corpo ul{list-style:disc}
.publicacao__corpo ol{list-style:decimal}
.publicacao__corpo li{margin-top:.45em}
.publicacao__corpo li::marker{color:var(--azul-ceu)}
.publicacao__corpo blockquote{
  padding:.35rem 0 .35rem 1.25rem;
  border-left:3px solid var(--azul-royal);
  color:var(--azul-profundo);
  font-size:1.0625rem;
}
.publicacao__corpo a{color:var(--azul-royal);text-decoration:underline;text-underline-offset:.2em}
.publicacao__corpo strong{color:var(--grafite);font-weight:600}

/* Painel de download — proeminente, sóbrio, só existe quando há PDF. */
.publicacao__download{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:1.25rem;
  margin-top:clamp(2.5rem,5vw,3.5rem);
  padding:clamp(1.25rem,3vw,1.75rem);
  background:var(--cinza-claro);
  border:1px solid var(--borda);
  border-radius:var(--raio-lg);
}
.publicacao__download svg{width:28px;height:28px;color:var(--azul-profundo)}
/* O rótulo do painel é um <h2> na marcação: precisa perder a escala de
   título de seção, senão domina a página de leitura. */
.publicacao__download h2,
.publicacao__download h3,
.publicacao__download strong{
  display:block;
  font-size:1.0625rem;
  font-weight:600;
  line-height:1.35;
  letter-spacing:0;
  color:var(--azul-profundo);
}
.publicacao__download p,
.publicacao__download small{font-size:.8125rem;color:var(--texto-mudo)}

.publicacao__relacionadas{
  margin-top:clamp(3rem,6vw,4.5rem);
  padding-top:clamp(2rem,4vw,3rem);
  border-top:1px solid var(--borda);
}
.publicacao__relacionadas > h2,
.publicacao__relacionadas > h3{margin-bottom:clamp(1.5rem,3vw,2rem)}

/* =====================================================================
   12. BOTÕES
   ===================================================================== */

.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.55rem;
  min-height:44px;               /* alvo tátil confortável */
  padding:.7rem 1.5rem;
  font-family:var(--fonte);
  font-size:.9375rem;
  font-weight:600;
  line-height:1.2;
  text-align:center;
  text-decoration:none;
  border:1px solid transparent;
  border-radius:var(--raio-sm);
  cursor:pointer;
  transition:background-color var(--transicao),color var(--transicao),
             border-color var(--transicao),box-shadow var(--transicao);
}
.btn svg{width:18px;height:18px}

.btn--primario{
  background:var(--azul-profundo);
  border-color:var(--azul-profundo);
  color:var(--branco);
}
.btn--primario:hover{background:var(--azul-royal);border-color:var(--azul-royal);color:var(--branco)}

.btn--secundario{
  background:transparent;
  border-color:var(--azul-profundo);
  color:var(--azul-profundo);
}
.btn--secundario:hover{background:var(--azul-profundo);color:var(--branco)}

.btn--fantasma{
  background:transparent;
  border-color:transparent;
  color:var(--azul-royal);
  padding-inline:.5rem;
}
.btn--fantasma:hover{color:var(--azul-profundo);text-decoration:underline;text-underline-offset:.2em}

/* Ação destrutiva — exclusiva do painel administrativo. */
.btn--perigo{
  background:transparent;
  border-color:var(--acao-destrutiva);
  color:var(--acao-destrutiva);
}
.btn--perigo:hover{background:var(--acao-destrutiva);border-color:var(--acao-destrutiva);color:var(--branco)}

.btn--pequeno{
  min-height:38px;
  padding:.35rem .85rem;
  font-size:.875rem;
  gap:.4rem;
}
.btn--pequeno svg{width:16px;height:16px}

.btn--bloco{display:flex;width:100%}

.btn[disabled],
.btn[aria-disabled="true"]{
  opacity:.5;
  cursor:not-allowed;
  box-shadow:none;
  pointer-events:none;
}

/* Botões sobre fundo institucional escuro. */
.secao--escura .btn--primario,
.hero--escuro .btn--primario,
.rodape .btn--primario{
  background:var(--branco);
  border-color:var(--branco);
  color:var(--azul-profundo);
}
.secao--escura .btn--primario:hover,
.hero--escuro .btn--primario:hover,
.rodape .btn--primario:hover{background:var(--azul-gelo);border-color:var(--azul-gelo);color:var(--azul-profundo)}

.secao--escura .btn--secundario,
.hero--escuro .btn--secundario,
.rodape .btn--secundario{border-color:var(--azul-gelo);color:var(--branco)}
.secao--escura .btn--secundario:hover,
.hero--escuro .btn--secundario:hover,
.rodape .btn--secundario:hover{background:var(--azul-gelo);color:var(--azul-profundo)}

.secao--escura .btn--fantasma,
.hero--escuro .btn--fantasma,
.rodape .btn--fantasma{color:var(--azul-gelo)}
.secao--escura .btn--fantasma:hover,
.hero--escuro .btn--fantasma:hover,
.rodape .btn--fantasma:hover{color:var(--branco)}

/* =====================================================================
   13. FORMULÁRIOS
   ===================================================================== */

.campo{display:flex;flex-direction:column;gap:.4rem}
.campo + .campo{margin-top:1.15rem}

.campo__rotulo{
  font-size:.9375rem;
  font-weight:600;
  color:var(--azul-profundo);
}

.campo__controle{
  width:100%;
  min-height:46px;
  padding:.65rem .9rem;
  font-size:1rem;
  color:var(--texto);
  background:var(--branco);
  border:1px solid var(--borda-forte);
  border-radius:var(--raio-sm);
  transition:border-color var(--transicao);
}
.campo__controle::placeholder{color:var(--texto-mudo)}
.campo__controle:hover{border-color:var(--azul-ceu)}
.campo__controle:focus{border-color:var(--azul-royal)}
.campo__controle[disabled],
.campo__controle[readonly]{background:var(--cinza-claro);color:var(--texto-mudo);cursor:not-allowed}

textarea.campo__controle{min-height:200px;line-height:1.65;resize:vertical}

/* Seta do select desenhada em CSS puro — sem imagem externa nem data URI. */
select.campo__controle{
  appearance:none;
  -webkit-appearance:none;
  padding-right:2.75rem;
  background-image:
    linear-gradient(45deg,transparent 50%,var(--texto-mudo) 50%),
    linear-gradient(135deg,var(--texto-mudo) 50%,transparent 50%);
  background-position:calc(100% - 22px) calc(50% - 2px),calc(100% - 16px) calc(50% - 2px);
  background-size:6px 6px,6px 6px;
  background-repeat:no-repeat;
}

input[type="checkbox"],
input[type="radio"]{accent-color:var(--azul-royal);width:1.1rem;height:1.1rem}

.campo--inline{flex-direction:row;align-items:flex-start;gap:.6rem}
.campo--inline .campo__rotulo{font-weight:400;color:var(--texto);font-size:.9375rem}

.campo__ajuda{font-size:.8125rem;line-height:1.5;color:var(--texto-mudo)}

/* Estado de erro no site público: sem vermelho (paleta institucional).
   A mensagem é sempre textual — nunca depende só da cor. */
.campo__erro{font-size:.8125rem;font-weight:600;color:var(--grafite)}
.campo--erro .campo__controle{border-color:var(--grafite)}
.campo--erro .campo__rotulo{color:var(--grafite)}

/* No admin, erro e exclusão usam o vermelho de ação. */
.admin .campo__erro,
.login .campo__erro{color:var(--acao-destrutiva)}
.admin .campo--erro .campo__controle,
.login .campo--erro .campo__controle{border-color:var(--acao-destrutiva)}

/* Campo compacto de barra de ferramentas: rótulo miúdo sobre o controle. */
.campo--linha{gap:.25rem;min-width:190px}
.campo--linha .campo__rotulo{font-size:.8125rem;font-weight:600;color:var(--texto-mudo)}
.campo--linha .campo__controle{min-height:42px;font-size:.9375rem}

/* Caixa de seleção com rótulo à direita. */
.campo--caixa{flex-direction:row;align-items:center;gap:.6rem}
.campo--caixa .campo__rotulo{font-weight:400;color:var(--texto);cursor:pointer}
.campo__caixa{
  width:1.15rem;
  height:1.15rem;
  flex:0 0 auto;
  accent-color:var(--azul-royal);
  cursor:pointer;
}

/* Área de texto ampliada para o corpo da publicação. */
.campo__controle--alto{min-height:340px}

/* Seleção de arquivo. */
input[type="file"].campo__controle{padding:.55rem .75rem;cursor:pointer}
input[type="file"].campo__controle::file-selector-button{
  margin-right:.85rem;
  padding:.4rem .9rem;
  font-family:var(--fonte);
  font-size:.875rem;
  font-weight:600;
  color:var(--azul-profundo);
  background:var(--cinza-claro);
  border:1px solid var(--borda-forte);
  border-radius:var(--raio-sm);
  cursor:pointer;
}
input[type="file"].campo__controle::file-selector-button:hover{
  background:var(--azul-tenue-forte);
}

/* Barra de progresso nativa (<progress>). */
.progresso{
  appearance:none;
  -webkit-appearance:none;
  width:100%;
  max-width:240px;
  height:8px;
  border:0;
  border-radius:999px;
  background:var(--cinza-claro);
  color:var(--azul-royal);
  overflow:hidden;
}
.progresso::-webkit-progress-bar{background:var(--cinza-claro);border-radius:999px}
.progresso::-webkit-progress-value{background:var(--azul-royal);border-radius:999px}
.progresso::-moz-progress-bar{background:var(--azul-royal);border-radius:999px}

/* Campos sobre fundo institucional escuro (newsletter). */
.secao--escura .campo__rotulo{color:var(--branco)}
.secao--escura .campo__ajuda{color:var(--azul-gelo)}
.secao--escura .campo__erro{color:var(--branco)}
.secao--escura .campo__controle{border-color:transparent}
.secao--escura .campo__controle:focus{border-color:var(--azul-gelo)}

/* =====================================================================
   14. NEWSLETTER
   ===================================================================== */

.newsletter{
  display:grid;
  grid-template-columns:1.05fr 1fr;
  gap:clamp(1.75rem,4vw,3.5rem);
  align-items:center;
}
.newsletter__texto{display:flex;flex-direction:column;gap:.85rem;max-width:52ch}
.newsletter__texto h2,
.newsletter__texto h3{margin:0}

.newsletter__form{display:flex;flex-direction:column;gap:1rem}
.newsletter__form .campo + .campo{margin-top:0}
.newsletter__form .btn{align-self:flex-start}

@media (max-width:640px){
  .newsletter__form .btn{align-self:stretch}
}

/* =====================================================================
   15. RODAPÉ
   ===================================================================== */

.rodape{
  background:var(--azul-profundo);
  color:var(--sobre-escuro);
  padding:clamp(3rem,6vw,4.5rem) 0 2rem;
}

.rodape__interno{
  display:grid;
  grid-template-columns:minmax(220px,1fr) 2fr;
  gap:clamp(2rem,5vw,4rem);
  width:100%;
  max-width:var(--container);
  margin-inline:auto;
  padding-inline:clamp(1.25rem,4vw,2rem);
}

.rodape__marca{display:flex;flex-direction:column;gap:1rem;max-width:34ch}
/* Versão completa (nome + slogan) dimensionada pela largura, para acompanhar
   a coluna de texto do rodapé. 240px ≫ mínimo de 90px do manual, e o slogan
   fica confortavelmente legível. */
.rodape__marca img{width:min(300px,85%);height:auto}
.rodape__marca p{font-size:.9375rem;line-height:1.65;color:var(--sobre-escuro)}

.rodape__cols{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(1.5rem,3vw,2.5rem);
}
.rodape__col{display:flex;flex-direction:column;gap:.6rem}
/* O botão de acesso restrito acompanha a coluna sem esticar na largura toda. */
.rodape__restrito{align-self:flex-start;margin-top:.5rem}
/* Os links costumam vir em <ul>: o ritmo da coluna vale também dentro dela. */
.rodape__col ul{display:flex;flex-direction:column;gap:.6rem}
/* A coluna de inscrição não cabe em um terço da faixa — ocupa a linha inteira. */

.rodape__titulo{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--azul-gelo);
  margin-bottom:.25rem;
}

.rodape__link{
  font-size:.9375rem;
  color:var(--sobre-escuro);
  text-decoration:none;
  transition:color var(--transicao);
}
.rodape__link:hover{color:var(--azul-gelo);text-decoration:underline;text-underline-offset:.2em}

.rodape__legal{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  width:100%;
  max-width:var(--container);
  margin:clamp(2.5rem,5vw,3.5rem) auto 0;
  padding:1.5rem clamp(1.25rem,4vw,2rem) 0;
  border-top:1px solid var(--borda-escura);
  font-size:.8125rem;
  color:rgba(255,255,255,.78);
}
/* Quando a linha legal vem dentro de .rodape__interno (grade de 2 colunas)
   ela precisa atravessar a grade inteira, sem repetir container e recuos. */
.rodape__interno > .rodape__legal{
  grid-column:1 / -1;
  max-width:none;
  margin-inline:0;
  padding-inline:0;
}
.rodape__legal a{color:rgba(255,255,255,.78);text-decoration:none}
.rodape__legal a:hover{color:var(--azul-gelo);text-decoration:underline}

/* A tagline "Tradição que evolui </>" é parte da marca. */
.rodape__tagline{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:1rem;
  letter-spacing:.08em;
  color:var(--azul-gelo);
  white-space:nowrap;
}

/* =====================================================================
   16. UTILITÁRIOS E ALERTAS
   ===================================================================== */

.texto-mudo{color:var(--texto-mudo)}
.oculto{display:none !important}   /* preferir o atributo hidden */

.sr-apenas{
  position:absolute !important;
  width:1px;height:1px;
  padding:0;margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  clip-path:inset(50%);
  white-space:nowrap;
  border:0;
}

.selo{
  display:inline-flex;
  align-items:center;
  gap:.35rem;
  padding:.15rem .6rem;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.75rem;
  text-transform:uppercase;
  letter-spacing:.12em;
  color:var(--texto-mudo);
  background:var(--cinza-claro);
  border:1px solid var(--borda);
  border-radius:var(--raio-sm);
  white-space:nowrap;
}
.selo--destaque{
  color:var(--azul-profundo);
  background:var(--azul-gelo);
  border-color:var(--azul-gelo);
}
.selo--rascunho{
  color:var(--texto-mudo);
  background:transparent;
  border-style:dashed;
  border-color:var(--cinza-medio);
}

.alerta{
  display:flex;
  align-items:flex-start;
  gap:.75rem;
  padding:.95rem 1.15rem;
  font-size:.9375rem;
  line-height:1.6;
  background:var(--cinza-claro);
  border:1px solid var(--borda);
  border-left:3px solid var(--cinza-medio);
  border-radius:var(--raio-sm);
  color:var(--texto);
}
.alerta svg{width:20px;height:20px;margin-top:.15rem}
.alerta--sucesso{
  background:var(--azul-tenue-forte);
  border-color:var(--borda-forte);
  border-left-color:var(--azul-royal);
  color:var(--azul-profundo);
}
.alerta--info{
  background:var(--cinza-claro);
  border-left-color:var(--azul-ceu);
  color:var(--texto);
}
/* Erro no site público permanece na paleta institucional; a severidade é
   comunicada pelo texto e por aria-live, nunca apenas pela cor. */
.alerta--erro{
  background:var(--tinta-suave);
  border-color:var(--borda);
  border-left-color:var(--grafite);
  color:var(--grafite);
  font-weight:500;
}
/* No admin, o vermelho de ação reforça o alerta. */
.admin .alerta--erro,
.login .alerta--erro{
  border-left-color:var(--acao-destrutiva);
  color:var(--acao-destrutiva);
}

/* Carregamento — brilho suave, desligado em prefers-reduced-motion. */
.esqueleto{
  position:relative;
  overflow:hidden;
  min-height:1rem;
  background:var(--cinza-claro);
  border-radius:var(--raio-sm);
  color:transparent !important;
  user-select:none;
}
.esqueleto::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.85) 50%,transparent 100%);
  transform:translateX(-100%);
  animation:esqueleto-brilho 1.5s ease-in-out infinite;
}
.esqueleto--titulo{height:1.8rem}
.esqueleto--linha{height:.85rem}
.esqueleto--linha + .esqueleto--linha{margin-top:.65rem}
.esqueleto--curta{width:60%}
.esqueleto--card{height:210px;border-radius:var(--raio)}

@keyframes esqueleto-brilho{to{transform:translateX(100%)}}

/* Barra de proporção sem style inline: a largura vem de uma classe. */
.barra{
  height:6px;
  width:100%;
  background:var(--cinza-claro);
  border-radius:999px;
  overflow:hidden;
}
.barra__nivel{
  display:block;
  height:100%;
  width:0;
  background:var(--azul-royal);
  border-radius:999px;
  transition:width var(--transicao);
}
.barra__nivel--p0{width:0}
.barra__nivel--p5{width:5%}
.barra__nivel--p10{width:10%}
.barra__nivel--p15{width:15%}
.barra__nivel--p20{width:20%}
.barra__nivel--p25{width:25%}
.barra__nivel--p30{width:30%}
.barra__nivel--p35{width:35%}
.barra__nivel--p40{width:40%}
.barra__nivel--p45{width:45%}
.barra__nivel--p50{width:50%}
.barra__nivel--p55{width:55%}
.barra__nivel--p60{width:60%}
.barra__nivel--p65{width:65%}
.barra__nivel--p70{width:70%}
.barra__nivel--p75{width:75%}
.barra__nivel--p80{width:80%}
.barra__nivel--p85{width:85%}
.barra__nivel--p90{width:90%}
.barra__nivel--p95{width:95%}
.barra__nivel--p100{width:100%}

/* =====================================================================
   17. ADMIN
   ===================================================================== */

.admin{
  display:flex;
  flex-direction:column;
  min-height:100vh;
  background:var(--cinza-claro);
}

.admin__barra{
  position:sticky;
  top:0;
  z-index:40;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  padding:.75rem clamp(1rem,3vw,2rem);
  background:var(--azul-profundo);
  color:var(--branco);
}
/* Funciona com ou sem .container interno. */
.admin__barra .container{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  padding-inline:0;
}

/* 38px de altura ≈ 94px de largura — respeita o mínimo do manual. */
.admin__logo{display:inline-flex;align-items:center;gap:.75rem;text-decoration:none;color:var(--branco)}
.admin__logo img{height:44px;width:auto}
.admin__logo span{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--azul-gelo);
}

.admin__sair{
  display:inline-flex;
  align-items:center;
  gap:.45rem;
  min-height:40px;
  padding:.4rem 1rem;
  font-size:.9375rem;
  font-weight:600;
  color:var(--branco);
  text-decoration:none;
  background:transparent;
  border:1px solid var(--borda-escura);
  border-radius:var(--raio-sm);
  transition:background-color var(--transicao),border-color var(--transicao),color var(--transicao);
}
.admin__sair:hover{background:rgba(255,255,255,.12);border-color:var(--azul-gelo);color:var(--branco)}

.admin__conteudo{
  flex:1 1 auto;
  width:100%;
  max-width:var(--container);
  margin-inline:auto;
  padding:clamp(1.75rem,4vw,2.75rem) clamp(1rem,3vw,2rem) 4rem;
}

.admin__abas{
  display:flex;
  gap:.25rem;
  margin-bottom:clamp(1.5rem,3vw,2rem);
  border-bottom:1px solid var(--borda);
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
}
.admin__aba{
  min-height:44px;
  padding:.7rem 1.1rem;
  font-size:.9375rem;
  font-weight:600;
  color:var(--texto-mudo);
  white-space:nowrap;
  background:none;
  border:0;
  border-bottom:2px solid transparent;
  transition:color var(--transicao),border-color var(--transicao);
}
.admin__aba:hover{color:var(--azul-royal)}
.admin__aba--ativa{color:var(--azul-profundo);border-bottom-color:var(--azul-royal)}

.admin__painel{
  padding:clamp(1.25rem,3vw,2rem);
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio);
  box-shadow:var(--sombra-sutil);
}
.admin__painel + .admin__painel{margin-top:1.5rem}

/* Acesso restrito ------------------------------------------------- */

.login{
  display:grid;
  place-items:center;
  min-height:100vh;
  padding:2rem 1rem;
  background:linear-gradient(180deg,
    var(--branco) 0%,
    var(--cinza-claro) 60%,
    rgba(179,217,255,.22) 100%);
}
.login__caixa{
  width:100%;
  max-width:420px;
  padding:clamp(1.75rem,4vw,2.5rem);
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio-lg);
  box-shadow:var(--sombra-media);
}
.login__caixa img{height:40px;width:auto;margin-bottom:1.5rem}
.login__caixa h1{font-size:1.5rem;margin-bottom:.35rem}
.login__caixa .btn{margin-top:1.5rem}

/* Tabelas ---------------------------------------------------------- */

/* O envoltório rola horizontalmente em telas estreitas — a página, nunca.
   Aceita qualquer um dos nomes abaixo, conforme a marcação do painel. */
.tabela-rolagem,
.tabela-rolar,
.tabela__rolagem,
.tabela-wrap,
.admin__tabela{
  width:100%;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  border:1px solid var(--borda);
  border-radius:var(--raio);
}
.tabela-rolagem .tabela,
.tabela-rolar .tabela,
.tabela__rolagem .tabela,
.tabela-wrap .tabela,
.admin__tabela .tabela{min-width:680px}

.tabela{width:100%;font-size:.9375rem;background:var(--branco)}
.tabela caption{
  padding:.75rem 1rem;
  text-align:left;
  font-size:.875rem;
  color:var(--texto-mudo);
}
.tabela th{
  padding:.75rem 1rem;
  text-align:left;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.12em;
  color:var(--azul-profundo);
  background:var(--cinza-claro);
  border-bottom:1px solid var(--borda);
  white-space:nowrap;
}
.tabela td{
  padding:.8rem 1rem;
  vertical-align:middle;
  border-bottom:1px solid var(--borda);
  color:var(--texto);
}
.tabela tbody tr{transition:background-color var(--transicao)}
.tabela tbody tr:hover{background:var(--azul-tenue)}
.tabela tbody tr:last-child td{border-bottom:0}
.tabela td.numero,
.tabela th.numero{text-align:right;font-variant-numeric:tabular-nums}

.tabela__titulo{
  display:block;
  font-weight:600;
  color:var(--azul-profundo);
  line-height:1.35;
}
.tabela__slug{
  display:block;
  margin-top:.15rem;
  font-size:.8125rem;
  color:var(--texto-mudo);
  word-break:break-all;
}

/* A classe costuma ficar no próprio <td>: como o display deixa de ser
   table-cell, o `vertical-align:middle` da linha não vale mais e o
   alinhamento vertical precisa vir do flex. */
.tabela__acoes{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  align-content:center;
  gap:.4rem;
  justify-content:flex-start;
}

/* Janela modal ------------------------------------------------------ */

.modal{
  position:fixed;
  inset:0;
  z-index:80;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:clamp(1rem,4vw,2rem);
}
.modal__fundo{
  position:absolute;
  inset:0;
  background:rgba(26,26,46,.55);
  border:0;
}
.modal__caixa{
  position:relative;
  z-index:1;
  display:flex;
  flex-direction:column;
  width:100%;
  max-width:720px;
  max-height:90vh;
  background:var(--branco);
  border-radius:var(--raio-lg);
  box-shadow:var(--sombra-media);
  overflow:hidden;
}
.modal__cabecalho{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  padding:1.25rem clamp(1.25rem,3vw,1.75rem);
  border-bottom:1px solid var(--borda);
}
.modal__cabecalho h2,
.modal__cabecalho h3{font-size:1.25rem;font-weight:600}
.modal__corpo{
  flex:1 1 auto;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  padding:clamp(1.25rem,3vw,1.75rem);
}
.modal__rodape{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:flex-end;
  gap:.6rem;
  padding:1.1rem clamp(1.25rem,3vw,1.75rem);
  background:var(--cinza-claro);
  border-top:1px solid var(--borda);
}

/* Envio de PDF ------------------------------------------------------ */

.zona-upload{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:.6rem;
  padding:clamp(1.75rem,4vw,2.5rem) 1.25rem;
  text-align:center;
  color:var(--texto-mudo);
  background:var(--cinza-claro);
  border:2px dashed var(--borda);
  border-radius:var(--raio);
  cursor:pointer;
  transition:border-color var(--transicao),background-color var(--transicao),color var(--transicao);
}
.zona-upload:hover{border-color:var(--azul-ceu)}
.zona-upload svg{width:32px;height:32px;color:var(--cinza-medio)}
.zona-upload strong{color:var(--azul-profundo);font-weight:600}
.zona-upload small{font-size:.8125rem}
.zona-upload--ativa{
  border-color:var(--azul-royal);
  background:var(--azul-tenue-forte);
  color:var(--azul-profundo);
}
.zona-upload--ativa svg{color:var(--azul-royal)}

/* Métricas ---------------------------------------------------------- */

.metricas{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:clamp(1rem,2vw,1.5rem);
  margin-bottom:clamp(1.5rem,3vw,2rem);
}
.metrica{
  display:flex;
  flex-direction:column;
  gap:.35rem;
  padding:1.35rem 1.5rem;
  background:var(--branco);
  border:1px solid var(--borda);
  border-radius:var(--raio);
}
.metrica__numero{
  font-family:var(--fonte-condensada);
  font-weight:700;
  font-size:clamp(2rem,3.4vw,2.6rem);
  line-height:1;
  color:var(--azul-profundo);
  font-variant-numeric:tabular-nums;
}
.metrica__rotulo{
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:.8125rem;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--texto-mudo);
}

/* Estrutura interna dos painéis ------------------------------------ */

.pagina-admin{background:var(--cinza-claro)}
/* Trava a rolagem de fundo enquanto uma janela modal está aberta. */
.com-modal{overflow:hidden}

.admin__marca{display:flex;align-items:center;gap:.85rem;min-width:0}
/* O nome do painel é um <h1>: precisa perder o porte de título de página. */
.admin__nome{
  margin:0;
  font-family:var(--fonte-condensada);
  font-weight:600;
  font-size:1rem;
  line-height:1.2;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--azul-gelo);
  white-space:nowrap;
}
.admin__conta{display:flex;align-items:center;gap:1rem;min-width:0}
.admin__sessao{
  margin:0;
  font-size:.875rem;
  color:var(--sobre-escuro);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.admin__sessao span{font-weight:600;color:var(--branco)}

.admin__abas-lista{display:flex;gap:.25rem;min-width:max-content}

.admin__titulo{font-size:1.5rem;font-weight:700;margin-bottom:1.5rem}
.admin__subtitulo{font-size:1.0625rem;font-weight:600}

.admin__acoes-rapidas{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.5rem}

/* Barra de ferramentas da listagem: busca elástica + filtros alinhados. */
.admin__ferramentas{
  align-items:flex-end;
  gap:.75rem;
  margin:0 0 1rem;
}
.admin__ferramentas .busca{flex:1 1 260px;max-width:none}
.admin__ferramentas .busca__input{min-height:42px;box-shadow:none}
.admin__ferramentas .campo + .campo{margin-top:0}
.admin__ferramentas .btn{min-height:42px}

.admin__contagem{margin:0 0 .9rem;font-size:.875rem}

/* Sub-bloco de painel: separado por filete dentro do painel, em caixa
   dentro de janelas modais. */
.admin__bloco{display:flex;flex-direction:column;gap:.7rem}
.admin__painel > .admin__bloco{
  margin-top:2.25rem;
  padding-top:1.75rem;
  border-top:1px solid var(--borda);
}
.modal__corpo .admin__bloco{
  margin-top:1.25rem;
  padding:1.15rem;
  background:var(--cinza-claro);
  border:1px solid var(--borda);
  border-radius:var(--raio);
}
.modal__corpo .admin__bloco .progresso{max-width:none}
.admin__bloco .btn{align-self:flex-start}

/* Tela de acesso restrito ------------------------------------------ */

.login__logo{height:40px;width:auto;margin-bottom:1.5rem}
.login__titulo{font-size:1.5rem;font-weight:700;margin-bottom:.35rem}
.login__texto{margin-bottom:1.75rem;font-size:.9375rem}
.login__form{display:flex;flex-direction:column}
.login__rodape{margin-top:1.5rem;text-align:center;font-size:.875rem}
.login__voltar{color:var(--azul-royal)}

/* Janela modal — títulos, fechamento e variação estreita ------------ */

.modal__titulo{font-size:1.25rem;font-weight:600;margin:0}
.modal__fechar{flex:0 0 auto}
.modal__caixa--estreita{max-width:480px}

/* Envio de PDF — arquivo escolhido ---------------------------------- */

.zona-upload .campo__controle{max-width:420px}
.zona-upload__selecionado{
  font-size:.875rem;
  font-weight:600;
  color:var(--azul-profundo);
}

/* =====================================================================
   18. RESPONSIVO
   ===================================================================== */

/* Três colunas passam a duas; duas colunas continuam duas. */
@media (max-width:1024px){
  .grade--3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rodape__interno{grid-template-columns:1fr}
}

/* Menu principal colapsa em hambúrguer. */
@media (max-width:900px){
  .cabecalho__interno{flex-wrap:wrap;padding-block:.5rem}

  /* O colapso depende do script: sem ele o botão não abriria nada e a
     navegação ficaria inacessível no celular. */
  html.com-js .cabecalho__menu-btn{display:inline-flex}
  html.com-js .cabecalho__nav,
  html.com-js .cabecalho__acoes{display:none}

  /* Sem JavaScript: menu sempre visível, empilhado. */
  html:not(.com-js) .cabecalho__nav,
  html:not(.com-js) .cabecalho__acoes{
    display:flex;
    flex-direction:column;
    align-items:stretch;
    flex-basis:100%;
    gap:.2rem;
  }
  html:not(.com-js) .cabecalho__nav{padding:.75rem 0 .5rem;border-top:1px solid var(--borda)}
  html:not(.com-js) .cabecalho__acoes{padding:.25rem 0 1rem}
  html:not(.com-js) .cabecalho__acoes .btn{width:100%}

  /* Dois ganchos de abertura: o atributo no cabeçalho (contrato) e o estado
     que o script aplica diretamente à navegação. */
  .cabecalho[data-aberto="true"] .cabecalho__nav,
  .cabecalho[data-aberto="true"] .cabecalho__acoes,
  .cabecalho__nav--aberta,
  .cabecalho__nav[data-aberto]{
    display:flex;
    flex-direction:column;
    align-items:stretch;
    flex-basis:100%;
    gap:.2rem;
    max-height:calc(100vh - var(--altura-cabecalho) - 1rem);
    overflow-y:auto;
  }
  .cabecalho[data-aberto="true"] .cabecalho__nav,
  .cabecalho__nav--aberta,
  .cabecalho__nav[data-aberto]{
    padding:.75rem 0 .5rem;
    border-top:1px solid var(--borda);
  }
  /* As ações acompanham a navegação aberta mesmo estando fora dela. */
  .cabecalho:has(.cabecalho__nav--aberta) .cabecalho__acoes,
  .cabecalho:has(.cabecalho__nav[data-aberto]) .cabecalho__acoes{
    display:flex;
    flex-basis:100%;
    padding:.25rem 0 1rem;
  }
  .cabecalho[data-aberto="true"] .cabecalho__acoes{padding:.25rem 0 1rem}
  .cabecalho[data-aberto="true"] .cabecalho__link,
  .cabecalho__nav--aberta .cabecalho__link,
  .cabecalho__nav[data-aberto] .cabecalho__link{
    justify-content:flex-start;
    padding:.7rem .75rem;
  }
  .cabecalho[data-aberto="true"] .cabecalho__link--ativo::after,
  .cabecalho__nav--aberta .cabecalho__link--ativo::after,
  .cabecalho__nav[data-aberto] .cabecalho__link--ativo::after{left:.75rem;right:auto;width:24px}
  .cabecalho[data-aberto="true"] .cabecalho__acoes .btn,
  .cabecalho:has(.cabecalho__nav--aberta) .cabecalho__acoes .btn,
  .cabecalho:has(.cabecalho__nav[data-aberto]) .cabecalho__acoes .btn{width:100%}

  /* Sem suporte a :has(), a chamada permanece visível em linha própria
     para nunca ficar inacessível no celular. */
  @supports not selector(:has(*)){
    .cabecalho__acoes{
      display:flex;
      flex-basis:100%;
      justify-content:flex-start;
      padding:0 0 .75rem;
    }
  }

  .cabecalho__submenu{width:100%}
  .cabecalho__submenu > summary{width:100%;justify-content:space-between}
  .cabecalho[data-aberto="true"] .cabecalho__submenu-lista,
  .cabecalho__nav--aberta .cabecalho__submenu-lista,
  .cabecalho__nav[data-aberto] .cabecalho__submenu-lista{
    position:static;
    min-width:0;
    padding:.15rem 0 .35rem .75rem;
    margin:.1rem 0 .35rem .55rem;
    border:0;
    border-left:2px solid var(--borda);
    border-radius:0;
    box-shadow:none;
  }
}

@media (max-width:768px){
  .newsletter{grid-template-columns:1fr}
  .rodape__cols{grid-template-columns:repeat(2,minmax(0,1fr))}
}

@media (max-width:640px){
  :root{--espaco-secao:clamp(3rem,9vw,4.5rem)}
  /* Contrato §9: uma coluna abaixo de 640px, duas até 1024px. */
  .grade--2,
  .grade--3{grid-template-columns:1fr}
  .cabecalho__marca img{height:38px}   /* ≈94px de largura, acima do mínimo */
  .hero__stats{gap:1.5rem 2rem}
  .publicacao__meta{font-size:.8125rem}
  .publicacao__download{flex-direction:column;align-items:flex-start}
  .publicacao__download .btn{width:100%}
  .rodape__cols{grid-template-columns:1fr}
  .rodape__legal{justify-content:flex-start}
  .modal{padding:0;align-items:flex-end}
  .modal__caixa{max-width:none;max-height:94vh;border-radius:var(--raio-lg) var(--raio-lg) 0 0}
  .tabela th,.tabela td{padding:.65rem .75rem}
  .tabela__acoes{justify-content:flex-start}
}

/* =====================================================================
   19. ACESSIBILIDADE E IMPRESSÃO
   ===================================================================== */

/* Foco sempre visível, em todo elemento focável. */
:focus-visible{
  outline:3px solid var(--azul-royal);
  outline-offset:2px;
  border-radius:var(--raio-sm);
}
/* Sobre fundo institucional escuro o contorno muda para azul-gelo. */
.secao--escura :focus-visible,
.hero--escuro :focus-visible,
.rodape :focus-visible,
.admin__barra :focus-visible{outline-color:var(--azul-gelo)}

/* Ir para o conteúdo — visível apenas ao receber foco. */
.pular-conteudo,
.pular,
.pular-link,
.skip-link{
  position:absolute;
  top:.5rem;
  left:1rem;
  z-index:100;
  padding:.75rem 1.1rem;
  font-weight:600;
  color:var(--branco);
  text-decoration:none;
  background:var(--azul-profundo);
  border-radius:var(--raio-sm);
  box-shadow:var(--sombra-media);
  transform:translateY(-200%);
  transition:transform var(--transicao);
}
/* A marcação pode combinar .sr-apenas com a classe do salto; ao receber
   foco o link precisa desfazer o recorte de leitor de tela. */
.pular-conteudo:focus,
.pular:focus,
.pular-link:focus,
.skip-link:focus{
  position:absolute !important;
  width:auto;
  height:auto;
  margin:0;
  overflow:visible;
  clip:auto;
  clip-path:none;
  white-space:nowrap;
  transform:translateY(0);
}

/* Elemento visualmente oculto que reaparece ao receber foco. */
.sr-apenas--focavel:focus,
.sr-apenas--focavel:focus-visible{
  position:static !important;
  width:auto;height:auto;
  margin:0;overflow:visible;
  clip:auto;clip-path:none;
  white-space:normal;
}

/* Movimento reduzido: nenhuma transição, nenhuma animação. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
  .card:hover,.card:focus-within,
  .area:hover,.area:focus-within{transform:none}
  .esqueleto::after{display:none}
}

/* Mais contraste quando o sistema pede. */
@media (prefers-contrast:more){
  :root{
    --borda:rgba(26,26,46,.45);
    --borda-forte:rgba(0,43,143,.55);
    --texto-mudo:var(--grafite);
  }
}

/* Impressão: a publicação é o documento. Sem navegação, sem chamadas. */
@media print{
  .cabecalho,
  .rodape,
  .newsletter,
  .busca,
  .filtros,
  .hero__acoes,
  .card__acoes,
  .publicacao__download,
  .publicacao__relacionadas,
  .admin__barra,
  .admin__abas,
  .modal,
  .zona-upload,
  .cabecalho__submenu-lista,
  .pular-conteudo,
  .pular,
  .pular-link,
  .skip-link,
  .btn{display:none !important}

  html,body{background:var(--branco) !important;color:var(--preto) !important}
  body{font-size:11.5pt;line-height:1.5}

  .secao,.publicacao,.hero{padding:0 !important;background:none !important;border:0 !important}
  .hero::before{display:none}
  .container,.container--leitura{max-width:none;padding:0}

  h1,h2,h3,h4,
  .publicacao__titulo,
  .card__titulo,
  .area__titulo{color:var(--preto) !important;break-after:avoid;page-break-after:avoid}

  .publicacao__trilha:has(+ .publicacao),
  .publicacao__cabecalho,
  .publicacao__resumo,
  .publicacao__corpo{max-width:none}
  .publicacao__resumo{border-left-color:var(--cinza-medio);color:var(--preto)}
  .publicacao__corpo blockquote{border-left-color:var(--cinza-medio);color:var(--preto)}

  a{color:var(--preto) !important;text-decoration:none}
  .publicacao__corpo a::after{content:" (" attr(href) ")";font-size:.85em;color:var(--texto-mudo)}

  .card,.area,.alerta,.vazio,.metrica,.admin__painel{
    border-color:var(--cinza-medio) !important;
    box-shadow:none !important;
    break-inside:avoid;
    page-break-inside:avoid;
  }
  p,li,blockquote{orphans:3;widows:3}
}
