/* ============================================================
   Escola HL — Escola de Condução, Faro

   O desenho vem do mundo do cliente: as chapas de matrícula
   portuguesas. Campo âmbar, faixa escura com o "P", e o código da
   categoria em letra pesada. É por isso que este site não se parece
   com o da Barbearia Lusa apesar de sair da mesma arquitetura.

   ⚠️ REGRA QUE NÃO SE PODE QUEBRAR: o âmbar #FFBB00 sobre fundo claro
   dá 1,7 de contraste, e o mínimo legível é 4,5. O âmbar NUNCA é cor
   de letra neste site — é sempre um campo, com texto escuro por cima
   (aí dá 12,6). Se alguém escrever "color: var(--ambar)" num texto,
   está a partir a acessibilidade do site.
   ============================================================ */

/* ---------- Tipos de letra, servidos por nós ----------
   Ver fonts/LEIA-ME.txt. Nunca pôr <link> para fonts.googleapis.com:
   entregava o IP do visitante a um terceiro e a política de segurança
   já não autoriza esse domínio. */

@font-face {
  font-family: 'Archivo';
  src: url('../fonts/archivo-latin-variavel.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-stretch: 62% 125%;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Public Sans';
  src: url('../fonts/public-sans-latin-variavel.woff2') format('woff2-variations');
  font-weight: 300 700;
  font-style: normal;
  font-display: swap;
}

/* ---------- Fichas de cor ---------- */

:root {
  /* Betão frio, não creme. O creme com serifa é o aspeto por omissão
     que se está a evitar de propósito. */
  --betao: #ecedef;
  --branco: #ffffff;

  /* Asfalto molhado: quase preto com um toque de azul. */
  --asfalto: #1c1e21;

  /* Âmbar da marca, tirado do logótipo. SÓ como campo. */
  --ambar: #ffbb00;
  --ambar-premido: #e8a800;

  /* Azul da faixa da UE das matriculas. NAO e cor da marca e nao se usa
     em mais lado nenhum: existe so para a matricula do topo se ler como
     uma matricula portuguesa. O P branco por cima da 10,9 de contraste. */
  --ue-azul: #003399;

  /* O cinzento da marca (#999999) não passa em contraste como texto.
     Vive aqui, como filete, e o texto secundário é uma versão escura. */
  --grafite: #555b63;
  --linha: #d2d5d9;

  /* Vermelho dos erros do formulário. Escuro de propósito: sobre o
     branco dá 7,0 de contraste, e o vermelho vivo habitual (#e11d48)
     dá 4,0 — abaixo do mínimo. Não é cor da marca nem quer ser; é a
     única cor deste site que existe só para dizer "isto está mal". */
  --erro: #b42318;

  --max: 1140px;

  /* Movimento — valores partilhados, para o site inteiro se mexer da
     mesma maneira. Sai depressa e trava devagar. */
  --ease: cubic-bezier(0.22, 0.68, 0.24, 1);
  --dur-rapido: 0.15s;
  --dur: 0.26s;
  --dur-lento: 0.5s;

  /* 🎚️ O NÍVEL DE MOVIMENTO DO SITE VIVE NESTAS DUAS LINHAS.
     Subiu a 13 de setembro de 2026, a pedido do Pedro: ele escolheu
     "notório — que se veja que é moderno". Antes era 14px e 0.5s, e era
     tão discreto que muita gente não dava por isso.

     ⚠️ Se um dia parecer movimento a mais, BAIXAR ESTES DOIS NÚMEROS —
     não desfazer o trabalho. 14px/0.5s é o site de antes; 26px/0.72s é
     o de agora; acima de 34px começa a parecer inquieto. */
  --subida: 26px;
  --dur-entrada: 0.72s;

  /* Sombras feitas de raiz para fundo claro. As da barbearia eram para
     fundo escuro e não se aclaram — refazem-se. */
  --sombra: 0 1px 2px rgba(28, 30, 33, 0.06), 0 4px 12px rgba(28, 30, 33, 0.07);
  --sombra-alta: 0 2px 4px rgba(28, 30, 33, 0.08), 0 12px 28px rgba(28, 30, 33, 0.12);
}

/* ---------- Base ---------- */

*, *::before, *::after { box-sizing: border-box; }

/* ⚠️ Isto nao e zelo a mais, e uma correcao. O browser esconde o que
   tem [hidden] com "display: none", mas qualquer regra nossa com
   "display: flex" ganha-lhe por especificidade — e o elemento aparece
   na mesma. Aconteceu com o botao do WhatsApp (que nao devia existir
   enquanto nao houver numero) e com o indicador "Aberto agora" (que se
   esconde nos feriados, e sem isto mostrava-se vazio). */
[hidden] { display: none !important; }

html {
  scroll-behavior: smooth;
  /* O cabeçalho é fixo: sem isto as âncoras param por baixo dele. */
  scroll-padding-top: 5.5rem;
}

body {
  margin: 0;
  background: var(--betao);
  color: var(--asfalto);
  font-family: 'Public Sans', system-ui, -apple-system, sans-serif;
  font-size: 1.0625rem;
  line-height: 1.65;
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  /* Espaço para a barra fixa do telemóvel não tapar o rodapé. */
  padding-bottom: env(safe-area-inset-bottom);
}

img { max-width: 100%; height: auto; display: block; }

h1, h2, h3 {
  font-family: 'Archivo', system-ui, sans-serif;
  font-weight: 800;
  line-height: 1.03;
  letter-spacing: -0.028em;
  margin: 0 0 0.6em;
  text-wrap: balance;
}

h1 { font-size: clamp(2.25rem, 5.4vw, 3.8rem); }
h2 { font-size: clamp(1.9rem, 4.6vw, 3rem); }
h3 { font-size: 1.2rem; letter-spacing: -0.018em; }

p { margin: 0 0 1.1em; }
p:last-child { margin-bottom: 0; }

a { color: inherit; }

.container {
  width: min(100% - 2.5rem, var(--max));
  margin-inline: auto;
}

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.salta {
  position: absolute;
  left: 0.75rem;
  top: -4rem;
  z-index: 200;
  background: var(--asfalto);
  color: var(--branco);
  padding: 0.7rem 1.1rem;
  border-radius: 4px;
  font-weight: 600;
  text-decoration: none;
  transition: top var(--dur-rapido) var(--ease);
}
.salta:focus { top: 0.75rem; }

:focus-visible {
  outline: 3px solid var(--asfalto);
  outline-offset: 3px;
  border-radius: 2px;
}

/* ---------- A chapa: o elemento que dá identidade ao site ----------
   Faixa escura à esquerda com o "P", campo âmbar, código em Archivo
   pesado e estreito. É a única peça "alta" do desenho — tudo à volta
   fica sóbrio de propósito. */

.chapa {
  display: inline-flex;
  align-items: stretch;
  background: var(--ambar);
  border: 2px solid var(--asfalto);
  border-radius: 6px;
  overflow: hidden;
  line-height: 1;
  flex: none;
}

.chapa-pais {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  background: var(--asfalto);
  color: var(--branco);
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-stretch: 80%;
  padding: 0.3em 0.42em 0.34em;
  font-size: 0.62em;
  letter-spacing: 0.02em;
}

.chapa-codigo {
  display: flex;
  align-items: center;
  justify-content: center;
  /* O texto sobre o âmbar é sempre o asfalto. Ver o aviso no topo. */
  color: var(--asfalto);
  font-family: 'Archivo', sans-serif;
  font-weight: 800;
  font-stretch: 78%;
  letter-spacing: -0.01em;
  padding: 0.26em 0.5em 0.3em;
  min-width: 1.7em;
}

/* A troca na chapa grande do topo (sai por cima, entra por baixo) esta
   em "Os quadros da chapa do topo", mais abaixo. A chapa tem
   overflow: hidden, e por isso o que troca desliza dentro do campo ambar
   como num painel de aeroporto. */

/* Largura minima na chapa grande. Desde 30 de setembro de 2026 quem
   impede a chapa de mudar de tamanho a cada troca e a grelha dos quadros
   (ver "Os quadros da chapa do topo"); isto fica para o HL nao a deixar
   estreita demais.
   (A variante escura da chapa, .chapa-escura, saiu no mesmo dia: servia
   o cartao "Ja tenho carta" e a pagina da revalidacao, e ja nao ha
   nenhum dos dois.) */
.chapa-xl .chapa-codigo { min-width: 2.5em; }

/* ---------- Barra de progresso do scroll ---------- */

.progresso {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 3px;
  z-index: 120;
  pointer-events: none;
}

.progresso-barra {
  display: block;
  height: 100%;
  background: var(--ambar);
  transform: scaleX(0);
  transform-origin: 0 50%;
}

/* A barra e movida pelo proprio scroll, sem uma linha de JavaScript.
   Nao ha codigo a correr a cada pixel, e nao e preciso escrever estilos
   a partir do script — que e uma regra desta casa.
   ⚠️ Onde o browser nao souber fazer isto (Firefox, por agora), a barra
   nao aparece de todo, em vez de aparecer parada. E decoracao: nada se
   perde. */
.progresso { display: none; }

@supports (animation-timeline: scroll()) {
  .progresso { display: block; }
  .progresso-barra {
    animation: progresso-scroll linear;
    animation-timeline: scroll(root block);
  }
}

@keyframes progresso-scroll {
  to { transform: scaleX(1); }
}

/* ---------- Cabeçalho ---------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  /* A primeira linha e a rede de seguranca: num browser sem color-mix
     a segunda e ignorada, e sem ela o cabecalho ficava transparente com
     o texto por cima do conteudo a passar. */
  background: #ecedef;
  background: color-mix(in srgb, var(--betao) 88%, transparent);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--linha);
  transition: box-shadow var(--dur) var(--ease);
}

/* Assim que a pagina sai do topo, o cabecalho ganha sombra e a marca
   encolhe um pouco. So opacity e transform — nada que mexa no layout.

   ⚠️ A sombra e um elemento proprio, por baixo do cabecalho, e o que se
   anima e a OPACIDADE dele. Animar "box-shadow" diretamente obrigava o
   browser a repintar a barra a cada pixel de scroll; assim nao repinta
   nada, e o cabecalho ja tem um "backdrop-filter" a custar-lhe caro. */
.site-header::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  height: 14px;
  pointer-events: none;
  opacity: 0;
  background: linear-gradient(to bottom,
    rgba(28, 30, 33, 0.10),
    rgba(28, 30, 33, 0));
  transition: opacity var(--dur) var(--ease);
}
.site-header.pousado::after { opacity: 1; }

.site-header .logo-mark { transition: transform var(--dur) var(--ease); }
.site-header.pousado .logo-mark { transform: scale(0.9); }

/* ⚠️ E ONDE O BROWSER SOUBER ANIMAR PELO SCROLL, NAO CORRE JAVASCRIPT
   NENHUM — a sombra e o encolher da marca passam a ser gradualmente
   desenhados pelo proprio scroll, nos primeiros 140px.

   Ganha-se duas coisas: deixa de haver uma funcao a correr a cada
   scroll (o main.js so a liga onde isto nao existir, e verifica com
   CSS.supports) e a sombra passa a crescer em vez de aparecer de
   repente. A classe ".pousado" continua a ser a rede de seguranca.

   E a mesma tecnica da barra de progresso do topo, mais acima. */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: scroll()) {
    .site-header::after {
      animation: cabecalho-pousa linear both;
      animation-timeline: scroll(root block);
      animation-range: 0 140px;
    }
    /* ⚠️ ".site-header" a frente NAO e zelo: a classe ".logo-mark" tambem
       esta no RODAPE, e sem isto o logotipo de baixo encolhia ao mesmo
       tempo que o de cima. Apanhado a medir (duas animacoes com o mesmo
       nome na pagina), nao a ler. */
    .site-header .logo-mark {
      animation: marca-encolhe linear both;
      animation-timeline: scroll(root block);
      animation-range: 0 140px;
    }
  }
}

