/* =========================================================================
   PEIXOTO TERRAPLENAGEM — Sistema de estilos
   Industrial moderno · limpo · sem sombra · mobile-first (375px)
   Cores validadas por contraste (ver briefing, seção 6).
   ========================================================================= */

/* ---------- 1. FONTES (Montserrat auto-hospedada, 3 pesos) ---------- */
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/montserrat-400.woff2") format("woff2");
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/montserrat-700.woff2") format("woff2");
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url("../fonts/montserrat-900.woff2") format("woff2");
}

/* ---------- 2. VARIÁVEIS ---------- */
:root {
  /* Primárias — paleta oficial da marca (guia de identidade visual) */
  --marrom: #4B2E15;          /* TERRA — logo, botões principais, títulos, rodapé (12.36 c/ branco) */
  --marrom-hover: #3C2511;    /* hover do primário, mais escuro que --marrom */
  --verde: #738C33;           /* OLIVA — ícones, filetes, bordas decorativas (NUNCA fundo de botão c/ branco) */
  --verde-texto: #5F742A;     /* verde para TEXTO sobre fundo claro (5.23 OK — legível) */
  --verde-btn: #627A2E;       /* fundo de botão secundário CORRIGIDO (4.84 OK) */
  --verde-btn-hover: #5F742A; /* hover secundário (5.23 OK) */
  --ocre: #CF8833;            /* OCRE — chamada VISUAL: filete, rótulo, número — nunca botão c/ branco */
  --cinza: #333333;           /* texto */
  --branco: #FFFFFF;          /* fundo principal */

  /* Apoio */
  --fundo-alt: #FAF9F7;       /* seções alternadas */
  --cinza-claro: #F2F2F2;     /* fundo de depoimentos */
  --linha: #E5E5E5;           /* separadores e bordas de card */
  --rodape: #3C2511;          /* rodapé — terra escurecido (mantém o sistema fechado) */
  --texto-escuro: #1A1A1A;    /* texto escuro sobre ocre, se necessário (5.99 OK) */

  /* Espaçamento */
  --margem-lateral: 24px;     /* mobile; escala em media queries */
  --gap-secao: 72px;          /* mobile; 120px no desktop */

  /* Raios — canto quase reto. Arredondado + linha fina lê como app consumer;
     o assunto aqui é máquina pesada. Ver IDENTIDADE.md, seção 6. */
  --raio-card: 4px;
  --raio-botao: 4px;
  --raio-campo: 4px;
}

/* ---------- 3. RESET / BASE ---------- */
*,
*::before,
*::after { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; scroll-padding-top: 110px; } /* compensa header fixo */

body {
  font-family: "Montserrat", -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  font-size: 18px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--cinza);
  background: var(--branco);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img { max-width: 100%; height: auto; display: block; }

a { color: var(--marrom); text-decoration: none; }

/* Foco visível — acessibilidade (borda marrom) */
:focus-visible {
  outline: 3px solid var(--marrom);
  outline-offset: 2px;
  border-radius: 2px;
}

/* ---------- 4. TIPOGRAFIA ---------- */
h1, h2, h3 { color: var(--marrom); line-height: 1.15; letter-spacing: -0.01em; }

h1 { font-size: 34px; font-weight: 900; }          /* mobile; 48px no desktop */
h2 { font-size: 27px; font-weight: 700; }          /* mobile; 36px no desktop */
h3 { font-size: 22px; font-weight: 700; }          /* mobile; 28px no desktop */

p { max-width: 65ch; }

.kicker {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ocre);           /* ocre como chamada visual sobre fundo claro/escuro */
  margin-bottom: 12px;
}
/* Marcador do kicker: filete curto que ecoa o traçado do terreno */
.kicker::before {
  content: "";
  width: 26px;
  height: 3px;
  border-radius: 2px;
  background: currentColor;
  flex: none;
}

.small { font-size: 15px; }

/* ---------- 5. LAYOUT ---------- */
.container {
  width: 100%;
  max-width: 1440px;
  margin-inline: auto;
  padding-inline: var(--margem-lateral);
}

.section { padding-block: var(--gap-secao); }
.section--alt { background: var(--fundo-alt); }

.section__head { position: relative; margin-bottom: 40px; max-width: 65ch; }
.section__head .kicker + h2 { margin-top: 0; }

