/*
Theme Name: Sirlei Maria — Psicologia Clínica
Theme URI: https://sirleimaria.com.br
Author: Rafael Bruns
Description: Tema de blocos sob medida para o site de Sirlei Maria de Souza, psicóloga CRP 08/47784. Paleta e tipografia travadas na identidade da marca; seções entregues como padrões prontos.
Version: 1.0.0
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 8.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sirlei-maria
Tags: block-patterns, full-site-editing, one-column, accessibility-ready
*/

/* ==========================================================================
   Só o que o theme.json não expressa.

   Cores, tamanhos de fonte e espaçamentos vivem no theme.json — é de lá que
   o editor lê as opções que ela vê. Aqui ficam texturas, formas e arranjos
   que não existem como preset: o grão, a moldura deslocada, os ícones das
   demandas, o bloco marinho.

   Toda classe é prefixada sm- e vem escrita dentro dos padrões. Ela nunca
   precisa digitar nenhuma delas.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Grão
   Uma camada de ruído sobre os fundos chapados. É o que separa este bege do
   bege liso de site pronto: a superfície ganha matéria. Custa zero — é um SVG
   de turbulência embutido, sem requisição de imagem.
   -------------------------------------------------------------------------- */

.sm-grao {
  position: relative;
  isolation: isolate;
}

.sm-grao::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0.5;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.42'/%3E%3C/svg%3E");
}

.sm-grao > * { position: relative; z-index: 1; }

/* Sobre o marinho, multiplicar só enlameia; clarear mantém a textura visível. */
.has-marinho-background-color.sm-grao::before {
  mix-blend-mode: screen;
  opacity: 0.12;
}

/* --------------------------------------------------------------------------
   Etiqueta — a linha em maiúsculas acima de cada título
   -------------------------------------------------------------------------- */

.sm-etiqueta {
  font-size: var(--wp--preset--font-size--etiqueta);
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--wp--preset--color--teal-escuro);
  margin: 0 0 0.8rem;
}

.has-marinho-background-color .sm-etiqueta { color: var(--wp--preset--color--teal-suave); }

/* --------------------------------------------------------------------------
   Texto sobre o bloco marinho
   Declarado uma vez, para que nenhum padrão precise saber em que fundo está.
   -------------------------------------------------------------------------- */