@keyframes cabecalho-pousa { to { opacity: 1; } }
@keyframes marca-encolhe { to { transform: scale(0.9); } }

.header-inner {
  display: flex;
  align-items: center;
  gap: 1rem;
  min-height: 4.5rem;
}

.logo {
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  text-decoration: none;
  margin-right: auto;
}

/* O logótipo a sério da escola, recortado do original que eles deram
   (só o símbolo — o "ESCOLA DE CONDUÇÃO" continua escrito ao lado, em
   texto, para o Google o ler e para não ficar ilegível no telemóvel).

   ⚠️ A altura manda e a largura segue o desenho (width: auto). Os
   atributos width/height do <img> ficam lá para o browser reservar o
   espaço antes de a imagem chegar — sem eles a página salta ao carregar.

   Antes disto havia aqui um quadrado âmbar com "HL" escrito, composto
   por nós enquanto não havia logótipo. Se for preciso voltar atrás, é
   esse quadrado que se repõe. */
.logo-mark {
  display: block;
  width: auto;
  height: 3rem;
  flex: none;
}

.logo-texto { display: flex; flex-direction: column; line-height: 1.15; }
.logo-texto strong {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.02rem;
  letter-spacing: -0.02em;
}
.logo-texto small {
  font-size: 0.7rem;
  color: var(--grafite);
  letter-spacing: 0.01em;
}

.site-nav ul {
  display: flex;
  align-items: center;
  gap: 1.6rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

/* ⚠️ O :not(.btn) nao e enfeite. Sem ele, ".site-nav a" tem mais
   especificidade do que ".btn" e pinta o botao "Ligar" de cinzento
   sobre fundo escuro — media 2,44 de contraste, quando o minimo e 4,5.
   Foi apanhado a medir, nao a olho. */
.site-nav a:not(.btn) {
  text-decoration: none;
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--grafite);
  /* "Quanto custa" partido em "Quanto" / "custa" e o menu a desfazer-se.
     Se faltar espaco, aperta-se o espacamento — nunca o texto. */
  white-space: nowrap;
  transition: color var(--dur-rapido) var(--ease);
}
.site-nav a:not(.btn):hover { color: var(--asfalto); }
.site-nav a:not(.btn):active { color: var(--asfalto); }

/* ---------- Os links do menu sao texto, sem caixa ----------
   🛑 De 18 a 27 de setembro de 2026 os quatro nomes tiveram contorno de
   botao acima dos 1024px, por pedido da escola. A 27 o Pedro mandou
   tirar: ficam so as palavras. Se a caixa voltar, lembrar que o selector
   tem de excluir o .rede-ic-btn a mao (os icones sao <a> sem .btn) e que
   entre os 769px e os 1024px ela nao cabe — esta no historico do git. */

/* ---------- Redes no cabecalho ----------
   ⚠️ SEM MOLDURA, por pedido da escola a 18 de setembro de 2026 —
   escreveram "s/ linhas a volta" com uma seta a apontar para aqui. Ate
   ai eram botoes quadrados de filete visivel.

   O ALVO DE TOQUE NAO ENCOLHEU: o elemento continua com 2,35rem por
   2,35rem, so deixou de ter risco a marcar onde acaba. Nao trocar isto
   por um <svg> solto — o dedo precisa da caixa, mesmo sem a ver.

   O foco tambem nao se perdeu: quem navega de teclado continua a ver o
   anel preto da regra ":focus-visible" la em cima, que e desenhada por
   fora do elemento e nao depende do filete. Confirmado com Tab. */

.nav-redes { display: flex; align-items: center; gap: 0.4rem; }

/* ⚠️ O :not(.btn) da regra ".site-nav a" ja apanha estes links e da-lhes
   a cor grafite do menu — e o que se quer. O que e preciso e desmontar o
   "display: block" que a versao de telemovel poe em ".site-nav a", senao
   os botoes esticavam a largura toda do menu. */
.rede-ic-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.35rem;
  height: 2.35rem;
  flex: none;
  padding: 0;
  border: 2px solid transparent;
  border-radius: 5px;
  transition: transform var(--dur) var(--ease),
              background-color var(--dur) var(--ease),
              color var(--dur-rapido) var(--ease);
}

/* Um bocadinho maior agora que nao ha moldura a dar-lhe corpo: sem o
   filete, o simbolo sozinho parecia mais pequeno do que era. */
.rede-ic-btn .rede-ic { width: 1.2rem; height: 1.2rem; }

/* Sem filete, o hover passou a ser um fundo. E preciso alguma coisa:
   um icone que nao responde ao rato nao parece clicavel. */
.rede-ic-btn:hover,
.rede-ic-btn:focus-visible {
  background: rgba(28, 30, 33, 0.07);
  color: var(--asfalto);
  transform: translateY(-2px);
}
.rede-ic-btn:active { transform: translateY(0); transition-duration: var(--dur-rapido); }

/* ---------- O WhatsApp do cabecalho, a verde ----------
   📌 Pedido do Pedro a 27 de setembro de 2026: quadrado verde com o
   simbolo a branco, que e como toda a gente o reconhece no telemovel.

   📌 E a 21 de outubro de 2026, outra vez pedido dele: O MESMO VERDE DO
   BOTAO DO TOPO (ver "O botão de WhatsApp, no topo"), para nao ficarem
   dois verdes no mesmo ecra. Se um mudar, mudar o outro.

   📌 A 27 de outubro de 2026 os dois voltaram ao VERDE ORIGINAL do
   WhatsApp (#25D366, hover #1ebe5b), pedido do Pedro. Entre 21 e 27 de
   outubro tinham estado no verde escuro #15803d.

   O hover escurece o verde em vez de por o fundo cinzento dos outros
   icones, que o apagava. */
/* ⚠️ O "a." no selector nao e enfeite: a regra ".site-nav a:not(.btn)"
   pinta todos os links do menu de grafite e pesa mais do que uma classe
   sozinha. Assim empata, e ganha por vir depois. */
.site-nav a.rede-ic-btn--wapp {
  background: #25d366;
  color: #fff;
}
.site-nav a.rede-ic-btn--wapp:hover,
.site-nav a.rede-ic-btn--wapp:focus-visible,
.site-nav a.rede-ic-btn--wapp:active {
  background: #1ebe5b;
  color: #fff;
}

.menu-toggle { display: none; }

/* ---------- Botões ---------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  background: var(--asfalto);
  color: var(--branco);
  border: 2px solid var(--asfalto);
  border-radius: 5px;
  padding: 0.62rem 1.1rem;
  font-family: 'Public Sans', sans-serif;
  font-size: 0.95rem;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  text-align: center;
  transition: transform var(--dur-rapido) var(--ease),
              background-color var(--dur-rapido) var(--ease),
              box-shadow var(--dur-rapido) var(--ease);
}

.btn:hover { transform: translateY(-2px); box-shadow: var(--sombra-alta); }
/* Encolhe ao ser premido: no telemovel e a unica confirmacao de que o
   toque foi registado, porque nao ha rato para mostrar o hover. */
.btn:active { transform: translateY(0) scale(0.97); transition-duration: 0.06s; }

.btn-grande { padding: 0.88rem 1.5rem; font-size: 1.02rem; }
.btn-sm { padding: 0.45rem 0.9rem; font-size: 0.88rem; }

/* ---------- O botao de ligar, com o numero ----------

   📌 PEDIDO DO PEDRO, 27 DE SETEMBRO DE 2026: o numero volta ao
   cabecalho, num botao preto, em TODAS as larguras. Desfaz a decisao de
   22 de setembro, em que este botao saia do computador.

   🛑 UM LINK "tel:" NUM COMPUTADOR NAO FAZ NADA — nao abre, nao avisa,
   nao da erro. Por isso num aparelho com rato carregar COPIA o numero e
   diz que o copiou (js/main.js, seccao "O telefone num computador"). No
   telemovel liga, como sempre.

   No telemovel vive dentro do menu que abre: a 375px nao ha lugar para
   ele ao lado da marca e do botao do menu. E a barra fixa de baixo tem o
   seu proprio "Ligar".

   ⚠️ Nunca parte em duas linhas: "289 821 921" com espacos partia-se a
   meio do numero. */
.btn-ligar { white-space: nowrap; }

/* ---------- A confirmacao de que o numero foi copiado ----------

   📌 Em baixo a ESQUERDA: em baixo ao centro vive a barra do telemovel.
   (Em baixo a direita vivia o botao flutuante do WhatsApp, que saiu a 27
   de setembro de 2026.)

   ⚠️ Nao se esconde com [hidden] nem com visibility: fica sempre no
   documento, com opacidade zero e sem texto. E o que permite ao
   aria-live="polite" anunciar o que la aparece — um elemento criado no
   momento do clique nao e anunciado por leitor de ecra nenhum. */
.aviso-copia {
  position: fixed;
  left: 1rem;
  bottom: calc(1rem + env(safe-area-inset-bottom));
  z-index: 200;
  margin: 0;
  max-width: calc(100vw - 2rem);
  padding: 0.7rem 1rem;
  border: 1px solid var(--linha);
  /* 5px, como os botoes e as pastilhas das redes. Uma forma so no site. */
  border-radius: 5px;
  background: var(--branco);
  color: var(--asfalto);
  box-shadow: var(--sombra-alta);
  font-size: 0.92rem;
  font-weight: 600;
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity var(--dur) var(--ease),
              transform var(--dur) var(--ease);
}

.aviso-copia.a-mostrar { opacity: 1; transform: translateY(0); }

/* Quando o copiar FALHA, a caixa mostra so o numero e passa a poder ser
   selecionada com o rato — e o unico caminho que resta a pessoa. Quando
   corre bem nao apanha cliques nenhuns: nao ha nada para selecionar e nao
   deve tapar o que esta por baixo. */
.aviso-copia.manual { pointer-events: auto; user-select: text; }

/* O botão de linha é transparente com contorno — usa-se ao lado do
   principal para não haver duas acções com o mesmo peso. */
.btn-linha {
  background: transparent;
  color: var(--asfalto);
}
.btn-linha:hover { background: var(--branco); }

/* O botão âmbar é o campo, com texto escuro. Nunca o contrário. */
.btn-ambar {
  background: var(--ambar);
  border-color: var(--asfalto);
  color: var(--asfalto);
}
.btn-ambar:hover { background: var(--ambar-premido); }

/* ---------- Sobrancelhas e cabeçalhos de secção ---------- */

.sobrancelha {
  font-family: 'Archivo', sans-serif;
  font-size: 0.74rem;
  font-weight: 700;
  font-stretch: 88%;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--grafite);
  margin: 0 0 1rem;
}

.section { padding: clamp(3.5rem, 8vw, 6.5rem) 0; }
.section-branca { background: var(--branco); }

