/*
Theme Name: Philon
Author: PraxisCorp Gestão e Tecnologia
Author URI: https://praxiscorp.fator3.chatgpt.site
Description: Tema de blocos (FSE) do site PHILON — Strategy Intelligence, by PraxisCorp. Cor, tipografia, espaçamento e estilo de bloco moram no theme.json; este arquivo guarda apenas o que não tem equivalente nativo — cada regra com o motivo declarado.
Version: 1.2.1
Requires at least: 6.7
Tested up to: 7.0
Requires PHP: 8.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: philon
Tags: block-patterns, full-site-editing, accessibility-ready, one-column, wide-blocks, custom-logo
*/

/* ==========================================================================
   Regra de admissão deste arquivo
   --------------------------------------------------------------------------
   Só entra aqui o que o theme.json não expressa. Cor, tamanho e espaçamento
   vêm SEMPRE de var(--wp--preset--…): nenhum literal (hex/rgb/hsl) neste
   arquivo, e nenhum SVG embutido — o esconderijo que a varredura de CSS não
   alcança. Cada bloco abaixo declara por que não pôde ser nativo.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Token de altura do cabeçalho fixo
   Motivo: o valor é consumido por duas regras que precisam concordar entre si
   (o recuo de âncora e a camada do cabeçalho). O theme.json não expõe custom
   property arbitrária de layout, então o token nasce aqui, em uma fonte só.
   O valor cobre a altura medida do cabeçalho (respiro `xs` em cima e embaixo
   + alvo de 44px do botão do menu compacto + a borda inferior).
   -------------------------------------------------------------------------- */
:root {
	--philon-altura-cabecalho: 5.5rem;
	--philon-camada-cabecalho: 100;
	--philon-camada-overlay: 200;
	--philon-alvo-minimo: 44px;
	--philon-instrumento-largura: 26rem;

	/* Transparências derivadas dos presets. Nenhum literal de cor entra aqui:
	   color-mix() recebe SEMPRE var(--wp--preset--color--…) e devolve a mesma
	   cor com opacidade. O modelo de referência é feito de filetes e véus, e
	   filete de 14% não existe como preset — existe como derivação de um. */
	--philon-filete: color-mix(in srgb, var(--wp--preset--color--primaria-forte) 14%, transparent);
	--philon-filete-forte: color-mix(in srgb, var(--wp--preset--color--primaria-forte) 22%, transparent);
	--philon-filete-inverso: color-mix(in srgb, var(--wp--preset--color--superficie) 18%, transparent);
	--philon-malha: color-mix(in srgb, var(--wp--preset--color--base) 18%, transparent);
	--philon-malha-clara: color-mix(in srgb, var(--wp--preset--color--primaria-forte) 5%, transparent);
	--philon-anel: color-mix(in srgb, var(--wp--preset--color--destaque) 20%, transparent);
	--philon-anel-forte: color-mix(in srgb, var(--wp--preset--color--destaque) 45%, transparent);
	--philon-ouro-tenue: color-mix(in srgb, var(--wp--preset--color--destaque) 18%, transparent);
	--philon-veu: color-mix(in srgb, var(--wp--preset--color--inverso) 88%, transparent);
	--philon-inverso-suave: color-mix(in srgb, var(--wp--preset--color--superficie) 72%, transparent);
	--philon-inverso-tenue: color-mix(in srgb, var(--wp--preset--color--superficie) 45%, transparent);
	--philon-sombra-barra: 0 14px 48px color-mix(in srgb, var(--wp--preset--color--inverso) 20%, transparent);
	--philon-sombra-cartao: 0 16px 40px color-mix(in srgb, var(--wp--preset--color--primaria-forte) 8%, transparent);
	--philon-respiro-barra: 1.125rem;
}

/* --------------------------------------------------------------------------
   2. Âncoras sob o cabeçalho fixo
   Motivo (armadilha medida): com cabeçalho sticky, navegar para `#secao`
   aterrissa com o alvo EMBAIXO da barra. Não existe controle nativo para
   reservar esse espaço. `scroll-padding-top` na raiz resolve para toda âncora
   do site de uma vez — inclusive as que o conteúdo criar depois.
   -------------------------------------------------------------------------- */
html {
	scroll-padding-top: calc(var(--philon-altura-cabecalho) + var(--wp--preset--spacing--sm));
}

/* --------------------------------------------------------------------------
   3. Invólucro das regiões de template part
   Motivo (armadilha medida): `position: sticky` fica preso ao bloco contentor,
   e o bloco `core/template-part` SEMPRE renderiza um invólucro com a altura
   exata do cabeçalho — o sticky não teria para onde deslizar e não grudaria.
   `display: contents` remove a caixa do invólucro (não remove o elemento do
   DOM nem da árvore de acessibilidade, porque é um `div` sem semântica), de
   modo que o <header> do part resolve o sticky contra o fluxo da página.
   Efeito colateral desejado: o invólucro sem caixa também não recebe o
   `margin-block-start` que o blockGap da raiz aplica a `.wp-site-blocks > *`.
   -------------------------------------------------------------------------- */
.philon-regiao {
	display: contents;
}

/* --------------------------------------------------------------------------
   4. Cabeçalho fixo
   Motivo: `position: sticky` não é um controle do theme.json nem do bloco
   Group. Fica no wrapper <header> — NUNCA em um Group interno (o Group interno
   tem por contentor um invólucro da altura do próprio cabeçalho e não gruda).

   PROIBIÇÃO PERMANENTE, e o motivo por escrito: nem este <header> nem qualquer
   ancestral do painel do menu compacto pode declarar `backdrop-filter`,
   `transform`, `filter`, `perspective`, `contain` ou `will-change`. Cada uma
   dessas propriedades cria BLOCO CONTENTOR para descendentes `position: fixed`
   — o painel `inset: 0` passaria a resolver contra o cabeçalho, não contra o
   viewport (medido a 390px: overlay de 390x76 dentro de um cabeçalho de 77px;
   sem a propriedade, 390x844). Se um efeito desses for exigido no futuro, ele
   precisa ser SUPRIMIDO enquanto o painel estiver aberto.
   -------------------------------------------------------------------------- */
.philon-cabecalho {
	position: fixed;
	inset-block-start: 0;
	inset-inline: 0;
	z-index: var(--philon-camada-cabecalho);
	padding-block-start: var(--philon-respiro-barra);
	padding-inline: var(--philon-respiro-barra);
}

