
/* ---- _fonts.css ---- */
/* Fontes alojadas localmente, sem pedidos a terceiros.
   Cormorant Garamond nos titulos; Futura PT no corpo e na interface.
   Os caminhos contam a partir de css/site.php, porque o CSS e servido dali. */
@font-face { font-family: 'Cormorant Garamond'; font-style: italic; font-weight: 400 600; font-display: swap; src: url('../fonts/site/cormorant-garamond-italic-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Cormorant Garamond'; font-style: italic; font-weight: 400 600; font-display: swap; src: url('../fonts/site/cormorant-garamond-italic-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Cormorant Garamond'; font-style: normal; font-weight: 400 600; font-display: swap; src: url('../fonts/site/cormorant-garamond-normal-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Cormorant Garamond'; font-style: normal; font-weight: 400 600; font-display: swap; src: url('../fonts/site/cormorant-garamond-normal-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

@font-face {
  font-family: 'Futura PT';
  font-style: normal;
  font-weight: 300 400;
  font-display: swap;
  src: url('../fonts/FuturaPTBook.woff2') format('woff2');
}

@font-face {
  font-family: 'Futura PT';
  font-style: normal;
  font-weight: 500 900;
  font-display: swap;
  src: url('../fonts/FuturaPTMedium.woff2') format('woff2');
}

/* ---- base.css ---- */
/* ==========================================================================
   LANÇA ENCANTO — SITE PÚBLICO
   base.css: tokens de design, reset, tipografia, botões, formulários base
   Ordem de carga (css/site.php): _fonts, base, layout, components, pages
   ========================================================================== */

:root {
  /* paleta (madeira, bege, creme, castanho) */
  --bg: #F3E8D5;
  --bg-soft: #FAF6EE;
  --bg-card: #F6EEDF;
  --brown: rgb(89, 54, 33);
  --brown-dark: #422217;
  --brown-medium: #8C6045;
  --eyebrow: #7D5239;
  --sand: #C8B49E;
  --sand-light: #E5D8C7;
  --text: #33231B;
  --muted: #6F6258;
  --white: #FFFFFF;
  --danger: #9A2D1E;

  --border: rgba(89, 54, 33, .20);
  --border-soft: rgba(89, 54, 33, .12);

  /* medidas */
  --container: 1440px;
  --gutter: 48px;
  --home-pad: clamp(56px, 6vw, 96px);   /* espaço por cima e por baixo de cada secção da página inicial (igual em todas) */
  --space-xs: 8px;
  --space-sm: 16px;
  --space-md: 32px;
  --space-lg: 72px;
  --space-xl: 112px;
  --radius: 2px;
  --header-h: 76px;

  /* tipografia */
  --font-serif: "Cormorant Garamond", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
  --font-sans: "Futura PT", "Trebuchet MS", Arial, sans-serif;

  --shadow-soft: 0 1px 0 rgba(66, 34, 23, .05), 0 10px 28px -18px rgba(66, 34, 23, .35);
  --ease: cubic-bezier(.2, .6, .2, 1);
}

@media (max-width: 1024px) {
  :root { --gutter: 32px; --space-xl: 72px; --space-lg: 48px; }
}
@media (max-width: 768px) {
  :root { --gutter: 20px; --space-xl: 56px; --space-lg: 40px; --header-h: 68px; }
}

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
/* monitores acima de Full HD: o site inteiro escala (zoom) para não parecer pequeno.
   --z compensa as unidades de viewport, que o zoom não afeta. */
:root { --z: 1; }
@media (min-width: 1921px) { :root { --z: 1.12; --gutter: 72px; } html { zoom: 1.12; } }
@media (min-width: 2300px) { :root { --z: 1.25; --gutter: 96px; } html { zoom: 1.25; } }
@media (min-width: 3000px) { :root { --z: 1.5; --gutter: 120px; } html { zoom: 1.5; } }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(var(--header-h) + 16px); }
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--text);
  background: var(--bg-soft);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
body.no-scroll { overflow: hidden; }
img, svg, video { max-width: 100%; display: block; }
img { height: auto; }
ul, ol { margin: 0; padding: 0; list-style: none; }
h1, h2, h3, h4, p, figure, address, blockquote { margin: 0; }
address { font-style: normal; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 3px; }
[hidden] { display: none !important; }

/* ---------- tipografia ---------- */
h1, h2, h3, h4 {
  font-family: var(--font-serif);
  font-weight: 500;
  line-height: 1.08;
  letter-spacing: -.01em;
  color: var(--brown-dark);
}
h1 { font-size: clamp(2.5rem, 5.4vw, 4.75rem); }
h2 { font-size: clamp(2rem, 3.4vw, 3rem); }
h3 { font-size: clamp(1.35rem, 1.9vw, 1.65rem); line-height: 1.2; }
em { font-style: italic; }
p + p { margin-top: 1em; }
strong { font-weight: 600; }

.sr-only {
  position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------- acessibilidade ---------- */
:focus-visible { outline: 2px solid var(--brown-medium); outline-offset: 3px; }
.skip-link {
  position: fixed; left: 12px; top: -64px; z-index: 2000;
  padding: 12px 18px; background: var(--brown-dark); color: var(--bg-soft);
  border-radius: var(--radius); transition: top .2s var(--ease);
}
.skip-link:focus { top: 12px; }

/* ---------- estrutura ---------- */
.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding-left: var(--gutter);
  padding-right: var(--gutter);
}
.section { padding-block: var(--space-xl); }
.section--tint { background: var(--bg); }

/* ---------- eyebrow ---------- */
.eyebrow {
  display: flex; align-items: center; gap: 14px;
  font-size: .75rem; font-weight: 500; letter-spacing: .2em; text-transform: uppercase;
  color: var(--eyebrow);
  margin-bottom: 18px;
}
.eyebrow__line { display: block; width: 32px; height: 1px; background: currentColor; flex: none; }
.eyebrow--light { color: var(--sand-light); }

/* ---------- ícones ---------- */
.icon { width: 1.25em; height: 1.25em; flex: none; }

/* ---------- botões ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .85rem;
  padding: 1rem 1.5rem;
  border: 1px solid transparent; border-radius: var(--radius);
  font-size: .8125rem; font-weight: 500; letter-spacing: .03em; line-height: 1.2;
  text-decoration: none; text-align: center;
  transition: background-color .25s var(--ease), color .25s var(--ease), border-color .25s var(--ease), transform .25s var(--ease);
}
.btn .btn__icon { width: 1.15em; height: 1.15em; transition: transform .25s var(--ease); }
.btn:hover .btn__icon { transform: translateX(4px); }
.btn--sm { padding: .7rem 1.1rem; }
.btn--primary { background: var(--brown); color: var(--bg-soft); border-color: var(--brown); }
.btn--primary:hover { background: var(--brown-dark); border-color: var(--brown-dark); }
.btn--outline { background: transparent; color: var(--brown-dark); border-color: var(--brown); }
.btn--outline:hover { background: var(--brown); color: var(--bg-soft); }
.btn--primary-on-dark { background: var(--bg-soft); color: var(--brown-dark); border-color: var(--bg-soft); }
.btn--primary-on-dark:hover { background: var(--sand-light); border-color: var(--sand-light); }
.btn--outline-light { background: transparent; color: var(--bg-soft); border-color: rgba(250, 246, 238, .65); }
.btn--outline-light:hover { background: var(--bg-soft); color: var(--brown-dark); border-color: var(--bg-soft); }
.btn--light { background: var(--bg-soft); color: var(--brown-dark); border-color: var(--bg-soft); }
.btn--light:hover { background: var(--sand-light); border-color: var(--sand-light); }
.btn[disabled] { opacity: .6; cursor: progress; }

/* ligação de texto com seta */
.link-arrow {
  display: inline-flex; align-items: center; gap: .6rem;
  font-size: .8125rem; font-weight: 500; letter-spacing: .02em; color: var(--brown-dark);
  text-decoration: none;
  padding-bottom: 4px; border-bottom: 1px solid currentColor;
}
.link-arrow .icon { width: 1.1em; height: 1.1em; transition: transform .25s var(--ease); }
.link-arrow:hover .icon { transform: translateX(4px); }
.link-arrow--stretch::after { content: ""; position: absolute; inset: 0; }

/* ---------- animações de entrada (discretas) ----------
   A classe so e aplicada por main.js depois de o IntersectionObserver estar
   pronto. Se o JS falhar, o conteudo continua visivel. */
.reveal-ready [data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity .7s ease, transform .7s ease; }
.reveal-ready [data-reveal].visible { opacity: 1; transform: translateY(0); }
.reveal-ready [data-reveal]:nth-child(2) { transition-delay: .07s; }
.reveal-ready [data-reveal]:nth-child(3) { transition-delay: .14s; }
.reveal-ready [data-reveal]:nth-child(4) { transition-delay: .21s; }
.reveal-ready [data-reveal]:nth-child(5) { transition-delay: .28s; }
.reveal-ready [data-reveal]:nth-child(6) { transition-delay: .35s; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal-ready [data-reveal] { opacity: 1; transform: none; transition: none; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* ---------- marcadores "por validar" ---------- */
.tbc {
  display: inline-block; margin-top: .5rem;
  padding: .2rem .55rem;
  border: 1px dashed #B0561F; border-radius: var(--radius);
  background: rgba(255, 214, 102, .28); color: #5C3300;
  font-size: .75rem; line-height: 1.45; letter-spacing: .01em;
}
.tbc__tag { font-weight: 700; }

/* ---------- formulários (base) ---------- */
.field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.field label, .field__label { font-size: .8125rem; font-weight: 500; color: var(--brown-dark); }
.req { color: var(--brown-medium); }
input[type="text"], input[type="email"], input[type="tel"], select, textarea {
  width: 100%;
  min-height: 48px;
  padding: .75rem .9rem;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text);
  transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
}
textarea { min-height: 128px; resize: vertical; line-height: 1.5; }
input::placeholder, textarea::placeholder { color: #8d8076; opacity: 1; }
input:hover, select:hover, textarea:hover { border-color: var(--brown-medium); }
input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: none; border-color: var(--brown); box-shadow: 0 0 0 3px rgba(140, 96, 69, .25);
}
.field.has-error input, .field.has-error select, .field.has-error textarea { border-color: var(--danger); }
.field__error { font-size: .8125rem; color: var(--danger); }
.field__hint { font-size: .8125rem; color: var(--muted); }
.select-wrap { position: relative; }
.select-wrap select { appearance: none; -webkit-appearance: none; padding-right: 2.6rem; cursor: pointer; }
.select-wrap__icon { position: absolute; right: .9rem; top: 50%; width: 1.1em; height: 1.1em; margin-top: -.55em; pointer-events: none; color: var(--brown); }

/* ---- layout.css ---- */
/* ==========================================================================
   layout.css: cabeçalho, menu móvel, rodapé, aviso de cookies, popup, modais
   ========================================================================== */

/* ---------- cabeçalho ---------- */
.site-header {
  position: sticky; top: 0; z-index: 1000;
  background: var(--bg-soft);
  transition: box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.site-header__inner {
  display: flex; align-items: center; justify-content: space-between; gap: 28px;
  min-height: var(--header-h);
}
.brand { position: relative; display: block; flex: none; line-height: 0; }
.brand__logo { height: 56px; width: auto; will-change: opacity; }
.brand__logo--light { position: absolute; inset: 0 auto auto 0; opacity: 0; pointer-events: none; }

/* sobre o hero: transparente, texto creme */
body[data-header="overlay"] .site-header {
  --header-bg-opacity: 0;
  background: rgba(250, 246, 238, var(--header-bg-opacity));
  border-bottom-color: transparent;
}
body[data-header="overlay"] .site-header {
  --header-color-progress: 0%;
  --header-nav-color: color-mix(in srgb, var(--bg-soft) calc(100% - var(--header-color-progress)), var(--brown-dark) var(--header-color-progress));
  --header-lang-color: color-mix(in srgb, rgba(250, 246, 238, .72) calc(100% - var(--header-color-progress)), var(--muted) var(--header-color-progress));
  --header-active-color: color-mix(in srgb, var(--white) calc(100% - var(--header-color-progress)), var(--brown-dark) var(--header-color-progress));
  --header-divider-color: color-mix(in srgb, rgba(250, 246, 238, .35) calc(100% - var(--header-color-progress)), var(--border) var(--header-color-progress));
}
body[data-header="overlay"] main { margin-top: calc(var(--header-h) * -1); }
body[data-header="overlay"] .site-header:not(.is-open) .brand__logo--color { opacity: var(--header-bg-opacity); }
body[data-header="overlay"] .site-header:not(.is-open) .brand__logo--light { opacity: calc(1 - var(--header-bg-opacity)); }
.site-header.is-scrolled,
body[data-header="overlay"] .site-header.is-scrolled {
  background: var(--bg-soft);
  border-bottom-color: var(--border-soft);
  box-shadow: var(--shadow-soft);
}
.site-header.is-open,
body[data-header="overlay"] .site-header.is-open { background: var(--bg-soft); }

/* navegação principal */
.primary-nav { margin-left: auto; margin-right: clamp(12px, 1.6vw, 32px); }
.primary-nav ul { display: flex; align-items: center; gap: clamp(14px, 1.6vw, 28px); }
.primary-nav a {
  position: relative; display: block; padding: 8px 0;
  font-size: .8125rem; font-weight: 500; letter-spacing: .02em; text-decoration: none;
  color: var(--brown-dark);
}
.primary-nav a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 2px; height: 1px;
  background: currentColor; transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease);
}
.primary-nav a:hover::after, .primary-nav a[aria-current="page"]::after { transform: scaleX(1); }

.header-tools { display: flex; align-items: center; gap: 22px; flex: none; }
.lang-switch { display: flex; align-items: center; gap: 14px; }
.lang-switch a {
  font-size: .75rem; font-weight: 500; letter-spacing: .08em; text-decoration: none; color: var(--muted);
  padding: 6px 0; transition: color .2s;
}
.lang-switch a:hover { color: var(--brown-dark); }
.lang-switch a[aria-current="true"] { color: var(--brown-dark); font-weight: 600; }
.header-tools .lang-switch { padding-inline: 22px; border-left: 1px solid var(--border); border-right: 1px solid var(--border); }
.area-link {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: .8125rem; font-weight: 500; text-decoration: none; color: var(--brown-dark); white-space: nowrap;
}
.area-link .icon { width: 1.1em; height: 1.1em; }
.area-link:hover span { text-decoration: underline; text-underline-offset: 4px; }


body[data-header="overlay"] .site-header:not(.is-open) .primary-nav a,
body[data-header="overlay"] .site-header:not(.is-open) .area-link,
body[data-header="overlay"] .site-header:not(.is-open) .nav-toggle { color: var(--header-nav-color); }
body[data-header="overlay"] .site-header:not(.is-open) .lang-switch a { color: var(--header-lang-color); }
body[data-header="overlay"] .site-header:not(.is-open) .lang-switch a[aria-current="true"],
body[data-header="overlay"] .site-header:not(.is-open) .lang-switch a:hover { color: var(--header-active-color); }
body[data-header="overlay"] .site-header:not(.is-open) .header-tools .lang-switch { border-color: var(--header-divider-color); }

/* ecrãs largos: cabeçalho ligeiramente maior */
@media (min-width: 1025px) {
  :root { --header-h: 79px; }
  .brand__logo { height: 58px; }
  .primary-nav a, .area-link, .sub-toggle { font-size: .85rem; }
  .lang-switch a { font-size: .76rem; }
  .primary-nav ul { gap: clamp(14px, 1.7vw, 30px); }
  .header-tools { gap: 23px; }
  .header-tools .lang-switch { padding-inline: 23px; }
}

/* grupo "Para quem": abre ao passar o rato / foco / toque */
.has-sub { position: relative; }
.sub-toggle {
  display: inline-flex; align-items: center; gap: 7px; padding: 8px 0; background: none; border: 0; cursor: pointer;
  font: inherit; font-size: .8125rem; font-weight: 500; letter-spacing: .02em;
  color: var(--header-nav-color, var(--brown-dark));
}
.sub-toggle::after {
  content: ""; width: 6px; height: 6px; margin-top: -3px;
  border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg); transition: transform .25s var(--ease);
}
.has-sub:hover .sub-toggle::after, .has-sub.is-open .sub-toggle::after, .sub-toggle:focus-visible::after { transform: rotate(225deg) translate(-2px, -2px); }
.sub-toggle[data-current="true"] { text-decoration: underline; text-underline-offset: 7px; text-decoration-thickness: 1px; }
.primary-nav .subnav {
  position: absolute; top: calc(100% + 12px); left: 50%; z-index: 5; display: block; width: max-content; min-width: 236px; padding: 8px;
  background: var(--bg-soft); border: 1px solid var(--border-soft); border-radius: 4px;
  box-shadow: 0 22px 44px -14px rgba(48, 24, 15, .32), 0 2px 8px rgba(48, 24, 15, .08);
  opacity: 0; visibility: hidden; transform: translate(-50%, 8px);
  transition: opacity .22s var(--ease), transform .28s var(--ease), visibility .22s;
}
.primary-nav .subnav::before { /* seta */
  content: ""; position: absolute; top: -6px; left: 50%; width: 10px; height: 10px; margin-left: -5px;
  background: var(--bg-soft); border-left: 1px solid var(--border-soft); border-top: 1px solid var(--border-soft);
  transform: rotate(45deg);
}
.has-sub::after { content: ""; position: absolute; left: -16px; right: -16px; top: 100%; height: 20px; } /* ponte para o rato */
.has-sub:hover .subnav, .has-sub:focus-within .subnav, .has-sub.is-open .subnav { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
.primary-nav .subnav li { display: block; }
.primary-nav .subnav li + li { border-top: 1px solid var(--border-soft); }
.primary-nav .subnav a {
  display: flex; align-items: center; justify-content: space-between; gap: 28px;
  padding: 13px 16px; border-radius: 2px; color: var(--brown-dark) !important; white-space: nowrap; letter-spacing: .01em;
  transition: background-color .2s, color .2s;
}
.primary-nav .subnav a::after {
  position: static; width: auto; height: auto; background: none; transform: translateX(-6px); opacity: 0;
  content: "→"; font-size: 1rem; line-height: 1; transition: opacity .2s, transform .25s var(--ease);
}
.primary-nav .subnav a:hover, .primary-nav .subnav a:focus-visible { background: rgba(89, 54, 33, .07); }
.primary-nav .subnav a:hover::after, .primary-nav .subnav a:focus-visible::after, .primary-nav .subnav a[aria-current="page"]::after { opacity: 1; transform: none; }
.primary-nav .subnav a[aria-current="page"] { color: var(--brown-medium) !important; font-weight: 600; }

/* barra de progresso de leitura: linha no fundo do cabeçalho que enche com o scroll */
.reading-progress {
  background: var(--brown);
  transform-origin: 0;
  pointer-events: none;
  height: 2px;
  position: absolute;
  inset: auto 0 -1px;
  transform: scaleX(0);
  /* acompanha a transição da navbar: começa a ganhar cor aos 30% e fica total aos 100% */
  opacity: clamp(0, calc((var(--header-bg-opacity, 1) - .3) / .7), 1);
}

/* botão do menu (móvel) */
.nav-toggle {
  display: none; align-items: center; justify-content: center;
  width: 46px; height: 46px; margin-right: -15px;
  background: none; border: 0; color: var(--brown-dark);
}
.nav-toggle .icon { width: 28px; height: 28px; }
.nav-toggle__close { display: none; }
.site-header.is-open .nav-toggle__open { display: none; }
.site-header.is-open .nav-toggle__close { display: block; }

/* menu móvel */
.mobile-nav {
  position: fixed; left: 0; right: 0; top: var(--header-h); bottom: 0; z-index: 999;
  display: flex; flex-direction: column; justify-content: flex-start; gap: 28px;
  padding: 16px var(--gutter) calc(32px + env(safe-area-inset-bottom, 0px));
  background: var(--bg-soft); overflow-y: auto;
}
.mobile-nav ul:first-child, .mobile-nav nav ul { display: block; }
.mobile-nav nav a {
  display: block; padding: 16px 0;
  font-family: var(--font-serif); font-size: 1.75rem; line-height: 1.1; font-weight: 500;
  color: var(--brown-dark); text-decoration: none; border-bottom: 1px solid var(--border-soft);
}
.mobile-nav nav a[aria-current="page"] { color: var(--brown-medium); font-style: italic; }
.mobile-nav__foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: nowrap; }
/* idiomas lado a lado (a regra de cima, .mobile-nav ul:first-child, punha-os em coluna); Área Cliente encostada à direita */
.mobile-nav .mobile-nav__foot .lang-switch { display: flex; flex-direction: row; align-items: center; gap: 20px; }
.mobile-nav__foot .area-link { margin-left: auto; }
.mobile-nav .mobile-nav__foot .lang-switch a { font-size: 1.05rem; }

@media (max-width: 1279px) {
  .primary-nav, .header-tools { display: none; }
  .nav-toggle { display: inline-flex; }
}
@media (min-width: 1280px) { .mobile-nav { display: none !important; } }
@media (max-width: 768px) { .brand__logo { height: 48px; } }
/* alinhamento do cabeçalho com o conteúdo no menu móvel: a imagem do logótipo tem margem transparente à esquerda */
@media (max-width: 1279px) { .site-header .brand { margin-left: -11px; } }
@media (max-width: 768px) { .site-header .brand { margin-left: -9px; } }

/* ---------- rodapé ---------- */
.site-footer { background: var(--bg-soft); border-top: 1px solid var(--border); color: var(--text); }
.site-footer__top {
  /* 4 colunas do tamanho do seu conteúdo, espalhadas pela largura toda: contactos à esquerda, cofinanciamento à direita,
     links e idiomas distribuídos entre os dois (em vez de ficarem juntos à esquerda) */
  display: grid; grid-template-columns: repeat(4, auto); justify-content: space-between; gap: 40px 56px;
  padding-block: clamp(32px, 3.5vw, 44px) 16px;
}
.footer-title { font-size: .75rem; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; color: var(--brown-medium); margin-bottom: 14px; }
.footer-brand__logo { display: inline-block; line-height: 0; margin-bottom: 14px; }
.footer-brand__logo img { height: 76px; width: auto; }
.footer-signature .footer-brand__logo img { height: clamp(84px, 7.5vw, 108px); }
.footer-tagline { margin: 0; font-family: var(--font-serif); font-size: 1.2rem; line-height: 1.3; color: var(--brown-dark); }
/* logótipo + frase: por baixo das colunas e por cima da barra final, centrados */
.footer-signature { display: flex; flex-direction: column; align-items: center; gap: 0; padding-block: clamp(8px, 1.5vw, 20px) clamp(16px, 2vw, 28px); text-align: center; }
.footer-signature .footer-brand__logo { margin-bottom: 0; }

/* seta "voltar ao topo" (canto inferior direito; aparece depois de algum scroll) */
.to-top {
  position: fixed; right: max(20px, env(safe-area-inset-right, 0px)); bottom: max(20px, env(safe-area-inset-bottom, 0px)); z-index: 900;
  display: grid; place-items: center; width: 48px; height: 48px; padding: 0;
  background: var(--brown); color: var(--bg-soft); border: 0; border-radius: 50%; cursor: pointer;
  box-shadow: 0 10px 24px -10px rgba(48, 24, 15, .55);
  opacity: 0; transform: translateY(12px); pointer-events: none;
  transition: opacity .35s var(--ease), transform .35s var(--ease), background-color .25s;
}
.to-top[hidden] { display: none; }
.to-top.is-visible { opacity: 1; transform: none; pointer-events: auto; }
.to-top:hover, .to-top:focus-visible { background: var(--brown-dark); }
.to-top .icon { width: 22px; height: 22px; }
.footer-contact { display: grid; gap: 10px; font-size: .9375rem; }
.footer-contact a, .footer-contact__addr { display: flex; align-items: flex-start; gap: 12px; text-decoration: none; }
.footer-contact .icon { width: 1.15em; height: 1.15em; margin-top: .25em; color: var(--brown-medium); }
.footer-contact a:hover span { text-decoration: underline; text-underline-offset: 4px; }
.footer-nav ul { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 28px; }
.footer-nav a { display: inline-block; padding: 4px 0; font-size: .9375rem; text-decoration: none; }
.footer-nav a:hover { color: var(--brown); text-decoration: underline; text-underline-offset: 4px; }
.footer-tools .lang-switch { margin-bottom: 20px; }
.footer-funding { display: grid; gap: 14px; align-content: start; }
.footer-funding img { width: 100%; max-width: 300px; height: auto; }
.footer-funding a { display: block; opacity: .95; }
.footer-funding a:hover { opacity: 1; }

.site-footer__bottom {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 32px;
  padding-block: 22px; border-top: 1px solid var(--border-soft);
  font-size: .8125rem; color: var(--muted);
}
.legal-links { display: flex; flex-wrap: wrap; gap: 6px 22px; }
.legal-links a, .legal-links__btn {
  background: none; border: 0; padding: 0; font-size: .8125rem; color: var(--muted); text-decoration: none; cursor: pointer;
}
.legal-links a:hover, .legal-links__btn:hover { color: var(--brown-dark); text-decoration: underline; text-underline-offset: 4px; }
.credit a { color: var(--brown-dark); font-weight: 500; }

@media (max-width: 1180px) {
  .site-footer__top { grid-template-columns: 1fr 1fr; gap: 40px 48px; }
}
@media (max-width: 640px) {
  .site-footer__top { grid-template-columns: 1fr; gap: 36px; }
  .site-footer__bottom { flex-direction: column; align-items: flex-start; }
}

/* ---------- aviso de cookies ---------- */
.cookie-banner {
  position: fixed; left: 24px; bottom: 24px; z-index: 1100;
  width: min(520px, calc(100vw - 48px));
  padding: 22px 24px;
  background: var(--bg-soft); border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: 0 18px 50px -20px rgba(66, 34, 23, .5);
}
.cookie-banner h2 { font-size: 1.35rem; margin-bottom: 6px; }
.cookie-banner p { font-size: .875rem; color: var(--muted); line-height: 1.55; }
.cookie-banner a { color: var(--brown-dark); }
.cookie-banner__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }
@media (max-width: 560px) {
  .cookie-banner { left: 12px; right: 12px; bottom: 12px; width: auto; padding: 18px; }
  .cookie-banner__actions .btn { flex: 1 1 auto; }
}

/* ---------- popup do backoffice ---------- */
.site-popup { position: fixed; inset: 0; z-index: 1200; display: grid; place-items: center; padding: 20px; }
.site-popup__backdrop { position: absolute; inset: 0; background: rgba(66, 34, 23, .62); }
.site-popup__card {
  position: relative; width: min(var(--popup-w, 520px), 100%); max-height: calc(92vh / var(--z)); display: flex; flex-direction: column;
  background: var(--bg-soft); border-radius: var(--radius); box-shadow: 0 30px 80px -30px rgba(0, 0, 0, .6); overflow: hidden;
}
/* a largura (--popup-w) escolhe-se no gestor; o scroll fica dentro do cartão para o botão de fechar não sair do ecrã */
.site-popup__scroll { overflow-y: auto; overscroll-behavior: contain; }
.site-popup__close {
  position: absolute; top: 12px; right: 12px; z-index: 2; width: 40px; height: 40px;
  display: grid; place-items: center; border: 0; border-radius: 50%;
  background: rgba(66, 34, 23, .72); color: var(--bg-soft);
}
.site-popup__close:hover { background: var(--brown-dark); }
.site-popup__close .icon { width: 20px; height: 20px; }
.site-popup__media img { display: block; width: 100%; height: auto; }
/* "preencher": altura fixa (--popup-img-h), a imagem enche a largura e corta o que sobra (--popup-img-pos) */
.site-popup__media--fill img { height: var(--popup-img-h, 320px); object-fit: cover; object-position: center var(--popup-img-pos, center); }
.site-popup__body { padding: 28px 28px 24px; }
.site-popup__body h2 { font-size: 1.9rem; margin-bottom: 12px; }
.site-popup__body p { color: var(--text); }
.site-popup__logo { margin-top: 20px; height: 42px; width: auto; }

/* ---------- site em obras: aviso do gestor que tapa o site todo, sem botão de fechar ---------- */
.site-obras {
  min-height: 100vh; min-height: 100svh; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 28px; padding: 32px 20px; background: var(--brown-dark);
}
.site-obras__logo { width: 170px; height: auto; }
.site-obras .site-popup__card { max-height: none; }
.site-obras .site-popup__scroll { overflow: visible; }
/* só para quem tem sessão de admin: lembra que o site está fechado aos visitantes */
.obras-flag {
  position: fixed; left: 12px; bottom: 12px; z-index: 1100; max-width: min(420px, calc(100vw - 24px)); padding: 10px 14px;
  border-radius: 8px; background: var(--brown-dark); color: var(--bg-soft); font-size: .8125rem; line-height: 1.4;
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, .5);
}

