/* ============================================================================
 * PULSE — CARD COM MODAL (v1.146.0) · assets/card-modal.css
 * ----------------------------------------------------------------------------
 * Estilo do bloco acf/pulse-card-modal. Carrega SÓ quando o bloco está na
 * página (pulse_card_modal_enqueue_assets), depois do sections.css.
 * · O CARD consome os tokens do tema (--head/--ink/--line/--glass/--soft-r)
 *   quando vive numa secção; sobre imagem usa a própria cor (--cdm-card-cor).
 * · O MODAL vive no <body> (o JS move-o) → não herda os tokens da secção;
 *   traz tokens próprios claro/escuro (--cdm-*), o padrão do pulse-cmodal.
 * · ANIMAÇÕES EXTENSÍVEIS: o JS só alterna hidden/.is-open; cada animação é
 *   um bloco [data-anim="…"] que define o transform de PARTIDA do painel — a
 *   transição (opacity/transform, duração --cmodal-vel) é comum. Animação
 *   nova = +1 choice no PHP + 1 bloco aqui. ZERO JS.
 * ========================================================================== */

/* ---- CARD (botão) ---- */
.pulse-cardmodal-card {
	appearance: none;
	-webkit-appearance: none;
	display: block;
	position: relative;
	width: 100%;
	aspect-ratio: var(--cdm-card-ratio, 4 / 3);
	height: var(--cdm-card-h, auto);
	overflow: hidden;
	padding: clamp(1rem, .8rem + 1vw, 1.5rem);
	background: var(--glass, rgba(255, 255, 255, .045));
	border: var(--cdm-card-bw, 1px) solid var(--cdm-card-bc, var(--line, rgba(255, 255, 255, .1)));
	border-radius: var(--cdm-card-r, 18px);
	color: var(--cdm-card-cor, var(--head, #fff));
	font-family: inherit;
	text-align: left;
	cursor: pointer;
	transition: transform .3s var(--ease, ease), border-color .3s var(--ease, ease);
}

/* Altura fixa escolhida ganha à proporção. */
.pulse-cardmodal-card[style*="--cdm-card-h:"] {
	aspect-ratio: auto;
}

.pulse-cardmodal-card:hover {
	transform: translateY(-3px);
	border-color: var(--line-2, rgba(255, 255, 255, .3));
}

.pulse-cardmodal-card:focus-visible {
	outline: 2px solid var(--accent, #4c56e0);
	outline-offset: 3px;
}

.pulse-cardmodal-card--sombra-suave {
	box-shadow: 0 10px 24px -14px rgba(0, 0, 0, .45);
}

.pulse-cardmodal-card--sombra-media {
	box-shadow: 0 18px 40px -18px rgba(0, 0, 0, .55);
}

.pulse-cardmodal-card--sombra-forte {
	box-shadow: 0 28px 60px -20px rgba(0, 0, 0, .7);
}

/* Imagem de fundo + véu de leitura (a opacidade é o --cdm-card-overlay). */
.pulse-cardmodal-card__bg {
	position: absolute;
	inset: 0;
}

.pulse-cardmodal-card__bg img,
.pulse-cardmodal-card__foto {
	width: 100%;
	height: 100%;
	/* v1.150: enquadramento/ponto focal por vars — defaults = o de sempre. */
	object-fit: var(--pbcm-fit, cover);
	object-position: var(--pbcm-fpos, center);
	display: block;
}

/* v1.150 (B) → v1.158: zoom no hover e filtros — opt-in por classe. Apanham a
   FOTO e o VÍDEO de fundo (as definições da imagem valem para o vídeo — o
   fit/foco já eram partilhados pelas vars desde a v1.155; agora o zoom e o
   filtro também). O :is() não mexe na especificidade: __foto e __video são
   ambos uma classe. Sem vídeo, nada muda. */
.pulse-cardmodal-card--img-zoom :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
	transition: transform .5s var(--ease, ease);
}

.pulse-cardmodal-card--img-zoom:hover :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
	transform: scale(1.06);
}

.pulse-cardmodal-card--img-cinza :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
	filter: grayscale(1);
}

.pulse-cardmodal-card--img-cinza-hover :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
	filter: grayscale(1);
	transition: filter .35s var(--ease, ease);
}

.pulse-cardmodal-card--img-cinza-hover:hover :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
	filter: none;
}

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

	.pulse-cardmodal-card--img-zoom :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
		transition: none;
	}

	.pulse-cardmodal-card--img-zoom:hover :is(.pulse-cardmodal-card__foto, .pulse-cardmodal-card__video) {
		transform: none;
	}
}

.pulse-cardmodal-card__bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(2, 2, 10, calc(var(--cdm-card-overlay, .45) * .5)), rgba(2, 2, 10, var(--cdm-card-overlay, .45)));
}

/* Conteúdo por cima do fundo — em baixo à esquerda (padrão) ou centrado. */
.pulse-cardmodal-card__conteudo {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	gap: .45rem;
	height: 100%;
	min-height: 0;
}

.pulse-cardmodal-card--centro .pulse-cardmodal-card__conteudo {
	justify-content: center;
	align-items: center;
	text-align: center;
}

/* ============================================================================
 * v1.150 (A) — ESTILOS DO TEXTO NO CARD (campo card_estilo; '' = o de sempre)
 * ----------------------------------------------------------------------------
 * EXTENSÍVEL: estilo novo = +1 choice no PHP + 1 bloco aqui. A cor/opacidade
 * da barra/scrim vem de --pbcm-barra (color-mix emitido só quando difere do
 * escuro 55% da casa). Nos estilos, o véu ANTIGO do __bg::after desliga-se —
 * o tratamento visual é de cada estilo (o PHP também deixa de emitir o
 * --cdm-card-overlay, campo escondido por conditional).
 * ========================================================================== */
.pulse-cardmodal-card--estilo-barra-fundo .pulse-cardmodal-card__bg::after,
.pulse-cardmodal-card--estilo-barra-topo .pulse-cardmodal-card__bg::after,
.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__bg::after {
	background: none;
}

/* Barras: o cartão perde o padding (a barra vai de borda a borda) e o
   conteúdo vira uma faixa translúcida com o texto CENTRADO (o mock do
   utilizador). O blur dá leitura sobre fotos claras e escuras. */
.pulse-cardmodal-card--estilo-barra-fundo,
.pulse-cardmodal-card--estilo-barra-topo,
.pulse-cardmodal-card--estilo-hover {
	padding: 0;
}

.pulse-cardmodal-card--estilo-barra-fundo .pulse-cardmodal-card__conteudo,
.pulse-cardmodal-card--estilo-barra-topo .pulse-cardmodal-card__conteudo,
.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__conteudo {
	position: absolute;
	left: 0;
	right: 0;
	height: auto;
	padding: .8rem 1rem;
	justify-content: center;
	align-items: center;
	text-align: center;
	background: var(--pbcm-barra, rgba(4, 4, 26, .55));
	-webkit-backdrop-filter: blur(4px);
	backdrop-filter: blur(4px);
}

.pulse-cardmodal-card--estilo-barra-fundo .pulse-cardmodal-card__conteudo,
.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__conteudo {
	bottom: 0;
}

.pulse-cardmodal-card--estilo-barra-topo .pulse-cardmodal-card__conteudo {
	top: 0;
}

/* Sobreposição total: véu plano na imagem inteira, texto ao meio. */
.pulse-cardmodal-card--estilo-total .pulse-cardmodal-card__bg::after {
	background: var(--pbcm-barra, rgba(4, 4, 26, .55));
}

.pulse-cardmodal-card--estilo-total .pulse-cardmodal-card__conteudo {
	justify-content: center;
	align-items: center;
	text-align: center;
}

/* Gradiente em baixo: scrim em degradê, texto em baixo (o card_alin de
   sempre continua a decidir esquerda/centro neste estilo). */
.pulse-cardmodal-card--estilo-gradiente .pulse-cardmodal-card__bg::after {
	background: linear-gradient(180deg, transparent 35%, var(--pbcm-barra, rgba(4, 4, 26, .72)));
}

/* Revela no hover: a barra de baixo aparece com o rato/foco; no TOQUE (sem
   hover) e em movimento reduzido fica sempre visível — nada escondido. */
.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__conteudo {
	opacity: 0;
	transform: translateY(8px);
	transition: opacity .3s var(--ease, ease), transform .3s var(--ease, ease);
}

.pulse-cardmodal-card--estilo-hover:hover .pulse-cardmodal-card__conteudo,
.pulse-cardmodal-card--estilo-hover:focus-visible .pulse-cardmodal-card__conteudo {
	opacity: 1;
	transform: none;
}

