/* =========================================================================
   Portal Notícias — sistema de design
   Tudo é dirigido por custom properties. As três identidades visuais
   (.pn-ident--manchete / --tribuna / --pulso) redefinem essas properties e,
   quando necessário, reescrevem estrutura.
   ========================================================================= */

:root {
	--pn-brand: var(--wp--preset--color--primary, #c8102e);
	--pn-brand-dark: var(--wp--preset--color--primary-dark, #8f0b20);
	--pn-ink: var(--wp--preset--color--ink, #111418);
	--pn-ink-soft: var(--wp--preset--color--ink-soft, #5b6672);
	--pn-surface: var(--wp--preset--color--surface, #fff);
	--pn-surface-alt: var(--wp--preset--color--surface-alt, #f5f6f8);
	--pn-surface-dark: var(--wp--preset--color--surface-dark, #0e1216);
	--pn-line: var(--wp--preset--color--border, #e3e6ea);

	--pn-font-sans: var(--wp--preset--font-family--sans);
	--pn-font-serif: var(--wp--preset--font-family--serif);
	--pn-font-display: var(--wp--preset--font-family--display);
	--pn-font-head: var(--pn-font-sans);
	--pn-font-body: var(--pn-font-sans);

	--pn-radius: 0px;
	--pn-head-weight: 800;
	--pn-head-tracking: -0.022em;
	--pn-head-leading: 1.08;

	--pn-topbar-bg: var(--pn-surface-alt);
	--pn-topbar-fg: var(--pn-ink-soft);
	--pn-masthead-bg: var(--pn-surface);
	--pn-masthead-fg: var(--pn-ink);
	--pn-nav-bg: var(--pn-surface);
	--pn-nav-fg: var(--pn-ink);
	--pn-footer-bg: var(--pn-surface-dark);
	--pn-footer-fg: rgba(255, 255, 255, 0.72);

	--pn-gutter: 1.75rem;
	--pn-shadow: none;
}

/* ---------- Identidade: Tribuna (jornal editorial impresso) ---------- */
.pn-ident--tribuna {
	--pn-font-head: var(--pn-font-serif);
	--pn-head-weight: 700;
	--pn-head-tracking: -0.008em;
	--pn-head-leading: 1.14;
	--pn-radius: 0px;
	--pn-topbar-bg: var(--pn-surface);
	--pn-topbar-fg: var(--pn-ink-soft);
	--pn-footer-bg: var(--pn-surface);
	--pn-footer-fg: var(--pn-ink-soft);
	--pn-gutter: 2.25rem;
	--pn-shadow: none;
}

/* ---------- Identidade: Pulso (TV news / ao vivo) ---------- */
.pn-ident--pulso {
	--pn-font-head: var(--pn-font-display);
	--pn-head-weight: 800;
	--pn-head-tracking: -0.04em;
	--pn-head-leading: 0.98;
	--pn-radius: 3px;
	--pn-topbar-bg: var(--pn-surface-dark);
	--pn-topbar-fg: rgba(255, 255, 255, 0.62);
	--pn-masthead-bg: var(--pn-surface-dark);
	--pn-masthead-fg: #fff;
	--pn-nav-bg: var(--pn-brand);
	--pn-nav-fg: #fff;
	--pn-gutter: 1.25rem;
	--pn-shadow: 0 2px 0 var(--pn-brand);
}

/* ---------- Identidade: Regional (portal utilitário, widgets) ---------- */
.pn-ident--regional {
	--pn-font-head: var(--pn-font-sans);
	--pn-head-weight: 800;
	--pn-head-tracking: -0.015em;
	--pn-head-leading: 1.12;
	--pn-radius: 4px;
	--pn-topbar-bg: var(--pn-surface-dark);
	--pn-topbar-fg: rgba(255, 255, 255, 0.85);
	--pn-masthead-bg: var(--pn-surface);
	--pn-masthead-fg: var(--pn-ink);
	--pn-nav-bg: var(--pn-surface);
	--pn-nav-fg: var(--pn-ink);
	--pn-gutter: 1.5rem;
	--pn-shadow: 0 1px 3px rgba(14, 18, 22, 0.08);
}

/* ---------- Identidade: Global (editorial internacional, BBC-like) ---------- */
.pn-ident--global {
	--pn-font-head: var(--pn-font-sans);
	--pn-head-weight: 700;
	--pn-head-tracking: -0.012em;
	--pn-head-leading: 1.18;
	--pn-radius: 0px;
	--pn-topbar-bg: transparent;
	--pn-topbar-fg: var(--pn-ink-soft);
	--pn-masthead-bg: var(--pn-surface);
	--pn-masthead-fg: var(--pn-ink);
	--pn-nav-bg: var(--pn-surface);
	--pn-nav-fg: var(--pn-ink);
	--pn-footer-bg: var(--pn-surface);
	--pn-footer-fg: var(--pn-ink-soft);
	--pn-gutter: 1.75rem;
	--pn-shadow: none;
	/* no Global, o vermelho é reservado só ao "AO VIVO" — nunca decorativo */
}

/* ---------- Identidade: Diário (mesma paleta/tipografia/estrutura do
   site parceiro spdiario.com.br — só estilo, sem copiar logo/nome/texto) ---------- */
.pn-ident--diario {
	--pn-brand: #ed000c;
	--pn-brand-dark: #b8000a;
	--pn-accent: #183c84;
	--pn-accent-dark: #122c61;
	--pn-section-label: #7c7c7c;
	/* No site real, manchete/nav/corpo usam Roboto; Raleway fica reservada
	   pros títulos de seção ("política", "esportes") e link "veja mais",
	   sempre em peso leve — o inverso do que a primeira versão desta
	   identidade tinha feito. */
	--pn-font-head: var(--wp--preset--font-family--roboto, var(--pn-font-sans));
	--pn-font-body: var(--wp--preset--font-family--roboto, var(--pn-font-sans));
	--pn-font-label: var(--wp--preset--font-family--raleway, var(--pn-font-sans));
	--pn-head-weight: 700;
	--pn-head-tracking: -0.005em;
	--pn-head-leading: 1.18;
	--pn-radius: 0px;
	--pn-topbar-bg: var(--pn-brand);
	--pn-topbar-fg: rgba(255, 255, 255, 0.92);
	--pn-masthead-bg: var(--pn-accent);
	--pn-masthead-fg: #fff;
	--pn-nav-bg: var(--pn-surface);
	--pn-nav-fg: #2c2c2c;
	--pn-gutter: 1.75rem;
	--pn-shadow: none;
}

/* =========================================================================
   Base
   ========================================================================= */

body {
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}
/* Seletor por atributo (especificidade maior que o `body { font-family }`
   gerado pelo theme.json global styles) garante que a identidade vença
   independente da ordem de carregamento das folhas de estilo. Só a
   Diário redefine `--pn-font-body` de verdade (Roboto); nas demais 5
   identidades o valor cai de volta em `--pn-font-sans`, sem mudança de
   comportamento. */
body[class*="pn-ident--"] {
	font-family: var(--pn-font-body);
}

.wp-block-post-title,
.wp-block-post-title a,
h1, h2, h3, h4 {
	font-family: var(--pn-font-head);
	letter-spacing: var(--pn-head-tracking);
	line-height: var(--pn-head-leading);
	font-weight: var(--pn-head-weight);
}

/* No mobile (maioria do tráfego), o navegador aplica um "tap highlight"
   escuro por cima do link ao tocar — como o texto do link já costuma
   trocar pra uma cor escura no :hover/:active (ex: --pn-brand), o toque
   engolia o texto por baixo do highlight, dando a impressão de "sumiu,
   ficou da cor do fundo". Sem highlight nativo, o :active abaixo garante
   feedback visual sem esconder o texto. */
* { -webkit-tap-highlight-color: transparent; }
a:active { color: var(--pn-brand); }

a { text-decoration: none; }

img { max-width: 100%; height: auto; }

/* =========================================================================
   Cabeçalho
   ========================================================================= */

/* -- Barra utilitária -- */
.pn-topbar {
	background: var(--pn-topbar-bg);
	color: var(--pn-topbar-fg);
	font-size: 0.75rem;
	letter-spacing: 0.02em;
	border-bottom: 1px solid var(--pn-line);
}
.pn-ident--pulso .pn-topbar { border-bottom-color: rgba(255, 255, 255, 0.1); }
.pn-topbar .wp-block-group { min-height: 34px; }
.pn-topbar p { margin: 0; color: inherit; }
.pn-topbar a { color: inherit; }
.pn-topbar a:hover { color: var(--pn-brand); }

.pn-topbar__date::first-letter { text-transform: uppercase; }

/* -- Masthead -- */
.pn-masthead {
	background: var(--pn-masthead-bg);
	color: var(--pn-masthead-fg);
	padding-block: 1.15rem;
	border-bottom: 3px solid var(--pn-brand);
}
.pn-masthead .wp-block-site-title a,
.pn-masthead .wp-block-site-title {
	color: var(--pn-masthead-fg);
	font-size: clamp(1.55rem, 1.1rem + 1.6vw, 2.35rem);
	line-height: 1;
	letter-spacing: -0.035em;
	font-weight: 900;
}
/* Título do site ao lado da logo é redundante — a logo já é a marca.
   `.wp-custom-logo` é adicionada pelo próprio WordPress no `<body>`
   automaticamente sempre que o site tem uma logo configurada (recurso
   nativo do `custom-logo`, nenhum código extra necessário aqui), então
   isto já cobre cabeçalho e rodapé em qualquer identidade. Pedido do
   usuário, 02/09/2026. */
body.wp-custom-logo .pn-topbar .wp-block-site-title,
body.wp-custom-logo .pn-masthead .wp-block-site-title,
body.wp-custom-logo .pn-footer .wp-block-site-title {
	display: none;
}

/* Botão do menu hambúrguer embutido no próprio cabeçalho (canto — ver
   `.pn-masthead__row` mais abaixo pro layout em grade no celular), em
   vez de ficar solto na régua de editorias como antes — não seguia
   nenhum padrão de UX reconhecível ali. Escondido no desktop; a régua
   de editorias horizontal continua sendo o menu ali. */
.pn-mobile-menu-trigger { display: none; }

/* Tribuna: masthead central, filetes acima e abaixo, serifa grande */
.pn-ident--tribuna .pn-masthead {
	border-bottom: 1px solid var(--pn-ink);
	border-top: 3px double var(--pn-ink);
	padding-block: 1.6rem;
	text-align: center;
}
/* só o grupo direto vira coluna — o grupo interno (logo + título) continua em linha */
.pn-ident--tribuna .pn-masthead > .wp-block-group {
	position: relative;
	justify-content: center;
	flex-direction: column;
	gap: 0.35rem;
}
/* busca sai do fluxo central e ancora à direita, sem empurrar o logo */
.pn-ident--tribuna .pn-masthead .wp-block-search {
	position: absolute;
	right: 0;
	top: 50%;
	transform: translateY(-50%);
	margin: 0;
}
.pn-ident--tribuna .wp-block-search__button {
	background: transparent;
	color: var(--pn-ink);
	border: 1px solid var(--pn-line);
}
.pn-ident--tribuna .pn-masthead .wp-block-site-title a {
	font-family: var(--pn-font-serif);
	font-weight: 800;
	letter-spacing: -0.02em;
	font-size: clamp(2rem, 1.2rem + 3vw, 3.4rem);
}
.pn-ident--tribuna .pn-masthead__tagline {
	display: block;
	font-size: 0.7rem;
	text-transform: uppercase;
	letter-spacing: 0.28em;
	color: var(--pn-ink-soft);
}
.pn-masthead__tagline { display: none; }

/* Pulso: masthead escuro sem régua de marca */
.pn-ident--pulso .pn-masthead { border-bottom: none; padding-block: 0.9rem; }

/* Diário: réplica fiel da estrutura de 2 faixas do spdiario.com.br —
   faixa vermelha com a logo centralizada + redes sociais à direita
   (`.pn-topbar--diario`, reaproveitando o slot da topbar em vez do
   masthead, já que a logo grande é o primeiro elemento no site real,
   antes de qualquer utilitário), e faixa azul-marinho com o tagline
   centralizado + busca à direita (`.pn-masthead--diario`). */
.pn-topbar--diario {
	border-bottom: none;
	padding-block: 0.6rem;
	text-align: center;
}
.pn-topbar--diario__row { position: relative; }
.pn-topbar--diario .wp-block-site-logo { margin: 0 auto; }
.pn-topbar--diario .pn-topbar__social {
	position: absolute;
	right: 0;
	top: 50%;
	transform: translateY(-50%);
	color: rgba(255, 255, 255, 0.9);
	font-weight: 300;
	gap: 0.5rem;
}
.pn-topbar--diario .pn-topbar__social p { margin: 0; }
.pn-topbar--diario .pn-topbar__social a:hover { opacity: 0.8; }

.pn-masthead--diario {
	border-bottom: none;
	padding-block: 0.5rem;
}
.pn-masthead--diario__row { position: relative; text-align: center; }
.pn-masthead--diario .wp-block-site-tagline {
	display: block;
	color: #fff;
	font-size: 0.95rem;
	font-weight: 300;
	letter-spacing: 0.02em;
}
.pn-masthead--diario .wp-block-search {
	position: absolute;
	right: 0;
	top: 50%;
	transform: translateY(-50%);
	margin: 0;
}
.pn-masthead--diario .wp-block-search__button {
	background: transparent;
	color: #fff;
	border: none;
}

/* -- Navegação de editorias -- */
.pn-nav {
	background: var(--pn-nav-bg);
	color: var(--pn-nav-fg);
	border-bottom: 1px solid var(--pn-line);
	font-size: 0.8rem;
}
.pn-ident--pulso .pn-nav { border-bottom: 1px solid rgba(255, 255, 255, 0.1); }
.pn-ident--tribuna .pn-nav { border-bottom: 1px solid var(--pn-ink); }

.pn-nav .wp-block-navigation {
	font-family: var(--pn-font-body);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.07em;
	gap: 1.5rem;
}
.pn-nav .wp-block-navigation-item__content {
	color: var(--pn-nav-fg);
	padding-block: 0.8rem;
	border-bottom: 3px solid transparent;
	transition: color 0.15s, border-color 0.15s;
}
.pn-nav .wp-block-navigation-item__content:hover {
	color: var(--pn-brand);
	border-bottom-color: var(--pn-brand);
}
.pn-ident--pulso .pn-nav .wp-block-navigation-item__content:hover { color: #fff; }
.pn-ident--tribuna .pn-nav .wp-block-navigation {
	justify-content: center;
	font-weight: 600;
	letter-spacing: 0.14em;
	font-size: 0.72rem;
}

/* Diário: navbar branca com editorias em caixa alta, peso normal — igual
   ao spdiario.com.br (nada de negrito/peso pesado aqui, só maiúsculas) */
.pn-ident--diario .pn-nav { border-bottom: 1px solid var(--pn-line); }
.pn-ident--diario .pn-nav .wp-block-navigation {
	justify-content: center;
	font-weight: 400;
	letter-spacing: 0.02em;
	font-size: 0.78rem;
}
.pn-ident--diario .pn-nav .wp-block-navigation-item__content:hover {
	color: var(--pn-brand);
	border-bottom-color: var(--pn-brand);
}

/* -- Faixa de plantão -- */
.pn-breaking {
	background: var(--pn-brand);
	color: #fff;
	font-size: 0.82rem;
	font-weight: 600;
}
.pn-breaking__row { display: flex; gap: 0.9rem; align-items: center; min-height: 42px; flex-wrap: nowrap; }
.pn-breaking__label {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	flex: 0 0 auto;
	background: rgba(0, 0, 0, 0.22);
	padding: 0.2rem 0.6rem;
	font-size: 0.68rem;
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	border-radius: 2px;
	white-space: nowrap;
}
/* bolinha vermelha piscando, tipo indicador "AO VIVO" — pedido do
   usuário depois de ver a cobertura da CNN. Antes só existia (e só
   piscava) na identidade Pulso; virou padrão em todas. */
.pn-breaking__dot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #fff;
	animation: pn-live-pulse 1.4s ease-in-out infinite;
}

/* Rolagem contínua das manchetes do plantão — a lista já vem duplicada
   no HTML (ver class-dynamic-bits.php) pra loop sem salto; a animação
   anda -50% (exatamente uma volta no conteúdo original) e reinicia. */
.pn-breaking__marquee { flex: 1 1 auto; overflow: hidden; min-width: 0; }
.pn-breaking__track {
	display: flex;
	gap: 2.5rem;
	list-style: none;
	margin: 0;
	padding: 0;
	white-space: nowrap;
	width: max-content;
	animation: pn-breaking-marquee 28s linear infinite;
}
.pn-breaking__marquee:hover .pn-breaking__track { animation-play-state: paused; }
.pn-breaking__track a { color: #fff; }
.pn-breaking__track li { flex: 0 0 auto; }
.pn-breaking__track li + li::before { content: "•"; margin-right: 2.5rem; opacity: 0.5; }
@keyframes pn-breaking-marquee {
	from { transform: translateX(0); }
	to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
	.pn-breaking__track { animation: none; }
	.pn-breaking__dot { animation: none; }
}

/* =========================================================================
   Chapéu / kicker — o elemento que mais diz "isto é um jornal"
   ========================================================================= */

.pn-kicker,
.pn-kicker a {
	font-family: var(--pn-font-body);
	font-size: 0.7rem;
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: 0.09em;
	color: var(--pn-brand);
	line-height: 1.2;
}
.pn-kicker { margin-bottom: 0.45rem; }
.pn-kicker a:hover { color: var(--pn-brand-dark); }

.pn-ident--tribuna .pn-kicker,
.pn-ident--tribuna .pn-kicker a {
	color: var(--pn-ink-soft);
	letter-spacing: 0.2em;
	font-weight: 700;
	font-size: 0.66rem;
}

.pn-ident--pulso .pn-kicker a {
	display: inline-block;
	background: var(--pn-brand);
	color: #fff;
	padding: 0.22rem 0.6rem;
	border-radius: 100px;
	font-size: 0.66rem;
	letter-spacing: 0.07em;
}
.pn-ident--pulso .pn-kicker a:hover { background: var(--pn-brand-dark); color: #fff; }

/* Diário: chapéu discreto, igual ao spdiario.com.br — Raleway normal,
   cor de texto comum (não é vermelho/negrito como nas outras identidades) */
.pn-ident--diario .pn-kicker,
.pn-ident--diario .pn-kicker a {
	font-family: var(--pn-font-label);
	font-size: 0.95rem;
	font-weight: 400;
	text-transform: none;
	letter-spacing: 0;
	color: var(--pn-ink);
}
.pn-ident--diario .pn-kicker a:hover { color: var(--pn-brand); }

/* Data / assinatura */
.pn-meta,
.wp-block-post-date {
	font-family: var(--pn-font-body);
	font-size: 0.78rem;
	color: var(--pn-ink-soft);
	letter-spacing: 0;
	font-weight: 400;
}

/* =========================================================================
   Cabeçalho de seção ("ECONOMIA ———")
   ========================================================================= */

.pn-section-head {
	display: flex;
	align-items: center;
	gap: 0.85rem;
	margin-bottom: 1.2rem;
	border-top: 3px solid var(--pn-ink);
	padding-top: 0.6rem;
}
.pn-section-head h2 {
	font-size: 1.05rem;
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	margin: 0;
	color: var(--pn-ink);
	font-family: var(--pn-font-body);
}
.pn-section-head h2::before {
	content: "";
	display: inline-block;
	width: 0.55rem;
	height: 0.55rem;
	background: var(--pn-section-accent, var(--pn-brand));
	margin-right: 0.55rem;
	vertical-align: baseline;
}
.pn-ident--tribuna .pn-section-head {
	border-top: 1px solid var(--pn-ink);
	justify-content: center;
}
.pn-ident--tribuna .pn-section-head h2 {
	font-family: var(--pn-font-serif);
	text-transform: none;
	letter-spacing: 0.01em;
	font-size: 1.5rem;
	font-style: italic;
}
.pn-ident--tribuna .pn-section-head h2::before { display: none; }
.pn-ident--pulso .pn-section-head { border-top: none; }
.pn-ident--pulso .pn-section-head h2 {
	font-family: var(--pn-font-display);
	font-size: 1.35rem;
	letter-spacing: -0.02em;
	text-transform: none;
}
.pn-ident--pulso .pn-section-head h2::before {
	width: 4px;
	height: 1.15em;
	border-radius: 2px;
	transform: translateY(0.18em);
}

/* Diário: título de seção fino e cinza, sem caixa alta nem marcador —
   igual ao "política"/"esportes" do spdiario.com.br. O link "veja mais"
   fica plugado no mesmo lugar (`.pn-dia-section-more`, ver home-diario.php). */
.pn-ident--diario .pn-section-head {
	border-top: 1px solid var(--pn-line);
	justify-content: space-between;
}
.pn-ident--diario .pn-section-head h2 {
	font-family: var(--pn-font-label);
	font-weight: 300;
	font-size: 2rem;
	text-transform: capitalize;
	letter-spacing: 0;
	color: var(--pn-section-label);
}
.pn-ident--diario .pn-section-head h2::before { display: none; }
.pn-dia-section-more {
	font-family: var(--pn-font-label);
	font-weight: 300;
	font-size: 0.95rem;
	color: var(--pn-section-label);
	text-transform: capitalize;
	white-space: nowrap;
}
.pn-dia-section-more:hover { color: var(--pn-brand); }

/* =========================================================================
   Manchete principal (hero)
   ========================================================================= */

.pn-hero .wp-block-post-template { gap: 0; }

.pn-hero .wp-block-post-featured-image {
	margin-bottom: 1rem;
	overflow: hidden;
	border-radius: var(--pn-radius);
}
.pn-hero .wp-block-post-featured-image img {
	width: 100%;
	aspect-ratio: 16 / 9;
	object-fit: cover;
	display: block;
	transition: transform 0.45s ease;
}
.pn-hero:hover .wp-block-post-featured-image img { transform: scale(1.02); }

.pn-hero .wp-block-post-title {
	font-size: clamp(1.9rem, 1.1rem + 2.7vw, 3.1rem);
	margin: 0 0 0.7rem;
}
.pn-hero .wp-block-post-excerpt {
	font-size: 1.06rem;
	line-height: 1.55;
	color: var(--pn-ink-soft);
	margin-bottom: 0.7rem;
}
.pn-hero .wp-block-post-excerpt__more-link { display: none; }

/* Tribuna: manchete centralizada, texto respirando */
.pn-ident--tribuna .pn-hero { text-align: center; }
.pn-ident--tribuna .pn-hero .wp-block-post-title {
	font-size: clamp(2.1rem, 1.2rem + 3.2vw, 3.6rem);
	letter-spacing: -0.012em;
}
.pn-ident--tribuna .pn-hero .wp-block-post-excerpt {
	max-width: 46ch;
	margin-inline: auto;
	font-size: 1.1rem;
}

/* Pulso: texto sobreposto à imagem */
.pn-ident--pulso .pn-hero .wp-block-post-template > li {
	position: relative;
	border-radius: var(--pn-radius);
	overflow: hidden;
	box-shadow: var(--pn-shadow);
}
.pn-ident--pulso .pn-hero .wp-block-post-featured-image {
	margin-bottom: 0;
	border-radius: 0;
}
.pn-ident--pulso .pn-hero .wp-block-post-featured-image img {
	aspect-ratio: 16 / 10;
}
.pn-ident--pulso .pn-hero .wp-block-post-featured-image::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(8, 12, 16, 0.93) 4%, rgba(8, 12, 16, 0.55) 38%, rgba(8, 12, 16, 0) 68%);
}
.pn-ident--pulso .pn-hero__body {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: clamp(1.1rem, 3vw, 2.2rem);
	z-index: 2;
}
.pn-ident--pulso .pn-hero__body .wp-block-post-title,
.pn-ident--pulso .pn-hero__body .wp-block-post-title a { color: #fff; }
.pn-ident--pulso .pn-hero__body .wp-block-post-excerpt { color: rgba(255, 255, 255, 0.82); }
.pn-ident--pulso .pn-hero__body .wp-block-post-date { color: rgba(255, 255, 255, 0.6); }

/* =========================================================================
   Coluna de últimas notícias
   ========================================================================= */

.pn-latest .wp-block-post-template { gap: 0; }
.pn-latest .wp-block-post-template > li {
	padding-block: 0.85rem;
	border-bottom: 1px solid var(--pn-line);
}
.pn-latest .wp-block-post-template > li:first-child { padding-top: 0; }
.pn-latest .wp-block-post-template > li:last-child { border-bottom: none; }
.pn-latest .wp-block-post-title {
	font-size: 1.02rem;
	margin: 0 0 0.3rem;
	line-height: 1.28;
}
.pn-latest .wp-block-post-title a:hover { color: var(--pn-brand); }

.pn-ident--pulso .pn-latest .wp-block-post-template > li {
	border-bottom-color: rgba(0, 0, 0, 0.07);
}

/* =========================================================================
   Grades de matérias
   ========================================================================= */

.pn-grid .wp-block-post-template {
	gap: var(--pn-gutter);
}
.pn-grid .wp-block-post-featured-image {
	margin-bottom: 0.75rem;
	overflow: hidden;
	border-radius: var(--pn-radius);
}
.pn-grid .wp-block-post-featured-image img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
	transition: transform 0.4s ease;
}
.pn-grid .wp-block-post-featured-image:hover img { transform: scale(1.04); }
.pn-grid .wp-block-post-title {
	font-size: 1.18rem;
	margin: 0 0 0.4rem;
	line-height: 1.24;
}
.pn-grid .wp-block-post-title a:hover { color: var(--pn-brand); }
.pn-grid .wp-block-post-excerpt {
	font-size: 0.92rem;
	color: var(--pn-ink-soft);
	line-height: 1.5;
	margin-bottom: 0.4rem;
}
.pn-grid .wp-block-post-excerpt__more-link { display: none; }

/* Manchete: filete separando as colunas, ar reduzido */
.pn-ident--manchete .pn-grid .wp-block-post-template > li {
	border-top: 1px solid var(--pn-line);
	padding-top: 0.9rem;
}

/* Tribuna: sem imagem dominante, mais respiro, régua fina */
.pn-ident--tribuna .pn-grid .wp-block-post-template > li {
	border-top: 1px solid var(--pn-line);
	padding-top: 1rem;
}
.pn-ident--tribuna .pn-grid .wp-block-post-title { font-size: 1.3rem; }

/* Pulso: cartões */
.pn-ident--pulso .pn-grid .wp-block-post-template > li {
	background: var(--pn-surface);
	border-radius: var(--pn-radius);
	overflow: hidden;
	box-shadow: var(--pn-shadow);
	display: flex;
	flex-direction: column;
}
.pn-ident--pulso .pn-grid .wp-block-post-featured-image {
	border-radius: 0;
	margin-bottom: 0;
}
.pn-ident--pulso .pn-grid .wp-block-post-template > li > *:not(.wp-block-post-featured-image) {
	padding-inline: 1.05rem;
}
.pn-ident--pulso .pn-grid .wp-block-post-template > li > .pn-kicker { padding-top: 1rem; }
.pn-ident--pulso .pn-grid .wp-block-post-template > li > .wp-block-post-date { padding-bottom: 1.05rem; }

/* =========================================================================
   Lista compacta (imagem à esquerda)
   ========================================================================= */

.pn-list .wp-block-post-template { gap: 0; }
.pn-list .wp-block-post-template > li {
	border-bottom: 1px solid var(--pn-line);
	padding-block: 1rem;
}
.pn-list .wp-block-post-template > li:last-child { border-bottom: none; }
.pn-list .wp-block-columns { gap: 1.1rem; align-items: flex-start; }
.pn-list .wp-block-post-featured-image {
	overflow: hidden;
	border-radius: var(--pn-radius);
}
.pn-list .wp-block-post-featured-image img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	display: block;
}
.pn-list .wp-block-post-title {
	font-size: 1.1rem;
	margin: 0 0 0.35rem;
	line-height: 1.26;
}
/* Mesmo achado do `.pn-grid` acima, aplicado à lista compacta: a coluna
   da imagem tem `flex-basis` fixo cravado no bloco (170px), então some
   por completo (não só o `<img>`) quando a matéria não tem imagem
   destacada — sem isso sobra um vão vazio à esquerda do título. */
.pn-list .wp-block-columns:not(:has(.wp-block-post-featured-image)) > .wp-block-column:first-child {
	display: none;
}

/* =========================================================================
   Mais lidas (lista numerada)
   ========================================================================= */

.pn-mostread .wp-block-post-template {
	gap: 0;
	counter-reset: pn-rank;
}
.pn-mostread .wp-block-post-template > li {
	counter-increment: pn-rank;
	display: grid;
	grid-template-columns: 2.4rem 1fr;
	gap: 0.75rem;
	align-items: start;
	padding-block: 0.8rem;
	border-bottom: 1px solid var(--pn-line);
}
.pn-mostread .wp-block-post-template > li:last-child { border-bottom: none; }
.pn-mostread .wp-block-post-template > li::before {
	content: counter(pn-rank);
	font-family: var(--pn-font-head);
	font-size: 1.75rem;
	font-weight: 900;
	line-height: 1;
	color: var(--pn-brand);
	opacity: 0.5;
	letter-spacing: -0.04em;
}
.pn-mostread .wp-block-post-title {
	font-size: 0.98rem;
	line-height: 1.3;
	margin: 0;
}

/* =========================================================================
   Publicidade
   ========================================================================= */

.portal-ad-slot {
	display: flex;
	justify-content: center;
	align-items: center;
	overflow: hidden;
	margin-block: 1.5rem;
}
.portal-ad-slot::before {
	content: "Publicidade";
	position: absolute;
	transform: translateY(-1.15rem);
	font-size: 0.6rem;
	text-transform: uppercase;
	letter-spacing: 0.16em;
	color: var(--pn-ink-soft);
	opacity: 0.7;
}
.portal-ad-slot { position: relative; padding-top: 1.15rem; }

/* =========================================================================
   Matéria (single)
   ========================================================================= */

.pn-article__head { margin-bottom: 1.5rem; }
.pn-article__head .wp-block-post-title {
	font-size: clamp(1.9rem, 1.1rem + 2.6vw, 3rem);
	margin: 0.2rem 0 0.8rem;
}
.pn-article__standfirst {
	font-size: 1.18rem;
	line-height: 1.5;
	color: var(--pn-ink-soft);
	margin-bottom: 1.1rem;
	font-weight: 400;
}
.pn-article__byline {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem;
	padding-block: 0.8rem;
	border-top: 1px solid var(--pn-line);
	border-bottom: 1px solid var(--pn-line);
	font-size: 0.82rem;
	color: var(--pn-ink-soft);
}
.pn-article__byline .wp-block-post-author__name {
	font-weight: 700;
	color: var(--pn-ink);
}
.pn-article__byline .wp-block-avatar img { border-radius: 100px; }

/* Foto de capa da matéria: proporção fixa para não engolir a página */
.pn-article__head + .wp-block-post-featured-image img {
	width: 100%;
	aspect-ratio: 16 / 9;
	max-height: 480px;
	object-fit: cover;
	display: block;
	border-radius: var(--pn-radius);
}

.pn-article__content { font-size: 1.09rem; line-height: 1.75; }
.pn-article__content p { margin-bottom: 1.3rem; }
.pn-article__content h2 {
	font-size: 1.55rem;
	margin: 2.2rem 0 0.9rem;
}
.pn-article__content blockquote {
	border-left: 4px solid var(--pn-brand);
	padding: 0.3rem 0 0.3rem 1.3rem;
	margin: 1.8rem 0;
	font-size: 1.28rem;
	line-height: 1.45;
	font-weight: 600;
	font-family: var(--pn-font-head);
	letter-spacing: var(--pn-head-tracking);
}
.pn-ident--tribuna .pn-article__content blockquote {
	border-left: none;
	border-top: 1px solid var(--pn-ink);
	border-bottom: 1px solid var(--pn-ink);
	padding: 1.1rem 0;
	text-align: center;
	font-style: italic;
}
.pn-article__content figcaption {
	font-size: 0.8rem;
	color: var(--pn-ink-soft);
	padding-top: 0.5rem;
	line-height: 1.4;
}

/* Tribuna: capitular na primeira letra */
.pn-ident--tribuna .pn-article__content > p:first-of-type::first-letter {
	float: left;
	font-family: var(--pn-font-serif);
	font-size: 3.6em;
	line-height: 0.82;
	font-weight: 800;
	padding: 0.05em 0.09em 0 0;
	color: var(--pn-ink);
}

/* =========================================================================
   Rodapé
   ========================================================================= */

.pn-footer {
	background: var(--pn-footer-bg);
	color: var(--pn-footer-fg);
	margin-top: 3.5rem;
	padding-block: 3rem 2rem;
}
.pn-footer h4 {
	color: var(--pn-footer-fg);
	opacity: 0.95;
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	font-family: var(--pn-font-body);
	font-weight: 800;
	margin: 0 0 0.9rem;
}
.pn-footer a { color: var(--pn-footer-fg); }
.pn-footer a:hover { opacity: 0.8; }
.pn-footer .wp-block-site-title a {
	color: var(--pn-footer-fg);
	font-size: 1.5rem;
}
.pn-footer p { font-size: 0.88rem; line-height: 1.6; }
.pn-footer .wp-block-navigation {
	flex-direction: column;
	gap: 0.55rem;
	font-size: 0.88rem;
	align-items: flex-start;
}
/* `core/page-list` (usado nas colunas "Institucional" dos rodapés — lista
   dinâmica das Páginas reais do site, sem link morto/rótulo cravado) usa
   `<ul>` simples, sem a classe de layout do bloco de navegação — precisa
   do próprio reset de lista + espaçamento equivalente. */
.pn-footer .wp-block-page-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 0.55rem;
	font-size: 0.88rem;
}
/* No rodapé Global, a lista de páginas fica na linha final junto do
   "© / Sitemap" — inline, separada por ponto, não em coluna. */
.pn-footer__pagelist-inline.wp-block-page-list {
	flex-direction: row;
	flex-wrap: wrap;
	gap: 0;
	font-size: inherit;
}
.pn-footer__pagelist-inline.wp-block-page-list li:not(:last-child)::after {
	content: " · ";
	opacity: 0.6;
}
.pn-footer__legal {
	border-top: 1px solid color-mix(in srgb, var(--pn-footer-fg) 20%, transparent);
	margin-top: 2.2rem;
	padding-top: 1.3rem;
	font-size: 0.78rem;
	opacity: 0.75;
}

.pn-ident--tribuna .pn-footer {
	border-top: 3px double var(--pn-ink);
}
.pn-ident--tribuna .pn-footer a:hover { color: var(--pn-brand); opacity: 1; }
.pn-ident--tribuna .pn-footer__legal { border-top-color: var(--pn-line); }

/* =========================================================================
   Paginação, busca, comentários
   ========================================================================= */

.wp-block-query-pagination {
	margin-top: 2.5rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--pn-line);
	font-family: var(--pn-font-body);
	font-size: 0.9rem;
	font-weight: 600;
}
.wp-block-query-pagination-numbers .page-numbers {
	padding: 0.35rem 0.7rem;
	border: 1px solid var(--pn-line);
	border-radius: var(--pn-radius);
	margin-inline: 0.1rem;
}
.wp-block-query-pagination-numbers .page-numbers.current {
	background: var(--pn-brand);
	color: #fff;
	border-color: var(--pn-brand);
}

.wp-block-search__button {
	background: var(--pn-brand);
	color: #fff;
	border: none;
	border-radius: var(--pn-radius);
	padding: 0.6rem 1.1rem;
	font-weight: 700;
	font-family: var(--pn-font-body);
}
/* Botão só-ícone (`buttonUseIcon:true`, usado em todo cabeçalho do
   tema): o padding acima foi pensado pra um botão de TEXTO ("Buscar"),
   grande demais só pro ícone de lupa — vira um quadrado desproporcional
   ao lado do hambúrguer. Ícone quadrado compacto, mesma pegada visual
   dos outros controles do cabeçalho. */
.wp-block-search__button.has-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 2.25rem;
	height: 2.25rem;
	padding: 0;
	flex-shrink: 0;
}
.wp-block-search__button.has-icon svg { width: 1.1rem; height: 1.1rem; }
.wp-block-search__input {
	border: 1px solid var(--pn-line);
	border-radius: var(--pn-radius);
	padding: 0.6rem 0.8rem;
}

/* =========================================================================
   Posição de logo e menu (Manchete, Tribuna, Pulso, Regional — a Global
   mantém o cabeçalho minimalista fixo, de propósito, igual à referência).
   Precisa de !important pela mesma razão de sempre: o core do WP gera uma
   classe de container com o justify-content do bloco original, que empata
   em especificidade com uma seleção de classe única.
   ========================================================================= */

body.pn-logo-center .pn-masthead > .wp-block-group.alignwide,
body.pn-logo-center .pn-masthead--regional > .wp-block-group.alignwide {
	justify-content: center !important;
}
body.pn-logo-center .pn-masthead > .wp-block-group.alignwide > .wp-block-search,
body.pn-logo-center .pn-masthead--regional > .wp-block-group.alignwide > .wp-block-search {
	display: none;
}
body.pn-logo-right .pn-masthead > .wp-block-group.alignwide,
body.pn-logo-right .pn-masthead--regional > .wp-block-group.alignwide {
	flex-direction: row-reverse;
}

body.pn-menu-center .pn-nav > .wp-block-group.alignwide,
body.pn-menu-center .pn-nav--regional > .wp-block-group.alignwide {
	justify-content: center !important;
}
body.pn-menu-right .pn-nav > .wp-block-group.alignwide,
body.pn-menu-right .pn-nav--regional > .wp-block-group.alignwide {
	justify-content: flex-end !important;
}

/* =========================================================================
   Widgets (clima, câmbio, horóscopo)
   ========================================================================= */

.pn-widget { display: flex; align-items: center; }

.pn-widget--weather {
	gap: 0.4rem;
	font-size: 0.78rem;
}
.pn-widget--weather .pn-widget__icon { font-size: 1.1rem; line-height: 1; }
.pn-widget--weather .pn-widget__temp { font-weight: 800; font-size: 0.95rem; }
.pn-widget--weather .pn-widget__detail { display: flex; flex-direction: column; line-height: 1.15; }
.pn-widget--weather .pn-widget__desc { opacity: 0.75; font-size: 0.7rem; }

.pn-widget--currency { gap: 0.9rem; font-size: 0.78rem; }
.pn-widget--currency .pn-widget__fx { display: flex; flex-direction: column; line-height: 1.15; }
.pn-widget--currency .pn-widget__fx-label { opacity: 0.7; font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.05em; }
.pn-widget--currency .pn-widget__fx-value { font-weight: 700; }

.pn-widget--market { gap: 0.4rem; font-size: 0.78rem; }
.pn-widget--market .pn-widget__fx-label { opacity: 0.7; font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.05em; margin-right: 0.35rem; }
.pn-widget--market .pn-widget__fx-value { font-weight: 700; }
.pn-widget--market .pn-widget__fx-value.is-up { color: #1a8f4c; }
.pn-widget--market .pn-widget__fx-value.is-down { color: #c62828; }
.pn-widget--market .pn-widget__fx-value small { font-weight: 600; margin-left: 0.3rem; }

.pn-widget--social { gap: 0.6rem; }
.pn-social-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 1.75rem;
	height: 1.75rem;
	/* `min-height`/`padding` !important: alguma folha de estilo do
	   próprio core (não localizada via CSSOM — provavelmente injetada
	   de um jeito que o inspetor de regras não enxerga) aplica um
	   tap-target mínimo de 36px + padding em cima de qualquer `<a>`,
	   deixando o círculo virar uma "pílula" oval no rodapé mobile —
	   achado real testando em produção, 02/09/2026. `box-sizing` evita
	   qualquer padding herdado inflar a caixa além do tamanho definido. */
	min-height: 0 !important;
	padding: 0 !important;
	box-sizing: border-box !important;
	/* `!important`: `.pn-footer a` (regra de alvo de toque no mobile, linha
	   ~2327) tem especificidade maior que este `display: flex` da linha de
	   cima (classe+tag vs. só classe) e ganhava, virando `inline-block` —
	   sem flex, `align-items`/`justify-content` não fazem nada e o SVG
	   fica alinhado pela baseline normal do texto, não centralizado no
	   círculo cinza de fundo. Achado real em produção, 02/09/2026. */
	display: flex !important;
	border-radius: 50%;
	color: inherit;
	opacity: 0.85;
	flex-shrink: 0;
	transition: opacity 0.15s, transform 0.15s;
}
.pn-social-icon:hover { opacity: 1; transform: translateY(-1px); }
/* no rodapé os ícones ficam um pouco maiores e com fundo sutil */
.pn-footer .pn-widget--social { margin-top: 1rem; }
.pn-footer .pn-social-icon {
	width: 2.1rem;
	height: 2.1rem;
	background: color-mix(in srgb, var(--pn-footer-fg) 12%, transparent);
}
.pn-footer .pn-social-icon:hover { background: color-mix(in srgb, var(--pn-footer-fg) 22%, transparent); }

.pn-widget--horoscope { width: 100%; margin-top: 1.5rem; }
.pn-widget--horoscope iframe { width: 100%; height: 420px; border: 0; border-radius: var(--pn-radius); }

/* Posição de clima e câmbio: cada um escolhe, independente do outro, entre
   barra superior (padrão) ou ao lado da logo — os dois lugares existem
   sempre no markup, o CSS decide qual aparece em cada um.
   Precisa de !important porque o grupo .pn-masthead__widgets é um
   core/group e ganha a classe utilitária `.is-layout-flex` do WordPress
   (display:flex), que empata em especificidade com uma regra de classe
   única e, carregada depois da nossa folha, venceria por ordem no cascade. */
.pn-masthead__widgets { display: none !important; }
body.pn-weather-masthead .pn-masthead__widgets,
body.pn-currency-masthead .pn-masthead__widgets,
body.pn-market-masthead .pn-masthead__widgets {
	display: flex !important;
	gap: 1.5rem;
	margin-left: 1.25rem;
	padding-left: 1.25rem;
	border-left: 1px solid var(--pn-line);
}

.pn-masthead__widgets .pn-widget--weather,
.pn-masthead__widgets .pn-widget--currency,
.pn-masthead__widgets .pn-widget--market { display: none !important; }
body.pn-weather-masthead .pn-masthead__widgets .pn-widget--weather { display: flex !important; }
body.pn-currency-masthead .pn-masthead__widgets .pn-widget--currency { display: flex !important; }
body.pn-market-masthead .pn-masthead__widgets .pn-widget--market { display: flex !important; }

body.pn-weather-masthead .pn-topbar .pn-widget--weather,
body.pn-currency-masthead .pn-topbar .pn-widget--currency,
body.pn-market-masthead .pn-topbar .pn-widget--market { display: none !important; }

/* =========================================================================
   Tribuna — reforço de identidade impressa
   ========================================================================= */

.pn-ident--tribuna .pn-nav .wp-block-navigation {
	gap: 0;
}
.pn-ident--tribuna .pn-nav .wp-block-navigation-item {
	position: relative;
}
.pn-ident--tribuna .pn-nav .wp-block-navigation-item + .wp-block-navigation-item::before {
	content: "";
	position: absolute;
	left: 0;
	top: 50%;
	transform: translateY(-50%);
	width: 1px;
	height: 0.9em;
	background: var(--pn-line);
}
.pn-ident--tribuna .pn-nav .wp-block-navigation-item__content {
	border-bottom: none !important;
	font-variant: small-caps;
	letter-spacing: 0.05em;
	padding-inline: 1rem;
}
.pn-ident--tribuna .pn-grid .wp-block-post-featured-image img,
.pn-ident--tribuna .pn-hero .wp-block-post-featured-image img,
.pn-ident--tribuna .pn-list .wp-block-post-featured-image img {
	filter: grayscale(0.15) contrast(1.05);
	border: 1px solid var(--pn-line);
}
.pn-ident--tribuna .pn-breaking { display: none; } /* jornal impresso não tem "plantão" */
.pn-ident--tribuna .pn-topbar__date::before,
.pn-ident--tribuna .pn-topbar__date::after {
	content: "—";
	margin: 0 0.6em;
	opacity: 0.4;
}

/* =========================================================================
   Pulso — reforço de identidade "TV ao vivo"
   ========================================================================= */

.pn-ident--pulso .pn-masthead .wp-block-site-title,
.pn-ident--pulso .pn-masthead .wp-block-site-title a {
	text-transform: uppercase;
	letter-spacing: 0.02em;
}
.pn-ident--pulso .pn-breaking {
	position: relative;
	overflow: hidden;
}
.pn-ident--pulso .pn-breaking__label {
	background: #fff;
	color: var(--pn-brand);
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
}
.pn-ident--pulso .pn-breaking__dot { background: var(--pn-brand); }
@keyframes pn-live-pulse {
	0%, 100% { opacity: 1; transform: scale(1); }
	50% { opacity: 0.35; transform: scale(0.75); }
}
.pn-ident--pulso .pn-hero .wp-block-post-title {
	text-transform: uppercase;
}
.pn-ident--pulso .pn-kicker a {
	font-weight: 900;
}
.pn-ident--pulso .pn-grid .wp-block-post-template > li {
	border-top: 3px solid var(--pn-brand);
}
.pn-ident--pulso .pn-mostread .wp-block-post-template > li::before {
	background: var(--pn-brand);
	color: #fff;
	opacity: 1;
	width: 1.9rem;
	height: 1.9rem;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	font-size: 1rem;
}

/* =========================================================================
   Regional — cabeçalho utilitário com widgets
   ========================================================================= */

.pn-topbar--regional { font-size: 0.8rem; }
.pn-topbar--regional .pn-widget { color: #fff; }
.pn-topbar--regional .pn-widget--currency .pn-widget__fx-label { color: rgba(255, 255, 255, 0.6); }

.pn-masthead--regional { border-bottom: none; padding-block: 1.4rem; }
.pn-masthead--regional .wp-block-site-title a { font-size: clamp(1.6rem, 1.1rem + 1.8vw, 2.5rem); }
.pn-masthead__tagline-regional {
	font-size: 0.85rem;
	color: var(--pn-ink-soft);
	font-weight: 600;
	margin: 0;
}

.pn-nav--regional {
	border-bottom: 1px solid var(--pn-line);
	box-shadow: var(--pn-shadow);
}
.pn-nav--regional .wp-block-navigation-item__content {
	font-weight: 800;
	text-transform: none;
	letter-spacing: 0;
	font-size: 0.88rem;
}

.pn-ident--regional .pn-breaking {
	background: var(--pn-brand);
}
.pn-ident--regional .pn-breaking__label {
	background: var(--pn-ink);
}
.pn-ident--regional .pn-section-head {
	border-top: none;
	background: var(--pn-surface-alt);
	padding: 0.6rem 1rem;
	border-radius: var(--pn-radius);
}
.pn-ident--regional .pn-section-head h2::before { border-radius: 2px; }
.pn-ident--regional .pn-grid .wp-block-post-template > li {
	background: var(--pn-surface);
	box-shadow: var(--pn-shadow);
	border-radius: var(--pn-radius);
	padding: 0.75rem;
}
.pn-ident--regional .pn-grid .wp-block-post-featured-image { margin-inline: -0.75rem; margin-top: -0.75rem; }
.pn-ident--regional .pn-grid .wp-block-post-featured-image img { border-radius: var(--pn-radius) var(--pn-radius) 0 0; }
/* fundo/texto do rodapé regional já vêm de --pn-footer-bg/fg (base :root) */

/* =========================================================================
   Global — editorial minimalista (BBC-like)
   ========================================================================= */

.pn-ident--global { --pn-line: #d5d5d5; }

.pn-masthead--global {
	padding-block: 1rem;
	border-bottom: 1px solid var(--pn-line);
}
.pn-masthead--global .wp-block-site-title a {
	font-weight: 900;
	letter-spacing: -0.01em;
	font-size: 1.4rem;
	text-transform: uppercase;
	background: var(--pn-ink);
	color: #fff !important;
	padding: 0.15em 0.45em;
}

.pn-nav--global {
	border-top: 1px solid var(--pn-line);
	padding-block: 0.1rem;
}
.pn-nav--global-desktop .wp-block-navigation-item__content {
	text-transform: none;
	font-weight: 500;
	letter-spacing: 0;
	font-size: 0.92rem;
	border-bottom: 2px solid transparent;
}
.pn-nav--global-desktop .wp-block-navigation-item:first-child .wp-block-navigation-item__content {
	font-weight: 700;
	border-bottom-color: var(--pn-ink);
}
.pn-nav--global-desktop .wp-block-navigation-item__content:hover {
	color: var(--pn-ink);
	border-bottom-color: var(--pn-ink);
}
.pn-nav--global-mobile { display: none; }

.pn-ident--global .pn-kicker,
.pn-ident--global .pn-kicker a {
	color: var(--pn-ink-soft);
	font-weight: 700;
	letter-spacing: 0;
	text-transform: none;
	font-size: 0.82rem;
}
.pn-ident--global .pn-hero .wp-block-post-title { font-size: clamp(1.6rem, 1rem + 2.2vw, 2.5rem); }
.pn-ident--global .pn-section-head { border-top: 1px solid var(--pn-ink); }
.pn-ident--global .pn-section-head h2 { text-transform: none; letter-spacing: 0; font-weight: 700; }
.pn-ident--global .pn-section-head h2::before { display: none; }
.pn-ident--global .pn-grid .wp-block-post-template > li {
	border-top: 1px solid var(--pn-line);
}
.pn-ident--global .pn-grid .wp-block-post-title,
.pn-ident--global .pn-hero .wp-block-post-title,
.pn-ident--global .pn-latest .wp-block-post-title {
	font-weight: 700;
}
.pn-ident--global a:hover { text-decoration: underline; }
.pn-ident--global .pn-footer--global {
	border-top: 1px solid var(--pn-line);
}
.pn-ident--global .pn-footer--global .wp-block-site-title a {
	background: none;
	color: var(--pn-ink) !important;
	padding: 0;
	font-size: 1.1rem;
}
.pn-ident--global .pn-footer--global a:hover { color: var(--pn-ink); }
/* "AO VIVO" — único uso de vermelho permitido na identidade Global */
.pn-ident--global .pn-breaking { background: #fff; border-top: 1px solid var(--pn-line); border-bottom: 1px solid var(--pn-line); }
.pn-ident--global .pn-breaking__track a { color: var(--pn-ink); }
.pn-ident--global .pn-breaking__dot { background: #bb1919; }
.pn-ident--global .pn-breaking__label {
	background: none;
	color: #bb1919;
	font-weight: 800;
}
.pn-ident--global .pn-breaking__label::before {
	content: "● ";
}

/* =========================================================================
   Regional — layout próprio (referência bdsp.com.br)
   ========================================================================= */

.pn-reg-hero .pn-src-hero .wp-block-post-title { font-size: clamp(1.8rem, 1.1rem + 2.2vw, 2.7rem); margin: 0.4rem 0; }
.pn-reg-hero .pn-src-hero .wp-block-post-excerpt { color: var(--pn-ink-soft); }

.pn-reg-thumbs .wp-block-post-template { gap: 1.25rem; }
.pn-reg-thumbs .wp-block-post-featured-image { margin-bottom: 0.5rem; }
.pn-reg-thumbs .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; }
.pn-reg-thumbs .wp-block-post-title { font-size: 0.95rem; margin: 0; }

.pn-reg-panel { position: relative; border-radius: var(--pn-radius); overflow: hidden; height: 100%; min-height: 420px; }
.pn-reg-panel .wp-block-post-template { position: relative; height: 100%; min-height: 420px; }
.pn-reg-panel .wp-block-post-template > li {
	position: absolute; inset: 0;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.6s ease;
}
.pn-reg-panel .wp-block-post-template > li.is-active { opacity: 1; visibility: visible; z-index: 1; }
/* antes do JS rodar (ou com JS desativado) mostra só a primeira matéria —
   mas só ENQUANTO o JS não assumiu o controle. Sem o ":not(.js-ready)" essa
   regra ficava ativa pra sempre e a matéria 1 nunca se escondia, sobrepondo
   texto com o slide que o JS ativava por cima (o bug do título dobrado). */
.pn-reg-panel .wp-block-post-template:not(.js-ready) > li:first-child { opacity: 1; visibility: visible; }
.pn-reg-panel .wp-block-post-featured-image { margin: 0; height: 100%; }
.pn-reg-panel .wp-block-post-featured-image img { width: 100%; height: 100%; aspect-ratio: auto; object-fit: cover; display: block; }
.pn-reg-panel .wp-block-post-featured-image::after {
	content: "";
	position: absolute; inset: 0;
	background: linear-gradient(to top, rgba(10,14,18,0.94) 15%, rgba(10,14,18,0.15) 65%, rgba(10,14,18,0) 85%);
}
.pn-reg-panel__body { position: absolute; left: 0; right: 0; bottom: 0; padding: 1.5rem 1.25rem 2.75rem; z-index: 2; }
.pn-reg-panel__body .wp-block-post-title,
.pn-reg-panel__body .wp-block-post-title a {
	color: #fff;
	font-size: 1.15rem;
	line-height: 1.3;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

/* o painel tem overflow:hidden (a foto preenche tudo), então as setas do
   carrossel genérico (que ficam com metade pra fora) precisam entrar pra
   dentro aqui, em cima da própria imagem. */
.pn-reg-panel.pn-carousel .pn-carousel__arrow {
	top: calc(50% - 1.4rem);
	width: 2.1rem;
	height: 2.1rem;
	font-size: 1.2rem;
}
.pn-reg-panel.pn-carousel .pn-carousel__arrow--prev { left: 0.6rem; }
.pn-reg-panel.pn-carousel .pn-carousel__arrow--next { right: 0.6rem; }

.pn-reg-panel__dots {
	position: absolute; left: 0; right: 0; bottom: 0.6rem;
	display: flex; justify-content: center; gap: 0.4rem;
	z-index: 3; margin: 0; padding: 0;
}
.pn-reg-panel__dot {
	width: 8px; height: 8px; border-radius: 50%;
	background: rgba(255,255,255,0.45);
	border: none; padding: 0; cursor: pointer;
	transition: background 0.2s, transform 0.2s;
}
.pn-reg-panel__dot:hover { background: rgba(255,255,255,0.75); }
.pn-reg-panel__dot.is-active { background: #fff; transform: scale(1.2); }

.pn-reg-widgets {
	background: var(--pn-surface-alt);
	border-radius: var(--pn-radius);
	padding: 1.25rem 1.5rem;
	margin-top: 2rem;
	gap: 2.5rem;
}
.pn-reg-widgets .pn-widget--weather-detailed { gap: 1rem; }
.pn-reg-widgets .pn-widget__wx-main { display: flex; align-items: center; gap: 0.5rem; }
.pn-reg-widgets .pn-widget__wx-main .pn-widget__icon { font-size: 2.4rem; }
.pn-reg-widgets .pn-widget__wx-main .pn-widget__temp { font-size: 2rem; font-weight: 800; }
.pn-reg-widgets .pn-widget__wx-info { display: flex; flex-direction: column; font-size: 0.82rem; color: var(--pn-ink-soft); }
.pn-reg-widgets .pn-widget__city { color: var(--pn-ink); font-size: 0.95rem; }
.pn-reg-widgets .pn-widget--horoscope { margin: 0; flex: 1; }
.pn-reg-widgets .pn-widget--horoscope iframe { height: 150px; }

/* A cor de cada seção vem do PHP (patterns/home-regional.php), via a
   custom property --pn-section-accent + background inline — permite N
   seções configuráveis em vez de só 2 classes fixas de cor. */
.pn-reg-section { margin-top: 2.5rem; padding: 1.75rem; border-radius: var(--pn-radius); }
.pn-reg-section__title { text-align: center; text-transform: uppercase; letter-spacing: 0.06em; font-size: 1.3rem; margin: 0 0 1.5rem; }
.pn-reg-section .pn-kicker,
.pn-reg-section .pn-kicker a { color: var(--pn-section-accent, var(--pn-brand)); }
.pn-reg-grid .wp-block-post-template { gap: 1.5rem; }
.pn-reg-grid .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; border-radius: var(--pn-radius); }
.pn-reg-grid .wp-block-post-title { font-size: 1rem; margin: 0.4rem 0 0; }

.pn-reg-bottom { margin-top: 2.5rem; }

/* Home Diário: hero 50/50 igual ao spdiario.com.br (chamada-principal). */
.pn-dia-hero__main .wp-block-post-title { font-size: 2.6rem; line-height: 1.15; margin: 0; }
.pn-dia-hero__main .wp-block-post-featured-image img { aspect-ratio: 16/10; object-fit: cover; width: 100%; }

/* Linha de 3 colunas logo abaixo do hero: história secundária + 2
   mini-chamadas (foto pequena + texto) + lista de marcadores. */
.pn-dia-secondary__main .wp-block-post-featured-image img { aspect-ratio: 16/9; object-fit: cover; width: 100%; margin-bottom: 0.5rem; }
.pn-dia-secondary__main .wp-block-post-title { font-size: 1.15rem; margin: 0; }
.pn-dia-secondary__mini .wp-block-post-template { gap: 1rem; }
.pn-dia-secondary__mini .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; }
.pn-dia-secondary__mini .wp-block-post-title { font-size: 0.92rem; margin: 0; line-height: 1.3; }
.pn-dia-secondary__mini .pn-kicker { font-size: 0.78rem; margin-bottom: 0.2rem; }
.pn-dia-bullets .wp-block-post-template { gap: 0; }
.pn-dia-bullets .wp-block-post-template > li {
	padding-block: 0.6rem;
	border-bottom: 1px solid var(--pn-line);
	list-style: none;
}
.pn-dia-bullets .wp-block-post-template > li:first-child { padding-top: 0; }
.pn-dia-bullets .wp-block-post-template > li::before {
	content: "";
	display: inline-block;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--pn-brand);
	margin-right: 0.5rem;
	vertical-align: middle;
}
.pn-dia-bullets .wp-block-post-title { font-size: 0.92rem; margin: 0; display: inline; line-height: 1.4; }

/* Seções por editoria (réplica das seções "política"/"esportes" etc). */
.pn-dia-section { margin-top: 3rem; }
.pn-dia-section__main .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; }
.pn-dia-section__main .wp-block-post-title { font-size: 1.4rem; margin: 0; }
.pn-dia-section__grid .wp-block-post-template { gap: 1rem; }
.pn-dia-section__grid .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; margin-bottom: 0.4rem; }
.pn-dia-section__grid .wp-block-post-title { font-size: 0.9rem; margin: 0; line-height: 1.3; }

.pn-dia-extras { margin-top: 3.5rem; padding-top: 1.5rem; border-top: 1px solid var(--pn-line); }
.pn-dia-bottom { margin-top: 2.5rem; }
/* Mesma correção de `align-items` explicada acima, aplicada a toda
   coluna de 2 blocos deste padrão (hero, secundária, cada seção por
   editoria) — sem isto, a coluna mais curta estica pra altura da mais
   longa (ex.: a grade de 4 chamadas ficando mais alta que a história
   principal ao lado). */
body .pn-dia-hero__main,
body .pn-dia-secondary,
body .pn-dia-section > .wp-block-columns {
	align-items: flex-start !important;
}
/* Especificidade extra (ancestral `body`) necessária pra vencer o
   `align-items` que o WP injeta inline por bloco (mesma especificidade
   de classe, mas carregado depois do frontend.css no <head>) — sem
   isto as duas colunas esticam pra altura da mais longa (a lateral de
   futebol, que lista muitos jogos), deixando um vão em branco enorme
   embaixo da faixa de clima das capitais. */
/* `!important` necessário: o layout de blocos do WP também define
   `align-items` inline no <head> pra `.wp-block-columns.is-layout-flex`
   com a mesma especificidade e carregando depois do frontend.css. */
body .pn-dia-bottom { align-items: flex-start !important; }

/* Mesmo problema, agora achado em produção nas identidades Manchete
   (`.pn-home-top`: hero + 2 chamadas ao lado de uma coluna lateral com
   últimas notícias + mais lidas + widgets — a lateral fica bem mais
   alta) e Regional (`.pn-reg-hero` e `.pn-reg-bottom`: mesma assimetria
   entre a coluna principal e o painel/lateral). Sem isto, a coluna mais
   curta estica pra altura da mais longa, deixando um vão em branco
   grande — exatamente o "espaço em branco" relatado em produção no
   britain-today.uk. `!important` pelo mesmo motivo do `.pn-dia-bottom`
   acima: vencer o `align-items` inline que o WP injeta por bloco. */
body .pn-home-top,
body .pn-reg-hero,
body .pn-reg-bottom,
body .pn-pls-utility {
	align-items: flex-start !important;
}

/* =========================================================================
   Global — layout próprio (referência bbc.com)
   ========================================================================= */

.pn-glb-top { align-items: flex-start; }
.pn-glb-briefs .wp-block-post-template { gap: 1.75rem; }
.pn-glb-briefs .wp-block-post-featured-image img { aspect-ratio: 16/10; object-fit: cover; width: 100%; }
.pn-glb-briefs .wp-block-post-title { font-size: 1rem; margin: 0.5rem 0 0.3rem; }
.pn-glb-briefs .wp-block-post-excerpt { font-size: 0.85rem; color: var(--pn-ink-soft); }
.pn-glb-briefs .wp-block-group { gap: 0.5rem; font-size: 0.72rem; color: var(--pn-ink-soft); }

.pn-src-hero .wp-block-post-title { font-size: clamp(1.7rem, 1rem + 2.4vw, 2.6rem); margin: 0.75rem 0 0.5rem; font-weight: 800; }
.pn-glb-top .pn-src-hero .wp-block-post-excerpt { font-size: 1.05rem; color: var(--pn-ink-soft); }

.pn-glb-list .wp-block-post-template { gap: 0; }
.pn-glb-list .wp-block-post-template > li { padding-block: 0.9rem; border-top: 1px solid var(--pn-line); }
.pn-glb-list .wp-block-post-title { font-size: 0.98rem; margin: 0 0 0.35rem; }
.pn-glb-list .wp-block-group { gap: 0.5rem; font-size: 0.72rem; color: var(--pn-ink-soft); }

.pn-glb-strip-head { border-top: 3px solid var(--pn-ink); padding-top: 0.5rem; margin-top: 2.5rem; }
.pn-glb-strip-head h2 { text-transform: uppercase; font-size: 0.95rem; font-weight: 800; letter-spacing: 0.02em; }

/* =========================================================================
   Carrossel horizontal (Pulso e Global) — setas injetadas via JS
   (assets/js/carousel.js) sobre um container que vira position:relative.
   ========================================================================= */

.pn-carousel { position: relative; }

.pn-carousel__arrow {
	position: absolute;
	top: 40%;
	transform: translateY(-50%);
	z-index: 5;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 50%;
	border: 1px solid var(--pn-line);
	background: var(--pn-surface);
	color: var(--pn-ink);
	font-size: 1.4rem;
	line-height: 1;
	cursor: pointer;
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);
	display: flex;
	align-items: center;
	justify-content: center;
	transition: opacity 0.15s, transform 0.15s;
}
.pn-carousel__arrow:hover { transform: translateY(-50%) scale(1.06); }
.pn-carousel__arrow--prev { left: -0.9rem; }
.pn-carousel__arrow--next { right: -0.9rem; }
.pn-carousel.is-at-start .pn-carousel__arrow--prev,
.pn-carousel.is-at-end .pn-carousel__arrow--next { opacity: 0; pointer-events: none; }

@media (max-width: 640px) {
	.pn-carousel__arrow { display: none; } /* no toque, a rolagem por gesto já basta */
}

/* Barra de clima das capitais — mesma família visual dos carrosséis */
.pn-capitals-bar {
	margin-top: 1.5rem;
	padding: 0.25rem 0;
	border-top: 1px solid var(--pn-line);
	border-bottom: 1px solid var(--pn-line);
}
.pn-capitals-bar__list {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 0;
	scrollbar-width: none;
	margin: 0;
	padding: 0;
	list-style: none;
}
.pn-capitals-bar__list::-webkit-scrollbar { display: none; }
.pn-capitals-bar__item {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.75rem 1.1rem;
	border-right: 1px solid var(--pn-line);
	white-space: nowrap;
	font-size: 0.85rem;
}
.pn-capitals-bar__icon { font-size: 1.05rem; }
.pn-capitals-bar__city { color: var(--pn-ink-soft); }
.pn-capitals-bar__temp { font-weight: 800; }

/* Futebol — calendário e classificação */
.pn-football { margin-top: 1.25rem; }
.pn-football + .pn-football { margin-top: 2rem; }
.pn-football__league + .pn-football__league { margin-top: 1.75rem; }
.pn-football__league-title {
	font-size: 0.95rem;
	font-weight: 800;
	margin: 0 0 0.6rem;
	padding-bottom: 0.4rem;
	border-bottom: 2px solid var(--pn-brand);
}

.pn-football__matches { list-style: none; margin: 0; padding: 0; }
.pn-football__match {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.5rem 0;
	border-bottom: 1px solid var(--pn-line);
	font-size: 0.82rem;
	/* "nowrap" (era "wrap"): numa coluna de sidebar estreita, nome de time
	   longo quebrava só ALGUMAS linhas pra 2 linhas e outras não,
	   desalinhando a lista inteira — cada linha precisa ter a mesma
	   altura. Nome comprido agora trunca com reticências em vez de quebrar. */
	flex-wrap: nowrap;
}
.pn-football__match:last-child { border-bottom: none; }
.pn-football__match-date {
	flex: 0 0 auto;
	font-size: 0.72rem;
	font-weight: 700;
	color: var(--pn-ink-soft);
	min-width: 4.5rem;
}
.pn-football__team {
	/* "flex: 0 0 auto" (não mais "1 1 auto"): agora que o time é mostrado
	   abreviado (CAM, VIT...) em vez do nome completo, cada lado só
	   precisa do espaço do próprio conteúdo — "1 1 auto" esticava a caixa
	   pra preencher a linha toda, abrindo um vão vazio entre a sigla e o
	   "×" (visível no print, 29/08/2026). white-space/ellipsis continuam
	   como rede de segurança pro raro caso de faltar TLA/nome curto e
	   cair no nome completo. */
	display: flex;
	align-items: center;
	gap: 0.35rem;
	flex: 0 0 auto;
	max-width: 100%;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}
.pn-football__team img { border-radius: 2px; flex: 0 0 auto; }
.pn-football__vs { opacity: 0.5; font-size: 0.75rem; }

.pn-standings-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.8rem;
}
.pn-standings-table th,
.pn-standings-table td {
	padding: 0.4rem 0.35rem;
	text-align: center;
	border-bottom: 1px solid var(--pn-line);
}
.pn-standings-table th {
	font-size: 0.68rem;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--pn-ink-soft);
}
.pn-standings-table__team {
	text-align: left !important;
	display: flex;
	align-items: center;
	gap: 0.4rem;
	white-space: nowrap;
}
.pn-standings-table__team img { border-radius: 2px; flex: 0 0 auto; }

/* "Ver mais" da classificação / "Agenda completa" do ticker: um checkbox
   escondido + seletor de irmão geral (~) revela as linhas extras sem JS. */
.pn-standings-toggle-input { position: absolute; opacity: 0; pointer-events: none; }
.pn-standings-table__extra { display: none; }
.pn-standings-toggle-input:checked ~ .pn-standings-table .pn-standings-table__extra { display: table-row; }
.pn-standings-toggle-input:checked ~ .pn-standings-toggle { display: none; }
.pn-standings-toggle {
	display: block;
	margin-top: 0.6rem;
	font-size: 0.78rem;
	font-weight: 700;
	color: var(--pn-brand);
	cursor: pointer;
	text-align: center;
}
.pn-standings-toggle:hover { text-decoration: underline; }

/* Faixa horizontal de jogos (home, estilo G1) — reaproveita o mecanismo
   de setas do carousel.js (precisa de um <ul> filho direto). */
.pn-football-ticker { position: relative; margin: 1.25rem 0; }
.pn-football-ticker__list {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 0.75rem;
	list-style: none;
	margin: 0;
	padding: 0.25rem 0.1rem;
	scrollbar-width: none;
}
.pn-football-ticker__list::-webkit-scrollbar { display: none; }
/* Times lado a lado numa linha só, com sigla de 3 letras (ex: "VAS × CRU")
   em vez do nome por extenso — card bem mais baixo que a versão anterior
   (que empilhava mandante/visitante em duas linhas). */
.pn-football-ticker__card {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
	padding: 0.5rem 0.75rem;
	border: 1px solid var(--pn-line);
	border-radius: var(--pn-radius);
	background: var(--pn-surface);
	font-size: 0.78rem;
}
.pn-football-ticker__league {
	font-size: 0.6rem;
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	color: var(--pn-brand);
	white-space: nowrap;
}
.pn-football-ticker__time { font-size: 0.66rem; color: var(--pn-ink-soft); font-weight: 700; white-space: nowrap; }
.pn-football-ticker__match {
	display: flex;
	align-items: center;
	gap: 0.35rem;
	white-space: nowrap;
	font-weight: 800;
	font-size: 0.85rem;
}
.pn-football-ticker__match img { border-radius: 2px; flex: 0 0 auto; }
.pn-football-ticker__abbr { letter-spacing: 0.02em; font-weight: 500; }
.pn-football-ticker__vs { opacity: 0.45; font-weight: 600; font-size: 0.75rem; }

/* Compartilhar (WhatsApp/Facebook/X) na página do post */
.pn-share {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	margin-top: 1rem;
}
.pn-share__label { font-size: 0.78rem; font-weight: 700; color: var(--pn-ink-soft); }
.pn-share__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 2rem;
	height: 2rem;
	border-radius: 50%;
	color: #fff;
	transition: opacity 0.15s, transform 0.15s;
}
.pn-share__btn:hover { opacity: 0.85; transform: translateY(-1px); }
.pn-share__btn--whatsapp { background: #25d366; }
.pn-share__btn--facebook { background: #1877f2; }
.pn-share__btn--x { background: #111418; }

/* Cobertura eleitoral — widget de barra lateral + faixa horizontal */
.pn-election { margin-top: 1.25rem; }
.pn-election__head {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	margin-bottom: 0.75rem;
}
.pn-election__icon { display: flex; color: var(--pn-brand); flex: 0 0 auto; }
.pn-election__title { font-size: 1rem; font-weight: 800; margin: 0; }

.pn-election__countdown {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.5rem;
	padding: 0.65rem 0.85rem;
	margin-bottom: 0.85rem;
	border-radius: var(--pn-radius);
	background: color-mix(in srgb, var(--pn-brand) 10%, transparent);
}
.pn-election__countdown-label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--pn-brand); }
.pn-election__countdown-value { font-size: 1.05rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.pn-election__countdown.is-past { display: none; }

.pn-election__list { list-style: none; margin: 0 0 0.85rem; padding: 0; }
.pn-election__list li { padding: 0.5rem 0; border-bottom: 1px solid var(--pn-line); font-size: 0.9rem; }
.pn-election__list li:last-child { border-bottom: none; }

.pn-election__see-all {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
	font-size: 0.82rem;
	font-weight: 700;
	color: var(--pn-brand);
}
.pn-election__see-all:hover { text-decoration: underline; }

/* Botão de eleições no fim do menu — bandeira + dias restantes, com
   fundo próprio. Trocado a pedido do usuário: a faixa horizontal cheia
   (mesma altura do plantão) ficou redundante esteticamente com ele —
   virou só isso + a página dedicada (ver .pn-election-hero abaixo). */
.pn-election-navbtn {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	margin-left: 0.75rem;
	padding: 0.35rem 0.75rem;
	border-radius: 999px;
	background: color-mix(in srgb, var(--pn-brand) 80%, black 20%);
	color: #fff;
	font-size: 0.78rem;
	font-weight: 800;
	white-space: nowrap;
	transition: transform 0.15s, box-shadow 0.15s;
}
.pn-election-navbtn:hover {
	color: #fff;
	transform: translateY(-1px);
	box-shadow: 0 3px 10px rgba(0, 0, 0, 0.18);
}
.pn-election-navbtn__icon { display: flex; }
.pn-election-navbtn__icon svg { width: 16px; height: 16px; }
.pn-election-navbtn__flag { display: flex; border-radius: 2px; overflow: hidden; line-height: 0; }
.pn-election-navbtn__flag svg { width: 15px; height: 15px; }
.pn-election-navbtn__label { margin-right: 0.15rem; }
.pn-election-navbtn__days { font-variant-numeric: tabular-nums; font-size: 0.95rem; }
.pn-election-navbtn__unit { text-transform: uppercase; letter-spacing: 0.03em; opacity: 0.85; font-size: 0.68rem; }
.pn-election-navbtn.is-past { display: none; }
.pn-ident--tribuna .pn-election-navbtn { display: none; } /* jornal impresso não tem plantão nem esse botão */

/* Clone dentro do menu mobile (ver assets/js/election-menu-inject.js) —
   herda o visual de pílula do botão original, só reencaixado pra caber
   dentro da coluna do menu (que é alinhada à esquerda, largura
   limitada) em vez do centro flutuante que ficava antes. */
.wp-block-navigation__responsive-container-content .pn-election-navbtn {
	align-self: flex-start;
	margin: 1rem 0 0;
	max-width: 100%;
}

/* Página dedicada (templates/page-eleicoes.html) — hero full-bleed com
   contagem grande, calendário dos turnos e ícones, bem diferenciado do
   padrão de post/página comum do site. */
/* Tudo lado a lado numa linha só — pedido do usuário pra "afinar" a
   barra, em vez de empilhar título/contagem/datas verticalmente. */
.pn-election-hero {
	background: color-mix(in srgb, var(--pn-brand) 75%, black 25%);
	color: #fff;
	padding-block: 1.25rem;
}
.pn-election-hero__row {
	display: flex;
	flex-direction: row;
	align-items: center;
	flex-wrap: wrap;
	gap: 1.5rem;
}
.pn-election-hero__identity { display: flex; align-items: center; gap: 0.6rem; flex: 0 0 auto; }
.pn-election-hero__badge { display: flex; gap: 0.4rem; align-items: center; }
.pn-election-hero__icon { display: flex; color: #fff; }
.pn-election-hero__flag { border-radius: 3px; overflow: hidden; line-height: 0; }
.pn-election-hero__title { font-size: clamp(1.2rem, 1rem + 1vw, 1.6rem); font-weight: 800; margin: 0; white-space: nowrap; }
.pn-election-hero__countdown-wrap { display: flex; align-items: center; gap: 0.75rem; flex: 0 0 auto; }
.pn-election-hero__countdown { display: flex; gap: 0.5rem; }
.pn-election-hero__unit {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.1rem;
	background: rgba(255, 255, 255, 0.16);
	border-radius: 6px;
	padding: 0.3rem 0.7rem;
}
.pn-election-hero__unit strong { font-size: 1.2rem; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1; }
.pn-election-hero__unit span { font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.85; }
.pn-election-hero__caption { margin: 0; opacity: 0.9; font-size: 0.85rem; white-space: nowrap; }
.pn-election-hero__dates {
	list-style: none;
	margin: 0;
	padding-left: 1.5rem;
	border-left: 1px solid rgba(255, 255, 255, 0.25);
	font-size: 0.85rem;
	display: flex;
	gap: 1.5rem;
	flex-wrap: wrap;
}
.pn-election-hero__countdown-wrap.is-past,
.pn-election-hero__countdown.is-past { display: none; }

@media (max-width: 782px) {
	.pn-election-hero__row { flex-direction: column; align-items: flex-start; gap: 0.85rem; }
	.pn-election-hero__dates { border-left: none; padding-left: 0; }
}

.pn-glb-carousel .wp-block-post-template {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 1.5rem;
	scroll-snap-type: x mandatory;
	padding: 0.25rem 0.25rem 1rem;
	scrollbar-width: none;
}
.pn-glb-carousel .wp-block-post-template::-webkit-scrollbar { display: none; }
.pn-glb-carousel .wp-block-post-template > li {
	flex: 0 0 240px;
	scroll-snap-align: start;
	background: var(--pn-surface);
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
	transition: box-shadow 0.2s, transform 0.2s;
}
.pn-glb-carousel .wp-block-post-template > li:hover {
	box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12);
	transform: translateY(-2px);
}
.pn-glb-carousel .wp-block-post-featured-image { margin: 0; overflow: hidden; }
.pn-glb-carousel .wp-block-post-featured-image img { aspect-ratio: 4/3; object-fit: cover; width: 100%; display: block; transition: transform 0.35s; }
.pn-glb-carousel .wp-block-post-template > li:hover .wp-block-post-featured-image img { transform: scale(1.045); }
.pn-glb-carousel .pn-kicker, .pn-glb-carousel .wp-block-post-title { padding-inline: 0.15rem; }
.pn-glb-carousel .pn-kicker, .pn-glb-carousel .pn-kicker a { color: var(--pn-ink-soft); text-transform: uppercase; font-size: 0.68rem; font-weight: 800; letter-spacing: 0.03em; margin-top: 0.65rem; display: block; }
.pn-glb-carousel .wp-block-post-title { font-size: 0.98rem; margin: 0.25rem 0 0.75rem; font-weight: 700; line-height: 1.3; }

.pn-glb-numbered .wp-block-post-template { gap: 0; counter-reset: pn-glb-rank; }
.pn-glb-numbered .wp-block-post-template > li {
	counter-increment: pn-glb-rank;
	display: flex;
	gap: 0.75rem;
	padding-block: 0.75rem;
	border-top: 1px solid var(--pn-line);
}
.pn-glb-numbered .wp-block-post-template > li::before {
	content: counter(pn-glb-rank);
	font-weight: 800;
	color: var(--pn-ink-soft);
}
.pn-glb-numbered .wp-block-post-title { font-size: 0.95rem; margin: 0; font-weight: 500; }

/* =========================================================================
   Tribuna — capa de jornal (layout próprio)
   ========================================================================= */

.pn-trb-manchete { text-align: center; max-width: 900px; margin-inline: auto; }
.pn-trb-manchete .wp-block-post-title { font-size: clamp(2.2rem, 1.2rem + 3.4vw, 3.8rem); margin: 0.5rem 0; }
.pn-trb-manchete .wp-block-post-excerpt { font-size: 1.2rem; color: var(--pn-ink-soft); max-width: 60ch; margin-inline: auto; }
.pn-trb-manchete .wp-block-post-author-name,
.pn-trb-manchete .wp-block-post-date { font-size: 0.82rem; color: var(--pn-ink-soft); text-transform: uppercase; letter-spacing: 0.05em; }
.pn-trb-manchete .wp-block-post-featured-image { margin-top: 1.75rem; }
.pn-trb-manchete .wp-block-post-featured-image img { aspect-ratio: 16/8; object-fit: cover; width: 100%; border: 1px solid var(--pn-line); }

.pn-trb-rule { border-top: 3px double var(--pn-ink); margin: 2.25rem auto; max-width: 1300px; }

.pn-trb-briefs { align-items: flex-start; }
.pn-trb-col .wp-block-post-template { gap: 1.75rem; }
.pn-trb-col .wp-block-post-template > li + li { border-top: 1px solid var(--pn-line); padding-top: 1.5rem; }
.pn-trb-col .wp-block-post-title { font-size: 1.15rem; margin: 0.3rem 0 0.4rem; }
.pn-trb-col .wp-block-post-excerpt { font-size: 0.9rem; color: var(--pn-ink-soft); }
.pn-trb-briefs > .wp-block-column + .wp-block-column { border-left: 1px solid var(--pn-line); padding-left: 2.25rem; }

.pn-trb-mostread { text-align: center; }
.pn-trb-mostread-list .wp-block-post-template { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 1.5rem; }
.pn-trb-mostread-list .wp-block-post-template > li::after { content: "·"; margin-left: 1.5rem; color: var(--pn-line); }
.pn-trb-mostread-list .wp-block-post-template > li:last-child::after { content: ""; }
.pn-trb-mostread-list .wp-block-post-title { font-size: 1rem; margin: 0; }

/* =========================================================================
   Pulso — hero full-bleed + carrosséis (layout próprio)
   ========================================================================= */

.pn-pls-hero { position: relative; }
.pn-pls-hero .wp-block-post-featured-image { margin: 0; }
.pn-pls-hero .wp-block-post-featured-image img { width: 100%; aspect-ratio: 21/9; object-fit: cover; display: block; }
.pn-pls-hero .wp-block-post-featured-image::after {
	content: "";
	position: absolute; inset: 0;
	background: linear-gradient(to top, rgba(6,8,10,0.92), rgba(6,8,10,0.1) 60%);
}
.pn-pls-hero__body { position: absolute; left: 0; right: 0; bottom: 0; padding-block: 2rem; z-index: 2; }
.pn-pls-hero__body .wp-block-post-title,
.pn-pls-hero__body .wp-block-post-title a { color: #fff; text-transform: uppercase; font-size: clamp(1.8rem, 1rem + 3vw, 3.2rem); }
.pn-pls-hero__body .wp-block-post-excerpt { color: rgba(255,255,255,0.82); max-width: 60ch; }
.pn-pls-hero__body .wp-block-post-date { color: rgba(255,255,255,0.6); }

.pn-pls-carousel .wp-block-post-template {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 1.25rem;
	scroll-snap-type: x mandatory;
	padding: 0.25rem 0.25rem 1rem;
	scrollbar-width: none;
}
.pn-pls-carousel .wp-block-post-template::-webkit-scrollbar { display: none; }
.pn-pls-carousel .wp-block-post-template > li {
	flex: 0 0 270px;
	scroll-snap-align: start;
	background: var(--pn-surface);
	border-radius: var(--pn-radius);
	overflow: hidden;
	box-shadow: 0 3px 10px rgba(0, 0, 0, 0.14);
	transition: transform 0.2s, box-shadow 0.2s;
}
.pn-pls-carousel .wp-block-post-template > li:hover {
	transform: translateY(-3px);
	box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2);
}
.pn-pls-carousel .wp-block-post-featured-image { margin: 0; position: relative; }
.pn-pls-carousel .wp-block-post-featured-image::after {
	content: "";
	position: absolute; inset: 0;
	background: linear-gradient(to top, rgba(0,0,0,0.55), rgba(0,0,0,0) 55%);
}
.pn-pls-carousel .wp-block-post-featured-image img { aspect-ratio: 16/10; object-fit: cover; width: 100%; display: block; }
.pn-pls-carousel .pn-kicker, .pn-pls-carousel .wp-block-post-title { padding-inline: 0.9rem; }
.pn-pls-carousel .pn-kicker, .pn-pls-carousel .pn-kicker a { color: var(--pn-section-accent, var(--pn-brand)); font-weight: 900; }
.pn-pls-carousel .pn-kicker { padding-top: 0.85rem; }
.pn-pls-carousel .wp-block-post-title { font-size: 1.02rem; padding-bottom: 0.9rem; text-transform: uppercase; line-height: 1.28; }

.pn-pls-ticker .wp-block-post-template {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 0;
}
.pn-pls-ticker .wp-block-post-template > li {
	flex: 0 0 auto;
	padding: 0.6rem 1.25rem;
	border-right: 1px solid var(--pn-line);
	white-space: nowrap;
}
.pn-pls-ticker .wp-block-post-title { font-size: 0.9rem; font-weight: 700; margin: 0; }

/* =========================================================================
   Responsivo
   ========================================================================= */

@media (max-width: 900px) {
	.pn-topbar__meta,
	.pn-masthead__widgets { display: none !important; }

	/* Régua de editorias (barra horizontal com Política/Economia/...):
	   no celular vira hambúrguer embutido no próprio cabeçalho (ver
	   `.pn-masthead__row` logo abaixo) — só a LISTA de categorias some
	   (não a barra `.pn-nav` inteira). Continua tudo visível normalmente
	   em telas maiores. */
	.pn-nav .wp-block-navigation,
	.pn-nav--regional .wp-block-navigation,
	.pn-nav--diario .wp-block-navigation { display: none; }

	/* O selo/botão de eleições (`.pn-election-navbtn`) ficava solto
	   flutuando abaixo do cabeçalho no celular (a barra `.pn-nav` some,
	   mas ele é filho dela, então não ia junto) — pedido do usuário,
	   04/09/2026: joga ele pra dentro do menu hambúrguer. O original some
	   aqui; o `assets/js/election-menu-inject.js` clona ele pra dentro do
	   painel do menu mobile (estilizado em `.wp-block-navigation__
	   responsive-container-content .pn-election-navbtn` acima). */
	.pn-nav .pn-election-navbtn { display: none; }

	/* Botão do hambúrguer: só existe de verdade no celular. */
	.pn-mobile-menu-trigger { display: flex; }

	/* Cabeçalho no celular sempre em 3 partes simétricas — hambúrguer
	   (esquerda) | logo (SEMPRE centralizada, pedido explícito do
	   usuário, 02/09/2026, independente da escolha de posição no
	   desktop) | busca (direita). Grid garante a logo centralizada de
	   verdade mesmo quando hambúrguer e busca têm larguras diferentes
	   entre si (`space-between`/flex sozinho não centraliza nesse caso). */
	.pn-masthead__row {
		display: grid !important;
		/* `minmax(0, 1fr)`, NÃO `1fr` sozinho: por padrão uma track `1fr`
		   se comporta como `minmax(auto, 1fr)` — o "auto" faz a coluna
		   crescer pra caber o tamanho NATURAL do conteúdo de dentro
		   (aqui, o campo de busca expandido pelo clique), estourando pra
		   fora da tela mesmo com `justify-self:end`. `minmax(0, 1fr)`
		   permite a coluna encolher de verdade. Achado real em produção,
		   02/09/2026: campo de busca abrindo e criando barra de rolagem
		   horizontal na página inteira. */
		grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
		align-items: center;
		justify-content: normal !important;
	}
	.pn-masthead__row > .pn-mobile-menu-trigger { grid-column: 1; justify-self: start; }
	.pn-masthead__row > .wp-block-group:not(.pn-mobile-menu-trigger):not(.pn-masthead__widgets) { grid-column: 2; justify-self: center; }
	.pn-masthead__row > .wp-block-search {
		grid-column: 3;
		justify-self: end;
		max-width: 100%;
	}
	/* Campo de busca expandido: em vez de tentar crescer dentro da track
	   estreita de 1fr (o que sempre arrisca estourar a tela em algum
	   tamanho de aparelho), vira uma barra solta cobrindo a LARGURA
	   TOTAL do cabeçalho, ancorada pela borda de baixo — padrão comum de
	   "ícone de busca que abre uma barra completa abaixo do cabeçalho"
	   usado por portais grandes. Precisa de `.pn-masthead` com
	   `position:relative` (adicionado abaixo) pra ancorar certo. */
	.pn-masthead__row > .wp-block-search:not(.wp-block-search__searchfield-hidden) {
		position: absolute;
		left: 1rem;
		right: 1rem;
		top: 100%;
		width: auto;
		max-width: none;
		margin-top: 0.5rem;
		z-index: 30;
		box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
	}
	.pn-masthead { position: relative; }
	/* Preenche a barra inteira quando expandido — sem isto o campo em si
	   fica com largura própria pequena (0 no estado fechado) mesmo
	   dentro da caixa mais larga acima. */
	.pn-masthead__row > .wp-block-search:not(.wp-block-search__searchfield-hidden) .wp-block-search__inside-wrapper {
		width: 100%;
	}
	.pn-masthead__row > .wp-block-search:not(.wp-block-search__searchfield-hidden) .wp-block-search__input {
		flex: 1 1 auto;
		width: auto !important;
		min-width: 0;
	}

	/* Diário: mesma ideia, mas a logo já vive na topbar (centralizada por
	   `margin:0 auto`) — só precisa posicionar o hambúrguer no canto
	   oposto ao dos ícones sociais (que já ficam à direita, absolutos).
	   Centralização vertical via `top/bottom:0` + `margin:auto 0` (NÃO
	   `transform: translateY(-50%)`, usado antes): qualquer `transform`
	   num ancestral vira containing block pra descendentes
	   `position:fixed` — o painel do menu mobile (`.wp-block-navigation__
	   responsive-container`, que precisa cobrir a tela inteira) ficava
	   preso dentro da caixinha de 32px do próprio botão do hambúrguer em
	   vez de cobrir a viewport. Bug real achado em produção, 04/09/2026,
	   testando a mudança do botão de eleições pro menu mobile — o
	   hambúrguer da identidade Diário nunca abriu de verdade no celular. */
	.pn-mobile-menu-trigger--diario {
		position: absolute;
		left: 0;
		top: 0;
		bottom: 0;
		margin-top: auto;
		margin-bottom: auto;
		height: fit-content;
	}

	/* Global: troca a barra de editorias pelo hambúrguer, como a BBC faz
	   — já tinha um cabeçalho mobile dedicado, sem mudança de estrutura. */
	.pn-nav--global { display: none; }
	.pn-nav--global-mobile { display: block; }

	/* Busca precisa aparecer no celular mesmo quando o site está
	   configurado com "logo centralizada" (onde ela normalmente some no
	   desktop por não ter pra onde ir na linha centralizada) — pedido
	   explícito do usuário, 02/09/2026. No celular a linha vira
	   logo-à-esquerda + lupa-à-direita, sempre, independente da escolha
	   de desktop. */
	body.pn-logo-center .pn-masthead > .wp-block-group.alignwide,
	body.pn-logo-center .pn-masthead--regional > .wp-block-group.alignwide {
		justify-content: space-between !important;
	}
	body.pn-logo-center .pn-masthead > .wp-block-group.alignwide > .wp-block-search,
	body.pn-logo-center .pn-masthead--regional > .wp-block-group.alignwide > .wp-block-search {
		display: flex !important;
	}
}

@media (max-width: 781px) {
	/* Cabeçalho: já existia uma regra (ver @media 900px logo abaixo,
	   `.pn-topbar__meta, .pn-masthead__widgets { display:none!important }`)
	   pra esconder clima/câmbio/Ibovespa no mobile e simplificar — só que
	   ela não vencia no caso "ao lado da logo" porque
	   `body.pn-*-masthead .pn-masthead__widgets` (2 classes) tem mais
	   especificidade que `.pn-masthead__widgets` sozinho (1 classe), então
	   o widget continuava de pé, espremido em cima da logo. Aqui a regra
	   mira exatamente esse seletor mais específico, fechando a brecha —
	   resultado: clima/câmbio/Ibovespa somem no mobile em qualquer
	   posição escolhida (topbar ou ao lado da logo), a logo nunca mais
	   fica cortada. */
	body.pn-weather-masthead .pn-masthead__widgets,
	body.pn-currency-masthead .pn-masthead__widgets,
	body.pn-market-masthead .pn-masthead__widgets {
		display: none !important;
	}
	.pn-masthead > .wp-block-group.alignwide { flex-wrap: wrap !important; row-gap: 0.6rem; }
	.pn-masthead > .wp-block-group.alignwide > .wp-block-group:first-child { flex-wrap: wrap !important; }
	.wp-block-site-logo { flex-shrink: 1; min-width: 0; }
	.wp-block-site-logo img { max-width: 140px; width: auto; }

	/* Faixa de plantão em uma linha só (a rolagem contínua já lida com
	   texto comprido sozinha — não precisa mais de ellipsis aqui) */
	.pn-breaking__row { min-height: 38px; }

	/* Manchete principal continua grande — é a chamada do dia */
	.pn-hero .wp-block-post-title { font-size: 1.7rem; }
	.pn-hero .wp-block-post-excerpt { font-size: 0.98rem; }
	.pn-ident--pulso .pn-hero__body { position: static; background: var(--pn-surface-dark); }
	.pn-ident--pulso .pn-hero .wp-block-post-featured-image::after { display: none; }

	/* Demais matérias viram linha compacta (miniatura + título).
	   Sem isso a home passa de 8.000px de altura no celular.
	   O seletor [class*="pn-ident--"] existe para empatar em especificidade
	   com as regras de identidade (ex.: as do Pulso, que são 3 classes) —
	   media query não soma especificidade. */
	.pn-grid .wp-block-post-template {
		grid-template-columns: 1fr !important;
		gap: 0 !important;
	}
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li {
		display: grid;
		grid-template-columns: 118px 1fr;
		column-gap: 0.85rem;
		align-items: start;
		padding-block: 0.95rem;
		border-top: 1px solid var(--pn-line);
	}
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li > .wp-block-post-featured-image {
		grid-column: 1;
		grid-row: 1 / span 5;
		margin-bottom: 0;
	}
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li > .wp-block-post-featured-image img {
		aspect-ratio: 4 / 3;
	}
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li > *:not(.wp-block-post-featured-image) {
		grid-column: 2;
	}
	/* Matéria sem imagem destacada: o bloco `core/post-featured-image` não
	   renderiza NADA no front-end quando não há thumbnail (confirmado —
	   não sobra nem um `<figure>` vazio), mas a coluna de 118px da grade
	   acima é fixa no CONTAINER, então ela continua reservando o espaço
	   mesmo sem elemento nenhum ali, deixando um vão em branco à esquerda
	   e o título empurrado pra direita. `:has()` detecta esse caso e
	   colapsa pra 1 coluna só — achado real em produção, 02/09/2026. */
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li:not(:has(.wp-block-post-featured-image)) {
		grid-template-columns: 1fr;
	}
	[class*="pn-ident--"] .pn-grid .wp-block-post-template > li:not(:has(.wp-block-post-featured-image)) > * {
		grid-column: 1;
	}
	.pn-grid .wp-block-post-title { font-size: 1.02rem; }
	/* resumo some nas listas: no celular ele só alonga a página */
	.pn-grid .wp-block-post-excerpt { display: none; }

	/* Pulso: cartão vira linha também, sem o padding interno do cartão */
	.pn-ident--pulso .pn-grid .wp-block-post-template > li {
		box-shadow: none;
		border-radius: 0;
		background: transparent;
	}
	.pn-ident--pulso .pn-grid .wp-block-post-template > li > *:not(.wp-block-post-featured-image) {
		padding-inline: 0;
	}
	.pn-ident--pulso .pn-grid .wp-block-post-template > li > .pn-kicker { padding-top: 0; }
	.pn-ident--pulso .pn-grid .wp-block-post-template > li > .wp-block-post-date { padding-bottom: 0; }
	.pn-ident--pulso .pn-grid .wp-block-post-featured-image { border-radius: 8px; overflow: hidden; }

	.pn-list .wp-block-columns { flex-wrap: nowrap !important; gap: 0.85rem; }
	.pn-list .wp-block-column:first-child { flex-basis: 118px !important; flex-shrink: 0; }

	/* Seções e artigo mais justos */
	.pn-section-head { margin-bottom: 0.9rem; }
	.pn-article__standfirst { font-size: 1.05rem; }
	.pn-article__content { font-size: 1.05rem; }
	.pn-article__content blockquote { font-size: 1.12rem; }
	.pn-ident--tribuna .pn-article__content > p:first-of-type::first-letter { font-size: 3rem; }

	.pn-footer { padding-block: 2.25rem 1.5rem; }
	.pn-footer .wp-block-columns { gap: 1.75rem; }
	.pn-footer__legal { flex-direction: column; gap: 0.4rem; }

	/* Primeira coluna (logo + descrição + redes sociais) centralizada no
	   celular — sem isso tudo fica cravado na margem esquerda, meio sem
	   graça; as demais colunas (links) continuam alinhadas à esquerda,
	   que é o padrão esperado pra lista de links. */
	.pn-footer .wp-block-columns > .wp-block-column:first-child {
		text-align: center;
		align-items: center;
	}
	.pn-footer .wp-block-columns > .wp-block-column:first-child .wp-block-site-logo,
	.pn-footer .wp-block-columns > .wp-block-column:first-child .wp-widget--social,
	.pn-footer .wp-block-columns > .wp-block-column:first-child .pn-widget--social {
		justify-content: center;
		margin-inline: auto;
	}

	/* Alvos de toque confortáveis */
	.pn-nav a,
	.pn-latest .wp-block-post-title a,
	.pn-mostread .wp-block-post-title a { min-height: 40px; display: inline-block; }

	/* Links do rodapé ficavam com 29px de altura — pequenos para o dedo */
	.pn-footer a {
		display: inline-block;
		padding-block: 0.3rem;
		min-height: 36px;
	}
	.pn-footer .wp-block-navigation { gap: 0.15rem; }
	.pn-footer .wp-block-social-links a { min-height: 0; padding-block: 0; }

	/* Regional */
	.pn-reg-widgets { flex-wrap: wrap !important; gap: 1.25rem; }
	.pn-reg-widgets .pn-widget--horoscope iframe { height: 320px; }
	[class*="pn-ident--"] .pn-reg-grid .wp-block-post-template { grid-template-columns: 1fr 1fr !important; }
	.pn-reg-panel .wp-block-post-featured-image img { aspect-ratio: 16/10; }

	/* Global */
	.pn-glb-briefs, .pn-glb-list { margin-top: 1.5rem; }
	.pn-trb-briefs > .wp-block-column + .wp-block-column { border-left: none; padding-left: 0; border-top: 1px solid var(--pn-line); padding-top: 1.5rem; margin-top: 1.5rem; }

	/* Pulso */
	.pn-pls-hero .wp-block-post-featured-image img { aspect-ratio: 4/5; }
	.pn-pls-carousel .wp-block-post-template > li { flex-basis: 200px; }
}

@media (max-width: 420px) {
	.pn-grid .wp-block-post-template > li { grid-template-columns: 104px 1fr; }
	.pn-hero .wp-block-post-title { font-size: 1.55rem; }
	.pn-masthead { padding-block: 0.85rem; }
}

@media (prefers-reduced-motion: reduce) {
	.pn-grid .wp-block-post-featured-image img,
	.pn-hero .wp-block-post-featured-image img { transition: none; }
}
