/*
Theme Name: Twinia Blocks
Theme URI: https://www.twinia.com.br/
Author: Twinia
Author URI: https://www.twinia.com.br/
Description: Tema de blocos (FSE) do site da Twinia — integração entre WhatsApp e Slack. Layout, cor, tipografia e espaçamento vêm do theme.json; este CSS cobre somente o que não tem equivalente nativo, com o motivo comentado em cada seção.
Version: 3.1.0
Requires at least: 6.8
Tested up to: 7.0
Requires PHP: 8.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: twinia-blocks
*/

/* ==========================================================================
   1. Utilitários de texto
   Motivo: "eyebrow" e "lead" são convenções tipográficas do design que não
   existem como preset de bloco (combinação de caixa alta + espaçamento de
   letras + cor). Tudo o mais (tamanho, peso) segue os presets do theme.json.
   ========================================================================== */
.twinia-eyebrow {
	color: var(--wp--preset--color--purple);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.twinia-lead {
	color: var(--wp--preset--color--muted);
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.55;
}
.twinia-section-heading { max-width: 46rem; }

/* Contexto escuro (navy/gradiente): muted e purple padrão não contrastam.
   Medido: #e9eefb sobre o stop mais claro do gradiente da marca (#6b50df)
   = 4,7:1 (AA para texto normal); sobre navy, 12,5:1. */
.twinia-section--dark .twinia-lead,
.twinia-final-cta .twinia-lead,
.twinia-site-footer .twinia-lead { color: #e9eefb; }
.twinia-section--dark .twinia-eyebrow { color: var(--wp--preset--color--mint); }

/* ==========================================================================
   2. Cabeçalho fixo
   Motivo: "menu fixo e visível no topo" é requisito do projeto; sticky não
   tem controle nativo no editor. O sticky vai no WRAPPER <header> da
   template part — no grupo interno ele não gruda, porque o wrapper tem a
   altura exata do cabeçalho (armadilha conhecida, medida: −4203px após a
   rolagem quando aplicado ao grupo).
   ========================================================================== */
header.wp-block-template-part {
	position: sticky;
	top: 0;
	z-index: 90;
}
.twinia-site-header {
	border-bottom: 1px solid var(--wp--preset--color--line);
}
body.admin-bar header.wp-block-template-part { top: 32px; }
@media (max-width: 782px) {
	body.admin-bar header.wp-block-template-part { top: 46px; }
}
.twinia-header-inner { min-height: 4.5rem; }
/* Menu e ação formam um único grupo colado à direita (referência do site
   original, confirmada na homologação); o respiro entre eles é fixo. */
.twinia-header-right { gap: 1.25rem; }
.twinia-main-nav { gap: 1.1rem; }
/* Âncoras não podem sumir sob o cabeçalho fixo. */
html { scroll-behavior: smooth; scroll-padding-top: 5.5rem; }
@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
}
/* Editor do Site e impressão: cabeçalho no fluxo normal. */
.editor-styles-wrapper header.wp-block-template-part { position: static; }
@media print {
	header.wp-block-template-part { position: static; }
}
.twinia-brand-logo img { max-height: 2.5rem; width: auto; }
/* O título do site é reserva acessível quando não há logotipo configurado. */
.twinia-brand:has(.twinia-brand-logo img) .twinia-brand-fallback { display: none; }
.twinia-brand-fallback a { color: currentColor; text-decoration: none; font-weight: 800; }
/* Rodapé escuro: o logotipo colorido precisa de leitura sobre navy. */
.twinia-brand-logo-invert img { filter: brightness(0) invert(1); }

/* Links do menu sem sublinhado; o sublinhado global de links vale para o
   conteúdo, não para navegação (padrão do design de referência). */
.twinia-main-nav a,
.twinia-footer-nav a,
.twinia-legal-nav a,
.twinia-post-card a,
.twinia-brand a { text-decoration: none; }
.twinia-main-nav a:hover,
.twinia-footer-nav a:hover,
.twinia-legal-nav a:hover { text-decoration: underline; }

/* Itens que só existem no menu compacto (overlay): duplicam as ações do
   cabeçalho para o toque; no desktop os botões próprios respondem por isso.
   Seletor com elemento + classe para vencer o display dos itens do core. */
.twinia-main-nav li.twinia-nav-mobile-only { display: none; }
.twinia-main-nav .wp-block-navigation__responsive-container.is-menu-open li.twinia-nav-mobile-only { display: block; }
@media (max-width: 599px) {
	.twinia-header-actions { display: none; }
}

/* ==========================================================================
   3. Cartões e grades
   Motivo: aparência de cartão (borda + raio + fundo + altura igual) não é
   um estilo nativo de Grupo; o layout (grid/columns/gap) continua 100% do
   editor. Altura igual via flex para o CTA assentar na base.
   ========================================================================== */
.twinia-card,
.twinia-feature-card,
.twinia-step,
.twinia-post-card,
.twinia-price-card {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--card);
	height: 100%;
}
/* Sobre seção branca, o cartão usa a superfície suave para não desaparecer. */
.twinia-section--surface .twinia-card,
.twinia-section--surface .twinia-feature-card,
.twinia-section--surface .twinia-step { background: var(--wp--preset--color--surface-soft); }

