/* =========================================================================
   site.css — páginas de conteúdo: entrada, landing, legais.
   Depende do base.css (paleta, tipo de letra, botões), que vem antes.
   A app tem o seu próprio app.css; aqui nada é da aplicação.
   ========================================================================= */

body.site{background:var(--stripe);}

/* ---------- cabeçalho ---------- */
/* ==========================================================================
   CABEÇALHO E RODAPÉ — TRANSVERSAIS AOS TRÊS SITES
   Este bloco é IGUAL no Portal, nas Candidaturas e no Descontos (lá vive no
   private/rodape.php, porque esse site não carrega CSS externo). Se mexeres
   aqui, mexe nos três — é a mesma regra do base.css.

   O conceito manda no desenho: o MundoÚtil é uma porta de entrada para várias
   valências, e cada valência é um site à parte. O que diz que são a mesma casa
   é a moldura: a mesma barra de marca em cima e o mesmo rodapé em baixo, com a
   mesma informação transversal. O que muda de site para site é só o miolo — e,
   na barra de cima, o nome depois da marca e os links próprios.

   Antes disto, os três tinham três rodapés diferentes: o portal em quatro
   colunas, as Candidaturas em quatro mas com outras (Ferramenta/MundoÚtil, sem
   contacto), e o Descontos uma linha centrada com a legenda das etiquetas pelo
   meio. Quem passava de um para o outro não via a mesma casa.
   ========================================================================== */

/* ---------- A MEDIDA DA CASA ----------
   Uma só largura para os três sites: 1400px de teto, 98% do ecrã, e um recuo
   fixo de 16px no telemóvel (1% de 390px são 4px, e a essa distância o texto
   encosta ao vidro). É a medida que o miolo do Descontos e a app das
   Candidaturas já usavam, e é ela que faz a barra de marca, o conteúdo e o
   rodapé começarem e acabarem na MESMA VERTICAL em qualquer página dos três
   sites.

   A moldura esteve nos 1080: ao passar do portal para um tema, o conteúdo
   saltava 107px para fora da moldura que o devia enquadrar — o detalhe que
   mais desmentia a ideia de ser tudo a mesma casa. */
.site-top,.fundo-cols{max-width:1400px;width:98%;margin-left:auto;margin-right:auto;}
@media (max-width:700px){
  .site-top,.fundo-cols{width:auto;margin-left:16px;margin-right:16px;}
}

/* ---------- os valores da moldura são DELA ----------
   `--m-*` e não os tokens da página: as páginas do Descontos declaram conjuntos
   de tokens diferentes uns dos outros (a de categoria não tem `--fs-small`, a
   404 não tem token nenhum) e um `var()` sem valor faz a declaração inteira ser
   ignorada — era por isso que ali a moldura saía com a letra do browser (Times
   New Roman) e sem tamanhos. Assim a moldura é a mesma em qualquer página, em
   qualquer dos três sites, e não depende do que a página trouxer. */
.site-top,.site-fundo{
  --m-ink:#111;--m-ink-2:#555;--m-ink-3:#6b6b6b;--m-line:#e8e8e8;--m-alt:#fafafa;
  --m-small:12px;--m-tiny:11px;
  font-family:'Inter',system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5;
}

/* Aviso posto no painel de administração (definição `aviso_topo`), acima de
   tudo o resto e com a cor de atenção do sistema.

   ⚠️ A MESMA regra está no app.css — o aviso sai nas duas metades da casa (a
   moldura do vista.php e a app), e as duas folhas nunca são carregadas juntas.
   Ao mexer numa, mexer na outra. Não vai para o base.css de propósito: esse é o
   ficheiro comum aos três projetos, e isto é só das Candidaturas. */
.aviso-app{background:var(--ambar-c);border-bottom:1px solid var(--ambar-b);color:var(--ambar-t);
  padding:10px 20px;font-size:var(--fs-small);font-weight:600;text-align:center;}

/* ---------- barra de marca (topo) ---------- */
.site-top{padding:18px 0;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;}
/* ---------- a marca é o LOGO ----------
   O logo do MundoÚtil — globo mais palavra, num ficheiro só:
   `public/icons/logo-mundoutil.svg`. Substituiu o risco de 4px em degradê e o
   texto "<Tema> · MundoÚtil": a barra de marca passa a ser **a mesma** nos três
   sites, e quem chega vê a casa antes do tema.

   O logo é SEMPRE o ficheiro. Não há versão desenhada em CSS nem reconstruída a
   partir de peças — enquanto o ficheiro não existir sai o nome em texto (ver o
   `marca_logo()` no PHP), que é honesto, e não um logo parecido, que não é.

   A REGRA DO LOGO: à volta dele fica sempre livre metade do diâmetro do globo.
   O globo é tão alto como o logo (`--marca-h`), logo são `--marca-h / 2` —
   14px nos 28px de agora. Não está num `padding` porque já vem de três sítios,
   e é isso que mantém o logo alinhado com o conteúdo em vez de recuado: em cima
   e em baixo, dos 18px da barra; à esquerda, da goteira da página (14px a
   1400px, 16px em telemóvel); à direita, da margem aqui em baixo. **Ao mexer
   nesses números, confirmar que nenhum desce de `--marca-h/2`.**

   O nome vai em TEXTO e não dentro da imagem: fica na letra da casa, escala com
   a página, é selecionável e um leitor de ecrã lê-o (por isso o globo leva
   `alt=""` — o nome está ao lado, e repetido seria lido duas vezes). */
.marca{--marca-h:28px;display:inline-flex;align-items:center;
  text-decoration:none;border:none;margin-right:calc(var(--marca-h) / 2);}
/* A altura manda, a largura vem do ficheiro: o logo é um bloco só (globo mais
   palavra) e a proporção é dele. */
.marca-logo{height:var(--marca-h);width:auto;display:block;}
/* O nome em texto é o que aparece ENQUANTO o ficheiro do logo não existir (ver
   o marca_logo() no PHP). Não é o logo nem tenta parecer-se com ele — é o nome
   da casa, na letra da casa. */
.marca-nome{font-size:calc(var(--marca-h) * 0.60);font-weight:800;letter-spacing:-.02em;
  color:var(--m-ink);line-height:1;white-space:nowrap;}
/* ---------- A SETA DE VOLTAR ----------
   A classe é `voltar-atras` e não `voltar`: essa já existe no Descontos, no
   `public/confirmar.php`, e é um LINK ("Voltar ao site") com estilo próprio.
   Hoje não colidem — essa página não carrega a moldura — mas no dia em que
   carregasse, o link saía vestido de botão.

   Parte da moldura, e por isso este bloco existe nas MESMAS QUATRO CÓPIAS que
   o resto dela — mexer numa, mexer nas quatro.

   É um `<button>` e não um link: o que faz é `history.back()`, não vai a
   endereço nenhum, e diz só "Voltar" porque não sabe (nem promete) o destino.
   Nasce com `hidden` e é o js/voltar.js que o mostra, e só quando há mesmo
   página anterior — ver o cabeçalho desse ficheiro.

   Aparece em todas as páginas que levam esta barra, o que exclui exatamente
   uma: a INICIAL DO PORTAL, que não tem barra (`'barra' => false`) porque é o
   sítio de onde tudo parte e não há nada acima dela.

   FICA À DIREITA, no fim da barra, e quase sempre é o ÚNICO elemento à
   direita: os temas saíram da barra dos três sites por causa dela — um atalho
   para outro site encostado a um botão de voltar são duas coisas parecidas a
   prometer viagens diferentes. Continuam no rodapé de todas as páginas.

   Encosta-a o `space-between` da barra, sem mais nada: a barra tem hoje DOIS
   filhos — o logo e a seta —, e é o que o `space-between` serve. Não é preciso
   `margin` nenhuma.

   A BARRA NÃO TEM NAVEGAÇÃO, em nenhuma página de nenhum dos três sites, e as
   regras `.site-nav` que aqui viviam foram removidas por já não terem quem as
   usasse. O último link a sair foi o "Todos os descontos" das páginas de dentro
   do Descontos; a volta à lista está lá no corpo da página, no `.db-back`.
   Se voltar a haver navegação aqui, volta com essa decisão revista.

   Os 24px de alvo de toque saem do `padding` mais a linha de 12px; a margem
   negativa devolve-os, para a seta não fazer a barra crescer — o mesmo padrão
   do botão de cookies no rodapé. */
.voltar-atras{font:inherit;font-size:var(--m-small);font-weight:600;color:var(--m-ink-2);
  background:none;border:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;
  padding:6px 0;margin:-6px 0;}
.voltar-atras:hover{color:var(--m-ink);}
/* O display:inline-flex de cima ganha ao [hidden] do browser, e a seta via-se
   sempre, mesmo sem para onde voltar. Quem a mostra é o voltar.js. */
.voltar-atras[hidden]{display:none;}
/* A seta é decorativa: o nome do botão está no texto ao lado, e um leitor de
   ecrã que leia "seta para a esquerda Voltar" está a ler duas vezes a mesma
   coisa. */
.voltar-atras i{font-style:normal;line-height:1;}



/* ---------- rodapé ---------- */
.site-fundo{border-top:1px solid var(--m-line);background:var(--m-alt);padding:18px 0 14px;margin-top:32px;}
.fundo-cols{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:22px;}
.fundo-cols b{display:block;font-size:var(--m-small);margin-bottom:7px;color:var(--m-ink);}
.fundo-cols b a{font-size:inherit;font-weight:inherit;color:inherit;margin:0;padding:0;border:none;}
.fundo-cols p{font-size:var(--m-small);color:var(--m-ink-2);line-height:1.55;margin:0;max-width:34ch;}
.fundo-cols a{display:block;font-size:var(--m-small);color:var(--m-ink-2);text-decoration:none;padding:5px 0;font-weight:500;border:none;}
.fundo-cols a:hover{color:var(--m-ink);}
/* O botão "escolha de cookies", na última linha ao lado do ©. É um <button> e
   não um link porque não vai a sítio nenhum — reabre o aviso. Esteve na coluna
   Legal e era o quarto item da coluna mais alta: era ele que definia a altura
   das quatro. Aqui é discreto e continua em TODAS as páginas, que é o que
   importa — o consentimento é por origem, e a política de cookies (que é uma
   só, no portal) não tem como mudar a escolha feita noutro site.

   Os 24px de alvo de toque saem do padding vertical mais a linha de 11px; a
   margem negativa devolve-os, para a linha do fim não crescer. */
.fundo-fim button{font:inherit;color:var(--m-ink-3);background:none;border:none;padding:7px 0;
  margin:-7px 0;cursor:pointer;text-decoration:underline;text-decoration-color:var(--m-line);
  text-underline-offset:2px;}
.fundo-fim button:hover{color:var(--m-ink-2);}
.fundo-cols a[aria-current="page"]{color:var(--m-ink);}
/* Vive DENTRO da coluna do Contacto, encostada ao FUNDO dela: era uma linha a
   atravessar o rodapé e somava a sua altura à das colunas, quando a coluna do
   Contacto tinha uma linha só e espaço de sobra por baixo.

   Ao fundo e não debaixo do email, porque a 14px do email lia-se como a terceira
   linha da mesma lista — e é outra coisa: uma é o contacto, a outra é a nota de
   rodapé do site. O vazio da coluna pelo meio é o que faz a separação. */
/* Encostada ao fundo era demasiado abaixo: fica à altura da ÚLTIMA linha da
   coluna Legal (o "Cookies"), e é pelo FUNDO: a última linha da nota — a do
   botão — acaba na mesma linha de base do "Cookies", com a primeira linha acima
   dela. Os 14px saem de uma medição do retângulo dos glifos, não do olho, e
   contam com o padding do botão (que tem 7px por cima e uma margem negativa a
   devolvê-los). Se a coluna Legal deixar de ter três links, ou a nota deixar de
   ter duas linhas, este 14 deixa de bater certo. */
.fundo-fim{font-size:var(--m-tiny);color:var(--m-ink-3);line-height:1.6;
  margin:0;padding-top:14px;}

/* Num telemóvel, quatro colunas de 26px de gap ficam com uma palavra por linha:
   duas a duas, e a coluna do texto (a primeira) atravessa as duas. */
@media (max-width:820px){
  .fundo-cols{grid-template-columns:1fr 1fr;gap:22px;}
  .fundo-cols > div:first-child{grid-column:1 / -1;}
}
@media (max-width:420px){
  .fundo-cols{grid-template-columns:1fr;}
  .fundo-cols > div:first-child{grid-column:auto;}
}

/* ---------- corpo ---------- */
/* O miolo entra na MEDIDA DA CASA: a mesma largura da barra de marca e do
   rodapé, e a mesma do miolo dos outros dois sites. As páginas de leitura — as
   políticas, os termos — continuam estreitas, e isso é legibilidade e não
   desalinhamento: 1400px de texto corrido não se lê. */
.site-main{max-width:1400px;width:98%;margin:0 auto;padding:8px 0 32px;}
body.site-estreito .site-main{max-width:620px;}
@media (max-width:700px){ .site-main{width:auto;margin-left:16px;margin-right:16px;} }

.cartao{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-lg);padding:26px 28px;}
.cartao + .cartao{margin-top:18px;}

h1.titulo{font-size:var(--fs-h1);font-weight:300;letter-spacing:-.04em;line-height:1.02;margin:18px 0 14px;}
h1.titulo span{font-weight:800;}
.lead{font-size:var(--fs-body);color:var(--ink-2);font-weight:400;line-height:1.6;margin:0 0 22px;max-width:60ch;}
/* O TÍTULO DE SECÇÃO É O MESMO DA APP. Era 11px em maiúsculas muito espaçadas
   com uma régua fina a atravessar até à direita — um gesto bonito, usado seis
   vezes na mesma página, que a essa altura já não é gesto nenhum: é a moldura
   de um template.

   Passa a ser o que a app usa nas faixas: caixa de frase, com uma marca curta
   de 26px em tinta por cima. Diz onde a secção começa sem cortar a página ao
   meio, e as duas metades do produto — a página pública e a aplicação — passam
   a ler-se como o mesmo desenho.

   ⚠️ O QUE SE PARTILHA COM A APP É A LÍNGUA, NÃO O CORPO DE LETRA. Isto esteve
   a 15px, os mesmos da `.faixa-nome`, e aqui não funcionava: os sub-títulos
   desta página (`.prova h3`) são 0,95rem, ou seja **15,2px** — o sub-título era
   maior do que a secção que o encabeça, e os dois igualmente a 700. A marca de
   26px é subtil de propósito e não chega a desfazer um empate desses; o
   resultado era uma pilha de títulos todos do mesmo tamanho.

   Na app os 15px estão certos porque o título da PÁGINA são 22px e uma faixa a
   20 competia com ele. Aqui o herói são 30→52px e há três níveis para acomodar:
   herói, secção, sub-título. Os 20px dão o passo que faltava (20 → 15,2 → 14 do
   corpo) sem se aproximarem do herói.

   A regra, se aparecer um sítio novo: a marca de 26px e a caixa de frase são
   iguais em toda a casa; o TAMANHO é o que a página precisar para haver degrau
   entre um título e o que vem por baixo dele. */