/* O cabeçalho saiu do fluxo: quem não tem herói para correr por baixo dele
   precisa reservar a altura, senão a primeira linha da página nasce coberta.
   O herói é a exceção por desenho — o gradiente escuro passa SOB a barra — e
   reserva a mesma altura no próprio padding. */
.wp-site-blocks > main:not(:has(> .philon-heroi)) {
	padding-block-start: var(--philon-altura-cabecalho);
}

/* --------------------------------------------------------------------------
   4b. A barra flutuante dentro do cabeçalho
   Motivo: o cabeçalho deste site é uma BARRA de largura limitada, com respiro
   em volta, sobre o conteúdo que rola por baixo — e não uma faixa de borda a
   borda. Fundo, borda, raio e respiro interno são atributos do bloco Group e
   moram no markup da template part, não aqui; o que não tem equivalente nativo
   é a LARGURA da barra dentro de um cabeçalho que precisa continuar sendo o
   contêiner sticky de largura total. `wideSize` resolve a medida, e o resto do
   visual continua editável no editor.
   -------------------------------------------------------------------------- */
.philon-cabecalho > .philon-barra {
	box-sizing: border-box;
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: var(--wp--preset--spacing--md);
	max-inline-size: var(--wp--style--global--wide-size);
	min-block-size: 4rem;
	margin-inline: auto;
	padding-block: var(--wp--preset--spacing--xs);
	padding-inline: var(--wp--preset--spacing--md) var(--wp--preset--spacing--xs);
	background-color: var(--philon-veu);
	border: 1px solid var(--philon-filete-inverso);
	border-radius: 8px;
	box-shadow: var(--philon-sombra-barra);
}

.philon-cabecalho > .philon-barra > :first-child {
	justify-self: start;
}

.philon-cabecalho > .philon-barra > :last-child {
	justify-self: end;
}

/* --------------------------------------------------------------------------
   4c. Etiqueta de seção (a "sobrancelha" acima do título)
   Motivo: caixa alta e espaçamento de letra existem como controles de bloco —
   e usá-los ali gravaria `text-transform` e `letter-spacing` como ESTILO INLINE
   no markup publicado, que é justamente o que `conteudo.sem_estilo_avulso`
   proíbe (o conteúdo só referencia preset). Papel de tipografia recorrente é
   sistema de design, não decisão por bloco: mora numa classe, propaga sozinho e
   deixa o texto editável no editor. Tamanho e cor continuam vindo de preset,
   pelos atributos do bloco.
   -------------------------------------------------------------------------- */
.philon-etiqueta {
	font-weight: 700;
	letter-spacing: 0.2em;
	text-transform: uppercase;
}

/* --------------------------------------------------------------------------
   4d. Filete superior do rodapé
   Motivo: o mesmo do item 4b — o filete é borda de UM lado, e declará-la pelo
   atributo do bloco gravaria `border-top-width: 1px` como estilo inline avulso.
   A cor vem do preset.
   -------------------------------------------------------------------------- */
.philon-rodape {
	border-block-start: 1px solid var(--wp--preset--color--borda);
}

/* --------------------------------------------------------------------------
   5. Supressão do gap de raiz sob o cabeçalho
   Motivo: o blockGap da raiz existe para espaçar blocos DENTRO do conteúdo;
   aplicado também entre as regiões de nível raiz, abre uma faixa da cor do
   corpo entre o cabeçalho fixo e a primeira seção. Suprimir pelo atributo do
   bloco exigiria estilo inline com valor literal (`margin-top:0px`), proibido
   no contrato — a supressão mora aqui, restrita ao <main> do tema.
   -------------------------------------------------------------------------- */
.wp-site-blocks > main {
	margin-block-start: 0px;
}

/* --------------------------------------------------------------------------
   6. Link "pular para o conteúdo"
   Motivo: não existe bloco nativo para o link de salto, e ele precisa ser o
   PRIMEIRO nó focável do DOM, sair da tela por padrão e voltar ao receber
   foco. A técnica de recorte mantém o link na árvore de acessibilidade (ao
   contrário de `display:none`), que é o que a sonda de a11y precisa encontrar.
   -------------------------------------------------------------------------- */
.philon-pular {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	min-block-size: var(--philon-alvo-minimo);
	padding-block: var(--wp--preset--spacing--xs);
	padding-inline: var(--wp--preset--spacing--sm);
	background-color: var(--wp--preset--color--primaria);
	color: var(--wp--preset--color--base);
	font-size: var(--wp--preset--font-size--normal);
	text-decoration: underline;
}

