/* =====================================================================
   SAMARTINO ENGENHARIA — Theme stylesheet
   Design system: Laranja Samartino (#FF4E1C) + Grafite/Preto/Branco/Cinza
   Type: Liszt FY (fluid clamp() display sizes)
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. Fontes — Liszt FY (12 instâncias estáticas)
   --------------------------------------------------------------------- */
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Thin.ttf") format("truetype");
  font-weight: 100;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-ThinItalic.ttf") format("truetype");
  font-weight: 100;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Light.ttf") format("truetype");
  font-weight: 300;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-LightItalic.ttf") format("truetype");
  font-weight: 300;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Book.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-BookItalic.ttf") format("truetype");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Regular.ttf") format("truetype");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Italic.ttf") format("truetype");
  font-weight: 500;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Bold.ttf") format("truetype");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-BoldItalic.ttf") format("truetype");
  font-weight: 700;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-Black.ttf") format("truetype");
  font-weight: 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Liszt FY";
  src: url("../fonts/TRYLisztFY-BlackItalic.ttf") format("truetype");
  font-weight: 900;
  font-style: italic;
  font-display: swap;
}

/* ---------------------------------------------------------------------
   2. Design tokens
   --------------------------------------------------------------------- */
:root {
  /* Paleta mandatória */
  --orange-samartino: #FF4E1C;
  --black-samartino: #020305;
  --graphite-samartino: #2E2F31;
  --graphite-2-samartino: #1B1B1A;
  --white-samartino: #FFFFFF;
  --gray-samartino: #EDF1F5;

  --orange-hover: oklch(from var(--orange-samartino) calc(l - 0.06) c h);
  --orange-active: oklch(from var(--orange-samartino) calc(l - 0.11) c h);
  --orange-tint-12: oklch(from var(--orange-samartino) l c h / 0.12);
  --orange-tint-20: oklch(from var(--orange-samartino) l c h / 0.20);

  --bg-canvas: var(--black-samartino);
  --bg-surface-1: var(--graphite-samartino);
  --bg-surface-2: var(--graphite-2-samartino);
  --bg-light: var(--gray-samartino);
  --bg-light-alt: var(--white-samartino);

  --surface-card-dark: var(--graphite-samartino);
  --surface-card-light: var(--white-samartino);

  --text-on-dark-primary: var(--white-samartino);
  --text-on-dark-secondary: var(--white-samartino);
  --text-on-dark-muted: oklch(from var(--white-samartino) l c h / 0.44);

  --text-on-light-primary: var(--black-samartino);
  --text-on-light-secondary: oklch(from var(--black-samartino) l c h / 0.64);
  --text-on-light-muted: oklch(from var(--black-samartino) l c h / 0.44);

  --accent: var(--orange-samartino);
  --accent-hover: var(--orange-hover);
  --accent-active: var(--orange-active);
  --accent-contrast: var(--white-samartino);

  --border-on-dark: oklch(from var(--white-samartino) l c h / 0.14);
  --border-on-dark-strong: oklch(from var(--white-samartino) l c h / 0.28);
  --border-on-light: oklch(from var(--black-samartino) l c h / 0.12);

  --focus-ring: var(--orange-samartino);

  --status-danger: #FF4E1C;
  --status-warning: #F2B300;
  --status-success: #2E9E5B;
  --status-info: #EDF1F5;

  /* Tipografia */
  --font-display: "Liszt FY", "Helvetica Neue", Arial, sans-serif;
  --font-body: "Liszt FY", "Helvetica Neue", Arial, sans-serif;

  --weight-thin: 100;
  --weight-light: 300;
  --weight-book: 400;
  --weight-regular: 500;
  --weight-bold: 700;      /* também usado onde a hierarquia pede "Semibold/600" — a Liszt FY não tem instância 600 */
  --weight-black: 900;     /* reservado à logotipo/wordmark da marca, não usado em headings de conteúdo */

  /* Hierarquia tipográfica do conteúdo — tamanho "desktop" é o teto do clamp().
     H1: 40–44px · H2: 30–36px · H3: 24–28px, peso Bold em todos (só título/botão/eyebrow/link levam 600+). */
  --size-h1: clamp(2rem, 1.5rem + 2vw, 2.75rem);        /* 44px desktop — título principal, 1 por página */
  --size-h2: clamp(1.5rem, 1.15rem + 1.4vw, 2.25rem);   /* 36px desktop — título de seção */
  --size-h3: clamp(1.25rem, 1.05rem + 0.8vw, 1.75rem);  /* 28px desktop — subtítulo / título de card */

  --text-body-lg: 1.125rem; /* 18px — Lead: parágrafo de destaque abaixo de H1/H2 */
  --text-body-md: 1rem;     /* 16px — Body: parágrafo padrão */
  --text-body-sm: 0.875rem; /* 14px — Small: datas, autor, legendas */
  --text-caption: 0.75rem;  /* 12px — Micro: rodapé/legal */
  --text-eyebrow: 0.8125rem; /* 13px — Eyebrow: rótulo acima de um H2 */

  --leading-tight: 1.05;
  --leading-snug: 1.2;
  --leading-normal: 1.5;
  --leading-relaxed: 1.7;

  --tracking-tight: -0.02em;
  --tracking-normal: 0;
  --tracking-wide: 0.08em;
  --tracking-wider: 0.14em;

  /* Espaçamento (base 4px) */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;
  --space-10: 8rem;

  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 20px;
  --radius-pill: 999px;

  --shadow-sm: 0 2px 8px rgba(2, 3, 5, 0.28);
  --shadow-md: 0 8px 24px rgba(2, 3, 5, 0.36);
  --shadow-lg: 0 16px 48px rgba(2, 3, 5, 0.48);
  --shadow-glow-accent: 0 0 0 1px oklch(from var(--orange-samartino) l c h / 0.4), 0 8px 24px oklch(from var(--orange-samartino) l c h / 0.28);

  --border-width-sm: 1px;
  --border-width-md: 1.5px;

  --container-max: 1280px;
  --container-pad: clamp(1.25rem, 4vw, 4rem);

  /* Altura do .site-header (fixed) + espaço acima dele + folga — usado para
     compensar o padding-top do que vier logo abaixo, já que o header saiu
     do fluxo normal do documento para poder flutuar sobre o Hero. */
  --header-clearance: 100px;
}

/* ---------------------------------------------------------------------
   3. Reset & base
   --------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html {
  scroll-behavior: smooth;
  /* Mata o overflow horizontal criado pelos elementos full-bleed (width:100vw
     inclui a largura da barra de rolagem vertical). Sem isso, a página ganha
     uma barra de rolagem horizontal e o conteúdo pode deslizar lateralmente,
     desalinhando-se de qualquer camada position:fixed (como a grade de debug).
     "hidden" é fallback para navegadores antigos; "clip" (preferido) impede
     até rolagem programática. */
  overflow-x: hidden;
  overflow-x: clip;
}
body {
  margin: 0;
  background: var(--bg-canvas);
  color: var(--text-on-dark-primary);
  font-family: var(--font-body);
  font-weight: var(--weight-book);
  line-height: var(--leading-normal);
  -webkit-font-smoothing: antialiased;
}
img, svg { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
ul, ol { margin: 0; padding: 0; list-style: none; }
button, input, select, textarea { font-family: inherit; }
h1, h2, h3, h4, p, figure { margin: 0; overflow-wrap: break-word; }

.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding-left: var(--container-pad);
  padding-right: var(--container-pad);
}

.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 100;
  background: var(--accent);
  color: var(--white-samartino);
  padding: var(--space-3) var(--space-5);
  border-radius: var(--radius-sm);
}
.skip-link:focus { left: var(--space-4); top: var(--space-4); }

:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* Eyebrow (rótulo técnico) */
.eyebrow {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  max-width: 100%;
  color: var(--accent);
  font-weight: var(--weight-bold);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  margin-bottom: var(--space-3);
}
.eyebrow__symbol { height: 16px; width: auto; flex-shrink: 0; }
.eyebrow span { min-width: 0; }

h1, .h1 { font-family: var(--font-display); font-size: var(--size-h1); font-weight: var(--weight-bold); color: var(--text-on-dark-primary); letter-spacing: var(--tracking-tight); line-height: var(--leading-tight); }
h2, .h2 { font-family: var(--font-display); font-size: var(--size-h2); font-weight: var(--weight-bold); color: var(--text-on-dark-primary); letter-spacing: var(--tracking-tight); line-height: var(--leading-tight); }
h3, .h3 { font-family: var(--font-display); font-size: var(--size-h3); font-weight: var(--weight-bold); color: var(--text-on-dark-primary); line-height: var(--leading-snug); }

.text-lg { font-size: var(--text-body-lg); }
.text-secondary { color: var(--text-on-dark-secondary); }
.text-muted { color: var(--text-on-dark-muted); }

/* ---------------------------------------------------------------------
   4. Botões
   --------------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: var(--font-display);
  font-weight: var(--weight-bold);
  font-size: var(--text-body-md);
  border-radius: var(--radius-md);
  padding: 0.7rem 1.5rem;
  border: var(--border-width-sm) solid transparent;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.28s ease, transform 0.28s ease, color 0.28s ease, border-color 0.28s ease;
}
.btn:active { transform: scale(0.98); }
.btn svg { flex-shrink: 0; }

.btn-primary { background: var(--accent); color: var(--accent-contrast); }
.btn-primary:hover { background: var(--accent-hover); color: var(--accent-contrast); }
.btn-primary:active { background: var(--accent-active); }

.btn-secondary {
  position: relative;
  z-index: 0;
  background: transparent;
  color: var(--text-on-dark-primary);
  border: var(--border-width-md) solid var(--border-on-dark-strong);
}
/* Fundo + borda (não o texto) somem da esquerda pra direita no hover: o
   texto vem sempre branco sólido via color (nunca depende de mask); o
   efeito de sumiço fica isolado num ::before atrás (z-index -1), que é o
   único elemento com mask-image — evita o bug de mask-image no próprio
   botão esmaecer o texto junto com o fundo. */
.btn-secondary:hover { border-color: transparent; color: var(--white-samartino); }
.btn-secondary::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: oklch(from var(--accent) l c h / 0.35);
  border: var(--border-width-md) solid var(--accent);
  opacity: 0;
  mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.7) 35%, rgba(0,0,0,0.3) 65%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.7) 35%, rgba(0,0,0,0.3) 65%, transparent 100%);
  transition: opacity 0.28s ease;
  pointer-events: none;
}
.btn-secondary:hover::before { opacity: 1; }

.btn-light { background: var(--white-samartino); color: var(--black-samartino); }
.btn-light:hover { background: var(--gray-samartino); color: var(--black-samartino); }

.btn-dark { background: var(--black-samartino); color: var(--white-samartino); }
.btn-dark:hover { background: var(--graphite-2-samartino); color: var(--white-samartino); }

.btn-sm { padding: 0.5rem 1rem; font-size: var(--text-body-sm); }

/* ---------------------------------------------------------------------
   5. Cards, badges
   --------------------------------------------------------------------- */
.card {
  background: var(--surface-card-dark);
  border: 1px solid var(--border-on-dark);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.card--hoverable:hover { box-shadow: var(--shadow-lg); transform: translateY(-2px); }

.icon-tile {
  width: 44px;
  height: 44px;
  border-radius: var(--radius-md);
  background: var(--orange-tint-12);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--accent);
  flex-shrink: 0;
}
.icon-tile--lg { width: 56px; height: 56px; }

.badge {
  display: inline-flex;
  align-items: center;
  padding: 0.25rem 0.75rem;
  border-radius: var(--radius-pill);
  font-weight: var(--weight-bold);
  font-size: var(--text-caption);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
  background: var(--orange-tint-20);
  color: var(--orange-samartino);
  border: 1px solid oklch(from var(--orange-samartino) l c h / 0.35);
}

/* Placeholder de imagem (sem fotografia real disponível) */
.placeholder-image {
  aspect-ratio: 16/9;
  width: 100%;
  border-radius: var(--radius-lg);
  background: repeating-linear-gradient(135deg, var(--bg-surface-1) 0 14px, var(--bg-surface-2) 14px 28px);
  border: 1px solid var(--border-on-dark);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--text-on-dark-muted);
  font-size: var(--text-body-sm);
  text-align: center;
  padding: var(--space-4);
}
.placeholder-image--4-3 { aspect-ratio: 4/3; }

/* ---------------------------------------------------------------------
   6. Header
   --------------------------------------------------------------------- */
.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 40;
  width: 100%;
  background: rgba(2, 3, 5, 0.3);
  -webkit-backdrop-filter: blur(16px) saturate(150%);
  backdrop-filter: blur(16px) saturate(150%);
  border-bottom: 1px solid var(--border-on-dark);
}
.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 88px;
  max-width: var(--container-max);
  margin: 0 auto;
  padding-left: var(--container-pad);
  padding-right: var(--container-pad);
}
.site-logo { display: flex; align-items: center; background: none; border: none; cursor: pointer; padding: 0; }
.site-logo img { max-height: 56px; width: auto; }

.primary-nav { display: flex; gap: var(--space-6); position: relative; top: 3px; }
.primary-nav a {
  background: none;
  border: none;
  font-size: var(--text-body-md);
  font-weight: var(--weight-regular);
  color: var(--text-on-dark-secondary);
  border-bottom: 2px solid transparent;
  padding-bottom: 4px;
  display: inline-block;
}
.primary-nav a:hover,
.primary-nav .current-menu-item > a,
.primary-nav .current_page_item > a {
  color: var(--white-samartino);
  font-weight: var(--weight-bold);
  border-bottom-color: var(--accent);
}

.nav-dropdown { position: relative; padding-bottom: var(--space-4); margin-bottom: calc(var(--space-4) * -1); }
.primary-nav a.nav-dropdown__trigger {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.nav-dropdown__trigger svg { flex-shrink: 0; transition: transform 0.24s ease; transform-origin: center; }
.nav-dropdown:hover .nav-dropdown__trigger svg,
.nav-dropdown:focus-within .nav-dropdown__trigger svg { transform: rotate(180deg); }
.nav-dropdown__panel {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%) translateY(8px);
  min-width: 320px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--space-3);
  background: var(--bg-surface-1);
  border: 1px solid var(--border-on-dark);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.24s ease, transform 0.24s ease, visibility 0.24s;
  z-index: 50;
}
.nav-dropdown:hover .nav-dropdown__panel,
.nav-dropdown:focus-within .nav-dropdown__panel {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
}
.nav-dropdown__panel a {
  padding: 0.6rem 0.75rem;
  border-radius: var(--radius-md);
  font-size: var(--text-body-sm);
  font-weight: var(--weight-regular);
  color: var(--text-on-dark-secondary);
  border-bottom: none;
  white-space: normal;
}
.nav-dropdown__panel a:hover {
  background: var(--bg-surface-2);
  color: var(--white-samartino);
  font-weight: var(--weight-regular);
}

.header-actions { display: flex; align-items: center; gap: var(--space-4); }
.header-social { display: flex; align-items: center; gap: var(--space-4); }
.header-social a { display: inline-flex; color: var(--white-samartino); transition: color 0.28s ease; }
.header-social a:hover { color: var(--accent); }
.header-cta { border-radius: var(--radius-pill); padding: 0.55rem 1.25rem; font-size: var(--text-body-sm); }
.mobile-toggle { display: none; background: none; border: none; color: var(--white-samartino); cursor: pointer; padding: 4px; }

