/* ============================================================================
   PÁGINAS + BLOG (L9) — desenho da PRODUÇÃO lifepodbrasil.com, valor por valor.

   Cobre as 17 telas da fatia: as 7 institucionais (page.php), /favoritos/,
   /rastrear-pedido/, /status-do-pedido/, os 4 posts (single.php), /blog/
   (home.php), as 2 categorias (archive.php) e o 404.

   Toda medida saiu do CSS computado da produção em `docs/l9-provas/medidas-l9.json`
   (contextos desktop-1440 e mobile-390, iPhone 13 real). O medidor lê
   `textDecorationLine` e as quatro `border*Width` (tools/medir-l9.mjs, const PROPS)
   e só descarta o valor quando é `none`/`0px` — logo os dois SÃO medida: 0 de 2.156
   nós com sublinhado e `borderBottomWidth: 1px` nos 26 `hr` de cada contexto.
   O ÚNICO valor que não sai do medidor é o `::marker`, que ele não coleta: esse veio
   do CSS que a produção SERVE (`us-custom-css` inline) e está marcado na regra.

   Cortes da produção (conferidos no código-fonte servido): 601px e 1025px no
   miolo, mais o 768px que o Woo do Impreza usa só no formulário de rastreio.
   Depende do casco: `.lp-container`, `--lp-respiro`, `--lp-grad`, `--lp-header-h`.
   ========================================================================= */

/* ── faixa do miolo ───────────────────────────────────────────────────────
   Equivale ao `section.l-section.height_medium` da produção. Três degraus de
   respiro vertical (medido 24px em 390 e 64px em 1440; o degrau do meio é a
   regra @media max-width:1024 → 2.5rem do Impreza servido).
   O respiro LATERAL não entra aqui: quem dá é o `.lp-container` do casco. */
.lp-secao { padding: 24px 0; line-height: 28px; }
@media (min-width: 601px)  { .lp-secao { padding: 40px 0; } }
@media (min-width: 1025px) { .lp-secao { padding: 64px 0; } }

/* ⚠️ A entrelinha de 28px NÃO é enfeite. A produção põe 28px no <html> e TUDO
   no miolo herda daí — parágrafo, item de lista, rótulo de campo, comentário e
   até o texto do snippet do /status-do-pedido/ (medido 16px/28px em todas as 17
   telas, nos dois contextos). O base.css do tema deixa o corpo em 1.5 (24px),
   que é o desenho do casco; sem esta linha cada linha de texto da fatia sairia
   4px mais apertada e a página inteira encurtaria. Fica em `.lp-secao` de
   propósito: alcança as 17 telas e não encosta no casco nem no produto. */

/* O miolo respira 24px no celular e 40px do 601 pra cima (fonte: `.l-section`
   com padding lateral 2.5rem e @media max-width:600 → 1.5rem). O casco troca só
   em 901px, e este seletor (0,2,0) vence o dele (0,1,0) em QUALQUER largura —
   por isso os DOIS degraus são obrigatórios. Confere: em 1440 dá caixa em x=150
   com w=1140; em 390 dá x=24 com w=342. */
.lp-secao > .lp-container { --lp-respiro: 24px; }
@media (min-width: 601px) { .lp-secao > .lp-container { --lp-respiro: 40px; } }

/* NÃO existe padding-top de 150px/100px aqui. Na produção essa folga é do header
   fixo e mora no `.l-section-h`; o casco já reserva em
   `.lp-conteudo { padding-top: var(--lp-header-h) }` (100/140/150). Repetir dobra. */