.has-marinho-background-color,
.has-marinho-background-color p,
.has-marinho-background-color li { color: #B9C7D0; }

.has-marinho-background-color :is(h1, h2, h3, h4) { color: #F7F2E9; }
.has-marinho-background-color hr,
.has-marinho-background-color .wp-block-separator { color: #17415E; border-color: #17415E; }
.has-marinho-background-color .sm-legenda { color: #8FA3AE; }

.has-marinho-background-color a:where(:not(.wp-element-button)) { color: #7CC6C9; }

/* --------------------------------------------------------------------------
   Moldura deslocada da foto
   Fica atrás do retrato e assoma em duas bordas, em vez de riscar uma linha
   por cima do rosto dela.
   -------------------------------------------------------------------------- */

.sm-moldura { position: relative; }

.sm-moldura::before {
  content: "";
  position: absolute;
  inset: 0.85rem -0.85rem -0.85rem 0.85rem;
  border: 1px solid var(--wp--preset--color--teal);
  pointer-events: none;
}

.sm-moldura img { position: relative; }

/* --------------------------------------------------------------------------
   Demandas — a lista com marcas de linha
   São os ícones que fazem o olho pular de item em item em vez de encarar um
   paredão de frases. O ícone vem por CSS, então o padrão que ela edita contém
   apenas o texto.
   -------------------------------------------------------------------------- */

.sm-demandas { border-top: 1px solid var(--wp--preset--color--linha); }

.sm-demanda {
  display: flex;
  align-items: flex-start;
  gap: 0.9rem;
  padding: 1.05rem 0;
  border-bottom: 1px solid var(--wp--preset--color--linha);
}

.sm-demanda::before {
  content: "";
  flex: none;
  width: 22px;
  height: 22px;
  margin-top: 0.15rem;
  background-repeat: no-repeat;
  background-size: contain;
}

.sm-demanda p {
  margin: 0;
  font-size: clamp(1rem, 1.7vw, 1.1rem);
  line-height: 1.45;
  color: var(--wp--preset--color--tinta);
}

.sm-demanda--espiral::before   { background-image: url("assets/img/icones/espiral.svg"); }
.sm-demanda--ondas::before     { background-image: url("assets/img/icones/ondas.svg"); }
.sm-demanda--deslocado::before { background-image: url("assets/img/icones/deslocado.svg"); }
.sm-demanda--dupla::before     { background-image: url("assets/img/icones/dupla.svg"); }
.sm-demanda--rota::before      { background-image: url("assets/img/icones/rota.svg"); }
.sm-demanda--bussola::before   { background-image: url("assets/img/icones/bussola.svg"); }

/* --------------------------------------------------------------------------
   Pilares numerados — os três da Psicologia Baseada em Evidências
   -------------------------------------------------------------------------- */

.sm-pilar {
  border-top: 2px solid var(--wp--preset--color--teal);
  padding-top: 1.25rem;
}

.sm-pilar .sm-numero {
  display: block;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  font-variant-numeric: tabular-nums;
  color: var(--wp--preset--color--teal-escuro);
  margin-bottom: 0.55rem;
}

.sm-pilar h3 { margin: 0 0 0.5rem; }

/* --------------------------------------------------------------------------
   Bloco marinho do "Sobre mim"
   A foto preenche a própria célula até a borda, para o conjunto ler como um
   objeto só e não como seção com imagem dentro.
   -------------------------------------------------------------------------- */

.sm-sobre { overflow: hidden; }

.sm-sobre .sm-sobre__foto img {
  width: 100%;
  height: 100%;
  min-height: 18rem;
  object-fit: cover;
  object-position: 50% 14%;
}

/* Onde a referência punha ramos dourados, entra o arco da própria marca:
   mesma textura de fundo, mas é a identidade dela, não um clipart — e sem o
   registro delicado que o briefing manda evitar. */
.sm-marca-fundo {
  position: absolute;
  right: 1.5rem;
  bottom: -3.5rem;
  width: 14rem;
  opacity: 0.11;
  pointer-events: none;
  z-index: 0;
}

@media (min-width: 56rem) {
  .sm-marca-fundo { right: 3rem; bottom: -4rem; }
}

/* --------------------------------------------------------------------------
   Perguntas frequentes — bloco Detalhes do WordPress
   -------------------------------------------------------------------------- */

.sm-faq .wp-block-details {
  border-bottom: 1px solid var(--wp--preset--color--linha);
  padding: 0;
}

.sm-faq .wp-block-details:first-child { border-top: 1px solid var(--wp--preset--color--linha); }

.sm-faq summary {
  padding: 1.15rem 2rem 1.15rem 0;
  cursor: pointer;
  list-style: none;
  position: relative;
  font-size: 1.09rem;
  font-weight: 500;
  letter-spacing: -0.015em;
  color: var(--wp--preset--color--tinta);
}

.sm-faq summary::-webkit-details-marker { display: none; }

.sm-faq summary::after {
  content: "";
  position: absolute;
  right: 0.25rem;
  top: 1.5rem;
  width: 10px;
  height: 10px;
  border-right: 1.5px solid var(--wp--preset--color--teal-escuro);
  border-bottom: 1.5px solid var(--wp--preset--color--teal-escuro);
  rotate: 45deg;
  transition: rotate 0.2s ease;
}

.sm-faq details[open] summary::after { rotate: 225deg; top: 1.75rem; }

.sm-faq details > *:not(summary) { padding-bottom: 1.3rem; max-width: 56ch; }

/* --------------------------------------------------------------------------
   Cabeçalho fixo
   -------------------------------------------------------------------------- */

.sm-cabecalho {
  position: sticky;
  top: 0;
  z-index: 50;
  background: color-mix(in srgb, var(--wp--preset--color--creme) 90%, transparent);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--wp--preset--color--linha);
}

.admin-bar .sm-cabecalho { top: 32px; }

.sm-marca-letreiro {
  font-family: var(--wp--preset--font-family--marca);
  font-weight: 500;
  font-size: 1.35rem;
  letter-spacing: 0.09em;
  line-height: 1;
  color: var(--wp--preset--color--tinta);
  margin: 0;
}

.sm-marca-linha {
  font-size: 0.5625rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--wp--preset--color--apoio);
  margin: 0.2rem 0 0;
}

.has-marinho-background-color .sm-marca-letreiro { color: #F7F2E9; }
.has-marinho-background-color .sm-marca-linha { color: #8FA3AE; }

/* O símbolo é filete dourado: sobre o creme precisa de peso, sobre o marinho não. */
.sm-simbolo img { filter: saturate(1.25) brightness(0.82); }
.has-marinho-background-color .sm-simbolo img { filter: none; }

/* --------------------------------------------------------------------------
   Navegação
   -------------------------------------------------------------------------- */

.wp-block-navigation .wp-block-navigation-item__content {
  font-size: 0.875rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  text-decoration: none;
  border-bottom: 1px solid transparent;
  padding-block: 0.4rem;
}

.wp-block-navigation .wp-block-navigation-item__content:hover,
.wp-block-navigation .current-menu-item .wp-block-navigation-item__content {
  border-bottom-color: var(--wp--preset--color--teal);
}

/* --------------------------------------------------------------------------
   Acessibilidade e detalhes finais
   -------------------------------------------------------------------------- */

:where(a, button, summary, input, textarea, select):focus-visible {
  outline: 2px solid var(--wp--preset--color--teal-escuro);
  outline-offset: 3px;
  border-radius: 2px;
}

.skip-link:focus {
  background: var(--wp--preset--color--marinho);
  color: var(--wp--preset--color--creme);
  padding: 0.7rem 1.1rem;
  z-index: 100;
}

.sm-legenda {
  font-size: var(--wp--preset--font-size--legenda);
  color: var(--wp--preset--color--apoio);
  letter-spacing: 0.02em;
}

.sm-medida {
  max-width: 46ch;
  /* Vence o margin:auto !important que o layout do WordPress injeta. */
  margin-inline: 0 !important;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

/* --------------------------------------------------------------------------
   Tríade da TCC
   Entra como fundo em CSS, não como imagem enviada: o WordPress recusa SVG por
   padrão — e com razão, porque SVG pode carregar script. Assim o diagrama
   continua vetorial, nítido em qualquer tamanho, e não existe bloco de imagem
   que ela possa apagar sem querer.
   -------------------------------------------------------------------------- */

.sm-triade {
  width: 100%;
  max-width: 26rem;
  margin-inline: auto;
  aspect-ratio: 405.1 / 400.7;
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-202.6%20-217.3%20405.1%20400.7%22%20role%3D%22img%22%20aria-label%3D%22Pensamento%2C%20emo%C3%A7%C3%A3o%20e%20comportamento%20entrela%C3%A7ados.%22%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%232C9296%22%20stroke-width%3D%221.7%22%3E%3Ccircle%20cx%3D%220%22%20cy%3D%22-66.7%22%20r%3D%22100%22%2F%3E%3Ccircle%20cx%3D%22-57.76%22%20cy%3D%2233.35%22%20r%3D%22100%22%2F%3E%3Ccircle%20cx%3D%2257.76%22%20cy%3D%2233.35%22%20r%3D%22100%22%2F%3E%3C%2Fg%3E%3Cg%20fill%3D%22%235E6C74%22%20font-family%3D%22%27Bricolage%20Grotesque%27%2Csystem-ui%2Csans-serif%22%20font-size%3D%2217%22%20font-weight%3D%22600%22%20letter-spacing%3D%221.8%22%3E%3Ctext%20x%3D%220%22%20y%3D%22-192%22%20text-anchor%3D%22middle%22%20dominant-baseline%3D%22middle%22%3EPENSAMENTO%3C%2Ftext%3E%3Ctext%20x%3D%22-92%22%20y%3D%22158%22%20text-anchor%3D%22middle%22%20dominant-baseline%3D%22middle%22%3ECOMPORTAMENTO%3C%2Ftext%3E%3Ctext%20x%3D%2292%22%20y%3D%22158%22%20text-anchor%3D%22middle%22%20dominant-baseline%3D%22middle%22%3EEMO%C3%87%C3%83O%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
}

/* ==========================================================================
   CAMADA DE MOVIMENTO

   Tudo aqui é CSS nativo: nenhuma biblioteca, nenhum plugin, zero JavaScript.
   Animação por rolagem não roda no thread principal, então não entra na conta
   de bloqueio nem atrasa a resposta ao toque — o que importa porque o Google
   cobra desempenho com rigor em categoria de saúde.

   Tudo é melhoria progressiva: em navegador sem suporte, ou para quem pediu
   menos movimento no sistema, a página aparece inteira e parada. Nada depende
   de animação para ser legível.

   As regras se apoiam nas classes que já existem na marcação, e não em classes
   novas — o conteúdo das páginas já está no banco, e mexer nos padrões não o
   alcançaria mais.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Transição entre páginas
   Uma linha, e a navegação deixa de piscar branco: as páginas se dissolvem
   uma na outra. O cabeçalho e a marca permanecem, porque recebem nome próprio
   de transição e o navegador os trata como o mesmo objeto entre documentos.
   -------------------------------------------------------------------------- */

@view-transition { navigation: auto; }

@media (prefers-reduced-motion: no-preference) {
  .sm-cabecalho { view-transition-name: sm-cabecalho; }
  .sm-marca     { view-transition-name: sm-marca; }

  ::view-transition-old(root) { animation: sm-sai 220ms cubic-bezier(.4,0,1,1) both; }
  ::view-transition-new(root) { animation: sm-entra 320ms cubic-bezier(0,0,.2,1) both; }
}

@keyframes sm-sai   { to   { opacity: 0; translate: 0 -8px; } }
@keyframes sm-entra { from { opacity: 0; translate: 0 12px; } }

/* --------------------------------------------------------------------------
   Fio de progresso
   Uma linha de 2px no topo que acompanha a leitura. Dá noção de extensão numa
   página longa — e é o tipo de detalhe que se sente sem se notar.
   -------------------------------------------------------------------------- */

@supports (animation-timeline: scroll()) {
  @media (prefers-reduced-motion: no-preference) {
    body::after {
      content: "";
      position: fixed;
      inset-block-start: 0;
      inset-inline-start: 0;
      z-index: 60;
      block-size: 2px;
      inline-size: 100%;
      transform-origin: 0 50%;
      background: linear-gradient(90deg, var(--wp--preset--color--teal), var(--wp--preset--color--marinho));
      scale: 0 1;
      animation: sm-progresso linear both;
      animation-timeline: scroll(root block);
    }
  }
}

@keyframes sm-progresso { to { scale: 1 1; } }

/* --------------------------------------------------------------------------
   Revelação por rolagem

   Cada bloco sobe e ganha nitidez conforme entra. O intervalo é curto de
   propósito: o conteúdo termina de aparecer antes de chegar ao centro da tela,
   para nunca haver texto legível ainda em movimento.
   -------------------------------------------------------------------------- */

@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {

    .sm-grao > .wp-block-group > *,
    .sm-grao > .wp-block-columns > .wp-block-column,
    .sm-grao > .wp-block-columns,
    .sm-sobre .wp-block-column {
      animation: sm-revela linear both;
      animation-timeline: view();
      animation-range: entry 4% cover 26%;
    }

    /* Os itens da lista de demandas entram um a um, cada um no seu tempo. */
    .sm-demanda {
      animation: sm-revela-lado linear both;
      animation-timeline: view();
      animation-range: entry 2% cover 22%;
    }

    /* Os três pilares: o filete no topo cresce antes do texto chegar. */
    .sm-pilar { position: relative; }
    .sm-pilar::after {
      content: "";
      position: absolute;
      inset-block-start: -2px;
      inset-inline: 0;
      block-size: 2px;
      background: var(--wp--preset--color--teal);
      transform-origin: 0 50%;
      animation: sm-filete linear both;
      animation-timeline: view();
      animation-range: entry 6% cover 20%;
    }
  }
}

@keyframes sm-revela {
  from { opacity: 0; translate: 0 22px; filter: blur(3px); }
  to   { opacity: 1; translate: 0 0;    filter: blur(0); }
}

@keyframes sm-revela-lado {
  from { opacity: 0; translate: -14px 0; }
  to   { opacity: 1; translate: 0 0; }
}

@keyframes sm-filete { from { scale: 0 1; } to { scale: 1 1; } }

/* --------------------------------------------------------------------------
   Abertura
   A capa não pode depender de rolagem, porque já está na tela. Ela entra ao
   carregar, em sequência: tarja, título, texto, botões, credencial. O retrato
   se revela por corte, de baixo para cima.
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: no-preference) {
  .entry-content > .sm-grao:first-child .wp-block-column > * {
    animation: sm-abre .75s cubic-bezier(.22,.7,.24,1) backwards;
  }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(1) { animation-delay: .05s; }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(2) { animation-delay: .13s; }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(3) { animation-delay: .21s; }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(4) { animation-delay: .29s; }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(5) { animation-delay: .35s; }
  .entry-content > .sm-grao:first-child .wp-block-column > *:nth-child(6) { animation-delay: .41s; }

  .sm-moldura figure { animation: sm-cortina 1s cubic-bezier(.22,.7,.24,1) .1s backwards; }
  .sm-moldura::before { animation: sm-moldura-entra .8s cubic-bezier(.22,.7,.24,1) .55s backwards; }
}

@keyframes sm-abre {
  from { opacity: 0; translate: 0 16px; }
}

@keyframes sm-cortina {
  from { clip-path: inset(0 0 100% 0); }
  to   { clip-path: inset(0 0 0 0); }
}

@keyframes sm-moldura-entra {
  from { opacity: 0; translate: -10px -10px; }
  to   { opacity: 1; translate: 0 0; }
}

/* Deslocamento leve do retrato conforme a página desce: dá profundidade sem
   o exagero de parallax que atrapalha a leitura. */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sm-moldura img {
      animation: sm-deriva linear both;
      animation-timeline: view();
      animation-range: cover 0% cover 100%;
    }
  }
}

@keyframes sm-deriva { from { translate: 0 -14px; } to { translate: 0 14px; } }

/* --------------------------------------------------------------------------
   Fotos que entram por corte
   Em vez de simplesmente aparecer, a imagem é descoberta de baixo para cima e
   assenta a escala. É o gesto que mais separa site de 2026 de site de 2015.
   -------------------------------------------------------------------------- */

@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sm-grao figure:not(.sm-marca-fundo) img,
    .sm-sobre__foto img {
      animation: sm-descobre linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 32%;
    }
  }
}

@keyframes sm-descobre {
  from { clip-path: inset(14% 0 0 0); scale: 1.06; }
  to   { clip-path: inset(0 0 0 0);   scale: 1; }
}

/* --------------------------------------------------------------------------
   O diagrama da tríade se desenhando
   Os três círculos são traçados na ordem conforme a seção entra. A marca dela
   em movimento — não um efeito genérico aplicado por cima.
   -------------------------------------------------------------------------- */

/* Com o SVG em linha, a imagem de fundo sai de cena. */
.sm-triade:has(svg) { background-image: none; aspect-ratio: auto; }
.sm-triade svg { inline-size: 100%; block-size: auto; display: block; overflow: visible; }
.sm-triade circle { fill: none; stroke: var(--wp--preset--color--teal); stroke-width: 1.7; }
.sm-triade text {
  fill: var(--wp--preset--color--apoio);
  font-family: var(--wp--preset--font-family--principal);
  font-size: 17px; font-weight: 600; letter-spacing: 1.8px;
}

@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sm-triade circle {
      stroke-dasharray: 640;
      stroke-dashoffset: 640;
      animation: sm-traca linear both;
      animation-timeline: view();
    }
    .sm-triade circle:nth-of-type(1) { animation-range: entry 8%  cover 30%; }
    .sm-triade circle:nth-of-type(2) { animation-range: entry 14% cover 36%; }
    .sm-triade circle:nth-of-type(3) { animation-range: entry 20% cover 42%; }

    .sm-triade text {
      animation: sm-revela linear both;
      animation-timeline: view();
      animation-range: entry 26% cover 46%;
    }
  }
}