/* ---------- vídeo em janela ---------- */
.modal { position: fixed; inset: 0; z-index: 1300; display: grid; place-items: center; padding: 20px; background: rgba(30, 14, 8, .92); }
.modal__frame { position: relative; width: min(1080px, 100%); aspect-ratio: 16 / 9; background: #000; }
.modal__frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.video-gate { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 24px; text-align: center; color: var(--bg-soft); }
.video-gate p { max-width: 42ch; font-size: .9375rem; }
.modal__close {
  position: absolute; top: 14px; right: 14px; width: 44px; height: 44px;
  display: grid; place-items: center; border: 0; border-radius: 50%;
  background: rgba(250, 246, 238, .14); color: var(--bg-soft);
}
.modal__close:hover { background: rgba(250, 246, 238, .28); }
.modal__close .icon { width: 22px; height: 22px; }

/* ---------- galeria ampliada (lightbox) ---------- */
.lightbox { position: fixed; inset: 0; z-index: 1300; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 56px 72px; background: rgba(30, 14, 8, .94); }
.lightbox__img { max-width: 100%; max-height: calc(100vh / var(--z) - 140px); width: auto; height: auto; object-fit: contain; }
.lightbox__caption { margin-top: 14px; color: var(--sand-light); font-size: .875rem; text-align: center; max-width: 70ch; }
.lightbox__count { position: absolute; top: 20px; left: 24px; color: var(--sand-light); font-size: .8125rem; letter-spacing: .08em; }
.lightbox__btn {
  position: absolute; display: grid; place-items: center; width: 48px; height: 48px;
  border: 0; border-radius: 50%; background: rgba(250, 246, 238, .14); color: var(--bg-soft);
}
.lightbox__btn:hover { background: rgba(250, 246, 238, .28); }
.lightbox__btn .icon { width: 24px; height: 24px; }
.lightbox__btn--close { top: 14px; right: 14px; }
.lightbox__btn--prev { left: 14px; top: 50%; margin-top: -24px; }
.lightbox__btn--next { right: 14px; top: 50%; margin-top: -24px; }
@media (max-width: 640px) {
  .lightbox { padding: 64px 12px 24px; }
  .lightbox__btn--prev, .lightbox__btn--next { top: auto; bottom: 14px; margin-top: 0; }
  .lightbox__btn--prev { left: 14px; }
  .lightbox__btn--next { right: 14px; }
}

/* tablet e telemóvel: a seta fica mais acima, para não tapar "Feito por…" no fim do rodapé */
@media (max-width: 1024px) {
  .to-top { bottom: max(88px, calc(88px + env(safe-area-inset-bottom, 0px))); }
}

/* menu do cliente com sessão iniciada (no lugar de "Área Cliente") */
.user-menu { position: relative; }
.user-menu__btn { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; font-size: .8125rem; font-weight: 500; color: inherit; }
.user-menu__btn span { max-width: 14ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.user-menu__chev { width: .9em; height: .9em; transition: transform .25s var(--ease); }
.user-menu__btn[aria-expanded="true"] .user-menu__chev { transform: rotate(180deg); }
.user-menu__list {
  position: absolute; right: 0; top: calc(100% + 14px); z-index: 20; min-width: 220px; padding: 8px;
  background: var(--bg-soft); border: 1px solid var(--border-soft); border-radius: var(--radius);
  box-shadow: 0 22px 44px -14px rgba(48, 24, 15, .32), 0 2px 8px rgba(48, 24, 15, .08);
}
.user-menu__list a { display: flex; align-items: center; gap: 10px; padding: 12px 14px; color: var(--brown-dark) !important; font-size: .875rem; font-weight: 500; text-decoration: none; white-space: nowrap; border-radius: 2px; transition: background-color .2s; }
.user-menu__list a:hover, .user-menu__list a:focus-visible { background: rgba(89, 54, 33, .07); }
.user-menu__list li + li { border-top: 1px solid var(--border-soft); }
.mobile-nav__account { display: flex; flex-direction: column; align-items: flex-end; gap: 12px; }
@media (max-width: 640px) { .mobile-nav__foot:has(.mobile-nav__account) { align-items: flex-start; } }

/* ---- components.css ---- */
/* ==========================================================================
   components.css: blocos reutilizáveis (cabeçalho de secção, cartões, processos,
   estatísticas, vídeo, mapa, formulário, faixa de chamada)
   ========================================================================== */

/* ---------- cabeçalho de secção ---------- */
.section-head {
  display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 24px 64px;
  align-items: end; margin-bottom: 64px;
}
.section-head h2 { max-width: 22ch; }
.section-head__title--line h2 { display: flex; align-items: center; gap: 22px; max-width: none; }
.section-head__title--line h2::before { content: ""; flex: none; width: 56px; height: 1px; background: var(--eyebrow); }
@media (max-width: 600px) { .section-head__title--line h2 { gap: 14px; } .section-head__title--line h2::before { width: 32px; } }
.section-head__aside { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; }
.section-head__aside p { color: var(--muted); max-width: 52ch; font-size: .9375rem; }
.section-head__aside .btn { flex: none; }
.section-head__aside:not(:has(p)) { justify-content: flex-end; } /* só botão: encostado à direita */
@media (max-width: 1024px) {
  .section-head { grid-template-columns: 1fr; align-items: start; margin-bottom: 32px; }
  .section-head h2 { max-width: none; }
  .section-head__aside { align-items: flex-start; flex-direction: column; }
}
/* só título + botão (serviços, projetos): em tablet o botão fica à direita do título, como no PC */
@media (min-width: 641px) and (max-width: 1024px) {
  .section-head:has(.section-head__title--line) { grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 24px; margin-bottom: 40px; }
  .section-head:has(.section-head__title--line) .section-head__aside { flex-direction: row; align-items: center; }
}

/* ---------- 3 percursos ---------- */
.audience { padding-block: var(--home-pad); background: var(--bg-soft); }
.audience__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }
.audience-card {
  position: relative; display: grid; grid-template-columns: minmax(0, 1fr) 40%;
  min-height: 330px; overflow: hidden;
  background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius);
  transition: border-color .3s var(--ease), box-shadow .3s var(--ease);
}
.audience-card:hover { border-color: var(--border); box-shadow: var(--shadow-soft); }
.audience-card__body { display: flex; flex-direction: column; align-items: flex-start; padding: 28px 12px 28px 28px; }
.audience-card__num { font-size: .8125rem; letter-spacing: .08em; color: var(--muted); margin-bottom: 20px; }
.audience-card__title { font-size: clamp(1.7rem, 2.2vw, 2.2rem); margin-bottom: 16px; }
.audience-card__body p { font-size: .875rem; color: var(--muted); line-height: 1.6; margin-bottom: auto; padding-bottom: 28px; }
.audience-card__media { position: relative; min-height: 100%; }
.audience-card__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.audience-card:hover .audience-card__media img { transform: scale(1.04); }
.audience-card__go {
  position: absolute; right: 14px; bottom: 14px; z-index: 1;
  display: grid; place-items: center; width: 42px; height: 42px;
  background: var(--white); color: var(--brown-dark); border-radius: 50%;
  box-shadow: 0 6px 18px -8px rgba(0, 0, 0, .5); transition: background-color .25s, color .25s;
}
.audience-card:hover .audience-card__go { background: var(--brown); color: var(--bg-soft); }
.audience-card__go .icon { width: 18px; height: 18px; }
/* ecrã largo: acordeão horizontal — o cartão com rato (ou foco) expande; por omissão o primeiro está aberto.
   O texto mantém sempre a mesma largura; o que cresce é a fotografia. */
