/* =========================================================
   SOLTS — Estilos base
   Tokens e componentes extraídos do projeto de referência.
   ========================================================= */

/* ---------- Fontes (Plus Jakarta Sans) ---------- */
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-300-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-300-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-400-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-400-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-500-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-500-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-600-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-600-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-700-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-700-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:800;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-800-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:800;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-800-normal.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:italic;font-weight:700;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-700-italic.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:italic;font-weight:700;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-700-italic.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}
@font-face{font-family:"Plus Jakarta Sans";font-style:italic;font-weight:800;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-ext-800-italic.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}
@font-face{font-family:"Plus Jakarta Sans";font-style:italic;font-weight:800;font-display:swap;src:url(../fonts/plus-jakarta-sans-latin-800-italic.woff2) format("woff2");unicode-range:u+0000-00ff,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}

/* ---------- Tokens de design ---------- */
:root{
  --background: 210 20% 98%;
  --foreground: 215 40% 12%;
  --card: 0 0% 100%;
  --card-foreground: 215 40% 12%;
  --primary: 208 100% 33%;            /* #005DAA */
  --primary-foreground: 0 0% 100%;
  --secondary: 45 100% 50%;
  --secondary-foreground: 215 40% 12%;
  --accent: 48 100% 50%;              /* #FFCC00 */
  --accent-foreground: 208 100% 20%;
  --muted: 210 20% 95%;
  --muted-foreground: 215 15% 45%;
  --border: 210 20% 90%;
  --ring: 208 100% 33%;
  --radius: 2rem;

  --brand-blue: #005DAA;
  --brand-yellow: #FFCC00;

  --slate-100: #f1f5f9;
  --slate-600: #475569;
  --slate-700: #334155;
  --slate-900: #0f172a;

  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .05);
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);
  --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);

  --header-h: 80px;
  --header-h-scrolled: 64px;
}

/* ---------- Reset ---------- */
*,*::before,*::after{box-sizing:border-box}
html{
  line-height:1.5;
  -webkit-text-size-adjust:100%;
  -webkit-tap-highlight-color:transparent;
  scroll-behavior:smooth;
}
body{
  margin:0;
  font-family:"Plus Jakarta Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  background-color:hsl(var(--background));
  color:hsl(var(--foreground));
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
h1,h2,h3,h4,h5,h6{font-family:inherit;margin:0}
p{margin:0}
ul{margin:0;padding:0;list-style:none}
a{color:inherit;text-decoration:none}
img,svg{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}

/* ---------- Layout ---------- */
.container{
  width:100%;
  max-width:1400px;
  margin-inline:auto;
  padding-inline:1rem;
}

/* Título display do sistema visual (uso futuro nas seções internas) */
.heading-display{font-weight:800;font-style:italic}

/* Efeito de vidro do cabeçalho */
.glass{
  border-bottom:1px solid hsl(var(--border) / .3);
  background-color:hsl(var(--card) / .7);
  -webkit-backdrop-filter:blur(24px);
  backdrop-filter:blur(24px);
}

/* =========================================================
   TOPBAR
   ========================================================= */
.topbar{
  display:none;
  /* Cor do tema, definida em Configuracoes. Vem de /tema.css; o valor de
     reserva vale se aquela folha faltar. O texto e branco com transparencia,
     entao a cor escolhida precisa ser escura o bastante para ele ler. */
  background-color:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground) / .8);
  font-size:.75rem;
  line-height:1rem;
  padding-block:.5rem;
}
.topbar__inner{display:flex;align-items:center;justify-content:space-between}
.topbar__group{display:flex;align-items:center;gap:1.25rem}
.topbar__group--right{gap:1rem}
.topbar__item{display:flex;align-items:center;gap:.375rem}
.topbar__item svg{flex-shrink:0}
.topbar__divider{width:1px;height:.75rem;background-color:hsl(var(--primary-foreground) / .2)}
.topbar__social{display:flex;align-items:center;gap:.5rem}
.topbar__social a{transition:color .15s ease}
.topbar__social a:hover{color:hsl(var(--secondary))}

@media (min-width:768px){
  .topbar{display:block}
}

/* =========================================================
   HEADER
   ========================================================= */
.header{
  position:sticky;
  top:0;
  z-index:50;
  height:var(--header-h);
  box-shadow:0 1px 4px rgba(0,0,0,.06);
  transition:height .3s ease-out, box-shadow .3s ease-out;
}
.header.is-scrolled{
  height:var(--header-h-scrolled);
  box-shadow:0 4px 28px rgba(0,93,170,.14);
}
.header__inner{
  height:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
}
.header__logo{display:flex;align-items:center;gap:.75rem;flex-shrink:0;margin-left:1rem}
.header__logo img{
  height:64px;
  max-height:64px;
  width:auto;
  object-fit:contain;
  transition:height .3s ease-out;
}
.header.is-scrolled .header__logo img{height:46px}

.header__burger{padding:.5rem;color:hsl(var(--foreground));display:inline-flex}
.header__burger .icon-close{display:none}
.header__burger.is-open .icon-menu{display:none}
.header__burger.is-open .icon-close{display:block}

/* ---------- Navegação desktop ---------- */
.nav{display:none;align-items:center;gap:.125rem;margin-left:1rem}
.nav__item{position:relative}
.nav__item-row{display:flex;align-items:center}

/* Hover e item ativo marcam apenas o texto — sem fundo.
   A cor e a do tema, definida em Configuracoes: vem de /tema.css, e o
   --brand-blue fica de reserva para o caso de aquela folha faltar. */
.nav__link{
  padding:.5rem .75rem;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:600;
  color:hsl(var(--foreground));
  transition:color .15s ease;
}
.nav__link:hover{color:var(--tema, var(--brand-blue))}
.nav__link.is-active{color:var(--tema, var(--brand-blue))}

.nav__toggle{
  padding:.5rem .5rem .5rem 0;
  font-size:.875rem;
  color:hsl(var(--foreground));
  transition:color .15s ease;
}
.nav__toggle:hover{color:var(--tema, var(--brand-blue))}
/* Item da página atual: a seta acompanha a cor do link */
.nav__toggle.is-active{color:var(--tema, var(--brand-blue))}
.nav__chevron{transition:transform .2s ease}
.nav__item.is-open .nav__chevron,
.mobile-nav__group.is-open .nav__chevron{transform:rotate(180deg)}
.nav__item.is-open > .nav__item-row .nav__link--split,
.nav__item.is-open > .nav__item-row .nav__toggle{color:var(--tema, var(--brand-blue))}

/* ---------- Dropdown ---------- */
.dropdown{
  position:absolute;
  top:100%;
  left:0;
  padding-top:.5rem;
  z-index:50;
  display:none;
}
.nav__item.is-open > .dropdown{display:block}
.dropdown__panel{
  background-color:#fff;
  border:1px solid var(--slate-100);
  border-radius:.75rem;
  box-shadow:var(--shadow-xl);
  padding-block:.5rem;
  min-width:220px;
  animation:dropdown-in .15s ease-out;
}
@keyframes dropdown-in{from{transform:translateY(-8px)}to{transform:translateY(0)}}
.dropdown__link{
  display:block;
  padding:.625rem 1.25rem;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:500;
  color:var(--slate-700);
  transition:background-color .15s ease, color .15s ease;
}
/* A tinta de fundo tambem segue o tema. Duas declaracoes: navegador que nao
   conhece color-mix() ignora a segunda e fica com o cinza neutro, que combina
   com qualquer cor escolhida. */
.dropdown__link:hover{
  background-color:var(--slate-100);
  background-color:color-mix(in srgb, var(--tema, var(--brand-blue)) 6%, transparent);
  color:var(--tema, var(--brand-blue));
}

/* ---------- Botão "Doe Agora" ---------- */
.btn-donate{
  margin-left:.5rem;
  display:flex;
  align-items:center;
  gap:.375rem;
  padding:.5rem 1.25rem;
  background-color:var(--brand-yellow);
  color:var(--slate-900);
  border-radius:.75rem;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:700;
  box-shadow:var(--shadow-sm);
  transition:filter .15s ease;
}
.btn-donate:hover{filter:brightness(1.05)}

/* ---------- Busca do topo ---------- */
/* Recolhida, e um quadrado do tamanho do "Doe Agora" ao lado: 2,25rem de altura
   sai dos .5rem de padding mais a linha de 1,25rem daquele botao, e o mesmo raio
   de .75rem.

   Vive DENTRO do `.nav`, e nao ao lado dele: o `.header__inner` alinha a
   navegacao inteira a direita, entao o campo crescendo alarga o `.nav` e empurra
   os itens do menu para a esquerda. Fora dele, o campo empurraria o logotipo.

   A margem e a mesma que o "Doe Agora" ja tinha, para o trio ficar espacado por
   igual. */
.busca-topo{
  display:flex;
  align-items:center;
  margin-left:.5rem;
}

/* O quadrado. Silhueta do botao de baixar PDF — anel de 1px por dentro, lupa na
   cor do tema —, mas com o fundo BRANCO em repouso: fechado ele convive com o
   "Doe Agora" amarelo cheio, e duas placas coloridas lado a lado disputariam a
   atencao que e para ser dele.

   A cor do tema entra so quando a caixa esta aberta, e nao no hover do proprio
   botao: aberta, a busca deixou de ser um detalhe do topo e virou o que a pessoa
   esta fazendo — e o botao preenchido e o que diz onde termina a acao. */
.busca-topo__botao{
  display:inline-grid;
  place-items:center;
  flex-shrink:0;
  width:2.25rem;
  height:2.25rem;
  padding:0;
  color:var(--tema, hsl(var(--primary)));
  background:hsl(var(--card));
  border:0;
  border-radius:.75rem;
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tema, hsl(var(--primary))) 16%, transparent);
  cursor:pointer;
  transition:background-color .25s ease,color .25s ease,box-shadow .25s ease;
}
.busca-topo:hover .busca-topo__botao,
.busca-topo:focus-within .busca-topo__botao{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  box-shadow:0 6px 14px -4px color-mix(in srgb, var(--tema, hsl(var(--primary))) 55%, transparent);
}

/* O anel de foco do teclado fica por fora da placa preenchida, para nao sumir
   dentro dela. */
.busca-topo__botao:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}

/* A caixa que recorta o campo. E ela que muda de largura — de zero ao aberto —,
   e por isso e ela que empurra o menu para a esquerda.

   `overflow:hidden` e o que faz o campo SURGIR de tras do botao em vez de
   simplesmente aparecer: o campo tem largura fixa e desliza para dentro deste
   recorte, entao da esquerda so se ve o pedaco que ja entrou. */
.busca-topo__caixa{
  display:block;
  width:0;
  overflow:hidden;
  border-radius:.75rem;
  /* .8s. Abaixo disso o campo chega antes de o olho acompanhar a entrada, e o
     deslizamento se le como um aparecimento; muito acima, o menu fica andando
     de um lado para o outro a cada mouse que passa de raspagem a caminho do
     "Doe Agora".
     A caixa e o campo compartilham duracao e curva — separados, a borda
     esquerda do campo descolaria da borda da caixa no meio do percurso. */
  transition:width .8s cubic-bezier(.4, 0, .2, 1),margin .8s cubic-bezier(.4, 0, .2, 1);
}
/* A largura aberta e a MESMA aqui e no campo: a caixa e o recorte, o campo e o
   que desliza dentro dela. Diferentes, sobraria um vao de um lado ou o campo
   seria cortado do outro. Mexeu numa, mexa na outra. */
.busca-topo:hover .busca-topo__caixa,
.busca-topo:focus-within .busca-topo__caixa{
  width:min(13rem, 30vw);
  margin-right:.375rem;
}

/* Largura FIXA, e nao 100%: acompanhando a caixa, o campo se esticaria no
   lugar, que e o efeito de "aparecer" que se quis evitar. Fixo, ele entra
   inteiro, deslizando.

   `translateX(100%)` e a posicao de partida: uma largura inteira a direita,
   escondido pelo recorte. A cortina sobe da direita para a esquerda ate o zero.

   Fechado mas ainda FOCAVEL, de proposito: escondido com `display` ou
   `visibility` ele sairia da ordem de tabulacao, e quem navega pelo teclado nao
   teria como abrir a caixa. Assim o Tab cai nele, o `:focus-within` dispara e a
   caixa se abre no mesmo instante. */
.busca-topo__campo{
  width:min(13rem, 30vw);
  height:2.25rem;
  padding:.375rem .75rem;
  border:0;
  opacity:0;
  transform:translateX(100%);
  font-family:inherit;
  font-size:.875rem;
  color:var(--slate-900);
  background:hsl(var(--card));
  border-radius:.75rem;
  box-shadow:inset 0 0 0 1px hsl(var(--border));
  /* A opacidade continua mais curta que o deslizamento, de proposito: o campo
     termina de aparecer no comeco do trajeto, e o resto do tempo se ve ele
     DESLIZANDO — que e o movimento que se quer mostrar. Igualada aos .8s, ele
     entraria translucido ate o fim e o efeito voltaria a ser o de surgir do
     nada. */
  transition:transform .8s cubic-bezier(.4, 0, .2, 1),opacity .25s ease;
}
.busca-topo:hover .busca-topo__campo,
.busca-topo:focus-within .busca-topo__campo{
  transform:translateX(0);
  opacity:1;
}

/* O convite, e nao o conteudo: mais claro e um ponto menor que o texto que a
   pessoa digita, para nao ser confundido com algo ja preenchido. A cor sai do
   mesmo `--muted-foreground` dos textos de apoio do site. */
.busca-topo__campo::placeholder{
  font-size:.8125rem;
  font-weight:400;
  color:hsl(var(--muted-foreground));
  opacity:1;
}

/* Anel POR DENTRO, e nao `outline`: a caixa recorta o que passa da borda, e um
   contorno desenhado do lado de fora sumiria justamente no campo em foco. */
.busca-topo__campo:focus-visible{
  outline:none;
  box-shadow:inset 0 0 0 2px var(--tema, hsl(var(--primary)));
}

/* O "x" de limpar que o navegador desenha num `type="search"`.
   Ele vem num azul do sistema, que nao tem nada a ver com o tema, e colado no
   texto — num termo longo, a ultima letra encosta nele.

   Nao da para recolorir o desenho nativo: a saida e apaga-lo (`appearance:none`)
   e redesenha-lo. O `mask` recorta um retangulo da cor do tema no formato do X,
   entao a cor passa a ser a variavel do tema, como no resto da pagina — e nao um
   segundo azul que so aparece quando ha texto digitado.

   Vale para os campos de busca do site: o do topo, o da Transparencia e o de
   Noticias.

   So Chrome e Safari desenham este botao; no Firefox a regra nao encontra nada e
   nao ha o que corrigir. */
.busca-topo__campo::-webkit-search-cancel-button,
.consulta-busca__campo::-webkit-search-cancel-button,
.noticias-filtro__campo input[type="search"]::-webkit-search-cancel-button{
  -webkit-appearance:none;
  appearance:none;
  width:.6875rem;
  height:.6875rem;
  margin-left:.625rem;
  cursor:pointer;
  background-color:var(--tema, hsl(var(--primary)));
  -webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 6 18 18M18 6 6 18'/%3E%3C/svg%3E");
  mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 6 18 18M18 6 6 18'/%3E%3C/svg%3E");
  -webkit-mask-size:contain;
  mask-size:contain;
  -webkit-mask-repeat:no-repeat;
  mask-repeat:no-repeat;
  -webkit-mask-position:center;
  mask-position:center;
}

/* Quem pediu menos animacao ve a caixa abrir e fechar sem o deslizamento. */
@media (prefers-reduced-motion:reduce){
  .busca-topo__caixa,
  .busca-topo__campo{transition:none}
}

@media (min-width:1024px){
  .nav{display:flex}
  .header__burger{display:none}
}

/* ---------- Navegação mobile ---------- */
.mobile-nav{
  display:none;
  background-color:#fff;
  border-top:1px solid var(--slate-100);
  padding:0 1rem 1rem;
  max-height:calc(100vh - var(--header-h));
  overflow-y:auto;
}
.mobile-nav.is-open{display:block}
.mobile-nav__link{
  display:block;
  padding-block:.75rem;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:600;
  color:hsl(var(--foreground));
  border-bottom:1px solid var(--slate-100);
  transition:color .2s ease;
}
.mobile-nav__link:hover{color:var(--tema, var(--brand-blue))}
.mobile-nav__row{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--slate-100)}
.mobile-nav__link--flush{flex:1;border-bottom:0}
.mobile-nav__toggle{padding:.75rem;color:hsl(var(--foreground));display:inline-flex}
.mobile-nav__sub{display:none;padding-left:1rem;padding-bottom:.25rem}
.mobile-nav__group.is-open .mobile-nav__sub{display:block}
.mobile-nav__sub a{
  display:block;
  padding-block:.5rem;
  font-size:.875rem;
  line-height:1.25rem;
  color:var(--slate-600);
  transition:color .15s ease;
}
.mobile-nav__sub a:hover{color:var(--tema, var(--brand-blue))}
.mobile-nav__cta{
  margin-top:.75rem;
  display:block;
  text-align:center;
  padding:.625rem 1.5rem;
  background-color:var(--brand-yellow);
  color:var(--slate-900);
  border-radius:.75rem;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:700;
}

@media (min-width:1024px){
  .mobile-nav,.mobile-nav.is-open{display:none}
}

/* =========================================================
   BANNER / CARROSSEL
   ========================================================= */
.banner{
  position:relative;
  width:100%;
  overflow:hidden;
  background-color:hsl(var(--primary));
}
/* Mantém a altura da seção seguindo a proporção real da arte */
.banner__spacer{width:100%;height:auto;visibility:hidden}

.banner__track{position:absolute;inset:0}
/* Transição "zoom suave": o slide novo entra levemente ampliado e assenta no
   tamanho real enquanto surge; o anterior apenas se dissolve por baixo. */
.banner__slide{
  position:absolute;
  inset:0;
  z-index:1;
  opacity:0;
  transform:scale(1.05);
  will-change:opacity,transform;
}
.banner__slide img{width:100%;height:auto;display:block}
.banner__slide a{display:block;width:100%;height:100%}

/* Estado final: visível, no tamanho real e por cima do que está saindo */
.banner__slide.is-active{z-index:2;opacity:1;transform:scale(1)}

/* Entrada: anima de scale(1.05)/opacidade 0 até scale(1)/opacidade 1 */
.banner__slide.is-entering{
  transition:opacity .8s ease, transform .8s cubic-bezier(.22,1,.36,1);
}
/* Saída: permanece no tamanho real e some por baixo */
.banner__slide.is-exiting{
  z-index:1;
  opacity:0;
  transform:scale(1);
  transition:opacity .8s ease, transform .8s cubic-bezier(.22,1,.36,1);
}

.banner__arrow{
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  z-index:20;
  padding:.75rem;
  border-radius:9999px;
  background-color:rgba(255,255,255,.1);
  -webkit-backdrop-filter:blur(12px);
  backdrop-filter:blur(12px);
  color:#fff;
  border:1px solid rgba(255,255,255,.15);
  transition:background-color .3s ease, transform .3s ease;
}
.banner__arrow--prev{left:1rem}
.banner__arrow--next{right:1rem}
.banner__arrow:hover{background-color:rgba(255,255,255,.25);transform:translateY(-50%) scale(1.1)}
.banner__arrow:active{transform:translateY(-50%) scale(.95)}

.banner__dots{
  position:absolute;
  bottom:1rem;
  left:50%;
  transform:translateX(-50%);
  z-index:20;
  display:flex;
  gap:.5rem;
}
.banner__dot{
  height:.375rem;
  width:1rem;
  border-radius:9999px;
  background-color:rgba(255,255,255,.3);
  transition:width .5s ease, background-color .5s ease, box-shadow .5s ease;
}
.banner__dot:hover{background-color:rgba(255,255,255,.6)}
.banner__dot.is-active{
  width:2.5rem;
  background-color:hsl(var(--accent));
  box-shadow:0 0 8px rgba(255,204,0,.6);
}

/* Um único slide: esconde os controles de navegação */
.banner.is-single .banner__arrow,
.banner.is-single .banner__dots{display:none}

@media (prefers-reduced-motion:reduce){
  .banner__slide,.banner__arrow,.banner__dot,.header,.header__logo img{transition:none !important}
}

/* =========================================================
   PÁGINAS INTERNAS
   ========================================================= */
.page-header{
  padding-block:4rem 2.5rem;
  background-color:hsl(var(--muted) / .3);
  border-bottom:1px solid hsl(var(--border) / .6);
  /* folga para o cabeçalho fixo não cobrir o título ao chegar pela âncora */
  scroll-margin-top:5rem;
}
.page-header__title{
  margin-top:.75rem;
  font-size:1.875rem;
  line-height:2.25rem;
  color:hsl(var(--foreground));
}
.page-header__subtitle{
  margin-top:1rem;
  max-width:42rem;
  font-size:1.125rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}
.page-content{padding-block:4rem}
.page-content p{
  font-size:1rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}

/* ---------- Abertura com imagem ----------
   A classe so entra no container quando ha imagem enviada. Sem ela, nenhuma
   destas regras alcanca o bloco, e o texto segue ocupando a largura inteira
   como sempre ocupou. */
.abertura{
  display:grid;
  grid-template-columns:1fr;
  gap:2.5rem;
  /* Uma coluna centrada contra a outra: e o que poe a foto na mesma linha do
     texto, e nao pendurada no topo ou na base dele. */
  align-items:center;
}
/* O respiro entre paragrafos passa a sair daqui: dentro da coluna eles deixam
   de ser filhos diretos de .page-content, onde a regra geral mora. */
.abertura__texto > * + *{margin-top:1.125rem}
/* Mesmo acabamento da foto da home — cantos de 1.5rem e sombra alta — para o
   site nao ganhar um segundo jeito de apresentar imagem. O recorte em 3:2
   garante a mesma forma seja qual for o arquivo enviado. */
.abertura__figura{
  margin:0;
  border-radius:1.5rem;
  overflow:hidden;
  box-shadow:var(--shadow-xl);
}
.abertura__figura img{width:100%;height:auto;aspect-ratio:3 / 2;object-fit:cover}

@media (min-width:1024px){
  /* 1.25fr deixa o texto na casa dos 70 caracteres por linha, que e o intervalo
     confortavel de leitura; o teto de 26rem impede a foto de crescer a ponto de
     virar o assunto do bloco. */
  .abertura{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:3.5rem}
  /* Encostada na margem direita do container, alinhada com o titulo e o
     subtitulo do cabecalho logo acima. */
  .abertura__figura{justify-self:end;max-width:26rem}
}

/* Bloco de conteúdo seguinte, destacado do anterior por fundo e filete */
.page-section{
  padding-block:4rem;
  background-color:hsl(var(--muted) / .3);
  border-top:1px solid hsl(var(--border) / .6);
  /* folga para o cabeçalho fixo não cobrir o título ao chegar pela âncora */
  scroll-margin-top:5rem;
}
/* Alterna o fundo quando duas seções ficam lado a lado */
.page-section--plain{background-color:transparent}
.page-section__title{
  font-size:1.5rem;
  line-height:2rem;
  color:hsl(var(--foreground));
}
.page-section__lead{
  margin-top:1rem;
  max-width:42rem;
  font-size:1.125rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}
.page-section__body{margin-top:2rem}
.page-section__body p{
  font-size:1rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}

@media (min-width:768px){
  .page-header{padding-block:5rem 3rem}
  .page-header__title{font-size:3rem;line-height:1}
  .page-section__title{font-size:2.25rem;line-height:2.5rem}
}

/* =========================================================
   QUEM SOMOS (home)
   ========================================================= */
.section-about{
  padding-block:6rem;
  background-color:hsl(var(--muted) / .3);
  /* folga para o cabeçalho fixo não cobrir o título ao chegar via #quem-somos */
  scroll-margin-top:5rem;
}
.about__grid{
  display:grid;
  grid-template-columns:1fr;
  gap:4rem;
  align-items:center;
}