.section-escura {
  background: var(--asfalto);
  color: var(--betao);
}
.section-escura .sobrancelha { color: #9aa1a9; }

.section-cab { max-width: 46rem; margin-bottom: clamp(2rem, 4vw, 3rem); }
.section-lead { color: var(--grafite); font-size: 1.06rem; }

/* ---------- Topo ---------- */

.hero {
  position: relative;
  overflow: hidden;
  padding: clamp(3.5rem, 8vw, 6.5rem) 0 clamp(4rem, 8vw, 6.5rem);
}

/* O conteudo em cima do fundo animado. O z-index aqui e o que faz o
   sublinhado ambar do titulo (que usa z-index -1) ficar por tras do
   texto mas a frente das marcas de estrada. */
.hero-inner { position: relative; z-index: 1; }

/* ---------- As marcas de estrada do topo ----------

   🛑 ISTO JA FORAM DUAS RISCAS QUE NINGUEM VIA, e vale a pena saber
   porque, para nao se repetir: estavam a 7% de opacidade (1,14:1 de
   contraste contra o fundo), andavam a 10 pixeis por segundo, e tinham
   "border-radius: 9px" numa linha de 9px de altura — o que faz de cada
   traco uma CAPSULA de pontas redondas. Liam-se como manchas cinzentas.

   O que se mudou, por ordem de efeito: pontas direitas, cinco marcas em
   vez de duas, espessuras e opacidades diferentes, e tres velocidades.
   Continua tudo a ser CSS: nem uma imagem, nem uma linha de JavaScript. */
.hero-fundo {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;

  /* As marcas esbatem-se junto ao cabecalho e junto ao fim da seccao em
     vez de serem cortadas a direito. Ganha-se de caminho a sensacao de
     distancia: a marca de cima desaparece por cima, como uma estrada a
     perder-se ao longe. */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 12%, #000 88%, transparent 100%);
          mask-image: linear-gradient(to bottom, transparent 0, #000 12%, #000 88%, transparent 100%);
}

/* O que as cinco marcas tem em comum.

   ⚠️ O ANGULO BAIXOU DE -6deg PARA -3deg, e nao foi gosto. A -6deg, e
   com 220% de largura, cada marca subia 330px da esquerda para a direita
   — as marcas CRUZAVAM-SE umas com as outras e o resultado lia-se como
   riscos soltos espalhados, que e exatamente a queixa. A -3deg sobem 100px
   e ficam paralelas em qualquer largura. Nao voltar a subir sem refazer
   esta conta: e preciso que a subida seja MENOR do que o espaco entre
   marcas vizinhas (hoje 15% da altura do topo). */
.marca {
  position: absolute;
  left: -60%;
  width: 220%;
  /* 🛑 PONTAS DIREITAS. E a correcao com mais efeito de todas: e ela
     que transforma capsulas em marcas de estrada. NAO voltar a 9px. */
  border-radius: 1px;
  transform: rotate(-3deg) translateX(0);
}

/* --- As duas linhas continuas, que sao os limites da estrada ---

   ⚠️ NAO se animam, de proposito. Uma linha continua a deslizar de lado
   e indistinguivel de uma linha parada: so gastava bateria e uma camada
   na placa grafica. Numa estrada a serio e igual — o que parece mexer sao
   os picotados, nunca as linhas do lado. */
.marca-guia-alta,
.marca-guia-baixa {
  height: 3px;
  background: rgba(28, 30, 33, 0.05);
}
.marca-guia-alta { top: 13%; }
.marca-guia-baixa { top: 79%; }

/* --- Os tres picotados ---

   Todos com o mesmo periodo (220px) e proporcoes diferentes dentro dele.
   O periodo igual e o que permite UMA animacao so para os tres, com o
   ciclo a fechar sem salto; as proporcoes diferentes sao o que os faz
   parecer marcas diferentes em vez de tres copias.

   📌 Quem e mais grosso e mais escuro anda mais depressa. E o truque
   de profundidade do parallax, aqui de graca: da a sensacao de haver
   varias distancias sem desenhar nada a mais. */
.marca-traco-alto,
.marca-eixo,
.marca-traco-baixo {
  will-change: transform;
  animation: marcas-correm linear infinite;
}

.marca-traco-alto {
  top: 29%;
  height: 7px;
  background: repeating-linear-gradient(90deg,
    rgba(28, 30, 33, 0.10) 0 95px,
    transparent 95px 220px);
  animation-duration: 14s;
}

/* A marca principal do desenho: a mais grossa, a mais escura e a mais
   rapida. 🛑 A opacidade dela NAO sobe acima de 0.12 — ver o aviso
   aqui em baixo. */
.marca-eixo {
  top: 46%;
  height: 13px;
  background: repeating-linear-gradient(90deg,
    rgba(28, 30, 33, 0.12) 0 150px,
    transparent 150px 220px);
  animation-duration: 9s;
}

.marca-traco-baixo {
  top: 63%;
  height: 8px;
  background: repeating-linear-gradient(90deg,
    rgba(28, 30, 33, 0.09) 0 60px,
    transparent 60px 220px);
  animation-duration: 18s;
}

/* 🛑 O TETO DE 12% NAO E GOSTO, E UMA MEDICAO.

   O texto cinzento do topo (a sobrancelha, o subtitulo e as provas, todos
   em var(--grafite) = #555b63) passa por cima destas marcas. Medido no
   browser, pixel a pixel e so onde ha letras, a 375, 768, 1024, 1280 e
   1440px — o pior caso deu SEMPRE o mesmo, 4,63:1, que e o subtitulo por
   cima desta marca:

     sobre o fundo limpo ... 5,85:1  ✅
     marca a 10% .......... 4,82:1  ✅
     marca a 11% .......... 4,72:1  ✅
     marca a 12% .......... 4,63:1  ✅  <- onde esta, e passa
     marca a 13% .......... 4,54:1  ✅  o ultimo valor que ainda passa
     marca a 14% .......... 4,44:1  ❌ reprova
     marca a 16% .......... 4,26:1  ❌ reprova

   O minimo e 4,5:1. Escurecer mais faz o texto do topo reprovar em
   acessibilidade, e nao ha aviso nenhum a dizer isso — fica simplesmente
   ilegivel para quem ve mal. A intensidade que faltava veio da FORMA
   (pontas direitas), do NUMERO de marcas e da VELOCIDADE, nao da cor.

   📌 E porque e que a largura do ecra nao muda este numero: as marcas
   rodam em torno do MEIO da pagina, e o texto vive dentro do .container,
   que tem 1140px no maximo e e centrado. A 3 graus, dentro desses 1140px
   uma marca sobe no maximo 30px — e as marcas vizinhas estao a 105px umas
   das outras. Nunca se cruzam por cima do texto, em largura nenhuma, e por
   isso 12% e mesmo o valor maximo que alguma letra apanha. Se o angulo
   subir ou o espacamento apertar, esta conta tem de ser refeita: duas
   marcas sobrepostas dariam 20% e reprovavam. */

/* ⚠️ As marcas param quando o topo sai do ecra. Sao animacoes INFINITAS,
   e sem isto continuavam a correr durante a pagina toda — com
   "will-change: transform" a manter-lhes uma camada propria na placa
   grafica — para ninguem as ver.

   A classe e posta pelo vigia do topo, no main.js ("O vigia do topo"),
   e para tambem o reflexo dos farois da matricula. */
.hero-fora .marca { animation-play-state: paused; }

/* O deslocamento e exatamente o periodo do padrao (220px), por isso o
   ciclo fecha sem salto visivel. */
@keyframes marcas-correm {
  to { transform: rotate(-3deg) translateX(-220px); }
}

.hero-inner {
  display: grid;
  grid-template-columns: 1.35fr 1fr;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: center;
}

.hero h1 { margin-bottom: 1.1rem; }

/* O realce é um sublinhado âmbar por baixo da linha, não letra âmbar.
   É a forma de usar a cor da marca num título sem partir o contraste. */
.realce {
  position: relative;
  display: inline-block;
}
.realce::after {
  content: '';
  position: absolute;
  left: -0.06em;
  right: -0.06em;
  bottom: 0.07em;
  height: 0.24em;
  background: var(--ambar);
  z-index: -1;
  border-radius: 2px;
}

/* O sublinhado desenha-se da esquerda para a direita, um instante
   depois de o titulo entrar. E o momento de abertura da pagina. */
.js-anim .realce::after {
  transform: scaleX(0);
  transform-origin: 0 50%;
}
.js-anim h1.visivel .realce::after {
  transform: scaleX(1);
  transition: transform 0.65s var(--ease) 0.35s;
}

.hero-sub {
  font-size: clamp(1.05rem, 2vw, 1.2rem);
  color: var(--grafite);
  max-width: 34rem;
  margin-bottom: 1.8rem;
}

.hero-accoes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-bottom: 2rem;
}

/* Em colunas, nao numa linha com tracos a separar. Com tracos, quando
   a lista partia a linha ficava um traco solto no inicio da segunda —
   parecia um erro. O alinhamento separa melhor do que a decoracao. */
.hero-provas {
  list-style: none;
  margin: 0 0 1.5rem;
  padding: 1.1rem 0 0;
  border-top: 1px solid var(--linha);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10.5rem, 1fr));
  gap: 0.55rem 1.6rem;
  font-size: 0.9rem;
  color: var(--grafite);
}

/* A coluna da chapa estica a altura toda do topo: e nela que o rato
   inclina a matricula, e assim a zona nao e so a chapa. */
.hero-chapa {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  align-self: stretch;
}

/* So a chapa da 404.html usa isto desde 30 de setembro de 2026. */
.chapa-xl { font-size: clamp(2.6rem, 6vw, 4.2rem); border-width: 3px; border-radius: 9px; }

/* ---------- A matricula do topo ----------
   📌 Desde 30 de setembro de 2026: matricula portuguesa a serio, com o
   logotipo da escola no campo. A razao e o que cada peca faz estao no
   comentario do index.html, ao lado do HTML.

   TUDO EM "em": a chapa inteira cresce e encolhe com o font-size do
   .matricula-palco, e so esse numero decide o tamanho. Medido: ~370px de
   largura a 1280px, ~280px a 375px.

   ⚠️ DUAS CAIXAS, E TEM DE SER. A entrada ("a chapa assenta", mais abaixo
   em "O momento de abertura") e a inclinacao com o rato mexem as duas no
   transform. No mesmo elemento, a animacao de entrada ganhava para sempre
   e a chapa nunca inclinava. Por isso a entrada e do .matricula-palco e a
   inclinacao da .matricula. */
.matricula-palco {
  font-size: clamp(0.95rem, 0.5rem + 1vw, 1.25rem);
  perspective: 50em;
}

.matricula {
  position: relative;
  display: flex;
  height: 9.6em;
  background: var(--branco);
  border: 0.19em solid var(--asfalto);
  border-radius: 0.7em;
  overflow: hidden;
  box-shadow:
    0 1px 1px rgba(28, 30, 33, 0.08),
    0 0.4em 0.9em -0.25em rgba(28, 30, 33, 0.18),
    0 1.4em 2.5em -1.1em rgba(28, 30, 33, 0.28);
  /* A inclinacao: sem rato, sem JavaScript ou com menos movimento
     pedido, as duas variaveis ficam a 0 e a chapa fica direita. */
  transform: rotateX(var(--incl-x, 0deg)) rotateY(var(--incl-y, 0deg));
  transition: transform 0.45s var(--ease);
}

/* O js/main.js diz em que zona esta o rato, de -2 a 2, e aqui cada zona
   ganha o seu angulo — o JavaScript nao escreve estilos (regra do site,
   por causa da politica de seguranca). O lado da chapa mais perto do
   rato afunda, como se o rato carregasse nele. No maximo 7 graus de lado
   e 5,6 de cima a baixo: mais do que isso e o logotipo deixa de se ler. */
.matricula[data-incl-x="-2"] { --incl-y: -7deg; }
.matricula[data-incl-x="-1"] { --incl-y: -3.5deg; }
.matricula[data-incl-x="1"]  { --incl-y: 3.5deg; }
.matricula[data-incl-x="2"]  { --incl-y: 7deg; }
.matricula[data-incl-y="-2"] { --incl-x: 5.6deg; }
.matricula[data-incl-y="-1"] { --incl-x: 2.8deg; }
.matricula[data-incl-y="1"]  { --incl-x: -2.8deg; }
.matricula[data-incl-y="2"]  { --incl-x: -5.6deg; }

/* A faixa da UE: as doze estrelas em cima, o P em baixo. As estrelas sao
   o ambar da marca, que e quase o amarelo da bandeira. */