@media (hover: none) {

	.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__conteudo {
		opacity: 1;
		transform: none;
	}
}

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

	.pulse-cardmodal-card--estilo-hover .pulse-cardmodal-card__conteudo {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

.pulse-cardmodal-card__logo img,
.pulse-cardmodal-card__logoimg {
	display: block;
	max-height: 3rem;
	width: auto;
	max-width: 70%;
	object-fit: contain;
}

.pulse-cardmodal-card__titulo {
	display: block;
	font-size: calc(clamp(1.05rem, .95rem + .5vw, 1.4rem) * var(--text-scale, 1) * var(--cmc-tit-e, 1)); /* v1.321: --cmc-tit-e = «Cartões do Card com Modal — título» (Definições do Tema → Letra e texto) */
	line-height: 1.2;
	letter-spacing: -.01em;
}

.pulse-cardmodal-card__desc {
	display: block;
	font-size: calc(clamp(.85rem, .8rem + .25vw, 1rem) * var(--text-scale, 1) * var(--cmc-txt-e, 1)); /* v1.321: --cmc-txt-e = «… — texto» */
	line-height: 1.5;
	opacity: .82;
}

/* ---- MODAL (vive no <body>; tokens próprios, o padrão do pulse-cmodal) ---- */
.pulse-cardmodal {
	--cdm-scrim-base: #04041a;
	--cdm-bg: #0d0d24;
	--cdm-head: #ffffff;
	--cdm-ink: #eef0fb;
	--cdm-muted: rgba(238, 240, 251, .62);
	--cdm-line: rgba(255, 255, 255, .12);
	--cdm-line-2: rgba(255, 255, 255, .3);
	--cdm-glass: rgba(255, 255, 255, .05);
	--cdm-glass-2: rgba(255, 255, 255, .09);
	--cdm-btn-bg: #ffffff;
	--cdm-btn-ink: #060613;
	/* v1.156: tokens p/ os BLOCOS dentro do modal (etiqueta/destaque da casa). */
	--cdm-eyebrow: #99a0f5;
	--cdm-accent: #4c56e0;
	--cdm-ease: cubic-bezier(.2, .7, .2, 1);

	position: fixed;
	inset: 0;
	z-index: 9500;
	/* acima do painel da navbar (9400), como o pulse-cmodal */
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(.9rem, 3vw, 2rem);
	font-family: var(--pulse-font-sans, "Questrial", system-ui, sans-serif);
	-webkit-font-smoothing: antialiased;
}

.pulse-cardmodal[hidden] {
	display: none;
}

/* v1.262: um modal FECHADO nunca apanha cliques — nem na saída (a página já
   responde enquanto ele se desvanece), nem se algum dia ficar sem o hidden
   (era o que acontecia com o anterior/seguinte: o véu invisível, a toda a
   janela, comia os cliques nos cartões). O editor mostra o modal sem .is-open
   (estático, para editar os blocos) — fica de fora. */
.pulse-cardmodal:not(.is-open):not(.pulse-cardmodal--editor) {
	pointer-events: none;
}

.pulse-cardmodal,
.pulse-cardmodal *,
.pulse-cardmodal *::before,
.pulse-cardmodal *::after {
	box-sizing: border-box;
}

/* Tema claro — paleta espelhada (o padrão do cmodal/tema.css). */
html.pulse-claro .pulse-cardmodal {
	--cdm-scrim-base: #16165c;
	--cdm-bg: #f4f5fb;
	--cdm-head: #10104a;
	--cdm-ink: #16165c;
	--cdm-muted: rgba(22, 22, 92, .72);
	--cdm-line: rgba(22, 22, 92, .16);
	--cdm-line-2: rgba(22, 22, 92, .34);
	--cdm-glass: rgba(22, 22, 92, .05);
	--cdm-glass-2: rgba(22, 22, 92, .09);
	--cdm-btn-bg: #16165c;
	--cdm-btn-ink: #ffffff;
	--cdm-eyebrow: #3939b5;
	--cdm-accent: #3939b5;
}

/* Trava o scroll do fundo enquanto o modal está aberto (posta pelo JS). */
html.pulse-cardmodal-lock {
	overflow: hidden;
}

.pulse-cardmodal__scrim {
	position: absolute;
	inset: 0;
	background: var(--cmodal-scrim, color-mix(in srgb, var(--cdm-scrim-base) 66%, transparent));
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	opacity: 0;
	transition: opacity var(--cmodal-vel, .26s) var(--cdm-ease);
}

.pulse-cardmodal__painel {
	position: relative;
	width: min(var(--cmodal-w, 46rem), 100%);
	max-height: var(--cmodal-hmax, 86svh);
	overflow-y: auto;
	overscroll-behavior: contain;
	background: var(--cdm-bg);
	color: var(--cdm-ink);
	border: 1px solid var(--cdm-line);
	border-radius: 18px;
	padding: clamp(1.4rem, 1rem + 2vw, 2.4rem);
	box-shadow: 0 48px 110px -32px rgba(0, 0, 0, .65);
	opacity: 0;
	transition: opacity var(--cmodal-vel, .26s) var(--cdm-ease), transform var(--cmodal-vel, .26s) var(--cdm-ease);
}

/* v1.247 — Texto + Imagem DENTRO de um modal: o painel é largo e a coluna de
   texto espalhava o conteúdo à esquerda com o vazio todo à direita. Centra-se o
   BLOCO de texto na sua coluna (largura de leitura + margens iguais dos dois
   lados), mantendo as LINHAS alinhadas à esquerda. Só no modal (.pulse-cardmodal)
   — o Texto + Imagem nas secções normais NÃO é apanhado, fica byte-igual. O
   max-width só morde quando a coluna é mais larga que a leitura (o caso do modal
   largo); em coluna estreita vale 100% e nada muda. margin-inline:auto centra o
   item na sua pista da grelha. */
.pulse-cardmodal .pulse-media__text {
	max-width: 42rem;
	margin-inline: auto;
}

/* ---- ANIMAÇÕES (extensíveis): o transform de PARTIDA por data-anim ---- */
.pulse-cardmodal[data-anim="fade"] .pulse-cardmodal__painel {
	transform: none;
}

.pulse-cardmodal[data-anim="zoom"] .pulse-cardmodal__painel {
	transform: scale(.82);
}

.pulse-cardmodal[data-anim="slide"] .pulse-cardmodal__painel {
	transform: translateY(36px);
}

.pulse-cardmodal[data-anim="scale"] .pulse-cardmodal__painel {
	transform: translateY(12px) scale(.96);
}

/* .is-open (posto no rAF seguinte ao tirar o hidden) faz a entrada correr. */
.pulse-cardmodal.is-open .pulse-cardmodal__scrim {
	opacity: 1;
}

.pulse-cardmodal.is-open .pulse-cardmodal__painel {
	opacity: 1;
	transform: none;
}

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

	.pulse-cardmodal__scrim,
	.pulse-cardmodal__painel {
		transition: none;
	}
}

/* ---- Fechar ---- */
.pulse-cardmodal__fechar {
	position: absolute;
	top: .9rem;
	right: .9rem;
	width: 2.5rem;
	height: 2.5rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	appearance: none;
	-webkit-appearance: none;
	background: var(--cdm-glass);
	border: 1px solid var(--cdm-line);
	border-radius: 50%;
	color: var(--cdm-ink);
	cursor: pointer;
	padding: 0;
	z-index: 2;
	transition: border-color .3s var(--cdm-ease), background .3s var(--cdm-ease);
}

.pulse-cardmodal__fechar:hover {
	border-color: var(--cdm-line-2);
	background: var(--cdm-glass-2);
}

.pulse-cardmodal__fechar:focus-visible {
	outline: 2px solid var(--cdm-line-2);
	outline-offset: 3px;
}

.pulse-cardmodal__fechar svg {
	width: 1rem;
	height: 1rem;
	display: block;
}

/* ---- Galeria: imagens sobrepostas, setas circulares da casa ---- */
.pulse-cardmodal__galeria {
	position: relative;
	margin: 0 0 clamp(1rem, .8rem + .8vw, 1.4rem);
}

.pulse-cardmodal__gimgs {
	display: grid;
	border-radius: 12px;
	overflow: hidden;
}

.pulse-cardmodal__gimg {
	grid-area: 1 / 1;
	margin: 0;
	visibility: hidden;
}

.pulse-cardmodal__gimg.esta-ativa {
	visibility: visible;
}

.pulse-cardmodal__gimg img,
.pulse-cardmodal__gfoto {
	display: block;
	width: 100%;
	/* v1.150: proporção/enquadramento/foco por vars — defaults = o de sempre. */
	aspect-ratio: var(--pbcm-g-ratio, 16 / 9);
	object-fit: var(--pbcm-g-fit, cover);
	object-position: var(--pbcm-g-fpos, center);
}

.pulse-cardmodal__gseta {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 2.4rem;
	height: 2.4rem;
	display: grid;
	place-items: center;
	appearance: none;
	-webkit-appearance: none;
	border: 1px solid var(--cdm-line-2);
	border-radius: 999px;
	background: var(--cdm-bg);
	color: var(--cdm-ink);
	font-size: 1.2rem;
	line-height: 1;
	cursor: pointer;
	padding: 0;
	transition: border-color .2s var(--cdm-ease), color .2s var(--cdm-ease);
}

.pulse-cardmodal__gseta:hover {
	border-color: var(--cdm-line);
	color: var(--cdm-head);
}

.pulse-cardmodal__gseta--prev {
	left: .5rem;
}

.pulse-cardmodal__gseta--next {
	right: .5rem;
}

/* ---- Texto do modal ---- */
.pulse-cardmodal__titulo {
	color: var(--cdm-head);
	font-size: calc(clamp(1.3rem, 1.1rem + 1vw, 1.9rem) * var(--cdm-tit-e, 1)); /* v1.321: --cdm-tit-e = «Modais — títulos» (Definições do Tema → Letra e texto) */
	line-height: 1.15;
	font-weight: 400;
	letter-spacing: -.01em;
	margin: 0 0 .35rem;
	padding-right: 2.6rem;
	/* não entrar debaixo do X */
}

.pulse-cardmodal__sub {
	color: var(--cdm-muted);
	font-size: calc(1rem * var(--cdm-txt-e, 1)); /* v1.321: --cdm-txt-e = «Modais — texto» */
	margin: 0 0 1rem;
}

.pulse-cardmodal__texto {
	color: var(--cdm-ink);
	font-size: calc(1rem * var(--cdm-txt-e, 1));
	line-height: 1.7;
}

.pulse-cardmodal__texto p {
	margin: 0 0 1em;
}

.pulse-cardmodal__texto ul,
.pulse-cardmodal__texto ol {
	margin: 0 0 1em;
	padding-left: 1.3em;
}

.pulse-cardmodal__texto :last-child {
	margin-bottom: 0;
}

/* ---- Botões de ação: base própria do .pap-btn DENTRO do modal (o
   aparencia.css escopa o pap-btn a .pulse-sec, que aqui não existe — o
   modal vive no <body>; a pílula da casa é reproduzida com os tokens do
   modal para claro/escuro baterem certo). ---- */
.pulse-cardmodal__acoes {
	display: flex;
	flex-wrap: wrap;
	gap: .75rem;
	margin-top: clamp(1.1rem, .9rem + .8vw, 1.6rem);
}

.pulse-cardmodal__acoes .pap-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .55rem;
	padding: .95rem 2.2rem;
	background: var(--cdm-btn-bg);
	color: var(--cdm-btn-ink);
	border: 1px solid transparent;
	border-radius: 999px;
	font-size: .95rem;
	font-family: inherit;
	text-decoration: none;
	transition: transform .25s var(--cdm-ease), background .25s var(--cdm-ease);
}

.pulse-cardmodal__acoes .pap-btn:hover {
	transform: translateY(-2px);
}

.pulse-cardmodal__acoes .pap-btn:focus-visible {
	outline: 2px solid var(--cdm-line-2);
	outline-offset: 3px;
}

/* ============================================================================
 * v1.150 (C) — LAYOUT DO PAINEL + SCROLLBAR
 * ========================================================================== */

/* Alinhamento centrado do conteúdo do modal. */
.pulse-cardmodal__painel--centro {
	text-align: center;
}

.pulse-cardmodal__painel--centro .pulse-cardmodal__acoes {
	justify-content: center;
}

/* Espaçamento do painel (padding). */
.pulse-cardmodal__painel--esp-compacto {
	padding: clamp(1rem, .8rem + .8vw, 1.4rem);
}

.pulse-cardmodal__painel--esp-arejado {
	padding: clamp(2rem, 1.5rem + 2.6vw, 3.4rem);
}

/* Galeria AO LADO do texto (só em ecrãs com espaço; abaixo volta ao topo).
   Grelha simples: a galeria ocupa a coluna esquerda a toda a altura do
   conteúdo; título/sub/texto/ações empilham na direita. */
@media (min-width: 721px) {

	.pulse-cardmodal__painel--g-lado {
		display: grid;
		grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
		column-gap: clamp(1.2rem, 1rem + 1vw, 1.8rem);
		align-content: start;
	}

	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__galeria {
		grid-column: 1;
		grid-row: 1 / span 8;
		margin: 0;
	}

	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__video,
	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__titulo,
	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__sub,
	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__texto,
	.pulse-cardmodal__painel--g-lado .pulse-cardmodal__acoes {
		grid-column: 2;
	}
}