@media (min-width: 1181px) {
  .audience__grid { grid-template-columns: 1.3fr 1fr 1fr; transition: grid-template-columns .7s var(--ease); }
  .audience-card { grid-template-columns: 220px minmax(0, 1fr); min-height: 280px; }
  /* desempenho: a fotografia tem sempre o mesmo tamanho (a do cartão aberto) e o cartão só a "revela" por recorte;
     assim o browser não volta a redimensionar/pintar a imagem em cada fotograma da animação */
  .audience-card__media { overflow: hidden; contain: layout paint; }
  .audience-card__media img { left: auto; right: 0; width: max(100%, 380px); max-width: none; will-change: transform; }
  .audience-card { contain: layout paint; }
  .audience__grid:has(.audience-card:nth-child(2):hover),
  .audience__grid:has(.audience-card:nth-child(2):focus-within) { grid-template-columns: 1fr 1.3fr 1fr; }
  .audience__grid:has(.audience-card:nth-child(3):hover),
  .audience__grid:has(.audience-card:nth-child(3):focus-within) { grid-template-columns: 1fr 1fr 1.3fr; }
  .audience__grid:has(.audience-card:nth-child(1):hover),
  .audience__grid:has(.audience-card:nth-child(1):focus-within) { grid-template-columns: 1.3fr 1fr 1fr; }
}
/* ecrã largo: o scroll escolhe o cartão (data-scroll no grid, ver main.js); com o rato por cima, o hover tem prioridade */
@media (min-width: 1181px) {
  .audience__grid[data-scroll="1"] { grid-template-columns: 1.3fr 1fr 1fr; }
  .audience__grid[data-scroll="2"] { grid-template-columns: 1fr 1.3fr 1fr; }
  .audience__grid[data-scroll="3"] { grid-template-columns: 1fr 1fr 1.3fr; }
}
.audience-card.is-active { border-color: var(--border); box-shadow: var(--shadow-soft); }
.audience-card.is-active .audience-card__media img { transform: scale(1.04); }
.audience-card.is-active .audience-card__go { background: var(--brown); color: var(--bg-soft); }
/* rato por cima dos cartões: só o cartão sob o rato aparece destacado */
.audience__grid.is-hovered .audience-card.is-active:not(:hover):not(:focus-within) { border-color: var(--border-soft); box-shadow: none; }
.audience__grid.is-hovered .audience-card.is-active:not(:hover):not(:focus-within) .audience-card__media img { transform: none; }
.audience__grid.is-hovered .audience-card.is-active:not(:hover):not(:focus-within) .audience-card__go { background: var(--white); color: var(--brown-dark); }
@media (prefers-reduced-motion: reduce) { .audience__grid, .audience-card, .audience-card__media { transition: none !important; } }
@media (max-width: 1180px) {
  .audience__grid { grid-template-columns: 1fr; }
  /* sem rato: ao fazer scroll, o cartão que está a meio do ecrã cresce (classe .is-active, ver main.js) */
  /* --p (0..1) vem do main.js e acompanha a distância do cartão ao meio do ecrã: o tamanho muda de forma contínua com o scroll */
  .audience-card { --p: 0; transition: border-color .3s var(--ease), box-shadow .3s var(--ease); }
  .audience-card.is-active { border-color: var(--border); box-shadow: var(--shadow-soft); }
  .audience-card.is-active .audience-card__media img { transform: scale(1.04); }
  .audience-card.is-active .audience-card__go { background: var(--brown); color: var(--bg-soft); }
  .audience-card { grid-template-columns: minmax(0, 1fr) calc(33% + 10% * var(--p)); min-height: calc(210px + 80px * var(--p)); }
  .audience-card__body { padding: 26px 16px 26px 28px; }
  .audience-card__body p { max-width: 60ch; }
}
@media (max-width: 600px) {
  .audience-card { grid-template-columns: 1fr; min-height: 0; }
  .audience-card { grid-template-columns: 1fr; min-height: 0; }
  .audience-card__media { order: -1; aspect-ratio: calc(2 - 0.5 * var(--p)); min-height: 0; } /* 2/1 -> 3/2 */
  .audience-card__body { padding: 22px 20px 24px; }
}