.matricula-ue {
  flex: none;
  width: 3.1em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 0.85em 0 0.7em;
  background: var(--ue-azul);
  color: var(--branco);
}
.matricula-estrelas { width: 2.15em; height: 2.15em; fill: var(--ambar); }
.matricula-p {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-stretch: 80%;
  font-size: 1.75em;
  line-height: 1;
}

/* O logotipo. ⚠️ O width/height do <img> ganham ao CSS (armadilha
   conhecida): por isso os dois vao aqui escritos, height em "em" e
   width em auto. */
.matricula-campo {
  flex: 1;
  display: grid;
  place-items: center;
  padding: 0 1.5em;
}
.matricula-campo img { display: block; height: 7.3em; width: auto; }

/* A faixa amarela: nas matriculas de 1998 a 2020 trazia o ano e o mes.
   Asfalto sobre ambar, que e a unica maneira de o ambar levar letras. */
.matricula-ano {
  flex: none;
  width: 2.5em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.15em;
  background: var(--ambar);
  border-left: 0.12em solid var(--asfalto);
  color: var(--asfalto);
  font-family: 'Archivo', sans-serif;
  font-weight: 800;
  font-stretch: 78%;
}
.matricula-ano span { font-size: 1.5em; line-height: 1; }

/* Os dois parafusos, um de cada lado do logotipo. */
.matricula-parafuso {
  position: absolute;
  top: 50%;
  z-index: 2;
  width: 0.56em;
  height: 0.56em;
  margin-top: -0.28em;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #ffffff 0 18%, #b9bec5 40%, #7d838b 100%);
  box-shadow: inset 0 0 0 1px rgba(28, 30, 33, 0.35);
}
.matricula-parafuso::after {
  content: '';
  position: absolute;
  left: 18%;
  right: 18%;
  top: calc(50% - 0.5px);
  height: 1px;
  background: rgba(28, 30, 33, 0.55);
  transform: rotate(35deg);
}
.matricula-parafuso-e { left: 3.85em; }
.matricula-parafuso-d { right: 3.2em; }

/* O rebordo em relevo, a volta da chapa toda, como nas verdadeiras. */
.matricula-rebordo {
  position: absolute;
  inset: 0.3em;
  z-index: 2;
  border: 0.09em solid rgba(28, 30, 33, 0.5);
  border-radius: 0.45em;
  pointer-events: none;
}

/* O reflexo dos farois: uma faixa de luz atravessa a chapa em 1,2s e
   descansa 4,8s. So transform. ⚠️ Com o --ease do site (que sai
   depressa e trava devagar) a luz fazia dois tercos do caminho nos
   primeiros 0,3s e arrastava-se o resto — lia-se como um estalo e nao
   como um farol a passar. Por isso leva uma curva propria, quase
   uniforme. Sem ".js-anim" (sem JavaScript ou com
   menos movimento pedido) fica parada fora da chapa, escondida pelo
   overflow. E para quando o topo sai do ecra, como as marcas de estrada
   (".hero-fora", posta pelo js/main.js). */
.matricula::after {
  content: '';
  position: absolute;
  top: -20%;
  bottom: -20%;
  left: 0;
  z-index: 3;
  width: 38%;
  background: linear-gradient(100deg, rgba(255, 255, 255, 0) 20%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0) 80%);
  transform: translateX(-160%) skewX(-12deg);
  pointer-events: none;
}
.js-anim .matricula::after { animation: farois 6s cubic-bezier(0.45, 0, 0.3, 1) 1.4s infinite; }
.hero-fora .matricula::after { animation-play-state: paused; }

@keyframes farois {
  0%        { transform: translateX(-160%) skewX(-12deg); }
  20%, 100% { transform: translateX(300%) skewX(-12deg); }
}

.hero-chapa-legenda {
  font-size: 0.82rem;
  color: var(--grafite);
  text-align: center;
  margin: 0;
}

/* ---------- Indicador Aberto / Fechado ----------
   Nasce escondido: sem JavaScript não aparece nada, porque um estado
   errado ao lado do botão de telefone é pior do que estado nenhum.
   O ponto é decoração — a informação está toda escrita ao lado. */

.estado {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  font-size: 0.9rem;
  color: var(--grafite);
  margin: 0;
}

.estado-ponto {
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  background: var(--grafite);
  flex: none;
}
.estado.aberto .estado-ponto { background: #1f8a4c; }

.estado-texto { font-weight: 700; color: var(--asfalto); }
.estado-claro .estado-texto { color: var(--branco); }
.estado-claro { color: #9aa1a9; }

/* "Secretaria" vem a frente, como etiqueta: sem isto lia-se
   "Fechado abre segunda as 09:00 na secretaria", tudo seguido. */
.estado-onde { font-weight: 600; }
.estado-onde::after { content: ':'; }

/* ---------- Cartões de categoria ---------- */

/* Colunas explicitas em vez de auto-fit: com auto-fit os cartoes caiam
   como 3+1 e deixavam um buraco.

   🛑 CINCO LADO A LADO a partir dos 992px, desde 30 de setembro de 2026
   (pedido do Pedro). Ate ai eram quatro numa linha e o "Ja tenho carta"
   por baixo, a toda a largura. Abaixo dos 992px fica como era: duas
   colunas, com o treino a atravessar a grelha no fim.
   (A lista continua a chamar-se .chapas, mas desde o mesmo dia os
   cartoes ja nao levam chapa nenhuma.) */
.chapas {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.1rem;
}

@media (min-width: 34rem) {
  .chapas { grid-template-columns: repeat(2, 1fr); }
}

/* O cartao de quem ja tem carta atravessa a grelha toda enquanto ha duas
   colunas: nao e uma categoria a mais, e outra coisa. */
.chapa-larga { grid-column: 1 / -1; }

@media (min-width: 62rem) {
  .chapas { grid-template-columns: repeat(5, 1fr); }
  .chapa-larga { grid-column: auto; }
}

.cartao {
  display: flex;
  flex-direction: column;
  gap: 1.1rem;
  height: 100%;
  padding: 1.4rem;
  background: var(--betao);
  border: 1px solid var(--linha);
  border-radius: 10px;
  text-decoration: none;
  transition: transform var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease),
              border-color var(--dur) var(--ease);
}
.cartao:hover,
.cartao:focus-visible {
  transform: translateY(-5px) scale(1.02);
  box-shadow: var(--sombra-alta), 0 0 0 1px var(--ambar);
  border-color: var(--ambar);
}
.cartao:active { transform: translateY(-2px) scale(1.005); }

/* ---------- O veiculo e o codigo, no topo do cartao ----------
   Os veiculos entraram a 28 de setembro de 2026, pedidos pelo Pedro, ao
   lado de uma chapa com o codigo. A 30 de setembro a chapa SAIU (tambem
   pedido dele) e o desenho passou a ser a peca principal do cartao: uma
   cor so, a do texto, sem ambar e sem sombra.

   O codigo (B, A1, A2, A) ficou escrito do outro lado, na letra da chapa
   (Archivo pesado e estreito) mas sem chapa a volta. Tem de ficar: o
   titulo do cartao diz "Carro", nao "B".

   Alinhados EM BAIXO, de proposito: o veiculo e o codigo assentam na
   mesma linha, como numa estrada. A altura minima e a da mota mais alta,
   para os cinco cartoes comecarem o texto a mesma altura. */
.cartao-topo {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 0.75rem;
  min-height: 3.4rem;
}

.veiculo {
  display: block;
  flex: none;
  height: 3rem;
  width: auto;
  aspect-ratio: 2 / 1;
  fill: currentColor;
  color: var(--asfalto);
  /* O desenho tem ar por baixo das rodas: desce um bocadinho para as
     rodas assentarem na linha de baixo do codigo. */
  margin-bottom: -0.33rem;
}
/* As motas ocupam menos da caixa do que o carro (sao mais estreitas e
   mais altas), e com a mesma altura pareciam brinquedos ao lado dele. */
.veiculo-mota { height: 3.4rem; margin-bottom: -0.5rem; }
.veiculo-volante { aspect-ratio: 1; height: 3rem; margin-bottom: 0; }

.cartao-codigo {
  font-family: 'Archivo', sans-serif;
  font-weight: 800;
  font-stretch: 78%;
  font-size: 1.75rem;
  line-height: 1;
  letter-spacing: -0.01em;
  color: var(--asfalto);
}

/* ⚠️ DOS 992px AOS 1200px OS CARTOES SAO OS MAIS ESTREITOS DO SITE: sao
   cinco lado a lado, com ~140px por dentro aos 992px. Nesta faixa aperta-se
   o que se pode ceder sem partir nada: o espaco dentro do cartao, o
   tamanho do veiculo e um pouco da letra. Acima dos 1200px ha espaco e
   volta tudo ao normal. Medido a 30 de setembro de 2026. */
@media (min-width: 62rem) and (max-width: 75rem) {
  .chapas { gap: 0.9rem; }
  .cartao { padding: 1.1rem; }
  .cartao-topo { gap: 0.5rem; min-height: 2.8rem; }
  .veiculo { height: 2.5rem; margin-bottom: -0.28rem; }
  .veiculo-mota { height: 2.8rem; margin-bottom: -0.42rem; }
  .veiculo-volante { height: 2.5rem; margin-bottom: 0; }
  .cartao-codigo { font-size: 1.45rem; }
  /* Com ".cartao" a frente de proposito: as regras normais destes dois
     estao mais abaixo no ficheiro e ganhavam pela ordem. */
  .cartao .cartao-titulo { font-size: 1.08rem; }
  .cartao .cartao-texto { font-size: 0.88rem; }
}

/* ⚠️ O miolo das rodas e pintado da COR DO FUNDO DO CARTAO, e o aro leva
   um contorno da mesma cor. E isso que separa a roda da carrocaria e
   tapa o garfo e o braco da mota que passam por tras, sem precisar de
   uma segunda cor. Se o fundo do .cartao mudar, mudar aqui tambem. */
.veiculo .roda-furo { fill: var(--betao); }
.veiculo .roda-aro {
  stroke: var(--betao);
  stroke-width: 2.2;
  paint-order: stroke;
}

/* O veiculo avanca uns pixeis quando se aponta o cartao, e o volante
   vira. So o transform se anima, e so para quem nao pediu menos
   movimento no sistema: quem pediu ve-os parados. */
@media (prefers-reduced-motion: no-preference) {
  .veiculo { transition: transform var(--dur) var(--ease); }
  .cartao:hover .veiculo,
  .cartao:focus-visible .veiculo { transform: translateX(6px); }
  .cartao:active .veiculo { transform: translateX(3px); }

  .cartao:hover .veiculo-volante,
  .cartao:focus-visible .veiculo-volante { transform: rotate(-24deg); }
  .cartao:active .veiculo-volante { transform: rotate(-12deg); }
}

.cartao-corpo { display: flex; flex-direction: column; gap: 0.35rem; flex: 1; }

.cartao-titulo {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.22rem;
  letter-spacing: -0.02em;
}

.cartao-idade {
  font-size: 0.84rem;
  font-weight: 600;
  color: var(--grafite);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
/* Com os cinco cartoes numa linha, a linha das idades encolhe um pouco
   para caber numa linha so: "A PARTIR DOS 18 ANOS" pedia 169px e o cartao
   tem 168 por dentro aos 1280px (medido a 30 de setembro de 2026). O
   "Treino para encartados" e mais comprido e parte em dois na mesma. */
@media (min-width: 62rem) {
  .cartao-idade { font-size: 0.78rem; letter-spacing: 0.04em; }
}

.cartao-texto {
  font-size: 0.94rem;
  color: var(--grafite);
  margin-top: 0.35rem;
  flex: 1;
}

.cartao-accao {
  margin-top: 0.9rem;
  font-weight: 700;
  font-size: 0.94rem;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}
.cartao-accao::after {
  content: '\2192';
  transition: transform var(--dur) var(--ease);
}
.cartao:hover .cartao-accao::after { transform: translateX(4px); }

/* O "Ja tenho carta" deita-se (desenho a esquerda, texto a direita) so
   enquanto atravessa a grelha toda. A partir dos 992px e um cartao como
   os outros, na mesma linha, e fica de pe como eles. */
@media (min-width: 48rem) and (max-width: 61.9375rem) {
  .cartao-largo { flex-direction: row; align-items: center; gap: 2rem; }
  .cartao-largo .cartao-corpo { max-width: 46rem; }
  .cartao-largo .cartao-topo { align-self: center; align-items: center; }
}

.nota-legal {
  margin-top: 1.6rem;
  font-size: 0.86rem;
  color: var(--grafite);
}
.nota-legal a { text-decoration-thickness: 1px; text-underline-offset: 2px; }

/* ---------- Linha de inscrição nos cartões de categoria ----------
   Entrou a 18 de setembro de 2026 com a informação nova do email da
   escola: pode inscrever-se seis meses antes de fazer a idade mínima.
   Fica numa linha própria e não dentro do ".cartao-texto" porque esse já
   estava no limite — mais uma frase lá dentro e os quatro cartões
   deixavam de ter a mesma altura. */

.cartao-inscricao {
  margin-top: auto;
  padding-top: 0.6rem;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--grafite);
  display: flex;
  align-items: baseline;
  gap: 0.45rem;
}

/* Um ponto âmbar a marcar a linha, e não um ícone: é o mesmo gesto do
   indicador "Aberto agora". Decorativo — o que interessa está escrito. */
.cartao-inscricao::before {
  content: "";
  width: 0.45rem;
  height: 0.45rem;
  border-radius: 2px;
  background: var(--ambar);
  flex: none;
}

/* ---------- Os 5 passos ----------

   Substituiu o bloco "Simulador", que era o formulário de pedido de
   orçamento e saiu a 18 de setembro de 2026 por decisão da escola.

   ⚠️ O NÚMERO É UM CAMPO ÂMBAR COM O ALGARISMO ESCURO POR CIMA, e não
   âmbar escrito sobre fundo claro. É a regra que não se quebra neste
   site: o âmbar sobre o betão dá 1,7 de contraste e o mínimo é 4,5;
   assim, escuro sobre âmbar, dá 12,6. Está escrito no topo do ficheiro.

   É de propósito que fala a mesma língua da chapa de matrícula: campo
   âmbar, cantos suaves, algarismo em Archivo pesado. */

.passos {
  list-style: none;
  margin: 0;
  padding: 0;
  max-width: 44rem;
}

.passo {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0 1.1rem;
  position: relative;
  padding-bottom: 1.9rem;
}

.passo:last-child { padding-bottom: 0; }

/* O filete que liga um passo ao seguinte. Desenhado com ::before no
   próprio passo e não como borda do número, para poder parar antes do
   fim no último — um traço solto a apontar para o nada dizia que
   faltava alguma coisa. */
.passo::before {
  content: "";
  position: absolute;
  left: 1.15rem;
  top: 2.6rem;
  bottom: 0.5rem;
  width: 2px;
  background: var(--linha);
}

.passo:last-child::before { display: none; }

.passo-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.3rem;
  height: 2.3rem;
  border-radius: 7px;
  background: var(--ambar);
  color: var(--asfalto);
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.1rem;
  flex: none;
  position: relative;
  z-index: 1;
}