/* ── tipografia do texto corrido ──────────────────────────────────────────
   Vale na prosa das páginas/posts, no bloco do 404 e no corpo dos comentários.
   Família, corpo (16px) e cor rgb(53,65,91) já vêm do body no casco.css; a
   entrelinha vem do `.lp-secao` acima. Aqui só o que a produção acrescenta.

   ⚠️ POR QUE `:where()` E NÃO `:is()` AQUI. Na produção estas regras são de
   ELEMENTO puro (`h1{}`, `p{}`, `a{}`, `ul{}`, `hr{}` do Impreza), peso (0,0,1)
   — de propósito, pra QUALQUER classe da própria página ganhar delas. É assim
   que o snippet do /status-do-pedido/ mantém o `.sp-h1` em 20px/peso 800 e o
   `.sp-meta` com 5px de margem em cima (medido). Escrever `.lp-prosa h1` daria
   peso (0,1,1) e INVERTERIA o resultado: o título do snippet saltaria pra
   44,4px e perderia a margem. O `:where()` zera o peso do escopo e devolve
   exatamente o (0,0,1) da produção, sem abrir mão do escopo. Já o botão de
   enviar, mais abaixo, é o caso contrário: lá o tema TEM que ganhar da classe. */

/* Títulos: peso 400, entrelinha 1.2, cor rgb(15,19,31), 24px de margem embaixo
   (medido nos dois contextos em ajuda/sobre/atendimento/404 e nos 4 posts). */
:where(.lp-prosa, .lp-404) :is(h1, h2, h3, h4, h5, h6) {
	margin: 0 0 24px;
	padding-top: 24px;
	line-height: 1.2;
	font-weight: 400;
	color: rgb(15, 19, 31);
}

/* O corpo do título é FLUIDO na produção — a mesma fórmula bate nos dois
   contextos medidos, então ela entra no lugar de dois valores fixos:
   1440 → 44,4 / 35,84 / 32,4 / 28,96 / 26,52 · 390 → 33,9 / 24,29 / 21,9 / 19,51 / 18,12 */
:where(.lp-prosa, .lp-404) h1 { font-size: calc(30px + 1vw); }
:where(.lp-prosa, .lp-404) h2 { font-size: calc(20px + 1.1vw); }
:where(.lp-prosa, .lp-404) h3 { font-size: calc(18px + 1vw); }
:where(.lp-prosa, .lp-404) h4 { font-size: calc(16px + 0.9vw); }
:where(.lp-prosa, .lp-404) h5 { font-size: calc(15px + 0.8vw); }
:where(.lp-prosa, .lp-404) h6 { font-size: calc(14px + 0.8vw); }

/* Parágrafo: 24px de margem embaixo no desktop, 16px no celular (medido). */
:where(.lp-prosa, .lp-404, .lp-comentarios) p { margin: 0 0 24px; }

/* A produção esconde parágrafo vazio — e o conteúdo do banco tem vários, sobra
   do construtor antigo (regra `p:empty{display:none}` do Impreza servido). */
:where(.lp-prosa, .lp-404, .lp-comentarios) p:empty { display: none; }

@media (max-width: 600px) {
	:where(.lp-prosa, .lp-404) :is(h1, h2, h3, h4, h5, h6) { padding-top: 16px; }
	:where(.lp-prosa, .lp-404, .lp-comentarios) p { margin-bottom: 16px; }
}

/* O respiro acima do título some quando ele abre o bloco ou quando vem logo
   depois do título do nível de cima. Não é teoria: o h4 que segue o h3 em
   /ajuda/ e o h3 que segue o h2 no post de notícias vieram SEM padding-top. */
:where(.lp-prosa, .lp-404) :is(h1, h2, h3, h4, h5, h6):first-child,
:where(.lp-prosa) h1 + h2,
:where(.lp-prosa) h2 + h3,
:where(.lp-prosa) h3 + h4,
:where(.lp-prosa) h4 + h5,
:where(.lp-prosa) h5 + h6 { padding-top: 0; }

/* Último bloco fecha sem margem — é o que faz o miolo de /favoritos/ dar 245px
   exatos no 1440 (150 + 43 + 24 + 28) e o do 404 dar 105,281px. */
:where(.lp-prosa, .lp-404, .lp-comentarios) :is(h1, h2, h3, h4, h5, h6, p, ul, ol, li):last-child {
	margin-bottom: 0;
}

/* Listas: recuo por margem (medido x=190 dentro do miolo em x=150), sem padding
   — o <li> começa na mesma borda da <ul>, marcador pra fora. */