/* ---------- serviços ---------- */
.section--services { background: var(--bg-soft); padding-block: var(--home-pad); }
.service-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 26px; margin-top: 8px; }
.service-card {
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; align-items: center; text-align: center;
  padding: 48px 20px 40px; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius);
  text-decoration: none; transition: background-color .5s var(--ease), border-color .5s var(--ease), transform .6s var(--ease), box-shadow .6s var(--ease);
}
.service-card:hover, .service-card:focus-visible { background: var(--white); border-color: var(--border); transform: translateY(-6px); box-shadow: var(--shadow-soft); }
/* dois ícones sobrepostos: o claro por omissão; o preenchido "enche" por cima ao passar o rato */
.service-card__icon { position: relative; display: block; height: 104px; margin-bottom: 26px; }
.service-card__icon:has(.service-card__img--solid) { width: 140px; max-width: 100%; }
.service-card__img--light, .service-card__img--solid { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }
.service-card__img--light { opacity: 1; transition: transform .8s var(--ease); }
/* o preenchido aparece com uma máscara de bordo difuso que sobe devagar (sem corte seco) */
.service-card__img--solid {
  opacity: 0; transform: scale(1);
  -webkit-mask-image: linear-gradient(to top, #000 0%, #000 38%, transparent 62%);
          mask-image: linear-gradient(to top, #000 0%, #000 38%, transparent 62%);
  -webkit-mask-size: 100% 300%; mask-size: 100% 300%;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: 0 0; mask-position: 0 0;
  transition: opacity 1s cubic-bezier(.4, 0, .2, 1), -webkit-mask-position 1.4s cubic-bezier(.4, 0, .2, 1), mask-position 1.4s cubic-bezier(.4, 0, .2, 1), transform 1s cubic-bezier(.4, 0, .2, 1);
}
.service-card:hover .service-card__img--solid, .service-card:focus-visible .service-card__img--solid {
  opacity: 1; transform: scale(1.05);
  -webkit-mask-position: 0 100%; mask-position: 0 100%;
}
.service-card:hover .service-card__img--light, .service-card:focus-visible .service-card__img--light { transform: scale(1.05); }
.service-card__icon > img:not([class*="--"]) { height: 100%; width: auto; max-width: 140px; margin-inline: auto; object-fit: contain; opacity: .88; transition: opacity .3s, transform .45s var(--ease); }
.service-card:hover .service-card__icon > img:not([class*="--"]), .service-card:focus-visible .service-card__icon > img:not([class*="--"]) { opacity: 1; transform: scale(1.1); }
/* número (ordem do fluxo de produção) e seta (indica que o cartão é uma ligação) */
.service-card__num { position: absolute; top: 16px; left: 18px; font-size: .75rem; letter-spacing: .12em; color: var(--muted); opacity: .75; }
.service-card__go { position: absolute; top: 14px; right: 14px; display: grid; place-items: center; width: 30px; height: 30px; color: var(--brown); opacity: 0; transform: translate(-4px, 4px); transition: opacity .4s var(--ease), transform .5s var(--ease); }
.service-card__go .icon { width: 16px; height: 16px; }
.service-card:hover .service-card__go, .service-card:focus-visible .service-card__go, .service-card.is-lit .service-card__go { opacity: 1; transform: none; }
.service-card h3 {
  font-family: var(--font-sans); font-size: 1rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  color: var(--brown-dark); margin-bottom: 14px;
}
.service-card p { font-size: .9rem; line-height: 1.6; color: var(--muted); }
/* entrada 1 a 1: o main.js põe os cartões numa fila e liberta um de cada vez (.is-in), por ordem 1..6 */
@keyframes service-in { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: none; } }
.service-card.is-queued:not(.is-in), .project-card.is-queued:not(.is-in), .stat.is-queued:not(.is-in) { opacity: 0; }
.service-card.is-in, .project-card.is-in, .stat.is-in { animation: service-in .8s var(--ease) backwards; }
/* ecrãs sem rato: o ícone enche quando a fila de cartões está a meio do ecrã (.is-lit, ver main.js) */
.service-card.is-lit { background: var(--white); border-color: var(--border); }
.service-card.is-lit .service-card__img--solid { opacity: 1; transform: scale(1.05); -webkit-mask-position: 0 100%; mask-position: 0 100%; }
.service-card.is-lit .service-card__img--light { transform: scale(1.05); }
@media (max-width: 1180px) { .service-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } }
@media (max-width: 640px) {
  .service-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .service-card { padding: 32px 14px 28px; }
  .service-card__icon { height: 76px; margin-bottom: 18px; }
  .service-card h3 { font-size: .9rem; }
  .service-card p { font-size: .85rem; }
}

/* ---------- projetos (cartões) ---------- */
.section--projects { background: var(--bg-soft); padding-block: var(--home-pad); }
.project-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 22px; margin-top: 24px; } /* + espaço entre o título e as fotografias */
.project-card a { position: relative; display: block; text-decoration: none; border-radius: var(--radius); overflow: hidden; background: var(--sand-light); }
.project-card__media { display: block; aspect-ratio: 1 / 1; overflow: hidden; }
.project-card img { width: 100%; height: 100%; object-fit: cover; transform: scale(1.001); transition: transform 1.6s cubic-bezier(.22, .61, .36, 1), filter .8s var(--ease); }
/* véu escuro em baixo para o nome ler-se sobre a fotografia */
.project-card a::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(30, 14, 8, 0) 45%, rgba(30, 14, 8, .72) 100%); transition: opacity .9s var(--ease);
}
.project-info {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 18px 20px; color: var(--bg-soft);
  font-family: var(--font-sans); font-size: .8125rem; font-weight: 500; letter-spacing: .1em; text-transform: uppercase;
  transition: transform .9s cubic-bezier(.4, 0, .2, 1) .1s;
}
.project-info .icon { flex: none; width: 1.3em; height: 1.3em; opacity: .85; transform: translateX(-8px); transition: transform .8s cubic-bezier(.4, 0, .2, 1) .2s, opacity .8s cubic-bezier(.4, 0, .2, 1) .2s; }
/* selecionado: o cartão aumenta um pouco (só transform: não mexe no layout, por isso é leve) */
.project-card { position: relative; transition: transform .7s var(--ease), box-shadow .7s var(--ease); }
.project-card:hover img, .project-card a:focus-visible img, .project-card.is-lit img { transform: scale(1.06); }
@media (max-width: 1024px) {
  .project-card:hover, .project-card:focus-within, .project-card.is-lit { transform: scale(1.045); z-index: 2; box-shadow: 0 22px 44px -16px rgba(48, 24, 15, .45); }
}
/* ecrã largo: acordeão — o cartão selecionado alarga e os outros cedem espaço.
   A fotografia tem sempre o mesmo tamanho e é só "revelada" pelo recorte do cartão (animação leve, sem repintar a imagem). */
@media (min-width: 1025px) {
  .project-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); transition: grid-template-columns .8s cubic-bezier(.6, 0, .3, 1); }
  .project-card { contain: layout paint; }
  .project-card__media { position: relative; aspect-ratio: auto; height: clamp(340px, 29vw, 440px); }
  .project-card__media img { position: absolute; top: 0; left: 50%; width: max(100%, 500px); max-width: none; height: 100%; transform: translateX(-50%) scale(1.001); will-change: transform; }
  .project-card:hover img, .project-card a:focus-visible img, .project-card.is-lit img { transform: translateX(-50%) scale(1.06); }
  .project-grid[data-active="1"], .project-grid:has(.project-card:nth-child(1) a:focus-visible), .project-grid:has(.project-card:nth-child(1).is-lit) { grid-template-columns: minmax(0, 1.8fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); }
  .project-grid[data-active="2"], .project-grid:has(.project-card:nth-child(2) a:focus-visible), .project-grid:has(.project-card:nth-child(2).is-lit) { grid-template-columns: minmax(0, 1fr) minmax(0, 1.8fr) minmax(0, 1fr) minmax(0, 1fr); }
  .project-grid[data-active="3"], .project-grid:has(.project-card:nth-child(3) a:focus-visible), .project-grid:has(.project-card:nth-child(3).is-lit) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.8fr) minmax(0, 1fr); }
  .project-grid[data-active="4"], .project-grid:has(.project-card:nth-child(4) a:focus-visible), .project-grid:has(.project-card:nth-child(4).is-lit) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.8fr); }
}
/* ecrãs de toque (tablets): animação mais rápida, para acompanhar o scroll */
@media (min-width: 1025px) and ((hover: none) or (pointer: coarse)) {
  .project-grid { transition-duration: .65s; }
  /* mais baixo; a fotografia (tamanho fixo) é recortada pelo centro, um pouco acima do meio, onde costuma estar o assunto */
  .project-card__media { height: clamp(250px, 21vw, 330px); }
  .project-card__media img { width: max(100%, 440px); object-position: center 42%; }
  .project-card img { transition-duration: .9s; }
  .project-info, .project-info .icon { transition-duration: .5s; transition-delay: 0s; }
}
@media (prefers-reduced-motion: reduce) { .project-grid { transition: none; } }
.project-card:hover .project-info, .project-card a:focus-visible .project-info, .project-card.is-lit .project-info { transform: translateY(-6px); }
.project-card:hover .project-info .icon, .project-card a:focus-visible .project-info .icon, .project-card.is-lit .project-info .icon { opacity: 1; transform: translateX(0); }
@media (max-width: 1024px) { .project-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .project-card__media { aspect-ratio: 1 / 1; } }
@media (max-width: 520px) { .project-grid { grid-template-columns: 1fr; } .project-card__media { aspect-ratio: 16 / 11; } }

/* ---------- vídeo institucional ---------- */
.company-video {
  position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; padding: 0;
  overflow: hidden; border: 0; border-radius: var(--radius); background: #1d0e08; color: var(--bg-soft);
}
.company-video img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.company-video:hover img { transform: scale(1.03); }
.company-video::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(30, 14, 8, 0) 45%, rgba(30, 14, 8, .6) 100%); }
.company-video__play {
  position: absolute; z-index: 1; left: 50%; top: 46%; width: 76px; height: 76px; margin: -38px 0 0 -38px;
  display: grid; place-items: center; border: 2px solid var(--bg-soft); border-radius: 50%;
  background: rgba(66, 34, 23, .35); transition: background-color .25s, transform .25s var(--ease);
}
.company-video:hover .company-video__play { background: var(--brown); transform: scale(1.06); }
.company-video__play .icon { width: 28px; height: 28px; }
.company-video__caption { position: absolute; z-index: 1; left: 0; right: 0; bottom: 14px; padding-inline: 16px; text-align: center; font-size: .8125rem; font-weight: 500; letter-spacing: .02em; }

/* ---------- estatísticas ---------- */
.stats { display: grid; gap: 4px; align-content: start; }
.stat { display: flex; align-items: flex-start; gap: 18px; padding: 16px 0; border-bottom: 1px solid var(--border-soft); }
.stat:last-child { border-bottom: 0; }
.stat__icon { width: 34px; height: 34px; margin-top: 4px; color: var(--brown-medium); }
[data-countdown] { font-variant-numeric: tabular-nums; }
.stat__value { font-family: var(--font-serif); font-size: 1.85rem; line-height: 1.1; color: var(--brown-dark); font-weight: 500; }
.stat--international .stat__value { font-size: 1.5rem; }
.stat__label { margin-top: 4px; font-size: .875rem; line-height: 1.5; color: var(--muted); }