/* position + isolation: o cartão branco do passo atual (mais abaixo)
   é um ::before com z-index -1, e tem de ficar atrás do texto mas à
   frente do fundo da secção. */
.passo-corpo {
  padding-top: 0.2rem;
  position: relative;
  isolation: isolate;
}

.passo-titulo {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.16rem;
  letter-spacing: -0.02em;
  margin: 0 0 0.4rem;
}

/* Asfalto e não grafite, desde 28 de setembro de 2026, a pedido do
   Pedro. O grafite já passava (5,9:1); o asfalto dá 15:1. */
.passo-corpo p {
  margin: 0;
  color: var(--asfalto);
  max-width: 34rem;
}

/* A lista dos documentos do passo 1. O visto é um campo âmbar com o
   traço escuro por cima — a regra do âmbar vale também aqui. Desenhado
   com bordas e não com imagem: a política de segurança não deixa
   carregar imagens embutidas no CSS. */
.passo-lista {
  list-style: none;
  margin: 0.45rem 0 0.6rem;
  padding: 0;
  display: grid;
  gap: 0.35rem;
  max-width: 34rem;
}

.passo-lista li {
  position: relative;
  padding-left: 1.85rem;
}

.passo-lista li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.3rem;
  width: 1.15rem;
  height: 1.15rem;
  border-radius: 4px;
  background: var(--ambar);
}

.passo-lista li::after {
  content: "";
  position: absolute;
  left: 0.42rem;
  top: 0.45rem;
  width: 0.32rem;
  height: 0.62rem;
  border: solid var(--asfalto);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.passos-nota {
  margin: 2rem 0 0;
  padding-left: 3.4rem;
  color: var(--asfalto);
  max-width: 44rem;
}

/* ---------- A linha com progresso ----------

   Entrou a 28 de setembro de 2026, a pedido do Pedro. Tudo o que está
   aqui só vale com a classe .com-progresso, que o js/main.js põe na
   lista. Sem JavaScript os passos ficam como eram: todos a âmbar, linha
   cheia.

   Três estados, postos pelo main.js:
   - sem classe: ainda não se chegou lá. Número branco com filete, linha
     tracejada como a risca de uma estrada;
   - .chegou: o passo já subiu acima dos 60% do ecrã. Número a âmbar e o troço
     de linha por baixo dele cheio de âmbar;
   - .atual: o último a que se chegou. Cartão branco atrás do texto e o
     número um pouco maior.

   ⚠️ Só transform e opacity se animam. O âmbar do número é uma camada
   por cima (::before) que aparece, e não uma troca de cor de fundo; a
   linha cheia é um traço que estica de cima para baixo (scaleY). */

.com-progresso .passo::before {
  background: repeating-linear-gradient(
    to bottom,
    color-mix(in srgb, var(--grafite) 45%, var(--betao)) 0 7px,
    transparent 7px 13px
  );
}

/* O troço cheio. 4px e não 2: um traço âmbar fino sobre o betão quase
   não se vê, e é ele que diz "já passaste por aqui". */
.com-progresso .passo::after {
  content: "";
  position: absolute;
  left: calc(1.15rem - 1px);
  top: 2.6rem;
  bottom: 0.5rem;
  width: 4px;
  border-radius: 2px;
  background: var(--ambar);
  transform: scaleY(0);
  transform-origin: top;
}

.com-progresso .passo.chegou::after { transform: scaleY(1); }
.com-progresso .passo:last-child::after { display: none; }

.com-progresso .passo-num {
  background: var(--branco);
  box-shadow: inset 0 0 0 2px var(--linha);
}

/* O campo âmbar por cima do branco. O .passo-num já tem z-index, por
   isso o -1 põe esta camada atrás do algarismo e à frente do branco. */
.com-progresso .passo-num::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background: var(--ambar);
  opacity: 0;
}

.com-progresso .passo.chegou .passo-num::before { opacity: 1; }
.com-progresso .passo.atual .passo-num { transform: scale(1.1); }

/* Mais espaço entre o número e o texto do que sem progresso: o cartão
   branco ocupa parte dele, e colado ao número parecia uma etiqueta
   presa. A nota "cerca de 4 meses" acompanha, para ficar alinhada com
   o texto (2,3rem do número + 1,45rem). */
.com-progresso .passo { gap: 0 1.45rem; }
.passos.com-progresso + .passos-nota { padding-left: 3.75rem; }

/* O cartão branco do passo atual. Sai para fora do texto com margens
   negativas para o texto não saltar quando ele aparece. */
.com-progresso .passo-corpo::before {
  content: "";
  position: absolute;
  inset: -0.7rem -0.95rem -0.85rem;
  z-index: -1;
  border-radius: 10px;
  background: var(--branco);
  box-shadow: var(--sombra);
  opacity: 0;
}

.com-progresso .passo.atual .passo-corpo::before { opacity: 1; }

/* Com o rato por cima, meio cartão. O cursor não muda: os passos não se
   clicam e não devem parecer clicáveis. */
@media (hover: hover) {
  .com-progresso .passo:not(.atual):hover .passo-corpo::before { opacity: 0.6; }
}

.js-anim .com-progresso .passo-num {
  transition: transform var(--dur) var(--ease);
}
.js-anim .com-progresso .passo-num::before,
.js-anim .com-progresso .passo-corpo::before {
  transition: opacity var(--dur-lento) var(--ease);
}
.js-anim .com-progresso .passo::after {
  transition: transform 0.7s var(--ease);
}

/* ---------- O convite ----------
   O que ficou no lugar do formulário. Não recolhe nada: é um botão só,
   "Fala connosco", que abre o email da escola (o Gmail num computador,
   a aplicação de email no telemóvel).
   Até 27 de setembro de 2026 eram três (WhatsApp, email e telefone).
   A escolha da carta, que entrou a 28 de setembro por cima do botão,
   saiu a 30, a pedido do Pedro. E no mesmo dia saiu a CAIXA à volta (com
   a frase e a linha de ajuda): ficou só o botão.

   Alinhado com a nota "cerca de 4 meses" aqui em cima, que por sua vez
   alinha com o texto dos passos: os três formam uma coluna só. */

.convite-accoes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem;
  margin: 1.6rem 0 0;
  padding-left: 3.4rem;
}
.passos.com-progresso ~ .convite-accoes { padding-left: 3.75rem; }

/* ---------- Os ícones dentro dos botões ----------
   O envelope do "Fala connosco" (no topo e no fim dos 5 passos) e o símbolo do
   WhatsApp. Pintam-se com a cor das letras do botão, por isso ficam
   sempre com o mesmo contraste que elas. */

.btn-ic {
  width: 1.15rem;
  height: 1.15rem;
  flex: none;
}

/* ---------- O botão de WhatsApp, no topo ----------
   📌 VERDE desde 30 de setembro de 2026, a pedido do Pedro (até aí era
   um botão de contorno, só com o símbolo a verde). E, no fim do mesmo
   dia, LETRAS BRANCAS, também a pedido dele.

   📌 Desde 27 de outubro de 2026 é o VERDE ORIGINAL do WhatsApp
   (#25D366, hover #1ebe5b) COM LETRAS BRANCAS, a pedido do Pedro. Até aí
   era um verde mais fundo, #15803d, escolhido para as letras se lerem.

   🛑 ESTAS LETRAS BRANCAS DÃO 2,0 DE CONTRASTE (2,5 no hover). O mínimo
   são 4,5, e leem-se mal para quem vê mal ou ao sol no telemóvel. O Pedro
   foi avisado disso a 27 de outubro e escolheu-as na mesma, ao lado da
   alternativa das letras escuras (o asfalto dá 8,4 neste verde). Não
   "corrigir" sem lhe perguntar.

   O símbolo do cabeçalho usa este mesmo verde (ver "O WhatsApp do
   cabecalho, a verde"). Se um mudar, mudar o outro. */

