/*
 * Design system do guapamag-theme — aplicado em 04/07/2026 a partir do
 * protótipo aprovado pelo André (prototipo-design-ensaio-2026.html).
 *
 * Direção: base visual do guapamag.tv (fundo quase preto, gradiente
 * rosa->roxo) com uma leitura mais "revista" pro ensaio de fotos — serif
 * (Fraunces) nos títulos/nome da modelo contra sans-serif no resto.
 * Cards com hover sutil, paywall com fundo radial + blur.
 *
 * Fontes atualizadas em 06/07/2026 (pedido do André: "combinar com o novo
 * tema"): Fraunces continua no display/títulos (já tinha timbre editorial
 * certo pra marca), mas trocamos Inter -> Plus Jakarta Sans no texto/UI —
 * mesma categoria (geométrica, boa legibilidade em telas pequenas), só que
 * mais quente/autoral que o Inter (que tende a "SaaS corporativo" demais
 * pra um site de revista sensual). Dupla Fraunces + Plus Jakarta Sans é
 * uma combinação usada com frequência justamente por casar bem.
 *
 * Fontes carregadas via Google Fonts em inc/enqueue.php.
 */

:root {
	--bg: #09090b;
	--bg-elevated: #141417;
	--bg-card: #17171b;
	--border: #26262b;
	--border-strong: #3a3a41;
	--text: #f2f1ee;
	--text-dim: #9b9aa3;
	--text-faint: #67666f;
	--accent-1: #ec2f81;
	--accent-2: #8b2fec;
	--accent-grad: linear-gradient(135deg, var(--accent-1), var(--accent-2));
	--checkout-cta: #1fb865;
	--checkout-cta-hover: #17a058;
	--radius-lg: 18px;
	--radius-md: 12px;
	--radius-sm: 8px;
	--font-serif: 'Fraunces', Georgia, serif;
	--font-sans: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif;
}

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

body {
	background: var(--bg);
	color: var(--text);
	font-family: var(--font-sans);
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	/* Achado em 07/07/2026 (relato do André: no mobile dava pra arrastar
	   a tela de /finalizar-compra pro lado). `overflow-x: hidden` já
	   existia só no <html> (linha ~56) — em mobile Safari/Chrome o gesto
	   de arrastar (touch-pan) pode ainda vazar pelo <body> mesmo com o
	   <html> contido, então duplicar aqui é o jeito robusto de travar o
	   scroll horizontal independente de qual elemento específico esteja
	   1-2px mais largo que a viewport. */
	overflow-x: hidden;
}

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

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

html { overflow-x: hidden; }

.container {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 20px;
}

/* ===================================================================
   Botões / pills genéricos
   =================================================================== */

.btn {
	display: inline-block;
	background: var(--accent-grad);
	color: #fff;
	font-weight: 600;
	font-size: 14px;
	padding: 12px 28px;
	border-radius: 999px;
	white-space: nowrap;
	transition: opacity 0.2s, transform 0.2s;
}

.btn:hover {
	opacity: 0.88;
	color: #fff;
}

/* Variante "ghost" (contorno, fundo transparente) — ação secundária ao
   lado de um .btn sólido (ex: "Fazer login" + "Assinar" no CTA de
   comentário pra visitante deslogado, ver comments.php). */
.btn--ghost {
	background: transparent;
	color: var(--accent-1);
	border: 1.5px solid var(--accent-1);
	padding: 10.5px 26px;
}

.btn--ghost:hover {
	background: var(--accent-1);
	color: #fff;
	opacity: 1;
}

/* "Carregar mais" — Arquivo de Ensaios / Arquivo de Vídeos (substitui a
   paginação numerada, ver template-parts/load-more.php). */
.load-more {
	display: flex;
	justify-content: center;
	margin: 32px 0;
}

.load-more__btn {
	border: none;
	cursor: pointer;
	font-family: inherit;
}

.load-more__btn:disabled {
	opacity: 0.6;
	cursor: default;
}

/* ===================================================================
   Header / Footer
   =================================================================== */

.site-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: rgba(9, 9, 11, 0.85);
	backdrop-filter: blur(14px);
	border-bottom: 1px solid var(--border);
}

.site-header__inner {
	display: flex;
	align-items: center;
	gap: 24px;
	padding: 16px 20px;
}

.site-header__logo {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-shrink: 0;
}

.site-header__logo-icon {
	display: block;
	width: 24px;
	height: 38px;
}

/* Cor trocada de gradiente rosa/roxo pra branco sólido — pedido do
   André em 09/07/2026. */
.site-header__logo-text {
	font-family: var(--font-serif);
	font-weight: 600;
	font-size: 22px;
	letter-spacing: -0.3px;
	color: #fff;
}

.site-header__nav ul {
	display: flex;
	align-items: center;
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
	flex-wrap: wrap;
}

.site-header__nav li {
	list-style: none;
	position: relative;
}

.site-header__nav a {
	position: relative;
	display: inline-block;
	font-size: 14px;
	font-weight: 500;
	color: var(--text-dim);
	padding: 4px 0;
	transition: color 0.2s;
}

.site-header__nav a::after {
	content: '';
	position: absolute;
	left: 0;
	right: 100%;
	bottom: 0;
	height: 2px;
	border-radius: 2px;
	background: var(--accent-grad);
	transition: right 0.25s ease;
}

.site-header__nav a:hover { color: var(--text); }
.site-header__nav a:hover::after { right: 0; }

.site-header__nav li.current-menu-item > a,
.site-header__nav li.current_page_item > a {
	color: var(--text);
}

.site-header__nav li.current-menu-item > a::after,
.site-header__nav li.current_page_item > a::after {
	right: 0;
}

/* Submenus (dropdowns) — o WP sempre imprime os filhos no HTML;
   sem isso eles ficam soltos, expandidos, empurrando o layout
   pra baixo (era o "menu antigo" bugado que aparecia acima do Hero). */

.site-header__nav .sub-menu {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	margin-top: 8px;
	padding: 8px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md, 10px);
	box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);
	z-index: 200;
	flex-direction: column;
	gap: 0;
}

.site-header__nav li:hover > .sub-menu,
.site-header__nav li:focus-within > .sub-menu {
	display: flex;
}

/* "Ponte" invisível cobrindo o gap do margin-top — sem isso, o mouse
   perde o :hover do <li> ao descer até o dropdown e o menu some antes
   de dar tempo de clicar. */
.site-header__nav li.menu-item-has-children::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	height: 10px;
}

.site-header__nav .sub-menu li { width: 100%; }

.site-header__nav .sub-menu a {
	display: block;
	width: 100%;
	padding: 8px 10px;
	font-size: 13px;
	white-space: nowrap;
	border-radius: 6px;
}

.site-header__nav .sub-menu a::after { display: none; }
.site-header__nav .sub-menu a:hover { background: var(--bg-elevated); }

.site-header__nav .menu-item-has-children > a::before {
	content: '';
	display: inline-block;
	width: 5px;
	height: 5px;
	margin-left: 6px;
	border-right: 1.5px solid currentColor;
	border-bottom: 1.5px solid currentColor;
	transform: translateY(-2px) rotate(45deg);
	opacity: 0.6;
}

/* --- Área de conta (à direita do header) ---
   "Sobre a Revista" institucional + Login/Assinar (visitante) ou
   avatar/nome real + dropdown de conta (logado). Ver inc/nav-header.php. */

.site-header__account {
	display: flex;
	align-items: center;
	gap: 18px;
	margin-left: auto;
	flex-shrink: 0;
}

.site-header__account-item {
	position: relative;
	font-size: 14px;
	font-weight: 500;
	color: var(--text-dim);
	transition: color 0.2s;
}

a.site-header__account-item:hover { color: var(--text); }

.site-header__account-trigger {
	display: flex;
	align-items: center;
	gap: 8px;
	cursor: pointer;
}

.site-header__account-item:hover,
.site-header__account-item:focus-within {
	color: var(--text);
}

.site-header__avatar {
	width: 28px;
	height: 28px;
	border-radius: 50%;
	object-fit: cover;
	border: 1px solid var(--border-strong);
}

.site-header__account .sub-menu {
	display: none;
	position: absolute;
	top: 100%;
	right: 0;
	min-width: 200px;
	margin-top: 10px;
	padding: 8px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md, 10px);
	box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);
	z-index: 200;
	list-style: none;
	flex-direction: column;
	gap: 0;
}

.site-header__account-item:hover .sub-menu,
.site-header__account-item:focus-within .sub-menu {
	display: flex;
}

/* Mesma "ponte" invisível do menu principal — cobre o gap do
   margin-top pra não fechar o dropdown no caminho até ele. */
.site-header__account-item.has-dropdown::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	height: 12px;
}

.site-header__account .sub-menu a {
	display: block;
	padding: 8px 10px;
	font-size: 13px;
	white-space: nowrap;
	border-radius: 6px;
	color: var(--text-dim);
}

.site-header__account .sub-menu a:hover {
	background: var(--bg-elevated);
	color: var(--text);
}

.btn--small {
	padding: 8px 20px;
	font-size: 13px;
}

/* ===================================================================
   Busca por modelo/tag — barra inline (09/07/2026, pedido do André:
   "ao invés de só a lupa eu quero uma pequena barra de busca no
   Desktop"). Substituiu o botão de lupa + overlay em tela cheia por um
   campo pequeno sempre visível no header, com um dropdown ancorado
   embaixo dele (mesma ideia do YouTube/Pinterest).
   ATUALIZADO em 09/07/2026 (mesmo dia, 2º pedido): fica visível no
   mobile TAMBÉM agora (antes só aparecia no desktop, o mobile tinha
   uma cópia numa "quickbar" separada abaixo do header — removida).
   No mobile ela encolhe e sobra ao lado do logotipo (nav/conta somem
   via @media lá embaixo, então só resta logo + busca + hambúrguer).
   Os botões de atalho (Ensaios/Vídeos/Modelos) que moravam na quickbar
   saíram do header de vez — agora é template-parts/quick-links.php,
   abaixo do hero da Home (ver .home-quicklinks mais abaixo).
   =================================================================== */

.site-header__search {
	position: relative;
	flex-shrink: 0;
	width: 200px;
}

.site-header__search-icon {
	position: absolute;
	left: 12px;
	top: 50%;
	transform: translateY(-50%);
	color: var(--text-faint);
	pointer-events: none;
}

.site-header__search-input {
	width: 100%;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: 999px;
	padding: 8px 14px 8px 34px;
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 13px;
	transition: border-color 0.2s, width 0.2s;
}

.site-header__search-input::placeholder { color: var(--text-faint); }

.site-header__search-input:focus {
	outline: none;
	border-color: var(--accent-1);
}

.site-header__search:focus-within { width: 250px; }

.site-header__search-dropdown {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	margin-top: 8px;
	max-height: 60vh;
	overflow-y: auto;
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	border-radius: var(--radius-md, 10px);
	box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);
	padding: 8px;
	z-index: 200;
	/* Largura fixa da barra (200/250px) não cabe nome+contador do
	   resultado — o dropdown se estica além da barra pra não quebrar
	   feio (mas nunca mais estreito que ela, ver min-width: 100%). */
	width: max-content;
	min-width: 100%;
	max-width: 320px;
}

.site-header__search.is-open .site-header__search-dropdown { display: block; }

.site-header__search-group + .site-header__search-group {
	margin-top: 10px;
	padding-top: 10px;
	border-top: 1px solid var(--border);
}

.site-header__search-group-title {
	display: block;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--text-faint);
	padding: 6px 10px;
}

.site-header__search-result {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 10px;
	border-radius: var(--radius-sm);
	color: var(--text);
}
.site-header__search-result:hover { background: var(--bg-card); }

.site-header__search-result-name { font-weight: 500; font-size: 14px; }
.site-header__search-result-count {
	font-size: 12px;
	color: var(--text-faint);
	flex-shrink: 0;
}

.site-header__search-empty {
	padding: 14px 10px;
	color: var(--text-dim);
	font-size: 14px;
}

/* ===================================================================
   Atalhos "Ensaios/Vídeos/Modelos" abaixo do hero da Home (09/07/2026,
   pedido do André: "os botoes ficam abaixo do destaque... no Desktop
   também") — ver template-parts/quick-links.php. Antes moravam no
   header (só no mobile); agora é uma seção fixa da Home, visível em
   qualquer largura de tela.
   =================================================================== */

.home-quicklinks {
	display: flex;
	justify-content: center;
	gap: 10px;
	padding: 16px 20px 0;
}

/* CORRIGIDO em 09/07/2026 (feedback do André: "Achei os botoes muito
   grandes no desktop. Não combinou") — flex:1 esticava cada botão pra
   ocupar 1/3 do container inteiro (~1300px), virando pílulas enormes.
   Agora é largura de conteúdo (inline), grupo centralizado, tamanho
   mais discreto — mais parecido com um filtro/atalho do que um CTA. */
.home-quicklinks__link {
	flex: 0 0 auto;
	text-align: center;
	padding: 8px 20px;
	font-size: 13px;
	font-weight: 600;
	color: var(--text-dim);
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	border-radius: 999px;
	transition: color 0.2s, border-color 0.2s;
}

.home-quicklinks__link:hover {
	color: var(--text);
	border-color: var(--border-strong);
}

@media (max-width: 700px) {
	.home-quicklinks {
		padding: 12px 20px 0;
	}
	/* No mobile volta a esticar (flex:1) — 3 pílulas ocupando a largura
	   toda cabe bem numa tela estreita, diferente do desktop onde isso
	   ficava enorme. */
	.home-quicklinks__link {
		flex: 1 1 0;
		padding: 10px 12px;
		font-size: 13px;
	}
}

/* ===================================================================
   Menu mobile (≤700px) — gaveta lateral (hambúrguer)
   ===================================================================
   No desktop, .site-header__nav e .site-header__account aparecem
   normalmente e .site-header__burger/.mobile-drawer ficam ocultos.
   No mobile é o oposto: só logo + hambúrguer no header, e todo o
   conteúdo (nav + conta) mora dentro da gaveta. Ver inc/nav-header.php
   (guapamag_render_mobile_drawer). */

.site-header__burger {
	display: none;
	width: 40px;
	height: 40px;
	flex-shrink: 0;
	align-items: center;
	justify-content: center;
	flex-direction: column;
	gap: 5px;
	background: transparent;
	border: none;
	cursor: pointer;
	margin-left: auto;
}

.site-header__burger span {
	display: block;
	width: 22px;
	height: 2px;
	border-radius: 2px;
	background: var(--text);
	transition: transform 0.25s ease, opacity 0.25s ease;
}

.mobile-drawer {
	display: none;
}