/* SCROLLBAR do painel (adenda v1.150): quando o conteúdo transborda, a barra
   nativa grossa dava um ar tosco ao modal — fica fina, arredondada e nas
   cores dos tokens (claro/escuro de graça: --cdm-* mudam com html.pulse-claro).
   Só APRESENTAÇÃO do scroll do PAINEL — o scroll-lock do fundo (classe no
   <html>) não é tocado. */
.pulse-cardmodal__painel {
	scrollbar-width: thin;
	scrollbar-color: var(--cdm-line-2) transparent;
}

.pulse-cardmodal__painel::-webkit-scrollbar {
	width: 8px;
}

.pulse-cardmodal__painel::-webkit-scrollbar-track {
	background: transparent;
}

.pulse-cardmodal__painel::-webkit-scrollbar-thumb {
	background: var(--cdm-line-2);
	border-radius: 999px;
	border: 2px solid var(--cdm-bg);
	/* a moldura "afina" o polegar e cola-o ao fundo do painel */
}

.pulse-cardmodal__painel::-webkit-scrollbar-thumb:hover {
	background: var(--cdm-muted);
}

/* ---- Responsivo: no telemóvel o modal ocupa quase tudo, margens seguras ---- */
@media (max-width: 560px) {

	.pulse-cardmodal {
		padding: .6rem;
	}

	.pulse-cardmodal__painel {
		width: 100%;
		max-height: 94svh;
		padding: 1.1rem;
	}

	.pulse-cardmodal__titulo {
		font-size: calc(1.25rem * var(--cdm-tit-e, 1));
	}

	.pulse-cardmodal__acoes .pap-btn {
		width: 100%;
	}
}

/* ============================================================================
 * v1.155 — VÍDEO no card e no modal
 * ----------------------------------------------------------------------------
 * · Fundo do CARD: o <video> (padrão da casa — mudo/loop/playsinline) fica
 *   por CIMA da foto (que é o poster/fallback) e por baixo do véu/conteúdo
 *   (o ::after do __bg pinta depois dos filhos; o __conteudo tem z-index 1).
 *   Herda o enquadramento/foco das vars da imagem (--pbcm-fit/--pbcm-fpos);
 *   desde a v1.158 também o zoom e o filtro, pelas classes --img-* (acima).
 *   Em "movimento reduzido" o vídeo esconde-se e fica o poster — sem JS.
 * · MODAL: vídeo 16:9 responsivo (upload → <video controls>; YouTube/Vimeo →
 *   iframe), antes da galeria; no layout "galeria ao lado" acompanha o texto
 *   (coluna 2, regra acima).
 * ========================================================================== */
.pulse-cardmodal-card__video {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: var(--pbcm-fit, cover);
	object-position: var(--pbcm-fpos, center);
	pointer-events: none;
}

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

	.pulse-cardmodal-card__video {
		display: none;
	}
}

.pulse-cardmodal__video {
	margin: 0 0 clamp(1rem, .8rem + .8vw, 1.4rem);
	border-radius: 12px;
	overflow: hidden;
	background: #000;
}

/* v1.158: o vídeo do MODAL segue as definições da GALERIA (--pbcm-g-*), como
   as imagens: a PROPORÇÃO vale para os dois (é a caixa — num iframe é o único
   controlo que existe; object-fit/position não atravessam a fronteira do
   iframe); o ENQUADRAMENTO/FOCO só no <video> (media real, recortável).
   HONESTIDADE: desde a v1.156 (corpo do modal por BLOCOS) nada emite este
   markup nem estas vars (os campos modal_video/galeria e os globais --pbcm-g-*
   saíram) — regras legadas/dormentes, coerentes com a imagem se voltarem.
   A proporção cai no 16:9 de sempre; o object-fit cover/center é NOVO no
   <video> (antes era o fill implícito — igual quando o vídeo é 16:9 na caixa
   16:9, e alinhado com a galeria: cortar em vez de espalmar) — como o markup
   não se emite em lado nenhum, nenhuma página muda. */
.pulse-cardmodal__video video,
.pulse-cardmodal__video iframe {
	display: block;
	width: 100%;
	aspect-ratio: var(--pbcm-g-ratio, 16 / 9);
	border: 0;
}

.pulse-cardmodal__video video {
	object-fit: var(--pbcm-g-fit, cover);
	object-position: var(--pbcm-g-fpos, center);
}

/* ============================================================================
 * v1.156 — CORPO DO MODAL POR BLOCOS (Pulse — Modal / .pulse-modal-corpo)
 * ----------------------------------------------------------------------------
 * O conteúdo do modal passou a InnerBlocks. Três responsabilidades aqui:
 * 1. TOKENS: o modal vive no <body> — os blocos lá dentro (que leem os tokens
 *    da casa) receberiam os do :root/tema errados ou nenhuns. O painel
 *    re-declara os tokens PRINCIPAIS mapeados aos --cdm-* (que já mudam com
 *    claro/escuro) → títulos/textos/etiquetas/botões dos blocos saem coerentes.
 * 2. CONTENÇÃO: um bloco de SECÇÃO (.pulse-sec) é full-bleed por natureza
 *    (100vw + margens negativas) — dentro do painel isso rebentava para fora.
 *    Despe-se de secção (o mesmo espírito das "colunas aninhadas"): largura
 *    100%, sem margens viewport, respiro compacto, goteira 0 (o painel já tem
 *    padding próprio).
 * 3. EDITOR: com --editor (posto pelo render em $is_preview) o modal deixa de
 *    ser fixed/hidden e mostra-se estático por baixo do cartão — os blocos
 *    editam-se inline (padrão Vitrine). Véu/X escondidos lá.
 * ========================================================================== */
.pulse-cardmodal__painel {
	--bg: var(--cdm-bg);
	--bg2: var(--cdm-glass);
	--bg3: var(--cdm-glass);
	--head: var(--cdm-head);
	--ink: var(--cdm-ink);
	--muted: var(--cdm-muted);
	--eyebrow: var(--cdm-eyebrow);
	--accent: var(--cdm-accent);
	--pulse-accent: var(--cdm-accent);
	--line: var(--cdm-line);
	--line-2: var(--cdm-line-2);
	--glass: var(--cdm-glass);
	--glass-2: var(--cdm-glass-2);
	--pill: 999px;
	--soft-r: 14px;
	--ease: var(--cdm-ease);
}

/* Secções de blocos DENTRO do painel: despem o full-bleed e o respiro grande. */
.pulse-cardmodal__painel .pulse-sec {
	width: 100%;
	max-width: 100%;
	margin-inline: 0;
	padding-block: clamp(1rem, .8rem + .8vw, 1.6rem);
	--pad-x: 0px;
	--maxw: 100%;
	overflow: visible;
	background: transparent;
}

.pulse-modal-corpo {
	min-width: 0;
}

/* ---- EDITOR (--editor): o modal mostra-se estático, por baixo do cartão,
   para os blocos serem editáveis inline; véu e X não fazem lá sentido. ---- */
.pulse-cardmodal.pulse-cardmodal--editor {
	position: static;
	inset: auto;
	z-index: auto;
	display: block;
	padding: .75rem 0 0;
}

.pulse-cardmodal.pulse-cardmodal--editor .pulse-cardmodal__scrim,
.pulse-cardmodal.pulse-cardmodal--editor .pulse-cardmodal__fechar {
	display: none;
}

.pulse-cardmodal.pulse-cardmodal--editor .pulse-cardmodal__painel {
	opacity: 1;
	transform: none;
	width: 100%;
	max-height: none;
	overflow: visible;
	box-shadow: none;
	border-style: dashed;
	/* pista visual no canvas: isto é o CONTEÚDO DO MODAL, não a página */
}

/* ============================================================================
 * v1.157 — OPT-OUT DOS PARÂMETROS GLOBAIS no Card com Modal / Pulse — Modal
 * ----------------------------------------------------------------------------
 * O grupo partilhado v1.152 também vive nestes blocos; o render marca o CARD,
 * o ELEMENTO DO MODAL (a classe viaja com ele para o <body>) e o corpo
 * (.pulse-modal-corpo). Estes reverts são o par dos do aparencia.css
 * (v1.152/1.153), adaptados a dois alcances:
 * · CHROME do card — só as categorias que lá existem: cores (tokens que o
 *   cartão lê) e tipografia (letra/escala). Etiqueta, botões e espaçamento
 *   são MOOT no chrome (o cartão não tem etiqueta, não é uma família de
 *   botão global e tem medidas próprias) — valem só no conteúdo.
 * · CONTEÚDO do modal — por DESCENDÊNCIA: os blocos lá dentro são .pulse-sec
 *   e o :is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-* dá (0,3,0)+
 *   — acima de qualquer emissão global (0,1,x/0,2,x), com as MESMAS exceções
 *   que preservam as escolhas por-secção. Semântica: o opt-out do Card cobre
 *   o modal todo; o do Pulse — Modal só o seu conteúdo; sobrepõem-se sem
 *   conflito (regras idênticas).
 * · pad-x/maxw ficam DE FORA do revert de espaçamento aqui de propósito: a
 *   contenção v1.156 (--pad-x:0 no painel) é layout do modal, não é opção
 *   global — revertê-los rebentava o encaixe.
 * Tudo Sim / por gravar → nenhuma classe → nada daqui se aplica (aditivo).
 * ========================================================================== */

/* ---- CORES: chrome do card (tokens que o cartão consome da secção-mãe) ---- */
.pulse-cardmodal-card.pulse-sec--nog-cores {
	--head: #ffffff;
	--ink: #eef0fb;
	--accent: #4c56e0;
	--line: rgba(255, 255, 255, .1);
	--line-2: rgba(255, 255, 255, .3);
	--glass: rgba(255, 255, 255, .045);
	--glass-2: rgba(255, 255, 255, .09);
}

html.pulse-claro .pulse-cardmodal-card.pulse-sec--nog-cores {
	--head: #10104a;
	--ink: #16165c;
	--accent: #3939b5;
	--line: rgba(22, 22, 92, .16);
	--line-2: rgba(22, 22, 92, .34);
	--glass: rgba(22, 22, 92, .05);
	--glass-2: rgba(22, 22, 92, .09);
}

/* ---- CORES: secções de blocos dentro do modal (base escuro/claro da casa) */
:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-cores .pulse-sec {
	--bg: #060613;
	--bg2: #0b0b20;
	--bg3: #101028;
	--ink: #eef0fb;
	--muted: rgba(238, 240, 251, .62);
	--head: #ffffff;
	--eyebrow: #99a0f5;
	--accent: #4c56e0;
}