.mobile-nav {
  display: none;
  flex-direction: column;
  gap: var(--space-3);
  border-top: 1px solid var(--border-on-dark);
  padding: var(--space-4) var(--container-pad);
}
.mobile-nav.is-open { display: flex; }
.mobile-nav a { color: var(--white-samartino); font-size: var(--text-body-md); padding: 0.5rem 0; display: block; }
.mobile-nav .current-menu-item > a { color: var(--accent); font-weight: var(--weight-bold); }

.mobile-nav__dropdown-head { display: flex; align-items: center; justify-content: space-between; }
.mobile-nav__dropdown-head a { flex: 1; }
.mobile-nav__dropdown-toggle {
  background: none;
  border: none;
  color: var(--white-samartino);
  padding: 0.5rem;
  cursor: pointer;
  transition: transform 0.24s ease;
}
.mobile-nav__dropdown.is-open .mobile-nav__dropdown-toggle { transform: rotate(180deg); }
.mobile-nav__dropdown-panel {
  display: none;
  flex-direction: column;
  gap: 2px;
  padding: 0.25rem 0 0.5rem var(--space-4);
}
.mobile-nav__dropdown.is-open .mobile-nav__dropdown-panel { display: flex; }
.mobile-nav__dropdown-panel a {
  color: var(--text-on-dark-secondary);
  font-size: var(--text-body-sm);
  padding: 0.4rem 0;
}
.mobile-nav__dropdown-panel a:hover { color: var(--white-samartino); }
.header-social--mobile {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  margin-top: var(--space-2);
  padding-top: var(--space-4);
  border-top: 1px solid var(--border-on-dark);
}
.header-social--mobile a { display: inline-flex; color: var(--white-samartino); padding: 0; }
.header-social--mobile a:hover { color: var(--accent); }

@media (max-width: 860px) {
  .desktop-nav { display: none !important; }
  .mobile-toggle { display: inline-flex !important; }
}

/* ---------------------------------------------------------------------
   7. Seções gerais
   --------------------------------------------------------------------- */
.section { padding-top: 80px; padding-bottom: 80px; }
.section--sm { padding-top: var(--space-6); padding-bottom: var(--space-6); }
.section--bg-canvas { background: var(--bg-canvas); }
.section--bg-surface-1 { background: var(--bg-surface-1); }
.section--bg-surface-2 { background: var(--bg-surface-2); }

/* O .site-header é fixed (fora do fluxo, flutua sobre a 1ª seção da página
   para o blur pegar o fundo dela) — toda primeira seção de <main> que NÃO
   seja .hero/.qshero/.solucoes-hero (essas já reservam o espaço no próprio
   padding-top) precisa desse respiro extra para o conteúdo não nascer atrás
   do header. */
main > section:first-child:not(.hero):not(.qshero):not(.solucoes-hero) {
  padding-top: calc(80px + var(--header-clearance));
}
main > section:first-child.section--sm:not(.hero):not(.qshero):not(.solucoes-hero) {
  padding-top: calc(var(--space-6) + var(--header-clearance));
}
main > section:first-child.section--bg-surface-1:not(.section) {
  padding-top: var(--header-clearance);
}

/* Linha divisória sutil entre seções consecutivas da Home — aplicada no
   elemento <section> raiz (não só .section), para cobrir também Hero,
   marquee, faixa CTA e "Samartino em números", que têm padding próprio. */
main > section + section {
  border-top: 1px solid var(--border-on-dark-strong);
}

/* Hero */
.hero {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  /* +100px em cima e embaixo, somados ao respiro padrão da seção, para abrir
     espaço vertical suficiente para a foto full-bleed do lado direito.
     +var(--header-clearance) no topo compensa o header fixed (fica sobreposto
     à seção para o blur pegar o fundo/imagem, em vez de ficar sobre a cor
     sólida do body). */
  padding-top: calc(var(--space-9) + 100px + var(--header-clearance));
  padding-bottom: calc(var(--space-8) + 100px);
  background: var(--black-samartino);
}
/* Textura de fundo da hero: UMA única camada cobrindo a seção inteira,
   por cima do texto E da foto (incluindo a área com overlay/fade), usando
   mix-blend-mode para não apagar o que está por baixo. .hero precisa do
   próprio isolation:isolate para este ::after (mix-blend-mode) se misturar
   apenas com o conteúdo da própria .hero, sem vazar para seções vizinhas —
   e para alcançar visualmente a .hero-media (que tem seu isolation:isolate
   próprio, para o duotone interno dela não vazar), esta camada usa
   z-index maior que o da mídia em vez de ficar atrás de tudo. */
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background-image: url('../images/textures/textura-mesclada.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.075;
  mix-blend-mode: screen;
  pointer-events: none;
}
@media (min-width: 1180px) {
  /* Acima de 1180px a foto ocupa metade direita da seção (.hero-media,
     left:50%) — a textura precisa ir apagando ao chegar nessa área nítida
     da imagem. mask-image combinado com mix-blend-mode no MESMO elemento
     não compõe de forma confiável entre engines (mesma classe de bug que
     background-attachment:fixed deu aqui) — em vez de mascarar, empilha-se
     um segundo background (gradiente sólido, cor do canvas) POR CIMA da
     textura, no mesmo elemento, cobrindo-a gradualmente da metade da tela
     em diante. Como o elemento inteiro já usa mix-blend-mode:screen, esse
     gradiente também participa do blend, mas por ser da cor do próprio
     fundo (preto) ele não clareia nada — some visualmente e "apaga" a
     textura por trás dele em vez de mascará-la. */
  .hero::after {
    background-image:
      linear-gradient(90deg,
        transparent 0%,
        transparent 38%,
        rgba(2, 3, 5, 0.05) 43%,
        rgba(2, 3, 5, 0.11) 48%,
        rgba(2, 3, 5, 0.19) 53%,
        rgba(2, 3, 5, 0.29) 58%,
        rgba(2, 3, 5, 0.41) 63%,
        rgba(2, 3, 5, 0.53) 68%,
        rgba(2, 3, 5, 0.65) 73%,
        rgba(2, 3, 5, 0.76) 78%,
        rgba(2, 3, 5, 0.86) 83%,
        rgba(2, 3, 5, 0.93) 88%,
        rgba(2, 3, 5, 0.98) 94%,
        var(--black-samartino) 100%
      ),
      url('../images/textures/textura-mesclada.webp');
    background-size: cover, cover;
    background-position: center, center;
    background-repeat: no-repeat, no-repeat;
  }
}
.hero-grid { position: relative; z-index: 2; }
.hero-content { max-width: 528px; }
.hero h1 {
  max-width: 528px;
  margin: 0 0 var(--space-5);
  font-size: clamp(1.6rem, 1.2rem + 1.6vw, 2.25rem);
  text-transform: uppercase;
}
.hero-title-accent { color: inherit; }
.hero p {
  /* Mesma largura de referência do H1 (5,5 colunas = 528px). Texto calibrado
     (medido na Liszt FY Book, 16px) para quebrar em exatamente 3 linhas
     bem equilibradas nessa largura. */
  font-size: var(--text-body-md);
  color: var(--text-on-dark-secondary);
  line-height: var(--leading-relaxed);
  max-width: 528px;
  margin: 0 0 var(--space-6);
}
.hero-actions { display: flex; gap: var(--space-4); flex-wrap: wrap; }

/* Variante sem foto lateral (páginas institucionais, ex.: Blog) — texto
   centralizado ocupando a largura do container, sem o grid de 2 colunas
   nem o duotone da .hero-media. */
.hero--centered { padding-bottom: var(--space-9); }
.hero--centered .hero-content { max-width: 640px; margin: 0 auto; text-align: center; }
.hero--centered .hero-content .eyebrow { justify-content: center; margin: 0 auto var(--space-4); }
.hero--centered .hero h1,
.hero--centered .hero-content h1 { max-width: 100%; margin-left: auto; margin-right: auto; }
.hero--centered .hero-content p { max-width: 100%; margin-left: auto; margin-right: auto; }
.hero--centered .hero-actions { justify-content: center; }

/* Imagem da hero — no mobile/tablet (empilhado), é um bloco normal dentro do
   container, com cantos arredondados como o placeholder antigo. */
.hero-media {
  position: relative;
  margin-top: var(--space-8);
  border-radius: var(--radius-lg);
  overflow: hidden;
  aspect-ratio: 16/9;
  /* A imagem do banner principal já vem pronta com o tratamento de marca
     (duotone preto/laranja, elementos gráficos do "S") — sem filtro/blend
     aqui, só exibida como está. */
  background: var(--black-samartino);
}
.hero-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.hero-media::after { content: ""; position: absolute; inset: 0; pointer-events: none; }

@media (min-width: 1180px) {
  /* Desktop: a imagem ocupa o espaço à direita da coluna de texto MAIS todo
     o espaço até a borda real do navegador (full-bleed à direita).
     left:50% calculado para nunca invadir o texto: .hero-content tem
     max-width:528px + container-pad (até 64px) partindo da borda do
     .container (que pode ter margem própria até 1280px). No pior caso real
     (viewport 1180px, limite deste breakpoint) o fim do texto cai a ~48,7%
     da viewport — 50% garante folga em qualquer largura ≥1180px, já que a
     % de viewport ocupada pelo texto só diminui conforme a tela cresce
     (container/padding saturam em 1280px/64px enquanto a viewport continua
     crescendo). Testado e corrigido em 2026-07-22 após left:40% e left:44%
     ainda cortarem "protege," em telas ~1180–1280px. */
  .hero-media {
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
    bottom: 0;
    left: 15%;
    margin-top: 0;
    border-radius: 0;
    aspect-ratio: auto;
  }
  /* Esfumaçado longo e suave (vários stops em vez de poucos, para não criar
     um degradê "em degrau" que pareça um corte reto) na borda interna
     (esquerda), fundindo a imagem ao fundo escuro de forma gradual. */
  .hero-media::after {
    background: linear-gradient(90deg,
      var(--black-samartino) 0%,
      rgba(2, 3, 5, 0.98) 10%,
      rgba(2, 3, 5, 0.93) 20%,
      rgba(2, 3, 5, 0.84) 30%,
      rgba(2, 3, 5, 0.71) 40%,
      rgba(2, 3, 5, 0.57) 48%,
      rgba(2, 3, 5, 0.43) 56%,
      rgba(2, 3, 5, 0.31) 64%,
      rgba(2, 3, 5, 0.21) 72%,
      rgba(2, 3, 5, 0.12) 80%,
      rgba(2, 3, 5, 0.05) 88%,
      transparent 98%
    );
  }
  /* Textura só é revelada onde o fade acima já escureceu a foto — mesma
     curva do gradiente do ::after, usada aqui como máscara de opacidade. */
  .hero-media::before {
    -webkit-mask-image: linear-gradient(90deg,
      #000 0%,
      rgba(0, 0, 0, 0.98) 10%,
      rgba(0, 0, 0, 0.93) 20%,
      rgba(0, 0, 0, 0.84) 30%,
      rgba(0, 0, 0, 0.71) 40%,
      rgba(0, 0, 0, 0.57) 48%,
      rgba(0, 0, 0, 0.43) 56%,
      rgba(0, 0, 0, 0.31) 64%,
      rgba(0, 0, 0, 0.21) 72%,
      rgba(0, 0, 0, 0.12) 80%,
      rgba(0, 0, 0, 0.05) 88%,
      transparent 98%
    );
    mask-image: linear-gradient(90deg,
      #000 0%,
      rgba(0, 0, 0, 0.98) 10%,
      rgba(0, 0, 0, 0.93) 20%,
      rgba(0, 0, 0, 0.84) 30%,
      rgba(0, 0, 0, 0.71) 40%,
      rgba(0, 0, 0, 0.57) 48%,
      rgba(0, 0, 0, 0.43) 56%,
      rgba(0, 0, 0, 0.31) 64%,
      rgba(0, 0, 0, 0.21) 72%,
      rgba(0, 0, 0, 0.12) 80%,
      rgba(0, 0, 0, 0.05) 88%,
      transparent 98%
    );
  }
}

/* Faixa de frases em loop infinito — transição entre a Hero e a seção
   seguinte, para suavizar o corte brusco entre dois blocos escuros.
   O track contém o mesmo conjunto de frases duplicado 2x (via PHP); a
   animação anda exatamente -50% (a largura de 1 conjunto), então o loop
   fecha sem "salto" perceptível. */
.marquee-band {
  background: var(--accent);
  overflow: hidden;
  padding: var(--space-4) 0;
}
.marquee-track {
  display: flex;
  align-items: center;
  width: max-content;
  animation: marquee-scroll 30s linear infinite;
}
.marquee-item {
  font-family: var(--font-display);
  font-weight: var(--weight-bold);
  font-size: var(--text-body-md);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
  color: var(--accent-contrast);
  white-space: nowrap;
  padding: 0 var(--space-4);
}
.marquee-dot { height: 20px; width: auto; flex-shrink: 0; }
@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; }
}

/* Prévia "Quem somos" — imagem à esquerda, texto à direita (alterna com a Hero).
   Estrutura idêntica ao grid de referência (repeat(12,1fr)): cada metade
   ocupa exatamente 6 colunas, com o gap sendo o único espaço "perdido" no
   meio — não uma proporção solta com gap fixo grande demais. */
.section-sobre-preview {
  position: relative;
  isolation: isolate;
}
.section-sobre-preview::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  /* Gradiente radial escuro (cor do grafite da seção) empilhado POR CIMA da
     textura no mesmo elemento, em vez de mask-image — mask-image mal tinha
     efeito aqui (mesma classe de bug de composição com mix-blend-mode já
     vista no hero). O gradiente vai de transparente no centro a opaco nas
     bordas: como todo o ::after usa mix-blend-mode:overlay, a parte do
     gradiente com a cor exata do fundo não altera nada visualmente (soma
     zero sobre si mesma) — só "apaga" a textura por trás dela nas bordas. */
  background-image:
    radial-gradient(ellipse at center,
      transparent 25%,
      var(--graphite-samartino) 78%
    ),
    url('../images/textures/textura-sobre.webp');
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
  opacity: 0.4;
  mix-blend-mode: overlay;
  pointer-events: none;
}
/* Cabeçalho "Últimos Artigos Publicados" — reutilizado na preview (Home e
   demais páginas) e na listagem completa do Blog. Centralizado, com um
   espaço pequeno entre eyebrow e título. */
.blog-lista-header { text-align: left; margin: 0 0 var(--space-5); }
.blog-lista-header .eyebrow { justify-content: flex-start; margin: 0 0 6px; }
.blog-lista-header h2 { font-size: 36px; margin: 0; max-width: 640px; }
.blog-lista-header + .section-divider-fade {
  margin-left: 0;
  margin-right: auto;
  background: linear-gradient(90deg, var(--accent) 0%, oklch(from var(--accent) l c h / 0) 100%);
}

/* Blog preview (Home) — mesmo tratamento de fundo da seção "Quem Somos"
   (textura + vignette radial + overlay), pedido explicitamente igual. */
.section-blog-preview {
  position: relative;
  isolation: isolate;
  padding-top: 100px;
  padding-bottom: 100px;
}
.section-blog-preview::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background-image: url('../images/textures/textura-blog.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.32;
  mix-blend-mode: overlay;
  pointer-events: none;
}
.section-blog-preview::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 3;
  /* Vinheta escura real nas bordas (preto, não a cor do fundo) — ao
     contrário do vignette da seção "Quem Somos", que só apaga a textura,
     aqui a borda deve ficar visivelmente mais escura que o centro. */
  background: radial-gradient(ellipse at center,
    transparent 35%,
    rgba(2, 3, 5, 0.9) 100%
  );
  pointer-events: none;
}
.section-blog-preview > .container { position: relative; z-index: 4; }