@media (max-width: 700px) {
	.site-header__nav,
	.site-header__account {
		display: none;
	}

	.site-header__burger { display: flex; }

	.site-header__inner { justify-content: space-between; }

	/* Busca fica visível no mobile (09/07/2026, pedido do André: "a
	   barra de busca tem que ser menor e do lado do logotipo +
	   guapamag") — nav/conta somem acima, então só sobra logo + busca +
	   hambúrguer nessa linha. Encolhe bastante pra caber do lado do
	   wordmark sem espremer o hambúrguer. */
	.site-header__search {
		width: 34vw;
		max-width: 130px;
		min-width: 90px;
	}

	.site-header__search:focus-within { width: 34vw; max-width: 160px; }

	.site-header__search-input {
		padding: 7px 10px 7px 30px;
		font-size: 12px;
	}

	.site-header__search-icon { left: 10px; width: 14px; height: 14px; }

	/* Estado aberto: hambúrguer vira "X". */
	.site-header.is-menu-open .site-header__burger span:nth-child(1) {
		transform: translateY(7px) rotate(45deg);
	}
	.site-header.is-menu-open .site-header__burger span:nth-child(2) {
		opacity: 0;
	}
	.site-header.is-menu-open .site-header__burger span:nth-child(3) {
		transform: translateY(-7px) rotate(-45deg);
	}

	.mobile-drawer {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 999;
		visibility: hidden;
		pointer-events: none;
	}

	.mobile-drawer__backdrop {
		position: absolute;
		inset: 0;
		background: rgba(4, 4, 5, 0.6);
		opacity: 0;
		transition: opacity 0.25s ease;
	}

	.mobile-drawer__panel {
		position: absolute;
		top: 0;
		right: 0;
		bottom: 0;
		width: min(82vw, 340px);
		background: var(--bg-elevated);
		border-left: 1px solid var(--border);
		padding: 20px;
		overflow-y: auto;
		transform: translateX(100%);
		transition: transform 0.3s ease;
	}

	/* Combinador de irmão (~), não mais descendente: a gaveta
	   (.mobile-drawer) saiu de dentro do <header> em 05/07/2026 (ver
	   header.php) por causa do bug do backdrop-filter/containing block. */
	.site-header.is-menu-open ~ .mobile-drawer {
		visibility: visible;
		pointer-events: auto;
	}
	.site-header.is-menu-open ~ .mobile-drawer .mobile-drawer__backdrop { opacity: 1; }
	.site-header.is-menu-open ~ .mobile-drawer .mobile-drawer__panel { transform: translateX(0); }

	.mobile-drawer__close {
		display: block;
		margin-left: auto;
		width: 32px;
		height: 32px;
		background: transparent;
		border: none;
		color: var(--text-dim);
		font-size: 22px;
		line-height: 1;
		cursor: pointer;
	}

	.mobile-drawer__section {
		margin-top: 8px;
		padding-top: 16px;
		border-top: 1px solid var(--border);
	}
	.mobile-drawer__section:first-of-type { border-top: none; padding-top: 0; }

	.mobile-drawer__label {
		font-size: 11px;
		text-transform: uppercase;
		letter-spacing: 0.06em;
		color: var(--text-faint);
		margin-bottom: 10px;
	}

	/* CTA "Assinar" pra quem já tem conta mas não é assinante ativo —
	   ver inc/nav-header.php, pedido do André em 06/07/2026. */
	.mobile-drawer__cta {
		display: block;
		text-align: center;
		margin-bottom: 14px;
	}

	.mobile-drawer nav ul {
		list-style: none;
		margin: 0;
		padding: 0;
	}

	.mobile-drawer nav a,
	.mobile-drawer__link {
		display: block;
		padding: 11px 0;
		font-size: 16px;
		font-weight: 500;
		color: var(--text);
		border-bottom: 1px solid var(--border);
	}

	.mobile-drawer nav li:last-child > a { border-bottom: none; }

	.mobile-drawer .sub-menu {
		list-style: none;
		margin: 0 0 4px;
		padding: 0 0 0 14px;
	}
	.mobile-drawer .sub-menu a {
		font-size: 14px;
		color: var(--text-dim);
		padding: 9px 0;
	}

	.mobile-drawer__user {
		display: flex;
		align-items: center;
		gap: 10px;
		padding: 4px 0 14px;
	}

	.mobile-drawer .btn {
		display: block;
		text-align: center;
		margin-top: 14px;
	}
}

.site-footer {
	background: var(--bg-elevated);
	border-top: 1px solid var(--border);
	margin-top: 48px;
}

.site-footer__inner {
	padding: 28px 20px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px;
}

.site-footer__nav ul {
	display: flex;
	gap: 18px;
	margin: 0;
	padding: 0;
	list-style: none;
	flex-wrap: wrap;
}

.site-footer__nav li { list-style: none; }

.site-footer__nav a {
	font-size: 13px;
	color: var(--text-faint);
	transition: color 0.2s;
}

.site-footer__nav a:hover { color: var(--text-dim); }

.site-footer__nav li.current-menu-item > a,
.site-footer__nav li.current_page_item > a {
	color: var(--text-dim);
}

.site-footer__copy {
	font-size: 12px;
	color: var(--text-faint);
}

/* ===================================================================
   Hero da home (3 variantes — front-page.php escolhe via Customizer)
   =================================================================== */

.hero {
	position: relative;
	min-height: 560px;
	display: flex;
	align-items: flex-end;
	background-color: var(--bg-card);
	background-size: cover;
	background-position: center;
	overflow: hidden;
	margin-bottom: 40px;
}

.hero__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(4, 4, 5, 0.85) 0%, rgba(4, 4, 5, 0.35) 45%, rgba(4, 4, 5, 0.05) 75%);
	z-index: 1;
}

.hero__inner {
	position: relative;
	z-index: 2;
	padding-bottom: 52px;
	max-width: 720px;
	margin: 0 auto;
	text-align: center;
}

.hero__tags {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
	justify-content: center;
	margin-bottom: 16px;
}

.hero__title {
	font-family: var(--font-serif);
	font-weight: 500;
	font-size: clamp(32px, 6vw, 58px);
	line-height: 1.05;
	letter-spacing: -0.5px;
	margin: 0 0 12px;
}

.hero__modelo {
	color: var(--text-dim);
	font-size: 15px;
	margin-bottom: 22px;
}

/* --- Variante: vídeo de fundo --- */

.hero__video-wrap {
	position: absolute;
	inset: 0;
	overflow: hidden;
	z-index: 0;
}

.hero__video-frame {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 100vw;
	height: 56.25vw;
	min-width: 178%;
	min-height: 100%;
	transform: translate(-50%, -50%);
	border: 0;
	pointer-events: none;
}

/* --- Variante: carrossel --- */

.hero--carrossel .hero__slides {
	position: relative;
	width: 100%;
	min-height: 560px;
}

.hero__slide {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: flex-end;
	background-size: cover;
	background-position: center;
	opacity: 0;
	z-index: 0;
	transition: opacity 0.6s ease;
}

.hero__slide.is-active { opacity: 1; z-index: 1; }

.hero__dots {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 18px;
	z-index: 3;
	display: flex;
	justify-content: center;
	gap: 8px;
}

.hero__dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.35);
	border: none;
	padding: 0;
	cursor: pointer;
	transition: background-color 0.2s, transform 0.2s;
}

.hero__dot:hover { background: rgba(255, 255, 255, 0.6); }

.hero__dot.is-active {
	background: var(--accent-1);
	transform: scale(1.2);
}

@media (max-width: 700px) {
	.hero,
	.hero--carrossel .hero__slides { min-height: 420px; }
	.hero__inner { padding-bottom: 32px; }
}

/* ===================================================================
   Ensaio single (single-portfolio_item.php)
   =================================================================== */

.ensaio-single { padding: 28px 20px 56px; }

.ensaio-single__cover {
	border-radius: var(--radius-lg);
	overflow: hidden;
	margin-bottom: 24px;
	border: 1px solid var(--border);
}

.ensaio-single__cover img {
	width: 100%;
	height: auto;
	display: block;
}

.ensaio-single__header { max-width: 900px; margin: 0 auto 32px; }

.ensaio-single__tags {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
	margin-bottom: 16px;
}

.ensaio-single__tag {
	display: inline-block;
	border: 1px solid var(--border);
	color: var(--text-dim);
	font-size: 12px;
	padding: 5px 13px;
	border-radius: 999px;
	transition: border-color 0.2s, color 0.2s;
}

.ensaio-single__tag:hover { border-color: var(--border-strong); color: var(--text); }

.ensaio-single__title {
	font-family: var(--font-serif);
	font-weight: 500;
	font-size: clamp(28px, 4.5vw, 46px);
	line-height: 1.1;
	letter-spacing: -0.4px;
	margin: 0 0 12px;
}

.ensaio-single__desc {
	color: var(--text-dim);
	font-size: 15px;
	margin-bottom: 14px;
	max-width: 640px;
}

.ensaio-single__models { margin-bottom: 16px; }

.ensaio-single__models a {
	color: var(--accent-1);
	font-size: 14px;
	font-weight: 500;
}

.ensaio-single__models a:hover { text-decoration: underline; }

.ensaio-single__meta {
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
	color: var(--text-faint);
	font-size: 13px;
}

.ensaio-single__curtir {
	background: transparent;
	border: 1px solid var(--border);
	color: var(--text-dim);
	font-size: 13px;
	padding: 6px 14px;
	border-radius: 999px;
	cursor: pointer;
	transition: border-color 0.2s, color 0.2s;
}

.ensaio-single__curtir:hover { border-color: var(--accent-1); color: var(--text); }

.ensaio-single__liked { color: var(--accent-1); font-weight: 600; }

.ensaio-single__content {
	max-width: 900px;
	margin: 0 auto;
}

/* "Acessar perfil da modelo" + ícones — movido pro final do ensaio
   (depois da galeria, antes dos comentários) em 08/07/2026, pedido do
   André. Reaproveita .ensaio-single__models/__meta (mesma aparência de
   quando ficavam no header). */
.ensaio-single__footer-meta {
	max-width: 900px;
	margin: 28px auto 0;
}

/* Teaser do guapamag.tv (Bunny), embutido no topo do ensaio pra
   Visitante/Cliente — pedido do André em 08/07/2026. */
.ensaio-single__teaser-tv {
	max-width: 900px;
	margin: 0 auto 24px;
}

.ensaio-single__teaser-tv-frame {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 9;
	background: var(--bg-elevated);
	border-radius: var(--radius-md);
	overflow: hidden;
}

.ensaio-single__teaser-tv-frame iframe {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.ensaio-single__galeria {
	/* Trocado de flex-column pra block "puro" em 05/07/2026: o vídeo
	   vertical agora flutua (float) ao lado da galeria (efeito "masonry",
	   pedido do André pra não ocupar a tela toda antes das fotos) — isso
	   só funciona em fluxo normal de bloco, não dentro de flex/grid.
	   overflow:hidden aqui contém a altura do float (senão o container
	   "colava" achatado, ignorando a altura do vídeo flutuante). */
	overflow: hidden;
	margin-bottom: 28px;
}

.ensaio-single__texto {
	color: var(--text-dim);
	font-size: 15px;
	line-height: 1.8;
	margin-bottom: 28px;
}

.ensaio-single__bastidor-link {
	/* Sempre abaixo do vídeo vertical flutuante, nunca espremido do
	   lado dele — independente de quantas fotos a galeria tiver. */
	clear: both;
}

.ensaio-single__bastidor-link a {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	color: var(--text);
	font-size: 14px;
	padding: 12px 20px;
	border-radius: var(--radius-md);
	transition: border-color 0.2s;
}

.ensaio-single__bastidor-link a:hover { border-color: var(--accent-1); }

.ensaio-single__footer {
	max-width: 900px;
	margin: 32px auto 0;
	padding-top: 20px;
	border-top: 1px solid var(--border);
}

.ensaio-single__curtidas-footer {
	display: flex;
	align-items: center;
	gap: 12px;
}

.curtir_ensaio {
	font-size: 14px;
	color: var(--text-dim);
}

.curtir_cheio { color: var(--accent-1); font-weight: 600; }

.ensaio-single__interview {
	max-width: 900px;
	margin: 40px auto;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-lg);
	padding: 28px 32px;
}

.ensaio-single__interview h2 {
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--text-faint);
	margin-bottom: 8px;
}

.ensaio-single__interview h3 {
	font-family: var(--font-serif);
	font-size: 22px;
	font-weight: 500;
	margin-bottom: 12px;
}

.ensaio-single__interview-texto {
	color: var(--text-dim);
	font-size: 15px;
	line-height: 1.8;
	margin-bottom: 18px;
}

/* ===================================================================
   Vídeo embutido (template-parts/video-embed.php)
   =================================================================== */

.ensaio-single__video {
	position: relative;
	aspect-ratio: 16 / 9;
	background-color: var(--bg-card);
	background-size: cover;
	background-position: center;
	border-radius: var(--radius-lg);
	overflow: hidden;
	border: 1px solid var(--border);
	cursor: pointer;
	margin-bottom: 24px; /* antes vinha do gap do flex, removido acima */
}

/* Garante que um 2º vídeo (ex: prévia do bastidor pro Cliente) sempre
   desça pra baixo do vídeo vertical flutuante, em vez de tentar
   encaixar do lado — só a variante --vertical abaixo deve flutuar. */
.ensaio-single__video:not(.ensaio-single__video--vertical) {
	clear: both;
}

.ensaio-single__video::before {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0) 40%);
}

.ensaio-single__video::after {
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	width: 64px;
	height: 64px;
	transform: translate(-50%, -50%);
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.12) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M8 5v14l11-7z'/%3E%3C/svg%3E") center / 22px no-repeat;
	border: 1px solid rgba(255, 255, 255, 0.3);
	transition: transform 0.2s, background-color 0.2s;
}

.ensaio-single__video:hover::after {
	transform: translate(-50%, -50%) scale(1.08);
	background-color: rgba(255, 255, 255, 0.2);
}

/* Vídeo vertical (clip gravado no celular) vinculado ao ensaio — sem
   isso a thumbnail (background-size:cover num box 16:9) cortava a
   imagem de um jeito estranho, como se fosse um vídeo horizontal.
   Mesma ideia do .video-card--vertical / .video-player-modal__box--vertical. */
.ensaio-single__video--vertical {
	/* Pedido do André em 05/07/2026: vídeo vertical de ponta a ponta
	   ocupava a tela toda antes de chegar na galeria — troca por um
	   layout "masonry", flutuando à esquerda com a galeria de fotos
	   encaixando ao lado (a galeria é display:grid, que já se comporta
	   como um bloco novo e "abraça" o float automaticamente).
	   ACHADO (mesmo dia): dimensionar por %-da-largura-da-tela escala
	   mal pra 9:16 — no mobile isso ainda virava um bloco gigante
	   (360x640px, quase a tela toda). Travar por ALTURA fixa em vez de
	   largura resolve: a largura sai sozinha da proporção (~146px) e o
	   tamanho fica igual em qualquer aparelho, sem precisar de uma
	   regra diferente pro mobile. */
	float: left;
	height: 260px;
	width: auto;
	aspect-ratio: 9 / 16;
	margin: 0 20px 20px 0;
}

.ensaio-single__video-label {
	position: absolute;
	top: 14px;
	left: 14px;
	z-index: 1;
	background: rgba(0, 0, 0, 0.55);
	backdrop-filter: blur(6px);
	font-size: 12px;
	font-weight: 600;
	letter-spacing: 0.3px;
	padding: 6px 14px;
	border-radius: 999px;
}

/* ===================================================================
   Galeria de fotos (template-parts/galeria.php)
   =================================================================== */

.guapamag-galeria {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
	gap: 10px;
	margin-bottom: 24px; /* espaço antes do link de bastidor, ver .ensaio-single__bastidor-link */
}

/* ---------------------------------------------------------------------
   Modo "columns" (vídeo VERTICAL mesclado na galeria) — ver
   template-parts/galeria.php "extra_first_item"/"layout".
   TENTATIVA 1 (05/07/2026, revertida): "columns" (multi-coluna CSS) tinha
   o mesmo problema do .video-grid--mixed — preenche cima-a-baixo numa
   coluna inteira antes de passar pra próxima ("column-major"), então a
   foto do lado do vídeo não era a 1ª da galeria, e sim lá do meio (onde
   a 1ª coluna "estourou" pra 2ª). O André pediu ordem de LEITURA
   (esquerda->direita, cima->baixo) — isso só existe em grid de verdade.
   TENTATIVA 2 (atual): volta a ser grid (mesma grade de sempre, mesmas
   colunas responsivas — "auto-fill, minmax(160px,1fr)" da regra base
   acima, sem mudar nada disso), só ligando grid-auto-flow:dense. Com
   dense, o algoritmo de auto-posicionamento das fotos varre em ordem de
   leitura e só pula a célula que o vídeo já ocupa — ordem correta
   garantida, e continua a mesma contagem de colunas de antes em cada
   tamanho de tela (2 no mobile porque é o que cabe, mais no desktop). */