.philon-pular:not(:focus):not(:active) {
	position: absolute;
	inline-size: 1px;
	block-size: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.philon-pular:focus {
	position: absolute;
	inset-block-start: var(--wp--preset--spacing--xs);
	inset-inline-start: var(--wp--preset--spacing--xs);
	z-index: var(--philon-camada-overlay);
}

/* --------------------------------------------------------------------------
   7. Menu compacto — botão de abrir e de fechar
   Motivo: o bloco Navigation traz o comportamento do overlay (por isso o tema
   não carrega script próprio para o menu), mas entrega os botões com área
   menor que o alvo mínimo de 24x24px da WCAG 2.2 AA. Aqui só se corrige o
   tamanho do alvo e o foco; nenhum comportamento é reimplementado.
   -------------------------------------------------------------------------- */
.wp-block-navigation__responsive-container-open,
.wp-block-navigation__responsive-container-close {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-inline-size: var(--philon-alvo-minimo);
	min-block-size: var(--philon-alvo-minimo);
	padding: var(--wp--preset--spacing--xs);
	color: currentColor;
}

/* --------------------------------------------------------------------------
   8. Menu compacto — painel overlay
   Motivo: o painel precisa cobrir o viewport inteiro e ter respiro nas bordas;
   o bloco não expõe esses dois controles. `inset: 0` é declarado aqui de forma
   explícita para que a checagem meça o retângulo do viewport, e não um
   retângulo herdado. Ver a proibição do item 4: este painel é `position: fixed`
   e nenhum ancestral seu pode criar bloco contentor.
   -------------------------------------------------------------------------- */
.wp-block-navigation__responsive-container.is-menu-open {
	position: fixed;
	inset: 0;
	z-index: var(--philon-camada-overlay);
	padding: var(--wp--preset--spacing--lg) var(--wp--preset--spacing--md);
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
	padding-block: var(--wp--preset--spacing--xs);
}

/* --------------------------------------------------------------------------
   9. Caixa dos cartões e painéis próprios
   Motivo (armadilha medida): contêiner fora de `.wp-block-*` é `content-box` —
   o reset do core não o alcança —, e `max-width: 34rem` virou 618px reais com
   o padding somado por fora. Cada cartão e cada painel mede o que declara.
   -------------------------------------------------------------------------- */
.philon-cartao,
.f3base-consentimento-rodape,
.f3base-consentimento-abrir,
.f3base-consentimento-banner,
.f3base-consentimento-caixa,
.f3base-consentimento-aviso,
.philon-formulario,
.philon-formulario * {
	box-sizing: border-box;
}

/* --------------------------------------------------------------------------
   9b. Cartões lado a lado terminam na MESMA linha de base
   Motivo (armadilha medida, e recorrente neste tipo de instalação): em
   `core/columns` a COLUNA já estica — `.wp-block-columns` é flex e o
   `align-items` padrão é `normal`, então cada `.wp-block-column` ocupa a
   altura da linha inteira. O que NÃO estica é o Group do cartão dentro dela:
   ele é um bloco de fluxo, alto o quanto o texto pedir. O resultado é o
   defeito da foto — três cartões com fundos de alturas diferentes e a régua
   inferior irregular, com a coluna certa por trás.
   Não existe controle nativo para isto: o alinhamento vertical do bloco
   Columns move o conteúdo (topo/centro/base), não faz o filho crescer. Por
   isso é CSS, e por isso é escopado em `.philon-cartao` — não vale para toda
   coluna do site, só para o padrão de cartão do tema.
   `height: 100%` resolve porque a coluna é item flex esticado e, por isso,
   tem altura definida — não é o caso de percentual sobre altura automática.
   Escolhida em vez de `:has()` para não pendurar o layout numa dependência de
   seletor. Empilhado no móvel (o core troca para uma coluna) a regra fica
   inerte, porque cada coluna passa a ter a altura do próprio conteúdo.
   O cartão já é `border-box` pela regra 9, então o padding não estoura os 100%.
   -------------------------------------------------------------------------- */
.wp-block-column > .philon-cartao {
	height: 100%;
}

/* --------------------------------------------------------------------------
   9c. Instrumento do herói — o círculo do ciclo contínuo
   Motivo: as quatro etapas do ciclo aparecem DISPOSTAS EM VOLTA de um núcleo,
   nos quatro pontos cardeais. Não existe layout nativo que posicione filhos em
   torno de um centro: `flex` e `grid` distribuem em linha, coluna ou célula, e
   `constrained`/`flow` empilham. O posicionamento absoluto é o único caminho, e
   por isso ele mora aqui, escopado na classe do padrão.
   O que NÃO virou CSS continua no bloco, e é o que mantém o editor útil: cada
   rótulo é um Parágrafo com o texto editável, e cor, tamanho, borda e raio do
   círculo são atributos do Group no markup.
   `transform` aparece nos rótulos — e só neles. A proibição do item 4 vale para
   ANCESTRAIS de elemento `position: fixed`; nenhum rótulo deste bloco é
   ancestral do painel do menu compacto nem do painel de consentimento, que são
   filhos do cabeçalho e do corpo. Um `transform` no contêiner `.philon-instrumento`
   seria outra história e por isso não existe.
   -------------------------------------------------------------------------- */
.philon-instrumento {
	position: relative;
	box-sizing: border-box;
	display: grid;
	place-items: center;
	inline-size: min(100%, var(--philon-instrumento-largura));
	aspect-ratio: 1;
	margin-inline: auto;
	border: 1px solid var(--wp--preset--color--destaque);
	border-radius: 50%;
}

.philon-instrumento__nucleo {
	margin: 0;
}

.philon-instrumento__rotulo {
	position: absolute;
	margin: 0;
	padding-block: var(--wp--preset--spacing--xs);
	padding-inline: var(--wp--preset--spacing--xs);
	background-color: var(--wp--preset--color--inverso);
	white-space: nowrap;
}

/* Os rótulos ficam DENTRO da caixa do círculo, e isto é medição, não estética:
   com o deslocamento de metade da própria largura para fora, os rótulos leste e
   oeste ultrapassavam o viewport — 1039 px de rolagem horizontal numa tela de
   1024, e 422 em 390. Overflow horizontal é reprovação da definição de pronto, e
   o custo de trazê-los para dentro é os rótulos tangenciarem o anel em vez de o
   atravessarem. Topo e base continuam centrados no eixo X, que é deslocamento
   horizontal de um elemento mais estreito que o círculo e não sai da caixa. */
.philon-instrumento__topo {
	inset-block-start: 0;
	inset-inline-start: 50%;
	transform: translateX(-50%);
}

.philon-instrumento__base {
	inset-block-end: 0;
	inset-inline-start: 50%;
	transform: translateX(-50%);
}

.philon-instrumento__esquerda {
	inset-block-start: 50%;
	inset-inline-start: 0;
	transform: translateY(-50%);
}

.philon-instrumento__direita {
	inset-block-start: 50%;
	inset-inline-end: 0;
	transform: translateY(-50%);
}

/* --------------------------------------------------------------------------
   9e. Proporção das duas colunas do herói
   Motivo (medido): o título do herói é a maior palavra do site em Georgia, e ele
   só cabe em duas linhas quando a coluna de texto tem a medida da referência.
   Com as colunas em 50/50 a coluna ficou em 556 px e "operacionalização" quebrou
   NO MEIO DA PALAVRA a 1440 px — três linhas em vez de duas, com um "ão" órfão.
   A largura de coluna existe como controle do bloco, e usá-la gravaria
   `flex-basis: 55%` como estilo inline no markup publicado, que
   `conteudo.sem_estilo_avulso` proíbe: proporção de layout recorrente é sistema
   de design, e mora aqui, escopada na classe do herói. Abaixo do ponto em que o
   core empilha as colunas a regra fica inerte, porque cada coluna passa a ocupar
   a linha inteira.
   -------------------------------------------------------------------------- */
.philon-heroi .wp-block-columns > .wp-block-column:first-child {
	flex: 1 1 55%;
}

.philon-heroi .wp-block-columns > .wp-block-column:last-child {
	flex: 1 1 45%;
}

/* --------------------------------------------------------------------------
   9d. Tabela larga rola dentro da própria caixa
   Motivo (medido): a tabela de comparação tem quatro colunas e largura mínima de
   conteúdo maior que a tela pequena — 416 px de tabela em 390 px de viewport, e
   o documento inteiro passava a rolar na horizontal. Não existe controle nativo
   do bloco Table para isso, e a saída correta não é encolher a fonte até caber:
   é a tabela rolar DENTRO da própria caixa, com o resto da página parado.
   -------------------------------------------------------------------------- */
.wp-block-table.philon-comparacao {
	overflow-x: auto;
}

/* --------------------------------------------------------------------------
   10. Campos de formulário próprios
   Motivo (armadilha medida): `<p>` usado como linha de campo mantém a margem
   padrão do navegador — o reset do core só alcança `.wp-block-*`. Cada campo
   somava ~2x1em à altura por cima do gap da grade (cartão de 609px para três
   campos; 346px com as margens zeradas). Quem espaça é o layout, não a margem.
   `.philon-formulario` é o contrato de apresentação entre o tema e o site-core:
   o tema estiliza, o comportamento do formulário é do plugin (princípio 4).
   -------------------------------------------------------------------------- */
.philon-formulario p,
.philon-formulario label,
.philon-formulario ul,
.philon-formulario .philon-campo {
	margin: 0;
}

.philon-formulario {
	display: grid;
	gap: var(--wp--preset--spacing--sm);
}

/* --------------------------------------------------------------------------
   11. Tamanho do texto dos controles de formulário
   Motivo (armadilha medida): controle com `font: inherit` herda o tamanho do
   contexto — dentro de uma chamada com texto `medio`, inputs e botão renderizam
   maiores e engordam ~6px por controle. O tamanho é fixado em 1rem, explícito.
   -------------------------------------------------------------------------- */
.philon-formulario input,
.philon-formulario select,
.philon-formulario textarea,
.philon-formulario button {
	font-family: inherit;
	font-size: 1rem;
	line-height: 1.4;
	color: var(--wp--preset--color--contraste);
	background-color: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--borda);
	border-radius: 2px;
	padding-block: var(--wp--preset--spacing--xs);
	padding-inline: var(--wp--preset--spacing--xs);
	min-block-size: var(--philon-alvo-minimo);
}