/* Página Soluções — grid de cards: mesmo tratamento de fundo (textura +
   vinheta radial) das outras seções escuras do site. */
.section-solucoes-lista {
  position: relative;
  isolation: isolate;
}
.section-solucoes-lista::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background-image: url('../images/textures/textura-mesclada.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.32;
  mix-blend-mode: overlay;
  pointer-events: none;
}
.section-solucoes-lista::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 3;
  background: radial-gradient(ellipse at center,
    transparent 35%,
    rgba(2, 3, 5, 0.9) 100%
  );
  pointer-events: none;
}
.section-solucoes-lista > .container { position: relative; z-index: 4; }
.section-divider-fade {
  height: 2px;
  max-width: 640px;
  margin: 0 0 var(--space-6);
  background: linear-gradient(90deg, var(--accent) 0%, oklch(from var(--accent) l c h / 0) 100%);
}

.sobre-preview-grid { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--space-6); align-items: center; }
.sobre-preview-grid > * { grid-column: span 6; }
/* Foto real (recorte 3:2, mais próximo do enquadramento original que o 4:3
   padrão do site, para não cortar os adereços perto das bordas da imagem).
   Altura definida por um "espaçador" com padding-top percentual (truque
   clássico) em vez de aspect-ratio no <img>: dentro do grid de 12 colunas
   isso é mais confiável — aspect-ratio direto no <img> aqui estava sendo
   calculado errado (imagem renderizando alta/estreita, não 3:2). */
.sobre-preview-media { position: relative; width: 100%; }
.sobre-preview-media::after { content: ""; display: block; padding-top: 66.667%; }
.sobre-preview-media > img {
  display: block;
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: var(--radius-lg);
  border: 2px solid #B5490E;
}
/* Moldura vazada na cor da marca, um pouco deslocada atrás da foto — só
   "espia" nas quinas de baixo/direita, dando profundidade sem esconder nada
   da imagem. Mesmo padrão de .qs-media__frame (Quem Somos): fundo laranja
   translúcido + borda mais escura que a da foto, para se destacar. */
.sobre-preview-media::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: oklch(from var(--accent) l c h / 0.12);
  border: 3px solid #7A2F09;
  border-radius: var(--radius-lg);
  transform: translate(16px, 16px);
}
/* Selo circular com o símbolo da marca, ancorado na quina inferior direita
   da foto, por cima da moldura. Ao passar o mouse, o fundo preto vira
   branco e o ícone branco faz crossfade para a versão laranja. */
.sobre-preview-badge {
  position: absolute;
  z-index: 2;
  right: -26px;
  bottom: -26px;
  width: 82px;
  height: 82px;
  border-radius: 50%;
  background: var(--black-samartino);
  border: 5px solid var(--accent);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
  transition: background-color 0.25s ease;
}
.sobre-preview-badge:hover { background: var(--white-samartino); }
.sobre-preview-badge__icon {
  position: absolute;
  inset: 0;
  margin: auto;
  width: auto;
  height: 38px;
  transition: opacity 0.25s ease;
}
.sobre-preview-badge__icon--default { opacity: 1; }
.sobre-preview-badge__icon--hover { opacity: 0; }
.sobre-preview-badge:hover .sobre-preview-badge__icon--default { opacity: 0; }
.sobre-preview-badge:hover .sobre-preview-badge__icon--hover { opacity: 1; }
/* Coluna direita: tudo alinhado à direita, incluindo o parágrafo (decisão
   explícita do cliente, apesar do parágrafo longo). As caixas com max-width
   próprio (h2, p) são empurradas com margin-left: auto até encostar na
   borda direita da coluna. */
.sobre-preview-content { text-align: right; }
.sobre-preview-content h2,
.sobre-preview-content p { margin-left: auto; }

/* Cabeçalho da seção "Nossos serviços" (título + setas do carrossel) */
.solucoes-header { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-5); margin-bottom: var(--space-6); }
/* z-index/position explícitos: .solucoes-carousel logo abaixo tem
   margin-top negativo e sobe visualmente por baixo deste cabeçalho — sem
   isso, o carrossel podia ficar acima das setas na pilha de empilhamento
   e capturar cliques destinados a elas. */
.solucoes-nav { position: relative; z-index: 5; display: flex; gap: var(--space-2); flex-shrink: 0; }
.solucoes-nav button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--border-on-dark-strong);
  background: transparent;
  color: var(--white-samartino);
  cursor: pointer;
  transition: background 0.28s ease, border-color 0.28s ease, color 0.28s ease;
}
.solucoes-nav button:hover { background: var(--orange-tint-12); border-color: var(--accent); color: var(--accent); }
.solucoes-prev svg { transform: rotate(180deg); }

/* Carrossel de soluções — sangra até a borda da tela, ultrapassando o container.
   O padding esquerdo/direito repete o respiro do container, então o 1º/último
   card continuam alinhados visualmente com o cabeçalho acima. */
.solucoes-carousel-wrap {
  position: relative;
  width: 100vw;
  left: 50%;
  transform: translateX(-50%);
}
.solucoes-carousel {
  display: flex;
  gap: var(--space-5);
  overflow-x: auto;
  overflow-y: visible;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  width: 100%;
  padding: var(--space-8) var(--container-pad) var(--space-6);
  margin-top: calc(var(--space-8) * -1 + var(--space-2));
}
.solucoes-carousel::-webkit-scrollbar { display: none; }
.solucoes-carousel.is-dragging { user-select: none; }

/* Esfumaçado só a partir de 1500px: os cards, ao rolarem, dissolvem-se de fato no
   preto do fundo (mask-image esmaece o conteúdo; a camada sólida por cima garante
   que o final da transição seja o preto da seção, não um cinza semitransparente). */
@media (min-width: 1500px) {
  .solucoes-carousel {
    -webkit-mask-image: linear-gradient(
      to right,
      transparent 0,
      rgba(0, 0, 0, 0.35) 40px,
      rgba(0, 0, 0, 0.75) 90px,
      black 200px,
      black calc(100% - 200px),
      rgba(0, 0, 0, 0.75) calc(100% - 90px),
      rgba(0, 0, 0, 0.35) calc(100% - 40px),
      transparent 100%
    );
    mask-image: linear-gradient(
      to right,
      transparent 0,
      rgba(0, 0, 0, 0.35) 40px,
      rgba(0, 0, 0, 0.75) 90px,
      black 200px,
      black calc(100% - 200px),
      rgba(0, 0, 0, 0.75) calc(100% - 90px),
      rgba(0, 0, 0, 0.35) calc(100% - 40px),
      transparent 100%
    );
  }
  .solucoes-carousel-fade {
    position: absolute;
    top: 0;
    bottom: var(--space-6);
    width: 200px;
    pointer-events: none;
    z-index: 4;
  }
  .solucoes-carousel-fade--left {
    left: 0;
    background: linear-gradient(
      to right,
      var(--black-samartino) 0%,
      rgba(2, 3, 5, 0.75) 25%,
      rgba(2, 3, 5, 0.35) 55%,
      transparent 100%
    );
  }
  .solucoes-carousel-fade--right {
    right: 0;
    background: linear-gradient(
      to left,
      var(--black-samartino) 0%,
      rgba(2, 3, 5, 0.75) 25%,
      rgba(2, 3, 5, 0.35) 55%,
      transparent 100%
    );
  }
}

.solucao-card {
  scroll-snap-align: start;
  flex: 0 0 calc((100vw - var(--container-pad) * 2 - var(--space-5) * 3) / 4 - 15px);
  padding: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  position: relative;
  z-index: 1;
  cursor: grab;
  transition: box-shadow 0.6s ease, transform 0.6s ease, border-color 0.6s ease, z-index 0s;
}
/* Cursor de arrasto só sobre os cards em si — nunca sobre a faixa de padding do
   carrossel (que se sobrepõe levemente ao cabeçalho por causa do respiro extra
   reservado para o zoom do hover não cortar a borda superior do card). */
.solucoes-carousel.is-dragging .solucao-card { cursor: grabbing; }
.solucao-card:hover {
  border-color: var(--accent);
  transform: scale(1.06);
  z-index: 3;
  box-shadow: var(--shadow-lg);
}
.solucao-card__media { position: relative; aspect-ratio: 16/10; background: var(--bg-surface-2); overflow: hidden; }
.solucao-card__media .placeholder-image { height: 100%; aspect-ratio: auto; border-radius: 0; border: none; }
.solucao-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(0.85) brightness(0.82) contrast(1.02);
  transition: transform 0.6s ease, filter 0.6s ease;
}
.solucao-card:hover .solucao-card__media img { transform: scale(1.03); filter: saturate(0.95) brightness(0.9) contrast(1.02); }
/* Véu escuro sutil por cima da foto, integrando-a ao tom grafite/preto do resto
   da página — sem esse tratamento as fotos reais destoam fortemente do fundo. */
.solucao-card__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(2, 3, 5, 0.15) 0%, rgba(2, 3, 5, 0.45) 100%);
  pointer-events: none;
}

/* Ícone: em repouso, fica como um selo sobre a divisa entre imagem e corpo do
   card (posição calculada em JS via --media-height, pois a altura da imagem é
   proporcional/fluida). No hover, sobe até o topo do card e se estica, virando
   um "marcador de página" preso na borda superior — cantos superiores retos
   (encostam na borda do card) e só os inferiores mantêm o arredondamento. */
.solucao-card__icon {
  position: absolute;
  left: var(--space-4);
  top: calc(var(--media-height, 180px) - 18px);
  width: 44px;
  height: 44px;
  border-radius: var(--radius-md);
  background: var(--accent);
  color: var(--white-samartino);
  box-shadow: var(--shadow-sm);
  z-index: 2;
  transition: top 0.45s ease, height 0.45s ease, border-radius 0.45s ease, transform 0.45s ease, background 0.45s ease, color 0.45s ease;
}
.solucao-card:hover .solucao-card__icon {
  top: 0;
  height: 56px;
  border-radius: 0 0 var(--radius-md) var(--radius-md);
  transform: none;
  background: var(--white-samartino);
  color: var(--accent);
}
.solucao-card__body { padding: var(--space-6) var(--space-5) var(--space-5); display: flex; flex-direction: column; flex: 1; }
.solucao-card__title { font-size: 26px; line-height: 1.2em; margin: var(--space-2) 0 var(--space-2); }
.solucao-card__body p { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); margin: 0 0 var(--space-4); line-height: var(--leading-normal); flex: 1; }
.solucao-card__saiba-mais {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--text-body-sm);
  font-weight: var(--weight-bold);
  color: var(--accent);
}
.solucao-card__saiba-mais svg { transition: transform 0.28s ease; }
.solucao-card:hover .solucao-card__saiba-mais svg { transform: translateX(4px); }

/* Samartino em números — foto de fundo sob um véu grafite pesado: a imagem
   aparece como textura sutil, mas o tom cinza-escuro da seção continua dominante
   e o contraste do texto/cards permanece intacto.
   Fundo verdadeiramente estático (background-attachment: fixed): a imagem
   não se move, o conteúdo passa por cima dela ao rolar. Combinado com o
   backdrop-filter: blur dos cards (.numero-card), isso já travou o scroll
   antes nesta seção — se voltar a acontecer, é essa combinação; a correção
   seria trocar o blur dos cards por um fundo sólido. */
.numeros-section { position: relative; overflow: hidden; }
.numeros-section::before {
  content: "";
  position: absolute;
  inset: 0;
  /* Terceira camada (radial) por cima do véu escuro: escurece ainda mais
     as bordas da seção (vinheta), mantendo o centro — onde ficam título e
     cards — como a área mais "limpa" da imagem. */
  background-image:
    radial-gradient(ellipse at center, transparent 35%, rgba(27, 27, 26, 0.7) 100%),
    linear-gradient(rgba(27, 27, 26, 0.88), rgba(27, 27, 26, 0.88)),
    url('../images/1. Página Inicial/samartino-em-numeros-secao.webp');
  background-size: cover, cover, cover;
  /* position ajustado de "center" para focar no assunto real da foto
     (compasso/plantas), que fica deslocado para a direita/topo no
     enquadramento original — "center" cortava boa parte dele. */
  background-position: center, center, 65% 35%;
  background-attachment: fixed, fixed, fixed;
  pointer-events: none;
}
.numeros-section > .container { position: relative; z-index: 1; }
.numeros-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-5); }
.numero-card {
  position: relative;
  text-align: center;
  /* Vidro fosco: fundo semitransparente + blur do que está atrás (a foto da
     seção) — o desfoque só é visível porque o card deixa o fundo vazar. */
  background: rgba(46, 47, 49, 0.55);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border: 1px solid var(--border-on-dark);
  border-radius: var(--radius-lg);
  padding: var(--space-6) var(--space-4);
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease, background 0.2s ease;
}
.numero-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
  border-color: var(--accent);
  background: linear-gradient(155deg, var(--orange-tint-12), rgba(46, 47, 49, 0.55) 60%);
}

/* Ícone em anel: um traço fino em vez de um círculo chapado, com um segundo anel
   mais sutil por fora — mais leve que um preenchimento sólido. */
.numero-card__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: var(--radius-pill);
  background: transparent;
  border: 1.5px solid var(--orange-tint-20);
  color: var(--accent);
  margin-bottom: var(--space-4);
  position: relative;
  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}
.numero-card__icon::before {
  content: '';
  position: absolute;
  inset: -5px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--orange-tint-12);
  transition: border-color 0.2s ease;
}
.numero-card__valor { font-family: var(--font-display); font-weight: var(--weight-black); font-size: clamp(1.75rem, 1.4rem + 1.6vw, 2.5rem); color: var(--white-samartino); letter-spacing: var(--tracking-tight); transition: font-size 0.2s ease; }
.numero-card__label { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); margin-top: var(--space-2); }

/* No hover, o ícone vira preenchido (em vez do anel) e o número cresce
   levemente — o mesmo tratamento que antes era fixo no card de destaque. */
.numero-card:hover .numero-card__icon { background: var(--accent); border-color: var(--accent); color: var(--white-samartino); }
.numero-card:hover .numero-card__icon::before { border-color: var(--orange-tint-20); }
.numero-card:hover .numero-card__valor { font-size: clamp(2rem, 1.6rem + 1.8vw, 2.75rem); }

/* Textura de fundo sutil para toda a seção Diferenciais + Depoimentos
   (mesma técnica/arquivo validados no hero: mix-blend-mode sem
   background-attachment:fixed, que quebrava a composição junto com
   mask-image/blend). Cobre a seção inteira, por trás da foto/texto/cards
   de depoimento. */
.section-diferenciais { position: relative; isolation: isolate; }
.section-diferenciais::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background-image: url('../images/textures/textura-diferenciais.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.055;
  mix-blend-mode: screen;
  pointer-events: none;
}
.section-diferenciais > .container { position: relative; z-index: 1; }

/* Diferenciais (why us) — imagem com 6 colunas, texto com 5,5 (proporção
   6:5,5 explícita), dando um respiro real entre as duas metades em vez de
   encostarem exatamente na linha 6/7 do grid de referência. */
.diferenciais-grid { display: grid; grid-template-columns: 6fr 5.5fr; gap: var(--space-6); align-items: center; }
/* Foto real: mesmo truque de espaçador com padding-top (imune ao bug de
   aspect-ratio dentro de grid já visto em .sobre-preview-media) + moldura
   vazada na cor da marca. A moldura fica num elemento EXTERNO sem
   overflow:hidden (para poder "espiar" fora da caixa); o clip + zoom no
   hover ficam num wrapper INTERNO separado — senão o próprio recorte
   arredondado cortaria a moldura junto. */