.guapamag-galeria--columns {
	grid-auto-flow: row dense;
	/* Fixo em 2 no mobile (era auto-fill/responsivo, mas cada largura
	   de tela dá uma contagem diferente de "quantas fotos dividem a
	   linha do vídeo" — precisa saber o número exato pra combinar a
	   altura delas com a do vídeo, ver regras de aspect-ratio abaixo). */
	grid-template-columns: repeat(2, 1fr);
}

@media (min-width: 700px) {
	.guapamag-galeria--columns {
		/* Testado com o auto-fill (5 colunas numa tela larga): sobrava
		   espaço em branco embaixo de VÁRIAS fotos da linha do vídeo
		   (só a 1ª tinha a altura combinada). André pediu pra testar 4
		   fixas — com menos fotos dividindo a linha do vídeo, dá pra
		   combinar a altura de TODAS elas (ver regra de nth-child abaixo),
		   fechando a linha sem sobra nenhuma, em vez de só a primeira. */
		grid-template-columns: repeat(4, 1fr);
	}
}

/* Vídeo ocupa a 1ª coluna, só 1 linha (não span 2 — isso sobrava
   uma faixa enorme em branco embaixo dele, reportado pelo André em
   05/07/2026: 2 linhas de foto 3:4 são mais altas do que o vídeo 9:16
   precisa). Sem float: aqui ele é só mais uma célula do grid. */
.guapamag-galeria--columns .ensaio-single__video--vertical {
	grid-column: 1;
	float: none;
	width: 100%;
	height: auto;
	aspect-ratio: 9 / 16;
}

/* As fotos que dividem a MESMA linha do vídeo ganham a mesma proporção
   9:16 dele em vez do 3:4 padrão — como todas têm a mesma largura de
   coluna, ficam com a mesma altura exata e a linha fecha sem sobrar
   espaço embaixo de nenhuma. No mobile (2 colunas) só a 1ª foto divide
   a linha com o vídeo; no desktop (4 colunas) são as 3 primeiras. As
   fotos das linhas de baixo continuam no 3:4 normal. */
.guapamag-galeria--columns .ensaio-single__video--vertical ~ .guapamag-galeria__item:nth-child(-n+2) {
	aspect-ratio: 9 / 16;
}

@media (min-width: 700px) {
	.guapamag-galeria--columns .ensaio-single__video--vertical ~ .guapamag-galeria__item:nth-child(-n+4) {
		aspect-ratio: 9 / 16;
	}
}

.guapamag-galeria__item {
	display: block;
	position: relative;
	aspect-ratio: 3 / 4;
	padding: 0;
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	background: var(--bg-card);
	overflow: hidden;
	cursor: pointer;
	line-height: 0;
	transition: border-color 0.2s;
}

.guapamag-galeria__item:hover { border-color: var(--border-strong); }

.guapamag-galeria__thumb {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.35s ease;
}

.guapamag-galeria__item:hover .guapamag-galeria__thumb { transform: scale(1.04); }

/* ===================================================================
   Paywall (template-parts/paywall-notice.php)
   =================================================================== */

.paywall-notice {
	position: relative;
	text-align: center;
	border-radius: var(--radius-lg);
	padding: 44px 32px;
	overflow: hidden;
	background: radial-gradient(120% 140% at 50% 0%, #2a1230 0%, #14090f 55%, #0c0710 100%);
	border: 1px solid #33132f;
	margin-bottom: 28px;
}

.paywall-notice__title {
	font-family: var(--font-serif);
	font-weight: 500;
	font-size: 26px;
	margin-bottom: 10px;
}

.paywall-notice__text {
	color: var(--text-dim);
	font-size: 14px;
	max-width: 440px;
	margin: 0 auto 22px;
}

.paywall-notice .btn { font-size: 15px; padding: 14px 32px; }

.paywall-notice__login {
	margin-top: 16px;
	font-size: 13px;
	color: var(--text-faint);
}

.paywall-notice__login a {
	color: var(--text-dim);
	text-decoration: underline;
}

.paywall-notice__login a:hover { color: var(--text); }

/* ===================================================================
   Cards de ensaio (home / relacionados / série)
   =================================================================== */

.home-section { max-width: 1200px; margin: 0 auto; padding: 8px 20px 40px; }

/* CORRIGIDO em 05/07/2026 (pedido do André): faltava layout aqui — o
   título e o link "Ver todos" ficavam empilhados, com o link no estilo
   padrão do navegador (azul, sublinhado), destoando do resto do tema
   escuro. Título à esquerda, link à direita, quebrando embaixo no mobile
   — mesmo padrão que já existia só na variante do bastidor. */
.home-section__header {
	margin-bottom: 18px;
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
}

.home-section__title {
	font-family: var(--font-serif);
	font-weight: 500;
	font-size: 22px;
}

.home-section__link {
	font-size: 14px;
	font-weight: 500;
	color: var(--accent-1);
	text-decoration: none;
	white-space: nowrap;
	transition: color 0.15s ease;
}

.home-section__link:hover {
	color: var(--accent-2);
	text-decoration: underline;
}

/* "Ver todos" movido pra DEPOIS da seção (ensaios/vídeos/bastidores) —
   pedido do André em 08/07/2026 (antes ficava no header, ao lado do
   título). Centralizado em 09/07/2026 (era alinhado à esquerda). */
.home-section__footer {
	margin-top: 18px;
	text-align: center;
}

/* Banner "veja mais da modelo" no fim do bastidor (pedido do André em
   06/07/2026) — título + link "Ver perfil completo" lado a lado. */
.bastidor-modelo-banner .home-section__header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
}

.bastidor-modelo-banner__perfil {
	font-size: 14px;
	font-weight: 500;
	color: var(--accent-1);
	white-space: nowrap;
}
.bastidor-modelo-banner__perfil:hover { text-decoration: underline; }

.bastidor-single__header { margin-bottom: 20px; }

.bastidor-single__title {
	font-family: var(--font-serif);
	font-size: 30px;
	font-weight: 600;
	margin: 0 0 6px;
}

.bastidor-single__models a {
	color: var(--accent-1);
	font-weight: 500;
}

.bastidor-single__content { margin-top: 20px; }

.ensaios-grid {
	display: grid;
	gap: 18px;
	grid-template-columns: repeat(4, 1fr);
}

.ensaio-card {
	display: block;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
	transition: transform 0.2s, border-color 0.2s;
}

.ensaio-card:hover {
	transform: translateY(-3px);
	border-color: var(--border-strong);
}

.ensaio-card__media {
	position: relative;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	background: var(--bg-elevated);
}

.ensaio-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.35s ease;
}

.ensaio-card:hover .ensaio-card__media img { transform: scale(1.04); }

.ensaio-card__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0) 55%);
	pointer-events: none;
}

.ensaio-card__body { padding: 14px 16px 16px; }

.ensaio-card__tags {
	display: flex;
	gap: 6px;
	flex-wrap: wrap;
	margin-bottom: 8px;
}

.ensaio-card__tag {
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.3px;
	padding: 3px 9px;
	border-radius: 999px;
	background: var(--bg-elevated);
	color: var(--text-dim);
}

/* Tags menores no mobile — pedido do André em 08/07/2026 (card ficava
   apertado com o tamanho normal em telas pequenas). */
@media (max-width: 480px) {
	.ensaio-card__tag { font-size: 8px; padding: 2px 7px; }
}

.ensaio-card__title {
	font-size: 15px;
	font-weight: 600;
	line-height: 1.35;
	margin-bottom: 8px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.ensaio-card__meta {
	display: flex;
	gap: 12px;
	color: var(--text-faint);
	font-size: 12px;
}

/* ===================================================================
   Card de Bastidor na Home — antes reaproveitava o .ensaio-card (feito
   pra imagem destacada + tags de ensaio, que bastidor não tem). Pedido
   do André em 06/07/2026: "mudar o formato dos cards de Bastidores para
   combinar mais com o layout". Estrutura igual ao .ensaio-card (mesmo
   grid .ensaios-grid--4col), com um selo "Bastidor" no lugar das tags e
   ícone de play quando o bastidor tem vídeo.
   =================================================================== */

.bastidor-card {
	display: block;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
	transition: transform 0.2s, border-color 0.2s;
}

.bastidor-card:hover {
	transform: translateY(-3px);
	border-color: var(--border-strong);
}

.bastidor-card__media {
	position: relative;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	background: var(--bg-elevated);
}

.bastidor-card__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.35s ease;
}

.bastidor-card:hover .bastidor-card__img { transform: scale(1.04); }

/* Blur pra quem não é assinante ativo (ver template-parts/bastidor-card.php) —
   scale(1.12) evita a borda nítida que o blur deixa nas quinas da imagem. */
.bastidor-card__img--blur {
	filter: blur(20px) saturate(1.15);
	transform: scale(1.12);
}
.bastidor-card:hover .bastidor-card__img--blur { transform: scale(1.16); }

.bastidor-card__lock {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 44px;
	height: 44px;
	transform: translate(-50%, -50%);
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.55) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M12 1a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-1V6a5 5 0 0 0-5-5zm3 8H9V6a3 3 0 0 1 6 0v3z'/%3E%3C/svg%3E") center / 18px no-repeat;
	backdrop-filter: blur(2px);
	border: 1px solid rgba(255, 255, 255, 0.3);
}

.bastidor-card__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0) 55%);
	pointer-events: none;
}

.bastidor-card__badge {
	position: absolute;
	top: 10px;
	left: 10px;
	background: rgba(0, 0, 0, 0.55);
	backdrop-filter: blur(3px);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.4px;
	text-transform: uppercase;
	padding: 4px 10px;
	border-radius: 999px;
	border: 1px solid rgba(255, 255, 255, 0.25);
}

.bastidor-card__play {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 40px;
	height: 40px;
	transform: translate(-50%, -50%);
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.12) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M8 5v14l11-7z'/%3E%3C/svg%3E") center / 14px no-repeat;
	border: 1px solid rgba(255, 255, 255, 0.3);
	opacity: 0;
	transition: opacity 0.2s;
}

.bastidor-card:hover .bastidor-card__play { opacity: 1; }

.bastidor-card__body { padding: 14px 16px 16px; }

.bastidor-card__title {
	font-size: 15px;
	font-weight: 600;
	line-height: 1.35;
	margin-bottom: 4px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.bastidor-card__modelo {
	display: block;
	font-size: 12px;
	font-weight: 500;
	color: var(--accent-1);
	margin-bottom: 8px;
}

.bastidor-card__meta {
	display: flex;
	gap: 12px;
	color: var(--text-faint);
	font-size: 12px;
}

/* ===================================================================
   Blog (Entrevista/Notícia/Coluna/Eventos) — pedido do André em
   06/07/2026, ver page-templates/template-blog.php, category.php e
   inc/data/blog.php. Card em paisagem (16:9), diferente do ensaio-card
   em retrato — foto editorial de blog costuma ser horizontal.
   =================================================================== */

.blog-grid {
	display: grid;
	gap: 22px;
	grid-template-columns: repeat(3, 1fr);
}

.blog-card {
	display: block;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
	transition: transform 0.2s, border-color 0.2s;
}

.blog-card:hover {
	transform: translateY(-3px);
	border-color: var(--border-strong);
}

.blog-card__media {
	position: relative;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: var(--bg-elevated);
}

.blog-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.blog-card__badge {
	position: absolute;
	top: 10px;
	left: 10px;
	background: var(--accent-1);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.4px;
	text-transform: uppercase;
	padding: 4px 10px;
	border-radius: 999px;
}

.blog-card__body { padding: 16px 18px 18px; }

.blog-card__date {
	display: block;
	font-size: 12px;
	color: var(--text-faint);
	margin-bottom: 6px;
}

.blog-card__title {
	font-size: 17px;
	font-weight: 600;
	line-height: 1.35;
	margin-bottom: 8px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.blog-card__excerpt {
	font-size: 13px;
	line-height: 1.5;
	color: var(--text-dim);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

@media (max-width: 900px) {
	.blog-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 600px) {
	.blog-grid { grid-template-columns: 1fr; gap: 16px; }
}

/* "Do blog" na Home — cards pequenos estilo jornal digital (lista de
   últimas notícias), ver front-page.php e template-parts/blog-mini-card.php. */
.blog-mini-grid {
	display: grid;
	gap: 20px 24px;
	grid-template-columns: repeat(3, 1fr);
}

.blog-mini-card {
	display: flex;
	gap: 12px;
	align-items: flex-start;
}

.blog-mini-card__media {
	flex: 0 0 auto;
	display: block;
	width: 84px;
	height: 84px;
	border-radius: var(--radius-sm, 8px);
	overflow: hidden;
	background: var(--bg-elevated);
}

.blog-mini-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.blog-mini-card__body { min-width: 0; }

.blog-mini-card__cat {
	display: block;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.4px;
	text-transform: uppercase;
	color: var(--accent-1);
	margin-bottom: 4px;
}

.blog-mini-card__title {
	font-size: 14px;
	font-weight: 600;
	line-height: 1.35;
	margin: 0 0 4px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.blog-mini-card__title a {
	color: var(--text);
	text-decoration: none;
}

.blog-mini-card__title a:hover { color: var(--accent-1); }

.blog-mini-card__date {
	font-size: 11px;
	color: var(--text-faint);
}

@media (max-width: 900px) {
	.blog-mini-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 600px) {
	.blog-mini-grid { grid-template-columns: 1fr; gap: 14px; }
}

/* ===================================================================
   Banners de publicidade/assinatura — pedido do André em 06/07/2026,
   ver template-parts/ad-banner.php e os 3 slots registrados em
   inc/setup.php (Home meio de página, fim de ensaio/vídeo, rodapé
   sitewide). ".ad-banner--fallback" é o banner "Assine a Guapamag"
   automático (só aparece pra quem não é assinante) enquanto nenhum
   anúncio de verdade foi configurado no slot via Aparência > Widgets.
   =================================================================== */

.ad-banner { margin: 32px auto; }

.ad-banner--fallback .ad-banner__link {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	flex-wrap: wrap;
	padding: 22px 28px;
	border-radius: var(--radius-md);
	background: linear-gradient(120deg, rgba(236, 47, 129, 0.18), rgba(236, 47, 129, 0.05));
	border: 1px solid rgba(236, 47, 129, 0.35);
	text-decoration: none;
}

.ad-banner__kicker {
	display: block;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--accent-1);
	margin-bottom: 4px;
}

.ad-banner__title {
	display: block;
	font-size: 16px;
	font-weight: 600;
	color: var(--text);
	line-height: 1.4;
}

.ad-banner__cta { flex: 0 0 auto; white-space: nowrap; }

.ad-banner--wide { margin: 0 auto 24px; }

@media (max-width: 600px) {
	.ad-banner--fallback .ad-banner__link { padding: 18px 20px; }
	.ad-banner__title { font-size: 14px; }
}

/* ===================================================================
   Banner do grupo do Telegram — pedido do André em 06/07/2026, ver
   template-parts/telegram-banner.php (substitui a versão anterior
   quebrada, que apontava pra uma imagem inexistente).
   =================================================================== */

.telegram-banner { margin: 32px auto; }

.telegram-banner__link {
	display: flex;
	align-items: center;
	gap: 18px;
	flex-wrap: wrap;
	padding: 20px 26px;
	border-radius: var(--radius-md);
	background: linear-gradient(120deg, rgba(41, 169, 234, 0.16), rgba(41, 169, 234, 0.04));
	border: 1px solid rgba(41, 169, 234, 0.4);
	text-decoration: none;
}

.telegram-banner__icon {
	flex: 0 0 auto;
	width: 44px;
	height: 44px;
	display: block;
}

.telegram-banner__icon svg { width: 100%; height: 100%; display: block; }

.telegram-banner__text { flex: 1 1 240px; min-width: 0; }

.telegram-banner__title {
	display: block;
	font-size: 16px;
	font-weight: 600;
	color: var(--text);
}

.telegram-banner__subtitle {
	display: block;
	font-size: 13px;
	color: var(--text-dim);
	margin-top: 2px;
}

.telegram-banner__cta {
	flex: 0 0 auto;
	white-space: nowrap;
	background: #29A9EA;
	border-color: #29A9EA;
}

@media (max-width: 600px) {
	.telegram-banner__link { padding: 16px 18px; gap: 14px; }
	.telegram-banner__icon { width: 36px; height: 36px; }
	.telegram-banner__title { font-size: 14px; }
	.telegram-banner__subtitle { font-size: 12px; }
}

/* ===================================================================
   Packs avulsos + tokens — pedido do André em 06/07/2026, ver
   page-templates/template-packs.php, template-comprar-tokens.php,
   template-parts/pack-card.php.
   =================================================================== */

.packs-saldo {
	display: flex;
	align-items: center;
	gap: 14px;
	flex-wrap: wrap;
	margin: 0 0 28px;
	padding: 16px 20px;
	border-radius: var(--radius-md);
	background: var(--bg-card);
	border: 1px solid var(--border);
}

.packs-saldo__label { font-size: 13px; color: var(--text-dim); }

.packs-saldo__valor {
	font-size: 18px;
	font-weight: 700;
	color: var(--accent-1);
	margin-right: auto;
}

.packs-grid {
	display: grid;
	gap: 20px;
	grid-template-columns: repeat(4, 1fr);
}

.pack-card {
	display: flex;
	flex-direction: column;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
}

.pack-card__media {
	position: relative;
	aspect-ratio: 3 / 4;
	background: var(--bg-elevated);
}

.pack-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; }

.pack-card__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0) 55%);
	pointer-events: none;
}