/* ---------- mapa (com consentimento) ---------- */
.map-card { position: relative; width: 100%; height: 100%; min-height: 380px; background: var(--sand-light); }
.map-card iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.map-card__placeholder {
  position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center;
  gap: 6px; padding: 28px 24px; color: var(--brown-dark);
  background:
    linear-gradient(0deg, rgba(229, 216, 199, .6), rgba(229, 216, 199, .6)),
    repeating-linear-gradient(0deg, transparent 0 47px, rgba(89, 54, 33, .07) 47px 48px),
    repeating-linear-gradient(90deg, transparent 0 47px, rgba(89, 54, 33, .07) 47px 48px);
}
.map-card__pin { display: grid; place-items: center; width: 56px; height: 56px; margin-bottom: 8px; border-radius: 50%; background: var(--brown); color: var(--bg-soft); }
.map-card__pin .icon { width: 26px; height: 26px; }
.map-card__name { font-family: var(--font-serif); font-size: 1.6rem; font-weight: 500; line-height: 1.1; }
.map-card__addr { font-size: .9375rem; }
.map-card__text { max-width: 36ch; margin-top: 10px; font-size: .8125rem; color: var(--muted); }
.map-card__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 14px 22px; margin-top: 14px; }

/* ---------- listas de contacto ---------- */
.contact-list { display: grid; gap: 22px; margin-top: 40px; }
.contact-list li { display: flex; align-items: flex-start; gap: 18px; }
.contact-list .icon { width: 30px; height: 30px; margin-top: 2px; color: var(--sand-light); }
.contact-list div { display: grid; gap: 2px; }
.contact-list a { text-decoration: none; }
.addr-label { font-size: .6875rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; opacity: .75; }
.addr-note { margin-top: 6px; font-size: .8125rem; line-height: 1.5; opacity: .8; }
.contact-list a:hover { text-decoration: underline; text-underline-offset: 4px; }

/* ---------- faixa de chamada à ação ---------- */
.cta-band { background: var(--brown-dark); color: var(--bg-soft); }
.cta-band__inner { display: flex; align-items: center; justify-content: space-between; gap: 32px 64px; padding-block: var(--space-lg); }
.cta-band h2 { color: var(--bg-soft); font-size: clamp(1.8rem, 3vw, 2.6rem); max-width: 22ch; }
.cta-band p { margin-top: 12px; color: var(--sand-light); max-width: 56ch; }
.cta-band .btn { flex: none; }
@media (max-width: 900px) { .cta-band__inner { flex-direction: column; align-items: flex-start; } }

/* ---------- grelha de factos (capacidades, qualidade...) ---------- */
.spec-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 16px; }
.spec-card { padding: 28px 26px; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius); }
.spec-card .icon { width: 34px; height: 34px; margin-bottom: 18px; color: var(--brown-medium); }
.spec-card h3 { margin-bottom: 10px; }
.spec-card p { font-size: .9375rem; color: var(--muted); }
.section--tint .spec-card { background: var(--bg-soft); }
.spec-card, .media-card { transition: border-color .4s var(--ease), transform .5s var(--ease), box-shadow .5s var(--ease); }
.spec-card:hover, .media-card:hover { border-color: var(--border); transform: translateY(-4px); box-shadow: var(--shadow-soft); }
.media-card__img img { transition: transform 1.2s cubic-bezier(.22, .61, .36, 1); }
.media-card:hover .media-card__img img { transform: scale(1.05); }
/* entrada 1 a 1 (ver main.js): cartões e passos das páginas Profissionais / Construtores / Particulares */
.spec-card.is-queued:not(.is-in), .process-card.is-queued:not(.is-in), .media-card.is-queued:not(.is-in), .step.is-queued:not(.is-in), .cap-item.is-queued:not(.is-in) { opacity: 0; }
.spec-card.is-in, .process-card.is-in, .media-card.is-in, .step.is-in, .cap-item.is-in { animation: service-in .8s var(--ease) backwards; }

/* ---------- cartões de imagem (soluções, âmbito) ---------- */
.media-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.media-card { background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius); overflow: hidden; }
.media-card__img { aspect-ratio: 4 / 3; overflow: hidden; background: var(--sand-light); }
.media-card__img img { width: 100%; height: 100%; object-fit: cover; }
.media-card__body { padding: 22px 22px 26px; }
.media-card__body h3 { margin-bottom: 8px; }
.media-card__body p { font-size: .9375rem; color: var(--muted); }
@media (max-width: 1100px) { .media-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .media-grid { grid-template-columns: 1fr; } }

/* ---------- processo por passos ---------- */
.process { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.3fr); gap: 48px 96px; align-items: start; }
.process__intro { position: sticky; top: calc(var(--header-h) + 32px); }
.process__intro h2 { max-width: 14ch; }
.process__intro .partner-note { margin-top: 24px; color: var(--muted); font-size: .9375rem; max-width: 40ch; }
.steps { counter-reset: step; border-top: 1px solid var(--border); }
.step { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 8px 24px; padding: 26px 0; border-bottom: 1px solid var(--border); }
.step__num { font-family: var(--font-serif); font-size: 2.1rem; line-height: 1; color: var(--brown-medium); font-weight: 500; }
.step h3 { margin-bottom: 6px; }
.step p { color: var(--muted); font-size: .9375rem; max-width: 56ch; }
@media (max-width: 960px) {
  .process { grid-template-columns: 1fr; gap: 32px; }
  .process__intro { position: static; }
}
@media (max-width: 480px) {
  .step { grid-template-columns: 52px minmax(0, 1fr); gap: 4px 14px; }
  .step__num { font-size: 1.7rem; }
}

/* ---------- lista com visto ---------- */
.check-list { display: grid; gap: 12px; }
.check-list li { display: flex; align-items: flex-start; gap: 12px; }
.check-list .icon { width: 1.25em; height: 1.25em; margin-top: .2em; color: var(--brown-medium); }

/* ---------- formulário inteligente ---------- */
.smart-form { display: grid; gap: 24px; }
.type-picker { border: 0; padding: 0; margin: 0; min-width: 0; }
.type-picker legend { padding: 0; margin-bottom: 12px; font-size: .8125rem; font-weight: 500; color: var(--brown-dark); }
.type-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.type-card { position: relative; display: block; cursor: pointer; }
.type-card input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.type-card__body {
  display: grid; gap: 4px; height: 100%; padding: 16px 16px 15px;
  background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius);
  transition: background-color .25s var(--ease), border-color .25s var(--ease), box-shadow .25s var(--ease), transform .25s var(--ease);
}
.type-card__title { font-weight: 500; font-family: var(--font-serif); font-size: 1.2rem; line-height: 1.15; color: var(--brown-dark); }
.type-card__text { font-weight: 400; font-size: .8125rem; line-height: 1.4; color: var(--muted); }
.type-card:hover .type-card__body { border-color: var(--border); transform: translateY(-2px); }
.type-card input:checked + .type-card__body { background: var(--white); border-color: var(--brown); box-shadow: inset 0 0 0 1px var(--brown); }
.type-card input:focus-visible + .type-card__body { outline: 2px solid var(--brown); outline-offset: 2px; }
@media (max-width: 900px) { .type-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .type-card__body { padding: 13px 12px; } .type-card__title { font-size: 1.05rem; } .type-card__text { font-size: .75rem; } }
@media (max-width: 340px) { .type-cards { grid-template-columns: 1fr; } }
/* campos opcionais recolhidos */
.request-extras { margin-top: 24px; border-top: 1px solid var(--border-soft); }
.request-extras summary { display: flex; align-items: center; gap: 8px; padding: 16px 0; cursor: pointer; list-style: none; font-size: .9375rem; font-weight: 500; color: var(--brown-dark); }
.request-extras summary::-webkit-details-marker { display: none; }
.request-extras summary span { font-weight: 400; color: var(--muted); }
.request-extras summary::after { content: ""; margin-left: auto; width: 8px; height: 8px; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg); transition: transform .3s var(--ease); }
.request-extras[open] summary::after { transform: rotate(-135deg); }
.request-extras__intro { margin: 0 0 18px; font-size: .875rem; color: var(--muted); }
.smart-form__group { border: 0; padding: 0; margin: 0; min-width: 0; animation: form-in .35s var(--ease); }
@keyframes form-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.field-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.field--full { grid-column: 1 / -1; }
.smart-form__footer { display: grid; gap: 18px; }
.smart-form__note { font-size: .8125rem; color: var(--muted); }
.field--check .check { display: flex; align-items: flex-start; gap: 12px; font-size: .875rem; font-weight: 400; color: var(--text); cursor: pointer; }
.field--check input { width: 20px; height: 20px; min-height: 0; margin-top: 2px; accent-color: var(--brown); flex: none; }
.field--check a { color: var(--brown-dark); }
.hp { position: absolute !important; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.form-status { font-size: .9375rem; }
.form-status:empty { display: none; }
.form-status.is-success { padding: 16px 18px; border-left: 3px solid var(--brown); background: var(--sand-light); color: var(--brown-dark); }
.form-status.is-error { padding: 16px 18px; border-left: 3px solid var(--danger); background: #F4E1DC; color: #5E1B11; }
.smart-form .btn { justify-self: start; }
@media (max-width: 640px) {
  .field-grid { grid-template-columns: 1fr; gap: 16px; }
  .smart-form .btn { justify-self: stretch; }
}

/* texto de apresentação nos cartões de soluções (Particulares): aparece quando o cartão está aberto/selecionado */
.project-card__text {
  position: absolute; left: 22px; right: 22px; bottom: 66px; z-index: 1;
  color: rgba(250, 246, 238, .92); font-size: .875rem; line-height: 1.5;
  opacity: 0; transform: translateY(10px); pointer-events: none;
  transition: opacity .7s var(--ease) .1s, transform .7s var(--ease) .1s;
}
.project-card:hover .project-card__text, .project-card a:focus-visible .project-card__text, .project-card.is-lit .project-card__text { opacity: 1; transform: none; }
@media (max-width: 1024px) { .project-card__text { opacity: 1; transform: none; } .project-card:has(.project-card__text) .project-card__media::after { content: ""; position: absolute; inset: 0; } }
.process__photo { margin-top: 28px; aspect-ratio: 4 / 5; max-width: 340px; overflow: hidden; border-radius: var(--radius); background: var(--sand-light); }
.process__photo img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.4s cubic-bezier(.22, .61, .36, 1); }
.process__photo:hover img { transform: scale(1.05); }
@media (max-width: 960px) { .process__photo { display: none; } }
/* cartões com texto: véu mais forte em baixo e sombra no texto, para ler bem sobre fotografias claras */
.project-card:has(.project-card__text) a::after { background: linear-gradient(180deg, rgba(30, 14, 8, 0) 28%, rgba(30, 14, 8, .5) 58%, rgba(30, 14, 8, .84) 100%); }
.project-card__text { text-shadow: 0 1px 8px rgba(30, 14, 8, .55); }

/* página inicial: o espaço entre o título de cada secção e os seus cartões é igual (serviços e projetos) */
.section--services .service-grid, .section--projects .project-grid { margin-top: 0; }

/* globo de "Presença internacional": mesmas medidas, cor e traço dos outros ícones dos números (34px, traço 1,5 numa grelha de 24) */
.stat__svg { flex: none; width: 34px; height: 34px; margin-top: 4px; overflow: visible; fill: none; stroke: var(--brown-medium); stroke-width: 3.6; stroke-linecap: round; stroke-linejoin: round; }
.stat__svg .fi { fill: none; }

/* ---- pages.css ---- */
/* ==========================================================================
   pages.css: homepage (hero, sobre, contactos) e páginas interiores
   ========================================================================== */

/* ---------- hero da homepage ---------- */
.hero {
  position: relative; isolation: isolate; display: flex; align-items: center;
  min-height: calc(100vh / var(--z));
  min-height: calc(100svh / var(--z));
  padding-top: var(--header-h);
  color: var(--bg-soft); background: var(--brown-dark);
}
.hero__media { position: absolute; inset: 0; z-index: -2; overflow: hidden; }
.hero__img { width: 100%; height: 100%; object-fit: cover; object-position: 68% 42%; }
.hero__slide {
  position: absolute; inset: 0;
  opacity: 0;
  transition: opacity 1.2s ease;
  will-change: opacity;
}
.hero__slide.is-active { opacity: 1; }
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(90deg, rgba(25, 20, 17, .58) 0%, rgba(31, 24, 20, .38) 34%, rgba(38, 28, 22, .1) 64%, transparent 100%);
}
.hero__inner { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 48px; padding-block: 56px; }
.hero__copy { max-width: 660px; }
.hero__title { color: var(--bg-soft); font-size: clamp(2.7rem, 5.8vw, 5rem); line-height: 1.02; margin-bottom: 26px; }
.hero__title em { display: block; }
.hero__text { max-width: 46ch; font-size: clamp(1rem, 1.25vw, 1.125rem); color: rgba(250, 246, 238, .92); }
.hero__actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 36px; }
.hero__benefits { display: grid; gap: 0; width: 290px; padding-inline: 28px; background: rgba(22, 18, 16, .36); }
.hero__benefits li {
  display: flex; align-items: center; gap: 18px; padding: 22px 0;
  font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; line-height: 1.5;
}
.hero__benefits li + li { border-top: 1px solid rgba(250, 246, 238, .28); }
.hero__benefits .icon { width: 34px; height: 34px; color: var(--sand-light); stroke-width: 1.25; }
@media (max-width: 1024px) {
  .hero__inner { grid-template-columns: 1fr; gap: 36px; padding-block: 72px 40px; }
  .hero::before { background: linear-gradient(90deg, rgba(25, 20, 17, .68) 0%, rgba(31, 24, 20, .48) 55%, rgba(38, 28, 22, .22) 100%); }
  .hero__benefits { width: 100%; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
  .hero__benefits li { flex-direction: column; align-items: flex-start; gap: 12px; padding: 18px 0 0; border-top: 1px solid rgba(250, 246, 238, .28); }
  .hero__benefits li + li { border-top: 1px solid rgba(250, 246, 238, .28); }
}
@media (max-width: 640px) {
  .hero__img { object-position: center center; }
  .hero { align-items: flex-end; }
  .hero__inner { padding-block: 72px 56px; }
  .hero__actions .btn { flex: 1 1 100%; }
  .hero__benefits { grid-template-columns: 1fr; gap: 0; }
  .hero__benefits li { flex-direction: row; align-items: center; padding: 16px 0; border-top: 0; }
  .hero__benefits li + li { border-top: 1px solid rgba(250, 246, 238, .28); }
}

/* ---------- banner das páginas interiores ---------- */
.page-hero {
  position: relative; isolation: isolate; display: flex; align-items: flex-end;
  min-height: clamp(420px, calc(56vh / var(--z)), 560px);
  padding-top: var(--header-h);
  color: var(--bg-soft); background: var(--brown-dark);
}
.page-hero__media { position: absolute; inset: 0; z-index: -2; }
.page-hero__img { width: 100%; height: 100%; object-fit: cover; }
.page-hero::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  /* escuro no canto inferior esquerdo (onde está o texto), a desvanecer para o resto da fotografia */
  background:
    radial-gradient(ellipse 115% 160% at 0% 100%, rgba(58, 32, 22, .62) 0%, rgba(62, 35, 24, .46) 42%, rgba(66, 38, 27, .2) 72%, rgba(66, 38, 27, 0) 100%),
    linear-gradient(0deg, rgba(58, 32, 22, .12), rgba(58, 32, 22, .03));
}
.page-hero--plain::before { display: none; }
.page-hero__inner { padding-block: 56px 64px; }
.page-hero__title { max-width: 30ch; color: var(--bg-soft); font-size: clamp(2.4rem, 4.9vw, 4.25rem); line-height: 1.03; }
.page-hero__title em { display: block; }
.page-hero__lead { max-width: 56ch; margin-top: 22px; font-size: clamp(1rem, 1.3vw, 1.15rem); color: rgba(250, 246, 238, .92); }
.page-hero__actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 32px; }
@media (max-width: 640px) {
  .page-hero { min-height: 0; }
  .page-hero__inner { padding-block: 40px 44px; }
  .page-hero__actions .btn { flex: 1 1 100%; }
}