/* ---------- Coluna de texto ---------- */
.section-eyebrow{
  display:block;
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:700;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--brand-yellow);
}
.section-title{
  margin-top:.75rem;
  font-size:1.875rem;
  line-height:2.25rem;
  color:hsl(var(--foreground));
}
.about__lead{
  margin-top:1.5rem;
  font-size:1.125rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}
.about__paragraph{
  margin-top:1rem;
  font-size:1rem;
  line-height:1.625;
  color:hsl(var(--muted-foreground));
}
/* Botao de destaque do site: "Conheca nossa historia" na home e "Enviar
   mensagem" no formulario de contato. Sao os dois unicos usos no site — o
   .btn-primary do painel vem do Bootstrap, noutra folha, e nao e afetado. */
.btn-primary{
  display:inline-block;
  margin-top:2rem;
  padding:.875rem 2rem;
  /* Cor do tema, definida em Configuracoes. Vem de /tema.css; o valor de
     reserva vale se aquela folha faltar. */
  background-color:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground));
  font-size:.875rem;
  line-height:1.25rem;
  font-weight:700;
  border-radius:.75rem;
  box-shadow:var(--shadow-md);
  /* Clareia por filtro, e nao por opacidade sobre o fundo: a cor do tema chega
     como hexadecimal, e hexadecimal nao aceita o `/ .9` do hsl(). E o mesmo
     recurso que o botao de doacao e o do rodape ja usam. */
  transition:filter .15s ease;
}
.btn-primary:hover{filter:brightness(1.05)}

/* ---------- Coluna visual ---------- */
.about__media{display:flex;flex-direction:column;gap:1.25rem}

.about__photo{
  position:relative;
  margin:0;
  border-radius:1.5rem;
  overflow:hidden;
  box-shadow:var(--shadow-xl);
}
/* Card sempre em 3:2 — a proporção da foto, então ela aparece praticamente
   inteira. O object-fit garante o mesmo formato se a imagem for trocada. */
.about__photo img{width:100%;height:auto;aspect-ratio:3 / 2;object-fit:cover}
/* Véu escuro na base, para o texto da legenda ficar legível sobre a foto.

   Cor do tema, definida em Configuracoes. Vem de /tema.css em componentes
   separados (--tema-rgb), e não como --tema: aqui a cor precisa de
   transparência, e não há como aplicar alfa a um hexadecimal já pronto dentro
   de um gradiente. O valor de reserva é a cor original do site, para o véu
   continuar existindo se aquela folha faltar — sem ele a legenda branca
   ficaria ilegível sobre foto clara. */
.about__photo::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(to top, rgba(var(--tema-rgb, 0,61,120), .6), transparent);
}
.about__photo-caption{position:absolute;bottom:1rem;left:1.25rem;z-index:1}
.about__photo-title{color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:700}
.about__photo-subtitle{color:rgba(255,255,255,.7);font-size:.75rem;line-height:1rem}

@media (min-width:768px){
  .section-title{font-size:3rem;line-height:1}
}
@media (min-width:1024px){
  .about__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* =========================================================
   RODAPÉ
   ========================================================= */
.footer{
  /* Mesma cor do tema da barra superior: as duas faixas escuras do site
     fecham a pagina em cima e embaixo, e devem combinar. */
  background-color:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground));
}
.footer__top{padding-block:4rem}
.footer__grid{display:grid;grid-template-columns:1fr;gap:2.5rem}

.footer__logo{height:3rem;width:auto;object-fit:contain;margin-bottom:1rem;filter:brightness(0) invert(1)}
.footer__text{font-size:.875rem;line-height:1.625;opacity:.7}
.footer__text--strong{opacity:.8;margin-bottom:1.25rem}

.footer__badge{
  margin-top:1.25rem;
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  border:1px solid hsl(var(--accent) / .3);
  background-color:hsl(var(--accent) / .1);
  border-radius:9999px;
  padding:.375rem .75rem;
  font-size:11px;
  font-weight:800;
  text-transform:uppercase;
  letter-spacing:.1em;
  color:hsl(var(--accent));
}

.footer__social{display:flex;align-items:center;gap:.75rem;margin-top:1.25rem}
.footer__social a{
  width:2.25rem;
  height:2.25rem;
  border-radius:9999px;
  background-color:hsl(var(--primary-foreground) / .1);
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background-color .3s ease, color .3s ease;
}
.footer__social a:hover{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground))}

.footer__hashtags{
  margin-top:1rem;
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  font-size:11px;
  font-weight:700;
  opacity:.6;
}
.footer__hashtags span{color:hsl(var(--accent))}

.footer__title{font-size:1.125rem;line-height:1.75rem;font-weight:700;margin-bottom:1rem}
.footer__title--spaced{margin-top:1.75rem;margin-bottom:.75rem}

.footer__list{font-size:.875rem;line-height:1.25rem;opacity:.8;display:flex;flex-direction:column;gap:.625rem}
.footer__list--contact{gap:.75rem}
.footer__list--tight{gap:.5rem}
.footer__list a,
.footer__linkbtn{transition:color .2s ease, opacity .2s ease}
.footer__list a:hover,
.footer__linkbtn:hover{color:hsl(var(--accent));opacity:1}
.footer__list--contact li{display:flex;align-items:center;gap:.5rem}
.footer__icon{color:hsl(var(--accent));flex-shrink:0}
.footer__icon--top{margin-top:.125rem;align-self:flex-start}
.footer__list--contact li:has(.footer__icon--top){align-items:flex-start}

.footer__cta{
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  padding:.75rem 1.5rem;
  background-color:hsl(var(--accent));
  color:hsl(var(--accent-foreground));
  font-weight:700;
  font-size:.875rem;
  line-height:1.25rem;
  border-radius:.75rem;
  box-shadow:var(--shadow-md);
  transition:filter .15s ease;
}
.footer__cta:hover{filter:brightness(1.05)}
.footer__cnpj{margin-top:.75rem;font-size:11px;opacity:.5}

.footer__bottom{border-top:1px solid hsl(var(--primary-foreground) / .1);padding-block:1.25rem}
.footer__bottom-inner{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:space-between;
  gap:.5rem;
  text-align:center;
}
.footer__copy{font-size:.875rem;line-height:1.25rem;opacity:.5;display:flex;align-items:center;gap:.25rem}
.footer__heart{color:#f87171}
.footer__legal{font-size:11px;opacity:.4}

@media (min-width:640px){
  .footer__bottom-inner{flex-direction:row;text-align:left}
}
@media (min-width:768px){
  .footer__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:1024px){
  .footer__grid{grid-template-columns:repeat(4,minmax(0,1fr))}
}


/* ==========================================================================
   FORMULÁRIO DE CONTATO
   Acrescentado na Etapa 5. Usa os mesmos tokens do restante do site, para que
   o formulário pareça nativo do layout. Só entra em cena quando ligado no
   painel; com ele desligado, nada aqui é renderizado.
   ========================================================================== */
.form-section{padding:4rem 0;background:hsl(var(--background))}
.form-section .page-section__title{margin-bottom:1.5rem}

.form-contato{max-width:52rem}

.form-grid{display:grid;gap:1rem;margin-bottom:1rem}
@media (min-width:768px){.form-grid{grid-template-columns:1fr 1fr}}

.form-campo{display:flex;flex-direction:column;gap:.375rem;margin-bottom:1rem}
.form-campo label{font-size:.875rem;font-weight:600;color:hsl(var(--foreground))}
.form-campo label span{color:#b42318}

.form-campo input,
.form-campo textarea{
  font:inherit;
  color:hsl(var(--foreground));
  background:hsl(var(--card));
  border:1px solid hsl(var(--foreground)/.15);
  border-radius:.5rem;
  padding:.75rem 1rem;
  width:100%;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.form-campo textarea{resize:vertical;min-height:9rem}

.form-campo input:focus-visible,
.form-campo textarea:focus-visible{
  outline:none;
  border-color:hsl(var(--primary));
  box-shadow:0 0 0 3px hsl(var(--primary)/.18);
}
.form-campo input[aria-invalid="true"],
.form-campo textarea[aria-invalid="true"]{border-color:#b42318}

.form-consentimento{display:flex;gap:.625rem;align-items:flex-start;margin:.5rem 0 1.5rem}
.form-consentimento input{margin-top:.2rem;width:1rem;height:1rem;flex-shrink:0;accent-color:hsl(var(--primary))}
.form-consentimento label{font-size:.875rem;line-height:1.5;color:hsl(var(--foreground)/.8)}

.form-contato .btn-primary{border:0;cursor:pointer}

.form-aviso{border-radius:.5rem;padding:1rem 1.25rem;margin-bottom:1.5rem;font-size:.9375rem}
.form-aviso--ok{background:hsl(152 45% 95%);color:hsl(152 55% 22%);border:1px solid hsl(152 45% 80%)}
.form-aviso--erro{background:hsl(4 70% 96%);color:#8a1c14;border:1px solid hsl(4 70% 85%)}
.form-aviso ul{margin:.5rem 0 0;padding-left:1.25rem}

/* Campo isca contra robô. Fora da tela, e não display:none — alguns robôs
   ignoram campos ocultos, mas preenchem os que "existem". */
.form-isca{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* Rotulo visivel apenas para leitor de tela. O site nao tinha um utilitario
   desses; e necessario para rotular campos cujo proposito ja esta claro
   visualmente pelo contexto. */
.visually-hidden{
  position:absolute;
  width:1px;height:1px;
  padding:0;margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
/* Acesso ao painel a partir do rodape. Discreto de proposito: herda o tamanho
   e a opacidade da linha legal e so ganha contraste no hover e no foco, para
   nao virar mais um item de navegacao aos olhos do visitante. */
.footer__acesso{
  text-decoration:none;
  opacity:.85;
  transition:opacity .2s ease;
}
.footer__acesso:hover,
.footer__acesso:focus-visible{
  opacity:1;
  text-decoration:underline;
}

@media (prefers-reduced-motion:reduce){
  .footer__acesso{transition:none}
}
/* =========================================================
   Texto de apresentacao da home vindo do editor
   Antes eram dois paragrafos escritos a mao, cada um com a sua classe
   (.about__lead e .about__paragraph) carregando o proprio margin-top. Vindo do
   editor, saem <p> sem classe nenhuma e o reset `p{margin:0}` do site os cola.
   O espacamento passa a ser responsabilidade do container.
   ========================================================= */
.about__lead > * + *{margin-top:1rem}

/* Todos os paragrafos com o mesmo corpo. Havia aqui uma regra encolhendo do
   segundo em diante, herdada de quando eram dois campos separados no Blade.
   Com um campo unico, o editor mostra todos iguais e o site os mostrava
   diferentes — o editor deixava de valer como previa do resultado.
   */

/* O editor tambem produz titulos, listas e citacoes. Sem estas regras eles
   herdariam o reset do site — lista sem marcador, titulo sem respiro. */
.about__lead h2,
.about__lead h3,
.about__lead h4{
  color:hsl(var(--foreground));
  font-size:1.125rem;
  line-height:1.4;
  margin-top:1.5rem;
}
.about__lead ul,
.about__lead ol{
  font-size:1rem;
  padding-left:1.25rem;
  list-style:revert;
}
.about__lead li + li{margin-top:.375rem}
.about__lead blockquote{
  font-size:1rem;
  padding-left:1rem;
  border-left:3px solid hsl(var(--primary) / .3);
}
.about__lead a{color:hsl(var(--primary));text-decoration:underline}
.about__lead strong{color:hsl(var(--foreground))}

/* =========================================================
   CONTATO — acabamento
   Formulario a esquerda, ocupando a maior parte; dados da entidade num cartao
   a direita. A ordem no HTML e a mesma, entao teclado e leitor de tela seguem
   a ordem visual.
   ========================================================= */
/* Os dois blocos viraram UM cartao, dividido ao meio.

   Antes eram duas pecas soltas com dois centimetros de vao entre elas, e a
   pagina ficava com dois objetos disputando a atencao. Reunidos numa moldura
   so — formulario no claro, dados no escuro —, eles se leem como as duas faces
   da mesma coisa: escrever para a entidade e saber onde ela esta.

   `overflow:hidden` e o que faz o painel escuro respeitar o canto arredondado
   da moldura; sem ele o retangulo escuro vazaria pelos cantos.
   `gap:0` porque a divisao agora e a propria mudanca de fundo, e nao um vao. */
.contato-layout{
  display:grid;
  grid-template-columns:1fr;
  gap:0;
  overflow:hidden;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1.5rem;
  box-shadow:var(--shadow-md);
}

/* ---------- Formulario ---------- */
/* O formulario mora num cartao.

   Antes ele era um bloco solto ao lado do cartao de dados, e a razao escrita
   aqui era evitar duas molduras competindo. O que resolve a competicao nao e
   tirar a moldura de um dos dois: e dar PESOS diferentes. O formulario, que e a
   acao da pagina, ficou branco e elevado; o cartao de dados, que e consulta,
   perdeu a sombra e ganhou fundo apagado. Os dois tem moldura, e ninguem
   confunde qual e o principal. */
/* Metade clara da moldura. A borda e a sombra sairam daqui: quem as carrega
   agora e o cartao de fora, e mante-las aqui desenharia uma caixa dentro da
   outra. */
.contato-formulario{
  padding:2rem 1.5rem;
}
@media (min-width:640px){
  .contato-formulario{padding:2.5rem}
}

/* Titulo no corpo do texto, nao na fonte de display: ali competia com o titulo
   da pagina, logo acima. O tracinho embaixo repete o gesto do cabecalho da
   pagina e amarra o cartao ao resto do site. */
.contato-formulario__titulo{
  font-size:1.375rem;
  line-height:1.3;
  font-weight:700;
  color:var(--slate-900);
  margin:0 0 1.75rem;
}
.contato-formulario__titulo::after{
  content:"";
  display:block;
  width:2.5rem;
  height:3px;
  margin-top:.875rem;
  border-radius:999px;
  background:var(--tema, hsl(var(--primary)));
}
.contato-formulario .form-contato{max-width:none}

/* Rotulo em versalete, igual ao do cartao de dados ao lado: as duas colunas
   passam a parecer da mesma familia. */
.contato-formulario .form-campo label{
  font-size:.6875rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--muted-foreground));
}

/* Campo com fundo apagado e sem contorno visivel; ao receber o foco ele fica
   branco e ganha o anel do tema. E o que da tato ao formulario: enquanto se
   preenche, o campo ativo e o unico claro da coluna. */
/* Campos enxutos: com sete deles empilhados, a altura de antes empurrava o
   botao de enviar para fora da tela num notebook. `font-size` junto com o
   `padding` — so encolher a caixa em volta de um texto de 16px deixaria o campo
   apertado em vez de menor. */
.contato-formulario .form-campo input,
.contato-formulario .form-campo select,
.contato-formulario .form-campo textarea{
  padding:.5625rem .875rem;
  font-size:.9375rem;
  line-height:1.4;
  border:1px solid transparent;
  border-radius:.75rem;
  /* `background-color`, e nao o atalho `background`: o seletor de assunto
     desenha a propria seta em `background-image`, e o atalho a apagaria a cada
     hover e a cada foco. */
  background-color:hsl(var(--muted) / .6);
  transition:background-color .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.contato-formulario .form-campo input:hover,
.contato-formulario .form-campo select:hover,
.contato-formulario .form-campo textarea:hover{background-color:hsl(var(--muted))}
/* `:focus`, e nao `:focus-visible`: naquele o navegador decide se o realce
   aparece, e para campo de texto a resposta muda conforme o caminho do foco.
   Num campo onde se DIGITA, saber onde o texto vai cair nao e preferencia de
   navegacao — vale para quem chegou pelo mouse tambem. */
.contato-formulario .form-campo input:focus,
.contato-formulario .form-campo select:focus,
.contato-formulario .form-campo textarea:focus{
  outline:0;
  background-color:hsl(var(--card));
  border-color:var(--tema, hsl(var(--primary)));
  box-shadow:0 0 0 4px hsl(var(--muted));
  box-shadow:0 0 0 4px color-mix(in srgb, var(--tema, hsl(var(--primary))) 18%, transparent);
}
.contato-formulario .form-campo textarea{min-height:7rem}

/* O seletor de assunto.

   `appearance:none` apaga a seta do sistema, que vem em cinza-escuro sobre
   fundo proprio e destoa dos campos vizinhos; a seta desenhada aqui e a mesma
   do menu do site. Ela vai no `background`, e nao num elemento a parte, porque
   `select` nao aceita filho que nao seja `option`.

   `data:` no lugar de arquivo: a CSP do site declara `img-src 'self' data:`, e
   um SVG de nove bytes uteis nao merece uma requisicao. */
.contato-formulario .form-campo select{
  width:100%;
  appearance:none;
  -webkit-appearance:none;
  padding-right:2.25rem;
  /* `font-family` e nao o atalho `font`: `select` nao herda a fonte do site
     sozinho, mas o atalho zeraria junto o `line-height` da regra de cima — e o
     campo ficava 1px mais alto que os vizinhos, o bastante para desalinhar a
     linha do formulario. */
  font-family:inherit;
  font-size:.9375rem;
  line-height:1.4;
  color:hsl(var(--foreground));
  cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right .875rem center;
  background-size:1.125rem 1.125rem;
}

/* Enquanto nada foi escolhido, o texto fica em tom de apoio — como o
   `placeholder` dos outros campos. Escolhido, ele vira texto normal.
   `:has()` faz isso sem script; navegador que nao o conhece mostra tudo em
   tom normal, que e uma degradacao boa. */
.contato-formulario .form-campo select:has(option[value=""]:checked){
  color:hsl(var(--muted-foreground));
}
.contato-formulario .form-campo select option{color:hsl(var(--foreground))}

/* ---------- Escolha do modo de envio ---------- */
/* Dois cartoes-radio no alto do formulario. O radio de verdade continua ali,
   escondido: e ele que carrega a escolha no envio, responde ao teclado e e
   anunciado pelo leitor de tela. O que se ve e o `label` em volta.

   `fieldset` sem borda nem respiro proprio: o navegador desenha os tres por
   padrao, e aqui a moldura seria uma caixa a mais dentro do cartao. */
.form-modo{
  margin:0 0 1.5rem;
  padding:0;
  border:0;
}
.form-modo__titulo{
  padding:0;
  margin:0 0 .625rem;
  font-size:.6875rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--muted-foreground));
}

/* Lado a lado a partir do tablet; empilhados no celular, onde duas colunas
   deixariam os rotulos em duas linhas cada. */
.form-modo__opcoes{display:grid;gap:.625rem;grid-template-columns:minmax(0,1fr)}
@media (min-width:560px){
  .form-modo__opcoes{grid-template-columns:repeat(2,minmax(0,1fr))}
}

.form-modo__opcao{
  display:flex;
  align-items:flex-start;
  gap:.625rem;
  padding:.75rem .875rem;
  border:1px solid hsl(var(--border));
  border-radius:.75rem;
  background:hsl(var(--card));
  cursor:pointer;
}
.form-modo__opcao:hover{background:hsl(var(--muted) / .5)}

/* Sem `transition` aqui, e nao por gosto.
   O Chrome nao reavalia a transicao quando o que muda e o estado de `:has()`:
   com ela, o cartao ficava congelado na cor anterior — clicar no segundo pintava
   o PRIMEIRO de verde. Medido: com `transition:none` as duas cores acompanham a
   escolha; com ela, ficam trocadas. A troca instantanea tambem responde melhor
   num controle de duas opcoes. */

/* O radio some da vista, mas nao da arvore de acessibilidade: `display:none` o
   tiraria da ordem de tabulacao e a escolha viraria so-mouse. */
.form-modo__opcao input{
  margin:.1875rem 0 0;
  width:1rem;
  height:1rem;
  flex-shrink:0;
  accent-color:var(--tema, hsl(var(--primary)));
}

.form-modo__texto{display:flex;flex-direction:column;gap:.125rem;min-width:0}
.form-modo__rotulo{
  font-size:.875rem;
  font-weight:700;
  line-height:1.3;
  color:var(--slate-900);
}
.form-modo__ajuda{
  font-size:.75rem;
  line-height:1.4;
  color:hsl(var(--muted-foreground));
}

/* O cartao escolhido se pinta inteiro na cor do tema, com o texto em branco.
   `:has()` faz isso sem script; navegador que nao o conhece deixa os dois
   iguais, e a marca continua sendo o proprio radio — degradacao boa.

   Vence o `:hover` de cima por especificidade: `:has(input:checked)` conta o
   argumento mais especifico que ha dentro dele, e um tipo mais uma
   pseudo-classe passam da pseudo-classe sozinha. Sem isso, passar o mouse sobre
   o escolhido o devolveria ao cinza. */
.form-modo__opcao:has(input:checked){
  border-color:var(--tema, hsl(var(--primary)));
  background:var(--tema, hsl(var(--primary)));
}
.form-modo__opcao:has(input:checked) .form-modo__rotulo{
  color:hsl(var(--primary-foreground));
}
.form-modo__opcao:has(input:checked) .form-modo__ajuda{
  color:hsl(var(--primary-foreground) / .75);
}

/* O disco do radio tambem: com `accent-color` no tema, ele sumiria dentro do
   cartao que agora tem a mesma cor. */
.form-modo__opcao:has(input:checked) input{
  accent-color:hsl(var(--primary-foreground));
}

.form-modo__opcao:has(input:focus-visible){
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}
/* Escolhido, o contorno de foco sai em branco: no tema sobre o tema ele nao
   apareceria, e quem navega por teclado perderia de vista onde esta. */
.form-modo__opcao:has(input:checked):has(input:focus-visible){
  outline-color:hsl(var(--primary-foreground));
  outline-offset:-4px;
}

/* Aviso de campo, abaixo do proprio campo. `hidden` continua valendo: o
   `display:flex` do `.form-campo` venceria o `display:none` do atributo, e o
   aviso do e-mail nasceria a vista. */
.contato-formulario .form-erro{
  margin:0;
  font-size:.75rem;
  line-height:1.4;
  color:#b42318;
}
.contato-formulario .form-erro[hidden]{display:none}

/* Campo bloqueado: apagado e com o cursor dizendo que ali nao se escreve. Sem
   isto ele fica igual aos abertos, e a pessoa tenta digitar. */
.contato-formulario .form-campo input:disabled,
.contato-formulario .form-campo select:disabled{
  color:hsl(var(--muted-foreground));
  background-color:hsl(var(--muted) / .35);
  cursor:not-allowed;
}
.form-contato--anonimo .form-campo:has(input:disabled) label{
  color:hsl(var(--muted-foreground) / .7);
}

/* O espaco ENTRE os campos encolhe junto: campos menores com o vao de antes
   ficariam soltos, e o formulario continuaria alto do mesmo jeito. */
.contato-formulario .form-campo{
  gap:.3125rem;
  margin-bottom:.875rem;
}
.contato-formulario .form-grid{gap:.25rem .875rem;margin-bottom:0}

.form-consentimento{
  padding:1rem 0 0;
  border-top:1px solid hsl(var(--border));
  margin:1.25rem 0 1.25rem;
}

/* O botao ocupa a linha no celular — alvo grande e o que se acerta com o
   polegar — e encolhe ate o texto a partir do tablet. */
.contato-formulario .btn-primary{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.5rem;
  width:100%;
  padding:.75rem 1.5rem;
  font-size:.9375rem;
  border-radius:.75rem;
  transition:transform .15s ease, box-shadow .15s ease, background-color .15s ease;
}
@media (min-width:640px){
  .contato-formulario .btn-primary{width:auto}
}
.contato-formulario .btn-primary:hover{
  transform:translateY(-1px);
  box-shadow:var(--shadow-md);
}
.form-contato__icone{width:1.125rem;height:1.125rem;flex-shrink:0}

@media (prefers-reduced-motion:reduce){
  .contato-formulario .form-campo input,
  .contato-formulario .form-campo textarea,
  .contato-formulario .btn-primary{transition:none}
  .contato-formulario .btn-primary:hover{transform:none}
}

/* ---------- Metade escura: os dados da entidade ---------- */
/* Na cor do tema, como o rodape e a barra do topo: sao as faixas escuras que
   fecham a pagina, e esta e a terceira delas — o painel nao chega como cor
   nova, chega como a cor da casa.

   Escuro contra claro resolve a hierarquia sem enfeite: o olho vai primeiro ao
   bloco de contraste alto, le os dados em quatro linhas e volta ao formulario,
   que e onde ha o que fazer. Antes os dois blocos eram claros e a diferenca
   entre eles era uma sombra a mais.

   `overflow:hidden` para o brilho decorativo nao vazar do painel. */
.contato-dados{
  position:relative;
  overflow:hidden;
  padding:2rem 1.5rem;
  background:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground));
}
@media (min-width:640px){
  .contato-dados{padding:2.5rem}
}

/* Clareado no canto de cima: quebra a chapa de cor sem virar desenho. */
.contato-dados::before{
  content:"";
  position:absolute;
  top:-8rem;
  right:-8rem;
  width:18rem;
  height:18rem;
  border-radius:50%;
  background:hsl(var(--primary-foreground) / .07);
  pointer-events:none;
}
.contato-dados__titulo,
.contato-dados__lista{position:relative}

.contato-dados__titulo{
  font-size:.75rem;
  text-transform:uppercase;
  letter-spacing:.08em;
  font-weight:700;
  color:hsl(var(--primary-foreground) / .65);
  margin:0 0 1.5rem;
}

.contato-dados__lista{margin:0;padding:0;list-style:none}

/* Icone a esquerda e texto a direita, e nao mais uma pilha de rotulos: com
   quatro linhas iguais, o simbolo e o que deixa achar o telefone sem ler as
   quatro. O `align-items:start` mantem o icone na altura da PRIMEIRA linha
   quando o endereco quebra em duas. */
.contato-dados__item{
  display:flex;
  align-items:flex-start;
  gap:.875rem;
  padding:1rem 0;
  border-bottom:1px solid hsl(var(--primary-foreground) / .14);
}
.contato-dados__item:last-child{border-bottom:0;padding-bottom:0}
.contato-dados__item:first-child{padding-top:0}

.contato-dados__icone{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:2.25rem;
  height:2.25rem;
  flex-shrink:0;
  border-radius:.75rem;
  color:hsl(var(--primary-foreground));
  background:hsl(var(--primary-foreground) / .12);
}
.contato-dados__icone svg{width:1.125rem;height:1.125rem}

/* `min-width:0` para o endereco longo poder quebrar: num filho de flex, o
   padrao e nao encolher abaixo do conteudo, e a linha estouraria o painel. */
.contato-dados__texto{
  display:flex;
  flex-direction:column;
  gap:.125rem;
  min-width:0;
}

.contato-dados__rotulo{
  font-size:.6875rem;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--primary-foreground) / .6);
}
.contato-dados__item a,
.contato-dados__texto span:not(.contato-dados__rotulo){
  font-size:.9375rem;
  line-height:1.5;
  color:hsl(var(--primary-foreground));
  overflow-wrap:anywhere;
}
.contato-dados__item a{text-decoration:none;transition:color .15s ease}
.contato-dados__item a:hover{color:hsl(var(--accent));text-decoration:underline}

