/* ══ A LETRA ══════════════════════════════════════════════════════════════
   Inter Tight, variavel 300–700, servida do proprio site. Um so ficheiro de
   43 KB: o subconjunto latino basico cobre todos os acentos portugueses, e o
   latin-ext, que sao mais 87 KB, e para linguas de leste que nao usamos.
   font-display:swap — o texto aparece ja na letra do sistema e troca quando a
   outra chegar. Nunca ha um momento em que nao se leia nada.             */
@font-face{
  font-family:"Inter Tight";
  font-style:normal;
  font-weight:300 700;
  font-display:swap;
  src:url("fonts/inter-tight-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* Estilos partilhados — homepage, guia e política de privacidade. */
/* ════════════════════════════════════════════════════════════
   Paleta e tipografia medidas no site publicado — não alteradas.
   O que muda é a forma como a informação é apresentada.
   ════════════════════════════════════════════════════════════ */
:root{
  --page:#FFFFFF;          /* fundo do site — branco */
  --surface:#FFFFFF;       /* fundo dos cartões */
  --band:#F5F7F2;          /* banda alternada, quase impercetível */
  --field:#F5F7F2;         /* campos de formulário, para se lerem sobre branco */
  --line:#DFE3DA;          /* bordas */
  --line-soft:#ECEFE8;
  --head:#0B0B0A;          /* títulos */
  --body:#4A4A46;          /* texto corrente */
  --primary:#005F06;       /* botões */
  --deep:#0B0B0A;          /* verde profundo, para faixas grandes */
  --glow:#9FC30A;
  --eyebrow:#7A9608;   /* o --glow escurecido o suficiente para ser legivel como texto */          /* verde de destaque */
  --grad:linear-gradient(90deg,#005F06,#9FC30A 55%,#9FC30A);
  --logo-grad:linear-gradient(90deg,#009F0A,#9FC30A 58%,#FFD90A);
  --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --gut:clamp(20px,5vw,56px);
  --max:1180px;
  --r:20px;                /* raio dos cartões, como no site atual */
  --tracoFio:#B9C3B4;   /* carril e setas do fluxo: visivel sem competir */
  --rbtn:12px;             /* raio dos botões — cantos suaves, não pílula */
  color-scheme:light;      /* o site nao tem tema escuro; os controlos seguem o claro */
}

*{box-sizing:border-box}
html{scroll-behavior:smooth; background:var(--page)}
body{margin:0; background:var(--page); color:var(--body); font-family:var(--sans);
  font-size:17px; line-height:1.6; -webkit-font-smoothing:antialiased;
  /* clip e nao hidden: pela especificacao, overflow:hidden num eixo forca o
     outro a computar auto, e isso faz do <body> um contentor de scroll. Com
     o body a fazer scroll em vez da janela, o salto para #ancora deixa de
     funcionar em todo o site e o scrollY fica sempre a zero. O clip corta na
     horizontal exactamente na mesma, sem criar contentor nenhum. */
  overflow-x:clip}
img{max-width:100%; display:block}
a{color:inherit}
h1,h2,h3,h4{color:var(--head); margin:0; text-wrap:balance; letter-spacing:-.022em; line-height:1.08}
p{margin:0}
:where(a,button,input,textarea,summary,label,[tabindex]):focus-visible{outline:2px solid var(--glow); outline-offset:3px; border-radius:4px}
.shell{max-width:var(--max); margin:0 auto; padding-inline:var(--gut)}
section[id],footer[id]{scroll-margin-top:24px}   /* sem barra fixa, basta uma folga pequena */
/* O --glow nao chega para texto: a 12px da 3.2:1 sobre branco, e o minimo
   legivel sao 4.5:1. Este tom tem o mesmo matiz (126°) e a mesma saturacao
   (47%) — so desce a luminosidade de 42% para 34%, o suficiente para passar
   (4.86:1 sobre branco, 4.51:1 sobre a banda). Fica um token proprio porque
   o --glow e usado em 26 sitios onde e fundo ou traco, nao texto. */
.eyebrow{font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--eyebrow)}
/* ênfase no texto corrido — peso 600 e o tom dos títulos, nunca a negrito cheio */
p b, li b, .ans b{font-weight:600; color:var(--head)}

/* aviso de protótipo */
.todo{color:var(--amarelo-escuro); font-size:.92em; border-bottom:1px dotted currentColor; white-space:nowrap}

/* ── nav ─────────────────────────────────────────── */
/* ── marca ────────────────────────────────────────
   A barra de navegacao saiu: numa landing page so oferecia saidas para
   outras seccoes da propria pagina. A marca passou para dentro do hero,
   com mais presenca do que tinha na barra. */
.brand{display:flex; align-items:center; gap:11px; text-decoration:none}
.brand svg{height:34px; width:auto}
.brand b{font-size:15px; font-weight:700; color:var(--head); letter-spacing:-.01em; line-height:1.15}
.brand span{display:block; font-size:11px; font-weight:400; color:var(--body); letter-spacing:.04em}
.btn{display:inline-flex; align-items:center; justify-content:center; gap:8px; font-size:14px; font-weight:600;
  text-decoration:none; padding:13px 22px; border-radius:var(--rbtn); border:1px solid transparent; cursor:pointer;
  font-family:inherit; transition:background .15s ease,border-color .15s ease}
.btn-p{background:var(--primary); color:#FFFFFF}
.btn-p:hover{background:var(--glow)}

/* ── HERO ──────────────────────────────────────────
   Abre só com a fotografia. O texto entra à medida que se faz
   scroll, com a página presa. Tudo começa em --r:1 (visível), por
   isso se o JS não correr o hero funciona como um hero normal. */
/* Hero convencional (Lei de Jakob): a headline le-se de imediato, sem ficar
   presa ao scroll. O percurso de 200vh saiu; o mobile ja funcionava assim. */
.hs{position:relative; height:auto}
.hero{position:relative; z-index:1; min-height:0; overflow:hidden;
  background:var(--page); padding-block:clamp(44px,5.5vw,76px)}
/* A fotografia nunca se mexe — sem zoom, sem deslocamento.
   O véu começa invisível (fundo limpo) e entra com o texto,
   só o suficiente para o tornar legível. Por defeito é 1, para que
   sem JavaScript o texto continue a ler-se. */
.hbg{position:absolute; inset:0; z-index:0; overflow:hidden}
.hbg img{width:100%; height:100%; object-fit:cover}
.hbg::after{content:""; position:absolute; inset:0; opacity:var(--veil,1);
  background:linear-gradient(100deg,var(--page) 28%,color-mix(in srgb,var(--page) 72%,transparent) 58%,color-mix(in srgb,var(--page) 26%,transparent))}




.btn:focus-visible{outline:2px solid var(--primary); outline-offset:3px}

/* ── arranque da analise, no hero ──
   Dois passos: aqui pede-se o minimo, o resto do formulario fica em baixo.
   Sem envio real — e um prototipo. */
.hform{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  padding:clamp(18px,2.2vw,26px); box-shadow:0 1px 2px rgba(21,39,21,.05),0 18px 42px -24px rgba(21,39,21,.3)}
.hf-t{font-size:19px; font-weight:700; color:var(--head); letter-spacing:-.015em}
.hf-s{font-size:12px; font-weight:600; color:var(--body); margin-top:3px}
.hf-bar{height:5px; border-radius:999px; background:var(--line-soft); margin:13px 0 8px; overflow:hidden}
.hf-bar i{display:block; height:100%; width:50%; background:var(--grad);
  transition:width .45s cubic-bezier(.22,.61,.36,1)}
.hf-passo{font-size:11.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
  color:var(--body); text-align:right; margin-bottom:18px}
.hf-falta{font-size:14.5px; font-weight:600; color:var(--primary); margin-bottom:16px}
/* os dois passos vivem no mesmo cartao: o segundo entra sem a pagina se mexer */
.hf-etapa[hidden]{display:none}
.hf-etapa{animation:entra-etapa .3s ease-out}
@keyframes entra-etapa{from{opacity:0; transform:translateY(6px)} to{opacity:1; transform:none}}
@media(prefers-reduced-motion:reduce){.hf-etapa{animation:none}}
.hf-g2{display:grid; grid-template-columns:1fr 1fr; gap:0 14px}
@media(max-width:1180px) and (min-width:981px){.hf-g2{grid-template-columns:1fr}}
@media(max-width:430px){.hf-g2{grid-template-columns:1fr}}
.hform .f{margin-bottom:14px}
.hform .drop{margin-bottom:4px}
.hf-voltar{display:block; width:100%; margin-top:12px; padding:8px; background:none; border:0;
  font-family:inherit; font-size:14px; color:var(--body); cursor:pointer}
.hf-voltar:hover{color:var(--head)}
.hf-l{font-size:13px; font-weight:600; color:var(--head); display:block; margin-bottom:7px}
.hf-pick{display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:16px}
.hf-pick button{font-family:inherit; font-size:14px; font-weight:600; color:var(--head);
  background:var(--field); border:1.5px solid var(--line); border-radius:10px; padding:12px 8px; cursor:pointer}
.hf-pick button[aria-pressed="true"]{border-color:var(--primary); background:color-mix(in srgb,var(--glow) 12%,transparent); color:var(--primary)}
.hform input{font-family:inherit; font-size:15px; color:var(--head); background:var(--field);
  border:1px solid var(--line); border-radius:10px; padding:12px 13px; width:100%}
.hform input:focus{outline:0; border-color:var(--glow); box-shadow:0 0 0 3px color-mix(in srgb,var(--glow) 18%,transparent)}
.hform .btn-p{width:100%; margin-top:16px; padding:15px; font-size:15.5px}
/* micro-tranquilizadores colados ao botao, que e onde a duvida aparece */
.hf-note{display:flex; flex-wrap:wrap; justify-content:center; gap:5px 14px;
  margin-top:12px; font-size:12px; color:var(--body)}
.hf-note span{display:inline-flex; align-items:center; gap:5px}
.hf-note span::before{content:""; width:4px; height:4px; border-radius:50%; background:var(--glow)}

/* No telemovel o topo tem de caber: menos respiracao entre blocos, para o
   arranque da analise aparecer sem obrigar a deslizar meia pagina. */
@media(max-width:620px){
  .hero{padding-block:26px 34px}

}


@media(max-width:980px){
  .hs{height:auto}
  .hero{position:static; height:auto; min-height:0; padding-block:clamp(52px,8vw,88px)}
}
@media(max-width:820px){
  .hbg::after{background:linear-gradient(180deg,color-mix(in srgb,var(--page) 78%,transparent),var(--page) 66%)}
}
@media(prefers-reduced-motion:reduce){
  .hs{height:auto}
  .hero{position:static; height:auto; min-height:0; padding-block:clamp(52px,8vw,88px)}
}

/* ── corrente: dois fios a atravessar a página entre o hero e os números ── */
.corrente{position:relative; height:clamp(44px,5vw,72px); background:var(--page);
  display:flex; align-items:center; overflow:hidden}
.corrente i{position:relative; display:block; width:100%; height:1px}   /* sem linha de base: só a luz é que se vê */
.corrente i::after{content:""; position:absolute; left:0; top:-1.5px; height:4px; width:18%;
  border-radius:3px; will-change:transform;
  filter:drop-shadow(0 0 7px rgba(159,195,10,.6))}
/* faixa de cima: a corrente vai da esquerda para a direita */
.corrente i::after{
  background:linear-gradient(90deg,transparent,#009F0A 30%,#9FC30A 58%,#FFD90A 78%,transparent);
  animation:corrente-ida 3.4s linear infinite}
/* faixa de baixo: volta no sentido contrário, como o retorno de um circuito */
.corrente.volta i::after{
  background:linear-gradient(90deg,transparent,#FFD90A 22%,#9FC30A 42%,#009F0A 70%,transparent);
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}
@keyframes corrente-ida{from{transform:translateX(-120%)} to{transform:translateX(560%)}}
@keyframes corrente-volta{from{transform:translateX(560%)} to{transform:translateX(-120%)}}
@media(prefers-reduced-motion:reduce){.corrente i::after{animation:none; display:none}}
/* O recuo ao início do ciclo é instantâneo: sem isto via-se o risco a
   desdesenhar-se, e no primeiro carregamento via-se o número já riscado. */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .fs{height:auto}
}

/* ── secções ──────────────────────────────────────── */
.pad{padding-block:clamp(56px,7.5vw,96px)}
.band{background:var(--band)}
.shead{max-width:62ch; margin-bottom:clamp(28px,4vw,48px)}
.shead h2{font-size:clamp(26px,3.4vw,40px); font-weight:700; margin:11px 0 0}
.shead p{margin:14px 0 0; font-size:17.5px}
/* Os cartoes nao reagem ao rato. Sao informacao, nao sao botoes: qualquer
   realce ao passar por cima promete uma accao que nao existe. */
/* os pratos da balança são formas fechadas: levam preenchimento */


/* A seta que descia em ciclo saiu com o ícone que a usava. */

/* O CTA da faixa escura e o unico amarelo da pagina: sobre verde profundo, e
   a cor que salta mais, e o halo chama o olho sem mexer o botao de sitio. */
.btn-claro{position:relative; background:#FFD90A; color:var(--deep);
  font-size:15.5px; font-weight:700; padding:16px 30px; margin-top:26px;
  box-shadow:0 10px 28px -12px rgba(255,217,10,.6);
  transition:background .15s ease, transform .18s ease, box-shadow .25s ease}

.btn-claro::before{content:""; position:absolute; inset:0; border-radius:inherit;
  pointer-events:none; animation:halo-amarelo 3.4s cubic-bezier(.22,.61,.36,1) infinite}
@keyframes halo-amarelo{
  0%  {box-shadow:0 0 0 0 rgba(255,217,10,.6)}
  70% {box-shadow:0 0 0 19px rgba(255,217,10,0)}
  100%{box-shadow:0 0 0 0 rgba(255,217,10,0)}
}
.btn-claro:hover{background:var(--amarelo-claro); transform:translateY(-2px);
  box-shadow:0 16px 34px -12px rgba(255,217,10,.75)}
.btn-claro:hover::before{animation-play-state:paused}   /* com o rato em cima ja tem a atencao */
.btn-claro:active{transform:translateY(0)}
@media(prefers-reduced-motion:reduce){
  .btn-claro::before{animation:none}
  .btn-claro:hover{transform:none}
}

form{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); padding:clamp(20px,3vw,32px)}
.f{display:flex; flex-direction:column; gap:6px; margin-bottom:16px}
.f label{font-size:13px; font-weight:600; color:var(--head)}
.f label u{color:var(--glow); text-decoration:none}
.f input,.f textarea{font-family:inherit; font-size:15px; color:var(--head); background:var(--field);
  border:1px solid var(--line); border-radius:10px; padding:11px 13px; width:100%}
.f textarea{min-height:82px; resize:vertical}
.f input:focus,.f textarea:focus{outline:0; border-color:var(--glow); box-shadow:0 0 0 3px color-mix(in srgb,var(--glow) 18%,transparent)}
.f input::placeholder,.f textarea::placeholder{color:color-mix(in srgb,var(--body) 62%,transparent)}
.drop{display:block; border:1.5px dashed var(--line); border-radius:14px; padding:22px; text-align:center;
  font-size:14px; cursor:pointer; background:var(--field)}
.drop:hover{border-color:var(--glow)}
.drop b{display:block; color:var(--head); font-size:15px; margin-bottom:4px}
.consent{display:grid; grid-template-columns:auto 1fr; gap:11px; align-items:start; margin:20px 0 18px; padding-top:18px; border-top:1px solid var(--line-soft)}
.consent input{width:17px; height:17px; margin-top:2px; accent-color:var(--primary)}
.consent label{font-size:13.5px; line-height:1.6}
.consent a{color:var(--primary)}
form .btn-p{width:100%; padding:15px; font-size:15px}
form .btn-p:disabled{opacity:.45; cursor:not-allowed}

/* 7 · FAQ */
.faq{border-top:1px solid var(--line)}
details{border-bottom:1px solid var(--line)}
summary{list-style:none; cursor:pointer; display:grid; grid-template-columns:1fr auto; gap:18px; align-items:center;
  padding:19px 0; font-size:18px; font-weight:600; color:var(--head)}
summary::-webkit-details-marker{display:none}
summary i{font-style:normal; font-size:20px; color:var(--glow); transition:transform .2s ease; line-height:1}
details[open] summary i{transform:rotate(45deg)}
.ans{padding:0 0 20px; max-width:64ch; font-size:16.5px}
.ans p{margin-bottom:.75em} .ans p:last-child{margin-bottom:0}
.ans b{color:var(--head)}

/* 8 · footer */
/* O rodape fecha no mesmo verde da faixa do problema: a pagina abre em branco,
   passa pelo verde a meio e volta a fechar nele. Tudo o que la dentro herdava
   cores pensadas para fundo claro tem de ser redito — a comecar pelo .todo,
   que em castanho sobre verde escuro seria ilegivel. */
footer{background:var(--deep); color:color-mix(in srgb,#FFFFFF 78%,transparent);
  border-top:none; padding-block:clamp(48px,6vw,72px) 26px}
footer .brand b{color:#FFFFFF}
footer .brand span{color:color-mix(in srgb,#FFFFFF 56%,transparent)}
footer .fg h3{color:color-mix(in srgb,#9FC30A 92%,transparent)}
footer .fg a{color:#FFFFFF}
footer .fg a:hover{color:#FFD90A}
footer .fg .tag{color:color-mix(in srgb,#FFFFFF 76%,transparent)}
footer .legal{border-top:1px solid color-mix(in srgb,#FFFFFF 16%,transparent);
  color:color-mix(in srgb,#FFFFFF 56%,transparent)}
footer .todo{color:#FFD90A}
/* Estas regras .fg estão mortas: as treze páginas têm id="rodape" no
   footer, e o bloco RODAPÉ lá em baixo é mais específico. Ficam porque
   apagá-las agora é mexer onde não é preciso — mas é lá que se edita. */
.fg{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:clamp(22px,4vw,44px); padding-bottom:32px}
@media(max-width:880px){.fg{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.fg{grid-template-columns:1fr}}
/* h3 e nao h4: o ultimo titulo antes do rodape e sempre um h2, e saltar
   directamente para h4 deixava um buraco na hierarquia em todas as paginas.
   O tamanho e o mesmo — o nivel do titulo e estrutura, nao aparencia. */
.fg h3{font-size:12px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--body); margin-bottom:14px}
.fg ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:9px; font-size:15px}
.fg a{text-decoration:none} .fg a:hover{color:var(--primary)}
.fg .tag{margin-top:14px; max-width:34ch; font-size:15.5px}
.legal{padding-top:20px; border-top:1px solid var(--line); font-size:13px;
  display:flex; flex-wrap:wrap; gap:6px 24px; line-height:1.8}
/* ══ Fase 3 — páginas do guia e política ═══════════════════════ */

/* Mais largo: 72ch dava uma coluna estreita de mais para paginas que sao
   so texto. 84ch mantem a linha legivel e ocupa a pagina. */
.artigo{max-width:84ch; padding-block:clamp(38px,5vw,64px)}
.artigo .migalhas{font-size:13px; color:var(--body); margin-bottom:18px}
.artigo .migalhas a{color:var(--body)}
.artigo .migalhas a:hover{color:var(--head)}
.artigo h1{font-size:clamp(28px,3.6vw,44px); font-weight:700; letter-spacing:-.03em;
  line-height:1.08; text-wrap:balance}
.artigo .resumo{font-size:clamp(17.5px,1.6vw,21px); line-height:1.55; margin-top:18px}
.artigo h2{font-size:clamp(21px,2.2vw,27px); font-weight:700; letter-spacing:-.02em;
  margin-top:clamp(34px,3.6vw,48px)}
.artigo h3{font-size:18px; font-weight:700; margin-top:26px}
.artigo p{margin-top:15px; font-size:17px; line-height:1.68}
.artigo ul{margin:14px 0 0; padding-left:0; list-style:none}
.artigo li{position:relative; padding-left:20px; margin-top:10px; font-size:17px; line-height:1.62}
.artigo li::before{content:""; position:absolute; left:0; top:11px; width:9px; height:2px;
  border-radius:2px; background:var(--glow)}
.artigo .fonte{font-size:13.5px; color:var(--body); border-left:2px solid var(--line);
  padding-left:14px; margin-top:20px}
.artigo table{width:100%; border-collapse:collapse; margin-top:18px; font-size:15.5px}
.artigo th,.artigo td{text-align:left; padding:11px 12px 11px 0; border-bottom:1px solid var(--line)}
.artigo th{font-size:12px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--body)}

/* páginas relacionadas, no fim de cada artigo */
.relacionados{margin-top:clamp(34px,4vw,48px); padding-top:24px; border-top:1px solid var(--line)}
.relacionados h2{font-size:14px; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
  color:var(--body); margin:0}
/* Colunas fixas em vez de auto-fit/auto-fill. Sao sempre seis cartoes, por
   isso 2 colunas no telemovel e 3 no desktop dao sempre filas completas —
   3x2 e 2x3 — sem nenhum cartao esticado a preencher o que sobra.
   Com auto-fit, uma fila incompleta alargava os cartoes que la estavam e
   ficavam maiores do que os de cima. Em coluna unica o bloco ficava com
   431px no telemovel, mais de meio ecra so para "continuar a ler". */
.relacionados ul{list-style:none; margin:14px 0 0; padding:0; display:grid;
  grid-template-columns:1fr 1fr; gap:10px}
@media(min-width:700px){.relacionados ul{grid-template-columns:repeat(3,1fr)}}
.relacionados li{padding:0}
.relacionados li::before{display:none}
/* mais apertados do que eram: passaram de tres para seis, e com o espacamento
   antigo o bloco do fim do artigo ficava maior do que a ultima seccao do texto */
.relacionados a{display:block; padding:12px 14px; text-decoration:none;
  border:1px solid var(--line); border-radius:var(--rbtn); background:var(--surface);
  font-size:14.5px; font-weight:600; line-height:1.3; color:var(--head)}
.relacionados a:hover{border-color:var(--primary); color:var(--primary)}

/* índice do guia */
/* auto-FILL e nao auto-fit: com sete artigos a ultima fila tem um cartao
   so, e o auto-fit esticava-o a toda a largura. O auto-fill deixa as colunas
   vazias e ele fica do tamanho dos outros. Mesmo motivo do .relacionados. */
.indice{display:grid; grid-template-columns:repeat(auto-fill,minmax(290px,1fr));
  gap:clamp(16px,2vw,24px); margin-top:clamp(26px,3vw,38px)}
.indice a{display:block; padding:24px; text-decoration:none; background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r)}
.indice a:hover{border-color:var(--primary); box-shadow:0 12px 30px -22px rgba(11,93,42,.7)}
/* h3 e nao h2: cada cartao esta agora dentro de um grupo com o h2 da
   categoria por cima. O tamanho e o mesmo — o nivel e estrutura. */
.indice h3{font-size:19px; font-weight:700; color:var(--head); margin:0; letter-spacing:-.015em}
.indice p{margin-top:9px; font-size:15px; line-height:1.55; color:var(--body)}

/* ══ Fase 3 — footer ═══════════════════════════════════════════ */

.fg .todo{display:inline-block}

/* o negrito dentro da faixa de CTA (a resposta sobre como a EVA e paga) */
/* CTA de fim de seccao. Estas regras tinham-se perdido num corte anterior e o
   botao colava-se ao que vinha por cima — dai aparecer encavalitado. */
.cta-linha{display:flex; flex-wrap:wrap; align-items:center; gap:18px 32px;
  margin:clamp(36px,4.6vw,58px) 0 6px; padding:0;
  background:none; border:0; border-radius:0}
.cta-linha .btn{font-size:16px; padding:17px 30px;
  box-shadow:0 8px 22px -12px rgba(11,93,42,.65)}
.cta-linha .btn:hover{box-shadow:0 12px 26px -12px rgba(11,93,42,.7)}
.cta-linha span{font-size:clamp(17px,1.6vw,20px); font-weight:600; line-height:1.45;
  color:var(--head); max-width:42ch; letter-spacing:-.012em}
@media(max-width:860px){
  .cta-linha{flex-direction:column; align-items:stretch; text-align:left}
  .cta-linha .btn{width:100%; order:2}
  .cta-linha span{order:1; font-size:15px}
}
/* fecho do FAQ: nao e um botao, e um convite a ligar ou escrever */
.cta-duvida{display:block}
.cta-duvida span{max-width:none; font-size:17px; font-weight:600}
.cta-duvida a{color:var(--primary); font-weight:700; text-decoration:none;
  white-space:nowrap;
  border-bottom:2px solid color-mix(in srgb,var(--glow) 45%,transparent)}
.cta-duvida a:hover{border-bottom-color:var(--primary)}

/* CTA sozinho, sem frase ao lado: fica centrado, que é onde o olho o procura
   quando não há mais nada na linha. */
.cta-so{justify-content:center}
@media(max-width:860px){.cta-so .btn{width:auto; min-width:min(100%,340px)}}

/* Indicativo ao lado do número, não dentro dele. O seletor é nativo de
   propósito: no telemóvel abre a roda do sistema, que toda a gente já sabe usar. */
.f-tel{display:grid; grid-template-columns:auto minmax(0,1fr); gap:8px}
.f-tel select{font-family:inherit; font-size:15px; font-variant-numeric:tabular-nums;
  color:var(--head); background:var(--field); border:1px solid var(--line);
  border-radius:10px; padding:11px 9px; cursor:pointer}
.f-tel select:focus{outline:0; border-color:var(--glow);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--glow) 18%,transparent)}

/* ══ Reposto: blocos perdidos num corte de CSS ═════════════════ */

/* quem está por trás — três afirmações com um acento curto de cor */
/* ── aqui vivia o desenho antigo do "quem somos" ─────────────────────────
   Eram três cartões lado a lado, cada um com um <b> grande por título. A
   secção foi reconstruída com <dt>/<dd> e um só filho, o .quem-in, mas
   estas regras ficaram — e continuavam a apanhar a secção nova, porque o
   nome da classe é o mesmo.

   Faziam duas estragas ao mesmo tempo:

     .quem{display:grid; grid-template-columns:repeat(3,1fr)}
     punha a secção em três colunas. O .quem-in é filho único, caía na
     primeira, e ficava com 298 px dentro de uma secção de 1009. Tudo
     espremido no terço esquerdo do ecrã, com dois terços vazios à direita.

     .quem b{display:block; font-size:clamp(22px,2.2vw,28px)}
     apanhava os negritos no meio das frases dos compromissos. "todos os
     meses" e "por escrito em até 3 dias úteis" saíam a 22,5 px e em bloco,
     dentro de parágrafos de 14,5 px.

   O que a secção precisa de cor e espaçamento está mais abaixo, no bloco
   QUEM SOMOS. Aqui não fica nada. */
/* a equipa só aparece quando houver nomes e fotografias reais */
.equipa{margin-top:clamp(28px,3.4vw,42px);
  display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:22px}
.equipa[hidden]{display:none}

/* formulário do hero */
.hf-pick-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:1180px) and (min-width:981px){.hf-pick-3{grid-template-columns:1fr 1fr}}
@media(max-width:420px){
  .hf-pick-3{grid-template-columns:1fr 1fr}
  .hf-pick-3 button:last-child{grid-column:1 / -1}
}
.hf-opcional{font-size:12.5px; color:var(--body); text-align:center; margin:8px 0 16px}
.hf-sem-fatura[hidden]{display:none}
.hf-ajuda{font-size:12.5px; color:var(--body); line-height:1.45; margin-top:6px}
/* os erros aparecem onde o erro está, nunca no topo do formulário */
.hf-erro{font-size:13px; font-weight:600; color:#B3261E; margin:7px 0 0}
.hf-erro[hidden]{display:none}
.hform input.erro{border-color:#B3261E; box-shadow:0 0 0 3px rgba(179,38,30,.13)}
.hform textarea{font-family:inherit; font-size:15px; color:var(--head); background:var(--field);
  border:1px solid var(--line); border-radius:10px; padding:11px 13px; width:100%;
  min-height:78px; resize:vertical}
.hform textarea:focus{outline:0; border-color:var(--glow);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--glow) 18%,transparent)}
/* a confirmação substitui o formulário, para não restar dúvida de que foi */
.hf-feito{text-align:center; padding:18px 0 6px}
.hf-feito-ic{width:46px; height:46px; margin:0 auto 14px; border-radius:50%;
  background:color-mix(in srgb,var(--glow) 16%,transparent); color:var(--primary);
  font-size:23px; font-weight:700; line-height:46px}
.hf-feito-t{font-size:19px; font-weight:700; color:var(--head); letter-spacing:-.015em}
.hf-feito-s{font-size:15px; color:var(--body); margin-top:7px}
@media(max-width:620px){
  #garantias .cta-linha{grid-column:1; grid-row:auto}
}

/* Data de atualização nos artigos do guia. Os motores de resposta
   despriorizam conteúdo sem data — não sabem se é de ontem ou de 2015. */
.artigo .datado{margin-top:12px; font-size:13.5px; color:var(--body)}

/* Erro de envio: fica debaixo do botao, centrado com ele, e com espaco em
   cima para nao parecer legenda do botao. */
.hf-erro-geral{text-align:center; margin-top:12px; line-height:1.45}

/* O <picture> do hero e so um invólucro para o browser escolher entre AVIF,
   WebP e JPG — nao pode introduzir uma caixa nova no layout, senao o
   width:100%/height:100% da imagem passava a medir-se contra ele em vez de
   contra o .hbg. Ocupa exactamente o lugar que a <img> ocupava. */
.hbg picture{position:absolute; inset:0; display:block}

/* ── cabecalho das subpaginas ────────────────────────────────────────
   A homepage nao tem cabecalho de proposito: e uma landing page, e cada
   link no topo e uma saida antes do formulario. As outras paginas tem,
   porque ai a pessoa precisa de caminho de volta.

   Estas regras faltavam. As classes .topo, .marca e .tel estavam no HTML
   das subpaginas desde o inicio sem uma linha de CSS que as apanhasse, e o
   logo saia em tamanho natural a encher o ecra. */
.topo{border-bottom:1px solid var(--line); background:var(--page); padding-block:14px}
.topo .shell{display:flex; align-items:center; gap:clamp(12px,2vw,24px)}

/* margin-right:auto empurra o telefone e o botao para a direita sem
   precisar de space-between, que abriria buracos quando o telefone sai */
.topo .marca{display:inline-flex; align-items:center; gap:11px;
  text-decoration:none; margin-right:auto}
.topo .marca svg{height:38px; width:auto; flex:none}
.topo .marca b{font-size:17px; font-weight:700; color:var(--head);
  letter-spacing:-.02em; line-height:1.1}
.topo .marca span{display:block; font-size:10.5px; font-weight:400;
  letter-spacing:.07em; text-transform:uppercase; color:var(--body); margin-top:2px}

.topo .tel{font-size:15px; font-weight:600; color:var(--head);
  text-decoration:none; white-space:nowrap}
.topo .tel:hover{color:var(--primary)}
.topo .btn{font-size:14.5px; padding:11px 18px; white-space:nowrap}

@media(max-width:720px){
  /* o numero sai: o botao e o caminho principal e o telefone esta no rodape */
  .topo .tel{display:none}
  .topo .marca svg{height:32px}
  .topo .marca b{font-size:15px}
  .topo .marca span{display:none}
}
@media(max-width:420px){
  .topo .btn{font-size:13px; padding:10px 13px}
}

/* ── grupos do guia ──────────────────────────────────────────────────
   O rodape lista categorias e nao artigos: artigos acumulam-se e aquela
   coluna, com trinta deles, ficava impossivel. Aqui e o mesmo principio —
   o indice agrupa em vez de alinhar, e cada grupo tem uma ancora para onde
   o rodape aponta. Um artigo novo entra num grupo que ja existe. */
.grupo{margin-top:clamp(34px,4.6vw,56px); scroll-margin-top:24px}
.grupo .cat-intro{margin-top:7px; font-size:16px; line-height:1.55; color:var(--body); max-width:60ch}
.grupo .indice{margin-top:clamp(16px,2vw,22px)}

/* ── faixa de logotipos de clientes ──────────────────────────────────
   ESQUELETO. A seccao tem o atributo hidden e nao esta a ser mostrada.
   Fica a seguir aos numeros de proposito: e ali que a prova social vale
   mais, logo a seguir a quem ja leu a promessa e antes de descer.

   PARA A LIGAR: tirar o hidden da <section id="clientes"> e substituir
   cada [A PREENCHER] por um <img>. Cada logotipo liga a sua empresa em
   clientes.html#id-da-empresa. Ver as instrucoes no topo do clientes.html.

   Regra pratica: manter alturas semelhantes entre logotipos, senao a
   faixa fica aos altos. O max-height abaixo trata da maioria dos casos. */
#clientes[hidden]{display:none}
.logos{list-style:none; margin:clamp(18px,2.2vw,26px) 0 0; padding:0; display:grid;
  grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:clamp(12px,1.6vw,20px)}
.logos li{padding:0}
.logos li::before{display:none}
.logos a{display:flex; align-items:center; justify-content:center; min-height:66px;
  padding:12px; text-decoration:none; background:var(--surface);
  border:1px solid var(--line); border-radius:var(--rbtn)}
.logos a:hover{border-color:var(--primary)}

/* A garantia sobre os dados, debaixo do consentimento. Estava numa seccao
   propria oito ecras abaixo; a hesitacao em entregar a fatura acontece aqui.
   Discreta de proposito: e para tranquilizar quem ja esta a decidir, nao
   para disputar atencao com o botao. */
.hf-dados{margin-top:10px; font-size:12.5px; line-height:1.5; color:var(--body)}
.hf-dados a{color:var(--primary); font-weight:600; text-decoration:none;
  border-bottom:1px solid color-mix(in srgb,var(--primary) 35%,transparent)}
.hf-dados a:hover{border-bottom-color:var(--primary)}

/* O CTA do indice do guia vinha colado ao ultimo cartao: a margem normal do
   .cta-linha chega quando o que esta acima e texto, mas nao quando e uma
   caixa com contorno — o olho le a borda como fim e precisa de mais ar. */
.grupo + .cta-linha{margin-top:clamp(50px,6.2vw,80px)}

/* ══ revisão de espaçamentos ═══════════════════════════════════════════

   O CTA das paginas de artigo estava esmagado a 15px. A causa nao era a
   margem do .cta-linha, que pede 36 a 58px — era a especificidade: dentro
   do .artigo, o selector ".artigo p" (0,1,1) ganha a ".cta-linha" (0,1,0) e
   impunha os 15px dos paragrafos de texto corrido. Afectava a FAQ, a
   privacidade, a 404, os clientes e os sete artigos do guia. */
.artigo p.cta-linha{margin-top:clamp(40px,5vw,64px)}
/* dois CTA seguidos (o "tem outra duvida" e o botao) nao precisam do vao
   todo entre si, mas 15px colava-os um ao outro */
.artigo p.cta-linha + p.cta-linha{margin-top:clamp(20px,2.4vw,28px)}

/* o acordeao comecava colado ao titulo da seccao: zero pixeis medidos */
.artigo .faq{margin-top:clamp(20px,2.4vw,28px)}

/* o botao para o guia completo, debaixo dos tres artigos relacionados */
.rel-todos{margin-top:clamp(18px,2.2vw,26px)}
.artigo p.rel-todos{margin-top:clamp(18px,2.2vw,26px)}

/* ── #solar: as duas modalidades, com pesos diferentes ───────────────
   A versao em tabela dava-lhes o mesmo peso e nao se percebia o que a EVA
   esta a vender. Mas so uma delas esta explicada: o email do cliente detalha
   a sem investimento e nao diz quase nada da outra.

   Por isso a sem investimento leva fundo, o numero grande e a lista do que
   fica do lado da EVA; a com investimento fica ao lado, curta e sem fundo.
   A hierarquia e a do que sabemos, nao uma invencao comercial. */
.opcoes{display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,.9fr);
  gap:clamp(18px,2.4vw,32px); align-items:start;
  margin-top:clamp(20px,2.4vw,28px)}

.opcao .op-rotulo{font-size:12px; font-weight:700; letter-spacing:.09em;
  text-transform:uppercase; color:var(--eyebrow); margin:0}
/* o numero que vende: zero euros de investimento */
.op-numero{font-family:var(--mono); font-size:clamp(34px,4.4vw,54px); font-weight:700;
  line-height:1; color:var(--primary); letter-spacing:-.03em; margin-top:12px}
.op-sub{font-size:14.5px; color:var(--body); margin-top:8px}

.op-trata{list-style:none; margin:clamp(16px,2vw,22px) 0 0; padding:0;
  display:grid; grid-template-columns:1fr 1fr; gap:8px 18px}
.op-trata li{position:relative; padding-left:23px; font-size:15px; line-height:1.4;
  color:var(--head)}
/* visto desenhado em CSS, sem imagem nem fonte de icones */
.op-trata li::before{content:""; position:absolute; left:2px; top:4px;
  width:6px; height:11px; border:solid var(--primary); border-width:0 2px 2px 0;
  transform:rotate(43deg)}

/* Estas regras diziam :not(.principal), mas a classe passou a chamar-se
   op-princ algures pelo caminho e ninguem as mudou. Resultado: o :not
   passou a dar verdade nas duas colunas, e todos os <p> levavam 15,5 px --
   incluindo o "0 €", que e o numero que vende a seccao inteira. E com mais
   especificidade do que .op-numero, por isso nada do que se escrevesse la
   em baixo lhe ganhava. */
.opcao:not(.op-princ){padding-top:clamp(4px,1vw,10px)}
.opcao:not(.op-princ) p{margin-top:12px; font-size:15.5px; line-height:1.6}

@media(max-width:860px){
  .opcoes{grid-template-columns:1fr; gap:18px}
  .opcao:not(.op-princ){padding-top:0}
}
@media(max-width:460px){.op-trata{grid-template-columns:1fr}}

/* ligacao para a fonte, por baixo de um numero citado */
.fonte-link{margin-top:8px; font-size:13px; color:var(--body)}
.fonte-link a{color:var(--primary); font-weight:600; text-decoration:none;
  border-bottom:1px solid color-mix(in srgb,var(--primary) 32%,transparent)}
.fonte-link a:hover{border-bottom-color:var(--primary)}








/* ══════════════════════════════════════════════════════════════════════════
   MAKEOVER · FASE 1 — o sistema tipográfico
   ══════════════════════════════════════════════════════════════════════════
   O site lia-se como feito por máquina e a razão principal era a tipografia:
   o maior título tinha 44px e havia 47 declarações a negrito. Tudo do mesmo
   tamanho e tudo com o mesmo peso não é hierarquia, é ruído uniforme.

   As duas referências que o Tiago mandou (on.energy e breakthroughenergy.org)
   fazem o contrário e é só isso que as faz parecer seguras de si: tipo muito
   maior, muito mais leve, e a espessura reservada para o que é mesmo
   importante.

   Fica num bloco à parte de propósito: se não servir, apaga-se daqui até ao
   fim e o site volta exactamente ao que era.
   ══════════════════════════════════════════════════════════════════════════ */

h1,h2,h3,h4{text-wrap:balance}

/* O título grande deixa de ser negrito e passa a ser grande. Um peso 300 a
   80px tem mais presença do que um 700 a 44px, e não grita. */
.hl h1,.artigo h1{
  font-size:clamp(38px,6.2vw,80px);
  font-weight:300;
  letter-spacing:-.038em;
  line-height:.98}

/* Os títulos de secção acompanham. A diferença entre o h1 e o h2 passa a ser
   de tamanho e não de peso, que é como deve ser. */
.shead h2{
  font-size:clamp(27px,4.1vw,54px);
  font-weight:300;
  letter-spacing:-.032em;
  line-height:1.02;
  margin:14px 0 0}

/* A frase de apoio cresce e aligeira: era 17,5px a 400 e lia-se como letra
   miúda debaixo do título. */
.shead p{
  font-size:clamp(17px,1.65vw,21px);
  font-weight:300;
  line-height:1.5;
  color:var(--body);
  max-width:46ch}
.shead p{margin-top:16px}

/* A sobrancelha aparecia em todas as secções, do mesmo tamanho e sempre a
   verde: oito vezes a mesma etiqueta deixa de marcar nada. Fica mais pequena
   e mais calada — serve para situar, não para anunciar. */
.eyebrow{font-size:11px; font-weight:600; letter-spacing:.16em; opacity:.85}

/* O negrito dentro do texto corrido passa a 600. A 700 saltava demasiado de
   uma frase a 300. */
.shead p b,.hl p b{font-weight:600}

/* Mais ar entre o título e o que vem a seguir: tipo grande precisa de
   silêncio à volta, senão parece apertado em vez de confiante. */
.shead{margin-bottom:clamp(34px,4.6vw,60px); max-width:56ch}

/* ══════════════════════════════════════════════════════════════════════════
   MAKEOVER · PRETO E AS CORES DO RAIO
   ══════════════════════════════════════════════════════════════════════════
   O site corre todo por variáveis, por isso vira-se aqui e vira tudo de uma
   vez. A paleta passa a ser a do logótipo e mais nada: o degradé do raio vai
   do amarelo ao verde, e é isso que fica a fazer de cor sobre o preto.

       #FFD90A  amarelo    o destaque, o botão, o que tem de saltar
       #9FC30A  lima       o segundo nível: ligações, sobrancelhas
       #009F0A  verde      o fim do degradé

   Preto puro no fundo, não cinzento-escuro: metade da força disto está em
   não ter meio-tom nenhum entre o fundo e a cor.
   ══════════════════════════════════════════════════════════════════════════ */
:root{
  --page:#000000;
  --surface:#0B0E0B;
  --band:#070907;
  --field:#131713;
  --line:#242B23;
  --line-soft:#1A201A;
  --head:#FFFFFF;
  --body:#A4AEA2;
  --primary:#FFD90A;
  --deep:#000000;
  --glow:#9FC30A;
  --eyebrow:#9FC30A;
  --tracoFio:#394237;
  --grad:linear-gradient(90deg,#FFD90A,#9FC30A 55%,#009F0A);
  color-scheme:dark;
}

/* O botão principal era verde com texto branco. Sobre preto, verde escuro
   desaparece — passa a ser o amarelo com texto preto, que é o elemento mais
   alto da página e só deve haver um de cada vez. */
.btn-p{background:#FFD90A; color:#0A0A0A}
.btn-p:hover{background:var(--amarelo-claro)}

/* O rodapé era a única zona escura do site. Agora que tudo é escuro, separa-se
   por uma linha e não por cor. */
footer{background:#000000; color:var(--body);
  border-top:1px solid var(--line)}
footer .fg a{color:var(--head)}
footer .fg a:hover{color:#FFD90A}
footer .fg h3{color:#9FC30A}
footer .fg .tag{color:var(--body)}
footer .legal{border-top-color:var(--line)}
.btn-claro{background:#FFD90A; color:#0A0A0A}

/* A fotografia do topo fica mais escura, para o tipo branco se ler por cima */
.hbg img{filter:brightness(.42) saturate(.75)}

/* ── os efeitos de entrada ─────────────────────────────────────────────
   Sobe e aparece. O atraso vem do JS, por ordem dentro de cada grupo.
   A classe .rev só é posta pelo JS, e só depois de ele confirmar que tem
   como a tirar — sem isso, um navegador sem IntersectionObserver ficava com
   a página inteira invisível. */
.rev{opacity:0; transform:translate3d(0,22px,0);
  transition:opacity .62s cubic-bezier(.22,.61,.36,1) var(--rev-atraso,0ms),
             transform .62s cubic-bezier(.22,.61,.36,1) var(--rev-atraso,0ms)}
.rev-dentro{opacity:1; transform:none}

/* a fotografia do topo é movida por JS; aqui só se garante que tem espaço
   para se mexer sem deixar ver a borda */
.hero .hbg{will-change:transform}

@media(prefers-reduced-motion:reduce){
  .rev{opacity:1; transform:none; transition:none}
}

/* ══════════════════════════════════════════════════════════════════════════
   1 · HERO  (ref-1)
   ══════════════════════════════════════════════════════════════════════════
   Fotografia a ecrã inteiro, véu escuro, título gigante com a última linha
   alinhada à direita — é esse desencontro que faz o bloco parecer composto
   e não um parágrafo centrado.

   Sem barra de navegação e sem menu: só o logótipo pequeno no canto. Tudo o
   que leva ao formulário é o botão.

   Nada começa escondido. Se o JavaScript não correr, o hero está inteiro e
   legível — a regra é essa e vale para todas as secções.
   ══════════════════════════════════════════════════════════════════════════ */

/* a paleta da referência: quase-preto, off-white, lima e cinza.
   O amarelo da marca fica só nos botões. */
:root{
  --page:#0B0B0A;
  --surface:#121311;
  --band:#0E0F0D;
  --field:#171916;
  --line:#272A25;
  --line-soft:#1C1F1B;
  --head:#F4F5F1;
  --body:#9BA197;
  --lima:#D0F53D;
  --glow:var(--lima);
  --eyebrow:var(--lima);
}

.hero{position:relative; min-height:100svh; padding:0; background:#0B0B0A;
  display:grid; grid-template-rows:auto 1fr; align-items:center}
.hero .hbg{position:absolute; inset:0; z-index:0; will-change:transform}
.hero .hbg picture,.hero .hbg img{width:100%; height:100%; object-fit:cover; display:block}
/* A fotografia e escura de origem. Com .52 de brilho mais o veu a 88% em
   baixo, o resultado era preto liso: a imagem estava la e nao se via. */
.hero .hbg img{filter:brightness(.82) saturate(.9) contrast(1.04)}
/* o véu: escuro em baixo, onde fica o texto, e mais limpo em cima */
.hero::after{content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(176deg,rgba(11,11,10,.30) 0%,rgba(11,11,10,.10) 26%,rgba(11,11,10,.62) 72%,rgba(11,11,10,.80) 100%)}
.hero > *:not(.hbg){position:relative; z-index:2}

/* ── o logótipo, e mais nada ──────────────────────────────────────────── */
.hlogo{display:inline-flex; align-items:center; gap:10px; text-decoration:none;
  padding:clamp(18px,2.2vw,28px) var(--gut); justify-self:start}
.hlogo svg{width:24px; height:24px; flex:none}
.hlogo b{font-size:13px; font-weight:600; line-height:1.15; color:#F4F5F1;
  letter-spacing:-.005em}

/* ── o título ─────────────────────────────────────────────────────────── */
.hdizer{width:100%; max-width:1240px; margin:0 auto;
  padding:0 var(--gut) clamp(40px,6vw,80px)}
.hdizer h1{margin:0; display:flex; flex-direction:column;
/* 112px punha "Fazemos com que pague menos" a partir e a deixar "menos"
   sozinho numa linha. A 92px cabe de uma vez. */
  font-size:clamp(33px,6.8vw,92px); font-weight:300; line-height:.96;
  letter-spacing:-.045em; color:#FFFFFF; text-wrap:initial}
/* a última linha à direita, como o "of energy" da referência */
.h-dir{align-self:flex-end; text-align:right}

.hlinha{margin:clamp(22px,2.8vw,34px) 0 0; max-width:44ch;
  font-size:clamp(15px,1.35vw,18px); line-height:1.5;
  color:rgba(255,255,255,.74)}

@media(max-width:620px){
  .hero{min-height:92svh}
  .h-dir{align-self:flex-start; text-align:left}
}

/* ══════════════════════════════════════════════════════════════════════════
   A LETRA E O FIM DOS BLOCOS
   ══════════════════════════════════════════════════════════════════════════ */

/* A Inter Tight entra à frente da pilha do sistema. O resto da pilha fica
   como estava: é o que se lê nos 100 ms antes de o ficheiro chegar. */
:root{
  --sans:"Inter Tight",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --lima:#D0F53D;
  --escuro:#0B0B0A;
  --claro:#F2F2EE;
}

/* ── acabar com as caixas ─────────────────────────────────────────────────
   Nenhuma secção tem borda, cartão ou corte à régua. O que separava por
   caixa passa a separar por espaço. */
.hform,
.hf-pick button,.f input,.f textarea,.f select{
  border-color:transparent}

/* as faixas deixam de ter cor própria: a cor da página é que muda */
.band,#perguntas,#quem-somos,.fs.band{background:transparent}

/* ── o hero ───────────────────────────────────────────────────────────── */
/* O véu deixa de ser uma cortina igual por cima de tudo. Escurece só onde
   está o texto — em baixo e à esquerda — e deixa o canto superior direito
   limpo, que é onde a fotografia tem de se ver. */
.hero::after{
  background:
    linear-gradient(to top, rgba(11,11,10,1) 0%, rgba(11,11,10,.92) 12%, rgba(11,11,10,0) 62%),
    linear-gradient(to right, rgba(11,11,10,.86) 0%, rgba(11,11,10,.45) 38%, rgba(11,11,10,0) 72%)}
.hero .hbg img{filter:brightness(.92) saturate(.95) contrast(1.05)}

/* o fundo do hero funde-se com a secção seguinte: sem linha de corte */
.hero{margin-bottom:0}

.hdizer h1{font-size:clamp(33px,6.6vw,90px); font-weight:500;
  letter-spacing:-.04em; line-height:.95}
.hdizer h1 em{font-style:normal; color:var(--lima)}

/* ── o formulário sobe para cima do hero ─────────────────────────────── */
.pedido{margin-top:clamp(-120px,-9vw,-56px); padding-top:0; background:transparent;
  position:relative; z-index:3}

@media(max-width:620px){
  .pedido{margin-top:-40px}
}

/* ══════════════════════════════════════════════════════════════════════════
   A ENTRADA, O TITULO A LARGURA DO ECRA, E O FORMULARIO NO PRIMEIRO ECRA
   ══════════════════════════════════════════════════════════════════════════ */

/* ── 1 · a entrada ───────────────────────────────────────────────────────
   O raio ao centro, acende, deixa sair uma onda de luz lima, duas vezes, e
   a cortina sobe. 1,2 s do princípio ao fim. Nada aqui atrasa o carregamento
   da página: o hero está a chegar por baixo ao mesmo tempo. */
.entrada{position:fixed; inset:0; z-index:9999; background:var(--escuro);
  display:grid; place-items:center; overflow:hidden;
  transition:clip-path .36s cubic-bezier(.76,0,.24,1), opacity .36s ease;
  clip-path:inset(0 0 0 0)}
.entrada svg{position:relative; width:clamp(58px,8vw,96px); height:auto;
  animation:eva-acende .42s ease-out 2 both}
/* a onda: um halo lima que sai do raio e se abre */
.entrada-onda{position:absolute; width:clamp(58px,8vw,96px); aspect-ratio:1;
  border-radius:50%; pointer-events:none;
  background:radial-gradient(circle,rgba(212,242,63,.5) 0%,rgba(212,242,63,.14) 45%,rgba(212,242,63,0) 70%);
  animation:eva-onda .42s ease-out 2 both}
@keyframes eva-acende{
  0%{opacity:.2; transform:scale(.93)}
  40%{opacity:1; transform:scale(1.02)}
  100%{opacity:.9; transform:scale(1)}}
@keyframes eva-onda{
  0%{opacity:.85; transform:scale(.55)}
  100%{opacity:0; transform:scale(3.4)}}
/* a cortina sobe e revela o hero, que já lá estava */
.entrada-fora{clip-path:inset(0 0 100% 0); opacity:0; pointer-events:none}
/* quem pediu menos movimento nunca chega aqui — o JavaScript não a cria —
   mas se chegasse, não havia animação nenhuma */
@media (prefers-reduced-motion: reduce){
  .entrada{display:none}
}

/* ── 2 · o título ────────────────────────────────────────────────────────
   Como na referência: ocupa a largura do ecrã com uma margem estreita, as
   letras coladas, as linhas coladas. Sai a coluna de 1240px — era ela que
   mantinha o título pequeno no meio de um ecrã grande. */
.hdizer{max-width:none; margin:0;
  padding:0 var(--marg-hero) clamp(26px,3.6vw,48px)}
:root{--marg-hero:clamp(14px,2.6vw,42px)}
.hlogo{padding-left:var(--marg-hero); padding-right:var(--marg-hero)}

.hdizer h1{
  font-size:clamp(26px,7vw,140px);
  font-weight:500; letter-spacing:-.045em; line-height:.9;
  color:#FFF; text-wrap:nowrap}
.hdizer h1 em{font-style:normal; color:var(--lima)}
/* a última linha encostada à margem direita, como o "of energy" */
.h-dir{align-self:flex-end; text-align:right}

/* o hero passa a empurrar tudo para baixo: logótipo em cima, título e o
   resto encostados ao fundo */
.hero{align-items:end; min-height:88svh}
.hdizer{align-self:end}

/* ── a fotografia vê-se ──────────────────────────────────────────────────
   Sai o véu que cobria o ecrã todo. Fica um gradiente em baixo à esquerda,
   só o suficiente para o parágrafo e o botão se lerem, e um desvanecimento
   dos últimos 14% para a cor do formulário — é isso que apaga o corte
   entre as duas secções. */
.hero::after{
  background:
    radial-gradient(118% 82% at 0% 100%,
      rgba(11,11,10,.80) 0%, rgba(11,11,10,.46) 34%,
      rgba(11,11,10,.12) 62%, rgba(11,11,10,0) 80%),
    linear-gradient(to top,
      var(--escuro) 0%, rgba(11,11,10,.55) 9%, rgba(11,11,10,0) 20%)}
.hero .hbg img{filter:brightness(1) saturate(1) contrast(1.03)}

/* ── o parágrafo e o botão, pequenos, em baixo à esquerda ───────────────── */
.hlinha{margin:clamp(16px,1.8vw,22px) 0 0; max-width:40ch;
  font-size:clamp(13.5px,1.02vw,15px); line-height:1.5;
  color:rgba(255,255,255,.72)}

/* ── 3 · o formulário já se vê no primeiro ecrã ──────────────────────────
   88svh de hero deixa os últimos 12% para o "Comece a análise" assomar. Não
   sobe por cima da fotografia: encosta-se a ela, e o desvanecimento acima
   faz com que não haja linha a separá-los. */
.pedido{margin-top:0; padding-top:clamp(26px,3.4vw,44px);
  background:var(--escuro); position:relative; z-index:3}

@media(max-width:620px){
  .hero{min-height:88svh}
  .h-dir{align-self:flex-end; text-align:right}
  .pedido{margin-top:0}
}

/* ══════════════════════════════════════════════════════════════════════════
   O FORMULARIO, SEGUNDO O REF-7
   Linhas em vez de caixas. Etiquetas pequenas em maiusculas por cima.
   Pilulas que se enchem de lima quando escolhidas. Espaco a volta de tudo.
   ══════════════════════════════════════════════════════════════════════════ */

/* o formulário alinha com a margem do título do hero: sem degrau */
.pedido .shell{max-width:none; padding-inline:var(--marg-hero)}
.hform{max-width:860px; background:none; border:0; border-radius:0; padding:0;
  box-shadow:none}

/* ── o cabeçalho ───────────────────────────────────────────────────────── */
.hf-t{font-size:clamp(26px,3.4vw,46px); font-weight:500; letter-spacing:-.04em;
  line-height:.95; color:var(--head)}
.hf-s{font-size:14px; font-weight:400; color:var(--body); margin-top:8px}
/* a barra de progresso passa a um fio de 2px */
.hf-bar{height:2px; border-radius:0; background:rgba(255,255,255,.1);
  margin:clamp(22px,2.6vw,32px) 0 10px}
.hf-bar i{background:var(--lima)}
.hf-passo{font-size:10.5px; font-weight:600; letter-spacing:.14em; color:var(--body)}

.hf-etapa{margin-top:clamp(28px,3.4vw,46px)}

/* ── etiquetas: pequenas, em maiúsculas, por cima ──────────────────────── */
.hf-l,.f label,.hf-etapa > .f > label{
  display:block; font-size:10.5px; font-weight:600; letter-spacing:.14em;
  text-transform:uppercase; color:var(--body); margin-bottom:10px}
.f label u{color:var(--lima)}
.consent label{text-transform:none; letter-spacing:0; font-size:13.5px;
  font-weight:400; color:var(--body); margin:0}

/* ── campos: uma linha, e mais nada ───────────────────────────────────── */
.hform input:not([type="checkbox"]):not([type="file"]),
.hform textarea,.hform select,
.f input,.f textarea,.f select{
  background:none; border:0; border-bottom:1px solid rgba(255,255,255,.16);
  border-radius:0; padding:8px 0 12px; font-size:17px; color:var(--head);
  box-shadow:none; width:100%}
.hform input:focus,.hform textarea:focus,.hform select:focus,
.f input:focus,.f textarea:focus{
  outline:0; background:none; box-shadow:none;
  border-bottom-color:var(--lima)}
.hform input::placeholder,.hform textarea::placeholder{
  color:rgba(255,255,255,.26); font-size:16px}
.hform input.erro,.f input.erro{box-shadow:none; border-bottom-color:#FF8A80}
.hform textarea{min-height:64px}
.hform .f{margin-bottom:clamp(24px,2.8vw,34px)}
.hf-g2{gap:0 clamp(20px,3vw,40px)}

/* ── pílulas ───────────────────────────────────────────────────────────── */
.hf-pick{gap:10px; margin-bottom:clamp(28px,3.4vw,42px)}
.hf-pick button{
  background:none; border:1px solid rgba(255,255,255,.2); border-radius:999px;
  padding:13px 20px; font-size:14px; font-weight:500; color:var(--head);
  transition:background .16s ease, border-color .16s ease, color .16s ease}
.hf-pick button:hover{border-color:rgba(255,255,255,.45)}
/* escolhida: enche-se de lima */
.hf-pick button[aria-pressed="true"]{
  background:var(--lima); border-color:var(--lima); color:var(--escuro);
  font-weight:600}

/* ── o anexo: uma linha tracejada, não uma caixa tracejada ────────────── */
.drop{border:0; border-bottom:1px dashed rgba(255,255,255,.3); border-radius:0;
  padding:4px 0 14px; text-align:left; background:none;
  font-size:13px; color:var(--body);
  transition:border-color .16s ease}
.drop:hover{border-bottom-color:var(--lima)}
.drop b{font-size:17px; font-weight:500; color:var(--head); margin-bottom:5px;
  letter-spacing:-.01em}
.hf-opcional{font-size:12.5px; color:var(--body); margin-top:9px}

/* ── o botão grande ───────────────────────────────────────────────────── */
.hform .btn-p{width:auto; min-width:min(100%,300px);
  margin-top:clamp(12px,1.6vw,20px); padding:20px 40px;
  background:var(--lima); color:var(--escuro); border-radius:999px;
  font-size:16px; font-weight:600; letter-spacing:-.01em}
.hform .btn-p:hover{background:var(--lima-clara)}
.hf-voltar{display:inline-block; margin-top:20px; background:none; border:0;
  font-family:inherit; font-size:13px; color:var(--body); cursor:pointer}
.hf-voltar:hover{color:var(--head)}

.consent{border-top:1px solid rgba(255,255,255,.1);
  margin:clamp(26px,3vw,38px) 0 clamp(20px,2.4vw,28px);
  padding-top:clamp(20px,2.4vw,28px)}
.consent input{accent-color:var(--lima)}
.consent a,.hf-dados a{color:var(--lima)}
.hf-note{display:flex; flex-wrap:wrap; gap:10px 22px;
  margin-top:clamp(28px,3.4vw,44px); font-size:11px; font-weight:600;
  letter-spacing:.12em; text-transform:uppercase; color:var(--body)}
.hf-dados,.hf-falta,.hf-ajuda{font-size:13px; color:var(--body); line-height:1.6}

@media(max-width:620px){
  .hf-pick,.hf-pick-3{grid-template-columns:1fr 1fr}
  .hf-g2{grid-template-columns:1fr}
  .hform .btn-p{width:100%; min-width:0}
}

/* A fotografia tem scale(1.08) por causa da paralaxe, e estava a transbordar
   uns 40 px para fora do hero. O desvanecimento vive dentro do hero, por isso
   essa faixa que escapava ficava com a foto em bruto e depois era tapada à
   régua pelo formulário: era dali que vinha o corte. */
.hero{overflow:hidden}

/* e o desvanecimento passa a ser longo. A nove por cento o olho ainda vê a
   junta; a trinta e cinco já não há junta nenhuma. */
.hero::after{
  background:
    radial-gradient(118% 82% at 0% 100%,
      rgba(11,11,10,.80) 0%, rgba(11,11,10,.46) 34%,
      rgba(11,11,10,.12) 62%, rgba(11,11,10,0) 80%),
    linear-gradient(to top,
      var(--escuro) 0%, var(--escuro) 4%, rgba(11,11,10,.86) 11%,
      rgba(11,11,10,.52) 20%, rgba(11,11,10,.20) 29%,
      rgba(11,11,10,0) 38%)}

/* ── o hero em telemóvel ─────────────────────────────────────────────────
   Num ecrã estreito e alto, o object-fit:cover de uma fotografia deitada
   corta-lhe as pontas e fica só a encosta do meio, que é a parte escura e
   a que nada diz. Desloco o enquadramento para a direita e para cima, onde
   estão a barragem e o céu, e alivio muito o gradiente: o que ali chegava
   para dar contraste a um ecrã largo, num estreito tapa a fotografia toda. */
@media(max-width:620px){
  /* 62%/22% apanha o ceu, a crista e a barragem; o centro da fotografia
     e so encosta. E a imagem e escura de origem, por isso em telemovel leva
     um ponto de luz a mais. */
  .hero .hbg img{object-position:62% 22%; filter:brightness(1.18) contrast(1.05)}
  .hero::after{
    background:
      linear-gradient(to top,
        var(--escuro) 0%, var(--escuro) 5%, rgba(11,11,10,.88) 14%,
        rgba(11,11,10,.62) 24%, rgba(11,11,10,.28) 34%,
        rgba(11,11,10,0) 46%),
      linear-gradient(to bottom, rgba(11,11,10,.42) 0%, rgba(11,11,10,0) 22%)}
}
/* herdava o centrado da .drop antiga */
.hf-opcional{text-align:left}

/* As pílulas eram três colunas iguais esticadas pela largura toda. Pílula é
   coisa que se ajusta ao que lá está escrito. */
.hf-pick,.hf-pick-3{display:flex; flex-wrap:wrap; grid-template-columns:none}
.hf-pick button{flex:0 0 auto}
@media(max-width:620px){
  .hf-pick,.hf-pick-3{display:flex}
  .hf-pick button{padding:12px 18px; font-size:13.5px}
}

/* ══════════════════════════════════════════════════════════════════════════
   OS TRES APONTAMENTOS DO TIAGO
   ══════════════════════════════════════════════════════════════════════════ */

/* ── 1 · as linhas estavam sobrepostas ───────────────────────────────────
   A 0.9 as linhas colam mesmo, mas a Inter Tight tem descendentes longas: o
   "g" de "pague" e o "q" de "que" batiam na linha de baixo, e o til de "Não"
   batia na de cima. O minimo sem colisao e o alto da maiuscula mais a
   descendente, que nesta letra da 0.97em. A 1.0 ha ar, e continua colado. */
.hdizer h1{line-height:1}

/* ── 2 · a descricao ─────────────────────────────────────────────────────
   Estava a 15 px dentro de uma medida de 40 caracteres: tres linhas curtas
   num retangulo estreito, ao lado de um titulo de 100 px. Sobe para 20 px,
   abre para 52 caracteres, e ganha a entrelinha de um texto que se le em vez
   da de uma legenda. */
.hlinha{
  margin:clamp(20px,2.2vw,30px) 0 0;
  max-width:52ch;
  font-size:clamp(15px,1.35vw,20px);
  line-height:1.45;
  letter-spacing:-.008em;
  color:rgba(255,255,255,.82)}

@media(max-width:620px){
  .hlinha{font-size:16px; max-width:34ch; line-height:1.42}
}

/* ── 3 · a entrada, mais longa ───────────────────────────────────────────
   Tres pulsos de 0,9 s em vez de dois de 0,42 s. Tres segundos ao todo, e
   o clique no logotipo volta a toca-la. */
/* Dois pulsos, nao tres, mas mais demorados: os mesmos 2,7 s de entrada
   sem parecer um pisca-pisca. */
.entrada svg{animation:eva-acende 1.35s ease-out 2 both}
.entrada-onda{animation:eva-onda 1.35s ease-out 2 both}
.entrada{transition:clip-path .5s cubic-bezier(.76,0,.24,1), opacity .5s ease}
/* o cursor diz que o logotipo faz alguma coisa */
.hlogo{cursor:pointer}

/* ══════════════════════════════════════════════════════════════════════════
   O FORMULARIO AO CENTRO, E COM UM RITMO SO
   Estava encostado a esquerda com a barra de progresso a atravessar o ecra e
   o "passo 1 de 2" perdido la ao fundo a direita. E os intervalos eram ao
   acaso: 42 px entre as pilulas e o anexo, 9 px entre o anexo e a potencia.
   Passa a haver uma medida unica, --esp, e tudo se mede por ela.
   ══════════════════════════════════════════════════════════════════════════ */
.pedido{--esp:clamp(26px,3.2vw,42px)}

.hform{max-width:680px; margin-inline:auto; text-align:center}

/* ── o cabeçalho ───────────────────────────────────────────────────────── */
.hf-t{font-size:clamp(28px,3.6vw,48px)}
.hf-s{margin-top:10px}
.hf-bar{margin:calc(var(--esp) * .72) 0 12px}
.hf-passo{text-align:center}

/* ── o corpo: um intervalo só entre blocos ─────────────────────────────── */
.hf-etapa{margin-top:var(--esp)}
.hform .f,.hf-pick,.hf-g2{margin-bottom:var(--esp)}
/* o que é legenda de um campo cola-se a ele, não flutua a meio caminho */
.hf-l,.f label{margin-bottom:12px}
.hf-ajuda,.hf-erro,.hf-opcional{margin-top:12px; margin-bottom:0}
.hform .f:last-of-type{margin-bottom:0}

/* ── ao centro ─────────────────────────────────────────────────────────── */
.hf-pick{justify-content:center}
.drop{text-align:center}
.hf-opcional,.hf-ajuda,.hf-falta,.hf-dados{text-align:center;
  max-width:52ch; margin-inline:auto}
.hform input:not([type="checkbox"]),.hform textarea,.hform select{text-align:center}
.hform input::placeholder,.hform textarea::placeholder{text-align:center}
.f-tel{justify-content:center}
.hf-note{justify-content:center}
.consent{justify-content:center; max-width:56ch; margin-inline:auto;
  text-align:left}

/* o anexo é um bloco próprio, com o mesmo ar dos outros de cada lado */
.drop{margin-bottom:0}
.hform .drop + input + .hf-opcional{margin-bottom:var(--esp)}

/* ── o botão ───────────────────────────────────────────────────────────── */
.hform .btn-p{margin-top:var(--esp)}
.hf-note{margin-top:var(--esp)}

@media(max-width:620px){
  .pedido{--esp:26px}
  .hform{text-align:center}
}

/* O bloco fica ao centro, mas o que assenta numa linha comeca onde a linha
   comeca: texto a meio de um campo sublinhado nao se le como campo, le-se
   como legenda. Ao centro ficam so as coisas que nao tem linha por baixo —
   o titulo, as pilulas, o botao e o rodape do formulario. */
.hform .f,.hform .drop,.hform .f + .hf-erro{text-align:left}
.f label,.hform input:not([type="checkbox"]),.hform textarea,.hform select{
  text-align:left}
.hform input::placeholder,.hform textarea::placeholder{text-align:left}
.drop,.drop b{text-align:left}
.hf-opcional,.hf-ajuda{text-align:left; margin-inline:0; max-width:none}
.f-tel{justify-content:flex-start}
.hf-falta,.hf-dados{text-align:left; margin-inline:0}

/* dois restos do passo 2: a frase de abertura colava-se ao primeiro campo, e
   a nota sobre os dados fugia para a esquerda enquanto o consentimento ficava
   ao centro. Passam ambas a medir-se pela mesma regua. */
.hf-falta{margin:0 0 var(--esp)}
.hf-dados{max-width:56ch; margin-inline:auto}

/* ══════════════════════════════════════════════════════════════════════════
   ANDAMENTO 2 · A LIMA
   A faixa a toda a largura, preto sobre lima, sem cartoes e sem fotografia.
   A frase primeiro; os tres numeros do dia logo a seguir, a prova-la.
   ══════════════════════════════════════════════════════════════════════════ */
.lima{
  background:var(--lima); color:var(--escuro);
  padding:clamp(72px,11vw,170px) var(--marg-hero) clamp(56px,7vw,110px);
  /* o preto de cima nao acaba a regua: entra na lima nos primeiros pixeis */
  background-image:linear-gradient(to bottom, var(--escuro) 0, rgba(11,11,10,0) clamp(28px,4vw,70px));
  background-repeat:no-repeat}

.lima-in{max-width:1500px; margin:0 auto}
.lima-k{margin:0 0 clamp(22px,2.8vw,38px);
  font-size:11px; font-weight:600; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(11,11,10,.55)}
.lima-sub{margin:clamp(26px,3vw,44px) 0 0; max-width:46ch;
  font-size:clamp(15px,1.3vw,20px); line-height:1.5; color:rgba(11,11,10,.72)}

/* ── os tres numeros ──────────────────────────────────────────────────── */
.lima-dados{max-width:1500px; margin:clamp(56px,7vw,110px) auto 0;
  border-top:1px solid rgba(11,11,10,.22); padding-top:clamp(22px,2.6vw,34px)}
.ln-topo{display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 16px;
  margin:0 0 clamp(30px,3.6vw,52px);
  font-size:clamp(17px,1.5vw,22px); font-weight:500; letter-spacing:-.02em}
.ln-topo span{font-size:13px; font-weight:400; color:rgba(11,11,10,.62);
  letter-spacing:0}

.lnums{display:grid; grid-template-columns:repeat(3,1fr);
  gap:clamp(26px,3.4vw,54px)}
.lnum{min-width:0}
.ln-k{margin:0 0 10px; font-size:11px; font-weight:600; letter-spacing:.14em;
  text-transform:uppercase; color:rgba(11,11,10,.6)}
.ln-tag{display:inline-block; margin-left:6px; padding:2px 8px; border-radius:999px;
  background:rgba(11,11,10,.12); letter-spacing:.08em; font-size:9.5px}
.ln-v{display:flex; align-items:baseline; gap:8px; margin:0;
  font-size:clamp(38px,4.6vw,76px); font-weight:500;
  letter-spacing:-.045em; line-height:.92;
  /* os tres numeros tem de alinhar a virgula, nao bailar com os digitos */
  font-variant-numeric:tabular-nums}
.ln-u{font-size:clamp(12px,.95vw,15px); font-weight:500; letter-spacing:0;
  color:rgba(11,11,10,.6)}
.ln-x{margin:12px 0 0; font-size:14px; font-weight:500; color:rgba(11,11,10,.8);
  font-variant-numeric:tabular-nums}
.ln-h{margin:10px 0 0; font-size:13px; line-height:1.45; color:rgba(11,11,10,.62);
  max-width:28ch}
.ln-d{margin:10px 0 0; font-size:11.5px; letter-spacing:.02em;
  color:rgba(11,11,10,.5)}
.ln-d a{color:rgba(11,11,10,.75); text-underline-offset:3px}

.ln-nota{display:flex; flex-wrap:wrap; align-items:center; gap:14px 26px;
  margin:clamp(38px,4.6vw,66px) 0 0; padding-top:clamp(22px,2.6vw,34px);
  border-top:1px solid rgba(11,11,10,.22);
  font-size:14px; color:rgba(11,11,10,.72)}
.ln-nota a{color:var(--escuro)}
.ln-cta{margin-left:auto; display:inline-flex; align-items:center; gap:10px;
  min-height:50px; padding:0 30px; border-radius:999px;
  background:var(--escuro); color:var(--lima)!important;
  font-size:15px; font-weight:600; text-decoration:none;
  transition:background .18s ease}
.ln-cta::after{content:"↓"; transition:transform .18s ease}
.ln-cta:hover{background:#1E2019}
.ln-cta:hover::after{transform:translateY(2px)}

@media(max-width:900px){
  .lnums{grid-template-columns:1fr; gap:clamp(28px,5vw,40px)}
  .lnum + .lnum{border-top:1px solid rgba(11,11,10,.16); padding-top:clamp(26px,5vw,36px)}
  .ln-h{max-width:40ch}
  .ln-cta{margin-left:0; width:100%; justify-content:center}
}
@media(max-width:620px){
  .ln-v{font-size:clamp(36px,10vw,52px)}
}

/* O degradê do preto para a lima dava um borrão azeitona: duas cores
   saturadas a misturar-se não dão uma terceira, dão lama. A referência
   corta a direito, e um corte entre duas cores chapadas é uma decisão —
   ao contrário de um corte a meio de uma fotografia, que é um acidente. */
.lima{background-image:none}

/* ── mais preto antes da lima ────────────────────────────────────────────
   O rodapé do formulário encostava à aresta. A mudança de cor precisa de
   respirar de ambos os lados para se ler como mudança e não como acidente. */
.pedido{padding-bottom:clamp(70px,9vw,150px)}
.lima{padding-top:clamp(64px,8vw,130px)}

/* ── o bug do branco sobre lima ──────────────────────────────────────────
   Uma regra antiga, p b{color:var(--head)}, pintava os numeros de off-white.
   Sobre a lima isso da 1,6:1 — os numeros estavam ilegiveis. Dentro da faixa
   o negrito herda a cor do texto, que e o preto. */
.lima b,.lima strong{color:inherit}

/* ── destaque para os encargos ───────────────────────────────────────────
   O cliente pediu-o. E a unica das tres parcelas que a empresa nao pode
   negociar, por isso a inversao diz duas coisas ao mesmo tempo: olha para
   aqui, e esta e diferente das outras.

   O padding vertical e igual nas tres colunas para as linhas de base dos
   numeros continuarem alinhadas; so a terceira e que ganha fundo. */
.lnum{padding-block:clamp(20px,2.2vw,30px)}
.lnum-erc{
  background:var(--escuro); color:var(--lima);
  padding-inline:clamp(20px,2.2vw,32px);
  border-radius:20px;
  margin-top:calc(clamp(20px,2.2vw,30px) * -1);
  margin-bottom:calc(clamp(20px,2.2vw,30px) * -1)}
.lnum-erc .ln-k{color:rgba(212,242,63,.68)}
.lnum-erc .ln-u{color:rgba(212,242,63,.6)}
.lnum-erc .ln-x{color:rgba(212,242,63,.9)}
.lnum-erc .ln-h{color:rgba(212,242,63,.62)}
.lnum-erc .ln-d{color:rgba(212,242,63,.5)}
.lnum-erc .ln-d a{color:rgba(212,242,63,.78)}
.lnum-erc .ln-tag{background:rgba(212,242,63,.16); color:var(--lima)}

@media(max-width:900px){
  /* em coluna unica o filete entre blocos sobrava: o painel preto ja separa */
  .lnum-erc{margin-top:8px; padding-block:clamp(24px,5vw,32px)}
  .lnum-erc + .lnum,.lnum-erc{border-top:0}
}

/* ── o vazio dentro do painel ────────────────────────────────────────────
   As colunas da grelha esticam por omissão até à altura da linha, e o painel
   preto, por cima disso, ainda levava 30 px de margem negativa de cada lado.
   Resultado: uma caixa com a altura da coluna mais alta mais 60 px, e o
   conteúdo todo encostado ao cimo. Com align-items:start cada coluna tem a
   sua altura e o painel fecha-se no fim do que lá está dentro. */
.lnums{align-items:start}

/* ── a letra pequena era pequena de mais ─────────────────────────────────
   13 px para a explicação e 11,5 px para a data, numa secção com espaço de
   sobra. Sobe tudo um degrau: o que não se lê não serve de nada, e aqui o
   que está escrito em miudinho é precisamente a prova de que os números são
   oficiais — a fonte, a data e o mercado. */
.ln-k{font-size:12px; letter-spacing:.13em}
.ln-x{font-size:16.5px; margin-top:14px}
.ln-h{font-size:15px; line-height:1.5; max-width:34ch; margin-top:12px}
.ln-d{font-size:13px; margin-top:14px}
.ln-u{font-size:clamp(13px,1.05vw,17px)}
.ln-tag{font-size:10.5px}
.ln-topo span{font-size:15px}
.ln-nota{font-size:16px}

/* ══════════════════════════════════════════════════════════════════════════
   A PALETA: SO O LOGOTIPO, O PRETO E O OFF-WHITE
   As quatro paragens do gradiente do raio, e mais nada. O que precisa de ser
   mais claro ou mais escuro do que elas e a mesma cor com outra luminosidade,
   nunca uma cor nova.
   ══════════════════════════════════════════════════════════════════════════ */
:root{
  /* o raio, tal e qual */
  --logo-amarelo:#FFD90A;        /* H51 S100 L52 */
  --logo-verde-amarelo:#9FC30A;  /* H72 S90  L40 */
  --logo-verde-medio:#29A80A;    /* H108 S89 L35 */
  --logo-verde:#009F0A;          /* H124 S100 L31 */

  --escuro:#0B0B0A;
  --claro:#F2F2EE;

  /* derivados, so por luminosidade */
  --lima:#D0F53D;          /* o verde-amarelo do logo, de L40 para L60 */
  --lima-clara:#DCF76E;    /* o mesmo, para o rato por cima */
  --amarelo-claro:#FFE44D; /* o amarelo do logo, de L52 para L65 */
  --amarelo-escuro:#8A7500;/* o amarelo do logo, de L52 para L27 */

  /* o que o resto da folha chama por outros nomes */
  --primary:var(--logo-amarelo);
  --glow:var(--logo-verde-amarelo);
  --eyebrow:var(--logo-verde-amarelo);
  --deep:var(--escuro);
  --logo-grad:linear-gradient(90deg,var(--logo-verde),var(--logo-verde-amarelo) 58%,var(--logo-amarelo));
  --grad:var(--logo-grad);
}

/* os estados do rato deixam de ser cores inventadas */
.btn-claro:hover{background:var(--amarelo-claro)}
.hform .btn-p:hover{background:var(--lima-clara)}
.todo{color:var(--amarelo-escuro)}

/* ── os numeros desalinhados ─────────────────────────────────────────────
   A margem negativa de 30 px subia a caixa do painel, mas o padding de 30 px
   continuava a contar de dentro: o conteudo acabava 30 px acima do das outras
   colunas. A margem sai e os tres numeros assentam na mesma linha. */
.lnum-erc{margin-top:0; margin-bottom:0}

/* ── as setas apontam para onde o botao leva ─────────────────────────────
   O formulario subiu para o segundo lugar da pagina. Todos estes botoes
   estao abaixo dele, por isso levam o visitante para CIMA — uma seta para
   baixo estava a mentir sobre o que ia acontecer.

   Vale para as ancoras, nao para o <button> de submeter: o seletor pede um
   href que comece por cardinal, e esse so o tem quem navega. */
.ln-cta::after,
a.btn-p[href^="#"]::after{
  content:"↑"; font-size:15px; transition:transform .18s ease}
.ln-cta:hover::after,
a.btn-p[href^="#"]:hover::after{transform:translateY(-2px)}

/* e os outros botoes da pagina ficam com a mesma forma do da faixa */
a.btn-p[href^="#"]{
  display:inline-flex; align-items:center; gap:10px;
  min-height:50px; padding:0 30px; border-radius:999px;
  font-size:15px; font-weight:600}

/* A etiqueta "nao negociavel" partia a linha do rotulo em duas, e era por
   isso que o terceiro numero assentava 20 px abaixo dos outros. Desce para
   junto do valor na fatura, onde continua colada ao numero e ja nao empurra
   nada. */
.ln-tag{margin-left:10px; vertical-align:1px}
/* herdava as maiusculas do rotulo; agora que saiu de la, leva-as consigo */
.ln-tag{text-transform:uppercase; letter-spacing:.1em; font-weight:600}

/* ══════════════════════════════════════════════════════════════════════════
   ANDAMENTO 3 · A FATURA, PASSO A PASSO
   Fundo off-white, quadro preso ao centro, conteudo comandado pela rolagem.
   ══════════════════════════════════════════════════════════════════════════ */
.fs{
  background:var(--claro); color:var(--escuro);
  padding:0 var(--marg-hero)}

/* A altura extra so existe quando ha JavaScript vivo e o leitor nao pediu
   menos movimento. Sem isso a seccao tem a altura do que la esta e le-se de
   uma vez, no estado final — nunca ha um tunel vazio para atravessar. */
.fs-fixo{padding-block:clamp(64px,8vw,120px)}
html.fs-ativa .fs{height:300vh}
html.fs-ativa .fs-fixo{
  position:sticky; top:0; height:100vh; height:100svh;
  display:flex; flex-direction:column; justify-content:center;
  padding-block:0}

.fs-k{margin:0 0 clamp(18px,2.4vw,30px);
  font-size:11px; font-weight:600; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(11,11,10,.5)}
.fs-corpo{width:100%; max-width:1100px; margin:0 auto}
.fs-t{margin:0 0 clamp(26px,3.2vw,44px);
  font-size:clamp(26px,3.4vw,46px); font-weight:500;
  letter-spacing:-.035em; line-height:1; max-width:18ch}

/* ── o quadro ─────────────────────────────────────────────────────────── */
.fs-quadro{
  margin:0; border:1px solid rgba(11,11,10,.16); border-radius:20px;
  padding:clamp(18px,2.2vw,30px) clamp(18px,2.4vw,34px);
  background:rgba(255,255,255,.5)}
.fs-cab{display:flex; justify-content:space-between; align-items:center; gap:14px;
  padding-bottom:14px; border-bottom:1px solid rgba(11,11,10,.12);
  font-size:13px; color:rgba(11,11,10,.62)}
.fs-cab em{font-style:normal; font-size:10px; font-weight:600; letter-spacing:.12em;
  text-transform:uppercase; padding:3px 9px; border-radius:999px;
  background:rgba(11,11,10,.08)}

.fs-linha,.fs-total{
  display:flex; justify-content:space-between; align-items:baseline; gap:20px;
  padding:clamp(13px,1.5vw,18px) 0;
  border-bottom:1px solid rgba(11,11,10,.1)}
.fs-nm{font-size:clamp(14px,1.15vw,16px); font-weight:500}
.fs-nm small{display:block; margin-top:4px; font-size:12.5px; font-weight:400;
  color:rgba(11,11,10,.55)}
.fs-vl{display:flex; align-items:baseline; gap:12px; white-space:nowrap;
  font-size:clamp(15px,1.3vw,19px); font-variant-numeric:tabular-nums}
.fs-vl s{text-decoration:none; position:relative; color:rgba(11,11,10,.45)}
/* o risco desenha-se da esquerda para a direita quando o passo chega */
.fs-vl s::after{content:""; position:absolute; left:0; right:0; top:52%;
  height:1.5px; background:var(--escuro);
  transform:scaleX(var(--risco,0)); transform-origin:left;
  transition:transform .42s cubic-bezier(.22,.61,.36,1)}
.fs-vl b{font-weight:500;
  opacity:var(--novo,0); transform:translateX(calc((1 - var(--novo,0)) * 14px));
  transition:opacity .38s ease .1s, transform .38s ease .1s}

.fs-total{border-bottom:0; padding-top:clamp(16px,1.9vw,22px);
  border-top:1px solid rgba(11,11,10,.22); margin-top:4px}
.fs-total .fs-nm{font-size:clamp(15px,1.25vw,18px); font-weight:600}
.fs-total .fs-vl{font-size:clamp(20px,1.9vw,28px); font-weight:600}
.fs-total em{font-style:normal; font-size:11.5px; font-weight:400;
  color:rgba(11,11,10,.5); margin-left:8px}

.fs-poupanca{
  display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 12px;
  margin:clamp(14px,1.8vw,20px) 0 0; padding:14px 16px; border-radius:14px;
  background:var(--lima);
  font-size:14px;
  opacity:var(--poup,0); transform:translateY(calc((1 - var(--poup,0)) * 10px));
  transition:opacity .4s ease, transform .4s ease}
.fs-poupanca b{font-size:clamp(16px,1.4vw,20px); font-weight:600}
.fs-poupanca i{font-style:normal; color:rgba(11,11,10,.55); font-size:12.5px}

/* a parcela que nao se negoceia desvanece quando chega a sua vez */
.fs-linha[data-fixa]{opacity:var(--fixa,1); transition:opacity .4s ease}

/* ── as frases, uma de cada vez ───────────────────────────────────────── */
.fs-diz{position:relative; margin-top:clamp(20px,2.6vw,30px); min-height:3.2em}
.fs-diz p{margin:0; max-width:52ch;
  font-size:clamp(15px,1.35vw,19px); line-height:1.45; color:rgba(11,11,10,.78)}
html.fs-ativa .fs-diz p{
  position:absolute; inset:0 auto auto 0;
  opacity:0; transform:translateY(8px);
  transition:opacity .34s ease, transform .34s ease}
html.fs-ativa .fs-diz p.fs-on{opacity:1; transform:none}

.fs-cta{margin-top:clamp(20px,2.6vw,30px)}

/* na faixa clara o botao e preto com letras claras */
.fs a.btn-p[href^="#"]{background:var(--escuro); color:var(--claro)}
.fs a.btn-p[href^="#"]:hover{background:#1E2019}

@media(max-width:900px){
  /* Em telemovel nao ha sequencia: a fatura aparece feita, de uma vez. O
     ecra e pequeno de mais para um quadro preso e tres passos por cima. */
  html.fs-ativa .fs{height:auto}
  html.fs-ativa .fs-fixo{position:static; height:auto;
    padding-block:clamp(56px,10vw,80px)}
  html.fs-ativa .fs-diz p{position:static; opacity:1; transform:none}
  .fs-diz{min-height:0; display:grid; gap:12px}
  .fs-linha,.fs-total{flex-direction:column; align-items:flex-start; gap:8px}
  .fs-vl{font-size:17px}
}

/* A regra do valor novo estava escrita como ".fs-vl b" e apanhava TODOS os
   negritos do quadro — o total e a linha das redes ficavam invisiveis a
   espera de um passo que nunca lhes dizia respeito. So os valores das duas
   parcelas negociaveis e que entram com a rolagem. */
.fs-vl b{opacity:1; transform:none}
.fs-linha[data-neg] .fs-vl b{
  opacity:var(--novo,0); transform:translateX(calc((1 - var(--novo,0)) * 14px));
  transition:opacity .38s ease .1s, transform .38s ease .1s}

/* A seccao e clara, mas os titulos e os textos continuavam a apanhar as
   cores do tema escuro — o h2 saia off-white sobre off-white. Aqui dentro
   a tinta e o preto. */
.fs h2,.fs .fs-t{color:var(--escuro)}
.fs p,.fs span,.fs b,.fs small,.fs em,.fs i,.fs s{color:inherit}
.fs .fs-nm small,.fs-cab,.fs-total em,.fs-poupanca i{color:rgba(11,11,10,.55)}
.fs-vl s{color:rgba(11,11,10,.45)}
.fs-diz p{color:rgba(11,11,10,.78)}
.fs-k{color:rgba(11,11,10,.5)}

/* A caixa presa nao tinha fundo proprio: quando a aresta entre a lima e o
   off-white atravessava o ecra, metade do titulo ficava sobre lima e metade
   sobre branco. Agora a caixa e opaca — o que esta dentro desta seccao esta
   sempre sobre o claro, e a mudanca de cor acontece atras dela. */
html.fs-ativa .fs-fixo{background:var(--claro)}

/* ══════════════════════════════════════════════════════════════════════════
   A FATURA, SEGUNDA VERSAO
   Duas colunas: o documento a esquerda, o que muda a direita. Antes o texto
   ia por baixo do quadro e ficava cortado pelo fim do ecra — ninguem o lia.
   ══════════════════════════════════════════════════════════════════════════ */
.fs-corpo{
  max-width:1340px;
  display:grid; grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);
  gap:clamp(34px,5vw,86px); align-items:center}

.fs-lado{min-width:0}
.fs-lado .fs-k{margin-bottom:14px}
.fs-lado .fs-t{margin:0 0 clamp(20px,2.4vw,30px);
  font-size:clamp(26px,2.9vw,42px); max-width:16ch}

/* o texto que muda deixa de ser cinzento claro la em baixo */
.fs-diz{min-height:5.2em; margin-top:0}
.fs-diz p{font-size:clamp(16px,1.5vw,22px); line-height:1.4;
  color:var(--escuro); font-weight:500; letter-spacing:-.015em; max-width:26ch}

/* ── o documento ─────────────────────────────────────────────────────────
   Papel branco, canto quase direito, uma sombra curta. Uma fatura nao tem
   cantos de 20 px nem fundo translucido. */
.fs-quadro{
  background:#FFFFFF; border:1px solid rgba(11,11,10,.14); border-radius:6px;
  padding:0; box-shadow:0 1px 2px rgba(11,11,10,.05), 0 12px 28px -18px rgba(11,11,10,.35)}

.fs-cab{display:flex; justify-content:space-between; align-items:flex-start; gap:16px;
  padding:clamp(16px,1.8vw,22px) clamp(18px,2vw,26px);
  border-bottom:1px solid rgba(11,11,10,.14)}
.fs-doc{margin:0; font-size:clamp(14px,1.15vw,16px); font-weight:600;
  letter-spacing:-.01em; color:var(--escuro)}
.fs-meta{margin:4px 0 0; font-size:12.5px; color:rgba(11,11,10,.55)}
.fs-selo{flex:none; font-size:9.5px; font-weight:600; letter-spacing:.14em;
  text-transform:uppercase; color:rgba(11,11,10,.5);
  border:1px solid rgba(11,11,10,.22); border-radius:3px; padding:4px 8px}

/* a linha de cabecalho da tabela, como em qualquer fatura */
.fs-th{display:flex; justify-content:space-between;
  padding:9px clamp(18px,2vw,26px);
  background:rgba(11,11,10,.035);
  border-bottom:1px solid rgba(11,11,10,.14);
  font-size:9.5px; font-weight:600; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(11,11,10,.5)}

.fs-linha{display:flex; justify-content:space-between; align-items:flex-start; gap:24px;
  padding:clamp(13px,1.5vw,17px) clamp(18px,2vw,26px);
  border-bottom:1px solid rgba(11,11,10,.09)}
.fs-nm{font-size:clamp(14px,1.1vw,15.5px); font-weight:500; letter-spacing:-.005em}
.fs-nm small{display:block; margin-top:3px; font-size:12px; font-weight:400;
  color:rgba(11,11,10,.52)}

/* ── os valores ──────────────────────────────────────────────────────────
   Encostados a direita, em coluna: o valor antigo em cima, o novo por baixo.
   Algarismos de largura fixa para as virgulas assentarem umas sobre as
   outras, que e o que faz uma coluna de numeros parecer uma fatura. */
.fs-vl{display:flex; flex-direction:column; align-items:flex-end; gap:3px;
  white-space:nowrap; text-align:right;
  font-size:clamp(15px,1.25vw,17px); font-variant-numeric:tabular-nums}
.fs-vl s{position:relative; text-decoration:none; color:rgba(11,11,10,.55)}
/* o risco e vermelho e desenha-se da esquerda para a direita */
.fs-vl s::after{content:""; position:absolute; left:-2px; right:-2px; top:52%;
  height:1.5px; background:#B3261E; border-radius:1px;
  transform:scaleX(var(--risco,0)); transform-origin:left;
  transition:transform .4s cubic-bezier(.22,.61,.36,1)}
.fs-vl b{font-weight:600}

/* o valor novo nasce por baixo do antigo, e chega com a lima atras */
.fs-linha[data-neg] .fs-vl b{
  display:inline-block; padding:2px 8px; border-radius:5px;
  background:var(--lima); color:var(--escuro);
  opacity:var(--novo,0); transform:translateY(calc((1 - var(--novo,0)) * -7px));
  transition:opacity .36s ease .08s, transform .36s ease .08s}

.fs-linha[data-fixa]{opacity:var(--fixa,1); transition:opacity .4s ease}

.fs-total{display:flex; justify-content:space-between; align-items:baseline; gap:24px;
  padding:clamp(15px,1.7vw,20px) clamp(18px,2vw,26px);
  border-top:2px solid var(--escuro)}
.fs-total .fs-nm{font-size:clamp(14px,1.15vw,16px); font-weight:600}
.fs-total em{font-style:normal; font-size:11.5px; font-weight:400;
  color:rgba(11,11,10,.5); margin-left:7px}
.fs-total .fs-vl{font-size:clamp(20px,1.8vw,26px)}
.fs-total .fs-vl b{font-weight:600}

.fs-poupanca{
  display:flex; flex-wrap:wrap; align-items:baseline; gap:3px 10px;
  margin:0; padding:13px clamp(18px,2vw,26px);
  border-top:1px solid rgba(11,11,10,.14);
  background:var(--lima); border-radius:0 0 5px 5px;
  font-size:13.5px;
  opacity:var(--poup,0); transition:opacity .4s ease}
.fs-poupanca b{font-size:clamp(15px,1.3vw,19px); font-weight:600}
.fs-poupanca i{font-style:normal; color:rgba(11,11,10,.5); font-size:12px}

@media(max-width:1100px){
  .fs-corpo{grid-template-columns:1fr; gap:clamp(26px,4vw,40px)}
  .fs-lado{order:-1}
  .fs-diz{min-height:0}
}
@media(max-width:900px){
  .fs-linha,.fs-total{flex-direction:row; align-items:flex-start}
  .fs-vl{font-size:15px}
}

/* ══════════════════════════════════════════════════════════════════════════
   OS NUMEROS
   A pagina estagna na seccao, os numeros sobem e contam, e depois larga.
   Mesmo mecanismo da fatura: a seccao e alta, o painel e que fica quieto.
   ══════════════════════════════════════════════════════════════════════════ */
.nums{background:var(--escuro); color:var(--claro);
  padding:0 var(--marg-hero)}
.nums-fixo{padding-block:clamp(70px,9vw,130px); max-width:1500px; margin:0 auto}
.nums.nums-ativa{height:230vh}
.nums.nums-ativa .nums-fixo{
  position:sticky; top:0; height:100vh; height:100svh;
  display:flex; flex-direction:column; justify-content:center;
  padding-block:0}

.nums-k{margin:0 0 clamp(34px,4.4vw,64px);
  font-size:11px; font-weight:600; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(242,242,238,.5)}

.nums-g{display:grid; grid-template-columns:repeat(3,1fr);
  gap:clamp(28px,4vw,70px)}

/* cada um sobe e aparece a seu tempo: e o --e que o JavaScript escreve */
.num{min-width:0;
  opacity:var(--e,1); transform:translateY(calc((1 - var(--e,1)) * 26px));
  will-change:transform}
@media(prefers-reduced-motion:reduce){
  .num{opacity:1; transform:none}
}

.num-v{display:flex; align-items:baseline; gap:6px; margin:0;
  font-size:clamp(46px,7.4vw,124px); font-weight:500;
  letter-spacing:-.05em; line-height:.9; color:var(--lima);
  /* largura fixa nos algarismos: sem isto o numero dança enquanto conta */
  font-variant-numeric:tabular-nums}
.num-v em{font-style:normal; font-size:.3em; font-weight:500; letter-spacing:-.02em;
  color:rgba(212,242,63,.6)}
.num-l{margin:clamp(14px,1.8vw,22px) 0 0; max-width:22ch;
  font-size:clamp(14px,1.25vw,18px); line-height:1.45;
  color:rgba(242,242,238,.72)}

/* o terceiro e o zero: destaca-se por ser o unico em off-white */
.num:last-child .num-v{color:var(--claro)}
.num:last-child .num-v em{color:rgba(242,242,238,.55)}

@media(max-width:900px){
  .nums.nums-ativa{height:auto}
  .nums.nums-ativa .nums-fixo{position:static; height:auto;
    padding-block:clamp(60px,11vw,90px)}
  .nums-g{grid-template-columns:1fr; gap:clamp(30px,6vw,44px)}
  .num + .num{border-top:1px solid rgba(242,242,238,.12);
    padding-top:clamp(28px,6vw,40px)}
  .num-l{max-width:34ch}
}
/* o mesmo p b{color:var(--head)} que ja tinha apanhado os numeros do mercado */
.num-v b{color:inherit}
/* O bloco estava travado em 1500 px e a 1880 a última linha já media 1738:
   com align-self:flex-end, transbordava pela ESQUERDA e saía da margem. O
   hero não tem travão nenhum — este também não leva. */
.lima-in,.lima-dados{max-width:none}

/* ══════════════════════════════════════════════════════════════════════════
   A FRASE DA FAIXA LIMA — regra unica
   Dois paragrafos. O primeiro encosta a margem; o segundo entra uma margem
   para dentro, a mesma --marg-hero que o topo usa. O tamanho e o de 88 px
   num ecra de 1880, que foi o que o Tiago escolheu.
   Nao ha mais nenhuma regra para este titulo: se houver que mexer, mexe-se
   aqui.
   ══════════════════════════════════════════════════════════════════════════ */
.lima-frase{
  display:block; margin:0; max-width:none;
  font-size:clamp(26px,7vw,156px);
  /* exactamente o do hero: medido a 1.00 em, -0.045em, peso 500 */
  font-weight:500; letter-spacing:-.045em; line-height:1;
  color:var(--escuro); text-wrap:initial}
/* Cada frase em duas linhas equilibradas. O text-wrap:balance e que iguala
   as duas: sem ele o navegador enche a primeira ate rebentar e deixa a
   segunda a pingar. */
.lima-frase span{display:block; max-width:none; text-wrap:balance}
/* Sem intervalo entre os paragrafos: no hero as linhas correm umas atras
   das outras e e isso que da a mancha compacta. O que separa os dois aqui e
   a entrada da margem, nao um espaco em branco. */
.lima-frase span + span{margin-top:0}
.lima-frase em{font-style:normal; font-weight:500; background:none; color:inherit;
  box-shadow:none; padding:0}
/* a segunda entra uma margem para dentro */
/* A segunda entra uma margem a esquerda e acaba na margem direita — o seu
   bordo direito fica a mesma distancia do fim do ecra a que a primeira esta
   do principio. E o tamanho e o que faz essa frase, que tem 64 caracteres,
   caber em duas linhas cheias nessa largura. */
.l-dir{margin-left:var(--marg-hero); margin-right:0; text-align:left}

@media(max-width:620px){
  .lima-frase span{max-width:none}
}

/* ── as correntes ────────────────────────────────────────────────────────
   Vieram do desenho antigo e o Tiago quis mantê-las. Uma luz que atravessa
   o topo da esquerda para a direita e outra que volta pelo fundo no sentido
   contrário, como a ida e o retorno de um circuito. É o único sítio da
   página onde as quatro cores do raio aparecem juntas, e faz sentido que
   seja aqui: é a secção da energia que se poupa.

   Ficam no painel preso, não na secção: assim estão sempre no topo e no
   fundo do ECRÃ enquanto a secção passa, que foi o que ele pediu.

   O padding lateral muda de sítio — da secção para o painel — para as
   correntes atravessarem a largura toda em vez de pararem na margem. */
.nums{padding-inline:0}
.nums-fixo{padding-inline:var(--marg-hero); position:relative; overflow:hidden}

.nums-fixo::before,.nums-fixo::after{
  content:""; position:absolute; left:0; width:18%; height:4px;
  border-radius:3px; pointer-events:none;
  filter:drop-shadow(0 0 7px rgba(159,195,10,.55))}
.nums-fixo::before{
  top:0;
  background:linear-gradient(90deg,transparent,#009F0A 30%,#9FC30A 58%,#FFD90A 78%,transparent);
  animation:corrente-ida 3.4s linear infinite}
.nums-fixo::after{
  bottom:0;
  background:linear-gradient(90deg,transparent,#FFD90A 22%,#9FC30A 42%,#009F0A 70%,transparent);
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}
@keyframes corrente-ida{from{transform:translateX(-120%)} to{transform:translateX(560%)}}
@keyframes corrente-volta{from{transform:translateX(560%)} to{transform:translateX(-120%)}}

/* quem pediu menos movimento fica com dois fios parados nas mesmas arestas */
@media(prefers-reduced-motion:reduce){
  .nums-fixo::before,.nums-fixo::after{
    animation:none; width:100%; height:1px; filter:none; opacity:.35}
}

/* As correntes paravam antes do fim, de um lado e do outro.
   A margem lateral estava no .nums-fixo, e um filho posicionado conta o
   left:0 a partir da caixa de PADDING — nasciam 42 px para dentro e o
   percurso, que e medido em percentagem dessa caixa, acabava outros 42 px
   antes. Dava uma luz que ia do primeiro ao penultimo passo.

   A margem desce para o conteudo. O painel fica a largura toda, e as
   correntes atravessam-no de aresta a aresta. */
.nums-fixo{padding-inline:0}
.nums-k,.nums-g{padding-inline:var(--marg-hero)}
/* sobra em cada ponta para a luz sair de vez antes de voltar a entrar */
@keyframes corrente-ida{from{transform:translateX(-160%)} to{transform:translateX(620%)}}
@keyframes corrente-volta{from{transform:translateX(620%)} to{transform:translateX(-160%)}}

/* ── o hero acaba onde o formulário começa a ler-se ──────────────────────
   88svh era uma percentagem, e o que tem de caber por baixo não é uma
   percentagem: é um bloco de altura fixa — o "Comece a análise" mais o
   "Leva menos de 2 minutos". Num ecrã de 900 sobravam 108 px para um bloco
   de 122, e a segunda linha ficava cortada a meio. Meio corte lê-se como
   avaria, não como convite.

   Passa a medir-se ao contrário: o ecrã menos o que tem de assomar, mais
   24 px de ar por baixo. Assim o convite aparece inteiro em qualquer altura
   de ecrã. O max() é para ecrãs baixos, onde o hero não pode desaparecer. */
.hero{min-height:max(62svh, calc(100svh - 150px))}
@media(max-width:620px){
  .hero{min-height:max(66svh, calc(100svh - 132px))}
}

/* ══════════════════════════════════════════════════════════════════════════
   AS CORRENTES VOLTAM AO SITIO: AS COSTURAS
   Eu tinha-as posto dentro do painel dos numeros, a meio de uma secção. Nao
   e para ali que servem. No desenho original estavam ENTRE secções, e e isso
   que lhes da sentido: a luz atravessa a junta onde a cor muda.
   A ida corre na costura do preto para a lima; a volta, na da lima para o
   preto outra vez.
   ══════════════════════════════════════════════════════════════════════════ */
.nums-fixo{overflow:visible}
.nums-fixo::before,.nums-fixo::after{content:none}

.lima{position:relative; overflow:hidden}
.lima::before,.lima::after{
  content:""; position:absolute; left:0; width:18%; height:4px;
  border-radius:3px; pointer-events:none; z-index:2;
  filter:drop-shadow(0 0 7px rgba(159,195,10,.55))}
/* a costura de cima: o preto do formulario entrega a lima */
.lima::before{
  top:0;
  background:linear-gradient(90deg,transparent,#009F0A 30%,#9FC30A 58%,#FFD90A 78%,transparent);
  animation:corrente-ida 3.4s linear infinite}
/* a de baixo: a lima devolve ao preto, no sentido contrario */
.lima::after{
  bottom:0;
  background:linear-gradient(90deg,transparent,#FFD90A 22%,#9FC30A 42%,#009F0A 70%,transparent);
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}

@media(prefers-reduced-motion:reduce){
  .lima::before,.lima::after{
    animation:none; width:100%; height:1px; filter:none; opacity:.3}
}

/* As correntes voltam ao painel dos numeros, que foi onde o Tiago as pediu:
   no topo e no fundo do ecra enquanto a seccao passa. O que estava no sitio
   errado era a seccao, nao elas — e eu troquei as voltas. */
.lima{overflow:visible}
.lima::before,.lima::after{content:none}
.nums-fixo{overflow:hidden}
.nums-fixo::before,.nums-fixo::after{
  content:""; position:absolute; left:0; width:18%; height:4px;
  border-radius:3px; pointer-events:none;
  filter:drop-shadow(0 0 7px rgba(159,195,10,.55))}
.nums-fixo::before{
  top:0;
  background:linear-gradient(90deg,transparent,#009F0A 30%,#9FC30A 58%,#FFD90A 78%,transparent);
  animation:corrente-ida 3.4s linear infinite}
.nums-fixo::after{
  bottom:0;
  background:linear-gradient(90deg,transparent,#FFD90A 22%,#9FC30A 42%,#009F0A 70%,transparent);
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}
@media(prefers-reduced-motion:reduce){
  .nums-fixo::before,.nums-fixo::after{
    animation:none; width:100%; height:1px; filter:none; opacity:.35}
}

/* A frase da lima volta ao simples: um bloco, tudo encostado a esquerda,
   sem entradas nem tamanhos a competir com o hero. */
.lima-frase{
  display:block;
  font-size:clamp(26px,4.4vw,64px);
  line-height:1.05; letter-spacing:-.035em;
  max-width:26ch}
.lima-frase span{display:inline; max-width:none; text-wrap:initial}
.lima-frase span + span{margin:0}
.l-dir{margin-left:0; text-align:left}

/* Os valores da imagem 2 — 6vw com travão nos 88, medida de 17 caracteres,
   entrelinha 1.06 — mas sem o sublinhado, que ele não quer. */
.lima-frase{
  font-size:clamp(28px,6vw,88px);
  /* 26ch: a medida da imagem 2, onde a linha mais longa chegava aos 74%
     da largura do ecra e a frase cabia em quatro linhas */
  max-width:21ch; line-height:1.06; letter-spacing:-.045em;
  /* sem isto a ultima linha ficava so com "assinou." */
  text-wrap:balance}
.lima-frase em{background:none; box-shadow:none; color:inherit; padding:0}

/* A faixa lima voltou a ser duas secções: os preços primeiro, a frase
   depois, com os números pelo meio. Cada uma precisa da sua respiração
   agora que já não partilham o mesmo bloco — e a dos preços deixa de levar
   o filete de cima, que só fazia sentido a separá-la da frase. */
#mercado-hoje .lima-dados{margin-top:0; border-top:0; padding-top:0}
#problema .lima-in{max-width:none}

/* ── as correntes, terceira tentativa e a boa ─────────────────────────────
   As duas anteriores eram um elemento estreito a viajar. O problema e que o
   gradiente tem as pontas transparentes: mesmo com o elemento ja fora do
   ecra, a parte acesa desvaneceu antes de tocar na aresta. Nunca batia na
   margem — e quando eu alargava o percurso, aparecia cortada.

   Agora sao duas camadas no mesmo elemento, que ocupa a largura toda:
     · o carril, um fio das quatro cores do raio, de margem a margem, sempre
     · a luz, uma mancha que corre por cima dele

   Assim ha sempre qualquer coisa a tocar nas duas arestas, e o que viaja
   pode entrar e sair sem deixar buracos. */
.nums-fixo::before,.nums-fixo::after{
  left:0; right:0; width:auto; height:3px; border-radius:0;
  background-repeat:no-repeat;
  filter:none}

.nums-fixo::before{
  top:0;
  background-image:
    linear-gradient(90deg,transparent,rgba(255,255,255,.92) 45%,transparent),
    linear-gradient(90deg,#009F0A,#29A80A 28%,#9FC30A 60%,#FFD90A);
  background-size:26% 100%, 100% 100%;
  animation:corrente-ida 3.4s linear infinite}
.nums-fixo::after{
  bottom:0;
  background-image:
    linear-gradient(90deg,transparent,rgba(255,255,255,.92) 45%,transparent),
    linear-gradient(90deg,#FFD90A,#9FC30A 40%,#29A80A 72%,#009F0A);
  background-size:26% 100%, 100% 100%;
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}

/* so a primeira camada e que se move; a segunda, o carril, fica quieta */
@keyframes corrente-ida{
  from{background-position:-30% 0, 0 0}
  to{background-position:130% 0, 0 0}}
@keyframes corrente-volta{
  from{background-position:130% 0, 0 0}
  to{background-position:-30% 0, 0 0}}

@media(prefers-reduced-motion:reduce){
  .nums-fixo::before,.nums-fixo::after{
    animation:none; background-image:linear-gradient(90deg,#009F0A,#9FC30A 60%,#FFD90A);
    background-size:100% 100%; opacity:.55}
}

/* ══════════════════════════════════════════════════════════════════════════
   AS CORRENTES, COMO ERAM DE ORIGEM
   Tentei tres variacoes e nenhuma era melhor do que a primeira. Volta o
   original: uma faixa propria antes e outra depois dos numeros, com uma luz
   a atravessar — sem carril por baixo, so a luz, que era o que lhes dava o
   ar de corrente e nao de barra de progresso.
   ══════════════════════════════════════════════════════════════════════════ */
.nums-fixo::before,.nums-fixo::after{content:none}

.corrente{position:relative; height:clamp(44px,5vw,72px);
  background:var(--escuro); display:flex; align-items:center; overflow:hidden}
/* o <i> e so o carril invisivel por onde a luz anda: sem linha de base,
   so a luz e que se ve */
.corrente i{position:relative; display:block; width:100%; height:1px}
.corrente i::after{content:""; position:absolute; left:0; top:-1.5px;
  height:4px; width:18%; border-radius:3px; will-change:transform;
  filter:drop-shadow(0 0 7px rgba(159,195,10,.6))}
/* a de cima vai da esquerda para a direita */
.corrente i::after{
  background:linear-gradient(90deg,transparent,#009F0A 30%,#9FC30A 58%,#FFD90A 78%,transparent);
  animation:corrente-ida 3.4s linear infinite}
/* a de baixo volta no sentido contrario, como o retorno de um circuito */
.corrente.volta i::after{
  background:linear-gradient(90deg,transparent,#FFD90A 22%,#9FC30A 42%,#009F0A 70%,transparent);
  animation:corrente-volta 4.6s linear infinite; animation-delay:-1.2s}
@keyframes corrente-ida{from{transform:translateX(-120%)} to{transform:translateX(560%)}}
@keyframes corrente-volta{from{transform:translateX(560%)} to{transform:translateX(-120%)}}
@media(prefers-reduced-motion:reduce){.corrente i::after{animation:none; display:none}}

/* A faixa tinha 72 px de altura com a luz ao meio, e por isso sobravam 34 px
   de preto de cada lado — a corrente ficava a flutuar entre as duas secções
   em vez de ser a junta entre elas.

   Encolhe para 8 px: a luz fica encostada à secção de cima e à de baixo.

   E o recorte deixa de ser overflow:hidden, que cortava o brilho nas quatro
   direcções. Com clip-path e recuos negativos em cima e em baixo, a luz
   continua a ser cortada à esquerda e à direita — para entrar e sair limpa —
   mas o halo pode transbordar para as secções vizinhas, que é o que faz a
   junta parecer acesa e não desenhada. */
.corrente{
  height:8px; overflow:visible;
  clip-path:inset(-26px 0 -26px 0)}

/* As correntes passam para dentro do painel preso.
   Nas juntas da secção ficavam invisíveis: a secção tem 230vh e é o painel
   que fica preso, por isso as arestas ficam muito acima e muito abaixo do
   ecrã durante quase toda a passagem. Nas arestas do painel estão sempre no
   topo e no fundo do que se vê — e, à entrada e à saída, coincidem com as
   juntas, que é onde o Tiago as quer. */
.nums-fixo > .corrente{
  position:absolute; left:0; right:0; height:8px; z-index:3}
.nums-fixo > .corrente:not(.volta){top:0}
.nums-fixo > .corrente.volta{bottom:0}

/* A luz ficava 4 px abaixo da aresta: a faixa tem 8 px e a luz vai ao meio
   dela. Sobe-se a faixa meia altura para o meio da luz cair exactamente em
   cima da junta, em vez de a ladear. */
.nums-fixo > .corrente:not(.volta){top:-4px}
.nums-fixo > .corrente.volta{bottom:-4px}

/* Era isto a margem lateral que voltava: o painel tinha max-width:1500px e
   num ecrã de 1900 ficava de 192 a 1692 — 192 px de cada lado. Em 1440 nunca
   se via porque o ecrã é mais estreito do que o travão.

   O travão desce para o conteúdo. O painel passa a ocupar a largura toda,
   que é o que as correntes precisam, e os números continuam contidos. */
.nums-fixo{max-width:none; margin-inline:0}
/* width:100% porque sao itens flex: sem isso o margin-inline:auto
   encolhe-os ao conteudo em vez de os centrar na medida toda */
.nums-k,.nums-g{width:100%; max-width:1500px; margin-inline:auto}

/* ══════════════════════════════════════════════════════════════════════════
   O PROCESSO
   Era um fluxograma com fios, nós e um ramo em desvio — uma coisa que se
   desenha, não que se lê. São cinco passos por ordem: cinco linhas, agrupadas
   por quem faz o quê, com a fotografia só onde ela mostra alguma coisa.
   ══════════════════════════════════════════════════════════════════════════ */
.proc{background:var(--claro); color:var(--escuro);
  padding:clamp(70px,9vw,140px) var(--marg-hero)}

/* o rótulo do grupo: quem faz esta parte */

/* a fotografia é uma faixa estreita e deitada: acompanha o passo sem se pôr
   à frente dele */
/* os passos sem fotografia deixam a coluna vazia em vez de a fecharem, para
   os números e os títulos continuarem na mesma vertical */

.proc-cta{margin-top:clamp(32px,4vw,52px)}
.proc a.btn-p[href^="#"]{background:var(--escuro); color:var(--claro)}
.proc a.btn-p[href^="#"]:hover{background:#1E2019}

@media(max-width:900px){
  .proc-cta{width:100%}
}
/* o cabeçalho estava preso a 30ch e o título partia em três linhas curtas */

/* ══════════════════════════════════════════════════════════════════════════
   QUEM SOMOS — só tipografia, sobre preto
   Os três factos eram cartões; são três linhas, que é o que são.
   ══════════════════════════════════════════════════════════════════════════ */
.quem{background:var(--escuro); color:var(--claro);
  padding:clamp(70px,9vw,140px) var(--marg-hero)}
.quem-in{max-width:1340px; margin:0 auto}
.quem-k{margin:0 0 14px; font-size:11px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:rgba(242,242,238,.45)}
.quem-t{margin:0; max-width:20ch; font-size:clamp(26px,3.1vw,44px); font-weight:500;
  letter-spacing:-.04em; line-height:1.02; color:var(--claro); text-wrap:balance}
.quem-s{margin:18px 0 0; max-width:46ch; font-size:clamp(15px,1.3vw,18px);
  line-height:1.5; color:rgba(242,242,238,.68)}

.factos{display:grid; grid-template-columns:repeat(3,1fr);
  gap:clamp(24px,3.4vw,54px); margin:clamp(44px,5.6vw,80px) 0 0;
  padding-top:clamp(26px,3vw,40px); border-top:1px solid rgba(242,242,238,.16)}
.factos > div{min-width:0}
.factos dt{font-size:clamp(22px,2.4vw,34px); font-weight:500;
  letter-spacing:-.03em; line-height:1.05; color:var(--lima)}
.factos dd{margin:12px 0 0; max-width:26ch; font-size:14.5px; line-height:1.55;
  color:rgba(242,242,238,.68)}
.compr{list-style:none; counter-reset:c; margin:clamp(20px,2.4vw,30px) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(24px,3.4vw,54px)}
.compr li{counter-increment:c; min-width:0; position:relative; padding-top:30px}
.compr li::before{content:counter(c,decimal-leading-zero);
  position:absolute; top:0; left:0; font-size:12px; font-weight:600;
  letter-spacing:.08em; color:rgba(242,242,238,.38)}
.compr h3{margin:0; font-size:clamp(17px,1.5vw,21px); font-weight:500;
  letter-spacing:-.02em; color:var(--claro)}
.compr p{margin:10px 0 0; font-size:14.5px; line-height:1.55;
  color:rgba(242,242,238,.68)}
.compr b{color:var(--claro); font-weight:600}

/* ══════════════════════════════════════════════════════════════════════════
   SOLAR — a quinta fotografia, a toda a largura
   ══════════════════════════════════════════════════════════════════════════ */
.solar{background:var(--escuro); color:var(--claro)}
/* Aqui estava a fotografia das eólicas, com o texto por cima. Saiu: a
   secção é sobre painéis solares no telhado de uma empresa, e quatro
   aerogeradores numa encosta não são isso. Foi para o "quem somos", onde
   o texto fala do setor energético — ali a imagem ilustra o setor, em vez
   de prometer um serviço que não é este.

   O cabeçalho passa a ser só tipografia sobre preto. */
.solar-cab{max-width:1340px; margin:0 auto;
  padding:clamp(70px,9vw,130px) var(--marg-hero) 0}

.solar-k{margin:0 0 12px; font-size:11px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:var(--lima)}
.solar-t{margin:0; max-width:19ch; font-size:clamp(30px,4.7vw,74px); font-weight:500;
  letter-spacing:-.04em; line-height:1; color:#FFF; text-wrap:balance}
.solar-s{margin:16px 0 0; max-width:44ch; font-size:clamp(14px,1.2vw,17px);
  line-height:1.5; color:rgba(255,255,255,.76)}

.solar-in{max-width:1340px; margin:0 auto;
  padding:clamp(44px,5.6vw,86px) var(--marg-hero) clamp(70px,9vw,130px)}
.opcoes{display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);
  gap:clamp(30px,4.4vw,80px); align-items:start}
.opcao{min-width:0}
.op-rotulo{margin:0 0 14px; padding-bottom:12px;
  border-bottom:1px solid rgba(242,242,238,.16);
  font-size:10.5px; font-weight:600; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(242,242,238,.5)}
.op-numero{margin:0; font-size:clamp(44px,6vw,92px); font-weight:500;
  letter-spacing:-.05em; line-height:.9; color:var(--lima)}
.op-sub{margin:10px 0 0; font-size:15px; color:rgba(242,242,238,.68)}
.op-trata{list-style:none; margin:clamp(22px,2.6vw,32px) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(2,1fr); gap:8px 18px}
.op-trata li{position:relative; padding-left:18px; font-size:14px;
  color:rgba(242,242,238,.78)}
.op-trata li::before{content:""; position:absolute; left:0; top:.55em;
  width:7px; height:7px; border-radius:50%; background:var(--lima)}
.op-txt{margin:0; font-size:clamp(15px,1.25vw,17px); color:rgba(242,242,238,.78)}
.solar-cta{margin-top:clamp(28px,3.4vw,44px)}

@media(max-width:900px){
  .factos,.compr{grid-template-columns:1fr; gap:clamp(24px,5vw,34px)}
  .factos > div + div,.compr li + li{border-top:1px solid rgba(242,242,238,.12);
    padding-top:clamp(22px,5vw,30px)}
  .compr li{padding-top:30px}
  .opcoes{grid-template-columns:1fr; gap:clamp(34px,7vw,48px)}
  .op-trata{grid-template-columns:1fr}
  .solar-cta{width:100%}
}

/* ══════════════════════════════════════════════════════════════════════════
   PERGUNTAS — só traços, sem caixas
   ══════════════════════════════════════════════════════════════════════════ */
#perguntas{background:var(--claro); color:var(--escuro);
  padding:clamp(70px,9vw,130px) var(--marg-hero)}
#perguntas .shell{max-width:1340px; padding-inline:0}
#perguntas .shead{max-width:none; margin-bottom:clamp(36px,4.4vw,60px)}
#perguntas .eyebrow{margin:0 0 14px; font-size:11px; font-weight:600;
  letter-spacing:.16em; text-transform:uppercase; color:rgba(11,11,10,.5)}
#perguntas .shead h2{margin:0; max-width:20ch;
  font-size:clamp(28px,3.8vw,54px); font-weight:500; letter-spacing:-.04em;
  line-height:1.02; color:var(--escuro); text-wrap:balance}
#perguntas .shead > p{margin:18px 0 0; max-width:50ch;
  font-size:clamp(15px,1.3vw,18px); line-height:1.5; color:rgba(11,11,10,.68)}

.faq{max-width:900px; border-top:1px solid rgba(11,11,10,.18)}
.faq details{border-bottom:1px solid rgba(11,11,10,.12); background:none}
.faq summary{display:flex; justify-content:space-between; align-items:center; gap:20px;
  list-style:none; cursor:pointer;
  padding:clamp(18px,2.1vw,26px) 0;
  font-size:clamp(16px,1.5vw,21px); font-weight:500; letter-spacing:-.02em;
  color:var(--escuro)}
.faq summary::-webkit-details-marker{display:none}
.faq summary i{flex:none; font-style:normal; font-size:22px; font-weight:300;
  line-height:1; color:rgba(11,11,10,.45);
  transition:transform .22s ease, color .22s ease}
.faq details[open] summary i{transform:rotate(45deg); color:var(--escuro)}
.faq .ans{padding:0 0 clamp(18px,2.1vw,26px)}
.faq .ans p{margin:0; max-width:62ch; font-size:clamp(14.5px,1.2vw,16.5px);
  line-height:1.6; color:rgba(11,11,10,.68)}
.faq .ans b{color:var(--escuro); font-weight:600}

#perguntas .cta-linha{margin:clamp(30px,3.6vw,46px) 0 0}
#perguntas .btn-claro{display:inline-flex; align-items:center; gap:10px;
  min-height:50px; padding:0 30px; border-radius:999px;
  background:var(--escuro); color:var(--claro); border:0;
  font-size:15px; font-weight:600; text-decoration:none}
#perguntas .btn-claro:hover{background:#1E2019}
.cta-duvida{margin-top:clamp(20px,2.4vw,30px); font-size:14.5px;
  line-height:1.6; color:rgba(11,11,10,.65)}
.cta-duvida a{color:var(--escuro); text-underline-offset:3px}

/* ══════════════════════════════════════════════════════════════════════════
   RODAPÉ
   ══════════════════════════════════════════════════════════════════════════ */
#rodape{background:var(--escuro); color:rgba(242,242,238,.7);
  padding:clamp(56px,7vw,100px) var(--marg-hero) clamp(28px,3.4vw,44px);
  border-top:1px solid rgba(242,242,238,.1)}
#rodape .shell{max-width:1340px; padding-inline:0}
/* Quatro colunas iguais. Era 1.4fr para a marca e 1fr para as outras três:
   a primeira ficava 100 px mais larga do que o texto que lá vive, e o vazio
   a seguir à assinatura lia-se como um buraco ao lado de três colunas
   encostadas umas às outras. Com passos iguais, lê-se como uma grelha. */
#rodape .fg{display:grid; grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(28px,3.6vw,60px)}
#rodape .brand{display:inline-flex; align-items:center; gap:12px; text-decoration:none}
#rodape .brand svg{width:30px; height:30px; flex:none}
#rodape .brand b{display:block; font-size:15px; font-weight:600; line-height:1.2;
  color:var(--claro)}
#rodape .brand b span{display:block; margin-top:3px; font-size:11px; font-weight:500;
  letter-spacing:.12em; text-transform:uppercase; color:rgba(242,242,238,.45)}
#rodape .tag{margin:18px 0 0; max-width:34ch; font-size:14px; line-height:1.55;
  color:rgba(242,242,238,.55)}
#rodape h3{margin:0 0 14px; font-size:10.5px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:rgba(242,242,238,.45)}
#rodape ul{list-style:none; margin:0; padding:0; display:grid; gap:9px}
#rodape li{font-size:14px; line-height:1.45}
#rodape a{color:rgba(242,242,238,.72); text-decoration:none}
#rodape a:hover{color:var(--lima)}
#rodape .legal{display:flex; flex-wrap:wrap; gap:6px 22px;
  margin-top:clamp(40px,5vw,70px); padding-top:clamp(18px,2.2vw,28px);
  border-top:1px solid rgba(242,242,238,.1);
  font-size:12px; color:rgba(242,242,238,.42)}
/* os campos que o gerador preenche nao deixam um espaco morto quando vazios */
#rodape .legal span:empty{display:none}

@media(max-width:900px){
  #rodape .fg{grid-template-columns:1fr 1fr; gap:30px}
  #rodape .fg > :first-child{grid-column:1 / -1}
  #perguntas .btn-claro{width:100%; justify-content:center}
}
@media(max-width:560px){
  #rodape .fg{grid-template-columns:1fr}
}
/* o botão herdava o centrado da .cta-linha antiga */
#perguntas .cta-linha{text-align:left}
/* .cta-so centrava por flex, nao por text-align — por isso o text-align:left
   nao fazia nada. E o .cta-linha span pintava-se de --head, que no tema
   escuro e off-white: sobre a seccao clara ficava texto branco em branco. */
#perguntas .cta-linha{justify-content:flex-start}
#perguntas .cta-linha span{font-size:14.5px; font-weight:400;
  color:rgba(11,11,10,.65); max-width:none}
#perguntas .cta-duvida a{color:var(--escuro); font-weight:600;
  border-bottom:1px solid rgba(11,11,10,.3)}
#perguntas .cta-duvida a:hover{border-bottom-color:var(--escuro)}

/* ── a FAQ serve duas páginas com fundos opostos ─────────────────────────
   Eu escrevi estas cores a pensar na secção clara da página inicial, e a
   classe .faq é a mesma do perguntas.html, que é escuro. Resultado: catorze
   perguntas a preto sobre preto — lá estavam, com 86 px de altura cada, e
   não se via nenhuma.

   As cores passam a vir de variáveis. O valor por omissão é o da página
   escura, que é o caso mais comum; a secção clara da inicial redefine-as. */
.faq{
  --faq-tinta:var(--claro);
  --faq-linha:rgba(242,242,238,.14);
  --faq-forte:rgba(242,242,238,.22);
  --faq-texto:rgba(242,242,238,.68);
  --faq-sinal:rgba(242,242,238,.45)}
#perguntas .faq{
  --faq-tinta:var(--escuro);
  --faq-linha:rgba(11,11,10,.12);
  --faq-forte:rgba(11,11,10,.18);
  --faq-texto:rgba(11,11,10,.68);
  --faq-sinal:rgba(11,11,10,.45)}

.faq{border-top:1px solid var(--faq-forte)}
.faq details{border-bottom:1px solid var(--faq-linha)}
.faq summary{color:var(--faq-tinta)}
.faq summary i{color:var(--faq-sinal)}
.faq details[open] summary i{color:var(--faq-tinta)}
.faq .ans p{color:var(--faq-texto)}
.faq .ans b{color:var(--faq-tinta)}

/* ── AVISO DE COOKIES ────────────────────────────────────────────────────
   Só existe no ecrã se houver mesmo cookies para pedir: o config-medicao.js
   não o constrói enquanto o Analytics não estiver configurado.

   Não tranca o scroll nem escurece a página. Quem o quiser ignorar ignora
   e continua a ler — e os dois botões têm o mesmo peso, porque recusar tem
   de ser tão fácil como aceitar.

   O z-index fica abaixo da abertura da página inicial, que está a 9999:
   durante a animação o aviso existe mas está tapado, e aparece depois. */
.cookies{
  position:fixed; z-index:90; inset:auto 16px 16px; margin-inline:auto;
  max-width:580px;
  display:flex; flex-wrap:wrap; align-items:center; gap:14px 18px;
  padding:16px 18px;
  /* Não é var(--escuro): este aviso aparece nas treze páginas, e cinco
     delas já têm o fundo a --escuro. O painel ficava com exactamente a cor
     do fundo — contraste 1,00 — e via-se só os botões a flutuar no meio do
     texto, com a sombra preta sobre preto a não fazer nada. Um tom acima,
     mais a linha de contorno, e lê-se como painel nos dois casos. */
  background:#1A1C16; color:var(--claro);
  border:1px solid rgba(242,242,238,.18);
  border-radius:var(--rbtn);
  box-shadow:0 14px 44px rgba(11,11,10,.3);
  opacity:0; transform:translateY(14px);
  transition:opacity .28s ease, transform .28s ease}
.cookies.dentro{opacity:1; transform:none}

.cookies p{
  flex:1 1 260px; margin:0;
  font-size:13.5px; line-height:1.5; color:rgba(242,242,238,.78)}
.cookies a{
  color:var(--claro); text-decoration:underline; text-underline-offset:2px}

.cookies .accoes{display:flex; gap:10px; flex:0 0 auto}
.cookies button{
  font-family:inherit; font-size:13.5px; font-weight:600;
  padding:10px 16px; border-radius:var(--rbtn);
  border:1px solid transparent; cursor:pointer;
  transition:background .15s ease, border-color .15s ease}
.cookies .sim{background:var(--lima); color:var(--escuro)}
.cookies .sim:hover{background:var(--lima-clara)}
.cookies .nao{
  background:transparent; color:var(--claro);
  border-color:rgba(242,242,238,.32)}
.cookies .nao:hover{border-color:var(--claro)}

@media (max-width:520px){
  .cookies{inset:auto 12px 12px; padding:15px 16px}
  .cookies .accoes{flex:1 1 100%}
  .cookies button{flex:1}}

@media (prefers-reduced-motion:reduce){
  .cookies{transition:none}}

/* Um botão que tem de parecer um link: é uma acção, não uma navegação, mas
   no meio de um parágrafo lê-se como as outras ligações à volta. */
.como-link{
  background:none; border:0; padding:0; font:inherit; color:inherit;
  text-decoration:underline; text-underline-offset:2px; cursor:pointer}

/* ── o hero nos ecrãs de 320 ──────────────────────────────────────────────
   O título tem três linhas fixas e text-wrap:nowrap, porque é assim que foi
   desenhado: a última encostada à direita. Mas o clamp tinha um mínimo de
   26 px, e a 320 px de ecrã a linha mais longa pede 339 px quando só há 292.
   O hero corta o que passa, por isso não havia barra de scroll a denunciar —
   perdia-se o lado direito do título e ninguém dava por isso.

   Abaixo dos 375 o tamanho passa a seguir a largura do ecrã sem chão. A 320
   dá 20,5 px e a linha fica em 272, com folga. Acima dos 374 nada muda: o
   7vw do clamp já ultrapassa os 26 px e manda ele. */
@media(max-width:374px){
  .hdizer h1{font-size:6.4vw}
}

/* ── as etiquetas do formulário, no telemóvel ────────────────────────────
   Estavam a 10,5 px, que é o desenho e no computador lê-se bem. No
   telemóvel fica abaixo do que se costuma considerar o mínimo para texto
   secundário, e estas não são decoração: são as instruções que a pessoa
   tem de ler para saber o que escrever em cada campo. Quem entrega faturas
   de empresa não é necessariamente gente com boa vista.

   Sobem para 12 px só abaixo dos 620. O espaçamento entre letras desce um
   pouco na mesma proporção, para a etiqueta não ficar mais larga e começar
   a partir em duas linhas.

   Os eyebrows das secções ficam nos 10,5: esses são decoração tipográfica,
   não instruções, e subi-los mexia no desenho sem ganho nenhum. */
@media(max-width:620px){
  .hf-l,.f label,.hf-etapa > .f > label{font-size:12px; letter-spacing:.12em}
  .hf-passo{font-size:11.5px}
}

/* ── PERGUNTAS: cabeçalho à esquerda, lista à direita ────────────────────
   A lista estava presa a 900 px dentro de uma coluna de 1340, com o
   cabeçalho sozinho por cima. Num ecrã largo sobravam 440 px vazios à
   direita das perguntas, e a secção lia-se como meia página.

   Passa a duas colunas: o título e a introdução ficam numa coluna estreita
   à esquerda, as perguntas e os remates ocupam o resto. Não muda nada da
   sobriedade — é o mesmo texto, as mesmas linhas finas, sem caixas — só
   deixa de haver metade da largura por usar.

   Só a partir dos 1000 px. Abaixo disso continua empilhado, que a duas
   colunas num ecrã estreito seria pior do que está. */
@media(min-width:1000px){
  #perguntas .shell{
    display:grid;
    grid-template-columns:minmax(0,clamp(300px,26vw,420px)) minmax(0,1fr);
    column-gap:clamp(48px,5vw,110px);
    align-items:start}
  #perguntas .shead{
    grid-column:1; grid-row:1 / span 3;
    margin-bottom:0;
    position:sticky; top:clamp(40px,8vh,90px)}
  #perguntas .shead h2{max-width:none}
  #perguntas .shead > p{max-width:34ch}
  /* A lista e os dois remates entram todos na coluna da direita, pela
     ordem em que estão no HTML. */
  #perguntas .faq,
  #perguntas .cta-linha{grid-column:2; max-width:none}
  #perguntas .cta-linha:first-of-type{margin-top:clamp(34px,3.6vw,48px)}
}

/* ── TODOS OS BOTÕES A LIMA ──────────────────────────────────────────────
   Havia três famílias ao mesmo tempo: amarelo nos artigos, preto na fatura
   e no processo, lima no formulário. Passa a ser uma só.

   Isto também arruma dois defeitos:

   · nos artigos o botão estava escuro com texto claro, e o :hover trocava
     só o fundo para amarelo. O texto ficava branco sobre amarelo e não se
     lia. Agora a cor do texto é declarada nos dois estados.

   · o ::before fazia um halo a pulsar sem parar à volta do "Ver o guia
     completo". Sai. Um botão que pisca em loop numa página de leitura é
     um aviso de incêndio, não uma sugestão.

   Os selectores repetem-se todos de propósito: há um #perguntas pelo meio,
   e um ID ganha a qualquer número de classes, por mais abaixo que isto
   esteja escrito. */
.btn-p,
a.btn-p[href^="#"],
.fs a.btn-p[href^="#"],
.proc a.btn-p[href^="#"],
.btn-claro,
#perguntas .btn-claro{
  background:var(--lima);
  color:var(--escuro);
  box-shadow:none}

.btn-p:hover,
a.btn-p[href^="#"]:hover,
.fs a.btn-p[href^="#"]:hover,
.proc a.btn-p[href^="#"]:hover,
.btn-claro:hover,
#perguntas .btn-claro:hover{
  background:var(--lima-clara);
  color:var(--escuro);
  box-shadow:none}

/* o halo que pulsava */
.btn-claro::before{content:none}

/* O "Ver o guia completo" passa a ser igual aos cartões que tem por cima:
   mesmo fundo, mesma linha, mesma cor de texto. Era um botão amarelo de
   largura inteira no meio de três cartões escuros, e gritava mais alto do
   que as sugestões que devia rematar.

   Pequeno e ao centro: a largura passa a ser a do texto, e o parágrafo que
   o embrulha centra-o. */
/* A mesma grelha dos cartões que tem por cima, e o botão na coluna do
   meio: fica exactamente da largura de um cartão e ao centro. Antes era
   só a largura do texto, e lia-se como outra coisa qualquer. */
.rel-todos{display:grid; grid-template-columns:1fr 1fr; gap:10px}
.relacionados .rel-todos a.btn-claro{grid-column:1 / -1; justify-self:center}
@media(min-width:700px){
  .rel-todos{grid-template-columns:repeat(3,1fr)}
  .relacionados .rel-todos a.btn-claro{grid-column:2; justify-self:stretch;
    justify-content:center}
}
.relacionados a.btn-claro{
  display:inline-flex; width:auto; margin-top:22px;
  padding:11px 22px; font-size:14px; font-weight:600;
  background-color:var(--surface); color:var(--head);
  border:1px solid var(--line)}
.relacionados a.btn-claro:hover{
  background-color:var(--surface); color:var(--primary);
  border-color:var(--primary)}

/* Título que só existe para quem navega por leitor de ecrã. O artigo dos
   painéis solares é o único da sua categoria, por isso não tem sugestões
   para listar — mas o <nav> continua a precisar de um nome, senão fica um
   marco de navegação anónimo no meio da página. */
.sr{position:absolute; width:1px; height:1px; margin:-1px; padding:0;
  overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0}







/* ── O "QUEM SOMOS" COM FOTOGRAFIA DE FUNDO ──────────────────────────────
   Como o hero: a fotografia grande por trás, escurecida, e o texto por
   cima. A imagem já andou por três sítios — a secção dos painéis (onde não
   pertencia, são eólicas), uma faixa no fim (que ficava a meio sem
   acompanhar nada) e uma diagonal ao lado do título. Aqui é o que a
   secção toda assenta.

   O véu é o mesmo princípio do hero: quase opaco em baixo, onde vivem os
   factos e os compromissos, e mais leve em cima, onde só há céu. Assim a
   fotografia lê-se no topo e o texto lê-se em todo o lado.

   A fotografia cobre só a parte de cima e desvanece para o preto: esticá-la
   pelos 1000 px da secção inteira deixava-a lavada, e não há nada para ver
   na metade de baixo dela. */
.quem{position:relative; isolation:isolate; overflow:hidden}
/* Mais escuro do que estava. A primeira versão deixava o céu quase à
   vista e a secção lia-se cinzenta, não preta como o resto do site. */

.quem-in{position:relative; z-index:1}


@media(max-width:820px){
  .quem .factos > div{gap:4px}
}



/* ══════════════════════════════════════════════════════════════════════════
   QUEM SOMOS — duas colunas paralelas sobre a fotografia
   ══════════════════════════════════════════════════════════════════════════
   Antes era tudo empilhado: cabeçalho, três factos, e mais abaixo os três
   compromissos. Duas listas com a mesma figura, uma atrás da outra.

   Agora correm lado a lado — o que a empresa é à esquerda, o que promete à
   direita — e cada uma é uma lista de linhas: nome à esquerda, explicação à
   direita, separadas por um fio. As quatro faixas (rótulo, título, frase,
   lista) estão em linhas da mesma grelha, por isso as duas colunas assentam
   à mesma altura mesmo com textos de comprimentos diferentes.

   A fotografia cobre a secção inteira, como no hero, com o texto por cima. */
.quem-par{display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  grid-template-rows:auto auto auto 1fr;
  column-gap:clamp(36px,5vw,110px);
  align-items:start}

.qp-k1,.qp-t1,.qp-s1,.qp-l1{grid-column:1}
.qp-k2,.qp-t2,.qp-s2,.qp-l2{grid-column:2}
.qp-k1,.qp-k2{grid-row:1}
.qp-t1,.qp-t2{grid-row:2}
.qp-s1,.qp-s2{grid-row:3}
.qp-l1,.qp-l2{grid-row:4}

/* Sem max-width: a quebra e feita pelo <br> depois da virgula, e um
   limite em ch partia "Uma empresa portuguesa," antes dela. */
.quem-par .quem-t{margin:0; max-width:none;
  font-size:clamp(25px,2.7vw,40px); text-wrap:initial}
.quem-par .quem-s{margin:16px 0 0; max-width:40ch}

/* ── as duas listas, com a mesma forma ───────────────────────────────── */
.quem .factos,
.quem .compr{display:block; margin:clamp(30px,3.4vw,48px) 0 0;
  padding:0; border:0; gap:0}

.quem .factos > div,
.quem .compr li{
  display:grid; grid-template-columns:minmax(0,1fr);
  gap:6px; padding:clamp(15px,1.6vw,20px) 0;
  border-top:1px solid rgba(242,242,238,.14)}
.quem .factos > div:last-child,
.quem .compr li:last-child{border-bottom:1px solid rgba(242,242,238,.14)}

.quem .factos dt,
.quem .compr h3{margin:0; font-size:clamp(16px,1.35vw,19px); font-weight:600;
  letter-spacing:-.012em; line-height:1.25}
.quem .factos dt{color:var(--claro)}
.quem .compr h3{color:var(--lima)}

.quem .factos dd,
.quem .compr p{margin:0; max-width:none;
  font-size:clamp(13.5px,1.1vw,15px); line-height:1.5;
  color:rgba(242,242,238,.6)}
.quem .compr b{color:rgba(242,242,238,.9); font-weight:600}

/* O contador da lista ordenada não tem papel nenhum aqui: estes três não
   acontecem por ordem. */
.quem .compr{counter-reset:none}
.quem .compr li::before{content:none}

.quem{padding-block:clamp(72px,8.5vw,130px)}
/* Aliviado: a versão anterior dava 12 a 15 de contraste atrás do texto,
   quando 4,5 chega. Estava a esconder a fotografia para nada. Agora anda
   nos 6 a 8, que é de sobra para ler e deixa ver o que está lá atrás. */

@media(max-width:900px){
  .quem-par{grid-template-columns:minmax(0,1fr);
    grid-template-rows:none; row-gap:0}
  .quem-par > *{grid-column:1 !important; grid-row:auto !important}
  .qp-k2{margin-top:clamp(44px,8vw,64px)}
}


/* ── A FOTOGRAFIA DOS PAINÉIS, COM O TEXTO POR CIMA ──────────────────────
   Como o hero: faixa de margem a margem, o título por cima, e o véu a
   escurecer em baixo à esquerda onde ele vive, deixando o resto do telhado
   à vista. A altura é fixa — ao tamanho natural a imagem dava 1079 px e a
   secção começava com uma parede de fotografia. */
.solar-cab{position:relative; isolation:isolate;
  max-width:none; margin:0; padding:0}
.solar-foto{display:block}
.solar-foto img{display:block; width:100%;
  height:clamp(300px,42vw,520px); object-fit:cover; object-position:50% 54%;
  filter:saturate(.95) contrast(1.05)}
/* Três camadas. A de baixo é uma névoa escura uniforme, e está aqui por
   uma razão prática: o ficheiro tem 1170 px numa faixa de 1425 e nota-se.
   Escurecer encolhe a gama tonal, e os artefactos da ampliação deixam de
   ter contraste para se lerem. Não repõe detalhe — esconde a falta dele.

   Por cima, o que já cá estava: o canto onde vive o texto mais fechado, e
   os dois topos a fechar contra o preto da secção. */
.solar-foto::after{content:""; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(120% 95% at 0% 100%, rgba(11,11,10,.92) 0%,
      rgba(11,11,10,.66) 38%, rgba(11,11,10,.24) 70%, rgba(11,11,10,.06) 88%),
    /* Oito paragens em vez de três na descida do topo. Com poucas, o
       salto de preto para imagem fazia-se em 20% da altura e via-se a
       aresta; espalhado por 42% e com os valores a cair devagar, deixa de
       haver ponto onde comece. */
    linear-gradient(to bottom,
      var(--escuro) 0%, rgba(11,11,10,.93) 5%, rgba(11,11,10,.78) 11%,
      rgba(11,11,10,.56) 18%, rgba(11,11,10,.36) 26%,
      rgba(11,11,10,.2) 34%, rgba(11,11,10,.1) 42%,
      rgba(11,11,10,.1) 62%, rgba(11,11,10,.34) 76%,
      rgba(11,11,10,.68) 90%, var(--escuro) 100%),
    linear-gradient(rgba(11,11,10,.42), rgba(11,11,10,.42))}

.solar-sobre{position:absolute; left:0; right:0; bottom:0; z-index:2;
  max-width:1340px; margin:0 auto;
  padding:0 var(--marg-hero) clamp(26px,3.4vw,52px)}
.solar-t em{font-style:normal; color:var(--lima)}

/* A luz a atravessar os painéis, devagar. É um brilho quente que anda da
   esquerda para a direita em vinte segundos — o movimento do sol sobre um
   telhado, que é literalmente o que a secção vende. Em soft-light não
   lava a fotografia, só lhe muda a temperatura por onde passa. */
.solar-foto{overflow:hidden}
.solar-foto::before{content:""; position:absolute; z-index:1;
  top:-20%; bottom:-20%; width:46%; left:-50%;
  pointer-events:none; mix-blend-mode:soft-light;
  background:radial-gradient(60% 50% at 50% 50%,
    rgba(255,232,120,.55) 0%, rgba(255,226,90,.22) 45%, rgba(255,226,90,0) 72%);
  animation:solar-luz 20s ease-in-out infinite}
@keyframes solar-luz{
  0%,100%{transform:translateX(0)}
  50%    {transform:translateX(330%)}
}
@media(prefers-reduced-motion:reduce){
  .solar-foto::before{animation:none; opacity:.4; left:30%}
}

/* ── AS DUAS COLUNAS A BATER CERTO ───────────────────────────────────────
   As linhas tinham alturas diferentes — 93/93/94 de um lado e 116/116/94
   do outro, porque as descrições da direita ocupam duas linhas de texto e
   as da esquerda uma. Os fios iam-se desencontrando ao descer.

   Tentei subgrid primeiro, que seria o correcto: as duas listas a partilhar
   três linhas da grelha da secção, cada uma a crescer até ao mais alto dos
   dois lados. O Chrome colapsou duas das três linhas a zero e empilhou os
   itens na mesma célula. Não insisti.

   Fica a altura mínima igual, que é literalmente o que pediste: as linhas
   da esquerda ficam com a altura das da direita mesmo quando o texto só
   ocupa metade. O valor acompanha a largura do ecrã, e está verificado
   acima do mais alto em 1000, 1200, 1440 e 1920. */
.quem .factos > div,.quem .compr li{
  min-height:clamp(104px,9vw,136px); align-content:start}

@media(max-width:900px){
  .quem .qp-l1,.quem .qp-l2{display:block; grid-row:auto}
}

/* ── AS TRÊS LINHAS DA ESQUERDA, COMO AS DA DIREITA ──────────────────────
   Os nomes passam a lima dos dois lados, e o espaçamento é o mesmo: as
   linhas da esquerda ficam com a altura das da direita mesmo quando o
   texto só ocupa metade, para os seis fios assentarem ao mesmo nível.
   É o que o subgrid já faz — aqui só se garante que o conteúdo encosta ao
   topo da linha em vez de se centrar nela. */
.quem .factos dt{color:var(--lima)}
.quem .factos > div,.quem .compr li{align-content:start}




/* Clip e nao hidden de proposito: o clip nao cria um contentor de scroll,
   e por isso nao parte o sticky do palco do processo. */
.proc{overflow-x:clip}







/* ── O NÚMERO MANDA ──────────────────────────────────────────────────────
   A coisa mais forte desta secção é o zero: a empresa não põe dinheiro
   nenhum. Estava a 15,5 px em tipo de máquina de escrever, do tamanho de
   uma nota de rodapé, por causa da regra acima.

   Passa a ocupar o espaço que o assunto merece — é o mesmo gesto dos
   números do processo, e a mesma família do resto do site em vez da
   monoespaçada, que ali não dizia nada.

   E as seis coisas que a EVA trata deixam de ser uma lista de bolinhas:
   passam a uma grelha de duas colunas com um fio por cima de cada linha,
   como as listas do "quem somos". Seis bolinhas amarelas a dizer "e nós
   que tratamos" valiam menos do que a leitura seca. */
.opcao .op-numero{
  margin:clamp(6px,1vw,12px) 0 0;
  font-family:inherit;
  font-size:clamp(68px,9.5vw,150px); font-weight:500;
  letter-spacing:-.055em; line-height:.84;
  color:var(--lima)}

.opcao .op-sub{margin:clamp(10px,1.2vw,16px) 0 0;
  max-width:24ch; font-size:clamp(15px,1.3vw,18px); line-height:1.4;
  color:rgba(242,242,238,.72)}

.opcao .op-trata{
  margin:clamp(30px,3.6vw,52px) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(2,minmax(0,1fr));
  column-gap:clamp(18px,2.4vw,40px); row-gap:0}
.opcao .op-trata li{
  position:relative; padding:clamp(11px,1.2vw,15px) 0 clamp(11px,1.2vw,15px) 0;
  border-top:1px solid rgba(242,242,238,.13);
  font-size:clamp(14px,1.15vw,16px); line-height:1.3;
  color:rgba(242,242,238,.8)}
.opcao .op-trata li::before{content:none}

@media(max-width:560px){
  .opcao .op-trata{grid-template-columns:minmax(0,1fr)}
  .opcao .op-numero{font-size:clamp(60px,18vw,86px)}
}

/* ══════════════════════════════════════════════════════════════════════════
   O PROCESSO — sete cenas numa secção presa ao scroll
   ══════════════════════════════════════════════════════════════════════════
   A secção é um contentor de 430vh com um palco colado ao topo. Enquanto se
   desce, o palco fica quieto e o conteúdo muda: intro, cinco passos, fecho.

   O texto dos cinco passos está todo no HTML, sempre. As cenas inactivas
   escondem-se com opacity e pointer-events, nunca com display:none nem
   visibility:hidden — assim continuam na árvore de acessibilidade e um
   leitor de ecrã lê a secção inteira de uma vez, como deve.

   Se o JavaScript não correr, a primeira cena fica visível e as outras
   ficam legíveis por leitor de ecrã; o conteúdo nunca desaparece.
   ══════════════════════════════════════════════════════════════════════════ */
.proc{background:var(--claro); color:var(--escuro); padding:0; overflow-x:clip}
.pwrap{height:430vh; position:relative}
.pstage{position:sticky; top:0; height:100vh; overflow:hidden;
  display:grid; grid-template-rows:auto 1fr auto;
  max-width:1340px; margin:0 auto;
  padding:clamp(18px,2.4vw,30px) var(--marg-hero) clamp(18px,2.4vw,30px)}

/* ── barra de cima ───────────────────────────────────────────────────── */
.pbarra{display:flex; align-items:center; justify-content:space-between; gap:20px}
.pbarra-k{margin:0; font-size:10.5px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:rgba(11,11,10,.5)}
.pbarra-passo:not(:empty)::before{content:"·"; margin:0 .6em; opacity:.5}
.pind{display:flex; gap:7px}
.pind button{appearance:none; border:0; padding:0; cursor:pointer;
  width:28px; height:4px; border-radius:2px; background:rgba(11,11,10,.16);
  transition:width .35s cubic-bezier(.22,.61,.36,1), background .35s ease}
.pind button.feita{background:var(--escuro)}
.pind button.activa{width:44px; background:var(--escuro)}
.pind button:focus-visible{outline:2px solid var(--escuro); outline-offset:4px}

/* ── as cenas ────────────────────────────────────────────────────────── */
.pcenas{position:relative; display:grid; align-items:center; min-height:0}
.pcena{grid-area:1/1; display:grid; align-items:center;
  grid-template-columns:minmax(0,1fr) minmax(0,.88fr);
  gap:clamp(24px,4vw,70px);
  opacity:0; transform:translateY(28px); pointer-events:none;
  transition:opacity .55s ease-out, transform .55s ease-out}
.pcena.vista{opacity:1; transform:none; pointer-events:auto}

/* Sem JavaScript, a intro fica visível e as outras seis ficam escondidas
   mas no DOM — que é o estado em que a secção ainda faz sentido a ler.
   Com JavaScript, a classe com-js devolve o controlo ao .vista: sem isto a
   intro ficava por cima da cena activa, as duas ao mesmo tempo.

   Eu tinha escrito o comentário a dizer que isto existia antes de o
   escrever. Existe agora. */
.proc .pcena-intro{opacity:1; transform:none; pointer-events:auto}
.proc.com-js .pcena-intro:not(.vista){
  opacity:0; transform:translateY(28px); pointer-events:none}
.pcena-intro,.pcena-fim{grid-template-columns:minmax(0,1fr)}
.pcena-txt{min-width:0; max-width:46ch}

.pcena-grupo{margin:0 0 clamp(14px,1.6vw,20px); padding-bottom:10px;
  border-bottom:1px solid rgba(11,11,10,.2);
  font-size:10.5px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:rgba(11,11,10,.5)}
.pcena-n{margin:0 0 6px; font-size:clamp(46px,5.6vw,92px); font-weight:500;
  letter-spacing:-.05em; line-height:.86; color:var(--escuro)}
.pcena-n i{font-style:normal; color:var(--lima)}
/* A cor tem de estar aqui. Sem ela, h1,h2,h3,h4{color:var(--head)} pinta
   estes titulos de #F4F5F1 sobre um fundo #F2F2EE: 1,02 de contraste, ou
   seja, invisiveis. A marcacao antiga desta seccao declarava a cor em cada
   sitio e eu nao reparei que era isso que a estava a segurar. */
.pcena h2,.pcena h3{color:var(--escuro)}
.pcena h3{margin:0; font-size:clamp(24px,2.8vw,42px); font-weight:500;
  letter-spacing:-.03em; line-height:1.08}
.pcena-d{margin:clamp(10px,1.2vw,16px) 0 0; max-width:48ch;
  font-size:clamp(14.5px,1.2vw,17px); line-height:1.55; color:rgba(11,11,10,.68)}
.pcena-d b{color:var(--escuro); font-weight:600}

.pcena-t{margin:0; max-width:17ch; font-size:clamp(30px,5vw,76px); font-weight:500;
  letter-spacing:-.045em; line-height:1}
/* Sem o bloco atrás da palavra. A lima como cor de texto não serve aqui —
   sobre o off-white dá 1,1:1 — por isso a palavra fica da cor do resto e o
   realce passa para um traço por baixo, que é desenho e não texto. */
.pcena-t em,.pcena h3 em{font-style:normal; color:inherit;
  box-shadow:inset 0 -.14em 0 var(--lima)}
.pcena-dica{margin:clamp(22px,2.6vw,34px) 0 0; font-size:13.5px;
  color:rgba(11,11,10,.5)}

/* ── a colagem ───────────────────────────────────────────────────────── */
/* Uma fotografia por passo, a da propria seccao, com cantos rectos e a
   ocupar a coluna toda. A colagem de duas que a especificacao pedia
   precisava de dez fotografias e ha cinco; emparelhar cada passo com a do
   passo seguinte dava imagens que nao tinham nada a ver com o texto ao
   lado. */
.pcena-fotos{position:relative; min-width:0;
  height:clamp(220px,46vh,520px)}
.pcena-fotos .pf{display:block; width:100%; height:100%; overflow:hidden}
.pcena-fotos img{display:block; width:100%; height:100%; object-fit:cover;
  filter:saturate(.84) contrast(1.04)}

/* ── rodapé do palco, sempre visível ─────────────────────────────────── */
.procape{display:flex; align-items:center; gap:clamp(14px,2vw,26px); flex-wrap:wrap}
.procape p{margin:0; font-size:13.5px; color:rgba(11,11,10,.55)}
.proc a.proc-cta[href^="#"]{min-height:56px; margin:0}

@media(max-width:760px){
  .pstage{padding:16px 20px}
  .pcena{grid-template-columns:minmax(0,1fr); align-content:center;
    gap:clamp(18px,4vw,26px)}
  .pcena-fotos{height:190px}
  .pcena-txt{max-width:none}
  .procape{gap:12px}
  .procape p{font-size:12.5px}
}

@media(prefers-reduced-motion:reduce){
  .pcena{transition:none}
  .pind button{transition:none}
}

/* ── DE QUEM E O PASSO ───────────────────────────────────────────────────
   A etiqueta de grupo era uma linha de 10,5 px em cinzento, igual nos dois
   lados: nao se dava pela troca entre o que a empresa faz e o que a EVA
   faz, que e o argumento da seccao inteira -- "dois passos seus, o resto e
   connosco".

   Passa a ser uma etiqueta cheia, e as duas sao opostas: os passos da
   empresa a lima sobre preto, os da EVA a preto sobre lima. Quem percorre
   os cinco ve a cor inverter-se exactamente onde o trabalho muda de maos. */
.pcena-grupo{display:inline-flex; align-items:center;
  margin:0 0 clamp(16px,1.8vw,24px); padding:7px 14px;
  border:0; border-radius:999px;
  font-size:11px; font-weight:700; letter-spacing:.14em;
  text-transform:uppercase}
.pcena[data-quem="empresa"] .pcena-grupo{background:var(--escuro); color:var(--lima)}
.pcena[data-quem="eva"] .pcena-grupo{background:var(--lima); color:var(--escuro)}

/* Os cinzentos pequenos desta secção estavam a 3,6 e 4,24 contra o fundo
   claro — abaixo dos 4,5 que texto pequeno precisa. Sobem o suficiente
   para passar, sem deixarem de ser secundários. */
.pbarra-k,
.pcena-dica{color:rgba(11,11,10,.66)}
.procape p{color:rgba(11,11,10,.64)}

/* ── PAINÉIS: o que faltava dizer, e por que ordem ───────────────────────
   Reli o artigo e o documento do cliente e comparei com o que a secção
   dizia. Faltavam-lhe quatro coisas, e nenhuma era de desenho.

   1. O aviso. O artigo escreve, com todas as letras, que "é importante que
   isso fique dito": os painéis substituem só a parte consumida enquanto há
   sol, e à noite a empresa continua na rede com o mesmo contrato, contador
   e fatura. Não estava na secção. É o que torna os 50% credíveis em vez de
   promessa de vendedor — e o artigo acrescenta que ninguém lhe deve
   prometer o fim da fatura.

   2. As quatro perguntas em aberto estavam debaixo de "com investimento",
   como se fossem condições dessa modalidade. No artigo estão debaixo de "a
   minha empresa qualifica-se?" e valem para as duas. Saem para um bloco
   próprio.

   3. "A central é da sua empresa desde o início" não está no artigo nem no
   documento do cliente. Saiu. E a pergunta oposta — de quem são os painéis
   na modalidade sem investimento — é precisamente um dos [A CONFIRMAR].

   4. A secção nunca respondia a "e eu, o que faço?". Agora responde, e é a
   primeira coisa depois do aviso: enviar a fatura. */
.solar a.solar-cta[href^="#"]{margin-top:clamp(22px,2.6vw,34px)}

/* O marcador do que falta confirmar, sobre as secções escuras. Estava a
   4,34 — abaixo do limite, e logo num sinal cuja função é dar nas vistas. */
.solar .todo,.quem .todo{color:var(--logo-amarelo)}

/* ══════════════════════════════════════════════════════════════════════════
   CONTRASTE DO TEXTO PEQUENO
   ══════════════════════════════════════════════════════════════════════════
   Varri a página inteira a compor cada cor sobre o fundo que realmente tem
   por trás, e sobraram 26 pedaços de texto abaixo dos 4,5 que a WCAG pede
   para texto pequeno. Não eram regressões: estavam lá desde o início, e
   nenhum é invisível — andam entre 3,5 e 4,4, que é o suficiente para
   custar a ler a quem não tem boa vista ou está ao sol.

   Os 26 resumiam-se a nove pares de cor. Calculei a opacidade mínima de
   cada um e deixei folga, para um arredondamento não os devolver a baixo.
   Nenhum muda de cor: só deixam de ser transparentes de mais.

     datas na faixa lima      .50 -> .60   3,52 -> 4,7
     rótulo da faixa lima     .55 -> .60   4,13 -> 4,7
     cinzentos da fatura      .55 -> .58   4,37 -> 4,6
     cabeçalho da tabela      .50 -> .60   3,63 -> 4,9
     notas da fatura          .50 -> .58   3,69 -> 4,6
     rótulos sobre preto      .45 -> .50   4,14 -> 4,7
     rodapé, linha legal      .42 -> .50   3,74 -> 4,7
     [A PREENCHER] escuro     #8A7500 -> #FFD90A   4,10 -> 13,5
   ══════════════════════════════════════════════════════════════════════════ */

/* A faixa lima. O :not(.lnum-erc) nao e zelo: o cartao do ERC e escuro
   dentro da faixa clara e o texto dele e lima. Sem a excepcao, esta regra
   pintava-o de escuro sobre escuro -- medi contraste 1,00, invisivel. Foi
   o que me aconteceu a primeira vez que escrevi isto. */
.lima .lnum:not(.lnum-erc) .ln-d,
.lima .lnum:not(.lnum-erc) .ln-d i,
.lima .lnum:not(.lnum-erc) .ln-d span{color:rgba(11,11,10,.6)}
.lima-k{color:rgba(11,11,10,.6)}
/* e o do cartao escuro sobe do seu lado */
.lima .lnum-erc .ln-d{color:rgba(212,242,63,.62)}

/* a fatura de exemplo */
.fs p,.fs span,.fs b,.fs small,.fs em,.fs i,.fs s{color:rgba(11,11,10,.62)}
.fs-doc,.fs-meta,.fs-selo,.fs .fs-nm small,.fs-vl s{color:rgba(11,11,10,.62)}
.fs-total em,.fs-poupanca i{color:rgba(11,11,10,.62)}

/* os rótulos pequenos sobre preto */
.quem-k,#rodape h3,#rodape .brand b span{color:rgba(242,242,238,.5)}
#rodape .legal{color:rgba(242,242,238,.5)}

/* o marcador do que falta preencher, nas secções escuras */
.quem .todo,.solar .todo,#clientes .todo,.fs .todo{color:var(--logo-amarelo)}

/* ── PAINÉIS: encolher e deixar as duas modalidades claras ───────────────
   A versão anterior tinha três blocos empilhados por baixo das colunas e
   ficou longa de mais para uma landing. E tinha um problema pior: duas
   colunas lado a lado fingiam um equilíbrio que não existe. O cliente
   escreveu seis linhas sobre a modalidade sem investimento e uma frase
   sobre a outra — "existe a possibilidade de fazer com ou sem
   investimento" — e mais nada.

   Em vez de deixar a segunda coluna vazia, ela diz o que é (uma decisão de
   tesouraria) e mostra, em lista, exactamente o que falta fechar. Quem lê
   percebe que há duas modalidades, qual delas está descrita, e que a outra
   depende de informação que ainda não existe.

   O aviso e o "começa na fatura" passam a uma linha cada, em vez de dois
   parágrafos e um bloco com título próprio. */
.op-trata-k{margin:clamp(22px,2.6vw,32px) 0 12px;
  padding-bottom:10px; border-bottom:1px solid rgba(242,242,238,.16);
  font-size:10.5px; font-weight:600; letter-spacing:.14em;
  text-transform:uppercase; color:rgba(242,242,238,.55)}
.opcao .op-txt{margin:clamp(10px,1.2vw,16px) 0 0; max-width:40ch}

.solar-nota{margin:clamp(34px,4vw,56px) 0 0; max-width:64ch;
  padding-top:clamp(18px,2.2vw,26px);
  border-top:1px solid rgba(242,242,238,.18);
  font-size:clamp(14.5px,1.25vw,16.5px); line-height:1.6;
  color:rgba(242,242,238,.68)}
.solar-nota b{color:var(--claro); font-weight:600}

/* ── PAINÉIS: três faixas e três linhas ──────────────────────────────────
   A secção tinha linha a separar quase tudo: debaixo de cada rótulo, por
   baixo do "fica tudo do nosso lado", entre cada item das listas, antes da
   nota. Somadas, liam-se como uma tabela.

   Ficam três: uma debaixo de cada título de coluna, e uma a toda a largura
   antes do remate.

   Saiu o bloco com as quatro perguntas, que era uma nota de trabalho numa
   página pública; ficam no PERGUNTAS-AO-CLIENTE.md e no artigo do guia.
   O marcador fica, numa linha só: serve de lembrete enquanto o site não
   abre, e sai no mesmo dia em que sai o noindex. */
.solar-intro{margin:0 0 clamp(36px,4.4vw,64px); max-width:720px;
  font-size:clamp(15px,1.35vw,18px); line-height:1.6;
  color:rgba(242,242,238,.72)}
.solar-intro b{color:var(--claro); font-weight:600}

.solar .opcoes{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);
  gap:clamp(36px,5vw,80px); align-items:start}

/* Os dois títulos de coluna iguais, e a linha é deles.
   O "p." no selector é preciso: .opcao:not(.op-princ) p pinta todos os
   parágrafos da coluna da direita a 15,5 px, e com um elemento a mais na
   conta ganhava a esta regra. O título da direita saía 5 px maior do que
   o da esquerda e 12 px mais abaixo. */
.solar .opcao p.op-rotulo{margin:0 0 clamp(18px,2vw,26px); padding-bottom:12px;
  border-bottom:1px solid rgba(242,242,238,.2);
  font-size:10.5px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:rgba(242,242,238,.6)}
.solar .opcao:not(.op-princ){padding-top:0}

/* O balance reparte as linhas em vez de encher a primeira e deixar uma
   palavra sozinha na ultima. Os espacos duros no HTML seguram "cerca de
   metade" inteiro, que e o numero que a frase vende. */
.solar .op-sub{max-width:420px; text-wrap:balance}

/* Sem linha e sem régua: um rótulo e seis itens com o ponto lima. */
.solar .op-trata-k{margin:clamp(26px,3vw,38px) 0 14px; padding-bottom:0;
  border-bottom:0;
  font-size:10.5px; font-weight:600; letter-spacing:.14em;
  text-transform:uppercase; color:rgba(242,242,238,.55)}
/* A grelha limitada a 560: sem isto as duas colunas esticavam-se pela
   largura toda da coluna da esquerda e ficava um vazio grande entre elas,
   que fazia os seis itens parecerem duas listas e nao uma. */
.solar .op-trata{margin:0; padding:0; max-width:560px;
  display:grid; grid-template-columns:repeat(2,minmax(0,1fr));
  column-gap:32px; row-gap:14px}
.solar .op-trata li{position:relative; padding:0 0 0 18px; border:0;
  min-height:0; font-size:clamp(14px,1.15vw,15.5px); line-height:1.35;
  color:rgba(242,242,238,.8)}
.solar .op-trata li::before{content:""; position:absolute; left:0; top:.46em;
  width:7px; height:7px; border-radius:50%; background:var(--lima)}

.solar .op-aberta .op-txt + .op-txt{margin-top:14px;
  color:rgba(242,242,238,.6)}

/* A faixa de remate: linha por cima, a nota à esquerda e o botão à direita. */
.solar-remate{display:flex; align-items:center; justify-content:space-between;
  gap:clamp(24px,4vw,56px); flex-wrap:wrap;
  margin-top:clamp(40px,5vw,72px); padding-top:40px;
  border-top:1px solid rgba(242,242,238,.2)}
.solar-remate .solar-nota{margin:0; padding-top:0; border-top:0;
  max-width:640px; flex:1 1 420px}
.solar a.solar-cta[href^="#"]{margin:0; flex:0 0 auto}

@media(max-width:860px){
  .solar .opcoes{grid-template-columns:minmax(0,1fr)}
  .solar-remate{align-items:stretch}
  .solar a.solar-cta[href^="#"]{width:100%; justify-content:center}
}

/* O lembrete do que falta fechar: uma linha discreta no fim da coluna,
   não um bloco. Sai quando o cliente responder. */
.solar .op-falta{margin:clamp(18px,2vw,26px) 0 0;
  font-size:13px; line-height:1.45; color:rgba(242,242,238,.5)}
.solar .op-falta .todo{font-weight:600}

/* ── O PROCESSO EM TELEMOVEL: a sequencia em vez do palco ────────────────
   O palco preso ao scroll vive de duas coisas que um ecra de telemovel nao
   tem: largura para por o texto ao lado da fotografia, e altura para uma
   cena de cada vez caber sem ficar apertada. A 390 px a cena ocupava o ecra
   inteiro e obrigava a percorrer 430vh para ler cinco paragrafos curtos,
   com o botao preso ao fundo a repetir-se em todas elas.

   Abaixo de 760 px a seccao volta a ser o que e: sete blocos em sequencia,
   todos visiveis, e o botao uma unica vez no fim. Sai a barra de progresso
   (nao ha progresso a indicar quando esta tudo a vista) e sai a dica de
   fazer scroll (nao ha cena nenhuma a espera do scroll).

   O JavaScript tambem desiste sozinho a esta largura -- ver o controlador
   em index.html -- mas as regras aqui nao dependem disso: mesmo que o
   script deixe uma classe .vista para tras, o que se ve e a sequencia. */
@media(max-width:760px){
  .pwrap{height:auto}
  .pstage{position:static; height:auto; overflow:visible; display:block;
    padding:clamp(70px,9vw,140px) var(--marg-hero)}

  /* "O processo" fica como entrada da seccao; a contagem e os tracinhos
     saem, que so faziam sentido com uma cena de cada vez. */
  .pbarra{display:block; margin-bottom:clamp(26px,6vw,38px)}
  .pind,
  .pbarra-passo{display:none}

  .pcenas{display:block}

  /* A especificidade tem de bater a da regra que esconde a intro quando o
     JavaScript esta ligado (.proc.com-js .pcena-intro:not(.vista)) e a da
     propria .pcena. Daqui para baixo nenhuma cena se esconde. */
  .proc .pcena,
  .proc.com-js .pcena-intro:not(.vista){
    display:block; opacity:1; transform:none; pointer-events:auto;
    transition:none; margin:0 0 clamp(44px,11vw,68px)}
  .proc .pcena:last-child{margin-bottom:clamp(34px,8vw,50px)}

  .pcena-intro{margin-bottom:clamp(40px,10vw,60px)}
  .pcena-dica{display:none}
  .pcena-fotos{margin-top:clamp(18px,4.5vw,26px); height:clamp(170px,46vw,210px)}

  /* O botao, agora uma so vez, no fim de tudo. */
  .procape{display:block}
  .proc a.proc-cta[href^="#"]{display:flex; width:100%; justify-content:center}
  .procape p{margin-top:12px}
}

/* ── O HERO EM TELEMOVEL: o texto alinhado e a barragem a vista ──────────
   Duas coisas estavam mal a 390 px.

   A terceira linha ia encostada a direita. Num ecra largo isso e o degrau
   da referencia e le-se como desenho; a 390 as linhas sao quase da largura
   toda e o degrau le-se como um desalinho. As tres passam a comecar na
   mesma margem.

   E a fotografia. Com object-fit:cover numa caixa alta e estreita, a
   imagem deitada entra inteira em altura -- ve-se do ceu ao rio -- e o que
   sobra para os primeiros 450 px e ceu e encosta. A barragem, que e a
   razao de a fotografia estar ca, ficava na faixa de baixo, por tras do
   titulo e debaixo do gradiente.

   Amplio 1,42x com a ancora no fundo: o fundo da imagem nao se mexe, o ceu
   sai por cima e a crista da barragem sobe de 54% para cerca de 35% da
   altura. O parapeito atravessa o ecra acima do titulo e a parede ocupa o
   meio. Experimentei 1,72x e e demais: perde-se a escala e fica uma parede
   de betao sem leitura.

   O preco e resolucao: a 1,42x cada pixel do ecra pede 1,42 pixeis da
   origem a mais. Por isso o sizes em ecra estreito pede propositadamente
   mais do que a largura do elemento, para o browser ir buscar o ficheiro
   de 1920 (186 KB em AVIF) e nao o de 1280. */
@media(max-width:620px){
  .h-dir{align-self:flex-start; text-align:left}

  .hero .hbg img{
    object-position:68% 100%;
    transform:scale(1.42); transform-origin:68% 100%}

  /* O gradiente de baixo chegava aos 46% e apagava a parede toda. Recua
     para 42% e o veu de cima alivia: ja nao ha ceu claro para abafar. */
  .hero::after{
    background:
      linear-gradient(to top,
        var(--escuro) 0%, var(--escuro) 5%, rgba(11,11,10,.88) 14%,
        rgba(11,11,10,.62) 24%, rgba(11,11,10,.28) 34%,
        rgba(11,11,10,0) 42%),
      linear-gradient(to bottom, rgba(11,11,10,.30) 0%, rgba(11,11,10,0) 20%)}
}

/* ── A FATURA: o botao depois do documento ──────────────────────────────
   O botao estava dentro do .fs-lado, e em telemovel o .fs-lado sobe para
   cima da fatura -- ficava a pedir a analise antes de a pessoa ver o
   documento de que a analise trata.

   Saiu do .fs-lado e passou a ser o terceiro item da grelha. Em ecra
   largo a grelha devolve-o a coluna da direita, por baixo do texto, como
   estava; em ecra estreito fica depois da fatura, que e a ordem por que
   se le: o que muda, o documento, o botao. */
.fs-corpo{
  grid-template-rows:auto auto;
  column-gap:clamp(34px,5vw,86px); row-gap:0}
.fs-corpo > .fs-quadro{grid-column:1; grid-row:1/3}
.fs-corpo > .fs-lado{grid-column:2; grid-row:1; align-self:end}
.fs-corpo > .fs-cta{grid-column:2; grid-row:2; align-self:start; justify-self:start}

@media(max-width:1100px){
  /* Uma coluna, e a ordem dada pelo order: texto, fatura, botao. */
  .fs-corpo{grid-template-rows:none; row-gap:clamp(26px,4vw,40px)}
  .fs-corpo > .fs-quadro,
  .fs-corpo > .fs-lado,
  .fs-corpo > .fs-cta{grid-column:1; grid-row:auto}
  .fs-corpo > .fs-lado{order:-1; align-self:auto}
  .fs-corpo > .fs-cta{order:1; margin-top:0}
}