/* ⚠️ A ESCALA DA PÁGINA — cinco tamanhos e DUAS espessuras, e nada fora disto.
   Medido antes: 26 elementos a peso 700 em `--ink` e ONZE tamanhos entre 12 e
   20px, a maior parte a menos de 1px uns dos outros (0.85rem, 0.88rem, 0.92rem,
   0.95rem, 1rem, 1.05rem — 13,6 · 14,08 · 14,72 · 15,2 · 16 · 16,8). Isso não é
   uma escala, é ruído: nenhum daqueles saltos se lê como um nível, e o 700 em
   tinta cheia repetido 26 vezes tirava o destaque a todos ao mesmo tempo.

   O TAMANHO faz a hierarquia e a COR faz o destaque. As espessuras são duas:

   | nível                    | tamanho             | peso | cor        |
   |--------------------------|---------------------|------|------------|
   | herói                    | `--fs-h1` (30→52)   | 300  | `--ink`    |
   | secção (`h2` + marca)    | 1.25rem (20)        | 600  | `--ink`    |
   | sub-secção (`h3`)        | `--fs-h2` (15)      | 600  | `--ink`    |
   | corpo                    | `--fs-body` (14)    | 400  | `--ink-2`  |
   | legenda, nota, pastilha  | `--fs-small` (12)   | 400+ | `--ink-2/3`|

   O corpo passou de `--ink` para `--ink-2` (#555 sobre branco, 7.4:1 — folgado
   para AAA), e é essa a mudança que mais alivia a página: o texto corrido deixa
   de competir com os títulos, e o que fica em tinta cheia — títulos, `<b>` de
   entrada e links — destaca-se por COR e não por mais uma espessura.

   ⚠️ Os MOCKS ficam de fora desta escala e mantêm o 700: `.dcard`, `.demo-*`,
   `.demo-lembrete`, `.p-arte`, `.mform-*` são pedaços de interface, e a interface tem a
   escala dela (um cargo num cartão é 700 na app). Se algum dia estas regras
   passarem a genéricas, é preciso re-afirmar o 700 lá dentro. */
/* ---------- O TÍTULO DE SECÇÃO: O PAR, E NÃO UMA MARCA ----------
   ⚠️ AQUI ESTEVE UMA MARCA DE 26px EM TINTA por cima do título, e saiu. Era o
   que abria cada secção desta página, e o problema dela é o que um traço de
   26px é: um risco curto, sem relação com nada — nem chega à largura do título
   nem é um sinal, e repetido de secção em secção lê-se como sujidade na página.
   O que ela vinha corrigir (a régua a atravessar a página de bordo a bordo, a
   assinatura do painel de template) continua corrigido: não volta régua
   nenhuma.

   O QUE MARCA A SECÇÃO É O PAR TIPOGRÁFICO DA CASA — leve com uma parte a 800.
   É a assinatura do hero do mundoutil.pt, e não é nova aqui: o `.app-header`
   da app já a usa a 22px, que é a mesma ideia — o par é a assinatura, o TAMANHO
   é o que cada sítio precisar. Um título assim não precisa de nenhum sinal por
   cima para se ver que uma secção começou: o contraste entre os dois pesos faz
   isso melhor do que 26px de tinta, e sem acrescentar uma peça à página.

   Três consequências:

   - A metade a 800 vai num `<b>` (e não num `<span>`): o `.p-num` das paragens
     do /como-funciona.php É um `<span>` dentro de um `<h2>`, e um seletor por
     `span` punha o número da estação a 800.
   - O tamanho sobe de 1.25rem para 1.4rem. A 20px o peso 300 lê-se magro, e o
     degrau para a sub-secção (15px) ficava curto para dois pesos tão próximos.
     Continua muito abaixo do herói (30→52px), que é quem manda na página.
   - A folga por cima sobe de 44 para 52px: era a marca que dizia "começou
     outra coisa", e sem ela é o branco que o diz. */
.site-main h2{font-size:1.4rem;font-weight:300;letter-spacing:-.025em;text-transform:none;
  color:var(--ink);margin:52px 0 18px;position:relative;line-height:1.25;}
.site-main h2 b{font-weight:800;color:var(--ink);}
.site-main h3{font-size:var(--fs-h2);font-weight:600;letter-spacing:-.01em;margin:22px 0 8px;}
.site-main p, .site-main li{line-height:1.65;color:var(--ink-2);}
/* O `<b>` dentro de texto corrido é uma ENTRADA de frase, não um segundo
   título: ganha a tinta cheia (que o corpo à volta já não tem) e fica-se pelos
   600. A 700 sobre um corpo a #555 lia-se como um nível de título a mais.
   Os mocks têm as suas próprias regras, mais específicas, e mantêm o 700. */
.site-main b, .site-main strong{font-weight:600;color:var(--ink);}
.site-main p{margin:0 0 14px;}
.site-main ul, .site-main ol{margin:0 0 16px;padding-left:22px;}
.site-main li{margin-bottom:7px;}
.site-main a{color:var(--ink);font-weight:600;text-decoration:underline;text-decoration-color:var(--ink-3);text-underline-offset:2px;}
/* Um <a class="btn"> tem de continuar a parecer botão: a regra de cima é mais
   específica (.site-main a = 0,1,1) do que .btn-primary (0,1,0), e sem isto o
   texto ficava tinta sobre tinta — um retângulo negro sem letras. */
.site-main a.btn{text-decoration:none;}
.site-main a.btn-primary{color:var(--bg);}
.site-main a.btn-ghost{color:var(--ink-2);}
.site-main a.btn-ghost:hover{color:var(--ink);}
.site-main small{color:var(--ink-soft);}
.subtil{color:var(--ink-2);font-size:var(--fs-body);}

/* ---------- caixa de entrada no hero ---------- */
/* À imagem do `.db-hero-nl` do mundoutil.pt: caixa encostada ao texto do hero,
   com o formulário curto lá dentro.

   ⚠️ O FUNDO É BRANCO, E NÃO O `--row-alt` DE LÁ. Na inicial esta caixa fica
   IMEDIATAMENTE ACIMA do mock em destaque, que é `--row-alt` com um contorno —
   e o cinzento de lá é estrutural, é o que faz os cartões brancos parecerem
   POUSADOS numa aplicação (ver o `.demo-destaque`). Com o mesmo fundo e uma
   linha de 1px cada uma, as duas liam-se como dois andares do mesmo objeto, e o
   pior dos dois lados: a caixa onde se escreve o email ficava a parecer parte
   do quadro que tem "EXEMPLO" escrito na coroa.

   O cinzento é do mock; esta fica branca sobre a página, com a mesma linha de
   1px. O que lhe dá presença não é o fundo — é o campo, o rótulo e o único
   botão a tinta cheia acima da dobra.

   Foi tentado o contrário, um contorno de 1.5px em TINTA à volta da caixa:
   resolvia a confusão e trazia duas coisas más — um retângulo preto a competir
   com o título do herói, e um gesto que não existe em mais lado nenhum da casa
   (a régua de 1.5px em tinta marca uma FAIXA, não emoldura uma caixa).

   A folga por baixo do herói subiu de 10 para 26px pela mesma razão: a caixa
   acabava a 11px do quadro, e dois objetos a essa distância leem-se como um. */
.caixa-entrada{
  background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-md);
  padding:20px 22px;align-self:start;
}
/* A hierarquia da caixa estava invertida: o título a `--fs-h3` (13px), os
   parágrafos de apoio a 0.88rem (14px, o `.subtil` geral) e o botão a 12px —
   ou seja, o texto de apoio era o maior elemento da caixa e tudo se lia ao
   mesmo peso. O título sobe a 15px e o apoio desce a 12px, que é a medida do
   botão e da linha do consentimento; as margens acompanham. */
.caixa-entrada h3{margin:0 0 5px;font-size:var(--fs-h2);font-weight:600;letter-spacing:-.01em;}
.caixa-entrada .subtil{margin:0 0 12px;font-size:var(--fs-small);line-height:1.5;}
.caixa-entrada .aviso{margin-bottom:12px;font-size:var(--fs-small);}
.caixa-entrada code{display:inline-block;margin-top:4px;}
/* O selo "Gratuito": uma placa que se SOBREPÕE à caixa, pousada no canto de
   cima e a cavalo no contorno (metade fora, metade dentro). Tinta cheia, letra
   branca a 800, e à esquerda a barra de 6px com o degradê dos pastéis da
   marca (a mesma que abre o herói). É a resposta à primeira pergunta de quem
   chega, no sítio onde se decide experimentar. Direita e com o canto de 4px
   dos chips da casa. (Recusados: a pastilha `.db-tag` pastel e um selo
   pequeno na linha do título, que passavam despercebidos; o verde cheio, que
   é cor de estado; e um autocolante inclinado com o degradê como fundo, que
   era infantil.) */
.caixa-entrada{position:relative;}
.entrada-topo{margin:0 0 5px;}
.entrada-topo h3{margin:0;}
.selo-gratuito{position:absolute;top:0;right:22px;transform:translateY(-50%);
  display:inline-flex;align-items:center;height:40px;padding:0 20px 0 26px;border-radius:4px;
  background:linear-gradient(180deg,var(--rosa-c),var(--lilas-c),var(--verde-c),var(--azul-c)) left/6px 100% no-repeat,var(--ink);
  color:#fff;font-size:var(--fs-h2);font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  white-space:nowrap;}
/* O alvo de um #entrar não fica colado ao topo da janela. */
.caixa-entrada:target{scroll-margin-top:24px;}

/* ---------- entrada ---------- */
/* ⚠️ O CAMPO E O BOTÃO SÃO OS DA CASA, e não uma medida só deles.
   Foram os dois maiores: o campo a 14px de texto com 12/14 de recuo (~44px de
   alto) e o botão a 14px de recuo vertical (~41px), quando TODOS os campos dos
   dois sites são 12px de texto com 9/12 e 37px de altura mínima (a receita do
   `.db-nl-field` do mundoutil.pt, escrita no app.css) e TODOS os botões são o
   `.btn` a 10/20. Numa caixa que já tinha o título a 15px e o apoio a 12,
   ficavam a ser os dois elementos mais gordos do ecrã — e a caixa lia-se como
   um formulário de outro sítio colado na página.

   A força deste botão não vem de ser mais alto: vem de ser o único a tinta
   cheia, à largura toda e sozinho. Isso não se perde ao trazê-lo à medida.

   Ao mexer aqui, o valor a copiar é o do app.css, que é onde a receita vive. */
.form-entrada{display:flex;flex-direction:column;gap:10px;margin-top:6px;}
.form-entrada label{display:block;margin-bottom:5px;
  font-size:var(--fs-label);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);}
.form-entrada input[type=email], .form-entrada input[type=text]{
  width:100%;padding:9px 12px;min-height:37px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font-family:var(--font);font-weight:400;font-size:var(--fs-small);background:var(--bg);color:var(--ink);}
/* O foco escurece a linha, como nos campos da app — não engorda o contorno. */
.form-entrada input:focus{outline:none;border-color:var(--ink);}
/* Só o que o `.btn` não sabe: que aqui ocupa a linha toda e centra o texto. */
.form-entrada .btn{justify-content:center;}
/* A caixa de confirmação leva uma FRASE, não um rótulo: tem de escapar ao
   estilo de rótulo (maiúsculas, 10px, espaçado) que a regra acima aplica a
   qualquer <label> do formulário. */
.check-linha,.form-entrada label.check-linha{
  display:flex;align-items:flex-start;gap:9px;margin-bottom:0;
  font-size:var(--fs-small);color:var(--ink-2);font-weight:400;line-height:1.5;
  text-transform:none;letter-spacing:normal;
}
.check-linha input{margin-top:2px;flex-shrink:0;}
/* O RÓTULO INTEIRO É O ALVO, e tinha 17px de alto: abaixo dos 24 da regra 2.5.8,
   medido pelo DevTools a 390, 768, 1024 e 1440. Cresce 4px para cada lado com a
   margem negativa a compensar, como o <summary>, e o desenho não se mexe. */
.form-entrada label.check-linha{padding:4px 0;margin:-4px 0;}
/* A da sessão de 30 dias no mesmo tamanho da das novidades (16px, e não o
   nativo de 13): são as duas caixas de visto da mesma caixa. */
.form-entrada label.check-linha input{width:16px;height:16px;}
/* A caixa das novidades, no tamanho das notas, para caber numa linha na caixa
   de entrada (é a mesma medida da dos Descontos). */
.form-entrada label.check-nov{font-size:var(--fs-tiny);justify-content:flex-start;}
/* As duas linhas pequenas da caixa (a das novidades e a legal) vão centradas,
   debaixo do botão que ocupa a largura toda. */
.caixa-entrada .entrada-legal{width:fit-content;max-width:100%;margin-left:auto !important;margin-right:auto !important;text-align:left;font-size:var(--fs-tiny);color:var(--ink-3);line-height:1.5;}
.caixa-entrada .entrada-legal a{color:var(--ink-2);}
/* A caixa de visto no tamanho da dos Descontos (16px), e não o nativo de 13. */
.form-entrada label.check-nov input{width:16px;height:16px;margin:0;}
.form-entrada label.check-nov{gap:7px;letter-spacing:-.005em;text-align:left;}

.aviso{border-radius:var(--radius-md);padding:14px 16px;font-size:var(--fs-body);line-height:1.55;margin:0 0 18px;border:1px solid;}
.aviso-ok{background:var(--verde-c);border-color:var(--verde-b);color:var(--ink);}
.aviso-erro{background:var(--rosa-c);border-color:var(--rosa-b);color:var(--ink);}
.aviso-info{background:var(--ambar-c);border-color:var(--ambar-b);color:var(--ink);}
.aviso code{word-break:break-all;font-size:var(--fs-small);}

/* ---------- landing ---------- */
/* O recuo de baixo são 26px e não 10: a caixa de entrada acabava a 11px do
   mock em destaque, e a essa distância dois blocos leem-se como um só. Ver a
   nota na `.caixa-entrada`. */
.heroi{display:grid;grid-template-columns:1.1fr minmax(320px,420px);gap:32px;align-items:center;padding:26px 0 26px;}
/* Com a barra de acento à esquerda (a .accent-bar do base.css, como no topo do
   Descontos), a grelha ganha uma coluna de 4px à frente; a barra estica à
   altura do herói pelo align-self:stretch que a classe já traz. */
.heroi.com-acento{grid-template-columns:4px 1.1fr minmax(320px,420px);}
/* A quem já entrou, o herói do `/como-funciona.php` leva a caixa de quem já
   entrou no lugar da de entrada. Houve aqui um `.heroi-so-texto`, que fazia a
   grelha cair a uma coluna: a metade direita ficava em branco. O botão ocupa a
   largura da caixa, como o "Enviar-me o link" da caixa irmã. */
.caixa-dentro .btn{display:flex;justify-content:center;width:100%;margin-top:4px;}
.caixa-dentro .subtil b{color:var(--ink);font-weight:600;word-break:break-all;}
/* No herói do guia a caixa de entrada é centrada pela grelha, mas o título
   trazia 18px de margem vazia por cima, e a caixa lia-se desalinhada para
   cima. Sem a margem, o centro do bloco da esquerda é o centro do que se vê. */