.pack-card__body { padding: 14px 16px 16px; display: flex; flex-direction: column; gap: 6px; flex: 1; }

.pack-card__modelo {
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--accent-1);
}

.pack-card__title { font-size: 15px; font-weight: 600; line-height: 1.35; }

.pack-card__excerpt {
	font-size: 12px;
	color: var(--text-dim);
	line-height: 1.5;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.pack-card__footer {
	margin-top: auto;
	padding-top: 10px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
}

.pack-card__preco { font-size: 13px; font-weight: 600; color: var(--text-dim); }

.pack-card__btn { flex: 0 0 auto; }

.pack-card__btn--baixar { width: 100%; text-align: center; }

.tokens-grid {
	display: grid;
	gap: 20px;
	grid-template-columns: repeat(3, 1fr);
	margin: 28px 0;
}

.token-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 4px;
	padding: 28px 20px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
}

.token-card__qtd { font-size: 32px; font-weight: 700; color: var(--accent-1); }

.token-card__qtd-label {
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--text-faint);
	margin-bottom: 8px;
}

.token-card__preco { font-size: 16px; font-weight: 600; margin-bottom: 14px; }

.tokens-nota { font-size: 13px; color: var(--text-faint); margin-top: 8px; }

@media (max-width: 900px) {
	.packs-grid { grid-template-columns: repeat(2, 1fr); }
	.tokens-grid { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
	.packs-grid { grid-template-columns: 1fr; }
}

/* ===================================================================
   Minha Conta — pedido do André em 06/07/2026: "Crie a nova estrutura
   da /minha-conta". A página em si continua sendo o shortcode nativo
   do WooCommerce ([woocommerce_my_account], ver inc/woocommerce-account.php
   pro conteúdo novo injetado nela) — aqui é o tema visual, que antes
   vinha 100% no padrão claro do WooCommerce, destoando do resto do
   site escuro.
   =================================================================== */

.woocommerce-account .woocommerce {
	max-width: 1100px;
	margin: 0 auto;
	padding: 0 20px;
	color: var(--text);
}

.woocommerce-MyAccount-navigation {
	margin-bottom: 24px;
}

.woocommerce-MyAccount-navigation ul {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	list-style: none;
	margin: 0;
	padding: 0;
	border-bottom: 1px solid var(--border);
	padding-bottom: 14px;
}

.woocommerce-MyAccount-navigation li a {
	display: inline-block;
	padding: 8px 16px;
	border-radius: 999px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	color: var(--text-dim);
	font-size: 13px;
	font-weight: 500;
	text-decoration: none;
	transition: background 0.2s, border-color 0.2s, color 0.2s;
}

.woocommerce-MyAccount-navigation li a:hover { color: var(--text); border-color: var(--border-strong); }

.woocommerce-MyAccount-navigation li.is-active a {
	background: var(--accent-1);
	border-color: var(--accent-1);
	color: #fff;
}

.woocommerce-MyAccount-content { color: var(--text-dim); }
.woocommerce-MyAccount-content a { color: var(--accent-1); }

.woocommerce-account table.shop_table {
	width: 100%;
	border-collapse: collapse;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
}

.woocommerce-account table.shop_table th,
.woocommerce-account table.shop_table td {
	padding: 12px 16px;
	border-bottom: 1px solid var(--border);
	font-size: 13px;
	text-align: left;
}

.woocommerce-account table.shop_table th { color: var(--text-faint); font-weight: 600; }

.woocommerce-account form .form-row label { color: var(--text-dim); font-size: 13px; }

.woocommerce-account form .form-row input,
.woocommerce-account form .form-row select,
.woocommerce-account form .form-row textarea {
	width: 100%;
	padding: 10px 14px;
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	border-radius: 8px;
	color: var(--text);
	font-size: 14px;
}

.woocommerce-account .button,
.woocommerce-account button.button,
.woocommerce-account input.button {
	display: inline-block;
	background: var(--accent-grad);
	color: #fff;
	font-weight: 600;
	font-size: 14px;
	padding: 12px 28px;
	border-radius: 999px;
	border: none;
	cursor: pointer;
}

/* Tela de login/cadastro (deslogado) — pedido do André em 09/07/2026:
   "os botões e a cor você fez, mas o resto continuou o padrão do
   WordPress". Achado: o CSS de Minha Conta até aqui só cobria o painel
   de quem JÁ está logado (.woocommerce-MyAccount-*) — o formulário de
   login/cadastro em si (#customer_login, gerado pelo template nativo
   myaccount/form-login.php do WooCommerce) nunca tinha sido tocado.
   Usa o ID #customer_login de propósito nos seletores abaixo: o CSS
   estrutural do próprio WooCommerce (woocommerce-layout.css, sempre
   carregado) estiliza os campos com uma classe a mais (.input-text),
   ganhando em especificidade de qualquer regra só com classe — só um
   seletor com ID garante vencer isso sem precisar de !important. */
#customer_login {
	display: flex;
	flex-wrap: wrap;
	gap: 24px;
	margin: 0;
}

#customer_login .u-column1,
#customer_login .u-column2 {
	flex: 1 1 320px;
	min-width: 0;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	padding: 28px 24px;
}

#customer_login h2 {
	font-family: var(--font-serif);
	font-size: 20px;
	font-weight: 600;
	margin: 0 0 20px;
	color: var(--text);
}

#customer_login .form-row { margin-bottom: 16px; }

#customer_login label {
	display: block;
	margin-bottom: 6px;
	font-size: 13px;
	color: var(--text-dim);
}

#customer_login input[type="text"],
#customer_login input[type="email"],
#customer_login input[type="password"] {
	width: 100%;
	padding: 11px 14px;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: 8px;
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 14px;
}

#customer_login input[type="text"]:focus,
#customer_login input[type="email"]:focus,
#customer_login input[type="password"]:focus {
	outline: none;
	border-color: var(--accent-1);
}

#customer_login .woocommerce-form-login__rememberme,
#customer_login .woocommerce-form-register__generate-password {
	display: flex;
	align-items: center;
	gap: 8px;
	color: var(--text-dim);
	font-size: 13px;
	margin-bottom: 16px;
}

#customer_login input[type="checkbox"] {
	width: 16px;
	height: 16px;
	accent-color: var(--accent-1);
}

#customer_login .woocommerce-LostPassword {
	margin-top: 14px;
	font-size: 13px;
}

#customer_login .woocommerce-LostPassword a,
#customer_login .woocommerce-privacy-policy-text a {
	color: var(--accent-1);
}

#customer_login .woocommerce-privacy-policy-text {
	color: var(--text-faint);
	font-size: 12px;
	line-height: 1.5;
	margin: 4px 0 18px;
}

#customer_login .woocommerce-form-register__submit,
#customer_login .woocommerce-form-login__submit {
	margin-top: 4px;
}

@media (max-width: 700px) {
	#customer_login { gap: 16px; }
	#customer_login .u-column1,
	#customer_login .u-column2 {
		flex-basis: 100%;
		padding: 22px 18px;
	}
}

/* ===================================================================
   page.php (fallback genérico) — achado junto do /minha-conta: nunca
   tinha CSS nenhum, então o h1 saía no serifado padrão do navegador em
   vez do Fraunces do resto do tema. Afeta qualquer Page sem template
   próprio (Minha Conta, Sobre a Revista, Inscrição Fotógrafos/Modelos).
   =================================================================== */
.page-default { padding: 40px 0 60px; }

.page-default__cover {
	margin-bottom: 24px;
	border-radius: var(--radius-md);
	overflow: hidden;
}

.page-default__cover img { width: 100%; height: auto; display: block; }

.page-default__title {
	font-family: var(--font-serif);
	font-size: clamp(24px, 4vw, 34px);
	font-weight: 600;
	margin: 0 0 24px;
	color: var(--text);
}

.page-default__content { color: var(--text-dim); line-height: 1.7; }
.page-default__content a { color: var(--accent-1); }

/* Resumo no topo do Painel (Dashboard) — ver
   guapamag_render_conta_resumo() em inc/woocommerce-account.php. */
.conta-resumo {
	display: grid;
	gap: 16px;
	grid-template-columns: 1fr 1fr;
	margin-bottom: 28px;
}

.conta-resumo__item {
	display: flex;
	flex-direction: column;
	gap: 8px;
	align-items: flex-start;
	padding: 18px 20px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
}

.conta-resumo__label { font-size: 12px; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.4px; }

.conta-resumo__valor { font-size: 18px; font-weight: 700; color: var(--text-dim); }
.conta-resumo__valor.is-assinante { color: var(--accent-1); }

.conta-resumo__links {
	grid-column: 1 / -1;
	display: flex;
	gap: 18px;
	font-size: 13px;
}

.conta-tokens__lista { list-style: none; margin: 0; padding: 0; }

.conta-tokens__lista li {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 12px 16px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	margin-bottom: 10px;
}

@media (max-width: 700px) {
	.conta-resumo { grid-template-columns: 1fr; }
}

/* ===================================================================
   Landing de Modelo (SEO) — pedido do André em 06/07/2026, ver
   page-templates/template-modelo-landing.php.
   =================================================================== */

.modelo-landing__hero {
	display: flex;
	gap: 32px;
	align-items: center;
	padding: 40px 0;
	flex-wrap: wrap;
}

.modelo-landing__hero-photo {
	flex: 0 0 auto;
	width: 220px;
	height: 280px;
	border-radius: var(--radius-md);
	overflow: hidden;
	background: var(--bg-elevated);
}

.modelo-landing__hero-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }

.modelo-landing__hero-texto { flex: 1 1 320px; }

.modelo-landing__title {
	font-size: 32px;
	line-height: 1.2;
	margin-bottom: 12px;
}

.modelo-landing__bio { color: var(--text-dim); font-size: 15px; line-height: 1.6; margin-bottom: 10px; }

.modelo-landing__local { color: var(--text-faint); font-size: 14px; margin-bottom: 18px; }

.modelo-landing__cta { display: inline-block; }

.modelo-landing__teaser,
.modelo-landing__sobre { padding: 32px 0; border-top: 1px solid var(--border); }

.modelo-landing__teaser h2,
.modelo-landing__sobre h2 { font-size: 22px; margin-bottom: 18px; }

.modelo-landing__sobre p { color: var(--text-dim); line-height: 1.7; margin-bottom: 18px; max-width: 760px; }

.modelo-landing__cta-final {
	text-align: center;
	padding: 48px 24px;
	margin: 24px 0;
	border-radius: var(--radius-md);
	background: linear-gradient(120deg, rgba(236, 47, 129, 0.18), rgba(236, 47, 129, 0.05));
	border: 1px solid rgba(236, 47, 129, 0.35);
}

.modelo-landing__cta-final h2 { font-size: 24px; margin-bottom: 10px; }
.modelo-landing__cta-final p { color: var(--text-dim); margin-bottom: 20px; }

@media (max-width: 700px) {
	.modelo-landing__hero { flex-direction: column; align-items: flex-start; }
	.modelo-landing__hero-photo { width: 100%; height: 320px; }
	.modelo-landing__title { font-size: 24px; }
}

/* ===================================================================
   Barra de filtro por tag (Ensaios/Vídeos) — padrão guapamag.tv,
   05/07/2026: substituiu o header antigo (título da página + descrição)
   no topo das páginas de arquivo. Pills lado a lado, scroll horizontal
   no mobile, clicar recarrega a página filtrada (?tag=slug).
   =================================================================== */

.tag-filter-bar {
	display: flex;
	gap: 8px;
	overflow-x: auto;
	padding: 4px 0 20px;
	margin-bottom: 24px;
	border-bottom: 1px solid var(--border);
	scrollbar-width: none;
}

.tag-filter-bar::-webkit-scrollbar { display: none; }

.tag-filter-bar__tag {
	flex: 0 0 auto;
	padding: 7px 16px;
	border-radius: 999px;
	background: var(--bg-card);
	border: 1px solid var(--border);
	color: var(--text-dim);
	font-size: 13px;
	font-weight: 500;
	white-space: nowrap;
	transition: background 0.2s, border-color 0.2s, color 0.2s;
}

.tag-filter-bar__tag:hover {
	border-color: var(--border-strong);
	color: var(--text);
}

.tag-filter-bar__tag.is-active {
	background: var(--accent-1);
	border-color: var(--accent-1);
	color: #fff;
}

/* ===================================================================
   Grid de vídeos "masonry" (mesmo padrão do guapamag.tv, aqui usando
   os vídeos do Cloudflare Stream do guapamag.com) — home "Vídeos
   Novos" e page-videos.php (Arquivo de Vídeos).
   =================================================================== */

/* REESCRITO em 08/07/2026 (6ª tentativa, referência: Pinterest). A 5ª
   tentativa (CSS `columns`, todo card 100% da largura da coluna) resolveu
   o espaço em branco do lado do vertical, MAS criou um bug diferente no
   Arquivo de Vídeos — André: "ao clicar em carregar mais, ele muda todos
   os vídeos anteriores exibidos na tela". Causa raiz: `columns` do CSS
   balanceia as colunas de novo TODA VEZ que o conteúdo muda — ao entrar
   vídeo novo no fim do HTML, o navegador redistribui TODOS os cards
   (inclusive os que já estavam visíveis) pelas colunas de novo, então
   cards que já estavam na coluna 1 podem pular pra coluna 3, etc. Isso é
   uma limitação conhecida do `columns` do CSS: ele não é "append-safe".
   Por isso trocou pra masonry montado via JS de verdade (ver
   guapamagMontarMasonry() em assets/js/theme.js): PHP continua só
   imprimindo os cards em sequência dentro de `.video-grid--mixed` (aqui
   e no "Carregar mais"), e o JS que divide em N colunas (flex row de
   `.video-grid__col`), colocando cada card na coluna MAIS BAIXA no
   momento — cards já distribuídos nunca são tocados de novo, só os novos
   (do carregar mais) entram nas colunas, sem mexer no que já estava lá. */
.video-grid--mixed {
	display: flex;
	align-items: flex-start;
	gap: 14px;
}

.video-grid__col {
	display: flex;
	flex-direction: column;
	gap: 14px;
	min-width: 0;
	flex: 1 1 0;
}

.video-card {
	display: block;
	width: 100%;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	overflow: hidden;
	cursor: pointer;
	transition: transform 0.2s, border-color 0.2s;
}

.video-card:hover {
	transform: translateY(-2px);
	border-color: var(--border-strong);
}

