/*
 * ArtEco — detalhes visuais que o theme.json não consegue representar.
 *
 * Todo valor vem de um token declarado no theme.json. Nada é redeclarado aqui:
 * se um número precisar mudar, ele muda no theme.json, não neste arquivo.
 */

/* --------------------------------------------------------------
   Rótulos e ações — tracking e caixa alta
   Aplicados por classe porque são papéis de texto, não blocos.
   -------------------------------------------------------------- */

/* Rótulo de lugar do hero: 12px, tracking 3px */
.arteco-eyebrow {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--wp--preset--color--tinta);
}

/*
 * No Figma o rótulo abre 18px acima do título, enquanto o resto da coluna
 * respira 45px. É a única exceção ao ritmo da coluna.
 */
.arteco-eyebrow + * {
	margin-block-start: var(--wp--preset--spacing--30);
}

/* Rótulo numerado das entradas: 10px, tracking 3px */
.arteco-label {
	font-size: var(--wp--preset--font-size--micro);
	font-weight: 400;
	line-height: 1.5;
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

/* Caixa alta aplicada por CSS, nunca digitada no conteúdo */
.arteco-caps {
	text-transform: uppercase;
}

/* Ações textuais: no hero em tinta, nas entradas em terracota */
.arteco-action,
.arteco-more {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	text-transform: uppercase;
}

.arteco-action {
	letter-spacing: 0.7px;
}

.arteco-more {
	letter-spacing: 1.4px;
}

.arteco-action a {
	color: var(--wp--preset--color--tinta);
}

/* A seta é decorativa: fica fora da árvore de acessibilidade */
.arteco-action a::after,
.arteco-more a::after {
	content: "\2192";
	margin-inline-start: 0.6em;
}

/* --------------------------------------------------------------
   Margem lateral fluida da Home
   -------------------------------------------------------------- */

/*
 * Sem esta regra a margem lateral cai de 100px em 1440 para ZERO em 1240, e o
 * conteúdo encosta nas duas bordas numa faixa de 458px de viewport.
 *
 * 6.94vw reproduz a proporção do Figma (100 / 1440). O teto é 92px e não 100
 * de propósito: com barra de rolagem clássica o viewport de layout são 1425px,
 * e um teto de 100 deixaria só 1225 de espaço, comprimindo o conteúdo aprovado
 * de 1240. Com 92 o conteúdo mantém os 1240 e a centralização devolve a margem
 * — 100px exatos onde a barra é sobreposta, 92,5 onde ela ocupa espaço, que é
 * o que a Home já entregava. O desktop aprovado não muda.
 *
 * Vive no CSS e não como padding do bloco `main` para ficar ao lado das regras
 * de cabeçalho e rodapé, que usam a mesma fórmula: as três faixas precisam
 * alinhar entre si, e uma fórmula só num lugar só é mais fácil de manter.
 */
.home main.wp-block-group {
	padding-inline: clamp(24px, 6.94vw, 92px);
}

/* --------------------------------------------------------------
   Hero — deslocamento assimétrico do texto
   -------------------------------------------------------------- */

/*
 * No Figma a coluna de texto começa 100px abaixo do topo da imagem. O valor
 * vive aqui, e não como padding inline no pattern, porque precisa responder a
 * media query — atributo de bloco não responde.
 */
.arteco-hero__texto {
	padding-top: 100px;
}

/* --------------------------------------------------------------
   Hero — área de imagem
   -------------------------------------------------------------- */

/*
 * A área de imagem do hero é um core/cover, não um core/image. O cover é o
 * único bloco do core que permanece no site quando ainda não tem mídia:
 * render_block_core_image() devolve '' se o <img> não tiver src, enquanto
 * render_block_core_cover() devolve o conteúdo intacto. Vazio, o cover mostra
 * a caixa reservada; preenchido, a imagem ocupa exatamente a mesma área, com
 * object-fit e ponto focal nativos do bloco.
 *
 * A proporção aprovada no Figma vive aqui, no tema, e não como atributo do
 * bloco: é decisão de design, e assim não pode ser deformada por engano na
 * edição. O min-height zera o padrão de 430px do cover para que a proporção
 * seja quem manda.
 */
.arteco-hero .wp-block-cover {
	aspect-ratio: 608 / 584;
	min-height: 0;
}

/*
 * Assim que existe imagem, o lavado de 20% que servia de placeholder sai de
 * cena. Uma sobreposição escolhida deliberadamente na edição, com outro valor
 * de opacidade, continua valendo.
 */
.arteco-hero .wp-block-cover:has(.wp-block-cover__image-background) .wp-block-cover__background.has-background-dim-20 {
	opacity: 0;
}

/* --------------------------------------------------------------
   Seção de entradas — a grade é o componente
   -------------------------------------------------------------- */

.arteco-entradas .wp-block-column {
	display: flex;
	flex-direction: column;
	border-inline-end: 1px solid var(--wp--custom--hairline);
}

.arteco-entradas .wp-block-column:last-child {
	border-inline-end: 0;
}

/*
 * A separação de 40px entre o texto e o CTA é garantida pelo padding-bottom
 * do grupo de conteúdo, no pattern — como no Figma, onde é um padding
 * declarado e não sobra de distribuição. O auto abaixo apenas alinha os três
 * CTAs na base quando as colunas têm alturas diferentes.
 */
.arteco-entradas .arteco-more {
	margin-block-start: auto;
}

/* ==============================================================
   Camada responsiva
   --------------------------------------------------------------
   Dois pontos de corte, ambos medidos e não convencionais:

   1024px — onde a medida de leitura das Entradas deixa de
            funcionar. O texto útil cai de 374px (~40 caracteres)
            para 302px (~32) e, em 782px, para 221px (~24), com o
            parágrafo em 13 linhas.

    781px — constante do próprio WordPress. Em
            wp-includes/blocks/columns/style.css o core empilha as
            colunas com flex-basis:100% !important abaixo de 782px
            e impõe flex-wrap:nowrap !important acima. Adotar outro
            valor significaria brigar com o core em duas frentes.
   ============================================================== */

@media (max-width: 1024px) {

	/*
	 * Três colunas viram uma. Grid em vez de flex porque o
	 * flex-wrap:nowrap !important do core vale acima de 782px —
	 * sob grid a regra deixa de se aplicar, sem !important de volta.
	 */
	.arteco-entradas .wp-block-columns {
		display: grid;
		grid-template-columns: 1fr;
	}

	/* O dispositivo dos fios não sai de cena: gira 90 graus */
	.arteco-entradas .wp-block-column {
		border-inline-end: 0;
		border-block-end: 1px solid var(--wp--custom--hairline);
	}

	.arteco-entradas .wp-block-column:last-child {
		border-block-end: 0;
	}

	/* Sem teto a linha chegaria a cerca de 105 caracteres */
	.arteco-entradas .wp-block-group {
		max-width: 640px;
	}

	/*
	 * Sem colunas irmãs não existe base comum para ancorar o CTA.
	 * A separação de 40px continua garantida pelo padding-bottom
	 * do grupo de conteúdo, declarado no pattern.
	 */
	.arteco-entradas .arteco-more {
		margin-block-start: 0;
	}
}

@media (max-width: 781px) {

	/* Empilhado, o deslocamento de 100px vira vazio sem função */
	.arteco-hero__texto {
		padding-top: 0;
	}

	/*
	 * A imagem passa a ocupar 100% da coluna: em 768px isso daria
	 * 738px de altura. O teto limita apenas a escala — a proporção
	 * 608/584 e o recorte do cover permanecem intactos.
	 */
	.arteco-hero .wp-block-cover {
		max-width: 520px;
	}

	/*
	 * O rótulo do botão pede 315px e a área útil em 360px é de 312.
	 * Ocupando a largura disponível, o rótulo não estoura.
	 */
	.arteco-hero .wp-block-buttons,
	.arteco-hero .wp-block-button,
	.arteco-hero .wp-block-button__link {
		width: 100%;
	}
}

/* ==============================================================
   Componentes globais — cabeçalho e rodapé
   ============================================================== */

/*
 * As duas faixas atravessam a largura toda e carregam o fio; o conteúdo fica
 * contido em 1240 (cabeçalho) e 392 (rodapé) pelo layout do próprio bloco.
 * A margem lateral usa a mesma fórmula da Home, para que logo e menu alinhem
 * com o hero e com as entradas.
 */
.arteco-header,
.arteco-footer {
	padding-inline: clamp(24px, 6.94vw, 92px);
}

.arteco-header {
	border-block-end: 1px solid var(--wp--custom--hairline);
}

/*
 * Vão mínimo entre logo e menu — o piso, não o vão desenhado.
 *
 * A linha do cabeçalho é `space-between`: o vão que aparece é a sobra da
 * faixa, e o blockGap de 120px da raiz age apenas como piso. Enquanto a sobra
 * é maior que o piso, o piso não é lido — em português a sobra é 121px, e é
 * ela que está desenhada hoje.
 *
 * O piso só passa a valer quando a sobra encolhe, e aí ele decide entre
 * apertar o vão ou quebrar a linha. Com 120px de piso, o menu em inglês
 * (1075) mais o logo (88) deixavam 77px de sobra numa faixa de 1240: menos
 * que o piso, e a linha quebrava — o menu descia para baixo do logo e a faixa
 * passava de 186 para 338px. Nenhuma viewport corrigia isso, porque a faixa
 * tem teto de 1240 e não cresce mais.
 *
 * 56px é piso suficiente para as duas línguas caberem nesse teto com folga, e
 * baixo o bastante para nunca ser lido em português: lá a sobra segue sendo
 * 121px e o cabeçalho renderiza pixel a pixel como hoje. Só o inglês passa a
 * usar o vão apertado — 77px — em vez de quebrar a linha.
 */
.arteco-header > .wp-block-group {
	column-gap: 56px;
}

.arteco-footer {
	border-block-start: 1px solid var(--wp--custom--hairline);
}

/*
 * Os rótulos do rodapé são menores e mais espaçados que os do menu principal:
 * 12px com tracking de 3px, contra os 14px do cabeçalho.
 */
.arteco-footer .wp-block-navigation {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 3px;
	text-transform: uppercase;
}

/*
 * A faixa do rodapé: logo, as duas colunas de links e as redes, na mesma
 * linha. O `space-between` do bloco distribui as quatro áreas e encosta as
 * redes na borda direita; o `align-items` de topo é o que faz as três
 * primeiras alinharem pela primeira linha de texto, e não pelo centro de
 * alturas diferentes.
 *
 * O ponto separador em terracota saiu daqui junto com a composição que o
 * pedia: ele existia para separar links numa linha só. Empilhados um por
 * linha, cada item já se separa sozinho, e um "·" ao fim de cada linha viraria
 * ruído. A decoração era do CSS, então some sem tocar no menu.
 */
/*
 * Dois níveis de classe porque o layout flex do bloco gera
 * `.wp-container-… { align-items: … }` a partir do alinhamento vertical, com
 * uma classe só, e o WordPress imprime esse CSS depois do da folha do tema.
 * Com uma classe a regra empatava e perdia por ordem — medi o `flex-start`
 * teimando no lugar do `center` do mobile.
 */
.arteco-footer .arteco-footer__faixa {
	align-items: flex-start;
}

/* O logo não estica junto com as colunas — mantém os 88 do bloco */
.arteco-footer__logo {
	flex: 0 0 auto;
}

/*
 * As colunas ficam alinhadas à esquerda, uma linha por link. A orientação
 * vertical vem do próprio bloco de navegação; aqui só se garante que a lista
 * não estique e que o tracking de 3px não empurre o último caractere para
 * fora da medida.
 */
.arteco-footer__coluna {
	flex: 0 1 auto;
}

.arteco-footer__coluna .wp-block-navigation-item__content {
	display: block;
}

/* As redes encostam na direita e não quebram entre si */
.arteco-footer__redes {
	flex: 0 0 auto;
}

/* Ícones sociais em tinta, sem pastilha de fundo */
.arteco-footer .wp-block-social-link {
	color: var(--wp--preset--color--tinta);
}

/*
 * Abaixo de 782 a faixa empilha — o mesmo ponto de corte que o resto do
 * sistema usa, e o mesmo em que as quatro áreas deixam de caber: somadas dão
 * 594px de conteúdo contra os 673 disponíveis, e os três intervalos de 45
 * estouram a linha. Deixadas por conta do `wrap`, elas quebravam em duas ou
 * três fileiras irregulares; empilhadas, viram a sequência que o rodapé
 * sempre teve — logo, institucional, jurídico, redes.
 *
 * Centralizado, como o rodapé era antes desta reorganização: numa coluna
 * estreita o alinhamento à esquerda deixaria o logo solto num canto. As duas
 * colunas de links precisam de dois níveis de classe para virar o
 * `align-items` que o bloco de navegação declara a partir da orientação
 * vertical.
 */
@media (max-width: 781px) {

	.arteco-footer .arteco-footer__faixa {
		flex-direction: column;
		align-items: center;
		text-align: center;
	}

	.arteco-footer__faixa .wp-block-navigation__container {
		align-items: center;
	}
}

/* ==============================================================
   Seções de página de largura total
   ============================================================== */

/*
 * As seções das páginas internas são alignfull porque pelo menos uma delas
 * carrega faixa de fundo que precisa sangrar até a borda. Isso impede que a
 * margem lateral venha do `main`: padding ali cancelaria o sangramento.
 * Mesma fórmula da Home, com teto de 80px — é a margem que o Figma usa nesta
 * página, e é o que deixa a grade de 1280 dos Três Campos caber inteira.
 */
.arteco-secao {
	padding-inline: clamp(24px, 5.56vw, 80px);
}

/* ==============================================================
   Página editorial — tipografia fluida
   --------------------------------------------------------------
   Os tamanhos vivem aqui, e não como atributo de bloco, pela mesma
   razão do deslocamento do hero da Home: valor inline não responde
   a media query e vence qualquer seletor de classe. Nenhum destes
   tamanhos existe na escala do theme.json, que fica intocado.
   ============================================================== */

/*
 * 5.83vw dá exatamente os 84px do Figma em 1440. O piso de 36px é o que
 * mantém "ARTE-ECOLOGIA" inteiro na segunda linha até 360px de viewport —
 * abaixo disso a palavra voltaria a quebrar no hífen.
 */
.arteco-manifesto h1 {
	font-size: clamp(36px, 5.83vw, 84px);
	font-weight: 400;
	line-height: 1;
	letter-spacing: -1px;
}

/*
 * Equilíbrio de altura entre os três campos, como no frame: as colunas partem
 * de 500px mesmo quando o texto é curto. O flex já as iguala entre si; este
 * piso é o que aproxima a seção da altura do Figma.
 */
.arteco-campos .wp-block-columns {
	min-height: 500px;
}

/* Citação de abertura: 1.94vw = 28px em 1440 */
.arteco-lead {
	font-size: clamp(20px, 1.94vw, 28px);
	font-weight: 300;
	line-height: 1.4;
}

/* Citação de fecho: 2.92vw = 42px em 1440 */
.arteco-citacao {
	font-family: var(--wp--preset--font-family--display);
	font-size: clamp(24px, 2.92vw, 42px);
	font-style: italic;
	font-weight: 400;
	line-height: 1.3;
}

/* Respiro da faixa de fecho: 9.79vw = 141px em 1440, piso no token de 57px */
.arteco-fecho {
	padding-block: clamp(57px, 9.79vw, 141px);
}

/*
 * Ritmo na emenda com a seção anterior.
 *
 * O blockGap de 120px da raiz é o ritmo certo entre seções que se encostam sem
 * respiro próprio. Aqui as duas vizinhas já trazem o seu: 80px de padding
 * inferior na coluna dos Campos e 141px de padding superior nesta faixa. Somados
 * ao gap herdado davam 341px de vazio — um valor que ninguém decidiu, resultado
 * de três espaçamentos independentes fazendo o mesmo trabalho no mesmo lugar.
 *
 * No Figma o vão equivalente é de ~281px. Com 57px o total fica em 278.
 * O guard de :not(:first-child) evita empurrar a faixa quando ela abrir a página.
 */
.arteco-fecho:not(:first-child) {
	margin-block-start: var(--wp--preset--spacing--70);
}

/* ==============================================================
   Página "O Instituto"
   --------------------------------------------------------------
   Tipografia e proporções específicas desta página. A grade dos
   Três Eixos vem inteira de .arteco-entradas — nenhuma grade nova.
   ============================================================== */

/*
 * Área de imagem reservada. Mesma solução do hero da Home: core/cover,
 * porque core/image sem src é descartado no site. Vazio mostra a caixa;
 * preenchido, a imagem ocupa a mesma área com object-fit e ponto focal.
 */
.arteco-media {
	min-height: 0;
}

/* Com imagem, o lavado de 20% que serve de placeholder sai de cena */
.arteco-media:has(.wp-block-cover__image-background) .wp-block-cover__background.has-background-dim-20 {
	opacity: 0;
}

.arteco-instituto .arteco-media {
	aspect-ratio: 608 / 584;
}

.arteco-origem .arteco-media {
	aspect-ratio: 456 / 500;
}

.arteco-eixos .arteco-media {
	aspect-ratio: 359.5 / 372.33;
}

/*
 * H1 institucional: mesma regra do manifesto — Playfair 400, caixa mista.
 * O frame desta página traz caixa alta, mas a decisão consolidada do sistema
 * é caixa mista, e é ela que vale. 5.83vw dá os 84px do Figma em 1440.
 */
.arteco-instituto h1 {
	font-size: clamp(36px, 5.83vw, 84px);
	font-weight: 400;
	line-height: 1;
}

/* O lead deste hero é 24/38,4, um pouco menor que o da abertura do manifesto */
.arteco-instituto .arteco-lead {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.6;
}

/* Título da Origem: 48/60 no frame */
.arteco-origem h2 {
	font-size: clamp(32px, 3.33vw, 48px);
	font-weight: 400;
	line-height: 1.25;
}

/* Corpo da Origem: 20/36 — o 20 é token, a entrelinha é desta seção */
.arteco-origem .wp-block-column p:not([class*="arteco"]) {
	line-height: 1.8;
}

/* Títulos dos eixos: 28/42 no frame */
.arteco-eixos h3 {
	font-size: clamp(22px, 1.94vw, 28px);
	line-height: 1.5;
}

/* Corpo dos eixos: 17/28,9 no frame */
.arteco-eixos .wp-block-column p:not([class*="arteco"]) {
	font-size: 17px;
	line-height: 1.7;
}

/*
 * Gutters dos Três Eixos.
 *
 * Estes 40px moravam no atributo de estilo das colunas, dentro do pattern.
 * Estilo inline vence qualquer seletor de classe e nenhuma media query o
 * alcança sem !important — foi o que impediu, até aqui, desligar o recuo
 * quando as colunas empilham. Aqui produzem exatamente o mesmo desenho:
 * 0/40, 40/40, 40/0, sobre um flex-basis de conteúdo de 29,03%.
 */
.arteco-eixos .wp-block-column {
	padding-inline-end: 40px;
}

.arteco-eixos .wp-block-column + .wp-block-column {
	padding-inline-start: 40px;
}

.arteco-eixos .wp-block-column:last-child {
	padding-inline-end: 0;
}

/* ==============================================================
   "O Instituto" — camada responsiva
   --------------------------------------------------------------
   Um único ponto de corte, 1024px, já aprovado no sistema. Abaixo
   dele a página inteira vira uma coluna editorial — que é o que já
   acontece nas Entradas da Home e nos Três Campos.

   Medido: o corpo dos eixos chega a 31 caracteres em 1100px, o
   mesmo limiar que justificou o corte nas Entradas. O lead do hero
   cai a 34 caracteres em 900 e a 29 em 782; o corpo da Origem, a
   35 em 782. Nenhum rebalanceamento de coluna recupera a faixa
   782–900, então hero e Origem empilham junto com os eixos.

   Abaixo de 781 esta página não pede nenhuma regra: os tetos de
   imagem e o padding fluido de .arteco-secao já cobrem a faixa, e
   o core empilha por conta própria.
   ============================================================== */

@media (max-width: 1024px) {

	/*
	 * Grid em vez de flex, pela mesma razão das Entradas: o
	 * flex-wrap:nowrap !important do core vale acima de 782px.
	 * Os vãos de 77px e 100px não precisam ser redeclarados — o
	 * blockGap sai por classe wp-container-* gerada, e o grid a
	 * honra como row-gap. Os flex-basis inline das colunas são
	 * ignorados sob grid.
	 */
	.arteco-instituto .wp-block-columns,
	.arteco-origem .wp-block-columns {
		display: grid;
		grid-template-columns: 1fr;
	}

	/*
	 * Medida única do bloco empilhado. 640px não é valor novo: é o
	 * teto que .arteco-entradas já usa desde a responsividade da
	 * Home. Aplicado também à imagem, é o que faz imagem e texto
	 * dividirem a mesma borda esquerda e direita.
	 *
	 * O teto limita apenas a escala máxima. A proporção declarada
	 * em cada seção, o recorte do cover e o ponto focal continuam
	 * intactos, e a área segue editável pela Biblioteca de Mídia.
	 */
	.arteco-instituto .wp-block-column,
	.arteco-origem .wp-block-column,
	.arteco-eixos .arteco-media {
		max-width: 640px;
	}

	/*
	 * Empilhado não existe gutter horizontal: o recuo lateral sai
	 * de cena e as três colunas passam a partir da mesma borda.
	 * Os 80px que separavam as colunas giram 90 graus, como os
	 * fios já fazem, e viram o vão vertical entre os eixos.
	 *
	 * O segundo seletor não é redundante: a regra de desktop acima
	 * usa combinador de irmãos e carrega três classes. Sem ele, a
	 * regra de duas classes perderia por especificidade e as
	 * colunas 2 e 3 manteriam o recuo de 40px ao empilhar.
	 */
	.arteco-eixos .wp-block-column,
	.arteco-eixos .wp-block-column + .wp-block-column {
		padding-inline: 0;
		padding-block: 40px;
	}

	.arteco-eixos .wp-block-column:first-child {
		padding-block-start: 0;
	}

	.arteco-eixos .wp-block-column:last-child {
		padding-block-end: 0;
	}
}

/* ==============================================================
   Página "Direção Artística"
   --------------------------------------------------------------
   Perfil institucional em três seções que se encostam: no frame o
   fio da Trajetória nasce exatamente na emenda com o hero, e a
   faixa da Bio na emenda seguinte.

   Nenhuma grade nova. O hero repete a composição da Origem —
   imagem à esquerda, texto centrado à direita — e a Trajetória é
   uma coluna de rótulo ao lado de uma coluna de texto.
   ============================================================== */

/*
 * Emenda com o cabeçalho.
 *
 * O blockGap de 120px da raiz separa cabeçalho, conteúdo e rodapé em todas as
 * páginas, e é o valor certo para o rodapé — o frame pede exatamente 120px
 * entre a última seção e o fio de baixo. No topo, porém, o frame abre com 80.
 *
 * O ajuste vive no `main` desta página, alcançado por :has() — o mesmo recurso
 * que o placeholder de imagem já usa — para que o respiro passe a ser o
 * padding declarado no pattern do hero e nenhuma outra página mude.
 */
main.wp-block-group:has(.arteco-direcao) {
	margin-block-start: 0;
}

/*
 * Emenda entre as seções.
 *
 * As três trazem o próprio respiro em padding, como no frame. O blockGap da
 * raiz somaria 120px a cada emenda — 320px de vão onde o frame pede 200 — e
 * empurraria os fios para fora do lugar. Duas classes no seletor porque a
 * regra do core, `.wp-container-* > * + *`, já vale uma.
 */
.arteco-secao.arteco-trajetoria,
.arteco-secao.arteco-bio {
	margin-block-start: 0;
}

/* --------------------------------------------------------------
   Rótulos desta página
   --------------------------------------------------------------
   Os três sobem de 10 para 14px em semibold. O componente base
   `.arteco-label` fica intocado: caixa alta, entrelinha e tracking
   de 3px continuam vindo dele.

   Os rótulos da Trajetória e da Bio são, além de rótulos, os
   títulos das suas seções — h2 por semântica, rótulo por desenho.
   Como h2 eles herdariam Playfair, 36px e cor tinta de
   `:root :where(h2)`, que empata em especificidade com uma classe
   só; por isso os dois seletores são de dois níveis e a família e
   a entrelinha aparecem escritas.
   -------------------------------------------------------------- */

.arteco-label--hero,
.arteco-trajetoria .arteco-label--lateral,
.arteco-bio .arteco-label--bio {
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.5;
}

/* Só o rótulo do hero abre o tracking para 4px, e só ele é teal */
.arteco-label--hero {
	letter-spacing: 4px;
	color: var(--wp--preset--color--teal);
}

.arteco-trajetoria .arteco-label--lateral {
	color: var(--wp--preset--color--ardosia-700);
}

/* A bio é chamada de imprensa, não rótulo de seção: terracota */
.arteco-bio .arteco-label--bio {
	color: var(--wp--preset--color--terracota);
}

/* --------------------------------------------------------------
   Hero — retrato e nome
   -------------------------------------------------------------- */

/*
 * Retrato vertical. Mesma área reservada do resto do sistema: core/cover com
 * .arteco-media, que já traz o min-height zerado e o lavado de placeholder
 * que sai de cena assim que existe imagem.
 */
.arteco-direcao .arteco-media {
	aspect-ratio: 487.2 / 700;
}

/*
 * Dessaturação do retrato — decisão desta página, não regra do sistema. O
 * seletor é o <img> que o cover cria quando há mídia; vazio, não há o que
 * dessaturar. Nenhuma outra imagem do tema é alcançada.
 */
.arteco-direcao .arteco-media .wp-block-cover__image-background {
	filter: grayscale(1);
}

/*
 * No frame o parágrafo de apresentação para em 640, não nos 672,8 da coluna.
 * O :not() é o mesmo da Origem: alcança o corpo sem tocar nos rótulos.
 */
.arteco-direcao .wp-block-column p:not([class*="arteco"]) {
	max-width: 640px;
}

/* --------------------------------------------------------------
   Trajetória & Formação
   -------------------------------------------------------------- */

/*
 * O fio de abertura da seção. No frame ele vem a 10% de opacidade; aqui usa o
 * hairline do theme.json, que é o único fio declarado no sistema.
 */
.arteco-trajetoria {
	border-block-start: 1px solid var(--wp--custom--hairline);
}

/* --------------------------------------------------------------
   Bio curta
   -------------------------------------------------------------- */

/*
 * O contorno da faixa. O cinza de fundo é atributo do bloco, como já acontece
 * na Citação de fecho — fica visível e editável na edição. Só a borda vive
 * aqui, porque nenhuma UI do Gutenberg a alcança com o hairline do sistema.
 */
.arteco-bio {
	border: 1px solid var(--wp--custom--hairline);
}

/*
 * Citação da bio: Playfair itálico a 24/38,4. Não é `.arteco-citacao` — esta
 * é menor, alinhada à esquerda e com entrelinha bem mais aberta (1,6 contra
 * 1,3). O componente global fica intocado. 1.67vw devolve os 24px em 1440,
 * a mesma fórmula que o lead do Instituto já usa.
 *
 * Os 1000px são a medida do frame — 83 caracteres por linha, contra os 103
 * que os 1240 do container dariam. O max-width só funciona porque o pattern
 * põe rótulo e citação dentro de um grupo de fluxo: filho direto do layout
 * `constrained`, a citação receberia do core `max-width: 1240px` e
 * `margin: auto !important`, que a limitariam e ainda a centralizariam. Um
 * nível de aninhamento resolve os dois sem !important de volta.
 */
.arteco-bio-citacao {
	font-family: var(--wp--preset--font-family--display);
	font-size: clamp(20px, 1.67vw, 24px);
	font-style: italic;
	font-weight: 400;
	line-height: 1.6;
	max-width: 1000px;
}

/* ==============================================================
   "Direção Artística" — camada responsiva
   --------------------------------------------------------------
   Um único ponto de corte, 1024px, já aprovado no sistema. Abaixo
   de 781 esta página não pede nada: o teto de 640px e o padding
   fluido de .arteco-secao já cobrem a faixa, e o H1 é o token de
   72px que a Home já entrega sem redução até 360px de viewport.
   ============================================================== */

@media (max-width: 1024px) {

	/*
	 * Grid em vez de flex, pela razão de sempre: o
	 * flex-wrap:nowrap !important do core vale acima de 782px.
	 */
	.arteco-direcao .wp-block-columns,
	.arteco-trajetoria .wp-block-columns {
		display: grid;
		grid-template-columns: 1fr;
	}

	/*
	 * Medida única do bloco empilhado — os mesmos 640px que as
	 * Entradas e o Instituto já usam. Sem o teto, o corpo da
	 * Trajetória chegaria a 91 caracteres por linha em 1024, mais
	 * largo do que os 84 que o desktop já entrega.
	 *
	 * A proporção do retrato, o recorte do cover e o ponto focal
	 * permanecem intactos: o teto limita só a escala.
	 */
	.arteco-direcao .wp-block-column,
	.arteco-trajetoria .wp-block-column {
		max-width: 640px;
	}

	/*
	 * O retrato tem o seu próprio teto, mais baixo que o da coluna.
	 * Com 640px de largura, a proporção 487,2/700 devolve 919px de
	 * altura — mais alto que qualquer imagem do sistema e quase a
	 * tela inteira de um portátil. É a mesma medida que levou o hero
	 * da Home a limitar o cover em 520px abaixo de 781.
	 *
	 * 487,2 não é número novo: é a largura que o retrato tem no
	 * frame. Empilhado, ele volta exatamente ao tamanho desenhado —
	 * 487,2 por 700 — e a proporção, o recorte e o ponto focal
	 * seguem intactos, porque o teto limita só a escala.
	 */
	.arteco-direcao .arteco-media {
		max-width: 487.2px;
	}

	/*
	 * Empilhado, o rótulo lateral vira cabeçalho da seção e os
	 * 100px que o separavam do texto viram vão vertical — respiro
	 * demais para um rótulo de 14px. Desce ao token de 24.
	 */
	.arteco-trajetoria .wp-block-columns {
		row-gap: var(--wp--preset--spacing--40);
	}
}

/* ==============================================================
   Página "Obras"
   --------------------------------------------------------------
   Composição própria: no hero o texto pesa mais que a imagem, a
   faixa é grade de três imagens sem texto e o fecho não tem faixa
   de fundo. A grade das Entradas não serve a nenhuma das três —
   ela traz fios verticais e colunas de 29,03%.

   Como nas páginas anteriores, os tamanhos que não existem na
   escala do theme.json vivem aqui, nunca como atributo de bloco:
   valor inline não responde a media query.
   ============================================================== */

/*
 * Ritmo vertical: nada a declarar.
 *
 * A primeira versão do frame encostava as seções umas nas outras, e o blockGap
 * de 120px da raiz precisava ser anulado em três pontos — cabeçalho, faixa e
 * fecho. A revisão do frame passou a abrir exatamente 120px nas quatro
 * emendas, que é o que a raiz já entrega sozinha. As três regras saíram, e o
 * respiro desta página passou a ser o do sistema.
 *
 * O padding interno do hero continua sendo o do frame: 80 no topo e 57 na
 * base, que somados ao blockGap dão os 204 e 172 desenhados.
 */

/* --------------------------------------------------------------
   Hero — tese e obra de capa
   -------------------------------------------------------------- */

/*
 * Obra de capa: 549 por 584 no frame, quase quadrada. Área reservada pelo
 * mesmo core/cover com .arteco-media do resto do sistema — vazio mostra a
 * caixa, preenchido a imagem ocupa a mesma área com recorte e ponto focal
 * nativos. Sem ponto focal declarado: o centro é o padrão e é o que o frame
 * mostra.
 */
.arteco-obras .arteco-media {
	aspect-ratio: 549 / 584;
}

/*
 * Medida do bloco de texto. No frame a coluna tem 672,8 mas o texto para em
 * 640 — o mesmo teto que as Entradas, o Instituto e a Direção já usam. Vive
 * no grupo, e não na coluna, para não encurtar o rótulo nem o título.
 */
.arteco-obras-corpo {
	max-width: 640px;
}

/*
 * Corpo da tese: 18/29,25 no frame. O primeiro parágrafo é o lead e fica com
 * os 20/28 da raiz; do segundo em diante o texto desce para 18. O `p + p`
 * também alcança um quarto parágrafo que a edição venha a acrescentar, que é
 * o comportamento certo. O 18 não vira token: é medida desta seção.
 */
.arteco-obras-corpo p + p {
	font-size: 18px;
	line-height: 1.625;
}

/* --------------------------------------------------------------
   Faixa de obras
   -------------------------------------------------------------- */

/*
 * Três áreas de mesma largura, sem flex-basis declarado — o core já divide o
 * container em partes iguais. Com o vão de 32px cada uma fica com 392 dos 397
 * do frame.
 *
 * A proporção é a do frame, 397 por 380. As três são iguais de propósito: os
 * 388 da terceira imagem são lapso de composição, não hierarquia.
 */
.arteco-faixa-obras .arteco-media {
	aspect-ratio: 397 / 380;
}

/* --------------------------------------------------------------
   Fecho — meta institucional
   -------------------------------------------------------------- */

/*
 * Sem fio de abertura.
 *
 * A primeira versão do frame separava a vitrine do fecho com um hairline; a
 * revisão o removeu e deu fundo próprio à faixa, que passou a se distinguir
 * pelo tom e não por uma linha. O `border-block-start` saiu daqui.
 *
 * O fundo #e9e9e9 vive como atributo do bloco, no pattern, e não nesta folha —
 * é a mesma escolha da Citação de fecho e da Bio curta: assim ele fica visível
 * e editável no Gutenberg.
 */

/*
 * Citação de meta: Playfair itálico a 24/41,6 — a revisão do frame baixou o
 * corpo de 26 para 24 e manteve a entrelinha, que por isso abriu de 1,6 para
 * 1,733. Não é .arteco-citacao, que é quase o dobro (42) e bem mais fechada
 * (1,3), nem .arteco-bio-citacao, que tem o mesmo corpo mas é alinhada à
 * esquerda e fecha em 1,6. Peso 400 e não o 500 do frame: o Google Fonts do
 * tema carrega apenas 1,400 em itálico, e sintetizar peso muda o desenho da
 * letra.
 *
 * 1.67vw devolve os 24px em 1440, a mesma fórmula do lead do Instituto e da
 * citação da Bio.
 */
/*
 * O pull quote do ensaio entra AQUI, e não numa regra própria: seria a quinta
 * citação em Playfair itálico, todas variando só em tamanho e entrelinha. A
 * medida desta serve exatamente ao corpo de 764 do post, então o seletor foi
 * agrupado em vez de duplicado. A caixa do pull quote — os dois fios e a
 * centralização — fica na seção do Blog, porque é layout, não tipografia.
 *
 * As quatro citações do tema seguem pendentes de consolidação num componente
 * só com modificador de tamanho; este agrupamento é o primeiro passo.
 */
.arteco-obras-citacao,
.arteco-post-conteudo blockquote {
	font-family: var(--wp--preset--font-family--display);
	font-size: clamp(20px, 1.67vw, 24px);
	font-style: italic;
	font-weight: 400;
	line-height: 1.733;
}

/* ==============================================================
   "Obras" — camada responsiva
   --------------------------------------------------------------
   Os dois pontos de corte do sistema. Em 1024 o hero empilha; em
   781 o core já empilha a faixa por conta própria e só o botão
   pede ajuste.
   ============================================================== */

@media (max-width: 1024px) {

	/*
	 * Grid em vez de flex, pela razão de sempre: o
	 * flex-wrap:nowrap !important do core vale acima de 782px. A ordem
	 * do DOM já entrega a tese e depois a obra de capa.
	 *
	 * Empilhados, os 18px de vão entre as colunas viram vão vertical
	 * entre um bloco de texto e uma imagem grande — pouco para essa
	 * emenda. Sobe ao token de 45.
	 */
	.arteco-obras .wp-block-columns {
		display: grid;
		grid-template-columns: 1fr;
		row-gap: var(--wp--preset--spacing--60);
	}

	/* Mesma medida do bloco empilhado que Instituto e Direção usam */
	.arteco-obras .wp-block-column {
		max-width: 640px;
	}

	/*
	 * A obra de capa tem teto próprio, mais baixo que o da coluna: os
	 * 549px que ela tem no frame. Empilhada, volta exatamente ao
	 * tamanho desenhado, e a proporção, o recorte e o ponto focal
	 * seguem intactos — o teto limita só a escala.
	 */
	.arteco-obras .arteco-media {
		max-width: 549px;
	}
}

@media (max-width: 781px) {

	/*
	 * A faixa empilha sozinha: o core zera o flex-basis das colunas
	 * abaixo de 782. Só o botão pede ajuste, e é o mesmo que o hero da
	 * Home já faz nesta largura.
	 */
	.arteco-citacao-obras .wp-block-buttons,
	.arteco-citacao-obras .wp-block-button,
	.arteco-citacao-obras .wp-block-button__link {
		width: 100%;
	}
}

/* ==============================================================
   Página "Programas"
   --------------------------------------------------------------
   Índice editorial: rótulo e título, e abaixo uma linha por
   programa — nome à esquerda, descrição e saída à direita,
   separadas por fio. É a primeira página do sistema sem nenhuma
   imagem, e a primeira a usar dourado como cor de rótulo e
   ardosia-700 como cor de corpo de texto.

   Nenhuma grade existente servia: as das Entradas, dos Campos e
   dos Eixos são de três colunas com fios verticais; aqui são duas
   colunas com fios horizontais.
   ============================================================== */

/*
 * Rótulo do índice. Variante de .arteco-eyebrow, que já entrega os 12px em
 * peso 500, a entrelinha de 1,5 e a caixa alta. A base fica intocada: só o
 * tracking, que cai de 3 para 1,5, e a cor, que passa a dourado, moram aqui.
 */
.arteco-eyebrow--programas {
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--dourado);
}