@media (min-width:900px){
  /* Formulario maior: o campo de mensagem precisa de largura. O painel guarda
     linhas curtas e se resolve em pouco espaco.

     `align-items:stretch` (padrao da grade) e o que faz a coluna escura ir do
     topo ao pe da moldura — com `start`, ela pararia na ultima linha de texto e
     deixaria um degrau branco embaixo. */
  .contato-layout{grid-template-columns:minmax(0,1fr) minmax(0,21rem)}
}

@media (prefers-reduced-motion:reduce){
  .contato-dados__item a{transition:none}
}
/* =========================================================
   CONTEUDO DAS PAGINAS — acabamento
   O visual mora aqui, e nao dentro do conteudo, de proposito: o editor do
   painel normaliza o HTML para o esquema dele ao salvar, entao qualquer
   <div class="..."> escrito no conteudo e desmontado na primeira edicao.
   Estilando o que o editor de fato preserva — titulo, paragrafo, lista — o
   visual sobrevive a quem edita.
   ========================================================= */

/* Medida de leitura. Linha de 1300px cansa a varredura; ~70 caracteres e o
   intervalo confortavel. */
.page-content > p,
.page-section__body > p,
.page-section__body > ul,
.page-section__body > ol{
  max-width:68ch;
}

.page-content > * + *,
.page-section__body > * + *{margin-top:1.125rem}

/* Subtitulo de bloco. Sem caixa, sem fundo: o peso e o espaco ja separam. */
.page-section__body h3,
.page-content h3{
  margin-top:2.5rem;
  font-size:1.125rem;
  line-height:1.4;
  font-weight:700;
  color:hsl(var(--foreground));
}
.page-section__body > h3:first-child,
.page-content > h3:first-child{margin-top:0}

/* Lista com marcador proprio, no lugar da bolinha que o reset do site remove. */
.page-section__body ul,
.page-content ul{padding-left:0;list-style:none}
.page-section__body ul li,
.page-content ul li{
  position:relative;
  padding-left:1.5rem;
  margin-bottom:.75rem;
  line-height:1.7;
}
.page-section__body ul li::before,
.page-content ul li::before{
  content:"";
  position:absolute;
  left:.125rem;
  top:.6875rem;
  width:.375rem;
  height:.375rem;
  border-radius:1px;
  transform:rotate(45deg);
  background:hsl(var(--accent));
}
.page-section__body ol,
.page-content ol{padding-left:1.25rem;list-style:decimal}

.page-section__body a,
.page-content a{color:hsl(var(--primary));text-decoration:underline}

/* ---------- Linha do tempo ----------
   Trilho no meio da pagina, com as fichas alternando os lados: a primeira a
   direita, a segunda a esquerda, e assim por diante.

   Qual ficha cai de que lado sai de :nth-child, e nao de classe impressa no
   HTML. Cadastrar, apagar ou reordenar marcos no painel nao desalinha a
   alternancia — ela se recalcula sozinha a cada renderizacao.

   No celular nao ha dois lados: o trilho encosta na esquerda e todas as fichas
   ficam a direita dele. Esta e a forma BASE, e a alternancia so entra a partir
   de 768px — que e onde sobra largura para duas colunas de texto sem espremer
   nenhuma das duas.

   Trilho, medalha e ano saem na cor do tema, definida em Configuracoes. Onde a
   cor precisa de transparencia ela passa por color-mix(), porque o tema chega
   em hexadecimal; antes de cada uma vai a declaracao de reserva para o
   navegador que nao conhecer a funcao. */
#nossa-historia .page-section__body{margin-top:2.75rem}

/* `max-width` proprio, anulando o de 68ch que o corpo da secao impoe aos filhos
   diretos. Aquele limite existe para PARAGRAFO — largura de leitura confortavel
   —, e aqui o filho direto e a linha inteira: herda-lo encolhia o trilho para
   um terco da pagina e o jogava para a esquerda, em vez de centrar. O teto de
   58rem continua garantindo que cada ficha nao passe da largura de leitura. */
#nossa-historia .linha-tempo{
  position:relative;
  max-width:58rem;
  margin:0 auto;
  padding:0;
  list-style:none;
}

/* O trilho esmaece nas duas pontas: assim ele nasce e morre sem corte seco,
   em vez de parecer uma linha cortada no meio do desenho. */
#nossa-historia .linha-tempo::before{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:1.75rem;
  width:2px;
  background:linear-gradient(hsl(var(--primary) / 0),hsl(var(--primary) / .26) 10%,hsl(var(--primary) / .26) 90%,hsl(var(--primary) / 0));
  background:linear-gradient(
    transparent,
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 26%, transparent) 10%,
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 26%, transparent) 90%,
    transparent
  );
}

/* `grid-row` explicito nos dois filhos. Sem ele, a ficha que pede a coluna 1
   cairia para a linha de baixo: o cursor de posicionamento automatico ja teria
   passado da coluna 2 ao colocar a medalha, e ele nao volta atras. */
#nossa-historia .linha-tempo__item{
  display:grid;
  grid-template-columns:3.5rem 1fr;
  gap:0 1rem;
  align-items:start;
}
#nossa-historia .linha-tempo__item + .linha-tempo__item{margin-top:1.5rem}

/* Medalha sobre o trilho: disco cheio na cor do tema, com o ano dentro.

   O anel externo e da cor do FUNDO da pagina, e nao branco: e ele que abre o
   vao no trilho para a medalha caber.

   O texto sai em branco porque a cor do tema e declarada como escura no painel
   — o proprio campo avisa disso, e a barra superior e o rodape do site ja
   contam com a mesma premissa. */
#nossa-historia .linha-tempo__marcador{
  grid-column:1;
  grid-row:1;
  display:grid;
  place-items:center;
  width:3.5rem;
  height:3.5rem;
  border-radius:50%;
  background:var(--tema, hsl(var(--primary)));
  box-shadow:0 0 0 5px hsl(var(--background)), 0 6px 16px -8px hsl(var(--primary) / .55);
}

#nossa-historia .linha-tempo__cartao{
  grid-column:2;
  grid-row:1;
  position:relative;
  padding:1.25rem 1.375rem;
  border-radius:1rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  box-shadow:var(--shadow-sm);
  transition:transform .25s ease, box-shadow .25s ease;
}

/* Bico apontando para o trilho: um quadrado girado 45 graus, com DUAS bordas
   so. Com as quatro, as de dentro apareceriam cruzando a ficha. */
#nossa-historia .linha-tempo__cartao::before{
  content:"";
  position:absolute;
  top:1.375rem;
  left:-.4375rem;
  width:.75rem;
  height:.75rem;
  transform:rotate(45deg);
  background:hsl(var(--card));
  border-left:1px solid hsl(var(--border));
  border-bottom:1px solid hsl(var(--border));
}

#nossa-historia .linha-tempo__titulo{
  margin:0;
  font-size:1.0625rem;
  font-weight:700;
  line-height:1.35;
  color:hsl(var(--foreground));
}

#nossa-historia .linha-tempo__ano{
  font-size:.8125rem;
  font-weight:700;
  letter-spacing:.02em;
  color:hsl(var(--primary-foreground));
}

#nossa-historia .linha-tempo__cartao p{
  margin-top:.75rem;
  font-size:.9375rem;
  line-height:1.65;
  color:hsl(var(--muted-foreground));
}

@media (hover:hover){
  #nossa-historia .linha-tempo__cartao:hover{
    transform:translateY(-2px);
    box-shadow:var(--shadow-md);
  }
}

/* Dois lados. A grade passa a ter tres colunas — ficha, medalha, ficha — e o
   trilho vai para o centro. */
@media (min-width:768px){
  #nossa-historia .linha-tempo::before{left:50%;transform:translateX(-50%)}

  #nossa-historia .linha-tempo__item{
    grid-template-columns:1fr 4.25rem 1fr;
    gap:0 1.25rem;
    align-items:center;
  }
  #nossa-historia .linha-tempo__item + .linha-tempo__item{margin-top:2.25rem}

  #nossa-historia .linha-tempo__marcador{grid-column:2;justify-self:center}

  /* Impar a direita, par a esquerda: o primeiro marco abre pela direita. */
  #nossa-historia .linha-tempo__item:nth-child(odd) .linha-tempo__cartao{grid-column:3}
  #nossa-historia .linha-tempo__item:nth-child(even) .linha-tempo__cartao{grid-column:1}

  /* Com a ficha centrada na altura da medalha, o bico vai para o meio dela —
   e nao mais para o alto, como no empilhamento do celular. */
  #nossa-historia .linha-tempo__cartao::before{top:calc(50% - .375rem)}

  #nossa-historia .linha-tempo__item:nth-child(even) .linha-tempo__cartao::before{
    left:auto;
    right:-.4375rem;
    border-left:0;
    border-bottom:0;
    border-right:1px solid hsl(var(--border));
    border-top:1px solid hsl(var(--border));
  }
}

@media (prefers-reduced-motion:reduce){
  #nossa-historia .linha-tempo__cartao{transition:none}
  #nossa-historia .linha-tempo__cartao:hover{transform:none}
}

/* ---------- Diretoria ----------
   Um cartao por cargo, em grade. Era tabela, e a tabela servia enquanto o que
   se lia era uma linha por vez: cargo, nome, mandato. Com a foto ganhando
   tamanho, o retrato passou a ser o que se ve primeiro, e retrato pede cartao.

   A LARGURA depende de quantos sao, e a classe carrega a contagem porque o CSS
   nao sabe contar filhos:

     ate tres  a grade encolhe ate o conteudo (`width:fit-content`) e as colunas
               `1fr` repartem esse espaco em partes iguais. E o que faz todos os
               cartoes ficarem do tamanho do MAIOR nome, em vez de cada um do
               seu tamanho â€” `max-content` por coluna daria larguras diferentes.
     quatro ou a grade volta a ocupar a linha inteira, dividida em quatro. Do
     mais      quinto em diante a grade quebra sozinha: sao quatro COLUNAS, e
               nao quatro cartoes.

   A subida e em degraus, e nao direto ao numero final: quatro colunas numa tela
   de 576px deixariam cada cartao com pouco mais de 80px de largura util. */
/* O titulo acompanha os cartoes: os dois centrados na pagina.

   Com a grade encolhida ate o conteudo — o caso de ate tres cargos —, um titulo
   encostado a esquerda ficaria solto, apontando para um bloco que nao comeca
   ali. Centrar os dois faz o conjunto ter um eixo so.

   Por classe, e nao pelo id como em `#nossa-historia`: o id desta secao virou
   a ancora editavel no painel, e uma regra presa a ele deixaria de valer no
   dia em que alguem trocasse o nome da ancora — sem erro, so o alinhamento
   sumindo. */
.secao-diretoria{text-align:center}

/* Folga para o cabecalho fixo nao cobrir o titulo de quem chega pela ancora,
   como ja fazem `.page-header` e `.page-section`. E o que faz a ancora servir
   de fato: sem isso o menu rola ate o bloco e o cabecalho tapa a primeira
   linha dele. */
.secao-ancorada{scroll-margin-top:5rem}

.diretoria{
  display:grid;
  gap:1.5rem;
  margin-top:1.5rem;
  margin-inline:auto;
  padding:0;
  list-style:none;
  grid-template-columns:minmax(0,18rem);
  /* Encolhe ate o conteudo; `max-width` impede que o nome mais longo estoure a
     largura da pagina no celular. */
  width:fit-content;
  max-width:100%;
}

@media (min-width:576px){
  .diretoria--2,
  .diretoria--3,
  .diretoria--4{grid-template-columns:repeat(2,1fr)}
}

@media (min-width:768px){
  .diretoria--3{grid-template-columns:repeat(3,1fr)}
}

@media (min-width:1024px){
  /* Quatro ou mais: a linha inteira, em quatro partes iguais. `width:auto`
     desfaz o encolhimento, que e o que segura os grupos de ate tres. */
  .diretoria--4{
    width:auto;
    grid-template-columns:repeat(4,minmax(0,1fr));
  }
}
/* Escopado sob `.diretoria` de proposito: as listas do corpo da pagina recuam o
   texto e desenham um losango amarelo no `::before` de cada item. Contam
   primeiro as classes, e com duas contra uma estas regras vencem. Sem isto o
   losango aparecia no canto de cada cartao. */
/* O filete da esquerda sai na cor do tema, definida em Configuracoes. E o unico
   traco de cor do cartao: com o contorno cinza sozinho, quatro cartoes lado a
   lado liam como quatro caixas vazias.

   Vai na BORDA, e nao num `::before`: aquele pseudo-elemento ja e usado logo
   abaixo para apagar o marcador que as listas do site desenham, e dar dois
   papeis a ele deixaria as duas coisas presas uma na outra.

   A borda mais grossa a esquerda desloca o conteudo 1,5px do centro real do
   cartao. Fica abaixo do perceptivel, e compensar com padding assimetrico
   custaria mais leitura do que vale. */
.diretoria .diretoria__cartao{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:.5rem;
  height:100%;
  margin:0;
  padding:1.75rem 1.25rem;
  text-align:center;
  /* Mesma superficie dos cartoes dos conselhos: as duas grades ficam na mesma
     pagina, e fundos diferentes fariam parecer conteudo de naturezas
     diferentes. */
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  /* O filete sai no amarelo do botao "Doe Agora", pelo mesmo token: a cor da
     marca fica declarada num lugar so, e mudar o botao leva os cartoes junto.
     Aqui e o unico traco de cor, e por isso ele nao acompanha a Cor do tema
     como o dos conselhos. */
  border-left:4px solid var(--brand-yellow);
  border-radius:1rem;
  box-shadow:var(--shadow-sm);
}
.diretoria .diretoria__cartao::before{content:none}

/* O retrato e a primeira coisa que se ve, e por isso cresceu de 48 para 96px.
   `object-fit:cover` preenche o circulo e recorta o excedente, em vez de
   achatar o rosto: a foto vem do painel em qualquer proporcao. */
.diretoria__retrato{
  flex-shrink:0;
  display:block;
  width:6rem;
  height:6rem;
  margin-bottom:.5rem;
  border-radius:50%;
  object-fit:cover;
  background:hsl(var(--muted));
}
/* Sem foto enviada, o mesmo circulo com um icone generico ao centro: nada no
   lugar encolheria o cartao e desalinharia a linha inteira. */
.diretoria__retrato--vazio{
  display:flex;
  align-items:center;
  justify-content:center;
  color:hsl(var(--muted-foreground));
}

.diretoria .diretoria__nome{
  margin:0;
  font-size:1.0625rem;
  font-weight:700;
  line-height:1.3;
  color:hsl(var(--foreground));
}

/* O cargo em cinza escuro. Era a cor do tema, e num cartao que ja tem filete
   amarelo o texto colorido virava um terceiro tom competindo com o nome — que e
   o que se le primeiro. O peso da fonte continua distinguindo cargo de mandato. */
.diretoria .diretoria__cargo{
  margin:0;
  font-size:.9375rem;
  font-weight:600;
  line-height:1.3;
  color:var(--slate-700);
}

/* O mandato e o dado de apoio: menor, em tom secundario e com digitos de mesma
   largura, para os anos de um cartao alinharem com os do vizinho. */
.diretoria .diretoria__mandato{
  margin:0;
  font-size:.8125rem;
  line-height:1.3;
  color:hsl(var(--muted-foreground));
  font-variant-numeric:tabular-nums;
}
/* ---------- Conselhos ----------
   Cartao, e nao tabela: sao so nomes, e uma tabela de coluna unica pediria um
   titulo de coluna dizendo "Nome" — que o titulo da secao ja diz.

   Quantas colunas a linha tem vem do HTML, na classe `--1`, `--2` ou `--3`: o
   CSS nao sabe contar filhos, e `auto-fit` daria quatro colunas numa tela larga
   com quatro cartoes — que e justamente o que nao se quer. Fixando a
   quantidade, o quarto cartao quebra sozinho para a linha de baixo.

   A subida e em degraus: duas colunas a partir do tablet, tres so no desktop.
   Espremer tres cartoes em 768px deixaria cada um com ~230px, e nome como
   "Lucia Angela Aguirra Del Rio Daniel" quebraria em tres linhas ao lado do
   icone. `--1` nao aparece aqui de proposito: uma coluna e o padrao.

   `align-items:start` porque as listas tem tamanhos diferentes — sem isto o
   cartao curto esticaria ate a altura do vizinho, com um vao vazio no fim.

   O respiro em relacao a diretoria fica no CONJUNTO, e nao em cada cartao: com
   `margin-top` em cada um, o segundo da linha tambem o receberia e os dois
   desceriam o dobro quando empilhassem. */
/* O respiro entre os blocos fica na SECAO, e nao na grade: entre o titulo e os
   cartoes o intervalo e curto, como em "Diretoria".

   Pela RELACAO entre duas secoes, e nao por classe de cada uma: o espaco existe
   entre um bloco e o anterior, e nao dentro de nenhum dos dois. Assim o
   primeiro bloco da pagina nunca ganha um respiro solto no alto — antes, com a
   regra em `#conselhos`, uma pagina sem diretoria cadastrada comecava com 56px
   de vazio.

   Por classe tambem porque o id destas secoes virou a ancora editavel no
   painel: uma regra presa a ele deixaria de valer no dia em que alguem
   trocasse o nome da ancora, sem erro nenhum aparecer. */
.secao-ancorada + .secao-ancorada{margin-top:3.5rem}

/* Sem `align-items:start`: os cartoes de uma linha esticam ate a altura do mais
   alto. Com listas de tamanhos diferentes — um conselho de dois membros ao lado
   de um de cinco —, o mais curto terminava no meio da altura do vizinho e a
   linha ficava escalonada. */
.conselhos{
  display:grid;
  gap:2rem;
  margin-top:1.5rem;
}
@media (min-width:768px){
  /* Um conselho so ocupa METADE da linha: a grade tem duas colunas mesmo com um
     cartao, e ele fica na primeira. Sozinho e esticado de ponta a ponta, o
     cartao vira uma faixa com meia duzia de nomes espalhados. */
  .conselhos--1,
  .conselhos--2,
  .conselhos--3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:1024px){
  .conselhos--3{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* Sem filete colorido: o que distingue um conselho do outro e o titulo, e uma
   linha de tres cartoes lado a lado com a mesma cor na borda nao separava nada
   — so repetia. Quem carrega a cor na pagina e a diretoria.

   Com a borda igual nos quatro lados, o `padding` volta a ser um valor so: o
   `calc` de antes existia apenas para descontar os 3px que a borda mais grossa
   acrescentava a esquerda. */
.conselho{
  padding:1.75rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1rem;
  box-shadow:var(--shadow-sm);
}

/* Escopado sob `.conselho`, e nao so pela classe do titulo.
   `.page-content h3` — a regra generica dos subtitulos do site — tem um TIPO a
   mais que `.conselho__titulo`, e por isso vencia: entrava com `margin-top` de
   2,5rem e com o proprio tamanho de fonte. O resultado era 68px entre a borda
   de cima e o titulo contra 28px na esquerda, e a fonte menor do que esta
   declarada aqui. Com duas classes, estas regras ganham. */
.conselho .conselho__titulo{
  margin:0 0 1.25rem;
  font-size:1.375rem;
}

/* Coluna unica sempre: com o cartao em meia largura, duas colunas apertariam os
   nomes contra o icone do vizinho. */
.conselho__lista{
  display:grid;
  gap:.75rem;
  margin:0;
  padding:0;
  list-style:none;
}

/* Escopado sob `.conselho` de proposito. As listas do corpo da pagina ja tem
   estilo proprio — `.page-content ul li` recua o texto e desenha um losango
   amarelo no `::before` —, e aquele seletor tem UM tipo a mais que este. Contam
   primeiro as classes: com duas contra uma, estas regras vencem.
   Sem isto o losango entrava como primeiro filho do flex e aparecia um segundo
   marcador antes do disco do icone. */
.conselho .conselho__item{
  display:flex;
  align-items:center;
  gap:.75rem;
  padding-left:0;
  /* Menor que o corpo da pagina: e uma lista de nomes, nao texto de leitura. */
  font-size:.9375rem;
  line-height:1.4;
  color:hsl(var(--foreground));
}
.conselho .conselho__item::before{content:none}

/* Disco cinza com o icone dentro. Em cinza, e nao na cor do tema: numa lista de
   dez nomes seriam dez discos coloridos, e o que importa ali e o nome. O filete
   do cartao ja carrega a cor da secao.
   `flex-shrink:0` porque nome comprido espremeria o circulo ate virar oval. */
.conselho__icone{
  flex-shrink:0;
  display:grid;
  place-items:center;
  width:2rem;
  height:2rem;
  border-radius:50%;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted));
}
/* ---------- Documentos institucionais ----------
   Um cartao por documento, em grade de ate QUATRO por linha. A grade e fixa e
   alinhada a esquerda: com dois documentos, eles ocupam as duas primeiras
   colunas e o resto da linha fica vazio — o cartao mantem o tamanho em vez de
   esticar, que e o que a proporcao 1:1 exige.

   A subida e em degraus: um no celular, dois, tres e so entao quatro. */
