/* Layout: header, navegação, footer - Elevate Solutions */

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--white);
  border-bottom: 1px solid transparent;
  box-shadow: none;
  transition: box-shadow var(--duration-base) var(--ease-out),
              border-color var(--duration-base) var(--ease-out);
}
.site-header.is-scrolled {
  border-bottom-color: var(--neutral-200);
  box-shadow: var(--shadow-sm);
}

.site-header .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 76px;
}

.logo {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  text-decoration: none;
}
/* Logo passou de ícone+texto (spans .logo-word/.part-1/.part-2) para uma
   única imagem (lockup.png, do projeto de marca sua-empresa-os) - pedido do
   utilizador para usar o ativo de marca real em vez de recriar o texto em
   HTML. Só altura fixa: width:auto preserva a proporção real do PNG
   (672x156), em vez de arriscar distorcer esticando para um tamanho quadrado
   como o ícone antigo. */
/* Ajuste ótico vertical (pedido do utilizador: alinhar o logo com o texto
   do menu/botão) - o PNG (672x156) não tem o "peso" centrado no canvas: o
   ícone+"Elevate" ocupa y 0-104 (o resto, y 105-155, é o "Solutions" mais
   pequeno + espaço vazio antes de acabar). A centragem por flexbox do
   .site-header centra a CAIXA inteira da imagem, não este conteúdo visual -
   isso deixava "Elevate" a ler-se acima do centro do menu. Desloca a imagem
   ~5.5px para baixo (calculado a partir da posição real do conteúdo no
   PNG) para o centro de "Elevate" coincidir com o centro vertical do
   cabeçalho, tal como o menu/botão. */
.logo-mark { height: 34px; width: auto; transform: translateY(5.5px); }
/* Pedido do utilizador: logo (e o resto do texto do site) sentia-se grande
   demais em mobile de um modo geral. 28px em vez de 34px - o deslocamento
   vertical escala na mesma proporção (5.5 × 28/34), para o ajuste ótico do
   comentário acima continuar válido a este tamanho menor. */
@media (max-width: 699px) {
  .logo-mark { height: 28px; transform: translateY(4.5px); }
}

.main-nav {
  display: flex;
  align-items: center;
  gap: var(--space-7);
}

.nav-links {
  display: none;
  align-items: center;
  list-style: none;
  gap: var(--space-6);
  padding: 0;
}
/* display:flex + align-items:center no próprio link (não só na lista) - o
   padding-block + border-bottom de 2px (reservado sempre, mesmo transparente,
   para não saltar o layout ao passar o rato) tornam a caixa do <a> mais alta
   do que o texto sozinho, e essa caixa não estava a centrar-se dentro do
   <li>/.nav-links, deixando o texto visivelmente acima do centro do
   cabeçalho. */
.nav-links a {
  display: flex;
  align-items: center;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--fs-200);
  color: var(--text);
  text-decoration: none;
  padding: var(--space-2) 0;
  border-bottom: 2px solid transparent;
}
.nav-links a:hover,
.nav-links a[aria-current="page"] {
  color: var(--navy-800);
  border-bottom-color: var(--sky-500);
}

.header-actions { display: flex; align-items: center; gap: var(--space-4); }
.header-actions .btn-primary { display: none; }

.nav-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px; height: 44px;
  background: none;
  border: 1.5px solid var(--neutral-200);
  border-radius: var(--radius-sm);
}
.nav-toggle svg { width: var(--icon-md); height: var(--icon-md); color: var(--navy-800); }
.nav-toggle .icon-close { display: none; }
.nav-toggle[aria-expanded="true"] .icon-open { display: none; }
.nav-toggle[aria-expanded="true"] .icon-close { display: block; }

.mobile-nav {
  display: none;
  position: fixed;
  inset: 76px 0 0 0;
  background: var(--white);
  z-index: 99;
  padding: var(--space-6) var(--space-5);
  overflow-y: auto;
}
.mobile-nav.is-open { display: block; }
.mobile-nav ul { list-style: none; padding: 0; display: flex; flex-direction: column; gap: var(--space-2); }
/* :where(:not(.btn)) - o CTA "Pedir orçamento" também vive dentro de
   .mobile-nav e é um <a>, por isso caía nesta regra: como ".mobile-nav a"
   (classe+tipo) tem mais especificidade que ".btn"/".btn-primary" (só
   classe), estas propriedades ganhavam às do botão - display:block anulava
   o inline-flex/justify-content do .btn-block (texto ficava à esquerda em
   vez de centrado) e font-size:24px + padding:16px 0 tornavam-no enorme e
   sem padding horizontal, em vez do botão normal.
   :where(...) e não só :not(.btn) - :where() tem especificidade zero, por
   isso esta regra mantém a mesma especificidade (classe+tipo) que tinha
   antes de excluir o .btn. Com :not(.btn) simples, a especificidade subia
   para (classe+classe+tipo), empatando com ".mobile-nav a[aria-current]"
   (que é a mesma soma) - o empate passava a resolver-se pela ORDEM no
   ficheiro, e como a regra da cor branca de base vem depois no cascade
   (theme-dark.css carrega depois de layout.css), ela ganhava ao link da
   página atual, apagando o azul do "Início" ativo. */