.diferenciais-media { position: relative; width: 100%; }
.diferenciais-media::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: oklch(from var(--accent) l c h / 0.12);
  border: 3px solid #7A2F09;
  border-radius: var(--radius-lg);
  transform: translate(16px, 16px);
}
.diferenciais-media__frame {
  position: relative;
  z-index: 1;
  overflow: hidden;
  border-radius: var(--radius-lg);
  border: 2px solid #B5490E;
}
.diferenciais-media__frame::after { content: ""; display: block; padding-top: 66.667%; }
.diferenciais-media__frame img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}
.diferenciais-media:hover img { transform: scale(1.06); }
/* Coluna direita: título alinhado à direita e reduzido (~11%, medido com a
   fonte real) para caber em 2 linhas na coluna mais estreita. No checklist
   o ícone fica fixo à esquerda de cada item, centralizado com o texto (não
   travado no topo); o texto ocupa o resto da linha (flex:1) e se alinha à
   direita dentro do próprio espaço, então a "borda" visual da lista encosta
   na direita sem virar texto justificado linha a linha. */
.diferenciais-content { text-align: right; }
.diferenciais-content h2 { font-size: clamp(1.2rem, 0.92rem + 1.1vw, 1.75rem); }
/* grid-template-columns: max-content faz a única coluna assumir a largura do
   card mais largo entre os 3 — todos ficam uniformes nesse tamanho, colados
   à direita (justify-content:end), sem sobra de espaço morto à esquerda. */
.diferenciais-list { display: grid; grid-template-columns: max-content; justify-content: end; gap: var(--space-4); max-width: 100%; }
/* Cópia exata de .solucao-etapa-item / __icon (páginas de serviço): o ícone
   "gruda" no topo do card, como marca-página, saindo pela borda superior. */
.diferenciais-list__card {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  min-width: 0;
  max-width: 100%;
  padding: var(--space-5) var(--space-4);
  border-radius: var(--radius-lg);
  background: oklch(from var(--white-samartino) l c h / 0.05);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  border: 1px solid var(--border-on-dark-strong);
  transition: border-color 0.28s ease, background 0.28s ease;
}
.diferenciais-list__card:hover {
  border-color: var(--accent);
  background: oklch(from var(--accent) l c h / 0.08);
}
.diferenciais-list__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin: calc(var(--space-5) * -1) 0 var(--space-2);
  border-radius: 0 0 var(--radius-md) var(--radius-md);
  background: oklch(from var(--accent) l c h / 0.16);
  backdrop-filter: blur(10px) saturate(150%);
  -webkit-backdrop-filter: blur(10px) saturate(150%);
  border: 1px solid oklch(from var(--accent) l c h / 0.4);
  border-top: none;
  color: var(--white-samartino);
  box-shadow: var(--shadow-sm);
  transition: background 0.28s ease, color 0.28s ease;
}
.diferenciais-list__card:hover .diferenciais-list__icon { background: oklch(from var(--accent) l c h / 0.28); }
.diferenciais-list__text { align-self: stretch; margin: 0; text-align: right; font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); }

/* Depoimentos (slider) */
.depoimentos-block { margin-top: var(--space-9); padding-top: var(--space-8); border-top: 1px solid var(--border-on-dark); }
.depoimentos-header { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-5); margin-bottom: var(--space-6); }
/* Bloco de título+texto travado em no máximo 6 das 12 colunas (metade do
   container), para não invadir o espaço reservado à direita (setas de nav). */
.depoimentos-header__text { max-width: 50%; }
.depoimentos-header__lead { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); max-width: 60ch; margin: 0; }
.depoimentos-nav { display: flex; gap: var(--space-2); flex-shrink: 0; }
.depoimentos-nav button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--border-on-dark-strong);
  background: transparent;
  color: var(--white-samartino);
  cursor: pointer;
  transition: background 0.28s ease, border-color 0.28s ease;
}
.depoimentos-nav button:hover { background: var(--orange-tint-12); border-color: var(--accent); color: var(--accent); }
.depoimentos-prev svg { transform: rotate(180deg); }

.depoimentos-slider {
  display: flex;
  gap: var(--space-5);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding-top: var(--space-2);
  padding-bottom: var(--space-2);
  scrollbar-width: none;
  /* Fade nas bordas em vez do corte seco do último card visível — sem
     mix-blend-mode aqui, então mask-image não sofre o bug de composição
     visto no hero (background-attachment:fixed + mask + blend). */
  mask-image: linear-gradient(90deg, transparent 0, #000 200px, #000 calc(100% - 200px), transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 200px, #000 calc(100% - 200px), transparent 100%);
}
.depoimentos-slider::-webkit-scrollbar { display: none; }
.depoimentos-slider.is-dragging { user-select: none; }
.depoimento-slide {
  position: relative;
  display: flex;
  flex-direction: column;
  scroll-snap-align: start;
  flex: 0 0 min(360px, 85%);
  background: var(--surface-card-dark);
  border: 1px solid var(--border-on-dark);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  cursor: grab;
  transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}
/* Link "esticado": cobre o card inteiro (clicar em qualquer ponto abre a
   avaliação no Google), exceto o botão "Ver mais", que fica acima dele
   (z-index maior) para continuar clicável e expandir o texto no próprio
   card em vez de navegar. */
.depoimento-slide__link { position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
.depoimentos-slider.is-dragging .depoimento-slide { cursor: grabbing; }
.depoimento-slide:hover {
  transform: translateY(-3px);
  border-color: var(--accent);
  box-shadow: var(--shadow-lg);
}
.depoimento-slide__estrelas { display: flex; gap: 2px; color: var(--border-on-dark-strong); margin-bottom: var(--space-3); }
.depoimento-slide__estrelas .is-filled { color: var(--accent); }
.depoimento-slide__texto {
  font-size: var(--text-body-sm);
  color: var(--text-on-dark-secondary);
  line-height: var(--leading-normal);
  margin: 0 0 var(--space-3);
  display: -webkit-box;
  -webkit-line-clamp: 5;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.depoimento-slide__texto.is-expanded,
.depoimento-slide__texto--sem-clamp {
  display: block;
  -webkit-line-clamp: unset;
  overflow: visible;
}
.depoimento-slide__ver-mais {
  /* Sem align-self, o <button> (flex item do card em coluna) esticava para
     a largura toda do card — e o text-align:center nativo do <button> fazia
     o texto parecer centralizado em vez de colado à esquerda. */
  align-self: flex-start;
  position: relative;
  z-index: 2;
  display: inline-block;
  text-align: left;
  background: none;
  border: none;
  padding: 0;
  margin: 0 0 var(--space-4);
  font-size: var(--text-body-sm);
  font-weight: var(--weight-bold);
  color: var(--accent);
  cursor: pointer;
}
.depoimento-slide__ver-mais:hover { text-decoration: underline; }
/* margin-top:auto empurra o nome (e a fonte, logo abaixo) para o rodapé do
   card, consumindo o espaço sobrando quando o texto é curto — assim todos
   os nomes ficam alinhados na mesma linha entre os cards, em vez de cada
   um ficar colado embaixo do próprio texto (em alturas diferentes). */
.depoimento-slide__autor { margin-top: auto; padding-top: var(--space-3); font-size: var(--text-body-sm); font-weight: var(--weight-bold); color: var(--white-samartino); }
.depoimento-slide__fonte { font-size: var(--text-caption); color: var(--text-on-dark-muted); }

/* CTA global (banner laranja) — textura diagonal sutil (mesmo padrão dos
   placeholders de foto do site) para não parecer um retângulo solto entre
   as seções escuras acima/abaixo. */
/* Faixa CTA — fundo laranja com listras+vinheta; texto (eyebrow+título) à
   esquerda e botão escuro à direita, numa linha só. */
.cta-global {
  position: relative;
  background: radial-gradient(ellipse at center, oklch(from var(--accent) calc(l + 0.06) c h) 0%, var(--accent) 55%, oklch(from var(--accent) calc(l - 0.1) c h) 100%);
  padding: 80px 0;
  overflow: hidden;
}
.cta-global::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url('../images/textures/textura-cta-diagonal-horizontal.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.22;
  pointer-events: none;
}
.cta-global::after {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at center, transparent 35%, rgba(2, 3, 5, 0.5) 100%);
  pointer-events: none;
}
.cta-global__inner {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-7);
}
.cta-global__text { display: flex; flex-direction: column; }
.cta-global__eyebrow {
  display: block;
  font-size: 12px;
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: rgba(2, 3, 5, 0.65);
  margin-bottom: var(--space-2);
}
.cta-global__title {
  font-size: 26px;
  font-weight: var(--weight-bold);
  color: var(--white-samartino);
  line-height: var(--leading-snug);
  margin: 0;
  max-width: 640px;
}
.cta-global__btn {
  flex-shrink: 0;
  padding: 12px 28px;
  font-size: var(--text-body-md);
  box-shadow: 0 8px 24px rgba(2, 3, 5, 0.35);
  transition: background 0.28s ease, transform 0.28s ease, box-shadow 0.2s ease;
}
.cta-global__btn:hover { box-shadow: var(--shadow-glow-accent); transform: translateY(-2px); }
.cta-global__btn-icon { display: inline-flex; transition: transform 0.28s ease; }
.cta-global__btn:hover .cta-global__btn-icon { transform: translateX(4px); }
@media (max-width: 720px) {
  .cta-global__inner { flex-direction: column; align-items: center; text-align: center; gap: var(--space-5); }
  .cta-global__title { white-space: normal; }
  .cta-global__btn { align-self: stretch; justify-content: center; }
}

/* Hero da página Soluções — foto de fundo full-bleed (mesmo padrão do
   .qshero: header fixed sobreposto via --header-clearance, overlay escuro
   para legibilidade do texto). */
.solucoes-hero { position: relative; overflow: hidden; isolation: isolate; background: var(--black-samartino); padding: calc(120px + var(--header-clearance)) 0 100px; }
.solucoes-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 25%;
}
.solucao-hero__bg--sm { object-fit: cover; object-position: 65% 55%; filter: blur(1px); }
.solucao-hero__bg--testes { object-fit: cover; object-position: 65% 15%; filter: blur(1px); }
.solucao-hero__bg-blur--testes { object-position: 65% 15%; }
.solucao-hero__bg--laudos { object-fit: cover; object-position: 65% 100%; filter: blur(1px); }
.solucao-hero__bg-blur--laudos { object-position: 65% 100%; }
.solucao-hero__bg--treinamento { object-fit: cover; object-position: 65% 90%; filter: blur(1px); }
.solucao-hero__bg-blur--treinamento { object-position: 65% 90%; }
.solucao-hero__bg--consultoria { object-fit: cover; object-position: 65% 58%; filter: blur(1px); }
.solucao-hero__bg--instalacao { object-fit: cover; object-position: 65% 65%; filter: blur(1px); }
/* Cópia extra da mesma foto, com blur bem mais forte, mascarada para
   aparecer só na área do texto (esquerda) — dá o efeito de a imagem
   "desfocar" progressivamente perto do título, em vez de cortar/estreitar
   a foto (o que quebrava o full-bleed da seção). */
.solucoes-hero__bg-blur-left {
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 65% 65%;
  filter: blur(8px);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 30%, transparent 50%);
  mask-image: linear-gradient(90deg, #000 0%, #000 30%, transparent 50%);
}
.solucao-hero__bg-blur--consultoria { object-position: 65% 58%; }
.solucao-hero__bg-blur--instalacao { object-position: 65% 65%; }
.solucao-hero__bg--regularizacao { object-fit: cover; object-position: 50% 30%; filter: blur(1px); }
.solucoes-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background:
    radial-gradient(ellipse at center,
      transparent 45%,
      rgba(2, 3, 5, 0.55) 100%
    ),
    linear-gradient(90deg,
      rgba(2, 3, 5, 0.95) 0%,
      rgba(2, 3, 5, 0.88) 25%,
      rgba(2, 3, 5, 0.65) 45%,
      rgba(2, 3, 5, 0.3) 65%,
      transparent 85%
    ),
    linear-gradient(0deg, rgba(2, 3, 5, 0.6) 0%, transparent 35%);
  pointer-events: none;
}
/* Reforço de escurecimento do lado esquerdo (onde fica o texto) — usado em
   fotos muito claras, onde o overlay padrão não garante contraste suficiente
   para a leitura do título/texto. */
.solucoes-hero--dark-left::before {
  background:
    linear-gradient(90deg, rgba(2, 3, 5, 0.85) 0%, rgba(2, 3, 5, 0.6) 40%, transparent 70%),
    radial-gradient(ellipse at center,
      transparent 45%,
      rgba(2, 3, 5, 0.55) 100%
    ),
    linear-gradient(90deg,
      rgba(2, 3, 5, 0.95) 0%,
      rgba(2, 3, 5, 0.88) 25%,
      rgba(2, 3, 5, 0.65) 45%,
      rgba(2, 3, 5, 0.3) 65%,
      transparent 85%
    ),
    linear-gradient(0deg, rgba(2, 3, 5, 0.6) 0%, transparent 35%);
}
/* Hero com foto de fundo no mesmo estilo do Blog: background-image inline
   na própria section (não <img>), overlay uniforme (não lateral). */
.solucoes-hero.solucoes-hero--contato-photo::before {
  background:
    linear-gradient(180deg, rgba(2, 3, 5, 0.75) 0%, rgba(2, 3, 5, 0.55) 45%, rgba(2, 3, 5, 0.85) 100%),
    radial-gradient(ellipse at center, transparent 20%, rgba(2, 3, 5, 0.7) 100%),
    rgba(2, 3, 5, 0.55);
}
.solucoes-hero--contato-photo {
  background-size: cover;
  background-position: center 50%;
}
.solucoes-hero__title--nowrap { max-width: none; white-space: nowrap; }

/* Variante com corte diagonal na base (Blog/Contato) — um triângulo sólido
   (cor da seção seguinte) é desenhado por cima da base da hero via ::after,
   criando a transição diagonal sem depender de clip-path na própria section
   (que não corta de forma confiável quando a altura vem de padding). */
.solucoes-hero--diagonal { padding-bottom: 130px; }
.solucoes-hero--diagonal::after {
  content: "";
  position: absolute;
  z-index: 4;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 90px;
  background: var(--diagonal-next-bg, var(--bg-surface-1));
  clip-path: polygon(0 100%, 100% 0, 100% 100%);
}
.solucoes-hero--diagonal--canvas::after { background: var(--bg-canvas); }
.solucoes-hero--diagonal-reverse::after { clip-path: polygon(0 0, 100% 100%, 0 100%); }
.solucoes-hero__content--right { margin-left: auto; text-align: right; }
.solucoes-hero__content--right .eyebrow { justify-content: flex-end; }
.solucoes-hero__content--right .solucoes-hero__title,
.solucoes-hero__content--right .solucoes-hero__text { margin-left: auto; margin-right: 0; }
.solucoes-hero__diagonal-line {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  width: 100%;
  height: 90px;
  z-index: 5;
  pointer-events: none;
}

/* "Gostaria de falar conosco?" / "Nossos profissionais estão à
   disposição" — rótulo, título com borda lateral e texto em 2 colunas. */