@keyframes sm-traca { to { stroke-dashoffset: 0; } }

/* --------------------------------------------------------------------------
   Microinterações
   Nada aqui se percebe conscientemente. Tudo se sente.
   -------------------------------------------------------------------------- */

.sm-demanda {
  transition: translate .28s cubic-bezier(.2,.7,.2,1), border-color .28s ease;
}
.sm-demanda:hover { translate: 6px 0; border-block-end-color: var(--wp--preset--color--teal); }
.sm-demanda::before { transition: scale .28s cubic-bezier(.2,.7,.2,1), rotate .4s ease; }
.sm-demanda:hover::before { scale: 1.14; rotate: -6deg; }

.wp-block-navigation .wp-block-navigation-item__content {
  position: relative;
  border-block-end-color: transparent;
}
.wp-block-navigation .wp-block-navigation-item__content::after {
  content: "";
  position: absolute;
  inset-block-end: 0;
  inset-inline-start: 0;
  block-size: 1px;
  inline-size: 100%;
  background: var(--wp--preset--color--teal);
  scale: 0 1;
  transform-origin: 0 50%;
  transition: scale .3s cubic-bezier(.2,.7,.2,1);
}
.wp-block-navigation .wp-block-navigation-item__content:hover::after,
.wp-block-navigation .current-menu-item .wp-block-navigation-item__content::after { scale: 1 1; }