/* O respiro em relacao aos conselhos vem de `.secao-ancorada + .secao-ancorada`,
   la em cima: e a mesma distancia entre quaisquer dois blocos da pagina. */

.documentos{
  display:grid;
  gap:1.5rem;
  margin-top:1.5rem;
  padding:0;
  list-style:none;
  grid-template-columns:minmax(0,1fr);
}
@media (min-width:576px){
  .documentos{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:768px){
  .documentos{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width:1024px){
  .documentos{grid-template-columns:repeat(4,minmax(0,1fr))}
}

/* `aspect-ratio:1` da o quadrado pedido. `min-height` porque proporcao sozinha
   nao impede o conteudo de transbordar: numa coluna estreita o cartao cresce
   alem do quadrado em vez de cortar o texto.

   Escopado sob `.documentos` de proposito: as listas do corpo da pagina recuam
   o texto e desenham um losango amarelo no `::before` de cada item, e aquele
   seletor tem um TIPO a mais que este. Contam primeiro as classes. */
.documentos .documento{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:.625rem;
  aspect-ratio:1;
  min-height:15rem;
  margin:0;
  padding:1.5rem;
  text-align:left;
  background:hsl(var(--card));
  /* Sem filete colorido: o documento e material de consulta, e a cor da marca
     fica reservada as pecas que pedem atencao. */
  border:1px solid hsl(var(--border));
  border-radius:1rem;
  box-shadow:var(--shadow-sm);
  overflow:hidden;
}
.documentos .documento::before{content:none}

/* Icone em cinza, e nao na cor do tema: o que o visitante procura aqui e o
   titulo do documento. O icone diz "isto e um arquivo" e nao precisa de mais. */
.documento__icone{
  flex-shrink:0;
  display:grid;
  place-items:center;
  width:3rem;
  height:3rem;
  border-radius:.875rem;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted));
}

.documentos .documento__titulo{
  margin:0;
  font-size:1.0625rem;
  font-weight:700;
  line-height:1.3;
  color:hsl(var(--foreground));
}

/* Cortada em tres linhas: com proporcao fixa, uma descricao longa empurraria os
   botoes para fora do cartao. O texto inteiro continua no painel. */
.documentos .documento__descricao{
  margin:0;
  font-size:.875rem;
  line-height:1.5;
  color:hsl(var(--muted-foreground));
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:3;
  line-clamp:3;
  overflow:hidden;
}

/* `margin-top:auto` cola as acoes no pe do cartao: com descricoes de tamanhos
   diferentes, os botoes ficariam em alturas diferentes de um cartao para o
   outro. */
.documento__acoes{
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  margin-top:auto;
  padding-top:.25rem;
}

/* Escopado sob `.documentos`, e nao so pela classe do botao.
   `.page-content a` — a regra dos links do corpo da pagina — tem um TIPO a mais
   que `.documento__botao`, e por isso vencia: o texto saia no azul primario com
   sublinhado, e "Visualizar" ficava azul sobre verde escuro. Contam primeiro as
   classes; com duas contra uma, estas regras ganham. */
.documentos .documento__botao{
  display:inline-flex;
  align-items:center;
  gap:.375rem;
  padding:.4375rem .875rem;
  border-radius:.625rem;
  font-size:.8125rem;
  font-weight:700;
  line-height:1.2;
  text-decoration:none;
  /* Cinza, e nao a cor do tema. Uma pagina com uma dezena de documentos teria
     uma dezena de botoes coloridos disputando com o "Doe Agora" do topo, que e
     a acao que o site de fato quer destacar. */
  color:#fff;
  background:var(--slate-600);
  transition:background-color .15s ease;
}
.documentos .documento__botao:hover{background:var(--slate-700)}

/* O tamanho do icone vem daqui, e nao de width/height na marcacao: assim ele
   acompanha os dois botoes de uma vez. `flex-shrink:0` porque o botao e flex —
   sem isso o icone seria o primeiro a ser espremido num cartao estreito. */
.documentos .documento__botao-icone{
  width:1rem;
  height:1rem;
  flex-shrink:0;
}

/* Baixar e a acao de apoio: mesma forma, sem o preenchimento, para que
   "Visualizar" continue sendo o que o olho encontra primeiro.

   A borda repete o cinza do fundo do "Visualizar", e nao o cinza claro das
   bordas do cartao: assim os dois botoes se leem como um par — um cheio, um
   vazado, mesma cor — em vez de um botao e um contorno solto. */
.documentos .documento__botao--apoio{
  color:var(--slate-700);
  background:transparent;
  box-shadow:inset 0 0 0 1.5px var(--slate-600);
}
.documentos .documento__botao--apoio:hover{background:var(--slate-100)}

/* ---------- Visor de documento ----------------------------------------
   O PDF abre aqui, sobre a propria pagina. Nova aba tirava o visitante do
   site por causa de um anexo de duas paginas, e no celular costuma virar
   uma aba orfa que ninguem fecha. */
.visor{
  position:fixed;
  inset:0;
  z-index:200;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:1.25rem;
}
/* `hidden` sozinho vale `display:block`, e `display:flex` acima o venceria:
   sem esta linha o visor nasceria aberto e vazio. */
.visor[hidden]{display:none}

.visor__fundo{position:absolute;inset:0;background:rgba(15,23,42,.6)}

.visor__caixa{
  position:relative;
  display:flex;
  flex-direction:column;
  width:min(60rem,100%);
  height:min(90vh,100%);
  overflow:hidden;
  background:hsl(var(--card));
  border-radius:1rem;
  box-shadow:0 1.5rem 3rem rgba(15,23,42,.35);
}

.visor__topo{
  display:flex;
  align-items:center;
  gap:1rem;
  padding:1rem 1.25rem;
  border-bottom:1px solid hsl(var(--border));
}
.visor .visor__titulo{
  flex:1;
  min-width:0;
  margin:0;
  font-size:1.0625rem;
  font-weight:700;
  color:var(--slate-900);
}

.visor .visor__fechar{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:2.25rem;
  height:2.25rem;
  padding:0;
  color:var(--slate-600);
  background:transparent;
  border:0;
  border-radius:.625rem;
  cursor:pointer;
  transition:background-color .15s ease;
}
.visor .visor__fechar:hover{background:var(--slate-100)}

/* `flex:1` com `min-height:0`: sem o segundo, o quadro cresce ate o tamanho
   do PDF e empurra o rodape para fora da caixa. */
.visor__quadro{flex:1;min-height:0;width:100%;border:0}

.visor__rodape{
  padding:.75rem 1.25rem;
  text-align:right;
  border-top:1px solid hsl(var(--border));
}
.visor .visor__externo{
  font-size:.8125rem;
  font-weight:700;
  color:var(--slate-700);
  text-decoration:none;
}
.visor .visor__externo:hover{text-decoration:underline}

/* Trava a rolagem do fundo enquanto o visor esta aberto: rolar a pagina por
   tras de um documento aberto so faz perder o lugar onde se estava. */
body.tem-visor{overflow:hidden}

/* =========================================================
   NAVEGACAO — rotulo em uma linha so
   ========================================================= */
/* O painel do submenu nasce com `min-width:220px`, o que deixa 180px de texto
   depois do respiro lateral. "Documentos Institucionais" mede exatamente 180px
   contando o espaco entre as palavras, e por isso quebrava em duas linhas — o
   item ficava com 60px de altura no meio de vizinhos de 40px.
   Aumentar a largura minima so adiaria o problema para o proximo rotulo longo:
   com `nowrap` e o painel absoluto, ele passa a crescer conforme o conteudo, e
   o rotulo cadastrado no painel manda na largura.

   Escopado por duas classes de proposito: `.dropdown__link` sozinho tem a mesma
   forca da regra original la em cima, e o desempate por ordem de arquivo e
   frouxo demais para uma folha que so cresce.

   Vale para o menu do topo e para o submenu. O menu do celular fica de fora: la
   o rotulo tem a largura da tela inteira e nao quebra, e `nowrap` num aparelho
   estreito trocaria a quebra de linha por rolagem lateral, que e pior. */
.nav .nav__link,
.nav .nav__toggle,
.dropdown__panel .dropdown__link{white-space:nowrap}

/* =========================================================
   FAQ — sanfona de perguntas
   ========================================================= */
/* Uma pilha, e nao uma grade: pergunta e resposta se leem de cima para baixo, e
   duas colunas fariam o texto pular de lado a cada item aberto. */
.faq{
  display:flex;
  flex-direction:column;
  gap:.75rem;
  margin:0;
  padding:0;
  list-style:none;
}
/* Escopado sob `.faq`, e nao so pela classe do item.

   `.page-content ul li` — a regra generica dos itens de lista do corpo da
   pagina — traz TRES coisas que nao servem aqui, e a de `::before` era so a
   mais visivel:

   - o losango amarelo, que apareceria colado a pergunta;
   - `padding-left:1.5rem`, que empurrava o cartao 24px para dentro: a sanfona
     comecava desalinhada da margem do cabecalho, que e a mesma do `.container`;
   - `margin-bottom:.75rem`, que somava ao `gap` da pilha e dobrava o intervalo
     entre um cartao e o seguinte.

   `.faq .faq__item` tem duas classes contra uma classe e dois tipos daquela —
   e classe pesa mais que tipo, entao esta ganha. */
.faq .faq__item{
  padding-left:0;
  margin-bottom:0;
}
.faq .faq__item::before{content:none}

.faq__bloco{
  overflow:hidden;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1rem;
  box-shadow:var(--shadow-sm);
}

/* `list-style:none` mais o `::-webkit-details-marker`: o triangulo padrao do
   `summary` aparece por caminhos diferentes conforme o navegador, e a seta
   propria ja diz o mesmo do lado certo. */
.faq .faq__pergunta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  padding:1.125rem 1.5rem;
  font-size:1rem;
  font-weight:700;
  line-height:1.45;
  color:var(--slate-900);
  cursor:pointer;
  list-style:none;
  transition:background-color .15s ease;
}
.faq .faq__pergunta::-webkit-details-marker{display:none}
.faq .faq__pergunta:hover{background:var(--slate-100)}

/* O foco do teclado fica no `summary`, que e o que recebe Enter e Espaco:
   escondido, a sanfona seria intransitavel sem mouse. */
.faq .faq__pergunta:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:-2px;
}

.faq__seta{
  width:1.25rem;
  height:1.25rem;
  flex-shrink:0;
  color:hsl(var(--muted-foreground));
  transition:transform .2s ease;
}
.faq__bloco[open] .faq__seta{transform:rotate(180deg)}

/* Respiro igual em cima e embaixo, no mesmo valor do sumario: o texto fica
   centrado na faixa que se abre. Antes o `padding-top` era zero — a resposta
   encostava na pergunta e sobrava vao so por baixo dela. */
.faq .faq__resposta{
  margin:0;
  padding:1.125rem 1.5rem;
  font-size:.9375rem;
  line-height:1.7;
  color:var(--slate-700);
  /* A resposta vem de um `textarea`: as quebras de linha que quem edita digitou
     sao parte do texto, e sem isto virariam um paragrafo unico. */
  white-space:pre-line;
}

@media (prefers-reduced-motion:reduce){
  .faq__seta{transition:none}
}

/* =========================================================
   SIC — pedido, acompanhamento e relatorio
   ========================================================= */
/* Uma coluna so: estas telas nao tem o cartao de dados ao lado, e o formulario
   sozinho esticado ate 1100px daria linhas longas demais para ler. */
.contato-layout--simples{
  grid-template-columns:minmax(0,1fr);
  max-width:46rem;
  margin-inline:auto;
}
@media (min-width:900px){
  .contato-layout--simples{grid-template-columns:minmax(0,1fr)}
}

/* Blocos do formulario: `fieldset` sem a moldura que o navegador desenha — a
   legenda ja diz onde um grupo comeca. */
.form-bloco{
  margin:0 0 1.5rem;
  padding:0;
  border:0;
}
.form-bloco__titulo{
  padding:0;
  margin:0 0 .875rem;
  font-size:.6875rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--muted-foreground));
}

.form-nota{
  margin:1rem 0 0;
  font-size:.75rem;
  line-height:1.5;
  color:hsl(var(--muted-foreground));
}

/* O botao que e link. `.btn-primary` foi desenhado para `<button>`, e num `<a>`
   ele herda o sublinhado dos links do site — vira botao com risco embaixo.
   `inline-flex` para o texto ficar centrado como no botao de verdade. */
a.btn-primary{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  text-decoration:none;
}

/* Aviso que vem DEPOIS do formulario — o "as informacoes nao conferem" da
   consulta. O `.form-aviso` so tem margem embaixo, porque no formulario de
   contato ele aparece ACIMA do formulario; aqui, sem margem em cima, ele
   encostava no botao.

   Pelo irmao imediato, e nao por classe nova: e a POSICAO que pede o respiro, e
   assim qualquer aviso que venha a nascer depois de um formulario ja o tem. */
.form-contato + .form-aviso{margin-top:1.75rem}

/* ---------- Comprovante do pedido ---------- */
/* Cartao proprio, no lugar do formulario: os dois juntos convidariam a enviar o
   mesmo pedido de novo — e cada envio gera protocolo novo.

   Centralizado porque tem uma coisa so a dizer, e o protocolo e o centro dela. */
.sic-comprovante{
  padding:2.5rem 1.5rem;
  text-align:center;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1.5rem;
  box-shadow:var(--shadow-md);
}
@media (min-width:640px){
  .sic-comprovante{padding:3rem 2.5rem}
}

.sic-comprovante__marca{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:3.5rem;
  height:3.5rem;
  margin-bottom:1.25rem;
  border-radius:50%;
  color:hsl(152 55% 26%);
  background:hsl(152 45% 92%);
}
.sic-comprovante__marca svg{width:1.75rem;height:1.75rem}

.sic-comprovante__titulo{
  margin:0 0 1.75rem;
  font-size:1.25rem;
  font-weight:700;
  line-height:1.35;
  color:var(--slate-900);
}

.sic-comprovante__rotulo{
  margin:0;
  font-size:.6875rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.08em;
  color:hsl(var(--muted-foreground));
}

/* O protocolo e a unica coisa que a pessoa precisa levar desta tela: sai grande
   e monoespacado, para ser lido em voz alta e copiado sem erro. `anywhere`
   porque num celular estreito ele nao pode estourar o cartao. */
.sic-comprovante__protocolo{
  margin:.375rem 0 1.5rem;
  font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size:1.75rem;
  font-weight:700;
  letter-spacing:.02em;
  color:var(--slate-900);
  overflow-wrap:anywhere;
}

.sic-comprovante__texto{
  max-width:32rem;
  margin:0 auto .75rem;
  font-size:.9375rem;
  line-height:1.6;
  color:hsl(var(--muted-foreground));
}
.sic-comprovante .sic-comprovante__voltar{
  display:inline-block;
  margin-top:1.5rem;
  text-decoration:none;
}

.sic-resultado{
  margin-top:1.75rem;
  padding-top:1.75rem;
  border-top:1px solid hsl(var(--border));
}
.sic-resultado__protocolo{
  margin:0 0 1rem;
  font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size:1.375rem;
  font-weight:700;
  color:var(--slate-900);
}
.sic-resultado__dados{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:.25rem 1rem;
  margin:0 0 1.5rem;
}
@media (min-width:560px){
  .sic-resultado__dados{grid-template-columns:12rem minmax(0,1fr)}
}
.sic-resultado__dados dt{
  font-size:.6875rem;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--muted-foreground));
}
.sic-resultado__dados dd{margin:0 0 .5rem;font-size:.9375rem;color:var(--slate-900)}
.sic-resultado__titulo{
  margin:1.5rem 0 .5rem;
  font-size:.875rem;
  font-weight:700;
  color:var(--slate-900);
}
/* `pre-line`: as quebras que a pessoa digitou fazem parte do texto. */
.sic-resultado__texto{
  margin:0;
  font-size:.9375rem;
  line-height:1.7;
  color:var(--slate-700);
  white-space:pre-line;
}

.sic-etiqueta{
  display:inline-block;
  padding:.1875rem .625rem;
  border-radius:999px;
  font-size:.75rem;
  font-weight:700;
  background:hsl(var(--muted));
  color:var(--slate-700);
}
.sic-etiqueta--respondida{background:hsl(152 45% 92%);color:hsl(152 55% 22%)}
.sic-etiqueta--indeferida{background:hsl(4 70% 95%);color:#8a1c14}

/* ---------- Relatorio ---------- */
/* As duas acoes da tela na mesma linha: escolher o ano e baixar o relatorio.
   A segunda so faz sentido depois da primeira — o que se baixa e o ano que esta
   a vista —, e separadas o botao ficava sobre a primeira tabela, longe do que
   ele decide.

   `flex-wrap` para o celular: em tela estreita o botao desce, em vez de espremer
   o seletor. */
.relatorio__controles{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.75rem;
  margin-top:1rem;
}
/* O seletor de ano mora no cabecalho, no lugar onde antes havia o texto
   "Ano: 2026". `margin-top` para acompanhar o respiro que o subtitulo tinha. */
.relatorio__ano{
  display:flex;
  align-items:center;
  gap:.625rem;
  font-size:.9375rem;
  color:hsl(var(--muted-foreground));
}
.relatorio__ano select{
  /* `min-height` igual ao do botao ao lado: os dois tem tipos e paddings
     diferentes, e so a altura declarada faz o topo e a base coincidirem. */
  min-height:2.5rem;
  padding:.5rem 2.25rem .5rem .875rem;
  appearance:none;
  -webkit-appearance:none;
  font-family:inherit;
  font-size:1rem;
  font-weight:700;
  line-height:1.4;
  color:var(--slate-900);
  cursor:pointer;
  border:1px solid hsl(var(--border));
  border-radius:.625rem;
  background-color:hsl(var(--card));
  /* A mesma seta do menu do site, em `background-image` porque `select` nao
     aceita filho que nao seja `option`. */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right .75rem center;
  background-size:1.125rem 1.125rem;
}
.relatorio__ano select:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}
/* `margin:0` porque `.btn-primary` nasce com 2rem de margem no alto — ele foi
   desenhado para fechar um formulario, e ali a folga separa o botao do ultimo
   campo. Numa linha de controles essa margem empurrava o botao 16px abaixo do
   seletor, e os dois deixavam de casar apesar de terem a MESMA altura.

   A altura vem do mesmo par de `padding` do seletor de ano: assim os dois
   fecham em 40px sem nenhum ajuste fino. */
.relatorio__acao{
  display:inline-flex;
  align-items:center;
  min-height:2.5rem;
  margin:0;
  padding:.5rem 1.25rem;
  border:0;
  border-radius:.625rem;
  font-size:.875rem;
  line-height:1.4;
  font-weight:700;
  text-decoration:none;
  white-space:nowrap;
  cursor:pointer;
}

/* A planilha e a acao secundaria da linha: mesma silhueta do botao ao lado, mas
   contornada em vez de preenchida. Duas cores cheias lado a lado disputariam a
   atencao, e imprimir e o que a maioria vem fazer aqui. */
.relatorio__acao--secundaria{
  border:2px solid var(--tema, hsl(var(--primary)));
  background-color:hsl(var(--card));
  color:var(--tema, hsl(var(--primary)));
  /* Desconta a borda para nao ficar 4px mais alto que o botao preenchido, que
     nao tem nenhuma. */
  padding:calc(.5rem - 2px) calc(1.25rem - 2px);
  transition:background-color .15s ease,color .15s ease;
}
.relatorio__acao--secundaria:hover,
.relatorio__acao--secundaria:focus-visible{
  background-color:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground));
}

/* O aviso de PDF indisponivel entra abaixo da linha de controles, com o mesmo
   respiro que separa a linha do titulo acima dela. */
.relatorio__aviso{margin-top:1rem;max-width:38rem}

/* Encosta no cabecalho: o `.page-content` abre com 4rem e o cabecalho fecha com
   3rem — o vao acima do primeiro titulo dava 104px, mais que o dobro do respiro
   de baixo. Igualado ao do cabecalho, as duas seccoes se leem como uma coisa
   so. */
.page-content--colado{padding-top:3rem}

/* O espaco entre os blocos vem da RELACAO entre dois deles, e nao de uma margem
   no titulo.

   Com a margem no titulo era preciso um seletor que soubesse qual titulo e o
   primeiro — e o "Tempo de atendimento", morando dentro do proprio bloco,
   casava como primeiro e perdia a separacao da tabela de cima. Aqui o primeiro
   bloco simplesmente nao tem irmao anterior, e nenhuma excecao e necessaria. */
.relatorio__bloco + .relatorio__bloco{margin-top:2.25rem}

.relatorio__titulo{
  margin:0 0 .75rem;
  font-size:1.0625rem;
  font-weight:700;
  color:var(--slate-900);
}
.relatorio__vazio,
.relatorio__nota{
  margin:1.5rem 0 0;
  font-size:.8125rem;
  color:hsl(var(--muted-foreground));
}

/* A tabela rola dentro da propria caixa: sem isto, uma tela estreita faria a
   PAGINA rolar de lado, e o site inteiro sairia do lugar. */
.tabela-rolavel{overflow-x:auto}
.tabela-relatorio{
  width:100%;
  border-collapse:collapse;
  font-size:.9375rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:.75rem;
  overflow:hidden;
}
.tabela-relatorio th,
.tabela-relatorio td{
  padding:.6875rem 1rem;
  text-align:left;
  border-bottom:1px solid hsl(var(--border) / .7);
}
/* A linha de titulos na cor do tema. Ela e a unica faixa de cor da tabela, e
   e o que separa de relance o rotulo do dado — com tudo em cinza, a primeira
   linha se confundia com a segunda. */
.tabela-relatorio thead th{
  font-size:.6875rem;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  border-bottom:0;
}
.tabela-relatorio tbody th{font-weight:500;color:var(--slate-700)}
.tabela-relatorio .numero{text-align:right;font-variant-numeric:tabular-nums;font-weight:700;color:var(--slate-900)}
/* `.numero` tem duas classes e vencia `.tabela-relatorio thead th`, que tem uma
   classe e dois tipos — o titulo da coluna de numeros saia escuro sobre a faixa
   escura do tema, ou seja, invisivel. */
.tabela-relatorio thead th.numero{color:hsl(var(--primary-foreground))}
.tabela-relatorio tr:last-child th,
.tabela-relatorio tr:last-child td{border-bottom:0}

/* Na tela a tabela da impressao nao e tabela: vira bloco, e as faixas somem.
   Assim a pagina continua exatamente como era, e o `thead`/`tfoot` so entram em
   cena no papel. */
.impressao,
.impressao > tbody,
.impressao > tbody > tr,
.impressao > tbody > tr > td{display:block}
.impressao > thead,
.impressao > tfoot,
.impressao-faixa,
/* O ano no titulo e so do papel: na tela ele esta no seletor logo abaixo, e
   repeti-lo no titulo seria dizer duas vezes a mesma coisa. */
.relatorio__ano-no-titulo{display:none}

/* =========================================================
   IMPRESSAO DO RELATORIO — o PDF que o navegador salva
   ========================================================= */