.profissionais-disposicao { padding-top: 100px; padding-bottom: 100px; border-top: none; }
.quote-block {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-3);
  margin-bottom: var(--space-8);
}
.quote-block__title {
  margin: 0;
  border-left: 4px solid var(--accent);
  padding-left: var(--space-5);
  font-size: var(--size-h2);
  font-weight: var(--weight-bold);
  color: var(--text-on-dark-primary);
}
.quote-block__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-7);
}
.quote-block__grid p {
  color: var(--text-on-dark-secondary);
  line-height: var(--leading-normal);
  font-size: var(--text-body-md);
  margin: 0;
}
@media (max-width: 780px) {
  .quote-block__grid { grid-template-columns: 1fr; }
}
.solucoes-hero__content { position: relative; z-index: 3; }
.solucoes-hero__content .eyebrow { font-size: 15px; letter-spacing: 0.12em; }
/* Eyebrow com nome de serviço mais longo: fonte menor e ícone alinhado ao
   topo da primeira linha (align-items:center do .eyebrow base centraliza em
   relação à altura toda do bloco, o que descentraliza o ícone quando o
   texto quebra em 2+ linhas). */
.solucoes-hero__content .solucao-hero__eyebrow { align-items: flex-start; font-size: 12px; max-width: 620px; }
.solucao-hero__eyebrow svg { margin-top: 0.2em; flex-shrink: 0; }
.solucao-hero__eyebrow span { min-width: 0; }
.solucoes-hero__title { font-size: 44px; line-height: 1.2; margin: 0 0 var(--space-4); max-width: 620px; }
.solucoes-hero__title--lg { font-size: 52px; max-width: 700px; }
.solucoes-hero__title--upper { text-transform: uppercase; }
.solucoes-hero__title-accent { color: var(--accent); }
.solucoes-hero__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); max-width: 560px; margin: 0 0 var(--space-6); }

/* Hero centralizada com badge acima do título (ex.: Blog) */
.solucoes-hero__content--center { text-align: center; margin: 0 auto; max-width: 100%; }
.solucoes-hero__content--center .solucoes-hero__title,
.solucoes-hero__content--center .solucoes-hero__text { margin-left: auto; margin-right: auto; }
.solucoes-hero__content--center .eyebrow { justify-content: center; }
.solucoes-hero--blog .solucoes-hero__content--center { padding-left: 0; display: flex; flex-direction: column; align-items: center; }
.solucoes-hero__badge { display: inline-flex; margin-bottom: var(--space-4); }
.solucoes-hero.solucoes-hero--blog::before {
  background:
    linear-gradient(180deg, rgba(2, 3, 5, 0.65) 0%, rgba(2, 3, 5, 0.4) 45%, rgba(2, 3, 5, 0.75) 100%),
    radial-gradient(ellipse at center, transparent 28%, rgba(2, 3, 5, 0.55) 100%),
    rgba(2, 3, 5, 0.4);
}
.solucoes-hero--blog {
  padding: calc(100px + var(--header-clearance)) 0 100px;
  background-size: cover;
  background-position: center 50%;
}
.solucoes-hero--blog .solucoes-hero__content:not(.solucoes-hero__content--center) { width: 100%; padding-left: 9%; }

/* Listagem de artigos do Blog (template-blog.php) — mesmo tratamento de
   fundo (textura + vinheta radial) das outras seções escuras do site. */
.section-blog-lista {
  position: relative;
  isolation: isolate;
  padding-top: 100px;
  padding-bottom: 100px;
}
.section-blog-lista::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url('../images/textures/textura-blog.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.32;
  mix-blend-mode: overlay;
  pointer-events: none;
}
.section-blog-lista::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: radial-gradient(ellipse at center, transparent 70%, rgba(2, 3, 5, 0.15) 100%);
  pointer-events: none;
}
.section-blog-lista > .container { position: relative; z-index: 2; }
.solucoes-hero__eyebrow--blog { font-size: 12px; }
.solucoes-hero__title--blog { font-size: 68px; max-width: 880px; }
.solucoes-hero__btn,
.solucoes-hero__btn:hover {
  position: relative;
  z-index: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding-left: 0.4rem;
  background: transparent;
}
.solucoes-hero__btn::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.solucoes-hero__btn:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.solucoes-hero__btn-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: oklch(from var(--accent-contrast) l c h / 0.2);
  flex-shrink: 0;
}

/* Conteúdo completo dentro do card "Sobre o serviço" — reusa
   a cor/leading do corpo padrão da página, só formata parágrafos e listas
   que o editor do WordPress possa gerar. */
.solucao-conteudo { max-width: 540px; }
.solucao-conteudo > * + * { margin-top: var(--space-4); }
.solucao-conteudo ul, .solucao-conteudo ol { padding-left: 1.25em; }
.solucao-conteudo ul { list-style: disc; }
.solucao-conteudo ol { list-style: decimal; }
.solucao-conteudo a { color: var(--accent); text-decoration: underline; }

/* Pontos-chave da solução — mesma lista com check-icon usada em
   .diferenciais-list, só alinhada à esquerda (contexto de coluna estreita,
   não de bloco full-width). */
.solucao-pontos-list { display: flex; flex-direction: column; gap: var(--space-2); width: 100%; margin-top: var(--space-2); }
.solucao-pontos-list li {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) 0;
}
.solucao-pontos-list li span.icon { color: var(--accent); flex-shrink: 0; display: inline-flex; }
.solucao-pontos-list li span.text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); }

/* "Como podemos te ajudar" — etapas do processo do serviço: coluna com a
   lista de itens (ícone + título/texto, separados por linha divisória) e,
   ao lado, um painel com CTA que acompanha o scroll (sticky) enquanto a
   lista rola, parando quando a lista termina. */
.solucao-etapas { position: relative; isolation: isolate; text-align: center; padding-top: 100px; padding-bottom: 100px; }
.solucao-etapas__bg-wrap { position: absolute; inset: 0; z-index: -2; overflow: clip; }
.solucao-etapas__bg {
  position: absolute;
  inset: -20px;
  width: calc(100% + 40px);
  height: calc(100% + 40px);
  object-fit: cover;
  object-position: center;
  filter: blur(4px);
  -webkit-mask-image: radial-gradient(ellipse 75% 75% at 50% 50%, #000 55%, transparent 100%);
  mask-image: radial-gradient(ellipse 75% 75% at 50% 50%, #000 55%, transparent 100%);
}
.solucao-etapas::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(ellipse 60% 50% at 50% 0%, oklch(from var(--accent) l c h / 0.16), transparent 70%),
    oklch(from var(--black-samartino) l c h / 0.86);
  pointer-events: none;
}
.solucao-etapas .solucoes-header { margin-left: auto; margin-right: auto; }
/* O 4º item (último da esquerda) fica sozinho no topo da coluna direita,
   e o painel "Seu projeto merece..." ocupa as 2 linhas seguintes embaixo
   dele, formando um grid 2x2 equilibrado. */
.solucao-etapas__cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: auto;
  gap: var(--space-4) var(--space-6);
  align-items: stretch;
  text-align: left;
}
.solucao-etapas__lista { display: contents; }
.solucao-etapa-item--under-painel { grid-column: 2; grid-row: 1; }
.solucao-etapas__painel { grid-column: 2; grid-row: 2 / 4; }
.solucao-etapa-item {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
  padding: var(--space-5);
  border-radius: var(--radius-lg);
  background: oklch(from var(--white-samartino) l c h / 0.05);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  border: 1px solid var(--border-on-dark-strong);
  transition: border-color 0.28s ease, background 0.28s ease;
}
.solucao-etapa-item:hover {
  border-color: var(--accent);
  background: oklch(from var(--accent) l c h / 0.08);
}
.solucao-etapa-item__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin: calc(var(--space-5) * -1) 0 var(--space-3);
  border-radius: 0 0 var(--radius-md) var(--radius-md);
  background: oklch(from var(--accent) l c h / 0.16);
  backdrop-filter: blur(10px) saturate(150%);
  -webkit-backdrop-filter: blur(10px) saturate(150%);
  border: 1px solid oklch(from var(--accent) l c h / 0.4);
  border-top: none;
  color: var(--white-samartino);
  box-shadow: var(--shadow-sm);
  transition: background 0.28s ease, color 0.28s ease;
}
.solucao-etapa-item:hover .solucao-etapa-item__icon { background: oklch(from var(--accent) l c h / 0.28); }
.solucao-etapa-item__body { min-width: 0; max-width: 100%; }
.solucao-etapa-item__body h3 { font-size: var(--text-body-lg); margin: 0 0 var(--space-2); }
.solucao-etapa-item__body p { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: 0; }
.solucao-etapas__painel {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  min-width: 0;
  gap: var(--space-3);
  padding: var(--space-7) var(--space-6);
  border-radius: var(--radius-lg);
  border: 1px solid var(--border-on-dark-strong);
  background: oklch(from var(--white-samartino) l c h / 0.05);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  transition: border-color 0.28s ease, background 0.28s ease;
}
.solucao-etapas__painel:hover {
  border-color: var(--accent);
  background: oklch(from var(--accent) l c h / 0.08);
}
.solucao-etapas__painel-title {
  font-family: var(--font-display);
  font-weight: var(--weight-bold);
  font-size: clamp(1.75rem, 1.4rem + 1.5vw, 2.25rem);
  line-height: 1.15;
  margin: 0;
}
.solucao-etapas__painel-title-accent { color: var(--accent); font-style: italic; font-weight: var(--weight-regular); }
.solucao-etapas__painel-text { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: var(--space-3) 0 var(--space-2); }
.solucao-etapas__cta,
.solucao-etapas__cta:hover {
  position: relative;
  z-index: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding-left: 0.4rem;
  background: transparent;
}
.solucao-etapas__cta::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.solucao-etapas__cta:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.solucao-etapas__cta-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: oklch(from var(--accent-contrast) l c h / 0.2);
  flex-shrink: 0;
}
@media (max-width: 860px) {
  .solucao-etapas__cols { grid-template-columns: 1fr; }
  .solucao-etapa-item--under-painel,
  .solucao-etapas__painel { grid-column: 1; grid-row: auto; }
}

/* "Nossos diferenciais" da página de Solução — foto de fundo full-bleed
   com overlay escuro (mesmo efeito "apagado" do .solucoes-hero), e os
   cards usam vidro fosco (fundo translúcido + blur + borda de brilho) por
   cima, ecoando a mesma linguagem de vidro já usada nos badges da hero. */
.solucao-diferenciais { position: relative; isolation: isolate; overflow: hidden; text-align: center; padding-top: 100px; padding-bottom: 100px; }
.solucao-diferenciais__bg {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  filter: blur(4px);
  transform: scale(1.02);
}
.solucao-diferenciais::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(ellipse 60% 50% at 50% 0%, oklch(from var(--accent) l c h / 0.16), transparent 70%),
    radial-gradient(ellipse 40% 40% at 90% 100%, oklch(from var(--accent) l c h / 0.08), transparent 70%),
    oklch(from var(--black-samartino) l c h / 0.82);
  pointer-events: none;
}
.solucao-diferenciais .solucoes-header { margin-left: auto; margin-right: auto; }
.solucao-diferenciais__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-5);
  margin-bottom: var(--space-7);
}
.solucao-diferencial-card {
  position: relative;
  padding: var(--space-6) var(--space-5);
  border: 1px solid var(--border-on-dark-strong);
  border-radius: var(--radius-lg);
  background: oklch(from var(--white-samartino) l c h / 0.05);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  box-shadow: inset 0 1px 0 oklch(from var(--white-samartino) l c h / 0.08);
  text-align: left;
  transition: border-color 0.28s ease, transform 0.28s ease, background 0.28s ease;
}
.solucao-diferencial-card:hover {
  border-color: oklch(from var(--accent) l c h / 0.6);
  background: oklch(from var(--white-samartino) l c h / 0.08);
  transform: translateY(-6px);
}
.solucao-diferencial-card__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  margin-bottom: var(--space-4);
  border-radius: var(--radius-md);
  background: oklch(from var(--accent) l c h / 0.16);
  border: 1px solid oklch(from var(--accent) l c h / 0.4);
  color: var(--accent);
  box-shadow: 0 0 24px oklch(from var(--accent) l c h / 0.35);
  transition: transform 0.28s ease, box-shadow 0.28s ease;
}
.solucao-diferencial-card:hover .solucao-diferencial-card__icon {
  transform: scale(1.08);
  box-shadow: 0 0 32px oklch(from var(--accent) l c h / 0.5);
}
.solucao-diferencial-card h3 { font-size: var(--text-body-lg); margin: 0 0 var(--space-2); }
.solucao-diferencial-card p { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: 0; }
.solucao-diferenciais__cta,
.solucao-diferenciais__cta:hover {
  position: relative;
  z-index: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding-left: 0.4rem;
  background: transparent;
}
.solucao-diferenciais__cta::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.solucao-diferenciais__cta:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.solucao-diferenciais__cta-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: oklch(from var(--accent-contrast) l c h / 0.2);
  flex-shrink: 0;
}
@media (max-width: 1080px) {
  .solucao-diferenciais__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .solucao-diferenciais__grid { grid-template-columns: 1fr; }
}

/* Hero da página Quem Somos — foto + símbolo com glow circular atrás,
   badges de destaque, CTA e prova social (avatares + contador). Layout de
   referência externo (foto de pessoa + glow + badges), adaptado às cores/
   conteúdo da Samartino e usando placeholder no lugar da foto real. */
.qshero { position: relative; overflow: hidden; isolation: isolate; background: var(--black-samartino); padding: calc(100px + var(--header-clearance)) 0 100px; }
.qshero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background-image: url('../images/textures/textura-branca.webp');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.12;
  mix-blend-mode: screen;
  pointer-events: none;
}
.qshero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 3;
  background: radial-gradient(ellipse at center,
    transparent 35%,
    rgba(2, 3, 5, 0.65) 100%
  );
  pointer-events: none;
}
.qshero-grid {
  position: relative;
  z-index: 4;
}
.qshero-content { max-width: 640px; }
.qshero-media {
  position: absolute;
  z-index: 3;
  top: -160px;
  bottom: -100px;
  right: 0;
  width: 68%;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  mask-image: linear-gradient(90deg,
    transparent 0%,
    transparent 15%,
    rgba(0, 0, 0, 0.08) 25%,
    rgba(0, 0, 0, 0.2) 33%,
    rgba(0, 0, 0, 0.4) 41%,
    rgba(0, 0, 0, 0.65) 49%,
    rgba(0, 0, 0, 0.85) 57%,
    #000 65%
  );
  -webkit-mask-image: linear-gradient(90deg,
    transparent 0%,
    transparent 15%,
    rgba(0, 0, 0, 0.08) 25%,
    rgba(0, 0, 0, 0.2) 33%,
    rgba(0, 0, 0, 0.4) 41%,
    rgba(0, 0, 0, 0.65) 49%,
    rgba(0, 0, 0, 0.85) 57%,
    #000 65%
  );
}
.qshero-media img { display: block; width: auto; height: 100%; max-width: 100%; object-fit: contain; }
@media (max-width: 860px) {
  .qshero-media { position: relative; top: auto; bottom: auto; right: auto; width: 100%; margin-bottom: var(--space-6); aspect-ratio: 4/3; }
}
.qshero-title { font-size: 40px; margin: 0 0 var(--space-4); }
.qshero-title-accent { color: var(--accent); }
.qshero-lead { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); max-width: 480px; margin: 0 0 var(--space-5); }
.qshero-badges { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-bottom: var(--space-6); max-width: 100%; }
.qshero-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  padding: 8px 14px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--border-on-dark-strong);
  background: oklch(from var(--white-samartino) l c h / 0.04);
  color: var(--white-samartino);
  font-size: var(--text-body-sm);
  font-weight: var(--weight-bold);
}
.qshero-badge svg { color: var(--accent); flex-shrink: 0; }
/* Vidro laranja no hover: fundo translúcido colorido + blur, mesma
   linguagem do efeito de vidro já usado no header/widget do site. */