/* Os índices 01–06 saíram: Empresa/Serviços/Equipamentos/Obras não são uma
   sequência, então o número era decoração fingindo de informação.
   A numeração real (1·2·3 das etapas da obra) vive em .etapa__num. */

/* Filete decorativo (verde/ocre) — usado com moderação */
.rule {
  width: 56px;
  height: 4px;
  border-radius: 2px;
  background: var(--verde);
  margin-top: 16px;
}
.rule--ocre { background: var(--ocre); }

/* ---------- 6. BOTÕES ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 48px;
  padding: 14px 26px;
  font-family: inherit;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
  border: 2px solid transparent;
  border-radius: var(--raio-botao);
  cursor: pointer;
  transition: background-color .3s ease, color .3s ease, border-color .3s ease;
  text-align: center;
}
.btn svg { width: 20px; height: 20px; flex: none; }

/* Primário — marrom + branco (8.49 OK) */
.btn--primary { background: var(--marrom); color: var(--branco); border-color: var(--marrom); }
.btn--primary:hover,
.btn--primary:focus-visible { background: var(--marrom-hover); border-color: var(--marrom-hover); color: var(--branco); }

/* Secundário — verde CORRIGIDO #627A2E + branco (4.84 OK) */
.btn--secondary { background: var(--verde-btn); color: var(--branco); border-color: var(--verde-btn); }
.btn--secondary:hover,
.btn--secondary:focus-visible { background: var(--verde-btn-hover); border-color: var(--verde-btn-hover); color: var(--branco); }

/* Terciário — fundo branco, borda marrom, texto marrom (8.49 OK); hover inverte */
.btn--outline { background: var(--branco); color: var(--marrom); border-color: var(--marrom); }
.btn--outline:hover,
.btn--outline:focus-visible { background: var(--marrom); color: var(--branco); }

.btn--lg { min-height: 56px; padding: 18px 34px; font-size: 18px; }
.btn--block { width: 100%; }

/* ---------- 7. HEADER (fixo, 90px) ---------- */
.header {
  position: fixed;
  inset: 0 0 auto 0;
  height: 90px;
  background: var(--branco);
  border-bottom: 1px solid var(--linha);
  z-index: 100;
}
.header__inner {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

/* Logo oficial em versão horizontal transparente. */
.brand { display: inline-flex; align-items: center; line-height: 0; }
.brand__logo { display: block; width: clamp(145px, 42vw, 220px); height: auto; }

/* Navegação desktop — escondida no mobile */
.nav { display: none; }
.nav__list { display: flex; align-items: center; gap: 26px; list-style: none; }
.nav__link {
  font-size: 15px; font-weight: 700; color: var(--cinza);
  padding: 6px 0; position: relative; transition: color .3s ease;
}
.nav__link:hover { color: var(--marrom); }
.nav__link::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
  height: 2px; background: var(--verde); transform: scaleX(0);
  transform-origin: left; transition: transform .3s ease;
}
.nav__link:hover::after { transform: scaleX(1); }

.header__actions { display: flex; align-items: center; gap: 12px; }

/* Botão WhatsApp compacto do header (mobile) */
.header__wpp {
  display: inline-flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border-radius: var(--raio-botao);
  background: var(--marrom); color: var(--branco);
}
.header__wpp svg { width: 24px; height: 24px; }
.header__cta { display: none; }

/* Hambúrguer */
.hamburger {
  width: 48px; height: 48px; display: inline-flex; align-items: center; justify-content: center;
  background: transparent; border: none; cursor: pointer; color: var(--marrom);
}
.hamburger svg { width: 28px; height: 28px; }
.hamburger .icon-close { display: none; }
.hamburger[aria-expanded="true"] .icon-open { display: none; }
.hamburger[aria-expanded="true"] .icon-close { display: block; }

/* Menu mobile (drawer) */
.mobile-menu {
  position: fixed; inset: 90px 0 auto 0;
  background: var(--branco); border-bottom: 1px solid var(--linha);
  padding: 12px var(--margem-lateral) 24px;
  transform: translateY(-12px); opacity: 0; pointer-events: none;
  transition: opacity .3s ease, transform .3s ease;
  z-index: 99;
}
.mobile-menu.is-open { opacity: 1; transform: none; pointer-events: auto; }
.mobile-menu__list { list-style: none; display: flex; flex-direction: column; }
.mobile-menu__list a {
  display: block; padding: 14px 4px; font-size: 18px; font-weight: 700;
  color: var(--cinza); border-bottom: 1px solid var(--linha);
}
.mobile-menu__list a:hover { color: var(--marrom); }
.mobile-menu .btn { margin-top: 18px; }