/*
 * Vão entre rótulo e título.
 *
 * `.arteco-eyebrow + *` já reserva 18px — é a exceção do hero da Home, onde o
 * rótulo abre mais perto do título que o resto da coluna. Aqui o frame pede
 * 24, e as duas regras empatam em especificidade com o blockGap que o core
 * gera por classe wp-container-*, de modo que a ordem de impressão decidiria
 * o resultado. Três níveis de seletor tiram a dúvida.
 */
.arteco-programas .arteco-eyebrow--programas + * {
	margin-block-start: var(--wp--preset--spacing--40);
}

/*
 * Redução do título em telas estreitas.
 *
 * "Programas" é a primeira palavra do sistema que não cabe no token de 72px:
 * mede 330,3px em Playfair e não tem onde quebrar. A largura útil é o viewport
 * menos os 48px de margem lateral da seção, de modo que a palavra cabe até
 * 390px de viewport (342 úteis) e passa a ser cortada em 375 (327) e em 360
 * (312) — sem barra de rolagem, porque o excesso é clipado.
 *
 * O teto de 72px é o token e continua valendo em tudo acima de 400px: o termo
 * em vw só passa à frente abaixo disso. Nada muda no desktop, no tablet nem na
 * maior parte dos celulares, e o H1 global do theme.json fica intocado — a
 * regra alcança apenas o título desta página.
 */