.qshero-badge:hover {
  background: oklch(from var(--accent) l c h / 0.16);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-color: var(--accent);
  color: var(--white-samartino);
}
/* Badge "vidro" já no estado padrão (não só hover) — para uso sobre foto
   de fundo, onde o blur + fundo translúcido ajuda a legibilidade e dá
   profundidade em vez do fundo quase opaco do .qshero-badge base. */
.qshero-badge--glass {
  background: oklch(from var(--black-samartino) l c h / 0.28);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-color: oklch(from var(--white-samartino) l c h / 0.22);
}
.qshero-badge--glass:hover {
  background: oklch(from var(--accent) l c h / 0.22);
  border-color: var(--accent);
}

.qshero-cta,
.qshero-cta:hover {
  position: relative;
  z-index: 0;
  margin-bottom: var(--space-5);
  background: transparent;
}
/* Mesmo efeito "sumindo para o lado" do CTA da seção "Nossa missão": fundo
   isolado num ::before, para a mask-image não esmaecer o texto/ícone
   junto com o fundo. */
.qshero-cta::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  /* mask-image em si não é animável — por isso a máscara fica sempre
     presente (200% de largura) e só sua *posição* se move no hover, que
     é uma propriedade que o navegador consegue transicionar de verdade,
     dando o "sumindo para o lado" gradual em vez do corte instantâneo. */
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.qshero-cta:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
/* "Nossa missão" (Quem Somos) — moldura de foto assimétrica com borda
   deslocada atrás + card flutuante no canto + 3 pilares com ícone, no
   estilo de referência de outro projeto (site-paulo), adaptado às cores
   e conteúdo da Samartino. */
.qs-section { position: relative; overflow: hidden; isolation: isolate; background: var(--bg-surface-1); padding: 80px 0; }
.qs-section::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image:
    radial-gradient(ellipse at center,
      transparent 25%,
      var(--graphite-samartino) 78%
    ),
    url('../images/textures/textura-cta-diagonal-horizontal.webp');
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
  opacity: 0.4;
  mix-blend-mode: overlay;
  pointer-events: none;
}
/* Marca "Samartino" com o padrão diagonal, grudada na borda direita REAL da
   seção (não do container central) — por isso fica em .qs-section, que é
   full-width, e não em .qs-section__grid, que é limitado pelo container.
   Altura travada em top:0/bottom:0 (sem extrapolar) para não passar do
   topo/base da seção. */
.qs-section::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  z-index: 0;
  width: 42%;
  background-image: url('../images/textures/marca-samartino-diagonal.webp');
  background-size: cover;
  background-position: 65% center;
  background-repeat: no-repeat;
  mix-blend-mode: screen;
  opacity: 0.16;
  mask-image: linear-gradient(90deg, transparent 0%, #000 45%);
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 45%);
  pointer-events: none;
}
.qs-section__grid {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  align-items: center;
  gap: clamp(40px, 5vw, 80px);
}
.qs-media { position: relative; padding: 0 28px 28px 0; }
.qs-media__frame {
  position: absolute;
  top: 28px;
  left: 28px;
  right: 0;
  bottom: 0;
  background: oklch(from var(--accent) l c h / 0.12);
  border: 3px solid #7A2F09;
  border-radius: var(--radius-xl);
  pointer-events: none;
}
.qs-media__photo {
  position: relative;
  aspect-ratio: 4 / 3;
  border-radius: var(--radius-xl);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
}
.qs-media__photo .placeholder-image { height: 100%; }
.qs-media__card {
  position: absolute;
  bottom: -4px;
  right: -4px;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  background: var(--surface-card-dark);
  border: 1px solid oklch(from var(--accent) l c h / 0.4);
  border-radius: var(--radius-lg);
  padding: 14px 18px;
  box-shadow: var(--shadow-lg);
  max-width: 280px;
}
.qs-media__card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--orange-tint-12);
  border: 1px solid oklch(from var(--accent) l c h / 0.4);
  color: var(--accent);
}
.qs-media__card-text { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-snug); }
.qs-media__card-text strong { display: block; color: var(--white-samartino); font-weight: var(--weight-bold); }
.qs-content { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-4); min-width: 0; }
.qs-content > * { max-width: 100%; }
.qs-content .eyebrow { margin-bottom: calc(var(--space-4) * -0.6); }
.qs-content__title { font-size: 28px; margin: 0 0 var(--space-3); }
.qs-content__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); max-width: 540px; margin: 0; }
.qs-pillars {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-4);
  width: 100%;
  margin-top: var(--space-3);
  padding-top: var(--space-6);
  border-top: 1px solid oklch(from var(--accent) l c h / 0.25);
}
.qs-pillar { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
.qs-content__cta,
.qs-content__cta:hover {
  position: relative;
  z-index: 0;
  margin-top: var(--space-6);
  background: transparent;
}
/* Mesmo efeito "sumindo para o lado" dos botões secundários da Home: o
   fundo real fica isolado num ::before atrás (z-index -1) — mask-image
   direto no botão desvaneceria o texto junto com o fundo, por isso o
   texto (color fixo) e o fundo (mask-image) ficam em elementos separados. */
.qs-content__cta::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.qs-content__cta:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.qs-pillar__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  background: var(--orange-tint-12);
  border: 1px solid oklch(from var(--accent) l c h / 0.35);
  color: var(--accent);
  transition: background 0.28s ease, transform 0.28s ease;
}
.qs-pillar:hover .qs-pillar__icon { background: oklch(from var(--accent) l c h / 0.22); transform: translateY(-3px); }
.qs-pillar__label { font-size: var(--text-body-sm); font-weight: var(--weight-bold); color: var(--white-samartino); }
@media (max-width: 860px) {
  .qs-section__grid { grid-template-columns: 1fr; gap: 56px; }
  .qs-media { margin-right: 8px; }
  .qs-media__card { right: 4px; bottom: -12px; padding: 12px 16px; }
  .qs-pillars { grid-template-columns: 1fr; gap: var(--space-5); }
  .qs-pillar { flex-direction: row; align-items: center; }
}

/* Valores (quem somos) */
.valores-section { position: relative; overflow: hidden; isolation: isolate; padding-top: 100px; padding-bottom: 100px; }
.valores-section__bg { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; object-fit: cover; }
.valores-section::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background: rgba(2, 3, 5, 0.85);
  pointer-events: none;
}
.valores-section::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background:
    radial-gradient(ellipse at center,
      transparent 25%,
      rgba(2, 3, 5, 0.55) 100%
    ),
    linear-gradient(90deg, rgba(2, 3, 5, 0.35) 0%, transparent 25%, transparent 75%, rgba(2, 3, 5, 0.35) 100%),
    linear-gradient(180deg, rgba(2, 3, 5, 0.35) 0%, transparent 25%, transparent 75%, rgba(2, 3, 5, 0.35) 100%);
  pointer-events: none;
}
.valores-split { position: relative; z-index: 3; display: grid; grid-template-columns: 1fr 1fr; align-items: center; gap: clamp(40px, 5vw, 80px); }
.valores-split__content { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-4); }
.valores-split__content .eyebrow { margin-bottom: calc(var(--space-4) * -0.6); }
.valores-split__title { font-size: 28px; margin: 0 0 var(--space-3); }
.valores-split__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); max-width: 480px; margin: 0; }
.valores-split__cta,
.valores-split__cta:hover {
  position: relative;
  z-index: 0;
  margin-top: var(--space-3);
  background: transparent;
}
.valores-split__cta::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.valores-split__cta:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.valores-split__cards { display: flex; flex-direction: column; gap: var(--space-4); }
.valor-card { position: relative; overflow: hidden; border: 1px solid var(--border-on-dark-strong); border-radius: var(--radius-lg); padding: var(--space-5); background: oklch(from var(--white-samartino) l c h / 0.05); backdrop-filter: blur(10px) saturate(130%); -webkit-backdrop-filter: blur(10px) saturate(130%); transition: border-color 0.28s ease, background 0.28s ease; }
.valor-card:hover { border-color: var(--accent); background: oklch(from var(--accent) l c h / 0.08); }
.valor-card .icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin: calc(var(--space-5) * -1) 0 var(--space-3);
  border-radius: 0 0 var(--radius-md) var(--radius-md);
  background: var(--accent);
  color: var(--white-samartino);
  box-shadow: var(--shadow-sm);
  transition: background 0.28s ease, color 0.28s ease;
}
.valor-card:hover .icon { background: var(--white-samartino); color: var(--accent); }
.valor-card__body { min-width: 0; }
.valor-card h3 { font-size: var(--text-body-lg); margin: 0 0 var(--space-2); }
.valor-card p { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); margin: 0; }

/* Soluções (página) — cabeçalho centralizado + grid de cards */
.solucoes-header { display: flex; flex-direction: column; align-items: center; text-align: center; max-width: 720px; min-width: 0; margin: 0 auto var(--space-7); }
.solucoes-header > * { min-width: 0; max-width: 100%; }
.solucoes-header .eyebrow { margin-bottom: calc(var(--space-4) * -0.6); font-size: 15px; letter-spacing: 0.12em; }
.solucoes-header__title { font-size: 38px; white-space: nowrap; margin: 0 0 var(--space-4); }
.solucoes-header__title-accent { color: var(--accent); }
.solucoes-header__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); margin: 0; }
@media (max-width: 640px) {
  .solucoes-header__title { white-space: normal; }
}

.solucoes-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-5); }
.solucao-grid-card {
  display: flex;
  flex-direction: column;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-on-dark-strong);
  border-radius: var(--radius-lg);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  box-shadow: var(--shadow-md);
  transition: border-color 0.28s ease, transform 0.28s ease, box-shadow 0.28s ease;
}
.solucao-grid-card:hover { border-color: var(--accent); transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.solucao-grid-card[hidden] { display: none; }
.solucao-grid-card__media { position: relative; aspect-ratio: 16/10; background: var(--bg-surface-2); overflow: hidden; }
.solucao-grid-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(0.85) brightness(0.82) contrast(1.02);
  transition: transform 0.6s ease, filter 0.6s ease;
}
.solucao-grid-card:hover .solucao-grid-card__media img { transform: scale(1.05); filter: saturate(0.95) brightness(0.9) contrast(1.02); }
.solucao-grid-card__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(2, 3, 5, 0.1) 0%, rgba(2, 3, 5, 0.4) 100%);
  pointer-events: none;
}
.solucao-grid-card__icon {
  position: absolute;
  top: var(--space-3);
  left: var(--space-3);
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  background: var(--accent);
  color: var(--white-samartino);
  box-shadow: var(--shadow-sm);
  transition: background 0.28s ease, color 0.28s ease;
}
.solucao-grid-card:hover .solucao-grid-card__icon { background: var(--white-samartino); color: var(--accent); }
.solucao-grid-card__body { padding: var(--space-5); display: flex; flex-direction: column; flex: 1; }
.solucao-grid-card__body h3 { font-size: var(--text-body-lg); margin: 0 0 var(--space-2); }
.solucao-grid-card__body p { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: 0 0 var(--space-4); flex: 1; }
.solucao-grid-card__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--text-body-sm);
  font-weight: var(--weight-bold);
  color: var(--accent);
}
.solucao-grid-card__link svg { transition: transform 0.28s ease; }
.solucao-grid-card:hover .solucao-grid-card__link svg { transform: translateX(4px); }

/* Bloco de CTA que preenche as 2 vagas da última fileira do grid 3x3 —
   foto de fundo + overlay escuro, mesmo peso visual (photo card) dos cards
   de solução vizinhos, em vez de texto "solto" sem contenção. */
.solucao-cta-photo {
  grid-column: span 2;
  position: relative;
  display: flex;
  align-items: center;
  overflow: hidden;
  border-radius: var(--radius-lg);
  border: 1px solid var(--border-on-dark-strong);
  text-decoration: none;
  color: inherit;
  min-height: 260px;
  box-shadow: var(--shadow-md);
  transition: border-color 0.28s ease, transform 0.28s ease, box-shadow 0.28s ease;
}
.solucao-cta-photo:hover { border-color: var(--accent); transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.solucao-cta-photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.18;
  filter: saturate(0.8) contrast(1.05);
  transition: transform 0.6s ease;
}
.solucao-cta-photo:hover img { transform: scale(1.05); }
.solucao-cta-photo::before {
  content: '';
  position: absolute;
  inset: 0;
  background: oklch(from var(--surface-card-dark) l c h / 0.55);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  pointer-events: none;
  z-index: -1;
}
.solucao-cta-photo__content { position: relative; z-index: 1; padding: var(--space-6); max-width: 480px; display: flex; flex-direction: column; align-items: flex-start; }
.solucao-cta-photo__content .eyebrow { margin-bottom: var(--space-2); }
.solucao-cta-photo__title { font-size: 28px; line-height: 1.2; margin: 0 0 var(--space-3); color: var(--white-samartino); }
.solucao-cta-photo__title-accent { color: var(--accent); }
.solucao-cta-photo__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); margin: 0 0 var(--space-5); }
.solucao-cta-photo .solucao-cta-photo__btn,
.solucao-cta-photo .solucao-cta-photo__btn:hover {
  position: relative;
  z-index: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  border-radius: var(--radius-md);
  padding-left: 0.4rem;
  background: transparent;
}
.solucao-cta-photo__btn::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  border-radius: var(--radius-md);
  background: var(--accent);
  border: var(--border-width-md) solid var(--accent);
  mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 50%, transparent 100%);
  mask-size: 200% 100%;
  -webkit-mask-size: 200% 100%;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: 0% 0;
  -webkit-mask-position: 0% 0;
  transition: opacity 0.28s ease, border-color 0.28s ease, mask-position 0.35s ease, -webkit-mask-position 0.35s ease;
}
.solucao-cta-photo__btn:hover::before {
  border-color: var(--white-samartino);
  mask-position: 100% 0;
  -webkit-mask-position: 100% 0;
}
.solucao-cta-photo__btn-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: oklch(from var(--accent-contrast) l c h / 0.2);
  flex-shrink: 0;
}
@media (max-width: 720px) {
  .solucao-cta-photo { grid-column: span 1; min-height: 220px; }
  .solucao-cta-photo__content { max-width: 100%; }
}

/* ---------------------------------------------------------------------
   8. Formulário de contato
   --------------------------------------------------------------------- */
.contact-grid { display: grid; grid-template-columns: 1fr 1.2fr; gap: var(--space-8); }
.contact-info { display: flex; flex-direction: column; gap: var(--space-5); }
.contact-info__item { display: flex; gap: var(--space-4); align-items: flex-start; }
.contact-info__label { font-size: var(--text-caption); color: var(--text-on-dark-muted); text-transform: uppercase; letter-spacing: var(--tracking-wide); }
.contact-info__value { font-size: var(--text-body-md); color: var(--white-samartino); font-weight: var(--weight-bold); }

/* Formulário + mapa (Home) — cada coluna com seu próprio eyebrow/título/texto
   (em vez de um cabeçalho único centralizado acima do grid), separadas por
   uma linha vertical fina. */