@media print{
  /* A4 com 2cm de papel nos quatro lados, e so isso: o espaco do cabecalho e do
     rodape sai de dentro da area util, porque quem os repete e o `thead`/`tfoot`
     da tabela — que escoa junto com o conteudo, folha a folha. */
  @page{
    size:A4;
    margin:2cm;
  }

  html, body{background:#fff}

  /* Nada do site navegavel vai para o papel: menu, rodape e controles nao levam
     a lugar nenhum impressos. */
  /* O filtro tambem sai: no papel nao ha o que escolher, e os campos ocupariam
     um terco da primeira folha dizendo o que a consulta ja disse. */
  .topbar, .header, .footer, .mobile-nav,
  .listagem-baixar, .consulta-filtro, .relatorio__controles{display:none !important}

  /* As colunas de link — "Ver detalhes" nos contratos, "Ver ficha" na consulta —
     saem do papel: um link para outra tela nao leva a lugar nenhum impresso.
     `display:none` na celula, e nao `visibility`, para a coluna sumir de fato e
     as demais ocuparem a largura dela. */
  .contratos-tabela thead th:last-child,
  .contratos-tabela tbody td:last-child,
  .auditorias-tabela thead th:last-child,
  .auditorias-tabela tbody td:last-child,
  .consulta-tabela thead th:last-child,
  .consulta-tabela tbody td:last-child{display:none}

  /* ---------- A folha ---------- */
  /* De volta a ser tabela. `thead` como `table-header-group` e `tfoot` como
     `table-footer-group` e o que faz o navegador reimprimi-los em cada folha,
     com o conteudo escoando ENTRE os dois — nunca por baixo.
     `border-collapse` para o `thead` nao ganhar vao proprio no alto da pagina. */
  .impressao{
    display:table;
    width:100%;
    border-collapse:collapse;
  }
  /* A celula do corpo tem altura minima de UMA folha, e o conteudo se alinha no
     alto: o vao que sobra empurra o `tfoot` para a borda de baixo.

     A conta: A4 tem 29,7cm, menos 2cm de margem em cima e 2cm embaixo = 25,7cm
     uteis. O cabecalho ocupa ~2,6cm e o rodape ~1,2cm, o que deixa ~21,9cm para
     o corpo — 21,5cm com folga, para nao empurrar uma segunda folha por causa de
     um arredondamento.

     Vale para o relatorio que cabe numa folha, que e o caso normal. Passando
     disso, o `tfoot` da ultima folha volta a acompanhar o conteudo: nao ha em
     CSS de impressao como esticar so a ultima pagina. */
  .impressao > tbody > tr > td{
    vertical-align:top;
    height:21.5cm;
  }
  .impressao > thead{display:table-header-group}
  .impressao > tfoot{display:table-footer-group}
  .impressao > tbody{display:table-row-group}
  .impressao > thead > tr,
  .impressao > tfoot > tr,
  .impressao > tbody > tr{display:table-row}
  .impressao > thead > tr > td,
  .impressao > tfoot > tr > td,
  .impressao > tbody > tr > td{display:table-cell;padding:0}

  /* ---------- Faixas repetidas em toda folha ---------- */
  /* `print-color-adjust` obriga a imprimir o fundo e a cor do tema — sem ele, o
     navegador descarta cor de fundo por economia de tinta e a faixa sairia
     branca. */
  .impressao-faixa{
    display:flex;
    -webkit-print-color-adjust:exact;
    print-color-adjust:exact;
  }

  .impressao-faixa--topo{
    align-items:center;
    gap:.75cm;
    padding-bottom:.35cm;
    margin-bottom:.6cm;
    border-bottom:2px solid var(--tema, hsl(var(--primary)));
  }

  .impressao-faixa__logo{
    height:1.5cm;
    width:auto;
    object-fit:contain;
  }

  .impressao-faixa__entidade{min-width:0}

  .impressao-faixa__nome{
    margin:0 0 .1cm;
    font-size:12pt;
    font-weight:800;
    line-height:1.2;
    color:var(--tema, hsl(var(--primary)));
  }

  .impressao-faixa__dados{
    margin:0;
    font-size:8pt;
    line-height:1.4;
    color:#444;
  }

  /* O rodape do documento, dentro do `tfoot`.
     `position:fixed` NAO serve aqui: o Chrome imprime elemento fixo so na
     primeira folha, e foi por isso que o rodape sumiu do resto do PDF. */
  .impressao-faixa--rodape{
    align-items:flex-end;
    justify-content:space-between;
    gap:1cm;
    margin-top:.6cm;
    padding-top:.25cm;
    border-top:1px solid #ccc;
    font-size:8pt;
    color:#666;
  }

  /* ---------- Conteudo ---------- */
  /* O cabecalho da pagina vira o cabecalho do DOCUMENTO: sem fundo, sem faixa,
     encostado no topo da area util. */
  /* O vao entre o titulo e "Indicadores" foi de .6cm para .3cm. No papel o
     titulo ja esta separado da faixa da entidade por uma linha de 2px; o que
     sobrava aqui era respiro de tela, e cada milimetro no alto e milimetro que
     dezembro ganha no pe da primeira folha. */
  .page-header{padding-block:0 .3cm;background:none;border:0}
  .page-content{padding-block:0}
  .page-header .container,
  .page-content .container{max-width:none;padding-inline:0}

  /* O chapeu "SIC" sai do papel: ele servia a navegacao do site, dizendo em que
     area o visitante esta, e no documento impresso essa pergunta nao existe — o
     cabecalho ja identifica a entidade e o titulo diz o que e.

     O seletor de ano sai junto com os controles, na regra acima; o ano passou a
     fazer parte do titulo. Os dois somando ~1,5cm que a tabela mensal usa para
     nao empurrar dezembro para a folha seguinte. */
  .section-eyebrow{display:none !important}

  .relatorio__ano-no-titulo{display:inline}

  .page-header__title{font-size:17pt;line-height:1.25;margin:0}

  /* Centralizado no papel: sem o menu e sem a coluna de leitura do site, a
     folha e simetrica, e o titulo alinhado a esquerda ficava torto em relacao a
     tabela que ele nomeia. */
  /* Mesmo desenho da tela: o respiro mora na relacao entre dois blocos, e nao
     numa margem do titulo que precisasse de excecao para o primeiro. */
  /* .55cm -> .3cm pelo mesmo motivo: a faixa colorida da linha de titulos ja
     marca onde uma tabela comeca, entao a separacao nao precisa do vao inteiro
     da tela para se ler. */
  .relatorio__bloco + .relatorio__bloco{margin-top:.3cm}

  .relatorio__titulo{
    margin:0 0 .2cm;
    font-size:11pt;
    text-align:center;
    /* O titulo nunca fica sozinho no pe da folha, com a tabela na seguinte. */
    break-after:avoid;
  }

  /* Nenhum bloco abre folha nova: eles escoam um atras do outro, e quem nao
     couber parte sozinho. Forcar a quebra so criava espaco em branco no pe da
     folha anterior. */

  .tabela-relatorio{
    font-size:9.5pt;
    border-color:#bbb;
    border-radius:0;
  }
  .tabela-relatorio th,
  .tabela-relatorio td{padding:.16cm .3cm;border-color:#ddd}
  /* A linha de titulos mantem a cor do tema no papel. `print-color-adjust`
     porque o navegador descarta fundo colorido por economia de tinta — sem ele
     a faixa sairia branca com texto branco, ou seja, invisivel. */
  .tabela-relatorio thead th{
    -webkit-print-color-adjust:exact;
    print-color-adjust:exact;
  }
  /* Zebrado: com doze linhas de numeros, a listra e o que impede o olho de
     pular de linha ao atravessar a tabela. */
  .tabela-relatorio tbody tr:nth-child(even) th,
  .tabela-relatorio tbody tr:nth-child(even) td{
    background:#fafafa;
    -webkit-print-color-adjust:exact;
    print-color-adjust:exact;
  }

  /* A tabela PODE partir entre folhas — o que nao pode e uma LINHA partir ao
     meio, com o rotulo numa pagina e o numero na outra.

     Antes a tabela inteira era indivisivel, e uma que nao coubesse no que
     restava da folha pulava para a seguinte deixando meia pagina em branco. Ao
     partir, o `thead` repete a linha de titulos na continuacao, entao ninguem
     perde a referencia das colunas. */
  .tabela-rolavel{overflow:visible}
  .tabela-relatorio{break-inside:auto}
  .tabela-relatorio thead{display:table-header-group}
  .tabela-relatorio tr{break-inside:avoid}

  /* A nota de rodape do CONTEUDO sai do papel: ela dizia quando os numeros
     foram gerados, e o rodape de cada folha ja traz a data de emissao. Duas
     datas dizendo a mesma coisa, a poucos centimetros uma da outra, so fazem
     duvidar de qual vale. */
  .relatorio__nota{display:none}

  .relatorio__vazio{font-size:8pt;color:#666}

  /* O aviso nao vai para o papel. Ele e um recado da visita, nao parte do
     documento — impresso, cobriria o relatorio e sairia como se fosse conteudo
     dele. */
  .popup{display:none !important}

  a{color:inherit;text-decoration:none}
}

/* =========================================================
   OUVIDORIA — cartoes de canal
   ========================================================= */
/* Grade em degraus, como a dos documentos: um no celular, dois, tres. Nao passa
   de tres porque cada cartao carrega titulo, dado e descricao — em quatro
   colunas o endereco quebraria em cinco linhas. */
.canais{
  display:grid;
  gap:1.25rem;
  margin-top:1.5rem;
  padding:0;
  list-style:none;
  grid-template-columns:minmax(0,1fr);
}
@media (min-width:640px){.canais{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:1024px){.canais{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* Escopado sob `.canais`, e nao so pela classe do item: `.page-content ul li`
   traz losango amarelo, `padding-left` e `margin-bottom` para todo item de
   lista do corpo da pagina. Duas classes contra uma classe e dois tipos. */
.canais .canal{
  position:relative;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  margin-bottom:0;
  padding:1.75rem 1.5rem 1.5rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1.25rem;
  box-shadow:var(--shadow-sm);
  transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
.canais .canal::before{content:none}

/* O cartao sobe de leve ao passar o mouse. Numa pagina que e uma escolha entre
   oito caminhos, o retorno ao passar por cima ajuda a dizer "e este que voce
   esta olhando". */
.canais .canal:hover{
  transform:translateY(-3px);
  /* Cinza escuro do texto, e nao a cor do tema: a moldura so precisa dizer
     qual cartao esta sob o mouse, e nesse tom ela diz isso em qualquer cor
     escolhida em Configuracoes. */
  border-color:hsl(var(--foreground));
  box-shadow:var(--shadow-md);
}

/* Numero grande e apagado no canto: da ritmo a grade e serve de referencia ao
   telefone ("o terceiro da lista") sem competir com o titulo. Decorativo, e por
   isso marcado com aria-hidden na marcacao. */
.canal__numero{
  position:absolute;
  top:.5rem;
  right:1rem;
  font-size:2.75rem;
  font-weight:800;
  line-height:1;
  letter-spacing:-.04em;
  color:hsl(var(--muted) / .9);
  pointer-events:none;
  user-select:none;
}

.canal__icone{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:3rem;
  height:3rem;
  margin-bottom:1rem;
  border-radius:.875rem;
  /* Desenho do icone no cinza escuro do texto, como o titulo da secao. O fundo
     continua com a lavagem do tema — e o que sobrou de cor no cartao —, e as
     duas declaracoes seguem porque navegador sem color-mix() precisa cair no
     cinza neutro, que combina com qualquer cor escolhida em Configuracoes. */
  color:hsl(var(--foreground));
  background:hsl(var(--muted));
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 12%, transparent);
}
.canal__icone svg{width:1.5rem;height:1.5rem}

.canais .canal__titulo{
  margin:0 0 .5rem;
  font-size:1.0625rem;
  font-weight:700;
  line-height:1.35;
  color:var(--slate-900);
}

/* O dado — e-mail, telefone, endereco — vem antes da descricao e com mais peso:
   e o que a pessoa veio buscar. `break-words` porque endereco e e-mail longos
   nao tem espaco onde quebrar. */
.canais .canal__dado{
  margin:0 0 .5rem;
  font-size:.9375rem;
  font-weight:600;
  line-height:1.5;
  color:var(--slate-700);
  overflow-wrap:anywhere;
}

.canais .canal__descricao{
  margin:0;
  font-size:.875rem;
  line-height:1.6;
  color:hsl(var(--muted-foreground));
}

/* `margin-top:auto` cola a acao no pe do cartao: com descricoes de tamanhos
   diferentes, os links ficariam em alturas diferentes de um cartao para o
   outro. Escopado sob `.canais` porque `.page-content a` — uma classe e um tipo
   — venceria a classe sozinha e pintaria o link de azul com sublinhado. */
.canais .canal__acao{
  display:inline-flex;
  align-items:center;
  gap:.375rem;
  margin-top:1.25rem;
  align-self:flex-start;
  font-size:.875rem;
  font-weight:700;
  color:var(--tema, hsl(var(--primary)));
  text-decoration:none;
}
.canais .canal__acao:hover{text-decoration:underline}

.canal__seta{
  width:1rem;
  height:1rem;
  flex-shrink:0;
  transition:transform .15s ease;
}
.canais .canal__acao:hover .canal__seta{transform:translateX(3px)}

@media (prefers-reduced-motion:reduce){
  .canais .canal,
  .canal__seta{transition:none}
  .canais .canal:hover{transform:none}
}

/* =========================================================
   NOTICIAS — filtro, galeria e leitura
   ========================================================= */
/* Quase tudo aqui esta escopado com DUAS classes, e nao pela classe do proprio
   elemento. Dentro de `.page-content` valem regras genericas que tem um TIPO a
   mais — `.page-content ul li`, `.page-content ul li::before`, `.page-content a`,
   `.page-content h3`, `.page-content p` — e uma classe sozinha perde para elas.
   Sem o escopo, cada cartao sairia com losango amarelo antes do titulo, recuado
   24px, e os links azuis sublinhados. */

/* ---------- Filtro ---------- */
/* Uma faixa, e nao um cartao: o filtro e ferramenta, nao conteudo. Com moldura,
   sombra e titulo proprio ele competia com as noticias, que sao o que a pagina
   veio mostrar. Ficou o essencial — uma linha de campos sobre fundo levemente
   afastado do da pagina. */
.noticias-filtro{
  margin-bottom:2rem;
  padding:.875rem 1rem;
  background:hsl(var(--muted) / .45);
  border:1px solid hsl(var(--border) / .55);
  border-radius:.75rem;
}
.noticias-filtro__campos{
  display:flex;
  flex-wrap:wrap;
  align-items:flex-end;
  gap:.625rem;
}
.noticias-filtro__campo{display:flex;flex-direction:column;gap:.1875rem}
/* A busca leva o espaco que sobrar; os dois campos de data tem largura fixa por
   natureza. `min-width` para ela nao espremer abaixo do legivel antes de a linha
   quebrar. */
.noticias-filtro__campo--busca{flex:1 1 14rem;min-width:12rem}
.noticias-filtro__campo label{
  font-size:.75rem;
  font-weight:600;
  color:hsl(var(--muted-foreground));
}
.noticias-filtro__campo input{
  width:100%;
  min-height:2.25rem;
  padding:.375rem .75rem;
  font-family:inherit;
  font-size:.875rem;
  color:var(--slate-900);
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:.5rem;
}
.noticias-filtro__campo input:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}
/* `margin:0` porque `.btn-primary` nasce com 2rem no alto — foi desenhado para
   fechar um formulario, e numa linha de controles empurraria o botao para baixo
   dos campos. A altura vem do mesmo par de `padding` deles. */
.noticias-filtro .noticias-filtro__acao{
  display:inline-flex;
  align-items:center;
  min-height:2.25rem;
  margin:0;
  padding:.375rem 1.25rem;
  border:0;
  border-radius:.5rem;
  font-size:.8125rem;
  line-height:1.4;
  cursor:pointer;
}
/* Mesma altura do botao ao lado, e nao `align-self:center`: o centro da LINHA
   fica acima do centro dos campos, porque a linha inclui os rotulos que ficam
   sobre eles. Assim o "Limpar" saia 10px mais alto que o "Filtrar". Com altura
   declarada, os dois fecham a base no mesmo lugar. */
.noticias-filtro .noticias-filtro__limpar{
  display:inline-flex;
  align-items:center;
  min-height:2.25rem;
  font-size:.8125rem;
  font-weight:600;
  color:hsl(var(--muted-foreground));
  text-decoration:underline;
}

.noticias-contagem{
  margin:0 0 1.25rem;
  font-size:.875rem;
  color:hsl(var(--muted-foreground));
}

/* ---------- Galeria ---------- */
/* Grade em degraus: um cartao no celular, dois no tablet, tres na tela grande.
   Nao passa de tres porque cada cartao carrega capa, titulo e resumo — em quatro
   colunas o resumo quebraria em oito linhas. */
.noticias-galeria{
  display:grid;
  gap:1.5rem;
  margin:0;
  padding:0;
  list-style:none;
  grid-template-columns:minmax(0,1fr);
}
.noticias-galeria .noticia-cartao{
  position:relative;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  margin-bottom:0;
  padding-left:0;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border) / .7);
  border-radius:1rem;
  box-shadow:var(--shadow-sm);
  transition:transform .15s ease,box-shadow .15s ease;
}
.noticias-galeria .noticia-cartao::before{content:none}
.noticias-galeria .noticia-cartao:hover{
  transform:translateY(-3px);
  box-shadow:var(--shadow-md);
}

/* Proporcao fixa: as capas chegam em tamanhos diferentes, e sem isto a grade
   ficaria com cartoes de alturas diferentes na mesma linha. */
.noticias-galeria .noticia-cartao__capa{
  position:relative;
  aspect-ratio:16 / 10;
  overflow:hidden;
  background:var(--tema, hsl(var(--primary)));
}
.noticias-galeria .noticia-cartao__capa img{
  width:100%;
  height:100%;
  object-fit:cover;
  transition:transform .3s ease;
}
.noticias-galeria .noticia-cartao:hover .noticia-cartao__capa img{transform:scale(1.04)}

/* Sem foto, a marca no lugar dela: um retangulo branco faria o cartao parecer
   quebrado. */
.noticias-galeria .noticia-cartao__marca{
  position:absolute;
  inset:0;
  display:flex;
  align-items:center;
  justify-content:center;
  color:hsl(var(--primary-foreground) / .55);
}

.noticias-galeria .noticia-cartao__data{
  position:absolute;
  left:.75rem;
  bottom:.75rem;
  padding:.25rem .625rem;
  font-size:.75rem;
  font-weight:700;
  color:var(--slate-900);
  background:hsl(var(--card) / .92);
  border-radius:999px;
  box-shadow:var(--shadow-sm);
}

.noticias-galeria .noticia-cartao__corpo{
  display:flex;
  flex-direction:column;
  flex:1;
  padding:1.25rem 1.25rem 1.5rem;
}
.noticias-galeria .noticia-cartao__titulo{
  margin:0 0 .625rem;
  font-size:1.0625rem;
  line-height:1.4;
  font-weight:700;
  color:hsl(var(--foreground));
}
/* O link estica sobre o cartao inteiro: assim o alvo do clique e o cartao todo,
   e ainda ha UM so link por cartao — com um na imagem e outro no titulo, o
   leitor de tela anunciaria dois destinos iguais. */
.noticias-galeria .noticia-cartao__titulo a{
  color:inherit;
  text-decoration:none;
}
.noticias-galeria .noticia-cartao__titulo a::after{
  content:"";
  position:absolute;
  inset:0;
}
.noticias-galeria .noticia-cartao__titulo a:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:3px;
}
.noticias-galeria .noticia-cartao__resumo{
  margin:0 0 1rem;
  font-size:.875rem;
  line-height:1.6;
  color:hsl(var(--muted-foreground));
}
.noticias-galeria .noticia-cartao__acao{
  display:inline-flex;
  align-items:center;
  gap:.375rem;
  margin-top:auto;
  font-size:.875rem;
  font-weight:700;
  color:var(--tema, hsl(var(--primary)));
}
.noticias-galeria .noticia-cartao__acao svg{transition:transform .15s ease}
.noticias-galeria .noticia-cartao:hover .noticia-cartao__acao svg{transform:translateX(3px)}

@media (min-width:640px){
  .noticias-galeria{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:1024px){
  .noticias-galeria{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* ---------- Paginacao ---------- */
/* Escopada com duas classes, como o resto do bloco: `.page-content ul li` e o
   `::before` dele empilhariam cada numero numa linha, com um losango amarelo na
   frente, e `.page-content a` pintaria tudo de azul sublinhado. */
.paginacao{margin-top:2.5rem}
.paginacao .paginacao__lista{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:center;
  gap:.375rem;
  margin:0;
  padding:0;
  list-style:none;
}
.paginacao .paginacao__lista li{margin:0;padding-left:0}
.paginacao .paginacao__lista li::before{content:none}

.paginacao .paginacao__item{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  /* Separa a seta do rotulo. Um espaco escrito no HTML entre `&lsaquo;` e a
     palavra seria colapsado pelo navegador — o item e flex, e cada pedaco vira
     um item anonimo. */
  gap:.25rem;
  min-width:2.5rem;
  min-height:2.5rem;
  padding:.5rem .75rem;
  font-size:.875rem;
  font-weight:600;
  line-height:1;
  color:hsl(var(--muted-foreground));
  text-decoration:none;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border) / .7);
  border-radius:.625rem;
  transition:background-color .15s ease,color .15s ease,border-color .15s ease;
}
.paginacao a.paginacao__item:hover{
  color:var(--tema, hsl(var(--primary)));
  border-color:var(--tema, hsl(var(--primary)));
}
.paginacao a.paginacao__item:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}
.paginacao .paginacao__item.is-atual{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  border-color:var(--tema, hsl(var(--primary)));
}
/* Ponta da lista: nao ha para onde ir, e o cinza claro diz isso sem sumir. */
.paginacao .paginacao__item--inativo{opacity:.45}

.paginacao .paginacao__reticencias{
  padding:0 .25rem;
  color:hsl(var(--muted-foreground));
}

/* No celular sobra pouca largura: os rotulos saem e ficam so as setas, que ja
   dizem para onde levam. */
@media (max-width:479px){
  .paginacao .paginacao__rotulo{display:none}
}

@media (prefers-reduced-motion:reduce){
  .paginacao .paginacao__item{transition:none}
}

/* ---------- Nenhuma noticia ---------- */
.noticias-vazio{
  padding:3rem 1.5rem;
  text-align:center;
  background:hsl(var(--muted) / .4);
  border:1px dashed hsl(var(--border));
  border-radius:1rem;
}
.noticias-vazio__titulo{
  margin:0 0 .5rem;
  font-size:1.125rem;
  font-weight:700;
  color:hsl(var(--foreground));
}

/* ---------- Leitura de uma noticia ---------- */
.noticia__cabecalho{padding-bottom:2rem}
.noticia .noticia__voltar{
  display:inline-flex;
  align-items:center;
  gap:.375rem;
  margin-bottom:1.25rem;
  font-size:.875rem;
  font-weight:600;
  color:hsl(var(--muted-foreground));
  text-decoration:none;
}
.noticia .noticia__voltar:hover{color:var(--tema, hsl(var(--primary)))}
.noticia .noticia__voltar svg{transition:transform .15s ease}
.noticia .noticia__voltar:hover svg{transform:translateX(-3px)}

.noticia .noticia__publicacao{
  margin:1rem 0 0;
  font-size:.875rem;
  color:hsl(var(--muted-foreground));
}

/* Coluna de leitura estreita: linha longa demais faz o olho perder onde recomeca.
   O `margin-inline:auto` centra a coluna dentro do container. */
.noticia__miolo{max-width:44rem;margin-inline:auto}

.noticia .noticia__capa{
  margin:0 0 2rem;
  overflow:hidden;
  border-radius:1rem;
  box-shadow:var(--shadow-md);
}
.noticia .noticia__capa img{display:block;width:100%;height:auto}

.noticia .noticia__texto p{
  margin:0 0 1.25rem;
  font-size:1.0625rem;
  line-height:1.75;
  color:hsl(var(--foreground));
}
.noticia .noticia__texto p:last-child{margin-bottom:0}

/* Nao ha bloco de volta no fim do texto: havia um, e ele saiu. A volta do alto
   ja esta a mao desde o primeiro instante, e duas chamadas para o mesmo lugar na
   mesma tela so fazem duvidar se levam a lugares diferentes. */

/* =========================================================
   TRANSPARENCIA — a busca unica
   ========================================================= */
/* Mesma faixa discreta do filtro das noticias, pelo mesmo motivo: busca e
   ferramenta, nao conteudo. Com moldura, sombra e titulo proprio ela competiria
   com o resultado, que e o que a pagina veio mostrar. */
.consulta-filtro{
  margin-bottom:2rem;
  padding:1rem 1.125rem;
  background:hsl(var(--muted) / .45);
  border:1px solid hsl(var(--border) / .55);
  border-radius:.75rem;
}

/* Houve aqui uma grade de quatro seletores — exercicio, instrumento, parceiro e
   parceria — e o `.consulta-filtro__rotulo` que os rotulava. Sairam com eles:
   agora e um campo de texto so, e o rotulo dele mora fora da tela, porque a
   pergunta ja esta no placeholder. */
.consulta-busca{
  display:flex;
  flex-direction:column;
}

/* O campo e as duas acoes na mesma linha, e caindo uma sob a outra no celular.
   `flex:1 1 20rem` da ao campo o que sobra e um piso confortavel: abaixo disso
   ele quebra para a linha de cima em vez de espremer o botao. */
.consulta-busca__linha{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.75rem;
}
.consulta-busca__campo{
  flex:1 1 20rem;
  min-width:0;
  min-height:2.375rem;
  padding:.375rem .75rem;
  font-family:inherit;
  font-size:.875rem;
  color:var(--slate-900);
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:.5rem;
}
.consulta-busca__campo:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}
.consulta-filtro .consulta-filtro__botao{
  display:inline-flex;
  align-items:center;
  gap:.4375rem;
  min-height:2.375rem;
  margin:0;
  padding:.375rem 1.25rem;
  font-family:inherit;
  font-size:.875rem;
  font-weight:700;
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  border:0;
  border-radius:.5rem;
  cursor:pointer;
}
/* Altura declarada, e nao `align-self:center`: o centro da linha fica acima do
   centro do botao, e sem isto o "Limpar" sairia mais alto que o "Pesquisar". */
.consulta-filtro .consulta-filtro__limpar{
  display:inline-flex;
  align-items:center;
  min-height:2.375rem;
  font-size:.8125rem;
  font-weight:600;
  color:hsl(var(--muted-foreground));
  text-decoration:underline;
}

.consulta-resultado{margin-top:2rem}
.consulta-resultado .consulta-resultado__titulo{
  margin:0 0 1rem;
  font-size:1.125rem;
  line-height:1.3;
  font-weight:700;
  color:hsl(var(--foreground));
}

/* A tabela e a mesma do portal — `.transparencia-tabela` —, entao aqui so o que
   difere: sao SETE colunas em vez de tres, e a do parceiro e a que pode ter
   texto longo. */
.consulta-tabela td:nth-child(2),
.consulta-tabela td:nth-child(3){white-space:normal;min-width:11rem}
.consulta-tabela td:first-child{font-variant-numeric:tabular-nums}

.page-content .consulta-tabela__ficha{
  display:inline-flex;
  align-items:center;
  gap:.25rem;
  font-size:.8125rem;
  font-weight:700;
  white-space:nowrap;
  color:var(--tema, hsl(var(--primary)));
  text-decoration:none;
}
.page-content .consulta-tabela__ficha:hover{text-decoration:underline}
.consulta-tabela__ficha svg{transition:transform .15s ease}
.page-content .consulta-tabela__ficha:hover svg{transform:translateX(2px)}

@media (prefers-reduced-motion:reduce){
  .consulta-tabela__ficha svg{transition:none}
  .page-content .consulta-tabela__ficha:hover svg{transform:none}
}

/* O arquivo do contrato nao tem estilo proprio: ele mora na mesma
   `.transparencia-sanfona` da Execucao da parceria, com a mesma
   `.transparencia-tabela` dentro. Houve aqui um bloco `.contrato-arquivo`, com
   titulo e um par de botoes soltos, substituido por aquela sanfona. */

/* ---------- Contratos: a listagem de um exercicio ---------- */
/* A tabela e a mesma do portal de parcerias — `.transparencia-tabela` —, entao
   aqui so o que difere: sao seis colunas, e duas delas — fornecedor e objeto —
   sao texto que pode ser longo. As demais herdam o `nowrap` da tabela base, que
   e o que mantem numero, vigencia e valor numa linha cada. */
.contratos-tabela td:nth-child(2),
.contratos-tabela td:nth-child(3){white-space:normal}
.contratos-tabela td:nth-child(2){min-width:11rem}
.contratos-tabela td:first-child{font-variant-numeric:tabular-nums}

/* O objeto sai por extenso: a linha cresce com ele, e a listagem passa a dizer
   do que trata cada contrato sem precisar abrir a ficha. Houve aqui um corte em
   tres linhas, removido.

   Justificado, com um teto de largura: sem o teto a coluna comeria a tabela numa
   tela larga, e uma linha justificada de 80 caracteres para cima fica com os
   vaos entre palavras grandes demais para se ler de corrido.

   `hyphens:auto` acompanha o `justify`: sem hifenizacao, o justificado abre
   buracos toda vez que a palavra seguinte nao cabe. O idioma vem do `lang` do
   documento, que e pt-BR. */
.contratos-tabela .contratos-tabela__objeto{
  min-width:18rem;
  max-width:34rem;
  text-align:justify;
  hyphens:auto;
}
.contratos-tabela th:last-child,
.contratos-tabela td:last-child{text-align:end}

/* O "Ver detalhes" serve as duas listagens que o tem — contratos e auditorias.
   Os dois nomes na mesma regra, e nao a regra copiada: sao o mesmo link, e
   copia-la divergiria na primeira alteracao de estilo. */
.page-content .contratos-tabela__detalhes,
.page-content .auditorias-tabela__detalhes{
  display:inline-flex;
  align-items:center;
  gap:.25rem;
  font-size:.8125rem;
  font-weight:700;
  white-space:nowrap;
  color:var(--tema, hsl(var(--primary)));
  text-decoration:none;
}
.page-content .contratos-tabela__detalhes:hover,
.page-content .auditorias-tabela__detalhes:hover{text-decoration:underline}
.contratos-tabela__detalhes svg,
.auditorias-tabela__detalhes svg{transition:transform .15s ease}
.page-content .contratos-tabela__detalhes:hover svg,
.page-content .auditorias-tabela__detalhes:hover svg{transform:translateX(2px)}

@media (prefers-reduced-motion:reduce){
  .contratos-tabela__detalhes svg,
  .auditorias-tabela__detalhes svg{transition:none}
  .page-content .contratos-tabela__detalhes:hover svg,
  .page-content .auditorias-tabela__detalhes:hover svg{transform:none}
}

/* ---------- Auditorias: a listagem de um tipo num exercicio ---------- */
/* A tabela e a mesma do portal — `.transparencia-tabela` —, entao aqui so o que
   difere: sao cinco colunas, e duas delas — objeto e responsavel — sao texto que
   pode ser longo. As demais herdam o `nowrap` da tabela base, que e o que mantem
   a data e o periodo numa linha cada. */
.auditorias-tabela td:nth-child(2),
.auditorias-tabela td:nth-child(4){white-space:normal}
.auditorias-tabela td:nth-child(4){min-width:11rem}
.auditorias-tabela td:first-child{font-variant-numeric:tabular-nums}

/* O objeto sai por extenso, com o mesmo tratamento do objeto do contrato:
   justificado, com teto de largura para a coluna nao comer a tabela numa tela
   larga, e `hyphens:auto` para o justificado nao abrir buracos entre as
   palavras. */
.auditorias-tabela .auditorias-tabela__objeto{
  min-width:18rem;
  max-width:34rem;
  text-align:justify;
  hyphens:auto;
}
.auditorias-tabela th:last-child,
.auditorias-tabela td:last-child{text-align:end}

/* ---------- "Ver mais em:", quando a noticia remete a outro site ---------- */
/* Escopado com duas classes, como o resto do bloco: dentro de `.page-content`
   valem `.page-content p` e `.page-content a`, que tem um TIPO a mais e venceriam
   uma classe sozinha — o link sairia azul e sublinhado, fora da paleta. */
/* UMA linha, sempre. O endereco nao quebra para a linha de baixo: chegando ao
   fim da linha, o que passa disso e cortado. Uma URL longa quebrada em tres
   linhas ocupa mais espaco do que a propria noticia merece no fecho, e lida em
   pedacos nao ajuda ninguem — quem vai la clica, nao copia a mao. */
.noticia .noticia__ver-mais{
  display:flex;
  flex-wrap:nowrap;
  align-items:baseline;
  gap:.375rem;
  margin:2rem 0 0;
  padding-top:1.25rem;
  border-top:1px solid hsl(var(--border) / .7);
  font-size:.9375rem;
  line-height:1.5;
}
/* O rotulo nao encolhe: quem cede espaco e o endereco, que e o que se corta. */
.noticia .noticia__ver-mais-rotulo{
  flex:0 0 auto;
  font-weight:700;
  color:hsl(var(--foreground));
}
.noticia .noticia__ver-mais a{
  display:inline-flex;
  align-items:center;
  gap:.25rem;
  /* `min-width:0` e o que autoriza o encolhimento: sem ele o item flex nao
     encolhe abaixo do proprio conteudo, e o corte nunca aconteceria. */
  min-width:0;
  flex:0 1 auto;
  color:var(--tema, hsl(var(--primary)));
  text-decoration:underline;
  text-underline-offset:.2em;
}
.noticia .noticia__ver-mais a:hover{text-decoration:none}

/* Só o endereco e cortado. As reticencias avisam que ha mais; o endereco
   inteiro esta no `title` e no proprio `href`. */
.noticia .noticia__ver-mais-url{
  overflow:hidden;
  min-width:0;
  white-space:nowrap;
  text-overflow:ellipsis;
}

/* A setinha de "abre fora" fica FORA do corte e nao encolhe: e ela que avisa
   que o link sai do site, e sumiria justamente no endereco longo. */
.noticia .noticia__ver-mais a svg{flex:0 0 auto}

/* ---------- Convite a seguir as redes, no fim de toda noticia ---------- */
/* Uma TIRA DISCRETA, e nao um painel. Houve aqui um bloco no verde da marca, com
   logotipo em silhueta e ondas concentricas ao fundo: chamava mais atencao do
   que a noticia, que e o que a pagina veio mostrar. A identidade ficou num
   filete da cor do tema na borda e no chapeu — e o quanto ela precisa ocupar
   num convite que fecha a leitura.

   Fundo quase branco, texto em corpo de leitura e duas linhas de altura: o
   visitante o encontra ao terminar a noticia sem que ele dispute o olhar antes
   disso.

   Fica DENTRO do miolo, na coluna estreita da leitura, porque ainda e o fecho do
   que se estava lendo. Numa faixa da largura da pagina leria como outro
   assunto. */
.noticia .noticia-redes{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:.875rem 1.5rem;
  margin-top:2.5rem;
  padding:1.125rem 1.375rem;
  background:hsl(var(--muted) / .5);
  border:1px solid hsl(var(--border) / .7);
  /* O filete e o unico lugar onde a cor da marca aparece cheia. Na borda
     esquerda, do mesmo jeito que nos blocos de area de atuacao. */
  border-left:3px solid var(--tema, hsl(var(--primary)));
  border-radius:.75rem;
}

.noticia .noticia-redes__dizeres{
  min-width:0;
  /* Cede espaco para os botoes na mesma linha enquanto couber, e ocupa a linha
     inteira quando nao couber mais. */
  flex:1 1 20rem;
}

/* O titulo e o CHAPEU: miudo, em versais, na cor do tema. Ele rotula o bloco,
   nao anuncia nada — quem tem o recado e a linha de baixo. */
.noticia .noticia-redes__titulo{
  margin:0 0 .1875rem;
  font-size:.6875rem;
  line-height:1.2;
  font-weight:800;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--tema, hsl(var(--primary)));
}