.wp-element-button, .wp-block-button__link {
  transition: background-color .24s ease, color .24s ease, border-color .24s ease,
              translate .24s cubic-bezier(.2,.7,.2,1), box-shadow .24s ease;
}
.wp-element-button:hover, .wp-block-button__link:hover {
  translate: 0 -2px;
  box-shadow: 0 6px 18px -8px color-mix(in srgb, var(--wp--preset--color--marinho) 55%, transparent);
}

.sm-faq summary { transition: color .2s ease; }
.sm-faq summary:hover { color: var(--wp--preset--color--teal-escuro); }
.sm-faq details > *:not(summary) { animation: sm-abre-faq .32s cubic-bezier(.2,.7,.2,1); }
@keyframes sm-abre-faq { from { opacity: 0; translate: 0 -6px; } }

/* A marca de fundo do bloco marinho gira devagar conforme a página passa —
   quase imperceptível, e é o que faz o bloco parecer vivo em vez de estampado. */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sm-marca-fundo {
      animation: sm-gira linear both;
      animation-timeline: view();
      animation-range: cover 0% cover 100%;
    }
  }
}

@keyframes sm-gira {
  from { rotate: -14deg; opacity: .04; }
  to   { rotate:  10deg; opacity: .13; }
}

/* --------------------------------------------------------------------------
   Ajustes finos de leitura
   -------------------------------------------------------------------------- */

