/* Gerado por build.py a partir de _src/css/ — não editar (editar _src/css/ e correr "python build.py"). */

/* ----- _src/css/base.css ----- */
/* =========================================================================
   COPS — base.css · fundação do design «Moderna e institucional» (maquete v3)
   Tokens, tipografia, estrutura (topo, cabeçalho, menu, rodapé) e TODOS os
   componentes partilhados. Guia de uso: _src/css/GUIA.md.
   Os ficheiros de grupo (servicos.css, empresa.css, pessoas.css, noticias.css)
   só acrescentam o que é próprio das suas páginas — nunca redefinem isto.
   ========================================================================= */

/* ---------- Tipo de letra (local; o site não carrega nada de fora) ---------- */
@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-wght.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-wght-italic.woff2") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}

/* ---------- Tokens ---------- */
:root {
  /* texto e linhas */
  --ink: #13201A;          /* títulos */
  --text: #28342E;         /* corpo */
  --muted: #55625B;        /* texto secundário (contraste AA em branco e em papel) */
  --line: #E3E5DF;         /* linhas e contornos de cartões */
  --line-2: #CFD5CE;       /* contornos em hover, separadores fortes */
  --field-line: #87928B;   /* contorno dos campos de formulário (3:1) */
  /* fundos */
  --white: #FFFFFF;
  --paper: #F5F4EF;        /* secções alternadas, faixa de credenciais, rodapé */
  --mint: #E7F0E9;         /* quadrados de ícone, notas, cartões tipográficos */
  --mint-2: #D6E5DA;
  --photo-bg: #D9E0DA;     /* cor enquanto a fotografia carrega */
  /* marca */
  --green: #00602F;        /* verde COPS: botões, ligações, destaques */
  --green-ink: #004B24;    /* hover dos botões */
  --deep: #0A3A23;         /* a ÚNICA faixa escura (números) e a citação */
  --deep-2: #0D4429;
  --tile-deep: #0B2216;    /* base sólida dos mosaicos fotográficos */
  --deep-line: rgba(255, 255, 255, .18);
  --on-deep-muted: #C3D8CA;
  --on-deep-accent: #8FD0A7;
  --red: #B3000A;          /* só: sede, urgências, campos obrigatórios e erros */
  --red-tint: #FBEAEB;
  /* forma */
  --r-sm: 10px;
  --r: 14px;               /* raio de TODOS os cartões */
  --r-lg: 22px;            /* painéis grandes e fotografias de destaque */
  --r-xl: 28px;            /* painel do pedido de proposta */
  --container: 1240px;
  --gutter: clamp(16px, 4vw, 40px);
  --section: clamp(72px, 8.5vw, 120px);
  --head-gap: clamp(36px, 4.5vw, 56px);  /* entre o cabeçalho da secção e o conteúdo */
  --shadow: 0 1px 2px rgba(19, 32, 26, .06), 0 10px 30px -14px rgba(19, 32, 26, .22);
  --shadow-lg: 0 2px 4px rgba(19, 32, 26, .05), 0 24px 48px -20px rgba(19, 32, 26, .32);
  --ease: cubic-bezier(.2, .7, .2, 1);
  --hh: 76px;              /* altura do cabeçalho fixo */
  --font: "Hanken Grotesk", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  color-scheme: light;
}

/* ---------- Reposição ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(var(--hh) + 20px); }
body {
  margin: 0;
  background: var(--white);
  color: var(--text);
  font-family: var(--font);
  font-size: 17px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
body.menu-open { overflow: hidden; }
img, svg, video { max-width: 100%; display: block; }
img { height: auto; }
a { color: inherit; }
p { margin: 0 0 1em; }
h1, h2, h3, h4 { color: var(--ink); margin: 0; font-weight: 700; }
ul, ol { margin: 0; padding: 0; list-style: none; }
dl, dd, figure, blockquote { margin: 0; }
address { font-style: normal; }
button, input, select, textarea { font: inherit; color: inherit; }
strong, b { font-weight: 700; }
[hidden] { display: none !important; }
:focus-visible { outline: 3px solid var(--green); outline-offset: 3px; }
.figures :focus-visible, .quote-card :focus-visible, .ops-bar:focus-visible { outline-color: #fff; }
::selection { background: var(--mint-2); color: var(--ink); }

/* Ícones Lucide (o build.py troca <i data-lucide="…"> por <svg class="lucide …">) */
svg.lucide { width: 20px; height: 20px; flex: none; stroke-width: 1.8; }

/* ---------- Utilitários ---------- */
.container { width: 100%; max-width: calc(var(--container) + 2 * var(--gutter)); margin-inline: auto; padding-inline: var(--gutter); }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.nowrap { white-space: nowrap; }
.muted { color: var(--muted); }
.measure { max-width: 40em; }
.mt-0 { margin-top: 0 !important; }
.mb-0 { margin-bottom: 0 !important; }
/* Nota de custo da chamada — obrigatória junto de cada número de telefone */
.cost { display: block; font-size: .78rem; line-height: 1.35; font-weight: 500; color: var(--muted); letter-spacing: 0; }

.skip-link { position: absolute; left: 16px; top: -80px; z-index: 100; background: var(--ink); color: #fff; padding: 12px 18px; border-radius: var(--r-sm); font-weight: 600; text-decoration: none; transition: top .2s; }
.skip-link:focus { top: 12px; }

/* ---------- Tipografia ---------- */
.h1, .page-hero h1 { font-size: clamp(2.25rem, 1.35rem + 3vw, 3.75rem); line-height: 1.03; letter-spacing: -.035em; text-wrap: balance; }
.h2, .section-head h2 { font-size: clamp(2rem, 1.25rem + 2.5vw, 3.375rem); line-height: 1.04; letter-spacing: -.032em; text-wrap: balance; }
.h3 { font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem); line-height: 1.12; letter-spacing: -.022em; text-wrap: balance; }
.hl { color: var(--green); }
.lead { font-size: clamp(1.0625rem, 1rem + .3vw, 1.25rem); line-height: 1.6; color: var(--muted); max-width: 34em; margin: 0 0 34px; }
.lead a { color: var(--green); font-weight: 600; text-underline-offset: 3px; }
.lead strong { color: var(--ink); }

/* Sobretítulo com os dois raios da marca (verde e vermelho) */
.eyebrow { display: inline-flex; align-items: center; gap: 10px; margin: 0 0 18px; font-size: .8125rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--green); }
.eyebrow::before { content: ""; flex: none; width: 9px; height: 14px; background: linear-gradient(90deg, var(--green) 0 3px, transparent 3px 6px, var(--red) 6px 9px); border-radius: 1px; transform: skewX(-20deg); }
.eyebrow-plain::before { display: none; }