.arteco-programas h1 {
	font-size: clamp(48px, 18vw, 72px);
}

/*
 * Emenda entre o título e o índice. O respiro de 80px vive no padding do hero,
 * como no frame; o blockGap de 120px da raiz somaria a ele e afastaria o
 * primeiro fio. No topo e no rodapé da página o blockGap continua valendo: o
 * frame pede 138px do fio do cabeçalho ao rótulo, que são os 120 da raiz mais
 * os 18 de padding do hero, e 116 da última linha ao rodapé, que são os 120.
 */
.arteco-secao.arteco-programas-lista {
	margin-block-start: 0;
}

/*
 * Recuo do conteúdo em relação aos fios. No frame o fio mede 1242 e o texto
 * 1194 — 24px de cada lado. Vive no CSS, e não como atributo de bloco, porque
 * precisa colapsar em mobile, onde somaria à margem lateral da seção.
 *
 * O box-sizing é o que faz o rótulo e o título alinharem com as linhas.
 * O WordPress não declara border-box globalmente: quem o traz são os blocos
 * que embrulham conteúdo, como .wp-block-group — é o caso das linhas, para as
 * quais esta declaração é redundante. O <h1> e o <p> do rótulo, não. Sem ela,
 * o `max-width: 1240px` do layout `constrained` limita a caixa de conteúdo
 * deles, os 24px de recuo ficam do lado de fora, a caixa cresce para 1265 e o
 * `margin: auto` do core perde a folga para centralizar — o texto do hero
 * começava 12,5px à esquerda do texto das linhas em 1440.
 */
.arteco-programas > *,
.arteco-programa {
	box-sizing: border-box;
	padding-inline: var(--wp--preset--spacing--40);
}

/* --------------------------------------------------------------
   Linha de programa
   -------------------------------------------------------------- */

/*
 * O fio de abertura de cada linha, no hairline do theme.json — o frame traz
 * 0,25 de opacidade, mas 0,3 é o único fio declarado no sistema e a diferença
 * não se vê. A borda mora no elemento da linha, que ocupa o container inteiro,
 * então ela atravessa os 1240 enquanto o texto para nos 1192.
 *
 * O respiro de 45px é dos dois lados, e vive aqui e não no pattern porque a
 * linha é feita para ser duplicada: em atributo de bloco, cada cópia poderia
 * divergir da anterior sem que ninguém percebesse.
 */
.arteco-programa {
	border-block-start: 1px solid var(--wp--custom--hairline);
	padding-block: var(--wp--preset--spacing--60);
}

/*
 * Nome do programa: 24/33 no frame, contra os 36/1,1111 que `:root :where(h2)`
 * entrega. Peso 400 e família vêm de `elements.heading` e não se repetem aqui.
 * Peso 500 do frame não é reproduzido: o Google Fonts do tema carrega apenas
 * 400 e 700 em Playfair, e sintetizar peso muda o desenho da letra.
 *
 * 1.67vw devolve os 24px em 1440 — a mesma fórmula do lead do Instituto.
 */