p, li { text-wrap: pretty; }

/* Nenhuma animação deve gerar barra horizontal enquanto acontece. */
body { overflow-x: clip; }

/* ==========================================================================
   BLOG — capa com busca e grade de cartões
   ========================================================================== */

.sm-blog-capa .wp-block-search__inside-wrapper {
  border: 1px solid #2c5875;
  border-radius: 2px;
  background: #0b3a56;
  padding: 0;
  max-inline-size: 34rem;
}
.sm-blog-capa .wp-block-search__input {
  border: 0;
  background: transparent;
  color: var(--wp--preset--color--creme);
  padding: .95rem 1.1rem;
  font-family: var(--wp--preset--font-family--principal);
  font-size: 1rem;
}
.sm-blog-capa .wp-block-search__input::placeholder { color: #7f95a5; }
.sm-blog-capa .wp-block-search__button {
  margin: 0;
  border: 0;
  border-radius: 0;
  background: var(--wp--preset--color--teal-escuro);
  color: #fff;
  padding-inline: 1.5rem;
  font-weight: 600;
  font-size: .9375rem;
}
.sm-blog-capa .wp-block-search__button:hover { background: var(--wp--preset--color--teal); }

/* --- grade de cartões --- */

.sm-cartoes .wp-block-post-template {
  display: grid;
  gap: clamp(2rem, 4vw, 3.25rem);
  grid-template-columns: 1fr;
}
@media (min-width: 44rem) { .sm-cartoes .wp-block-post-template { grid-template-columns: 1fr 1fr; } }

.sm-cartoes .wp-block-post {
  display: flex;
  flex-direction: column;
  gap: .85rem;
  padding-block-end: 1.75rem;
  border-block-end: 1px solid var(--wp--preset--color--linha);
}

.sm-cartoes .wp-block-post-featured-image { margin: 0; overflow: hidden; }
.sm-cartoes .wp-block-post-featured-image img {
  inline-size: 100%;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  transition: scale .5s cubic-bezier(.2,.7,.2,1);
}
.sm-cartoes .wp-block-post:hover .wp-block-post-featured-image img { scale: 1.03; }

.sm-cartoes .wp-block-post-title { margin: 0; }
.sm-cartoes .wp-block-post-title a {
  text-decoration: none;
  background-image: linear-gradient(var(--wp--preset--color--teal), var(--wp--preset--color--teal));
  background-size: 0% 1px;
  background-position: 0 100%;
  background-repeat: no-repeat;
  transition: background-size .35s cubic-bezier(.2,.7,.2,1);
}
.sm-cartoes .wp-block-post-title a:hover { background-size: 100% 1px; }

.sm-cartoes .wp-block-post-excerpt { margin: 0; }
.sm-cartoes .wp-block-post-excerpt__excerpt { font-size: 1rem; line-height: 1.55; }
.sm-cartoes .wp-block-post-excerpt__more-link { display: none; }

/* etiqueta de categoria sobre a imagem */
.sm-cartoes .taxonomy-category {
  font-family: var(--wp--preset--font-family--principal);
  font-size: .6875rem;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
}
.sm-cartoes .taxonomy-category a {
  text-decoration: none;
  color: var(--wp--preset--color--teal-escuro);
}
.sm-cartoes .taxonomy-category a:hover { color: var(--wp--preset--color--marinho); }

.sm-cartoes .wp-block-post-date { font-size: .8125rem; color: var(--wp--preset--color--apoio); }

/* nenhum resultado da busca */
.sm-cartoes .wp-block-query-no-results { padding-block: 2rem; }

/* ==========================================================================
   A marca inteira leva à home

   O bloco de logotipo do WordPress já é um link, mas só o símbolo. O letreiro
   ao lado ficava morto — e é justamente nele que a pessoa clica. Em vez de
   embrulhar tudo num segundo link (dois links para o mesmo destino atrapalham
   leitor de tela), o link existente é esticado por cima do conjunto.
   ========================================================================== */

.sm-marca { position: relative; }

.sm-marca .custom-logo-link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}