.mobile-nav a:where(:not(.btn)) {
  display: block;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--fs-500);
  color: var(--navy-800);
  text-decoration: none;
  padding: var(--space-4) 0;
  border-bottom: 1px solid var(--neutral-200);
}
/* Página atual (pedido do utilizador) - o menu desktop já tinha este
   tratamento em [aria-current="page"] (theme-dark.css), mas o mobile-nav
   nunca teve o equivalente: não havia forma de saber, dentro do menu aberto,
   em que página se estava. */
.mobile-nav a[aria-current="page"] {
  color: var(--sky-500);
  border-bottom-color: var(--sky-500);
}
.mobile-nav .btn { margin-top: var(--space-6); }

/* Menu centrado (pedido do utilizador): antes, .container só tinha 2 "slots"
   (logo | main-nav), por isso o grupo nav-links+botão ficava sempre
   encostado à direita, colado ao botão, com um vazio grande entre o logo e
   o "Início". Passa a grid de 3 colunas (logo | nav-links | ações) só aqui,
   a partir do breakpoint em que os links ficam visíveis - .main-nav vira
   display:contents (não pinta caixa própria, só agrupa semanticamente para
   o <nav aria-label>) para .nav-links e .header-actions poderem ser itens
   diretos da grid do .container. Abaixo de 980px o layout fica tal e qual
   estava (flex simples), sem qualquer risco para o mobile-nav. */
@media (min-width: 980px) {
  .nav-links { display: flex; }
  .header-actions .btn-primary { display: inline-flex; }
  .nav-toggle { display: none; }
  .mobile-nav { display: none !important; }

  .site-header .container {
    display: grid;
    grid-template-columns: auto 1fr auto;
  }
  .main-nav { display: contents; }
  .nav-links { justify-self: center; }
}

/* Footer */
.site-footer {
  background: var(--navy-900);
  color: var(--text-on-dark-muted);
  padding-block: var(--space-9) var(--space-6);
}
/* Mesmo critério já aplicado às secções genéricas (components.css) - o
   rodapé nunca tinha essa redução (é <footer>, não <section>, por isso
   ficava de fora daquela regra). Somado ao padding-bottom da secção
   anterior, os 96px do topo do rodapé (sem redução) deixavam um vazio de
   quase 160px antes do conteúdo do rodapé começar em mobile. */
@media (max-width: 899px) {
  .site-footer { padding-block: var(--space-8) var(--space-6); }
}
.footer-grid {
  display: grid;
  gap: var(--space-7);
  padding-bottom: var(--space-7);
  border-bottom: 1px solid rgba(245, 247, 250, 0.12);
}
@media (min-width: 700px) {
  .footer-grid { grid-template-columns: 1.4fr 1fr 1fr; }
}
.footer-brand p { color: var(--text-on-dark-muted); margin-top: var(--space-4); max-width: 32ch; }

.footer-col h3 {
  font-family: var(--font-display);
  color: var(--white);
  font-size: var(--fs-200);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-bottom: var(--space-4);
}
.footer-col ul { list-style: none; padding: 0; display: flex; flex-direction: column; gap: var(--space-3); }
.footer-col a { color: var(--text-on-dark-muted); text-decoration: none; font-size: var(--fs-200); }
.footer-col a:hover { color: var(--sky-500); }
/* Página atual no menu do rodapé (pedido do utilizador) - mesmo tratamento
   já usado no menu do cabeçalho e no mobile-nav; o HTML já tinha
   aria-current="page" em todas as páginas, só faltava o estilo. */
.footer-col a[aria-current="page"] { color: var(--sky-500); font-weight: 600; }

.footer-bottom {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  justify-content: space-between;
  align-items: center;
  padding-top: var(--space-6);
  font-size: var(--fs-100);
}

/* Links legais (Política de Privacidade/Termos/Cookies + "Gerir cookies") -
   o botão usa a mesma aparência dos links vizinhos (reset do <button> nativo)
   para não se destacar como um controlo diferente; a função é que muda
   (reabre o painel de consentimento em vez de navegar), não a apresentação. */
.footer-legal-links {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-5);
}
.footer-legal-links a,
.footer-legal-links button {
  color: var(--text-on-dark-muted);
  text-decoration: none;
  font-size: var(--fs-100);
  font-family: var(--font-body);
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
}
.footer-legal-links a:hover,
.footer-legal-links button:hover { color: var(--sky-500); }
.footer-social { display: flex; gap: var(--space-4); }
.footer-social a { color: var(--text-on-dark-muted); }
.footer-social a:hover { color: var(--sky-500); }
.footer-social svg { width: var(--icon-md); height: var(--icon-md); }