.noticia .noticia-redes__texto{
  margin:0;
  max-width:30rem;
  font-size:.9375rem;
  line-height:1.5;
  color:hsl(var(--muted-foreground));
}

.noticia .noticia-redes__lista{
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  margin:0;
  padding:0;
  list-style:none;
}
/* O bloco vive dentro de `.page-content`, e la vale `.page-content ul li::before`
   — que tem um TIPO a mais e vence uma classe sozinha. Sem cancelar, cada botao
   sairia com um losango amarelo na frente e recuado 24px. Mesmo motivo, e mesma
   solucao, dos cartoes da galeria e da paginacao. */
.noticia .noticia-redes__lista li{
  margin-bottom:0;
  padding-left:0;
}
.noticia .noticia-redes__lista li::before{content:none}

/* Pilula branca e pequena, com o nome ESCRITO ao lado do icone. No rodape o
   icone sozinho basta, porque la ele esta entre outros e o contexto e obvio;
   aqui o bloco e o convite em si, e um botao que diz "Instagram" convida mais do
   que um desenho que o visitante precisa reconhecer. */
.noticia .noticia-redes__link{
  display:inline-flex;
  align-items:center;
  gap:.4375rem;
  padding:.4375rem .8125rem;
  font-size:.8125rem;
  font-weight:600;
  color:hsl(var(--foreground));
  text-decoration:none;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:9999px;
  transition:color .2s ease,border-color .2s ease;
}

/* No hover o nome e a borda assumem a cor da rede, e o fundo continua branco.
   Preencher a pilula inteira acenderia um retangulo colorido no fim de toda
   noticia — que e justamente o que este bloco deixou de ser. */
.noticia .noticia-redes__link:hover,
.noticia .noticia-redes__link:focus-visible{
  color:var(--rede, var(--tema, hsl(var(--primary))));
  border-color:var(--rede, var(--tema, hsl(var(--primary))));
}
.noticia .noticia-redes__link--facebook{--rede:#1877F2}
.noticia .noticia-redes__link--instagram{--rede:#C13584}
.noticia .noticia-redes__link--youtube{--rede:#E11D1D}

@media (max-width:559px){
  /* Botao de largura cheia: lado a lado em tela estreita, os dois ficam com
     area de toque menor que o minimo confortavel. */
  .noticia .noticia-redes__lista{width:100%}
  .noticia .noticia-redes__lista li{flex:1 1 100%}
  .noticia .noticia-redes__link{width:100%;justify-content:center}
}

.noticia__outras{
  margin-top:4rem;
  padding-top:2.5rem;
  border-top:1px solid hsl(var(--border) / .7);
}
.noticia .noticia__outras-titulo{
  margin:0 0 1.5rem;
  font-size:1.375rem;
  line-height:1.3;
  font-weight:700;
  color:hsl(var(--foreground));
}

@media (prefers-reduced-motion:reduce){
  .noticias-galeria .noticia-cartao,
  .noticias-galeria .noticia-cartao__capa img,
  .noticias-galeria .noticia-cartao__acao svg,
  .noticia .noticia-redes__link,
  .noticia .noticia__voltar svg{transition:none}
  .noticias-galeria .noticia-cartao:hover{transform:none}
  .noticias-galeria .noticia-cartao:hover .noticia-cartao__capa img{transform:none}
}

/* =========================================================
   POP-UP DO SITE
   ========================================================= */
/* Nasce com `hidden` na marcacao; o main.js e que decide mostrar. O `[hidden]`
   do navegador vale `display:none`, e qualquer `display` declarado aqui o
   venceria — dai a regra so valer quando o atributo nao esta presente. */
.popup:not([hidden]){
  position:fixed;
  inset:0;
  z-index:1100;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:1.25rem;
}

/* O veu e um botao de verdade, para o teclado alcancar. Sem estas regras ele
   sairia com a aparencia de botao do sistema por cima da tela inteira. */
.popup .popup__veu{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  padding:0;
  border:0;
  cursor:pointer;
  background:hsl(var(--foreground) / .6);
  -webkit-appearance:none;
  appearance:none;
}

.popup__caixa{
  position:relative;
  max-width:min(38rem, 100%);
  max-height:calc(100dvh - 2.5rem);
  overflow:auto;
  border-radius:1rem;
  box-shadow:var(--shadow-md);
  background:hsl(var(--card));
}

.popup .popup__imagem{
  display:block;
  width:100%;
  height:auto;
  border-radius:1rem;
}

.popup .popup__fechar{
  position:absolute;
  top:.625rem;
  right:.625rem;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:2.25rem;
  height:2.25rem;
  padding:0;
  cursor:pointer;
  color:var(--slate-900);
  /* Fundo proprio: a imagem por baixo pode ser clara ou escura, e um X sem
     contraste garantido vira um aviso que nao se sabe fechar. */
  background:hsl(var(--card) / .92);
  border:0;
  border-radius:999px;
  box-shadow:var(--shadow-sm);
}
.popup .popup__fechar:hover{background:hsl(var(--card))}
.popup .popup__fechar:focus-visible{
  outline:2px solid var(--tema, hsl(var(--primary)));
  outline-offset:2px;
}

/* Com o aviso aberto, o fundo nao rola: a caixa ficaria parada no meio de um
   conteudo em movimento, e o aviso pareceria travado. */
body.tem-popup{overflow:hidden}

/* =========================================================
   BOTAO DE DOACAO NO RODAPE
   ========================================================= */
/* Mesma cor de texto do "Doe Agora" do menu do topo.

   Os dois botoes tem o mesmo fundo amarelo e o mesmo papel, mas o do rodape
   pintava o texto de azul-escuro (`--accent-foreground`, rgb(0,54,102)) e o do
   topo de quase-preto (`--slate-900`, rgb(15,23,42)). Sao a MESMA acao em dois
   lugares da pagina: cores diferentes fazem o visitante hesitar sobre estar
   diante do mesmo botao.

   O icone acompanha sem regra propria — ele desenha com `currentColor`.

   Aqui embaixo, e nao na regra original: o inicio desta folha e o arquivo
   herdado do site estatico, que so pode crescer. */
.footer__cta{color:var(--slate-900)}

/* =========================================================
   ATUACAO — areas cadastradas
   ========================================================= */
/* Um bloco por area, cada um ocupando a largura inteira e o seguinte abaixo
   dele. Nao e grade de cartoes em colunas: cada area carrega publico,
   atendimento e indicadores, e em meia tela nenhum desses blocos caberia sem
   virar duas linhas por item.

   A cor vem da marca: `--tema` e a cor definida no painel, com o azul
   institucional de reserva; o amarelo do acento aparece nos detalhes — a barra
   lateral, o sublinhado do nome, o selo do icone. Sao as MESMAS duas cores do
   topo e do rodape, e nao uma paleta propria desta pagina. */
.areas-atuacao{
  display:flex;
  flex-direction:column;
  gap:2rem;
  padding-left:0;
  list-style:none;
}
/* Escopado com DUAS classes para vencer as regras genericas de `.page-content`,
   que transformam todo `li` em item com losango e recuo.

   O `padding` do cartao fica na regra ABAIXO, tambem com duas classes: escrito
   so em `.area-atuacao`, o `padding-left:0` daqui o venceria por
   especificidade e a imagem colaria na borda esquerda. */
.page-content .areas-atuacao > li{
  padding-left:0;
  margin-bottom:0;
}
.page-content .areas-atuacao > li::before{content:none}

.page-content .areas-atuacao > .area-atuacao{
  position:relative;
  display:grid;
  gap:2rem;
  padding:1.75rem 1.75rem 1.75rem 2.25rem;
  overflow:hidden;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border) / .7);
  border-radius:calc(var(--radius) / 1.6);
  box-shadow:var(--shadow-sm);
  transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;
  /* folga para o cabecalho fixo nao cobrir o bloco ao chegar pela ancora */
  scroll-margin-top:5rem;
}
/* Barra de cor na borda esquerda: e o que dá identidade ao bloco a distancia,
   antes de qualquer texto ser lido. Vai do tema ao amarelo da marca. */
.page-content .areas-atuacao > .area-atuacao::before{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:.375rem;
  background:linear-gradient(180deg,var(--tema, hsl(var(--primary))),hsl(var(--accent)));
}
.page-content .areas-atuacao > .area-atuacao:hover{
  transform:translateY(-3px);
  box-shadow:var(--shadow-md);
  border-color:hsl(var(--border));
}

/* A partir do tablet a imagem toma uma coluna. A largura e fixa em fracao:
   `auto` deixaria a coluna do texto encolher conforme o tamanho do arquivo
   enviado, e blocos vizinhos sairiam com larguras diferentes. */
@media (min-width:768px){
  .page-content .areas-atuacao > .area-atuacao{
    grid-template-columns:minmax(0,2fr) minmax(0,3fr);
    align-items:start;
  }
  /* A imagem troca de lado a cada bloco. Quem decide e o `:nth-child`, e nao
     uma classe no HTML: cadastrar, apagar ou reordenar areas no painel nao
     desalinha a alternancia — ela se recalcula sozinha.

     A troca vira o TEMPLATE e endereca cada item a sua coluna. Com `order` a
     figura saia MAIOR nos blocos pares: `order` so muda a ordem de colocacao,
     entao ela caia na coluna de 3fr e o texto na de 2fr. Assim a figura fica
     sempre na coluna de 2fr, de um lado ou do outro.

     A linha e explicita nos dois: colocado o primeiro item na coluna 2, o
     cursor da colocacao automatica ja passou da coluna 1, e o segundo desceria
     para uma segunda linha. */
  .page-content .areas-atuacao > li:nth-child(even){
    grid-template-columns:minmax(0,3fr) minmax(0,2fr);
  }
  .areas-atuacao > li:nth-child(even) .area-atuacao__figura{grid-column:2;grid-row:1}
  .areas-atuacao > li:nth-child(even) .area-atuacao__corpo{grid-column:1;grid-row:1}
}

/* ---------- Figura ---------- */
/* A caixa da imagem tem tamanho fixo, e a proporcao mora AQUI, na moldura — nao
   so na imagem de dentro.

   Estava na imagem, e por isso o quadro variava: sem foto, o `span` do
   marcador desenhava a propria altura; com foto, quem mandava era o arquivo
   enviado. Na moldura, os tres casos dao o mesmo retangulo — com foto, sem
   foto, e com uma foto que o navegador ainda nao baixou, o que de quebra
   impede a pagina de pular enquanto carrega. */
.area-atuacao__figura{
  position:relative;
  aspect-ratio:4 / 3;
  padding:.375rem;
  background:linear-gradient(140deg,hsl(var(--accent) / .3),hsl(var(--muted)));
  border-radius:calc(var(--radius) / 2.4);
}

/* Preenche a moldura inteira. `cover` recorta o que sobra: as fotos chegam em
   proporcoes diferentes, e e o recorte que as faz caber no mesmo retangulo sem
   deformar nenhuma. */
.area-atuacao__imagem{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  border-radius:calc(var(--radius) / 3);
}

/* Sem foto, o MESMO retangulo, com a marca ao centro.

   O icone e posicionado, e nao centralizado por flex: `display:flex` trocaria a
   caixa do marcador pela de um container, e ela precisa ser a mesma da imagem
   para que os dois casos midam igual. */
.area-atuacao__imagem--vazia{
  position:relative;
  /* Mesmo tratamento da faixa: a cor do tema com veu preto por cima, em vez de
     um degrade que terminava no azul fixo da marca. */
  background-color:var(--tema, hsl(var(--primary)));
  background-image:linear-gradient(140deg,rgb(0 0 0 / 0) 0%,rgb(0 0 0 / .28) 100%);  color:hsl(var(--primary-foreground) / .5);
}
.area-atuacao__imagem--vazia svg{
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
}
/* ---------- Corpo ---------- */
.area-atuacao__corpo{display:flex;flex-direction:column}

.page-content .area-atuacao__chapeu{
  margin:0 0 .375rem;
  max-width:none;
  font-size:.6875rem;
  line-height:1.4;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}

/* O nome grande, com o tracinho amarelo embaixo: e o ponto de entrada do bloco
   e precisa vencer o peso da imagem ao lado. */
.area-atuacao__nome{
  position:relative;
  margin:0 0 1.125rem;
  padding-bottom:.75rem;
  font-size:1.75rem;
  line-height:1.2;
  font-weight:800;
  letter-spacing:.01em;
  text-transform:uppercase;
  /* Mesma cor do titulo da pagina, e nao a cor do tema da area: o tema ja
     aparece no tracinho abaixo e nos detalhes do bloco, e o nome pintado
     competia com o titulo em vez de se ler como parte do mesmo texto. */
  color:hsl(var(--foreground));
}
.area-atuacao__nome::after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  width:2.75rem;
  height:.25rem;
  border-radius:999px;
  background:hsl(var(--accent));
}

