/* ==========================================================================
   MARK BASE - main.css

   Este arquivo NAO guarda tokens. Cor, tamanho, fonte e espacamento vivem
   todos no theme.json. Aqui so entra o que o theme.json nao sabe expressar:

     1. @font-face do subset latin-ext (o theme.json nao aceita unicode-range)
     2. entrelinha e caixa alta amarradas a cada tamanho de fonte
     3. transicoes e :focus (o theme.json nao tem transition)
     4. um punhado de utilitarios

   Toda regra abaixo usa var(--wp--...), que sao as variaveis geradas pelo
   theme.json. Nao existe um unico valor cru neste arquivo - e proposital.
   Se voce precisar de um valor novo, crie o token no theme.json primeiro.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. SUBSET LATIN-EXT
   --------------------------------------------------------------------------
   O portugues inteiro (ã ç õ á ê à ü) cabe no subset 'latin', que ja esta
   registrado no theme.json. Este bloco cobre o resto do alfabeto latino
   (š ž ł ő ș...), util em nomes proprios estrangeiros.

   O 'unicode-range' e o que torna isso barato: o navegador so baixa estes
   arquivos se a pagina realmente contiver um desses caracteres. Numa pagina
   so em portugues, zero bytes. Por isso este bloco esta aqui e nao no
   theme.json - la nao existe forma de declarar unicode-range.
   -------------------------------------------------------------------------- */

@font-face {
	font-family: "Archivo";
	font-style: normal;
	font-weight: 400 700;
	font-display: swap;
	src: url("../fonts/archivo-latin-ext.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: "Inter";
	font-style: normal;
	font-weight: 400 600;
	font-display: swap;
	src: url("../fonts/inter-latin-ext.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;
}


/* --------------------------------------------------------------------------
   2. ENTRELINHA POR TAMANHO DE FONTE
   --------------------------------------------------------------------------
   O WordPress gera uma classe .has-XXX-font-size para cada tamanho definido
   no theme.json, mas so com o font-size - sem entrelinha. Como texto grande
   precisa de entrelinha menor que texto pequeno, cada tamanho recebe aqui a
   sua, puxada dos tokens --wp--custom--entrelinha--*.

   Resultado pratico: escolher "Hero" no editor ja traz a entrelinha certa.
   -------------------------------------------------------------------------- */

:root .has-hero-font-size {
	line-height: var(--wp--custom--entrelinha--hero);
	letter-spacing: var(--wp--custom--espaco-letra--hero);
	font-family: var(--wp--preset--font-family--titulo);
}

:root .has-titulo-1-font-size {
	line-height: var(--wp--custom--entrelinha--titulo-1);
	letter-spacing: var(--wp--custom--espaco-letra--titulo-1);
	font-family: var(--wp--preset--font-family--titulo);
}

:root .has-titulo-2-font-size {
	line-height: var(--wp--custom--entrelinha--titulo-2);
	font-family: var(--wp--preset--font-family--titulo);
}

:root .has-titulo-3-font-size {
	line-height: var(--wp--custom--entrelinha--titulo-3);
	font-family: var(--wp--preset--font-family--titulo);
}

:root .has-corpo-grande-font-size {
	line-height: var(--wp--custom--entrelinha--corpo-grande);
}

:root .has-corpo-font-size {
	line-height: var(--wp--custom--entrelinha--corpo);
}

:root .has-pequeno-font-size {
	line-height: var(--wp--custom--entrelinha--pequeno);
}

/* Etiqueta: o unico tamanho com forma propria - caixa alta e espacada.
   Serve para rotulos curtos ("Nossos serviços", "Case"). Nunca para frases. */
:root .has-etiqueta-font-size {
	line-height: var(--wp--custom--entrelinha--etiqueta);
	letter-spacing: var(--wp--custom--espaco-letra--etiqueta);
	text-transform: uppercase;
	font-weight: 600;
}


/* --------------------------------------------------------------------------
   3. MOVIMENTO E FOCO
   --------------------------------------------------------------------------
   O theme.json define as cores de :hover, mas nao sabe animar a troca. As
   transicoes ficam aqui, todas usando os mesmos dois tokens de duracao e a
   curva unica do site - e por isso que tudo no site "se move igual".
   -------------------------------------------------------------------------- */

a,
.wp-element-button,
.wp-block-button__link {
	transition:
		color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		background-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		border-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		box-shadow var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

/* Anel de foco visivel para quem navega por teclado. Nao remova: sem isto o
   site fica inutilizavel para uma parte dos visitantes, e reprova em
   qualquer auditoria de acessibilidade.

   ANEL DUPLO, e nao simples. O botao primario tem fundo azul-texto; um anel
   azul-texto sobre ele daria contraste 1,00:1 - some por completo. Entao:

     box-shadow branco .... preenche os 2px de folga entre botao e anel
     outline azul-escuro .. o anel em si, 11,17:1 sobre branco

   Sobre fundo claro voce ve o anel escuro; sobre fundo escuro (rodape) voce
   ve a folga branca. Funciona nos dois casos sem regra extra. */
:where(a, button, input, select, textarea, [tabindex]):focus-visible {
	outline: 3px solid var(--wp--preset--color--azul-escuro);
	outline-offset: 2px;
	box-shadow: 0 0 0 2px var(--wp--preset--color--branco);
	border-radius: var(--wp--custom--raio--pequeno);
}

/* Respeita quem pediu ao sistema para reduzir animacoes. */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}


/* --------------------------------------------------------------------------
   4. AJUSTES DE BASE
   -------------------------------------------------------------------------- */

html {
	scroll-behavior: smooth;
	/* Compensa a altura do cabecalho fixo ao pular para uma ancora.
	   Ajustar quando o cabecalho existir, na Fase 2. */
	scroll-padding-top: var(--wp--preset--spacing--80);
}

/* Inter e Archivo foram desenhadas para renderizar assim no macOS/iOS.
   Sem isto os pesos aparecem mais gordos do que o previsto. */
body {
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

/* Evita a "orfa": uma palavra sozinha na ultima linha de um titulo.
   O navegador reequilibra as linhas automaticamente. */
:where(h1, h2, h3, h4, h5, h6) {
	text-wrap: balance;
}

/* Em paragrafos, 'pretty' so cuida da ultima linha - mais barato que
   reequilibrar o bloco inteiro. */
:where(p) {
	text-wrap: pretty;
}

/* Imagem nunca estoura o container. */
:where(img, video, svg) {
	max-width: 100%;
	height: auto;
}


/* --------------------------------------------------------------------------
   5. UTILITARIOS
   --------------------------------------------------------------------------
   Classes para aplicar na aba "Avançado > Classes CSS adicionais" de um
   bloco no editor.
   -------------------------------------------------------------------------- */

/* Respiro vertical de secao. Use no bloco Grupo que envolve cada faixa do
   site. Cresce de 5rem no celular ate 10rem no desktop. */
.secao {
	padding-block: var(--wp--custom--espacamento--secao);
}

/* Meia secao, para faixas que precisam de menos ar. */
.secao-compacta {
	padding-block: calc(var(--wp--custom--espacamento--secao) / 2);
}

/* Card: fundo branco, canto arredondado, sombra sutil. */
.cartao {
	background-color: var(--wp--preset--color--branco);
	border: 1px solid var(--wp--preset--color--cinza-borda);
	border-radius: var(--wp--custom--raio--medio);
	box-shadow: var(--wp--preset--shadow--sutil);
	padding: var(--wp--preset--spacing--50);
}

/* Eleva o card no hover. Use junto com .cartao.

   Também condicionado a existir link dentro. Hoje todo card deste tipo
   é gerado a partir de um post e sempre tem link, então a condição não
   muda nada. Ela está aqui para o dia em que alguém montar um à mão. */
.cartao-interativo:has( a ):hover {
	box-shadow: var(--wp--preset--shadow--media);
	transform: translateY(-2px);
}

/* Texto so para leitores de tela (rotulo de formulario, "pular para o
   conteudo"). Fica invisivel mas continua sendo lido em voz alta. */
.apenas-leitor-de-tela {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}


/* --------------------------------------------------------------------------
   6. CABEÇALHO
   --------------------------------------------------------------------------
   DOIS ESTADOS, UMA CLASSE.

     .cabecalho--transparente   sobre o hero azul (estado inicial)
     .cabecalho--fixo           fundo branco, depois de rolar 80px

   O JavaScript da Fase 4 precisa fazer UMA coisa: ao passar de 80px de
   rolagem, trocar .cabecalho--transparente por .cabecalho--fixo no
   elemento .cabecalho. E desfazer ao voltar para o topo. Nada além disso.

   ENQUANTO O JS NÃO EXISTE: o estado transparente só faz sentido sobre o
   hero azul, que existe apenas na home. Em qualquer outra página, texto
   branco sobre fundo branco ficaria invisível. Por isso a regra abaixo
   força o estado sólido fora da home, usando a classe .home que o próprio
   WordPress coloca no body. Assim o site já é navegável agora, sem JS.
   -------------------------------------------------------------------------- */

.cabecalho {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	z-index: 100;
	padding-block: var(--wp--preset--spacing--30);
	transition:
		background-color var(--wp--custom--duracao--media) var(--wp--custom--easing),
		box-shadow var(--wp--custom--duracao--media) var(--wp--custom--easing),
		color var(--wp--custom--duracao--media) var(--wp--custom--easing);
}

.cabecalho__interno {
	width: 100%;
}

/* ---- ESTADO TRANSPARENTE (sobre o hero) ---- */

/* A cor do texto vai no CABEÇALHO, não no link do menu, e o motivo é
   importante. O WordPress publica esta regra para o bloco de navegação:

     .wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content
     { color: inherit }

   A classe repetida de propósito dá a ela peso 0-3-0. Qualquer regra
   nossa do tipo ".cabecalho--transparente .menu-principal a" tem peso
   0-2-1 e PERDE, por mais correta que pareça. O link então herda a cor
   e ficava preto sobre o azul.

   Como o núcleo obriga o link a herdar, basta dar a cor certa ao pai:
   o link segue o cabeçalho sozinho. Não recoloque a regra no link, ela
   não tem como vencer sem !important. */

.cabecalho--transparente {
	background-color: transparent;
	box-shadow: none;
	color: var(--wp--preset--color--branco);
}

.cabecalho--transparente .logo__marca { color: var(--wp--preset--color--amarelo); }
.cabecalho--transparente .logo__descritor { color: var(--wp--preset--color--branco); }

/* No hover a conta muda: :hover conta como classe, então este seletor
   tem peso 0-3-1 e vence os 0-3-0 do núcleo. */
.cabecalho--transparente .menu-principal a:hover {
	color: var(--wp--preset--color--amarelo);
}

.cabecalho--transparente .portal__botao .wp-block-button__link {
	color: var(--wp--preset--color--branco);
	border-color: var(--wp--preset--color--branco);
	background-color: transparent;
}

.cabecalho--transparente .portal__botao .wp-block-button__link:hover {
	color: var(--wp--preset--color--azul-texto);
	background-color: var(--wp--preset--color--branco);
}

/* ---- ESTADO SÓLIDO ----

   Vale só quando o JavaScript aplica .cabecalho--fixo, depois de 80px de
   rolagem.

   Até a Fase 4 havia aqui um seletor body:not(.home) que forçava o estado
   sólido fora da home. Ele existia porque ainda não havia JavaScript e o
   cabeçalho branco sobre fundo branco ficaria invisível nas internas.
   Hoje o JS existe e TODA página começa com hero azul, então a exceção
   deixou de fazer sentido: ela abria uma faixa branca acima do hero e
   empurrava o conteúdo. */

.cabecalho--fixo {
	background-color: var(--wp--preset--color--branco);
	box-shadow: var(--wp--preset--shadow--sutil);
	color: var(--wp--preset--color--preto);
}

.cabecalho--fixo .logo__marca,
.cabecalho--fixo .logo__descritor {
	color: var(--wp--preset--color--azul);
}

/* Sem regra de cor no link aqui: ele herda o preto do cabeçalho.
   Veja a explicação no estado transparente, acima. */

.cabecalho--fixo .menu-principal a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.cabecalho--fixo .portal__botao .wp-block-button__link {
	color: var(--wp--preset--color--azul);
	border-color: var(--wp--preset--color--azul);
	background-color: transparent;
}

.cabecalho--fixo .portal__botao .wp-block-button__link:hover {
	color: var(--wp--preset--color--branco);
	background-color: var(--wp--preset--color--azul-texto);
	border-color: var(--wp--preset--color--azul-texto);
}

/* ---- LOGO (texto, até o SVG chegar) ---- */

.logo {
	display: inline-flex;
	align-items: baseline;
	gap: var(--wp--preset--spacing--20);
	text-decoration: none;
	font-family: var(--wp--preset--font-family--titulo);
	line-height: 1;
	transition: color var(--wp--custom--duracao--media) var(--wp--custom--easing);
}

.logo__marca {
	font-size: var(--wp--preset--font-size--titulo-2);
	font-weight: 700;
	letter-spacing: -0.02em;
}

.logo__descritor {
	font-size: var(--wp--preset--font-size--etiqueta);
	font-weight: 500;
	letter-spacing: var(--wp--custom--espaco-letra--etiqueta);
}

/* ---- MENU ---- */

.menu-principal a {
	text-decoration: none;
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 500;
	transition: color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.cabecalho__direita {
	gap: var(--wp--preset--spacing--50);
}

.portal__botao .wp-block-button__link {
	border: 1px solid currentColor;
	font-size: var(--wp--preset--font-size--pequeno);
	padding-block: var(--wp--preset--spacing--20);
}

/* O painel do celular abre em azul da marca, com letra branca, e a cor
   vem de atributo do bloco de Navegação (overlayBackgroundColor e
   overlayTextColor, em patterns/cabecalho.php). Aqui só garantimos que o
   link herde essa cor em vez da cor de link do tema. */
.wp-block-navigation__responsive-container.is-menu-open a {
	color: inherit;
}


/* --------------------------------------------------------------------------
   7. RODAPÉ
   -------------------------------------------------------------------------- */

.rodape {
	padding-block: var(--wp--custom--espacamento--secao);
}

.assinatura {
	font-family: var(--wp--preset--font-family--titulo);
	font-size: var(--wp--preset--font-size--titulo-1);
	line-height: var(--wp--custom--entrelinha--titulo-1);
	letter-spacing: var(--wp--custom--espaco-letra--titulo-1);
	font-weight: 700;
	margin-block-end: var(--wp--preset--spacing--90);
}

/* O ponto final de cada palavra em amarelo. É a assinatura da marca. */
.assinatura__ponto {
	color: var(--wp--preset--color--amarelo);
}

.rodape__titulo {
	display: block;
	font-size: var(--wp--preset--font-size--etiqueta);
	letter-spacing: var(--wp--custom--espaco-letra--etiqueta);
	text-transform: uppercase;
	font-weight: 600;
	opacity: 0.75;
	margin-block-end: var(--wp--preset--spacing--30);
}

.rodape__endereco {
	font-style: normal;
	line-height: var(--wp--custom--entrelinha--corpo-grande);
}

.rodape__telefone {
	display: inline-block;
	margin-block-start: var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--titulo-3);
	font-weight: 600;
	text-decoration: none;
}

.rodape__links {
	list-style: none;
	padding: 0;
	margin: 0;
	display: grid;
	gap: var(--wp--preset--spacing--20);
}

.rodape a {
	color: var(--wp--preset--color--branco);
	text-decoration: none;
	transition: color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.rodape a:hover {
	color: var(--wp--preset--color--amarelo);
	text-decoration: underline;
}

.rodape__linha {
	border: 0;
	border-top: 1px solid currentColor;
	opacity: 0.25;
	margin-block: var(--wp--preset--spacing--80);
}

.rodape__base {
	gap: var(--wp--preset--spacing--60);
}

.rodape__copyright {
	margin-block-start: var(--wp--preset--spacing--60);
	opacity: 0.8;
}

/* ---- REDES SOCIAIS ----
   Os SVG usam stroke="currentColor", então basta mudar a cor do link. */

.redes {
	list-style: none;
	display: flex;
	gap: var(--wp--preset--spacing--40);
	padding: 0;
	margin: 0;
}

.redes a {
	display: grid;
	place-items: center;
	width: 2.75rem;
	height: 2.75rem;
	border: 1px solid currentColor;
	border-radius: 50%;
	opacity: 0.85;
	transition:
		color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		opacity var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.redes a:hover {
	color: var(--wp--preset--color--amarelo);
	opacity: 1;
	transform: translateY(-2px);
	text-decoration: none;
}


/* --------------------------------------------------------------------------
   8. HOME
   -------------------------------------------------------------------------- */

/* O hero ocupa cerca de 85% da altura da tela. O respiro extra no topo
   compensa o cabeçalho fixo, que fica por cima dele. */
.hero {
	min-height: 85vh;
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding-block-start: calc(var(--wp--custom--espacamento--secao) * 0.75 + 4rem);
	padding-block-end: calc(var(--wp--custom--espacamento--secao) * 0.75);
}

.hero__apoio {
	max-width: 34rem;
	opacity: 0.92;
}

.etiqueta-secao {
	margin-block-end: var(--wp--preset--spacing--20);
}

/* Barra de números */
.numeros {
	padding-block: var(--wp--preset--spacing--80);
}

.numero__valor {
	font-family: var(--wp--preset--font-family--titulo);
	font-weight: 700;
	line-height: var(--wp--custom--entrelinha--titulo-1);
	margin: 0;
}

.numero__rotulo {
	color: var(--wp--preset--color--cinza-escuro);
	margin-block-start: var(--wp--preset--spacing--10);
}

/* Cards de segmento: DOIS POR DOIS no desktop, um por linha no celular.

   O bloco Colunas do WordPress não quebra linha sozinho: quatro colunas
   ficam quatro lado a lado e o texto de cada card fica espremido. As regras
   abaixo forçam a quebra sem exigir mudança no conteúdo das páginas já
   publicadas. */
.segmentos__grade {
	gap: var(--wp--preset--spacing--50);
	flex-wrap: wrap;
}

@media (min-width: 782px) {
	.segmentos__grade > .wp-block-column {
		flex-basis: calc(50% - var(--wp--preset--spacing--50) / 2);
		flex-grow: 0;
	}
}

/* Faixa de logos de clientes */
.logos__titulo {
	margin-block-end: var(--wp--preset--spacing--60);
}

.logos__faixa {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--70);
}

/* Fechamento */
.fechamento .wp-block-buttons {
	margin-block-start: var(--wp--preset--spacing--50);
}

.botao--escuro .wp-block-button__link {
	background-color: var(--wp--preset--color--preto);
	color: var(--wp--preset--color--branco);
}

.botao--escuro .wp-block-button__link:hover {
	background-color: var(--wp--preset--color--azul-escuro);
}

/* Botões sobre fundo azul */
.botao--claro .wp-block-button__link {
	background-color: var(--wp--preset--color--branco);
	color: var(--wp--preset--color--azul-texto);
}

.botao--claro .wp-block-button__link:hover {
	background-color: var(--wp--preset--color--amarelo);
	color: var(--wp--preset--color--amarelo-texto);
}

.botao--contorno-claro .wp-block-button__link {
	border: 1px solid var(--wp--preset--color--branco);
	color: var(--wp--preset--color--branco);
	background-color: transparent;
}

.botao--contorno-claro .wp-block-button__link:hover {
	background-color: var(--wp--preset--color--branco);
	color: var(--wp--preset--color--azul-texto);
}


/* --------------------------------------------------------------------------
   9. BLOG
   -------------------------------------------------------------------------- */

.post__dados {
	gap: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--cinza-escuro);
	margin-block: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60);
}

.post__dados p {
	margin: 0;
}

/* Separador discreto entre data e tempo de leitura. */
.post__dados .mark-tempo-leitura::before {
	content: "";
	display: inline-block;
	width: 4px;
	height: 4px;
	border-radius: 50%;
	background-color: var(--wp--preset--color--cinza-medio);
	vertical-align: middle;
	margin-inline-end: var(--wp--preset--spacing--30);
}

.post__capa img {
	border-radius: var(--wp--custom--raio--medio);
}

.post__navegacao {
	gap: var(--wp--preset--spacing--50);
	margin-block-start: var(--wp--preset--spacing--90);
	padding-block-start: var(--wp--preset--spacing--60);
	border-top: 1px solid var(--wp--preset--color--cinza-borda);
}

.lista__grade {
	gap: var(--wp--preset--spacing--50);
}

.cartao-post__data {
	color: var(--wp--preset--color--cinza-escuro);
	margin-block-end: var(--wp--preset--spacing--20);
}

.cartao-post .wp-block-post-title a {
	text-decoration: none;
}

.cartao-post .wp-block-post-title a:hover {
	text-decoration: underline;
}

.paginacao {
	margin-block-start: var(--wp--preset--spacing--80);
	padding-block-start: var(--wp--preset--spacing--50);
	border-top: 1px solid var(--wp--preset--color--cinza-borda);
}

.busca {
	max-width: 28rem;
	margin-block: var(--wp--preset--spacing--50);
}


/* --------------------------------------------------------------------------
   10. SLOTS RESERVADOS
   --------------------------------------------------------------------------
   Contornos tracejados marcando onde entra imagem, ilustração ou selo que
   ainda não existe. Some sozinho quando o bloco for trocado por uma imagem
   de verdade, porque a classe deixa de existir.

   APAGUE ESTA SEÇÃO quando todos os slots estiverem preenchidos.
   -------------------------------------------------------------------------- */

.slot {
	display: grid;
	place-items: center;
	text-align: center;
	border: 2px dashed currentColor;
	border-radius: var(--wp--custom--raio--medio);
	opacity: 0.45;
	font-size: var(--wp--preset--font-size--pequeno);
	line-height: var(--wp--custom--entrelinha--pequeno);
	padding: var(--wp--preset--spacing--40);
}

/* Os espaços de imagem viraram bloco de Imagem nativo, e por isso não
   têm mais retângulo tracejado: o lugar de escolher a imagem é o editor,
   com a biblioteca de mídia, e não uma caixa desenhada no site.

   Sobram os dois que continuam vindo do painel ou do cadastro:
   o selo do rodapé e o logo de cliente, que é reserva para quando não
   houver nenhum cliente cadastrado. */
.slot--selo { width: 120px; height: 120px; border-radius: 50%; }

/* Espaço do troféu, enquanto o arquivo não é enviado em Mark > Marca.

   Diferente dos espaços de imagem das páginas, este NÃO some quando está
   vazio: ele é preenchido por um campo do painel, e um campo de painel
   vazio não tem como se anunciar de outro jeito. A legenda diz o que
   entra ali e onde se resolve. */
.slot--trofeu {
	width: min(100%, 320px);
	height: var(--mark-trofeu-altura, 220px);
}

.slot--trofeu::after {
	content: "Foto do troféu do prêmio" "\A" "Mark > Marca, no painel";
	white-space: pre;
	text-align: center;
}
.slot--logo { width: 130px; height: 40px; border-radius: var(--wp--custom--raio--pequeno); }

/* IMAGEM SEM ARQUIVO ESCOLHIDO: NÃO ESCONDA NADA AQUI.

   Havia uma regra display:none neste ponto, e ela foi um erro. O
   functions.php manda este mesmo arquivo para dentro do editor, com
   add_editor_style(). Ou seja, toda regra escrita pensando no site vale
   também na tela de edição, e esconder um bloco vazio ali significa
   esconder justamente o que a pessoa precisa clicar para escolher a
   imagem.

   E era desnecessário: o próprio WordPress descarta um bloco de Imagem
   sem src na hora de exibir a página. No site não sobra nada; no editor
   o espaço continua clicável, com a biblioteca de mídia. */

/* O apoio gráfico das páginas internas: sem arquivo, a coluna fica
   vazia e o texto ao lado continua no lugar. */
.hero-interno__grafico img {
	width: 100%;
	height: auto;
}


/* ---- MOLDURA DA IMAGEM, COMO ESTILO DE BLOCO ----

   Registrado em functions.php, aparece na barra lateral do editor em
   Estilos, com duas opções: Com moldura e Sem moldura.

   A moldura é SEMPRE explícita: só existe com is-style-moldura no
   bloco. Sem a classe, a imagem é solta. Foi essa a escolha porque o
   contrário poria caixa branca em volta de toda foto do blog e do
   gráfico do hero, que nunca tiveram nenhuma.

   Serve para captura de tela: um retângulo chapado precisa de borda
   para não flutuar. Não serve para mockup nem ilustração recortada,
   que já trazem sombra própria. */

.wp-block-image.is-style-moldura {
	background-color: var(--wp--preset--color--branco);
	border-radius: var(--wp--custom--raio--grande);
	padding: var(--wp--preset--spacing--20);
	box-shadow: var(--wp--preset--shadow--media);
	line-height: 0;
}

.wp-block-image.is-style-moldura img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--wp--custom--raio--medio);
}