.twinia-post-card { display: flex; flex-direction: column; }
.twinia-post-card .wp-block-post-date { margin-top: auto; }
.twinia-card-kicker,
.twinia-card-kicker a {
	color: var(--wp--preset--color--purple);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	text-decoration: none;
}

/* Passos numerados: o número decorativo vem do design de referência. */
.twinia-step { counter-increment: none; }
.twinia-step-number {
	color: var(--wp--preset--color--purple);
	font-size: 0.8125rem;
	font-weight: 800;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

/* Nota de segurança/observação destacada. Dentro de seção escura, o texto
   volta ao tom escuro: a superfície clara do cartão não herda o branco do
   contexto (branco sobre branco = 1,0:1, medido). */
.twinia-security-note {
	background: var(--wp--preset--color--surface-soft);
	border: 1px solid var(--wp--preset--color--line);
	border-left: 4px solid var(--wp--preset--color--mint);
	border-radius: var(--wp--custom--radius--small);
}
.twinia-section--dark .twinia-security-note,
.twinia-section--dark .twinia-card,
.twinia-section--dark .twinia-feature-card,
.twinia-section--dark .twinia-step,
.twinia-final-cta .twinia-lead-form {
	color: var(--wp--preset--color--contrast);
}
.twinia-section--dark .twinia-security-note .twinia-lead,
.twinia-section--dark .twinia-card .twinia-lead { color: var(--wp--preset--color--muted); }

/* ==========================================================================
   4. Lista com confirmações (is-style-twinia-check-list)
   Motivo: marcador "✓" com cor da marca não existe como opção nativa de
   lista; o espaçamento entre itens não é coberto por blockGap (armadilha
   conhecida: blockGap não se aplica a itens de lista).
   ========================================================================== */
ul.is-style-twinia-check-list {
	list-style: none;
	padding-left: 0;
}
ul.is-style-twinia-check-list > li {
	padding-left: 1.75rem;
	position: relative;
	margin-block: 0.5rem;
}
ul.is-style-twinia-check-list > li::before {
	content: "✓";
	color: var(--wp--preset--color--mint);
	font-weight: 800;
	position: absolute;
	left: 0;
	top: 0;
}
/* Sobre fundo navy/gradiente escuro, o verde já contrasta (8,0:1 medido). */

/* ==========================================================================
   5. FAQ (is-style-twinia-faq em core/details)
   Motivo: o resumo precisa de affordance (peso, cursor, seta) que o bloco
   Detalhes não oferece nativamente; borda/fundo/raio vêm do theme.json.
   ========================================================================== */
.is-style-twinia-faq > summary {
	cursor: pointer;
	font-weight: 700;
	list-style: none;
	position: relative;
	padding-right: 2rem;
}
.is-style-twinia-faq > summary::-webkit-details-marker { display: none; }
.is-style-twinia-faq > summary::after {
	content: "+";
	position: absolute;
	right: 0.25rem;
	top: 50%;
	transform: translateY(-50%);
	color: var(--wp--preset--color--purple);
	font-weight: 800;
	font-size: 1.25rem;
}
.is-style-twinia-faq[open] > summary::after { content: "–"; }
/* Sem display:grid aqui: dentro de layout constrained, o auto-margin do
   core faz itens de grade encolherem para o conteúdo e centralizarem
   (armadilha conhecida — foi o FAQ "quebrado" da homologação). Como blocos
   no fluxo, os Detalhes ocupam a largura de leitura por inteiro e o
   espaçamento vem do blockGap nativo. */

/* ==========================================================================
   6. Planos
   Motivo: preço com hierarquia própria, selo "Plano em destaque" posicionado
   sobre o cartão e CTA alinhado à base — sem equivalente nativo. Colunas,
   proporções e conteúdo permanecem no editor.
   ========================================================================== */
.twinia-price-card { display: flex; flex-direction: column; position: relative; }
.twinia-price-card > .wp-block-buttons { margin-top: auto; }
.twinia-price-card--featured {
	border-color: var(--wp--preset--color--purple);
	border-width: 2px;
	box-shadow: var(--wp--preset--shadow--float);
}
.twinia-plan-kicker {
	color: var(--wp--preset--color--muted);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.twinia-plan-badge {
	position: absolute;
	top: -0.85rem;
	right: 1.25rem;
	background: var(--wp--preset--color--purple);
	color: var(--wp--preset--color--white);
	border-radius: var(--wp--custom--radius--pill);
	font-size: 0.75rem;
	font-weight: 700;
	padding: 0.3rem 0.85rem;
}
.twinia-price { font-size: var(--wp--preset--font-size--x-large); font-weight: 800; }
.twinia-price-note { color: var(--wp--preset--color--muted); font-size: 0.875rem; }

/* ==========================================================================
   7. Demonstração WhatsApp ⇄ Slack (bloco HTML documentado)
   Motivo: componente visual especializado (duas janelas de conversa e uma
   ponte) sem representação em blocos nativos; exceção registrada na memória
   de decisões. Conteúdo textual permanece editável no próprio bloco HTML.
   ========================================================================== */
.twinia-demo {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	gap: 1rem;
	align-items: stretch;
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
}
.twinia-demo__app {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--card);
	box-shadow: var(--wp--preset--shadow--card);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}
.twinia-demo__bar {
	display: flex;
	flex-direction: column;
	gap: 0.1rem;
	padding: 0.8rem 1rem;
	color: var(--wp--preset--color--white);
}
.twinia-demo__bar span { font-size: 0.78rem; color: #e7fbf5; }
/* Verde WhatsApp escurecido só aqui: branco sobre #128c7e dá 4,1:1 (reprova);
   sobre #0f7263, 6,3:1. O token da paleta segue para acentos gráficos. */
.twinia-demo__app--whatsapp .twinia-demo__bar { background: #0f7263; }
.twinia-demo__app--slack .twinia-demo__bar { background: var(--wp--preset--color--slack); }
.twinia-demo__messages { display: grid; gap: 0.6rem; padding: 1rem; }
.twinia-demo__message {
	border-radius: 0.75rem;
	padding: 0.6rem 0.75rem;
	font-size: 0.875rem;
	line-height: 1.45;
	max-width: 92%;
}
.twinia-demo__message p { margin: 0.15rem 0 0; }
.twinia-demo__message time { display: block; margin-top: 0.25rem; font-size: 0.72rem; color: var(--wp--preset--color--muted); }
.twinia-demo__message--received { background: var(--wp--preset--color--surface-soft); justify-self: start; }
.twinia-demo__message--sent { background: #d8f7ef; justify-self: end; }
.twinia-demo__message--slack { background: var(--wp--preset--color--surface-soft); border-left: 3px solid var(--wp--preset--color--slack); max-width: 100%; }
.twinia-demo__message small {
	background: var(--wp--preset--color--line);
	border-radius: 4px;
	font-size: 0.62rem;
	font-weight: 700;
	padding: 0.05rem 0.3rem;
	vertical-align: middle;
	margin-left: 0.3rem;
}
.twinia-demo__bridge {
	align-self: center;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.2rem;
	color: var(--wp--preset--color--muted);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.twinia-demo__bridge-mark {
	background: var(--wp--preset--gradient--twinia-brand);
	color: var(--wp--preset--color--white);
	border-radius: 999px;
	width: 2.6rem;
	height: 2.6rem;
	display: grid;
	place-items: center;
	font-size: 1.2rem;
}
@media (max-width: 880px) {
	.twinia-demo { grid-template-columns: 1fr; }
	.twinia-demo__bridge { flex-direction: row; padding: 0.25rem 0; }
}

/* ==========================================================================
   8. Formulário de lead (bloco twinia-blocks/lead-form)
   Motivo: campos de formulário não existem como blocos nativos do core; o
   bloco do tema renderiza os campos e este CSS os apresenta. Envio abre o
   WhatsApp; o registro do clique sai por sendBeacon (ver assets/js).
   ========================================================================== */
.twinia-lead-form {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--preset--shadow--float);
	box-sizing: border-box; /* max-width inclui o padding: o cartão mede o que declara (era content-box: 618px reais para 34rem declarados) */
	color: var(--wp--preset--color--contrast);
	padding: clamp(1.25rem, 2.5vw, 1.75rem);
	max-width: 34rem;
	margin-inline: auto;
	text-align: left;
}
.twinia-lead-form__grid { display: grid; gap: 0.8rem; }
/* Os campos são <p> por semântica; quem espaça é a grade. Sem este reset,
   cada campo soma ~2×1em de margem padrão à altura do cartão (medido:
   cartão de 609px para 3 campos — a origem do "desproporcional"). */
.twinia-lead-form__field,
.twinia-lead-form__actions { margin: 0; }
/* Compacto no desktop: Nome | Empresa lado a lado; e-mail e botão em linha
   própria (largura total). Sem empresa, o e-mail sobe para o lado do nome. */
@media (min-width: 600px) {
	.twinia-lead-form__grid { grid-template-columns: 1fr 1fr; }
	.twinia-lead-form__grid.has-company .twinia-lead-form__field--email,
	.twinia-lead-form__actions { grid-column: 1 / -1; }
}
.twinia-lead-form label { display: block; font-size: 0.8125rem; font-weight: 700; margin-bottom: 0.25rem; }
.twinia-lead-form input[type="text"],
.twinia-lead-form input[type="email"] {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--small);
	color: var(--wp--preset--color--contrast);
	font: inherit;
	font-size: 1rem; /* não herdar o large do contexto do CTA — controle compacto */
	padding: 0.6rem 0.75rem;
	width: 100%;
	box-sizing: border-box; /* controles de formulário herdam content-box fora de .wp-block-* (armadilha conhecida) */
}
.twinia-lead-form input:focus-visible {
	outline: 3px solid var(--wp--preset--color--purple);
	outline-offset: 1px;
}
.twinia-lead-form__submit {
	background: var(--wp--preset--color--purple);
	border: 0;
	border-radius: 0.75rem;
	color: var(--wp--preset--color--white);
	cursor: pointer;
	font: inherit;
	font-size: 1rem; /* mesmo tamanho dos controles — o botão não é um segundo hero */
	font-weight: 700;
	padding: 0.7rem 1.2rem;
	width: 100%;
}
.twinia-lead-form__submit:hover,
.twinia-lead-form__submit:focus-visible { background: var(--wp--preset--color--navy); }
.twinia-lead-form__submit:focus-visible { outline: 3px solid var(--wp--preset--color--mint); outline-offset: 2px; }
.twinia-lead-form__notice { color: var(--wp--preset--color--muted); font-size: 0.8125rem; line-height: 1.5; margin: 0.6rem 0 0; }
.twinia-lead-form__notice a { color: var(--wp--preset--color--purple); }
/* Honeypot fora do fluxo visual e do leitor de tela. */
.twinia-lead-form__hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }

/* ==========================================================================
   9. Artigo e blog
   Motivo: linha "Categoria – Data", primeiro parágrafo com leve destaque e
   respiro antes de H2/H3 são decisões editoriais registradas na memória; o
   core não expõe esses ajustes contextuais.
   ========================================================================== */
.twinia-article-header { max-width: 62.5rem; }
.twinia-article-meta { color: var(--wp--preset--color--muted); font-size: 0.9375rem; gap: 0.4rem; }
.twinia-article-meta a { color: var(--wp--preset--color--purple); text-decoration: none; }
.twinia-article-meta p { margin: 0; }
.twinia-article-cover { max-width: 62.5rem; margin-inline: auto; }
.twinia-article-cover img { width: 100%; height: auto; }
/* Sem imagem destacada, o bloco não imprime nada e o espaço não sobra. */
.twinia-article .wp-block-post-content > p:first-child {
	font-size: var(--wp--preset--font-size--large);
	color: #3d475a; /* meio-termo entre texto e muted, AA sobre page (7,9:1 medido) */
}
.twinia-article .wp-block-post-content h2 { margin-top: var(--wp--preset--spacing--60); }
.twinia-article .wp-block-post-content h3 { margin-top: var(--wp--preset--spacing--50); }
/* Tabelas longas dos guias rolam no eixo X em telas estreitas. */
.twinia-article figure.wp-block-table { overflow-x: auto; }
.twinia-blog-hero .twinia-lead { max-width: 46rem; }
.twinia-pagination { padding-top: var(--wp--preset--spacing--50); }

/* Sumário "Neste guia" dos artigos. */
.twinia-toc {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--small);
}

/* ==========================================================================
   10. Página de confirmação
   ========================================================================== */
.twinia-confirmation-card {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: var(--wp--custom--radius--large);
}

/* ==========================================================================
   11. Rodapé
   Motivo: hierarquia visual dos links sobre o gradiente escuro.
   ========================================================================== */
.twinia-site-footer a { color: var(--wp--preset--color--white); }
.twinia-footer-brand { max-width: 24rem; }
.twinia-footer-brand p { color: #cdd5ea; }
.twinia-footer-legal {
	border-top: 1px solid rgba(255, 255, 255, 0.16);
	margin-top: var(--wp--preset--spacing--50);
	padding-top: var(--wp--preset--spacing--40);
}
.twinia-footer-legal p { color: #cdd5ea; }

/* ==========================================================================
   12. Acessibilidade
   Motivo: foco visível consistente em todo elemento interativo (WCAG 2.4.7);
   o core não aplica um anel de foco uniforme aos blocos de navegação/botão.
   ========================================================================== */
a:focus-visible,
button:focus-visible,
summary:focus-visible,
input:focus-visible {
	outline: 3px solid var(--wp--preset--color--purple);
	outline-offset: 2px;
	border-radius: 2px;
}
.twinia-site-footer a:focus-visible,
.twinia-final-cta a:focus-visible { outline-color: var(--wp--preset--color--mint); }
.screen-reader-text {
	clip-path: inset(50%);
	height: 1px;
	width: 1px;
	margin: -1px;
	overflow: hidden;
	position: absolute;
}