/* paginas com cabecalho sólido (legais): sem fotografia por baixo do menu */
body[data-header="solid"] .page-hero { min-height: 0; padding-top: 0; }
body[data-header="solid"] .page-hero__inner { padding-block: 48px 52px; }

/* migalhas */
.breadcrumb { margin-bottom: 28px; font-size: .8125rem; }
.breadcrumb ol { display: flex; flex-wrap: wrap; gap: 6px; }
.breadcrumb li + li::before { content: "/"; margin-right: 6px; opacity: .6; }
.breadcrumb a { text-decoration: none; }
.breadcrumb a:hover { text-decoration: underline; text-underline-offset: 3px; }
.breadcrumb--light { color: rgba(250, 246, 238, .8); }

/* ---------- sobre nós (homepage) ---------- */
.section--about { background: var(--bg-soft); padding-block: var(--home-pad); }
/* texto e números lado a lado; o vídeo por baixo dos dois, em toda a largura */
.about-grid {
  display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: clamp(88px, 8vw, 128px) clamp(40px, 6vw, 96px); align-items: start;
  grid-template-areas: "text stats" "video video";
}
.about-grid__text { grid-area: text; }
.about-grid .stats { grid-area: stats; }
.about-grid__video { grid-area: video; }
/* vídeo institucional: moldura deslocada, véu em degradê, botão com pulsação e legenda */
.about-grid__video { position: relative; isolation: isolate; justify-self: center; width: 100%; max-width: 880px; margin-bottom: 36px; }
.about-grid__video::before { content: ""; position: absolute; z-index: -1; top: 30px; left: 30px; right: -30px; bottom: -30px; background: var(--sand-light); border: 1px solid var(--border-soft); }
.about-grid__video .company-video { aspect-ratio: 12 / 5; box-shadow: 0 30px 60px -28px rgba(48, 24, 15, .5); }
.about-grid__video .company-video::after { background: linear-gradient(90deg, rgba(40, 20, 12, .55) 0%, rgba(40, 20, 12, 0) 55%), linear-gradient(180deg, rgba(30, 14, 8, 0) 40%, rgba(30, 14, 8, .62) 100%); }
.about-grid__video .company-video img { transition: transform 1.6s cubic-bezier(.22, .61, .36, 1); }
.about-grid__video .company-video:hover img { transform: scale(1.06); }
.about-grid__video .company-video__play { top: 50%; width: 88px; height: 88px; margin: -44px 0 0 -44px; background: rgba(250, 246, 238, .16); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.about-grid__video .company-video__play::before { content: ""; position: absolute; inset: -2px; border: 2px solid rgba(250, 246, 238, .65); border-radius: 50%; animation: video-pulse 2.6s ease-out infinite; }
@keyframes video-pulse { from { transform: scale(1); opacity: .8; } to { transform: scale(1.7); opacity: 0; } }
.about-grid__video .company-video:hover .company-video__play { background: var(--bg-soft); color: var(--brown-dark); transform: scale(1.08); }
.about-grid__video .company-video__play .icon { width: 32px; height: 32px; }
.about-grid__video .company-video__caption { right: auto; left: 28px; bottom: 24px; display: flex; align-items: center; gap: 14px; padding: 0; text-align: left; font-size: .8125rem; letter-spacing: .16em; text-transform: uppercase; }
.about-grid__video .company-video__caption::before { content: ""; width: 40px; height: 1px; background: currentColor; }
@media (prefers-reduced-motion: reduce) { .about-grid__video .company-video__play::before { animation: none; opacity: 0; } }
.about-grid__text h2 { margin-bottom: 22px; }
.about-grid__text p { color: var(--muted); max-width: 65ch; font-size: .9375rem; }   /* uma só cor em todos os parágrafos */
.about-grid__text p strong { color: var(--text); }
.about-grid__text .btn { margin-top: 30px; }
@media (max-width: 1024px) {
  .about-grid { grid-template-columns: 1fr; gap: 72px; grid-template-areas: "text" "stats" "video"; }
  .about-grid .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 48px; }
  .about-grid .stat:nth-last-child(2) { border-bottom: 0; }
  .about-grid__video .company-video { aspect-ratio: 16 / 7; }
}
@media (max-width: 640px) {
  .about-grid { gap: 56px; }
  .about-grid__video { margin-bottom: 20px; }
  .about-grid__video::before { top: 16px; left: 16px; right: -16px; bottom: -16px; }
  .about-grid__video .company-video__play { width: 72px; height: 72px; margin: -36px 0 0 -36px; }
  .about-grid__video .company-video__caption { left: 16px; bottom: 16px; font-size: .6875rem; letter-spacing: .12em; }
  .about-grid .stats { grid-template-columns: 1fr; }
  .about-grid .stat:nth-last-child(2) { border-bottom: 1px solid var(--border-soft); }
  .about-grid__video .company-video { aspect-ratio: 16 / 10; }
}

/* ---------- contactos (50/50 na homepage) ---------- */
.contact-split { display: grid; grid-template-columns: 1fr 1fr; background: var(--brown); color: var(--bg-soft); }
.contact-split__info { background: var(--brown); }
.contact-split__inner {
  /* margem esquerda = alinha com o contentor da página; "100vw / --z" compensa o zoom dos monitores grandes */
  --pl: max(var(--gutter), calc((100vw / var(--z, 1) - var(--container)) / 2 + var(--gutter)));
  max-width: calc(var(--pl) + 512px); height: 100%;
  padding: var(--space-xl) var(--space-lg) var(--space-xl) var(--pl);
}
.contact-split h2 { color: var(--bg-soft); margin-bottom: 20px; }
.contact-split__lead { max-width: 44ch; color: rgba(250, 246, 238, .9); margin-bottom: 30px; }
.contact-split__map { min-height: 460px; }
@media (max-width: 900px) {
  .contact-split { grid-template-columns: 1fr; }
  .contact-split__inner { max-width: none; padding: var(--space-xl) var(--gutter); }
  .contact-split__map { min-height: 380px; }
}

/* ---------- blocos de texto das páginas interiores ---------- */
.intro { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 32px 96px; align-items: start; }
.intro h2 { max-width: 15ch; }
.intro p:not(.eyebrow) { color: var(--muted); font-size: 1.0625rem; max-width: 60ch; }
/* introdução com fotografia ao lado */
.intro--media { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: 40px clamp(40px, 6vw, 96px); align-items: center; }
.intro--media .intro__text h2 { max-width: 18ch; margin-bottom: 20px; }
.intro__media { position: relative; aspect-ratio: 4 / 3; overflow: hidden; border-radius: var(--radius); background: var(--sand-light); }
.intro__media .hero__img { object-position: center; }
/* carrossel moderno: zoom lento, legenda, contador e linha de progresso */
.intro__media::after { content: ""; position: absolute; inset: auto 0 0 0; height: 46%; pointer-events: none; z-index: 1; background: linear-gradient(180deg, rgba(30, 14, 8, 0) 0%, rgba(30, 14, 8, .62) 100%); }
.intro__media .hero__slide.is-active { animation: slide-zoom 7.5s cubic-bezier(.25, .46, .45, .94) forwards; }
@keyframes slide-zoom { from { transform: scale(1.1); } to { transform: scale(1); } }
.slide-caption, .slide-count { position: absolute; bottom: 22px; z-index: 2; color: var(--bg-soft); font-size: .8125rem; font-weight: 500; letter-spacing: .1em; text-transform: uppercase; }
.slide-caption { left: 22px; right: 110px; line-height: 1.35; animation: caption-in .9s var(--ease) both; }
.slide-count { right: 22px; font-variant-numeric: tabular-nums; opacity: .9; }
.slide-progress { position: absolute; left: 0; bottom: 0; z-index: 3; height: 3px; width: 100%; background: var(--bg-soft); transform: scaleX(0); transform-origin: left; }
.slide-progress.run { animation: slide-bar linear forwards; }
@keyframes slide-bar { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes caption-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .intro__media .hero__slide.is-active, .slide-caption, .slide-progress.run { animation: none; } }
.intro__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.4s cubic-bezier(.22, .61, .36, 1); }
.intro__media:hover img { transform: scale(1.04); }
@media (max-width: 960px) { .intro--media { grid-template-columns: 1fr; } .intro__media { aspect-ratio: 16 / 9; } }
@media (max-width: 960px) { .intro { grid-template-columns: 1fr; gap: 20px; } }

.page-section-head { margin-bottom: 36px; max-width: 760px; }
.page-section-head p { margin-top: 16px; color: var(--muted); }