/* SEM MOLDURA: o tema não pode acrescentar nada.

   A regra é explícita, e não apenas a ausência da outra, porque este
   estilo é escolha declarada de quem edita. Se amanhã alguma regra de
   seção resolver pintar fundo ou sombra numa imagem, esta aqui desfaz. */
.wp-block-image.is-style-sem-moldura,
.wp-block-image.is-style-sem-moldura img {
	background: none;
	background-color: transparent;
	box-shadow: none;
	border: 0;
	padding: 0;
	border-radius: 0;
}


/* --------------------------------------------------------------------------
   11. PATTERNS DA HOME
   -------------------------------------------------------------------------- */

/* ---- HERO ---- */

.hero__botoes {
	margin-block-start: var(--wp--preset--spacing--60);
}

/* A sobrelinha vem DEPOIS dos botões e fecha o conjunto, por isso a linha
   fina acima dela em vez de margem solta. */
.hero__sobrelinha {
	margin-block-start: var(--wp--preset--spacing--70);
	padding-block-start: var(--wp--preset--spacing--30);
	border-top: 1px solid currentColor;
	display: inline-block;
	opacity: 0.85;
}

/* Indicador de rolagem no rodapé do hero. O traço desce e some, em laço. */
.hero__role {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--30);
	margin-block-start: var(--wp--preset--spacing--80);
	font-size: var(--wp--preset--font-size--etiqueta);
	letter-spacing: var(--wp--custom--espaco-letra--etiqueta);
	text-transform: uppercase;
	opacity: 0.7;
}

.hero__role-traco {
	display: block;
	width: 1px;
	height: 2.5rem;
	background-color: currentColor;
	transform-origin: top;
	animation: mark-role 2s var(--wp--custom--easing) infinite;
}

@keyframes mark-role {
	0%   { transform: scaleY(0); opacity: 0; }
	40%  { transform: scaleY(1); opacity: 1; }
	100% { transform: scaleY(1); opacity: 0; }
}

/* ---- BARRA DE NÚMEROS ----
   Sem ícone, sem divisória vertical. O respiro é que separa. */

.numeros {
	padding-block: var(--wp--preset--spacing--100);
}

.numeros__grade {
	gap: var(--wp--preset--spacing--90);
}

/* O traço amarelo abaixo de cada número. */
.numero__valor::after {
	content: "";
	display: block;
	width: 3rem;
	height: 3px;
	background-color: var(--wp--preset--color--amarelo);
	margin-block-start: var(--wp--preset--spacing--30);
}

/* ---- MÉTODO EM TRÊS MOVIMENTOS ---- */

.metodo__grade {
	margin-block-start: var(--wp--preset--spacing--80);
	gap: var(--wp--preset--spacing--80);
}

/* A numeração é elemento gráfico, não informação: fica em cinza claro,
   grande, e recuada para trás do título. */
.movimento__numero {
	display: block;
	font-family: var(--wp--preset--font-family--titulo);
	font-size: clamp(3rem, 6vw, 4.5rem);
	font-weight: 700;

	/* Entrelinha 1 fazia a caixa da linha ficar MENOR que o glifo, e o topo
	   do número era cortado. 1.15 dá folga. O padding protege contra fontes
	   com ascendente alto. */
	line-height: 1.15;
	padding-block-start: 0.08em;

	color: var(--wp--preset--color--cinza-borda);
	margin-block-end: var(--wp--preset--spacing--10);
	position: relative;
	z-index: 0;
}

.movimento > * + * {
	position: relative;
	z-index: 1;
}

/* Linha fina vertical separando as colunas. Some no celular, onde as
   colunas viram empilhadas e uma linha vertical não separaria nada. */
@media (min-width: 782px) {
	.metodo__grade > .wp-block-column + .wp-block-column {
		border-left: 1px solid var(--wp--preset--color--cinza-borda);
		padding-left: var(--wp--preset--spacing--60);
	}
}

/* ---- CARDS DE SEGMENTO ----
   TRANSIÇÃO DO HOVER, documentada:

     fundo    branco  -> azul        250ms
     texto    preto   -> branco      250ms
     borda    cinza   -> azul        250ms
     sombra   sutil   -> média       250ms
     card     sobe 4px                250ms
     seta     entra deslizando 12px   250ms, com atraso de 50ms

   Todas usam a curva única do tema. A seta sai depois das outras de
   propósito: o atraso faz o movimento parecer uma coisa só, e não cinco
   coisas piscando juntas. */

.segmentos__grade {
	gap: var(--wp--preset--spacing--50);
	margin-block-start: var(--wp--preset--spacing--70);
}

.cartao-segmento {
	position: relative;
	background-color: var(--wp--preset--color--branco);
	border: 1px solid var(--wp--preset--color--cinza-borda);
	border-radius: var(--wp--custom--raio--medio);
	box-shadow: var(--wp--preset--shadow--sutil);
	padding: var(--wp--preset--spacing--50);
	transition:
		background-color var(--wp--custom--duracao--media) var(--wp--custom--easing),
		border-color var(--wp--custom--duracao--media) var(--wp--custom--easing),
		box-shadow var(--wp--custom--duracao--media) var(--wp--custom--easing),
		transform var(--wp--custom--duracao--media) var(--wp--custom--easing);
}

/* O card inteiro vira área clicável, mas o link continua sendo UM só, o do
   título. Leitor de tela anuncia um link com texto claro, em vez de vários
   links repetidos por card. */
.cartao-segmento .wp-block-heading a {
	text-decoration: none;
	color: var(--wp--preset--color--preto);
}

.cartao-segmento .wp-block-heading a::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
}

.cartao-segmento__seta {
	display: inline-block;
	margin-block-start: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--titulo-3);
	color: var(--wp--preset--color--amarelo);
	opacity: 0;
	transform: translateX(-0.75rem);
	transition:
		opacity var(--wp--custom--duracao--media) var(--wp--custom--easing) 50ms,
		transform var(--wp--custom--duracao--media) var(--wp--custom--easing) 50ms;
}

/* ---- QUEM REAGE AO MOUSE, E QUEM NÃO ----

   O card só se comporta como clicável se ELE FOR clicável. A condição é
   :has( .wp-block-heading a ), ou seja, existe link no título.

   Isso é automático de propósito. A alternativa seria uma classe que
   alguém precisa lembrar de pôr e de tirar, e a memória falha na hora
   errada: no dia em que a página de Criação de Sites nascer, quem ligar
   o link não vai lembrar de trocar classe nenhuma. Com :has(), ligar o
   link JÁ é ligar o comportamento.

   O link do título é o alvo certo, e não um <a> qualquer: por desenho,
   o card tem UM link só, o do título, e é o ::after dele que estica a
   área clicável até as bordas. Link dentro da descrição, se houver, não
   torna o card clicável e não deve enganar esta regra. */

.cartao-segmento:has( .wp-block-heading a ):hover,
.cartao-segmento:has( .wp-block-heading a ):focus-within {
	background-color: var(--wp--preset--color--azul);
	border-color: var(--wp--preset--color--azul);
	box-shadow: var(--wp--preset--shadow--media);
	transform: translateY(-4px);
}

.cartao-segmento:has( .wp-block-heading a ):hover .wp-block-heading a,
.cartao-segmento:has( .wp-block-heading a ):focus-within .wp-block-heading a,
.cartao-segmento:has( .wp-block-heading a ):hover p,
.cartao-segmento:has( .wp-block-heading a ):focus-within p {
	color: var(--wp--preset--color--branco);
}

.cartao-segmento:has( .wp-block-heading a ):hover .cartao-segmento__seta,
.cartao-segmento:has( .wp-block-heading a ):focus-within .cartao-segmento__seta {
	opacity: 1;
	transform: translateX(0);
}

/* ---- CARD SEM DESTINO ----

   O TRATAMENTO VISUAL FOI REMOVIDO. Os sete serviços passaram a ter
   página, então nenhum card fica sem destino e a diferença de elevação
   não tinha mais o que diferenciar.

   O que NÃO foi removido é a trava do :has() nas regras de hover, logo
   acima. Ela está dormente: com todos os cards ligados, não muda um
   pixel. Existe para o dia em que alguém acrescentar um card antes de a
   página existir, e o card não prometer um clique que não acontece. Foi
   isso que aconteceu antes, e tirar a trava seria reabrir a porta. */

/* ---- CARD LEVE ----

   Mesma estrutura e mesmo hover do card normal, sem a elevação.

   Existe por causa da home. Os cards de segmento vêm logo acima, brancos
   e com sombra sobre fundo cinza. Repetir o mesmo peso na grade de
   serviços logo abaixo faria duas fileiras de caixas brancas disputando
   a mesma atenção, e o visitante leria as duas como uma coisa só.

   Sem fundo e sem sombra, a grade de serviços vira uma lista organizada
   em vez de uma vitrine, que é o papel dela ali: dizer os nomes e levar
   para a página de cada um. O hover completo continua, porque os sete
   são clicáveis. */

.cartao-segmento--leve {
	background-color: transparent;
	box-shadow: none;
}