.sm-marca .sm-marca-letreiro,
.sm-marca .sm-marca-linha { transition: color .18s ease; }
.sm-marca:hover .sm-marca-letreiro { color: var(--wp--preset--color--teal-escuro); }
.has-marinho-background-color .sm-marca:hover .sm-marca-letreiro { color: var(--wp--preset--color--teal-suave); }

/* ==========================================================================
   BUSCA AO VIVO

   O painel aparece sob o campo enquanto se digita. Sem JavaScript nada disso
   existe e o formulário continua enviando normalmente — o comportamento antigo
   é o piso, não o teto.
   ========================================================================== */

/* A capa precisa empilhar acima da faixa de cartões: as duas são .sm-grao com
   position:relative e nível automático, então quem vem depois no documento
   pintaria por cima — e o painel de resultados sumiria atrás dela. */
.sm-blog-capa { z-index: 5; }

.sm-blog-capa .wp-block-search {
  position: relative;
  max-inline-size: 34rem;
  /* vence o margin:auto !important que o layout do WordPress injeta */
  margin-inline: 0 !important;
}

.sm-busca-painel {
  position: absolute;
  inset-block-start: 100%;
  inset-inline-start: 0;
  z-index: 40;
  inline-size: min(34rem, calc(100vw - 2 * var(--wp--preset--spacing--60)));
  margin-block-start: .5rem;
  background: var(--wp--preset--color--creme);
  border: 1px solid var(--wp--preset--color--linha);
  box-shadow: 0 18px 46px -20px rgba(6, 42, 67, .45);
  animation: sm-painel-abre .22s cubic-bezier(.2,.7,.2,1);
}