.philon-formulario button {
	background-color: var(--wp--preset--color--primaria);
	border-color: var(--wp--preset--color--primaria);
	color: var(--wp--preset--color--base);
	font-weight: 600;
	padding-inline: var(--wp--preset--spacing--md);
	cursor: pointer;
}

/* --------------------------------------------------------------------------
   12. Quebra de palavra longa
   Motivo (armadilha medida): o valor `anywhere` desta propriedade COLAPSA
   títulos dentro de flex/grid (a largura mínima do conteúdo vai a zero).
   `break-word` quebra só a palavra que não cabe e preserva a medida do
   título. O valor que colapsa nunca aparece neste arquivo.
   -------------------------------------------------------------------------- */
h1,
h2,
h3,
h4,
h5,
h6,
p,
li,
dt,
dd,
figcaption,
.wp-block-post-title,
.wp-block-query-title,
.wp-block-site-title {
	overflow-wrap: break-word;
}

/* --------------------------------------------------------------------------
   13. Controle de consentimento no rodapé
   Motivo: o controle existe em toda página publicada (mora na template part do
   rodapé, por construção), mas não há bloco nativo para ele. O tema fornece a
   apresentação; abrir o painel, desligar as tags, persistir a negativa pelo TTL
   e religar no re-aceite são comportamento do site-core (princípio 4). Sem
   JavaScript o controle não opera — perda declarada no relatório.

   ARMADILHA MEDIDA (corrigida): a regra do painel declarava `display: grid`
   sem qualificar `[hidden]`. CSS de autor sempre vence a folha padrão do
   navegador, então o `hidden` do JavaScript nunca escondia nada — o painel
   renderizava aberto assim que era criado, e "Fechar" não tinha efeito visível
   nenhum. `.f3base-consentimento-painel[hidden]` abaixo é a correção, e
   precisa continuar mais específica que a regra base.

   Também existia `.f3base-consentimento-caixa`, pensada como caixa central de
   diálogo — mas o JavaScript nunca chegou a criar esse elemento. O efeito real
   sempre foi o conteúdo cru espalhado sobre o véu inteiro, sem caixa nenhuma
   (o "abre uma tela" relatado). A regra morta saiu; o painel agora É a faixa
   inferior, com os elementos que o JavaScript de fato cria estilizados abaixo.
   -------------------------------------------------------------------------- */
/* Link de texto simples, igual aos demais links do rodapé (ex.: Política de
   Privacidade) — sem caixa nem alvo mínimo de botão. Continua <button>, não
   <a>: ele abre um painel local, não navega para lugar nenhum. */
.f3base-consentimento-abrir {
	display: inline;
	padding: 0;
	background: none;
	border: 0;
	color: var(--wp--preset--color--primaria);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--pequeno);
	line-height: inherit;
	text-decoration: underline;
	cursor: pointer;
}

.f3base-consentimento-abrir:hover {
	color: var(--wp--preset--color--primaria-forte);
}

/* Faixa que o site-core injeta ao acionar o controle. A apresentação é do
   tema pelo mesmo contrato de classe; ver a proibição do item 4 — a faixa é
   `position: fixed` e nenhum ancestral seu pode criar bloco contentor.

   O QUE MUDOU COM O `Base Site Core Fator3` 1.0.0, e por que são duas caixas:
   o cliente do plugin publicado monta `.f3base-consentimento-banner` (o
   elemento `role="dialog"` que recebe o `hidden`) e, DENTRO dele,
   `.f3base-consentimento-caixa`, que é quem carrega os textos, o link da
   política e os botões. O fork anterior servia um elemento só, e a folha do
   tema descrevia esse um. Se as duas regras ficassem na de fora, a barra
   passaria a ir de borda a borda: a medida e o filete moram na de DENTRO,
   que é a caixa cuja geometria a versão anterior tinha. */
.f3base-consentimento-banner {
	position: fixed;
	inset-inline: 0;
	inset-block-end: 0;
	z-index: var(--philon-camada-overlay);
}

/* O `hidden` do JavaScript precisa vencer qualquer `display` de autor. A regra
   base acima não declara `display`, e esta continua aqui como trava: se alguém
   voltar a declarar um `display` na faixa, o "Fechar" continua fechando. */