.btn-wapp {
  background: #25d366;
  border-color: #25d366;
  color: var(--branco);
}
.btn-wapp:hover,
.btn-wapp:focus-visible { background: #1ebe5b; border-color: #1ebe5b; }

/* ---------- Pedir avaliação no Google ----------
   Entrou a 18 de setembro de 2026, pedido pela escola.

   ⚠️ O QR SÓ APARECE A PARTIR DOS 60rem. Num telemóvel ninguém aponta a
   câmara ao próprio ecrã, e um código que ninguém pode ler é ruído a
   ocupar espaço. O botão ao lado faz exatamente o mesmo e esse fica
   sempre. */

/* Sem linha por cima desde 30 de setembro de 2026, a pedido do Pedro:
   era um filete cinzento entre as opiniões e isto. Sem ela, a margem
   ficou pequena: a grelha da secção já põe 64px entre as opiniões e este
   bloco, e com a margem antiga ficava um buraco de 150px sem nada. */
.avaliar {
  margin-top: clamp(0.5rem, 2vw, 1.5rem);
  display: grid;
  gap: 1rem 1.6rem;
  align-items: center;
  grid-column: 1 / -1;
}

.avaliar-texto { margin: 0; color: var(--grafite); max-width: 32rem; }
.avaliar-texto strong { color: var(--asfalto); }
.avaliar-accao { margin: 0; }
.avaliar-qr { display: none; }

@media (min-width: 60rem) {
  .avaliar {
    grid-template-columns: 1fr auto auto;
  }
  .avaliar-qr {
    display: block;
    width: 128px;
    height: 128px;
    border: 2px solid var(--linha);
    border-radius: 8px;
    padding: 6px;
    background: var(--branco);
  }
}

/* ---------- A escola ---------- */

.escola-inner {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: start;
}

.lema { list-style: none; margin: 0; padding: 0; }
.lema li {
  padding: 1rem 0 1rem 1.2rem;
  border-left: 4px solid var(--ambar);
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}
.lema li + li { margin-top: 0.5rem; }
.lema strong {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.14rem;
  letter-spacing: -0.02em;
}
.lema span { color: var(--grafite); font-size: 0.95rem; }

/* ---------- Equipa ---------- */

/* Mesmas colunas dos cartoes de categoria: com auto-fit, as quatro
   pessoas caiam como 3+1 e deixavam um buraco. */
.equipa {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.1rem;
}

@media (min-width: 34rem) {
  .equipa { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 62rem) {
  .equipa { grid-template-columns: repeat(4, 1fr); }
}

/* Em coluna, para a frase de cada pessoa (desde 30 de setembro de 2026)
   descer ao fundo do cartao: assim as quatro ficam alinhadas, mesmo com
   listas de habilitacoes de tamanhos diferentes. */
.equipa > li {
  display: flex;
  flex-direction: column;
  background: var(--branco);
  border: 1px solid var(--linha);
  border-top: 4px solid var(--ambar);
  border-radius: 10px;
  padding: 1.3rem;
}

/* ✅ EM USO desde 13 de setembro de 2026.

   As contas não batiam certo — a secção tinha dois homens e duas mulheres e as
   fotografias são três homens e uma mulher — e ficou resolvido quando a escola
   avisou que a Sílvia Leonor saiu e o Duarte Constantino entrou. Quem é quem
   está escrito no comentário da secção no index.html e no img/LEIA-ME.txt.

   📌 QUADRADAS desde 30 de setembro de 2026, a pedido do Pedro (eram
   redondas, com 88px). Passaram a 140px com cantos suaves de 8px, e o aro
   âmbar ficou. Os ficheiros têm 400px: chegam para ecrãs de alta densidade
   a este tamanho, mas não para muito maior.

   ⚠️ O width e o height têm de ficar os dois escritos aqui: os atributos
   width/height do <img> comportam-se como CSS e, sozinhos, ganhavam a esta
   regra e davam um retângulo em vez de um quadrado. */
.equipa-retrato {
  display: block;
  width: 8.75rem;
  height: 8.75rem;
  border-radius: 8px;
  object-fit: cover;
  border: 3px solid var(--ambar);
  margin: 0 0 0.9rem;
  background: var(--betao);
}

.equipa-nome {
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  font-size: 1.14rem;
  letter-spacing: -0.02em;
  margin: 0 0 0.15rem;
}

.equipa-funcao {
  font-size: 0.8rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--grafite);
  margin: 0 0 0.9rem;
}

.equipa-hab {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 0.9rem;
  color: var(--grafite);
}
.equipa-hab li { padding: 0.28rem 0; border-top: 1px solid var(--linha); }

/* ---------- A frase de cada pessoa ----------
   Entrou a 30 de setembro de 2026, a pedido do Pedro. Fica no fundo do
   cartao (margin-top: auto), com as mesmas aspas curvas dos testemunhos e
   um filete ambar a esquerda, que e o gesto do lema da escola.

   ✅ As quatro frases chegaram a 21 de outubro de 2026. O MARCADOR
   (.equipa-frase-falta) ja nao esta em uso, e fica para quando entrar
   alguem novo na equipa: tracejado e em letra cinzenta, para se ver que
   falta ali uma coisa. NAO PODE IR PARA O AR com ele. Instrucoes no
   comentario da seccao, no index.html. */
.equipa-frase {
  margin: auto 0 0;
  padding: 0.1rem 0 0.1rem 0.9rem;
  border-left: 3px solid var(--ambar);
  font-size: 0.92rem;
  font-style: italic;
  color: var(--asfalto);
}
.equipa-frase p { margin: 0; }

/* "preparamos-te" (frase do Luis) partia no hifen aos 768px: ficava
   "preparamos-" numa linha e "te" na seguinte. Visto a medir, 21 de
   outubro de 2026. Aplica-se so a palavra embrulhada no <span>. */
.equipa-frase .sem-quebra { white-space: nowrap; }

/* O espaco minimo por cima da frase fica por baixo da lista, e nao
   dentro da frase: senao o filete ambar comecava antes das letras. */
.equipa-hab { margin-bottom: 1.1rem; }

.equipa-frase-falta {
  padding: 0.7rem 0.8rem;
  font-size: 0.86rem;
  border: 1px dashed var(--grafite);
  border-radius: 6px;
  font-style: normal;
  color: var(--grafite);
}

/* ---------- Testemunhos ----------
   Opinioes verdadeiras do Google. Ver o comentario grande da seccao no
   index.html — e la que estao as regras que nao se desfazem (nada nos
   dados estruturados, sem a nota escrita, sem estrelas, sem datas).

   O DESENHO: uma pilha de cartoes em leque, que troca sozinha de 6 em 6
   segundos e ao clique. Escolhido pelo Pedro a 13 de setembro de 2026.

   🛑 A PILHA SO EXISTE DENTRO DE ".js-anim". Sem JavaScript, ou com menos
   movimento pedido no sistema, fica a lista de tres cartoes parados que
   esta aqui em baixo — e le-se na mesma. Mesmo principio do anim.js.
   ============================================================ */

/* Duas colunas: o titulo a esquerda, a pilha a direita. E o mesmo desenho
   do ".escola-inner" e do ".contacto-inner".

   📌 Porque nao um cartao a ocupar a largura toda: dava linhas de 1100px,
   longas demais para os olhos voltarem ao inicio da linha seguinte. */
.testemunhos-inner {
  display: grid;
  grid-template-columns: 1fr 1.15fr;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: start;
}

/* ---- O estado base: tres cartoes parados, um debaixo do outro ----
   E o que fica sem JavaScript. Tambem e a base por cima da qual a pilha
   se monta, por isso o cartao em si desenha-se aqui uma vez so. */

.testemunhos {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 1.1rem;
}

.testemunhos > li {
  background: var(--betao);
  border: 1px solid var(--linha);
  /* O filete ambar fica, do desenho anterior. Ambar como campo, nunca
     como cor de letra — e a regra do topo deste ficheiro. */
  border-left: 3px solid var(--ambar);
  border-radius: 10px;
  padding: 1.45rem 1.5rem;
  box-shadow: var(--sombra);
}

.testemunhos blockquote {
  margin: 0;
  font-size: 1.02rem;
  line-height: 1.7;
}

/* Mesmo tratamento do .equipa-funcao: e a mesma ideia de legenda por
   baixo de um bloco, e tem de ser o mesmo gesto. */
.testemunho-quem {
  margin: 0.85rem 0 0;
  font-size: 0.8rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--grafite);
}

/* ---- A pilha ---- */

/* ⚠️ A folga lateral nao e enfeite: os cartoes de tras rodam e desviam-se
   para fora, e sem ela transbordavam a largura da pagina — que no
   telemovel da scroll horizontal. */
.testemunhos-pilha { padding: 0.5rem 1.5rem 0.75rem; }

.js-anim .testemunhos-pilha { cursor: pointer; }

/* 📌 O TRUQUE QUE EVITA NUMEROS MAGICOS: os tres cartoes ocupam a MESMA
   celula da grelha. A altura da pilha passa a ser sozinha a do cartao
   mais alto, em qualquer largura de ecra, sem ninguem a adivinhar. */
.js-anim .testemunhos > li {
  grid-area: 1 / 1;
  transition: transform var(--dur-lento) var(--ease);
}

/* 🛑 OS CARTOES SAO OPACOS, E TEM DE CONTINUAR A SER. Ja se tentou
   esbate-los com "opacity" no <li> inteiro e o resultado foi mau: durante
   a troca via-se o texto de um ATRAVES do outro, e ficavam duas citacoes
   sobrepostas e ilegiveis. Um cartao a serio nao e transparente.

   O que desvanece e o CONTEUDO dos que estao atras, nao o cartao. Assim o
   da frente tapa sempre o que vem por baixo, e dos outros so se ve a
   aba — que e exatamente o que faz isto parecer uma pilha.

   ⚠️ Usa-se "opacity: 0" e NAO "visibility: hidden" nem "display: none":
   com opacity o texto continua no HTML e continua a ser lido pelos
   leitores de ecra e pelo Google. Esconde-se aos olhos, nao a todos. */
.js-anim .testemunhos > li > * {
  transition: opacity var(--dur) var(--ease);
}
.js-anim .testemunhos > li.atras-1 > *,
.js-anim .testemunhos > li.atras-2 > * { opacity: 0; }

/* ⚠️ A sombra muda de degrau mas NAO entra na transicao: so se animam
   "transform" e "opacity". A troca da sombra acontece no instante em que
   as classes mudam, com o cartao ja em movimento — nao se ve. */
.js-anim .testemunhos > li.na-frente {
  transform: none;
  z-index: 3;
  box-shadow: var(--sombra-alta);
}
.js-anim .testemunhos > li.atras-1 {
  transform: rotate(2deg) translate(10px, 6px) scale(0.97);
  z-index: 2;
}
.js-anim .testemunhos > li.atras-2 {
  transform: rotate(-3deg) translate(-10px, 12px) scale(0.94);
  z-index: 1;
}

/* Em ecra largo o leque abre mais: ha espaco, e com a aba de 8px que os
   valores de cima davam muita gente nao percebia que havia mais cartoes
   por baixo. No telemovel fica o leque contido — la a folga lateral e
   curta e abrir mais dava scroll horizontal. */
@media (min-width: 62rem) {
  .js-anim .testemunhos > li.atras-1 {
    transform: rotate(2.5deg) translate(16px, 9px) scale(0.975);
  }
  .js-anim .testemunhos > li.atras-2 {
    transform: rotate(-3.5deg) translate(-16px, 18px) scale(0.95);
  }
}

/* A linha que diz de onde vem isto, na coluna do titulo. */
.testemunhos-fonte {
  margin: clamp(1.4rem, 3vw, 2rem) 0 0;
  font-size: 0.92rem;
  color: var(--grafite);
}

.testemunhos-fonte a {
  color: var(--asfalto);
  font-weight: 600;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  transition: opacity var(--dur-rapido) var(--ease);
}
.testemunhos-fonte a:hover { opacity: 0.7; }
.testemunhos-fonte a:active { opacity: 0.55; }

/* ---- As bolinhas ----
   O alvo tem 44px como manda a regra do toque; a bolinha desenhada e
   pequena e vive dentro dele. */

.testemunhos-pontos {
  display: flex;
  gap: 0.15rem;
  margin: 0.6rem 0 0;
}