.video-card__thumb {
	position: relative;
	/* Pedido do André em 08/07/2026 (1ª rodada: "os horizontais podem ficar
	   um pouco maiores" — foi pra 4:3; 2ª rodada: "ainda maior, igual em
	   qualquer tela" — foi pra 1:1 quadrado; 3ª rodada: "gostei do
	   quadrado, mas mescla com o horizontal — três formatos no masonry:
	   vertical, horizontal e quadrado"). Esse é o formato HORIZONTAL "puro"
	   — mais largo que alto — que fica ao lado do quadrado
	   (.video-card--square, só pra quem NÃO é vertical, ver
	   template-parts/video-card.php) pra dar variedade ao masonry, como o
	   André pediu. */
	aspect-ratio: 4 / 3;
	background-color: var(--bg-elevated);
	background-size: cover;
	background-position: center;
}

/* Thumb real da <img> (09/07/2026, ver template-parts/video-card.php) —
   preenche o mesmo box que antes era o background-image do próprio
   .video-card__thumb, agora com lazy-loading nativo de verdade. */
.video-card__thumb-img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.video-card--square .video-card__thumb {
	aspect-ratio: 1 / 1;
}

/* Vertical: André confirmou que o 3:4 do desktop já "está bom" e pediu
   pra usar o MESMO tamanho no mobile (em vez do 9:16 que tinha antes lá) —
   por isso agora é uma regra só, sem diferença por breakpoint. */
.video-card--vertical .video-card__thumb {
	aspect-ratio: 3 / 4;
}

.video-card__thumb::after {
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	width: 44px;
	height: 44px;
	transform: translate(-50%, -50%);
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.12) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M8 5v14l11-7z'/%3E%3C/svg%3E") center / 16px no-repeat;
	border: 1px solid rgba(255, 255, 255, 0.3);
	opacity: 0;
	transition: opacity 0.2s;
}

.video-card:hover .video-card__thumb::after { opacity: 1; }

/* Paywall na thumbnail de vídeo específico (08/07/2026, ver
   inc/admin-video-thumb-gate.php) — sem background-image nenhum (só a
   cor de fundo escura do card), com um aviso central no lugar. */
.video-card__thumb--gated,
.video-single__hero--gated {
	display: flex;
	align-items: center;
	justify-content: center;
}

.video-card__gate {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	padding: 16px;
	text-align: center;
	color: var(--text-faint);
}

.video-card__gate-icon {
	font-size: 26px;
	line-height: 1;
}

.video-card__gate-text {
	font-size: 12px;
	font-weight: 600;
}

.video-card__gate--single .video-card__gate-icon { font-size: 40px; }
/* Texto branco só no aviso DENTRO DO MODAL (pedido do André 09/07/2026)
   — o gate pequeno nos cards de vídeo continua discreto (--text-faint),
   só o aviso do modal, que agora é uma caixa de destaque própria, ganha
   mais contraste. */
.video-card__gate--single .video-card__gate-text { font-size: 15px; color: #fff; }

.video-card__clip-badge {
	position: absolute;
	top: 8px;
	left: 8px;
	background: var(--accent-1);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.4px;
	padding: 3px 8px;
	border-radius: 999px;
}

.video-card__title {
	padding: 10px 12px 12px;
	font-size: 13px;
	font-weight: 600;
	line-height: 1.4;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

/* Views do vídeo (proxy via ensaio vinculado — 05/07/2026) */
.video-card__meta {
	display: flex;
	gap: 12px;
	padding: 0 12px 10px;
	color: var(--text-faint);
	font-size: 12px;
}

.video-single__meta {
	display: flex;
	align-items: center;
	gap: 16px;
	color: var(--text-faint);
	font-size: 13px;
	margin: 0 0 16px;
}

@media (max-width: 900px) {
	.video-grid--mixed { gap: 10px; }
	.video-grid__col { gap: 10px; }
}

@media (max-width: 480px) {
	.video-grid--mixed { gap: 8px; }
	.video-grid__col { gap: 8px; }
	.video-card__title { font-size: 12px; padding: 8px 10px 10px; }
}

/* ===================================================================
   Modal de vídeo / Lightbox — mecânica preservada, visual atualizado
   =================================================================== */

.video-player-modal,
.guapamag-lightbox {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 9999;
	background: rgba(4, 4, 5, 0.94);
	backdrop-filter: blur(6px);
}

.video-player-modal.is-active,
.guapamag-lightbox.is-active {
	display: flex;
	align-items: center;
	justify-content: center;
}

/* Vídeo + "Próximos vídeos" lado a lado no desktop (padrão YouTube/
   Vimeo) — vira empilhado (vídeo em cima, lista embaixo, rolando na
   horizontal) no mobile. Ver media query mais abaixo. */
.video-player-modal__inner {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	width: 92%;
	max-width: 1100px;
	max-height: 90vh;
}

.video-player-modal__box {
	position: relative;
	flex: 1 1 auto;
	min-width: 0;
	max-width: 780px;
	aspect-ratio: 16 / 9;
	background: #000; /* era transparente/branco enquanto o player carregava */
	border-radius: var(--radius-md);
	overflow: hidden;
}

.video-player-modal__frame {
	background: #000;
	border: none; /* <iframe> tem borda padrão do navegador — era essa a "borda branca", não o letterboxColor do player */
	display: block;
	width: 100%;
	height: 100%;
}

/* Vídeo vertical (clip gravado no celular) — moldura 9:16 em vez de
   forçar 16:9, senão vem cortado igual conteúdo de desktop espremido. */
.video-player-modal__box--vertical {
	flex: 0 1 auto;
	width: auto;
	max-width: 360px;
	height: min(80vh, 700px);
	aspect-ratio: 9 / 16;
}

.video-player-modal__related {
	flex: 0 0 260px;
	max-height: 90vh;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.video-player-modal__related-label {
	margin: 0;
	font-size: 12px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--text-faint);
}

.video-player-modal__related-list {
	display: flex;
	flex-direction: column;
	gap: 8px;
	overflow-y: auto;
}

.video-player-modal__related-item {
	display: flex;
	gap: 10px;
	align-items: center;
	padding: 6px;
	border-radius: var(--radius-sm);
	cursor: pointer;
	transition: background-color 0.2s;
}

.video-player-modal__related-item:hover { background: rgba(255, 255, 255, 0.06); }

.video-player-modal__related-thumb {
	flex: 0 0 96px;
	width: 96px;
	height: 54px;
	border-radius: 6px;
	background-size: cover;
	background-position: center;
	background-color: var(--bg-card);
}

.video-player-modal__related-item.is-vertical .video-player-modal__related-thumb {
	flex-basis: 54px;
	width: 54px;
	height: 96px;
}

.video-player-modal__related-title {
	font-size: 13px;
	line-height: 1.3;
	color: var(--text-dim);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

@media (max-width: 900px) {
	/* Achado em 05/07/2026 (feedback do André: "vídeos não abrem
	   centralizados/posicionados corretamente no mobile"): centralizar
	   com align-items:center um conteúdo (vídeo 16:9 + relacionados) bem
	   mais baixo que a tela sobra uma faixa preta enorme e igual em cima
	   e embaixo — matematicamente "centralizado", mas parece torto/solto
	   na tela pequena. Padrão de mercado (YouTube/Vimeo mobile): o
	   player fica colado no topo, ocupando a largura toda, e o resto
	   (relacionados) rola embaixo dele — por isso aqui vira
	   align-items:flex-start em vez de center, e o vídeo vai de ponta a
	   ponta (100vw, sem cantos arredondados) em vez de flutuar com
	   margem dos dois lados. */
	/* Precisa da mesma especificidade da regra base (.video-player-modal.is-active
	   com 2 classes) — só ".video-player-modal" dentro do media query perdia
	   pra ela e o align-items:center antigo continuava "vencendo". */
	.video-player-modal.is-active {
		align-items: flex-start;
	}

	.video-player-modal__inner {
		flex-direction: column;
		width: 100vw;
		max-width: 100vw;
		max-height: 100vh;
		height: 100%;
		gap: 0;
		overflow-y: auto;
	}
	.video-player-modal__box {
		/* flex:0 0 auto (não "1 1 auto" da regra base) — sem isso o
		   flex-grow esticava a caixa pra preencher o espaço vertical
		   sobrando na coluna, ignorando o aspect-ratio 16:9 (vídeo saía
		   quase quadrado/esticado em vez de 16:9 de verdade). */
		flex: 0 0 auto;
		width: 100%;
		max-width: none;
		border-radius: 0;
	}
	.video-player-modal__box--vertical {
		width: auto;
		max-width: 70vw;
		height: 60vh;
		margin: 0 auto;
	}
	.video-player-modal__related {
		flex: none;
		width: 100%;
		max-height: none;
		padding: 14px 14px 24px;
	}
	.video-player-modal__related-list {
		flex-direction: row;
		overflow-x: auto;
		overflow-y: visible;
		padding-bottom: 4px;
	}
	.video-player-modal__related-item {
		flex-direction: column;
		align-items: flex-start;
		flex: 0 0 130px;
	}
	.video-player-modal__related-thumb {
		width: 100%;
		flex-basis: auto;
		height: 74px;
	}
	.video-player-modal__related-item.is-vertical .video-player-modal__related-thumb {
		width: 100%;
		height: 130px;
	}
	.video-player-modal__related-title {
		-webkit-line-clamp: 2;
	}
}

.video-player-modal__close,
.guapamag-lightbox__close {
	z-index: 1;
	background: rgba(255, 255, 255, 0.08);
	border: 1px solid rgba(255, 255, 255, 0.2);
	border-radius: 50%;
	width: 36px;
	height: 36px;
	color: #fff;
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.2s;
}

/* Lightbox de fotos: continua dentro do próprio stage (não tem o
   problema de "aparecer dentro do vídeo" que o modal de vídeo tinha). */
.guapamag-lightbox__close {
	position: absolute;
	top: 16px;
	right: 16px;
}

/* Vídeo: fixo no canto da TELA (não da caixa do player) — corrigido em
   07/07/2026, o X ficava dentro de .video-player-modal__box (que tem
   overflow:hidden + cantos arredondados) e sobrepunha o vídeo. Como
   template-parts/video-modal.php agora coloca o botão como filho direto
   do overlay (fora de .video-player-modal__inner, que é quem rola), ele
   fica sempre visível no mesmo lugar, independente de scroll/vídeo
   vertical/horizontal. */
.video-player-modal__close {
	position: fixed;
	top: 20px;
	right: 20px;
	z-index: 10000;
}

.video-player-modal__close:hover,
.guapamag-lightbox__close:hover { background: rgba(255, 255, 255, 0.16); }

.guapamag-lightbox__stage {
	max-width: 90vw;
	max-height: 80vh;
	display: flex;
	align-items: center;
	justify-content: center;
}

.guapamag-lightbox__image {
	max-width: 90vw;
	max-height: 80vh;
	object-fit: contain;
	cursor: zoom-in;
	touch-action: pan-y;
	transition: transform 0.15s ease-out;
	border-radius: var(--radius-sm);
}

.guapamag-lightbox__image.is-zoomed {
	cursor: grab;
	transition: none;
	touch-action: none;
}

.guapamag-lightbox__prev,
.guapamag-lightbox__next {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	background: rgba(0, 0, 0, 0.4);
	border: none;
	border-radius: 50%;
	width: 48px;
	height: 48px;
	color: #fff;
	font-size: 26px;
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.2s;
}

.guapamag-lightbox__prev:hover,
.guapamag-lightbox__next:hover { background: rgba(255, 255, 255, 0.16); }

.guapamag-lightbox__prev { left: 16px; }
.guapamag-lightbox__next { right: 16px; }

.guapamag-lightbox__footer {
	position: absolute;
	bottom: 16px;
	left: 0;
	right: 0;
	display: flex;
	justify-content: center;
	gap: 16px;
	color: var(--text-dim);
	font-size: 13px;
}

body.guapamag-lightbox-open { overflow: hidden; }

/* ===================================================================
   Página /assinar (page-templates/template-assinar.php) — 06/07/2026.
   =================================================================== */

.assinar-page { padding: 32px 20px 80px; }

.assinar-hero { text-align: center; max-width: 620px; margin: 0 auto 20px; }

.assinar-hero__title {
	font-family: var(--font-serif);
	font-size: 40px;
	font-weight: 600;
	margin: 0 0 10px;
}

.assinar-hero__subtitle { color: var(--text-dim); font-size: 17px; margin: 0; }

/* Faixa de prova social (ensaios/vídeos/modelos) — movida pra DEPOIS dos
   planos em 09/07/2026 (pedido do André: planos precisam aparecer perto
   da primeira tela no mobile, então tirei tudo que competia com esse
   espaço antes deles). */
.assinar-hero__stats {
	display: flex;
	justify-content: center;
	gap: 36px;
	max-width: 620px;
	margin: 0 auto 48px;
	padding-top: 28px;
	border-top: 1px solid var(--border);
}

.assinar-hero__stat {
	display: flex;
	flex-direction: column;
	align-items: center;
}

.assinar-hero__stat strong {
	font-family: var(--font-serif);
	font-size: 26px;
	background: var(--accent-grad);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.assinar-hero__stat span { font-size: 13px; color: var(--text-faint); }

.assinar-planos { max-width: 1000px; margin: 0 auto 48px; }

.assinar-planos__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 20px;
}


.plano-card {
	position: relative;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-lg);
	padding: 28px 20px;
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
}

.plano-card--destaque {
	border-color: var(--accent-1);
	box-shadow: 0 0 0 1px var(--accent-1), 0 16px 40px rgba(236, 47, 129, 0.18);
}

.plano-card__badge {
	position: absolute;
	top: -12px;
	left: 50%;
	transform: translateX(-50%);
	background: var(--accent-grad);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	padding: 5px 14px;
	border-radius: 999px;
	white-space: nowrap;
}

.plano-card__nome {
	font-family: var(--font-serif);
	font-size: 19px;
	font-weight: 600;
	margin: 8px 0 4px;
}

.plano-card__preco { font-size: 26px; font-weight: 700; margin-top: 4px; }
.plano-card__preco del { color: var(--text-faint); font-size: 15px; font-weight: 400; margin-right: 6px; }
.plano-card__preco ins { text-decoration: none; }

.plano-card__periodo { color: var(--text-faint); font-size: 13px; margin: 4px 0 0; }

/* Badge de desconto (-X% OFF) — 09/07/2026, calculado do preço real do
   WooCommerce (ver template-assinar.php). Usa o MESMO lugar/formato do
   badge "Mais popular", mas com cor própria (contorno, não preenchido)
   pra não parecer a mesma coisa — só um dos dois aparece por card. */
.plano-card__badge--desconto {
	background: var(--bg-elevated);
	border: 1px solid var(--accent-1);
	color: var(--accent-1);
}

.plano-card__mensal { color: var(--text-faint); font-size: 12px; margin: 2px 0 0; }

/* Benefícios ÚNICOS (valem pra qualquer plano) — 09/07/2026, substituiu
   a lista por card da rodada anterior (era redundante já que todo plano
   dá o mesmo acesso, só muda período/desconto). Reaproveita o mesmo
   estilo de checklist, só que centralizado como bloco de página. */
.assinar-incluso {
	max-width: 560px;
	margin: 0 auto 48px;
	text-align: center;
}

.assinar-incluso__titulo {
	font-family: var(--font-serif);
	font-size: 18px;
	font-weight: 600;
	margin: 0 0 16px;
	color: var(--text-dim);
}

.assinar-incluso__lista {
	display: inline-flex;
	flex-direction: column;
	align-items: flex-start;
	list-style: none;
	margin: 0;
	padding: 0;
	text-align: left;
}

.assinar-incluso__lista li {
	position: relative;
	padding-left: 22px;
	font-size: 14px;
	color: var(--text-dim);
	margin-bottom: 10px;
	line-height: 1.4;
}

.assinar-incluso__lista li:last-child { margin-bottom: 0; }

.assinar-incluso__lista li::before {
	content: '✓';
	position: absolute;
	left: 0;
	color: var(--accent-1);
	font-weight: 700;
}

.plano-card__cta { width: 100%; margin-top: auto; }

/* Selos de confiança (sigilo/proteção/privacidade) — 09/07/2026, copiado
   do /assinar real de produção. Fica logo depois dos planos. */
.assinar-trust {
	max-width: 1000px;
	margin: 0 auto 48px;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}

.assinar-trust__item {
	display: flex;
	align-items: flex-start;
	gap: 14px;
}

.assinar-trust__icon { font-size: 22px; line-height: 1; flex-shrink: 0; }

.assinar-trust__item strong { display: block; font-size: 14px; margin-bottom: 4px; }
.assinar-trust__item strong a { color: inherit; text-decoration: underline; }
.assinar-trust__item p { color: var(--text-faint); font-size: 13px; margin: 0; }

.plano-vitalicio {
	max-width: 900px;
	margin: 0 auto 56px;
	background: radial-gradient(circle at top, rgba(139, 47, 236, 0.18), transparent 60%), var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: var(--radius-lg);
	padding: 44px 32px;
	text-align: center;
}

.plano-vitalicio__badge {
	display: inline-block;
	background: var(--accent-grad);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	padding: 6px 16px;
	border-radius: 999px;
	margin-bottom: 14px;
}

.plano-vitalicio__titulo { font-family: var(--font-serif); font-size: 30px; margin: 0 0 10px; }
.plano-vitalicio__texto { color: var(--text-dim); margin: 0 0 20px; }

.plano-vitalicio__preco {
	font-size: 34px;
	font-weight: 700;
	margin-bottom: 24px;
}
.plano-vitalicio__preco span { display: block; font-size: 13px; font-weight: 400; color: var(--text-faint); }

.assinar-faq { max-width: 700px; margin: 0 auto; }

.assinar-faq__titulo { font-family: var(--font-serif); font-size: 24px; text-align: center; margin: 0 0 24px; }

.assinar-faq__item {
	border-bottom: 1px solid var(--border);
	padding: 16px 0;
}

.assinar-faq__item summary {
	cursor: pointer;
	font-weight: 500;
	list-style: none;
}
.assinar-faq__item summary::-webkit-details-marker { display: none; }
.assinar-faq__item summary::before { content: '+ '; color: var(--accent-1); font-weight: 700; }
.assinar-faq__item[open] summary::before { content: '– '; }

.assinar-faq__item p { color: var(--text-dim); margin: 10px 0 0; font-size: 14px; }

@media (max-width: 900px) {
	.assinar-planos__grid { grid-template-columns: repeat(2, 1fr); }
	.assinar-trust { grid-template-columns: 1fr; gap: 18px; }
}

@media (max-width: 600px) {
	.assinar-page { padding-top: 20px; }
	.assinar-hero__title { font-size: 26px; }
	.assinar-hero__subtitle { font-size: 15px; }
	.assinar-hero__stats { gap: 20px; margin-bottom: 36px; }

	/* Carrossel horizontal com scroll-snap (09/07/2026, pedido do André:
	   "no mobile os planos já tem que aparecer na primeira tela... o
	   usuário não pode precisar rolar muito para ver todos os planos").
	   Empilhar os 4 cards em coluna única exigia rolar a página inteira
	   4 vezes — em vez disso, os cards ficam lado a lado, ocupando quase
	   a largura toda da tela (deixa o próximo "espiar" na borda como
	   dica visual de que dá pra arrastar), e o usuário desliza de lado
	   pra comparar os planos sem sair do topo da página. Mesmo padrão
	   usado por telas de plano de apps de assinatura (Spotify, YouTube
	   Premium) quando há mais opções do que cabe de uma vez. */
	.assinar-planos__grid {
		display: flex;
		grid-template-columns: none;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		gap: 14px;
		margin: 0 -20px;
		padding: 4px 20px 10px;
	}

	.plano-card {
		flex: 0 0 78vw;
		max-width: 78vw;
		scroll-snap-align: center;
	}

	/* Espaço extra em cima do badge "Mais popular" pra não cortar no
	   scroll horizontal (o card com destaque tem o mesmo box-shadow, sem
	   margem própria, então o badge de -12px podia ficar meio escondido
	   atrás do card vizinho). */
	.assinar-planos__grid { padding-top: 16px; }
}

/* ===================================================================
   Comentários do ensaio — estilo guapamag.tv (pedido do André em
   05/07/2026). Leitura visível pra todo mundo (visitante, cliente,
   assinante); só quem não está logado tem o nome escondido
   ("Assinante #XXXX" ou "Visitante", ver inc/comments.php). Postar é
   exclusivo de assinante ativo — cliente/visitante veem um CTA no
   lugar do formulário.
   =================================================================== */

.guapamag-comments {
	margin-top: 40px;
	padding-top: 32px;
	border-top: 1px solid var(--border);
}

.guapamag-comments__title {
	font-family: var(--font-serif);
	font-size: 22px;
	font-weight: 600;
	color: var(--text);
	margin: 0 0 20px;
}

.guapamag-comments__empty {
	color: var(--text-dim);
	font-size: 14px;
	margin: 0 0 24px;
}

.guapamag-comments__list {
	list-style: none;
	margin: 0 0 28px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 18px;
}

/* Respostas (filhas) recuam um pouco, sem exagerar (visual mais
   próximo de comentário de rede social do que fórum). */
.guapamag-comments__list .children {
	list-style: none;
	margin: 14px 0 0;
	padding: 0 0 0 32px;
	display: flex;
	flex-direction: column;
	gap: 14px;
	border-left: 2px solid var(--border);
}

.guapamag-comment {
	list-style: none;
}

.guapamag-comment__row {
	display: flex;
	align-items: flex-start;
	gap: 12px;
}

.guapamag-comment__avatar img {
	display: block;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	object-fit: cover;
}

.guapamag-comment__avatar-placeholder {
	display: block;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
}

.guapamag-comment__body {
	flex: 1;
	min-width: 0;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	padding: 12px 16px;
}

.guapamag-comment__meta {
	display: flex;
	align-items: baseline;
	gap: 8px;
	margin-bottom: 6px;
	flex-wrap: wrap;
}

.guapamag-comment__author {
	font-weight: 600;
	font-size: 14px;
	color: var(--text);
}

.guapamag-comment__date {
	font-size: 12px;
	color: var(--text-faint);
}

.guapamag-comment__pending {
	font-size: 12px;
	color: var(--accent-1);
	margin: 0 0 6px;
	font-style: italic;
}

.guapamag-comment__text {
	font-size: 14px;
	color: var(--text-dim);
	line-height: 1.55;
}

.guapamag-comment__text p:last-child {
	margin-bottom: 0;
}

.guapamag-comment__reply {
	margin-top: 6px;
}

.guapamag-comment__reply a {
	font-size: 12px;
	font-weight: 600;
	color: var(--accent-1);
}

.guapamag-comment__reply a:hover {
	text-decoration: underline;
}

/* Curtir comentário + Responder, lado a lado — pedido do André em
   08/07/2026. */
.guapamag-comment__actions {
	display: flex;
	align-items: center;
	gap: 14px;
	margin-top: 8px;
}

.guapamag-comment__like-btn {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	background: transparent;
	border: none;
	padding: 0;
	color: var(--text-faint);
	font-size: 12px;
	cursor: pointer;
	transition: color 0.15s ease;
}

.guapamag-comment__like-btn:hover { color: var(--text-dim); }

.guapamag-comment__like-btn:disabled { cursor: default; }

.guapamag-comment__like-btn.is-liked,
.guapamag-comment__like-btn.is-liked .guapamag-icon {
	color: var(--accent-1);
}

.guapamag-comment__like-btn.is-liked .guapamag-icon {
	fill: var(--accent-1);
	animation: guapamag-curtir-pulso 0.35s ease;
}

.guapamag-comment__actions .guapamag-comment__reply,
.guapamag-comment__actions .guapamag-comment__reply-btn {
	margin: 0;
}

.guapamag-comment__reply-btn {
	background: transparent;
	border: none;
	padding: 0;
	font-size: 12px;
	font-weight: 600;
	color: var(--accent-1);
	cursor: pointer;
}

.guapamag-comment__reply-btn:hover { text-decoration: underline; }

/* Aviso "Respondendo a Fulano — cancelar" acima do textarea (comentário
   de vídeo, dentro do modal) — pedido do André em 08/07/2026. */
.guapamag-reply-note {
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	padding: 8px 12px;
	font-size: 12px;
	color: var(--text-dim);
	margin: 0 0 10px;
}

.guapamag-reply-note a[data-reply-cancel] {
	color: var(--accent-1);
	font-weight: 600;
}

.guapamag-reply-note a[data-reply-cancel]:hover { text-decoration: underline; }

/* "Ver mais comentários" — pedido do André em 08/07/2026. */
.guapamag-comments__ver-mais {
	display: block;
	margin: 0 0 20px;
	background: transparent;
	border: 1px solid var(--border);
	color: var(--text-dim);
	font-size: 13px;
	font-weight: 600;
	padding: 10px 18px;
	border-radius: 999px;
	cursor: pointer;
	transition: border-color 0.2s, color 0.2s;
}

.guapamag-comments__ver-mais:hover {
	border-color: var(--accent-1);
	color: var(--text);
}

/* Formulário (só renderiza pra assinante ativo, ver comments.php). */
#comments .comment-respond {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	padding: 20px;
}

#comments .comment-reply-title {
	font-family: var(--font-serif);
	font-size: 17px;
	font-weight: 600;
	margin: 0 0 12px;
	display: block;
}