.f3base-consentimento-banner[hidden] {
	display: none;
}

.f3base-consentimento-caixa {
	display: grid;
	grid-template-columns: 1fr auto;
	align-items: center;
	column-gap: var(--wp--preset--spacing--lg);
	row-gap: var(--wp--preset--spacing--xs);
	max-inline-size: var(--wp--style--global--wide-size);
	margin-inline: auto;
	padding-block: var(--wp--preset--spacing--sm);
	padding-inline: var(--wp--preset--spacing--md);
	background-color: var(--wp--preset--color--inverso);
	color: var(--wp--preset--color--superficie);
	border-block-start: 1px solid var(--philon-filete-inverso);
	box-shadow: var(--philon-sombra-barra);
}

.f3base-consentimento-titulo,
.f3base-consentimento-texto,
.f3base-consentimento-estado,
.f3base-consentimento-politica {
	grid-column: 1;
	margin: 0;
}

/* ARMADILHA MEDIDA na entrada do plugin publicado: o título da faixa passou a
   ser um <h2>, e a faixa é filha de <body> — fora de qualquer faixa escura do
   tema. Sem `color: inherit`, o h2 herda a cor de TÍTULO declarada no
   theme.json, que é escura por desenho, e o título nasce invisível sobre o
   fundo `inverso` da própria faixa (medido: #0e1e38 sobre #081426). A cor certa
   é a do contentor, que já é `superficie`. */
.f3base-consentimento-titulo {
	color: inherit;
	font-family: inherit;
	font-size: var(--wp--preset--font-size--normal);
	font-weight: 700;
	line-height: 1.3;
}

.f3base-consentimento-texto,
.f3base-consentimento-estado {
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--philon-inverso-suave);
}

.f3base-consentimento-politica {
	display: inline-block;
	font-size: var(--wp--preset--font-size--pequeno);
	color: var(--wp--preset--color--destaque-claro);
}

.f3base-consentimento-acoes {
	grid-column: 2;
	grid-row: 1 / -1;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--xs);
}

.f3base-consentimento-acoes button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-block-size: var(--philon-alvo-minimo);
	padding-inline: var(--wp--preset--spacing--sm);
	background-color: transparent;
	color: inherit;
	border: 1px solid var(--philon-filete-inverso);
	border-radius: 2px;
	font-family: inherit;
	font-size: var(--wp--preset--font-size--pequeno);
	cursor: pointer;
}

.f3base-consentimento-acoes button:hover {
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contraste);
	border-color: var(--wp--preset--color--base);
}

.f3base-consentimento-aceitar {
	background-color: var(--wp--preset--color--destaque);
	color: var(--wp--preset--color--inverso);
	border-color: var(--wp--preset--color--destaque);
}

.f3base-consentimento-aceitar:hover {
	background-color: var(--wp--preset--color--destaque-claro);
	color: var(--wp--preset--color--inverso);
	border-color: var(--wp--preset--color--destaque-claro);
}

/* --------------------------------------------------------------------------
   13b. Aviso de primeira visita
   Motivo: o site-core publica, quando a chave `aviso_primeira_visita` está
   ligada, um SEGUNDO elemento — irmão da faixa, e não filho dela — com o
   texto, o link da política e dois botões. Ele nasce sem apresentação nenhuma:
   o plugin não publica CSS de front-end, e o que não estiver aqui aparece como
   texto solto no topo do corpo da página. A chave está DESLIGADA neste site;
   as regras existem para que ligá-la seja uma decisão de configuração, e não
   uma edição de tema.
   -------------------------------------------------------------------------- */
.f3base-consentimento-aviso {
	position: fixed;
	inset-inline: 0;
	inset-block-end: 0;
	z-index: var(--philon-camada-overlay);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--sm);
	max-inline-size: var(--wp--style--global--wide-size);
	margin-inline: auto;
	padding-block: var(--wp--preset--spacing--sm);
	padding-inline: var(--wp--preset--spacing--md);
	background-color: var(--wp--preset--color--inverso);
	color: var(--wp--preset--color--superficie);
	border-block-start: 1px solid var(--philon-filete-inverso);
	box-shadow: var(--philon-sombra-barra);
	font-size: var(--wp--preset--font-size--pequeno);
}

.f3base-consentimento-aviso a {
	color: var(--wp--preset--color--destaque-claro);
}

.f3base-consentimento-aviso button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-block-size: var(--philon-alvo-minimo);
	padding-inline: var(--wp--preset--spacing--sm);
	background-color: transparent;
	color: inherit;
	border: 1px solid var(--philon-filete-inverso);
	border-radius: 2px;
	font-family: inherit;
	font-size: var(--wp--preset--font-size--pequeno);
	cursor: pointer;
}

.f3base-consentimento-aviso button:hover {
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contraste);
	border-color: var(--wp--preset--color--base);
}

.f3base-consentimento-aviso-ok {
	background-color: var(--wp--preset--color--destaque);
	color: var(--wp--preset--color--inverso);
	border-color: var(--wp--preset--color--destaque);
}

/* --------------------------------------------------------------------------
   14. Foco visível nos controles próprios
   Motivo: o theme.json cobre `:hover`, `:focus` e `:active` dos elementos
   `link` e `button`, mas o core NÃO aceita `:focus-visible` na lista fechada de
   pseudo-seletores de elemento — a declaração seria descartada em silêncio.
   O refinamento de foco por teclado dos controles próprios do tema (link de
   salto, botões do menu compacto, controle de consentimento, formulário) só
   pode existir aqui. `outline: none` sem substituto é o defeito clássico dos
   resets: nunca aparece neste arquivo.
   -------------------------------------------------------------------------- */
.philon-pular:focus-visible,
.f3base-consentimento-abrir:focus-visible,
.philon-formulario :focus-visible,
.wp-block-navigation__responsive-container-open:focus-visible,
.wp-block-navigation__responsive-container-close:focus-visible {
	outline: 2px solid var(--wp--preset--color--primaria);
	outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   15. Foco visível sobre as faixas escuras
   Motivo: o anel de foco padrão do theme.json usa a cor `primaria`, que tem
   razão de contraste suficiente sobre `base` e `superficie`, mas não sobre
   `inverso` — herói e rodapé. Sobre fundo escuro o anel passa a `base`
   (18,91:1). Sem esta regra o foco existiria e não seria perceptível.
   -------------------------------------------------------------------------- */
.philon-faixa-escura :focus,
.philon-faixa-escura :focus-visible,
.f3base-consentimento-caixa :focus,
.f3base-consentimento-caixa :focus-visible,
.f3base-consentimento-aviso :focus,
.f3base-consentimento-aviso :focus-visible {
	outline: 2px solid var(--wp--preset--color--base);
	outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   16. Movimento
   Motivo: a rolagem suave é conforto, não conteúdo — ela só é oferecida a quem
   não pediu redução de movimento, e toda animação/transição é neutralizada sob
   `prefers-reduced-motion: reduce`. O `!important` é necessário porque a regra
   precisa vencer declarações de blocos e de plugins que carregam depois.
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
	html {
		scroll-behavior: smooth;
	}
}

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}