/* Texto de apoio logo abaixo do cabeçalho da seção. Alinha à esquerda
   com o título, e não com a coluna de leitura centralizada, senão fica
   deslocado em relação ao que ele está apoiando. */
.secao__apoio {
	margin-block-start: var(--wp--preset--spacing--40);
}

.secao__apoio p {
	max-width: 60ch;
	margin: 0;
}


/* ---- PORTAL DO CLIENTE ---- */

.portal__lista {
	list-style: none;
	padding: 0;
	margin-block: var(--wp--preset--spacing--50);
	display: grid;
	gap: var(--wp--preset--spacing--30);
}

.portal__lista li {
	padding-left: var(--wp--preset--spacing--50);
	position: relative;
}

/* Marcador em traço amarelo, no lugar do ponto padrão. */
.portal__lista li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.7em;
	width: var(--wp--preset--spacing--30);
	height: 2px;
	background-color: var(--wp--preset--color--amarelo);
}

/* ---- LINK CONTEXTUAL DEPOIS DA GRADE ----

   Ele ficava logo abaixo do último card, sem respiro, e encostado na
   coluna de leitura em x=352. Lido rápido, parecia um item da grade que
   tinha ficado pela metade.

   Numa caixa própria, alinhado com a grade e com respiro dos dois lados,
   ele volta a ser o que é: um caminho para outra página. */

.secao__link {
	margin-block-start: var(--wp--preset--spacing--80);
}

.secao__link .link-seta {
	margin: 0;
}

.link-seta a {
	text-decoration: none;
	font-weight: 600;
	border-bottom: 1px solid currentColor;
	padding-block-end: 2px;
}

.link-seta__icone {
	display: inline-block;
	transition: transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.link-seta a:hover .link-seta__icone {
	transform: translateX(4px);
}

/* Moldura da captura de tela: borda clara e sombra suave, para dar a
   impressão de janela flutuando sobre o azul. */
/* A MOLDURA SAIU DAQUI.

   Este grupo pintava fundo branco, respiro, sombra e cantos
   arredondados em volta do que estivesse dentro. Funcionava para
   captura de tela e destruía qualquer PNG recortado: um mockup de
   monitor, que já traz sombra e perspectiva, ganhava uma caixa branca
   em volta.

   A moldura virou estilo do bloco de Imagem, escolhido na barra lateral
   do editor. Este grupo ficou só como gancho da animação de entrada
   (.mark-reveal) e como referência de posição. */
.portal__moldura {
	min-width: 0;
}

/* MOLDURA SEM IMAGEM: apaga o desenho, não o elemento.

   Aqui também havia display:none, e o efeito colateral era pior: como
   este CSS roda dentro do editor, a moldura sumia lá, e com ela o bloco
   de Imagem que mora dentro. Não dava para clicar no que não existe.

   Tirando fundo, sombra e respiro, a moldura não pinta nada no site,
   porque a imagem vazia não ocupa espaço. No editor ela continua no
   lugar, clicável. Mesmo resultado visual, sem esconder elemento. */
.portal__moldura:not(:has( img[src] )) {
	background: none;
	box-shadow: none;
	padding: 0;
}

.portal__captura {
	margin: 0;
	line-height: 0;
}

.portal__captura img {
	width: 100%;
	height: auto;
	border-radius: var(--wp--custom--raio--medio);
	display: block;
}

/* ---- FAIXA DE LOGOS, com movimento contínuo ----
   A marcação já está pronta. O JS da Fase 4 duplica o conteúdo da trilha e
   adiciona .marquee--ativo no elemento pai. Sem JS, a faixa fica parada e
   continua legível, que é o comportamento correto de reserva. */

/* A faixa precisa atravessar a tela inteira. Sem isto ela herda a largura
   de leitura de 46rem do bloco que a envolve, e o overflow:hidden corta a
   trilha em quatro logos, que foi o que apareceu na tela. O truque de
   100vw com margem negativa vaza da caixa do pai sem exigir mudança no
   conteúdo das páginas já publicadas. */
/* A faixa sangra de borda a borda saindo da coluna de leitura.

   A forma clássica disso é margin-inline: calc(50% - 50vw). Aqui ela não
   funciona, e o motivo é do WordPress:

     .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull))
     { margin-left: auto !important; margin-right: auto !important }

   Com !important, a margem negativa nunca chegava a valer. A faixa então
   nascia na borda esquerda da coluna e estourava a tela pela direita, no
   exato tamanho do respiro lateral da seção.

   left + translateX faz o mesmo deslocamento por outro caminho, que o
   !important do core não alcança, e evita um segundo !important no tema. */

.marquee {
	overflow: hidden;
	width: 100vw;
	max-width: 100vw;
	position: relative;
	left: 50%;
	transform: translateX(-50%);
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}

.marquee__trilha {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--70);
	width: max-content;
}

.marquee--ativo .marquee__trilha {
	animation: mark-marquee 40s linear infinite;
}

.marquee--ativo:hover .marquee__trilha {
	animation-play-state: paused;
}

@keyframes mark-marquee {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

/* Sem movimento para quem pediu menos animação no sistema. */
@media (prefers-reduced-motion: reduce) {
	.marquee--ativo .marquee__trilha { animation: none; }
	.hero__role-traco { animation: none; opacity: 1; }
}

/* ---- FECHAMENTO ---- */

.fechamento__grade {
	gap: var(--wp--preset--spacing--80);
}

.fechamento .wp-block-buttons {
	margin-block-start: var(--wp--preset--spacing--50);
}


/* --------------------------------------------------------------------------
   12. PATTERNS DE PÁGINA INTERNA
   -------------------------------------------------------------------------- */

/* Hero interno: menor que o da home. Quem chegou aqui já sabe o que quer. */
.hero--interno {
	min-height: 60vh;
}

/* ---- HERO INTERNO SEM IMAGEM ----

   O hero é de duas colunas, 60% de texto e 40% de imagem. Enquanto o
   arquivo não chega, a coluna da direita fica com 493px de nada e o
   texto se espreme em 60% de uma tela de 1440.

   Aqui ele se adapta ao que existe: sem imagem escolhida, vira coluna
   única, o texto usa a largura de leitura confortável e a altura mínima
   cai, porque não há mais o que equilibrar do outro lado.

   É automático nos dois sentidos. No dia em que a imagem for enviada, o
   :has() deixa de casar e o layout de duas colunas volta sozinho. */

.hero--interno:not(:has( .wp-block-column img[src] )) .wp-block-columns {
	display: block;
}

.hero--interno:not(:has( .wp-block-column img[src] )) .wp-block-column {
	flex-basis: auto !important;
	width: 100%;
}

/* A coluna da imagem vazia não ocupa lugar nenhum. */
.hero--interno:not(:has( .wp-block-column img[src] )) .wp-block-column:last-child {
	display: none;
}

.hero--interno:not(:has( .wp-block-column img[src] )) {
	min-height: 0;
	padding-block: var(--wp--preset--spacing--100) var(--wp--preset--spacing--90);
}

/* Sem a coluna ao lado, o texto ganha largura, mas não a largura toda:
   título de 1248px de linha é ilegível. */
.hero--interno:not(:has( .wp-block-column img[src] )) h1 {
	max-width: 20ch;
}

.hero--interno:not(:has( .wp-block-column img[src] )) .hero__apoio {
	max-width: 58ch;
}

/* ---- BLOCO DE DIAGNÓSTICO ----

   O texto começava em x=352 e o título da seção em x=96: 256px de
   deslocamento, com uma faixa vazia do tamanho da própria coluna de
   leitura à esquerda. Parecia erro porque era.

   A causa: o cabeçalho da seção é alignwide, ou seja, 78rem centralizados
   e começando em 96. O parágrafo, sem alinhamento, recebe do layout
   constrained a largura de leitura de 46rem TAMBÉM centralizada, e o
   centro de 46rem não coincide com a borda de 78rem.

   São duas restrições diferentes e por isso precisam de dois elementos:
   um alignwide que fixa a margem esquerda, e dentro dele um limite de
   medida de leitura. É o que .diagnostico__corpo faz.

   Entrelinha maior que o resto do site, porque é o único bloco de
   leitura longa da página. */

.diagnostico__corpo {
	margin-block-start: var(--wp--preset--spacing--60);
}

.diagnostico__corpo p {
	max-width: 46rem;
	margin-inline: 0;
}

.diagnostico p {
	line-height: 1.8;
}

.diagnostico p + p {
	margin-block-start: var(--wp--preset--spacing--50);
}

/* ---- COMO OPERAMOS, grade de seis ----
   Sem caixa. A separação é espaço mais uma linha fina de 1px. */

/* ---- GRADE QUE NÃO DEIXA BURACO ----

   Cinco itens em três colunas dão 3 mais 2, e sobra um vazio no canto
   direito da segunda linha. Sete páginas de serviço, umas com cinco
   itens e outras com seis: uma grade rígida acerta em metade delas.

   A troca de grade por flex resolve para qualquer quantidade. Os itens
   têm largura fixa de um terço, então todos medem igual, e a última
   linha incompleta é CENTRALIZADA em vez de ficar encostada à esquerda
   com um buraco ao lado. Dois itens centralizados leem como decisão;
   dois itens com um vazio ao lado leem como erro.

   As larguras por faixa de tela repetem o que as media queries do fim
   do arquivo já faziam com a grade: três, duas e uma coluna. */

/* O seletor repete a classe de propósito, para somar 0-2-0.

   O WordPress gera, num <style> no topo da página, uma regra
   .wp-container-core-group-is-layout-XXXX com display:grid e
   grid-template-columns. Ela tem o mesmo peso 0-1-0 que um seletor de
   classe simples, e vem DEPOIS do main.css na ordem de carga, então
   ganharia o desempate e a grade continuaria grade. Com a classe
   repetida, o desempate deixa de importar. */

.operamos__grade.operamos__grade {
	margin-block-start: var(--wp--preset--spacing--70);
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--wp--preset--spacing--70);
}

.operamos__item {
	flex: 0 1 calc((100% - 2 * var(--wp--preset--spacing--70)) / 3);
}

.operamos__item {
	padding-block-start: var(--wp--preset--spacing--40);
	border-top: 1px solid var(--wp--preset--color--cinza-borda);
}

.operamos__numero {
	display: block;
	font-family: var(--wp--preset--font-family--titulo);
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 600;
	color: var(--wp--preset--color--cinza-medio);
	letter-spacing: var(--wp--custom--espaco-letra--etiqueta);
	margin-block-end: var(--wp--preset--spacing--20);
}

/* ---- RITMO VERTICAL ENTRE SEÇÕES ----

   Cada seção tem respiro em cima e embaixo. Quando duas seguidas têm o
   mesmo fundo, os dois respiros se somam e viram 288px de branco entre
   um parágrafo e o título seguinte: mais de um terço de uma tela de
   notebook, sem nada acontecendo.

   Onde há troca de cor de fundo, essa pausa longa se justifica, porque a
   faixa colorida precisa respirar por dentro. Onde não há, ela é só
   soma. Este seletor reduz o respiro de cima da segunda seção quando
   nenhuma das duas tem cor de fundo.

   O [class*="-background-color"] casa exatamente as classes de fundo que
   o WordPress gera, do tipo has-cinza-claro-background-color, e não casa
   has-global-padding, que todas têm. */

.secao:not([class*="-background-color"]) + .secao:not([class*="-background-color"]),
.secao:not([class*="-background-color"]) + .secao-compacta:not([class*="-background-color"]),
.secao-compacta:not([class*="-background-color"]) + .secao:not([class*="-background-color"]) {
	padding-block-start: calc(var(--wp--custom--espacamento--secao) * 0.4);
}


/* ---- BLOCO DE PROVA ----
   Mais respiro que os blocos vizinhos, de propósito. */

.prova {
	padding-block: calc(var(--wp--custom--espacamento--secao) * 1.15);
}

.prova__texto {
	max-width: 44rem;
	margin-inline: auto;
	color: var(--wp--preset--color--azul-texto);
}

/* ---- QUEM ATENDEMOS ----
   Lista horizontal leve, separada por traço amarelo. Sem card, sem ícone. */

.perfis__lista {
	list-style: none;
	padding: 0;
	margin-block-start: var(--wp--preset--spacing--40);
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--50);
}

/* O ITEM NÃO PODE SER FLEX.

   Era display:flex com gap, e flex transforma cada filho num item
   separado. Num item que mistura link e texto, como

     <li><a>Indústria com produto técnico</a>, que precisa ser explicado</li>

   o link virava um item e o resto da frase virava outro, com 12px de gap
   entre eles. Na tela isso aparecia como o link quebrando sozinho e a
   vírgula flutuando à direita, fora de alinhamento.

   Em bloco, o texto volta a correr contínuo e o link fica inline, que é o
   que um link dentro de frase tem que ser. O traço amarelo sai do fluxo e
   vira marcador absoluto, mantendo o desenho. */

.perfis__lista li {
	display: block;
	position: relative;
	padding-inline-start: calc(var(--wp--preset--spacing--30) * 2);
	font-size: var(--wp--preset--font-size--corpo-grande);
}

.perfis__lista li::before {
	content: "";
	position: absolute;
	inset-inline-start: 0;
	top: 0.62em;
	width: var(--wp--preset--spacing--30);
	height: 2px;
	background-color: var(--wp--preset--color--amarelo);
}

/* ---- FAIXA DE NAVEGAÇÃO ENTRE SEGMENTOS ---- */

.faixa-segmentos__nav {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60);
	margin-block-start: var(--wp--preset--spacing--40);
}

.faixa-segmentos__nav a {
	text-decoration: none;
	font-family: var(--wp--preset--font-family--titulo);
	font-size: var(--wp--preset--font-size--titulo-3);
	font-weight: 600;
	color: var(--wp--preset--color--preto);
	transition: color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.faixa-segmentos__nav a span {
	display: inline-block;
	color: var(--wp--preset--color--amarelo);
	transition: transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.faixa-segmentos__nav a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.faixa-segmentos__nav a:hover span {
	transform: translateX(4px);
}

/* O segmento da página atual, quando marcado à mão. */
.faixa-segmentos__atual {
	opacity: 0.45;
	pointer-events: none;
}

/* ---- FAIXA SOBRE INTELIGÊNCIA ARTIFICIAL ----

   A versão anterior punha border-left e padding na SEÇÃO, que é
   alignfull. Resultado: um traço amarelo de 3px colado na borda esquerda
   da janela, em x=0, e o texto flutuando em x=358. Trezentos e cinquenta
   e oito pixels entre o traço e aquilo que ele deveria estar marcando.
   Não parecia um destaque, parecia um resto de CSS.

   Agora o desenho todo vive numa CAIXA interna, alignwide, que começa e
   termina onde o resto da página começa e termina. O traço amarelo é
   borda dessa caixa, encostado no texto. O fundo azul claro dá o
   destaque sem precisar de moldura. */

.faixa-ia__caixa {
	background-color: var(--wp--preset--color--azul-claro);
	border-left: 4px solid var(--wp--preset--color--amarelo);
	border-radius: 0 var(--wp--custom--raio--medio) var(--wp--custom--raio--medio) 0;
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--70);
}

.faixa-ia__caixa > :first-child {
	margin-block-start: 0;
}

.faixa-ia__caixa > :last-child {
	margin-block-end: 0;
}

.faixa-ia__caixa p:not(.etiqueta-secao) {
	max-width: 62ch;
	margin-block-start: var(--wp--preset--spacing--30);
}


/* --------------------------------------------------------------------------
   13. ESTADOS DE MOVIMENTO
   --------------------------------------------------------------------------
   Aqui ficam os estados que o assets/js/mark.js liga e desliga.

   REGRA DE OURO DESTA SEÇÃO: nada aqui esconde nada por padrão.

   Se o JavaScript não carregar, ou falhar, ou estiver desligado no
   navegador, nenhuma dessas regras chega a valer, e a página aparece
   inteira. O estado escondido só existe depois que o JS o aplica, e ele só
   aplica no que está fora da tela. É o que impede o efeito de "conteúdo
   pisca e some" que estraga sites com animação de rolagem.

   Só transform e opacity são animados, que são as duas propriedades que o
   navegador resolve na placa de vídeo, sem recalcular o layout.
   -------------------------------------------------------------------------- */

/* ---- REVELAÇÃO AO ROLAR ---- */

.mark-oculto {
	opacity: 0;
	transform: translateY(1.25rem);
}

.mark-oculto.mark-visivel {
	opacity: 1;
	transform: translateY(0);
	transition:
		opacity var(--wp--custom--duracao--lenta) var(--wp--custom--easing),
		transform var(--wp--custom--duracao--lenta) var(--wp--custom--easing);
}

/* ---- SUBLINHADO AMARELO ----
   O traço fica embaixo da palavra e cresce da esquerda para a direita.
   Para trechos curtos, de uma linha só: o traço é posicionado em relação
   ao retângulo do elemento, então uma frase que quebra em duas linhas
   receberia um traço só, atravessado. */

[data-mark-sublinhado] {
	position: relative;
	display: inline-block;
}

[data-mark-sublinhado]::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;

	/* ESPESSURA FIXA, não proporcional.

	   Era 0.16em, e em em o traço muda de peso com o tamanho da letra:
	   9px num título de 56px, 2,6px num texto de 16px. O primeiro fica
	   grosso demais e o segundo some. Entre 4 e 6px ele tem o mesmo peso
	   em qualquer título, que é o que faz dele uma assinatura e não um
	   efeito de texto.

	   E desce o suficiente para passar por baixo de g, p e q sem
	   encostar: descida de letra em Archivo fica perto de 0.21em. */
	bottom: -0.16em;
	height: clamp(4px, 0.09em, 6px);
	background-color: var(--wp--preset--color--amarelo);
	transform: scaleX(1);
	transform-origin: left center;
	z-index: -1;
}