.two-col { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
@media (max-width: 800px) { .two-col { grid-template-columns: 1fr; } }

.stat-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; margin-top: 48px; border-top: 1px solid var(--border); }
.stat-strip div { padding: 22px 24px 0 0; }
.stat-strip dt { font-family: var(--font-serif); font-size: 2rem; line-height: 1.1; color: var(--brown-dark); font-weight: 500; }
.stat-strip dd { margin: 4px 0 0; font-size: .875rem; color: var(--muted); }
@media (max-width: 800px) { .stat-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* processos (Profissionais) com ícone */
.process-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.process-card {
  position: relative; display: block; overflow: hidden; padding: 0;
  background: var(--bg-soft); border: 1px solid var(--border-soft); border-radius: var(--radius);
  transition: border-color .4s var(--ease), transform .5s var(--ease), box-shadow .5s var(--ease), background-color .4s var(--ease);
}
.process-card:hover { border-color: var(--border); transform: translateY(-4px); box-shadow: var(--shadow-soft); background: var(--white); }
/* fotografia da fábrica por cima de cada processo */
.process-card__photo { aspect-ratio: 16 / 9; overflow: hidden; background: var(--sand-light); }
.process-card__photo img { width: 100%; height: 100%; object-fit: cover; transform: scale(1.001); transition: transform 1.4s cubic-bezier(.22, .61, .36, 1); }
.process-card:hover .process-card__photo img, .process-card.is-lit .process-card__photo img { transform: scale(1.07); }
.process-card__body { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 4px 18px; padding: 22px 24px 26px; }
.process-card__icon { position: relative; grid-row: span 2; display: grid; place-items: center; height: 64px; }
.process-card__icon img { max-height: 56px; width: auto; max-width: 64px; object-fit: contain; opacity: .8; }
/* ícone claro por omissão; o preenchido "enche" por cima ao passar o rato (como na página inicial) */
.process-card__icon .process-card__img { position: absolute; inset: 0; margin: auto; max-height: 56px; max-width: 64px; width: auto; height: auto; opacity: 1; }
.process-card__img--solid { opacity: 0 !important; -webkit-mask-image: linear-gradient(to top, #000 0%, #000 38%, transparent 62%); mask-image: linear-gradient(to top, #000 0%, #000 38%, transparent 62%); -webkit-mask-size: 100% 300%; mask-size: 100% 300%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: 0 0; mask-position: 0 0; transition: opacity 1s cubic-bezier(.4, 0, .2, 1), -webkit-mask-position 1.4s cubic-bezier(.4, 0, .2, 1), mask-position 1.4s cubic-bezier(.4, 0, .2, 1); }
.process-card:hover .process-card__img--solid, .process-card.is-lit .process-card__img--solid { opacity: 1 !important; -webkit-mask-position: 0 100%; mask-position: 0 100%; }
.process-card h3 { align-self: end; }
.process-card__link { text-decoration: none; }
.process-card__link::after { content: ""; position: absolute; inset: 0; } /* o cartão todo é a ligação */
.process-card p { font-size: .9375rem; color: var(--muted); }
@media (max-width: 1100px) { .process-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) { .process-grid { grid-template-columns: 1fr; } .process-card__body { grid-template-columns: 52px minmax(0, 1fr); padding: 18px 18px 22px; } .process-card__icon { height: 52px; } }

/* ---------- serviços (página) ---------- */
.service-block { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 40px 72px; align-items: center; padding-block: var(--space-lg); border-top: 1px solid var(--border); }
.service-block:first-child { border-top: 0; padding-top: 0; }
.service-block:nth-child(even) .thumbs { order: -1; }
.service-block__icon { display: block; height: 76px; width: auto; margin-bottom: 20px; opacity: .85; }
.service-block h2 { margin-bottom: 16px; }
.service-block__text { color: var(--muted); max-width: 52ch; font-size: 1.0625rem; }
.service-block .btn { margin-top: 26px; }
.thumbs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.thumbs__item { position: relative; display: block; aspect-ratio: 4 / 3; overflow: hidden; padding: 0; border: 0; background: var(--sand-light); border-radius: var(--radius); cursor: zoom-in; }
.thumbs__item img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.thumbs__item:hover img { transform: scale(1.04); }
.thumbs__more { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(48, 24, 15, .62); color: var(--bg-soft); font-family: var(--font-serif); font-size: 1.8rem; }
.thumbs__hidden { display: none; }
@media (max-width: 960px) {
  .service-block:nth-child(even) .thumbs { order: 0; }
  .service-block { grid-template-columns: 1fr; gap: 28px; }
  .service-block:first-child { padding-top: 0; }
}

/* ---------- projetos (página) ---------- */
.filters { display: flex; flex-wrap: wrap; gap: 10px; }
.filter-btn {
  display: inline-flex; align-items: center; gap: 9px; padding: .72rem 1.25rem;
  background: transparent; color: var(--brown-dark);
  border: 1px solid var(--border); border-radius: var(--radius);
  font-size: .8125rem; font-weight: 500; letter-spacing: .04em; cursor: pointer;
  transition: background-color .35s var(--ease), color .35s var(--ease), border-color .35s var(--ease), transform .35s var(--ease), box-shadow .35s var(--ease);
}
.filter-btn:hover { border-color: var(--brown); transform: translateY(-2px); }
.filter-btn:focus-visible { outline: 2px solid var(--brown); outline-offset: 3px; }
.filter-btn[aria-pressed="true"] { background: var(--brown); color: var(--bg-soft); border-color: var(--brown); box-shadow: 0 10px 22px -12px rgba(48, 24, 15, .6); }
.filter-btn__n { min-width: 1.5em; padding: .1em .5em; border-radius: var(--radius); background: rgba(89, 54, 33, .1); font-size: .6875rem; line-height: 1.5; text-align: center; font-variant-numeric: tabular-nums; transition: background-color .35s var(--ease); }
.filter-btn[aria-pressed="true"] .filter-btn__n { background: rgba(250, 246, 238, .22); }
.filter-btn__n:empty { display: none; }

/* filtros por cima da galeria */
.section .filters { margin-bottom: 32px; }
@media (max-width: 640px) {
  .section .filters { flex-wrap: nowrap; overflow-x: auto; margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); scrollbar-width: none; }
  .section .filters::-webkit-scrollbar { display: none; }
  .section .filter-btn { flex: none; }
}
/* título "Projetos realizados" numa só linha */
/* títulos curtos numa só linha: "Projetos realizados", "Sobre nós" */
:is(.page-projects, .page-about, .page-services) .page-hero__title { max-width: none; }
:is(.page-projects, .page-about, .page-services) .page-hero__title em { display: inline; }

.gallery-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.gallery-item { position: relative; display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; padding: 0; border: 0; border-radius: var(--radius); background: var(--sand-light); cursor: zoom-in; }
.gallery-item img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.gallery-item:hover img { transform: scale(1.04); }
.gallery-empty { padding: 48px 0; text-align: center; color: var(--muted); }
@media (max-width: 1200px) { .gallery-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 641px) and (max-width: 1024px) { .gallery-item.hide-tablet { display: none; } } /* tablet: fotografias da pasta tablet; telemóvel (<=640px): pasta mobile */
@media (max-width: 800px) { .gallery-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) { .gallery-item.hide-mobile { display: none; } .gallery-grid { gap: 8px; } }

/* ---------- contactos (página) ---------- */
.contact-layout { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 56px 80px; align-items: start; }
.contact-card { padding: 36px 32px; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius); }
/* a coluna mais curta acompanha o scroll até ao fim da mais comprida e sobe com ela (só com 2 colunas; em
   tablet/telemóvel as colunas ficam empilhadas e nada fica preso). Sticky nas duas: a mais alta não tem para onde andar.
   - sem tipo de pedido escolhido o formulário é mais baixo: é ele que desce ao lado da info lateral;
   - ao escolher o tipo, o formulário cresce: passa a ser a info lateral (cartão, ~690 px) a acompanhá-lo.
   O cartão só fica preso em ecrãs com altura para caber inteiro. */
@media (min-width: 1025px) and (min-height: 560px) { .form-panel { position: sticky; top: calc(var(--header-h) + 32px); } }
@media (min-width: 1025px) and (min-height: 820px) { .contact-card { position: sticky; top: calc(var(--header-h) + 32px); } }
.contact-card h2 { font-size: 1.9rem; margin-bottom: 24px; }
.contact-card .contact-list { margin-top: 0; gap: 22px; }
.contact-card .contact-list .icon { color: var(--brown-medium); }
.contact-card .phone-note { font-size: .8125rem; color: var(--muted); }
.hours { margin-top: 30px; padding-top: 26px; border-top: 1px solid var(--border); }
.hours h3 { font-family: var(--font-sans); font-size: .75rem; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; color: var(--brown-medium); margin-bottom: 14px; }
.hours dl { display: grid; grid-template-columns: 1fr auto; gap: 8px 20px; margin: 0; font-size: .9375rem; }
.hours dt { color: var(--text); }
.hours dd { margin: 0; color: var(--muted); font-variant-numeric: tabular-nums; }
.form-panel { scroll-margin-top: calc(var(--header-h) + 24px); }
.form-panel > h2 { margin-bottom: 12px; }
.form-panel > p { color: var(--muted); margin-bottom: 32px; max-width: 56ch; }
.map-band { height: 440px; background: var(--sand-light); }
@media (max-width: 1024px) { .contact-layout { grid-template-columns: 1fr; gap: 40px; } }
@media (max-width: 640px) { .contact-card { padding: 28px 22px; } .map-band { height: 360px; } }

/* ---------- sobre nós (página) ---------- */
.story { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); gap: 48px 96px; align-items: start; }
.story h2 { max-width: 21ch; }                /* PC: 3 linhas */
.story__text p { color: var(--muted); font-size: 1.0625rem; max-width: 62ch; }
.story__text p strong { color: var(--text); }
/* título que acompanha o texto: desce com o scroll até ao fim do texto e sobe com ele (só com 2 colunas) */
.story--sticky > :first-child { position: sticky; top: calc(var(--header-h) + 32px); }
@media (max-width: 1180px) { .story--sticky > :first-child { position: static; } }
.age-note { margin-top: 28px; padding-left: 18px; border-left: 2px solid var(--sand); font-size: .875rem; color: var(--muted); max-width: 56ch; }
.video-block { max-width: 960px; margin-inline: auto; }
.video-block.about-grid__video { max-width: 960px; margin-bottom: 0; }
.video-block__hint { margin-top: 52px; text-align: center; }
@media (max-width: 640px) { .video-block__hint { margin-top: 36px; } }
.funding { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); gap: 32px 72px; align-items: center; }
.funding__logos { display: grid; gap: 20px; }
.funding__logos img { width: 100%; max-width: 420px; height: auto; }
@media (max-width: 960px) { .story, .funding { grid-template-columns: 1fr; gap: 28px; } }

/* ---------- páginas legais ---------- */
.table-wrap { margin-top: 20px; overflow-x: auto; border: 1px solid var(--border-soft); border-radius: var(--radius); }
.table-wrap table { width: 100%; min-width: 640px; border-collapse: collapse; font-size: .875rem; }
.table-wrap th, .table-wrap td { padding: 12px 14px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--border-soft); }
.table-wrap th { background: var(--bg-card); font-weight: 600; color: var(--brown-dark); }
.table-wrap tr:last-child td { border-bottom: 0; }

/* ---------- 404 ---------- */
.not-found { min-height: calc(70vh / var(--z)); display: flex; align-items: center; padding-top: calc(var(--header-h) + 40px); padding-bottom: var(--space-xl); }
.not-found p { max-width: 52ch; margin: 20px 0 32px; color: var(--muted); font-size: 1.0625rem; }
.not-found__links { display: flex; flex-wrap: wrap; gap: 12px; }

/* ---------- capacidades em linha (Profissionais) ---------- */
.cap-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 clamp(24px, 3vw, 48px); }
.cap-item { position: relative; padding: 26px 0 0; border-top: 1px solid var(--border); }
.cap-item::before { content: ""; position: absolute; left: 0; top: -1px; height: 2px; width: 44px; background: var(--brown); }
.cap-item .icon { width: 30px; height: 30px; margin-bottom: 16px; color: var(--brown-medium); }
.cap-item h3 { font-size: clamp(1.45rem, 2.1vw, 1.95rem); line-height: 1.12; margin-bottom: 12px; }
.cap-item p { font-size: .9375rem; line-height: 1.6; color: var(--muted); max-width: 30ch; }
@media (max-width: 1024px) { .cap-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 36px 32px; } }
@media (max-width: 560px) { .cap-strip { grid-template-columns: 1fr; gap: 30px; } }
.spec-card__label { margin: 0 0 6px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }

/* banner do topo mais baixo nas páginas Profissionais, Construtores e Particulares */
:is(.page-professionals, .page-developments, .page-private) .page-hero { min-height: 0; }
:is(.page-professionals, .page-developments, .page-private) .page-hero__inner { padding-block: 24px 40px; }
:is(.page-professionals, .page-developments, .page-private) .page-hero__title { max-width: 42ch; font-size: clamp(2rem, 3.7vw, 3.1rem); line-height: 1.06; }
:is(.page-professionals, .page-developments, .page-private) .page-hero__lead { margin-top: 14px; font-size: clamp(.95rem, 1.15vw, 1.05rem); }
:is(.page-professionals, .page-developments, .page-private) .page-hero__actions { margin-top: 22px; }

/* enquadramento da fotografia de cada banner + nitidez em monitores muito largos:
   a fotografia nunca é esticada além de 1700px; os lados ficam em castanho escuro, com desvanecido suave */
.page-professionals .page-hero__img { object-position: center 38%; }
.page-developments .page-hero__img { object-position: center 55%; }
.page-private .page-hero__img { object-position: center 66%; }
@media (min-width: 1721px) {
  :is(.page-professionals, .page-developments, .page-private) .page-hero__media {
    inset: 0 auto 0 50%; width: 1700px; transform: translateX(-50%);
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%);
  }
}