/* ==========================================================================
   17. Diagramação do modelo de referência
   --------------------------------------------------------------------------
   Reproduz o layout aprovado do PHILON standalone. Duas licenças à regra de
   admissão do topo deste arquivo, declaradas aqui e em nenhum outro lugar:
   (a) medida geométrica em rem/px — a régua de espaçamento do theme.json
       descreve respiro entre blocos, não raio de anel, passo de malha nem
       altura mínima de célula de grade;
   (b) transparência por color-mix() sobre preset — os tokens estão no item 1,
       e nenhum literal de cor aparece em nenhuma das duas licenças.
   O que continua nativo continua no bloco: texto, cor, tamanho e alinhamento
   seguem editáveis no editor.
   ========================================================================== */

/* 17.1 A marca no cabeçalho e no rodapé */
.philon-marca {
	display: flex;
	align-items: center;
	gap: 0.65rem;
}

.philon-marca .wp-block-site-logo img {
	display: block;
}

/* 17.2 Herói — fundo, malha e os dois anéis
   Malha e anéis são pintura, não conteúdo: moram em pseudo-elementos e por
   isso não pesam no DOM nem na árvore de acessibilidade. Os dois anéis do
   modelo são CONCÊNTRICOS (mesmo centro, raios de 180px e 290px), então cabem
   em duas camadas de radial-gradient de uma pseudo-caixa só. */
.philon-heroi {
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-block-size: 51rem;
	padding-block: calc(var(--philon-altura-cabecalho) + var(--wp--preset--spacing--xl)) var(--wp--preset--spacing--lg);
	background-image: radial-gradient(circle at 76% 45%, var(--wp--preset--color--primaria) 0, var(--wp--preset--color--primaria-forte) 33%, var(--wp--preset--color--inverso) 75%);
}

.philon-heroi::before,
.philon-heroi::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
}

.philon-heroi::before {
	opacity: 0.11;
	background-image:
		linear-gradient(var(--philon-malha) 1px, transparent 1px),
		linear-gradient(90deg, var(--philon-malha) 1px, transparent 1px);
	background-size: 76px 76px;
	-webkit-mask-image: linear-gradient(90deg, transparent 0, currentColor 55%);
	mask-image: linear-gradient(90deg, transparent 0, currentColor 55%);
}

.philon-heroi::after {
	background-image:
		radial-gradient(circle at right 180px top 370px, transparent 288px, var(--philon-anel) 288px 290px, transparent 290px),
		radial-gradient(circle at right 180px top 370px, transparent 178px, var(--philon-anel) 178px 180px, transparent 180px);
}

.philon-heroi > * {
	position: relative;
	z-index: 2;
	inline-size: 100%;
}

/* ARMADILHA MEDIDA: com o herói em `display: flex` para centrar na vertical,
   os filhos deixam de esticar — margem `auto` no eixo transversal desliga o
   `stretch` e a caixa passa a medir o CONTEÚDO. A faixa larga rendeu 839px em
   vez de 1180. `inline-size: 100%` devolve a medida; o `max-width` do layout
   restrito continua sendo o teto e a margem `auto` continua centrando. */

/* O h1 do modelo (6.1vw) não cabe na coluna do herói: "operacionalização" é a
   maior palavra do site e, em Georgia a 88px, pede ~790px numa coluna de 613.
   O tema quebra palavra longa (item 12), então o defeito apareceria como quebra
   no meio da palavra. A escala do herói cai o suficiente para a palavra caber
   inteira — o teto continua o mesmo em telas grandes. */
.philon-heroi h1 {
	font-size: clamp(2.125rem, 4.6vw, 4.25rem);
	line-height: 1;
}

.philon-heroi h1 em,
.philon-contato h2 em {
	color: var(--wp--preset--color--destaque-claro);
}

.philon-heroi__lead {
	max-inline-size: 40.5rem;
	color: var(--philon-inverso-suave);
	line-height: 1.75;
}

.philon-heroi__acoes {
	margin-block-start: var(--wp--preset--spacing--md);
}

.philon-heroi__rodape {
	margin-block-start: var(--wp--preset--spacing--xl);
	padding-block-start: var(--wp--preset--spacing--md);
	border-block-start: 1px solid var(--philon-filete-inverso);
}

.philon-heroi__rodape p {
	margin: 0;
	color: var(--philon-inverso-tenue);
}

/* 17.3 Link de texto com filete — a alternativa discreta ao botão */
.philon-link-texto {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	padding-block-end: 5px;
	border-block-end: 1px solid currentColor;
	font-size: var(--wp--preset--font-size--pequeno);
	font-weight: 700;
	text-decoration: none;
}

.philon-link-texto:hover {
	color: var(--wp--preset--color--destaque);
	text-decoration: none;
}

/* 17.4 Instrumento — anel interno, eixos e núcleo
   Os eixos são duas camadas de fundo de 1px (não há elemento para eles no
   markup, e não deveria haver: são régua, não conteúdo). O anel interno usa
   o único pseudo-elemento livre do contentor. */
.philon-instrumento {
	background-image:
		linear-gradient(var(--philon-filete-inverso), var(--philon-filete-inverso)),
		linear-gradient(var(--philon-filete-inverso), var(--philon-filete-inverso));
	background-position: center;
	background-repeat: no-repeat;
	background-size: 100% 1px, 1px 100%;
	border-color: var(--philon-anel-forte);
}

.philon-instrumento::before {
	content: "";
	position: absolute;
	inset: 17%;
	border: 1px solid var(--philon-filete-inverso);
	border-radius: 50%;
}

.philon-instrumento__nucleo {
	position: relative;
	display: grid;
	place-items: center;
	inline-size: 30%;
	aspect-ratio: 1;
	background-color: var(--philon-veu);
	border: 1px solid var(--wp--preset--color--destaque);
	border-radius: 50%;
	line-height: 1;
}