/* Estado inicial, aplicado pelo JS só em quem está fora da tela. */
.mark-traco-pronto::after {
	transform: scaleX(0);
}

.mark-traco-pronto.mark-traco-ativo::after {
	transform: scaleX(1);
	transition: transform var(--wp--custom--duracao--lenta) var(--wp--custom--easing);
}

/* ---- PARALLAX ----
   O palco recebe as camadas empilhadas. Cada camada é movida pelo JS com
   translate3d, que é resolvido na placa de vídeo.
   will-change avisa o navegador para preparar a camada antes do primeiro
   movimento, o que evita o solavanco inicial. */

.hero__palco {
	position: relative;
	display: grid;
}

/* Todo filho do palco é camada, seja div com data-attribute ou bloco de
   Imagem nativo. Empilhados na mesma célula da grade, é isso que dá a
   profundidade quando cada um se move numa intensidade. */
.hero__palco > * {
	grid-area: 1 / 1;
	will-change: transform;
}

/* Intensidade do movimento do gráfico do hero. O JavaScript lê esta
   variável quando a camada não traz data-mark-parallax-forca, que é o
   caso de um bloco nativo: bloco nativo aceita classe, não atributo. */
.hero__grafico {
	--mark-parallax-forca: 0.4;
}

/* ---- REDUÇÃO DE MOVIMENTO ----
   Rede de segurança. O JavaScript já não liga nenhum efeito quando esta
   preferência está ativa, mas se alguém trocar a preferência com a página
   aberta, o CSS garante o estado final na hora. */

@media (prefers-reduced-motion: reduce) {

	.mark-oculto,
	.mark-oculto.mark-visivel {
		opacity: 1;
		transform: none;
		transition: none;
	}

	.mark-traco-pronto::after,
	.mark-traco-pronto.mark-traco-ativo::after {
		transform: scaleX(1);
		transition: none;
	}

	.hero__palco > * {
		transform: none !important;
		will-change: auto;
	}
}

/* --------------------------------------------------------------------------
   14. ACESSIBILIDADE
   -------------------------------------------------------------------------- */

/* LINK DE PULAR PARA O CONTEÚDO.

   Fica fora da tela até alguém chegar nele pela tecla Tab. Aí ele aparece
   no canto superior esquerdo, por cima de tudo.

   Não use display:none nem visibility:hidden aqui: as duas tiram o
   elemento da ordem de foco, e o link deixaria de existir justamente para
   quem ele serve. O jeito certo é jogar para fora da área visível. */

.pular-conteudo {
	position: absolute;
	left: var(--wp--preset--spacing--40);
	top: var(--wp--preset--spacing--40);
	z-index: 999;
	transform: translateY(-200%);
	background-color: var(--wp--preset--color--azul-texto);
	color: var(--wp--preset--color--branco);
	font-family: var(--wp--preset--font-family--texto);
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 600;
	text-decoration: none;
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--50);
	border-radius: var(--wp--custom--raio--pequeno);
	box-shadow: var(--wp--preset--shadow--media);
	transition: transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.pular-conteudo:focus,
.pular-conteudo:focus-visible {
	transform: translateY(0);
}

/* O alvo do link de pular. O scroll-padding do html já afasta do
   cabeçalho fixo, mas o alvo também precisa poder receber foco sem virar
   parada obrigatória na navegação por Tab. */
#conteudo:focus {
	outline: none;
}

/* Linha de setores, abaixo da lista de perfis. */
.perfis__setores {
	margin-block-start: var(--wp--preset--spacing--50);
	color: var(--wp--preset--color--cinza-escuro);
}

/* Link para cases, abaixo da faixa de logos. */
.logos__link {
	text-align: center;
	margin-block-start: var(--wp--preset--spacing--60);
}

/* ---- GRADE DE SERVIÇOS ----

   O visual do card vem de .cartao-segmento, na seção 11.

   Ela era uma grade do WordPress com columnCount 3, e columnCount NÃO
   responde a largura de tela: três colunas no desktop, três colunas num
   celular de 390px. Cada card ficava com 98px e o título quebrava palavra
   por palavra, "Criação / de Sites". Nunca foi responsiva, nem aqui nem
   na home: a correção que eu tinha feito era da grade de operações, que
   é outra classe.

   Agora usa o mesmo flex da .operamos__grade, com a mesma base por faixa
   de tela. Uma mecânica só para as duas grades do site, e não duas
   parecidas que precisam ser corrigidas em separado.

   A classe repete no seletor para somar 0-2-0 e vencer a regra que o
   WordPress gera para o container da grade, que vem depois no documento. */

.servicos__grade.servicos__grade {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--wp--preset--spacing--50);
	margin-block-start: var(--wp--preset--spacing--70);
}

.servicos__grade > .cartao-segmento {
	flex: 0 1 calc((100% - 2 * var(--wp--preset--spacing--50)) / 3);
}


/* --------------------------------------------------------------------------
   15. CORREÇÕES DE CONTRASTE E DE ALINHAMENTO
   -------------------------------------------------------------------------- */

/* ---- LINKS SOBRE FUNDO ESCURO ----

   O tema define link em azul-texto, que funciona sobre branco e some sobre
   o azul de marca. Dentro de qualquer seção com fundo azul, azul escuro ou
   preto, link e texto de apoio passam a branco, com amarelo no hover.

   Vale para o hero, o bloco do Portal e o rodapé, sem precisar marcar cada
   link à mão. */

.hero a:not(.wp-block-button__link):not(.wp-element-button),
.has-azul-background-color a:not(.wp-block-button__link):not(.wp-element-button),
.has-azul-escuro-background-color a:not(.wp-block-button__link):not(.wp-element-button),
.has-preto-background-color a:not(.wp-block-button__link):not(.wp-element-button) {
	color: var(--wp--preset--color--branco);
}

.hero a:not(.wp-block-button__link):hover,
.has-azul-background-color a:not(.wp-block-button__link):hover,
.has-azul-escuro-background-color a:not(.wp-block-button__link):hover,
.has-preto-background-color a:not(.wp-block-button__link):hover {
	color: var(--wp--preset--color--amarelo);
}

/* O anel de foco também precisa mudar sobre fundo escuro, pelo mesmo
   motivo: azul-escuro sobre azul não se vê. */
.has-azul-background-color :focus-visible,
.hero :focus-visible {
	outline-color: var(--wp--preset--color--amarelo);
}


/* ---- CABEÇALHO DE SEÇÃO ----

   Título à esquerda, etiqueta à direita, na mesma linha. Alinhamento à
   esquerda é a linguagem editorial do projeto: nada de título centralizado.

   O grupo é alignwide, então o título fica alinhado com a borda esquerda da
   grade que vem abaixo. Antes o título ficava na largura de leitura de
   46rem, recuado em relação à grade de 78rem, e isso lia como centralizado. */

/* SEM LINHA DIVISÓRIA.

   Havia um border-bottom de 1px atravessando a largura toda embaixo do
   cabeçalho. Ele separava o título do conteúdo que o título já
   introduzia, e passava rente ao sublinhado amarelo, de modo que os dois
   traços disputavam a mesma faixa de dois pixels.

   O título, a etiqueta à direita e o traço amarelo bastam para marcar
   onde a seção começa. As linhas finas que separam as colunas DENTRO das
   grades continuam, em .operamos__item: aquelas separam coisas
   diferentes uma da outra, que é o trabalho de uma linha. */
.secao__cabecalho {
	gap: var(--wp--preset--spacing--50);
	margin-block-end: var(--wp--preset--spacing--70);
}

.secao__cabecalho .wp-block-heading {
	margin: 0;
	flex: 1 1 20rem;
}

/* A etiqueta é discreta de propósito: ela orienta, não compete com o
   título. Desce um pouco para assentar na linha de base dele. */
.secao__cabecalho .etiqueta-secao {
	margin: 0;
	flex: 0 0 auto;
	text-align: right;
	opacity: 0.75;
}

/* A regra que clareava a linha divisória sobre fundo azul saiu junto com
   a linha. */

/* No celular o título e a etiqueta empilham, e a etiqueta volta para a
   esquerda: alinhar à direita numa coluna estreita fica solto. */
@media (max-width: 600px) {
	.secao__cabecalho .etiqueta-secao {
		text-align: left;
	}
}

/* Títulos que NÃO estão num cabeçalho de seção, mas vivem numa seção com
   grade, também sobem para 78rem, para não ficarem recuados em relação a
   ela. O :has garante que blocos de leitura, sem grade, continuem na
   largura de leitura. */
.secao:has(> .alignwide) > .wp-block-heading,
.secao-compacta:has(> .alignwide) > .wp-block-heading,
.secao:has(> .alignwide) > .etiqueta-secao,
.secao-compacta:has(> .alignwide) > .etiqueta-secao {
	max-width: var(--wp--style--global--wide-size);
}

/* Logo enviado pelo painel. A altura é fixa para o cabeçalho não pular
   quando o arquivo é trocado por um de proporção diferente. */
.logo__imagem {
	height: 2.25rem;
	width: auto;
	display: block;
}

.logo--rodape .logo__imagem {
	height: 2rem;
}

/* Contatos extras do rodapé, quando preenchidos no painel. */
.rodape__contato {
	display: block;
	margin-block-start: var(--wp--preset--spacing--20);
}

.rodape__telefone--secundario {
	font-size: var(--wp--preset--font-size--corpo);
	font-weight: 500;
}


/* --------------------------------------------------------------------------
   16. ENCOSTE NO TOPO
   --------------------------------------------------------------------------
   O WordPress separa os filhos diretos da página com o espaçamento padrão
   entre blocos:

     :where(.wp-site-blocks) > *          margin-block-start: 1rem
     :where(.wp-site-blocks) > :first-child   margin-block-start: 0

   Isso funciona bem num tema comum, e atrapalha neste, por dois motivos.

   Primeiro: o cabeçalho é position:fixed, então ele sai do fluxo e a tag
   <header> fica com altura ZERO. Como ela é o primeiro filho e não tem
   margem, quem recebe o 1rem é o <main>. O resultado é uma faixa branca
   de 16px no topo absoluto da página, antes do azul do hero começar.

   Segundo: o <footer> é o terceiro filho e ganha o mesmo 1rem, o que abre
   outra faixa branca entre a última seção e o rodapé azul.

   Neste tema cada seção já traz o próprio respiro, então o espaçamento
   automático entre os filhos da página não tem função nenhuma. Zerar os
   três resolve as duas faixas de uma vez.

   O seletor do WordPress usa :where(), que tem peso ZERO, então qualquer
   regra com nome de classe vence sem precisar de !important.
   -------------------------------------------------------------------------- */

.wp-site-blocks > header,
.wp-site-blocks > main,
.wp-site-blocks > footer {
	margin-block-start: 0;
	margin-block-end: 0;
}

/* O hero encosta no topo. O respiro interno dele já compensa a altura do
   cabeçalho sobreposto, então o texto nunca fica embaixo do menu. */
.wp-site-blocks > main > .entry-content > :first-child,
.wp-site-blocks > main > :first-child {
	margin-block-start: 0;
}


/* --------------------------------------------------------------------------
   17. CALIBRAGEM E CORREÇÕES DE RENDERIZAÇÃO
   --------------------------------------------------------------------------
   As variáveis --mark-* vêm do painel, aba Cabeçalho, e são impressas no
   head apenas quando o campo é preenchido. Toda leitura traz a reserva
   embutida, no formato var(--x, reserva), então painel vazio mantém
   exatamente o que o site já usava.
   -------------------------------------------------------------------------- */

/* ---- CABEÇALHO COM ALTURA GARANTIDA ----

   O cabeçalho precisa de altura suficiente para o logo caber inteiro, com
   respiro acima e abaixo. Antes ele só tinha padding, e quando o logo virou
   imagem maior que o texto, ficou apertado.

   min-height mais alinhamento vertical resolvem: a faixa nunca fica menor
   que o valor definido, e o conteúdo fica centralizado nela. */

.cabecalho {
	min-height: var(--mark-cabecalho-altura, 88px);
	display: flex;
	align-items: center;
	transition:
		background-color var(--wp--custom--duracao--media) var(--wp--custom--easing),
		box-shadow var(--wp--custom--duracao--media) var(--wp--custom--easing),
		min-height var(--wp--custom--duracao--media) var(--wp--custom--easing),
		color var(--wp--custom--duracao--media) var(--wp--custom--easing);
}

.cabecalho--fixo {
	min-height: var(--mark-cabecalho-altura-fixo, 72px);
}

/* A largura útil do cabeçalho, do logo à borda direita do botão. */
.cabecalho > .wp-block-group,
.cabecalho__interno {
	max-width: var(--mark-cabecalho-largura, 78rem);
	margin-inline: auto;
	width: 100%;
}

/* ---- LOGO ----

   object-fit contain garante que a imagem caiba inteira dentro da caixa,
   qualquer que seja a proporção do arquivo. É a rede de segurança para o
   caso de o SVG não declarar viewBox. */

.logo__imagem {
	height: var(--mark-logo-altura, 40px);
	width: auto;
	max-width: 100%;
	max-height: var(--mark-cabecalho-altura, 88px);
	object-fit: contain;
	object-position: left center;
	display: block;
}

.cabecalho--fixo .logo__imagem {
	max-height: var(--mark-cabecalho-altura-fixo, 72px);
}

@media (max-width: 600px) {
	.logo__imagem {
		height: var(--mark-logo-altura-mobile, 32px);
	}
}

/* ---- MENU ---- */

.menu-principal .wp-block-navigation__container {
	gap: var(--mark-menu-espacamento, var(--wp--preset--spacing--50));
}

.menu-principal a {
	font-size: var(--mark-menu-fonte, var(--wp--preset--font-size--pequeno));
	letter-spacing: var(--mark-menu-letra, normal);
}

/* ---- CARDS DE SEGMENTO: DOIS POR DOIS ----

   A regra do WordPress para colunas em tela larga é

     .wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column

   que tem TRÊS classes de peso. A tentativa anterior usava só duas e
   perdia a disputa, e por isso os cards continuavam quatro lado a lado.
   Acrescentar .wp-block-columns ao seletor empata em classes e vence pelo
   quarto componente. */

@media (min-width: 782px) {
	.wp-block-columns.segmentos__grade > .wp-block-column {
		flex-basis: calc(50% - var(--wp--preset--spacing--50) / 2);
		flex-grow: 0;
		max-width: calc(50% - var(--wp--preset--spacing--50) / 2);
	}
}

/* ---- NUMERAÇÃO DO MÉTODO ----

   cinza-borda sobre branco dá contraste 1,16 para 1, ou seja, some na
   maioria das telas. O número é elemento gráfico e deve ser discreto, não
   invisível. cinza-medio a 40% fica em torno de 1,8 para 1, que num
   número de 4,5rem lê como marca d'água e continua visível. */

.movimento__numero {
	color: var(--wp--preset--color--cinza-medio);
	opacity: 0.4;
}


/* --------------------------------------------------------------------------
   18. LOGO POR ESTADO E GRADE DOS SEGMENTOS
   -------------------------------------------------------------------------- */

/* ---- DUAS VERSÕES DO LOGO ----

   Quando as duas versões estão enviadas no painel, o cabeçalho imprime as
   duas e estas regras mostram a certa. Por padrão vale a de fundo claro,
   que é a usada na maior parte do site.

   Sobre o hero azul, no estado transparente da home, entra a de fundo
   escuro. É o que impede que uma parte branca do logo, como o descritor
   PUBLICIDADE, suma sobre o cabeçalho branco. */

.logo__imagem--fundo-escuro {
	display: none;
}

.cabecalho--transparente .logo__imagem--fundo-claro {
	display: none;
}

.cabecalho--transparente .logo__imagem--fundo-escuro {
	display: block;
}

/* No rodapé, que é sempre azul, vale sempre a de fundo escuro. */
.logo--rodape .logo__imagem--fundo-claro {
	display: none;
}

.logo--rodape .logo__imagem--fundo-escuro {
	display: block;
}