.heroi-guia .titulo{margin-top:0;}
/* O lead da INICIAL é uma frase de três tempos ("o que espera resposta, o que
   pede follow-up, e o que já está encerrado") e só se lê como enumeração se
   ficar numa linha; o `max-width:60ch` do `.lead` partia-a ao meio, e aqui é a
   coluna da grelha que limita a medida, por isso desfazê-lo não transborda —
   abaixo dos 820px, com a grelha a uma coluna, volta a quebrar sozinho.
   É uma classe própria e não `.heroi .lead`: o mesmo herói serve agora o
   `/como-funciona.php`, cujo lead são duas frases e QUER a medida de leitura —
   sem teto, ficava um parágrafo de 130 caracteres por linha. */
.lead-linha{max-width:none;}
.heroi-acoes{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
.heroi-nota{font-size:var(--fs-small);color:var(--ink-soft);font-weight:600;margin-top:14px;}
.heroi-arte{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-lg);padding:18px;}

.grelha-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:8px 0 10px;}
/* Com quatro blocos, 2×2 em vez de três e um sozinho na linha de baixo: um
   cartão isolado a ocupar um terço da largura lê-se como um esquecimento. */
.grelha-3.e-quatro{grid-template-columns:repeat(2,1fr);}
.bloco{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px;}
.bloco h3{margin:10px 0 6px;font-size:var(--fs-h2);}
.bloco p{font-size:var(--fs-body);color:var(--ink-2);margin:0;line-height:1.55;}
.bloco .icon-lg{color:var(--ink-3);}

.passos{counter-reset:passo;list-style:none;padding:0;}
.passos li{counter-increment:passo;position:relative;padding-left:44px;margin-bottom:18px;}
.passos li::before{content:counter(passo);position:absolute;left:0;top:-2px;width:28px;height:28px;
  border-radius:50%;background:var(--row-alt);border:1px solid var(--line);color:var(--ink);font-weight:700;
  display:flex;align-items:center;justify-content:center;font-size:var(--fs-small);}
.passos b{display:block;margin-bottom:3px;}
/* Os passos são hoje TRÊS COLUNAS à largura da página, dentro da secção
   "Começar leva um minuto" — ver o `.passos-linha` mais abaixo. Estiveram numa
   coluna estreita, em lista vertical, quando isto era uma faixa de duas
   colunas. Continuam a ser um <ol>: a ordem é a informação. */
/* `padding:0` e não só a margem: o `.site-main ol` (0,1,1) põe 22px de
   `padding-left` e ganha ao `.passos` sozinho (0,1,0) — sem isto as bolas dos
   números ficavam recuadas 22px dentro da coluna. */
.comecar .passos{margin:0;padding:0;}
.comecar .passos li:last-child{margin-bottom:0;}
/* ---------- A LINHA DE CADA PASSO ----------
   Cada passo mostra o que se ESCREVE nesse passo, e é sempre a mesma peça: a
   `.mform-linha` da paragem 1 do /como-funciona.php — rótulo à esquerda, valor
   à direita. Três colunas, três linhas iguais; o que muda é o que lá está.

   ⚠️ FORAM TRÊS MINIATURAS DIFERENTES e o bloco ficou confuso: um campo com um
   botão em tinta, dois campos mais pastilhas tracejadas, e uma cadeia de
   pastilhas com setas — cinco formas no mesmo painel, cada uma com a sua
   gramática, a competir entre si e com o mock grande que está acima. Um painel
   que diz "são três passos" não pode pedir três leituras diferentes. Ver o
   comentário no index.php, que lista o que saiu e porquê.

   Daqui saíram também o `.cm-btn` (o botão em miniatura) e o `.cm-par` (a seta
   colada à pastilha seguinte): CSS que não pinta nada é dívida.

   ⚠️ AS NOTAS ALINHAM NO FUNDO. As três linhas têm a mesma altura, mas os
   títulos podem quebrar em duas — e aí as notas ficavam desencontradas. A
   coluna é uma flex vertical e a nota leva `margin-top:auto`. */
.comecar .passos-linha{align-items:stretch;}
.comecar .passos-linha li{display:flex;flex-direction:column;}
.cm-arte{margin-top:12px;}
/* `center` e não o `baseline` de lá: no terceiro passo o valor é uma pastilha,
   e uma cápsula alinhada pela base do texto fica com o rótulo a flutuar. */
.cm-arte .mform-linha{grid-template-columns:62px 1fr;gap:10px;padding:9px 11px;
  align-items:center;}
.cm-arte .mform-linha b{font-size:var(--fs-body);}
/* ⚠️ AS TRÊS LINHAS TÊM DE TER A MESMA ALTURA. A do terceiro passo leva uma
   pastilha em vez de texto, e a cápsula fazia-a crescer 4px — três
   linhas iguais com uma mais gorda é precisamente o desencontro que este bloco
   veio corrigir. A pastilha aperta-se (e leva `line-height:1`, senão herda o
   1.65 do corpo e volta a empurrar a linha), e a linha ganha um piso. */
.cm-arte .mform-linha{min-height:38px;}
.cm-arte .mf{justify-self:start;padding:2px 9px;line-height:1;}
/* A nota: uma linha, no tom do corpo.
   ⚠️ O ar por cima é PADDING e não margem — o `margin-top:auto` vale zero na
   coluna mais alta, e lá a nota colava-se à linha do passo. E é `--ink-2` e não
   `--ink-3`: sobre o fundo deste bloco (#f0f0f0) o #aaa cai para 1,9:1. */
/* Ia a 11px; nota e legenda são 12px na escala, como a `.demo-legenda`. */
.passos-linha p{margin:0;margin-top:auto;padding-top:14px;font-size:var(--fs-small);
  color:var(--ink-2);line-height:1.5;}

/* ================= A INICIAL MOSTRA O PRODUTO =================
   Esta página vivia de parágrafos a DESCREVER a app, e quem chega decide em
   segundos: não lê a descrição de um kanban, reconhece um kanban. Por isso os
   argumentos passaram a ser pedaços da interface, com o texto reduzido a
   rótulo.

   O que está abaixo são MOCKS, com o prefixo `demo-` de propósito: imitam
   componentes reais da app — o contador (`.mini-stats`/`.mstat`), o quadro do
   kanban (`.kanban-col`/`.kcard`) e a barra do ritmo (`.goal-bar` +
   `.ritmo-marca`, no `app.css`) — em HTML fixo, sem JS e sem estado. NÃO são
   os componentes: mexer no `app.css` não mexe aqui, e é um preço aceite (o
   alternativo era a landing carregar o CSS todo da app). Se um destes objetos
   mudar de forma na app, vale a pena vir cá com o app.css ao lado.

   As três regras do sistema que mandam aqui:
     - sem sombras, separa-se com a linha de 1px;
     - a cor entra pelas PASTILHAS DE ESTADO (fundo `-c`, letra `-t` da mesma
       família) e é essa a cor da página — não há cor decorativa;
     - a barra de acento de 4px aparece UMA vez, no mock em destaque. Repetida
       em cada caixa deixava de destacar nada.

   Os nomes de empresa são inventados, como já eram na `.heroi-arte`. */
.demo{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-lg);padding:18px 20px;}
/* O mock em destaque leva a barra de acento do hero do mundoutil.pt, aqui na
   horizontal (é o que a `.chart-card` da app faz com o `::before`).
   O fundo `--row-alt` é o que faz isto ler-se como uma APLICAÇÃO e não como
   mais uma caixa da página: as colunas brancas passam a estar POUSADAS em
   algo. Sem ele era branco sobre branco separado por uma linha, e a imagem
   mais importante da página desaparecia no fundo. */
.demo-destaque{position:relative;overflow:hidden;padding-top:22px;background:var(--row-alt);}
.demo-destaque::before{content:'';position:absolute;left:0;right:0;top:0;height:4px;
  background:linear-gradient(90deg,var(--rosa-c),var(--lilas-c),var(--verde-c),var(--azul-c),var(--viagens-c));}
/* A legenda de um mock: diz o que se está a ver, uma linha, e é o único texto
   que estes blocos levam.
   O seletor leva o `.demo` à frente por uma razão que custou tempo a
   encontrar: o `.site-main p{margin:0 0 14px}` da secção base tem
   especificidade 0,1,1 e ganhava a um `.demo-legenda` sozinho (0,1,0). O
   `margin` escrito aqui nunca se aplicou — a legenda tinha ZERO acima (daí
   parecer colada ao quadro) e 14px abaixo, que somados ao recuo da caixa
   sobravam no fundo. Com o `.demo` à frente (0,2,1) a regra ganha. */
.demo .demo-legenda{font-size:var(--fs-small);color:var(--ink-soft);line-height:1.5;
  margin:20px 0 0;}
.demo-legenda b{color:var(--ink);font-weight:600;}
/* ---------- O SELO DE EXEMPLO ----------
   Um mock com nomes de empresa e números redondos lê-se como dados reais. Três
   tentativas antes desta, e as três valem mais do que a que ficou:

   1. UMA LINHA DE TEXTO por cima do quadro. Um aviso em letra pequena ao lado
      de uma imagem grande chega sempre tarde: lê-se depois de se olhar, quando
      se lê.
   2. UMA MARCA DE ÁGUA em diagonal, repetida. É a solução genérica — a mesma de
      qualquer PDF de amostra — e não se parecia nada com esta casa.
   3. UM SELO EM TINTA no canto. O selo preto pousado no canto lia-se como um
      autocolante colado por cima do desenho — uma peça nova a dizer uma coisa
      que o quadro já podia dizer sozinho.

   SÃO DUAS PEÇAS, E CADA UMA FAZ METADE DO TRABALHO:

   - A FAIXA, que não acrescenta peça nenhuma: a barra de acento que já coroava
     o mock — o degradê das quatro famílias, a assinatura do mundoutil.pt —
     CRESCE de 4px para 26px e passa a levar a palavra. O que já lá estava passa
     a dizer alguma coisa.
   - O PICOTADO à volta do quadro todo, que é a maneira como este sistema já diz
     "isto não é um item a sério": o `+` dos atalhos do mock e as pastilhas dos
     campos opcionais do /como-funciona.php. A faixa diz-se ao primeiro olhar; o
     picotado põe a marca no OBJETO INTEIRO, e sobrevive a um recorte do quadro.

   Três consequências:

   - Vê-se ao primeiro olhar, no sítio por onde o olho entra no quadro, e sem
     tapar uma linha de conteúdo: a faixa é a coroa do objeto, não uma etiqueta
     pousada nele.
   - A palavra vai em TINTA sobre o pastel, como manda o sistema (o texto é
     sempre neutro; a cor está aqui a marcar um bloco, não a comunicar estado).
     Muito espaçada, que é o tratamento de rótulo desta casa.
   - É TEXTO e não imagem de fundo: quem ouve a página ouve a palavra, sem se
     lhe dar um `alt` nem uma classe de leitor de ecrã.

   ⚠️ A regra de a barra de acento aparecer UMA VEZ por página (ver a secção do
   mock em destaque) continua de pé na inicial: lá o único quadro que a leva é o
   mesmo que já a tinha. No /como-funciona.php a faixa aparece nos quadros que
   levam a marca, e aí ela não é acento — é o selo. */
.exemplo{padding-top:38px;border-style:dashed;border-color:var(--ink-3);}
/* A faixa. Escrita aqui inteira e não só a altura, porque os quadros das
   paragens do /como-funciona.php não têm barra de acento nenhuma para crescer:
   nesses, é esta regra que a cria. Vem depois do `.demo-destaque::before` no
   ficheiro, com a mesma especificidade, e é a ordem que decide. */
.exemplo::before{content:'';position:absolute;left:0;right:0;top:0;height:26px;
  background:linear-gradient(90deg,var(--rosa-c),var(--lilas-c),var(--verde-c),var(--azul-c),var(--viagens-c));}
.selo-exemplo{position:absolute;top:0;left:0;z-index:3;height:26px;
  display:flex;align-items:center;padding:0 18px;
  font-size:var(--fs-label);font-weight:800;letter-spacing:.26em;text-transform:uppercase;
  color:var(--ink);}

/* A lista tem as linhas que leva (as provas da inicial e a paragem 4 do percurso). */
.demo-lembretes{display:grid;grid-template-columns:minmax(0,1fr);grid-auto-rows:30px;gap:4px 40px;}
.demo-lembrete{display:flex;align-items:center;gap:5px;min-width:0;padding:4px 7px;box-sizing:border-box;
  background:var(--bg);border:1px solid var(--line);border-left:3px solid var(--cor);border-radius:0 6px 6px 0;
  font-size:var(--fs-tiny);}