/* 17.5 Título de seção dividido — título à esquerda, leitura à direita */
.philon-titulo-secao {
	margin-block-end: var(--wp--preset--spacing--xl);
}

.philon-titulo-secao--dividido {
	display: grid;
	grid-template-columns: 1.2fr 0.8fr;
	gap: 5.6rem;
	align-items: end;
}

/* 17.6 Grade de filetes — colunas separadas por linha, sem cartão */
.philon-grade {
	border-block: 1px solid var(--philon-filete);
}

.philon-grade > .wp-block-column {
	position: relative;
	box-sizing: border-box;
	min-block-size: 18rem;
	padding-block: 2.4rem 2.1rem;
	padding-inline-end: 2.1rem;
}

.philon-grade > .wp-block-column + .wp-block-column {
	padding-inline-start: 2.1rem;
	border-inline-start: 1px solid var(--philon-filete);
}

.philon-icone {
	display: grid;
	place-items: center;
	inline-size: 2.75rem;
	block-size: 2.75rem;
	margin-block-end: 2.6rem;
	color: var(--wp--preset--color--destaque);
	border: 1px solid var(--philon-anel-forte);
	border-radius: 50%;
}

.philon-icone svg,
.philon-modulo__topo svg,
.philon-implantacao__icone svg {
	display: block;
}

.philon-indice {
	position: absolute;
	inset-block-start: 2.3rem;
	inset-inline-end: 1.75rem;
	margin: 0;
}

/* 17.7 Trilha do ciclo sobre a faixa escura */
.philon-trilha {
	border-block: 1px solid var(--philon-filete-inverso);
}

.philon-trilha > .wp-block-column {
	box-sizing: border-box;
	min-block-size: 16.25rem;
	padding-block: 2.1rem 2.4rem;
	padding-inline-end: 1.9rem;
}

.philon-trilha > .wp-block-column + .wp-block-column {
	padding-inline-start: 1.9rem;
	border-inline-start: 1px solid var(--philon-filete-inverso);
}

.philon-passo__numero {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-block: 0 3.4rem;
}

.philon-passo__numero::after {
	content: "\2192";
	font-family: var(--wp--preset--font-family--sistema);
}

.philon-trilha > .wp-block-column:last-child .philon-passo__numero::after {
	content: none;
}

.philon-passo__titulo {
	text-transform: uppercase;
	letter-spacing: 0.06em;
}

/* 17.8 Citação centrada com aspa de abertura
   O seletor carrega o nome do elemento porque precisa vencer o estilo de
   core/quote declarado no theme.json (filete à esquerda e recuo), que é o
   certo para toda citação do site menos esta. */
blockquote.philon-citacao {
	max-inline-size: 53rem;
	margin-block-start: var(--wp--preset--spacing--xl);
	margin-inline: auto;
	padding: 0;
	border: 0;
	text-align: center;
}

blockquote.philon-citacao::before {
	content: "\201C";
	display: block;
	block-size: 2.6rem;
	color: var(--wp--preset--color--destaque);
	font-size: 5rem;
	line-height: 0.8;
}

blockquote.philon-citacao em {
	color: var(--wp--preset--color--destaque-claro);
}

/* 17.9 Grade dos oito módulos */
.philon-modulos {
	border-block-start: 1px solid var(--philon-filete);
	border-inline-start: 1px solid var(--philon-filete);
}

.philon-modulos .wp-block-column {
	box-sizing: border-box;
	min-block-size: 14rem;
	padding: 1.65rem;
	background-color: color-mix(in srgb, var(--wp--preset--color--base) 20%, transparent);
	border-inline-end: 1px solid var(--philon-filete);
	border-block-end: 1px solid var(--philon-filete);
	transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}

.philon-modulos .wp-block-column:hover {
	background-color: var(--wp--preset--color--base);
	transform: translateY(-3px);
	box-shadow: var(--philon-sombra-cartao);
}

.philon-modulo__topo {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-block-end: 3rem;
	color: var(--wp--preset--color--destaque);
}

.philon-modulo__topo span {
	color: var(--wp--preset--color--suave);
	font-family: var(--wp--preset--font-family--serifada);
	font-size: var(--wp--preset--font-size--minusculo);
}

/* 17.10 Seção de IA — o visual de sinal e a lista de conferência */
.philon-ia {
	align-items: center;
}

.philon-ia__visual {
	position: relative;
	overflow: hidden;
	min-block-size: 31rem;
	border: 1px solid var(--philon-filete);
	background-image:
		radial-gradient(circle at center, var(--philon-ouro-tenue), transparent 42%),
		linear-gradient(var(--philon-malha-clara) 1px, transparent 1px),
		linear-gradient(90deg, var(--philon-malha-clara) 1px, transparent 1px);
	background-size: auto, 42px 42px, 42px 42px;
}

.philon-sinal {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-start: 50%;
	transform: translate(-50%, -50%);
	border: 1px solid var(--philon-filete-forte);
	border-radius: 50%;
}

.philon-sinal--um {
	inline-size: 13.75rem;
	block-size: 13.75rem;
}

.philon-sinal--dois {
	inline-size: 21.25rem;
	block-size: 21.25rem;
}

.philon-sinal--tres {
	inline-size: 27.5rem;
	block-size: 27.5rem;
}

.philon-ia__nucleo {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-start: 50%;
	transform: translate(-50%, -50%);
	display: grid;
	place-items: center;
	inline-size: 7rem;
	block-size: 7rem;
	color: var(--wp--preset--color--destaque);
	background-color: var(--wp--preset--color--inverso);
	border: 1px solid var(--wp--preset--color--destaque);
	border-radius: 50%;
}

.philon-ia__no {
	position: absolute;
	padding-block: 0.5rem;
	padding-inline: 0.75rem;
	color: var(--wp--preset--color--primaria-forte);
	background-color: var(--wp--preset--color--base);
	border: 1px solid var(--philon-filete-forte);
	font-size: var(--wp--preset--font-size--minusculo);
	font-weight: 700;
	letter-spacing: 0.1em;
	line-height: 1;
	text-transform: uppercase;
}

.philon-ia__no--um {
	inset-block-start: 12%;
	inset-inline-start: 14%;
}

.philon-ia__no--dois {
	inset-block-start: 38%;
	inset-inline-end: 7%;
}