#comments .comment-reply-title small { font-size: 13px; margin-left: 8px; }
#comments .comment-reply-title small a { color: var(--text-dim); }

.guapamag-comment-form__field {
	width: 100%;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: var(--radius-sm);
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 14px;
	padding: 12px 14px;
	resize: vertical;
	min-height: 90px;
}

.guapamag-comment-form__field:focus {
	outline: none;
	border-color: var(--accent-1);
}

.guapamag-comment-form__submit {
	display: inline-block;
	margin-top: 12px;
	background: var(--accent-grad);
	color: #fff;
	font-weight: 600;
	font-size: 14px;
	padding: 11px 26px;
	border: none;
	border-radius: 999px;
	cursor: pointer;
	transition: opacity 0.2s;
}

.guapamag-comment-form__submit:hover { opacity: 0.88; }

/* CTA de login/assinar no lugar do formulário (cliente ou visitante). */
.guapamag-comments__login-cta {
	background: var(--bg-card);
	border: 1px dashed var(--border-strong);
	border-radius: var(--radius-md);
	padding: 20px;
	text-align: center;
}

.guapamag-comments__login-cta p {
	color: var(--text-dim);
	font-size: 14px;
	margin: 0 0 14px;
}

.guapamag-comments__login-cta .btn,
.guapamag-comments__login-cta .btn--ghost {
	margin: 0 6px;
}

.guapamag-comments__closed {
	color: var(--text-faint);
	font-size: 13px;
}

@media (max-width: 480px) {
	.guapamag-comments__list .children { padding-left: 18px; }
	.guapamag-comment__avatar img,
	.guapamag-comment__avatar-placeholder { width: 32px; height: 32px; }
}

/* ===================================================================
   Ícones de views/curtida/comentários (template-parts/interacoes.php) —
   pedido do André em 07/07/2026. Reaproveitado no ensaio, vídeo e
   bastidor individual.
   =================================================================== */

.guapamag-interacoes {
	/* Os 3 itens viram filhos diretos do flex-row que já existia em volta
	   (.ensaio-single__meta / .video-single__meta / .bastidor-single__meta)
	   — evita ter que reestruturar o layout desses containers. */
	display: contents;
}

.guapamag-interacoes__item {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	color: var(--text-faint);
	font-size: 13px;
	background: none;
	border: none;
	padding: 0;
	font-family: inherit;
	cursor: default;
	text-decoration: none;
}

.guapamag-icon {
	width: 17px;
	height: 17px;
	fill: none;
	stroke: currentColor;
	stroke-width: 2;
	stroke-linecap: round;
	stroke-linejoin: round;
	flex-shrink: 0;
}

/* Ícones nos CARDS de listagem (template-parts/card-icons.php) — menores
   que os das páginas single, e sem stroke (fill sólido combina melhor
   com o tamanho pequeno, evita ficar "borrado" em 13px). Pedido do
   André em 07/07/2026: views/curtidas/fotos/vídeo nos cards da Home e
   dos Arquivos de Ensaios/Vídeos. */
.guapamag-card-icons__item {
	display: inline-flex;
	align-items: center;
	gap: 4px;
}

.guapamag-icon--sm {
	width: 13px;
	height: 13px;
	fill: currentColor;
	stroke: none;
}

.guapamag-interacoes__like {
	cursor: pointer;
	transition: color 0.15s ease;
}

.guapamag-interacoes__like:hover:not(:disabled) { color: var(--accent-1); }
.guapamag-interacoes__like:disabled { cursor: default; }

.guapamag-interacoes__like.is-liked,
.guapamag-interacoes__like.is-liked .guapamag-icon {
	color: var(--accent-1);
}

.guapamag-interacoes__like.is-liked .guapamag-icon { fill: var(--accent-1); }

/* Curtida "acabou de acontecer" — pequeno pulso no coração, feedback
   visual imediato sem precisar recarregar nada. */
@keyframes guapamag-curtir-pulso {
	0%   { transform: scale(1); }
	40%  { transform: scale(1.35); }
	100% { transform: scale(1); }
}

.guapamag-interacoes__like.is-liked .guapamag-icon {
	animation: guapamag-curtir-pulso 0.35s ease;
}

.guapamag-interacoes__comments {
	cursor: pointer;
	transition: color 0.15s ease;
}

.guapamag-interacoes__comments:hover { color: var(--text); }

/* ===================================================================
   Comentários de vídeo dentro do modal (inc/ajax-video-comments.php) —
   pedido do André em 07/07/2026. Reaproveita as classes .guapamag-comments*
   já usadas no comentário de ensaio/bastidor, só que carregado via AJAX.
   =================================================================== */

/* .video-player-modal__inner virou coluna (vídeo+relacionados em cima,
   comentários embaixo, tudo rolando dentro do modal) — antes era só a
   linha do vídeo+relacionados, sem espaço pra mais nada embaixo. */
.video-player-modal__inner {
	flex-direction: column;
	overflow-y: auto;
	padding: 4px;
}

.video-player-modal__top {
	display: flex;
	align-items: flex-start;
	justify-content: center; /* 09/07/2026: vídeo vertical (box mais estreito
		que o container) ficava grudado na esquerda em vez de centralizado —
		container do modal é ~1100px de largura, mas vídeo vertical + lista
		de relacionados juntos somam bem menos que isso. */
	gap: 16px;
	width: 100%;
}

/* Views/curtir/comentário do vídeo dentro do modal — pedido do André em
   07/07/2026. Reaproveita template-parts/interacoes.php (mesmas classes
   .guapamag-interacoes* já estilizadas pro single). */
.video-player-modal__meta {
	width: 100%;
	max-width: 780px;
	margin-top: 16px;
	display: flex;
	align-items: center;
	gap: 16px;
	color: var(--text-faint);
	font-size: 13px;
}

.video-player-modal__comments {
	width: 100%;
	max-width: 780px;
	margin-top: 24px;
}

.video-player-modal__comments .guapamag-comments {
	margin-top: 0;
	padding-top: 0;
	border-top: none;
}

.video-player-modal__comments .guapamag-comments__title { font-size: 18px; }

.video-player-modal__comments:empty { display: none; }

/* "Ver página deste vídeo" (09/07/2026) — link discreto pro assinante ir
   pra single-videog.php do vídeo tocando (que agora lista o resto do
   catálogo da mesma modelo). Visibilidade controlada pelo atributo
   "hidden" (JS, ver assets/js/theme.js) — de propósito, não por
   display:none daqui: um style inline ganharia da regra ".is-paywall"
   abaixo por especificidade, e o link poderia vazar visível durante o
   aviso de assinatura de um clique seguinte (achado testando). */