.demo-lembrete b{flex:1 1 auto;min-width:0;font-weight:700;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.demo-lembrete span{font-weight:500;color:var(--ink-soft);white-space:nowrap;}
/* O botão rápido (`.rquick`): só nas linhas que o têm na app; a entrevista não
   leva, fecha sozinha depois de acontecer. */
.demo-lembrete i{width:17px;height:17px;border-radius:50%;background:var(--grey-light);color:var(--ink-soft);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.demo-lembrete i .icon{width:11px;height:11px;}
/* ---------- O MOCK DOS CARTÕES ----------
   A vista que a app abre (o `viewMode:'cards'`), e por isso a imagem que esta
   página tem de mostrar. Esteve aqui o quadro, e depois a linha do tempo: as
   duas mentiam sobre o primeiro ecrã de quem cria conta.

   É o `.app-card` do app.css reduzido ao essencial — bola do estado, cargo,
   empresa, meta, pastilha e o tempo em baixo — sem os quatro botões de ação,
   que só existem para quem já lá está dentro. Como os outros mocks, é HTML
   fixo: mexer no app.css não mexe aqui, e se a vista mudar de forma vale a
   pena vir cá com o app.css ao lado.

   Quatro cartões e não os oito de um ecrã cheio: chega para se perceber a
   grelha, e oito empurravam a caixa de entrada para fora do primeiro ecrã. */
.demo-cartoes{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
/* ⚠️ O `.dcard` É O `.app-card` DO app.css, VALOR A VALOR — medidas, tons,
   pesos, e as mesmas faixas (cargo e ícone · empresa · meta · pastilha ·
   rodapé). Esteve a ser uma miniatura: letra mais pequena, meta mais claro, o
   cargo sem as duas linhas reservadas e SEM RODAPÉ — e a landing mostrava um
   cartão que a app não tem. Os cartões do mock têm a largura dos de dentro
   (~260 a 330px), por isso não há escala nenhuma que justifique diferenças.
   AO MEXER NUM VALOR DO `.app-card`, MEXER AQUI: o mock é HTML fixo e nada o
   atualiza sozinho. Verifica-se com um retrato lado a lado dos dois.

   A caixa e os quatro botões do rodapé são DESENHO (um `<span>` e `<svg>`), não
   controlos: o mock é `aria-hidden`, e um botão que não faz nada, na página que
   tem de convencer alguém, era pior do que nenhum. */
.dcard{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-lg);
  padding:14px 16px;display:flex;flex-direction:column;gap:0;}
.dcard .dc-top{display:flex;align-items:flex-start;gap:8px;}
/* À DIREITA do cargo, por `order`, como o `.ac-statusicon`; tinta ESCURA da
   família (`-t`, pelo `--estado-tinta` que cada cartão declara). */
.dcard .dc-estado{color:var(--estado-tinta,var(--ink-soft));flex-shrink:0;margin-top:2px;order:2;}
/* As duas linhas do cargo são RESERVADAS, como na app: é isso que põe a
   empresa à mesma altura de cartão para cartão. */
.dcard .dc-top b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  min-width:0;flex:1;min-height:2.5em;font-weight:700;font-size:var(--fs-h2);line-height:1.25;color:var(--ink);
  text-wrap:balance;}
/* A empresa é IRMÃ do `.dc-top`, como a `.ac-role`: dentro dele ficava
   indentada pelo ícone. */
.dcard .dc-empresa{font-size:var(--fs-small);color:var(--ink-soft);font-weight:500;line-height:1.35;margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Uma linha, como o `.ac-meta`. Na app o que não cabe sai (ajustarMetaCartoes);
   aqui os quatro textos foram escolhidos para caberem inteiros — medir de novo
   ao mudá-los. */
.dcard .dc-meta{margin-top:8px;margin-bottom:8px;font-size:var(--fs-small);font-weight:500;color:var(--ink-soft);
  line-height:1.4;white-space:nowrap;overflow:hidden;}
.dcard .dc-pills{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:flex-start;min-height:21px;margin-bottom:11px;}
.dcard .dc-pill{display:inline-flex;align-items:center;gap:5px;border-radius:20px;padding:3px 10px;
  font-size:var(--fs-tag);font-weight:600;line-height:1.35;letter-spacing:.02em;
  background:var(--estado-fundo,var(--grey-light));color:var(--estado-tinta,var(--ink-soft));}
.dcard .dc-pill .icon{width:11px;height:11px;flex-shrink:0;opacity:.8;}
.dcard .dc-pill b{font-weight:800;}
/* O rodapé é o `.ac-bottom`: régua; a caixa e os dias à esquerda; os quatro
   botões (28px, o `.icon-btn`) à direita. Empurrado para o fundo para os
   quatro cartões fecharem à mesma altura. */
.dcard .dc-fim{display:flex;justify-content:space-between;align-items:center;margin-top:auto;
  padding-top:9px;border-top:1px solid var(--line);}
.dcard .dc-esq{display:flex;align-items:center;gap:8px;}
.dcard .dc-caixa{width:13px;height:13px;border:1px solid #767676;border-radius:2.5px;flex-shrink:0;margin:1px;background:var(--bg);}
.dcard .dc-dias{font-size:var(--fs-tiny);font-weight:600;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
.dcard .dc-acoes{display:flex;gap:2px;color:var(--ink-soft);}
.dcard .dc-acoes .icon{box-sizing:content-box;width:16px;height:16px;padding:6px;}

/* As quatro provas: cada uma é um pedaço de interface e uma frase.

   NÃO SÃO CAIXAS. Eram quatro cartões brancos de contorno igual numa grelha
   2×2 — o objeto e a composição que qualquer gerador de páginas produz. Hoje
   são quatro blocos separados por um filete, e o que os agrupa é o alinhamento.
   O mock lá dentro continua a levar fundo próprio, porque esse É um pedaço de
   ecrã e tem de se ler como tal. */
.provas{display:grid;grid-template-columns:repeat(2,1fr);gap:34px 40px;}
/* O TEXTO VEM PRIMEIRO E O MOCK POR BAIXO. Esteve ao contrário — o quadro em
   cima e a frase por baixo — e obrigava a decifrar um pedaço de interface antes
   de se saber ao que ele vinha. Com a frase à frente, o mock passa a ser a
   PROVA do que se acabou de ler, que é o papel que ele tem nesta secção.
   O `margin-top:auto` no mock faz o que o `min-height` fazia na ordem
   anterior: as células da grelha esticam-se todas à mesma altura, e os quatro
   quadros encostam ao FUNDO — alinhados entre si por baixo, com títulos de uma
   ou duas linhas por cima. */
.prova{border:none;border-top:1px solid var(--line);border-radius:0;padding:16px 0 0;
  display:flex;flex-direction:column;}
/* Os quatro mocks têm conteúdos de alturas muito diferentes (duas linhas de
   aviso, três barras de plataforma, uma barra de meta, dois cartões de oferta:
   80, 69, 38 e 61px de conteúdo). Deixados a crescer, cada caixa começava o
   título a uma altura diferente e a secção lia-se como quatro caixas soltas em
   vez de uma grelha. `min-height` iguala a faixa do mock pela mais alta e o
   flex centrado põe cada conteúdo no meio dela — os quatro títulos e os quatro
   parágrafos passam a arrancar todos na mesma linha. */
.prova-arte{background:var(--row-alt);border:1px solid var(--line);border-radius:var(--radius-md);
  padding:12px;min-height:104px;display:flex;flex-direction:column;justify-content:center;
  margin-top:auto;}
.prova h3{margin:0 0 3px;font-size:var(--fs-h2);font-weight:600;letter-spacing:-.01em;}
/* O corpo tem UMA entrelinha, 1.65 (a do `.site-main p`); esta estava a 1.55.
   A exceção são as `.pr-*` da promessa: a altura delas está acertada ao pixel
   com a coluna das FAQ, e a 1.65 deixava de bater. */
.prova p{font-size:var(--fs-body);color:var(--ink-2);margin:0;line-height:1.65;}
.prova p + p{margin-top:8px;}
/* A folga mínima entre a última linha de texto e o quadro, para o caso em que o
   texto é tão alto que o `margin-top:auto` já não sobra nada. */
.prova p:last-of-type{margin-bottom:14px;}

/* Barras horizontais de plataforma. Barra = área, logo pastel `-c` com o `-b`
   só a fechar a forma — a regra dos gráficos, que está no AGENTS.md. */
.demo-plat{display:grid;grid-template-columns:88px 1fr auto;align-items:center;gap:10px;
  font-size:var(--fs-tiny);font-weight:700;}
.demo-plat + .demo-plat{margin-top:9px;}
.demo-plat .nome{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.demo-plat .carril{height:10px;border-radius:100px;background:var(--grey-light);overflow:hidden;}
/* Verde, como a taxa de sucesso da ferramenta (renderSucessoChart): é a
   percentagem que chegou a proposta, e as propostas são verdes em todo o lado. */
.demo-plat .carril i{display:block;height:100%;border-radius:100px;
  background:var(--verde-c);border:1px solid var(--verde-b);}
.demo-plat .val{color:var(--ink-2);white-space:nowrap;}

/* Duas propostas lado a lado, como no comparador. A marca do valor mais alto
   diz "Valor mais alto" e não "melhor" — a app não declara vencedor, e o texto
   da landing não pode prometer o que ela recusa fazer. */
.demo-ofertas{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
/* Com o saldo pelo meio são três colunas, e a do meio vale o que o número
   pedir: as duas propostas continuam iguais uma à outra, que é a condição para
   se poderem comparar de relance. */
.demo-ofertas.com-saldo{grid-template-columns:1fr auto 1fr;align-items:center;}
.demo-oferta{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-md);padding:10px;}
.demo-oferta .emp{font-size:var(--fs-tiny);font-weight:700;color:var(--ink-2);}
.demo-oferta .num{font-size:var(--fs-h2);font-weight:700;letter-spacing:-.02em;margin-top:2px;}
.demo-oferta .ano{font-size:var(--fs-tiny);color:var(--ink-soft);font-weight:600;}
.demo-oferta.mais{border-color:var(--verde-b);}
.demo-oferta.mais .num{color:var(--verde-t);}

/* Os selos do hero: o que era uma linha de texto com pontos pelo meio. Sem
   cor — não comunicam estado nenhum, comunicam condições. */
.selos{display:flex;flex-wrap:wrap;gap:7px;margin:16px 0 0;padding:0;list-style:none;}
.selos li{font-size:var(--fs-tiny);font-weight:600;color:var(--ink-2);
  border:1px solid var(--line);border-radius:100px;padding:4px 11px;}

/* ---------- O PAR: o percurso do /como-funciona.php + os primeiros passos ----------
   Duas secções lado a lado num objeto só, e com desenho de propósito
   DIFERENTE do `.provas` que vem antes: lá são quatro cartões brancos com
   contorno de 1px sobre a página; aqui é UMA faixa PASTEL, sem cartões dentro,
   partida ao meio por um filete vertical, e com os títulos de secção lá dentro
   em vez de por cima. É o que faz a página mudar de assunto à vista, sem
   depender de se ler os títulos — e é o único sítio da página onde a cor entra
   como superfície.

   O TOM SEGUE A REGRA DA ÁREA (ver o AGENTS.md): quanto maior a área, mais
   diluído o pastel. Isto é uma faixa de largura inteira, logo o `--lilas-c`
   entra a **55%** sobre branco, como os cartões de categoria do mundoutil.pt
   (`#E8D5F5` → `#F2E8FA`; a conta é `255 - (255-c) * 0.55`, canal a canal). A
   100% seria uma pastilha do tamanho de uma faixa.

   A FAMÍLIA É O LILÁS e não uma das outras quatro: das cinco famílias do
   degradê, é a única que não tem um estado a reclamá-la — o verde é o `--ok`, o
   rosa o `--erro`, o azul o `--info`. Uma faixa verde nesta página dizia
   "correu bem" sem nada ter corrido.

   Os traços (contorno, filete do meio, filete das secções) são o `--lilas-b`,
   **sempre em linha e nunca a preencher**, e a meia opacidade porque a área é
   grande — é o tratamento do cartão de categoria. Em tokens locais para não
   ficarem cinco `rgba()` iguais escritos à mão pelo bloco.

   O TEXTO CONTINUA NEUTRO. `--ink` e `--ink-soft`, como no resto da página: a
   cor está aqui a marcar um bloco, não a comunicar estado, e um título lilás
   sobre fundo lilás era a regra dos ícones decorativos ao contrário.

   Não leva a barra de acento: essa é do mock em destaque, e é o único bloco
   da página que a tem. */
/* SEM FUNDO TINGIDO. Era uma faixa lilás (#F2E8FA) de contorno da mesma
   família, e a cor não significava nada: o sistema desta casa diz que a cor
   entra em fundos de etiqueta e em estado, e "ver por dentro" não é um estado.
   Tingir uma secção inteira para dizer "aqui mudou o assunto" é o atalho de
   qualquer template — e o que mudava o assunto já era o desenho, que passa a
   ser o único a fazê-lo: duas colunas partidas por um filete, num bloco aberto
   entre duas réguas.

   O que se perde é a cor. O que se ganha é que a página inteira passa a ter
   uma paleta só: papel, tinta, e pastel onde há estado. */
/* ---------- A SECÇÃO "COMEÇAR LEVA UM MINUTO" ----------
   ⚠️ Isto foram DUAS secções lado a lado numa faixa, e antes disso uma banda
   cinzenta com uma régua de 1.5px em tinta a atravessar a página. Nenhuma das
   duas formas pegou, e a razão é a mesma: a metade de baixo da página estava a
   inventar arrumações que a de cima não usa.

   A de cima tem UM sistema, e usa-o quatro vezes seguidas: marca de 26px em
   tinta para a SECÇÃO, filete de 1px em `--line` para cada OBJETO dentro dela
   (o `.prova`). A de baixo não tinha nem uma coisa nem outra — eram três
   bandas de duas colunas seguidas, cada uma arrumada à sua maneira, e é isso
   que se lê como despejado.

   Hoje é UMA secção de largura inteira, com o mesmo miolo das de cima: um
   título com a marca, e por baixo objetos com filete. Ver o comentário no
   index.php. */
/* ⚠️ ESTE BLOCO É O ÚNICO DA PÁGINA COM FUNDO PRÓPRIO, e é deliberado.
   Tudo o resto assenta no branco e agrupa-se pelo título e pelo filete — e é
   isso que estava a dar-lhe o problema: entre quatro argumentos com filete e
   duas colunas com filete, o convite a COMEÇAR lia-se como mais um bloco de
   texto, quando é a única coisa da página que pede um gesto.

   O que o distingue é a matéria que a casa já usa, e não uma peça nova: um
   fundo neutro, o mesmo raio de 12px do quadro do mock, as bolas numeradas a
   branco por cima dele e o mesmo botão a tinta. Nenhuma cor, nenhum contorno,
   nenhuma sombra, nenhum título diferente do das outras secções.

   TRÊS ESCOLHAS, E AS TRÊS TÊM ALTERNATIVA RECUSADA:

   1. O TOM É O `--grey-light` (#f0f0f0) E NÃO O `--row-alt` (#fafafa). Com o
      #fafafa — o fundo do mock e do rodapé — o bloco existia e não se via: dois
      pontos de luminosidade sobre branco precisam de um contorno para se
      lerem, e aí voltava a ser uma caixa. Com este, o fundo chega e a moldura
      não faz falta.
   2. NÃO É UMA BANDA A ATRAVESSAR O ECRÃ. Seria o gesto do rodapé, e a única
      forma de o fazer dentro do `.site-main` é o truque do `100vw`, que põe a
      página a rolar na horizontal quando há barra de deslocamento — o defeito
      que esta casa verifica a 390px.
   3. O BLOCO EM TINTA foi tentado e recusado: destacava-se como nenhum outro e
      trazia ao site uma superfície escura que ele não tem em lado nenhum. A
      tinta aqui é do BOTÃO, e é ela que já diz onde se carrega.

   ⚠️ E A LIÇÃO DO `.par` (mais acima) vale ao contrário: o que lá se lia como
   "a meio de uma migração" era uma faixa a que tinham tirado o fundo e deixado
   a moldura. Aqui o fundo existe e moldura não há. Se um dia se tirar o fundo a
   este bloco, tira-se o bloco todo — não se fica com as bordas. */
/* ---------- O TOPO DA SECÇÃO: O NOME E A AÇÃO ----------
   A ação vive na linha do título e não no fim do painel, onde ficava encostada
   ao convite do guia — duas ações no mesmo canto, a que começa e a que adia.
   É a forma da `.settings-row` da app: a frase à esquerda, o que ela pede à
   direita. */
.comecar-topo{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:12px 22px;}
.site-main .comecar-topo h2{margin:0;}

/* ---------- O CARTÃO DO GUIA ----------
   ⚠️ É O CARTÃO INTEIRO QUE É O LINK, e não um botão lá dentro. O percurso
   esteve aqui como meia frase de 12px com um botão ghost ao lado, e a melhor
   página que este site tem para convencer alguém estava escondida numa linha
   que ninguém lê. Branco sobre o fundo cinzento do painel — a mesma maneira
   como as linhas dos passos se destacam aqui dentro — e com a área toda a
   servir de alvo.

   O <span> com a cara do botão não é um alvo a sério (um <a> não leva outro
   <a> lá dentro): é a affordance, e quem clica clica no cartão.

   ⚠️ E o `text-decoration:none` tem de vir com o `.site-main` à frente: a regra
   dos links de conteúdo (`.site-main a`) é 0,1,1 e ganharia a um `.cm-guia`
   sozinho — o cartão inteiro saía sublinhado. */
.site-main a.cm-guia{display:block;margin-top:26px;
  background:var(--bg);border:1px solid var(--linha-cinza);border-radius:var(--radius-md);
  padding:20px 22px 22px;text-decoration:none;font-weight:400;}
.site-main a.cm-guia:hover{border-color:var(--ink);}
.cm-guia-topo{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:14px 24px;}
.cm-guia-txt{display:grid;gap:5px;flex:1 1 320px;min-width:260px;}
/* O título do cartão é o degrau a seguir ao da secção (22,4px leve + 800): 20px
   a 600. A 15px lia-se como o título de uma caixa de definições, e era metade
   do que fazia o cartão parecer deslavado. */
.cm-guia-txt > b{font-size:1.25rem;font-weight:600;letter-spacing:-.02em;color:var(--ink);}
.cm-guia-sub{font-size:var(--fs-small);color:var(--ink-2);line-height:1.5;}
.cm-guia .btn{flex-shrink:0;}
/* ---------- O FIO DAS OITO ESTAÇÕES ----------
   A figura do percurso, em miniatura: é o que a página do outro lado É, e diz
   o tamanho do que se vai ver sem uma frase a explicá-lo. Esteve aqui a mesma
   lista de nomes separada por pontos, e o cartão ficava deslavado — três
   linhas de texto cinzento e um botão.

   O desenho é o do `.passo-linha` do /como-funciona.php (marca redonda sobre
   uma régua fina), mas sem a marcação de cheia/oca: aqui as oito valem o
   mesmo. O ponto é TINTA CHEIA — em contorno, oito anéis claros sobre branco
   somavam-se ao cinzento do resto e não se viam.

   A régua e a marca são `::before`/`::after` da própria estação: não há markup
   a mais dentro do <a>, e a primeira e a última cortam a régua a meio para o
   fio começar e acabar nelas. */
.cm-fio{display:flex;flex-wrap:wrap;margin-top:18px;}
.cm-fio > span{position:relative;flex:1 1 120px;padding:19px 6px 0;text-align:center;
  font-size:var(--fs-tiny);font-weight:600;color:var(--ink-2);line-height:1.3;}
.cm-fio > span::before{content:'';position:absolute;top:5px;left:0;right:0;height:1.5px;
  background:var(--linha-cinza);}
.cm-fio > span:first-child::before{left:50%;}
.cm-fio > span:last-child::before{right:50%;}
.cm-fio > span::after{content:'';position:absolute;top:0;left:50%;margin-left:-5.5px;
  width:11px;height:11px;border-radius:50%;background:var(--ink);}
.site-main a.cm-guia:hover .cm-fio > span{color:var(--ink);}
/* ⚠️ ABAIXO DOS 1040 O FIO VIRA-SE, e não quebra em linhas. As oito estações
   pedem ~960px; com o `flex-wrap` a fazer duas ou quatro filas, a régua de cada
   estação continuava a atravessar a largura toda e passava POR CIMA dos nomes
   da fila de baixo — a figura lia-se como riscos sobre texto. Vertical é a
   forma que o percurso tem na página do outro lado, e é a mesma leitura: uma
   estação por linha, o fio a passar-lhes pelo centro. */
@media (max-width:1040px){
  .cm-fio{display:grid;grid-template-columns:1fr;margin-top:14px;}
  .cm-fio > span{flex:none;text-align:left;padding:5px 0 5px 24px;}
  .cm-fio > span::before{top:0;bottom:0;left:5px;right:auto;width:1.5px;height:auto;}
  .cm-fio > span:first-child::before{top:50%;left:5px;}
  .cm-fio > span:last-child::before{bottom:50%;right:auto;}
  .cm-fio > span::after{top:50%;left:0;margin-top:-5.5px;margin-left:0;}
}

.comecar{margin-top:56px;background:var(--grey-light);border-radius:var(--radius-lg);
  padding:28px 32px 32px;
  /* O `--line` (#e8e8e8) é mais claro do que este fundo: sobre ele os filetes
     dos passos desapareciam. Esta é a mesma linha, um tom abaixo, e vive aqui
     porque é o único sítio da casa com um fundo a este tom. */
  --linha-cinza:#dcdcdc;}
/* ⚠️ Os 20px vão para o `.comecar-topo` e não para o `<h2>`: dentro de uma
   linha flex com `align-items:center`, a margem de baixo do título contava para
   a altura dele e o botão ficava centrado na caixa (texto + 20px), ~10px acima
   do meio do texto. */
.site-main .comecar h2{margin:0;}
.comecar-topo{margin-bottom:20px;}
.comecar .passos-linha li{border-top-color:var(--linha-cinza);}
.comecar .passos-linha li::before{background:var(--bg);border-color:var(--linha-cinza);}
.comecar .btn-ghost{border-color:var(--linha-cinza);}
@media (max-width:700px){
  /* Num telemóvel 32px de recuo de cada lado são 16% da largura: o bloco passa
     a ter a folga da página, e não a dele. */
  .comecar{padding:22px 18px 24px;margin-top:44px;}
}
/* A coluna "Ver por dentro": o texto à esquerda, o botão à direita, na mesma
   linha. É a forma da `.settings-row` da app — a frase e a ação que ela pede,
   lado a lado — e é o que dá a esta coluna a altura de duas linhas.
   `align-items:center` porque o botão é uma peça de altura fixa e a frase são
   duas ou três linhas: alinhados pelo topo, o botão ficava pendurado.
   Ver o comentário no index.php, que conta as cinco tentativas de encher esta
   coluna e porque é que todas falharam. */
/* ⚠️ QUEM DECIDE SE ISTO É UMA LINHA OU DUAS É A MEDIDA DO TEXTO, não uma
   media query. A frase pede pelo menos 260px para não se partir em cinco linhas
   de três palavras; abaixo disso o `flex-wrap` manda o botão para baixo e o
   texto fica com a largura toda. Com um ponto de quebra fixo havia sempre uma
   janela em que a coluna era estreita e a regra ainda não tinha disparado —
   entre os 700 e os 1000, com a banda ainda em duas colunas, a frase ficava com
   240px ao lado do botão. */
.vpd-linha{margin-top:26px;display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px;}
.vpd-linha .btn{flex-shrink:0;}
/* As duas ações andam juntas e nunca se separam uma da outra: com os botões
   soltos na mesma flex, o `flex-wrap` mandava um para a linha de baixo e
   deixava o outro pendurado ao lado do texto. Aqui ou cabem os dois ao lado da
   frase, ou passam os dois para baixo. */
.vpd-acoes{display:flex;flex-wrap:wrap;gap:10px;flex-shrink:0;}
/* O ghost é `background:var(--bg)` — sobre o fundo cinzento deste bloco fica um
   botão branco, que é o que o distingue do primário a tinta sem lhe dar um
   terceiro desenho. */
/* A frase NÃO cresce até ao fim da linha. Numa secção de largura inteira,
   `flex:1` punha-a a ocupar 820px e atirava o botão para o bordo direito da
   página — meio metro de vazio entre a pergunta e a resposta, e o olho a ter de
   saltar. Travada no seu comprimento natural, o botão fica logo a seguir e os
   dois leem-se como um par. É a mesma conta do `max-width:1200px` da
   `.def-grelha` da app: acima da medida do texto, cada pixel de largura vira
   vazio ENTRE a frase e o botão.
   O `1 260px` mantém-se como base para a frase poder encolher e quebrar
   quando a linha aperta — abaixo disso o `flex-wrap` manda o botão para baixo. */
.mp-legenda{flex:0 1 auto;max-width:62ch;min-width:260px;font-size:var(--fs-body);
  color:var(--ink-2);line-height:1.55;margin:0;}
.mp-legenda b{color:var(--ink);font-weight:600;}

/* ---------- OS TRÊS PASSOS, LADO A LADO ----------
   Só os títulos, em três colunas iguais. Em coluna e com uma descrição cada, a
   secção media ~215px e a vizinha ~120 — e foi essa diferença que obrigou a três
   tentativas de encher a do lado. Numa linha, as duas fecham quase à mesma
   altura e ninguém tem de inventar conteúdo para tapar um buraco.

   A bola sobe para cima do título (era à esquerda, com `padding-left:44px`) —
   numa coluna de ~180px, 44px de recuo levavam um quarto da largura. Empilhada,
   a numeração lê-se na horizontal, que é como um percurso de três passos se lê.
   `align-items:start` para as três bolas ficarem à mesma altura mesmo quando um
   dos títulos quebra em duas linhas. */
/* ⚠️ CADA PASSO LEVA O FILETE DO `.prova` — 1px em `--line` por cima, e 16px de
   recuo. É o gesto que a página repete de bloco em bloco, e era o que faltava
   aqui: os três passos leem-se como irmãos dos quatro argumentos de cima, e a
   metade de baixo deixa de parecer outra página.
   A GOTEIRA É A DO `.provas` (40px): três blocos com filete têm de ter o mesmo
   canal que os quatro de cima, senão o olho dá pelo desencontro sem saber
   nomeá-lo. */
.passos-linha{display:grid;grid-template-columns:repeat(3,1fr);gap:0 40px;
  align-items:start;margin:20px 0 0;padding:0;}
.passos-linha li{padding:16px 0 0;margin:0;border-top:1px solid var(--line);}
.passos-linha li::before{position:static;display:flex;align-items:center;justify-content:center;
  margin-bottom:10px;}
/* O título do passo é o título de um objeto com filete, irmão do `.prova h3`
   (15px, -.01em). Estava a 14px sem espaçamento: o mesmo papel, dois tamanhos. */
.passos-linha b{font-size:var(--fs-h2);letter-spacing:-.01em;line-height:1.35;margin:0;}
@media (max-width:640px){
  /* Três colunas de 100px partiam os títulos em quatro linhas cada. Volta a
     empilhar — e o filete fica, que é o que separa um passo do seguinte agora
     que já não há colunas a fazê-lo. A bola volta para o lado, porque em
     coluna é ela que dá o recuo. */
  .passos-linha{grid-template-columns:1fr;gap:0;}
  .passos-linha li{padding:14px 0 0 40px;}
  .passos-linha li::before{position:absolute;left:0;top:12px;margin-bottom:0;}
}

/* AQUI VIVIA O `.secoes` — as oito paragens do percurso como pastilhas, por
   baixo do botão "Ver como funciona". Saiu do `index.php` (ver o comentário lá,
   junto ao botão) e as regras saíram com ele: CSS que não pinta nada é dívida,
   e a próxima pessoa a lê-lo iria procurar o markup que já não existe.
   Se a lista voltar, volta com a decisão revista — o problema dela não era o
   desenho, era pedir uma escolha de nove a quem ainda não sabe o que se escolhe. */

/* ---------- as duas secções que fecham a página ----------
   FAQ à esquerda, a promessa de privacidade à direita — para a promessa cair
   debaixo do "Começar leva um minuto" que está por cima dela, que é a vertical
   que liga as duas.
   A GOTEIRA É A DA PÁGINA: `repeat(2,1fr)` com 16px, exatamente como o
   `.provas`. Estas colunas não são caixas, mas o canal vazio entre elas tem de
   cair onde cai o canal entre as caixas do resto da página — centrado nos 50%,
   Um só eixo vertical para os três blocos.
   Tentou-se antes descontar o gap todo à coluna esquerda (`calc(50% - 16px)` e
   `1fr`) para a coluna direita começar nos 50% cravados: desalinhava com o
   `.provas`, e é o canal — não a borda de uma coluna sem caixa — que o olho
   segue de bloco para bloco. */
/* ⚠️ A GOTEIRA SÃO 40px, A DO `.provas`, e não os 16 que aqui estiveram. As
   duas colunas passaram a ter a MESMA FORMA — cinco linhas com filete, o mesmo
   recuo, a mesma altura —, e a 16px de distância os filetes de uma continuavam
   os da outra: lia-se uma tabela de cinco linhas a atravessar a página, e não
   duas listas lado a lado. A goteira dos quatro argumentos lá em cima é 40, e
   com ela as duas colunas separam-se sem precisar de um risco a dividi-las (a
   página separa colunas com a goteira, não com tinta — ver o `.par`).
   O canal continua centrado nos 50%: `repeat(2,1fr)` com qualquer goteira o
   mantém lá, e é o centro — não a largura — que o olho segue de bloco para
   bloco. */
.fecho{margin-top:36px;display:grid;grid-template-columns:repeat(2,1fr);
  column-gap:40px;align-items:start;}
/* O primeiro título de cada coluna não leva os 36px do `.site-main h2`: os
   dois arrancam no topo da grelha, e a folga por cima é agora a do bloco. */
.fecho > section > h2:first-child{margin-top:0;}
/* SEM CAIXAS, nas duas colunas: a promessa esteve num `.cartao` branco e as FAQ
   na moldura igual, e eram mais dois cartões no fim de uma página que já é
   feita deles. As duas assentam no fundo da página.
   E sem risco próprio: o `::after` do `<h2>` já é um filete a atravessar a
   coluna, e um `border-top` no bloco punha um segundo risco a 18px do
   primeiro — dois traços paralelos entre o título e a primeira linha de texto.
   O que a coluna leva é só o recuo, igual ao que o `<summary>` das FAQ tem em
   cima (14px), para as duas começarem a escrever à mesma altura. */
/* ⚠️ AS DUAS COLUNAS ABREM COM O MESMO FILETE, e é o mesmo do `.prova` e do
   `.passos-linha`. A das FAQ já o tinha (é o `border-top` do `.faq`, que
   também serve de linha da primeira pergunta) e a da promessa não tinha nada —
   uma coluna a abrir com um risco e a do lado a abrir com texto, à mesma
   altura. Com as duas iguais, a página inteira passa a ter UM só gesto: marca
   de 26px em tinta para a secção, filete de 1px para o objeto dentro dela. */
.fecho .faq{border-top:1px solid var(--line);}
/* ---------- A PROMESSA: A MESMA ALTURA, OUTRA FORMA ----------
   Duas exigências ao mesmo tempo, e a segunda nasceu de se ter cumprido a
   primeira à letra:

   1. **A coluna tem de fechar à mesma altura que as FAQ.** Era um parágrafo,
      três marcas de lista e um link solto — ~100px mais curta do que as cinco
      perguntas ao lado, e a banda ficava com um degrau no fundo sem razão
      visível.
   2. **E tem de se distinguir delas.** A primeira versão deu-lhe o ritmo exacto
      do `<summary>` — filete de 1px, o mesmo recuo, cinco linhas — e o preço
      foi as duas colunas passarem a ler-se como UMA tabela a atravessar a
      página: a 16px de goteira, os filetes de uma continuavam os da outra.

   O que ficou: a coluna das perguntas é uma LISTA COM RISCO; esta é uma frase
   de abertura e quatro promessas separadas por ESPAÇO, marcadas pelo ícone. A
   goteira passou para os 40px do `.provas` (ver o `.fecho`).

   ⚠️ A ALTURA É REQUISITO, NÃO ACASO, e sai de um ritmo com dois degraus:
   **14px** de recuo por baixo do filete (o mesmo com que a primeira pergunta
   das FAQ começa a escrever), **20px** entre o texto de abertura e a lista e
   entre a lista e o link, e **13px** entre promessas. Medido a 1440 e a 1200:
   **231px de cada lado, ao pixel**. Ao mexer numa delas — ou ao
   acrescentar/tirar uma promessa —, medir a coluna do lado e voltar a acertar.
   Abaixo dos ~1100 as promessas quebram em duas linhas e a paridade cede.

   Esteve a 0/16/14/36: o texto colado ao filete e o link a 36px, e o que se
   via era a coluna a abrir apertada e a fechar solta. Com o mesmo degrau em
   cima e em baixo da lista, ela fica ao meio do que a enquadra.

   O ícone é `--ink-3`, como manda o sistema: a cor só entra quando comunica
   estado, e aqui não comunica nada. Fica alinhado pela PRIMEIRA LINHA do texto
   (`align-items:start` mais um `margin-top` de 2px), e não ao meio — numa
   promessa que quebre em duas linhas, um ícone centrado descia para o vão. */
.promessa{border-top:1px solid var(--line);padding-top:14px;}
/* ⚠️ SEM FILETE POR BAIXO DE CADA PROMESSA: o que as separa é o espaço, e o que
   as marca é o ícone. Ver a nota da altura, acima, antes de mexer nestes 14px. */
/* ⚠️ Os dois <p> desta coluna levam o `.site-main` à frente: o `.site-main p`
   (0,1,1) ganha a um seletor de classe sozinho (0,1,0) e punha-lhes o margin de
   14px do corpo — foi o que fez as primeiras tentativas de acertar a altura
   desta coluna não mexerem em nada. É a mesma armadilha do `.demo-legenda`. */
.site-main .pr-abre{margin:0 0 20px;font-size:var(--fs-body);color:var(--ink-2);line-height:1.55;}
.pr-linha{display:flex;align-items:start;gap:11px;margin-bottom:13px;
  font-size:var(--fs-body);color:var(--ink-2);line-height:1.55;}
.pr-linha:last-of-type{margin-bottom:0;}
.pr-linha .icon{width:16px;height:16px;flex-shrink:0;margin-top:2px;color:var(--ink-3);}
.pr-linha b{color:var(--ink);font-weight:600;}
/* ---------- O LINK DA POLÍTICA ----------
   ⚠️ FORA DA LISTA, E COM SETA. Foi a quinta linha, com o mesmo filete e o
   mesmo recuo das quatro promessas, e ali perdia-se: uma AÇÃO no meio de quatro
   AFIRMAÇÕES lê-se como mais uma afirmação. Aqui continua discreto — 13px, sem
   botão nenhum, sem fundo — mas está fora do ritmo da lista e leva a seta, que
   é o que diz que se sai da página.
   Leva o recuo do ícone (27px) para ficar na vertical do texto das promessas, e
   não na do símbolo. */
.site-main .pr-politica{margin:20px 0 0;padding-left:27px;font-size:var(--fs-small);}
.site-main .pr-politica a{text-decoration:none;display:inline-flex;align-items:baseline;gap:7px;}
.site-main .pr-politica a:hover{text-decoration:underline;}
/* A seta anda 3px quando se aponta: é o mesmo gesto do `.btn` e não custa uma
   peça nova. */
.pr-politica span{color:var(--ink-3);transition:transform .15s;display:inline-block;}
.site-main .pr-politica a:hover span{transform:translateX(3px);color:var(--ink);}

/* As FAQ FECHADAS. Cinco perguntas abertas eram dez parágrafos no fim da
   página; fechadas, são cinco linhas — e o texto continua todo no HTML, por
   isso o FAQPage e a indexação não perdem nada. O `<summary>` passa folgado
   dos 24px de alvo de toque pelos 14px de `padding` em cima e em baixo. */
.faq{border-top:1px solid var(--line);}
.faq details{border-bottom:1px solid var(--line);}
.faq summary{cursor:pointer;list-style:none;font-weight:600;font-size:var(--fs-body);
  padding:14px 30px 14px 0;margin:0;position:relative;}
.faq summary::-webkit-details-marker,
.p-mais summary::-webkit-details-marker{display:none;}
/* O sinal é um + que passa a − quando abre: dois traços em CSS, sem ícone e
   sem JS. Serve os DOIS <details> do site — as perguntas frequentes e o
   detalhe de cada paragem do /como-funciona.php —, e por isso os seletores
   estão agrupados em vez de copiados. */
.faq summary::after,.faq summary::before,
.p-mais summary::after,.p-mais summary::before{content:'';position:absolute;right:4px;top:50%;
  width:11px;height:1.5px;background:var(--ink-3);border-radius:2px;}
.faq summary::before,
.p-mais summary::before{transform:rotate(90deg);transition:transform .15s;}
.faq details[open] summary::before,
.p-mais[open] summary::before{transform:rotate(90deg) scaleX(0);}
.faq details[open] summary{color:var(--ink);}
.faq p{font-size:var(--fs-body);color:var(--ink-2);margin:0 0 14px;max-width:70ch;}

/* ---------- rodapé ---------- */


/* ================= O /como-funciona.php É UM PERCURSO =================
   Eram sete títulos numerados e vinte e três parágrafos corridos. Escrito
   assim, o texto está completo e ninguém o lê: quem chega quer saber em
   quinze segundos o que a ferramenta faz, e o que estava aqui pedia oito
   minutos e atenção contínua.

   A página passa a ter PARAGENS. Cada uma é:

     um número          diz onde se está e quanto falta
     uma frase          o que essa parte faz, e mais nada
     UM PEDAÇO DE ECRÃ  o argumento a sério, e o que se olha primeiro
     um <details>       o detalhe todo, fechado

   É a regra da página inicial (MOSTRAR, NÃO DESCREVER) levada ao fim: fora
   dos <details> não sobrou um parágrafo de mais de duas linhas.

   O TEXTO LONGO NÃO SE PERDEU, e não é pormenor: esta é a página que responde
   às pesquisas de cauda longa (como organizar candidaturas, folha de excel
   para candidaturas), e cortá-lo era deitar isso fora. Fechado num <details>
   continua todo no HTML e indexável — a mesma decisão que as FAQ da inicial já
   tinham tomado.

   Os mocks são o que a secção "A INICIAL MOSTRA O PRODUTO" descreve: HTML fixo
   que IMITA a app, não os componentes dela, com o mesmo preço — se uma vista
   mudar de forma na aplicação, vem-se cá com o app.css ao lado.

   TRÊS REGRAS DA CASA QUE CONTINUAM A MANDAR AQUI:
     - sem sombras: separa-se com a linha de 1px e com o espaço;
     - a cor é a das FAMÍLIAS DE ESTADO (fundo -c, letra -t), e só onde
       comunica estado; as miniaturas levam-na porque as vistas a levam;
     - sem emojis. Onde apetecesse um, entra um ícone do sprite a --ink-3.
   ===================================================================== */

/* Houve aqui a BARRA DE PARAGENS (.tour-nav), presa ao topo. Saiu com o markup:
   repetia no primeiro ecrã a lista que o percurso mostra logo a seguir. */

/* ---------- O PERCURSO É UM SÓ FIO ----------
   A página esteve DISPERSA, e a causa não era o texto: eram OITO CAIXAS
   CINZENTAS IGUAIS empilhadas, cada paragem com a sua régua a atravessar a
   página, o seu quadro emoldurado e o seu detalhe. Oito ilhas do mesmo tamanho
   e nada a ligar uma à seguinte — exactamente o que a regra desta casa proíbe
   ("não acrescentes caixas; o que agrupa é o nome que está por cima"), aplicada
   oito vezes seguidas.

   Três decisões desfazem isso:

   1. UM FIO CONTÍNUO desce a página, e cada paragem é uma ESTAÇÃO nele. Deixa
      de haver oito objectos: há um percurso com oito paragens, que é o que a
      página diz ser. O fio começa na primeira estação e acaba na última — não
      sai para fora de nenhuma delas, porque não há antes nem depois.

   2. A ESTAÇÃO É A BOLA NUMERADA dos "Começar leva um minuto" da página
      inicial (o `.passos li::before`): 28px, fundo `--row-alt`, contorno de
      1px, número a 700. Não é uma figura nova — é a mesma peça, à escala de uma
      página inteira, e por isso as duas páginas leem-se como o mesmo desenho.

   3. AS RÉGUAS ENTRE PARAGENS SAÍRAM. O fio já diz onde uma acaba e a seguinte
      começa, e um risco a atravessar a página por cima de cada estação cortava
      o fio em oito.

   ⚠️ ISTO NÃO É A COLUNA DE 186px QUE A APP RECUSOU (ver "O LAYOUT: a faixa").
   Lá, a coluna levava o nome e a nota da secção, custava 230px de largura ao
   conteúdo em TODAS as páginas e o que lá ficava era branco. Aqui são 48px, o
   que lá dentro vai é um algarismo, e o que se ganha é a continuidade que
   aquela coluna nunca deu. Se alguma vez isto crescer para levar texto, é a
   mesma conversa outra vez.

   A INDENTAÇÃO É DO BLOCO INTEIRO — título, frase, figura e detalhe começam
   todos na mesma vertical, 48px à direita do fio. Uma figura que arrancasse na
   margem da página e um texto que arrancasse aos 48 eram duas medidas na mesma
   paragem, que é a outra metade da dispersão. */
.percurso{position:relative;margin-top:30px;}
/* O fio: nasce no centro da primeira bola e morre no centro da última. Os 14px
   são metade dos 28 da bola; os 46 de baixo são a distância do topo da última
   estação ao seu centro mais o que sobra dela. */
.percurso::before{content:'';position:absolute;left:14px;top:14px;bottom:0;width:1px;
  background:var(--line);}
.percurso .paragem:last-child{position:relative;}
/* Tapa o fio abaixo da última estação: o `bottom` do fio não sabe onde a última
   bola está, e um risco a continuar por baixo do último detalhe prometia uma
   nona paragem. */
.percurso .paragem:last-child::after{content:'';position:absolute;left:14px;
  top:calc(var(--p-topo) + 16px);bottom:0;
  width:1px;background:var(--stripe);}

/* ⚠️ Foram tentados, para distinguir as paragens, mais ar (98px entre elas) e
   um filete de 1px por cima de cada uma a começar à direita do fio. Recusados:
   nenhum dos dois encaixava no ambiente da página. O `--p-topo` ficou a zero
   para a bola e a máscara do fio continuarem a contar a partir dele. */
.paragem{--p-topo:0px;position:relative;border-top:0;padding:0 0 0 48px;margin-top:54px;
  scroll-margin-top:16px;}
.paragem:first-of-type{margin-top:0;}
/* A ESTAÇÃO. O `--stripe` por trás do contorno é o que abre o buraco no fio:
   sem fundo, o risco passava por dentro da bola. */
/* Em tinta cheia com o número a branco: em contorno claro, oito bolas do
   cinzento do fio não marcavam onde cada paragem começa. É o ponto cheio do
   `.cm-fio` da inicial, que mostra este mesmo percurso em miniatura. */
.p-num{position:absolute;left:0;top:var(--p-topo);z-index:1;
  width:29px;height:29px;border-radius:50%;
  background:var(--ink);border:1px solid var(--ink);
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-small);font-weight:700;color:var(--bg);
  font-variant-numeric:tabular-nums;}
/* O título já não partilha a linha com o número — ele saiu para o fio. Fica no
   TAMANHO DE SECÇÃO da casa (o mesmo 1.25rem do `.site-main h2`, herdado): uma
   paragem É uma secção, e esteve a 1.15rem, que não é nível nenhum da escala —
   ficava a meio caminho entre a secção e a sub-secção sem ser nem uma nem
   outra. Perde a marca de 26px: a estação já diz que uma secção começou ali. */
/* ⚠️ O 'position:static' não é decoração: o `.site-main h2` é `relative` (por
   causa da marca de 26px que ele põe por cima de si), e com isso a estação
   ancorava no TÍTULO em vez da paragem — a bola saía por cima da primeira
   palavra, a 48px do sítio onde devia estar. */
/* ⚠️ O título da PARAGEM passou a ser o PAR leve+800, como as outras secções
   da casa (a parte a 800 vem do `forte` do `paragens.php`, num <b>). Esteve a
   600 e 1.25rem, com o argumento de que a estação já marcava o início; o
   resultado foi as paragens lerem-se corridas, sem distinção entre elas. O
   par distingue-as sem acrescentar espaço nem filete (os dois foram tentados e
   recusados). O <b> herda o 800 do `.site-main h2 b`. */
.paragem h2{position:static;margin:0 0 8px;padding-top:0;line-height:1.3;
  font-size:1.4rem;font-weight:300;letter-spacing:-.025em;}
/* A frase da paragem: UMA, e curta. Se precisar de duas, a segunda pertence ao
   <details> que está por baixo. */
/* Entrelinha do corpo: 1.65, a do `.site-main p` (estava a 1.6). */
.paragem > p{font-size:var(--fs-body);color:var(--ink-2);line-height:1.65;margin:0 0 18px;
  max-width:none;}
/* Esteve travada nos 62ch, como texto corrido, e partia em duas linhas uma frase
   que é uma só e cabia numa, com meia página de branco ao lado. Aqui é uma
   frase por paragem: vai à largura que precisar. */
.paragem > p b{color:var(--ink);}

/* ---------- DUAS FAMÍLIAS DE FIGURA, E A DIFERENÇA IMPORTA ----------
   O que emoldurava tudo era a mesma caixa cinzenta. Passam a ser duas coisas
   diferentes, porque são duas coisas diferentes:

   .p-arte  UM EXEMPLO DE ECRÃ — leva sempre a marca de exemplo (a faixa e o
            picotado), e a moldura é o que faz dele um espécime: uma amostra
            recortada da aplicação e pousada na página.
   .p-fig   UM DIAGRAMA — desenho da página, sem moldura nenhuma. O fio à
            esquerda e o nome por cima já o agrupam; uma caixa à volta só o
            afastava do texto que o explica.

   A alternância entre as duas é o que dá ritmo à página: quatro molduras e
   quatro desenhos livres, em vez de oito lajes iguais. */
.p-arte{position:relative;overflow:hidden;
  background:var(--row-alt);border:1px solid var(--line);border-radius:var(--radius-md);
  padding:16px 18px;}
/* ⚠️ As duas classes juntas, e não só '.exemplo': este bloco vem DEPOIS do do
   selo no ficheiro, e com a mesma especificidade o `padding` de cima ganhava —
   a faixa passava a tapar a primeira linha do quadro. */
.p-arte.exemplo{padding-top:38px;}
.p-fig{}
/* Um diagrama que venha a seguir a outra coisa dentro da mesma paragem respira
   por si: régua fina em cima e a folga da paragem. */
.p-fig + .p-fig{margin-top:22px;}

/* O DETALHE, FECHADO. O texto todo continua no HTML — é o que mantém a página
   a responder a pesquisas — mas não ocupa o ecrã de quem só quer perceber o que
   isto faz. O sinal de mais e de menos é o das FAQ, e as regras estão lá,
   agrupadas com as delas. */
.p-mais{margin-top:10px;}
/* O mesmo controlo que o <summary> das FAQ da inicial, e agora a mesma letra:
   estava a 12px em --ink-2, contra 14px em tinta lá. */
.p-mais summary{cursor:pointer;list-style:none;font-weight:600;font-size:var(--fs-body);
  color:var(--ink);padding:12px 24px 12px 0;position:relative;display:inline-block;}
/* INLINE-BLOCK, para o + ficar colado ao rótulo. Com o <summary> à largura
   toda (desde que as figuras deixaram o teto de 1040px), o sinal ia parar à
   margem direita da página, a mais de um metro do texto, e o rótulo lia-se como
   uma legenda solta, sem nada a dizer que abria. A cor do sinal é a das FAQ da
   inicial (--ink-3): o mesmo controlo, a mesma tinta. */
.p-mais[open] summary{color:var(--ink);}
.p-mais ul{margin:0 0 4px;}
.p-mais li{margin-bottom:8px;line-height:1.65;color:var(--ink-2);font-size:var(--fs-body);}
.p-mais p{margin:0 0 12px;line-height:1.65;color:var(--ink-2);font-size:var(--fs-body);}
.p-mais b{color:var(--ink);}

/* ---------- 1. a candidatura: dois campos cheios, o resto por preencher ---- */
.mform{display:grid;gap:8px;}
.mform-linha{display:grid;grid-template-columns:88px 1fr;gap:14px;align-items:baseline;
  background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:11px 13px;}
.mform-linha em{font-style:normal;font-size:var(--fs-label);letter-spacing:.1em;
  text-transform:uppercase;font-weight:600;color:var(--ink-3);}
.mform-linha b{font-size:var(--fs-body);font-weight:700;}
/* Os opcionais são pastilhas TRACEJADAS: dizem que aquilo pode ficar por
   preencher com a forma, sem uma palavra a explicá-lo. É o tratamento que o
   sinal + dos atalhos do mock da inicial já usa. */
/* A linha que separa os dois campos obrigatórios do resto. Leva o `.p-arte` à
   frente porque o `.site-main p` (0,1,1) ganharia a um `.nota` sozinho. */
.p-arte .nota{font-size:var(--fs-tiny);font-weight:600;color:var(--ink-3);margin:16px 0 9px;}
.mform-op{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;}
/* As duas metades lado a lado (ver o comentário no como-funciona.php). A da
   direita é mais larga porque são treze pastilhas contra dois campos; com as
   duas iguais, as pastilhas partiam em quatro linhas e os campos ficavam com
   branco à direita outra vez. Filete entre as duas, como no contador. */
.mcand{display:grid;grid-template-columns:minmax(260px,5fr) 7fr;gap:0;align-items:start;}
.mcand > div:first-child{padding-right:28px;}
.mcand > div + div{padding-left:28px;border-left:1px solid var(--line);align-self:stretch;}
.p-arte .mcand .nota{margin:0 0 9px;}
@media (max-width:820px){
  .mcand{grid-template-columns:1fr;}
  .mcand > div:first-child{padding-right:0;}
  .mcand > div + div{padding-left:0;border-left:0;margin-top:16px;}
}
.mform-op i{font-style:normal;font-size:var(--fs-tiny);font-weight:600;color:var(--ink-2);
  border:1px dashed var(--ink-3);border-radius:100px;padding:5px 11px;}

/* ---------- 2. os estados: a cadeia, e os três fins ---------- */
.mfluxo{display:flex;flex-wrap:wrap;align-items:center;gap:7px;}
.mfluxo em{font-style:normal;color:var(--ink-3);font-size:var(--fs-body);line-height:1;}
/* A pastilha de estado é a .db-tag do mundoutil.pt, como na app: cápsula,
   fundo pastel -c e letra -t da MESMA família. O estado que não diz nada sobre
   o processo (o silêncio, o retirado) sai cinzento, que é o que o ESTADO_COLOR
   do app.js faz com a família vazia. */
.mf{display:inline-flex;align-items:center;gap:6px;border-radius:20px;padding:5px 11px;
  font-size:var(--fs-tag);font-weight:600;letter-spacing:.02em;white-space:nowrap;
  background:var(--grey-light);color:var(--ink-2);}
.mf .icon{width:12px;height:12px;opacity:.85;}
.mf[data-cor="azul"]{background:var(--azul-c);color:var(--azul-t);}
.mf[data-cor="ambar"]{background:var(--ambar-c);color:var(--ambar-t);}
.mf[data-cor="rosa"]{background:var(--rosa-c);color:var(--rosa-t);}
.mf[data-cor="lilas"]{background:var(--lilas-c);color:var(--lilas-t);}
.mf[data-cor="verde"]{background:var(--verde-c);color:var(--verde-t);}
.mf[data-cor="laranja"]{background:var(--laranja-c);color:var(--laranja-t);}
.mfluxo-fim{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:14px;
  padding-top:14px;border-top:1px solid var(--line);
  font-size:var(--fs-tiny);font-weight:600;color:var(--ink-3);}

/* ---------- 3. as cinco vistas: cinco miniaturas em CSS ----------
   A parte mais visual da página, e a que pior se lia em texto: kanban, linha
   do tempo e cartões são três palavras que só dizem alguma coisa a quem já as
   conhece. Desenhadas, distinguem-se sem legenda — e a legenda que levam por
   baixo passa a dizer PARA QUE SERVE cada uma, em vez de tentar descrever a
   forma.
   São blocos vazios, sem uma palavra lá dentro: à altura a que vivem (84px),
   texto real seria ilegível e a miniatura passaria a pedir atenção em vez de a
   dar. */
.mvistas{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;}
.mv{margin:0;}
.mv-arte{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);
  height:84px;padding:7px;display:grid;gap:5px;overflow:hidden;}
/* A família de cor entra por uma variável posta no próprio bloco, como os
   cartões do mock da inicial fazem com o --estado-fundo. */
.mv-arte i{display:block;background:var(--fam-c,var(--row-alt));
  border:1px solid var(--fam-b,var(--line));border-radius:2px;}
/* Legenda de figura: 12px e 1.5, como a `.demo-legenda` da inicial (ia a 11px). */
.mv figcaption{margin-top:9px;font-size:var(--fs-small);color:var(--ink-soft);line-height:1.5;}
.mv figcaption b{display:block;color:var(--ink);font-size:var(--fs-small);margin-bottom:2px;}
/* cartões: 2x2, cada um com a barra do estado à esquerda */
.mv-cartoes{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;}
.mv-cartoes i,.mv-lista i{background:var(--row-alt);border-color:var(--line);
  border-left:3px solid var(--fam-b,var(--ink-3));}
/* lista: quatro linhas cheias */
.mv-lista{grid-template-rows:repeat(4,1fr);}
/* kanban: quatro colunas de cartões */
/* Cinco colunas, as do KANBAN_LANES da app (a quinta são as Fechadas). */
.mv-kanban{grid-template-columns:repeat(5,1fr);align-content:start;gap:4px;}
.mv-kanban span{display:grid;gap:4px;align-content:start;}
.mv-kanban i{height:13px;}
/* linha do tempo: barras de comprimentos diferentes sobre o mesmo eixo, e a
   régua de hoje, que é a única linha vertical em tinta da vista a sério */
.mv-tempo{grid-template-rows:repeat(4,1fr);position:relative;}
.mv-tempo i{border-radius:20px;}
.mv-tempo::after{content:"";position:absolute;top:5px;bottom:5px;left:72%;width:1.5px;
  background:var(--ink);}
/* calendário: 7x3, com três dias marcados */
.mv-calendario{grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(3,1fr);gap:3px;}


/* ---------- A FAIXA DE NÚMEROS, logo abaixo do herói ----------
   O que uma infografia faz primeiro: dá os números de que a coisa é feita,
   antes de explicar seja o que for. São quatro, e nenhum é enfeite — cada um
   responde a uma pergunta que se faz mesmo (quantos estados? de quantas
   maneiras vejo isto? guarda quanto tempo? tenho de inventar uma password?).
   ⚠️ É O `.mstat` DO app.css, valor a valor:
   número a 1.7rem/600 sozinho na primeira linha, ícone a 12px colado ao
   rótulo em caixa de frase, filete de 1px entre células iguais, e a fila só
   tão larga quanto precisa. Foi uma grelha de quatro colunas à largura toda,
   com algarismos a 300 e rótulos a partir em duas linhas: a 1400px cada
   número ficava a 340px do seguinte, e a fila lia-se como quatro coisas
   soltas em vez de um contador. Ícones a `--ink-3`: nenhum destes números é
   um estado, e a cor no sistema só entra quando o é. */
.numeros{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(max-content,1fr);
  width:max-content;max-width:100%;margin:22px 0 0;}
/* ALINHADO À ESQUERDA, e não centrado como o .mstat: aqui a fila vive na coluna
   do título, onde tudo começa na mesma vertical, e centrada cada número ficava
   solto a meio da sua célula. O primeiro encosta à margem do lead. */
.numeros div{display:flex;flex-direction:column;align-items:flex-start;gap:6px;
  padding:2px 26px;border-left:1px solid var(--line);text-align:left;}
.numeros div:first-child{border-left:0;padding-left:0;}
.numeros b{display:block;font-weight:600;font-size:1.7rem;line-height:1;letter-spacing:-.03em;
  color:var(--ink);font-variant-numeric:tabular-nums;}
.numeros span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;
  font-size:var(--fs-label);font-weight:600;letter-spacing:.02em;color:var(--ink-2);line-height:1.25;}
.numeros span .icon{width:12px;height:12px;flex-shrink:0;color:var(--ink-3);}
/* NUMA LINHA SÓ PEDE ~840px, e dentro da coluna do título do herói isso só existe
   acima dos ~1340 de janela. Abaixo, a fila empurrava a coluna e a caixa de
   entrada saía 11px pela direita (a 1200 a página rolava na horizontal). Parte
   em duas linhas de duas, e a coluna pode encolher (min-width:0). */
.heroi-guia > div{min-width:0;}
@media (max-width:1340px){
  .numeros{grid-auto-flow:row;grid-template-columns:repeat(2,max-content);width:auto;row-gap:16px;}
  .numeros div:nth-child(3){padding-left:0;border-left:0;}
}

/* ---------- A LINHA DE PASSOS ----------
   Um componente, dois usos: a vida de uma candidatura (paragem 2) e a régua dos
   follow-ups (paragem 4). São a mesma figura — marcas sobre um carril, com o
   momento por baixo — e por isso é a mesma classe.

   ⚠️ O CARRIL NÃO É UMA ESCALA. As células são iguais e os dias são rótulos,
   não posições: um eixo proporcional a sério punha "dia 0" e "dias 1 a 3"
   encavalitados e o "dia 7" a meio de uma pastilha. Quem quiser a escala a
   sério tem-na na vista Linha do tempo, que é onde ela significa alguma coisa.

   As pontas do carril param no centro da primeira e da última marca: um risco
   a sair para fora da primeira marca prometia um antes que não existe. */
.passo-linha{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0;}
.passo-linha li{flex:1 1 150px;position:relative;padding:24px 8px 0;text-align:center;margin:0;}
.passo-linha li::before{content:'';position:absolute;top:6px;left:0;right:0;height:1.5px;
  background:var(--line);}
.passo-linha li:first-child::before{left:50%;}
.passo-linha li:last-child::before{right:50%;}
.passo-linha .pm{position:absolute;top:1px;left:50%;margin-left:-5.5px;width:11px;height:11px;
  border-radius:50%;background:var(--bg);border:1.5px solid var(--ink-3);}
/* A marca cheia é a que já aconteceu; a oca, o que aí vem. É a mesma gramática
   da vista Linha do tempo — ver o AGENTS.md. */
.passo-linha .pm.cheia{background:var(--ink);border-color:var(--ink);}
.passo-linha em{display:block;font-style:normal;font-size:var(--fs-label);font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-bottom:7px;}
.passo-linha b{display:block;font-size:var(--fs-small);font-weight:700;line-height:1.35;}
.passo-linha span.nota{display:block;font-size:var(--fs-tiny);color:var(--ink-3);
  line-height:1.45;margin-top:4px;}
.passo-linha .mf{margin-top:2px;}
/* O rótulo que abre uma linha de passos ("Depois de uma entrevista:"). Leva o
   .p-arte à frente porque o .site-main p (0,1,1) ganharia a um .passo-titulo
   sozinho e comia-lhe a margem. */
/* O rótulo que abre uma linha de passos ("Depois de uma entrevista:"). O
   .paragem à frente ganha ao .site-main p (0,1,1), que lhe comia a margem. */
.paragem .passo-titulo{margin:0 0 6px;font-size:var(--fs-tiny);font-weight:700;color:var(--ink-2);}
/* Num diagrama o rótulo é uma legenda: 12px a 600 (ia a 11px a 700). Dentro do
   .p-arte fica como estava, porque aí segue a escala da app. */
.paragem .p-fig .passo-titulo{font-size:var(--fs-small);font-weight:600;}

/* ---------- O DIAGRAMA DA SINCRONIZAÇÃO ----------
   Três nós e duas setas. Substituiu três cartões com texto: a pergunta desta
   paragem — "onde é que isto fica?" — é sobre uma RELAÇÃO entre sítios, e uma
   relação desenha-se, não se enumera. */
.sinc{display:flex;align-items:stretch;justify-content:center;gap:0;flex-wrap:wrap;}
.sinc .sn{flex:1 1 190px;text-align:center;background:var(--bg);
  border:1px solid var(--line);border-radius:var(--radius-md);padding:16px 14px;}
.sinc .sn .icon{width:22px;height:22px;color:var(--ink-3);}
.sinc .sn.centro{border-color:var(--ink);}
.sinc .sn.centro .icon{color:var(--ink);}
.sinc .sn b{display:block;font-size:var(--fs-small);margin:9px 0 3px;}
.sinc .sn span{display:block;font-size:var(--fs-tiny);color:var(--ink-3);line-height:1.45;}
.sinc .seta{flex:0 1 90px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:5px;padding:0 6px;
  font-size:var(--fs-tiny);font-weight:700;color:var(--ink-3);text-align:center;}
.sinc .seta i{font-style:normal;font-size:1.15rem;line-height:1;color:var(--ink-3);}
.sinc-nota{margin-top:16px;padding-top:14px;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;gap:6px;}
.sinc-nota i{font-style:normal;font-size:var(--fs-tiny);font-weight:600;color:var(--ink-2);
  background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:5px 11px;}

/* ---------- O SALDO ENTRE DUAS PROPOSTAS ----------
   O número que a paragem existe para mostrar, e que estava só implícito nas
   duas colunas: a DIFERENÇA. Fica entre elas, em tinta, com o sinal — é a
   leitura que o comparador dá e que duas colunas lado a lado obrigam a fazer de
   cabeça. */
.saldo{display:flex;align-items:center;justify-content:center;flex-direction:column;
  gap:2px;padding:0 14px;text-align:center;}
.saldo b{font-weight:300;font-size:1.6rem;line-height:1;letter-spacing:-.03em;color:var(--ink);
  font-variant-numeric:tabular-nums;}
.saldo span{font-size:var(--fs-label);font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-3);}

/* ---------- 4. os lembretes: as linhas do "Para tratar" ----------
   As linhas são a `.demo-lembrete` do mock da inicial, que é o `.reminder-item`
   da app: a mesma figura, e não vale a pena um segundo desenho para ela. */
/* ⚠️ O exemplo e a régua do follow-up vão LADO A LADO. À largura toda, cada
   linha era um nome à esquerda e uma pastilha à direita com um metro de vazio
   no meio. O exemplo fica na medida do "Para tratar" da app (320 a 560px), e
   a régua ocupa o resto. Abaixo dos 820 empilham. */
.p-par{display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:40px;
  align-items:center;}
/* `.metade`: duas figuras irmãs (a semana e as oito semanas, na paragem 5), a
   meias e alinhadas por cima. A semana pede ~440px (o número e os sete dias),
   e com os 380 de antes os dias ficavam espremidos. */
.p-par.metade{grid-template-columns:repeat(2,minmax(0,1fr));gap:56px;align-items:start;}
/* O `.p-fig + .p-fig` põe 22px por cima da segunda figura, para quando vêm
   uma por baixo da outra. Lado a lado desencontrava os dois títulos. */
.p-par > .p-fig{margin-top:0;}
@media (max-width:820px){.p-par,.p-par.metade{grid-template-columns:1fr;gap:22px;}}

/* ---------- 5. as metas: a semana e as oito semanas ----------
   ⚠️ SÃO AS DUAS PEÇAS DO TOPO DA PÁGINA METAS, valor a valor: o
   `.semana-heroi` (o número grande "N de M" na cor da família, a barra pastel e
   o dia a dia em colunas) e o `.hist-colunas` (uma coluna por semana, a meta a
   tracejado). Foram uma fila de números com uma barra em tinta e uma lista de
   linhas com selo "Cumprida": o desenho de antes, que a app deixou. Ao mexer
   no app.css destas duas, mexer aqui. Usadas na paragem 5 do
   /como-funciona.php e (só as colunas) na prova das metas da inicial.

   A família vem de fora (`--fam-*`): azul enquanto a semana decorre, verde
   quando a meta se cumpre, como o renderGoal() faz. As peças são `<div>` e não
   `<p>`, para o `.site-main p` (0,1,1) não lhes pôr a margem do corpo. */
.msemana{--fam-c:var(--azul-c);--fam-b:var(--azul-b);--fam-t:var(--azul-t);
  display:grid;grid-template-columns:minmax(150px,210px) minmax(0,1fr);gap:28px;align-items:stretch;}
.ms-num{display:flex;align-items:baseline;gap:8px;line-height:1;}
.ms-num b{font-size:2.6rem;font-weight:600;letter-spacing:-.03em;color:var(--fam-t);font-variant-numeric:tabular-nums;}
.ms-num span{font-size:var(--fs-h2);font-weight:600;color:var(--ink-2);}
.ms-rot{margin:4px 0 10px;font-size:var(--fs-small);font-weight:600;color:var(--ink-2);}
.ms-barra{height:12px;border-radius:100px;background:var(--row-alt);box-shadow:inset 0 0 0 1px var(--line);overflow:hidden;}
.ms-barra i{display:block;height:100%;border-radius:100px;background:var(--fam-c);box-shadow:inset 0 0 0 1px var(--fam-b);}
.ms-falta{margin-top:8px;font-size:var(--fs-small);font-weight:600;color:var(--ink);line-height:1.45;}
.ms-falta span{color:var(--ink-3);font-weight:500;}
/* O dia a dia: o `.sh-dias` da app, colunas que esticam até ao topo do número.
   O número vai dentro da coluna, em baixo; hoje leva contorno, os dias que
   faltam vão a tracejado e sem número, porque ainda não aconteceram. */
.ms-dias{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;}
.ms-dias > div{display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0;}
.ms-dias i{position:relative;flex:1;min-height:60px;width:100%;max-width:44px;display:flex;align-items:flex-end;
  border-radius:4px;background:var(--row-alt);overflow:hidden;}
.ms-dias i b{display:block;width:100%;border-radius:4px;background:var(--fam-c);box-shadow:inset 0 0 0 1px var(--fam-b);}
.ms-dias i em{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding-bottom:4px;
  font-style:normal;font-size:var(--fs-label);font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}
.ms-dias span{font-size:var(--fs-label);font-weight:600;color:var(--ink-3);line-height:1.4;}
.ms-dias .hoje i{box-shadow:inset 0 0 0 1px var(--fam-b);}
.ms-dias .hoje span{color:var(--fam-t);font-weight:700;}
.ms-dias .futuro i{background:none;outline:1px dashed var(--line);outline-offset:-1px;}
.ms-dias .futuro span{opacity:.7;}
@media (max-width:520px){.msemana{grid-template-columns:1fr;gap:16px;}.ms-dias i{min-height:56px;}}

/* As oito semanas: verde a cumprida, âmbar abaixo (falhar uma semana não é um
   erro, e por isso não é vermelho), azul a de agora. O número fica em cima da
   coluna e a data por baixo. A linha da meta cai à mesma percentagem da pista,
   que começa 22px acima do fundo (a data, 16px, e o gap, 6px): a conta do
   `.hc-meta` da app. O carril é `--row-alt` sobre a página e branco dentro de
   um quadro cinzento, como lá dentro do painel. */
.mcol{position:relative;display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:10px;height:150px;}
.mcol > div{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;}
.mcol i{flex:1;width:100%;max-width:38px;display:flex;align-items:flex-end;border-radius:4px 4px 0 0;background:var(--row-alt);}
.prova-arte .mcol i{background:var(--bg);}
.mcol i b{position:relative;width:100%;min-height:3px;box-sizing:border-box;border-radius:4px 4px 0 0;
  background:var(--ambar-c);border:1px solid var(--ambar-b);}
.mcol .ok i b{background:var(--verde-c);border-color:var(--verde-b);}
.mcol .atual i b{background:var(--azul-c);border-color:var(--azul-b);}
.mcol i b em{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:3px;
  font-style:normal;font-size:var(--fs-small);font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}
.mcol > div > span{font-size:var(--fs-label);font-weight:600;line-height:16px;color:var(--ink-3);font-variant-numeric:tabular-nums;}
.mcol .atual > span{color:var(--azul-t);}
.mcol-meta{position:absolute;left:0;right:0;z-index:1;pointer-events:none;
  bottom:calc(22px + (100% - 22px) * var(--meta) / 100);border-top:1.5px dashed var(--ink);opacity:.55;}
.mcol-meta em{position:absolute;right:0;bottom:2px;font-style:normal;font-size:var(--fs-label);font-weight:700;color:var(--ink);}
/* Na prova da inicial o quadro é mais baixo, para fechar com o das propostas. */
.prova-arte .mcol{height:112px;margin-top:6px;}
/* O resumo por cima das colunas (o `.resumo-linha` da app) e a nota por baixo. */
.mcol-resumo{display:flex;flex-wrap:wrap;gap:4px 18px;margin-bottom:16px;font-size:var(--fs-small);color:var(--ink-3);}
.mcol-resumo b{color:var(--ink);font-weight:600;}
.mcol-resumo b.ok{color:var(--verde-t);}
.site-main .mcol-nota{font-size:var(--fs-small);font-weight:400;color:var(--ink-2);margin:12px 0 0;}
@media (max-width:420px){.mcol{gap:6px;}}

/* ---------- 6. os números: o funil ---------- */
.mfunil{display:grid;gap:8px;margin-top:16px;padding-top:16px;border-top:1px solid var(--line);}
.mfunil div{display:grid;grid-template-columns:1fr auto;align-items:center;gap:12px;
  font-size:var(--fs-tiny);font-weight:700;color:var(--ink-2);}
.mfunil i{display:block;height:15px;border-radius:3px;
  background:var(--azul-c);border:1px solid var(--azul-b);}

/* ---------- 7. as propostas: o que se compara ---------- */
.mcomp{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px;padding-top:16px;
  border-top:1px solid var(--line);}
.mcomp i{font-style:normal;font-size:var(--fs-tiny);font-weight:600;color:var(--ink-2);
  background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:5px 11px;}


/* Quatro cartões precisam de ~1000px para o nome de uma empresa não quebrar em
   três linhas. Em duas colunas continua a ler-se como uma grelha de cartões,
   que é o que ele tem de fazer aqui. */
@media (max-width:1000px){
  .demo-cartoes{grid-template-columns:repeat(2,1fr);}
}
/* O PERCURSO DO /como-funciona.php.
   As cinco miniaturas das vistas são o que aperta primeiro: a 84px de altura,
   abaixo de ~140px de largura deixam de se distinguir umas das outras, que é
   a única coisa que elas têm para fazer. Duas quebras, e não uma: a 900px
   passam a três por linha (5 = 3+2, e a linha de baixo alinha à esquerda), e
   a 560 a duas. */
@media (max-width:900px){
  .mvistas{grid-template-columns:repeat(3,1fr);}
  /* A faixa de números parte a meio antes de as colunas ficarem estreitas
     demais para o rótulo: a 900px cada uma tem ~200px e os rótulos de duas
     linhas passam a três. */
  .numeros{grid-auto-flow:row;grid-template-columns:1fr 1fr;width:auto;row-gap:16px;}
  .numeros span{white-space:normal;}
  .numeros div:nth-child(3){padding-left:0;border-left:0;}
  /* O diagrama da sincronização em coluna, com as setas a apontar para baixo:
     três nós lado a lado a 300px davam 90px cada um. */
  .sinc{flex-direction:column;align-items:stretch;}
  .sinc .sn{max-width:none;}
  .sinc .seta{flex:0 0 auto;padding:9px 0;}
  .sinc .seta i{transform:rotate(90deg);}
  /* O saldo passa para o meio de uma coluna só, entre as duas propostas. */
  .demo-ofertas.com-saldo{grid-template-columns:1fr;}
  .saldo{padding:6px 0;}
}
@media (max-width:560px){
  /* O título de secção encolhe com o herói: a 390px ele são 30px, e um título de
     22.4 ao lado disso deixava de haver degrau entre os dois — são o mesmo par,
     e o que os separa é o tamanho. */
  .site-main h2{font-size:1.3rem;margin-top:42px;}
  .mvistas{grid-template-columns:repeat(2,1fr);}
  /* O fio aperta-se num telemóvel: 48px de recuo são 12% da largura, e aqui
     cada pixel do texto conta. A bola encolhe com ele — o fio tem de continuar
     a passar-lhe pelo centro, e é isso que estes três valores garantem. */
  .paragem{padding-left:38px;}
  .p-num{width:25px;height:25px;font-size:var(--fs-tiny);}
  .percurso::before,.percurso .paragem:last-child::after{left:12px;}
  .paragem h2{font-size:1.25rem;gap:9px;}
  .p-arte{padding:13px 14px;}
}
@media (max-width:820px){
  .heroi{grid-template-columns:1fr;gap:22px;}
  /* A barra fica ao lado do título, e a caixa de entrada desce à largura toda,
     como a caixa do lembrete no topo do Descontos. */
  .heroi.com-acento{grid-template-columns:4px 1fr;column-gap:20px;}
  .heroi.com-acento > :last-child{grid-column:1/-1;}
  .grelha-3{grid-template-columns:1fr;}
  .provas{grid-template-columns:1fr;}
  /* As duas secções finais também: a coluna da direita passa para baixo. */
  /* A uma coluna o `row-gap` tem de valer o que valia a folga por cima de um
     `<h2>`: o `margin-top:0` do título vale para os DOIS (é `:first-child` da
     sua própria secção), e com um gap pequeno o segundo ficava colado ao
     cartão de cima. */
  .fecho{grid-template-columns:1fr;row-gap:30px;}
  /* O .e-quatro tem duas classes e ganhava a esta regra por especificidade: os
     quatro blocos ficavam em 2×1 num telemóvel, com duas palavras por linha. */
  .grelha-3.e-quatro{grid-template-columns:1fr;}
}

/* ---------- 6. os números: três painéis, um por pergunta ----------
   Ver o comentário no como-funciona.php. Três colunas separadas por filete,
   como as duas do exemplo da paragem 1; abaixo dos 900px empilham. As regras
   são as do .demo-plat ao lado (mesma letra, mesmo carril) para os três se
   lerem como um conjunto. */
.mnum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;}
.mnum > div{padding:0 28px;border-left:1px solid var(--line);}
.mnum > div:first-child{padding-left:0;border-left:0;}
.mnum > div:last-child{padding-right:0;}
.p-arte .mnum .passo-titulo{margin:0 0 12px;}
.p-arte .mnum-nota{margin:12px 0 0;font-size:var(--fs-tiny);font-weight:600;color:var(--ink-3);
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.mleg{display:inline-block;width:10px;height:10px;border-radius:2px;border:1px solid;}
.mleg.azul{background:var(--azul-c);border-color:var(--azul-b);}
.mleg.rosa{background:var(--rosa-c);border-color:var(--rosa-b);margin-left:6px;}
/* Setores: duas barras por linha, a de cima as candidaturas e a de baixo as
   entrevistas, sobre a mesma escala (a do setor com mais candidaturas). */
.mset{display:grid;grid-template-columns:88px 1fr auto;align-items:center;gap:10px;
  font-size:var(--fs-tiny);font-weight:700;}
.mset + .mset{margin-top:9px;}
.mset .nome{color:var(--ink);}
.mset .val{color:var(--ink-2);white-space:nowrap;font-variant-numeric:tabular-nums;}
.mset .barras{display:grid;gap:2px;}
.mset .barras i,.mset .barras u{display:block;height:6px;border-radius:100px;}
.mset .barras i{background:var(--azul-c);border:1px solid var(--azul-b);}
.mset .barras u{background:var(--rosa-c);border:1px solid var(--rosa-b);}
/* Rondas: as colunas do .ronda-col do app.css, em ponto pequeno. */
.mrondas{display:flex;gap:14px;align-items:flex-end;}
.mrondas > div{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;text-align:center;}
.mrondas .b{width:100%;max-width:56px;height:62px;display:flex;align-items:flex-end;
  background:var(--grey-light);border-radius:4px 4px 0 0;overflow:hidden;}
.mrondas .b i{display:block;width:100%;background:var(--rosa-c);border-top:2px solid var(--rosa-b);}
.mrondas b{margin-top:7px;font-size:var(--fs-h2);letter-spacing:-.02em;}
.mrondas em{font-style:normal;font-size:var(--fs-tiny);font-weight:700;color:var(--ink-2);}
.mrondas small{font-size:var(--fs-label);color:var(--ink-3);}
@media (max-width:900px){
  .mnum{grid-template-columns:1fr;row-gap:22px;}
  .mnum > div{padding:0;border-left:0;}
}

/* ---------- 8. o fecho do percurso ----------
   O convite a começar, DENTRO da última paragem (ver o comentário no
   como-funciona.php). Não é caixa: é uma linha com o botão e uma frase ao lado,
   no recuo das paragens, a seguir ao detalhe. O `.site-main` à frente é para
   ganhar ao `.site-main p{margin:0 0 14px}`, que é 0,1,1. */
.site-main .p-fecho{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;margin:26px 0 0;}
.site-main .p-fecho span{font-size:var(--fs-small);color:var(--ink-2);}