@keyframes sm-painel-abre { from { opacity: 0; translate: 0 -6px; } }

.sm-busca-status {
  margin: 0;
  padding: .75rem 1.1rem;
  border-block-end: 1px solid var(--wp--preset--color--linha);
  font-size: .6875rem;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--teal-escuro);
}

.sm-busca-lista { list-style: none; margin: 0; padding: 0; max-block-size: 26rem; overflow-y: auto; }

.sm-busca-item + .sm-busca-item { border-block-start: 1px solid var(--wp--preset--color--linha); }

.sm-busca-item a {
  display: grid;
  grid-template-columns: 88px 1fr;
  gap: .9rem;
  padding: .85rem 1.1rem;
  text-decoration: none;
  color: inherit;
  transition: background-color .16s ease;
}
.sm-busca-item a:hover,
.sm-busca-item a:focus-visible,
.sm-busca-item a.esta-ativo { background: var(--wp--preset--color--bege); outline: none; }

.sm-busca-item img,
.sm-busca-vazio {
  inline-size: 88px;
  block-size: 59px;
  object-fit: cover;
  background: var(--wp--preset--color--bege);
}

.sm-busca-texto { display: flex; flex-direction: column; gap: .18rem; min-inline-size: 0; }

.sm-busca-cat {
  font-size: .625rem;
  font-weight: 600;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--wp--preset--color--apoio);
}

.sm-busca-titulo {
  font-size: .9375rem;
  font-weight: 600;
  line-height: 1.28;
  letter-spacing: -.015em;
  color: var(--wp--preset--color--tinta);
}