.page-content .area-atuacao__resumo{
  margin:0 0 1.5rem;
  max-width:none;
  font-size:1.0625rem;
  line-height:1.6;
  color:hsl(var(--muted-foreground));
}

/* ---------- Blocos de dado ---------- */
.area-atuacao__bloco + .area-atuacao__bloco{margin-top:1.25rem}

.area-atuacao__rotulo{
  display:flex;
  align-items:center;
  gap:.4375rem;
  margin:0 0 .625rem;
  font-size:.6875rem;
  line-height:1.4;
  font-weight:800;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--tema, hsl(var(--primary)));
}
.area-atuacao__rotulo svg{width:15px;height:15px;flex-shrink:0}

/* Etiquetas. Servem ao publico atendido no bloco da listagem e aos parceiros na
   pagina da area — mesma peca, mesmo nome. */
.area-chips{
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  margin:0;
  padding-left:0;
  list-style:none;
}
.page-content .area-chips li{
  padding:.3125rem .75rem;
  margin-bottom:0;
  background:hsl(var(--muted) / .8);
  border:1px solid hsl(var(--border) / .8);
  border-radius:999px;
  font-size:.8125rem;
  line-height:1.4;
  font-weight:600;
  color:hsl(var(--foreground));
}
.page-content .area-chips li::before{content:none}


/* A frase de apoio, entre o nome e o resumo. Menor que o resumo e em outra cor:
   sao dois textos seguidos, e sem contraste entre eles o olho le um paragrafo
   so, de quatro linhas. */
.page-content .area-atuacao__linha{
  margin:0 0 .5rem;
  max-width:none;
  font-size:1rem;
  line-height:1.4;
  font-weight:700;
  color:hsl(var(--foreground));
}

/* =========================================================
   ATUACAO — servicos
   ========================================================= */
/* Vem depois das areas, num fundo proprio: sao uma lista da PAGINA, e nao de
   uma area, e a faixa clara e o que diz que comecou outro assunto.

   Fora de `.page-content`, ao contrario dos blocos das areas: aqui nao ha texto
   corrido para herdar a tipografia de la, e as regras genericas de `li` de
   `.page-content` teriam de ser desfeitas uma a uma. */
.servicos-atuacao{
  padding-block:4rem;
  background:hsl(var(--muted) / .45);
  border-top:1px solid hsl(var(--border) / .7);
  /* folga para o cabecalho fixo nao cobrir o titulo ao chegar pela ancora */
  scroll-margin-top:5rem;
}

/* Chapeu da secao: mesma peca do chapeu do bloco da area — versalete pequeno e
   espacado, na cor de apoio, situando o titulo antes de ele ser lido. */
.servicos-atuacao__chapeu{
  margin:0 0 .5rem;
  font-size:.6875rem;
  line-height:1.4;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}

.servicos-atuacao__titulo{
  position:relative;
  margin:0 0 2rem;
  padding-bottom:.875rem;
  font-size:1.75rem;
  line-height:1.2;
  font-weight:800;
  letter-spacing:.01em;
  text-transform:uppercase;
  /* Mesma cor do titulo da pagina, pelo mesmo motivo do nome da area: os dois
     titulos se leem como um so texto, e o tema fica por conta do tracinho. */
  color:hsl(var(--foreground));
}
/* O mesmo tracinho amarelo do nome da area: repetir a forma e o que mantem as
   duas secoes na mesma familia. */
.servicos-atuacao__titulo::after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  width:2.75rem;
  height:.25rem;
  border-radius:999px;
  background:hsl(var(--accent));
}

/* Grade de cartoes, e nao blocos de largura inteira como as areas: um servico e
   titulo e um paragrafo curto, e em largura inteira cada um ocuparia uma tela
   para dizer duas linhas.

   `auto-fit` porque a quantidade varia: com dois servicos a linha se refaz
   sozinha, sem deixar buraco. */
.servicos-atuacao__lista{
  display:grid;
  gap:1.25rem;
  margin:0;
  padding-left:0;
  list-style:none;
  grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));
}

.servico-atuacao{
  position:relative;
  padding:1.5rem;
  overflow:hidden;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border) / .8);
  border-radius:calc(var(--radius) / 2);
  box-shadow:var(--shadow-sm);
  transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;
}
.servico-atuacao:hover{
  transform:translateY(-3px);
  box-shadow:var(--shadow-md);
  border-color:hsl(var(--border));
}

.servico-atuacao__titulo{
  margin:0 0 .5rem;
  font-size:1.0625rem;
  line-height:1.35;
  font-weight:700;
  color:hsl(var(--foreground));
}

.servico-atuacao__descricao{
  margin:0;
  font-size:.9375rem;
  line-height:1.6;
  color:hsl(var(--muted-foreground));
}

/* Sem animacao para quem pediu ao sistema para nao ter. */
@media (prefers-reduced-motion:reduce){
  .servico-atuacao{transition:none}
  .servico-atuacao:hover{transform:none}
}

@media (max-width:575px){
  .servicos-atuacao{padding-block:2.5rem}
  /* Chapeu da secao: mesma peca do chapeu do bloco da area — versalete pequeno e
   espacado, na cor de apoio, situando o titulo antes de ele ser lido. */
.servicos-atuacao__chapeu{
  margin:0 0 .5rem;
  font-size:.6875rem;
  line-height:1.4;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}

.servicos-atuacao__titulo{font-size:1.375rem}
}

/* =========================================================
   AGENDA — calendario do mes e eventos do dia
   ========================================================= */
/* Duas colunas a partir do tablet: o calendario a esquerda, com largura fixa em
   fracao, e os eventos ocupando o resto. Numa coluna so — celular — o
   calendario vem primeiro, que e por onde se escolhe o dia. */
/* Sem margem no topo: o respiro em cima e embaixo e o `padding-block` da secao,
   e uma margem aqui somava a ele so de um lado — o calendario descia 1.5rem
   alem do que sobrava no pe. O titulo da secao e visually-hidden, entao nao ha
   nada acima de que se separar. */
.agenda{
  display:grid;
  gap:2rem;
  align-items:start;
}
@media (min-width:900px){
  .agenda{grid-template-columns:minmax(0,20rem) minmax(0,1fr)}
}

/* ---------- Calendario ---------- */
.agenda__calendario{
  padding:1.5rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:calc(var(--radius) / 1.6);
  box-shadow:var(--shadow-sm);
}

/* Enquanto o mes novo nao chega. O calendario continua na tela, so apagado: um
   vazio no lugar dele faria a troca parecer a pagina tendo falhado, e a espera
   e de fracao de segundo. `pointer-events` desligado porque clicar num mes que
   esta de saida nao teria efeito nenhum. */
[data-agenda-moldura].is-carregando{
  opacity:.55;
  pointer-events:none;
  transition:opacity .15s ease;
}

/* A faixa do mes: seta, nome do mes, seta. O nome ocupa o meio e as setas ficam
   nas pontas, alinhadas com as bordas do calendario. */
.agenda__navegacao{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:.5rem;
  margin-bottom:1rem;
}

.page-content .agenda__mes{
  margin:0;
  font-size:1.0625rem;
  font-weight:800;
  line-height:1.2;
  text-align:center;
  color:hsl(var(--foreground));
}

/* Link, e nao botao — trocar de mes e ir buscar outro mes. O alvo tem 2.25rem
   de lado: numa tela de toque, uma seta do tamanho do desenho seria pequena
   demais para acertar. */
.page-content .agenda__seta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  flex-shrink:0;
  width:2.25rem;
  height:2.25rem;
  border-radius:.625rem;
  color:hsl(var(--foreground));
  text-decoration:none;
  transition:background-color .15s ease;
}
.page-content .agenda__seta:hover{background:hsl(var(--muted))}
.agenda__seta svg{width:1.125rem;height:1.125rem}

/* `fixed` e `width:100%`: sem isso a coluna de um dia com marcacao ficaria mais
   larga que as outras, e a grade sairia torta de uma semana para a seguinte. */
.agenda-calendario{
  width:100%;
  table-layout:fixed;
  border-collapse:collapse;
}
.agenda-calendario th{
  padding-bottom:.5rem;
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}
.agenda-calendario td{padding:.125rem;text-align:center}

/* O dia e um botao de verdade, e nao uma celula clicavel: assim ele entra na
   ordem de tabulacao, responde ao Enter e anuncia o proprio estado. */
.agenda-calendario__dia{
  position:relative;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:.1875rem;
  width:100%;
  aspect-ratio:1;
  border-radius:.625rem;
  font-size:.875rem;
  font-weight:600;
  line-height:1;
  color:hsl(var(--foreground));
  transition:background-color .15s ease,color .15s ease;
}
.agenda-calendario__dia:hover{background:hsl(var(--muted))}

/* Hoje: so a moldura. O preenchimento e a marca do dia ESCOLHIDO, e os dois
   juntos fariam a pagina abrir com dois dias parecendo selecionados. */
.agenda-calendario__dia.is-hoje{box-shadow:inset 0 0 0 1px hsl(var(--border))}

/* Cor do tema, definida em Configuracoes. Vem de /tema.css; o valor de reserva
   vale se aquela folha faltar. Mesmo par do item atual da paginacao — a cor do
   tema no fundo e o texto que ela foi feita para carregar. */
.agenda-calendario__dia.is-selecionado,
.agenda-calendario__dia[aria-pressed="true"]{
  background:var(--tema, hsl(var(--primary)));
  color:hsl(var(--primary-foreground));
}

/* O ponto do dia com evento. Herda a cor do texto do botao para continuar
   visivel quando o dia esta selecionado e o fundo escurece. */
.agenda-calendario__marca{
  width:.3125rem;
  height:.3125rem;
  border-radius:999px;
  background:currentColor;
}

/* ---------- Eventos do dia ---------- */
.page-content .agenda-eventos__dia{
  margin:0 0 1rem;
  font-size:1.0625rem;
  font-weight:800;
  line-height:1.3;
  color:hsl(var(--foreground));
  /* A primeira letra do dia da semana vem minuscula do formatador de datas. */
  text-transform:capitalize;
}

/* Escopado sob a lista, e nao so pela classe do item: `.page-content ul li` traz
   losango amarelo, `padding-left` e `margin-bottom` para todo item de lista do
   corpo da pagina. Duas classes contra uma classe e dois tipos. */
.page-content .agenda-eventos__lista{display:grid;gap:.75rem}

/* O `hidden` volta a valer. O `display:grid` acima e regra de autor, e regra de
   autor vence a do proprio navegador para [hidden] — sem esta linha as listas
   escondidas continuam na tela, e o mes inteiro aparece de uma vez, como se
   todo dia tivesse os mesmos eventos. Mesmo caso do .visor e do .form-erro. */
.page-content .agenda-eventos__lista[hidden]{display:none}
.agenda-eventos__lista .agenda-evento{
  display:flex;
  /* A hora fica no meio da altura do cartao, e nao encostada no topo: alinhada
     ao topo ela empatava com o chapeu do tipo — a menor linha do bloco —, e o
     cartao saia com peso so na parte de cima. */
  align-items:center;
  gap:1rem;
  margin-bottom:0;
  padding:1rem 1.25rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-left:.25rem solid hsl(var(--accent));
  border-radius:calc(var(--radius) / 2.5);
  box-shadow:var(--shadow-sm);
}
.agenda-eventos__lista .agenda-evento::before{content:none}

.agenda-evento__hora{
  flex-shrink:0;
  font-size:.9375rem;
  font-weight:800;
  line-height:1.4;
  color:hsl(var(--foreground));
  font-variant-numeric:tabular-nums;
}

.agenda-evento__corpo{display:flex;flex-direction:column;gap:.125rem;min-width:0}

.agenda-evento__tipo{
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}
.agenda-evento__titulo{
  font-size:1rem;
  font-weight:700;
  line-height:1.4;
  color:hsl(var(--foreground));
}
/* O alfinete vem antes do texto. `flex-start` e nao `center`: o endereco pode
   quebrar em duas linhas, e centralizado o icone desceria para o meio do bloco,
   longe da primeira linha que ele nomeia. */
.agenda-evento__local{
  display:flex;
  align-items:flex-start;
  gap:.3125rem;
  font-size:.875rem;
  line-height:1.5;
  color:hsl(var(--muted-foreground));
}
.agenda-evento__local svg{
  flex-shrink:0;
  width:.875rem;
  height:.875rem;
  /* Empurra o icone para a altura da primeira linha do texto: pequeno como e,
     encostado no topo ele ficaria acima das letras. */
  margin-top:.1875rem;
}

.page-content .agenda-eventos__vazio{
  margin:0;
  padding:1.25rem;
  background:hsl(var(--muted) / .5);
  border:1px dashed hsl(var(--border));
  border-radius:calc(var(--radius) / 2.5);
  font-size:.9375rem;
  color:hsl(var(--muted-foreground));
}

@media (prefers-reduced-motion:reduce){
  .agenda-calendario__dia,
  .page-content .agenda__seta{transition:none}
}

/* =========================================================
   AJUDE — bloco de doacao
   ========================================================= */
/* O bloco nao tem cabecalho proprio: a faixa da pagina, logo acima, ja abre com
   chapeu, titulo e subtitulo, e um segundo empilhado aqui dizia a mesma coisa.
   O respiro no topo vem do `padding-block` de `.page-content`. */

/* Os dois cartoes dividem a linha quando ambos existem; sozinho, qualquer um
   ocupa a largura inteira. Quem resolve isso e o `auto-fit`, e nao uma classe
   impressa no HTML conforme o caso. */
.doacao__grade{
  display:grid;
  gap:1.25rem;
  align-items:stretch;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,21rem),1fr));
}

/* ---------- PIX ---------- */
/* O destaque da pagina: fundo na cor do tema contra os cartoes claros ao redor.
   E por ele que a maior parte das doacoes entra, e ele precisa ser o primeiro
   que o olho encontra.

   Duas declaracoes de fundo: navegador sem color-mix() fica so com a cor
   chapada, que ja resolve. O veu diagonal por cima da profundidade. */
.doacao-pix{
  position:relative;
  overflow:hidden;
  display:flex;
  flex-direction:column;
  gap:1.25rem;
  padding:1.75rem;
  border-radius:calc(var(--radius) / 1.6);
  background:var(--tema, hsl(var(--primary)));
  background-image:linear-gradient(135deg,rgb(255 255 255 / .10) 0%,rgb(0 0 0 / .18) 100%);
  color:hsl(var(--primary-foreground));
  box-shadow:var(--shadow-md);
}
/* Circulo de luz no canto, cortado pelo `overflow`. Decorativo: da volume ao
   bloco sem depender de imagem nenhuma. */
.doacao-pix::before{
  content:"";
  position:absolute;
  top:-40%;
  right:-15%;
  width:22rem;
  height:22rem;
  border-radius:50%;
  background:radial-gradient(circle,rgb(255 255 255 / .16) 0%,rgb(255 255 255 / 0) 70%);
  pointer-events:none;
}
.doacao-pix > *{position:relative}

/* Branco cheio, e nao a 75%: sao as duas unicas etiquetas do cartao, e
   apagadas elas sumiam contra o fundo escuro do tema. */
.doacao-pix__chapeu{
  margin:0;
  font-size:.75rem;
  font-weight:800;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:hsl(var(--primary-foreground));
}

.doacao-pix__corpo{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:1.5rem;
}

/* A moldura do QR tem cantos desenhados, como o visor de uma camera: e o que
   faz o quadrado branco parecer um leitor, e nao uma imagem solta sobre o fundo
   colorido. Dois pseudos, cada um com duas bordas, em cantos opostos. */
.doacao-pix__visor{
  position:relative;
  flex-shrink:0;
  padding:.75rem;
  background:#fff;
  border-radius:1rem;
}
.doacao-pix__visor::before,
.doacao-pix__visor::after{
  content:"";
  position:absolute;
  width:1.25rem;
  height:1.25rem;
  border:2px solid hsl(var(--accent));
}
.doacao-pix__visor::before{
  top:-.375rem;
  left:-.375rem;
  border-right:0;
  border-bottom:0;
  border-radius:.5rem 0 0 0;
}
.doacao-pix__visor::after{
  right:-.375rem;
  bottom:-.375rem;
  border-left:0;
  border-top:0;
  border-radius:0 0 .5rem 0;
}
.doacao-pix__qrcode{
  display:block;
  width:9.5rem;
  height:9.5rem;
  object-fit:contain;
}

.doacao-pix__dados{
  display:flex;
  flex-direction:column;
  gap:.625rem;
  flex:1 1 14rem;
  min-width:0;
}
.doacao-pix__rotulo{
  margin:0;
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--primary-foreground));
}

/* A chave num campo de leitura, e nao num paragrafo: assim ela e selecionavel
   de uma vez com um toque, o que importa no celular — onde justamente nao ha
   como copiar arrastando o dedo com precisao.

   `font-family:inherit` explicito: campo de formulario nao herda a fonte da
   pagina por conta propria, e sem esta linha o navegador usaria a fonte dele.
   O reset do site faz isso para `button`, mas nao para `input`.

   `tabular-nums` fica: e um recurso de numeracao, e nao uma familia — os
   digitos saem todos com a mesma largura na propria fonte do site, que e o que
   ajuda a conferir a chave. */
.doacao-pix__chave{
  width:100%;
  padding:.75rem .875rem;
  font-family:inherit;
  font-size:.9375rem;
  font-variant-numeric:tabular-nums;
  color:hsl(var(--primary-foreground));
  background:rgb(255 255 255 / .14);
  border:1px solid rgb(255 255 255 / .28);
  border-radius:.625rem;
  overflow-wrap:anywhere;
}
.doacao-pix__chave:focus-visible{
  outline:2px solid hsl(var(--accent));
  outline-offset:2px;
}

.doacao-pix__copiar{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.5rem;
  align-self:flex-start;
  padding:.625rem 1.125rem;
  font-size:.875rem;
  font-weight:700;
  color:var(--slate-900);
  background:hsl(var(--accent));
  border-radius:999px;
  transition:transform .15s ease,box-shadow .15s ease;
}
.doacao-pix__copiar:hover{
  transform:translateY(-2px);
  box-shadow:0 6px 16px -8px rgb(0 0 0 / .6);
}
/* O `hidden` volta a valer: o `display:inline-flex` acima e regra de autor, e
   regra de autor vence a do proprio navegador para [hidden] — sem esta linha o
   botao apareceria mesmo sem script, sem ter o que fazer. */
.doacao-pix__copiar[hidden]{display:none}
.doacao-pix__copiar svg{width:1rem;height:1rem}

/* ---------- Dados bancarios ---------- */
.doacao-banco{
  display:flex;
  flex-direction:column;
  gap:1.25rem;
  padding:1.75rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:calc(var(--radius) / 1.6);
  box-shadow:var(--shadow-sm);
}
.doacao-banco__chapeu{
  margin:0;
  font-size:.75rem;
  font-weight:800;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}
.doacao-banco__lista{margin:0;display:grid;gap:.75rem}
/* Rotulo a esquerda, valor a direita, com o vao entre eles: assim a coluna dos
   valores se le de cima a baixo, que e como se confere uma conta. */
.doacao-banco__linha{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:space-between;
  gap:.5rem 1rem;
  padding-bottom:.75rem;
  border-bottom:1px dashed hsl(var(--border));
}
.doacao-banco__linha:last-child{padding-bottom:0;border-bottom:0}
.doacao-banco__linha dt{
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}
.doacao-banco__linha dd{
  margin:0;
  font-size:1rem;
  font-weight:700;
  font-variant-numeric:tabular-nums;
  color:hsl(var(--foreground));
  overflow-wrap:anywhere;
}

/* ---------- Outras formas ---------- */
.doacao-outras{margin-top:2.5rem}
.page-content .doacao-outras__titulo{
  margin:0 0 1.25rem;
  font-size:1.125rem;
  line-height:1.4;
  font-weight:700;
  color:hsl(var(--foreground));
}

/* Escopado sob a lista, e nao so pela classe do item: `.page-content ul li` traz
   losango amarelo, `padding-left` e `margin-bottom` para todo item de lista do
   corpo da pagina. Duas classes contra uma classe e dois tipos. */
.page-content .doacao-outras__lista{
  display:grid;
  gap:1rem;
  padding-left:0;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));
}
.doacao-outras__lista .doacao-outra{
  position:relative;
  overflow:hidden;
  display:flex;
  align-items:flex-start;
  gap:.875rem;
  margin-bottom:0;
  padding:1.25rem 1.25rem 1.25rem 1.5rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:calc(var(--radius) / 2.5);
  box-shadow:var(--shadow-sm);
  transition:transform .2s ease,box-shadow .2s ease;
}
.doacao-outras__lista .doacao-outra::before{content:none}
.doacao-outras__lista .doacao-outra:hover{
  transform:translateY(-3px);
  box-shadow:var(--shadow-md);
}
/* Faixa fina na cor do tema na lateral, como a dos blocos de area de atuacao. */
.doacao-outras__lista .doacao-outra::after{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:.25rem;
  background:hsl(var(--accent));
}
.doacao-outra__numero{
  flex-shrink:0;
  font-size:1.375rem;
  font-weight:800;
  line-height:1.1;
  letter-spacing:-.03em;
  color:hsl(var(--muted) / .9);
}
.doacao-outra__texto{
  font-size:.9375rem;
  line-height:1.6;
  color:hsl(var(--foreground));
}

@media (min-width:768px){
  .doacao-pix,
  .doacao-banco{padding:2rem}
}

@media (prefers-reduced-motion:reduce){
  .doacao-pix__copiar,
  .doacao-outras__lista .doacao-outra{transition:none}
  .doacao-pix__copiar:hover,
  .doacao-outras__lista .doacao-outra:hover{transform:none}
}


/* =============================================================================
   PORTAL DE TRANSPARENCIA
   ---------------------------------------------------------------------------
   A pagina e percorrida como pastas: quatro niveis de cartao e uma ficha no
   fim. Acrescimo do CMS — as regras originais do site continuam intactas no
   inicio do arquivo, como o _tools/diff-html.ps1 confere.
   ========================================================================== */

/* O portal inteiro mora dentro de `.page-content`, e la vale
   `.page-content a{color:primary;text-decoration:underline}` — a regra de texto
   corrido, para links no meio de um paragrafo. Aqui nenhum link e texto
   corrido: sao cartoes, degraus de trilha e botoes.

   O `.page-content` no seletor nao e enfeite: sem ele estes seletores tem UMA
   classe contra a classe + elemento daquela regra, perdem no desempate e o
   sublinhado volta — foi o que riscava o ano dentro do cartao. */
.page-content .transparencia-pasta__link,
.page-content .transparencia-trilha__link,
.page-content .transparencia-baixar{text-decoration:none}
.page-content .transparencia-pasta__link{color:inherit}

/* O botao de baixar tambem perdia a COR no mesmo desempate: saia no azul fixo
   de `--primary` em vez da cor escolhida no painel. O `:hover` dele escapava
   por ter uma pseudo-classe a mais, e o resultado era um botao que so acertava
   a cor depois de a pessoa passar o mouse. */
.page-content .transparencia-baixar{color:var(--tema, hsl(var(--primary)))}