/* ---------- 8. HERO ---------- */
.hero {
  position: relative;
  min-height: 88vh;
  display: flex;
  align-items: center;
  padding-top: 90px;      /* header fixo */
  overflow: hidden;
  isolation: isolate;
}
.hero__media {
  position: absolute; inset: 0; z-index: -2;
  background: #2B1A10 center / cover no-repeat;
}
.hero__media img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; }
/* Overlay preto 55% — CORRIGIDO (passa em foto clara, média e escura) */
.hero__overlay { position: absolute; inset: 0; z-index: -1; background: rgba(0,0,0,0.55); }

.hero__inner { padding-block: 60px 90px; text-align: center; }
.hero .kicker { color: var(--ocre); }
.hero h1 {
  color: var(--branco);
  font-size: 34px;
  text-transform: uppercase;
  letter-spacing: 0;
  margin-bottom: 18px;
  text-wrap: balance;
}
.hero__sub {
  color: var(--branco);
  font-size: 18px;
  max-width: 60ch;
  margin: 0 auto 32px;
  opacity: 0.95;
}
.hero__buttons { display: flex; flex-direction: column; gap: 14px; }

.hero .contours { color: var(--ocre); opacity: 0.22; z-index: 0; }

/* Recorte inferior em curva ampla de morro (única concessão orgânica) */
.hero__curve {
  position: absolute; left: 0; right: 0; bottom: -1px; z-index: 0;
  width: 100%; height: 56px; display: block;
}
.hero__curve path { fill: var(--branco); }

/* ---------- 9. EMPRESA ---------- */
.empresa__text p + p { margin-top: 18px; }
.empresa__text { max-width: 62ch; }

/* ---------- 10. CARDS / SERVIÇOS ---------- */
.grid { display: grid; gap: 24px; }

.card {
  position: relative;
  background: var(--branco);
  border: 1px solid var(--linha);
  border-radius: var(--raio-card);
  padding: 32px;
  overflow: hidden;
  transition: transform .3s ease, border-color .3s ease;
  /* SEM sombra (manual, seção 12). A borda + a barra de acento fazem o trabalho. */
}
/* Barra de acento no topo — cresce no hover (movimento, não sombra) */
.card::before {
  content: "";
  position: absolute;
  inset: 0 auto auto 0;
  height: 4px;
  width: 100%;
  background: var(--verde);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .3s ease;
}
.card:hover { transform: translateY(-4px); border-color: var(--marrom); }
.card:hover::before { transform: scaleX(1); }
.card:nth-child(3n-1)::before { background: var(--ocre); }
.card:nth-child(3n)::before { background: var(--marrom); }
.card__icon { width: 44px; height: 44px; color: var(--marrom); margin-bottom: 18px; }
.card__icon svg { width: 100%; height: 100%; stroke: currentColor; }
.card__icon--verde { color: var(--verde); }
.card h3 { margin-bottom: 10px; }
.card p { color: var(--cinza); font-size: 16px; }
.card__link {
  display: inline-flex; align-items: center; gap: 6px;
  /* padding + margem menor: mantém o respiro visual de ~16px e leva o alvo
     de toque a 44px (era 24px — difícil de acertar no dedo). */
  margin-top: 6px; padding: 10px 0;
  font-size: 15px; font-weight: 700; color: var(--marrom);
}
.card__link:hover { color: var(--marrom-hover); }
.card__link svg { width: 16px; height: 16px; }

/* Foco — os três serviços que a frota realmente executa. Acento fixo (o
   hover dos .card já move a barra do topo); aqui o peso vem do título. */
.card--foco h3 { font-size: 24px; }
.card--foco p { font-size: 17px; }

/* ---------- 10b. ETAPAS DA OBRA ----------
   Aqui o número carrega informação: a obra É uma sequência. */