.contato-mapa-grid { display: grid; grid-template-columns: 1fr auto 1fr; gap: var(--space-8); align-items: stretch; }
.contato-mapa-grid__col { min-width: 0; display: flex; flex-direction: column; }
.contato-mapa-grid__col .eyebrow { margin-bottom: var(--space-3); }
.contato-mapa-grid__title { margin: 0 0 var(--space-4); font-size: var(--size-display-md); }
.contato-mapa-grid__text { font-size: var(--text-body-md); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: 0 0 var(--space-6); max-width: 46ch; }
.contato-mapa-grid__divider { width: 1px; align-self: stretch; background: var(--border-on-dark); }
@media (max-width: 900px) {
  .contato-mapa-grid { grid-template-columns: 1fr; }
  .contato-mapa-grid__divider { display: none; }
}
.mapa-wrapper { border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--accent); flex: 1; min-height: 260px; }
.mapa-wrapper iframe { width: 100%; height: 100%; border: 0; display: block; }

.form-card { background: var(--surface-card-dark); border: 1px solid var(--border-on-dark); border-radius: var(--radius-lg); padding: var(--space-5); }
.form-contato { display: flex; flex-direction: column; gap: var(--space-4); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
.field { display: flex; flex-direction: column; gap: 6px; }
.field span.label { font-size: var(--text-body-sm); font-weight: var(--weight-bold); color: var(--white-samartino); }
.field input,
.field select,
.field textarea {
  padding: 0.6rem 0.85rem;
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--border-on-dark-strong);
  background: oklch(from var(--white-samartino) l c h / 0.04);
  color: var(--white-samartino);
  font-size: var(--text-body-sm);
  outline: none;
  width: 100%;
}
.field select:invalid { color: var(--text-on-dark-muted); }
.field input:focus,
.field select:focus,
.field textarea:focus { border-color: var(--accent); }

/* Dropdown customizado: o <select> nativo continua no DOM (oculto, mas
   funcional) para manter name/required/validação/FormData intactos — só a
   lista visual é substituída, já que o navegador não deixa estilizar as
   <option> de um select nativo (cor de fundo/hover do dropdown é controlado
   pelo SO, não pelo CSS do site). */
.select-custom { position: relative; }
.select-custom__native {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
}
.select-custom__trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  padding: 0.6rem 0.85rem;
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--border-on-dark-strong);
  background: oklch(from var(--white-samartino) l c h / 0.04);
  color: var(--text-on-dark-muted);
  font-size: var(--text-body-sm);
  font-family: inherit;
  cursor: pointer;
  width: 100%;
}
.select-custom__trigger svg { flex-shrink: 0; transition: transform 0.28s ease; }
.select-custom.is-open .select-custom__trigger svg { transform: rotate(180deg); }
.select-custom.has-value .select-custom__trigger { color: var(--white-samartino); }
.select-custom.is-open .select-custom__trigger { border-color: var(--accent); }
.select-custom__list {
  position: absolute;
  z-index: 10;
  top: calc(100% + 4px);
  left: 0;
  right: 0;
  margin: 0;
  padding: 4px;
  list-style: none;
  background: var(--white-samartino);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}
.select-custom__list li {
  padding: 0.65rem 0.85rem;
  color: var(--black-samartino);
  font-size: var(--text-body-sm);
  border-bottom: 1px solid oklch(from var(--black-samartino) l c h / 0.08);
  cursor: pointer;
  transition: background 0.12s ease, color 0.12s ease;
}
.select-custom__list li:last-child { border-bottom: none; }
.select-custom__list li:hover,
.select-custom__list li.is-active {
  background: var(--accent);
  color: var(--white-samartino);
}
.field textarea { resize: vertical; }

.field-check { display: flex; align-items: center; gap: 10px; font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); }
.field-check input { width: 20px; height: 20px; accent-color: var(--accent); flex-shrink: 0; }

.honeypot-field { position: absolute; left: -9999px; top: -9999px; }

.form-msg { border-radius: var(--radius-sm); padding: var(--space-4); font-size: var(--text-body-sm); margin-bottom: var(--space-5); display: none; }
.form-msg.is-visible { display: block; }
.form-msg--success { background: oklch(from var(--status-success) l c h / 0.15); color: var(--status-success); border: 1px solid oklch(from var(--status-success) l c h / 0.35); }
.form-msg--error { background: oklch(from var(--status-danger) l c h / 0.15); color: var(--status-danger); border: 1px solid oklch(from var(--status-danger) l c h / 0.35); }

.form-success { text-align: center; padding: var(--space-7) 0; }
.form-success h3 { margin: 0 0 var(--space-2); }
.form-success p { color: var(--text-on-dark-secondary); margin: 0; }

/* ---------------------------------------------------------------------
   9. WhatsApp float (bolha + janela de chat)
   A bolha começa oculta: a janela abre sozinha alguns segundos após o
   carregamento (ver script em component-whatsapp-float.php). Ao fechar a
   janela, ela vira a bolha flutuante de novo — mesmo padrão do site-paulo.
   --------------------------------------------------------------------- */
.whatsapp-float {
  position: fixed;
  right: var(--space-5);
  bottom: var(--space-5);
  z-index: 50;
  width: 56px;
  height: 56px;
  border: none;
  border-radius: 50%;
  background: var(--accent);
  color: var(--white-samartino);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-md);
  cursor: pointer;
  opacity: 0;
  transform: scale(0.8);
  pointer-events: none;
  transition: background 0.28s ease, transform 0.28s ease, box-shadow 0.28s ease, opacity 0.28s ease;
}
.whatsapp-float.is-visible {
  opacity: 1;
  transform: scale(1);
  pointer-events: auto;
}
.whatsapp-float:hover {
  background: var(--accent-hover);
  transform: scale(1) translateY(-3px);
  box-shadow: 0 8px 24px oklch(from var(--accent) l c h / 0.45);
}
.whatsapp-float:active { transform: scale(0.96); }

.whatsapp-widget {
  position: fixed;
  right: var(--space-5);
  bottom: 100px;
  width: 340px;
  max-width: calc(100vw - 32px);
  background:
    linear-gradient(135deg, oklch(from var(--accent) l c h / 0.2) 0%, transparent 75%),
    rgba(20, 20, 22, 0.4);
  backdrop-filter: blur(24px) saturate(160%);
  -webkit-backdrop-filter: blur(24px) saturate(160%);
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
  z-index: 50;
  opacity: 0;
  transform: translateY(16px);
  pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease;
}
.whatsapp-widget.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.whatsapp-widget__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-4) var(--space-5);
  background: var(--accent);
  color: var(--white-samartino);
  font-weight: var(--weight-bold);
  font-size: var(--text-body-sm);
}
.whatsapp-widget__brand {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}
.whatsapp-widget__brand img { flex-shrink: 0; }
.whatsapp-widget__close {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: none;
  background: rgba(255, 255, 255, 0.2);
  color: var(--white-samartino);
  cursor: pointer;
  flex-shrink: 0;
}
.whatsapp-widget__body {
  padding: var(--space-5);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  background: transparent;
}
.whatsapp-widget__bubble {
  background: rgba(255, 255, 255, 0.18);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  font-size: var(--text-body-sm);
  color: var(--white-samartino);
  line-height: var(--leading-normal);
  box-shadow: 0 1px 2px rgba(2, 3, 5, 0.15);
}
.whatsapp-widget__cta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  margin-top: var(--space-1);
  padding: 14px var(--space-5);
  background: var(--accent);
  color: var(--white-samartino);
  border-radius: var(--radius-pill);
  text-decoration: none;
  font-weight: var(--weight-bold);
  font-size: var(--text-body-sm);
  align-self: flex-end;
  transition: background 0.28s ease, transform 0.28s ease, box-shadow 0.28s ease;
}
.whatsapp-widget__cta:hover {
  background: var(--accent-hover);
  transform: translateY(-3px);
  box-shadow: 0 8px 24px oklch(from var(--accent) l c h / 0.45);
}
.whatsapp-widget__cta:active { transform: scale(0.97); }
@media (max-width: 480px) {
  .whatsapp-widget { right: 16px; bottom: 90px; }
}

/* ---------------------------------------------------------------------
   10. Footer
   --------------------------------------------------------------------- */
.site-footer {
  position: relative;
  background: linear-gradient(180deg, var(--graphite-samartino) 0%, var(--bg-surface-2) 240px, var(--bg-surface-2) 100%);
  border-top: 1px solid var(--border-on-dark);
}
.site-footer::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  right: 0;
  height: 2px;
  background: linear-gradient(90deg,
    oklch(from var(--accent) l c h / 0) 0%,
    var(--accent) 50%,
    oklch(from var(--accent) l c h / 0) 100%
  );
}
/* 12 colunas do grid de referência: marca e contato (conteúdo mais longo)
   com 4 cada, navegação e serviços (listas curtas de links) com 2 cada.
   Gap reduzido (var(--space-5), não var(--space-7)): com repeat(12,1fr) o
   gap se aplica 11 vezes internamente (entre as 12 faixas, mesmo as
   absorvidas dentro de cada span), então um valor grande consome espaço
   demais e desalinha as colunas em relação ao grid de referência. */
/* Padding vertical em longhand, NUNCA shorthand: este elemento também leva a
   classe .container, e um "padding: X 0 Y" zeraria o padding lateral do
   container — era isso que deixava o rodapé 64px mais largo que as demais
   seções em cada lado, vazando da grade de referência. */
.footer-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--space-5); padding-top: var(--space-8); padding-bottom: var(--space-6); }
/* min-width:0 é obrigatório: itens de grid têm min-width:auto por padrão, o
   que impede a faixa de encolher abaixo do conteúdo sem quebra (era isso que
   fazia a coluna de contato estourar o container em vez de quebrar linha). */
.footer-grid > * { min-width: 0; }
/* 4+2+3+3: "Serviços" precisa de 3 colunas para os itens ("Instalação de
   equipamentos", "Prevenção contra incêndio") caberem em 1 linha; "Contato"
   fica com 3, o que faz o endereço quebrar em 2 linhas (intencional). */
.footer-brand { grid-column: span 4; }
.footer-nav { grid-column: span 2; }
.footer-servicos { grid-column: span 3; }
.footer-contato { grid-column: span 3; }
/* footer-brand ocupa 4 das 12 colunas do grid; 87,5% disso = colunas 1, 2, 3
   e metade da 4. height:auto preserva a proporção original da imagem. */
.footer-brand__logo { width: 87.5%; height: auto; margin-bottom: var(--space-4); }
.footer-brand p { color: var(--text-on-dark-secondary); font-size: var(--text-body-sm); line-height: var(--leading-relaxed); max-width: 320px; }
.footer-col-title { color: var(--white-samartino); font-weight: var(--weight-bold); font-size: var(--text-body-sm); margin-bottom: var(--space-4); }
.footer-links { display: flex; flex-direction: column; gap: var(--space-3); }
.footer-links a, .footer-links span { color: var(--text-on-dark-secondary); font-size: var(--text-body-sm); }
.footer-links a:hover { color: var(--accent); }
/* align-items:flex-start (não center) para o ícone ficar colado na 1ª linha
   quando o texto quebra em 2+ linhas. min-width:0 + flex:1 no texto é o que
   efetivamente permite a quebra — flex items têm min-width:auto por padrão,
   travando a largura no tamanho da linha inteira sem quebrar, o que causava
   o overflow (era isso que vazava a coluna de contato 64px pra fora do
   container: o endereço não conseguia quebrar linha). */
.footer-contact-item { display: flex; align-items: center; gap: 8px; }
.footer-contact-item svg { flex-shrink: 0; }
.footer-contact-item__text { min-width: 0; flex: 1; overflow-wrap: break-word; word-break: break-word; }
a.footer-contact-item__text:hover { color: var(--accent); }
/* Mesmo cuidado do .footer-grid: padding vertical em longhand para não zerar
   o padding lateral do .container. A linha divisória vira um ::before (filho
   do content box) em vez de border-top no elemento — border atravessaria a
   largura total do container (1280px), vazando 64px além da grade de cada lado. */
.footer-bottom { padding-bottom: var(--space-4); color: var(--text-on-dark-muted); font-size: var(--text-caption); }
.footer-bottom::before { content: ""; display: block; border-top: 1px solid var(--border-on-dark); margin-bottom: var(--space-4); }

/* ---------------------------------------------------------------------
   11. Blog (index / single)
   --------------------------------------------------------------------- */
.blog-header { background: var(--black-samartino); padding: 80px 0; }

.post-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-5); padding: var(--space-8) 0; }
.post-card { background: var(--surface-card-dark); border: 1px solid var(--border-on-dark); border-radius: var(--radius-lg); overflow: hidden; display: flex; flex-direction: column; transition: box-shadow 0.2s ease, transform 0.2s ease; }
.post-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-2px); }
.post-card__thumb { aspect-ratio: 16/9; overflow: hidden; background: var(--bg-surface-2); }
.post-card__thumb img { width: 100%; height: 100%; object-fit: cover; }
.post-card__body { padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-2); flex: 1; }
.post-card__meta { font-size: var(--text-body-sm); color: var(--text-on-dark-muted); text-transform: uppercase; letter-spacing: var(--tracking-wide); }
.post-card__title { font-size: var(--size-h3); }
.post-card__title a:hover { color: var(--accent); }
.post-card__excerpt { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); }

/* Listagem completa do blog (index.php) — card mais editorial que o
   .post-card da prévia da Home: tag de categoria+data, título maior,
   link "Ler artigo" com seta, elevação mais pronunciada no hover. */
.article-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-5); padding: 0 0 var(--space-6); }
.article-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-on-dark-strong);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-md);
  transition: box-shadow 0.2s ease, transform 0.2s ease, border-color 0.2s ease;
}
.article-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lg);
  border-color: var(--orange-tint-20);
}
.article-card__image { aspect-ratio: 16/10; overflow: hidden; background: var(--bg-surface-2); }
.article-card__image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; }
.article-card:hover .article-card__image img { transform: scale(1.05); }
.article-card__body { padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-2); flex: 1; }
.article-card__tag {
  display: inline-flex;
  align-items: center;
  align-self: flex-start;
  padding: 4px 12px;
  border-radius: var(--radius-pill);
  background: var(--orange-tint-12);
  color: var(--accent);
  font-size: var(--text-caption);
  font-weight: var(--weight-bold);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
  margin-bottom: var(--space-1);
}
.article-card__title { font-size: var(--size-display-sm); line-height: var(--leading-snug); color: var(--text-on-dark-primary); }
.article-card__desc { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); flex: 1; }
.article-card__link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-2);
  color: var(--accent);
  font-size: var(--text-body-sm);
  font-weight: var(--weight-bold);
}
.article-card__link svg { transition: transform 0.28s ease; }
.article-card:hover .article-card__link svg { transform: translateX(4px); }

.pagination { display: flex; gap: var(--space-2); justify-content: center; padding-bottom: var(--space-8); flex-wrap: wrap; }
.blog-carregar-mais { text-align: center; margin-top: var(--space-7); }
.pagination a, .pagination span { display: inline-flex; align-items: center; justify-content: center; min-width: 40px; height: 40px; border-radius: var(--radius-sm); border: 1px solid var(--border-on-dark); color: var(--text-on-dark-secondary); font-size: var(--text-body-sm); padding: 0 var(--space-3); }
.pagination .current { background: var(--accent); border-color: var(--accent); color: var(--white-samartino); }
.pagination a:hover { border-color: var(--accent); color: var(--white-samartino); }