/* ---- CARDS DE SEGMENTO, DOIS POR DOIS ----

   A regra do WordPress é

     .wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column

   que pesa três classes. A tentativa anterior também pesava três, e num
   empate quem decide é a ordem no documento, que não está do nosso lado.
   Acrescentar .cartao-segmento leva a quatro classes e vence sem depender
   de ordem nem de !important.

   As duas classes usadas são estáveis: .segmentos__grade está no contêiner
   e .cartao-segmento em cada card, ambas escritas no pattern. */

@media (min-width: 782px) {
	/* A base é a metade MENOS o gap inteiro, e não menos a metade dele.

	   Com a conta exata, dois cards de 414px mais 24px de gap dão 852px,
	   que é exatamente a largura disponível. Arredondamento de sub-pixel
	   estoura esse limite por uma fração e o segundo card cai para a linha
	   de baixo, o que deixava um card por linha.

	   Com a folga, os dois cabem com sobra, e o flex-grow faz cada um
	   crescer até a metade real. O max-width impede que um card sozinho
	   numa linha ímpar se estique para a largura toda. */
	.wp-block-columns.segmentos__grade > .wp-block-column.cartao-segmento {
		flex-basis: calc(50% - var(--wp--preset--spacing--50));
		flex-grow: 1;
		max-width: calc(50% - var(--wp--preset--spacing--50) / 2);
	}
}

/* O ÚNICO !important do tema, e ele é obrigatório.

   O WordPress declara, em tela larga:

     @media (min-width:782px) { .wp-block-columns { flex-wrap: nowrap!important } }

   Com nowrap, quatro cards não quebram linha: eles ENCOLHEM para caber
   lado a lado. Era isso que mantinha a grade em quatro colunas mesmo com
   o flex-basis de 50% já aplicado corretamente.

   !important só é vencido por outro !important com especificidade maior.
   Duas classes contra uma resolve. Não há caminho sem isso: subir a
   especificidade sozinha não adianta contra um !important do core.

   Se um dia o WordPress deixar de forçar nowrap, esta regra pode voltar a
   ser uma declaração comum. */
@media (min-width: 782px) {
	.wp-block-columns.segmentos__grade {
		flex-wrap: wrap !important;
	}
}

/* Card com padding PRECISA de border-box.

   O bloco Coluna do WordPress vem com box-sizing: content-box. Nesse modo
   width e max-width medem só o CONTEÚDO: um card com max-width de 612px e
   24px de padding de cada lado ocupa 662px de verdade.

   Era isso que impedia dois cards por linha, mesmo com flex-basis e
   flex-wrap corretos: a conta fechava em 612, a caixa real media 662, e o
   par estourava a largura disponível.

   Com border-box a medida passa a incluir padding e borda, e a conta que
   está no CSS é a que aparece na tela. */
/* Espaço reservado também entra na conta: .slot tem padding e borda
   tracejada, e com width:100% em content-box a soma passava da largura do
   pai. Foi o que estourava 12px na página A Mark, no celular. */
.slot,
.cartao-segmento,
.cartao {
	box-sizing: border-box;
}


/* --------------------------------------------------------------------------
   19. CORREÇÕES DE VISIBILIDADE E DESTAQUE
   -------------------------------------------------------------------------- */

/* ---- DESLOCAMENTO MENOR NA REVELAÇÃO ----

   1,25rem era deslocamento suficiente para o estado intermediário da
   animação parecer "texto cortado no topo do card", que foi como o defeito
   apareceu. 0,75rem dá o mesmo efeito de entrada com menos risco de leitura
   errada se a animação for interrompida. */

.mark-oculto {
	transform: translateY(0.75rem);
}

/* ---- NUMERAÇÃO DO MÉTODO ----

   Terceira tentativa, e desta vez com o contraste medido em vez de
   estimado. cinza-borda dava 1,16 para 1 e sumia. cinza-medio a 40% dava
   1,55 para 1 e continuava sumindo em tela de brilho médio.

   cinza-medio cheio sobre branco dá 3,59 para 1. Num número de 72px isso
   lê como cinza claro decorativo, subordinado ao título azul, mas
   visível. Sem opacidade: opacidade é o que vinha apagando o número. */

.movimento__numero {
	color: var(--wp--preset--color--cinza-medio);
	opacity: 1;
}

/* ---- BARRA DE NÚMEROS: O ELEMENTO DOMINANTE ----

   Os três números são a prova mais forte da seção e precisam dominá-la.
   Passam de titulo-1 para a escala do hero, e o traço amarelo engrossa de
   3px para 6px, acompanhando o peso do número. */

/* O tamanho vem do TOKEN, escolhido no bloco: o pattern usa a escala
   hero. Tentar impor aqui não funcionaria, porque a classe de preset do
   WordPress carrega !important. Aqui ficam só entrelinha e espaçamento
   entre letras, que a classe de preset não define. */
.numero__valor {
	line-height: var(--wp--custom--entrelinha--hero);
	letter-spacing: var(--wp--custom--espaco-letra--hero);
}

.numero__valor::after {
	width: 4.5rem;
	height: 6px;
	margin-block-start: var(--wp--preset--spacing--40);
}

.numero__rotulo {
	font-size: var(--wp--preset--font-size--corpo);
	margin-block-start: var(--wp--preset--spacing--30);
	max-width: 22ch;
}

.numeros {
	padding-block: var(--wp--custom--espacamento--secao);
}


/* --------------------------------------------------------------------------
   20. CONTROLES DO EDITOR
   --------------------------------------------------------------------------
   As classes desta seção são geradas pelo painel "Mark" da barra lateral do
   editor, declarado em inc/controles.php e assets/js/editor.js. Quem edita
   nunca digita nenhuma delas: escolhe no menu e o editor grava.
   -------------------------------------------------------------------------- */

/* ---- RESPIRO VERTICAL ---- */

.mark-respiro--compacto { padding-block: calc(var(--wp--custom--espacamento--secao) * 0.45); }
.mark-respiro--padrao   { padding-block: var(--wp--custom--espacamento--secao); }
.mark-respiro--amplo    { padding-block: calc(var(--wp--custom--espacamento--secao) * 1.5); }

/* ---- FUNDO DE SEÇÃO ----

   Cada fundo já traz a cor de texto correta. É o que impede o erro mais
   comum de quem edita: escolher fundo azul e o texto continuar preto,
   ilegível. Os contrastes foram medidos e estão no README. */

.mark-fundo--branco     { background-color: var(--wp--preset--color--branco); color: var(--wp--preset--color--preto); }
.mark-fundo--cinza      { background-color: var(--wp--preset--color--cinza-claro); color: var(--wp--preset--color--preto); }
.mark-fundo--azul-claro { background-color: var(--wp--preset--color--azul-claro); color: var(--wp--preset--color--azul-escuro); }
.mark-fundo--azul       { background-color: var(--wp--preset--color--azul); color: var(--wp--preset--color--branco); }

/* Títulos herdam a cor do fundo escolhido, em vez da cor global. */
.mark-fundo--azul :where(h1, h2, h3, h4, h5, h6),
.mark-fundo--azul p {
	color: inherit;
}

/* Link e botão sobre o azul seguem a mesma regra da seção 15. */
.mark-fundo--azul a:not(.wp-block-button__link):not(.wp-element-button) {
	color: var(--wp--preset--color--branco);
}

.mark-fundo--azul a:not(.wp-block-button__link):hover {
	color: var(--wp--preset--color--amarelo);
}

.mark-fundo--azul-claro :where(h1, h2, h3, h4, h5, h6) {
	color: var(--wp--preset--color--azul-escuro);
}

/* ---- DIREÇÃO DA REVELAÇÃO ----

   O estado escondido muda conforme a direção escolhida. A classe base
   .mark-oculto continua valendo para opacidade; aqui só o deslocamento. */

.mark-reveal--baixo.mark-oculto    { transform: translateY(0.75rem); }
.mark-reveal--cima.mark-oculto     { transform: translateY(-0.75rem); }
.mark-reveal--esquerda.mark-oculto { transform: translateX(-1.25rem); }
.mark-reveal--direita.mark-oculto  { transform: translateX(1.25rem); }

.mark-reveal--baixo.mark-oculto.mark-visivel,
.mark-reveal--cima.mark-oculto.mark-visivel,
.mark-reveal--esquerda.mark-oculto.mark-visivel,
.mark-reveal--direita.mark-oculto.mark-visivel {
	transform: none;
}

/* ---- ATRASO DA REVELAÇÃO ---- */

.mark-reveal-atraso--curto.mark-oculto { transition-delay: 120ms; }
.mark-reveal-atraso--medio.mark-oculto { transition-delay: 260ms; }
.mark-reveal-atraso--longo.mark-oculto { transition-delay: 420ms; }

/* ---- PARALLAX ----

   O deslocamento é aplicado pelo JavaScript, em transform, que é resolvido
   na placa de vídeo. Aqui só o preparo e a rede de segurança.

   will-change avisa o navegador antes do primeiro movimento, o que evita o
   solavanco inicial. contain: paint impede que o deslocamento faça a seção
   vazar por cima da vizinha. */

.mark-parallax {
	will-change: transform;
}

.mark-parallax > * {
	position: relative;
}

/* Sem JavaScript, sem ponteiro fino ou com movimento reduzido, a seção
   simplesmente não se move. Nada quebra. */
@media (prefers-reduced-motion: reduce), (pointer: coarse) {
	.mark-parallax {
		transform: none !important;
		will-change: auto;
	}
}

/* As colunas de links do rodapé agora vêm do painel e saem lado a lado
   num bloco só, em vez de duas colunas fixas do editor. */
.rodape__colunas .wp-block-column:last-child {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--60);
}

.rodape__colunas .rodape__nav {
	flex: 1 1 12rem;
	min-width: 0;
}

/* ---- LOGO DE CLIENTE NA FAIXA ----

   Altura padronizada, largura livre. Assim logos de proporções diferentes
   ficam com peso visual parecido, que é o que faz a faixa parecer
   organizada mesmo com arquivos de origens diferentes.

   O filtro em escala de cinza tira a briga de cores entre marcas e devolve
   a cor no hover, para quem quiser olhar de perto. */

.logo-cliente {
	height: 40px;
	width: auto;
	max-width: 160px;
	object-fit: contain;
	display: block;
	filter: grayscale(1);
	opacity: 0.62;
	transition:
		filter var(--wp--custom--duracao--media) var(--wp--custom--easing),
		opacity var(--wp--custom--duracao--media) var(--wp--custom--easing);
}

.marquee__trilha li:hover .logo-cliente,
.marquee__trilha a:focus-visible .logo-cliente {
	filter: grayscale(0);
	opacity: 1;
}

.marquee__trilha a {
	display: block;
}


/* --------------------------------------------------------------------------
   21. CELULAR, SUBMENU E BARRA DE NÚMEROS
   --------------------------------------------------------------------------
   Quatro defeitos que apareceram juntos e têm causas independentes. Cada
   bloco abaixo explica o mecanismo, porque três deles são armadilhas que
   voltam se alguém "limpar" o código sem saber o motivo.
   -------------------------------------------------------------------------- */

/* ---- TRANSBORDO HORIZONTAL NO CELULAR ----

   O hero é flex, para centrar verticalmente, e o palco do gráfico é grid.
   Item de flex e item de grid têm mínimo automático baseado no conteúdo:
   por padrão eles se RECUSAM a encolher abaixo do próprio conteúdo. O
   palco é quadrado, então segurava 456px de largura dentro de uma tela de
   390px e empurrava o documento inteiro para 480px.

   Era isso que fazia o site parecer todo desalinhado no celular, com o
   texto cortado na direita. O menu era vítima, não causa.

   min-width: 0 devolve a permissão de encolher. */

.hero > *,
.hero__grade > .wp-block-column,
.hero__palco,
.hero__palco > * {
	min-width: 0;
}

.hero__grafico {
	max-width: 100%;
}

/* ---- PAINEL DO MENU NO CELULAR ----

   Dois defeitos, os dois vindos do core e resolvidos sem brigar com ele.

   1. ALINHAMENTO. O core alinha o painel aberto com
      align-items: var(--navigation-layout-justification-setting), e a
      classe items-justified-right do cabeçalho define essa variável como
      flex-end. Certo na barra horizontal, errado no painel: as palavras
      encostavam na borda direita. Em vez de sobrescrever a regra do core,
      redefinimos a variável DELE dentro do painel aberto. Uma linha, e a
      própria regra do core passa a produzir o alinhamento à esquerda.

   2. RESPIRO. O core calcula o padding do painel com
      clamp(1rem, var(--wp--style--root--padding-right), 20rem). Este tema
      não define padding na raiz, a variável fica vazia, o clamp inteiro
      vira inválido e o padding deixa de existir. Por isso damos o nosso.

   Fundo branco e texto preto ficam como o core deixa. É o mesmo par do
   cabeçalho no estado sólido, então o menu aberto não inventa uma
   terceira identidade visual. */

.menu-principal .wp-block-navigation__responsive-container.is-menu-open {
	--navigation-layout-justification-setting: flex-start;
	--navigation-layout-align: flex-start;
	padding: var(--wp--preset--spacing--70) var(--wp--preset--spacing--50);
}

/* A variável precisa ser redefinida DUAS vezes, e o motivo não é óbvio.

   O WordPress copia as classes da <nav> para a <ul> de dentro. A lista
   sai assim:

     <ul class="wp-block-navigation__container is-responsive
                items-justified-right no-wrap menu-principal
                wp-block-navigation">

   Ou seja, a regra .wp-block-navigation.items-justified-right incide
   DIRETO na <ul>, e valor declarado no próprio elemento vence herança,
   por mais perto que o pai esteja. Redefinir só no painel resolvia o
   contêiner e o conteúdo, e a lista continuava alinhada à direita. */

.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
	--navigation-layout-justification-setting: flex-start;
	width: 100%;
	gap: var(--wp--preset--spacing--40);
}

.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
	font-size: var(--wp--preset--font-size--titulo-3);
	font-weight: 500;
}

/* Alvo de toque do hambúrguer: 40px, sem deslocar o layout. A margem
   negativa devolve o espaço que o padding tomou. */
.menu-principal .wp-block-navigation__responsive-container-open {
	padding: 8px;
	margin-inline-end: -8px;
}

/* ---- SUBMENU ----

   O core já dá fundo branco e texto preto ao submenu. Aqui entram só
   borda, sombra e respiro, para o painel combinar com o cabeçalho no
   estado sólido.

   Dentro do menu do celular o core transforma o submenu em lista recuada,
   sem posição absoluta, e estas regras não atrapalham. */

.menu-principal .wp-block-navigation__submenu-container {
	border: none;
	border-radius: var(--wp--custom--raio--pequeno);
	box-shadow: var(--wp--preset--shadow--media);
	padding-block: var(--wp--preset--spacing--20);
	min-width: 15rem;
}

.menu-principal .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--pequeno);
}

/* :hover conta na coluna das classes, então isto pesa 0-3-1 e vence os
   0-3-0 com que o core força a cor do link. Mesma conta da seção 6. */
.menu-principal .wp-block-navigation__submenu-container a:hover {
	color: var(--wp--preset--color--azul-texto);
}

/* ---- SUBLINHADO AMARELO: POR QUE ELE SUMIA ----

   O traço é um ::after com z-index -1, para ficar atrás da letra. Só que
   o span não criava contexto de empilhamento, então esse -1 subia até a
   raiz da página. E a ordem de pintura do CSS manda desenhar os filhos de
   z-index negativo ANTES do fundo dos blocos descendentes. Resultado: o
   traço era pintado e logo em seguida o fundo azul do hero passava por
   cima dele.

   Não era o JavaScript, e não era a marcação: o traço estava lá, coberto.

   isolation: isolate cria o contexto no próprio span. O -1 passa a valer
   só ali dentro, ou seja, acima do fundo do hero e abaixo da letra. */

[data-mark-sublinhado] {
	isolation: isolate;
}

/* ---- BARRA DE NÚMEROS: ESCALA E ÍCONES ----

   O tamanho NÃO pode ser imposto com font-size aqui: a classe de preset
   do WordPress carrega !important e ganharia sempre. Mas o valor dela é
   var(--wp--preset--font-size--hero), e variável é resolvida DEPOIS da
   cascata. Redefinindo a variável no próprio elemento, o !important
   continua vencendo e passa a apontar para o número que queremos.

   O mínimo do clamp é o que conserta o celular: antes o número caía para
   o piso da escala hero, 2.5rem, e ficava miúdo no meio da página. */

.numero__valor {
	--wp--preset--font-size--hero: clamp(4rem, 10vw, 6.5rem);
}

.numero__icone {
	display: flex;
	align-items: center;
	height: 40px;
	margin-block-end: var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--azul);
}

.numero__icone svg {
	display: block;
}

/* O SELO SAIU DA BARRA DE NÚMEROS.

   Sobre um número de 96px ele ficava desproporcional e puxava o olho
   para fora da sequência das três colunas. Ali agora vale um ícone de
   traço, irmão dos outros dois, escolhido em Mark > Marca.

   O selo continua no rodapé, que é onde credencial pertence, e por isso
   o controle de altura dele também ficou só para o rodapé. */