.etapas { margin-top: 48px; padding-top: 40px; border-top: 1px solid var(--linha); }
.etapas__head {
  font-size: 15px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--verde-texto); margin-bottom: 28px;
}
.etapas__list { list-style: none; display: grid; gap: 28px; }
.etapa { display: flex; gap: 20px; align-items: flex-start; }
.etapa__num {
  flex: none;
  width: 48px; height: 48px;
  display: grid; place-items: center;
  font-size: 22px; font-weight: 900; line-height: 1;
  color: var(--branco); background: var(--marrom);
  border-radius: var(--raio-card);
  font-variant-numeric: tabular-nums;
}
.etapa h3 { font-size: 20px; margin-bottom: 6px; }
.etapa p { color: var(--cinza); font-size: 16px; }
/* Serviços complementares — separados da sequência das etapas */
.services-extra { margin-top: 48px; padding-top: 40px; border-top: 1px solid var(--linha); }
.services-extra__head {
  display: inline-flex; align-items: center; gap: 12px;
  font-size: 15px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ocre); margin-bottom: 24px;
}
.services-extra__head::before {
  content: ""; width: 26px; height: 3px; border-radius: 2px; background: currentColor; flex: none;
}

/* ---------- 11. OBRAS ---------- */
.obras__antes-depois { display: grid; gap: 16px; margin: 32px 0; }
.antes-depois__item {
  margin: 0; overflow: hidden; border: 1px solid var(--linha);
  border-radius: var(--raio-card); background: var(--branco);
}
.antes-depois__item img {
  display: block; width: 100%; aspect-ratio: 3 / 4;
  object-fit: cover; object-position: center;
}
/* ---------- 12. DIFERENCIAIS ---------- */
.difs__grid { display: grid; gap: 24px; }
.dif { position: relative; padding: 28px 0 0; border-top: 3px solid var(--verde); }
.dif::before {
  content: "";
  position: absolute; top: -3px; left: 0;
  width: 40px; height: 3px; background: var(--ocre);
}
.dif__num {
  font-size: 52px; font-weight: 900; color: var(--marrom);
  line-height: 0.95; letter-spacing: -0.02em;
}
.dif__num .unit { display: block; font-size: 16px; font-weight: 700; color: var(--ocre); letter-spacing: 0.04em; text-transform: uppercase; margin-top: 4px; }
.dif h3 { font-size: 20px; margin: 14px 0 6px; }
.dif p { font-size: 16px; color: var(--cinza); }