:where(.lp-prosa) ul,
:where(.lp-prosa) ol { margin: 0 0 24px 40px; padding-left: 0; }
:where(.lp-prosa) ul { list-style-type: disc; }
:where(.lp-prosa) ol { list-style-type: decimal; }
:where(.lp-prosa) li { margin: 0 0 8px; }
:where(.lp-prosa) li > ul,
:where(.lp-prosa) li > ol { margin-top: 8px; margin-bottom: 8px; }

/* Marcador no rosa da marca. Não sai do medidor (ele não lê ::marker): a regra
   `ul li::marker{color:#CF1A53}` está no <style id="us-custom-css"> da produção.
   Lá ela vale SEM escopo, no site inteiro; aqui fica presa ao `.lp-prosa` de
   propósito — casco e produto são outros cartões e já têm o marcador deles. */
:where(.lp-prosa) ul li::marker { color: #CF1A53; }

/* Régua: fio de 1px na cor de borda do conteúdo (#e3e7f0), caixa de 1px de
   altura e 8px de margem em cima e embaixo (medido nas duas telas, dois contextos). */
:where(.lp-prosa) hr {
	box-sizing: content-box;
	height: 0;
	margin: 8px 0;
	border-style: solid;
	border-width: 0 0 1px;
	border-color: rgb(227, 231, 240);
}

/* Link do conteúdo: rgb(100,108,253), SEM sublinhado — a produção serve
   `a{text-decoration:none}` e a classe `links_underline` do <body> só desliga o
   sublinhado dos botões, não liga o dos links de texto (conferido no
   style.min.css servido, versão 8.33.1). O hover troca a cor pela do texto
   (`.no-touch a:hover{color:var(--color-content-link-hover)}` = #35415b);
   aqui o equivalente ao `.no-touch` é a media query de ponteiro. */
:where(.lp-prosa, .lp-comentarios) a {
	color: rgb(100, 108, 253);
	text-decoration: none;
}
@media (hover: hover) {
	:where(.lp-prosa, .lp-comentarios) a:hover { color: rgb(53, 65, 91); }
}

/* <strong>/<b> não ganham regra: o `bolder` do navegador dentro de um bloco de
   peso 400 já resolve em 700, que é o medido tanto no h3 quanto no p. */

/* ── /404/ ────────────────────────────────────────────────────────────────
   A produção serve só `div.page-404.align_center` com um h1 e um p. O resto da
   tipografia é a MESMA da fatia (h1 44,4/53,28 no 1440 e 33,9/40,68 no 390). */
.lp-404 { text-align: center; }

/* ── /favoritos/ ──────────────────────────────────────────────────────────
   Só o que difere da prosa: a produção centraliza o h2 e o p por estilo em
   linha e pinta o link de azul puro (`style="color: blue"`). */
.lp-favoritos .lp-prosa :is(h2, p) { text-align: center; }
.lp-favoritos .lp-prosa a { color: rgb(0, 0, 255); }

/* ── /rastrear-pedido/ — o formulário nativo do WooCommerce ───────────────
   Nada de widget: são `<input type="text">` e `<button type="submit">` do
   próprio Woo. O escopo `.lp-prosa` NÃO basta pra segurar o vazamento: page.php é
   provisoriamente o template de /carrinho/, /finalizar-compra/ e /minha-conta/
   (L5/L8/L7) e envolve o conteúdo delas neste mesmo `.lp-prosa`. Quem segura é o
   enfileiramento: functions.php só carrega esta folha nas 17 telas da fatia. */

/* Caixa: `min(48px, 10%)` reproduz os DOIS contextos de uma vez —
   1440: min(48, 114) = 48 · 390: min(48, 34,2) = 34,1875 (o medido). */
.lp-prosa .track_order {
	margin: 24px 0;
	padding: min(48px, 10%);
	box-shadow: rgba(0, 0, 0, .15) 0 5px 15px 0;
}

/* Linhas do formulário: empilhadas com 12px no celular; em duas colunas de 48%
   a partir de 768px (medido 501,109px = 48% dos 1044px de miolo, com 4% de
   folga entre elas; o corte 767/768 é o do Woo do Impreza servido). */
.lp-prosa .track_order .form-row { margin: 0 0 12px; }
/* A ÚLTIMA linha (a do botão) fecha sem margem — é o que faz a caixa branca dar os
   347,984px medidos no 1440 (238 → 538 de fim de conteúdo + 48 de padding) e os
   521,156px no 390. A produção zera com `.woocommerce .form-row:last-of-type`,
   peso (0,3,0); aqui o mesmo alvo com (0,4,0) pra ganhar também do @768 abaixo. */
.lp-prosa .track_order .form-row:last-of-type { margin-bottom: 0; }
@media (min-width: 768px) {
	.lp-prosa .track_order .form-row { margin-bottom: 24px; }
	.lp-prosa .track_order .form-row-first { float: left;  width: 48%; }
	.lp-prosa .track_order .form-row-last  { float: right; width: 48%; }
}
.lp-prosa .track_order .clear { clear: both; }

.lp-prosa .track_order label {
	display: block;
	font-weight: 700;
	margin-bottom: 4.8px;
}

/* Campo: 48px de altura (≥44 do contrato, sem correção) e 16px de corpo
   (o base.css já garante, e é o que impede o zoom do iOS no foco).
   SEM borda: a produção serve `--inputs-border-width: 0px` — é o que fecha a
   altura medida em 48px exatos (48 de entrelinha + 0 de borda). */
.lp-prosa .track_order .input-text {
	width: 100%;
	min-height: 48px;
	line-height: 48px;
	padding: 0 16px;
	border: 0;
	border-radius: 4.8px;
	background: rgb(242, 244, 247);
	color: rgb(53, 65, 91);
	box-shadow: rgba(0, 0, 0, .08) 0 1px 0 0 inset;
}

/* ── botão de enviar — vale no "Rastrear" e no "Ver meus pedidos" ─────────
   Medido IDÊNTICO nas duas telas e nos dois contextos: 51,1875px de altura
   (16 + 19,2 + 16), raio 8px e o degradê da marca a 90deg (= --lp-grad).

   ⚠️ A especificidade é obrigatória. O snippet do /status-do-pedido/ imprime
   `.sp-btn{padding:14px;font-size:15px;font-weight:800;border-radius:13px;
   background:linear-gradient(92deg,...)}` DENTRO do corpo da página, depois
   desta folha. Na produção o tema ganha assim mesmo, porque o Impreza usa
   `button[type=submit]` (0,2,1) contra a classe (0,1,0) — e o botão do snippet
   é mesmo `<button class="sp-btn" type="submit">`. Os seletores abaixo têm o
   mesmo peso; escrever só `.button` deixaria a tela sair com padding 14 e
   raio 13, divergência visível. */
.lp-prosa button[type="submit"],
.lp-prosa input[type="submit"],
.lp-prosa .button {
	display: inline-block;
	padding: 16px 32px;
	margin-bottom: 16px;
	border: 0;
	border-radius: 8px;
	background-image: var(--lp-grad);
	color: #fff;
	font-size: 16px;
	font-weight: 700;
	line-height: 1.2;
	text-align: center;
	cursor: pointer;
}
/* No celular o botão do Woo vira barra cheia (medido 273,625px = 100% da linha,
   com 4px de margem em cima e embaixo). O do snippet NÃO entra aqui: ele fica
   inline-block com os 16px, como a produção mostra. */
@media (max-width: 600px) {
	.lp-prosa .track_order .form-row .button {
		display: block;
		width: 100%;
		margin: 4px 0;
	}
}

/* ── /status-do-pedido/ — o campo do snippet (CONTROLE vence o gabarito) ──
   Medido na produção: `input[name=sp_ctt]` 282×54 com font-size **15px** — abaixo
   dos 16px que a regra mobile da casa exige, e é o bastante pro iOS dar zoom no
   foco. Pela fronteira do CLAUDE.md, em CONTROLE a regra v2 vence a produção
   (docs/contrato-mobile.md, Área 10: "font-size 15px → ≥16px (auto-zoom iOS)").
   O snippet imprime `.sp-form input{font-size:15px}` (0,1,1) num <style> DENTRO
   do corpo, depois desta folha — o base.css (0,0,1) perde no peso e o mesmo peso
   perderia na ordem. Daí os dois seletores abaixo com uma classe a mais. */
.lp-prosa .sp-form input { font-size: 16px; }
/* Mesmo motivo no foco: `.sp-form input:focus` (0,2,1) do snippet apaga o outline
   e deixa como único indicador a borda #15ACF4 (2,55:1 contra o branco, abaixo dos
   3:1 do critério 1.4.11). Este seletor tem (0,3,1) e devolve o anel do tema. */
.lp-prosa .sp-form input:focus-visible {
	outline: 2px solid rgb(15, 19, 31);
	outline-offset: 2px;
}

/* ── /blog/ e categorias — a grade ────────────────────────────────────────
   `.lp-blog` serve as três telas: a produção desenha /blog/, /box/ e
   /uncategorized/ exatamente igual. */

/* ⚠️ O HTML da produção traz `style="--gap:1.5rem"` (24px) e isso é isca: o
   COMPUTADO é 48px nos dois contextos — o Impreza dobra a variável. Duas
   colunas de 546px + 48 de folga fecham os 1140 do miolo. O corte de 2 para 1
   coluna é 601px, MEDIDO na produção viva em três larguras (Playwright, 09/ago):
   390 → "342px" (1 col) · 640 → "256px 256px" · 900 → "386px 386px". Não há
   corte de tablet: de 601 pra cima são sempre 2 colunas. */
.lp-blog {
	display: grid;
	grid-template-columns: 1fr;
	gap: 48px;
	margin: 0;
	padding: 0;
}
@media (min-width: 601px) { .lp-blog { grid-template-columns: repeat(2, 1fr); } }

/* A capa acompanha a coluna (546px em 1440, 342px em 390) guardando a razão do
   arquivo. As 4 capas têm naturais diferentes — 600×400, 375×258, 376×258 e
   546×375 — e as 8 caixas medidas batem com a razão de cada uma (600/400 = 1,5 →
   546/364 = 1,5). Por isso `width:100%; height:auto`, sem aspect-ratio e sem
   object-fit: não há corte em nenhuma das 4 capas × 2 contextos.
   O `display:block` na imagem faz a caixa da foto casar exata com ela
   (medido: wrapper 546×364 == imagem 546×364), sem folga de linha de base.
   ⚠️ Na produção esse mesmo link mede 546×20 / 342×20 (a foto fica fora da caixa
   dele). Aqui ele abraça a foto de propósito: é a metade visual do card virando
   alvo único, junto com o esticão do título logo abaixo. */
.lp-blog-foto { display: block; margin: 0 0 8px; }
.lp-blog-foto img { display: block; width: 100%; height: auto; }

/* Título do cartão: 16px/19,2px peso 400 nos DOIS contextos (não escala no
   celular) e sem sublinhado, apesar da classe `links_underline` do <body>. */
.lp-blog-titulo {
	margin: 0;
	padding: 0;
	font-size: 16px;
	line-height: 19.2px;
	font-weight: 400;
	color: rgb(15, 19, 31);
}
.lp-blog-titulo a { color: inherit; text-decoration: none; }

/* CONTROLE (contrato mobile, Área 03: "card inteiro vira 1 alvo só — hoje 2 links
   de 20px empilhados"). O link do título estica por cima do card inteiro: alvo de
   342×236+ em vez dos 19,2px de altura da linha de texto, e nenhum pixel muda,
   porque a camada é transparente. O link da foto sai da ordem de tabulação no
   HTML (tabindex="-1" aria-hidden="true"), o que mata a parada duplicada com o
   mesmo nome e o mesmo destino. `.lp-blog-item` não ganha mais nada: margem e
   recuo medidos são 0 e a altura vem do estica natural da grade. */
.lp-blog-item { position: relative; }
.lp-blog-titulo a::after { content: ""; position: absolute; inset: 0; }

/* `.lp-paginacao` não tem gabarito: a produção nunca a mostra (4 posts, 10 por
   página), então não há número pra copiar. O que entra aqui é só CONTROLE — os
   44px de alvo da regra mobile da casa — pra ela não nascer com 19,2px de altura
   herdados da entrelinha do miolo no dia em que o blog passar de 10 posts. */
.lp-paginacao .page-numbers {
	display: inline-block;
	min-width: 44px;
	min-height: 44px;
	line-height: 44px;
	text-align: center;
}

/* ── comentários do post ──────────────────────────────────────────────────
   A faixa é a MESMA `.lp-secao` do texto (mesmos 64/40 e 24, sem fundo e sem
   borda). Números medidos na tela postSabores, nos dois contextos. */

/* Título: h4 (mesma fórmula fluida da prosa) com 1em de margem embaixo —
   28,96px no 1440 e 19,51px no 390, que é o medido. */
.lp-comentarios-titulo {
	margin: 0 0 1em;
	padding-top: 0;
	font-size: calc(16px + 0.9vw);
	line-height: 1.2;
	font-weight: 400;
	color: rgb(15, 19, 31);
}
.lp-comentarios-titulo > span { display: inline-block; vertical-align: top; }
.lp-comentarios-titulo a { border-bottom: 1px dotted; }

/* Lista: largura cheia do miolo, sem recuo e sem marcador (medido 1140/342). */
.lp-comentarios-lista {
	margin: 0 0 16px;
	padding-left: 0;
	list-style: none;
}
.lp-comentario {
	margin: 0;
	padding: 16px 0;
	list-style: none;
}

/* Cabeçalho do comentário: 50px de altura, com o avatar preso à esquerda pela
   posição estática dele (é como o Impreza faz — sem left/top declarados). */
.lp-comentario-meta {
	position: relative;
	line-height: 25px;
	margin-bottom: 9.6px;
}
.lp-comentario-meta img {
	position: absolute;
	width: 50px;
	border-radius: 50%;
}
.lp-comentario-autor { font-weight: 700; }
.lp-comentario-meta img ~ .lp-comentario-autor,
.lp-comentario-meta img ~ .lp-comentario-data { margin-left: 60px; }

/* Quando quem comentou é o autor do post, o nome sai num selo roxo. A produção
   resolve `--color-content-primary-grad` num tom CHAPADO, #51289F — não é o
   degradê da marca; o medido confirma background-color rgb(81,40,159). */
.lp-comentario.bypostauthor .lp-comentario-autor span {
	padding: 0 4.8px;
	background: rgb(81, 40, 159);
	color: #fff;
}

.lp-comentarios .lp-comentario-data {
	vertical-align: top;
	font-size: 12.8px;
	color: inherit;
	opacity: .66;
}

.lp-comentario-texto { margin-bottom: 9.6px; }
.lp-comentario-texto > *:last-child { margin-bottom: 0; }

/* O link "Acesse para responder" que a produção serve é o `comment-reply-login`
   do core, medido em 16px/28px cheios — NÃO leva o 0.8em nem a opacidade 0,66
   que o Impreza dá ao `comment-reply-link` (classe diferente, outro estado). */

/* O formulário de comentar só aparece pra quem está LOGADO, e a captura da
   produção foi toda deslogada — não há medida dele. Por isso não ganha desenho
   nenhum: entra só o alvo de toque da regra mobile da casa, que o base.css já dá
   ao botão (min-height 44px) mas não dá a campo de texto nem a textarea. */
.lp-comentarios input,
.lp-comentarios textarea { min-height: 44px; }

/* ── CONTROLE (regra da casa; a produção não tem) ─────────────────────────
   Foco visível de teclado em tudo que se clica nesta fatia. Fio de 2px em
   rgb(15,19,31), a cor de título do próprio tema: 18,4:1 contra o branco da
   página, bem acima dos 3:1 do critério 1.4.11. Fica fora da caixa (offset),
   então aparece até em cima do botão do degradê. Nenhum pixel muda em repouso. */
.lp-prosa a:focus-visible,
.lp-comentarios a:focus-visible,
.lp-blog a:focus-visible,
.lp-prosa button:focus-visible,
.lp-prosa input:focus-visible {
	outline: 2px solid rgb(15, 19, 31);
	outline-offset: 2px;
}

/* O header é fixo (150/140/100px): sem isto, pular pra um comentário ou pro
   "#respond" deixa o alvo escondido atrás dele (critério 2.4.11). */
.lp-comentario,
.lp-comentarios-login { scroll-margin-top: var(--lp-header-h); }