.single-post { padding: var(--space-8) 0; max-width: 760px; margin: 0 auto; }
.single-post__meta { color: var(--text-on-dark-muted); font-size: var(--text-body-sm); margin-bottom: var(--space-4); }
.single-post__title { margin-bottom: var(--space-5); }
.single-post__thumb { border-radius: var(--radius-lg); overflow: hidden; margin-bottom: var(--space-7); }
.single-post__thumb img { width: 100%; display: block; }
.single-post__content { color: var(--text-on-dark-secondary); font-size: var(--text-body-md); line-height: var(--leading-relaxed); }
.single-post__content h2 { margin: var(--space-7) 0 var(--space-4); }
.single-post__content h3 { margin: var(--space-6) 0 var(--space-3); }
.single-post__content p { margin: 0 0 var(--space-4); }
.single-post__content a { color: var(--accent); font-weight: var(--weight-bold); text-decoration: underline; }
.single-post__content img { border-radius: var(--radius-md); margin: var(--space-5) 0; }
.single-post__content ul, .single-post__content ol { margin: 0 0 var(--space-4); padding-left: 1.25rem; list-style: initial; }
.single-post__content blockquote { border-left: 3px solid var(--accent); padding-left: var(--space-4); margin: var(--space-5) 0; color: var(--text-on-dark-primary); font-style: italic; }

.post-nav { display: flex; justify-content: space-between; gap: var(--space-4); padding-top: var(--space-7); margin-top: var(--space-7); border-top: 1px solid var(--border-on-dark); }
.post-nav a { color: var(--text-on-dark-secondary); font-size: var(--text-body-sm); max-width: 45%; }
.post-nav a:hover { color: var(--accent); }

.no-results { padding: var(--space-8) 0; color: var(--text-on-dark-secondary); }

/* ---------------------------------------------------------------------
   11.5 Reveal ao rolar (fade + subida sutil, aplicado via JS)
   A classe .js-reveal só é adicionada pelo JavaScript — sem JS, nada fica
   oculto. Quem prefere movimento reduzido (prefers-reduced-motion) vê tudo
   estático, sem animação.
   --------------------------------------------------------------------- */
.js-reveal { opacity: 0; transform: translateY(32px); transition: opacity 1.4s cubic-bezier(0.16, 1, 0.3, 1), transform 1.4s cubic-bezier(0.16, 1, 0.3, 1); }
.js-reveal.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .js-reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
}
/* Páginas de Solução: a seção "Sobre o serviço" (2ª seção da página) fica
   sempre visível, sem esperar o scroll — o conteúdo é o primeiro contato
   real com o serviço e não deve parecer "vazio" antes da pessoa rolar. */
.qs-section > .container.js-reveal { opacity: 1 !important; transform: none !important; transition: none !important; }

/* ---------------------------------------------------------------------
   11.7 FAQ (accordion nativo <details>/<summary> + card de WhatsApp)
   --------------------------------------------------------------------- */
.component-faq .solucoes-header { margin-left: 0; align-items: flex-start; text-align: left; }
.component-faq__grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: var(--space-8); align-items: start; }
.component-faq__accordion { display: flex; flex-direction: column; gap: var(--space-3); }
.component-faq__item {
  background: var(--bg-surface-2);
  border: 1px solid var(--border-on-dark-strong);
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: border-color 0.28s ease, box-shadow 0.28s ease;
}
.component-faq__item[open] { border-color: var(--accent); box-shadow: 0 0 0 1px oklch(from var(--accent) l c h / 0.3), 0 6px 16px -6px oklch(from var(--accent) l c h / 0.25); }
.component-faq__item:not([open]):hover { border-color: oklch(from var(--accent) l c h / 0.5); }
.component-faq__trigger {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-5) var(--space-6);
  cursor: pointer;
  list-style: none;
  font-family: var(--font-display);
  font-size: var(--text-body-md);
  font-weight: var(--weight-bold);
  color: var(--text-on-dark-primary);
}
.component-faq__trigger::-webkit-details-marker { display: none; }
.component-faq__icon { display: inline-flex; color: var(--accent); flex-shrink: 0; transition: transform 0.28s ease; }
.component-faq__item[open] .component-faq__icon { transform: rotate(45deg); }
.component-faq__item[open] .component-faq__trigger { border-bottom: 1px solid var(--border-on-dark-strong); }
.component-faq__panel { padding: var(--space-4) var(--space-6) var(--space-5); font-size: var(--text-body-sm); line-height: var(--leading-normal); color: var(--text-on-dark-secondary); }
.component-faq__card {
  position: sticky;
  top: 100px;
  background: oklch(from var(--white-samartino) l c h / 0.05);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  border: 1px solid var(--border-on-dark-strong);
  border-radius: var(--radius-lg);
  padding: var(--space-6);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-3);
}
.component-faq__card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: #25D366;
  color: var(--white-samartino);
  margin-bottom: var(--space-2);
}
.component-faq__card-title { font-size: var(--text-body-lg); font-family: var(--font-display); font-weight: var(--weight-bold); margin: 0; }
.component-faq__card-text { font-size: var(--text-body-sm); color: var(--text-on-dark-secondary); line-height: var(--leading-normal); margin: 0; }
.component-faq__card-btn { width: 100%; justify-content: center; margin-top: var(--space-3); }
@media (max-width: 860px) {
  .component-faq__grid { grid-template-columns: 1fr; }
  .component-faq__card { position: static; }
}

/* ---------------------------------------------------------------------
   12. Responsivo
   --------------------------------------------------------------------- */
@media (max-width: 900px) {
  /* Hierarquia tipográfica mobile — reduz H1/H2/H3/eyebrow/lead/botão para
     não passar de 2-3 linhas em telas estreitas. Regras mais específicas
     abaixo (por seção) sobrescrevem estes valores base quando necessário. */
  h1, .h1 { font-size: 26px; }
  h2, .h2 { font-size: 24px; }
  h3, .h3 { font-size: 20px; }
  .eyebrow { font-size: 14px; }
  .text-lg { font-size: 17px; }
  .btn { font-size: 15px; }

  .diferenciais-grid, .sobre-preview-grid { grid-template-columns: 1fr !important; }
  /* .sobre-preview-grid usa grid-column: span 6 (sistema de 12 colunas) no
     desktop — sem este reset, o span 6 forçaria colunas implícitas extras
     mesmo com só 1fr definido aqui. */
  .sobre-preview-grid > * { grid-column: span 1 !important; }
  .valores-split { grid-template-columns: 1fr !important; }
  .post-list { grid-template-columns: repeat(2, 1fr) !important; }
  .article-grid { grid-template-columns: repeat(2, 1fr) !important; }
  .numeros-grid { grid-template-columns: repeat(2, 1fr) !important; }
  .solucoes-grid { grid-template-columns: repeat(2, 1fr) !important; }
  .cta-global__icon { display: none !important; }

  /* ------ Mobile: títulos e textos centralizados em todas as seções ------ */
  /* Cabeçalhos de seção (eyebrow + h1/h2 direto no container): o eyebrow é
     inline-flex, então vira um bloco de largura própria centralizado por
     margin auto; títulos com max-width inline também centram por margin auto
     (!important vence o estilo inline "margin: 0 0 ..."). */
  .section .container > .eyebrow { display: flex; width: fit-content; margin-left: auto; margin-right: auto; }
  .section .container > h1,
  .section .container > h2 { text-align: center; margin-left: auto !important; margin-right: auto !important; }

  /* Hero: coluna de texto centralizada, botões lado a lado no centro */
  .hero-content { text-align: center; }
  .hero h1, .hero p { margin-left: auto; margin-right: auto; }
  /* Eyebrow: ícone empilhado ACIMA do texto; o texto fica em 1 linha só —
     em maiúsculas + tracking ele mede ~27x o font-size, então o tamanho se
     auto-ajusta à largura útil ((100vw - respiro)/27,5), sem passar dos
     13px padrão. */
  .hero .eyebrow {
    flex-direction: column;
    gap: 6px;
    font-size: min(var(--text-eyebrow), calc((100vw - var(--container-pad) * 2) / 27.5));
    white-space: nowrap;
  }
  /* Título sempre em 2 linhas: a linha mais longa ("Engenharia que
     protege,") mede 11,9x o font-size na Liszt FY Bold; o tamanho se
     auto-ajusta à largura útil da tela ((100vw - respiro)/12,2), limitado
     ao tamanho padrão de H1 em telas maiores. */
  .hero h1 { font-size: min(var(--size-h1), calc((100vw - var(--container-pad) * 2) / 12.2)); }
  .hero-actions { justify-content: center; }

  /* Diferenciais: em telas estreitas o texto mais longo numa linha só pode
     passar da largura da viewport — troca a coluna "max-content" por "1fr"
     (largura total), evitando overflow horizontal. */
  .diferenciais-list { grid-template-columns: 1fr; }
  .diferenciais-list__text { white-space: normal; }

  /* Quem somos + Diferenciais: desfaz o alinhamento à direita do desktop
     e centraliza tudo */
  .diferenciais-content, .sobre-preview-content { text-align: center !important; }
  /* Título travado em 2 linhas: a linha mais longa ("Compromisso e
     Responsabilidade") mede 16,3x o font-size na Liszt FY Bold, então o
     tamanho se auto-ajusta à largura útil da tela ((100vw - respiro)/16,6),
     sem passar do tamanho padrão de H2 em telas maiores. */
  .diferenciais-content h2 { font-size: min(var(--size-h2), calc((100vw - var(--container-pad) * 2) / 16.6)) !important; }
  .diferenciais-content h2, .sobre-preview-content h2, .sobre-preview-content p { margin-left: auto !important; margin-right: auto !important; }

  /* Nossos serviços: cabeçalho empilhado e centralizado (setas embaixo) */
  .solucoes-header { flex-direction: column; align-items: center; text-align: center; gap: var(--space-4); }
  .solucoes-header h2 { margin-left: auto !important; margin-right: auto !important; }

  /* Samartino em números */
  .numeros-section { text-align: center; }

  /* Depoimentos: cabeçalho empilhado e centralizado */
  .depoimentos-header { flex-direction: column; align-items: center; text-align: center; }
  .depoimentos-header__text { max-width: 100%; }

  /* Carrossel de serviços: 1 card por tela (a fórmula desktop divide por 4,
     o que esmagava os cards no mobile). O card ocupa exatamente a largura
     útil do container — mesma zona de trabalho das outras seções. */
  .solucao-card { flex: 0 0 calc(100vw - var(--container-pad) * 2); }

  /* ------ Página de Solução: hero, "sobre o serviço" e etapas no mobile ------ */
  .solucoes-hero { text-align: center; padding-top: calc(90px + var(--header-clearance)); padding-bottom: 70px; }
  /* Foto de fundo mais apagada + vinheta escura nas pontas (topo/base/laterais)
     em vez do gradiente horizontal pensado para o texto alinhado à esquerda
     do desktop — no mobile o texto ocupa a largura toda, então a vinheta
     precisa fechar em volta, não só de um lado. */
  .solucoes-hero__bg { opacity: 0.55; }
  .solucoes-hero::before {
    background:
      radial-gradient(ellipse at center, transparent 30%, rgba(2, 3, 5, 0.75) 100%),
      linear-gradient(180deg, rgba(2, 3, 5, 0.9) 0%, rgba(2, 3, 5, 0.5) 25%, rgba(2, 3, 5, 0.5) 70%, rgba(2, 3, 5, 0.92) 100%);
  }
  .solucoes-hero__content .solucao-hero__eyebrow,
  .solucoes-hero__content .eyebrow { justify-content: center; align-items: center; text-align: left; font-size: 11px; margin-left: auto; margin-right: auto; }
  .solucoes-hero__title { font-size: 24px; line-height: 1.3; max-width: 100%; margin-left: auto; margin-right: auto; }
  .solucoes-hero__text { max-width: 100%; margin-left: auto; margin-right: auto; }
  .qshero-badges { justify-content: center; }
  .solucoes-hero__btn { width: 100%; justify-content: center; }

  /* "Sobre o serviço": foto acima, texto empilhado e centralizado */
  .qs-section__grid { grid-template-columns: 1fr; gap: 40px; }
  .qs-media { padding: 0 20px 20px 0; max-width: 420px; margin: 0 auto; }
  .qs-media__card { max-width: calc(100% - 20px); }
  .qs-content { align-items: center; text-align: center; }
  .qs-content .eyebrow { justify-content: center; }
  .qs-content__text { max-width: 100%; font-size: 16px; }
  .solucao-pontos-list { align-items: center; }
  .solucao-pontos-list li { justify-content: center; padding: 6px 0; }
  .qs-content__cta,
  .qs-content__cta:hover { width: 100%; justify-content: center; margin-top: var(--space-2); }

  /* Cabeçalhos de seção ("Como podemos te ajudar?", "Por que escolher...",
     "Outras soluções...") — mantém 1 linha só, com fonte que encolhe
     conforme a largura da tela em vez de quebrar. */
  .solucoes-header__title {
    white-space: normal;
    line-height: 1.3;
    font-size: 30px;
  }
  .solucoes-header .eyebrow { font-size: 14px; }

  /* Blog preview (última seção antes do contato) — cabeçalho centralizado */
  .section-blog-preview .eyebrow { justify-content: center; margin-left: auto; margin-right: auto; }
  .section-blog-preview h2 { text-align: center; margin-left: auto !important; margin-right: auto !important; }

  /* Contato + mapa (última seção da página) — cabeçalho e texto centralizados */
  .contato-mapa-grid__col { text-align: center; }
  .contato-mapa-grid__col .eyebrow { justify-content: center; margin-left: auto; margin-right: auto; }
  .contato-mapa-grid__title { text-align: center; }
  .contato-mapa-grid__text { text-align: center; max-width: 100%; }

  /* Etapas: cards empilhados, painel e botões ocupando a largura toda */
  .solucao-etapa-item { text-align: center; align-items: center; }
  .solucao-etapas__painel { align-items: center; text-align: center; }
  .solucao-etapas__cta,
  .solucao-diferenciais__cta { width: 100%; justify-content: center; }

  /* "Continue explorando" — botão "Ver todas as soluções" ocupando a largura toda */
  .section-solucoes-lista .btn-secondary { width: 100%; justify-content: center; }

  /* Diferenciais: cards centralizados */
  .solucao-diferencial-card { display: flex; flex-direction: column; align-items: center; text-align: center; }
}
@media (max-width: 860px) {
  .footer-grid { grid-template-columns: 1fr 1fr !important; }
  /* sem este reset, os grid-column: span 4/2 do desktop forçariam colunas
     implícitas extras aqui, quebrando o empilhamento em 2 colunas. */
  .footer-grid > * { grid-column: span 1 !important; }
  .contact-grid, .contato-mapa-grid { grid-template-columns: 1fr !important; }
  .mapa-wrapper { min-height: 300px; }
}
@media (max-width: 640px) {
  .solucoes-grid { grid-template-columns: 1fr !important; }
  .solucao-grid-card__body { align-items: center; text-align: center; }
}
@media (max-width: 560px) {
  .form-row { grid-template-columns: 1fr !important; }
  .post-list { grid-template-columns: 1fr !important; }
  .article-grid { grid-template-columns: 1fr !important; }
  .numeros-grid { grid-template-columns: 1fr !important; }
  .depoimento-slide { flex-basis: 88%; }
  .footer-grid { grid-template-columns: 1fr !important; gap: var(--space-8); text-align: center; }
  .footer-brand { margin: 0 auto; }
  .footer-brand__logo { width: 260px; max-width: 78%; margin-left: auto; margin-right: auto; }
  .footer-brand p { font-size: var(--text-body-md); margin-left: auto; margin-right: auto; }
  .footer-col-title { font-size: 24px; margin-bottom: var(--space-5); }
  .footer-links { align-items: center; gap: var(--space-4); }
  .footer-links a, .footer-links span { font-size: var(--text-body-md); }
  .footer-contact-item { justify-content: center; }
}