.grafico--selo {
	height: var(--mark-selo-rodape, 64px);
	width: auto;
}

/* O TROFÉU NÃO É O SELO.

   São dois arquivos com papéis diferentes. O selo é a credencial de
   PARCERIA com a RD Station, hoje o Silver 2025, e vive no rodapé de
   todas as páginas. O troféu é a foto do 2º lugar no Prêmio Limitless
   2024, e vive no bloco Reconhecimento da página A Mark, embaixo do
   texto que fala exatamente desse prêmio.

   Já estiveram no mesmo campo, e o resultado era o texto do prêmio com a
   imagem do selo de parceiro embaixo: duas informações diferentes se
   passando por uma. */
.grafico--trofeu {
	height: var(--mark-trofeu-altura, 220px);
	width: auto;
	max-width: 100%;
}

/* ---- TELEFONES DO RODAPÉ ----
   Eram inline-block e por isso emendavam na linha do CEP, virando
   "CEP 07115-000 11 4574-0007 11 4574-0008" tudo junto. Cada telefone
   ocupa a própria linha; width fit-content mantém a área clicável do
   tamanho do número, e não da coluna inteira. */

.rodape__telefone {
	display: block;
	width: fit-content;
}

.rodape__telefone--secundario {
	margin-block-start: var(--wp--preset--spacing--10);
}

/* Dentro do painel do celular o submenu NÃO é cartão: o core já o torna
   estático e sempre visível ali, então sombra, canto arredondado e fundo
   branco sobre fundo branco só criavam um retângulo flutuando à toa. Vira
   lista recuada, que é como se lê hierarquia numa coluna. */

.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
	box-shadow: none;
	border-radius: 0;
	min-width: 0;
	padding-block: 0;
	padding-inline-start: var(--wp--preset--spacing--40);
	border-inline-start: 2px solid var(--wp--preset--color--cinza-borda);
	gap: var(--wp--preset--spacing--30);
}

/* O core dá um padding-top de bloco inteiro ao submenu aberto no painel,
   o que abria um buraco entre o pai e os filhos. */
.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container {
	padding-top: var(--wp--preset--spacing--30);
}

.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	font-size: var(--wp--preset--font-size--corpo);
}


/* --------------------------------------------------------------------------
   22. FORMULÁRIO E BLOCO DE CONTATO
   --------------------------------------------------------------------------
   Estilo do Contact Form 7 e dos atalhos de inc/contato.php.

   O CF7 traz um CSS próprio bem cru, com bordas de 1px cinza e mensagens
   em vermelho e amarelo que não têm nada a ver com a marca. Tudo aqui é
   token do theme.json, então o formulário acompanha a paleta sozinho se
   a paleta mudar.

   Nada de !important: o CSS do CF7 é de especificidade baixa, uma classe
   só, e o tema entra depois na ordem de carregamento.
   -------------------------------------------------------------------------- */

.mark-form {
	--mark-campo-borda: var(--wp--preset--color--cinza-borda);
}

.mark-form__grade {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--40) var(--wp--preset--spacing--40);
}

/* Oito campos assustam em coluna única. Em duas colunas o formulário
   ocupa metade da altura e parece o que é: uma conversa curta. */
@media (max-width: 640px) {
	.mark-form__grade {
		grid-template-columns: 1fr;
	}
}

.mark-campo--largo {
	grid-column: 1 / -1;
}

.mark-campo {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--10);
	margin: 0;
}

.mark-campo__rotulo,
.mark-form label {
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 500;
	color: var(--wp--preset--color--cinza-escuro);
}

/* A campainha de obrigatório é discreta: quem lê entende, quem não lê
   descobre no envio, e o formulário não parece um formulário de banco. */
.mark-campo__obrigatorio {
	color: var(--wp--preset--color--azul-texto);
}

.mark-form .wpcf7-form-control {
	width: 100%;
	box-sizing: border-box;
	font-family: inherit;
	font-size: var(--wp--preset--font-size--corpo);
	line-height: var(--wp--custom--entrelinha--corpo);
	color: var(--wp--preset--color--preto);
	background-color: var(--wp--preset--color--branco);
	border: 1px solid var(--mark-campo-borda);
	border-radius: var(--wp--custom--raio--pequeno);
	padding: 0.7rem 0.9rem;
	transition:
		border-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		box-shadow var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.mark-form textarea.wpcf7-form-control {
	min-height: 7.5rem;
	resize: vertical;
}

/* A seta do select é desenhada aqui para as três seleções ficarem iguais
   entre navegadores. É um SVG embutido, sem arquivo e sem requisição. */
.mark-form select.wpcf7-form-control {
	appearance: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none' stroke='%23555' stroke-width='1.5' stroke-linecap='round'%3E%3Cpath d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.9rem center;
	background-size: 12px 8px;
	padding-inline-end: 2.4rem;
}

/* ---- CAMPO DE ARQUIVO ----

   input[type=file] nao aceita a maior parte do estilo de um campo comum:
   o botao interno e desenhado pelo navegador e cada um desenha o seu. O
   que da para fazer, e o que esta feito aqui, e estilizar a moldura e o
   ::file-selector-button, que e a parte padronizada.

   O resultado nao fica idêntico entre Chrome, Safari e Firefox, e nao ha
   como ficar sem substituir o campo por um controle falso em JavaScript.
   Um campo de upload falso quebra leitor de tela e navegacao por teclado,
   e nao vale o ganho. */

.mark-campo--arquivo .wpcf7-form-control-wrap {
	display: block;
}

.mark-form input[type="file"].wpcf7-form-control {
	padding: 0.55rem 0.6rem;
	cursor: pointer;
}

.mark-form input[type="file"].wpcf7-form-control::file-selector-button {
	font-family: inherit;
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 600;
	color: var(--wp--preset--color--azul-texto);
	background-color: var(--wp--preset--color--azul-claro);
	border: 0;
	border-radius: var(--wp--custom--raio--pequeno);
	padding: 0.45rem 0.9rem;
	margin-inline-end: 0.8rem;
	cursor: pointer;
}

/* Linha de ajuda embaixo do campo, tipo "somente PDF, ate 5 MB". */
.mark-campo__ajuda {
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--cinza-escuro);
}

/* A caixa do formulario de candidatura, para ele nao flutuar solto na
   secao como o de contato, que vive dentro de uma coluna do Elementor. */
.vagas-form__caixa {
	background-color: var(--wp--preset--color--cinza-claro);
	border-radius: var(--wp--custom--raio--grande);
	padding: var(--wp--preset--spacing--70);
	margin-block-start: var(--wp--preset--spacing--60);
}

@media (max-width: 781px) {

	.vagas-form__caixa {
		padding: var(--wp--preset--spacing--50);
	}
}

/* ---- CAIXA DE SELEÇÃO NÃO É CAMPO DE TEXTO ----

   O Contact Form 7 põe a classe .wpcf7-form-control em TUDO, inclusive
   no <span> que envolve uma caixa de seleção. Como a regra de campo
   acima pinta fundo branco, borda e respiro em .wpcf7-form-control, o
   consentimento aparecia dentro de um retângulo, como se fosse um campo
   de digitação vazio com um texto solto dentro.

   Aqui os três controles de escolha voltam a ser o que são: caixa e
   texto, sem moldura. */

.mark-form .wpcf7-acceptance,
.mark-form .wpcf7-checkbox,
.mark-form .wpcf7-radio {
	width: auto;
	background: none;
	border: 0;
	border-radius: 0;
	padding: 0;
}

.mark-form .wpcf7-list-item {
	margin: 0;
}

/* Caixa e texto na mesma linha de base, e não com a caixa centralizada
   verticalmente num texto de duas linhas. */
.mark-form .wpcf7-list-item label {
	display: flex;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 400;
	line-height: var(--wp--custom--entrelinha--corpo);
	cursor: pointer;
}

.mark-form .wpcf7-list-item input[type="checkbox"],
.mark-form .wpcf7-list-item input[type="radio"] {
	width: 1.05rem;
	height: 1.05rem;
	margin: 0;
	flex: none;
	/* Alinha a caixa com a primeira linha do texto, e não com o topo
	   absoluto da caixa de texto. */
	margin-block-start: 0.15rem;
	accent-color: var(--wp--preset--color--azul);
	cursor: pointer;
}

.mark-form__consentimento {
	margin-block-start: var(--wp--preset--spacing--50);
}

.mark-form .wpcf7-form-control:hover {
	border-color: var(--wp--preset--color--cinza-medio);
}

/* Foco visível de verdade: anel de 3px na cor da marca, não o contorno
   pontilhado do navegador. Vale para teclado e para clique. */
.mark-form .wpcf7-form-control:focus {
	outline: none;
	border-color: var(--wp--preset--color--azul);
	box-shadow: 0 0 0 3px rgba(10, 133, 199, 0.22);
}

.mark-form .wpcf7-form-control::placeholder {
	color: var(--wp--preset--color--cinza-medio);
}

/* ---- ERRO EM UM CAMPO ---- */

.mark-form .wpcf7-not-valid {
	border-color: var(--wp--preset--color--azul-escuro);
}

.mark-form .wpcf7-not-valid-tip {
	display: block;
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--azul-escuro);
	margin-block-start: 0.15rem;
}

/* ---- MENSAGEM DO FORMULÁRIO INTEIRO ----
   O CF7 usa a mesma caixa para sucesso e para erro, mudando só a classe
   do <form> em volta. Por isso as regras abaixo olham para o estado do
   formulário, e não para a caixa. */

.mark-form .wpcf7-response-output {
	margin: var(--wp--preset--spacing--40) 0 0;
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
	border: 0;
	border-inline-start: 4px solid currentColor;
	border-radius: var(--wp--custom--raio--pequeno);
	font-size: var(--wp--preset--font-size--pequeno);
}

.mark-form.sent .wpcf7-response-output {
	color: var(--wp--preset--color--azul-escuro);
	background-color: var(--wp--preset--color--azul-claro);
}

.mark-form.invalid .wpcf7-response-output,
.mark-form.failed .wpcf7-response-output,
.mark-form.spam .wpcf7-response-output,
.mark-form.aborted .wpcf7-response-output {
	color: var(--wp--preset--color--preto);
	background-color: var(--wp--preset--color--cinza-claro);
}

/* ---- BOTÃO ---- */

.mark-form .wpcf7-submit {
	width: auto;
	cursor: pointer;
	font-weight: 600;
	color: var(--wp--preset--color--branco);
	background-color: var(--wp--preset--color--azul-texto);
	border: 0;
	border-radius: var(--wp--custom--raio--pequeno);
	padding: 0.85rem 2rem;
	transition: background-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.mark-form .wpcf7-submit:hover {
	background-color: var(--wp--preset--color--azul-escuro);
}

.mark-form .wpcf7-submit:focus-visible {
	outline: 3px solid var(--wp--preset--color--amarelo);
	outline-offset: 2px;
}

.mark-form .wpcf7-spinner {
	margin-inline-start: var(--wp--preset--spacing--20);
}

.mark-form__aviso {
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--cinza-medio);
	margin-block-start: var(--wp--preset--spacing--30);
}

/* ---- BLOCO DE DADOS DE CONTATO, do atalho [mark_contato] ---- */

.contato-dados__titulo {
	font-size: var(--wp--preset--font-size--titulo-3);
	margin-block-end: var(--wp--preset--spacing--40);
}

.contato-dados__lista {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var(--wp--preset--spacing--40);
}

.contato-dados__rotulo {
	display: block;
	font-size: var(--wp--preset--font-size--etiqueta);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--cinza-medio);
	margin-block-end: 0.15rem;
}

.contato-dados__valor {
	font-size: var(--wp--preset--font-size--corpo-grande);
	font-weight: 500;
	color: var(--wp--preset--color--azul-texto);
	text-decoration: none;
	font-style: normal;
}

a.contato-dados__valor:hover {
	color: var(--wp--preset--color--azul-escuro);
	text-decoration: underline;
}

.contato-dados__endereco {
	color: var(--wp--preset--color--preto);
	font-weight: 400;
	line-height: var(--wp--custom--entrelinha--corpo-grande);
}

/* ---- MAPA, do atalho [mark_mapa] ---- */

.contato-mapa {
	margin-block-start: var(--wp--preset--spacing--50);
	border-radius: var(--wp--custom--raio--medio);
	overflow: hidden;
	line-height: 0;
}

.contato-mapa iframe {
	display: block;
	width: 100%;
	height: var(--mark-mapa-altura, 320px);
	border: 0;
}

/* O CF7 embrulha cada campo em um <span> inline. Dentro de uma coluna
   flex isso deixaria o campo com a largura do conteúdo, e não da coluna. */
.mark-form .wpcf7-form-control-wrap {
	display: block;
}


/* --------------------------------------------------------------------------
   23. CONVIVÊNCIA COM O ELEMENTOR
   --------------------------------------------------------------------------
   Só entra em ação em páginas montadas no Elementor. Página de blocos não
   é afetada por nada daqui.

   O Elementor embrulha o conteúdo dele em <div class="elementor">, que
   cai como filho direto do post-content. E o post-content tem layout
   constrained, então o WordPress aplica:

     .is-layout-constrained > :where(:not(.alignfull)...)
     { max-width: var(--wp--style--global--content-size) }

   Ou seja, a página inteira do Elementor ficava presa em 46rem, e as
   seções de largura total dele não tinham como sangrar. Soltar o
   max-width devolve o controle da largura para o Elementor, que é onde
   ele deve estar numa página feita lá. O respiro lateral passa a ser
   responsabilidade de cada container do Elementor.
   -------------------------------------------------------------------------- */

.wp-block-post-content > .elementor {
	max-width: none;
}

/* Soltar o max-width não bastava: o .entry-content tem o respiro lateral
   global do tema, 1.5rem de cada lado, e o conteúdo do Elementor nascia
   DENTRO desse respiro. As seções ficavam com uma faixa branca de 24px
   nas duas bordas, em vez de atravessar a tela.

   Numa página de blocos quem resolve isso é a classe alignfull, que o
   WordPress trata com margem negativa. O Elementor não põe essa classe e
   nunca vai pôr, porque quem controla largura ali é ele.

   Então tiramos o respiro do envelope, e só quando o conteúdo é do
   Elementor. O :has() garante que página de blocos não é afetada: sem um
   .elementor dentro, a regra não casa. O respiro lateral passa a ser de
   cada container do Elementor, que é onde ele deve estar. */

.wp-block-post-content:has( > .elementor ) {
	padding-inline: 0;
}


/* --------------------------------------------------------------------------
   24. ÍCONES
   --------------------------------------------------------------------------
   Os ícones são SVG impressos direto no HTML pelo PHP, com traço em
   currentColor. Não há fonte de ícone nem sprite: o ícone herda a cor do
   texto ao redor, e mudar a cor do bloco muda o ícone junto.
   -------------------------------------------------------------------------- */

.mark-icone {
	display: inline-block;
	vertical-align: middle;
	flex: none;
}

/* SVG enviado pelo painel entra como <img> e não herda cor. Fica com a
   cor do próprio arquivo, que é o esperado para um desenho autoral. */
.mark-icone--proprio {
	object-fit: contain;
}

.mark-bloco-icone {
	line-height: 0;
}

.mark-bloco-icone--center { text-align: center; }
.mark-bloco-icone--right  { text-align: right; }


/* --------------------------------------------------------------------------
   25. BLOG
   --------------------------------------------------------------------------
   Listagem, artigo e os blocos editoriais da série "Fala, Mark!".

   O artigo é o único lugar do site com coluna de leitura estreita, 46rem.
   Não é estética: linha de texto longa demais faz o olho perder a próxima
   linha ao voltar, e artigo longo é justamente onde isso cansa.
   -------------------------------------------------------------------------- */

/* ---- FILTRO POR CATEGORIA ---- */

.filtro-categorias ul,
ul.filtro-categorias {
	list-style: none;
	margin: 0 0 var(--wp--preset--spacing--70);
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--20);
}

.filtro-categorias li a {
	display: inline-block;
	padding: 0.4rem 0.95rem;
	border: 1px solid var(--wp--preset--color--cinza-borda);
	border-radius: 100px;
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--cinza-escuro);
	text-decoration: none;
	transition:
		border-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.filtro-categorias li a:hover,
.filtro-categorias li.current-cat a {
	border-color: var(--wp--preset--color--azul);
	color: var(--wp--preset--color--azul-texto);
}

/* ---- CARDS DA LISTAGEM ---- */

.lista__grade {
	gap: var(--wp--preset--spacing--60);
}

.cartao-post {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--20);
	padding: 0;
	overflow: hidden;
}

.cartao-post__capa img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
}

/* O respiro do card começa DEPOIS da capa, para a imagem sangrar até a
   borda. Por isso o padding vai nos filhos e não no card. */
.cartao-post > :not(.cartao-post__capa) {
	padding-inline: var(--wp--preset--spacing--50);
}

.cartao-post > :not(.cartao-post__capa):first-child {
	padding-block-start: var(--wp--preset--spacing--50);
}