/* ---------- 14. CTA ---------- */
.cta {
  position: relative;
  background: var(--marrom);
  color: var(--branco);
  text-align: center;
  overflow: hidden;
  isolation: isolate;
}
.cta .contours { color: #FFFFFF; opacity: 0.12; }
.cta > .container { position: relative; z-index: 1; }
.cta h2 { color: var(--branco); margin-bottom: 12px; }
.cta p { color: var(--branco); opacity: 0.9; margin: 0 auto 28px; max-width: 52ch; }
.cta .btn--primary { background: var(--branco); color: var(--marrom); border-color: var(--branco); }
.cta .btn--primary:hover { background: var(--fundo-alt); border-color: var(--fundo-alt); color: var(--marrom); }

/* ---------- 15. CONTATO ---------- */
.contato__grid { display: grid; gap: 48px; }

.contato__whats {
  border: 1px solid var(--linha); border-radius: var(--raio-card); padding: 32px;
  background: var(--branco);
}
.contato__whats h3 { margin-bottom: 8px; }
.contato__whats p { font-size: 16px; margin-bottom: 20px; }

.contato__dados { margin-top: 28px; }
.contato__dados dl { display: grid; grid-template-columns: auto 1fr; gap: 8px 16px; font-size: 16px; }
.contato__dados dt { font-weight: 700; color: var(--marrom); }
.contato__dados dd { color: var(--cinza); }

/* Formulário */
.form { display: grid; gap: 18px; }
.field { display: grid; gap: 6px; }
.field label { font-size: 15px; font-weight: 700; color: var(--marrom); }
.field .req { color: var(--ocre); }
.field input,
.field select,
.field textarea {
  width: 100%;
  min-height: 48px;
  padding: 12px 14px;
  font-family: inherit;
  font-size: 16px;
  color: var(--cinza);
  background: var(--branco);
  border: 1px solid var(--linha);
  border-radius: var(--raio-campo);
  transition: border-color .3s ease;
}
.field textarea { min-height: 120px; resize: vertical; }
.field input:focus,
.field select:focus,
.field textarea:focus {
  border-color: var(--marrom);       /* foco visível com borda marrom */
  outline: 2px solid var(--marrom);  /* anel de foco (sem sombra — manual, seção 12) */
  outline-offset: 0;
}
/* Estado de erro */
.field.has-error input,
.field.has-error select,
.field.has-error textarea { border-color: #B3261E; }
.field__error { font-size: 13px; color: #B3261E; font-weight: 700; display: none; }
.field.has-error .field__error { display: block; }

.consent { display: flex; align-items: flex-start; gap: 12px; }
.consent input { width: 22px; height: 22px; min-height: 0; margin-top: 3px; flex: none; accent-color: var(--marrom); }
.consent label { font-size: 14px; font-weight: 400; color: var(--cinza); }
.consent a { text-decoration: underline; }

.form__status { font-size: 15px; font-weight: 700; min-height: 1.2em; }
.form__status.is-error { color: #B3261E; }
.form__status.is-success { color: var(--verde-btn); }

/* Botão de resgate: aparece quando o envio por e-mail não é possível */
.form__fallback { margin-top: 14px; }

/* ---------- 16. RODAPÉ ---------- */
.footer {
  background: var(--rodape);          /* opção B (mantém o sistema fechado) */
  color: var(--branco);
  padding-block: 56px 28px;
}
.footer a { color: var(--branco); opacity: 0.85; }
.footer a:hover { opacity: 1; text-decoration: underline; }
.footer__grid { display: grid; gap: 36px; }
.footer__logo { display: block; width: min(230px, 100%); height: auto; filter: brightness(0) invert(1); }
.footer__brand p { font-size: 14px; opacity: 0.8; margin-top: 16px; max-width: 40ch; }
.footer__col h4 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--branco); margin-bottom: 14px; }
.footer__col ul { list-style: none; display: grid; gap: 10px; font-size: 15px; }
.footer__bottom {
  margin-top: 40px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,0.15);
  font-size: 13px; opacity: 0.75; display: flex; flex-wrap: wrap; gap: 8px 20px; justify-content: space-between;
}

/* ---------- 17. WHATSAPP FLUTUANTE ---------- */
.wpp-float {
  position: fixed; right: 20px; bottom: 20px; z-index: 90;
  width: 60px; height: 60px; border-radius: 50%;
  background: var(--marrom); color: var(--branco);
  display: inline-flex; align-items: center; justify-content: center;
  border: none; opacity: 0; pointer-events: none; transform: translateY(12px);
  transition: background-color .3s ease, opacity .2s ease, transform .2s ease;
  /* SEM animação de pulso (manual, seção 12). SEM sombra. */
}
.wpp-float.is-visible { opacity: 1; pointer-events: auto; transform: translateY(0); }
.wpp-float:hover { background: var(--marrom-hover); }
.wpp-float svg { width: 32px; height: 32px; }

/* Marcador de dado a preencher (find & replace) */
.ph {
  color: inherit;
  border-bottom: 2px dotted var(--ocre);
}

/* ---------- 19. ANIMAÇÕES (fade in / slide up) ---------- */
/* Sem "transition" aqui: a interpolação é feita pelo GSAP (main.js) quando
   disponível. O fallback sem GSAP usa a classe is-visible sem transição
   (aparece direto) — ver seção 2 do main.js. */
.reveal { opacity: 0; transform: translateY(16px); }
.reveal.is-visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1; transform: none; transition: none; }
  * { transition-duration: 0.001ms !important; }
}

/* Utilidades */
.visually-hidden {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.lead { font-size: 20px; }

/* =========================================================================
   20. CAMADA CRIATIVA — topografia, seção de terreno, faixas
   Motivo: curvas de nível + corte de terreno. É a linguagem de quem mede
   e move terra — dá personalidade sem virar enfeite gratuito.
   ========================================================================= */

/* ---- Curvas de nível (decorativo, atrás do conteúdo) ---- */
.contours {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
  opacity: 0.5;
}
.contours path { fill: none; stroke: currentColor; stroke-width: 1.4; }

/* Faixa de números do hero — prova concreta logo de cara */
.hero__stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px 20px;
  margin-top: 40px;
  padding-top: 26px;
  border-top: 1px solid rgba(255,255,255,0.22);
  max-width: 560px;
}
.hero__inner { position: relative; z-index: 1; }
.hero__stat b {
  display: block;
  font-size: 30px;
  font-weight: 900;
  color: var(--branco);
  line-height: 1;
  letter-spacing: -0.01em;
}
.hero__stat b .unit { color: var(--ocre); font-size: 16px; }
.hero__stat span {
  display: block;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--branco);
  opacity: 0.8;
  margin-top: 6px;
}