.sm-busca-resumo {
  font-size: .8125rem;
  line-height: 1.42;
  color: var(--wp--preset--color--texto);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.sm-busca-painel mark {
  background: color-mix(in srgb, var(--wp--preset--color--teal) 28%, transparent);
  color: inherit;
  padding: 0 .1em;
  border-radius: 2px;
}

/* Diagramas dentro do texto: respiram mais que uma imagem comum, e a legenda
   carrega a leitura — quem só olha a figura precisa entender sozinho. */
.sm-diagrama { margin-block: 2.6rem; }
.sm-diagrama img { inline-size: 100%; }
.sm-diagrama figcaption {
  margin-block-start: .85rem;
  font-size: .875rem;
  line-height: 1.5;
  color: var(--wp--preset--color--apoio);
  text-align: left;
  max-inline-size: 52ch;
}

/* ==========================================================================
   ARTIGO

   O texto corrido fica na medida de leitura — cerca de 66 caracteres por
   linha. Linha mais larga que isso cansa: ao voltar do fim de uma linha o
   olho erra a próxima. Mas título, capa e diagrama não são texto corrido, e
   estavam presos na mesma largura sem motivo.
   ========================================================================== */

.sm-artigo-capa .wp-block-post-title { max-inline-size: 22ch; letter-spacing: -.035em; }
.sm-artigo-capa .sm-etiqueta a { text-decoration: none; }
.sm-artigo-assinatura { align-items: baseline; }
.sm-artigo-capa .wp-block-post-featured-image img { inline-size: 100%; object-fit: cover; }

/* O diagrama vence o limite da coluna de texto: ele tem detalhe fino, e a
   legenda continua na medida de leitura logo abaixo. */
.sm-artigo .sm-diagrama {
  max-inline-size: var(--wp--style--global--wide-size) !important;
  margin-inline: auto !important;
}
.sm-artigo .sm-diagrama figcaption {
  max-inline-size: var(--wp--style--global--content-size);
  margin-inline: auto;
}

/* ==========================================================================
   PREFERÊNCIAS DO SISTEMA E WCAG 2.2

   Um desenho acessível não é um desenho só: é um que respeita o que a pessoa
   já configurou no sistema dela.
   ========================================================================== */

/* O cabeçalho fixo pode esconder o que acabou de receber foco pelo teclado, e
   também o destino de um link âncora. WCAG 2.2 trata isso como critério, não
   como capricho. */
:target,
:is(h1, h2, h3, h4, [id]):focus-visible { scroll-margin-block-start: 6rem; }

/* Quem pediu menos transparência no sistema não deve receber vidro fosco:
   o desfoque atrás do cabeçalho atrapalha justamente quem tem dificuldade de
   separar figura e fundo. */
@media (prefers-reduced-transparency: reduce) {
  .sm-cabecalho { background: var(--wp--preset--color--creme); backdrop-filter: none; }
}

/* Contraste reforçado para quem pediu. */
@media (prefers-contrast: more) {
  :root {
    --wp--preset--color--texto: #2C3A42;
    --wp--preset--color--apoio: #3E4C54;
    --wp--preset--color--linha: #B9AC99;
  }
  .sm-demanda, .publicos__item { border-block-end-width: 2px; }
  :where(a, button, summary, input):focus-visible { outline-width: 3px; }
}

/* Alvo de toque mínimo: o critério novo do WCAG 2.2 pede 24 por 24 pixels,
   e links de menu e de rodapé costumam ficar abaixo disso na vertical. */
.wp-block-navigation .wp-block-navigation-item__content,
.footer__nav a, .sm-busca-item a, .sm-faq summary {
  min-block-size: 24px;
}

/* Quem navega por teclado precisa enxergar onde está, inclusive sobre o
   marinho, onde o contorno verde-escuro sumiria. */
.has-marinho-background-color :where(a, button, summary, input):focus-visible {
  outline-color: var(--wp--preset--color--teal-suave);
}

/* O diagrama da tríade agora vive sobre o marinho: o traço e os rótulos
   precisam do tom claro, senão desaparecem no fundo escuro. */
.has-marinho-background-color .sm-triade circle { stroke: var(--wp--preset--color--teal-suave); }
.has-marinho-background-color .sm-triade text { fill: #9FB4C0; }

/* --------------------------------------------------------------------------
   A capa atravessa a navegação
   Clicar num cartão do índice não troca a página: a fotografia do cartão
   cresce, se reenquadra e vira a capa do artigo. O navegador só consegue
   fazer isso porque os dois elementos carregam o mesmo nome de transição,
   dado post a post no PHP.

   O par recebe também uma classe de transição, que é como se estiliza um
   grupo sem repetir regra para cada post.
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: no-preference) {

  .sm-vt-capa {
    view-transition-name: var(--sm-vt);
    view-transition-class: sm-capa;
  }

  /* O cartão é 3/2 e a capa do artigo é 16/9. O padrão do navegador para as
     duas fotografias capturadas é object-fit: fill, que estica uma proporção
     na outra e esmaga o rosto no meio do percurso. Recortar, como a imagem já
     recorta em repouso, mantém o enquadramento estável. */
  ::view-transition-old(.sm-capa),
  ::view-transition-new(.sm-capa) {
    height: 100%;
    object-fit: cover;
  }

  /* Um pouco mais lento que a transição de página, porque é o elemento que a
     pessoa está seguindo com o olho — e desacelerando no fim, para assentar. */
  ::view-transition-group(.sm-capa) {
    animation-duration: 460ms;
    animation-timing-function: cubic-bezier(.2, 0, 0, 1);
  }

  /* A capa é o objeto que viaja; o resto da página não deve escorregar por
     baixo dela enquanto isso acontece. */
  ::view-transition-group(.sm-capa) { z-index: 10; }
}