.testemunhos-pontos button {
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.testemunhos-pontos button::before {
  content: '';
  width: 11px;
  height: 11px;
  border-radius: 50%;
  border: 2px solid var(--grafite);
  transition: transform var(--dur) var(--ease);
}

/* ⚠️ A BOLINHA ATIVA LEVA AMBAR COM ARO ESCURO POR FORA, e o aro nao e
   enfeite: o ambar sozinho sobre branco da 1,7 de contraste e um
   indicador precisa de 3,0. E o ARO que carrega a informacao; o ambar
   carrega a marca. Tirar o aro parte a acessibilidade da seccao. */
.testemunhos-pontos button[aria-current="true"]::before {
  background: var(--ambar);
  border-color: var(--asfalto);
  transform: scale(1.25);
}

.testemunhos-pontos button:hover::before { transform: scale(1.25); }
.testemunhos-pontos button:active::before { transform: scale(1.05); }

/* ---------- Contacto ---------- */

/* 📌 DUAS COLUNAS desde 30 de setembro de 2026, a pedido do Pedro: a
   esquerda todo o texto (morada, botoes, email, redes, horario), a
   direita so o mapa. "stretch" e o que estica a coluna do mapa ate a
   altura da do texto. Abaixo dos 960px passa a uma coluna so (regra em
   "Ecras medios"). */
.contacto-inner {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: stretch;
}

.section-escura .btn {
  background: var(--ambar);
  border-color: var(--ambar);
  color: var(--asfalto);
}
.section-escura .btn:hover { background: var(--ambar-premido); border-color: var(--ambar-premido); }

.section-escura .btn-linha {
  background: transparent;
  border-color: #4a4f56;
  color: var(--betao);
}
.section-escura .btn-linha:hover { background: #24272b; border-color: var(--betao); }

.contacto-accoes { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 1.3rem; }

.contacto-email a { color: var(--betao); }

/* ---------- Redes sociais ----------
   Pastilhas com o logotipo da rede e o nome escrito. O nome fica visivel
   de proposito: um icone sozinho obriga a pessoa a adivinhar, e nem toda
   a gente reconhece um simbolo pequeno.
   ⚠️ O ambar nao entra aqui como cor de letra — entra so como filete no
   hover, que e decoracao e nao informacao. */

.redes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem;
  margin: 1.4rem 0 0;
}

.rede {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  /* 0.75rem em cima e em baixo poe a pastilha nos 44px de altura, que e
     a medida confortavel para o dedo no telemovel. */
  padding: 0.75rem 1.1rem 0.75rem 0.9rem;
  /* O mesmo cinzento do contorno do botao "Abrir no Google Maps", logo
     aqui ao lado — os dois sao contornos sobre fundo escuro e nao ha
     razao para falarem linguas diferentes. */
  border: 1px solid #4a4f56;
  border-radius: 999px;
  color: var(--betao);
  text-decoration: none;
  font-weight: 600;
  font-size: 0.94rem;
  line-height: 1;
  /* So transform, opacity e cores — nunca transition: all. */
  transition: transform var(--dur) var(--ease),
              background-color var(--dur) var(--ease),
              border-color var(--dur) var(--ease);
}

.rede-ic { width: 1.15rem; height: 1.15rem; flex: none; }

.rede:hover,
.rede:focus-visible {
  transform: translateY(-2px);
  background: #26292d;
  border-color: var(--ambar);
}
.rede:active { transform: translateY(0); transition-duration: var(--dur-rapido); }

/* ⚠️ Correcao de acessibilidade, nao gosto pessoal. O contorno de foco
   do site inteiro e "3px solid var(--asfalto)" — quase preto. Nesta
   seccao o fundo TAMBEM e asfalto, por isso quem navega por teclado
   perdia o contorno de vista exatamente aqui, onde estao o telefone, o
   email e agora as redes. Sobre fundo escuro o contorno passa a claro. */
.section-escura :focus-visible { outline-color: var(--betao); }

.contacto-horario { margin-top: 2rem; }

.horario { width: 100%; border-collapse: collapse; margin-top: 1.2rem; }
.horario th, .horario td { text-align: left; padding: 0.85rem 0; border-top: 1px solid #34383d; vertical-align: top; }
.horario th { font-weight: 600; color: var(--betao); padding-right: 1rem; }
.horario td { color: #9aa1a9; }

/* ---------- O mapa ----------
   Entrou a 28 de setembro de 2026, pedido pela escola. Por dentro e da
   Google e nao se pode mudar; o que e nosso e a caixa. Cantos de 10px,
   iguais aos dos cartoes, e o mesmo filete escuro das linhas do horario,
   para o mapa claro parecer pousado aqui de proposito e nao colado.

   Desde 30 de setembro tem a coluna da direita so para ele: a caixa a
   volta (.contacto-mapa) e esticada pela grelha ate a altura da coluna
   do texto, e o mapa enche-a. Nunca fica mais baixo do que 24rem. */
.contacto-mapa {
  display: flex;
  min-height: 24rem;
}
.mapa {
  display: block;
  flex: 1;
  width: 100%;
  border: 1px solid #34383d;
  border-radius: 10px;
  background: #2a2d31;
}
/* Numa coluna so, o mapa vem por baixo do horario com altura propria:
   ja nao ha coluna ao lado para lhe dar a altura. */
@media (max-width: 60rem) {
  .contacto-mapa { min-height: 20rem; }
}
@media (max-width: 48rem) {
  .contacto-mapa { min-height: 17.5rem; }
}

/* ---------- Página de erro (404.html) ----------
   Uma coluna estreita e centrada. Quem cai aqui enganou-se no endereço:
   o que precisa é de uma saída, não de uma página cheia. */

.erro-inner {
  max-width: 34rem;
  margin-inline: auto;
  text-align: center;
  /* Empurra o rodapé para baixo do ecrã em vez de o deixar a meio da
     página, que faz a página parecer truncada. */
  padding-block: clamp(1rem, 6vw, 4rem);
}

/* A chapa fica maior do que a do topo da página principal: aqui é o
   assunto, não um acompanhamento. */
.erro-chapa { margin: 1.1rem 0 1.8rem; font-size: clamp(3rem, 9vw, 5rem); }

.erro-titulo {
  font-family: 'Archivo', sans-serif;
  font-size: clamp(1.6rem, 4vw, 2.3rem);
  font-weight: 800;
  font-stretch: 82%;
  letter-spacing: -0.02em;
  margin: 0 0 0.7rem;
}

.erro-texto {
  color: var(--grafite);
  font-size: 1.06rem;
  margin: 0 0 1.8rem;
}

/* Os botões vêm de .hero-accoes, que é flex e alinha à esquerda. Aqui
   centram-se, para acompanharem o resto da coluna. */
.erro .hero-accoes { justify-content: center; }

.erro-atalhos {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 0.5rem 1.1rem;
  margin: 0;
  padding-top: 1.6rem;
  border-top: 1px solid var(--linha);
  font-size: 0.92rem;
  color: var(--grafite);
}

/* ---------- O index.html que reencaminha ----------
   Desde 27 de outubro de 2026 o site vive no escola.php, e o index.html
   só leva para lá. Isto só se vê se o reencaminhamento falhar: uma frase
   com o link, com o mesmo ar do resto do site. */

.reencaminhar {
  padding-block: clamp(2rem, 8vw, 5rem);
  text-align: center;
  color: var(--grafite);
}

/* ---------- Rodapé ---------- */

.site-footer {
  background: var(--betao);
  border-top: 1px solid var(--linha);
  padding: 2.5rem 0 6rem;
  font-size: 0.9rem;
  color: var(--grafite);
}

.footer-inner { display: flex; flex-direction: column; gap: 0.9rem; }

.footer-marca {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  font-family: 'Archivo', sans-serif;
  font-weight: 700;
  color: var(--asfalto);
  margin: 0;
}
.footer-marca .logo-mark { width: auto; height: 2.1rem; }

.footer-morada { margin: 0; }
.footer-id { margin: 0; }
.footer-legal { display: flex; flex-wrap: wrap; gap: 1.2rem; margin: 0; }
.footer-copy { margin: 0; font-size: 0.84rem; }

/* O fundo do rodapé: o © à esquerda e o crédito da Fylux à direita, com
   um filete por cima. Pedido do Pedro a 27 de outubro de 2026, a partir
   de um rodapé de referência. Quando não cabem lado a lado (telemóvel),
   o crédito desce para baixo do © sozinho, encostado à esquerda. */
.footer-base {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.4rem 1.5rem;
  margin-top: 0.6rem;
  padding-top: 1.1rem;
  border-top: 1px solid var(--linha);
}

.footer-credito { margin: 0; font-size: 0.84rem; }

/* O nome é o link: mais escuro e mais pesado do que a frase, sem
   sublinhado em repouso, que é como na referência. O sublinhado aparece
   ao passar o rato, para se perceber que se carrega.
   ⚠️ Sem margem à esquerda: o espaço entre "por" e o nome já vem do
   HTML, e no telemóvel, onde o nome desce para a linha de baixo, uma
   margem deixava-o 3px desalinhado do resto do rodapé (medido). */
.footer-credito a {
  display: inline-flex;
  align-items: center;
  gap: 0.3em;
  font-weight: 600;
  color: var(--asfalto);
  text-decoration: none;
  text-underline-offset: 0.2em;
}
.footer-credito a:hover { text-decoration: underline; }
.footer-credito a:active { opacity: 0.7; }

/* ⚠️ A seta leva também width="12" height="12" no HTML, e é de propósito:
   a 27 de outubro de 2026 o servidor ficou com um styles.css antigo, sem
   esta regra, e a seta sem tamanho esticou até à largura da página —
   1140px no ecrã de um computador. Com os atributos, se o CSS falhar ela
   fica com 12px. Quando o CSS está lá, esta regra ganha aos atributos. */
.footer-credito-ic { width: 0.85em; height: 0.85em; flex: none; }

/* ---------- Barra fixa no telemóvel ---------- */

.barra-movel { display: none; }

/* ---------- Passagem entre páginas ----------
   O site tem quatro páginas e, ao mudar de uma para a outra, dava um
   flash branco. Com isto o browser atravessa-as, e o CABEÇALHO FICA
   QUIETO: tem nome próprio, por isso o browser percebe que é o mesmo
   elemento dos dois lados e não o faz desaparecer e voltar.

   ⚠️ São três linhas e ZERO JavaScript. Onde não houver suporte
   (Firefox, por agora), fica o flash de antes — não parte nada, e é a
   mesma situação da barra de progresso do topo.

   Fica dentro do "no-preference" de propósito: quem pediu menos
   movimento no sistema não deve receber páginas a atravessarem-se. */

@media (prefers-reduced-motion: no-preference) {
  @view-transition { navigation: auto; }
}

.site-header { view-transition-name: cabecalho; }
.progresso { view-transition-name: progresso; }

/* ---------- O momento de abertura ----------
   A chapa gigante do topo assenta, uma vez, quando a página carrega:
   entra maior e pousa, como uma chapa a ser montada no carro.

   É o único sítio do site onde o movimento chama atenção a sério, e é
   de propósito — é a coisa que a marca toda tem em cima. Uma vez só;
   não se repete nem fica a pulsar. (O reflexo dos faróis, que se repete,
   é outra coisa e vive em "A matricula do topo".)

   Na página inicial a animação é do .matricula-palco e NÃO da
   .matricula: a inclinação com o rato precisa do transform da chapa
   livre. Ver o aviso "DUAS CAIXAS" em "A matricula do topo".

   Está atrás de ".js-anim", que só existe quando ninguém pediu menos
   movimento no sistema. */

.js-anim .matricula-palco,
.js-anim .erro-chapa {
  animation: chapa-assenta 0.85s var(--ease) both;
}
.js-anim .hero-chapa-legenda {
  animation: chapa-legenda 0.7s var(--ease) 0.3s both;
}

@keyframes chapa-assenta {
  from { opacity: 0; transform: scale(1.13) translateY(-12px); }
  to   { opacity: 1; transform: none; }
}
@keyframes chapa-legenda {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}

/* ---------- Revelação ao scroll ----------
   Só esconde depois de o anim.js pôr a classe no <html>. Sem
   JavaScript, ou com movimento reduzido pedido no sistema, o conteúdo
   aparece todo normalmente. Anima-se só transform e opacity. */

.js-anim [data-revelar] {
  opacity: 0;
  transform: translateY(var(--subida));
}

.js-anim [data-revelar].visivel {
  opacity: 1;
  transform: none;
  transition: opacity var(--dur-entrada) var(--ease),
              transform var(--dur-entrada) var(--ease);
}

/* As chapas entram de lado, como sinais que se passam ao conduzir.
   É o movimento com mais carácter do site, e por isso é o que vem de
   mais longe: uma vez e meia o que os outros sobem. */
.js-anim .chapas [data-revelar] { transform: translateX(calc(var(--subida) * -1.5)); }
.js-anim .chapas [data-revelar].visivel { transform: none; }

/* As secções escuras entram de baixo e mais devagar. O contraste de
   ritmo é o que faz a página parecer composta em vez de uniforme: uma
   secção que entra a outro tempo lê-se como um capítulo novo. */
.js-anim .section-escura [data-revelar] { transform: translateY(calc(var(--subida) * 1.35)); }
.js-anim .section-escura [data-revelar].visivel {
  transition-duration: calc(var(--dur-entrada) * 1.3);
}

/* Entram uma a seguir à outra, não todas ao mesmo tempo. Feito aqui e
   não em JavaScript: o site não usa estilos embutidos, e escrevê-los a
   partir do script seria contornar essa regra em vez de a cumprir. */
.js-anim .chapas > li:nth-child(2).visivel { transition-delay: 90ms; }
.js-anim .chapas > li:nth-child(3).visivel { transition-delay: 180ms; }
.js-anim .chapas > li:nth-child(4).visivel { transition-delay: 270ms; }
.js-anim .chapas > li:nth-child(5).visivel { transition-delay: 360ms; }
/* O topo entra por ordem: sobrancelha, titulo, texto, botoes, provas.
   E o "fade-up stagger" do brief, feito so com atrasos em CSS. */
.js-anim .hero-texto > [data-revelar]:nth-child(2).visivel { transition-delay: 110ms; }
.js-anim .hero-texto > [data-revelar]:nth-child(3).visivel { transition-delay: 220ms; }
.js-anim .hero-texto > [data-revelar]:nth-child(4).visivel { transition-delay: 320ms; }
.js-anim .hero-texto > [data-revelar]:nth-child(5).visivel { transition-delay: 420ms; }
.js-anim .hero-texto > [data-revelar]:nth-child(6).visivel { transition-delay: 520ms; }

.js-anim .equipa > li:nth-child(2).visivel { transition-delay: 90ms; }
.js-anim .equipa > li:nth-child(3).visivel { transition-delay: 180ms; }
.js-anim .equipa > li:nth-child(4).visivel { transition-delay: 270ms; }

/* O retrato entra um instante depois do cartão e cresce até ao tamanho
   certo. A cara é o assunto do cartão, e assim chega como tal em vez de
   aparecer com o resto. Só escala: não mexe no espaço que ocupa, por
   isso nada salta à volta. */
.js-anim .equipa > li .equipa-retrato { transform: scale(0.88); }
.js-anim .equipa > li.visivel .equipa-retrato {
  transform: none;
  transition: transform calc(var(--dur-entrada) * 1.15) var(--ease) 0.12s;
}

/* ---------- Ecrãs médios ---------- */

@media (max-width: 60rem) {
  .hero-inner,
  .escola-inner,
  .testemunhos-inner,
  .contacto-inner { grid-template-columns: 1fr; }

  .hero-chapa { align-items: flex-start; }
  .hero-chapa-legenda { text-align: left; }
}

/* ---------- A faixa apertada, entre o telemóvel e o ecrã largo ----------
   Dos 768px aos 1024px o cabeçalho leva tudo ao mesmo tempo: marca, quatro
   links, as duas redes e o botão de ligar. Sem isto não cabia — e foi o que
   aconteceu quando as redes entraram: "Quanto custa" e "A escola" passaram a
   duas linhas cada um. Aperta-se o espaçamento e encolhem-se os ícones, que é
   o que se pode ceder sem partir nada. */

@media (min-width: 48.0625rem) and (max-width: 64rem) {
  .site-nav ul { gap: 1rem; }
  .nav-redes { gap: 0.3rem; }
  .rede-ic-btn { width: 2.1rem; height: 2.1rem; }
  /* A linha "Escola de Condução · Faro" por baixo da marca é a primeira a
     sair: está escrita por extenso no rodapé e nos contactos. */
  .logo-texto small { display: none; }
}

/* 🛑 DOS 769px AOS 960px, O NUMERO NAO CABE AO LADO DO NOME DA ESCOLA.

   Medido a 27 de setembro de 2026, quando o botao do telefone voltou ao
   cabecalho com "289 821 921" escrito. O menu inteiro pede 685px; aos
   769px, com a barra de scroll do Windows, sobram ~545px ao lado da marca
   com o nome. Sem isto o menu passava por cima do "Escola HL" e saia 2px
   do ecra — nada partia em duas linhas, por isso nao se via a medir so
   isso. Foi apanhado a comparar as caixas.

   Nesta faixa (que e sobretudo tablets ao alto) cede-se, por esta ordem:
   o espacamento entre links, um pouco de letra do menu, e o NOME escrito
   ao lado do simbolo. O simbolo HL fica, e o nome continua la para os
   leitores de ecra — escondido pelo mesmo metodo do .sr-only, e nunca
   com display:none, senao o link da marca ficava sem nome nenhum (a
   imagem tem alt vazio de proposito).

   ⚠️ Se entrar mais alguma coisa no cabecalho, medir outra vez aos 769px:
   a folga ai e de poucos pixeis. */
@media (min-width: 48.0625rem) and (max-width: 60rem) {
  .site-nav ul { gap: 0.6rem; }
  .site-nav a:not(.btn) { font-size: 0.875rem; }
  .btn-ligar { padding-inline: 0.7rem; }
  .logo-texto {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
  }
}

/* 🛑 E FICA ESCONDIDA MAIS UM BOCADO, ATÉ AOS 1088px.

   A razão é de 18 de setembro de 2026, quando os links do menu ganharam
   contorno. Aos 1025px passavam a acontecer duas coisas na mesma largura:
   os contornos entravam (pedem ~118px) e esta linha voltava (pede ~87px).
   A folga entre a marca e o menu caía de 135px para DEZASSEIS — cabia,
   mas qualquer palavra nova no menu partia o cabeçalho outra vez.

   Com esta regra são ~100px nessa faixa. A linha volta aos 1088px, onde
   já há espaço para as duas coisas. */
@media (min-width: 64.0625rem) and (max-width: 68rem) {
  .logo-texto small { display: none; }
}

/* ---------- Telemóvel ---------- */

@media (max-width: 48rem) {
  html { scroll-padding-top: 4.75rem; }

  .header-inner { min-height: 4rem; }
  .logo-texto small { display: none; }

  .menu-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.6rem;
    height: 2.6rem;
    padding: 0;
    background: transparent;
    border: 2px solid var(--linha);
    border-radius: 5px;
    cursor: pointer;
    transition: border-color var(--dur-rapido) var(--ease);
  }
  .menu-toggle:hover { border-color: var(--asfalto); }

  .menu-barras,
  .menu-barras::before,
  .menu-barras::after {
    content: '';
    display: block;
    width: 1.1rem;
    height: 2px;
    background: var(--asfalto);
    border-radius: 2px;
    transition: transform var(--dur) var(--ease), opacity var(--dur) var(--ease);
  }
  .menu-barras { position: relative; }
  .menu-barras::before { position: absolute; top: -6px; }
  .menu-barras::after { position: absolute; top: 6px; }

  .menu-toggle[aria-expanded="true"] .menu-barras { background: transparent; }
  .menu-toggle[aria-expanded="true"] .menu-barras::before { transform: translateY(6px) rotate(45deg); }
  .menu-toggle[aria-expanded="true"] .menu-barras::after { transform: translateY(-6px) rotate(-45deg); }

  .site-nav {
    position: absolute;
    left: 0;
    right: 0;
    top: 100%;
    background: var(--branco);
    border-bottom: 1px solid var(--linha);
    box-shadow: var(--sombra);
    display: none;
  }
  .site-nav.aberto { display: block; }

  .site-nav ul {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 0.5rem 1.25rem 1.25rem;
  }
  .site-nav li { border-top: 1px solid var(--linha); }
  .site-nav li:first-child { border-top: 0; }
  .site-nav a { display: block; padding: 0.9rem 0; font-size: 1rem; }
  .site-nav .btn { margin-top: 0.9rem; padding: 0.75rem 1rem; }

  /* No menu aberto, as redes ficam numa linha so, lado a lado, em vez de
     duas filas de icone sozinho a ocupar a largura toda.
     Os 2.75rem sao os 44px de alvo para o dedo — no telemovel o menu e
     mesmo para tocar, e aqui ha espaco de sobra para os dar. */
  /* ---------- O menu da pagina de erro ----------
     A 404.html nao tem botao de menu — nao faz sentido esconder duas
     ligacoes atras de um hamburguer. Aqui o menu fica sempre a vista,
     numa linha.
     ⚠️ O seletor leva as DUAS classes (".site-nav.erro-nav") de
     proposito: as regras do menu normal, aqui em baixo, tem a mesma
     forca e ganhavam pela ordem. Com duas classes ganham estas,
     esteja isto onde estiver no ficheiro. */
  .site-nav.erro-nav {
    position: static;
    display: block;
    background: none;
    border: 0;
    box-shadow: none;
  }
  .site-nav.erro-nav ul { flex-direction: row; align-items: center; gap: 1.1rem; padding: 0; }
  .site-nav.erro-nav li { border-top: 0; }
  .site-nav.erro-nav a { display: inline-block; padding: 0; font-size: 0.92rem; }
  .site-nav.erro-nav .btn { margin-top: 0; padding: 0.6rem 1.1rem; }

  .nav-redes { padding: 0.85rem 0; gap: 0.55rem; }
  .rede-ic-btn { width: 2.75rem; height: 2.75rem; }
  .site-nav .rede-ic-btn { display: inline-flex; padding: 0; }

  .hero-provas { grid-template-columns: 1fr; gap: 0.5rem; }

  .barra-movel {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 90;
    display: flex;
    gap: 0.6rem;
    padding: 0.7rem 1rem calc(0.7rem + env(safe-area-inset-bottom));
    background: #ecedef;
    background: color-mix(in srgb, var(--betao) 94%, transparent);
    backdrop-filter: blur(10px);
    border-top: 1px solid var(--linha);
  }
  .barra-movel .btn { flex: 1; padding: 0.75rem 0.6rem; }
  .barra-movel .btn-linha { background: var(--branco); }

  /* O botao do convite ocupa a largura toda no telemovel: e a accao
     principal da seccao, e assim fica facil de acertar com o dedo. */
  .convite-accoes .btn { width: 100%; }
}

/* ---------- Quem pediu menos movimento ---------- */

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    /* ⚠️ Sem isto, uma animacao "infinite" com 0.01ms de duracao passa a
       repetir-se milhares de vezes por segundo — pior do que a animacao
       original. Aplica-se as marcas de estrada. */
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  /* ⚠️ AS MARCAS DE ESTRADA JA NAO DESAPARECEM AQUI, e foi de proposito.
     Enquanto eram duas riscas invisiveis nao fazia diferenca; hoje sao um
     elemento de desenho do topo, e quem pediu menos movimento no sistema
     nao tem de ficar com a pagina inicial vazia. Ficam PARADAS: as regras
     aqui em cima ja lhes cortam a animacao. */
  .progresso { display: none; }
}