/* Pelo mesmo desempate, os degraus saiam na cor primaria em vez da apagada que
   a trilha declara — e o hover, que ACENDE para a primaria, nao acendia nada. */
.page-content .transparencia-trilha__link{color:hsl(var(--muted-foreground))}
.page-content .transparencia-trilha__link:hover,
.page-content .transparencia-trilha__link:focus-visible{color:var(--tema, hsl(var(--primary)))}
.page-content .transparencia-trilha__link[aria-current="page"]{color:hsl(var(--foreground))}

/* ------------------------------------------------------------ Trilha */

/* O rastro de volta. Some no primeiro nivel, onde nao ha de onde voltar. */
.transparencia-trilha{margin-bottom:1.5rem}

.transparencia-trilha__lista{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.5rem;
  margin:0;
  padding:0;
  list-style:none;
  font-size:.875rem;
}
.transparencia-trilha__lista .transparencia-trilha__item::before{content:none}

/* O separador vem do CSS, e nao de um caractere no HTML: assim o leitor de
   tela nao anuncia um simbolo entre cada degrau. */
.transparencia-trilha__item + .transparencia-trilha__item::after{
  content:"\203A";
  order:-1;
  color:hsl(var(--muted-foreground));
}
.transparencia-trilha__item{
  display:flex;
  align-items:center;
  gap:.5rem;
  margin:0;
  padding:0;
}

.transparencia-trilha__link{
  color:hsl(var(--muted-foreground));
  text-decoration:none;
  border-bottom:1px solid transparent;
}
.transparencia-trilha__link:hover,
.transparencia-trilha__link:focus-visible{
  color:hsl(var(--primary));
  border-bottom-color:currentColor;
}

/* A pasta atual: em destaque, para dizer onde se esta sem depender da cor. */
.transparencia-trilha__link[aria-current="page"]{
  color:hsl(var(--foreground));
  font-weight:600;
}

/* ------------------------------------------------------------ Pastas */

/* Cinco por linha nas telas largas, como se pediu. A subida e em degraus: uma
   no celular, duas, tres, quatro e so entao cinco — cinco colunas num tablet
   dariam cartoes estreitos demais para caber o nome de um parceiro. */
.transparencia-pastas{
  display:grid;
  gap:1.25rem;
  margin:1.5rem 0 0;
  padding:0;
  list-style:none;
  grid-template-columns:minmax(0,1fr);
}
@media (min-width:480px){
  .transparencia-pastas{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:768px){
  .transparencia-pastas{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width:1024px){
  .transparencia-pastas{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@media (min-width:1280px){
  .transparencia-pastas{grid-template-columns:repeat(5,minmax(0,1fr))}
}

.transparencia-pastas .transparencia-pasta{margin:0;padding:0}
.transparencia-pastas .transparencia-pasta::before{content:none}

/* O cartao inteiro e o link: o alvo de clique e o retangulo que o visitante
   enxerga como pasta, e nao so as letras do titulo.

   Conteudo centrado nos dois eixos. O primeiro nivel sao anos — rotulos de
   quatro digitos — e alinhados a esquerda eles ficavam encostados num canto de
   um cartao largo e vazio. Centrado, o cartao vira um alvo com um miolo, e o
   mesmo desenho continua servindo aos nomes longos dos niveis de baixo.

   `isolation` cria contexto de empilhamento proprio: sem ele, o veu do ::after
   subiria por cima do conteudo dos cartoes vizinhos no hover. */
.transparencia-pasta__link{
  position:relative;
  isolation:isolate;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:.875rem;
  height:100%;
  min-height:11rem;
  padding:1.75rem 1.25rem;
  text-align:center;
  text-decoration:none;
  /* Lavagem da cor do tema descendo do topo, fraca a ponto de nao virar cor:
     tira do cartao o aspecto de caixa branca vazia sem competir com o miolo. */
  background:
    linear-gradient(
      hsl(var(--card)) 55%,
      color-mix(in srgb, var(--tema, hsl(var(--primary))) 4%, hsl(var(--card)))
    );
  border:1px solid hsl(var(--border));
  border-radius:1.25rem;
  box-shadow:var(--shadow-sm);
  overflow:hidden;
  transition:border-color .25s ease,box-shadow .25s ease,transform .25s ease;
}

/* Fio da cor do tema no topo, fechado ate o hover. Cresce do centro para as
   duas pontas: e a mesma direcao em que o olho le o cartao centrado. */
.transparencia-pasta__link::before{
  content:"";
  position:absolute;
  inset-inline:0;
  top:0;
  height:3px;
  background:var(--tema, hsl(var(--primary)));
  transform:scaleX(0);
  transition:transform .25s ease;
}

/* Halo que nasce atras do icone. Fica no fundo (`z-index:-1`) para nao velar o
   texto, e so aparece no hover. */
.transparencia-pasta__link::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  background:radial-gradient(
    9rem 7rem at 50% 22%,
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 12%, transparent),
    transparent 70%
  );
  opacity:0;
  transition:opacity .25s ease;
}

.transparencia-pasta__link:hover,
.transparencia-pasta__link:focus-visible{
  border-color:color-mix(in srgb, var(--tema, hsl(var(--primary))) 40%, transparent);
  box-shadow:var(--shadow-md);
  transform:translateY(-4px);
}
.transparencia-pasta__link:hover::before,
.transparencia-pasta__link:focus-visible::before{transform:scaleX(1)}
.transparencia-pasta__link:hover::after,
.transparencia-pasta__link:focus-visible::after{opacity:1}

.transparencia-pasta__icone{
  flex-shrink:0;
  display:grid;
  place-items:center;
  width:3.5rem;
  height:3.5rem;
  /* Squircle: o raio grande num quadrado pequeno da a forma de app, e nao a de
     botao redondo. Casa com o 1.25rem do cartao em volta. */
  border-radius:1.125rem;
  color:var(--tema, hsl(var(--primary)));
  /* Degrade em diagonal em vez de chapado: com uma cor so, um quadrado de 3.5rem
     fica com cara de placeholder. */
  background:linear-gradient(
    145deg,
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 18%, transparent),
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 7%, transparent)
  );
  /* Aro por dentro, e nao `border`: uma borda somaria aos 3.5rem e desalinharia
     o icone dos vizinhos que nao a tivessem. */
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tema, hsl(var(--primary))) 16%, transparent);
  transition:color .25s ease,background-color .25s ease,box-shadow .25s ease,transform .25s ease;
}

/* No hover a pasta "acende": o icone inverte e sobe um fio. */
.transparencia-pasta__link:hover .transparencia-pasta__icone,
.transparencia-pasta__link:focus-visible .transparencia-pasta__icone{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  box-shadow:0 6px 14px -4px color-mix(in srgb, var(--tema, hsl(var(--primary))) 55%, transparent);
  transform:translateY(-2px);
}

.transparencia-pasta__titulo{
  font-size:1.125rem;
  font-weight:700;
  line-height:1.3;
  letter-spacing:-.015em;
  color:hsl(var(--foreground));
  /* Algarismos de mesma largura: os anos sao a maior parte dos rotulos deste
     componente, e em fonte proporcional um "2025" ao lado de um "2026" sai com
     largura diferente — numa grade de cartoes identicos, isso aparece. */
  font-variant-numeric:tabular-nums;
  /* Quebra nomes longos de parceiro em vez de estourar a largura do cartao. */
  overflow-wrap:anywhere;
}

/* O bloco de detalhe. Espaco menor entre as linhas do que o `gap` do cartao,
   que e o que as separa do titulo: assim a vigencia e o valor da parceria leem
   como um bloco so, e nao como dois campos soltos. */
.transparencia-pasta__detalhes{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:.25rem;
  /* `max-width` em ch porque, centrada, uma linha que ocupa a largura inteira do
     cartao deixa as bordas irregulares a cada quebra. Larga o bastante para a
     vigencia — "00/00/0000 ate 00/00/0000" — caber numa linha. */
  max-width:27ch;
}

/* Hoje os niveis que usam este campo mandam texto curto — o CNPJ do parceiro, a
   vigencia e o valor da parceria —, mas o corte em tres linhas fica como
   guarda: e um campo livre, e uma frase inteira aqui deixaria um cartao muito
   mais alto que os quatro ao lado dele na mesma linha da grade. */
.transparencia-pasta__detalhe{
  font-size:.8125rem;
  line-height:1.45;
  color:hsl(var(--muted-foreground));
  /* O que sai aqui hoje sao numeros lidos em coluna, de um cartao para o de
     baixo: com algarismo de largura fixa eles alinham. */
  font-variant-numeric:tabular-nums;
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:3;
  line-clamp:3;
  overflow:hidden;
}

.transparencia-vazio{
  margin:1.5rem 0 0;
  padding:1.25rem;
  font-size:.9375rem;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted));
  border-radius:.875rem;
}

/* ------------------------------------------------- Ficha da parceria */

/* Os cinco dados curtos numa faixa so, lado a lado, e o objeto na linha de
   baixo. A leitura e horizontal — numero, datas, valor —, como a de um extrato:
   empilhados um por linha, comparar duas parcerias virava rolagem. */
.transparencia-ficha{
  position:relative;
  display:grid;
  gap:1.25rem;
  margin:1.5rem 0 2rem;
  padding:1.75rem 1.5rem 1.5rem;
  /* Mesma lavagem dos cartoes-pasta, para as duas telas do portal parecerem a
     mesma familia. */
  background:
    linear-gradient(
      hsl(var(--card)) 60%,
      color-mix(in srgb, var(--tema, hsl(var(--primary))) 4%, hsl(var(--card)))
    );
  border:1px solid hsl(var(--border));
  border-radius:1.25rem;
  box-shadow:var(--shadow-sm);
  overflow:hidden;
  grid-template-columns:minmax(0,1fr);
}

/* Fio da cor do tema no topo. Aqui ele fica sempre aberto — o cartao nao e alvo
   de clique, entao nao ha hover que o revele. */
.transparencia-ficha::before{
  content:"";
  position:absolute;
  inset-inline:0;
  top:0;
  height:3px;
  background:var(--tema, hsl(var(--primary)));
}

/* O objeto ocupa a linha inteira em qualquer largura, inclusive na de uma
   coluna so, onde a regra nao muda nada e existe para nao depender do
   breakpoint. */
.transparencia-ficha__item--largo{
  grid-column:1 / -1;
  padding-top:1.25rem;
  border-top:1px solid hsl(var(--border));
}

/* Abre uma linha nova sem ocupá-la inteira: e o fio de cima do `--largo`, sem o
   `grid-column`. Serve ao par fornecedor + valor da ficha do contrato, que
   dividem a segunda linha. */
.transparencia-ficha__item--separado{
  padding-top:1.25rem;
  border-top:1px solid hsl(var(--border));
}

/* O campo leva o espaco que sobra na linha, deixando a ULTIMA coluna para o
   vizinho. Abaixo de 600px a grade tem uma coluna so, e `1 / -2` ali seria um
   intervalo vazio — dai a regra viver dentro da media query. */
@media (min-width:600px){
  .transparencia-ficha__item--resto{grid-column:1 / -2}
}

/* A subida e em degraus, como a da grade de pastas: cinco colunas num tablet
   dariam rotulos quebrados em tres linhas. */
@media (min-width:600px){
  .transparencia-ficha{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:900px){
  .transparencia-ficha{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width:1200px){
  .transparencia-ficha{grid-template-columns:repeat(5,minmax(0,1fr))}

  /* Fio entre as colunas, so onde os cinco cabem na mesma linha. Os dois `:not`
     tiram quem ABRE uma linha nova — o objeto e o fornecedor: um fio a esquerda
     deles apareceria solto embaixo do primeiro campo da linha de cima. O valor,
     que vem depois do fornecedor na mesma linha, continua com o seu. */
  .transparencia-ficha__item + .transparencia-ficha__item:not(.transparencia-ficha__item--largo):not(.transparencia-ficha__item--resto){
    padding-left:1.25rem;
    border-left:1px solid hsl(var(--border));
  }
}

.transparencia-ficha__termo{
  margin:0 0 .375rem;
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
}
.transparencia-ficha__valor{
  margin:0;
  font-size:1.0625rem;
  font-weight:600;
  line-height:1.4;
  letter-spacing:-.01em;
  color:hsl(var(--foreground));
  /* Quatro dos cinco campos sao numeros lidos em coluna, de uma parceria para a
     outra: com algarismo de largura fixa eles alinham. */
  font-variant-numeric:tabular-nums;
}

/* O objeto e texto corrido, e nao um dado: volta ao peso e ao tamanho de
   leitura.

   SEM `max-width`: a frase usa a largura inteira do quadro. Ja teve uma medida
   de 68ch aqui, e ela parava o texto na metade do cartao — sobrava uma faixa
   vazia a direita que parecia defeito de tela, e nao decisao de leitura. Quem
   limita a linha agora e o proprio container da pagina. */
.transparencia-ficha__item--largo .transparencia-ficha__valor{
  font-size:1rem;
  font-weight:400;
  line-height:1.6;
  letter-spacing:normal;
  color:hsl(var(--muted-foreground));
}

/* ---------------------------------------------------------- Sanfonas */

/* `details`/`summary`, como no FAQ: abrir e fechar e nativo, o teclado ja
   funciona e a pagina serve sem script. Recolhida ao abrir e o padrao. */
.transparencia-sanfona{
  margin-bottom:1rem;
  background:hsl(var(--card));
  border:1px solid hsl(var(--border));
  border-radius:1.25rem;
  box-shadow:var(--shadow-sm);
  overflow:hidden;
  transition:border-color .25s ease,box-shadow .25s ease;
}
/* Aberta ela se destaca das vizinhas fechadas: e a seçao que esta sendo lida. */
.transparencia-sanfona[open]{
  border-color:color-mix(in srgb, var(--tema, hsl(var(--primary))) 35%, transparent);
  box-shadow:var(--shadow-md);
}

.transparencia-sanfona__titulo{
  display:flex;
  align-items:center;
  gap:.875rem;
  padding:1.125rem 1.25rem;
  font-size:1.0625rem;
  font-weight:700;
  letter-spacing:-.01em;
  color:hsl(var(--foreground));
  cursor:pointer;
  list-style:none;
  transition:background-color .2s ease;
}
.transparencia-sanfona__titulo:hover{
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 5%, transparent);
}
/* O triangulo padrao do navegador sai: a seta desenhada abaixo o substitui, e
   os dois juntos seriam dois indicadores para o mesmo estado. */
.transparencia-sanfona__titulo::-webkit-details-marker{display:none}
.transparencia-sanfona__titulo::marker{content:""}

/* Selo do mesmo desenho do dos cartoes-pasta, um degrau menor: aqui ele fica ao
   lado do texto, e nao sozinho no meio de um cartao. */
.transparencia-sanfona__icone{
  flex-shrink:0;
  display:grid;
  place-items:center;
  width:2.5rem;
  height:2.5rem;
  border-radius:.875rem;
  color:var(--tema, hsl(var(--primary)));
  background:linear-gradient(
    145deg,
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 18%, transparent),
    color-mix(in srgb, var(--tema, hsl(var(--primary))) 7%, transparent)
  );
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tema, hsl(var(--primary))) 16%, transparent);
  transition:color .25s ease,background-color .25s ease;
}
.transparencia-sanfona[open] .transparencia-sanfona__icone{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
}

.transparencia-sanfona__texto{flex-grow:1}

.transparencia-sanfona__contagem{
  flex-shrink:0;
  min-width:1.75rem;
  padding:.1875rem .5625rem;
  font-size:.8125rem;
  font-weight:700;
  font-variant-numeric:tabular-nums;
  text-align:center;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted));
  border-radius:999px;
}
.transparencia-sanfona__contagem.is-cheia{
  color:var(--tema, hsl(var(--primary)));
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 12%, transparent);
}

/* A seta ganhou um disco em volta: sozinha ela era um risco de 20px no canto de
   uma faixa de 4rem de altura, e nao parecia clicavel. */
.transparencia-sanfona__seta{
  flex-shrink:0;
  display:grid;
  place-items:center;
  width:2rem;
  height:2rem;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted));
  border-radius:999px;
  transition:transform .25s ease,color .2s ease,background-color .2s ease;
}
.transparencia-sanfona__seta svg{width:1.125rem;height:1.125rem}
.transparencia-sanfona__titulo:hover .transparencia-sanfona__seta{
  color:var(--tema, hsl(var(--primary)));
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 12%, transparent);
}
.transparencia-sanfona[open] .transparencia-sanfona__seta{transform:rotate(180deg)}

.transparencia-sanfona__corpo{
  padding:0 1.5rem 1.25rem;
  border-top:1px solid hsl(var(--border));
}
.transparencia-sanfona__corpo .transparencia-vazio{margin-top:1.25rem}

/* --------------------------------------------------------- Tabela */

/* A rolagem e do contêiner, e nao da pagina: com quatro colunas o celular
   estouraria a largura e o site inteiro rolaria de lado. */
.transparencia-tabela__rolagem{overflow-x:auto}

.transparencia-tabela{
  width:100%;
  margin-top:1.25rem;
  border-collapse:collapse;
  font-size:.9375rem;
}
.transparencia-tabela th,
.transparencia-tabela td{
  padding:.75rem .75rem;
  text-align:left;
  vertical-align:middle;
  border-bottom:1px solid hsl(var(--border));
  white-space:nowrap;
}
/* So o nome do documento quebra linha: e o unico campo que pode ser longo. */
.transparencia-tabela td:nth-child(2){white-space:normal;min-width:14rem}
/* A data em algarismo de largura fixa: e uma coluna de numeros lida de cima
   para baixo, e sem isto os dias nao alinham entre as linhas. */
.transparencia-tabela td:first-child{
  font-variant-numeric:tabular-nums;
  color:hsl(var(--muted-foreground));
}
.transparencia-tabela td:nth-child(2){font-weight:600}

/* Cabecalho numa faixa propria, com o fio de baixo mais forte: separa os rotulos
   das linhas sem precisar de uma borda em volta da tabela inteira. */
.transparencia-tabela thead th{
  padding-block:.625rem;
  font-size:.6875rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:hsl(var(--muted-foreground));
  background:hsl(var(--muted) / .5);
  border-bottom-color:hsl(var(--border));
}
.transparencia-tabela thead th:first-child{border-start-start-radius:.625rem}
.transparencia-tabela thead th:last-child{border-start-end-radius:.625rem}

/* A linha inteira acende na passagem: sao quatro colunas, e o alvo do olho e a
   linha, nao a celula. */
.transparencia-tabela tbody tr{transition:background-color .15s ease}
.transparencia-tabela tbody tr:hover{
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 4%, transparent);
}
.transparencia-tabela tbody tr:last-child th,
.transparencia-tabela tbody tr:last-child td{border-bottom:none}

/* A coluna PDF e a UNICA centrada: as outras duas sao texto, que se le a partir
   da margem esquerda, e esta e um par de botoes. O rotulo do cabecalho acompanha
   os botoes, senao ficaria apontando para o lado errado da propria coluna.

   Pela POSICAO, e nao por uma classe na celula: a coluna e sempre a ultima das
   tres, e uma classe repetida em cada `td` seria a mesma informacao escrita
   linha a linha. */
.transparencia-tabela th:last-child,
.transparencia-tabela td:last-child{text-align:center}

/* Os dois botoes da coluna PDF — ver e baixar — lado a lado e centrados.
   `nowrap` porque sao duas acoes do MESMO documento: quebrados em duas linhas, o
   de baixo pareceria pertencer a linha seguinte da tabela.

   O `justify-content` e o que centra de fato: a caixa flex ocupa a largura da
   celula, e o `text-align` da regra acima nao alcanca filhos flex. */
.transparencia-acoes{
  display:flex;
  flex-wrap:nowrap;
  align-items:center;
  justify-content:center;
  gap:.375rem;
}

.transparencia-baixar{
  display:inline-grid;
  place-items:center;
  width:2.25rem;
  height:2.25rem;
  color:var(--tema, hsl(var(--primary)));
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 10%, transparent);
  border-radius:.75rem;
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tema, hsl(var(--primary))) 16%, transparent);
  transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,transform .2s ease;
}
.transparencia-baixar:hover,
.transparencia-baixar:focus-visible{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  box-shadow:0 6px 14px -4px color-mix(in srgb, var(--tema, hsl(var(--primary))) 55%, transparent);
  transform:translateY(-1px);
}
.transparencia-baixar__icone{width:1.125rem;height:1.125rem}

/* =========================================================
   BAIXAR A LISTAGEM — o titulo a esquerda, as saidas a direita
   ========================================================= */
/* O titulo e as duas saidas na MESMA linha: o que se baixa e o que esta a
   vista, e separados por uma linha propria os botoes pareciam pertencer a
   tabela abaixo em vez do exercicio acima.

   `wrap` e a saida no celular: sem largura para os dois, o grupo cai para a
   linha de baixo em vez de espremer o titulo. */
.listagem-cabecalho{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:.75rem 1.5rem;
  margin-bottom:1.5rem;
}

/* O respiro de baixo passa a ser do bloco, e nao do titulo: dentro do flex a
   margem do titulo empurraria so a coluna dele, e os botoes ficariam
   desalinhados na vertical.

   Os dois titulos que ocupam esta linha: o das listagens de receitas e de
   contratos, e a contagem de resultados da consulta de transparencia. O segundo
   precisa do seletor mais especifico porque a regra dele tambem e. */
.listagem-cabecalho .page-section__title,
.listagem-cabecalho .consulta-resultado__titulo{margin-bottom:0}

.listagem-baixar{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.5rem;
}

/* Discretos: mesma silhueta de placa dos botoes de baixar PDF da parceria, em
   tamanho de etiqueta. O rotulo e so a extensao — o icone ao lado diz que e
   arquivo, e "Baixar em" repetido duas vezes competia com o titulo.

   Prefixado por `.page-content` de proposito: e ali que estes links vivem, e a
   regra `.page-content a` sublinha e recolore todo link de conteudo. Sem o
   prefixo ela venceria por especificidade, e a etiqueta sairia sublinhada. */
.page-content .listagem-baixar__acao{
  display:inline-flex;
  align-items:center;
  gap:.375rem;
  padding:.3125rem .625rem;
  font-size:.75rem;
  font-weight:700;
  letter-spacing:.04em;
  line-height:1;
  text-decoration:none;
  border-radius:.625rem;
  color:var(--tema, hsl(var(--primary)));
  background:color-mix(in srgb, var(--tema, hsl(var(--primary))) 8%, transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tema, hsl(var(--primary))) 16%, transparent);
  transition:background-color .2s ease,color .2s ease,box-shadow .2s ease;
}
.page-content .listagem-baixar__acao:hover,
.page-content .listagem-baixar__acao:focus-visible{
  color:hsl(var(--primary-foreground));
  background:var(--tema, hsl(var(--primary)));
  box-shadow:0 6px 14px -4px color-mix(in srgb, var(--tema, hsl(var(--primary))) 55%, transparent);
}

.listagem-baixar__icone{width:.875rem;height:.875rem;flex-shrink:0}

.transparencia-tabela__sem-arquivo{color:hsl(var(--muted-foreground))}


@media (prefers-reduced-motion:reduce){
  .transparencia-pasta__link,
  .transparencia-pasta__link::before,
  .transparencia-pasta__link::after,
  .transparencia-pasta__icone,
  .transparencia-sanfona__seta,
  .transparencia-sanfona__icone,
  .transparencia-tabela tbody tr,
  .transparencia-baixar{transition:none}
  .transparencia-baixar:hover,
  .transparencia-baixar:focus-visible{transform:none}
  /* O fio e o halo continuam aparecendo no hover — o que sai e o percurso ate
     eles. O deslocamento do cartao e do icone, esse sai por inteiro. */
  .transparencia-pasta__link:hover,
  .transparencia-pasta__link:focus-visible,
  .transparencia-pasta__link:hover .transparencia-pasta__icone,
  .transparencia-pasta__link:focus-visible .transparencia-pasta__icone{transform:none}
}