.arteco-programa h2 {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

/*
 * Corpo da descrição: 17/27,63 em peso 400 e ardosia-700. Os 17px já existem
 * nos Três Eixos; o peso e a cor são desta página — é texto de índice, que
 * pede mais presença que o corpo editorial em peso 300.
 */
.arteco-programa-texto {
	font-size: 17px;
	font-weight: 400;
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Saída da linha. Tratamento único para todos os links do índice — o frame
 * traz dois, um em tinta com fio dourado e outro inteiro em teal, sem regra
 * que explique a diferença.
 *
 * O sublinhado é text-decoration e não borda: acompanha a quebra de linha,
 * recua do texto por text-underline-offset e não cria caixa. O foco continua
 * vindo do outline dourado que o theme.json declara para links.
 */
.arteco-programa-link {
	font-size: 15px;
	font-weight: 500;
	line-height: 1.5;
}

.arteco-programa-link a {
	color: var(--wp--preset--color--tinta);
	text-decoration: underline;
	text-decoration-color: var(--wp--preset--color--dourado);
	text-decoration-thickness: 1px;
	text-underline-offset: 6px;
}

.arteco-programa-link a:hover {
	text-decoration-thickness: 2px;
}

/*
 * Status de programa sem destino. Não é link e não deve parecer um: sem
 * sublinhado, sem cor de link e sem cursor de ponteiro. Terracota, caixa alta
 * por CSS e 12px — o mesmo tamanho do rótulo do índice.
 */
.arteco-programa-status {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 1.125px;
	text-transform: uppercase;
	color: var(--wp--preset--color--terracota);
}

/* ==============================================================
   "Programas" — camada responsiva
   ============================================================== */

@media (max-width: 1024px) {

	/*
	 * No frame sobram 218px vazios à direita da descrição — é o que dá
	 * medida de leitura ao texto em 1440. Abaixo disso o espaço faz
	 * falta, e a coluna de texto o absorve.
	 *
	 * O seletor é longo porque o do core também é: acima de 782px,
	 * `.wp-block-columns:not(.is-not-stacked-on-mobile) >
	 * .wp-block-column[style*=flex-basis]` zera o flex-grow de toda
	 * coluna com largura declarada, e são quatro níveis. Repetir o
	 * seletor de atributo e somar o filho direto leva a cinco, que
	 * decide sem depender da ordem de impressão das folhas.
	 */
	.arteco-programa .wp-block-columns > .wp-block-column[style*="flex-basis"]:last-child {
		flex-grow: 1;
	}
}

@media (max-width: 781px) {

	/*
	 * Empilhado, o recuo de 24px somaria à margem lateral da seção e
	 * estreitaria o texto sem motivo. O fio continua atravessando o
	 * container inteiro; o conteúdo passa a alinhar com as pontas dele.
	 *
	 * A linha empilha sozinha — o core zera o flex-basis das colunas
	 * abaixo de 782 —, e a ordem do DOM já entrega nome, descrição e
	 * saída nessa sequência.
	 */
	.arteco-programas > *,
	.arteco-programa {
		padding-inline: 0;
	}
}

/* ==============================================================
   Página "Publicações"
   --------------------------------------------------------------
   Porta editorial da Editora Solano: uma seção só, em coluna
   única alinhada à esquerda — rótulo, manifesto, parágrafo e
   saída. É a segunda página do sistema sem nenhuma imagem, e a
   mais simples de todas: quatro blocos e nenhuma grade.

   O ritmo vertical é o da raiz. O frame abre 117px abaixo do fio
   do cabeçalho e fecha 116 acima do rodapé — os 120 do blockGap,
   com o arredondamento de sempre. A seção não declara padding.
   ============================================================== */

/*
 * Rótulo da parceria editorial. Terceira variante de .arteco-eyebrow, que já
 * entrega os 12px em peso 500, a entrelinha de 1,5 e a caixa alta. A base fica
 * intocada: só o tracking, que cai de 3 para 2, e a cor, que passa a terracota.
 */
.arteco-eyebrow--publicacoes {
	letter-spacing: 2px;
	color: var(--wp--preset--color--terracota);
}

/*
 * Vão entre rótulo e título — mesma disputa da página Programas.
 * `.arteco-eyebrow + *` reserva 18px, exceção do hero da Home, e empata em
 * especificidade com o blockGap que o core gera por classe wp-container-*.
 * Três níveis de seletor decidem sem depender da ordem de impressão.
 */
.arteco-publicacoes .arteco-eyebrow--publicacoes + * {
	margin-block-start: var(--wp--preset--spacing--50);
}

/*
 * Medida de leitura desta página.
 *
 * A primeira versão do frame trazia só a coluna de texto, e a largura de 737
 * precisava de um teto declarado nos filhos de um grupo em fluxo. A revisão do
 * frame acrescentou a imagem à direita: agora são duas colunas, e os 737 são a
 * própria coluna da esquerda — 59,44% dos 1240. O teto saiu; a medida passou a
 * ser estrutural.
 *
 * O parágrafo continua parando antes do título, como no frame: 625 contra os
 * 737 da coluna.
 */
.arteco-publicacoes-bloco > .arteco-publicacoes-texto {
	max-width: 625px;
}

/*
 * Área de imagem: 502 por 783 no frame — o retrato mais vertical do sistema,
 * contra os 0,94 de Obras e os 0,696 da Direção. Área reservada pelo mesmo
 * core/cover com .arteco-media do resto do tema: vazio mostra a caixa,
 * preenchido a imagem ocupa a mesma área com recorte e ponto focal nativos.
 * Sem filtro, sem dessaturação e sem sobreposição no resultado final — o
 * lavado de 20% é só o placeholder, e .arteco-media já o desliga assim que
 * existe mídia.
 */
.arteco-publicacoes .arteco-media {
	aspect-ratio: 502 / 783;
}

/*
 * Redução do título em telas estreitas — mesma regra e mesma razão da página
 * Programas. Aqui o H1 é uma frase inteira, com quatro palavras longas em vez
 * de uma: "Instituto", "pesquisa", "termina" e "parede". O teto de 72px é o
 * token e continua valendo em tudo acima de 400px; o termo em vw só passa à
 * frente abaixo disso. O H1 global do theme.json fica intocado.
 */
.arteco-publicacoes h1 {
	font-size: clamp(48px, 18vw, 72px);
}

/* ==============================================================
   "Publicações" — camada responsiva
   ============================================================== */

@media (max-width: 781px) {

	/*
	 * O core empilha as colunas por conta própria, e a ordem do DOM
	 * já entrega o texto antes da imagem. Só o vão pede ajuste: no
	 * desktop as duas colunas se encostam de propósito, e na vertical
	 * esse zero grudaria a imagem no botão.
	 */
	.arteco-publicacoes .wp-block-columns {
		row-gap: var(--wp--preset--spacing--60);
	}
}

/* ==============================================================
   Linha com fio — componente compartilhado
   --------------------------------------------------------------
   A página da Residência é construída quase inteira sobre um mesmo
   desenho: informações em linhas separadas por fio horizontal.
   Aparece quatro vezes — ficha do programa, cinco eixos, grade do
   seminário e perguntas frequentes — em duas, três ou uma coluna.
   Em vez de quatro implementações paralelas, uma base e três
   modificadores, como .arteco-entradas já faz com as Entradas, os
   Campos e os Eixos.

   O fio de cada linha fica embaixo; o de cima é do primeiro irmão.
   Assim a série abre e fecha com fio, como no frame, sem depender
   de um elemento envoltório só para carregar a borda.

   A base serve tanto a um core/columns quanto a um core/details: o
   FAQ é a mesma linha, com a pergunta no lugar da primeira coluna.
   O margin zerado desliga o 1.75em que o core reserva abaixo de
   todo bloco de colunas.
   ============================================================== */

.arteco-linha {
	border-block-end: 1px solid var(--wp--custom--hairline);
	padding-block: var(--wp--preset--spacing--40);
	margin-block-end: 0;
}

.arteco-linha:first-child {
	border-block-start: 1px solid var(--wp--custom--hairline);
}

/* Os eixos respiram mais: 32 no frame, contra os 24 das demais */
.arteco-linha--eixo {
	padding-block: var(--wp--preset--spacing--50);
}

/* O cabeçalho da grade é só rótulo: 16 no frame */
.arteco-linha--cabecalho {
	padding-block: var(--wp--preset--spacing--30);
}

/*
 * Rótulo de linha — a coluna da esquerda da ficha e o cabeçalho da grade do
 * seminário. Não é .arteco-label nem .arteco-eyebrow: aqueles são rótulos de
 * seção, este é rótulo de campo, e vive dentro da linha.
 */
.arteco-linha__rotulo {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

/* ==============================================================
   Página "Residência Artecologia Berlim"
   --------------------------------------------------------------
   A página mais longa e mais estratégica do site: é o destino de
   todos os CTAs da Residência. Cinco seções, nenhuma imagem.

   O ritmo vertical é o da raiz. O frame traz vãos irregulares
   entre as seções — de 68 a 208 —, mas os frames revisados de
   Obras, Programas e Publicações convergiram todos para os 120 do
   blockGap, e é esse o ritmo adotado aqui. Nenhuma seção declara
   margem: só a faixa do programa tem padding próprio.
   ============================================================== */

/* --------------------------------------------------------------
   Rótulos desta página
   -------------------------------------------------------------- */

/*
 * Duas variantes de .arteco-eyebrow. Diferente das de Programas e
 * Publicações, que mexiam só em tracking e cor, estas também mudam peso e
 * entrelinha: no frame os rótulos da Residência são 12/16 em semibold, contra
 * os 12/18 em medium da base. A base continua intocada.
 */
.arteco-eyebrow--residencia,
.arteco-eyebrow--materiais {
	font-weight: 600;
	line-height: 1.3333;
	letter-spacing: 1.2px;
}

.arteco-eyebrow--residencia {
	color: var(--wp--preset--color--dourado);
}

.arteco-eyebrow--materiais {
	color: var(--wp--preset--color--teal);
}

/*
 * Vão depois do rótulo. `.arteco-eyebrow + *` reserva 18px — exceção do hero
 * da Home — e empata em especificidade com o blockGap gerado pelo core. Três
 * níveis decidem, como nas páginas Programas e Publicações.
 */
.arteco-residencia-hero .arteco-eyebrow--residencia + *,
.arteco-materiais .arteco-eyebrow--materiais + * {
	margin-block-start: var(--wp--preset--spacing--40);
}

/* --------------------------------------------------------------
   Cabeçalhos de seção — um só desenho
   --------------------------------------------------------------
   O frame alterna dois idiomas sem regra aparente: Ficha,
   Apresentação e Eixos em Playfair Medium caixa mista; Inscrições,
   Seminário e FAQ em Playfair Bold CAIXA ALTA, e o de Inscrições
   ainda a 30 em vez de 24. Aqui todos viram o mesmo: Playfair 400,
   caixa mista, 24/33 — peso e família herdados de elements.heading
   no theme.json, que fica intocado.

   Os seletores são de dois níveis porque `:root :where(h2)` empata
   com uma classe só. O h4 dos eixos entra na mesma regra: o
   theme.json não declara h4, e sem isto ele cairia no tamanho
   padrão do navegador.
   -------------------------------------------------------------- */

.arteco-ficha h2,
.arteco-residencia-programa h2,
.arteco-residencia-programa h3,
.arteco-residencia-materiais h3,
.arteco-residencia-fecho h2,
.arteco-linha--eixo h4 {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

/* --------------------------------------------------------------
   Hero
   -------------------------------------------------------------- */

/*
 * Medida de leitura: 896 no frame, com a chamada parando antes, em 768. Mesma
 * solução da página Publicações — a seção fica em 1240 e o grupo interno,
 * filho direto do layout `constrained`, recebe dele a centralização que o põe
 * na borda da grade; o teto desce para os filhos do grupo, que estão em fluxo
 * e por isso alinham à esquerda. Sem !important de volta.
 */
.arteco-residencia-hero__bloco > * {
	max-width: 896px;
}

.arteco-residencia-hero__bloco > .arteco-residencia-lead {
	max-width: 768px;
}

/*
 * Redução do título em telas estreitas. "Artecologia" tem onze caracteres e
 * não quebra: é a palavra mais larga de todo o projeto, e por isso o piso e o
 * termo em vw são mais agressivos que os de Programas e Publicações. O teto de
 * 72px continua sendo o token do theme.json, que fica intocado.
 */
.arteco-residencia-hero h1 {
	font-size: clamp(40px, 15vw, 72px);
}

/* Chamada: 24/39 no frame — 1.67vw devolve os 24 em 1440 */
.arteco-residencia-lead {
	font-size: clamp(20px, 1.67vw, 24px);
	font-weight: 400;
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Caixa de data, local e formato. É um core/group comum: o padding é atributo
 * do bloco e fica editável; só a borda vive aqui, porque nenhuma UI do
 * Gutenberg alcança o hairline do sistema — a mesma razão da Bio curta.
 * O fit-content faz a caixa abraçar o texto no desktop e preencher a coluna
 * quando o texto quebra.
 */
.arteco-datas {
	width: fit-content;
	max-width: 100%;
	border: 1px solid var(--wp--custom--hairline);
}

.arteco-datas p {
	font-size: 16px;
	font-weight: 500;
	line-height: 1.5;
}

/* --------------------------------------------------------------
   Ficha do Programa
   -------------------------------------------------------------- */

/* Valor do campo: 16/24 no frame. O 16 não vira token — é medida da linha */
.arteco-ficha .arteco-linha p:not([class*="arteco"]) {
	font-size: 16px;
	line-height: 1.5;
}

/* --------------------------------------------------------------
   Faixa do programa — Apresentação e Cinco Eixos
   -------------------------------------------------------------- */

/* Corpo da apresentação: 18/29,25, a mesma medida do corpo de Obras */
.arteco-apresentacao p {
	font-size: 18px;
	line-height: 1.625;
}

/*
 * O fio que abre os Cinco Eixos, e o respiro de 65 do frame até o título. A
 * borda mora no grupo, e não em um separador no conteúdo, para que a edição
 * não a apague sem querer — mesma escolha da Trajetória e do fecho de Obras.
 */
.arteco-eixos-residencia {
	border-block-start: 1px solid var(--wp--custom--hairline);
	padding-block-start: var(--wp--preset--spacing--70);
}

/*
 * Numeral do eixo: 20/28 em semibold e dourado, o único numeral do sistema.
 *
 * Pedia 700, que não está entre os pesos carregados do IBM Plex Sans — a
 * requisição traz 300, 400, 500, 600 e o itálico 400. Medi o que o navegador
 * fazia com isso: em vez de sintetizar um negrito falso, ele resolvia para o
 * 600 disponível, e o numeral já vinha desenhado em 600 (larguras idênticas
 * com 700 e com 600 pedidos). A regra passa a dizer o que sempre saiu, e a
 * folha deixa de pedir um peso que ninguém entrega — aparência inalterada.
 *
 * Se o numeral tiver mesmo de ser 700, o caminho é o inverso: acrescentar o
 * 700 à requisição de fontes, ao custo de mais um arquivo baixado.
 */
.arteco-eixo-numero {
	font-size: var(--wp--preset--font-size--body);
	font-weight: 600;
	line-height: 1.4;
	letter-spacing: 1px;
	color: var(--wp--preset--color--dourado);
}

.arteco-linha--eixo p:not([class*="arteco"]) {
	font-size: 16px;
	line-height: 1.5;
	color: var(--wp--preset--color--ardosia-700);
}

/* --------------------------------------------------------------
   Materiais do ateliê e Seminário
   -------------------------------------------------------------- */

/* O cinza da caixa é atributo do bloco; só o contorno vive aqui */
.arteco-materiais {
	border: 1px solid var(--wp--custom--hairline);
}

/*
 * Fala do ateliê. É a única citação do sistema em IBM Plex, e não em Playfair:
 * decisão de conteúdo — é uma fala de processo, não uma citação institucional.
 * A família vem da raiz e não se repete aqui.
 */
.arteco-materiais-citacao {
	font-size: var(--wp--preset--font-size--body);
	font-style: italic;
	font-weight: 400;
	line-height: 1.625;
}

/* No seminário o rótulo é menor que o da ficha: 12/16 contra 14/20 */
.arteco-seminario .arteco-linha__rotulo {
	font-size: var(--wp--preset--font-size--tag);
	line-height: 1.3333;
	letter-spacing: 0.6px;
}

.arteco-seminario .arteco-linha p:not([class*="arteco"]) {
	font-size: var(--wp--preset--font-size--ui);
	line-height: 1.4285;
}

/* --------------------------------------------------------------
   Inscrições e Perguntas Frequentes
   -------------------------------------------------------------- */

.arteco-inscricoes p {
	font-size: 16px;
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * O FAQ é um core/details por pergunta — nativo, sem JavaScript e sem bloco
 * personalizado. Fechado por padrão: `showContent` já nasce falso no core.
 * O teclado, o foco e o anúncio de recolhido e expandido vêm do navegador;
 * não há ARIA para escrever nem para errar.
 *
 * A pergunta ocupa a largura inteira do resumo, de modo que o alvo de toque
 * seja a linha toda, e o triângulo padrão sai de cena em favor do sinal de
 * mais e de menos — o triângulo do navegador destoa do editorial.
 */
.arteco-faq summary {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--40);
	font-size: 18px;
	font-weight: 500;
	line-height: 1.5556;
	list-style: none;
}

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

.arteco-faq summary::after {
	content: "+";
	flex: 0 0 auto;
	font-size: var(--wp--preset--font-size--body);
	font-weight: 400;
	line-height: 1;
	color: var(--wp--preset--color--ardosia-700);
}

/* U+2212 é o sinal de menos, não o hífen: tem a mesma largura do mais */
.arteco-faq details[open] summary::after {
	content: "\2212";
}

/* O foco não vem de elements.link do theme.json: summary não é link */
.arteco-faq summary:focus-visible {
	outline: 2px solid var(--wp--preset--color--dourado);
	outline-offset: 2px;
}

.arteco-faq summary + * {
	margin-block-start: var(--wp--preset--spacing--20);
}

.arteco-faq .arteco-linha p {
	font-size: var(--wp--preset--font-size--ui);
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/* ==============================================================
   "Residência" — camada responsiva
   --------------------------------------------------------------
   Um ponto de corte só. Em 1024 nada quebra: as linhas continuam
   legíveis em duas e três colunas. Em 781 o core empilha as
   colunas por conta própria, e só três coisas pedem ajuste.
   ============================================================== */

@media (max-width: 781px) {

	/*
	 * Empilhadas, as colunas da linha ficariam coladas: o vão
	 * declarado é zero, porque no desktop elas se encostam de
	 * propósito. Na vertical, o zero vira texto grudado.
	 */
	.arteco-linha.wp-block-columns {
		row-gap: var(--wp--preset--spacing--10);
	}

	/*
	 * O cabeçalho da grade do seminário só faz sentido enquanto há
	 * colunas. Empilhado, "Quando / Horário / O quê" viraria três
	 * linhas soltas antes dos dados. Sai do desenho, mas continua
	 * na árvore de acessibilidade — os leitores de tela seguem
	 * anunciando o rótulo de cada campo.
	 */
	.arteco-linha--cabecalho {
		position: absolute;
		width: 1px;
		height: 1px;
		padding: 0;
		border: 0;
		overflow: hidden;
		clip-path: inset(50%);
		white-space: nowrap;
	}

	/* Mesmo comportamento do hero da Home e do fecho de Obras */
	.arteco-residencia-fecho .wp-block-buttons,
	.arteco-residencia-fecho .wp-block-button,
	.arteco-residencia-fecho .wp-block-button__link {
		width: 100%;
	}
}

/* ==============================================================
   Campo de formulário — componente compartilhado
   --------------------------------------------------------------
   O tema não tinha nenhum estilo de campo até aqui: nem input,
   nem textarea, nem label. Este é o primeiro, e vale para todo
   formulário que o site vier a ter.

   ATENÇÃO: esta classe é só a caixa. Não há <input>, não há <form>
   e não há envio — é um grupo com um parágrafo dentro, editável pelo
   Gutenberg e impossível de digitar ou submeter. Hoje sobra um único
   uso: o campo do boletim, que segue sem serviço de newsletter. Os
   campos reais de contato são do Fluent Forms e vestem o mesmo
   desenho mais abaixo, em .arteco-form.

   O frame trazia três tratamentos diferentes de campo na mesma
   página — bordas de 1 e 2px, raios de 0, 4 e 10, um com fundo e
   dois sem — e quatro cores fora da paleta. Aqui é um só: fio do
   sistema, raio de 4, sem fundo, e cada cor trocada pelo seu token.
   O 4 é o raio que o botão do sistema já usava; a revisão do frame
   o estendeu aos campos, e as duas famílias passam a combinar.
   ============================================================== */

.arteco-form-field {
	border: 1px solid var(--wp--custom--hairline);
	border-radius: 4px;
}

/* A caixa de mensagem tem a altura do frame; as demais, a do texto */
.arteco-form-field--mensagem {
	min-height: 167px;
}

/*
 * Rótulo do campo. Mesmas métricas de `.arteco-linha__rotulo`, que a página da
 * Residência trouxe, mudando só a cor: lá é rótulo de linha em ardosia, aqui é
 * rótulo de campo em tinta. São dois papéis diferentes e por isso duas classes;
 * se um terceiro aparecer, vale consolidar.
 *
 * O frame pede preto puro. Tinta é o preto do sistema.
 */
.arteco-form-rotulo {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--tinta);
}

/*
 * Texto de exemplo dentro do campo. O frame usa #888; aqui é ardosia-700 a
 * meia opacidade — o mesmo tom que o próprio frame usa no campo do boletim,
 * e que mantém o vínculo com o token em vez de fixar um cinza solto.
 */
.arteco-form-placeholder {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
	opacity: 0.5;
}

/* ==============================================================
   Página "Contato e Participação"
   --------------------------------------------------------------
   Página de roteamento: quatro vias de aproximação, cada uma com
   seu meio. Duas levam a e-mail, uma ao formulário e uma ao
   boletim.

   O frame intercala duas colunas de fluxo independente. A
   implementação empilha quatro seções, preservando todos os
   elementos — a diferença está registrada na entrega.

   Ritmo vertical: o da raiz, como nas páginas revisadas. Nenhuma
   seção declara margem.
   ============================================================== */

/*
 * Quinta variante de .arteco-eyebrow, e a menor de todas: a base já entrega os
 * 12px, a entrelinha de 1,5 e a caixa alta. Só o peso, o tracking e a cor
 * mudam. A base continua intocada.
 */
.arteco-eyebrow--contato {
	font-weight: 600;
	letter-spacing: 2.4px;
	color: var(--wp--preset--color--dourado);
}

/*
 * Vão entre rótulo e título. `.arteco-eyebrow + *` reserva 18px e empata com o
 * blockGap; três níveis decidem, como em Programas, Publicações e Residência.
 */
.arteco-contato-abertura .arteco-eyebrow--contato + * {
	margin-block-start: var(--wp--preset--spacing--50);
}

/*
 * Redução do título em telas estreitas. A frase tem "Instituto" e "aproximar",
 * ambas longas, e o mesmo piso agressivo da Residência dá conta. O teto de
 * 72px é o token; o theme.json fica intocado.
 */
.arteco-contato h1 {
	font-size: clamp(40px, 15vw, 72px);
}

/*
 * Cabeçalhos de seção — um só desenho, como na Residência. O frame traz
 * Playfair Medium; peso 500 não é carregado, e 400 é o do sistema.
 * Dois níveis de seletor porque `:root :where(h3)` empata com uma classe.
 */
.arteco-contato h3 {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

/* --------------------------------------------------------------
   Canais institucionais
   -------------------------------------------------------------- */

/* Corpo dos canais: 16/26 no frame */
.arteco-canal p:not([class*="arteco"]),
.arteco-formulario-bloco > p:not([class*="arteco"]) {
	font-size: 16px;
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Saída do canal — dois tratamentos, um por natureza de canal.
 *
 * Na primeira versão eu unifiquei os dois sublinhados em dourado, porque o
 * frame trazia teal e terracota sem nenhuma regra que explicasse a diferença.
 * A revisão manteve as duas cores e a regra veio junto: a diferença é
 * semântica, não decorativa — teal para o canal institucional, terracota para
 * imprensa. Com a regra declarada, o par volta.
 *
 * A base guarda o que os dois têm em comum; a variante traz só a cor do
 * sublinhado. O texto é tinta nos dois, como no frame.
 *
 * O sublinhado é text-decoration e não borda: acompanha a quebra de linha e
 * recua do texto sem criar caixa. O foco continua vindo do outline dourado
 * que o theme.json declara para links.
 */
.arteco-contato-link {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
}

.arteco-contato-link a {
	color: var(--wp--preset--color--tinta);
	text-decoration: underline;
	text-decoration-thickness: 2px;
	text-underline-offset: 6px;
}

.arteco-contato-link a:hover {
	text-decoration-thickness: 3px;
}

.arteco-contato-link--instituicoes a {
	text-decoration-color: var(--wp--preset--color--teal);
}

.arteco-contato-link--imprensa a {
	text-decoration-color: var(--wp--preset--color--terracota);
}

/*
 * Canal sem endereço definido. Não é link e não deve parecer um: sem
 * sublinhado, sem cor de link, em itálico para se distinguir da descrição.
 * Some assim que o e-mail da imprensa existir.
 */
.arteco-contato-pendente {
	font-size: var(--wp--preset--font-size--ui);
	font-style: italic;
	color: var(--wp--preset--color--ardosia-700);
}

/* --------------------------------------------------------------
   Formulário
   --------------------------------------------------------------
   A revisão do frame removeu a área de imagem que ficava sob o
   formulário. Com ela saiu a regra de proporção: esta página não
   tem mais nenhuma mídia.

   O título, a descrição e o botão passaram a ser centralizados na
   coluna — e isso vive nos atributos dos blocos, não aqui, para
   continuar editável no Gutenberg. Os rótulos e as caixas dos
   campos seguem à esquerda e em largura total.
   -------------------------------------------------------------- */

/*
 * Medida do formulário: 713 no frame revisado, que é também a largura da
 * coluna da direita — 57,5% de 1240. O teto continua declarado porque o bloco
 * é reaproveitável fora dela: inserido numa seção de largura inteira, ele para
 * nos mesmos 713.
 */
.arteco-formulario-bloco > * {
	max-width: 713px;
}

/* --------------------------------------------------------------
   Boletim
   -------------------------------------------------------------- */

/* Texto do boletim: 20/28, o padrão da raiz, em ardosia como no frame */
.arteco-boletim-texto {
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Teto de volta, agora em 424.
 *
 * O boletim já morou nas duas colunas: 540 na primeira versão, coluna inteira
 * na segunda. Esta revisão o devolve à esquerda, onde a coluna de 28,33% — 351
 * a 1440 — já é mais estreita que qualquer teto, e dentro da grade a regra é
 * inerte. Ela existe para o pattern avulso, que pode ser inserido numa seção
 * de largura inteira; 424 é a medida do bloco no frame.
 */
.arteco-boletim-bloco > * {
	max-width: 424px;
}

/*
 * Campo e ação lado a lado enquanto couberem. O flex-wrap do próprio bloco
 * cuida da quebra, sem media query e sem ponto de corte novo.
 *
 * A base caiu de 260 para 150 porque a coluna encolheu: a 1024 ela mede 258 e,
 * com o [ASSINAR] ao lado, sobram 177 para o campo. Com 260 a linha quebrava
 * ali; com 150 ela só quebra quando o campo fica de fato pequeno.
 */
.arteco-boletim-form > :first-child {
	flex: 1 1 150px;
}

/*
 * Ação do boletim — link de texto, não botão.
 *
 * O frame tirou o preenchimento terracota justamente para que o boletim pare
 * de competir com o [ENVIAR] do formulário: são a ação secundária e a
 * principal, e antes tinham o mesmo peso visual. Fica a tipografia de botão do
 * sistema, em teal, com o mesmo sublinhado dos canais.
 *
 * Não é <a>: o serviço de newsletter ainda não existe e um link sem destino
 * mentiria sobre o que acontece ao clicar — o botão anterior já era um <a> sem
 * href, que não é link nem para o teclado nem para o leitor de tela. Vira link
 * no dia em que houver para onde ir.
 */
.arteco-boletim-acao {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--teal);
	text-decoration: underline;
	text-decoration-thickness: 2px;
	text-underline-offset: 6px;
}

/* ==============================================================
   "Contato" — camada responsiva
   ============================================================== */

@media (max-width: 781px) {

	/*
	 * Ordem empilhada — a exceção aprovada nesta revisão.
	 *
	 * No desktop o boletim fecha a coluna da esquerda, como no frame.
	 * Empilhado, isso o poria antes do formulário e a ação principal
	 * cairia por último. Resolver pela estrutura dos blocos não dá:
	 * boletim e formulário estão em colunas diferentes, e "order" só
	 * alcança irmãos do mesmo flex.
	 *
	 * "display: contents" dissolve a caixa da coluna esquerda e promove
	 * os três blocos dela a itens diretos do flex das colunas. Aí boletim
	 * e coluna direita passam a ser irmãos, e uma única declaração de
	 * "order" põe o boletim no fim. A coluna é um <div> sem papel de
	 * acessibilidade: dissolvê-la não retira nada da árvore.
	 *
	 * Sem a caixa, os três blocos perdem o flex-basis de 100% que o core
	 * dá às colunas empilhadas — daí a segunda regra. O row-gap do bloco
	 * de colunas é o mesmo 57 do blockGap interno da coluna, então a troca
	 * não mexe em nenhum respiro — desde que a margem de fluxo saia junto. O
	 * <div> da coluna continua no DOM, e com ele a regra de layout que o core
	 * gera para os filhos dela; sem zerar essa margem, ela soma ao row-gap e o
	 * vão vira 114.
	 *
	 * A regra que punha o botão do formulário em largura inteira saiu
	 * daqui: ela mirava .wp-block-button, e o envio passou a ser o botão
	 * do Fluent Forms na integração anterior — não casava com nada. Ela
	 * voltou com o seletor certo, junto das demais regras de .arteco-form.
	 */
	.arteco-contato-grade .wp-block-columns > .wp-block-column:first-child {
		display: contents;
	}

	.arteco-contato-grade .wp-block-columns > .wp-block-column:first-child > * {
		flex-basis: 100%;
		margin-block-start: 0;
	}

	.arteco-contato-grade .arteco-boletim-bloco {
		order: 1;
	}
}

/* ==============================================================
   Formulário do Fluent Forms vestido pelo ArtEco
   --------------------------------------------------------------
   O plugin traz a própria folha de estilo e ela é carregada em
   toda página que tenha formulário. Em vez de brigar regra a
   regra, o caminho curto é o que o próprio plugin abriu: a folha
   padrão é escrita sobre seis variáveis CSS declaradas em :root.
   Redefinindo-as no invólucro do bloco, a aparência inteira passa
   a obedecer aos tokens do tema, e sobram poucas declarações
   explícitas — tipografia, respiro e botão, que as variáveis não
   alcançam.

   Tudo está preso a `.arteco-form`, a classe que o bloco recebe
   no pattern. Nenhum outro formulário do site é afetado, e as
   classes do formulário visual do boletim continuam intactas.
   ============================================================== */

.arteco-form {
	--fluentform-primary: var(--wp--preset--color--teal);
	--fluentform-secondary: var(--wp--preset--color--tinta);
	--fluentform-danger: var(--wp--preset--color--terracota);
	--fluentform-border-color: var(--wp--custom--hairline);
	--fluentform-border-radius: 4px;
	--fluentform-input-select-height: auto;
}

/* --------------------------------------------------------------
   Campo — o mesmo desenho de .arteco-form-field
   -------------------------------------------------------------- */

.arteco-form .ff-el-form-control {
	background-color: transparent;
	color: var(--wp--preset--color--tinta);
	font-family: var(--wp--preset--font-family--body);
	font-size: 16px;
	font-weight: 300;
	line-height: 1.5;
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
}

.arteco-form textarea.ff-el-form-control {
	min-height: 167px;
}

/*
 * Texto de exemplo. Vive no pseudo-elemento, e não no campo, para que a caixa
 * alta e o tracking de 3px não alcancem o que a pessoa digita — é a mesma
 * medida de .arteco-form-placeholder.
 */
.arteco-form .ff-el-form-control::placeholder {
	color: var(--wp--preset--color--ardosia-700);
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	letter-spacing: 3px;
	opacity: 0.5;
	text-transform: uppercase;
}

/* O foco é o do sistema: contorno dourado, como em links e no FAQ */
.arteco-form .ff-el-form-control:focus {
	background-color: transparent;
	border-color: var(--wp--custom--hairline);
	outline: 2px solid var(--wp--preset--color--dourado);
	outline-offset: 2px;
}

/* --------------------------------------------------------------
   Rótulo — o mesmo desenho de .arteco-form-rotulo
   -------------------------------------------------------------- */

.arteco-form .ff-el-input--label label {
	color: var(--wp--preset--color--tinta);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	letter-spacing: 0.7px;
	line-height: 1.4285;
	text-transform: uppercase;
}

/* O asterisco de obrigatório acompanha o rótulo, em terracota */
.arteco-form .ff-el-is-required.asterisk-right label::after {
	color: var(--wp--preset--color--terracota);
}

/* Respiro entre campos: o mesmo 32 que separa os grupos do sistema */
.arteco-form .ff-el-group {
	margin-bottom: var(--wp--preset--spacing--50);
}

.arteco-form .ff-el-input--label {
	margin-bottom: var(--wp--preset--spacing--20);
}

/* --------------------------------------------------------------
   Consentimento
   -------------------------------------------------------------- */

.arteco-form .ff_t_c,
.arteco-form .ff-el-form-check-label {
	color: var(--wp--preset--color--ardosia-700);
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 300;
	line-height: 1.5;
}

.arteco-form .ff-el-form-check-input {
	accent-color: var(--wp--preset--color--teal);
}

/* --------------------------------------------------------------
   Botão — o componente global do theme.json
   --------------------------------------------------------------
   O fundo teal e o texto branco já vêm das configurações do
   próprio formulário, que o plugin imprime em um <style> de alta
   especificidade. O que falta é a forma: raio, respiro e a
   tipografia do sistema, que a folha padrão resolve com 7px de
   raio e uma pilha de fontes do sistema operacional.
   -------------------------------------------------------------- */

.arteco-form .ff-btn-submit {
	border: 0;
	border-radius: 4px;
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	letter-spacing: 0.7px;
	line-height: 1.4285;
	padding: 16px 32px;
	text-transform: uppercase;
}

.arteco-form .ff-btn-submit:focus-visible {
	outline: 2px solid var(--wp--preset--color--dourado);
	outline-offset: 2px;
}

/*
 * Empilhado, o envio ocupa a largura — mesmo comportamento do hero da Home, do
 * fecho de Obras e da Residência. A regra mora aqui, e não na camada responsiva
 * da página, porque pertence ao componente: vale onde quer que o formulário
 * apareça, e some junto com ele.
 *
 * Só a largura muda. Fundo teal, texto branco, raio de 4 e tipografia do
 * sistema seguem vindo das regras acima e das configurações do próprio
 * formulário — não é uma variante de botão.
 */
@media (max-width: 781px) {

	.arteco-form .ff-btn-submit {
		width: 100%;
	}
}

/* --------------------------------------------------------------
   Erros e confirmação
   -------------------------------------------------------------- */

.arteco-form .error,
.arteco-form .text-danger,
.arteco-form .ff-el-is-error .error {
	color: var(--wp--preset--color--terracota);
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 400;
	line-height: 1.4285;
}

.arteco-form .ff-message-success {
	border: 1px solid var(--wp--custom--hairline);
	color: var(--wp--preset--color--tinta);
	font-family: var(--wp--preset--font-family--body);
	font-size: 16px;
	line-height: 1.5;
	padding: var(--wp--preset--spacing--60);
}

/* O container de erros em pilha não precisa do fundo do plugin */
.arteco-form .ff-errors-in-stack .error {
	background-color: transparent;
}

/* ==============================================================
   Blog — índice de ensaios
   --------------------------------------------------------------
   Primeira área do site que não é página editorial: o conteúdo
   vem do loop, e por isso o desenho vive nos templates
   (home.html, archive.html, single.html) e em três patterns.

   O arquivo é feito de LINHAS, não de cards — `.arteco-linha`,
   o mesmo componente da Residência. Card existe num lugar só, a
   coluna lateral do post, e é o único componente novo com caixa.

   Nenhuma imagem no índice: o frame não traz miniatura nenhuma,
   e isso é decisão editorial, não omissão.
   ============================================================== */

/*
 * Sexta variante do rótulo, e idêntica à de Contato: 600, 2.4px, dourado.
 * Deixo declarada em vez de agrupar com `--contato` porque as variantes moram
 * cada uma na sua seção; se uma terceira repetir estes mesmos valores, vale
 * fundir as três numa só.
 */
.arteco-eyebrow--blog {
	font-weight: 600;
	letter-spacing: 2.4px;
	color: var(--wp--preset--color--dourado);
}

/*
 * Redução do título em telas estreitas, o mesmo piso das demais páginas. O
 * teto de 72px é o token; o theme.json fica intocado.
 */
.arteco-blog-abertura h1 {
	font-size: clamp(40px, 15vw, 72px);
}

/*
 * Medida da introdução: 1032 no frame, contra os 1240 da grade. Centralizada
 * pelo `margin-inline`, porque o alinhamento de texto já vem do bloco e o que
 * falta é a caixa.
 *
 * O prefixo `.arteco-blog-abertura` não é enfeite: o layout `constrained` da
 * seção gera `.wp-container-…​ > :where(…) { max-width: 1240px }`, uma classe
 * só, que empatava com `.arteco-blog-intro` sozinha e vencia por vir depois
 * no documento — o WordPress imprime o CSS de layout no `<head>`, junto do
 * bloco. Medi: a introdução saía com 1240 e quebrava em "Instituto Arte-
 * /Ecologia". Com duas classes a medida do frame volta a valer.
 */
.arteco-blog-abertura .arteco-blog-intro {
	max-width: 1032px;
	margin-inline: auto;
	color: var(--wp--preset--color--ardosia-700);
}

/* --------------------------------------------------------------
   Cabeçalho da lista
   -------------------------------------------------------------- */

/*
 * O fio de cima sai. `.arteco-linha:first-child` reserva uma borda superior
 * para abrir a grade — regra da Residência, onde a primeira linha precisa
 * dela. Aqui o cabeçalho já é a abertura e um fio acima dele fecharia a
 * seção sem motivo.
 */
.arteco-ensaios > .arteco-linha:first-child {
	border-block-start: 0;
}

/*
 * Respiro do cabeçalho: 18 acima e abaixo, contra os 24 de `.arteco-linha`.
 *
 * Esta medida vinha de `.arteco-linha--cabecalho`, que é o modificador da
 * grade do seminário — e junto com ela vinha o `clip-path` que esconde aquele
 * cabeçalho no mobile, porque lá "Quando / Horário / O quê" são rótulos de
 * coluna e não fazem sentido empilhados. Aqui não: "Todos os Textos" é título
 * de seção e a contagem é informação. O modificador saiu do pattern e a
 * medida passa a ser declarada aqui, sem carregar a regra do outro
 * componente.
 */
.arteco-ensaios__cabecalho {
	padding-block: var(--wp--preset--spacing--30);
}

.arteco-ensaios__cabecalho h2 {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

/* Contagem de ensaios: a tipografia de tag, em ardósia, como no frame */
.arteco-ensaios__contagem {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-500);
}

/* --------------------------------------------------------------
   A linha do ensaio
   --------------------------------------------------------------
   Três faixas: meta, texto, leitura. O `core/post-template`
   imprime um <li> por post, e o grupo com `.arteco-linha` fica
   dentro dele — daí a segunda regra, que desliga o fio superior
   que cada item ganharia por ser filho único do seu <li>.
   -------------------------------------------------------------- */

.arteco-ensaios__lista .arteco-linha:first-child {
	border-block-start: 0;
}

/*
 * Respiro da linha: 40 acima e abaixo no frame, contra os 24 que .arteco-linha
 * traz da Residência. Modificador, como .arteco-linha--eixo já faz — a base
 * segue intocada.
 */
.arteco-ensaio {
	padding-block: var(--wp--preset--spacing--60);
}

/* O bloco de colunas do core reserva 1.75em abaixo; dentro da linha, não */
.arteco-ensaio .wp-block-columns {
	margin-block-end: 0;
}

/*
 * Meta do ensaio — data e categoria na mesma linha.
 *
 * A cor não está aqui: vem da categoria, mais abaixo. O que fica é a forma,
 * comum a todas.
 *
 * O `core/post-terms` sempre envolve o termo num link. Ele leva ao arquivo da
 * categoria, que o archive.html atende, mas não deve parecer link: no frame a
 * meta é texto. Herda a cor e dispensa o sublinhado — que volta no hover, para
 * que a navegação continue descobrível.
 */
.arteco-ensaio__meta {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 600;
	line-height: 1.4166;
	letter-spacing: 1.2px;
	text-transform: uppercase;
}

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

.arteco-ensaio__meta a:hover {
	text-decoration: underline;
	text-underline-offset: 4px;
}

/*
 * Cor da meta por categoria.
 *
 * O gancho é nativo: o `core/post-template` passa cada item por post_class(),
 * que imprime `category-<slug>` no <li>. Nenhum PHP, nenhum atributo de bloco
 * — só o seletor descendente.
 *
 * As três cores são as do frame. Uma categoria sem regra aqui cai no tinta
 * herdado, que é um padrão legível e não quebra nada: o sistema degrada bem
 * quando a redação criar uma categoria nova.
 */
.category-campo-pulsional .arteco-ensaio__meta {
	color: var(--wp--preset--color--terracota);
}

.category-campo-de-luz .arteco-ensaio__meta {
	color: var(--wp--preset--color--dourado);
}

.category-pesquisa-e-historia .arteco-ensaio__meta,
.category-campo-nuclear .arteco-ensaio__meta {
	color: var(--wp--preset--color--teal);
}

/* Título do ensaio: 24/33 no frame, e o link não se anuncia até o hover */
.arteco-ensaio__titulo {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

.arteco-ensaio__titulo a {
	color: var(--wp--preset--color--tinta);
	text-decoration: none;
}

.arteco-ensaio__titulo a:hover {
	text-decoration: underline;
	text-decoration-color: var(--wp--preset--color--dourado);
	text-decoration-thickness: 2px;
	text-underline-offset: 6px;
}

/* Resumo: 16/24 no frame, em ardósia */
.arteco-ensaio__resumo {
	font-size: 16px;
	line-height: 1.5;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Saída da linha.
 *
 * Terceiro componente de link nomeado por página — depois de
 * `.arteco-contato-link` e `.arteco-programa-link` —, e os três compartilham a
 * mesma métrica de botão do sistema, mudando só a cor. Fica registrado junto
 * das citações para a consolidação futura.
 */
.arteco-ensaio__ler {
	display: block;
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	text-align: end;
	color: var(--wp--preset--color--dourado);
	text-decoration: none;
}

.arteco-ensaio__ler:hover {
	text-decoration: underline;
	text-underline-offset: 6px;
}

/* Lista vazia: mesma medida do corpo, em ardósia */
.arteco-ensaios__vazio {
	font-size: 16px;
	line-height: 1.5;
	color: var(--wp--preset--color--ardosia-700);
}

/* --------------------------------------------------------------
   Fecho do arquivo — paginação vestida de botão
   --------------------------------------------------------------
   O frame traz "Carregar Mais Ensaios", que sugere anexar itens
   à lista. O core não faz isso, e fazer exigiria JavaScript
   próprio. A paginação nativa entrega o mesmo destino — mais
   ensaios — navegando em vez de anexando, e é ela que está aqui,
   com o desenho do botão do frame.

   O botão de contorno não existia no sistema: o theme.json
   estiliza só o preenchido, e este é o primeiro outline. Fica
   preso à paginação do Blog, sem tocar no botão global.
   -------------------------------------------------------------- */

.arteco-ensaios__paginacao {
	margin-block-start: var(--wp--preset--spacing--70);
}

.arteco-ensaios__paginacao .wp-block-query-pagination-next,
.arteco-ensaios__paginacao .wp-block-query-pagination-previous {
	border: 1px solid var(--wp--preset--color--ardosia-500);
	border-radius: 4px;
	padding: 16px 32px;
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--tinta);
	text-decoration: none;
}

.arteco-ensaios__paginacao .wp-block-query-pagination-next:hover,
.arteco-ensaios__paginacao .wp-block-query-pagination-previous:hover {
	border-color: var(--wp--preset--color--tinta);
}

/* ==============================================================
   Single Post — leitura de ensaio
   ============================================================== */

/*
 * Rótulo do post: categoria e tempo de leitura na mesma linha, em teal, como
 * no frame. Aqui a cor é uma só — o gancho `category-<slug>` do arquivo vem do
 * post_class() do post-template e não existe na página de post, onde não há
 * loop. Colorir por categoria também aqui exigiria um filtro em body_class;
 * fica registrado.
 */
.arteco-post-rotulo {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 600;
	line-height: 1.4166;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--wp--preset--color--teal);
}

.arteco-post-rotulo a {
	color: inherit;
	text-decoration: none;
}

.arteco-post-rotulo a:hover {
	text-decoration: underline;
	text-underline-offset: 4px;
}

/*
 * O separador vive no pseudo-elemento do tempo de leitura, não como texto
 * solto, para que os dois sumam juntos: o campo é editorial e opcional, e sem
 * ele o parágrafo renderiza vazio. `:empty` o esconde, e com ele o "·" —
 * nenhum post fica com um ponto órfão depois da categoria.
 */
.arteco-post-tempo::before {
	content: "·";
	margin-inline-end: 0.4em;
}

.arteco-post-tempo:empty {
	display: none;
}

.arteco-post-hero h1 {
	font-size: clamp(40px, 15vw, 72px);
}

/*
 * Dek — a linha que apresenta o ensaio, em Playfair itálico como no frame.
 *
 * A fonte é o resumo do post, o mesmo campo que alimenta o índice. São dois
 * papéis próximos (síntese do ensaio) e um campo só; separá-los exigiria um
 * segundo campo editorial. Fica registrado.
 */
.arteco-post-dek {
	font-family: var(--wp--preset--font-family--display);
	font-size: clamp(20px, 1.67vw, 24px);
	font-style: italic;
	font-weight: 400;
	line-height: 1.5;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Linha de crédito. `.arteco-linha` entrega os dois fios — o de baixo pela
 * base e o de cima porque é o primeiro filho da seção a carregar a classe.
 */
.arteco-post-credito {
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

.arteco-post-credito p,
.arteco-post-credito .wp-block-post-date {
	margin-block: 0;
}

/*
 * "Por" é do sistema; o nome é do post. O core/post-author-name imprime só o
 * nome — não tem atributo de prefixo —, então a preposição entra pelo CSS,
 * como o "·" do tempo de leitura. O que saiu daqui foi o "Por Equipe
 * Editorial" escrito no template: a assinatura agora é a do autor do post.
 */
.arteco-post-autoria::before {
	content: "Por ";
}

/* --------------------------------------------------------------
   Imagem destacada — figura e legenda
   --------------------------------------------------------------
   O core/post-featured-image já imprime a própria <figure>, e não
   aceita legenda: o render devolve `<figure …>{imagem}</figure>` e
   ponto. Por isso a legenda entra como irmã, e as duas ficam
   dentro de um group com `tagName: figure` — a imagem e o texto
   que a descreve passam a ser uma unidade só, que é o que uma
   figura é.

   A medida da seção desceu de 1240 para 1148, que é a do frame: a
   imagem deixa de encostar nas bordas da grade e ganha a folga de
   48 de cada lado.
   -------------------------------------------------------------- */

.arteco-post-destaque__figura {
	margin-block: 0;
}

/*
 * A faixa da legenda é mais estreita que a imagem — 720 no frame, centrada
 * sob ela — e o fio nasce em cima, como no arquivo.
 */
.arteco-post-destaque__legenda {
	max-width: 720px;
	margin-inline: auto;
	margin-block-start: var(--wp--preset--spacing--30);
}

/*
 * Sem legenda, sem faixa. Quando o anexo não tem o campo preenchido, a fonte
 * devolve vazio, o parágrafo renderiza vazio e `:empty` o retira junto com o
 * fio e o rótulo — o `::before` não conta como conteúdo para `:empty`, então
 * "Fig. 01 —" nunca aparece sozinho. Mesmo acordo do tempo de leitura: campo
 * opcional não deixa resto na página.
 */
.arteco-post-destaque__legenda:empty {
	display: none;
}

/* --------------------------------------------------------------
   Legenda de figura — a mesma em toda imagem do ensaio
   --------------------------------------------------------------
   Duas origens, um só tratamento: a destacada traz a legenda do
   anexo pela fonte de binding do tema, e as imagens do corpo
   trazem a legenda do próprio core/image, que o editor já semeia
   com o campo da Biblioteca de Mídia. As duas leem igual.

   A numeração é do CSS, e por isso não pede nada da redação: o
   contador anda a cada legenda, e não a cada figura. Uma imagem
   sem legenda não gasta número — `display: none` não incrementa
   contador —, de modo que a série fica contínua e a primeira
   legenda do ensaio é sempre Fig. 01, venha ela da destacada ou
   da primeira figura do texto.
   -------------------------------------------------------------- */

main {
	counter-reset: arteco-figura;
}

.arteco-post-destaque__legenda,
.arteco-post-conteudo figcaption {
	counter-increment: arteco-figura;
	padding-block-start: var(--wp--preset--spacing--20);
	border-block-start: 1px solid var(--wp--custom--hairline);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	text-align: start;
	color: var(--wp--preset--color--ardosia-700);
}

.arteco-post-destaque__legenda::before,
.arteco-post-conteudo figcaption::before {
	content: "Fig. " counter(arteco-figura, decimal-leading-zero) " — ";
}

/* --------------------------------------------------------------
   Corpo do ensaio
   -------------------------------------------------------------- */

/* Medida de 764 e faixa larga de 856 vêm do layout do post-content */
.arteco-post-conteudo h2 {
	font-size: clamp(24px, 2.08vw, 30px);
	line-height: 1.13;
}

/*
 * A legenda das figuras do corpo é declarada junto com a da destacada, na
 * seção da imagem destacada — as duas são a mesma peça e agora dividem a
 * mesma regra. O que sobrou aqui é só a distância até a imagem, porque no
 * corpo a figura e a legenda são o mesmo bloco e o respiro é interno.
 */
.arteco-post-conteudo figcaption {
	margin-block-start: var(--wp--preset--spacing--30);
}

/*
 * Pull quote — sem variante nova.
 *
 * A tipografia é a de `.arteco-obras-citacao`, com que o seletor foi agrupado
 * lá em cima: Playfair itálico 400, 20 a 24. O que fica aqui é só a caixa —
 * os dois fios e a centralização que o frame traz —, que é layout e não
 * tipografia.
 */
.arteco-post-conteudo blockquote {
	border-block: 1px solid var(--wp--custom--hairline);
	padding-block: var(--wp--preset--spacing--50);
	margin-block: var(--wp--preset--spacing--70);
	text-align: center;
}

.arteco-post-conteudo blockquote cite {
	display: block;
	margin-block-start: var(--wp--preset--spacing--30);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--ui);
	font-style: normal;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

/* --------------------------------------------------------------
   Leia também — o único card do sistema
   --------------------------------------------------------------
   O arquivo é feito de linhas; aqui, e só aqui, o frame pede
   caixa. `.arteco-post-card` nasce por isso, e não por falta de
   procurar equivalente: não há nenhum componente com borda no
   tema além do campo de formulário.
   -------------------------------------------------------------- */

.arteco-relacionados__titulo {
	font-size: clamp(20px, 1.67vw, 24px);
	line-height: 1.375;
}

.arteco-post-card {
	border: 1px solid var(--wp--custom--hairline);
	border-radius: 4px;
}

.arteco-post-card__meta {
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

.arteco-post-card__meta a {
	color: inherit;
	text-decoration: none;
}

.arteco-post-card__titulo {
	font-size: 20px;
	line-height: 1.35;
}

.arteco-post-card__titulo a {
	color: var(--wp--preset--color--tinta);
	text-decoration: none;
}

.arteco-post-card__titulo a:hover {
	text-decoration: underline;
	text-decoration-color: var(--wp--preset--color--dourado);
	text-underline-offset: 6px;
}

.arteco-post-card__resumo {
	font-size: var(--wp--preset--font-size--ui);
	line-height: 1.5714;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * "Ler Completo →" em caixa mista, como no frame — o rótulo do card não é
 * etiqueta, é frase. Sem a caixa alta o tracking de 0,7px também sai: ele
 * existia para abrir as maiúsculas, e em caixa mista só afrouxaria a palavra.
 * O texto vem do pattern; aqui só deixou de ser transformado.
 */
/*
 * O `text-align: end` desta regra nunca teve efeito: o core/read-more sai com
 * `width: fit-content`, então a caixa encolhe até o texto e não sobra faixa
 * onde alinhar. `margin-inline-start: auto` empurra a caixa inteira, que é o
 * que faltava para o link pousar à direita do card, como no frame.
 */
.arteco-post-card__ler {
	display: block;
	width: fit-content;
	margin-inline-start: auto;
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: normal;
	text-align: end;
	color: var(--wp--preset--color--teal);
	text-decoration: none;
}

.arteco-post-card__ler:hover {
	text-decoration: underline;
	text-underline-offset: 6px;
}

/* --------------------------------------------------------------
   Fecho do ensaio — assinatura e navegação
   -------------------------------------------------------------- */

/*
 * Medida do fecho: 866 no frame. O teto desce para os filhos do invólucro, e
 * não para os filhos da seção, porque o layout constrained centraliza tudo o
 * que é filho direto — e aqui o fecho precisa alinhar pela esquerda, com o
 * corpo do ensaio. Mesma solução da Publicações.
 */
.arteco-post-fecho__interno > * {
	max-width: 866px;
}

/*
 * Assinatura: retrato e nome na mesma linha, como no frame. Os dois blocos
 * são nativos — core/avatar e core/post-author-name —, de modo que a bio
 * acompanhe quem assinou o post em vez de repetir um nome escrito no
 * template.
 */
.arteco-post-bio__assinatura {
	margin-block-end: var(--wp--preset--spacing--30);
}

/*
 * 48×48 e redondo, como no arquivo. O core imprime a imagem com width e
 * height próprios; o `display: block` tira a folga de linha que sobraria
 * embaixo, e o raio é o único canto arredondado do site — retrato é retrato,
 * e o theme.json zera o raio só para core/image.
 */
.arteco-post-bio__avatar img {
	display: block;
	width: 48px;
	height: 48px;
	border-radius: 50%;
	object-fit: cover;
}

.arteco-post-bio__nome {
	margin-block: 0;
	font-size: var(--wp--preset--font-size--ui);
	font-weight: 600;
	line-height: 1.4285;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	color: var(--wp--preset--color--tinta);
}

.arteco-post-bio__texto {
	margin-block: 0;
	font-size: 16px;
	line-height: 1.625;
	color: var(--wp--preset--color--ardosia-700);
}

/*
 * Autor sem descrição no perfil: o core/post-author-biography renderiza
 * vazio, e a linha da assinatura fecha sozinha — retrato e nome bastam. É o
 * recuo discreto que o caso pede, sem texto de reserva inventado aqui.
 */
.arteco-post-bio__texto:empty {
	display: none;
}

/*
 * Anterior e próximo. O frame desenha os dois com um fio vertical no meio, e
 * com o mesmo rótulo em ambos — um deslize do arquivo, que aqui vira o par que
 * o desenho pedia.
 */
/*
 * A seta vem do próprio bloco — `arrow: "arrow"` faz o core imprimir um
 * <span> com ← ou → e `aria-hidden`, irmão do link. Para que ela pouse na
 * linha do rótulo, e não no meio de um título de duas linhas, o item vira
 * uma faixa flex alinhada pelo topo: a seta e o link entram lado a lado, e o
 * link empilha rótulo e título por dentro.
 */
.arteco-post-nav__item {
	display: flex;
	flex: 1 1 260px;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--20);
	color: var(--wp--preset--color--ardosia-700);
}

/* O anterior alinha à esquerda; o próximo, à direita, contra o fio */
.arteco-post-nav__item--proximo {
	justify-content: flex-end;
	text-align: end;
	border-inline-start: 1px solid var(--wp--custom--hairline);
	padding-inline-start: var(--wp--preset--spacing--50);
}

/*
 * As setas do core herdam o tamanho do rótulo e ficam na mesma linha dele.
 * `line-height` copiado do rótulo para que as duas bases coincidam.
 */
.arteco-post-nav__item .wp-block-post-navigation-link__arrow-previous,
.arteco-post-nav__item .wp-block-post-navigation-link__arrow-next {
	flex: 0 0 auto;
	font-size: var(--wp--preset--font-size--tag);
	line-height: 1.5;
	color: var(--wp--preset--color--dourado);
}

/*
 * No primeiro e no último ensaio um dos dois lados não existe, e o
 * core/post-navigation-link imprime a <div> assim mesmo, vazia. Sem esta
 * regra o fio vertical fica solto no meio da faixa, sem nada ao lado.
 */
.arteco-post-nav__item:empty {
	display: none;
}

/* O link é a caixa que empilha rótulo e título */
.arteco-post-nav__item a {
	display: block;
	color: var(--wp--preset--color--tinta);
	text-decoration: none;
}

.arteco-post-nav__item a:hover {
	text-decoration: underline;
	text-decoration-color: var(--wp--preset--color--dourado);
	text-underline-offset: 6px;
}

/*
 * Rótulo e título eram a mesma coisa: a tipografia de tag estava no item
 * inteiro, e o título do vizinho saía em IBM Plex 12 caixa alta — o
 * comentário que estava aqui prometia Playfair e a regra só trocava a
 * família do rótulo. Agora cada um declara o seu.
 *
 * O rótulo é rótulo: tag, caixa alta, ardósia.
 */
.arteco-post-nav__item .post-navigation-link__label {
	display: block;
	margin-block-end: var(--wp--preset--spacing--20);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--tag);
	font-weight: 600;
	line-height: 1.5;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ardosia-700);
}

/* O título do post vizinho volta ao Playfair, em caixa mista, como no frame */
.arteco-post-nav__item .post-navigation-link__title {
	display: block;
	font-family: var(--wp--preset--font-family--display);
	font-size: clamp(18px, 1.39vw, 20px);
	font-weight: 400;
	line-height: 1.3;
	letter-spacing: normal;
	text-transform: none;
	color: var(--wp--preset--color--tinta);
}

/* ==============================================================
   Blog — camada responsiva
   --------------------------------------------------------------
   Sem ponto de corte novo: os dois do sistema, 1024 e 781.
   ============================================================== */

@media (max-width: 1024px) {

	/* A faixa da meta aperta antes das demais; o texto passa a mandar */
	.arteco-ensaio__meta {
		letter-spacing: 0.8px;
	}

	/*
	 * A coluna do "Leia Também" desce para baixo do corpo.
	 *
	 * O core só empilha colunas abaixo de 782, e até lá a lateral de 23,5%
	 * vale o que a viewport permitir: medi 214px em 1024, contra os 292 do
	 * frame. Card de 214 não é card estreito, é card espremido — o resumo
	 * quebra em sete linhas e o título em três. Empilhada, a coluna recupera
	 * a largura inteira e os três cards voltam a ler.
	 *
	 * Os dois `!important` são os do core, não invenção daqui: a folha do
	 * core/columns declara `flex-wrap: nowrap !important` acima de 782 e
	 * `flex-basis: 100% !important` abaixo dela — e a largura da coluna
	 * ainda é style inline no bloco. Sem igualar a arma, a regra não
	 * alcança. Acima de 1024 nada muda: o desktop segue com corpo e lateral
	 * lado a lado.
	 */
	.arteco-post-leitura .wp-block-columns {
		flex-wrap: wrap !important;
	}

	.arteco-post-leitura .wp-block-column {
		flex-basis: 100% !important;
	}
}

@media (max-width: 781px) {

	/*
	 * Empilhado, a linha vira meta -> título -> resumo -> ler, que é a ordem
	 * do DOM: as três colunas do core descem na sequência em que foram
	 * escritas. Nenhuma regra de ordem é necessária.
	 *
	 * Só a saída muda de lado: à direita ela ficava solta no fim de uma
	 * coluna própria; empilhada, volta a alinhar com o texto.
	 */
	.arteco-ensaio__ler {
		text-align: start;
	}

	/* O botão de "mais ensaios" ocupa a largura, como os demais empilhados */
	.arteco-ensaios__paginacao .wp-block-query-pagination-next,
	.arteco-ensaios__paginacao .wp-block-query-pagination-previous {
		display: block;
		width: 100%;
		text-align: center;
	}

	/*
	 * No post, o corpo vem primeiro e o "Leia Também" depois — ordem do DOM,
	 * e a que interessa: o relacionado é destino de saída, não de entrada.
	 * O fio vertical entre anterior e próximo vira horizontal.
	 */
	.arteco-post-nav__item--proximo {
		justify-content: flex-start;
		border-inline-start: 0;
		padding-inline-start: 0;
		text-align: start;
	}

	/*
	 * Empilhados, os dois viram um par de blocos à esquerda, e a seta do
	 * próximo iria para o fim da linha — atrás do texto. Com `order` ela
	 * volta para a frente, onde está a do anterior: lidos de cima a baixo,
	 * os dois abrem do mesmo jeito.
	 */
	.arteco-post-nav__item .wp-block-post-navigation-link__arrow-next {
		order: -1;
	}
}

/* ==============================================================
   Camada de interação
   --------------------------------------------------------------
   O sistema declarou a própria linguagem de movimento no
   theme.json desde o começo — `easeStandard` e `durationBase` —
   e nunca a gastou: até aqui a folha inteira não tinha uma única
   `transition`, e todos os onze estados de hover trocavam de
   aparência instantaneamente. Esta camada não inventa vocabulário
   novo; gasta o que já estava declarado.

   Nada aqui muda cor, medida ou composição de componente algum.
   Só o tempo entre um estado e outro, o comportamento do anel de
   foco e dois fios que escurecem no hover.
   ============================================================== */

/*
 * Base de transição.
 *
 * A lista é explícita, nunca `all`: `all` transiciona também o que muda por
 * mudança de layout — largura, altura, posição — e produz arraste quando a
 * página responde ao redimensionamento.
 *
 * `:where()` zera a especificidade de propósito. Esta regra é um piso: nenhum
 * componente precisa disputar com ela, e qualquer um pode declarar o próprio
 * tempo sem !important.
 */
:where(
	a,
	button,
	summary,
	input,
	textarea,
	select,
	.wp-block-button__link,
	.arteco-ensaio,
	.arteco-post-card
) {
	transition:
		color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		background-color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		border-color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		text-decoration-color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		text-decoration-thickness var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		opacity var(--wp--custom--duration-base) var(--wp--custom--ease-standard);
}

/*
 * Os campos do formulário chegam com transição própria do Fluent Forms —
 * 0.15s em border-color e box-shadow. É especificidade de classe contra o
 * `:where()` acima, então o plugin ganharia. Aqui eles entram no tempo do
 * sistema, sem que nada no plugin seja tocado.
 */
.arteco-form .ff-el-form-control {
	transition:
		border-color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		box-shadow var(--wp--custom--duration-base) var(--wp--custom--ease-standard);
}

/* --------------------------------------------------------------
   Sublinhado que aparece em vez de piscar
   --------------------------------------------------------------
   `text-decoration-line` não é animável: um componente que vai de
   `none` para `underline` no hover troca de estado de um quadro
   para o outro, por mais tempo de transição que se declare.

   A saída é manter o sublinhado sempre desenhado e deixá-lo
   transparente em repouso. Visualmente idêntico ao que havia — a
   decoração não ocupa espaço no layout —, mas agora existe uma cor
   para transicionar, e o traço surge no tempo do sistema.

   Nenhuma cor de componente muda: o hover continua entregando
   exatamente a cor que cada um já declarava. O que era `none`
   passa a ser "a mesma cor, ainda invisível".
   -------------------------------------------------------------- */

.wp-block-navigation .wp-block-navigation-item__content,
.arteco-ensaio__meta a,
.arteco-ensaio__titulo a,
.arteco-ensaio__ler,
.arteco-post-rotulo a,
.arteco-post-card__titulo a,
.arteco-post-card__ler,
.arteco-post-nav__item a {
	text-decoration-line: underline;
	text-decoration-color: transparent;
}

/*
 * O hover de cada um desses componentes já declara `text-decoration: underline`
 * mais acima, sem cor — o que resolve para `currentColor`. Só os que pedem cor
 * própria (dourado nos títulos) precisam continuar declarando, e continuam.
 *
 * O item de menu leva dois níveis de classe porque o theme.json gera uma regra
 * própria para links dentro da navegação — `:root :where(.wp-block-navigation
 * a…) { text-decoration: none }` — que empata em especificidade com uma classe
 * só e vence por vir depois na folha.
 */
.wp-block-navigation .wp-block-navigation-item__content:hover,
.arteco-ensaio__meta a:hover,
.arteco-ensaio__ler:hover,
.arteco-post-rotulo a:hover,
.arteco-post-card__ler:hover {
	text-decoration-color: currentColor;
}

/* --------------------------------------------------------------
   Links com seta
   --------------------------------------------------------------
   Só dois no site inteiro: o "Ler →" da linha do arquivo e o
   "Ler Completo →" do card. É o único deslocamento da camada, e
   são 2px — o suficiente para a seta parecer responder, longe de
   qualquer salto.
   -------------------------------------------------------------- */

.arteco-ensaio__ler,
.arteco-post-card__ler {
	transition:
		color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		text-decoration-color var(--wp--custom--duration-base) var(--wp--custom--ease-standard),
		transform 250ms var(--wp--custom--ease-standard);
}

.arteco-ensaio__ler:hover,
.arteco-post-card__ler:hover {
	transform: translateX(2px);
}

/* --------------------------------------------------------------
   Foco — o anel some no mouse e fica no teclado
   --------------------------------------------------------------
   O theme.json declara o contorno dourado em `:focus`, e não em
   `:focus-visible`. Medi: clicar num link do menu com o mouse
   deixava o anel aceso até o clique seguinte — `:focus` verdadeiro,
   `:focus-visible` falso, contorno desenhado. Para quem usa mouse
   isso lê como defeito.

   Em vez de reescrever a regra no theme.json, que está fora do
   alcance desta etapa e mudaria o sistema inteiro, apago o anel
   apenas no caso em que ele não deveria aparecer. O contorno
   dourado do teclado permanece byte a byte o que era.

   Sem `:where()` aqui: a regra precisa vencer a que o WordPress
   gera a partir do theme.json, que empata em especificidade.
   -------------------------------------------------------------- */

a:focus:not(:focus-visible),
button:focus:not(:focus-visible),
summary:focus:not(:focus-visible),
input:focus:not(:focus-visible),
textarea:focus:not(:focus-visible),
select:focus:not(:focus-visible),
.wp-block-button__link:focus:not(:focus-visible) {
	outline: none;
}

/*
 * O consentimento LGPD era o único elemento do site fora do idioma: por não
 * ser `.ff-el-form-control`, caía no contorno padrão do navegador — 1px preto,
 * medido no percurso por Tab. Entra no dourado como todo o resto. O Fluent
 * Forms, a validação e o HTML seguem intocados.
 */
.arteco-form .ff-el-form-check-input:focus-visible {
	outline: 2px solid var(--wp--preset--color--dourado);
	outline-offset: 2px;
}

/* --------------------------------------------------------------
   Linhas e cards — a superfície responde
   --------------------------------------------------------------
   Sem sombra, sem elevação, sem escala: o fio que já separa cada
   linha escurece de hairline para ardósia e volta. É o gesto mais
   discreto possível, e usa o único traço que a composição já tem.

   Vale só para as linhas do arquivo de ensaios, que contêm links.
   As demais `.arteco-linha` do site — ficha da Residência, eixos,
   seminário, linha de crédito do post — são texto, não destino:
   dar-lhes reação de hover prometeria uma interação que não existe.
   -------------------------------------------------------------- */

.arteco-ensaio:hover {
	border-block-end-color: var(--wp--preset--color--ardosia-500);
}

.arteco-post-card:hover {
	border-color: var(--wp--preset--color--ardosia-500);
}

/* ==============================================================
   Menu mobile — o overlay da navegação
   --------------------------------------------------------------
   Três coisas fazem o menu mobile parecer seco, e nenhuma delas é
   decisão do tema: são o padrão do core para quem não deu
   instrução.

   A primeira é o tempo. O core anima a entrada em 0,1s com uma
   queda de 0,5em e não anima a saída — ao fechar, a classe
   `is-menu-open` sai do contêiner e o `display: none` da folha do
   bloco volta no mesmo quadro. Abrir tem gesto; fechar não tem. É
   a assimetria, mais do que a duração, que lê como interface sem
   acabamento.

   A segunda é a cor. Sem cor de overlay declarada no bloco, o
   core pinta `#fff` no fundo e `#000` no texto. O sistema é
   #EEEEEE sobre #272726 — o theme.json já diz isso para
   core/navigation inteiro, e o overlay era o único lugar do site
   onde a instrução não chegava.

   A terceira é a área de toque: 24px, que é o tamanho do ícone.

   Nada aqui troca de mecanismo. O menu continua sendo o bloco
   nativo, e o JavaScript do core segue no comando de abrir,
   fechar, prender o foco e responder ao ESC. Só CSS, e só sobre
   as classes que o core imprime.
   ============================================================== */

/* --------------------------------------------------------------
   Fundo e tinta do overlay
   --------------------------------------------------------------
   O core aplica o branco em cinco classes:
   `.wp-block-navigation:not(.has-background)` mais
   `…__responsive-container.is-menu-open:not(.disable-default-overlay)`.
   Repetir a mesma forma e prefixar com `.arteco-header` dá seis —
   vence por especificidade, sem depender da ordem em que as
   folhas entram no documento, que varia: o WordPress imprime o
   CSS de bloco sob demanda, e num tema de blocos ele pode sair
   depois do CSS do tema.

   O recorte em `.arteco-header` existe para não alcançar as duas
   navegações do rodapé, que são `overlayMenu: never`.
   -------------------------------------------------------------- */

.arteco-header .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
	background-color: var(--wp--preset--color--fundo);
}

/*
 * A tinta acompanha o fundo, e não é mudança de tipografia: o theme.json já
 * declara `color: tinta` em core/navigation, e o `#000` só entrava porque a
 * regra do core mira o contêiner do overlay e ganha do valor herdado. Aqui a
 * instrução do tema volta a valer dentro do menu aberto — #272726 em vez de
 * preto absoluto, o mesmo texto do resto do site.
 */
.arteco-header .wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
	color: var(--wp--preset--color--tinta);
}

/* --------------------------------------------------------------
   Área de toque dos dois botões
   --------------------------------------------------------------
   O core dá 24×24 aos dois: é o tamanho do SVG, com `padding: 0`.
   Crescer o botão cresceria o cabeçalho — o hambúrguer é item de
   flex ao lado do logo, e 20px a mais de altura sobem a faixa
   inteira.

   Por isso a área vem de um pseudo-elemento: fora do fluxo, sem
   pintura, sem efeito em medida nenhuma. Clique nele é clique no
   botão, porque é filho do botão, e o SVG do core já tem
   `pointer-events: none` — não há disputa entre os dois.

   Ícone, alinhamento e altura do cabeçalho ficam exatamente o que
   eram. Só o retângulo que responde ao dedo passa de 24 para 44.
   -------------------------------------------------------------- */

/* O botão de fechar já é `position: absolute` no core, e portanto já é bloco
   contêiner do próprio pseudo-elemento. Dar-lhe `relative` o devolveria ao
   fluxo e o tiraria do canto — só o hambúrguer precisa desta linha. */
.arteco-header .wp-block-navigation__responsive-container-open {
	position: relative;
}

.arteco-header .wp-block-navigation__responsive-container-open::before,
.arteco-header .wp-block-navigation__responsive-container-close::before {
	content: "";
	position: absolute;
	width: 44px;
	height: 44px;
}

/* O hambúrguer tem folga dos dois lados — a faixa do cabeçalho reserva pelo
   menos 24px de margem lateral —, então a área cresce centrada no ícone. */
.arteco-header .wp-block-navigation__responsive-container-open::before {
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

/*
 * O botão de fechar, não. Ele fica em `top: 0; right: 0` de um diálogo que
 * encosta na borda direita da viewport, porque o padding do overlay do core
 * sai de `--wp--style--root--padding-*` e este tema não declara padding de
 * raiz. Uma área centrada passaria 10px da tela, e o `overflow: auto` do
 * overlay responderia com barra horizontal. Ancorada no canto do ícone, ela
 * cresce para dentro: 44×44 inteiros, zero overflow.
 */
.arteco-header .wp-block-navigation__responsive-container-close::before {
	top: 0;
	right: 0;
}

/* --------------------------------------------------------------
   Ponto de corte do menu — o hambúrguer chega antes da quebra
   --------------------------------------------------------------
   O core troca o menu completo pelo hambúrguer em 600px, e é cedo
   demais para este cabeçalho. Medi o que a linha precisa: logo 88
   + gap 120 + menu 979 = 1187px. A faixa útil é a viewport menos
   os dois `clamp(24px, 6.94vw, 92px)` da margem, com teto de 1240.
   Ou seja, o menu inteiro só cabe a partir de 1371px de viewport.

   Entre 600 e 1370 o core mandava desenhar a navegação completa
   numa faixa que não a comportava: o grupo quebrava, o menu descia
   para baixo do logo e a faixa do cabeçalho passava de 186 para
   338px — e, mais estreita ainda, para 394, com o menu em três
   linhas. Não era falta de espaço para o conteúdo; era o ponto de
   corte no lugar errado.

   Essa conta era de um site de uma língua só, e anterior ao
   switcher. Duas coisas a mudaram: o switcher entrou no fim do
   menu (+52px em português, +54 em inglês) e os rótulos ingleses
   somam 44px a mais que os portugueses. Medido de novo, o menu é
   1031 em português e 1075 em inglês. Com o piso de vão em 56px
   — a regra em `.arteco-header > .wp-block-group` —, a linha pede
   1175 e 1219, e a faixa útil entrega isso a partir de 1403px.

   O corte passa para 1430px, com 27px de folga sobre os 1403
   medidos. A folga cobre duas coisas: a métrica da fonte antes de
   carregar, como antes, e os 15px da barra de rolagem, que entram
   na largura lida pela media query mas não na largura de layout.
   Abaixo disso o cabeçalho é logo mais hambúrguer; de 1430 para
   cima o menu inteiro cabe nas duas línguas.

   As três declarações abaixo são as do core invertidas: ele
   esconde o botão e transforma o contêiner em barra horizontal a
   partir de 600px, e aqui o botão volta e o contêiner volta a ser
   overlay. Nenhuma classe nova, nenhum JavaScript — o estado do
   menu continua inteiramente com o core.
   -------------------------------------------------------------- */

@media not (min-width: 1430px) {

	.arteco-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}

	.arteco-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
		position: fixed;
		inset: 0;
		width: 100vw;
		z-index: 100000;
	}
}

/* --------------------------------------------------------------
   Abertura e fechamento — o mesmo gesto nas duas direções
   --------------------------------------------------------------
   Fechar com tempo exige uma coisa antes de qualquer transição:
   que o estado fechado já esteja vestido de overlay.

   O motivo é que o core pendura tudo em `is-menu-open` — fundo,
   tinta, padding, `flex-direction: column`, `overflow`, `z-index`,
   a coluna dos itens. No fechamento a classe sai primeiro e a
   transição roda depois; se o layout saísse com ela, os 300ms
   mostrariam o menu perdendo o fundo e deitando os links em linha
   antes de desaparecer. Pior do que fechar seco.

   Então a leitura muda: abaixo do corte este contêiner é um
   overlay sempre, e `is-menu-open` decide apenas se ele está
   visível. Fechado ele continua `display: none` — não há camada
   montada atrás da página, não há scroll a interceptar, nada
   entra na árvore de acessibilidade. As declarações abaixo são as
   do core, palavra por palavra, sem a classe de estado.

   1430px é o mesmo corte da seção anterior, e a forma
   `not (min-width: 1430px)` é o complemento exato dela: não sobra
   faixa de largura fracionária entre as duas. O refinamento do
   overlay — a curva, os 300ms, a saída simétrica — acompanha o
   hambúrguer onde quer que ele apareça, e não só no telefone.

   Tudo fica atrás de `@supports`. Onde `transition-behavior` não
   existe, nada disto se aplica e o menu volta a ser o que é hoje,
   com a animação do core intacta. Não há degradação a tratar —
   há ausência de refinamento, que é outra coisa.
   -------------------------------------------------------------- */

@supports (transition-behavior: allow-discrete) {

	@media not (min-width: 1430px) {

		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) {
			/* O overlay, vestido nos dois estados. `display` fica de fora:
			   é ele que a transição comuta. Os quatro `clamp` são cópia
			   literal do core — hoje resolvem para zero, porque o tema não
			   declara padding de raiz, e é justamente por serem a mesma
			   expressão que os dois estados continuam iguais se um dia
			   declarar. */
			flex-direction: column;
			overflow: auto;
			z-index: 100000;

			/* A largura precisa ser independente da barra de rolagem.
			   O core tranca o scroll com `html.has-modal-open { overflow:
			   hidden }` e o JavaScript solta essa classe no instante em que
			   o fechamento começa: a barra volta, a viewport encolhe e o
			   overlay — que é `inset: 0` — encolhe com ela. Medi 15px num
			   Chrome de desktop em 390: os links, alinhados à direita,
			   davam um passo lateral no primeiro quadro da saída.

			   `100vw` não conta a barra, então mede o mesmo nos dois
			   estados. Em `position: fixed` com `left` e `right` já em zero
			   a largura declarada prevalece e o `right` é ignorado — durante
			   a saída o overlay passa a cobrir também a calha da barra, que
			   é justamente o que impede o reflow. Em toque não muda nada:
			   ali a barra é sobreposta e nunca ocupou largura. */
			width: 100vw;

			padding-top: clamp(1rem, var(--wp--style--root--padding-top), 20rem);
			padding-right: clamp(1rem, var(--wp--style--root--padding-right), 20rem);
			padding-bottom: clamp(1rem, var(--wp--style--root--padding-bottom), 20rem);
			padding-left: clamp(1rem, var(--wp--style--root--padding-left), 20rem);

			/* O repouso e a comutação. `display` entra na lista com
			   `transition-behavior: allow-discrete`: é o que segura o
			   `display: flex` pelos 300ms da saída em vez de trocar para
			   `none` no primeiro quadro. Sem isso não existe fechamento
			   com tempo em CSS.

			   `transition-behavior` vai em declaração separada, e não
			   dentro do atalho: um valor desconhecido dentro de
			   `transition` invalidaria a declaração inteira, e com ela o
			   fade e o deslocamento. */
			opacity: 0;
			transform: translateY(-8px);
			transition:
				opacity 300ms var(--wp--custom--ease-standard),
				transform 300ms var(--wp--custom--ease-standard),
				display 300ms var(--wp--custom--ease-standard);
			transition-behavior: allow-discrete;
		}

		/*
		 * Fundo e tinta com `!important` porque o core usa `!important` no
		 * estado fechado: `:not(.is-menu-open.is-menu-open)` devolve
		 * `inherit` nos dois, e sem igualar a arma o fundo sumiria no
		 * primeiro quadro do fechamento. É o único lugar da folha que
		 * precisa disso, e precisa por causa de uma regra que também
		 * precisou.
		 */
		.arteco-header .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container:not(.disable-default-overlay) {
			background-color: var(--wp--preset--color--fundo) !important;
		}

		.arteco-header .wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container:not(.disable-default-overlay) {
			color: var(--wp--preset--color--tinta) !important;
		}

		/*
		 * A coluna dos itens. Sem estas, os 300ms de saída deitariam os
		 * links em linha: o estado base do conteúdo é `row`, vindo do
		 * `justifyContent: right` que o cabeçalho declara no bloco. Os
		 * valores continuam saindo das variáveis do core, então alinhamento
		 * e espaçamento do menu aberto não mudam — mudou apenas o instante
		 * em que eles deixam de valer.
		 */
		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content {
			padding-top: calc(2rem + 24px);
			overflow: visible;
			flex-direction: column;
			flex-wrap: nowrap;
			justify-content: flex-start;
			align-items: var(--navigation-layout-justification-setting, inherit);
		}

		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,
		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation-item,
		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-page-list {
			display: flex;
			flex-direction: column;
			align-items: var(--navigation-layout-justification-setting, initial);
		}

		/*
		 * O `justify-content` é um grupo à parte no core, e o item da lista
		 * fica fora dele — de propósito, aqui também. Medi a diferença antes
		 * de escrever esta regra: sem ela, `flex-end` no repouso contra
		 * `flex-start` no aberto era o último desencontro entre os dois
		 * estados. Com ela, aberto e fechado computam igual em display,
		 * direção, quebra, alinhamento, padding, overflow, fundo, tinta,
		 * z-index e gap — o fechamento não tem para onde saltar.
		 */
		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,
		.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-page-list {
			justify-content: flex-start;
		}

		/*
		 * `animation: none` desliga a entrada de 0,1s do core: enquanto uma
		 * animação roda ela ganha da transição na mesma propriedade, e as
		 * duas juntas dariam um gesto em cima do outro.
		 */
		.arteco-header .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
			opacity: 1;
			transform: none;
			animation: none;
		}

		/*
		 * De onde a entrada parte. Sem `@starting-style` o navegador não tem
		 * estado anterior para interpolar — o elemento vinha de
		 * `display: none`, fora da renderização — e a abertura apareceria
		 * pronta. É o par exato do `allow-discrete`: um resolve a saída, o
		 * outro a entrada, com a mesma curva e a mesma duração.
		 */
		@starting-style {

			.arteco-header .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
				opacity: 0;
				transform: translateY(-8px);
			}
		}
	}
}

/* --------------------------------------------------------------
   Movimento reduzido
   --------------------------------------------------------------
   Quem pede menos movimento no sistema operacional continua com
   o site inteiro funcionando: as cores seguem mudando, o
   sublinhado segue aparecendo, o anel de foco segue visível. O
   que sai é o tempo — que passa a ser quase zero em vez de zero,
   para não interromper transição em curso — e o único
   deslocamento da camada.
   -------------------------------------------------------------- */

/* ==============================================================
   Transição entre páginas
   --------------------------------------------------------------
   O salto entre telas não era renderização: medido, FCP e LCP
   acontecem no mesmo instante em todas as páginas, entre 180 e
   352ms. A página inteira aparece de uma vez, e bem. O que faltava
   era o intervalo ENTRE dois documentos, em que o navegador
   descarta a tela antiga, mostra branco e pinta a nova.

   A View Transition do CSS resolve exatamente esse intervalo: o
   navegador guarda um retrato da página que sai, pinta a que
   entra e cruza as duas. Sem JavaScript, sem observador, sem
   opacidade inicial no conteúdo — e por isso sem custo nenhum na
   métrica de LCP, que foi o motivo de eu recomendar este caminho
   em vez da animação de entrada por seção.

   Onde o navegador não suporta, a regra é ignorada e a navegação
   fica exatamente como está hoje. Não há degradação a tratar.
   ============================================================== */

@view-transition {
	navigation: auto;
}

/*
 * O cruzamento é do documento inteiro — `root` —, e não de elementos internos:
 * nomear partes da página faria o conteúdo se mover entre telas, que é o
 * oposto do que se quer aqui. 300ms com a curva do sistema; os pseudo-elementos
 * herdam de `html`, e é lá que o WordPress declara os tokens, então a variável
 * resolve.
 */
::view-transition-old(root),
::view-transition-new(root) {
	animation-duration: 300ms;
	animation-timing-function: var(--wp--custom--ease-standard);
}

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

	:where(
		a,
		button,
		summary,
		input,
		textarea,
		select,
		.wp-block-button__link,
		.arteco-ensaio,
		.arteco-post-card
	),
	.arteco-form .ff-el-form-control,
	.arteco-ensaio__ler,
	.arteco-post-card__ler {
		transition-duration: 1ms;
	}

	.arteco-ensaio__ler:hover,
	.arteco-post-card__ler:hover {
		transform: none;
	}

	/*
	 * O menu mobile abre e fecha sem tempo — e continua abrindo e fechando,
	 * com o mesmo fundo, a mesma área de toque e o mesmo teclado. `1ms` pelo
	 * motivo do resto da camada; o `transform` sai de vez, para que não reste
	 * nem o salto de 8px que uma duração curta ainda mostraria.
	 *
	 * Só a duração muda: a lista de propriedades e o `allow-discrete` seguem
	 * de pé, então o `display` continua esperando o fim da transição para
	 * voltar a `none`. É o que mantém o fechamento funcionando.
	 */
	.arteco-header .wp-block-navigation__responsive-container:not(.disable-default-overlay) {
		transition-duration: 1ms;
		transform: none;
	}

	/*
	 * A troca entre páginas volta a ser instantânea. A navegação continua
	 * idêntica: o que sai é o cruzamento, não o destino.
	 */
	@view-transition {
		navigation: none;
	}
}

/* ==============================================================
   Documento legal — cadência de leitura, não ritmo de seção
   --------------------------------------------------------------
   As seis páginas jurídicas nasceram com a linguagem das páginas
   institucionais, e herdaram o blockGap de 120px da raiz. Ali ele
   está certo: separa seções de largura total que se encostam. Aqui
   ele caía entre cada um dos 39 blocos do documento — inclusive
   entre um H2 e o parágrafo que ele apresenta, e entre um texto
   introdutório e a lista que o completa. Medido: 7.261px de altura
   na Política de Privacidade, com o título a 120px do próprio
   texto. Não era excesso de respiro; era respiro sem hierarquia.

   O que muda é só a distância. Tipografia, largura de 760, escala
   de títulos, Playfair nos títulos e IBM Plex no corpo seguem como
   estão — o documento continua sendo do mesmo sistema.

   A régua é relacional, e todos os valores saem da escala do
   theme.json, que fica intocado:

     24  base entre irmãos           (parágrafo a parágrafo)
     57  antes de um H2              (abre seção)
     18  depois de um H2             (o título cola no que apresenta)
     32  antes de um H3              (abre subseção)
     12  depois de um H3, e antes de uma lista introduzida por texto
     45  dos dois lados do separador
      8  entre itens de lista        (varre melhor listas longas)

   O escopo é a classe do grupo que embrulha o documento, aplicada
   às seis páginas. Não serve o template `editorial`: ele é de 22
   páginas, e as institucionais devem continuar como estão.

   A base entra por seletor de irmão adjacente, com as duas classes
   do grupo — e não pela variável do core. O motivo é que o layout
   `constrained` não lê `--wp--style--block-gap` na folha: o core
   gera uma classe por instância e imprime o valor já resolvido
   dentro dela. Uma variável redefinida aqui não teria efeito
   nenhum sobre esse `* + *`. Duas classes dão especificidade
   suficiente para vencer a regra gerada sem `!important`; as
   relações abaixo, com elemento no seletor, já venciam sozinhas.
   ============================================================== */

.arteco-secao.arteco-documento-legal > * + * {
	margin-block-start: var(--wp--preset--spacing--40);
}

.arteco-secao.arteco-documento-legal > * + h2 {
	margin-block-start: var(--wp--preset--spacing--70);
}

.arteco-secao.arteco-documento-legal > h2 + * {
	margin-block-start: var(--wp--preset--spacing--30);
}

.arteco-secao.arteco-documento-legal > * + h3 {
	margin-block-start: var(--wp--preset--spacing--50);
}

.arteco-secao.arteco-documento-legal > h3 + *,
.arteco-secao.arteco-documento-legal > p + ul,
.arteco-secao.arteco-documento-legal > p + ol,
.arteco-secao.arteco-documento-legal > .arteco-eyebrow + h1 {
	margin-block-start: var(--wp--preset--spacing--20);
}

.arteco-secao.arteco-documento-legal > * + hr,
.arteco-secao.arteco-documento-legal > hr + * {
	margin-block-start: var(--wp--preset--spacing--60);
}

.arteco-secao.arteco-documento-legal li + li {
	margin-block-start: var(--wp--preset--spacing--10);
}

/*
 * H1 dos documentos legais — o único que não escalava.
 *
 * No tema, cada página dá o tamanho do próprio H1: .arteco-manifesto,
 * .arteco-instituto e os demais declaram `clamp(36px, 5.83vw, 84px)`. As
 * páginas jurídicas nunca ganharam uma regra dessas e caíam no padrão global,
 * que é fixo. O resultado eram 72px em qualquer largura — e "Privacidade",
 * a palavra mais longa dos seis títulos, mede 378px nesse tamanho, contra uma
 * caixa de 297px em 360. Daí o overflow, só nessa página: "Privacy Policy",
 * "Termos de Uso" e "Política de Cookies" não têm palavra tão comprida.
 *
 * A curva não copia os 5.83vw das outras páginas de propósito. Lá o teto é 84
 * e a queda começa cedo — em 1024 aquelas páginas já estão em 59,7px. Aqui o
 * teto é 72 e ele precisa valer no desktop inteiro, então a inclinação é outra:
 * 15vw mantém os 72px intactos de 480px para cima, o que cobre 781, 1024 e
 * 1440, e só cede onde a palavra não cabe mesmo — 58,5px em 390 e 54px em 360,
 * com folga de 20 e 14px dentro da caixa.
 *
 * O piso de 36px é o mesmo do resto do sistema. Só o tamanho muda: família,
 * peso, entrelinha e tracking continuam vindo de onde já vinham.
 */
.arteco-documento-legal h1 {
	font-size: clamp(36px, 15vw, 72px);
}