html.pulse-claro :is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-cores .pulse-sec {
	--bg: #f4f5fb;
	--bg2: #dfe2f3;
	--bg3: #eaecf7;
	--ink: #16165c;
	--muted: color-mix(in srgb, #16165c 72%, transparent);
	--head: #10104a;
	--eyebrow: #3939b5;
	--accent: #3939b5;
	--pulse-accent: #3939b5;
}

/* ---- TIPOGRAFIA: chrome do card + blocos ---- */
.pulse-cardmodal-card.pulse-sec--nog-tipo {
	font-family: var(--pulse-font-sans, "Questrial", system-ui, sans-serif);
	--text-scale: 1;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-tipo .pulse-sec {
	font-family: var(--pulse-font-sans, "Questrial", system-ui, sans-serif);
	--pap-t-lh: 1;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-tipo .pulse-sec.pulse-sec--text-md {
	--text-scale: 1;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-tipo .pulse-sec :is(.pulse-sec__heading, .pulse-hero__title, .pulse-cta__heading, .pulse-card__title, .pulse-value__title, .pulse-brand__tagline, .pulse-news__title, .pulse-vitrine__title) {
	font-weight: 400;
}

/* ---- ESPAÇAMENTO: só grelhas/cantos/respiro dos blocos (ver nota acima) ---- */
:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-espaco .pulse-sec {
	--pulse-sec-py: 1;
	--gap: clamp(1rem, .7rem + .9vw, 1.7rem);
	--gap-lg: clamp(2rem, .9rem + 3.4vw, 5.5rem);
	--soft-r: 18px;
}

/* ---- ETIQUETA: o rótulo dos blocos volta ao ADN base (par do v1.152, com
   as MESMAS exceções que preservam as escolhas por-secção) ---- */
:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-et .pulse-sec .pulse-sec__label {
	display: inline-flex;
	width: auto;
	align-items: center;
	gap: .75rem;
	font-size: calc(clamp(.72rem, .68rem + .22vw, .95rem) * var(--text-scale, 1) * var(--pap-t-e, 1) * var(--pap-t-eb, 1));
	font-weight: 400;
	text-transform: uppercase;
	letter-spacing: .22em;
	color: var(--eyebrow);
	margin: 0 0 clamp(1.25rem, .9rem + 1.6vw, 2.25rem);
	text-decoration-line: none;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-et .pulse-sec .pulse-sec__label:not(.pap-e-nomark):not(.pap-e-line-after):not([style*="--pap-et-linha-"])::before {
	content: "";
	width: 2.4rem;
	height: 1px;
	background: currentColor;
	opacity: .8;
	position: static;
	transform: none;
	line-height: normal;
	letter-spacing: inherit;
	color: inherit;
	-webkit-mask-image: none;
	mask-image: none;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-et .pulse-sec .pulse-sec__label:not(.pap-e-line-after):not(.pap-e-line-both)::after {
	content: none;
}

@media (max-width: 480px) {

	:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-et .pulse-sec .pulse-sec__label {
		letter-spacing: .18em;
	}

	:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-et .pulse-sec .pulse-sec__label:not(.pap-e-nomark):not(.pap-e-line-after):not([style*="--pap-et-linha-"])::before {
		width: 1.6rem;
	}
}

/* ---- BOTÕES nos blocos do modal: pap-btn por vars (as escolhas POR SECÇÃO,
   inline, continuam a ganhar) + a única família clássica que a whitelist do
   corpo traz (o brand__cta do cartão de Marca). ---- */
:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes .pap-btn:not(.pulse-pill) {
	--pap-btn-r: initial;
	--pap-btn-bg: initial;
	--pap-btn-cor: initial;
	--pap-btn-bd: initial;
	--pap-btn-sh: initial;
	--pap-btn-hbg: initial;
	--pap-btn-hcor: initial;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes a.pap-btn:not(.pulse-pill):not(.pap-btn--s):not(.pap-btn--l) {
	padding: 1.05rem 2.4rem;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes a.pap-btn:not(.pulse-pill):not(.pap-btn--full):not(.pap-btn--al-esq):not(.pap-btn--al-centro):not(.pap-btn--al-dir) {
	margin-inline: 0;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes .pap-btn:not(.pulse-pill):hover {
	box-shadow: var(--pap-btn-sh, 0 18px 44px -18px rgba(0, 0, 0, .55));
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes .pulse-sec a.pulse-brand__cta:not(.pap-btn) {
	background: #fff !important;
	color: #060613 !important;
	padding: .8rem 2rem !important;
	border-radius: var(--pill) !important;
	border: 0 !important;
	box-shadow: 0 14px 36px -14px rgba(255, 255, 255, .3) !important;
	filter: none !important;
}

:is(.pulse-cardmodal, .pulse-modal-corpo).pulse-sec--nog-botoes .pulse-sec a.pulse-brand__cta:not(.pap-btn):hover {
	background: #fff !important;
	color: #060613 !important;
	transform: translateY(-2px) !important;
	box-shadow: 0 20px 44px -14px rgba(255, 255, 255, .45) !important;
}

/* ============================================================================
 * v1.160 — CORES GLOBAIS DO TEMA no modal: o PAR DO OPT-OUT
 * ----------------------------------------------------------------------------
 * O gerador (tema-definicoes.php) passou a emitir as cores de CONTEÚDO
 * personalizadas do tema (head/ink/muted-derivado/eyebrow/accent) nos próprios
 * --cdm-*, em body .pulse-cardmodal (0,1,1) e html.pulse-claro body
 * .pulse-cardmodal (0,2,2) — especificidade ACIMA das declarações base deste
 * ficheiro (0,1,0 / 0,2,1) de propósito: este ficheiro sai DEPOIS no documento
 * (rodapé) e num empate a ordem devolveria a base por cima do global.
 * Aqui fecha-se o OPT-OUT: com "Cores" desligado (pulse-sec--nog-cores,
 * v1.157) o modal volta à BASE DE FÁBRICA — estas regras (0,2,0; claro 0,3,1)
 * ganham ao emit do gerador e repõem os --cdm-* de cima deste ficheiro. Os
 * BLOCOS lá dentro já eram repostos pelo revert v1.157 (re-declara os tokens
 * mapeados nos próprios .pulse-sec); isto cobre o que herda os --cdm-*
 * diretamente (títulos do painel, X, scrollbar, botões do modal). Sem opt-out
 * e sem cores personalizadas nada disto muda o computado (aditivo). */
.pulse-cardmodal.pulse-sec--nog-cores {
	--cdm-head: #ffffff;
	--cdm-ink: #eef0fb;
	--cdm-muted: rgba(238, 240, 251, .62);
	--cdm-eyebrow: #99a0f5;
	--cdm-accent: #4c56e0;
}

html.pulse-claro .pulse-cardmodal.pulse-sec--nog-cores {
	--cdm-head: #10104a;
	--cdm-ink: #16165c;
	--cdm-muted: rgba(22, 22, 92, .72);
	--cdm-eyebrow: #3939b5;
	--cdm-accent: #3939b5;
}

/* ============================================================================
 * v1.164 — PROPORÇÃO "AUTOMÁTICA (SEGUE A IMAGEM)" (--ratio-auto)
 * ----------------------------------------------------------------------------
 * A 3.ª via do enquadramento: o CARTÃO assume o rácio NATURAL da imagem —
 * aparece TODA, sem cortar (o que o cobrir faz) e sem black bars (o que o
 * conter faz numa caixa de rácio fixo). MECÂNICA: o __bg deixa de ser camada
 * absoluta e passa a ditar a altura (position:relative; foto em fluxo com
 * height:auto); o véu ::after continua absoluto por cima; o CONTEÚDO cobre o
 * cartão em absoluto SÓ quando há média (:has(__bg) — o padrão do editor no
 * sections.css) e fica em fluxo sem ela; os estilos que posicionam o conteúdo
 * sozinhos (barras/hover) ficam de fora do cover (:not) — as faixas pousam no
 * fundo/topo como sempre. O padding do cartão passa a 0 (a média vai de borda
 * a borda, como na camada absoluta de sempre) e é o conteúdo que o repõe.
 * object-fit/position ficam moot (a caixa É o rácio natural — o render nem os
 * emite); zoom/filtro continuam (transform/filter na foto, o overflow:hidden
 * do cartão corta o excesso do zoom). VÍDEO: com poster presente mantém-se
 * ABSOLUTO por cima da foto (segue o rácio DELA; se o do vídeo diferir,
 * recorta — honesto); sem foto é o 1.º filho do __bg e dita ele a altura.
 * min-height = recurso p/ cartão só com logo/texto (não colapsa). Sem 'auto'
 * escolhido nada disto dispara (aditivo, byte-igual).
 * ========================================================================== */
.pulse-cardmodal-card--ratio-auto {
	aspect-ratio: auto;
	padding: 0;
	min-height: 8rem;
}

.pulse-cardmodal-card--ratio-auto .pulse-cardmodal-card__bg {
	position: relative;
	inset: auto;
}

.pulse-cardmodal-card--ratio-auto .pulse-cardmodal-card__foto {
	height: auto;
}

.pulse-cardmodal-card--ratio-auto .pulse-cardmodal-card__video:first-child {
	position: static;
	height: auto;
}

/* O conteúdo herda o padding que o cartão largou (também sem média, em
   fluxo); nas barras/hover não — a faixa traz o padding próprio. */
.pulse-cardmodal-card--ratio-auto:not(.pulse-cardmodal-card--estilo-barra-fundo):not(.pulse-cardmodal-card--estilo-barra-topo):not(.pulse-cardmodal-card--estilo-hover) .pulse-cardmodal-card__conteudo {
	padding: clamp(1rem, .8rem + 1vw, 1.5rem);
}

.pulse-cardmodal-card--ratio-auto:has(.pulse-cardmodal-card__bg):not(.pulse-cardmodal-card--estilo-barra-fundo):not(.pulse-cardmodal-card--estilo-barra-topo):not(.pulse-cardmodal-card--estilo-hover) .pulse-cardmodal-card__conteudo {
	position: absolute;
	inset: 0;
	z-index: 1;
}

/* ============================================================================
 * v1.165 — OPÇÕES DE CONTEÚDO do Pulse — Modal (.pulse-modal-corpo--*)
 * ----------------------------------------------------------------------------
 * O corpo por blocos ganhou 3 opções (bloco OU global, modelo mestre v1.163;
 * o render põe SÓ classes — sem escolhas, nem um byte novo):
 * · --centro: text-align no corpo — títulos/prosa/etiquetas (inline-flex) e
 *   botões (inline-flex) centram por herança; blocos com alinhamento próprio
 *   por-secção continuam a ganhar (regras deles são mais específicas).
 * · --pad-*: respiro do corpo FACE ao padding do painel — arejado acrescenta
 *   padding; compacto aproxima das bordas com margem negativa de MEIA medida
 *   do padding do painel (o clamp de lá, a fonte única do valor).
 * · --hero-*: modos de imagem, alvo = os blocos de imagem que o corpo aceita
 *   (core .wp-block-image e o Elemento Imagem .pulse-el-imagem) como FILHOS
 *   DIRETOS do corpo — melhor esforço declarado: imagens aninhadas em
 *   Colunas/secções não são apanhadas (seria adivinhar estruturas).
 *   header = a 1.ª imagem quebra o padding do painel (margens negativas com
 *   o clamp de lá) e vira cabeçalho panorâmico 21/9 com os cantos de cima do
 *   painel (18px); todas = todas as imagens diretas panorâmicas dentro do
 *   padding; overlay = a 1.ª imagem vira FUNDO absoluto com véu
 *   (--cdm-scrim-base — segue claro/escuro) e os blocos seguintes pousam por
 *   cima (z-index 1) — o modo mais frágil: espera "imagem primeiro, texto a
 *   seguir"; min-height segura o corpo se o resto for curto.
 * ========================================================================== */
.pulse-modal-corpo--centro {
	text-align: center;
}

/* v1.265: Justificado — o texto do corpo às duas margens (com hifenização). */
.pulse-modal-corpo--just {
	text-align: justify;
	-webkit-hyphens: auto;
	hyphens: auto;
	hyphenate-limit-chars: 7 3 3;
}

.pulse-modal-corpo--pad-arejado {
	padding: clamp(.8rem, .6rem + 1vw, 1.6rem);
}

.pulse-modal-corpo--pad-compacto {
	margin: calc(clamp(1.4rem, 1rem + 2vw, 2.4rem) * -.5);
}

/* ---- hero: header (a 1.ª imagem encosta às bordas do painel) ---- */
.pulse-modal-corpo--hero-header> :is(.wp-block-image, .pulse-el-imagem):first-child {
	margin: calc(-1 * clamp(1.4rem, 1rem + 2vw, 2.4rem)) calc(-1 * clamp(1.4rem, 1rem + 2vw, 2.4rem)) clamp(1rem, .8rem + .8vw, 1.4rem);
}

.pulse-modal-corpo--hero-header> :is(.wp-block-image, .pulse-el-imagem):first-child img {
	display: block;
	width: 100%;
	aspect-ratio: 21 / 9;
	object-fit: cover;
	border-radius: 18px 18px 0 0;
	/* casa com os cantos do painel */
}

/* ---- hero: todas (todas as imagens diretas panorâmicas) ---- */
.pulse-modal-corpo--hero-todas> :is(.wp-block-image, .pulse-el-imagem) img {
	display: block;
	width: 100%;
	aspect-ratio: 21 / 9;
	object-fit: cover;
	border-radius: 12px;
}

/* ---- hero: overlay (a 1.ª imagem como fundo, o texto por cima) ---- */
.pulse-modal-corpo--hero-overlay {
	position: relative;
	min-height: 14rem;
	padding: clamp(1rem, .8rem + 1vw, 1.8rem);
}

.pulse-modal-corpo--hero-overlay> :is(.wp-block-image, .pulse-el-imagem):first-child {
	position: absolute;
	inset: 0;
	margin: 0;
	z-index: 0;
}

.pulse-modal-corpo--hero-overlay> :is(.wp-block-image, .pulse-el-imagem):first-child img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 12px;
}

.pulse-modal-corpo--hero-overlay> :is(.wp-block-image, .pulse-el-imagem):first-child::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 12px;
	background: color-mix(in srgb, var(--cdm-scrim-base) 55%, transparent);
}

.pulse-modal-corpo--hero-overlay>*:not(:first-child) {
	position: relative;
	z-index: 1;
}

/* ============================================================================
 * v1.215 — BOTÃO COM MODAL (.pulse-cardmodal-btn, o gatilho-botão)
 * ----------------------------------------------------------------------------
 * O ADN do .pap-btn (aparencia.css) está escopado a a.pap-btn — um <a>. O
 * gatilho novo é um <button> (abre o modal, não navega), por isso o ADN
 * replica-se aqui NAS MESMAS vars --pap-btn-* e com os MESMOS valores:
 * · as VARS globais das Definições do Tema chegam de graça — o gerador
 *   emite-as element-agnóstico em .pulse-sec .pap-btn:not(.pulse-pill) — e as
 *   por-bloco vêm inline (ganham às globais, como em todos os botões);
 * · tamanho/alinhamento GLOBAIS saem no gerador como regras a.pap-btn (não são
 *   vars) — para o botão, o RENDER resolve-os em classes pap-btn--s/l e
 *   pap-btn--al-* (replicadas abaixo com os mesmos px/margens);
 * · fora de uma secção (.pulse-sec) valem os fallbacks — a pílula branca da
 *   casa, o mesmo contrato dos fallbacks do próprio aparencia.css.
 * PAR DECLARADO: mudar os valores do a.pap-btn lá = mudar aqui também.
 * ========================================================================== */
button.pap-btn.pulse-cardmodal-btn {
	appearance: none;
	-webkit-appearance: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .6rem;
	padding: 1.05rem 2.4rem;
	border-radius: var(--pap-btn-r, var(--pill, 999px));
	background: var(--pap-btn-bg, #fff);
	color: var(--pap-btn-cor, #0b0b20);
	border: var(--pap-btn-bd, 0);
	box-shadow: var(--pap-btn-sh, 0 18px 44px -18px rgba(0, 0, 0, .55));
	font-family: inherit;
	font-size: calc(1rem * var(--text-scale, 1));
	line-height: 1.1;
	text-decoration: none;
	cursor: pointer;
	transition: transform .35s var(--ease, ease), background .35s var(--ease, ease), color .35s var(--ease, ease), box-shadow .35s var(--ease, ease);
}

/* v1.232 — o hover de cor passa a valer SÓ fora de .pulse-sec (:where não
   custa especificidade — continua 0,3,1): dentro das secções quem o declara é
   o gémeo no aparencia.css, ANTES do <style> do gerador, para os empates de
   contexto (painel "Fundo claro" com transparência global) resolverem como no
   <a> — aqui, no rodapé, esta regra ganhava-os ao contrário. Fora de secção
   nada muda: as mesmas declarações, a mesma especificidade. */
button.pap-btn.pulse-cardmodal-btn:where(:not(.pulse-sec *)):hover {
	background: var(--pap-btn-hbg, var(--pap-btn-bg, #fff));
	color: var(--pap-btn-hcor, var(--pap-btn-cor, #0b0b20));
}

/* Foco de teclado visível — o mesmo anel do card (um <button> novo não herda
   nenhum do tema). */
button.pap-btn.pulse-cardmodal-btn:focus-visible {
	outline: 2px solid var(--accent, #4c56e0);
	outline-offset: 3px;
}

/* Tamanho/largura/alinhamento por CLASSE — por-bloco (emissor) OU o global
   resolvido pelo render; valores IGUAIS aos do aparencia.css/gerador. */
button.pap-btn.pulse-cardmodal-btn.pap-btn--s {
	padding: .7rem 1.6rem;
	font-size: calc(.9rem * var(--text-scale, 1));
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--l {
	padding: 1.25rem 3rem;
	font-size: calc(1.12rem * var(--text-scale, 1));
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--full {
	width: 100%;
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--al-esq,
button.pap-btn.pulse-cardmodal-btn.pap-btn--al-centro,
button.pap-btn.pulse-cardmodal-btn.pap-btn--al-dir {
	display: flex;
	width: fit-content;
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--al-esq {
	margin-inline: 0 auto;
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--al-centro {
	margin-inline: auto;
}

button.pap-btn.pulse-cardmodal-btn.pap-btn--al-dir {
	margin-inline: auto 0;
}

/* "Toda a largura" manda na largura mesmo com alinhamento (par do aparencia). */
button.pap-btn.pulse-cardmodal-btn.pap-btn--full[class*="pap-btn--al-"] {
	width: 100%;
}

/* Ícone: fora de .pulse-sec a regra de lá não chega — o par local. */
.pulse-cardmodal-btn .pap-btn__icone {
	width: 1.05em;
	height: 1.05em;
	flex: none;
}

/* Efeitos de hover por classe (par do aparencia.css). */
button.pap-btn.pulse-cardmodal-btn.pap-btn-hv-elevar:hover {
	transform: translateY(-4px);
}

button.pap-btn.pulse-cardmodal-btn.pap-btn-hv-escurecer:hover {
	filter: brightness(.86);
}

button.pap-btn.pulse-cardmodal-btn.pap-btn-hv-inverter:hover {
	background: var(--pap-btn-cor, #0b0b20);
	color: var(--pap-btn-bg, #fff);
}

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

	button.pap-btn.pulse-cardmodal-btn {
		transition: none;
	}
}

/* ============================================================================
 * v1.235 — MENSAGEM DE SUCESSO (.pulse-cardmodal-msg)
 * ----------------------------------------------------------------------------
 * O card-modal.js SUBSTITUI o gatilho do Botão com Modal por este
 * <p role="status" tabindex="-1"> quando o formulário (CF7) dentro do SEU
 * modal envia com sucesso (wpcf7mailsent). Discreta e informativa de
 * propósito — não é um botão: sem hover, sem cursor, sem sombra. Tokens do
 * tema com fallbacks ESCUROS (o contrato deste ficheiro) e o par claro logo
 * abaixo — dentro de uma secção os tokens já mudam por tema sozinhos, os
 * fallbacks só falam com o gatilho solto, fora de .pulse-sec.
 * ========================================================================== */
.pulse-cardmodal-msg {
	display: inline-flex;
	align-items: center;
	gap: .6rem;
	margin: 0;
	/* o respiro vertical do botão (1.05rem) — a mensagem ocupa o LUGAR dele
	   sem salto de layout; menos aos lados: já não é um alvo de clique */
	padding: 1.05rem 1.6rem;
	border: 1px solid var(--line, rgba(255, 255, 255, .14));
	border-radius: var(--soft-r, 14px);
	background: var(--glass, rgba(255, 255, 255, .05));
	color: var(--head, #fff);
	font-family: inherit;
	font-size: calc(1rem * var(--text-scale, 1));
	line-height: 1.3;
	animation: pulse-cdm-msg-in .45s var(--ease, ease) both;
}

/* Recebe o foco programático que o fechar() devolvia ao botão — sem anel:
   não é interativa (o role="status" já a anuncia aos leitores de ecrã). */
.pulse-cardmodal-msg:focus {
	outline: none;
}

.pulse-cardmodal-msg .pulse-cardmodal-msg__icone {
	width: 1.1em;
	height: 1.1em;
	flex: none;
	color: var(--accent, #4c56e0);
}

/* TEMA claro: só os FALLBACKS mudam de pele (fora de secção); dentro de
   .pulse-sec quem muda com o tema são os próprios tokens. */
html.pulse-claro .pulse-cardmodal-msg {
	border-color: var(--line, rgba(22, 22, 92, .16));
	background: var(--glass, rgba(22, 22, 92, .05));
	color: var(--head, #10104a);
}

@keyframes pulse-cdm-msg-in {

	from {
		opacity: 0;
	}

	to {
		opacity: 1;
	}
}

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

	.pulse-cardmodal-msg {
		animation: none;
	}
}
/* ============================================================================
 * v1.261 — DESENHOS DO MODAL: FICHA e PALCO (as opções 1 e 3 do preview-modais)
 * ----------------------------------------------------------------------------
 * Campo "Desenho do modal" (Definições do Tema → Card com Modal — o modal, ou o
 * do cartão com os globais desligados) → .pulse-cardmodal--ficha|--palco no
 * elemento do modal (viaja com ele para o <body>). NENHUM conteúdo novo: o CSS
 * re-arruma o 1.º bloco Texto + Imagem do corpo (a imagem vira o cabeçalho, na
 * Ficha, ou o fundo, no Palco; o título, a prosa e a ÚLTIMA lista do texto — as
 * capacidades — arrumam-se à volta). O rodapé (.pulse-cardmodal__ft: botão de
 * ação, anterior/seguinte, "Fechar" no telemóvel) é desenhado pelo PHP só com
 * desenho escolhido. Sem a classe nada daqui atua; o editor nunca a recebe.
 * ========================================================================== */

/* ---- Rodapé comum (Ficha e Palco) ----------------------------------------- */
.pulse-cardmodal__ft {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .6rem;
	padding: .8rem clamp(1.2rem, 4vw, 2.2rem);
	border-top: 1px solid var(--cdm-line);
	background: color-mix(in srgb, var(--cdm-bg) 86%, transparent);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
}

.pulse-cardmodal__cta {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	padding: .7rem 1.2rem;
	border-radius: 999px;
	background: var(--cdm-btn-bg);
	color: var(--cdm-btn-ink) !important;
	font-size: .9rem;
	line-height: 1.1;
	text-decoration: none !important;
	transition: transform .25s var(--cdm-ease), filter .25s ease;
}

.pulse-cardmodal__cta:hover {
	transform: translateY(-2px);
	filter: brightness(1.06);
}

.pulse-cardmodal__cta svg {
	width: 1rem;
	height: 1rem;
}

.pulse-cardmodal__nav {
	display: flex;
	gap: .4rem;
	margin-left: auto;
}

.pulse-cardmodal__nav[hidden] {
	display: none;
}

.pulse-cardmodal__ir,
.pulse-cardmodal__ft-fechar {
	display: inline-flex;
	align-items: center;
	gap: .45rem;
	padding: .55rem .85rem;
	border-radius: 999px;
	border: 1px solid var(--cdm-line);
	background: transparent;
	color: var(--cdm-ink);
	font: inherit;
	font-size: .82rem;
	cursor: pointer;
	transition: border-color .25s ease, background-color .25s ease;
}

.pulse-cardmodal__ir:hover,
.pulse-cardmodal__ft-fechar:hover {
	border-color: var(--cdm-line-2);
	background: var(--cdm-glass);
}

.pulse-cardmodal__ir-t {
	max-width: 12rem;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* o "Fechar" do rodapé é para o telemóvel (o × fica longe do polegar) */
.pulse-cardmodal__ft-fechar {
	display: none;
}

/* ---- FICHA: painel de 58rem, cabeçalho-imagem, corpo a duas colunas, rodapé
   fixo; no telemóvel uma folha de baixo com alça. ---------------------------- */
/* v1.262: a LARGURA e a ALTURA MÁX. do modal (Definições do Tema ou o cartão)
   também mandam na Ficha — vazias, os 58rem/88% dela.
   v1.281: quem ROLA é o CORPO, não o painel. Com o painel a rolar e o rodapé
   sticky (86% de fundo + blur), o texto passava POR BAIXO da barra enquanto se
   rolava — lia-se, esbatido, através dela. Agora o painel só recorta (os
   cantos) e o corpo rola entre o topo e o rodapé, que fica em fluxo: o que
   rola termina ACIMA da barra, sempre. Um esbatido por cima da barra (o
   ::before abaixo, só com .is-rola e fora do fim) avisa que há mais. */
.pulse-cardmodal--ficha .pulse-cardmodal__painel {
	display: flex;
	flex-direction: column;
	width: min(var(--cmodal-w, 58rem), 100%);
	max-height: var(--cmodal-hmax, 88svh);
	padding: 0;
	overflow: hidden;
	border-radius: 6px;
}

/* v1.262: o «Respiro: compacto» do conteúdo puxa o corpo com margens NEGATIVAS
   (meia medida do padding do painel simples) — a Ficha não tem esse padding,
   e o corpo passava 19px para os lados: barra de scroll mesmo sem precisar.
   A Ficha tem o respiro dela (o padding abaixo), por isso a margem sai.
   v1.281: é o corpo que rola (flex 1 1 + min-height:0 deixam-no encolher até
   ao que sobra do rodapé); overflow-x:hidden porque o overflow-y:auto obrigava
   o x a auto e qualquer píxel a mais punha uma barra em baixo. */
.pulse-cardmodal--ficha .pulse-modal-corpo {
	flex: 1 1 auto;
	min-height: 0;
	margin: 0;
	padding: 0 clamp(1.2rem, 4vw, 2.2rem) clamp(1rem, 2vw, 1.6rem);
	overflow-y: auto;
	overflow-x: hidden;
	overscroll-behavior: contain;
	scrollbar-width: thin;
}

/* v1.262: o card-modal.js marca .is-justo quando o conteúdo passa a altura por
   ≤16px — cabe no respiro de baixo (vazio): sem barra para rolar quase nada.
   v1.281: a classe vive no corpo (é ele que rola). */
.pulse-cardmodal--ficha .pulse-modal-corpo.is-justo {
	overflow-y: hidden;
}

.pulse-cardmodal--ficha .pulse-cardmodal__ft {
	position: relative;
	z-index: 3;
	flex: 0 0 auto;
	margin-top: auto;
}

/* v1.281: «há mais em baixo» — um esbatido sobre o fim do corpo, colado à
   barra, enquanto o corpo rola (.is-rola, posto pelo card-modal.js) e não está
   no fim (.is-fim, pelo scroll). O ~ apanha o rodapé, irmão seguinte do corpo. */
.pulse-cardmodal--ficha .pulse-modal-corpo.is-rola:not(.is-fim) ~ .pulse-cardmodal__ft::before {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 100%;
	height: 3rem;
	background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--cdm-bg) 86%, transparent));
	pointer-events: none;
}

.pulse-cardmodal[data-anim="ficha"]:not(.is-open) .pulse-cardmodal__painel {
	transform: translateY(28px) scale(.98);
}

/* as secções do corpo ficam dentro do painel (um bloco com "largura total" —
   alignfull, 0,2,1 — fugia com margens de viewport) */
.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec.pulse-sec:not(:first-child) {
	width: 100%;
	max-width: 100%;
	margin-inline: 0;
}

/* o 1.º Texto + Imagem: cabeçalho (imagem + título) e corpo */
.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child {
	padding-block: 0;
	margin-inline: calc(-1 * clamp(1.2rem, 4vw, 2.2rem));
	width: auto;
	max-width: none;
	min-height: 0; /* v1.281: sem o 100svh das secções do telemóvel (ver o Palco) */
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	grid-template-areas: "hd" "lb" "bd";
	gap: 0;
	align-items: stretch;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text {
	display: contents;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img {
	grid-area: hd;
	position: relative;
	aspect-ratio: 21 / 9;
	min-height: 11rem;
	/* v1.262: com a largura do modal a mandar (até 80rem), o 21:9 chegava a
	   ~550px e empurrava o texto para fora — o cabeçalho para nos 42% do ecrã.
	   O width:100% é preciso: um item de grelha com aspect-ratio e altura
	   travada encolhia a LARGURA para manter a proporção (a foto é cover,
	   absoluta — recorta-se em vez de deformar). */
	width: 100%;
	max-height: 42svh;
	margin: 0;
	overflow: hidden;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img :is(img, video) {
	position: absolute;
	inset: 0;
	width: 100% !important;
	height: 100% !important;
	aspect-ratio: auto !important;
	object-fit: cover;
	border: 0;
	border-radius: 0 !important;
	box-shadow: none;
	transform: scale(1.06);
	transition: transform calc(var(--cmodal-vel, .26s) * 2) var(--cdm-ease);
}

.pulse-cardmodal--ficha.is-open .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img :is(img, video) {
	transform: none;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(6, 6, 19, .08) 0%, rgba(6, 6, 19, .2) 45%, rgba(6, 6, 19, .88) 100%);
	pointer-events: none;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__heading {
	grid-area: hd;
	align-self: end;
	position: relative;
	z-index: 1;
	margin: 0 4rem 1.3rem clamp(1.2rem, 4vw, 2.2rem);
	max-width: 22ch;
	color: #fff;
	font-size: calc(clamp(1.6rem, 1.15rem + 1.9vw, 2.5rem) * var(--cdm-tit-e, 1)); /* v1.321: «Modais — títulos» */
	line-height: 1.08;
	text-wrap: balance;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__label {
	grid-area: lb;
	margin: clamp(1.1rem, 2.5vw, 1.6rem) clamp(1.2rem, 4vw, 2.2rem) 0;
}

/* o corpo a duas colunas: a ÚLTIMA lista (as capacidades, com o título que a
   anteceda) à direita, o resto à esquerda */
.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose {
	grid-area: bd;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	grid-auto-flow: row dense;
	align-content: start;
	column-gap: clamp(1.6rem, 4vw, 3rem);
	row-gap: 0;
	max-width: none;
	margin: 0;
	padding: clamp(1.1rem, 2.5vw, 1.6rem) clamp(1.2rem, 4vw, 2.2rem) clamp(1.2rem, 3vw, 2rem);
	text-align: left;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > * {
	grid-column: 1;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type {
	grid-column: 2;
	grid-row: 1 / span 30;
	align-self: start;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :is(h2, h3, h4, h5, p):has(+ ul:last-of-type) {
	grid-column: 2;
	grid-row: 1;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :is(h2, h3, h4, h5, p):has(+ ul:last-of-type) + ul:last-of-type {
	grid-row: 2 / span 30;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > h3:first-child {
	margin-top: 0;
	color: var(--cdm-head);
}

/* a lista das capacidades: linhas com fio, sem marcadores */
.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type {
	margin: 0;
	padding: 0;
	list-style: none;
}

.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type > li { /* v1.321: o tamanho × «Modais — texto» */
	margin: 0;
	padding: .55rem 0;
	border-top: 1px solid var(--cdm-line);
	font-size: calc(.93rem * var(--cdm-txt-e, 1));
	line-height: 1.45;
	color: var(--cdm-ink);
	break-inside: avoid;
}

.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type > li:last-child {
	border-bottom: 1px solid var(--cdm-line);
}

@media (max-width: 700px) {
	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose {
		grid-template-columns: minmax(0, 1fr);
	}

	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > *,
	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type,
	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :is(h2, h3, h4, h5, p):has(+ ul:last-of-type),
	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :is(h2, h3, h4, h5, p):has(+ ul:last-of-type) + ul:last-of-type {
		grid-column: 1;
		grid-row: auto;
	}
}

/* telemóvel: folha de baixo, com alça; o "Fechar" desce para o rodapé */
@media (max-width: 560px) {
	.pulse-cardmodal--ficha {
		align-items: flex-end;
		padding: 0;
	}

	.pulse-cardmodal--ficha .pulse-cardmodal__painel {
		width: 100%;
		max-height: 92svh;
		border-radius: 16px 16px 0 0;
		border-bottom: 0;
	}

	.pulse-cardmodal[data-anim="ficha"]:not(.is-open) .pulse-cardmodal__painel {
		transform: translateY(100%);
	}

	.pulse-cardmodal--ficha .pulse-cardmodal__painel::before {
		content: "";
		position: absolute;
		z-index: 4;
		top: .5rem;
		left: 50%;
		width: 2.6rem;
		height: 4px;
		margin-left: -1.3rem;
		border-radius: 999px;
		background: rgba(255, 255, 255, .8);
		pointer-events: none;
	}

	.pulse-cardmodal--ficha .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img {
		aspect-ratio: 16 / 9;
		min-height: 0;
	}

	.pulse-cardmodal--ficha .pulse-cardmodal__ft {
		padding: .7rem 1rem calc(.7rem + env(safe-area-inset-bottom, 0px));
	}

	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-cardmodal__ft-fechar {
		display: inline-flex;
	}

	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-cardmodal__nav {
		width: 100%;
		margin-left: 0;
		order: 3;
	}

	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-cardmodal__ir {
		flex: 1 1 0;
		justify-content: center;
		min-width: 0;
	}

	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-cardmodal__ir-t {
		max-width: none;
	}

	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-cardmodal__cta {
		flex: 1 1 auto;
		justify-content: center;
	}
}

/* ---- PALCO: ecrã inteiro — a fotografia do 1.º Texto + Imagem é o FUNDO do
   painel, o texto entra à esquerda por linhas; barra de ações fixa em baixo.
   O corpo é o que rola (a fotografia, a barra e o × ficam parados); no
   telemóvel a fotografia fica no topo e sai com o texto, e o × é redondo, em
   baixo à direita.
   v1.281 — três correções, todas medidas no conteúdo real dos Laboratórios:
   · CONTENÇÃO: o corpo tinha altura 100% do painel e a barra era absoluta por
     cima dele (72% de fundo) — ao rolar, o texto via-se POR BAIXO da barra,
     69px em cada ecrã. Agora o painel é uma coluna flex: o corpo (flex 1,
     min-height 0) rola só entre o topo e a barra, que fica em fluxo no fundo.
     O que rola termina ACIMA da barra; um esbatido colado a ela (o ::before
     no rodapé) diz que há mais.
   · CABER SEM ROLAR: as medidas do desenho (coluna, título, respiros, margens
     da prosa, lista) são VARS --palco-*; o card-modal.js mede o corpo ao abrir
     e, se não cabe, sobe DEGRAUS (.is-justo-1/2/3 no modal) — título mais
     baixo e com mais caracteres por linha, respiros mais justos, coluna mais
     larga (a % do painel: cqi, o painel é o container) — e para no primeiro
     que cabe; só se nenhum couber é que volta ao desenho de base e rola.
     Tudo antes do primeiro paint (sem piscar) e sempre do degrau 0 para cima
     (sem vaivém).
   · O ASSUNTO DA FOTO: a caixa da foto já não é o painel inteiro — começa
     onde a coluna de texto acaba (menos meio esbatido). Uma foto 4:3 num
     painel ao alto de 1,5–1,8 não transborda na horizontal, por isso o X do
     foco não mexia em nada e o assunto caía debaixo do texto e do véu sólido.
     Com a caixa só na zona livre, o cover + object-position (o foco ti_foco /
     a zona visível, as MESMAS regras do sections.css) acontecem lá dentro: o
     ponto de foco cai na zona livre, à direita do texto, em qualquer ecrã.
     À esquerda da caixa fica o fundo sólido — o que já se via, com o véu. */
.pulse-cardmodal--palco {
	padding: 0;
	--palco-col: 40rem;
	--palco-pad-x: clamp(1.4rem, 5vw, 4rem);
	--palco-pad-y: clamp(1.6rem, 5vw, 4rem);
	--palco-gap: 1.1rem;
	--palco-tit: clamp(2rem, 1.3rem + 3.2vw, 3.8rem);
	--palco-tit-ch: 16ch;
	--palco-prosa: 36rem;
	--palco-prosa-lh: 1.75;
	--palco-h-mt: 1.4em;
	--palco-h-mb: .5em;
	--palco-li: .55rem;
	--palco-fade: 8rem;
	--palco-foto-mob: 44svh;
	--palco-topo-mob: 34svh;
}

/* os degraus (card-modal.js): cada um aperta um pouco mais que o anterior */
.pulse-cardmodal--palco.is-justo-1 {
	--palco-pad-y: clamp(1.4rem, 3.5vw, 2.5rem);
	--palco-gap: .8rem;
	--palco-tit: clamp(1.8rem, 1.1rem + 2.4vw, 3rem);
	--palco-tit-ch: 20ch;
	--palco-prosa: none;
	--palco-h-mt: 1em;
	--palco-h-mb: .4em;
	--palco-li: .4rem;
	--palco-foto-mob: 38svh;
	--palco-topo-mob: 29svh;
}

.pulse-cardmodal--palco.is-justo-2 {
	--palco-col: min(46rem, 60cqi);
	--palco-pad-y: clamp(1.4rem, 3.5vw, 2.5rem);
	--palco-gap: .8rem;
	--palco-tit: clamp(1.7rem, 1rem + 2vw, 2.5rem);
	--palco-tit-ch: 24ch;
	--palco-prosa: none;
	--palco-prosa-lh: 1.6;
	--palco-h-mt: .9em;
	--palco-h-mb: .35em;
	--palco-li: .35rem;
	--palco-foto-mob: 32svh;
	--palco-topo-mob: 24svh;
}

.pulse-cardmodal--palco.is-justo-3 {
	--palco-col: min(52rem, 64cqi);
	--palco-pad-y: clamp(1.2rem, 2.5vw, 1.75rem);
	--palco-gap: .6rem;
	--palco-tit: clamp(1.6rem, 1rem + 1.6vw, 2.1rem);
	--palco-tit-ch: 30ch;
	--palco-prosa: none;
	--palco-prosa-lh: 1.5;
	--palco-h-mt: .8em;
	--palco-h-mb: .3em;
	--palco-li: .3rem;
	--palco-foto-mob: 28svh;
	--palco-topo-mob: 20svh;
}

.pulse-cardmodal--palco .pulse-cardmodal__scrim {
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
}

.pulse-cardmodal--palco .pulse-cardmodal__painel {
	display: flex;
	flex-direction: column;
	width: 100%;
	height: 100%;
	max-height: none;
	padding: 0;
	overflow: hidden;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	/* v1.281: o painel é o container das medidas em cqi (a coluna nos degraus,
	   a caixa da foto) e do empilhar abaixo de 56rem de painel */
	container: pulse-palco / inline-size;
}

.pulse-cardmodal[data-anim="palco"]:not(.is-open) .pulse-cardmodal__painel {
	transform: none;
}

/* v1.262 — PALCO com medidas: a Largura/Altura máx. do modal (Definições do
   Tema ou o cartão), quando definidas, fazem do ecrã inteiro um palco em
   CAIXA — centrado, com véu à volta, cantos e sombra (classe --palco-caixa,
   posta pelo render só com uma das duas preenchida). Vazias: ecrã inteiro,
   como antes. No telemóvel é sempre ecrã inteiro (abaixo, ≤700px). */
.pulse-cardmodal--palco .pulse-cardmodal__painel {
	width: min(var(--cmodal-w, 100%), 100%);
	height: min(var(--cmodal-hmax, 100%), 100%);
}

.pulse-cardmodal--palco.pulse-cardmodal--palco-caixa {
	padding: clamp(.9rem, 3vw, 2rem);
}

.pulse-cardmodal--palco-caixa .pulse-cardmodal__scrim {
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
}

.pulse-cardmodal--palco-caixa .pulse-cardmodal__painel {
	border: 1px solid var(--cdm-line);
	border-radius: 14px;
	box-shadow: 0 48px 110px -32px rgba(0, 0, 0, .65);
}

.pulse-cardmodal[data-anim="palco"].pulse-cardmodal--palco-caixa:not(.is-open) .pulse-cardmodal__painel {
	transform: scale(.97);
}

/* o corpo rola (estático: a fotografia posiciona-se pelo painel e fica parada)
   v1.281: flex 1 1 0 + min-height 0 — ocupa o que sobra da barra (que está em
   fluxo a seguir) e rola só aí; o respiro de baixo é igual ao de cima (os
   6.5rem de antes reservavam o lugar da barra absoluta). */
.pulse-cardmodal--palco .pulse-modal-corpo {
	flex: 1 1 0;
	min-height: 0;
	/* v1.262: sem as margens negativas do «Respiro: compacto» (como na Ficha:
	   o Palco tem o seu respiro — o padding abaixo — e o corpo fugia 12px para
	   a esquerda, cortado pelo painel) */
	margin: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
	display: flex;
	flex-direction: column;
	justify-content: center;
	justify-content: safe center;
	padding: var(--palco-pad-y) var(--palco-pad-x);
	scrollbar-width: thin;
}

/* v1.281: cabe por ≤16px → esconde-se o excesso no respiro de baixo em vez de
   pôr uma barra para rolar quase nada (o .is-justo da Ficha, v1.262) */
.pulse-cardmodal--palco .pulse-modal-corpo.is-justo {
	overflow-y: hidden;
}

.pulse-cardmodal--palco .pulse-modal-corpo > * {
	flex-shrink: 0;
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: var(--palco-col);
}

/* as secções do corpo ficam na coluna (um bloco com "largura total" — alignfull,
   0,2,1 — fugia com margens de viewport) */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec.pulse-sec {
	width: 100%;
	max-width: var(--palco-col);
	margin-inline: 0;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child {
	position: static;
	padding-block: 0;
	/* v1.281: a regra das secções a ecrã inteiro no telemóvel/tablet
	   (sections.css: body:has(.pulse-sec) .pulse-sec { min-height:100svh }) apanhava
	   esta secção DENTRO do modal — 615px de scroll vazio no tablet. Aqui a
	   altura é a do conteúdo; as opções de esticar do bloco não se aplicam. */
	min-height: 0;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child :is(.pulse-sec__container, .pulse-media) {
	position: static;
	display: block;
}

/* v1.281: a caixa da foto começa onde a coluna acaba, menos meio esbatido
   (o texto que chegue ao fim da coluna assenta sobre o véu a ~60%, como já
   acontecia); o fundo sólido do painel fica à esquerda. O right/top/bottom
   continuam a 0 — a barra (em fluxo) e o × pousam por cima. */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img {
	position: absolute;
	inset: 0;
	left: calc(var(--palco-pad-x) + var(--palco-col) - var(--palco-fade) / 2);
	z-index: 0;
	margin: 0;
	overflow: hidden;
	/* v1.296 — o «pequeno corte» entre a foto e o texto enquanto carrega: na
	   entrada a foto anima de 108% para 100% numa camada própria, que o browser
	   corta em píxeis INTEIROS — com a borda da caixa a meio píxel (o left
	   calculado aqui; no telemóvel a altura em svh), uma linha de foto passava
	   para lá do véu durante a animação (medido: 1px claro a 64,64,73 sobre
	   16,15,37). Uma máscara de 2px na borda que encosta ao texto apaga-a em
	   qualquer arredondamento; o fundo que fica à vista é o do painel, a cor
	   em que o véu acaba. */
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 2px);
	mask-image: linear-gradient(90deg, transparent 0, #000 2px);
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img :is(img, video) {
	position: absolute;
	inset: 0;
	width: 100% !important;
	height: 100% !important;
	aspect-ratio: auto !important;
	object-fit: cover;
	border: 0;
	border-radius: 0 !important;
	box-shadow: none;
	transform: scale(1.08);
	transition: transform calc(var(--cmodal-vel, .26s) * 2.4) var(--cdm-ease);
}

.pulse-cardmodal--palco.is-open .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img :is(img, video) {
	transform: none;
}

/* o véu: sólido no bordo esquerdo da caixa, esbate até --palco-fade e fica
   num tom leve até à direita (a foto a ~75%, como antes no lado livre) */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, var(--cdm-bg) 0, color-mix(in srgb, var(--cdm-bg) 30%, transparent) var(--palco-fade), color-mix(in srgb, var(--cdm-bg) 25%, transparent) 100%);
	pointer-events: none;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	gap: var(--palco-gap);
	max-width: var(--palco-col);
	margin: 0;
	text-align: left;
}

/* v1.281: o !important é contra o margin-block:1rem INLINE que o builder do
   título escreve (32px a mais entre o título e o subtítulo); no Palco o
   espaço é o gap da coluna, que os degraus apertam. */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__heading {
	margin: 0 !important;
	max-width: var(--palco-tit-ch);
	font-size: calc(var(--palco-tit) * var(--cdm-tit-e, 1)); /* v1.321: «Modais — títulos» multiplica por cima do desenho */
	line-height: 1.05;
	text-wrap: balance;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose {
	max-width: var(--palco-prosa);
	margin: 0;
	line-height: calc(var(--palco-prosa-lh) * var(--pap-t-lh, 1));
	text-align: left;
}

/* v1.281: as margens dos h3/h4 da prosa (o subtítulo e os parágrafos-h4 dos
   Laboratórios) seguem os degraus; o 1.º/último filho sem margem (como a base) */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose :is(h2, h3, h4, h5) {
	margin: var(--palco-h-mt) 0 var(--palco-h-mb);
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :first-child {
	margin-top: 0;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :last-child {
	margin-bottom: 0;
}

.pulse-cardmodal--palco:is(.is-justo-2, .is-justo-3) .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose :is(h3, h4) {
	font-size: calc(1.3rem * var(--cdm-txt-e, 1)); /* v1.321: «Modais — texto» */
}

.pulse-cardmodal--palco.is-justo-3 .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose :is(h3, h4) {
	font-size: calc(1.2rem * var(--cdm-txt-e, 1));
}

.pulse-cardmodal--palco:is(.is-justo-1, .is-justo-2, .is-justo-3) .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > :is(h2, h3, h4, h5, p):has(+ ul:last-of-type) {
	margin-bottom: .4em;
}

/* as capacidades em duas colunas */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type {
	columns: 2;
	column-gap: 1.5rem;
}

/* .pulse-cardmodal.pulse-cardmodal--palco: (0,7,2), para ganhar à regra comum Ficha/Palco (0,7,2) por ordem */
.pulse-cardmodal.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type > li {
	padding: var(--palco-li) 0;
}

/* entrada por linhas (escada) */
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > * {
	opacity: 0;
	transform: translateY(16px);
	transition: opacity .55s var(--cdm-ease), transform .55s var(--cdm-ease);
	transition-delay: 140ms;
}

.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > :nth-child(2) { transition-delay: 210ms; }
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > :nth-child(3) { transition-delay: 280ms; }
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > :nth-child(4) { transition-delay: 350ms; }
.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > :nth-child(n+5) { transition-delay: 420ms; }

.pulse-cardmodal--palco.is-open .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > * {
	opacity: 1;
	transform: none;
}

/* v1.281: a barra em FLUXO no fundo da coluna flex (era absoluta sobre o
   corpo); relative para o esbatido ::before se pendurar por cima dela */
.pulse-cardmodal--palco .pulse-cardmodal__ft {
	position: relative;
	z-index: 2;
	flex: 0 0 auto;
	padding: .9rem var(--palco-pad-x);
	background: color-mix(in srgb, var(--cdm-bg) 72%, transparent);
}

/* «há mais em baixo»: o esbatido sobre o fim do corpo, só enquanto rola e não
   está no fim (classes do card-modal.js) */
.pulse-cardmodal--palco .pulse-modal-corpo.is-rola:not(.is-fim) ~ .pulse-cardmodal__ft::before {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 100%;
	height: 3.5rem;
	background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--cdm-bg) 72%, transparent));
	pointer-events: none;
}

.pulse-cardmodal--palco .pulse-cardmodal__fechar {
	top: 1rem;
	right: 1rem;
	z-index: 4;
}

/* v1.281: EMPILHAR pela largura do PAINEL (não do ecrã): abaixo de 56rem de
   painel (o tablet ao alto, a caixa de 80% a 1024px) a coluna + a zona livre
   já não cabem lado a lado e a foto ficava uma tira — a fotografia passa para
   o topo, a sair de cena com o texto (o corpo é o contentor dela). Era a
   regra do telemóvel (≤700px de ecrã); o telemóvel continua a cair aqui. */
@container pulse-palco (max-width: 55.99rem) {
	.pulse-cardmodal--palco .pulse-modal-corpo {
		position: relative;
		display: block;
		padding: var(--palco-topo-mob) 1.25rem 4.5rem;
	}

	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img {
		left: 0;
		bottom: auto;
		height: var(--palco-foto-mob);
		/* v1.296: empilhado, a borda que encosta ao texto é a de BAIXO (a altura
		   em svh dá meio píxel — 28svh = 236,3px num ecrã de 844) */
		-webkit-mask-image: linear-gradient(180deg, #000 calc(100% - 2px), transparent);
		mask-image: linear-gradient(180deg, #000 calc(100% - 2px), transparent);
	}

	/* empilhado, a coluna e a prosa vão à largura toda (os degraus não as
	   estreitam — aqui só apertam o título, os respiros e a altura da foto) */
	.pulse-cardmodal--palco .pulse-modal-corpo > *,
	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec.pulse-sec,
	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text,
	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose {
		max-width: none;
	}

	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__img::after {
		background: linear-gradient(180deg, transparent 20%, var(--cdm-bg) 100%);
	}

	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-sec__prose > ul:last-of-type {
		columns: 1;
	}
}

@media (max-width: 700px) {
	/* v1.262: no telemóvel o Palco é sempre ecrã inteiro, mesmo com medidas */
	.pulse-cardmodal--palco.pulse-cardmodal--palco-caixa {
		padding: 0;
	}

	.pulse-cardmodal--palco .pulse-cardmodal__painel {
		width: 100%;
		height: 100%;
		border: 0;
		border-radius: 0;
		box-shadow: none;
	}

	.pulse-cardmodal[data-anim="palco"].pulse-cardmodal--palco-caixa:not(.is-open) .pulse-cardmodal__painel {
		transform: none;
	}

	/* o × redondo, ao alcance do polegar, por cima da barra. v1.295: a ALTURA
	   REAL da barra (--cdm-ft-h, medida pelo card-modal.js ao abrir e no
	   resize) + meio rem — com 1 ou 2 linhas o × fica sempre logo acima dela,
	   dentro do respiro de baixo do corpo (4,5rem), sem tapar texto. O 4,1rem
	   do fallback é a barra de uma linha (o 4,6rem de antes, menos o respiro). */
	.pulse-cardmodal--palco .pulse-cardmodal__fechar {
		top: auto;
		bottom: calc(var(--cdm-ft-h, 4.1rem) + .5rem);
		right: 1rem;
		width: 3rem;
		height: 3rem;
		border: 0;
		background: var(--cdm-btn-bg);
		color: var(--cdm-btn-ink);
		box-shadow: 0 12px 30px -10px rgba(0, 0, 0, .6);
	}

	.pulse-cardmodal--palco .pulse-cardmodal__ft-fechar {
		display: none !important;
	}
}

/* com o anterior/seguinte a barra PODE ter duas linhas no telemóvel (botão de
   ação + navegação): o × sobe com ela. v1.295: era bottom:8,4rem fixo — com a
   barra numa linha só (o «Fechar» do rodapé escondido no Palco desde a v1.262,
   e os nomes cortados com reticências), o × flutuava 3,8rem acima dela, por
   cima do texto. Agora a medida real; o 7,9rem fica só como recurso. */
@media (max-width: 560px) {
	.pulse-cardmodal--palco:has(.pulse-cardmodal__nav:not([hidden])) .pulse-cardmodal__fechar {
		bottom: calc(var(--cdm-ft-h, 7.9rem) + .5rem);
	}
}

/* v1.295 — DESLIZAR para o anterior/seguinte (card-modal.js, só toque/caneta).
   pan-y entrega o eixo HORIZONTAL do painel ao gesto sem tirar ao browser o
   scroll vertical do corpo nem o zoom de dois dedos (o touch-action corta-se
   no contentor com scroll mais próximo: uma galeria ou um carrossel lá dentro
   continuam com o pan-x deles). Durante o gesto, nada de selecionar texto. */
.pulse-cardmodal .pulse-cardmodal__painel,
.pulse-cardmodal .pulse-modal-corpo {
	touch-action: pan-y pinch-zoom;
}

.pulse-cardmodal.is-deslizando .pulse-cardmodal__painel {
	-webkit-user-select: none;
	user-select: none;
}

/* v1.296 — TROCA entre modais (anterior/seguinte e deslize; .is-troca-entra e
   data-troca postos pelo card-modal.js no modal que ENTRA, o que sai some já).
   · o véu já opaco: sem a página a aparecer entre um modal e o outro;
   · o painel entra pelo lado do movimento (seguinte = da direita, anterior =
     da esquerda) em vez do zoom da 1.ª abertura — lê-se «passou ao lado»;
   · a escada do texto do Palco encurta (sem os atrasos de 140–420ms): o texto
     novo chega logo, não fica um palco vazio à espera.
   Especificidade (0,5,1) para ganhar às partidas por data-anim (até 0,5,0). */
.pulse-cardmodal.is-troca-entra .pulse-cardmodal__scrim {
	opacity: 1;
	transition: none;
}

body .pulse-cardmodal.is-troca-entra[data-troca="1"]:not(.is-open) .pulse-cardmodal__painel {
	transform: translateX(32px);
}

body .pulse-cardmodal.is-troca-entra[data-troca="-1"]:not(.is-open) .pulse-cardmodal__painel {
	transform: translateX(-32px);
}

.pulse-cardmodal.is-troca-entra .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > * {
	transition-delay: 0s !important;
	transition-duration: .3s;
}

@media (prefers-reduced-motion: reduce) {
	.pulse-cardmodal:is(.pulse-cardmodal--ficha, .pulse-cardmodal--palco) .pulse-modal-corpo > .pulse-sec--media:first-child :is(.pulse-media__img img, .pulse-media__img video, .pulse-media__text > *) {
		transition: none;
		transform: none;
	}

	.pulse-cardmodal--palco .pulse-modal-corpo > .pulse-sec--media:first-child .pulse-media__text > * {
		opacity: 1;
	}
}