/* faixas laterais (monitores muito largos) mais claras: castanho suave em vez de castanho escuro */
:is(.page-professionals, .page-developments, .page-private) .page-hero { background: #7a665a; }

/* equipamento de madeira (página Serviços) */
.wood-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.wood-grid .spec-card { padding: 32px 30px 34px; }
.wood-grid .spec-card h3 { margin-bottom: 6px; }
.wood-grid .spec-card__label { margin: 0 0 14px; }
@media (max-width: 900px) { .wood-grid { grid-template-columns: 1fr; } }

/* processo sem fotografia: o ícone grande ocupa o lugar da fotografia */
.process-card__photo--icon { display: grid; place-items: center; background: var(--sand-light); }
.process-card__photo--icon img { width: auto; height: 72%; max-width: 60%; object-fit: contain; }

/* ---------- mosaico de projetos: fotografias grandes e pequenas alternadas (layout em js/site/projects.js) ---------- */
.gallery-grid.is-mosaic { grid-auto-flow: dense; gap: 14px; }
.gallery-grid.is-mosaic .gallery-item { aspect-ratio: auto; height: 100%; }
.gallery-item[data-size="big"]   { grid-column: span 2; grid-row: span 2; }
.gallery-item[data-size="wide"]  { grid-column: span 2; }
.gallery-item[data-size="tall"]  { grid-row: span 2; }
.gallery-item[data-size="full"]  { grid-column: 1 / -1; grid-row: span 2; }
.gallery-item[data-size="big"][data-side="right"] { grid-column: 3 / span 2; }
.gallery-item__tag {
  position: absolute; left: 14px; bottom: 12px; z-index: 1; padding: 6px 12px; border-radius: var(--radius);
  background: rgba(250, 246, 238, .92); color: var(--brown-dark);
  font-size: .6875rem; font-weight: 500; letter-spacing: .1em; text-transform: uppercase;
  opacity: 0; transform: translateY(8px); transition: opacity .5s var(--ease), transform .5s var(--ease);
}
.gallery-item:hover .gallery-item__tag, .gallery-item:focus-visible .gallery-item__tag { opacity: 1; transform: none; }
.gallery-grid.is-mosaic .gallery-item img { transition: transform 1.2s cubic-bezier(.22, .61, .36, 1); }
.gallery-grid.is-mosaic .gallery-item:hover img { transform: scale(1.06); }
@media (hover: none) { .gallery-item__tag { opacity: 1; transform: none; } }
.gallery-item.is-queued:not(.is-in) { opacity: 0; }

.gallery-item__tag:empty { display: none; }

/* descrição de cada fotografia (onde foi feito: moradia, hotel, Angola…), sempre visível por baixo */
.gallery-item__place {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1; padding: 44px 18px 16px; text-align: left;
  background: linear-gradient(180deg, rgba(30, 14, 8, 0) 0%, rgba(30, 14, 8, .72) 100%); color: #fff;
  font-size: .9375rem; font-weight: 500; line-height: 1.3; letter-spacing: .01em; pointer-events: none;
  transition: transform .5s var(--ease);
}
.gallery-item__tag.has-place { bottom: auto; top: auto; left: auto; right: 14px; bottom: 14px; }
.gallery-item:hover .gallery-item__place { transform: translateY(-2px); }
@media (max-width: 640px) { .gallery-item__place { padding: 32px 14px 12px; font-size: .8125rem; } .gallery-item__tag.has-place { display: none; } }

/* ---------- páginas legais: índice lateral, resumo, secções numeradas, estado dos cookies ---------- */
.legal-layout { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 56px clamp(40px, 6vw, 96px); align-items: start; }
.legal-aside { position: sticky; top: calc(var(--header-h) + 24px); display: grid; gap: 20px; }
.legal-aside__box { padding: 22px 22px 20px; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius); }
.legal-aside__title { margin: 0 0 12px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }
.legal-toc { counter-reset: toc; display: grid; gap: 2px; }
.legal-toc li { counter-increment: toc; }
.legal-toc a { display: grid; grid-template-columns: 1.7em 1fr; padding: 6px 0; font-size: .875rem; line-height: 1.35; color: var(--muted); text-decoration: none; transition: color .25s; }
.legal-toc a::before { content: counter(toc, decimal-leading-zero); font-variant-numeric: tabular-nums; color: var(--brown-medium); }
.legal-toc a:hover, .legal-toc a.is-current { color: var(--brown-dark); }
.legal-toc a.is-current { font-weight: 600; }
.legal-docs { display: grid; gap: 2px; margin-bottom: 14px; }
.legal-docs a { display: block; padding: 7px 0; font-size: .875rem; color: var(--muted); text-decoration: none; border-bottom: 1px solid var(--border-soft); }
.legal-docs li:last-child a { border-bottom: 0; }
.legal-docs a:hover { color: var(--brown-dark); }
.legal-docs a[aria-current="page"] { color: var(--brown-dark); font-weight: 600; }
.legal { max-width: 760px; }
.legal__lead { font-size: 1.1875rem; line-height: 1.6; color: var(--muted); margin-bottom: 32px; }
.legal-summary { margin-bottom: 40px; padding: 24px 26px; background: var(--bg-card); border-left: 3px solid var(--brown); border-radius: var(--radius); }
.legal-summary__title { margin: 0 0 12px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }
.legal-summary ul { display: grid; gap: 10px; }
.legal-summary li { display: flex; align-items: flex-start; gap: 12px; }
.legal-summary .icon { flex: none; width: 1.2em; height: 1.2em; margin-top: .2em; color: var(--brown-medium); }
.legal-consent { display: grid; grid-template-columns: 1fr auto; gap: 14px 24px; align-items: center; margin-bottom: 40px; padding: 22px 26px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--white); }
.legal-consent__label { margin: 0 0 4px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }
.legal-consent__state { margin: 0; font-family: var(--font-serif); font-size: 1.4rem; line-height: 1.2; color: var(--brown-dark); }
.legal-consent__actions { display: flex; flex-wrap: wrap; gap: 10px; }
.legal-consent__saved { grid-column: 1 / -1; margin: 0; font-size: .8125rem; color: var(--brown-medium); }
.legal-block { scroll-margin-top: calc(var(--header-h) + 24px); }
.legal-block + .legal-block { margin-top: 44px; }
.legal-block h2 { display: flex; align-items: baseline; gap: 16px; font-size: 1.6rem; margin-bottom: 14px; }
.legal-block__n { flex: none; min-width: 1.6em; font-family: var(--font-sans); font-size: .8125rem; font-weight: 500; letter-spacing: .1em; color: var(--brown-medium); }
.legal-list { display: grid; gap: 10px; margin-top: 14px; padding-left: 1.2em; list-style: disc; }
.legal-list li::marker { color: var(--brown-medium); }
.legal-block .table-wrap th[scope="row"] { background: transparent; font-weight: 500; white-space: nowrap; }
.legal__foot { margin-top: 56px; padding-top: 24px; border-top: 1px solid var(--border-soft); font-size: .9375rem; color: var(--muted); }
@media (max-width: 960px) {
  .legal-layout { grid-template-columns: 1fr; gap: 28px; }
  .legal-aside { position: static; grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .legal-aside { grid-template-columns: 1fr; }
  .legal-toc { display: none; }                       /* no telemóvel o índice sai: as secções já são curtas */
  .legal-aside__box:first-child { display: none; }
  .legal-consent { grid-template-columns: 1fr; }
  .legal-block h2 { font-size: 1.35rem; }
  .legal-block .table-wrap th[scope="row"] { white-space: normal; }
}
@media print {
  .site-header, .site-footer, .legal-aside, .cookie-banner, .to-top, .reading-progress, .legal-consent__actions { display: none !important; }
  .legal-layout { grid-template-columns: 1fr; }
  .legal { max-width: none; }
  body { background: #fff; }
}

/* tablet e telemóvel: as fotografias abrem ao tocar nelas, por isso não há botão "Ver fotografias" */
@media (max-width: 1024px) { .service-block [data-lightbox-open] { display: none; } }

/* projetos: filtro por tipo de cliente/obra e etiquetas em cada fotografia */
.filters--types { align-items: center; margin-top: -16px; margin-bottom: 32px; }
.filters__label { margin-right: 6px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }
.filter-btn--type { padding: .5rem .95rem; font-size: .75rem; }
.gallery-item__types { position: absolute; top: 12px; left: 12px; right: 12px; z-index: 1; display: flex; flex-wrap: wrap; gap: 6px; pointer-events: none; }
.gallery-item__types span {
  padding: 5px 10px; border-radius: var(--radius); background: rgba(48, 24, 15, .72); color: var(--bg-soft);
  font-size: .625rem; font-weight: 500; letter-spacing: .12em; text-transform: uppercase;
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
@media (max-width: 640px) {
  .filters--types { flex-wrap: nowrap; overflow-x: auto; margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); scrollbar-width: none; }
  .filters--types::-webkit-scrollbar { display: none; }
  .filters--types .filter-btn, .filters__label { flex: none; }
}

/* banner do topo mais baixo, como em Construtores, também em Serviços, Projetos, Sobre Nós e Contactos (tablet e telemóvel) */
@media (max-width: 1024px) {
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero { min-height: 0; }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__inner { padding-block: 24px 40px; }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__title { font-size: clamp(2rem, 3.7vw, 3.1rem); line-height: 1.06; }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__lead { margin-top: 14px; font-size: clamp(.95rem, 1.15vw, 1.05rem); }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__actions { margin-top: 22px; }
}

/* tablet (641px a 1024px): banner um pouco mais alto e título maior nestas quatro páginas */
@media (min-width: 641px) and (max-width: 1024px) {
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero { min-height: 400px; display: flex; align-items: flex-end; }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__inner { padding-block: 32px 56px; }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__title { font-size: clamp(2.4rem, 5.2vw, 3.4rem); }
  :is(.page-services, .page-projects, .page-about, .page-contact) .page-hero__lead { font-size: 1.05rem; }
}

/* "De uma tradição familiar a um parceiro de produção": 3 linhas no PC, 2 no tablet e no telemóvel */
@media (max-width: 1180px) { .story { grid-template-columns: 1fr; gap: 28px; } .story h2 { max-width: 30ch; } }   /* tablet: 2 linhas */
@media (max-width: 640px) { .story h2 { max-width: none; font-size: clamp(1.35rem, 5.6vw, 1.75rem); } }   /* telemóvel: 2 linhas */

/* "mais detalhes": lista de cartões que abrem ao clicar; fechados mostram uma linha de pré-visualização */
.legal-more-head { margin: 52px 0 18px; padding-top: 28px; border-top: 1px solid var(--border); }
.legal-more-head__title { margin: 0 0 4px; font-size: .75rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--eyebrow); }
.legal-more-head__hint { margin: 0; font-size: .9375rem; color: var(--muted); }
.legal-accordion { display: grid; gap: 10px; }
.legal-block--more { margin-top: 0 !important; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius); transition: background-color .3s var(--ease), border-color .3s var(--ease), box-shadow .3s var(--ease); }
.legal-block--more:hover { border-color: var(--border); }
.legal-block--more[open] { background: var(--white); border-color: var(--border); box-shadow: 0 18px 36px -24px rgba(48, 24, 15, .35); }
.legal-block--more > summary { display: flex; align-items: center; gap: 18px; padding: 18px 22px; cursor: pointer; list-style: none; }
.legal-block--more > summary::-webkit-details-marker { display: none; }
.legal-block--more .legal-block__n { align-self: center; }
.legal-block__head { flex: 1; min-width: 0; display: grid; gap: 3px; }
.legal-block--more > summary h2 { margin: 0; font-size: 1.2rem; transition: color .25s; }
.legal-block__preview { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .875rem; color: var(--muted); transition: opacity .3s, max-height .3s; max-height: 1.6em; }
.legal-block--more[open] .legal-block__preview { opacity: 0; max-height: 0; }
.legal-block__toggle { flex: none; position: relative; width: 34px; height: 34px; border: 1px solid var(--border); border-radius: 50%; transition: background-color .3s, border-color .3s; }
.legal-block__toggle::before, .legal-block__toggle::after { content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 1.5px; background: var(--brown); transform: translate(-50%, -50%); transition: transform .35s var(--ease), opacity .3s; }
.legal-block__toggle::after { transform: translate(-50%, -50%) rotate(90deg); }
.legal-block--more[open] .legal-block__toggle::after { transform: translate(-50%, -50%) rotate(0deg); opacity: 0; }
.legal-block--more > summary:hover .legal-block__toggle { background: var(--brown); border-color: var(--brown); }
.legal-block--more > summary:hover .legal-block__toggle::before, .legal-block--more > summary:hover .legal-block__toggle::after { background: var(--bg-soft); }
.legal-block--more > summary:hover h2 { color: var(--brown); }
.legal-block--more > summary:focus-visible { outline: 2px solid var(--brown); outline-offset: 2px; }
.legal-block__body { padding: 0 22px 24px calc(22px + 18px + 1.6em); }
.legal-block__body p, .legal-block__body li { font-size: .9375rem; line-height: 1.65; color: var(--muted); }
@media (max-width: 640px) { .legal-block--more > summary { padding: 16px 16px; gap: 12px; } .legal-block__body { padding: 0 16px 20px; } .legal-block--more > summary h2 { font-size: 1.05rem; } .legal-block__preview { display: none; } }
@media print { .legal-block__toggle { display: none; } .legal-block__preview { display: none; } }
/* secção que vem depois dos cartões "mais detalhes" (por exemplo "Lei aplicável e litígios") */
.legal-accordion + .legal-block { margin-top: 56px; }