.cartao-post > :last-child {
	padding-block-end: var(--wp--preset--spacing--50);
	margin-block-start: auto;
}

/* ---- O ROXO: A COR DO TERRITORIO EDITORIAL ----

   #742b8c entra com uma regra e uma só: ele marca CONTEÚDO, e nada
   além disso. Etiqueta de categoria, detalhes da listagem do blog e da
   página de categoria, e a seção do blog na home.

   A proporção do site continua a mesma: neutro domina, azul estrutura,
   amarelo pontua, e o roxo diz "isto aqui é texto que a agência
   escreveu". No dia em que ele aparecer num botão ou numa seção
   comercial, deixa de significar qualquer coisa.

   Contraste de 8,5:1 sobre branco, então serve para texto sem ressalva.

   A cor está na paleta do theme.json como "roxo", o que a torna
   escolhível no editor. Isso é uma faca de dois gumes: fica disponível
   para usar onde não deve. A regra está escrita aqui para quem for
   olhar depois. */

.cartao-post__categoria,
.cartao-post__categoria a {
	color: var(--wp--preset--color--roxo);
	text-transform: uppercase;
	letter-spacing: 0.08em;
	text-decoration: none;
	font-weight: 600;
}

.cartao-post__resumo {
	color: var(--wp--preset--color--cinza-escuro);
}

.cartao-post__data {
	color: var(--wp--preset--color--cinza-medio);
}

.lista__vazia {
	color: var(--wp--preset--color--cinza-medio);
}

/* ---- CABEÇALHO DO ARTIGO ---- */

.artigo__topo {
	padding-block-start: var(--wp--custom--espacamento--secao);
	padding-block-end: var(--wp--preset--spacing--60);
}

.migalhas__lista {
	list-style: none;
	margin: 0 0 var(--wp--preset--spacing--40);
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0.45rem;
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--cinza-medio);
}

.migalhas__item + .migalhas__item::before {
	content: "/";
	margin-inline-end: 0.45rem;
	color: var(--wp--preset--color--cinza-borda);
}

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

.migalhas__item:last-child a {
	color: var(--wp--preset--color--cinza-escuro);
	pointer-events: none;
}

.migalhas__item a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.artigo__categoria,
.artigo__categoria a {
	color: var(--wp--preset--color--roxo);
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-weight: 600;
	text-decoration: none;
	margin-block-end: var(--wp--preset--spacing--20);
}

.artigo__dados {
	gap: var(--wp--preset--spacing--40);
	margin-block-start: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--cinza-medio);
}

.artigo__dados p,
.artigo__dados div {
	margin: 0;
}

/* O ponto separa data e tempo de leitura sem precisar de outro elemento. */
.artigo__dados .mark-tempo-leitura::before {
	content: "·";
	margin-inline-end: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--cinza-borda);
}

.artigo__capa img {
	width: 100%;
	max-height: 34rem;
	object-fit: cover;
	display: block;
}

/* ---- CORPO EM DUAS COLUNAS ---- */

.artigo__corpo {
	padding-block: var(--wp--custom--espacamento--secao);
}

.artigo__coluna {
	min-width: 0;
}

/* No celular o índice não aparece: ele ocuparia uma tela inteira antes
   do texto começar, que é o oposto de ajudar a navegar. */
.indice {
	display: none;
}

@media (min-width: 1180px) {

	/* A grade de duas colunas vale SÓ quando existe índice.

	   Sem o :has(), esta regra pegava também o case, que não tem índice.
	   Aí a única coluna existente caía na primeira faixa, a de 15rem, e o
	   case inteiro ficava espremido em 240px com a tela vazia ao lado.

	   Sem índice, o corpo continua em fluxo: a coluna ocupa a largura
	   toda e o layout constrained dela é que centraliza a leitura em
	   46rem, deixando espaço para imagem mais larga quando precisar. */
	.artigo__corpo:has( .indice ) {
		display: grid;
		grid-template-columns: 15rem minmax(0, 46rem);
		gap: var(--wp--preset--spacing--90);
		justify-content: center;
		align-items: start;
	}

	.indice {
		display: block;
		position: sticky;
		/* Abaixo do cabeçalho fixo, senão o primeiro item fica escondido. */
		top: calc(var(--mark-cabecalho-altura-fixo, 72px) + var(--wp--preset--spacing--40));
		max-height: calc(100vh - var(--mark-cabecalho-altura-fixo, 72px) - 4rem);
		overflow-y: auto;
	}
}

.indice__titulo {
	font-size: var(--wp--preset--font-size--etiqueta);
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--wp--preset--color--cinza-medio);
	margin: 0 0 var(--wp--preset--spacing--30);
}

.indice__lista {
	list-style: none;
	margin: 0;
	padding: 0;
	border-inline-start: 2px solid var(--wp--preset--color--cinza-borda);
	display: grid;
	gap: var(--wp--preset--spacing--20);
}

.indice__link {
	display: block;
	padding-inline-start: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--pequeno);
	line-height: var(--wp--custom--entrelinha--pequeno);
	color: var(--wp--preset--color--cinza-escuro);
	text-decoration: none;
	border-inline-start: 2px solid transparent;
	margin-inline-start: -2px;
	transition: color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.indice__link:hover,
.indice__item.is-ativo .indice__link {
	color: var(--wp--preset--color--azul-texto);
	border-inline-start-color: var(--wp--preset--color--azul);
}

/* ---- TIPOGRAFIA DO ARTIGO ---- */

.artigo__coluna .wp-block-post-content > h2 {
	margin-block-start: var(--wp--preset--spacing--80);
	/* Compensa o cabeçalho fixo quando se chega pelo índice. */
	scroll-margin-top: calc(var(--mark-cabecalho-altura-fixo, 72px) + 1.5rem);
}

.artigo__coluna .wp-block-post-content > h3 {
	margin-block-start: var(--wp--preset--spacing--60);
}

.artigo__coluna .wp-block-post-content > p,
.artigo__coluna .wp-block-post-content > ul,
.artigo__coluna .wp-block-post-content > ol {
	font-size: var(--wp--preset--font-size--corpo-grande);
	line-height: var(--wp--custom--entrelinha--corpo-grande);
}

/* ---- DESTAQUE ---- */

.destaque {
	border-inline-start: 4px solid var(--wp--preset--color--amarelo);
	padding: var(--wp--preset--spacing--40) 0 var(--wp--preset--spacing--40) var(--wp--preset--spacing--50);
	margin-block: var(--wp--preset--spacing--70);
}

.destaque__texto {
	font-family: var(--wp--preset--font-family--titulo);
	font-weight: 600;
	line-height: var(--wp--custom--entrelinha--titulo-3);
	margin: 0;
}

.destaque__fonte {
	color: var(--wp--preset--color--cinza-medio);
	margin-block-start: var(--wp--preset--spacing--20);
	margin-block-end: 0;
}

/* ---- CHECKLIST ----
   O visto é um SVG embutido como data URI: sem arquivo, sem requisição e
   sem dependência da biblioteca de ícones. */

.checklist {
	list-style: none;
	padding: 0;
	margin-block: var(--wp--preset--spacing--40);
	display: grid;
	gap: var(--wp--preset--spacing--30);
}

.checklist li {
	position: relative;
	padding-inline-start: 2rem;
	line-height: var(--wp--custom--entrelinha--corpo-grande);
}

.checklist li::before {
	content: "";
	position: absolute;
	inset-inline-start: 0;
	top: 0.28em;
	width: 1.15rem;
	height: 1.15rem;
	background-color: var(--wp--preset--color--azul);
	-webkit-mask-image: var(--mark-visto);
	mask-image: var(--mark-visto);
	-webkit-mask-repeat: no-repeat;
	mask-repeat: no-repeat;
	-webkit-mask-size: contain;
	mask-size: contain;
}

:root {
	--mark-visto: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}

/* No bloco azul o visto precisa clarear, senão some no fundo. */
.checklist--claro li::before {
	background-color: var(--wp--preset--color--amarelo);
}

.checklist-bloco {
	margin-block: var(--wp--preset--spacing--60);
}

/* ---- TABELA COMPARATIVA ---- */

.tabela-comparativa {
	margin-block: var(--wp--preset--spacing--70);
	/* No celular a tabela rola dentro da própria caixa em vez de espremer
	   as colunas até o texto ficar ilegível. */
	overflow-x: auto;
}

.tabela-comparativa table {
	border-collapse: collapse;
	width: 100%;
	min-width: 34rem;
	font-size: var(--wp--preset--font-size--pequeno);
}

.tabela-comparativa th,
.tabela-comparativa td {
	text-align: start;
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
	border-bottom: 1px solid var(--wp--preset--color--cinza-borda);
	vertical-align: top;
}

.tabela-comparativa thead th {
	background-color: var(--wp--preset--color--azul-claro);
	color: var(--wp--preset--color--azul-escuro);
	font-weight: 600;
	border-bottom-color: var(--wp--preset--color--azul);
}

.tabela-comparativa tbody th,
.tabela-comparativa tbody td:first-child {
	font-weight: 600;
	color: var(--wp--preset--color--preto);
}

.tabela-comparativa tbody tr:nth-child(even) {
	background-color: var(--wp--preset--color--cinza-claro);
}

.tabela-comparativa figcaption {
	color: var(--wp--preset--color--cinza-medio);
	font-size: var(--wp--preset--font-size--pequeno);
	margin-block-start: var(--wp--preset--spacing--30);
}

/* ---- FAQ ----
   Sanfona do próprio navegador, via <details>. Zero JavaScript. */

.faq {
	margin-block: var(--wp--preset--spacing--80);
}

.faq__item {
	border-bottom: 1px solid var(--wp--preset--color--cinza-borda);
	padding-block: var(--wp--preset--spacing--30);
}

.faq__item summary {
	cursor: pointer;
	list-style: none;
	font-family: var(--wp--preset--font-family--titulo);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--corpo-grande);
	color: var(--wp--preset--color--preto);
	padding-inline-end: 2.5rem;
	position: relative;
}

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

/* O sinal de mais vira menos quando abre. É desenhado com duas barras,
   então não depende de fonte nem de arquivo. */
.faq__item summary::before,
.faq__item summary::after {
	content: "";
	position: absolute;
	inset-inline-end: 0.35rem;
	top: 50%;
	width: 0.9rem;
	height: 2px;
	background-color: var(--wp--preset--color--azul);
	transition: transform var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.faq__item summary::before {
	transform: translateY(-50%);
}

.faq__item summary::after {
	transform: translateY(-50%) rotate(90deg);
}

.faq__item[open] summary::after {
	transform: translateY(-50%) rotate(0deg);
}

.faq__item summary:focus-visible {
	outline: 3px solid var(--wp--preset--color--amarelo);
	outline-offset: 3px;
	border-radius: 2px;
}

.faq__item > :not(summary) {
	margin-block-start: var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--cinza-escuro);
}

/* ---- O QUE A MARK FAZ ---- */

.mark-faz {
	padding: var(--wp--preset--spacing--80);
	border-radius: var(--wp--custom--raio--medio);
	margin-block: var(--wp--preset--spacing--80);
}

.mark-faz__acao {
	margin-block-start: var(--wp--preset--spacing--50);
}

/* ---- COMPARTILHAR ---- */

.compartilhar {
	margin-block-start: var(--wp--preset--spacing--80);
	padding-block-start: var(--wp--preset--spacing--50);
	border-top: 1px solid var(--wp--preset--color--cinza-borda);
}

.compartilhar__titulo {
	font-size: var(--wp--preset--font-size--etiqueta);
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--wp--preset--color--cinza-medio);
	margin: 0 0 var(--wp--preset--spacing--30);
}

.compartilhar__lista {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--20);
}

.compartilhar__link {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.5rem 0.95rem;
	border: 1px solid var(--wp--preset--color--cinza-borda);
	border-radius: 100px;
	background: none;
	font: inherit;
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--cinza-escuro);
	text-decoration: none;
	cursor: pointer;
	transition:
		border-color var(--wp--custom--duracao--rapida) var(--wp--custom--easing),
		color var(--wp--custom--duracao--rapida) var(--wp--custom--easing);
}

.compartilhar__link:hover {
	border-color: var(--wp--preset--color--azul);
	color: var(--wp--preset--color--azul-texto);
}

.compartilhar__copiar.is-copiado {
	border-color: var(--wp--preset--color--azul);
	color: var(--wp--preset--color--azul-texto);
}

/* ---- AUTOR ---- */

.autor {
	display: flex;
	gap: var(--wp--preset--spacing--40);
	align-items: center;
	margin-block-start: var(--wp--preset--spacing--70);
	padding: var(--wp--preset--spacing--50);
	background-color: var(--wp--preset--color--cinza-claro);
	border-radius: var(--wp--custom--raio--medio);
}

.autor__foto-caixa {
	flex: none;
	line-height: 0;
}

.autor__foto {
	width: 64px;
	height: 64px;
	border-radius: 50%;
	object-fit: cover;
}

.autor__nome {
	font-family: var(--wp--preset--font-family--titulo);
	font-weight: 700;
	margin: 0;
	line-height: 1.3;
}

.autor__cargo {
	color: var(--wp--preset--color--cinza-escuro);
	font-size: var(--wp--preset--font-size--pequeno);
	margin: 0.15rem 0 0;
}

/* ---- RELACIONADOS ---- */

.relacionados__titulo {
	font-size: var(--wp--preset--font-size--titulo-2);
	margin-block-end: var(--wp--preset--spacing--60);
}

.relacionados__grade {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
	gap: var(--wp--preset--spacing--60);
}

.relacionados .cartao-post__titulo {
	font-size: var(--wp--preset--font-size--titulo-3);
	font-family: var(--wp--preset--font-family--titulo);
	margin: 0;
}

.relacionados .cartao-post__titulo a {
	color: var(--wp--preset--color--preto);
	text-decoration: none;
}

.relacionados .cartao-post__titulo a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.relacionados .cartao-post__capa {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
}

/* ---- CONVITE FINAL ---- */

.convite__apoio {
	max-width: 40rem;
	margin-inline: auto;
	opacity: 0.92;
}

/* ---- LARGURA DENTRO DO HERO ----

   O .hero é flex com direção coluna, para centrar verticalmente. E o
   WordPress dá margin-left/right auto aos filhos de um layout
   constrained, para centrá-los.

   Os dois juntos criam um efeito que não é óbvio: item de flex com
   margem automática no eixo cruzado DEIXA de esticar e encolhe até o
   tamanho do próprio conteúdo. Um alignwide que deveria ter 78rem
   acabava com a largura do parágrafo mais largo, 34rem, e o hero inteiro
   parecia centralizado, diferente do resto do site.

   Largura explícita devolve o comportamento esperado: o max-width do
   alignwide volta a mandar. */

.hero > .alignwide,
.hero > .alignfull,
.hero > .wp-block-columns {
	width: 100%;
}


/* --------------------------------------------------------------------------
   26. BLOCOS DAS PÁGINAS DE GUARULHOS E DA MARK
   -------------------------------------------------------------------------- */

/* Endereço e mapa lado a lado. Os dados vêm dos atalhos do painel, então
   o bloco é só o arranjo: quem manda no conteúdo é Mark > Contato. */
.endereco__grade {
	margin-block-start: var(--wp--preset--spacing--60);
	align-items: start;
}

.endereco .contato-dados__lista {
	gap: var(--wp--preset--spacing--50);
}

.endereco .contato-mapa {
	margin-block-start: 0;
}

/* O selo do prêmio, centrado abaixo do texto do bloco de reconhecimento.
   A altura continua vindo de Mark > Marca, como no rodapé. */
/* O bloco Reconhecimento, na página A Mark, mostra o TROFÉU do prêmio.
   O nome da classe ficou de quando ele mostrava o selo de parceiro, e
   está mantido para não reescrever o conteúdo de todas as revisões da
   página só por causa de um nome. */
.reconhecimento__selo {
	display: flex;
	justify-content: center;
	margin-block-start: var(--wp--preset--spacing--60);
}

/* Foto da equipe, na página A Mark. Bloco de Imagem nativo: a proporção
   é a do arquivo enviado, sem corte, porque foto de time cortada por CSS
   costuma decapitar alguém. */
.equipe__foto {
	margin-block-start: var(--wp--preset--spacing--60);
}

.equipe__foto img {
	width: 100%;
	height: auto;
	border-radius: var(--wp--custom--raio--medio);
}

/* ---- GRADES DE TRÊS COLUNAS NO CELULAR ----

   O bloco de grade do WordPress, quando configurado por número de
   colunas, gera grid-template-columns: repeat(3, minmax(0, 1fr)) SEM
   media query. Ou seja, três colunas continuam três colunas num celular
   de 390px, com cerca de 100px cada.

   Na maior parte do site isso passava despercebido porque os títulos são
   curtos. Um título de uma palavra longa, como "ambientação", estoura a
   coluna e empurra a página inteira.

   Uma coluna no celular, duas no tablet, três a partir do desktop. */

/* A grade de operações agora é flex, então quem muda por faixa de tela é
   a base do item e não o número de colunas. A listagem do blog continua
   sendo grade de verdade. */