.video-player-modal__page-link {
	width: 100%;
	max-width: 780px;
	margin-top: 10px;
	font-size: 13px;
	font-weight: 600;
	color: var(--accent-1);
}

.video-player-modal__page-link:hover { text-decoration: underline; }

/* Aviso de assinatura DENTRO do modal (09/07/2026) — some por padrão,
   só aparece quando o modal ganha a classe "is-paywall" (JS, ver
   assets/js/theme.js). Nesse estado, esconde o player/relacionados/
   meta/comentários e mostra só o aviso.
   CORRIGIDO em 09/07/2026 (pedido do André: "a mensagem tá ocupando a
   tela toda, o ideal seria uma caixa com o site aparecendo no fundo, não
   ocultar tudo como hoje"). O overlay base (.video-player-modal) foi
   pensado pro PLAYER — fundo quase preto (rgba(4,4,5,0.94)) + blur forte,
   igual todo player de vídeo em tela cheia. Isso fazia sentido pro vídeo,
   mas não pro aviso de assinatura, que é só uma cta pequena — ficava
   parecendo que o modal "engoliu" o site inteiro. Regra abaixo sobrescreve
   SÓ o overlay no estado ".is-paywall": mais claro/transparente e com
   menos blur, pra dar aquela sensação de "caixinha de diálogo" com o
   site visível (escurecido) atrás, e a caixa do aviso ganha fundo/borda
   próprios pra se destacar como um cartão flutuante de verdade. */
.video-player-modal.is-paywall {
	background: rgba(8, 8, 10, 0.55);
	backdrop-filter: blur(2px);
}

.video-player-modal__paywall {
	display: none;
	width: 100%;
	max-width: 420px;
	margin: 0 auto;
	flex-direction: column;
	align-items: center;
	gap: 18px;
	padding: 40px 28px;
	text-align: center;
	background: var(--bg-card);
	border: 1px solid var(--border-strong);
	border-radius: var(--radius-md);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

.video-player-modal.is-paywall .video-player-modal__inner {
	justify-content: center;
	align-items: center;
	max-height: none;
}

.video-player-modal__paywall-cta {
	display: inline-block;
	padding: 12px 28px;
	border-radius: 999px;
	background: var(--accent-grad);
	color: #fff;
	font-weight: 600;
	font-size: 14px;
}

.video-player-modal.is-paywall .video-player-modal__top,
.video-player-modal.is-paywall .video-player-modal__meta,
.video-player-modal.is-paywall .video-player-modal__comments,
.video-player-modal.is-paywall .video-player-modal__page-link {
	display: none;
}

.video-player-modal.is-paywall .video-player-modal__paywall {
	display: flex;
}

@media (max-width: 900px) {
	.video-player-modal__top {
		flex-direction: column;
		gap: 0;
	}
	.video-player-modal__meta {
		max-width: none;
		padding: 0 14px;
	}
	.video-player-modal__comments {
		max-width: none;
		padding: 0 14px 24px;
	}
}

/* ===================================================================
   Página "Modelos" (page-modelos.php) — diretório com todas as modelos
   (termos da taxonomia 'portfolio'). É a página mais bem rankeada do
   site no Google (pedido do André em 09/07/2026: manter a URL/estrutura
   que já rankeia, só levar pro padrão visual do tema novo). Reaproveita
   a mesma linguagem dos outros cards (hover lift + zoom da foto).
   =================================================================== */

.modelos-archive { padding: 24px 0 60px; }

/* Header compacto (09/07/2026) — substituiu o h1 gigante isolado, que o
   André achou fora do padrão do resto do tema (nenhuma outra página de
   arquivo usa título grande; Ensaios/Vídeos foram direto pra uma barra
   de controle, ver template-parts/tag-filter-bar.php). Título pequeno +
   busca instantânea lado a lado, mesma altura/peso visual da tag bar. */
.modelos-header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	margin-bottom: 24px;
}

.modelos-header__title {
	font-family: var(--font-serif);
	font-size: 20px;
	font-weight: 600;
	margin: 0;
	color: var(--text-dim);
}

/* Busca instantânea client-side (09/07/2026, ver assets/js/theme.js) —
   filtra o grid já carregado, sem AJAX (a página não pagina, já lista
   todas as modelos de uma vez). Reaproveita o mesmo ícone de lupa do
   .search-overlay do header pra ficar visualmente consistente. */
.modelos-search {
	display: flex;
	align-items: center;
	gap: 10px;
	width: 100%;
	max-width: 280px;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: var(--radius-lg);
	padding: 10px 14px;
	color: var(--text-faint);
}

.modelos-search__input {
	flex: 1 1 auto;
	min-width: 0;
	background: transparent;
	border: none;
	outline: none;
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 14px;
}

.modelos-search__input::placeholder { color: var(--text-faint); }

.modelos-grid__empty {
	color: var(--text-faint);
	padding: 40px 0;
	text-align: center;
}

.modelos-grid {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: 18px;
}

.modelos-grid__item {
	position: relative;
	display: block;
	aspect-ratio: 3 / 4;
	border-radius: var(--radius-md);
	overflow: hidden;
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	transition: transform 0.2s, border-color 0.2s;
}

.modelos-grid__item:hover {
	transform: translateY(-3px);
	border-color: var(--border-strong);
}

.modelos-grid__item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.35s ease;
}

.modelos-grid__item:hover img { transform: scale(1.05); }

/* Modelo sem "foto-perfil" cadastrada — mostra as iniciais no lugar da
   foto em vez de deixar o card vazio (ver page-modelos.php). */
.modelos-grid__placeholder {
	width: 100%;
	height: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-serif);
	font-size: 32px;
	font-weight: 600;
	color: var(--text-faint);
	background: var(--bg-card);
}

.modelos-grid__name {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: 22px 14px 12px;
	background: linear-gradient(0deg, rgba(0, 0, 0, 0.78), rgba(0, 0, 0, 0) 65%);
	color: #fff;
	font-weight: 600;
	font-size: 15px;
	line-height: 1.3;
}

/* ===================================================================
   Cabeçalho de perfil (modelo/fotógrafo) — template-parts/profile-header.php
   09/07/2026: nunca tinha CSS nenhum, por isso a foto aparecia gigante
   (tamanho original do arquivo). Avatar circular, tipo perfil de rede
   social, com nome/bio/infos centralizados abaixo.
   =================================================================== */

.profile-header {
	padding: 40px 0 32px;
	border-bottom: 1px solid var(--border);
	margin-bottom: 32px;
}

.profile-header__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	max-width: 560px;
	margin: 0 auto;
}

.profile-header__photo {
	width: 128px;
	height: 128px;
	border-radius: 50%;
	overflow: hidden;
	flex: 0 0 auto;
	border: 2px solid var(--border-strong);
	margin-bottom: 16px;
}

.profile-header__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.profile-header__photo--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-serif);
	font-size: 44px;
	font-weight: 600;
	color: var(--text-faint);
	background: var(--bg-card);
}

.profile-header__name {
	font-family: var(--font-serif);
	font-size: 28px;
	font-weight: 600;
	color: var(--text);
	margin-bottom: 8px;
}

.profile-header__bio {
	color: var(--text-dim);
	font-size: 14px;
	line-height: 1.6;
	margin-bottom: 12px;
}

.profile-header__info {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 4px 18px;
	font-size: 13px;
	color: var(--text-dim);
}

.profile-header__info p { margin: 0; }

.profile-header__label {
	color: var(--text-faint);
	margin-right: 4px;
}

.profile-header__info a {
	color: var(--text);
	text-decoration: underline;
	text-decoration-color: var(--border-strong);
	text-underline-offset: 2px;
}

.profile-header__info a:hover { color: var(--accent-1); }

.profile-header__stats {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	gap: 10px;
	margin-top: 20px;
}

.profile-header__stat {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 2px;
	padding: 8px 16px;
	border: 1px solid var(--border);
	border-radius: 10px;
	background: var(--bg-card);
	min-width: 76px;
}

.profile-header__stat strong {
	font-size: 15px;
	color: var(--text);
	font-weight: 600;
}

.profile-header__stat span {
	font-size: 11px;
	color: var(--text-faint);
	text-transform: uppercase;
	letter-spacing: 0.03em;
}

@media (max-width: 700px) {
	.profile-header { padding: 28px 0 24px; }
	.profile-header__photo { width: 96px; height: 96px; }
	.profile-header__name { font-size: 22px; }
}

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