/* ---------- Botões e ligações ---------- */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: .6em; min-height: 48px; padding: .7em 1.35em; border-radius: 999px; border: 1.5px solid transparent; font: inherit; font-size: 1rem; font-weight: 600; line-height: 1.2; text-align: center; text-decoration: none; cursor: pointer; transition: background-color .2s, border-color .2s, color .2s, box-shadow .2s; }
.btn svg.lucide { width: 18px; height: 18px; transition: transform .25s var(--ease); }
.btn:hover .lucide-arrow-right { transform: translateX(3px); }
.btn:disabled { opacity: .65; cursor: progress; }
.btn-primary { background: var(--green); color: #fff; }
.btn-primary:hover { background: var(--green-ink); box-shadow: 0 8px 20px -10px rgba(0, 96, 47, .6); }
.btn-ghost { background: #fff; color: var(--ink); border-color: var(--line-2); }
.btn-ghost:hover { border-color: var(--ink); }
.btn-on-deep { background: transparent; border-color: rgba(255, 255, 255, .45); color: #fff; }
.btn-on-deep:hover { border-color: #fff; background: rgba(255, 255, 255, .06); }
.btn-lg { min-height: 56px; padding: .85em 1.65em; font-size: 1.0625rem; }
.btn-sm { min-height: 44px; padding: .6em 1.15em; font-size: .95rem; }
.btn-block { width: 100%; }
.btn-row { display: flex; flex-wrap: wrap; gap: 12px; }
.btn-row .cost { flex-basis: 100%; }

.link-arrow { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: var(--green); text-decoration: none; padding-block: 4px 2px; background: linear-gradient(currentColor, currentColor) 0 100% / 0 1.5px no-repeat; transition: background-size .3s var(--ease); }
.link-arrow:hover { background-size: 100% 1.5px; }
.link-arrow svg.lucide { width: 18px; height: 18px; transition: transform .25s var(--ease); }
.link-arrow:hover .lucide-arrow-right { transform: translateX(3px); }
.link-arrow:hover .lucide-arrow-left { transform: translateX(-3px); }

/* «Saber mais →» dentro de um cartão-ligação (o cartão inteiro é o <a>) */
.more { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; font-size: .97rem; }
.more svg.lucide { width: 18px; height: 18px; transition: transform .25s var(--ease); }
a:hover .more .lucide-arrow-right, a:focus-visible .more .lucide-arrow-right { transform: translateX(4px); }

/* Quadrado de ícone (verde sobre menta) */
.ic { width: 48px; height: 48px; border-radius: 12px; display: grid; place-items: center; flex: none; background: var(--mint); color: var(--green); }
.ic svg.lucide { width: 24px; height: 24px; }
.ic-sm { width: 40px; height: 40px; border-radius: 10px; }
.ic-sm svg.lucide { width: 20px; height: 20px; }
.ic-lg { width: 64px; height: 64px; border-radius: 16px; }
.ic-lg svg.lucide { width: 30px; height: 30px; }

/* Etiquetas */
.badge { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; background: var(--mint); color: var(--green-ink); font-size: .75rem; font-weight: 700; letter-spacing: .02em; white-space: nowrap; }
.badge-hq, .badge-red { background: var(--red-tint); color: var(--red); }
.badge-line { background: #fff; border: 1px solid var(--line-2); color: var(--ink); }

/* =========================================================================
   TOPO · CABEÇALHO · MENU
   ========================================================================= */
.topbar { background: var(--paper); border-bottom: 1px solid var(--line); font-size: .8125rem; color: var(--muted); }
.topbar-in { display: flex; justify-content: space-between; align-items: center; gap: 24px; min-height: 42px; }
.topbar p { margin: 0; display: flex; align-items: center; gap: 14px; flex: none; white-space: nowrap; }
.topbar a { color: var(--ink); text-decoration: none; display: inline-flex; align-items: center; gap: 7px; padding-block: 6px; }
.topbar a:hover { color: var(--green); }
.topbar a strong { font-variant-numeric: tabular-nums; font-weight: 700; }
.topbar svg.lucide { width: 15px; height: 15px; color: var(--green); }
.topbar .dot { width: 3px; height: 3px; border-radius: 50%; background: var(--line-2); flex: none; }
.topbar .tb-cost { color: var(--muted); }
@media (max-width: 1279px) { .tb-left { display: none !important; } .topbar-in { justify-content: flex-end; } }
@media (max-width: 899px) { .tb-mail, .tb-mail-dot { display: none !important; } }
@media (max-width: 767px) { .topbar { display: none; } }

.site-header { position: sticky; top: 0; z-index: 50; background: rgba(255, 255, 255, .95); -webkit-backdrop-filter: saturate(1.4) blur(12px); backdrop-filter: saturate(1.4) blur(12px); border-bottom: 1px solid transparent; transition: border-color .25s, box-shadow .25s; }
.site-header.scrolled, .menu-open .site-header { border-bottom-color: var(--line); box-shadow: 0 10px 30px -24px rgba(19, 32, 26, .45); }
.header-in { display: flex; align-items: center; gap: 28px; min-height: var(--hh); }
.brand { display: flex; align-items: center; gap: 16px; text-decoration: none; flex: none; border-radius: 6px; }
.brand img { height: 64px; width: auto; }

.nav { margin-left: auto; }
.nav-list { display: flex; align-items: center; gap: 2px; }
.nav-item { position: relative; display: flex; align-items: center; }
.nav-link { position: relative; display: block; padding: 10px 12px; color: var(--ink); font-weight: 500; font-size: .96875rem; text-decoration: none; border-radius: 8px; }
.nav-link::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 4px; height: 2px; border-radius: 2px; background: var(--green); transform: scaleX(0); transform-origin: left; transition: transform .25s var(--ease); }
.nav-link:hover::after, .nav-link[aria-current]::after { transform: scaleX(1); }
.nav-link[aria-current] { color: var(--green); }
.nav-arrow { display: none; }
.has-sub > .nav-link { padding-right: 2px; }
.has-sub > .nav-link::after { right: 2px; }
.sub-toggle { display: inline-grid; place-items: center; width: 26px; height: 34px; margin-right: 4px; padding: 0; border: 0; border-radius: 6px; background: none; color: var(--ink); cursor: pointer; }
.sub-toggle svg.lucide { width: 16px; height: 16px; transition: transform .25s var(--ease); }
.has-sub.is-open > .sub-toggle svg.lucide { transform: rotate(180deg); }
.nav-item:has(> .nav-link[aria-current]) > .sub-toggle { color: var(--green); }

/* Submenu (Serviços, A COPS): painel branco com ícone + nome + resumo */
.sub { position: absolute; top: calc(100% + 10px); left: -10px; z-index: 60; width: max-content; min-width: 340px; max-width: 400px; padding: 10px; background: #fff; border: 1px solid var(--line); border-radius: var(--r); box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(6px); transition: opacity .2s, transform .2s var(--ease), visibility 0s linear .2s; }
.sub::before { content: ""; position: absolute; left: 0; right: 0; top: -14px; height: 14px; }
.has-sub.is-open > .sub { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
@media (min-width: 1120px) and (hover: hover) {
  .has-sub:hover > .sub { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
  .has-sub:hover > .sub-toggle svg.lucide { transform: rotate(180deg); }
}
.sub-list { display: grid; gap: 2px; }
.sub-list a { display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 14px; align-items: center; padding: 10px 12px; border-radius: var(--r-sm); color: var(--ink); text-decoration: none; transition: background-color .2s; }
.sub-list a:hover, .sub-list a:focus-visible { background: var(--paper); }
.sub-list a[aria-current] strong { color: var(--green); }
.sub-list .ic { width: 40px; height: 40px; border-radius: 10px; }
.sub-list .ic svg.lucide { width: 20px; height: 20px; }
.sub-list strong { display: block; font-size: .96rem; font-weight: 600; line-height: 1.3; }
.sub-list small { display: block; margin-top: 1px; font-size: .8125rem; line-height: 1.35; color: var(--muted); }
.sub-all { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 6px; padding: 12px 12px 6px; border-top: 1px solid var(--line); color: var(--green); font-weight: 600; font-size: .95rem; text-decoration: none; }
.sub-all svg.lucide { width: 18px; height: 18px; transition: transform .25s var(--ease); }
.sub-all:hover .lucide-arrow-right { transform: translateX(3px); }

.nav-extra { display: none; }
.menu-btn { display: none; align-items: center; gap: 8px; min-height: 44px; padding: 0 16px; border: 1.5px solid var(--line-2); border-radius: 999px; background: #fff; color: var(--ink); font-weight: 600; font-size: .95rem; cursor: pointer; transition: border-color .2s; }
.menu-btn:hover { border-color: var(--ink); }
.menu-btn .i-close { display: none; }
.menu-btn[aria-expanded="true"] .i-open { display: none; }
.menu-btn[aria-expanded="true"] .i-close { display: block; }

@media (max-width: 1119px) {
  .menu-btn { display: inline-flex; }
  .header-cta { margin-left: auto; }
  .nav { display: none; position: absolute; left: 0; right: 0; top: 100%; height: calc(100vh - var(--menu-top, 76px) + 1px); height: calc(100dvh - var(--menu-top, 76px) + 1px); margin: 0; background: #fff; border-top: 1px solid var(--line); padding: 8px var(--gutter) 40px; overflow: auto; overscroll-behavior: contain; }
  .nav.open { display: block; animation: menuIn .28s var(--ease) both; }
  .nav-list { flex-direction: column; align-items: stretch; gap: 0; max-width: 720px; margin-inline: auto; }
  .nav-item { flex-wrap: wrap; border-bottom: 1px solid var(--line); }
  .nav-link { flex: 1; display: flex; justify-content: space-between; align-items: center; padding: 16px 2px; font-size: 1.1875rem; font-weight: 600; border-radius: 0; }
  .nav-link::after { display: none; }
  .nav-arrow { display: block; width: 18px !important; height: 18px !important; color: var(--green); }
  .has-sub > .nav-link { padding-right: 2px; }
  .sub-toggle { width: 48px; height: 48px; margin: 0 -10px 0 0; color: var(--green); }
  .sub-toggle svg.lucide { width: 20px; height: 20px; }
  .sub { position: static; display: none; width: 100%; min-width: 0; max-width: none; padding: 0 0 14px; border: 0; border-radius: 0; box-shadow: none; opacity: 1; visibility: visible; transform: none; transition: none; }
  .sub::before { display: none; }
  .has-sub.is-open > .sub { display: block; }
  .sub-list a { grid-template-columns: 34px minmax(0, 1fr); gap: 12px; padding: 9px 4px; }
  .sub-list .ic { width: 34px; height: 34px; border-radius: 9px; }
  .sub-list .ic svg.lucide { width: 18px; height: 18px; }
  .sub-list strong { font-size: 1rem; }
  .sub-list small { display: none; }
  .sub-all { margin-top: 4px; padding: 10px 4px 0; border-top: 0; }
  .nav-extra { display: grid; gap: 12px; max-width: 720px; margin: 28px auto 0; }
  .nav-extra .btn { width: 100%; }
  .nav-call { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .nav-call a { display: block; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r); background: var(--paper); text-decoration: none; color: var(--ink); }
  .nav-call small { display: block; font-size: .8125rem; color: var(--muted); font-weight: 500; }
  .nav-call strong { display: block; font-size: 1.25rem; letter-spacing: -.01em; font-variant-numeric: tabular-nums; margin: 2px 0; }
}
@keyframes menuIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@media (max-width: 559px) {
  :root { --hh: 68px; }
  .header-in { gap: 10px; }
  .header-cta { min-height: 42px; padding: .5em 1.05em; font-size: .9rem; }
  .menu-btn { width: 44px; padding: 0; justify-content: center; }
  .menu-btn .lbl { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .nav-call { grid-template-columns: minmax(0, 1fr); }
}
/* «Pedir proposta» no cabeçalho cabe até aos 360 px (iPhone SE/mini: 375 px); abaixo disso fica só no menu */
@media (max-width: 559px) { .brand img { height: 48px; } }
@media (max-width: 379px) { .brand img { height: 38px; } }
@media (max-width: 359px) { .header-cta { display: none; } .menu-btn { margin-left: auto; } }

/* =========================================================================
   SECÇÕES
   ========================================================================= */
.section { padding: var(--section) 0; }
.section-paper { background: var(--paper); }
.section-tight { padding: clamp(48px, 6vw, 80px) 0; }
/* Depois do topo de uma página interior (separado por um filete), a 1.ª secção branca encosta um pouco mais */
.page-hero + .section:not(.section-paper) { padding-top: clamp(48px, 6vw, 88px); }
/* Duas secções brancas seguidas: a segunda não soma o seu espaço de cima ao da primeira.
   (Secção em fundo papel → sempre a classe .section-paper; num partial: {{> clientes section-paper}}.) */
.section:not(.section-paper) + .section:not(.section-paper) { padding-top: 0; }

/* Cabeçalho de secção: título à esquerda, texto (ou ligação) à direita, alinhados em baixo */
.section-head { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 20px 72px; align-items: end; margin-bottom: var(--head-gap); }
.section-head > :only-child { grid-column: 1 / -1; max-width: 46rem; }
.section-head .eyebrow { margin-bottom: 18px; }
.section-lead { font-size: 1.125rem; color: var(--muted); margin: 0 0 6px; max-width: 34em; }
.section-head .section-lead + .link-arrow, .section-head .section-lead + .btn-row { margin-top: 14px; }
/* Variante empilhada: título e texto um por baixo do outro */
.section-head-stack { grid-template-columns: minmax(0, 1fr); max-width: 50rem; gap: 18px; }
.section-head-stack .section-lead { margin: 0; }
@media (max-width: 899px) { .section-head { grid-template-columns: minmax(0, 1fr); } }

/* Grelhas genéricas */
.grid-2, .grid-3, .grid-4 { display: grid; gap: 16px; }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1023px) { .grid-3, .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) { .grid-2, .grid-3, .grid-4 { grid-template-columns: minmax(0, 1fr); gap: 12px; } }

/* Bloco texto + fotografia (fotografia à direita; .split-reverse põe-na à esquerda) */
.split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(36px, 5.5vw, 88px); align-items: center; }
.split-reverse > .split-media { order: -1; }
.split-media { margin: 0; border-radius: var(--r-lg); overflow: hidden; aspect-ratio: 4 / 3; background: var(--photo-bg); }
.split-media img { width: 100%; height: 100%; object-fit: cover; }
.split-copy > :last-child { margin-bottom: 0; }
.split-copy h2 { margin-bottom: 18px; }
.split-copy > p:not(.eyebrow) { color: var(--muted); }
@media (max-width: 899px) { .split { grid-template-columns: minmax(0, 1fr); } .split-reverse > .split-media { order: 0; } .split-media { aspect-ratio: 16 / 10; } }

/* Fotografia solta com legenda opcional (proporção em --ar) */
.photo { margin: 0; }
.photo img { width: 100%; aspect-ratio: var(--ar, 4 / 3); object-fit: cover; border-radius: var(--r-lg); background: var(--photo-bg); }
.photo figcaption { margin-top: 10px; font-size: .8125rem; color: var(--muted); }

/* Páginas de estado (body_class: page-status — pedido recebido, candidatura e subscrição recebidas, 404):
   sem caminho por cima, por isso mais espaço no topo; ícone grande por cima do sobretítulo */
.page-status .page-hero { padding-top: clamp(48px, 7vw, 104px); }
.status > .ic { margin-bottom: 28px; }
.status-help { max-width: 420px; margin-top: clamp(32px, 4vw, 48px); }

/* Coluna principal + coluna lateral fixa (páginas de serviço, políticas…) */
.with-aside { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: clamp(32px, 5vw, 72px); align-items: start; }
.side-card { position: sticky; top: calc(var(--hh) + 24px); display: grid; gap: 16px; padding: clamp(22px, 2.4vw, 28px); border: 1px solid var(--line); border-radius: var(--r); background: var(--paper); }
.side-card .btn { width: 100%; }
.aside-title { margin: 0; font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
@media (max-width: 959px) { .with-aside { grid-template-columns: minmax(0, 1fr); } .side-card { position: static; } }

/* Bloco de conteúdo dentro de uma coluna (título + texto + lista), com ritmo vertical */
.block + .block { margin-top: clamp(48px, 6vw, 72px); }
.block > h2 { font-size: clamp(1.625rem, 1.2rem + 1.4vw, 2.25rem); line-height: 1.1; letter-spacing: -.025em; margin-bottom: 18px; text-wrap: balance; }
.block > p:not(.eyebrow) { color: var(--muted); max-width: 40em; }

/* =========================================================================
   TOPO DA PÁGINA INICIAL
   ========================================================================= */
.hero { padding: clamp(36px, 6vw, 88px) 0 clamp(56px, 7vw, 104px); overflow: hidden; }
.hero-grid { display: grid; grid-template-columns: minmax(0, 1.02fr) minmax(0, 1fr); gap: clamp(40px, 5.5vw, 88px); align-items: center; }
.hero h1 { font-size: clamp(2.375rem, 1.15rem + 4vw, 4.5rem); line-height: 1.01; letter-spacing: -.037em; margin: 0 0 26px; text-wrap: balance; }
.hero-note { display: flex; align-items: center; gap: 10px; margin: 26px 0 0; font-size: .9375rem; color: var(--muted); }
.hero-note svg.lucide { width: 18px; height: 18px; color: var(--green); }
.hero-media { position: relative; }
.hero-photo { margin: 0; border-radius: var(--r-lg); overflow: hidden; aspect-ratio: 1 / 1.04; background: var(--photo-bg); }
.hero-photo img { width: 100%; height: 100%; object-fit: cover; object-position: 58% 50%; animation: settle 1.8s var(--ease) both; }
@keyframes settle { from { transform: scale(1.06); } to { transform: scale(1); } }
.ops-card { position: absolute; left: -36px; bottom: 36px; display: grid; gap: 2px; min-width: 276px; padding: 20px 24px 20px 22px; background: #fff; border-radius: 16px; box-shadow: var(--shadow-lg); color: var(--ink); text-decoration: none; border-left: 4px solid var(--green); transition: transform .3s var(--ease), box-shadow .3s; }
.ops-card:hover { transform: translateY(-2px); }
.ops-card .lbl { display: flex; align-items: center; gap: 8px; font-size: .8125rem; font-weight: 600; color: var(--muted); }
.ops-card .lbl svg.lucide { width: 16px; height: 16px; color: var(--green); }
.ops-card strong { font-size: 1.75rem; letter-spacing: -.02em; line-height: 1.2; font-variant-numeric: tabular-nums; }
@media (max-width: 959px) {
  .hero-grid { grid-template-columns: minmax(0, 1fr); }
  .hero-photo { aspect-ratio: 16 / 10; }
  .ops-card { position: relative; left: auto; bottom: auto; margin: -48px 16px 0; min-width: 0; }
}
@media (max-width: 599px) { .hero-photo { aspect-ratio: 4 / 3; } }
@media (max-width: 479px) { .hero .btn-row .btn { width: 100%; } }

/* =========================================================================
   TOPO DAS PÁGINAS INTERIORES (claro: caminho, título, texto, fotografia opcional)
   ========================================================================= */
.page-hero { padding: clamp(20px, 2.6vw, 32px) 0 clamp(44px, 5.5vw, 80px); border-bottom: 1px solid var(--line); }
.page-hero + .trust { border-top: 0; }
.page-hero .crumbs { margin-bottom: clamp(28px, 4vw, 56px); }
.page-hero h1 { margin: 0 0 22px; }
.page-hero .lead { margin-bottom: 30px; }
.page-hero-copy { max-width: 52rem; }
.page-hero-copy > :last-child { margin-bottom: 0; }
.page-hero-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: clamp(36px, 5vw, 80px); align-items: center; }
.page-hero-photo { margin: 0; border-radius: var(--r-lg); overflow: hidden; aspect-ratio: 5 / 4; background: var(--photo-bg); }
.page-hero-photo img { width: 100%; height: 100%; object-fit: cover; animation: settle 1.8s var(--ease) both; }
.page-meta { margin: -8px 0 0; font-size: .875rem; color: var(--muted); }
/* Fotografia espelhada no topo (só por composição) — mantém o espelho depois da animação */
.hero-photo img.mirror, .page-hero-photo img.mirror { animation-name: settle-mirror; }
@keyframes settle-mirror { from { transform: scale(-1.06, 1.06); } to { transform: scale(-1, 1); } }
/* Sem fotografia adequada: bloco tipográfico no lugar da fotografia (sigla grande em verde sobre menta) */
.page-hero-type { display: flex; flex-direction: column; justify-content: space-between; gap: 24px; aspect-ratio: 5 / 4; padding: clamp(24px, 3.4vw, 44px); border-radius: var(--r-lg); background: var(--mint); }
.page-hero-type .row { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.page-hero-type .big { font-size: clamp(4rem, 2.6rem + 4.5vw, 7.5rem); font-weight: 800; letter-spacing: -.05em; line-height: .85; color: var(--green); }
.page-hero-type .row svg.lucide { width: 40px; height: 40px; color: var(--green); }
.page-hero-type .cap { margin: 0; font-size: 1.0625rem; font-weight: 600; line-height: 1.35; color: var(--ink); }
.page-hero-type .cap span { display: block; font-size: .9375rem; font-weight: 500; color: var(--muted); }
/* Factos rápidos por baixo do texto (ex.: Alvará 175 A · 24/7 · MAI) */
.hero-facts { display: flex; flex-wrap: wrap; gap: 10px 22px; margin: 26px 0 0; }
.hero-facts li { display: inline-flex; align-items: center; gap: 8px; font-size: .9375rem; color: var(--muted); }
.hero-facts svg.lucide { width: 18px; height: 18px; color: var(--green); }
/* Painel claro na coluna do topo, no lugar da fotografia (ex.: números em Serviços, contactos diretos em Contactos) */
.hero-panel { display: grid; gap: 16px; align-content: start; padding: clamp(22px, 3vw, 36px); border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--paper); }
@media (max-width: 479px) { .hero-panel { padding: 20px 16px; border-radius: 20px; } }
@media (max-width: 959px) {
  .page-hero-grid { grid-template-columns: minmax(0, 1fr); }
  .page-hero-photo { aspect-ratio: 16 / 10; }
}
@media (max-width: 959px) { .page-hero-type { aspect-ratio: auto; min-height: 220px; } }
@media (max-width: 599px) { .page-hero-photo { aspect-ratio: 4 / 3; } }
@media (max-width: 479px) { .page-hero .btn-row .btn { width: 100%; } }

/* Caminho (gerado pelo build.py a partir de «crumbs:») */
.crumbs ol { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 0; font-size: .875rem; color: var(--muted); }
.crumbs li { display: inline-flex; align-items: center; min-width: 0; }
.crumbs li + li::before { content: ""; width: 6px; height: 6px; margin: 0 12px 0 10px; border-top: 1.5px solid var(--line-2); border-right: 1.5px solid var(--line-2); transform: rotate(45deg); flex: none; }
.crumbs a { color: var(--ink); text-decoration: none; padding-block: 6px; }
.crumbs a:hover { color: var(--green); text-decoration: underline; text-underline-offset: 3px; }
.crumbs [aria-current] { color: var(--muted); overflow-wrap: anywhere; }

/* =========================================================================
   FAIXA DE CREDENCIAIS (partial «credenciais»)
   ========================================================================= */
.trust { background: var(--paper); border-block: 1px solid var(--line); }
.trust-list { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 1px; background: var(--line); }
.trust-list li { display: flex; gap: 14px; align-items: flex-start; padding: 28px 22px; background: var(--paper); }
.trust-list li:first-child { padding-left: 0; }
.trust-list li:last-child { padding-right: 0; }
.trust-list svg.lucide { width: 26px; height: 26px; color: var(--green); margin-top: 1px; }
.trust-list strong { display: block; color: var(--ink); font-size: 1rem; line-height: 1.3; font-weight: 700; }
.trust-list span { display: block; margin-top: 3px; color: var(--muted); font-size: .875rem; line-height: 1.4; }
@media (max-width: 1099px) {
  .trust-list { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .trust-list li { grid-column: span 2; padding: 24px 20px; }
  .trust-list li:nth-child(n+4) { grid-column: span 3; }
  .trust-list li:first-child, .trust-list li:nth-child(4) { padding-left: 0; }
  .trust-list li:last-child, .trust-list li:nth-child(3) { padding-right: 0; }
}
@media (max-width: 639px) {
  .trust-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .trust-list li, .trust-list li:nth-child(n+4) { grid-column: auto; flex-direction: column; gap: 8px; padding: 18px 14px; }
  .trust-list li:nth-child(odd) { padding-left: 0; }
  .trust-list li:nth-child(even) { padding-right: 0; }
  .trust-list li:last-child { grid-column: 1 / -1; padding-right: 0; }
  .trust-list strong { font-size: .9375rem; }
  .trust-list span { font-size: .8125rem; }
}

/* =========================================================================
   MOSAICO FOTOGRÁFICO (serviços) e CARTÕES
   ========================================================================= */
.mosaic { display: grid; grid-template-columns: minmax(0, 1.22fr) minmax(0, 1fr) minmax(0, 1fr); grid-auto-rows: minmax(304px, auto); gap: 16px; }
.mosaic-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.tile-tall { grid-row: span 2; }
.tile-wide { grid-column: span 2; }

.tile { position: relative; isolation: isolate; display: flex; flex-direction: column; justify-content: flex-end; min-height: 304px; border-radius: var(--r); overflow: hidden; color: #fff; text-decoration: none; background: var(--photo-bg); transition: box-shadow .3s, background-color .2s; }
a.tile:hover { box-shadow: var(--shadow-lg); }
.tile > img { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; transition: transform 1.1s var(--ease); }
a.tile:hover > img { transform: scale(1.04); }
.tile-photo::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, rgba(7, 24, 15, .1) 0%, rgba(7, 24, 15, .4) 30%, rgba(7, 24, 15, .82) 58%, rgba(7, 24, 15, .94) 100%); }
.tile-body { padding: clamp(22px, 2.4vw, 32px); }
.tile h3 { color: inherit; font-size: 1.5rem; line-height: 1.15; letter-spacing: -.02em; margin: 14px 0 8px; text-wrap: balance; }
.tile-tall h3 { font-size: clamp(1.75rem, 1.2rem + 1.3vw, 2.375rem); }
.tile p { margin: 0 0 18px; max-width: 30em; font-size: 1rem; line-height: 1.5; color: rgba(255, 255, 255, .92); }
.tile .tag { display: inline-block; padding: 5px 11px; border-radius: 999px; background: rgba(7, 24, 15, .5); border: 1px solid rgba(255, 255, 255, .4); font-size: .78rem; font-weight: 600; letter-spacing: .02em; -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.tile:focus-visible { outline-offset: 4px; }
/* Fotografia em cima e texto sobre fundo sólido (quando há texto na fotografia que tem de se ler) */
.tile.tile-split { background: var(--tile-deep); min-height: 520px; }
.tile-split > img { height: 74%; bottom: auto; object-position: 54% 60%; transform-origin: 50% 40%; }
.tile-split::before { background: linear-gradient(180deg, rgba(11, 34, 22, .06) 0%, rgba(11, 34, 22, .1) 44%, rgba(11, 34, 22, .72) 58%, var(--tile-deep) 73%, var(--tile-deep) 100%); }
/* Texto à esquerda sobre gradiente horizontal (a pessoa da fotografia fica à direita) */
.tile-left::before { background: linear-gradient(90deg, rgba(7, 24, 15, .92) 0%, rgba(7, 24, 15, .82) 34%, rgba(7, 24, 15, .3) 62%, rgba(7, 24, 15, .05) 100%); }
.tile-left .tile-body { max-width: min(54%, 360px); }
/* Fotografia espelhada (só por composição; nunca em fotografias com texto) */
.tile > img.mirror { transform: scaleX(-1); }
a.tile:hover > img.mirror { transform: scale(-1.04, 1.04); }
/* Cartão tipográfico (sem fotografia): sigla grande em verde sobre menta */
.tile-type { background: var(--mint); color: var(--ink); justify-content: space-between; }
.tile-type .top { display: flex; justify-content: space-between; align-items: flex-start; padding: clamp(22px, 2.4vw, 32px) clamp(22px, 2.4vw, 32px) 0; }
.tile-type .big { font-size: clamp(3.75rem, 2.6rem + 3vw, 5.75rem); font-weight: 800; letter-spacing: -.05em; line-height: .85; color: var(--green); }
.tile-type .top svg.lucide { width: 30px; height: 30px; color: var(--green); }
.tile-type p { color: var(--text); }
.tile-type .more { color: var(--green); }
a.tile-type:hover { background: var(--mint-2); }
@media (max-width: 1023px) {
  .mosaic { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: auto; }
  .mosaic .tile-tall { grid-row: auto; grid-column: 1 / -1; }
  .mosaic .tile-wide { grid-column: 1 / -1; }
  .tile.tile-split { min-height: 500px; }
}
@media (max-width: 639px) {
  .mosaic, .mosaic-2 { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .mosaic .tile-tall, .mosaic .tile-wide { grid-column: auto; }
  .tile { min-height: 360px; }
  .tile.tile-split { min-height: 520px; }
  .tile-type { min-height: 0; }
  /* No telemóvel, o texto lateral passa para baixo da fotografia, sobre fundo sólido */
  .tile.tile-left { background: var(--tile-deep); min-height: 520px; }
  .tile-left > img { height: 60%; bottom: auto; }
  .tile-left::before { background: linear-gradient(180deg, rgba(11, 34, 22, .06) 0%, rgba(11, 34, 22, .12) 38%, rgba(11, 34, 22, .75) 50%, var(--tile-deep) 60%, var(--tile-deep) 100%); }
  .tile-left .tile-body { max-width: none; }
}

/* Cartão horizontal com fotografia pequena (ex.: alarmes como complemento) */
.row-card { display: grid; grid-template-columns: 240px minmax(0, 1fr) auto; gap: 32px; align-items: center; margin-top: 16px; padding: 14px 32px 14px 14px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; color: var(--text); text-decoration: none; transition: border-color .2s, box-shadow .2s; }
a.row-card:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
.row-card .ph { border-radius: var(--r-sm); overflow: hidden; aspect-ratio: 16 / 10; background: var(--photo-bg); }
.row-card .ph img { width: 100%; height: 100%; object-fit: cover; }
.row-card .k { display: block; margin-bottom: 6px; font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.row-card h3 { font-size: 1.375rem; line-height: 1.25; letter-spacing: -.015em; margin: 0 0 6px; }
.row-card p { margin: 0; font-size: .98rem; color: var(--muted); max-width: 52em; }
.row-card .more { color: var(--green); white-space: nowrap; }
@media (max-width: 1023px) { .row-card { grid-template-columns: 200px minmax(0, 1fr); } .row-card .more { grid-column: 2; } }
@media (max-width: 639px) {
  .row-card { grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 12px 12px 24px; }
  .row-card > div, .row-card .more { padding-inline: 10px; }
  .row-card .more { grid-column: auto; }
}

/* Cartão genérico (branco, contorno fino, raio pequeno). Pode ser <a>, <article> ou <li>. */
.card { position: relative; display: flex; flex-direction: column; padding: clamp(22px, 2.4vw, 28px); border: 1px solid var(--line); border-radius: var(--r); background: #fff; color: var(--text); text-decoration: none; transition: border-color .2s, box-shadow .25s; }
a.card:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
.card > .ic { margin-bottom: 22px; }
.card h3 { margin: 0 0 6px; font-size: 1.1875rem; line-height: 1.25; letter-spacing: -.012em; }
.card p:not(.eyebrow) { margin: 0 0 16px; font-size: .9375rem; line-height: 1.5; color: var(--muted); }
.card > :last-child { margin-bottom: 0; }
.card .more, .card .link-arrow { margin-top: auto; color: var(--green); }
.card .checks { margin-bottom: 18px; }
a.card:hover .ic { background: var(--green); color: #fff; }
.card .ic { transition: background-color .2s, color .2s; }
/* Cartão com fotografia no topo */
.card-photo { padding: 0; overflow: hidden; }
.card-photo .card-img { margin: 0; aspect-ratio: 16 / 10; overflow: hidden; background: var(--photo-bg); }
.card-photo .card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.1s var(--ease); }
a.card-photo:hover .card-img img { transform: scale(1.04); }
.card-photo .card-body { display: flex; flex-direction: column; flex: 1; padding: clamp(20px, 2.2vw, 26px); }
.card-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.card-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.card-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.card-grid > li { display: flex; }
.card-grid > li > .card { flex: 1; }
@media (max-width: 1023px) { .card-grid, .card-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) {
  .card-grid, .card-grid-2, .card-grid-4 { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  /* .card-grid-compact: no telemóvel, cartões de ícone mais baixos (ícone à esquerda, texto à direita) */
  .card-grid-compact .card:not(.card-photo) { display: grid; grid-template-columns: 44px minmax(0, 1fr); column-gap: 16px; align-content: start; padding: 18px 18px 20px 16px; }
  .card-grid-compact .card > .ic { grid-row: 1 / span 3; width: 44px; height: 44px; margin: 0; }
  .card-grid-compact .card h3 { margin-top: 1px; font-size: 1.0625rem; }
  .card-grid-compact .card p:not(.eyebrow) { margin-bottom: 10px; }
  .card-grid-compact .card > p:last-child { margin-bottom: 0; }
}

/* Caixa de ajuda: ícone + frase + ligação (fim de serviços e de setores) */
.hint { display: flex; align-items: center; gap: 20px 28px; margin-top: 16px; padding: 22px 28px; border-radius: var(--r); background: var(--paper); border: 1px solid var(--line); }
.hint .ic { background: #fff; }
.section-paper .hint { background: #fff; }
.section-paper .hint .ic { background: var(--mint); }
.hint p { margin: 0; flex: 1; color: var(--muted); }
.hint strong { color: var(--ink); }
.hint .link-arrow { white-space: nowrap; }
@media (max-width: 719px) { .hint { flex-wrap: wrap; padding: 20px; } .hint p { flex-basis: calc(100% - 76px); } .hint .link-arrow { margin-left: 68px; } }
@media (max-width: 399px) { .hint .ic { display: none; } .hint p { flex-basis: 100%; } .hint .link-arrow { margin-left: 0; white-space: normal; } }

/* =========================================================================
   NÚMEROS — a faixa verde-escura (no máximo UMA por página)
   ========================================================================= */
.figures { background: var(--deep); color: #fff; padding: var(--section) 0; }
.figures-in { display: grid; grid-template-columns: minmax(0, .86fr) minmax(0, 1.3fr); gap: 48px 88px; align-items: start; }
.figures .eyebrow { color: var(--on-deep-accent); }
.figures .eyebrow::before { background: linear-gradient(90deg, var(--on-deep-accent) 0 3px, transparent 3px 6px, #F2A3A7 6px 9px); }
.figures h2 { color: #fff; }
.figures-copy > p:not(.eyebrow) { color: var(--on-deep-muted); font-size: 1.125rem; margin: 24px 0 30px; max-width: 30em; }
.fig-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; column-gap: 28px; }
.fig-grid > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 10px; padding: 26px 0 40px; border-top: 1px solid var(--deep-line); }
.fig-grid dd { margin: 0; font-size: clamp(2.25rem, 1.15rem + 3.3vw, 4.25rem); font-weight: 600; line-height: 1; letter-spacing: -.045em; font-variant-numeric: tabular-nums; color: #fff; white-space: nowrap; }
.fig-grid dd small { font-size: .55em; font-weight: 600; letter-spacing: -.02em; color: var(--on-deep-accent); margin-left: .08em; }
.fig-grid dd .p { color: var(--on-deep-accent); margin-right: .04em; }
.fig-grid dt { font-size: .96875rem; line-height: 1.4; color: var(--on-deep-muted); }
@media (max-width: 999px) { .figures-in { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 599px) { .fig-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 20px; } .fig-grid > div { padding: 22px 0 30px; } }

/* Números em fundo claro (dentro de páginas; não é faixa) */
.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); column-gap: 28px; margin: 0; }
.kpis > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 8px; padding: 20px 0 22px; border-top: 1px solid var(--line-2); }
.kpis dd { margin: 0; font-size: clamp(1.875rem, 1.3rem + 1.6vw, 2.75rem); font-weight: 600; line-height: 1; letter-spacing: -.04em; font-variant-numeric: tabular-nums; color: var(--ink); white-space: nowrap; }
.kpis dd .p, .kpis dd small { color: var(--green); }
.kpis dd small { font-size: .55em; }
.kpis dt { font-size: .9375rem; line-height: 1.4; color: var(--muted); }

/* =========================================================================
   SETORES
   ========================================================================= */
.sectors { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.sectors > li { display: flex; }
.sec { position: relative; isolation: isolate; display: flex; flex-direction: column; flex: 1; min-height: 232px; padding: 26px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; color: var(--text); text-decoration: none; overflow: hidden; transition: border-color .2s, box-shadow .25s; }
a.sec:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
.sec .ic { transition: background-color .2s, color .2s; }
a.sec:hover .ic { background: var(--green); color: #fff; }
.sec h3 { margin: 22px 0 6px; font-size: 1.1875rem; line-height: 1.25; letter-spacing: -.012em; }
.sec p { margin: 0; font-size: .9375rem; line-height: 1.5; color: var(--muted); }
.sec-wide { grid-column: span 2; }
.sec-photo { justify-content: flex-end; min-height: 250px; border: 0; color: #fff; background: var(--photo-bg); }
.sec-photo > img { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; transition: transform 1.1s var(--ease); }
a.sec-photo:hover > img { transform: scale(1.04); }
.sec-photo::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, rgba(7, 24, 15, 0) 22%, rgba(7, 24, 15, .55) 56%, rgba(7, 24, 15, .9) 100%); }
.sec-photo h3 { color: #fff; font-size: 1.375rem; margin-top: 0; }
.sec-photo p { color: rgba(255, 255, 255, .92); max-width: 34em; }
.sec-photo .k { align-self: flex-start; margin-bottom: auto; display: inline-flex; align-items: center; gap: 7px; padding: 5px 11px 5px 9px; border-radius: 999px; background: rgba(7, 24, 15, .55); border: 1px solid rgba(255, 255, 255, .35); font-size: .78rem; font-weight: 600; color: #fff; -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.sec-photo .k svg.lucide { width: 16px; height: 16px; }
@media (max-width: 1023px) { .sectors { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sec { min-height: 210px; } }
@media (max-width: 559px) {
  .sectors { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .sec-wide { grid-column: auto; }
  .sec { min-height: 0; padding: 18px 18px 18px 16px; display: grid; grid-template-columns: 44px minmax(0, 1fr); column-gap: 16px; align-content: start; }
  .sec .ic { grid-row: 1 / 3; width: 44px; height: 44px; }
  .sec h3 { margin: 1px 0 4px; font-size: 1.0625rem; }
  .sec-photo { display: flex; min-height: 300px; padding: 22px; }
  .sec-photo h3 { margin: 0 0 6px; font-size: 1.25rem; }
}

/* =========================================================================
   LISTAS, ETIQUETAS, NOTAS, PASSOS
   ========================================================================= */
/* Diferenciais com ícone (Porquê a COPS) */
.features { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 32px 40px; }
.features li { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 16px; align-items: start; padding-top: 24px; border-top: 1px solid var(--line); }
.features .ic { width: 44px; height: 44px; }
.features .ic svg.lucide { width: 22px; height: 22px; }
.features:not(:last-child) { margin-bottom: clamp(40px, 5vw, 64px); }
.features strong { display: block; color: var(--ink); font-size: 1.0625rem; line-height: 1.3; margin: 2px 0 4px; }
.features li > div > span { display: block; color: var(--muted); font-size: .9375rem; line-height: 1.5; }
.features-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.features-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 32px; }
/* Em fundo papel: linhas um pouco mais fortes e quadrados de ícone brancos */
.section-paper .features li { border-top-color: var(--line-2); }
.section-paper .features .ic { background: #fff; }
@media (max-width: 1099px) { .features-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px 28px; } }
@media (max-width: 899px) { .features { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px 28px; } }
@media (max-width: 559px) { .features, .features-2, .features-4 { grid-template-columns: minmax(0, 1fr); gap: 0; } .features li { padding: 18px 0; } }

/* Lista com visto (uma coluna; .checks-2 em duas) */
.checks { display: grid; gap: 10px; margin: 6px 0 26px; }
.checks-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 24px; }
.checks li { display: flex; gap: 10px; align-items: flex-start; font-size: .98rem; line-height: 1.45; color: var(--text); }
.checks svg.lucide { width: 18px; height: 18px; color: var(--green); margin-top: 2px; }
.checks a { color: var(--green); font-weight: 600; text-underline-offset: 3px; }
.checks strong { color: var(--ink); }
@media (max-width: 479px) { .checks-2 { grid-template-columns: minmax(0, 1fr); } }

/* Etiquetas em linha */
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 24px; }
.chips li { padding: 7px 14px; border-radius: 999px; border: 1px solid var(--line-2); font-size: .9rem; font-weight: 500; line-height: 1.35; color: var(--ink); background: #fff; }
.chips a { color: inherit; text-decoration: none; }
.chips li:has(> a) { padding: 0; }
.chips li > a { display: block; padding: 7px 14px; border-radius: 999px; transition: background-color .2s, color .2s; }
.chips li > a:hover { background: var(--mint); color: var(--green-ink); }
.chips-sm li { padding: 4px 11px; font-size: .8125rem; }

/* Nota (menta) e urgência (filete vermelho) */
.note { display: flex; gap: 12px; align-items: flex-start; margin: 0 0 28px; padding: 16px 18px; border-radius: 12px; background: var(--mint); font-size: .95rem; line-height: 1.5; color: var(--text); }
.note > svg.lucide { color: var(--green); margin-top: 1px; }
.note strong { color: var(--ink); }
.note a { color: var(--green-ink); font-weight: 600; text-underline-offset: 3px; }
.note-line { background: #fff; border: 1px solid var(--line); }
.urgent { display: flex; gap: 14px; align-items: flex-start; margin: 0 0 4px; padding: 18px 20px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--red); }
.urgent > svg.lucide { width: 22px; height: 22px; color: var(--red); margin-top: 2px; }
.urgent p { margin: 0; font-size: .95rem; color: var(--text); }
.urgent strong { color: var(--ink); }
.urgent a { display: inline-block; margin-top: 4px; font-size: 1.625rem; font-weight: 700; letter-spacing: -.015em; color: var(--ink); text-decoration: none; font-variant-numeric: tabular-nums; }
.urgent a:hover { color: var(--green); }

/* Passos numerados — vertical (pedido de proposta) */
.steps { display: grid; gap: 18px; margin: 32px 0 36px; counter-reset: s; }
.steps li { display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 16px; align-items: start; }
.steps li::before { counter-increment: s; content: counter(s); width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--green); color: #fff; font-weight: 700; }
.steps strong { display: block; color: var(--ink); font-size: 1.0625rem; line-height: 1.3; margin-top: 1px; }
.steps span { display: block; color: var(--muted); font-size: .95rem; }
/* Passos numerados — em linha (método, como trabalhamos) */
.steps-row { display: grid; grid-template-columns: repeat(var(--n, 5), minmax(0, 1fr)); gap: 24px; counter-reset: s; }
.steps-row li { position: relative; }
.steps-row li::before { counter-increment: s; content: counter(s); position: relative; z-index: 1; display: grid; place-items: center; width: 44px; height: 44px; margin-bottom: 20px; border-radius: 50%; background: var(--green); color: #fff; font-weight: 700; box-shadow: 0 0 0 6px var(--white); }
.section-paper .steps-row li::before { box-shadow: 0 0 0 6px var(--paper); }
.steps-row li:not(:last-child)::after { content: ""; position: absolute; top: 22px; left: 56px; right: -18px; height: 1px; background: var(--line-2); }
.steps-row h3 { font-size: 1.125rem; line-height: 1.3; letter-spacing: -.01em; margin: 0 0 6px; }
.steps-row p { margin: 0; font-size: .9375rem; line-height: 1.5; color: var(--muted); }
@media (max-width: 959px) {
  .steps-row { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .steps-row li { display: grid; grid-template-columns: 44px minmax(0, 1fr); column-gap: 18px; padding-bottom: 26px; }
  .steps-row li::before { grid-row: 1 / 3; margin: 0; }
  .steps-row li:not(:last-child)::after { top: 50px; bottom: 4px; left: 22px; right: auto; width: 1px; height: auto; }
  .steps-row h3 { margin-top: 10px; }
}

/* Contactos em lista de duas colunas (rótulo, número, nota de custo) */
.contacts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 24px; margin-top: 8px; }
.contacts li { padding: 15px 0; border-bottom: 1px solid var(--line-2); min-width: 0; }
.contacts .lbl { display: block; font-size: .8125rem; color: var(--muted); font-weight: 500; }
.contacts a { display: inline-block; font-size: 1.25rem; font-weight: 700; letter-spacing: -.012em; color: var(--ink); text-decoration: none; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.contacts a:hover { color: var(--green); }
.contacts-1 { grid-template-columns: minmax(0, 1fr); }
.urgent + .contacts { margin-top: 12px; }
@media (max-width: 479px) { .contacts { grid-template-columns: minmax(0, 1fr); } }

/* Documentos (PDF) */
.doc-list { display: grid; gap: 12px; }
.doc-link { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; gap: 16px; align-items: center; padding: 16px 20px 16px 16px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; color: var(--ink); text-decoration: none; transition: border-color .2s, box-shadow .25s; }
.doc-link:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
.doc-link .ic { width: 44px; height: 44px; }
.doc-link strong { display: block; font-size: 1.0625rem; line-height: 1.3; }
.doc-link small { display: block; margin-top: 2px; font-size: .8125rem; color: var(--muted); }
.doc-link > svg.lucide { color: var(--green); }
.doc-link small { overflow-wrap: anywhere; }
.doc-list > li { display: flex; min-width: 0; }
.doc-list > li > .doc-link { flex: 1; min-width: 0; }
.doc-list-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 767px) { .doc-list-2 { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 399px) {
  .doc-link { grid-template-columns: 40px minmax(0, 1fr) auto; gap: 12px; padding: 14px 14px 14px 12px; }
  .doc-link .ic { width: 40px; height: 40px; border-radius: 10px; }
}

/* Lista de clientes (nomes, sem logótipos) */
.clients { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; }
.clients li { padding: 22px 24px; background: #fff; }
.clients strong { display: block; color: var(--ink); font-size: 1.0625rem; line-height: 1.3; }
.clients span { display: block; margin-top: 3px; font-size: .875rem; color: var(--muted); }
@media (max-width: 899px) { .clients { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Em duas colunas, um último nome sozinho ocupa a linha (sem célula vazia) */
@media (min-width: 560px) and (max-width: 899px) { .clients li:last-child:nth-child(odd) { grid-column: 1 / -1; } }
@media (max-width: 559px) { .clients { grid-template-columns: minmax(0, 1fr); } .clients li { padding: 16px 18px; } }

/* =========================================================================
   DELEGAÇÕES + MAPA (partial «delegacoes»)
   ========================================================================= */
.net-card { display: grid; grid-template-columns: minmax(220px, 300px) minmax(0, 1fr); gap: clamp(32px, 5vw, 72px); align-items: center; padding: clamp(24px, 3.6vw, 48px); border-radius: var(--r-lg); background: var(--paper); }
.section-paper .net-card { background: #fff; border: 1px solid var(--line); }
.map { display: block; width: 100%; height: auto; max-height: 600px; overflow: visible; }
.map .land { fill: #DCE7DF; stroke: #9DB4A5; stroke-width: 1.4; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.map .pin .dot { fill: var(--green); stroke: #fff; stroke-width: 3.5; }
.map .pin.hq .dot { fill: var(--red); }
.map .pin .halo { fill: var(--green); opacity: .14; transform-box: fill-box; transform-origin: center; transition: transform .35s var(--ease), opacity .35s; }
.map .pin.hq .halo { fill: var(--red); }
.map .pin.is-on .halo { opacity: .28; transform: scale(1.6); }
.map text { font-family: inherit; font-size: 17px; font-weight: 700; fill: var(--ink); paint-order: stroke; stroke: var(--paper); stroke-width: 5px; stroke-linejoin: round; transition: fill .25s; }
.section-paper .map text { stroke: #fff; }
.map .pin.is-on text { fill: var(--green); }
.map .pin.hq.is-on text { fill: var(--red); }
.offices-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0 0 16px; }
.offices-head h3 { font-size: 1.375rem; letter-spacing: -.015em; }
.offices-head p { margin: 0; font-size: .875rem; color: var(--muted); }
.offices { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.offices li { display: flex; flex-direction: column; gap: 6px; padding: 18px 20px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; transition: border-color .2s, box-shadow .25s; }
.offices li:hover, .offices li:focus-within { border-color: var(--line-2); box-shadow: var(--shadow); }
.offices li.hq { grid-column: 1 / -1; }
.o-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 10px; }
.o-head strong { color: var(--ink); font-size: 1.125rem; line-height: 1.25; letter-spacing: -.01em; }
.offices address { font-size: .9375rem; line-height: 1.45; color: var(--muted); }
.o-tel { margin: auto 0 0; padding-top: 4px; }
.o-tel a { display: inline-flex; align-items: center; gap: 8px; color: var(--ink); font-weight: 700; text-decoration: none; font-variant-numeric: tabular-nums; }
.o-tel a:hover { color: var(--green); }
.o-tel svg.lucide { width: 16px; height: 16px; color: var(--green); }
.o-tel .cost { margin-top: 1px; }
.ops-bar { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 16px; margin-top: 12px; padding: 18px 22px; border-radius: var(--r); background: var(--green); color: #fff; text-decoration: none; transition: background-color .2s; }
.ops-bar:hover { background: var(--green-ink); }
.ops-bar .ic { width: 44px; height: 44px; border-radius: 50%; background: rgba(255, 255, 255, .14); color: #fff; }
.ops-bar .ic svg.lucide { width: 20px; height: 20px; }
.ops-bar small { display: block; font-size: .8125rem; font-weight: 600; color: #D3EBDC; }
.ops-bar strong { display: block; font-size: 1.5rem; line-height: 1.2; letter-spacing: -.015em; font-variant-numeric: tabular-nums; }
.ops-bar .cost { color: #D3EBDC; }
.ops-bar > svg.lucide { transition: transform .25s var(--ease); }
.ops-bar:hover > svg.lucide { transform: translateX(4px); }
@media (max-width: 899px) { .net-card { grid-template-columns: minmax(0, 1fr); gap: 28px; } .map { max-width: 250px; margin-inline: auto; } }
@media (max-width: 599px) {
  .offices { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .offices li { padding: 16px 18px; }
  .map { max-width: 230px; }
  .map text { font-size: 20px; }
  .offices-head { flex-direction: column; gap: 2px; }
  .ops-bar { grid-template-columns: auto minmax(0, 1fr); padding: 16px 18px; }
  .ops-bar > svg.lucide { display: none; }
  .ops-bar strong { font-size: 1.375rem; }
}

/* =========================================================================
   PAINÉIS (formação e carreiras na página inicial; reutilizáveis)
   ========================================================================= */
.tc-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px; align-items: stretch; }
.panel { display: flex; flex-direction: column; border-radius: var(--r-lg); overflow: hidden; background: #fff; border: 1px solid var(--line); }
.panel-top { position: relative; margin: 0; aspect-ratio: 2.4 / 1; background: var(--photo-bg); overflow: hidden; }
.panel-top img { width: 100%; height: 100%; object-fit: cover; }
.panel-type { display: flex; flex-direction: column; justify-content: space-between; padding: clamp(24px, 3vw, 36px); background: var(--mint); }
.panel-type .row { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.panel-type .big { font-size: clamp(3.5rem, 2.4rem + 3vw, 5.5rem); font-weight: 800; letter-spacing: -.05em; line-height: .85; color: var(--green); }
.panel-type .row svg.lucide { width: 34px; height: 34px; color: var(--green); }
.panel-type .cap { margin: 0; font-size: 1rem; font-weight: 600; color: var(--ink); line-height: 1.35; }
.panel-type .cap span { display: block; font-weight: 500; color: var(--muted); font-size: .9375rem; }
.panel-body { display: flex; flex-direction: column; flex: 1; padding: clamp(26px, 3.6vw, 48px); }
.panel h2 { font-size: clamp(1.875rem, 1.25rem + 1.7vw, 2.75rem); line-height: 1.05; letter-spacing: -.03em; margin-bottom: 18px; }
.panel-body > p:not(.eyebrow) { color: var(--muted); }
.panel .actions { margin-top: auto; }
.panel .actions .cost { margin-top: 12px; }
@media (max-width: 959px) { .tc-grid { grid-template-columns: minmax(0, 1fr); } .panel-top { aspect-ratio: 2.6 / 1; } }
@media (max-width: 479px) { .panel-top { aspect-ratio: 2 / 1; } .panel .btn-row .btn { flex: 1 1 auto; } }

/* =========================================================================
   QUALIDADE: certificações + citação
   ========================================================================= */
.q-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 24px; align-items: stretch; }
.certs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 1fr; gap: 12px; }
.certs-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.certs-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.certs li { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 16px; align-items: center; padding: 20px 22px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; }
.certs .ic { width: 44px; height: 44px; }
.certs .ic svg.lucide { width: 22px; height: 22px; }
.certs strong { display: block; color: var(--ink); font-size: 1.0625rem; line-height: 1.25; }
.certs li > div > span { display: block; color: var(--muted); font-size: .875rem; line-height: 1.4; margin-top: 2px; }
.quote-card { position: relative; margin: 0; display: flex; flex-direction: column; padding: clamp(28px, 3.4vw, 44px); border-radius: var(--r-lg); background: var(--deep); color: #fff; overflow: hidden; }
.quote-card .qmark { display: block; width: 46px; height: 32px; margin: 0 0 22px; color: var(--on-deep-accent); fill: none; stroke: currentColor; stroke-width: 4.5; stroke-linecap: round; stroke-linejoin: round; }
.quote-card blockquote p { margin: 0; font-size: clamp(1.25rem, 1.1rem + .5vw, 1.5rem); line-height: 1.42; font-weight: 500; letter-spacing: -.012em; color: #fff; text-wrap: pretty; }
.quote-card figcaption { display: flex; align-items: center; gap: 12px; margin-top: 24px; color: var(--on-deep-muted); font-size: .95rem; }
.quote-card figcaption::before { content: ""; width: 28px; height: 2px; background: var(--on-deep-accent); flex: none; }
.quote-card figcaption strong { color: #fff; font-weight: 700; }
.values { margin-top: auto; padding-top: 28px; }
.values-t { display: block; margin: 0 0 12px; padding-top: 24px; border-top: 1px solid var(--deep-line); font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--on-deep-accent); }
.values ul { display: flex; flex-wrap: wrap; gap: 6px; }
.values li { padding: 5px 11px; border-radius: 999px; border: 1px solid rgba(255, 255, 255, .3); font-size: .8125rem; font-weight: 500; color: #fff; }
@media (max-width: 1023px) { .certs-3, .certs-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 959px) { .q-grid { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 639px) {
  .certs { gap: 10px; }
  .certs li { grid-template-columns: minmax(0, 1fr); align-content: start; gap: 12px; padding: 16px; }
  .certs .ic { width: 38px; height: 38px; border-radius: 10px; }
  .certs strong { font-size: 1rem; }
}
@media (max-width: 339px) { .certs, .certs-3, .certs-4 { grid-template-columns: minmax(0, 1fr); } }

/* =========================================================================
   NOTÍCIAS (cartões gerados pelo build.py)
   ========================================================================= */
.news { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(20px, 3vw, 40px); }
.news > li { display: flex; }
.news-list { row-gap: clamp(40px, 5vw, 56px); }
.news-card { display: flex; flex-direction: column; width: 100%; padding-top: 24px; border-top: 2px solid var(--ink); color: var(--text); text-decoration: none; }
.news-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin: 0; font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--green); }
.news-meta time { color: var(--muted); font-weight: 600; letter-spacing: .04em; }
.news-meta time::before { content: ""; display: inline-block; width: 3px; height: 3px; margin: 0 10px 2px 0; border-radius: 50%; background: var(--line-2); vertical-align: middle; }
.news-cat-externa { color: var(--ink); }
.tag-example { display: inline-flex; padding: 2px 8px; border-radius: 999px; background: var(--red-tint); color: var(--red); font-size: .7rem; letter-spacing: .06em; }
.news-card h2, .news-card h3 { margin: 12px 0; font-size: clamp(1.25rem, 1.1rem + .45vw, 1.5rem); line-height: 1.22; letter-spacing: -.018em; transition: color .2s; text-wrap: balance; }
.news-card:hover h2, .news-card:hover h3 { color: var(--green); }
.news-card p { margin: 0 0 22px; font-size: .98rem; color: var(--muted); }
.news-card .more { margin-top: auto; color: var(--green); }
.news-empty { padding: 28px; border: 1px dashed var(--line-2); border-radius: var(--r); color: var(--muted); }
@media (max-width: 899px) { .news { grid-template-columns: minmax(0, 1fr); gap: 28px; } .news-card { padding-bottom: 4px; } }

/* Separadores Todas · Internas · Externas */
.news-tabs { display: flex; flex-wrap: wrap; gap: 4px; width: fit-content; max-width: 100%; padding: 4px; margin: 0 0 clamp(32px, 4vw, 48px); border: 1px solid var(--line); border-radius: 999px; background: var(--paper); }
.news-tabs a { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 0 18px; border-radius: 999px; color: var(--ink); font-weight: 600; font-size: .96rem; text-decoration: none; transition: background-color .2s, color .2s; }
.news-tabs a:hover { color: var(--green); }
.news-tabs a[aria-current] { background: #fff; color: var(--green); box-shadow: var(--shadow); }
.news-count { display: inline-grid; place-items: center; min-width: 24px; height: 22px; padding: 0 7px; border-radius: 999px; background: var(--mint); color: var(--green-ink); font-size: .75rem; font-weight: 700; }
@media (max-width: 479px) {
  .news-tabs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; border-radius: 14px; }
  .news-tabs a { gap: 6px; padding: 0 6px; border-radius: 10px; font-size: .875rem; }
  .news-count { min-width: 20px; padding: 0 5px; }
}

/* Página de uma notícia: texto + coluna «Mais notícias» */
.article-layout { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: clamp(32px, 5vw, 80px); align-items: start; }
.article-aside { position: sticky; top: calc(var(--hh) + 24px); display: grid; gap: 14px; padding: 24px; border: 1px solid var(--line); border-radius: var(--r); background: var(--paper); }
.article-related li a { display: block; padding: 12px 0; border-bottom: 1px solid var(--line-2); color: var(--ink); font-weight: 600; line-height: 1.35; text-decoration: none; }
.article-related li a:hover { color: var(--green); }
.article-related time { display: block; margin-bottom: 2px; font-size: .8125rem; font-weight: 500; color: var(--muted); }
.article-related .news-empty { padding: 0; border: 0; font-size: .9375rem; }
@media (max-width: 959px) { .article-layout { grid-template-columns: minmax(0, 1fr); } .article-aside { position: static; } }

/* =========================================================================
   TEXTO CORRIDO (notícias, páginas legais, políticas)
   ========================================================================= */
.prose { max-width: 46rem; font-size: 1.0625rem; line-height: 1.7; color: var(--text); }
.prose > * { margin: 0; }
.prose > * + * { margin-top: 1.05em; }
.prose h2 { margin-top: 2.1em; font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem); line-height: 1.15; letter-spacing: -.022em; scroll-margin-top: calc(var(--hh) + 24px); text-wrap: balance; }
.prose h3 { margin-top: 1.8em; font-size: 1.25rem; line-height: 1.3; letter-spacing: -.012em; }
.prose h2 + *, .prose h3 + * { margin-top: .7em; }
.prose > :first-child { margin-top: 0; }
.prose ul, .prose ol { padding-left: 1.3em; }
.prose ul { list-style: disc; }
.prose ol { list-style: decimal; }
.prose li::marker { color: var(--green); }
.prose li + li { margin-top: .5em; }
.prose a { color: var(--green); font-weight: 500; text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
.prose a:hover { color: var(--green-ink); text-decoration-thickness: 2px; }
.prose strong { color: var(--ink); }
.prose blockquote { padding-left: 1.1em; border-left: 3px solid var(--green); color: var(--ink); font-size: 1.125rem; }
.prose .note { margin-top: 1.8em; }
.prose .table-wrap { margin-block: 1.4em; }

/* Página legal: índice fixo à esquerda + texto */
.legal-layout { display: grid; grid-template-columns: 270px minmax(0, 1fr); gap: clamp(32px, 6vw, 96px); align-items: start; }
.toc { position: sticky; top: calc(var(--hh) + 24px); max-height: calc(100vh - var(--hh) - 48px); overflow: auto; padding: 22px 18px 18px; border: 1px solid var(--line); border-radius: var(--r); background: var(--paper); }
.toc .aside-title { padding: 0 10px 10px; }
.toc ol { display: grid; gap: 2px; counter-reset: t; }
.toc a { display: grid; grid-template-columns: 26px minmax(0, 1fr); padding: 7px 10px; border-radius: 8px; color: var(--text); font-size: .9375rem; line-height: 1.35; text-decoration: none; transition: background-color .2s, color .2s; }
.toc a::before { counter-increment: t; content: counter(t) "."; color: var(--muted); font-variant-numeric: tabular-nums; }
.toc a:hover { background: #fff; color: var(--green); }
.toc a[aria-current] { background: #fff; color: var(--green); font-weight: 600; box-shadow: inset 3px 0 0 var(--green); }
@media (max-width: 959px) { .legal-layout { grid-template-columns: minmax(0, 1fr); } .toc { position: static; max-height: none; } }

/* Tabelas (sempre dentro de .table-wrap: desliza na horizontal no telemóvel) */
.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--r); background: #fff; -webkit-overflow-scrolling: touch; }
.table-wrap table { width: 100%; min-width: 520px; border-collapse: collapse; font-size: .95rem; line-height: 1.5; }
.table-wrap th, .table-wrap td { padding: 14px 18px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--line); }
.table-wrap thead th { background: var(--paper); color: var(--ink); font-size: .8125rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.table-wrap tbody tr:last-child > * { border-bottom: 0; }
.table-wrap tbody th { color: var(--ink); font-weight: 600; }

/* =========================================================================
   FORMULÁRIOS
   ========================================================================= */
.form { align-self: start; padding: clamp(24px, 3.2vw, 40px); border-radius: 20px; background: #fff; border: 1px solid var(--line); box-shadow: var(--shadow); }
.form-title { font-size: 1.5rem; letter-spacing: -.02em; margin-bottom: 6px; }
.form-intro { color: var(--muted); font-size: .95rem; margin-bottom: 8px; }
.req-note { font-size: .8125rem; color: var(--muted); margin: 0 0 22px; }
.req { color: var(--red); font-weight: 700; margin-left: 2px; }
.form-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; }
.field { display: grid; gap: 6px; margin-bottom: 16px; min-width: 0; align-content: start; }
.field > label, .field > span:first-child { font-size: .875rem; font-weight: 600; color: var(--ink); }
.field input, .field select, .field textarea { width: 100%; min-height: 48px; padding: 11px 14px; border: 1px solid var(--field-line); border-radius: var(--r-sm); background: #fff; color: var(--ink); font-size: 1rem; transition: border-color .2s, box-shadow .2s; }
.field input:hover, .field select:hover, .field textarea:hover { border-color: var(--ink); }
.field textarea { min-height: 112px; resize: vertical; }
.field input::placeholder, .field textarea::placeholder { color: #7A857F; }
.field select { appearance: none; -webkit-appearance: none; padding-right: 40px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2313201A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; }
.field input:focus-visible, .field select:focus-visible, .field textarea:focus-visible { outline: 3px solid rgba(0, 96, 47, .3); outline-offset: 0; border-color: var(--green); box-shadow: inset 0 0 0 1px var(--green); }
.field [aria-invalid="true"] { border-color: var(--red); background-color: #FFFBFB; }
.field [aria-invalid="true"]:focus-visible { outline-color: rgba(179, 0, 10, .25); border-color: var(--red); box-shadow: inset 0 0 0 1px var(--red); }
.field-hint { margin: 0; font-size: .8125rem; color: var(--muted); }
/* Ficheiro (CV) */
.field input[type="file"] { padding: 8px; border-style: dashed; background: var(--paper); font-size: .9375rem; cursor: pointer; }
.field input[type="file"]::file-selector-button { margin-right: 14px; padding: 9px 16px; border: 1.5px solid var(--line-2); border-radius: 999px; background: #fff; color: var(--ink); font: inherit; font-weight: 600; font-size: .9rem; cursor: pointer; transition: border-color .2s; }
.field input[type="file"]:hover::file-selector-button { border-color: var(--ink); }
/* Escolhas em cartão (rádio e caixa de seleção): <label class="choice"><input …><span><strong>…</strong><small>…</small></span></label> */
.choices { min-width: 0; margin: 0 0 18px; padding: 0; border: 0; }
.choices legend { margin-bottom: 8px; padding: 0; font-size: .875rem; font-weight: 600; color: var(--ink); }
.choices-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.choices-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.choice { position: relative; display: flex; cursor: pointer; }
.choice > input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.choice > input + span { display: grid; grid-template-columns: 20px minmax(0, 1fr); column-gap: 12px; flex: 1; padding: 14px 16px; border: 1px solid var(--field-line); border-radius: var(--r-sm); background: #fff; line-height: 1.35; transition: border-color .2s, background-color .2s, box-shadow .2s; }
.choice > input + span::before { content: ""; grid-row: 1 / 3; width: 20px; height: 20px; margin-top: 1px; border: 1.5px solid var(--field-line); border-radius: 6px; background: #fff center / 14px no-repeat; transition: background-color .2s, border-color .2s; }
.choice > input[type="radio"] + span::before { border-radius: 50%; }
/* Três escolhas lado a lado: o círculo fica por cima do texto (colunas estreitas) */
.choices-3 .choice > input + span { grid-template-columns: minmax(0, 1fr); row-gap: 2px; padding: 12px 14px; }
.choices-3 .choice > input + span::before { grid-row: auto; margin: 0 0 8px; }
.choice strong { color: var(--ink); font-size: .975rem; font-weight: 600; }
.choice small { color: var(--muted); font-size: .8125rem; }
.choice:hover > input + span { border-color: var(--ink); }
.choice > input:checked + span { border-color: var(--green); background: var(--mint); box-shadow: inset 0 0 0 1px var(--green); }
.choice > input[type="checkbox"]:checked + span::before { border-color: var(--green); background-color: var(--green); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E"); }
.choice > input[type="radio"]:checked + span::before { border-color: var(--green); background: var(--green); box-shadow: inset 0 0 0 4px #fff; }
.choice > input:focus-visible + span { outline: 3px solid rgba(0, 96, 47, .35); outline-offset: 2px; }
.choice > input[aria-invalid="true"] + span { border-color: var(--red); }
/* Consentimento (caixa nativa, verde) */
.consent { display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 12px; align-items: start; margin: 4px 0 18px; font-size: .875rem; line-height: 1.5; color: var(--muted); cursor: pointer; }
.consent input { width: 20px; height: 20px; margin: 1px 0 0; accent-color: var(--green); cursor: pointer; }
.consent input[aria-invalid="true"] { outline: 2px solid var(--red); outline-offset: 2px; }
.consent a { color: var(--ink); text-underline-offset: 3px; }
/* Erro geral (preenchido pelo main.js) e envio */
.form-error { margin: 0 0 16px; padding: 12px 14px; border-radius: var(--r-sm); border-left: 3px solid var(--red); background: var(--red-tint); color: var(--red); font-size: .9rem; font-weight: 600; line-height: 1.45; }
.form button[type="submit"] { width: 100%; }
.form-legal { margin: 14px 0 0; font-size: .8125rem; color: var(--muted); line-height: 1.5; }
.form-legal a { color: var(--ink); text-underline-offset: 3px; }
/* Confirmação depois de enviar (ex.: newsletter) */
.form-done { display: flex; gap: 16px; align-items: flex-start; padding: clamp(22px, 3vw, 32px); border-radius: 20px; background: #fff; border: 1px solid var(--line); box-shadow: var(--shadow); }
.form-done .ic { width: 48px; height: 48px; }
.form-done p { margin: 0; color: var(--muted); }
.form-done strong { display: block; margin-bottom: 4px; color: var(--ink); font-size: 1.125rem; }
.form-done:focus { outline: none; }
.form-done:focus-visible { outline: 3px solid var(--green); }
/* Campo-armadilha para robôs (nunca visível) */
.hp { position: absolute !important; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
@media (max-width: 479px) {
  .form-row, .choices-grid, .choices-3 { grid-template-columns: minmax(0, 1fr); }
  /* Numa só coluna, as três escolhas voltam a ter o círculo à esquerda (mais baixas) */
  .choices-3 .choice > input + span { grid-template-columns: 20px minmax(0, 1fr); row-gap: 0; padding: 14px 16px; }
  .choices-3 .choice > input + span::before { grid-row: 1 / 3; margin: 1px 0 0; }
  .form { padding: 22px 18px; }
}

/* Painel «Pedir proposta» (texto + passos + contactos | formulário) */
.cta-panel { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.02fr); gap: clamp(36px, 5vw, 72px); padding: clamp(28px, 5vw, 68px); border-radius: var(--r-xl); background: var(--paper); }
.cta-copy .section-lead { margin-top: 20px; }
.cta-copy .checks { margin-top: 24px; }
@media (max-width: 1199px) { .cta-panel { grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr); } }
@media (max-width: 999px) { .cta-panel { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 479px) { .cta-panel { border-radius: 20px; padding: 24px 16px; } .urgent { padding: 16px; } .urgent a { font-size: 1.4rem; } }

/* Faixa final das páginas interiores (partial «cta») */
.cta-band { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr); gap: clamp(32px, 5vw, 72px); align-items: center; padding: clamp(28px, 4.5vw, 64px); border-radius: var(--r-xl); background: var(--paper); }
.section-paper .cta-band { background: #fff; border: 1px solid var(--line); }
.cta-band h2 { margin-bottom: 18px; }
.cta-band .section-lead { margin-bottom: 28px; }
.cta-band .urgent { margin: 0; }
@media (max-width: 899px) { .cta-band { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 479px) { .cta-band { border-radius: 20px; padding: 24px 16px; } .cta-band .btn-row .btn { width: 100%; } }

/* Newsletter (partial «newsletter») */
.newsletter { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(32px, 5vw, 80px); align-items: start; }
.newsletter-copy h2 { margin-bottom: 20px; }
.newsletter-copy > p:not(.eyebrow) { color: var(--muted); font-size: 1.125rem; max-width: 30em; }
.newsletter-copy .checks { margin-top: 20px; }
@media (max-width: 899px) { .newsletter { grid-template-columns: minmax(0, 1fr); } }

/* =========================================================================
   RODAPÉ
   ========================================================================= */
.site-footer { background: var(--paper); border-top: 1px solid var(--line); padding: clamp(56px, 7vw, 80px) 0 32px; font-size: .9375rem; }
.footer-top { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1.05fr) minmax(0, .95fr) minmax(0, 1.2fr) minmax(0, .75fr); gap: 40px 36px; }
.footer-brand img { height: 72px; width: auto; max-width: 100%; margin-bottom: 20px; }
.footer-brand .motto { font-size: 1.125rem; font-weight: 600; color: var(--ink); letter-spacing: -.01em; line-height: 1.4; max-width: 17em; margin-bottom: 10px; }
.footer-brand p { color: var(--muted); }
.footer-cta { margin-top: 8px; }
.f-title { margin: 0 0 16px; font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.f-list li { margin-bottom: 10px; line-height: 1.4; }
.f-list a { color: var(--ink); text-decoration: none; border-radius: 3px; }
.f-list a:hover { color: var(--green); text-decoration: underline; text-underline-offset: 3px; }
.f-list small { display: block; color: var(--muted); font-size: .8125rem; }
.f-list .tel a { font-weight: 700; font-variant-numeric: tabular-nums; }
.f-list .tel { margin-bottom: 14px; }
.f-social { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 16px; font-size: .875rem; }
.f-social a { color: var(--muted); }
.footer-legal { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 14px 32px; margin-top: 56px; padding-top: 24px; border-top: 1px solid var(--line-2); color: var(--muted); font-size: .875rem; }
.footer-legal p { margin: 0; }
.footer-legal ul { display: flex; flex-wrap: wrap; gap: 8px 22px; }
.footer-legal a { color: var(--ink); text-underline-offset: 3px; }
.footer-legal a:hover { color: var(--green); }
@media (max-width: 1099px) { .footer-top { grid-template-columns: repeat(2, minmax(0, 1fr)); } .footer-brand { grid-column: 1 / -1; } }
@media (max-width: 479px) { .footer-top { gap: 32px 20px; } .f-list li { font-size: .875rem; } .f-contacts { grid-column: 1 / -1; } }
@media (max-width: 359px) { .footer-top { grid-template-columns: minmax(0, 1fr); } }

/* =========================================================================
   MOVIMENTO — só quando o main.js põe .reveal-on no <html>.
   Sem JavaScript (ou com movimento reduzido) nada fica escondido.
   ========================================================================= */
.reveal-on [data-reveal]:not(.in):not(.shown) { opacity: 0; transform: translateY(18px); }
.reveal-on [data-reveal].in { animation: reveal .8s var(--ease) var(--d, 0ms) backwards; }
@keyframes reveal { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .reveal-on [data-reveal] { opacity: 1 !important; transform: none !important; }
}

/* Impressão: só o conteúdo */
@media print {
  .topbar, .site-header, .site-footer, .skip-link, .nav, .menu-btn { display: none !important; }
  .reveal-on [data-reveal] { opacity: 1 !important; transform: none !important; }
  body { font-size: 12pt; }
}

/* ----- _src/css/servicos.css ----- */
/* =========================================================================
   servicos.css — estilos PRÓPRIOS das páginas de Serviços (servicos/ e as 5 páginas de serviço).
   Só o que não existe em base.css (ver _src/css/GUIA.md). Não redefinir tokens
   nem componentes partilhados; prefixar com a classe da página (body_class)
   quando a regra for só de uma página.
   ========================================================================= */

/* -------------------------------------------------------------------------
   PÁGINAS DE SERVIÇO (body: .page-servico + .svc-<slug>)
   ------------------------------------------------------------------------- */

/* «Outros serviços»: esconde o serviço da própria página (partial outros-servicos) */
.svc-vigilancia-humana [data-svc="vigilancia-humana"],
.svc-assistente-recinto-espetaculos [data-svc="assistente-recinto-espetaculos"],
.svc-assistente-recinto-desportivo [data-svc="assistente-recinto-desportivo"],
.svc-protecao-acompanhamento-pessoal [data-svc="protecao-acompanhamento-pessoal"],
.svc-alarmes-intrusao-incendio [data-svc="alarmes-intrusao-incendio"] { display: none; }

/* Coluna lateral: «Porquê a COPS» (partial porque-cops), texto curto e contacto */
.page-servico .side-card { gap: 18px; }
.page-servico .side-text { margin: 0; font-size: .95rem; line-height: 1.5; color: var(--muted); }
.page-servico .side-card .aside-title + .why-list { margin-top: -2px; }
.page-servico .side-card .side-text + .aside-title { margin-top: 6px; padding-top: 18px; border-top: 1px solid var(--line-2); }
.why-list { display: grid; gap: 14px; margin: 0 0 6px; }
.why-list li { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 12px; align-items: start; }
.why-list .ic { width: 36px; height: 36px; border-radius: 10px; background: #fff; }
.why-list .ic svg.lucide { width: 18px; height: 18px; }
.why-list li > span:last-child { font-size: .9rem; line-height: 1.45; color: var(--muted); }
.why-list strong { display: block; margin-bottom: 1px; color: var(--ink); font-size: .975rem; line-height: 1.3; }
.page-servico .side-card .contacts { margin-top: 0; }
.page-servico .side-card .contacts li { padding: 14px 0 0; border-top: 1px solid var(--line-2); border-bottom: 0; }

/* («Outros serviços» no telemóvel: .card-grid-compact em base.css) */

/* Blocos da coluna principal */
.page-servico .block > .note { color: var(--text); margin-top: 6px; }
.page-servico .block > .chips { margin-bottom: 28px; }
.page-servico .block > .checks:last-child,
.page-servico .block > .chips:last-child { margin-bottom: 0; }
.page-servico .svc-photo { margin: 0 0 22px; }

/* «Como trabalhamos» em 4 passos dentro da coluna: 2 × 2 quando a coluna é estreita */
.page-servico .with-aside .steps-row { --n: 4; margin-top: 8px; }
@media (min-width: 960px) and (max-width: 1279px) {
  .page-servico .with-aside .steps-row { --n: 2; row-gap: 36px; }
  .page-servico .with-aside .steps-row li:nth-child(2n)::after { display: none; }
}

/* -------------------------------------------------------------------------
   SERVIÇOS — página de índice (body: .page-servicos)
   ------------------------------------------------------------------------- */

/* Topo: números em fundo claro no lugar da fotografia (.hero-panel) */
.page-servicos .svc-hero-kpis { gap: 14px; padding-bottom: clamp(8px, 1.2vw, 14px); }
.page-servicos .svc-hero-kpis .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 959px) { .page-servicos .svc-hero-kpis .kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 599px) { .page-servicos .svc-hero-kpis .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 20px; } }

/* Uma entrada por área: resumo e ações à esquerda, o que inclui à direita */
.page-servicos .svc-list { display: grid; gap: 16px; }
.page-servicos .svc-entry { display: grid; grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr); gap: 28px clamp(32px, 5vw, 72px); padding: clamp(24px, 3.4vw, 44px); border: 1px solid var(--line); border-radius: var(--r); background: #fff; scroll-margin-top: calc(var(--hh) + 24px); }
.page-servicos .svc-entry-k { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 14px; margin-bottom: 22px; }
.page-servicos .svc-entry-k .badge { white-space: normal; }
.page-servicos .svc-entry h3 { margin: 0 0 12px; font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem); line-height: 1.12; letter-spacing: -.022em; text-wrap: balance; }
.page-servicos .svc-entry-head > p { margin: 0 0 24px; color: var(--muted); max-width: 30em; }
.page-servicos .svc-entry-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 22px; }
.page-servicos .svc-entry-body .aside-title { margin-bottom: 12px; }
.page-servicos .svc-entry-body .checks { margin: 0 0 26px; }
.page-servicos .svc-entry-body .chips { margin: 0; }
@media (min-width: 900px) { .page-servicos .svc-entry-body { padding-left: clamp(32px, 4vw, 56px); border-left: 1px solid var(--line); } }
@media (max-width: 899px) {
  .page-servicos .svc-entry { grid-template-columns: minmax(0, 1fr); }
  .page-servicos .svc-entry-body { padding-top: 24px; border-top: 1px solid var(--line); }
}

/* Diferenciais comuns a todas as áreas (.features.features-4) */
.page-servicos .svc-common { margin-top: clamp(48px, 6vw, 72px); }
.page-servicos .svc-common-title { margin: 0 0 20px; font-size: 1.375rem; letter-spacing: -.015em; }

/* ----- _src/css/empresa.css ----- */
/* =========================================================================
   empresa.css — estilos PRÓPRIOS das páginas A COPS (a-cops/, políticas, fornecedores) e Setores (setores/).
   Só o que não existe em base.css (ver _src/css/GUIA.md). Não redefinir tokens
   nem componentes partilhados; prefixar com a classe da página (body_class)
   quando a regra for só de uma página.
   ========================================================================= */

/* =========================================================================
   A COPS · Políticas · Fornecedores · Setores
   ========================================================================= */

/* ---------- A COPS (body.page-a-cops) ---------- */
/* Topo: título e texto lado a lado, fotografia panorâmica da equipa por baixo */
.acops-hero-head { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); gap: 8px clamp(40px, 5.5vw, 88px); align-items: end; }
.acops-hero-head h1 { margin: 0; }
.acops-hero-head .lead { margin: 0 0 28px; }
.acops-hero-photo { margin: clamp(36px, 4.5vw, 56px) 0 0; border-radius: var(--r-lg); overflow: hidden; aspect-ratio: 2.35 / 1; background: var(--photo-bg); }
.acops-hero-photo img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 48%; animation: settle 1.8s var(--ease) both; }
@media (max-width: 959px) {
  .acops-hero-head { grid-template-columns: minmax(0, 1fr); }
  .acops-hero-head h1 { margin-bottom: 14px; }
  .acops-hero-photo { aspect-ratio: 16 / 9; }
}
@media (max-width: 599px) { .acops-hero-photo { aspect-ratio: 4 / 3; } .acops-hero-photo img { object-position: 58% 50%; } }

/* Missão e valores: lista de valores + citação do CEO (os valores já estão listados ao lado) */
.page-a-cops .values-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 40px clamp(32px, 5vw, 72px); align-items: stretch; }
.page-a-cops .values-list { grid-template-columns: minmax(0, 1fr); gap: 0; margin: 0; align-content: start; }
.page-a-cops .values-list li { align-items: center; padding: 20px 0; }
.page-a-cops .values-list li:last-child { border-bottom: 1px solid var(--line); }
.page-a-cops .values-list strong { margin: 0 0 2px; font-size: 1.1875rem; }
.page-a-cops .values-list li > div > span { font-size: 1rem; }
.page-a-cops .values-grid .quote-card .values { display: none; }
.page-a-cops .values-grid .quote-card figcaption { margin-top: auto; padding-top: 28px; }
@media (max-width: 959px) {
  .page-a-cops .values-grid { grid-template-columns: minmax(0, 1fr); }
  .page-a-cops .values-grid .quote-card figcaption { margin-top: 24px; padding-top: 0; }
}

/* Faixa dos números: o botão «Conhecer a COPS» aponta para esta página */
.page-a-cops .figures-more { display: none; }

/* (Porquê a COPS em papel: {{> rede section-paper}}; certificações em 4 colunas: {{> certs certs-4}}) */

/* ---------- Políticas e certificações (body.page-politicas) ---------- */
.page-politicas .certs li { align-items: start; }
@media (max-width: 639px) {
  .page-politicas .certs-3 { grid-template-columns: minmax(0, 1fr); grid-auto-rows: auto; }
  .page-politicas .certs li { grid-template-columns: 38px minmax(0, 1fr); gap: 14px; }
}

/* Ficha do documento (coluna lateral da Política de Gestão) */
.page-politicas #politica-gestao .side-card { background: #fff; }
.page-politicas .doc-meta { display: grid; margin: 0; }
.page-politicas .doc-meta > div { padding: 12px 0; border-top: 1px solid var(--line); }
.page-politicas .doc-meta dt { font-size: .8125rem; font-weight: 500; color: var(--muted); }
.page-politicas .doc-meta dd { margin: 2px 0 0; color: var(--ink); font-weight: 600; line-height: 1.4; }

/* (Documentos e canais em duas colunas: .doc-list.doc-list-2. A faixa final, branca, encosta sozinha
   à secção dos documentos — regra das duas secções brancas seguidas, em base.css) */

/* ---------- Avaliação de fornecedores (body.page-fornecedores) ---------- */
/* Escala Bom · Médio · Mau — em verde e neutro (o vermelho fica para urgências e erros) */
.page-fornecedores .grade { display: inline-flex; justify-content: center; min-width: 60px; padding: 3px 10px; border-radius: 999px; font-size: .75rem; font-weight: 700; letter-spacing: .02em; line-height: 1.5; white-space: nowrap; }
.page-fornecedores .grade-good { background: var(--green); color: #fff; }
.page-fornecedores .grade-mid { background: var(--mint-2); color: var(--green-ink); }
.page-fornecedores .grade-bad { background: #fff; color: var(--ink); box-shadow: inset 0 0 0 1px var(--line-2); }

/* Critérios A–F */
.page-fornecedores .crit-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.page-fornecedores .crit-grid > li { display: flex; }
.page-fornecedores .crit { flex: 1; }
.page-fornecedores .crit .crit-head { display: flex; align-items: center; gap: 12px; margin: 0 0 18px; }
.page-fornecedores .crit-l { display: grid; place-items: center; flex: none; width: 44px; height: 44px; border-radius: 12px; background: var(--mint); color: var(--green); font-size: 1.375rem; font-weight: 800; line-height: 1; letter-spacing: -.02em; }
.page-fornecedores .crit-k { font-size: .78rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.page-fornecedores .crit h3 { margin-bottom: 16px; font-size: 1.25rem; text-wrap: balance; }
.page-fornecedores .grades > div { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 12px; align-items: start; padding: 12px 0; border-top: 1px solid var(--line); }
.page-fornecedores .grades > div:last-child { padding-bottom: 0; }
.page-fornecedores .grades dt { padding-top: 1px; }
.page-fornecedores .grades dd { margin: 0; font-size: .9375rem; line-height: 1.45; color: var(--muted); }
@media (max-width: 1023px) { .page-fornecedores .crit-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) { .page-fornecedores .crit-grid { grid-template-columns: minmax(0, 1fr); gap: 12px; } }

/* Pesos, comunicação e classificação anual: coluna lateral fixa no computador;
   no telemóvel a classificação aparece entre os pesos e a comunicação */
.page-fornecedores .calc-layout { grid-template-areas: "pesos tiers" "com tiers"; row-gap: clamp(48px, 6vw, 72px); }
.page-fornecedores .calc-pesos { grid-area: pesos; }
.page-fornecedores .calc-tiers { grid-area: tiers; }
.page-fornecedores .calc-com { grid-area: com; }
@media (max-width: 959px) { .page-fornecedores .calc-layout { grid-template-areas: "pesos" "tiers" "com"; row-gap: 40px; } }
.page-fornecedores .block .table-wrap { margin-top: 24px; }
.page-fornecedores .block a { color: var(--green); font-weight: 600; text-underline-offset: 3px; }
.page-fornecedores .weights td { font-variant-numeric: tabular-nums; white-space: nowrap; }
.page-fornecedores .side-card { gap: 6px; }
.page-fornecedores .tiers li { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 12px; align-items: center; padding: 16px 0; border-top: 1px solid var(--line-2); }
.page-fornecedores .tiers li:first-child { margin-top: 8px; }
.page-fornecedores .tiers li:last-child { padding-bottom: 0; }
.page-fornecedores .tiers strong { color: var(--ink); font-size: 1.0625rem; line-height: 1.3; font-variant-numeric: tabular-nums; }
.page-fornecedores .tiers li > span:last-child { grid-column: 2; font-size: .9375rem; line-height: 1.45; color: var(--text); }
@media (max-width: 559px) {
  .page-fornecedores .weights { min-width: 0; }
  .page-fornecedores .weights th, .page-fornecedores .weights td { padding: 12px 10px; }
  .page-fornecedores .weights thead th { font-size: .8125rem; letter-spacing: 0; text-transform: none; }
  .page-fornecedores .weights th:not(:first-child), .page-fornecedores .weights td { width: 1%; white-space: nowrap; }
}

/* ---------- Setores (body.page-setores) ---------- */
.page-setores .sector-jump { margin-top: 30px; }
.page-setores .sector-jump .chips { margin: 0; }
/* Três colunas: dez setores + três fotografias largas/estreitas = quatro linhas certas */
.page-setores .sectors { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.page-setores .sec { min-height: 250px; }
.page-setores .sec h2 { margin: 22px 0 6px; font-size: 1.25rem; line-height: 1.25; letter-spacing: -.012em; text-wrap: balance; }
.page-setores .sec .chips { margin: auto 0 0; padding-top: 20px; }
.page-setores .sec-photo { min-height: 340px; }
/* Mais texto que na página inicial (etiquetas de serviço): gradiente um pouco mais firme por baixo */
.page-setores .sec-photo::before { background: linear-gradient(180deg, rgba(7, 24, 15, .04) 0%, rgba(7, 24, 15, .22) 32%, rgba(7, 24, 15, .78) 62%, rgba(7, 24, 15, .93) 100%); }
.page-setores .sec-photo h2 { margin: 0 0 6px; color: #fff; font-size: 1.5rem; }
.page-setores .sec-photo .chips { margin-top: 16px; padding-top: 0; }
.page-setores .sec-photo .chips li { border-color: rgba(255, 255, 255, .5); background: rgba(7, 24, 15, .4); }
.page-setores .sec-photo .chips li > a { color: #fff; }
.page-setores .sec-photo .chips li > a:hover { background: rgba(255, 255, 255, .16); color: #fff; }
@media (max-width: 1023px) { .page-setores .sectors { grid-template-columns: repeat(2, minmax(0, 1fr)); } .page-setores .sec { min-height: 230px; } .page-setores .sec-photo { min-height: 360px; } }
@media (max-width: 559px) {
  .page-setores .sectors { grid-template-columns: minmax(0, 1fr); }
  .page-setores .sec { min-height: 0; }
  .page-setores .sec h2 { margin: 1px 0 4px; font-size: 1.0625rem; }
  .page-setores .sec .chips { grid-column: 2; padding-top: 12px; }
  .page-setores .sec-photo { min-height: 360px; }
  .page-setores .sec-photo h2 { margin: 0 0 6px; font-size: 1.25rem; }
  .page-setores .sec-photo .chips { padding-top: 0; }
}

/* A COPS: o texto da direita alinha pelo topo do título. */
.acops-hero-head { align-items: start; }

/* ----- _src/css/pessoas.css ----- */
/* =========================================================================
   pessoas.css — estilos PRÓPRIOS do grupo «Pessoas»: Formação (formacao/), Carreiras (carreiras/ e o
   partial candidatura) e Contactos (contactos/). As páginas de estado (body .page-status: pedido,
   candidatura e subscrição recebidas, 404) usam só base.css.
   Só o que não existe em base.css (ver _src/css/GUIA.md). Não redefinir tokens
   nem componentes partilhados; prefixar com a classe da página (body_class)
   quando a regra for só de uma página.
   ========================================================================= */

/* -------------------------------------------------------------------------
   FORMAÇÃO (body: .page-formacao)
   ------------------------------------------------------------------------- */

/* Espaço de formação na Lousã: cartão com o mapa e a localização (no lugar de uma fotografia) */
.page-formacao .lousa { align-items: center; }
.page-formacao .lousa .checks { margin-top: 22px; }
.page-formacao .lousa-card { display: grid; grid-template-columns: minmax(140px, 210px) minmax(0, 1fr); gap: clamp(24px, 3.4vw, 48px); align-items: center; padding: clamp(24px, 3.4vw, 44px); border: 1px solid var(--line); border-radius: var(--r-lg); background: #fff; }
.page-formacao .lousa-card .map { max-height: 420px; }
.page-formacao .lousa-info .aside-title { margin-bottom: 10px; }
.page-formacao .lousa-name { margin: 0; font-size: clamp(2.5rem, 1.7rem + 2.4vw, 3.75rem); font-weight: 800; line-height: 1; letter-spacing: -.04em; color: var(--green); }
.page-formacao .lousa-sub { margin: 10px 0 20px; font-weight: 600; color: var(--ink); }
.page-formacao .lousa-info .chips { margin-bottom: 22px; }
@media (max-width: 1099px) and (min-width: 900px) { .page-formacao .lousa-card { grid-template-columns: minmax(0, 1fr); justify-items: start; } .page-formacao .lousa-card .map { max-height: 300px; width: auto; } }
@media (max-width: 479px) {
  .page-formacao .lousa-card { grid-template-columns: minmax(88px, 112px) minmax(0, 1fr); gap: 18px; padding: 20px 18px; }
  .page-formacao .lousa-sub { font-size: .9375rem; }
  .page-formacao .lousa-info .link-arrow { font-size: .9375rem; }
}
/* Ecrãs muito estreitos: o mapa passa para cima do texto */
@media (max-width: 379px) {
  .page-formacao .lousa-card { grid-template-columns: minmax(0, 1fr); justify-items: start; }
  .page-formacao .lousa-card .map { width: auto; max-height: 190px; }
}

/* (Cursos no telemóvel: .card-grid-compact em base.css) */

/* Regulamento no cabeçalho da secção «Regulamento e qualidade» */
.page-formacao .section-head .doc-link { margin-top: 20px; }
/* (Certificações em quatro colunas: {{> certs certs-4}}) */

/* -------------------------------------------------------------------------
   CARREIRAS (body: .page-carreiras)
   ------------------------------------------------------------------------- */

/* Perfis: cartões com fotografia; ARD sem fotografia → bloco tipográfico no lugar da imagem */
.page-carreiras .profiles .card-img-type { display: flex; justify-content: space-between; align-items: flex-end; padding: clamp(20px, 2.2vw, 26px); background: var(--mint); }
.page-carreiras .card-img-type .big { font-size: clamp(3.5rem, 2.6rem + 2.6vw, 5rem); font-weight: 800; line-height: .85; letter-spacing: -.05em; color: var(--green); }
.page-carreiras .card-img-type svg.lucide { align-self: flex-start; width: 30px; height: 30px; color: var(--green); }
.page-carreiras .profiles .card-body p { margin-bottom: 0; }
/* «Outra função?» — o único cartão-ligação da grelha, em menta */
.page-carreiras .card-cta { justify-content: flex-start; background: var(--mint); border-color: transparent; }
.page-carreiras a.card-cta:hover { background: var(--mint-2); border-color: transparent; }
.page-carreiras .card-cta .ic { background: #fff; }
.page-carreiras .card-cta p { color: var(--text); }
/* No telemóvel: fotografia à esquerda e texto à direita (seis cartões mais baixos) */
@media (max-width: 639px) {
  .page-carreiras .profiles .card-photo { display: grid; grid-template-columns: minmax(0, 38%) minmax(0, 1fr); }
  .page-carreiras .profiles .card-img { aspect-ratio: auto; height: 100%; min-height: 128px; }
  .page-carreiras .profiles .card-body { justify-content: center; padding: 16px 16px 18px; }
  .page-carreiras .profiles .card-body h3 { font-size: 1.0625rem; }
  .page-carreiras .profiles .card-body p { font-size: .9rem; }
  .page-carreiras .profiles .card-img-type { justify-content: center; align-items: center; padding: 12px; }
  .page-carreiras .card-img-type .big { font-size: 2.5rem; }
  .page-carreiras .card-img-type svg.lucide { display: none; }
}

/* Porquê a COPS: texto + fotografia da equipa; números claros por baixo */
.page-carreiras .why .features { margin-top: 30px; }
@media (min-width: 560px) { .page-carreiras .why .features { gap: 26px 32px; } }
.page-carreiras .why .split-media { aspect-ratio: 5 / 4; }
.page-carreiras .kpis { margin-top: clamp(48px, 6vw, 80px); }
@media (max-width: 899px) { .page-carreiras .why .split-media { aspect-ratio: 16 / 10; } }
/* Ecrãs muito estreitos: botões com textos longos numa só linha */
@media (max-width: 379px) {
  .page-carreiras .page-hero .btn-row .btn, .page-carreiras #application-form button[type="submit"] { padding-inline: 1em; font-size: 1rem; }
}

/* -------------------------------------------------------------------------
   CONTACTOS (body: .page-contactos)
   ------------------------------------------------------------------------- */

/* Topo: cartão dos contactos diretos ao lado do texto */
.page-contactos .page-hero-grid { align-items: center; }
.page-contactos .contact-card .urgent { margin: 0; }
.page-contactos .contact-card .contacts { margin-top: 0; }
.page-contactos .contact-card .contacts li:nth-last-child(-n+2) { border-bottom: 0; padding-bottom: 4px; }
/* Cartão estreito (ao lado do texto entre 960 e 1199 px) ou telemóvel: contactos numa só coluna */
@media (min-width: 960px) and (max-width: 1199px), (max-width: 479px) {
  .page-contactos .contact-card .contacts { grid-template-columns: minmax(0, 1fr); }
  .page-contactos .contact-card .contacts li:nth-last-child(2) { border-bottom: 1px solid var(--line-2); padding-bottom: 15px; }
}

/* Pedido de proposta: notas no lado do texto */
.page-contactos .cta-copy .note { margin-bottom: 12px; }

/* Canal de denúncia e Livro de Reclamações, por baixo das delegações (.doc-list.doc-list-2) */
.page-contactos .fine-links { margin-top: 16px; }

/* (Páginas de estado — body .page-status: estilos em base.css) */

/* Contactos: no computador, passos e notas por baixo do texto (coluna da esquerda);
   no telemóvel, o formulário vem logo a seguir ao título e os passos depois. */
.page-contactos .cta-panel { grid-template-areas: "copy form" "extra form"; grid-template-rows: auto 1fr; row-gap: 28px; }
.page-contactos .cta-copy { grid-area: copy; }
.page-contactos .cta-panel > #lead-form { grid-area: form; align-self: start; }
.page-contactos .cta-extra { grid-area: extra; display: grid; gap: 20px; align-content: start; }
@media (max-width: 999px) {
  .page-contactos .cta-panel { grid-template-areas: "copy" "form" "extra"; grid-template-rows: auto; }
}

/* Formação: o painel DGERT do topo fica compacto (não há fotografia de formação). */
.page-formacao .page-hero-type { aspect-ratio: auto; min-height: 0; align-self: center; gap: 36px; }

/* ----- _src/css/noticias.css ----- */
/* =========================================================================
   noticias.css — estilos PRÓPRIOS do grupo: Notícias (noticias/, internas, externas, cada notícia, subscricao-recebida/).
   Só o que não existe em base.css (ver _src/css/GUIA.md). Não redefinir tokens
   nem componentes partilhados; prefixar com a classe da página (body_class)
   quando a regra for só de uma página.
   Classes das páginas: .page-noticias (Todas · Internas · Externas), .page-noticia (cada notícia,
   posta pelo build.py), .page-subscricao (subscrição recebida).
   ========================================================================= */

/* ---------- Lista: notícia em destaque ---------- */
/* Notícia em destaque (a mais recente que não é exemplo; gerada pelo build.py): bloco tipográfico
   da data (verde sobre menta, como os blocos «ARD»/«DGERT») + título grande. Ocupa a linha toda. */
.news-lead-item { grid-column: 1 / -1; }
.news-lead { display: grid; grid-template-columns: minmax(0, 300px) minmax(0, 1fr); gap: clamp(28px, 4.5vw, 64px); align-items: stretch; width: 100%; padding: 14px clamp(24px, 4vw, 56px) 14px 14px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; color: var(--text); text-decoration: none; transition: border-color .2s, box-shadow .25s; }
a.news-lead:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
.news-lead-date { display: flex; min-height: 260px; padding: clamp(20px, 2.4vw, 30px); border-radius: var(--r-sm); background: var(--mint); transition: background-color .2s; }
a.news-lead:hover .news-lead-date { background: var(--mint-2); }
.news-lead-date time { display: flex; flex-direction: column; justify-content: space-between; gap: 16px; width: 100%; }
.news-lead-date .big { display: block; font-size: clamp(4.5rem, 3rem + 4vw, 7.5rem); font-weight: 800; line-height: .85; letter-spacing: -.05em; color: var(--green); font-variant-numeric: tabular-nums; }
.news-lead-date .cap { display: block; font-size: 1.125rem; font-weight: 700; line-height: 1.3; color: var(--ink); }
.news-lead-date .cap span { display: block; font-size: 1rem; font-weight: 500; color: var(--muted); }
.news-lead-body { display: flex; flex-direction: column; justify-content: center; padding-block: clamp(8px, 2vw, 28px); }
.news-flag { display: inline-flex; padding: 3px 10px; border-radius: 999px; background: var(--green); color: #fff; font-size: .72rem; letter-spacing: .06em; }
.news-lead h2 { margin: 16px 0 14px; max-width: 24em; font-size: clamp(1.75rem, 1.2rem + 1.6vw, 2.625rem); line-height: 1.08; letter-spacing: -.03em; text-wrap: balance; transition: color .2s; }
a.news-lead:hover h2 { color: var(--green); }
.news-lead p { margin: 0 0 24px; max-width: 38em; font-size: clamp(1rem, .96rem + .2vw, 1.125rem); line-height: 1.6; color: var(--muted); }
.news-lead .more { color: var(--green); }
@media (max-width: 899px) {
  .news-lead { grid-template-columns: minmax(0, 220px) minmax(0, 1fr); padding-right: 28px; }
  .news-lead-date { min-height: 220px; }
}
@media (max-width: 639px) {
  /* No telemóvel: a data passa a faixa por cima do texto (número grande à esquerda, mês e ano ao lado) */
  .news-lead { grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 12px 12px 24px; }
  .news-lead-date { min-height: 0; padding: 18px 20px; }
  .news-lead-date time { flex-direction: row; align-items: flex-end; justify-content: flex-start; gap: 14px; }
  .news-lead-date .big { font-size: 4rem; }
  .news-lead-date .cap { padding-bottom: 2px; }
  .news-lead-body { padding: 0 10px; }
  .news-lead h2 { margin: 14px 0 10px; }
}
@media (max-width: 399px) { .news-lead h2 { font-size: 1.5rem; } }

/* Tablet: a lista das abas fica em duas colunas (em vez de uma muito larga) */
@media (min-width: 640px) and (max-width: 899px) {
  .page-noticias .news-list { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 28px; }
}

/* ---------- Cada notícia ---------- */
.page-noticia .page-hero h1 { max-width: 22em; font-size: clamp(2rem, 1.3rem + 2.4vw, 3.25rem); line-height: 1.06; }
.page-noticia .page-hero .news-meta { margin-bottom: 20px; }
.page-noticia .page-hero .lead { max-width: 38em; }
.article-body > p:first-child > strong:only-child { font-size: 1.125rem; line-height: 1.6; }
.article-body > .note:first-child { margin-top: 0; }   /* nota «Notícia de exemplo» alinhada com a coluna lateral */
/* Fim do texto: voltar à lista + newsletter */
.article-foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px 32px; max-width: 46rem; margin-top: clamp(40px, 5vw, 56px); padding-top: 24px; border-top: 1px solid var(--line-2); }
.article-aside > .link-arrow { justify-self: start; margin-top: 4px; }
.article-related li:first-child a { padding-top: 4px; }
/* No telemóvel, o caminho não repete o título (que vem logo a seguir, no h1) */
@media (max-width: 639px) { .page-noticia .crumbs li[aria-current] { display: none; } }

/* (Subscrição recebida: body .page-status .page-subscricao — topo e ligações do texto em base.css) */