/* Silhueta de terreno em camadas ao pé do hero (substitui a curva simples) */
.hero__terrain {
  position: absolute; left: 0; right: 0; bottom: -1px; z-index: 0;
  width: 100%; height: 70px; display: block;
}
.hero__terrain .layer-back { fill: var(--fundo-alt); }
.hero__terrain .layer-front { fill: var(--branco); }
.hero__terrain .layer-line { fill: none; stroke: var(--ocre); stroke-width: 2; opacity: 0.5; }

/* ---- Banda de corte e aterro (statement + seção de terreno) ---- */
.band {
  position: relative;
  background: var(--marrom);
  color: var(--branco);
  overflow: hidden;
  isolation: isolate;
}
.band .contours { color: #FFFFFF; opacity: 0.14; }
.band__inner {
  position: relative;
  z-index: 1;
  display: grid;
  gap: 32px;
  align-items: center;
  padding-block: 64px;
}
.band__text h2 { color: var(--branco); }
.band__text p { color: var(--branco); opacity: 0.9; font-size: 17px; margin-top: 14px; }
.band__text .kicker { color: var(--ocre); }

/* Diagrama: perfil de terreno antes (irregular) → depois (na cota) */
.cutfill { width: 100%; height: auto; display: block; }
.cutfill .ground-before { fill: none; stroke: var(--ocre); stroke-width: 2.5; stroke-dasharray: 6 5; }
.cutfill .ground-after { fill: rgba(255,255,255,0.10); stroke: var(--branco); stroke-width: 2.5; }
.cutfill .datum { stroke: rgba(255,255,255,0.35); stroke-width: 1; stroke-dasharray: 3 4; }
.cutfill text { fill: var(--branco); font-family: inherit; font-size: 13px; font-weight: 700; }
.cutfill .cut-label { fill: var(--ocre); }

/* ---- Divisor angular entre seções (corte reto do terreno) ---- */
.section--cut { clip-path: polygon(0 0, 100% 26px, 100% 100%, 0 100%); margin-top: -26px; }

/* =========================================================================
   21. RESPONSIVO (mobile-first → escala para cima)
   ========================================================================= */

/* Tablet ≥ 640px */
@media (min-width: 640px) {
  :root { --margem-lateral: 40px; }
  .hero__buttons { flex-direction: row; }
  .hero__buttons .btn { flex: 1; }
  .grid--2 { grid-template-columns: 1fr 1fr; }
  .difs__grid { grid-template-columns: 1fr 1fr; }
  .footer__grid { grid-template-columns: 1.4fr 1fr 1fr; }
  .obras__antes-depois { grid-template-columns: 1fr 1fr; }
}

/* Notebook ≥ 1024px */
@media (min-width: 1024px) {
  :root { --margem-lateral: 80px; --gap-secao: 120px; }

  h1 { font-size: 48px; }
  h2 { font-size: 36px; }
  h3 { font-size: 28px; }
  /* Sobe junto: senão o 24px fixo abaixo venceria por especificidade e os
     três focos ficariam MENORES que os cards secundários. */
  .card--foco h3 { font-size: 30px; }

  .hero { min-height: 92vh; }
  .hero__inner { text-align: left; padding-block: 90px 120px; }
  .hero h1 { font-size: 48px; }
  .hero__sub { margin-inline: 0; }
  .hero__buttons { max-width: 560px; }
  .hero__curve { height: 80px; }

  .nav { display: block; }
  .header__cta { display: inline-flex; }
  .header__wpp { display: none; }         /* no desktop o CTA cobre; WhatsApp fica no flutuante + hero + CTA */
  .hamburger { display: none; }
  .mobile-menu { display: none; }

  .grid--3 { grid-template-columns: repeat(3, 1fr); }
  .grid--4 { grid-template-columns: repeat(4, 1fr); }
  .difs__grid { grid-template-columns: repeat(4, 1fr); }
  .etapas__list { grid-template-columns: repeat(3, 1fr); gap: 32px; }

  .contato__grid { grid-template-columns: 0.9fr 1.1fr; align-items: start; }
  .cta p { font-size: 20px; }

  .hero__terrain { height: 100px; }
  .band__inner { grid-template-columns: 1fr 1fr; gap: 56px; padding-block: 90px; }
  .hero__stat b { font-size: 36px; }
  .services-extra { margin-top: 64px; padding-top: 56px; }
}

/* Desktop largo ≥ 1280px */
@media (min-width: 1280px) {
  :root { --margem-lateral: 120px; }
}