@media (max-width: 900px) {
	.ensaios-grid { grid-template-columns: repeat(3, 1fr); }
	.modelos-grid { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 700px) {
	.site-header__nav ul { gap: 14px; }
	.ensaios-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
	.guapamag-galeria { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
	.paywall-notice { padding: 32px 20px; }
	.site-footer__inner { flex-direction: column; text-align: center; }
	.modelos-grid { gap: 10px; }
	.modelos-search { max-width: none; }
}

@media (max-width: 480px) {
	.ensaios-grid { grid-template-columns: repeat(2, 1fr); }
	.modelos-grid { grid-template-columns: repeat(2, 1fr); }
	.modelos-grid__name { font-size: 13px; padding: 18px 10px 10px; }
}

/* ===================================================================
   Utilitário padrão do WordPress core — o tema não herda o style.css
   do WP (é independente, ver CLAUDE.md), então precisa da própria
   regra. Usado no <label> do e-mail da newsletter (acessibilidade sem
   ocupar espaço visual).
   =================================================================== */

.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* ===================================================================
   Newsletter (Sendy) — footer, popup e seção da Home (09/07/2026,
   pedido do André: "integração do novo e-mail com o site"). Um único
   componente (template-parts/newsletter-form.php) com 3 variantes via
   modificador de classe. Processado por AJAX (inc/ajax-newsletter.php),
   sem sair da página — mesmo padrão visual dos outros forms do tema
   (busca do header, comentário).
   =================================================================== */

.newsletter-form__title {
	font-family: var(--font-serif);
	font-size: 22px;
	font-weight: 600;
	color: var(--text);
	margin: 0 0 6px;
}

.newsletter-form__text {
	color: var(--text-dim);
	font-size: 14px;
	margin: 0 0 16px;
}

.newsletter-form__form {
	display: flex;
	gap: 10px;
}

.newsletter-form__input {
	flex: 1 1 auto;
	min-width: 0;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: 999px;
	padding: 12px 18px;
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 14px;
}

.newsletter-form__input::placeholder { color: var(--text-faint); }

.newsletter-form__input:focus {
	outline: none;
	border-color: var(--accent-1);
}

/* Honeypot anti-spam — invisível pra gente, bot de formulário preenche
   todo campo (inclusive este) e se entrega sozinho. Nunca usar
   display:none/visibility:hidden aqui: alguns bots ignoram campos assim
   (checam computed style), left:-9999px é mais eficaz e ainda garante
   que tab/leitor de tela não parem nele (tabindex="-1" no HTML). */
.newsletter-form__hp {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	opacity: 0;
}

.newsletter-form__submit {
	flex-shrink: 0;
	border: none;
	cursor: pointer;
	font-family: var(--font-sans);
}

.newsletter-form__submit:disabled {
	opacity: 0.6;
	cursor: default;
}

.newsletter-form__message {
	margin: 10px 0 0;
	font-size: 13px;
}

.newsletter-form__message.is-success { color: #4ade80; }
.newsletter-form__message.is-error { color: #f87171; }

/* --- Variante "footer" (rodapé, site inteiro) — bem compacta -------- */

.newsletter-form--footer {
	width: 100%;
	max-width: 420px;
	margin: 0 auto 24px;
}

.newsletter-form--footer .newsletter-form__input { padding: 10px 16px; font-size: 13px; }
.newsletter-form--footer .newsletter-form__submit { padding: 10px 20px; font-size: 13px; }

/* --- Variante "section" (bloco dedicado na Home) -------------------- */

.home-section--newsletter {
	text-align: center;
	padding: 40px 0;
}

.newsletter-form--section {
	max-width: 480px;
	margin: 0 auto;
}

.newsletter-form--section .newsletter-form__form { max-width: 420px; margin: 0 auto; }
.newsletter-form--section .newsletter-form__message { text-align: center; }

/* --- Variante "popup" ------------------------------------------------ */

.newsletter-popup {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 998;
	align-items: center;
	justify-content: center;
	background: rgba(4, 4, 5, 0.7);
}

.newsletter-popup.is-active { display: flex; }

.newsletter-popup__backdrop {
	position: absolute;
	inset: 0;
}

.newsletter-popup__panel {
	position: relative;
	width: min(92vw, 420px);
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md, 10px);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
	padding: 32px 28px;
}

.newsletter-popup__close {
	position: absolute;
	top: 10px;
	right: 14px;
	background: transparent;
	border: none;
	color: var(--text-dim);
	font-size: 24px;
	line-height: 1;
	cursor: pointer;
}

.newsletter-popup__close:hover { color: var(--text); }

.newsletter-popup .newsletter-form__form { flex-direction: column; }
.newsletter-popup .newsletter-form__input { text-align: left; }

@media (max-width: 700px) {
	.newsletter-form__form {
		flex-direction: column;
	}
	.newsletter-form--footer .newsletter-form__form { flex-direction: column; }
	.newsletter-form__submit { width: 100%; }
}

/* ===================================================================
   Verificação de idade (18+) — gate legal (09/07/2026, pedido do
   André: "cobrir a parte legal", estilo do popup antigo do
   guapamag.com mas pra maioridade em vez de marketing). Ver
   template-parts/age-gate.php.

   Some via classe no <html> (não display:none direto no elemento) —
   ver o <script> síncrono em header.php: quem já confirmou ganha
   .age-verified ANTES do gate pintar na tela (sem piscar); quem ainda
   não confirmou ganha .has-age-gate (trava o scroll do body enquanto
   o gate está bloqueando).
   =================================================================== */

html.has-age-gate,
html.has-age-gate body {
	overflow: hidden;
}

.age-gate {
	position: fixed;
	inset: 0;
	z-index: 10000; /* acima de tudo — modal de vídeo (9999), gaveta mobile e popup de newsletter (999/998). */
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 20px;
	background: rgba(4, 4, 5, 0.97);
}

html.age-verified .age-gate {
	display: none !important;
}

.age-gate__panel {
	width: min(92vw, 460px);
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md, 10px);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
	padding: 36px 30px;
	text-align: center;
}

.age-gate__title {
	font-family: var(--font-serif);
	font-size: 24px;
	font-weight: 600;
	color: var(--text);
	margin: 0 0 14px;
}

.age-gate__text {
	color: var(--text-dim);
	font-size: 14px;
	line-height: 1.6;
	margin: 0 0 26px;
}

.age-gate__text a {
	color: var(--accent-1);
	text-decoration: underline;
}

.age-gate__actions {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.age-gate__confirm,
.age-gate__leave {
	width: 100%;
	border: none;
	cursor: pointer;
	font-family: var(--font-sans);
}

.age-gate__leave {
	cursor: pointer;
}

/* ===================================================================
   Tipografia de texto longo dentro de .page-default__content (títulos,
   listas) — pedido do André em 09/07/2026 ao reescrever os Termos &
   Condições: o CSS de page.php só cobria parágrafo solto até então,
   sem estilo nenhum pra h2/h3/ul (cairia no padrão cru do navegador).
   Aplica geral (o conteúdo do WooCommerce em /minha-conta raramente
   usa h2/ul, risco baixo).
   =================================================================== */

.page-default__content h2 {
	font-family: var(--font-serif);
	font-size: 20px;
	font-weight: 600;
	color: var(--text);
	margin: 32px 0 12px;
}

.page-default__content h2:first-child { margin-top: 0; }

.page-default__content h3 {
	font-size: 16px;
	font-weight: 600;
	color: var(--text);
	margin: 24px 0 10px;
}

.page-default__content p { margin: 0 0 16px; }

.page-default__content ul,
.page-default__content ol {
	margin: 0 0 16px;
	padding-left: 22px;
}

.page-default__content li { margin-bottom: 8px; }

.page-default__content strong { color: var(--text); }

/* Largura de leitura mais confortável em textos legais longos (Termos
   e Política de Privacidade) — não aplica no /minha-conta pra não
   espremer tabelas/formulários do WooCommerce. Classe vem de
   body_class() automático do WP (page-{slug}). */
body.page-termos-condicoes .page-default__content,
body.page-politica-privacidade .page-default__content {
	max-width: 780px;
}

/* ===================================================================
   Termos & Condições expandidos DENTRO do age-gate (09/07/2026, pedido
   do André). Painel rolável injetado via JS (ver assets/js/theme.js),
   miolo real de .page-default__content — por isso reaproveita a
   mesma tipografia compacta (h2/p/ul) em tamanho reduzido pra caber
   no modal.
   =================================================================== */

.age-gate__panel {
	max-height: 90vh;
	overflow-y: auto;
}

.age-gate__text a {
	color: var(--accent-1);
	text-decoration: underline;
	cursor: pointer;
}

.age-gate__terms {
	margin: 0 0 20px;
	max-height: 220px;
	overflow-y: auto;
	text-align: left;
	background: var(--bg-elevated);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	padding: 16px;
}

.age-gate__terms-content {
	color: var(--text-dim);
	font-size: 12px;
	line-height: 1.6;
}

.age-gate__terms-content h2 {
	font-family: var(--font-serif);
	font-size: 14px;
	font-weight: 600;
	color: var(--text);
	margin: 16px 0 8px;
}

.age-gate__terms-content h2:first-child { margin-top: 0; }

.age-gate__terms-content p { margin: 0 0 10px; }

.age-gate__terms-content ul,
.age-gate__terms-content ol {
	margin: 0 0 10px;
	padding-left: 18px;
}

.age-gate__terms-content li { margin-bottom: 6px; }

.age-gate__terms-content a { color: var(--accent-1); }
/* ===================================================================
   Checkout (/finalizar-compra) — pedido do André em 07/07/2026:
   "página tá bem feia, tudo padrão do WordPress" (seção de cupom, boxes
   brancas enormes). Igual ao que já tinha acontecido com Minha Conta:
   o WooCommerce Classic Checkout (shortcode [woocommerce_checkout],
   sem add_theme_support('woocommerce') declarado — ver functions.php)
   nunca teve CSS do tema, só o padrão claro do próprio WooCommerce.
   NÃO mexe em template PHP nem na lógica de campos/gateways (isso já
   existe em inc/woocommerce-hooks.php) — só visual.

   Estrutura do checkout clássico do WooCommerce (fixa, não é HTML
   nosso): form.checkout > #customer_details (billing) + h3#order_review_heading
   + #order_review (tabela do pedido + #payment com os gateways).
   Specificity: inputs do WooCommerce vêm com a classe extra
   ".input-text" (mesmo caso já documentado em #customer_login acima) —
   por isso os seletores de input aqui repetem essa classe, pra garantir
   que ganham do CSS nativo do WooCommerce sem precisar de !important.
   =================================================================== */

.woocommerce-checkout { color: var(--text); }

.woocommerce-checkout .woocommerce-notices-wrapper:empty { display: none; }

/* Layout de duas colunas: detalhes de faturamento à esquerda, pedido +
   pagamento à direita — os três elementos são filhos diretos do form,
   não precisa de wrapper novo, só posicionar via grid. Pedido do André
   em 07/07/2026: em telas grandes de desktop os cards não devem esticar
   até preencher o container inteiro (1200px) — colunas com largura fixa
   (em vez de "1fr" elástico) fazem os dois cards ficarem compactos e
   colados à esquerda, com o resto da tela em branco, em vez de esticar
   os campos e desviar o olhar do cliente. */
form.checkout.woocommerce-checkout {
	display: grid;
	grid-template-columns: minmax(0, 440px) minmax(0, 360px);
	gap: 24px;
	align-items: start;
}

#customer_details { grid-column: 1; grid-row: 1 / span 2; }
#order_review_heading { grid-column: 2; grid-row: 1; margin: 0; }
#order_review { grid-column: 2; grid-row: 2; }

@media (max-width: 780px) {
	form.checkout.woocommerce-checkout { grid-template-columns: 1fr; gap: 24px; }
	#customer_details, #order_review_heading, #order_review { grid-column: 1; grid-row: auto; }
}

/* Não há endereço de entrega (campos removidos em woocommerce-hooks.php) —
   a coluna de shipping do WooCommerce sempre existe no HTML mesmo vazia. */
#customer_details .col2-set { display: block; }
#customer_details .col-1 { width: 100%; }
#customer_details .col-2 { display: none; }

.woocommerce-billing-fields,
#order_review_heading,
.woocommerce-additional-fields {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-lg);
	padding: 24px;
}

#order_review_heading {
	font-family: var(--font-serif);
	font-size: 18px;
	font-weight: 600;
	padding: 20px 24px;
}

.woocommerce-additional-fields { margin-top: 20px; }

.woocommerce-billing-fields > h3,
.woocommerce-additional-fields > h3 {
	font-family: var(--font-serif);
	font-size: 18px;
	font-weight: 600;
	color: var(--text);
	margin: 0 0 18px;
}

.woocommerce-checkout .form-row { margin-bottom: 16px; }
.woocommerce-checkout .form-row:last-child { margin-bottom: 0; }

.woocommerce-checkout .form-row label {
	display: block;
	margin-bottom: 6px;
	font-size: 13px;
	color: var(--text);
}

.woocommerce-checkout .form-row label .required {
	color: var(--accent-1);
	text-decoration: none;
}

.woocommerce-checkout .form-row input.input-text,
.woocommerce-checkout .form-row select,
.woocommerce-checkout .form-row textarea {
	width: 100%;
	padding: 10px 12px;
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	border-radius: 8px;
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 14px;
}

.woocommerce-checkout .form-row input.input-text:focus,
.woocommerce-checkout .form-row select:focus,
.woocommerce-checkout .form-row textarea:focus {
	outline: none;
	border-color: var(--accent-1);
}

.woocommerce-checkout .form-row textarea { min-height: 80px; resize: vertical; }

/* Cupom de desconto — pedido do André em 07/07/2026: "pode ficar mais
   embaixo e chamar menos atenção". Reposicionado via hook pro final da
   página, depois do botão de assinar (ver inc/woocommerce-hooks.php —
   não dá pra colocar DENTRO do <form> do checkout por causa do
   aninhamento de <form>), e reduzido a um linkzinho discreto e
   centralizado, bem menor que o resto do checkout. */
.woocommerce-form-coupon-toggle {
	max-width: 400px;
	margin: 24px auto 0;
	text-align: center;
}

.woocommerce-form-coupon-toggle .woocommerce-info {
	background: transparent;
	border: none;
	margin: 0;
	padding: 0;
	color: var(--text-faint);
	font-size: 11px;
	list-style: none;
}

.woocommerce-form-coupon-toggle .woocommerce-info::before { display: none; }

.woocommerce-form-coupon-toggle .showcoupon {
	color: var(--text-faint);
	font-weight: 500;
	text-decoration: underline;
}

.woocommerce-form-coupon-toggle .showcoupon:hover { color: var(--accent-1); }

.woocommerce-form-coupon {
	display: flex;
	gap: 10px;
	max-width: 400px;
	margin: 12px auto 0;
	flex-wrap: wrap;
}

.woocommerce-form-coupon .form-row { flex: 1 1 200px; margin-bottom: 0; }

.woocommerce-form-coupon .form-row-last {
	flex: 0 0 auto;
	display: flex;
	align-items: flex-end;
}

.woocommerce-form-coupon button.button {
	background: var(--bg-elevated);
	border: 1px solid var(--border-strong);
	color: var(--text);
	padding: 12px 20px;
	border-radius: 8px;
	font-weight: 600;
	font-size: 14px;
	cursor: pointer;
	white-space: nowrap;
}

.woocommerce-form-coupon button.button:hover { border-color: var(--accent-1); }

/* Tabela do pedido */
.woocommerce-checkout-review-order-table {
	width: 100%;
	border-collapse: collapse;
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-lg);
	overflow: hidden;
	margin-bottom: 20px;
}

/* Cabeçalho "Produto / Subtotal" — some, o nome do produto na linha
   abaixo já é autoexplicativo, não precisa do rótulo da coluna. */
.woocommerce-checkout-review-order-table thead { display: none; }

/* Pedido do André em 07/07/2026: "só o mínimo necessário pra um checkout
   simples". Por padrão o WooCommerce Subscriptions mostra o pedido em
   DOBRO — um bloco "Subtotal/Total" de hoje E depois um cabeçalho
   "Totais recorrentes" com "Subtotal/Total" de novo (idênticos, já que
   não há taxa de adesão nem desconto no primeiro mês) — só a segunda
   versão (.recurring-total) importa de verdade, e nem precisa do
   Subtotal repetido, só o Total final + data da próxima cobrança (que
   o WooCommerce já concatena na mesma célula). Continua tudo no DOM
   (nada é removido de verdade, então se um dia houver desconto/taxa de
   adesão diferenciando os valores, é só ajustar este bloco de CSS). */
.woocommerce-checkout-review-order-table tfoot .cart-subtotal:not(.recurring-total),
.woocommerce-checkout-review-order-table tfoot .order-total:not(.recurring-total),
.woocommerce-checkout-review-order-table tfoot .recurring-totals,
.woocommerce-checkout-review-order-table tfoot .cart-subtotal.recurring-total {
	display: none;
}

.woocommerce-checkout-review-order-table tbody td,
.woocommerce-checkout-review-order-table tbody th {
	padding: 14px 20px;
	border-bottom: 1px solid var(--border);
	font-size: 14px;
	color: var(--text);
}

.woocommerce-checkout-review-order-table tfoot th,
.woocommerce-checkout-review-order-table tfoot td {
	padding: 12px 20px;
	font-size: 14px;
	color: var(--text-dim);
	border-bottom: 1px solid var(--border);
	text-align: left;
}

.woocommerce-checkout-review-order-table tfoot tr:last-child th,
.woocommerce-checkout-review-order-table tfoot tr:last-child td {
	border-bottom: none;
}

.woocommerce-checkout-review-order-table tfoot .order-total th,
.woocommerce-checkout-review-order-table tfoot .order-total td,
.woocommerce-checkout-review-order-table tfoot .recurring-total th,
.woocommerce-checkout-review-order-table tfoot .recurring-total td {
	color: var(--text);
	font-weight: 600;
	font-size: 15px;
}

/* Métodos de pagamento */
#payment { background: transparent; }

ul.payment_methods.methods {
	list-style: none;
	margin: 0 0 20px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

ul.payment_methods.methods li.wc_payment_method {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: var(--radius-md);
	padding: 16px 18px;
}

ul.payment_methods.methods input[type="radio"] {
	accent-color: var(--accent-1);
	width: 16px;
	height: 16px;
	vertical-align: middle;
	margin-right: 8px;
}

ul.payment_methods.methods label {
	font-size: 14px;
	font-weight: 600;
	color: var(--text);
	cursor: pointer;
}

ul.payment_methods.methods label img {
	height: 20px;
	vertical-align: middle;
	margin-left: 6px;
}

.payment_box {
	background: var(--bg-elevated);
	border-radius: var(--radius-sm);
	margin-top: 14px;
	padding: 16px;
	color: var(--text-dim);
	font-size: 13px;
	line-height: 1.6;
}

.payment_box p:last-child { margin-bottom: 0; }
/* Achado em produção em 07/07/2026 (relato do André: "letras brancas no
   cinza" nos métodos de pagamento) — o gateway Iugu injeta seu próprio
   CSS de gateway em cima do nosso, sobrescrevendo só o FUNDO do
   .payment_box pra um cinza claro (mantendo o texto claro do nosso tema
   por cima) — combinação ilegível. !important pra garantir que nosso
   fundo escuro vence a especificidade do CSS do plugin, sem depender de
   reordenar o enqueue de estilos. */
.woocommerce-checkout .payment_box {
	background: var(--bg-elevated) !important;
	color: var(--text-dim) !important;
}

.woocommerce-checkout .payment_box p,
.woocommerce-checkout .payment_box label,
.woocommerce-checkout .payment_box legend {
	color: var(--text) !important;
}

/* Cartão salvo (tokens do WooCommerce, ex: "Master 0095 (Vencto. 12/2031)"
   e "Novo cartão de crédito") */
ul.woocommerce-SavedPaymentMethods {
	list-style: none;
	margin: 0 0 14px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

ul.woocommerce-SavedPaymentMethods li {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-radius: 8px;
	padding: 10px 14px;
}

ul.woocommerce-SavedPaymentMethods label {
	font-size: 13px;
	font-weight: 500;
	color: var(--text-dim);
}

ul.woocommerce-SavedPaymentMethods input[type="radio"] {
	accent-color: var(--accent-1);
	margin-right: 8px;
}

/* Checkbox de "receber atualizações" (opt-in de newsletter) — a checkbox
   de Termos e Condições em si foi REMOVIDA via filtro
   woocommerce_checkout_show_terms (ver inc/woocommerce-hooks.php), já
   aceita no age-gate. Esta classe genérica ainda é usada pelo opt-in de
   newsletter que continua no checkout. */
.woocommerce-form__label-for-checkbox {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: 13px;
	color: var(--text-dim);
	margin: 0 0 18px;
}

.woocommerce-form__input-checkbox {
	accent-color: var(--accent-1);
	width: 16px;
	height: 16px;
	margin-top: 2px;
	flex-shrink: 0;
}

/* Botão final — pedido do André em 07/07/2026: verde em vez do degrade
   rosa/roxo da marca. Faz sentido isolar a AÇÃO final (pagar/assinar)
   numa cor que não é usada em mais nenhum outro lugar do site — reforça
   que esse é o único botão que "conclui" alguma coisa, em vez de se
   misturar com os outros CTAs do site que só navegam (Assinar, Ver
   Todos, etc, todos no gradiente rosa/roxo). Verde também carrega a
   conotação universal de "confirmar/prosseguir com segurança" em fluxo
   de pagamento — praticamente todo checkout de e-commerce grande (e o
   próprio WooCommerce/PayPal) usa uma cor de destaque separada da marca
   pro botão de finalizar compra. Variável isolada (--checkout-cta) em
   vez de hardcoded, pra ser fácil reverter pro gradiente se o André
   preferir depois de ver ao vivo — troca só essas duas linhas. */
#place_order {
	display: block;
	width: 100%;
	background: var(--checkout-cta);
	color: #fff;
	font-weight: 700;
	font-size: 15px;
	padding: 16px 28px;
	border: none;
	border-radius: 999px;
	cursor: pointer;
	transition: background 0.2s, transform 0.2s;
}

#place_order:hover { background: var(--checkout-cta-hover); }

/* Avisos (erro/sucesso/info) fora da caixa de cupom — ex: campo
   obrigatório vazio, cupom inválido. Mantém a cor semântica (vermelho/
   verde) mas no padrão visual escuro do resto do tema, sem o triângulo
   de ícone e a caixa branca padrão do WordPress. */
.woocommerce-checkout ul.woocommerce-error,
.woocommerce-checkout .woocommerce-message,
.woocommerce-checkout .woocommerce-notices-wrapper .woocommerce-info {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-left: 3px solid var(--accent-1);
	border-radius: var(--radius-sm);
	padding: 14px 18px;
	margin: 0 0 20px;
	list-style: none;
	color: var(--text);
	font-size: 13px;
}

.woocommerce-checkout ul.woocommerce-error li { margin: 0 0 4px; }
.woocommerce-checkout ul.woocommerce-error li:last-child { margin-bottom: 0; }

.woocommerce-checkout .woocommerce-message { border-left-color: var(--accent-2); }

.woocommerce-checkout .woocommerce-error::before,
.woocommerce-checkout .woocommerce-message::before,
.woocommerce-checkout .woocommerce-info::before { display: none; }