@media (max-width: 781px) {

	.lista__grade {
		grid-template-columns: 1fr;
	}

	.operamos__item,
	.servicos__grade > .cartao-segmento {
		flex-basis: 100%;
	}
}

@media (min-width: 782px) and (max-width: 1099px) {

	.lista__grade {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.operamos__item {
		flex-basis: calc((100% - var(--wp--preset--spacing--70)) / 2);
	}

	.servicos__grade > .cartao-segmento {
		flex-basis: calc((100% - var(--wp--preset--spacing--50)) / 2);
	}
}

/* ---- CARD DE SERVIÇO SEM PÁGINA AINDA ----

   Cinco dos sete serviços ainda não têm página. Enquanto não tiverem, o
   card informa e não promete: sai o link do título, sai a seta, e some o
   comportamento de card clicável.

   Card com aparência de clicável que não clica é pior do que card
   discreto: a pessoa tenta, não acontece nada, e passa a desconfiar do
   resto da página. */

/* A classe .cartao-segmento--sem-link foi REMOVIDA.

   Ela era manual, nunca chegou a ser posta em nenhum card, e mesmo se
   tivesse sido não resolveria: zerava borda, sombra e deslocamento, e
   esquecia o background-color, que era justamente o azul reclamado.

   O comportamento agora vem de :has(), lá na seção dos cards. Nada a
   pôr, nada a lembrar de tirar. */


/* --------------------------------------------------------------------------
   27. CABEÇALHO EM PÁGINA SEM HERO
   --------------------------------------------------------------------------
   O estado transparente existe por um motivo só: o cabeçalho flutuar
   sobre um hero de fundo escuro. Numa página que não tem esse hero, como
   o artigo do blog, ele resultava em logo amarelo e menu branco sobre
   fundo branco. Invisível.

   A correção NÃO é uma exceção por página. É uma condição estrutural: se
   não existe um hero logo abaixo do cabeçalho, o estado transparente é
   devolvido ao visual sólido. Qualquer template futuro que não comece com
   hero já nasce certo, sem ninguém precisar lembrar de nada.

   As duas condições cobrem as duas formas que o tema usa hoje:
     main > .hero                        home, blog e categoria
     main > .wp-block-post-content > .hero   páginas, onde o hero vem do
                                             conteúdo e não do template

   Sobre o peso do seletor: :not(:has(...)) herda a especificidade do que
   está dentro, então este bloco vence as regras do estado transparente
   sem precisar de !important.
   -------------------------------------------------------------------------- */

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente {
	background-color: var(--wp--preset--color--branco);
	box-shadow: var(--wp--preset--shadow--sutil);
	color: var(--wp--preset--color--preto);
}

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .logo__marca,
.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .logo__descritor {
	color: var(--wp--preset--color--azul);
}

/* A troca de logo também inverte: vale a versão de fundo claro. */
.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .logo__imagem--fundo-claro {
	display: block;
}

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .logo__imagem--fundo-escuro {
	display: none;
}

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .menu-principal a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .portal__botao .wp-block-button__link {
	color: var(--wp--preset--color--azul);
	border-color: var(--wp--preset--color--azul);
	background-color: transparent;
}

.wp-site-blocks:not(:has( > main > .hero:first-child )):not(:has( > main > .wp-block-post-content > .hero:first-child )) .cabecalho--transparente .portal__botao .wp-block-button__link:hover {
	color: var(--wp--preset--color--branco);
	background-color: var(--wp--preset--color--azul-texto);
	border-color: var(--wp--preset--color--azul-texto);
}


/* --------------------------------------------------------------------------
   28. CASES
   -------------------------------------------------------------------------- */

/* Linha de dados abaixo das migalhas: cliente e segmento. */
.case-dados {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--20);
	font-size: var(--wp--preset--font-size--pequeno);
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-weight: 600;
	margin-block-end: var(--wp--preset--spacing--20);
}

.case-dados__cliente {
	color: var(--wp--preset--color--preto);
}

.case-dados__segmento {
	color: var(--wp--preset--color--azul-texto);
	text-decoration: none;
}

a.case-dados__segmento:hover {
	text-decoration: underline;
}

.case-dados__sep {
	color: var(--wp--preset--color--cinza-borda);
}

/* ---- NÚMEROS DO RESULTADO ----
   Faixa azul-clara logo abaixo da capa. O número domina e a legenda
   explica, porque em case o número é a notícia. */

.case-numeros {

	/* Sem isto a faixa fica com 100% MAIS o padding dos dois lados, e a
	   página inteira ganha barra de rolagem horizontal. O WordPress não
	   aplica border-box globalmente, então cada faixa de largura total com
	   padding lateral precisa declarar o seu. */
	box-sizing: border-box;
	background-color: var(--wp--preset--color--azul-claro);
	padding-block: var(--wp--preset--spacing--70);
	padding-inline: var(--wp--preset--spacing--50);
	margin-block-end: var(--wp--preset--spacing--60);
}

.case-numeros__lista {
	list-style: none;
	margin: 0 auto;
	padding: 0;
	max-width: 78rem;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
	gap: var(--wp--preset--spacing--60);
}

.case-numeros__valor {
	display: block;
	font-family: var(--wp--preset--font-family--titulo);
	font-weight: 700;
	font-size: clamp(2.25rem, 5vw, 3.25rem);
	line-height: 1.05;
	color: var(--wp--preset--color--azul-texto);
}

.case-numeros__legenda {
	display: block;
	margin-block-start: var(--wp--preset--spacing--20);
	font-size: var(--wp--preset--font-size--pequeno);
	line-height: var(--wp--custom--entrelinha--pequeno);
	color: var(--wp--preset--color--cinza-escuro);
	max-width: 20ch;
}

/* O bloco de números sangra até a borda porque o artigo é alignfull e
   ele não está dentro da coluna de leitura. */
.case .case-numeros {
	width: 100%;
}

/* ---- FAIXA DE CASES DENTRO DE UMA PÁGINA DE SEGMENTO ---- */

.cases-faixa {
	margin-block: var(--wp--preset--spacing--80);
}

.cases-faixa__titulo {
	font-size: var(--wp--preset--font-size--titulo-2);
	margin-block-end: var(--wp--preset--spacing--50);
}

.cases-faixa__grade {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
	gap: var(--wp--preset--spacing--50);
}

.cases-faixa .cartao-post__titulo {
	font-size: var(--wp--preset--font-size--titulo-3);
	font-family: var(--wp--preset--font-family--titulo);
	margin: 0;
}

.cases-faixa .cartao-post__titulo a {
	color: var(--wp--preset--color--preto);
	text-decoration: none;
}

.cases-faixa .cartao-post__titulo a:hover {
	color: var(--wp--preset--color--azul-texto);
}

.cases-faixa .cartao-post__capa {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
}

/* Galeria dentro do case: as imagens que no original apareciam em
   sequência, sem texto entre elas. */
.case .wp-block-gallery {
	margin-block: var(--wp--preset--spacing--70);
}

/* ---- CAPA DO CASE ----

   O corte acontece aqui, e não no envio da imagem. aspect-ratio define a
   janela, object-fit preenche, e object-position mantém visível o ponto
   escolhido no editor. Trocar a proporção não exige regerar nada.

   Sem ponto focal escolhido, vale o centro, que é o padrão do navegador. */

.case-capa {
	margin: 0;
	line-height: 0;
	width: 100%;
}

.case-capa__img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: var(--mark-capa-foco, 50% 50%);
}

/* Proporção fixa: a imagem preenche a janela e o excedente é cortado a
   partir do ponto focal.

   Sem max-height aqui, de propósito. Um teto de altura sobrepõe a
   proporção e a faixa vira mais larga do que a escolhida: o campo diria
   16 por 9 e a tela mostraria 2,25 por 1. Se a faixa ficar alta demais,
   o remédio é escolher 21 por 9, que é exatamente para isso que o campo
   existe. */
.case-capa--16-9,
.case-capa--21-9 {
	aspect-ratio: var(--mark-capa-proporcao, 16 / 9);
	overflow: hidden;
}

/* Altura livre: nada é cortado, nem em cima nem embaixo. A imagem manda
   na altura e o ponto focal não tem efeito, porque não há sobra.

   O teto de largura é a largura real do arquivo, mandada pelo PHP. Uma
   capa de 725px esticada na tela inteira não ganha detalhe nenhum, só
   perde nitidez. Aí ela fica no tamanho que tem, centralizada. */
.case-capa--livre {
	max-width: min( 100%, var( --mark-capa-larg, 100% ) );
	margin-inline: auto;
}

.case-capa--livre .case-capa__img {
	height: auto;
	object-fit: fill;
}

@media (max-width: 781px) {

	/* No celular, faixa muito baixa vira tarja. A proporção afrouxa para
	   a imagem ainda contar alguma coisa. */
	.case-capa--21-9 {
		aspect-ratio: 16 / 9;
	}
}


/* --------------------------------------------------------------------------
   29. CELULAR: BARRA DE NÚMEROS E PAINEL DO MENU
   --------------------------------------------------------------------------
   Este tema é escrito do celular para cima: as regras soltas valem para
   telas pequenas e as media queries de min-width acrescentam o desktop.

   O problema era o contrário disso. As regras da barra de números tinham
   sido escritas pensando no desktop e ficaram FORA de media query, então
   valiam também no celular: um respiro de 6rem entre os três blocos numa
   tela de 390px, tudo alinhado à esquerda, e o conjunto ocupando 917px de
   altura para dizer três coisas.
   -------------------------------------------------------------------------- */

@media (max-width: 781px) {

	/* ---- BARRA DE NÚMEROS ---- */

	.numeros {
		padding-block: var(--wp--preset--spacing--70);
	}

	/* De 6rem para 2rem. A distância entre os três números precisa ser
	   menor que a altura de cada um, senão eles deixam de ser lidos como
	   uma sequência e viram três seções soltas. */
	.numeros__grade {
		gap: var(--wp--preset--spacing--60);
	}

	.numeros__grade > .wp-block-column {
		text-align: center;
	}

	/* O ícone é flex, então centralizar o texto do pai não o move. */
	.numero__icone {
		justify-content: center;
	}

	/* De 64px para 78px numa tela de 390. O piso do clamp é o que manda
	   aqui: 21vw só passa a valer em telas maiores que 343px. */
	.numero__valor {
		--wp--preset--font-size--hero: clamp(4.5rem, 21vw, 6rem);
	}

	/* O traço amarelo é um ::after de largura fixa. Com o bloco
	   centralizado, ele precisa se centralizar também, senão fica
	   pendurado à esquerda embaixo de um número centrado. */
	.numero__valor::after {
		margin-inline: auto;
	}

	/* Legenda longa em coluna estreita vira quatro linhas desalinhadas.
	   O limite de medida quebra em linhas parecidas e mantém o bloco
	   compacto. */
	.numero__rotulo {
		max-width: 24ch;
		margin-inline: auto;
	}


	/* ---- PAINEL DO MENU ----

	   O fundo azul e a letra branca vêm de atributo do bloco, e não
	   daqui. O que falta é o que o core não tem opinião sobre: tamanho
	   dos itens, respiro entre eles, o botão de fechar e o destaque do
	   botão principal no fim. */

	/* A COR DO PAINEL: por que o seletor é tão comprido.

	   Ela não pode vir de atributo do bloco. Atributo de cor de painel
	   vira classe no CONTAINER do menu, e o container existe em toda
	   largura, aberto ou fechado. O branco vazava para a barra do
	   desktop e o menu inteiro sumia no cabeçalho fixo, que é branco.

	   Vindo do CSS, ela precisa vencer esta regra do núcleo:

	     .wp-block-navigation:not(.has-background)
	     .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay)
	     { background-color: #fff }

	   Peso 0-5-0, porque :not() conta o que está dentro dele. Um seletor
	   de 0-3-0 perde e o painel volta a ser branco. O daqui soma seis
	   classes e ganha por peso, sem !important: .cabecalho, mais
	   .menu-principal e .wp-block-navigation no mesmo elemento, mais o
	   container, mais .is-menu-open, mais o :not().

	   Tudo dentro da media query do celular, que é onde o painel existe. */
	.cabecalho .menu-principal.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
		background-color: var(--wp--preset--color--azul);
		color: var(--wp--preset--color--branco);
	}

	.menu-principal .wp-block-navigation__responsive-container.is-menu-open {
		padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50) var(--wp--preset--spacing--80);
	}

	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		gap: var(--wp--preset--spacing--50);
	}

	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
		font-family: var(--wp--preset--font-family--titulo);
		font-size: var(--wp--preset--font-size--titulo-2);
		font-weight: 600;
		line-height: 1.2;
	}

	/* O item inteiro vira alvo de toque, e não só as letras. */
	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
		width: 100%;
	}

	/* BOTÃO DE FECHAR.

	   O core desenha um X pequeno, sem contraste garantido e com área de
	   toque menor que o mínimo confortável. Aqui ele ganha tamanho, um
	   círculo de contorno para ser visto como botão, e 44px de alvo, que
	   é a medida recomendada. */
	.menu-principal .wp-block-navigation__responsive-container-close {
		width: 44px;
		height: 44px;
		display: flex;
		align-items: center;
		justify-content: center;
		border: 1px solid rgba(255, 255, 255, 0.5);
		border-radius: 50%;
		color: var(--wp--preset--color--branco);
	}

	.menu-principal .wp-block-navigation__responsive-container-close svg {
		width: 24px;
		height: 24px;
		fill: currentColor;
	}

	/* SUBMENU DENTRO DO PAINEL.

	   Fora do painel o submenu é um cartão branco flutuante. Dentro dele
	   isso seria um retângulo branco no meio do azul. Aqui ele volta a
	   ser o que deve ser numa tela pequena: uma lista recuada, sem
	   moldura, com a mesma cor do resto. */
	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
		background-color: transparent;
		box-shadow: none;
		border: none;
		padding-inline-start: var(--wp--preset--spacing--40);
		border-inline-start: 1px solid rgba(255, 255, 255, 0.25);
	}

	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		font-size: var(--wp--preset--font-size--corpo-grande);
		font-weight: 400;
		color: inherit;
	}

	/* BOTÃO PRINCIPAL, ÚLTIMO ITEM.

	   É um item de menu comum na marcação, para não existirem dois
	   lugares de configurar o mesmo destino. Só a aparência muda: fundo
	   amarelo da marca, letra escura, largura toda, separado dos demais
	   por uma linha. */
	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .menu-markhub {

		/* display: block, e não o flex que o core dá ao item de menu.
		   Como filho de um flex, o link encolhe até o tamanho da palavra e
		   o botão sai com 125px em vez dos 342px da coluna. Em bloco, o
		   link ocupa a largura toda como qualquer elemento de bloco. */
		display: block;
		margin-block-start: var(--wp--preset--spacing--50);
		padding-block-start: var(--wp--preset--spacing--60);
		border-block-start: 1px solid rgba(255, 255, 255, 0.25);
	}

	.menu-principal .wp-block-navigation__responsive-container.is-menu-open .menu-markhub .wp-block-navigation-item__content {
		display: block;
		text-align: center;
		background-color: var(--wp--preset--color--amarelo);
		color: var(--wp--preset--color--amarelo-texto);
		border-radius: var(--wp--custom--raio--pequeno);
		padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--50);
		font-size: var(--wp--preset--font-size--titulo-3);
	}
}

/* No desktop o botão da barra já existe, então o item repetido do menu
   não aparece. */
@media (min-width: 782px) {

	.menu-principal .menu-markhub {
		display: none;
	}
}


/* --------------------------------------------------------------------------
   30. TERRITORIO EDITORIAL, EM ROXO
   --------------------------------------------------------------------------
   Continuação da regra descrita junto de .cartao-post__categoria. Aqui
   ficam os detalhes que dependem de contexto e não caberiam lá.
   -------------------------------------------------------------------------- */

/* A etiqueta da seção do blog na home. As outras seções seguem azuis:
   é a diferença que diz que ali começa outro tipo de conteúdo. */
.blog-home .etiqueta-secao {
	color: var(--wp--preset--color--roxo);
}

/* O traço fino acima de cada card, na listagem e na home. Detalhe
   pequeno de propósito: a cor marca sem gritar. */
.lista-secao .cartao-post,
.blog-home .cartao-post {
	border-top: 3px solid var(--wp--preset--color--roxo);
	padding-top: var(--wp--preset--spacing--30);
}

/* Filtro de categorias da listagem: o item ativo em roxo. */
.filtro-categorias .current-cat > a,
.filtro-categorias a:hover {
	color: var(--wp--preset--color--roxo);
}

/* A migalha do artigo, no passo "Blog", e o link do artigo relacionado. */
.migalhas__item a:hover,
.relacionados .cartao-post__titulo a:hover {
	color: var(--wp--preset--color--roxo);
}

/* Na página de categoria, o título da faixa. */
.lista-secao .etiqueta-secao {
	color: var(--wp--preset--color--roxo);
}