.philon-ia__no--tres {
	inset-block-end: 14%;
	inset-inline-start: 18%;
}

ul.philon-lista-verificacao {
	list-style: none;
	display: grid;
	margin: 0;
	padding: 0;
}

ul.philon-lista-verificacao li {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding-block: 0.8rem;
	border-block-end: 1px solid var(--philon-filete);
	color: var(--wp--preset--color--primaria-forte);
	font-size: var(--wp--preset--font-size--pequeno);
}

ul.philon-lista-verificacao li::before {
	content: "\2713";
	color: var(--wp--preset--color--destaque);
	font-weight: 700;
}

/* 17.11 Tabela de comparaao — a coluna do PHILON é a única preenchida
   O nome do elemento entra no seletor para vencer a borda que core/table
   declara em `.wp-block-table td`. */
.philon-comparacao table {
	border-collapse: collapse;
	inline-size: 100%;
}

.philon-comparacao table th,
.philon-comparacao table td {
	padding: 1.25rem;
	border: 1px solid var(--philon-filete-inverso);
	color: var(--philon-inverso-suave);
	line-height: 1.5;
	text-align: start;
	vertical-align: middle;
}

.philon-comparacao table thead th {
	color: var(--philon-inverso-tenue);
	font-size: var(--wp--preset--font-size--minusculo);
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}

.philon-comparacao table tbody td:first-child {
	color: var(--wp--preset--color--superficie);
	font-weight: 700;
}

.philon-comparacao table tr > *:last-child {
	color: var(--wp--preset--color--primaria-forte);
	background-color: var(--wp--preset--color--destaque);
	border-color: var(--philon-filete-forte);
}

.philon-comparacao figcaption {
	color: var(--philon-inverso-tenue);
}

/* 17.12 Implantação em linhas */
.philon-implantacao {
	border-block-start: 1px solid var(--philon-filete);
}

.philon-implantacao > .wp-block-group {
	display: grid;
	grid-template-columns: 5.6rem 1fr auto;
	align-items: center;
	gap: 1.9rem;
	padding-block: 1.9rem;
	border-block-end: 1px solid var(--philon-filete);
}

.philon-implantacao__numero {
	margin: 0;
	color: var(--wp--preset--color--destaque);
	font-family: var(--wp--preset--font-family--serifada);
}

.philon-implantacao__icone {
	color: var(--wp--preset--color--borda);
}

/* 17.13 Endosso e contato — duas colunas desiguais
   A proporção só vale acima do ponto de empilhamento do core (782px): abaixo
   dele, forçar a base faría as duas colunas caberem lado a lado numa tela em
   que elas precisam empilhar. */
.philon-contato__acoes {
	padding-inline-start: var(--wp--preset--spacing--lg);
	border-inline-start: 1px solid var(--philon-filete-inverso);
}

.philon-contato__acoes .wp-block-button,
.philon-contato__acoes .wp-block-button__link {
	inline-size: 100%;
}

.philon-contato__acoes .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

@media (min-width: 782px) {
	.philon-endosso > .wp-block-column:first-child {
		flex: 1 1 57%;
	}

	.philon-endosso > .wp-block-column:last-child {
		flex: 1 1 43%;
	}

	.philon-contato > .wp-block-column:first-child {
		flex: 1 1 61%;
	}

	.philon-contato > .wp-block-column:last-child {
		flex: 1 1 39%;
	}
}

/* 17.14 Abaixo do ponto de empilhamento do core, os filetes verticais viram
   horizontais e as alturas mínimas saem — senão sobra célula vazia. */
@media (max-width: 781px) {
	.philon-titulo-secao--dividido {
		grid-template-columns: 1fr;
		gap: var(--wp--preset--spacing--md);
	}

	/* MEDIDO em 375px: o rótulo do botão da barra quebrava em três linhas e
	   engordava o cabeçalho inteiro. O alvo de toque continua acima do mínimo. */
	.philon-cabecalho > .philon-barra {
		gap: var(--wp--preset--spacing--sm);
		padding-inline: var(--wp--preset--spacing--sm) var(--wp--preset--spacing--xs);
	}

	.philon-cabecalho .wp-block-button__link {
		padding-inline: var(--wp--preset--spacing--sm);
		font-size: 0.625rem;
		white-space: nowrap;
	}

	.philon-heroi {
		min-block-size: auto;
		padding-block: calc(var(--philon-altura-cabecalho) + var(--wp--preset--spacing--lg)) var(--wp--preset--spacing--xl);
	}

	.philon-grade > .wp-block-column,
	.philon-trilha > .wp-block-column {
		min-block-size: auto;
		padding-inline: 0;
		padding-block: var(--wp--preset--spacing--md);
	}

	.philon-grade > .wp-block-column + .wp-block-column {
		border-inline-start: 0;
		border-block-start: 1px solid var(--philon-filete);
	}

	.philon-trilha > .wp-block-column + .wp-block-column {
		border-inline-start: 0;
		border-block-start: 1px solid var(--philon-filete-inverso);
	}

	.philon-icone,
	.philon-passo__numero,
	.philon-modulo__topo {
		margin-block-end: var(--wp--preset--spacing--md);
	}

	.philon-modulos {
		border-inline-start: 0;
	}

	.philon-modulos .wp-block-column {
		min-block-size: auto;
		border-inline: 1px solid var(--philon-filete);
	}

	.philon-implantacao > .wp-block-group {
		grid-template-columns: 3rem 1fr;
		gap: var(--wp--preset--spacing--sm);
	}

	.philon-implantacao__icone {
		display: none;
	}

	.philon-contato__acoes {
		padding-inline-start: 0;
		border-inline-start: 0;
	}

	.philon-ia__visual {
		min-block-size: 22rem;
	}

	.philon-sinal--tres {
		inline-size: 20rem;
		block-size: 20rem;
	}

	.philon-sinal--dois {
		inline-size: 15.5rem;
		block-size: 15.5rem;
	}

	.philon-sinal--um {
		inline-size: 11rem;
		block-size: 11rem;
	}

	.f3base-consentimento-caixa {
		grid-template-columns: 1fr;
		row-gap: var(--wp--preset--spacing--sm);
	}

	.f3base-consentimento-aviso {
		flex-direction: column;
		align-items: flex-start;
	}

	.f3base-consentimento-acoes {
		grid-column: 1;
		grid-row: auto;
	}
}
