/* ==========================================================================
   GHPC — Folha de estilo do site
   --------------------------------------------------------------------------
   NENHUMA cor, fonte ou medida literal aqui: tudo sai das variáveis que
   lib/tema.php injeta no <head> a partir da marca ativa. É o que permite que
   AirTAC e G Motion — e as outras dez empresas do grupo — rodem exatamente
   este arquivo. Antes de escrever um #hex neste arquivo, crie o token.
   ========================================================================== */

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
    margin: 0;
    font-family: var(--fonte);
    color: var(--texto);
    background: var(--sup);
    overflow-x: hidden;
    line-height: 1.5;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; }
::selection { background: var(--primaria); color: #fff; }

/* Container: TODO conteúdo se alinha por aqui. Os fundos de seção sangram na
   largura total da tela, mas o miolo nunca escapa deste eixo.
   O respiro lateral cede em telas estreitas: 32px de cada lado num aparelho de
   320px consomem 20% da largura útil. */
.wrap { max-width: var(--container); margin: 0 auto; padding: 0 var(--container-pad); }
@media (max-width: 560px) { .wrap { padding: 0 20px; } }
@media (max-width: 380px) { .wrap { padding: 0 16px; } }

.mono { font-family: var(--mono); }
.kicker {
    font-family: var(--mono); font-size: 12px; letter-spacing: .2em;
    text-transform: uppercase; color: var(--primaria); font-weight: 500;
}
.kicker-claro { color: var(--sobre-escuro-2); }

h1, h2, h3, h4 { margin: 0; letter-spacing: -.01em; line-height: 1.18; }
.h-secao { font-size: clamp(25px, 3.2vw, 34px); font-weight: 700; margin: 10px 0 0; }
.sub-secao { color: var(--texto-2); font-size: 16px; margin: 10px 0 0; max-width: 62ch; }

.sec { padding: 64px 0; }
.sec-alt { background: var(--sup-2); }
.sec-escura { background: var(--escuro-1); color: #fff; position: relative; overflow: hidden; }
/* Listras diagonais sutis: a textura que dá peso às faixas escuras sem imagem. */
.listras::before {
    content: ''; position: absolute; inset: 0; pointer-events: none;
    background-image: repeating-linear-gradient(115deg, rgba(255,255,255,.05) 0 1px, transparent 1px 26px);
}
.sec-escura > * { position: relative; z-index: 1; }

.cab-secao { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; margin-bottom: 32px; }
.cab-secao .link-ver { font-size: 14px; font-weight: 600; color: var(--primaria); white-space: nowrap; }
.cab-secao .link-ver:hover { text-decoration: underline; }

/* ---------------------------------------------------------------- botões -- */
.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 9px;
    padding: 13px 22px; border-radius: var(--raio-btn); font-size: 14.5px; font-weight: 600;
    border: 1px solid transparent; cursor: pointer; transition: background .18s, border-color .18s, color .18s;
    text-align: center;
}
.btn-p { background: var(--primaria); color: #fff; }
.btn-p:hover { background: var(--primaria-hover); }
.btn-o { background: transparent; color: var(--primaria); border-color: var(--borda-2); }
.btn-o:hover { border-color: var(--primaria); background: var(--primaria-05); }
.btn-branco { background: #fff; color: var(--escuro-2); }
.btn-branco:hover { background: var(--sup-3); }
.btn-branco-o { background: transparent; color: #fff; border-color: rgba(255,255,255,.5); }
.btn-branco-o:hover { background: rgba(255,255,255,.12); border-color: #fff; }
.btn-zap { background: transparent; color: var(--verde); border-color: var(--verde); }
.btn-zap:hover { background: var(--verde); color: #fff; }
.btn-bloco { width: 100%; }
.btn-sm { padding: 9px 15px; font-size: 13px; }

/* ================================================================= TOPO == */
/* overflow:hidden é o que permite a faixa fechar: ao rolar, a .wrap vai a zero
   de altura e o conteúdo dela precisa ser recortado em vez de vazar. */
.topbar { background: var(--escuro-2); color: var(--sobre-escuro); font-size: 12.5px; overflow: hidden; }
.topbar .wrap {
    min-height: var(--h-topbar); height: var(--h-topbar); display: flex; align-items: center;
    justify-content: space-between; gap: 24px; flex-wrap: wrap; overflow: hidden;
    transition: height .32s cubic-bezier(.4,0,.2,1), min-height .32s cubic-bezier(.4,0,.2,1), opacity .25s ease;
}
/* Rolou: a faixa de contato se fecha e entrega o topo ao cabeçalho. */
.rolou .topbar .wrap { height: 0; min-height: 0; opacity: 0; }
/* ...mas com a faixa aberta o recorte precisa sair: o seletor de idiomas abre
   abaixo dos 40px da barra e seria cortado inteiro, sem nada aparecer na tela.
   O recorte só faz falta durante o fechamento, e aí .rolou já está no <html>. */
html:not(.rolou) .topbar,
html:not(.rolou) .topbar .wrap { overflow: visible; }
.topbar a { color: var(--sobre-escuro); }
.topbar a:hover { color: #fff; }
.topbar-e { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
.topbar-d { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.topbar .destaque { color: #fff; }
.topbar .divisor { width: 1px; height: 16px; background: rgba(255,255,255,.18); }
.topbar .redes { display: flex; align-items: center; gap: 14px; font-size: 13px; }
.topbar .links { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }

/* Seletor de idiomas: some do fluxo quando só há português cadastrado. */
.idiomas { position: relative; font-family: var(--mono); letter-spacing: .04em; }
.idiomas-atual { display: flex; align-items: center; gap: 7px; cursor: pointer; background: none; border: none; color: var(--sobre-escuro); font-size: 12.5px; font-family: var(--mono); padding: 4px 0; }
.idiomas-atual:hover { color: #fff; }
.idiomas-lista {
    position: absolute; top: 100%; right: 0; min-width: 176px; background: #fff; color: var(--texto);
    border-radius: var(--raio-card); box-shadow: var(--sombra-drop); padding: 6px; z-index: 60;
    display: none; font-family: var(--fonte); letter-spacing: 0;
}
.idiomas.aberto .idiomas-lista { display: block; }
.idiomas-lista button {
    display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 12px; border: none;
    background: none; cursor: pointer; font-size: 13.5px; border-radius: 6px; text-align: left; color: var(--texto);
}
.idiomas-lista button:hover { background: var(--sup-3); color: var(--primaria); }
.idiomas-lista button.on { color: var(--primaria); font-weight: 700; }

/* O widget do Google Tradutor injeta uma barra própria no topo e empurra o
   <body> para baixo com um `top` inline. Aqui ele é só o motor da tradução —
   quem troca de idioma é o seletor acima —, então a barra some e o
   deslocamento é anulado (regra !important vence o estilo inline do widget).
   Duas classes de iframe porque o Google alternou o nome da barra: a antiga
   `goog-te-banner-frame` e a atual, ofuscada. */
.skiptranslate { display: none !important; }
iframe.goog-te-banner-frame,
iframe.VIpgJd-ZVi9od-ORHb-OEVmcd { display: none !important; }
html, body { top: 0 !important; }
.goog-text-highlight { background: none !important; box-shadow: none !important; }
#goog-gt-tt, .goog-te-balloon-frame { display: none !important; }

/* Enquanto a página recarrega no novo idioma, um véu cobre o site: sem ele o
   clique parece não ter feito nada até o recarregamento acontecer. */
.trad-load {
    position: fixed; inset: 0; z-index: 9999; display: flex; gap: 14px;
    align-items: center; justify-content: center; flex-direction: column;
    background: var(--sup); /* navegador sem color-mix fica com o véu opaco */
    background: color-mix(in srgb, var(--sup) 88%, transparent);
    backdrop-filter: blur(3px);
    font-family: var(--mono); font-size: 12px; letter-spacing: .18em;
    text-transform: uppercase; color: var(--texto-2);
    animation: tradFade .18s ease both;
}
.trad-load::before {
    content: ''; width: 34px; height: 34px; border-radius: 50%;
    border: 2px solid var(--borda); border-top-color: var(--primaria);
    animation: tradGira .7s linear infinite;
}
@keyframes tradGira { to { transform: rotate(360deg); } }
@keyframes tradFade { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
    .trad-load::before { animation-duration: 2s; }
    .trad-load { animation: none; }
}

/* =============================================================== HEADER == */
/* Cabeçalho: encostado no topo enquanto a página está no início; ao rolar, ele
   se desprende e vira uma barra flutuante arredondada, mais baixa e translúcida
   — o comportamento do layout aprovado.
   A linha de baixo é box-shadow, e não border-bottom: borda entra na altura do
   elemento e faria a barra pular 1px no momento em que a sombra a substitui. */
.hdr {
    --h-atual: var(--h-header);
    position: sticky; top: 0; z-index: 40;
    background: var(--sup); box-shadow: 0 1px 0 0 var(--borda); border-radius: 0; margin: 0;
    backdrop-filter: saturate(180%) blur(14px); -webkit-backdrop-filter: saturate(180%) blur(14px);
    transition: margin .32s cubic-bezier(.4,0,.2,1), top .32s cubic-bezier(.4,0,.2,1),
                border-radius .32s ease, background .3s ease, box-shadow .32s ease;
}
.rolou .hdr {
    --h-atual: 70px;
    top: 12px; margin: 12px 16px 0; border-radius: 16px;
    background: var(--sup); /* sem color-mix o cabeçalho fica opaco, e só */
    background: color-mix(in srgb, var(--sup) 86%, transparent);
    box-shadow: 0 16px 40px -16px rgba(20,22,40,.4);
}
/* A altura vem de --h-atual porque o item de menu também precisa encolher: ele
   tem altura própria para o mega-menu abrir colado no cabeçalho, e se ficasse
   nos 92px seguraria a barra inteira aberta. */
.hdr-in { min-height: var(--h-atual); display: flex; align-items: center; gap: 36px;
    transition: min-height .32s cubic-bezier(.4,0,.2,1); }
/* flex-shrink:0 é o que impede a marca de sumir.
   O cabeçalho é uma linha flex e os itens de menu têm white-space:nowrap, então
   quando a barra apertava o logo era o único que podia ceder — e cedia até
   zero. Entre ~880px e ~1100px ele simplesmente não aparecia na tela. */
.hdr-logo { flex-shrink: 0; }
.hdr-logo img { height: var(--logo-altura); width: auto; }
.hdr-logo b { font-size: 20px; font-weight: 800; letter-spacing: -.02em; }
.nav { display: flex; align-items: center; gap: 28px; }
.nav-item { position: relative; display: flex; align-items: center; min-height: var(--h-atual);
    transition: min-height .32s cubic-bezier(.4,0,.2,1); }
.nav-link { display: flex; align-items: center; gap: 7px; font-weight: 600; font-size: 15px; color: var(--texto); white-space: nowrap; }
.nav-link:hover, .nav-link.ativo { color: var(--primaria); }
.nav-link i { font-size: 10px; color: var(--primaria); }
/* Item em destaque do menu ("Orçamento Rápido"): cor da marca, peso 700 e o
   próprio texto pulsando — escala e opacidade, como no layout aprovado
   (.orca-pulse, orcaPulse 1.3s ease-in-out infinite). Uma versão anterior daqui
   usava um halo por trás para não mexer no texto; o layout pede o pulso no
   texto mesmo, e é ele que manda. */
.nav-link.destaque { color: var(--primaria); font-weight: 700; animation: pulsaDestaque 1.3s ease-in-out infinite; }
.nav-link.destaque:hover { color: var(--primaria-hover); }
@keyframes pulsaDestaque {
    0%, 100% { transform: scale(1);    opacity: 1;   }
    50%      { transform: scale(1.09); opacity: .55; }
}
[data-topo=escuro] .hdr .nav-link.destaque { color: var(--primaria); }

/* Quem pediu menos movimento não deveria receber um item piscando na nav —
   o destaque continua, parado, na cor e no peso. */
@media (prefers-reduced-motion: reduce) {
    .nav-link.destaque { animation: none; }
}
.hdr-acoes { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.btn-icone {
    width: 44px; height: 44px; display: flex; align-items: center; justify-content: center;
    border-radius: var(--raio-btn); font-size: 16px; cursor: pointer; position: relative;
    border: 1px solid var(--borda-2); background: var(--sup); color: var(--primaria);
}
.btn-icone:hover { background: var(--sup-3); }
.btn-icone.cheio { background: var(--primaria); border-color: var(--primaria); color: #fff; }
.btn-icone.cheio:hover { background: var(--primaria-hover); }
.cart-badge {
    position: absolute; top: -7px; right: -7px; min-width: 20px; height: 20px; padding: 0 5px;
    background: var(--acento); color: #fff; border-radius: 10px; font-size: 11px; font-weight: 700;
    display: flex; align-items: center; justify-content: center; font-family: var(--mono);
}
.btn-menu { display: none; }

/* Submenu simples (itens filhos do menu principal) */
.submenu {
    position: absolute; top: 100%; left: 0; min-width: 230px; background: var(--sup);
    border-top: 3px solid var(--primaria); border-radius: 0 0 var(--raio-card) var(--raio-card);
    box-shadow: var(--sombra-drop); padding: 8px; z-index: 45; display: none;
}
.nav-item:hover .submenu, .nav-item:focus-within .submenu { display: block; }
.submenu a { display: flex; align-items: center; gap: 10px; padding: 10px 13px; border-radius: 6px; font-size: 14px; font-weight: 500; color: var(--texto-2); }
.submenu a:hover { background: var(--sup-3); color: var(--primaria); }

/* Catálogo dentro do menu compacto. No desktop não existe — quem mostra as
   categorias lá é o mega-menu. Só aparece dentro de .nav.aberto (ver a faixa
   do cabeçalho compacto, mais abaixo). */
.nav-cats { display: none; }
.nav-subcats { display: none; }
.nav-cat.aberta > .nav-subcats { display: block; }

/* Busca */
/* Busca do topo: uma caixa só, com a lupa dentro separada por uma linha. O
   campo é estreito de propósito — ele divide a barra com o menu, e alargá-lo
   empurraria os itens da nav para fora. */
.busca-topo {
    display: flex; align-items: center; height: 44px; overflow: hidden;
    border: 1px solid var(--borda-2); border-radius: var(--raio-btn); background: var(--sup);
}
.busca-topo input {
    width: 125px; height: 100%; border: none; outline: none; background: transparent;
    padding: 0 12px; font-family: var(--fonte); font-size: 14px; color: var(--texto);
}
.busca-topo input::placeholder { color: var(--texto-3); }
.busca-topo button {
    width: 40px; height: 100%; flex: 0 0 40px; border: none; border-left: 1px solid var(--borda-2);
    background: var(--sup); color: var(--primaria); font-size: 15px; cursor: pointer;
}
.busca-topo button:hover { background: var(--sup-3); }
/* Foco visível na caixa inteira: o contorno do <input> foi removido, e sem isto
   quem navega por teclado não sabe onde está. */
.busca-topo:focus-within { border-color: var(--primaria); box-shadow: 0 0 0 3px var(--primaria-18); }
/* O botão-lupa só existe onde a caixa não cabe (ver regra em @media). */
.btn-busca { display: none; }

/* Com o cabeçalho flutuando arredondado, o que abre por baixo dele (mega-menu e
   faixa de busca) precisa arredondar embaixo — senão sai um retângulo de quina
   viva pendurado numa barra de cantos redondos. */
.rolou .hdr .mega,
.rolou .hdr .busca-faixa { border-radius: 0 0 16px 16px; overflow: hidden; }

.busca-faixa { background: var(--sup-2); border-top: 1px solid var(--borda); display: none; }
.busca-faixa.aberta { display: block; }
.busca-faixa form { display: flex; gap: 10px; padding: 18px 0; }
.busca-faixa input {
    flex: 1; padding: 14px 16px; border: 1px solid var(--borda-2); border-radius: var(--raio-btn);
    font-family: var(--fonte); font-size: 15px; background: var(--sup); color: var(--texto);
}
.busca-faixa input:focus { outline: none; border-color: var(--primaria); box-shadow: 0 0 0 3px var(--primaria-18); }

/* ============================================================ MEGA MENU == */
.mega {
    position: absolute; top: 100%; left: 0; right: 0; background: var(--sup);
    border-top: 1px solid var(--borda); box-shadow: var(--sombra-mega); z-index: 39; display: none;
}
.mega.aberto { display: block; }
.mega-grid { display: grid; grid-template-columns: 264px minmax(0, 1fr) 288px; padding: 26px 0; }
.mega-rail { border-right: 1px solid var(--borda); padding-right: 18px; display: flex; flex-direction: column; gap: 2px; }
.mega-tit { font-family: var(--mono); font-size: 11px; letter-spacing: .18em; color: var(--texto-3); padding: 4px 16px 12px; text-transform: uppercase; }
.mega-cat {
    display: flex; align-items: center; gap: 13px; padding: 13px 16px; border-radius: 6px;
    cursor: pointer; background: none; border: none; width: 100%; text-align: left;
    font-size: 14.5px; font-weight: 600; color: var(--texto-2); font-family: var(--fonte);
}
.mega-cat i.ic { font-size: 23px; line-height: 1; color: var(--texto-3); }
.mega-cat .seta-ind { margin-left: auto; font-size: 10px; color: var(--borda-2); }
.mega-cat.on { background: var(--sup-3); color: var(--primaria); }
.mega-cat.on i.ic, .mega-cat.on .seta-ind { color: var(--primaria); }
.mega-painel { padding: 4px 30px; display: none; }
.mega-painel.on { display: block; }
.mega-painel-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.mega-painel-cab .mega-painel-titulo { font-size: 17px; font-weight: 700; }
.mega-painel-cab a { font-size: 13px; font-weight: 600; color: var(--primaria); white-space: nowrap; }
.mega-subs { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 20px; }
.mega-sub { display: flex; align-items: center; gap: 12px; padding: 9px 8px; border-radius: 6px; color: var(--texto-2); font-size: 13.5px; font-weight: 500; }
.mega-sub:hover { background: var(--sup-3); color: var(--primaria); }
.mega-sub .th { width: 38px; height: 38px; flex-shrink: 0; border-radius: 5px; background: var(--listra); background-size: cover; background-position: center; }
.mega-fer { display: flex; flex-direction: column; gap: 12px; }
.fer {
    display: flex; gap: 13px; align-items: center; background: var(--sup-2); border: 1px solid var(--borda);
    border-radius: var(--raio-card); padding: 15px;
}
.fer:hover { border-color: var(--primaria); }
.fer .ic { width: 42px; height: 42px; flex-shrink: 0; border-radius: var(--raio-card); background: var(--primaria); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 17px; }
.fer-t { display: block; font-weight: 700; font-size: 14.5px; color: var(--texto); }
.fer small { font-size: 12.5px; color: var(--texto-2); }

/* ================================================================= HERO == */
.hero { position: relative; height: var(--h-hero); overflow: hidden; background: var(--escuro-1); }
.slide { position: absolute; inset: 0; opacity: 0; transition: opacity 1s ease; pointer-events: none; }
.slide.on { opacity: 1; pointer-events: auto; }
.slide-bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
/* Véu de legibilidade: escuro à esquerda, onde está o texto; transparente à
   direita, onde a foto ou o render precisam aparecer. */
.slide-veu {
    position: absolute; inset: 0;
    background: linear-gradient(96deg, rgba(var(--escuro-1-rgb), .95) 0%, rgba(var(--escuro-1-rgb), .72) 42%, rgba(var(--escuro-1-rgb), .04) 100%);
}
.slide-render { position: absolute; right: 4%; bottom: 0; top: 9%; height: 82%; width: 44%; object-fit: contain; object-position: bottom right; filter: drop-shadow(0 24px 40px rgba(0,0,0,.4)); }
.slide-in { position: relative; height: 100%; display: flex; flex-direction: column; justify-content: center; max-width: 680px; }
/* Vale para h1 e h2: só o primeiro slide é h1 (um por página), e o título de
   todos precisa continuar com o mesmo desenho. */
.slide .slide-titulo { font-size: clamp(30px, 4.4vw, 52px); font-weight: 700; color: #fff; margin: 14px 0 16px; }
.slide p { font-size: clamp(16px, 1.5vw, 19px); color: var(--sobre-escuro); margin: 0 0 28px; max-width: 56ch; }
.slide-btns { display: flex; gap: 12px; flex-wrap: wrap; }
.hero-ind { position: absolute; bottom: 26px; left: 0; right: 0; z-index: 3; display: flex; gap: 8px; }
.hero-ind button { width: 46px; height: 4px; border: none; padding: 0; background: rgba(255,255,255,.3); cursor: pointer; border-radius: 2px; transition: background .25s; }
.hero-ind button.on { background: #fff; }

/* Setas do banner: vidro sobre a arte, como no layout. Ficam acima do véu e do
   render (z-index 6) — abaixo disso o clique cairia na imagem do produto. */
.hero-seta {
    position: absolute; top: 50%; transform: translateY(-50%); z-index: 6;
    width: 52px; height: 52px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
    border: 1px solid rgba(255,255,255,.3); background: rgba(255,255,255,.1); color: #fff;
    font-size: 16px; cursor: pointer; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
    transition: background .18s ease;
}
.hero-seta:hover { background: rgba(255,255,255,.26); }
.hero-seta:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.hero-seta.ant  { left: 24px; }
.hero-seta.prox { right: 24px; }
/* Em tela estreita as setas cobririam o texto do banner, que é o que importa
   ali — a navegação fica com os indicadores e o arrasto. */
@media (max-width: 720px) { .hero-seta { display: none; } }

/* =========================================================== SEGMENTOS == */
.segmentos { background: var(--sup); border-bottom: 1px solid var(--borda); padding: 34px 0; }
.seg-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(130px, 100%), 1fr)); gap: 14px; }
.seg { display: flex; flex-direction: column; align-items: center; gap: 11px; padding: 16px 8px; border: 1px solid transparent; border-radius: var(--raio-card); text-align: center; transition: .18s; }
.seg:hover { border-color: var(--primaria); box-shadow: var(--sombra-card); }
.seg .ic { width: 54px; height: 54px; border-radius: 50%; background: var(--sup-3); color: var(--primaria); display: flex; align-items: center; justify-content: center; font-size: 30px; }
.seg span { font-size: 13.5px; font-weight: 600; color: var(--texto); line-height: 1.3; }

/* =============================================================== LINHAS == */
.linhas-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 24px; }
.linha-card { position: relative; height: 440px; border-radius: var(--raio-card); overflow: hidden; background: var(--escuro-1); display: flex; flex-direction: column; justify-content: flex-end; }
/* A arte ocupa o cartão INTEIRO, proporcional e sem distorcer.
   `cover` preenche a caixa mantendo a proporção e corta o excesso — o que
   sobra fica fora, e nada é esticado. Antes era `contain` numa faixa de 62%
   com sombra projetada: tratamento de render de produto recortado, que numa
   FOTO deixava tarja do fundo do cartão em cima e embaixo.
   A sombra saiu junto: sobre uma imagem sangrada ela não tem o que projetar. */
.linha-card .arte {
    position: absolute; inset: 0; width: 100%; height: 100%;
    object-fit: cover; object-position: center;
    transition: transform .45s cubic-bezier(.2,.7,.2,1);
}
/* Véu de legibilidade. Ficou mais forte porque agora há FOTO atrás do texto
   até o topo: com o antigo "transparent até 34%", o kicker caía sobre a parte
   clara da imagem e sumia. O topo mantém só um tom leve, para a foto continuar
   aparecendo, e fecha antes do bloco de texto começar. */
.linha-card .veu {
    position: absolute; inset: 0;
    background: linear-gradient(180deg,
        rgba(var(--escuro-1-rgb), 0)   0%,
        rgba(var(--escuro-1-rgb), .10) 38%,
        rgba(var(--escuro-1-rgb), .58) 56%,
        rgba(var(--escuro-1-rgb), .94) 78%,
        rgba(var(--escuro-1-rgb), 1)   100%);
}
.linha-card .txt { position: relative; padding: 28px; color: #fff; }
/* Serve a h2 e h3: o mesmo cartão é h3 na home (sob o h2 da seção) e h2 em
   /produtos (logo abaixo do h1). O nível muda, o desenho não. */
.linha-card .linha-titulo { font-size: 25px; font-weight: 700; margin: 10px 0 8px; }
.linha-card p { font-size: 14.5px; color: var(--sobre-escuro); margin: 0 0 16px; }
.linha-card .ir { font-size: 14px; font-weight: 600; color: #fff; }
/* Aproximação no hover, e não deslocamento: com a imagem sangrando até a
   borda, subir 6px descolaria o rodapé do cartão e mostraria o fundo. */
.linha-card:hover .arte { transform: scale(1.05); }
@media (prefers-reduced-motion: reduce) { .linha-card .arte { transition: none; } .linha-card:hover .arte { transform: none; } }

/* Variante SEM foto do cartão de linha — a home usa esta; /produtos segue com
   o .linha-card fotográfico. Cartão claro com borda: o ícone da categoria num
   chip com a cor da marca faz o papel da imagem, e o hover acende a borda na
   primária — mesma linguagem dos .seg do topo da página. */
.linha-flat {
    display: flex; flex-direction: column; align-items: flex-start;
    padding: 28px; background: var(--sup);
    border: 1px solid var(--borda); border-radius: var(--raio-card);
    transition: border-color .18s, box-shadow .18s;
}
.linha-flat .ic {
    width: 62px; height: 62px; border-radius: 14px;
    background: var(--primaria-05); color: var(--primaria);
    display: flex; align-items: center; justify-content: center;
    font-size: 34px; margin-bottom: 20px;
}
.linha-flat .linha-titulo { font-size: 21px; font-weight: 700; margin: 8px 0 8px; color: var(--texto); }
.linha-flat p { font-size: 14.5px; color: var(--texto-2); margin: 0 0 18px; }
/* margin-top:auto encosta o link no rodapé: com descrições de tamanhos
   diferentes, o "Explorar linha" alinha entre os cartões da mesma fileira. */
.linha-flat .ir { font-size: 14px; font-weight: 600; color: var(--primaria); margin-top: auto; }
.linha-flat:hover { border-color: var(--primaria); box-shadow: var(--sombra-card); }
.linha-flat:hover .ir { text-decoration: underline; }

/* Versão horizontal e compacta do cartão de linha — a chamada "Outras linhas"
   no fim da coluna lateral de produtos/SLUG. Mesma receita do .linha-card
   (foto sangrada + véu + texto), espremida numa régua baixa: só o nome em
   destaque e a contagem de produtos. */
.linha-mini {
    position: relative; display: flex; align-items: center; height: 76px;
    border-radius: var(--raio-card); overflow: hidden; background: var(--escuro-1);
}
.linha-mini .arte {
    position: absolute; inset: 0; width: 100%; height: 100%;
    object-fit: cover; object-position: center;
    transition: transform .45s cubic-bezier(.2,.7,.2,1);
}
/* Véu horizontal: o texto vive à esquerda, então é lá que o escuro pesa. */
.linha-mini .veu {
    position: absolute; inset: 0;
    background: linear-gradient(90deg,
        rgba(var(--escuro-1-rgb), .92) 0%,
        rgba(var(--escuro-1-rgb), .66) 55%,
        rgba(var(--escuro-1-rgb), .18) 100%);
}
.linha-mini .txt { position: relative; padding: 0 16px; color: #fff; min-width: 0; }
.linha-mini .txt b { display: block; font-size: 16.5px; font-weight: 700; line-height: 1.25;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.linha-mini .txt small { font-size: 11.5px; color: var(--sobre-escuro); }
.linha-mini:hover .arte { transform: scale(1.06); }
@media (prefers-reduced-motion: reduce) { .linha-mini .arte { transition: none; } .linha-mini:hover .arte { transform: none; } }

/* ================================================== BLOCOS DE PRODUTOS == */
.carrossel-wrap { position: relative; }
.carrossel {
    display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory;
    scrollbar-width: none; padding-bottom: 4px;
}
.carrossel::-webkit-scrollbar { display: none; }
.setas { display: flex; gap: 8px; }
/* ATENÇÃO: `.seta` é o BOTÃO redondo de navegação do carrossel — tem caixa,
   borda e fundo próprio. Setinha decorativa dentro de outro elemento usa
   `.seta-ind`; usar `.seta` a envolve num botão que não existe. */
.seta {
    width: 42px; height: 42px; border: 1px solid var(--borda-2); background: var(--sup);
    border-radius: var(--raio-btn); cursor: pointer; color: var(--primaria); font-size: 14px;
    display: flex; align-items: center; justify-content: center;
}
.seta:hover { background: var(--primaria); color: #fff; border-color: var(--primaria); }

.card-prod {
    flex: 0 0 300px; scroll-snap-align: start; border: 1px solid var(--borda);
    min-width: 0;
    border-radius: var(--raio-card); overflow: hidden; background: var(--sup); display: flex; flex-direction: column;
    transition: box-shadow .2s, border-color .2s;
}
.card-prod:hover { box-shadow: var(--sombra-card); border-color: var(--borda-2); }
/* A imagem preenche a moldura inteira, cortando o excedente em vez de flutuar
   no meio com margem. `cover` mantém a proporção — o que sai é sobra, nunca
   deformação. */
.card-prod .im { position: relative; height: 220px; background: var(--listra); display: block; overflow: hidden; }
.card-prod .im img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; transition: transform .4s ease; }
.card-prod:hover .im img { transform: scale(1.045); }
.card-prod .tag {
    position: absolute; top: 12px; left: 12px; background: var(--escuro-2); color: #fff;
    font-family: var(--mono); font-size: 10px; letter-spacing: .1em; padding: 4px 9px; border-radius: 3px; text-transform: uppercase;
}
.card-prod .bd { padding: 16px; display: flex; flex-direction: column; gap: 6px; flex: 1; }
.card-prod .cod { font-family: var(--mono); font-size: 12px; color: var(--primaria); font-weight: 500; }
.card-prod .nm { font-size: 16px; font-weight: 600; line-height: 1.35; flex: 1; }
.card-prod .tag-novo {
    position: absolute; top: 12px; right: 12px; background: var(--acento); color: #fff;
    font-size: 10.5px; font-weight: 700; letter-spacing: .04em; padding: 4px 9px; border-radius: 3px; text-transform: uppercase;
}
/* Dois botões lado a lado. Abaixo de 340px de cartão eles empilham: "Informações"
   cortado ao meio não é um botão, é um erro. */
.card-prod .acoes { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.card-prod .acoes .btn { flex: 1 1 128px; padding: 11px 12px; font-size: 13px; white-space: nowrap; }
.card-prod .acoes .btn i { font-size: 12px; }
.card-prod .acoes .btn-largo { flex-basis: 100%; }

/* No carrossel a largura é fracionária, não fixa: sempre 4 cartões INTEIROS
   por vista no desktop (a conta desconta os 3 gaps de 20px). Os 300px fixos
   somavam 1260px num container de ~1216px e cortavam o quarto cartão na
   borda direita. Em telas menores, 3 → 2 → 1 com uma espiada no próximo. */
.carrossel .card-prod { flex-basis: calc((100% - 60px) / 4); }
@media (max-width: 1140px) { .carrossel .card-prod { flex-basis: calc((100% - 40px) / 3); } }
@media (max-width: 860px)  { .carrossel .card-prod { flex-basis: calc((100% - 20px) / 2); } }
@media (max-width: 580px)  { .carrossel .card-prod { flex-basis: 85%; } }

/* Grade da página /segmentos: 4 por linha no desktop — cartões mais largos
   respiram melhor que o auto-fit de 230px, que espremia 5 na tela. */
/* Produtos do segmento agrupados por linha. O separador acima de cada grupo é
   o que faz a leitura funcionar: sem ele as grades se encostam e as dezesseis
   peças voltam a parecer uma lista só. */
.seg-linha + .seg-linha { margin-top: 44px; padding-top: 40px; border-top: 1px solid var(--borda); }
.seg-linha-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 20px; }
.seg-linha-cab h3 { display: flex; align-items: center; gap: 10px; font-size: 19px; font-weight: 700; margin: 0; }
/* A contagem fica na pílula: dizer "6" ao lado do nome evita abrir a linha só
   para descobrir que ela tem seis itens. */
.seg-linha-cab h3 span {
    font-family: var(--mono); font-size: 12px; font-weight: 600; line-height: 1;
    padding: 5px 9px; border-radius: 999px; background: var(--sup-3); color: var(--primaria);
}
.seg-linha-cab a { font-size: 13.5px; font-weight: 600; color: var(--primaria); white-space: nowrap; }
.seg-linha-cab a:hover { text-decoration: underline; }

.seg-lista { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
@media (max-width: 1100px) { .seg-lista { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 820px)  { .seg-lista { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px)  { .seg-lista { grid-template-columns: 1fr; } }

/* Aba Instalação do produto: passos corridos — título e imagem em largura
   total da coluna; imagem menor que a coluna fica no tamanho natural,
   centralizada. */
.passo-inst { margin-bottom: 36px; }
.passo-inst:last-child { margin-bottom: 0; }
.passo-inst h3 { font-size: 18px; font-weight: 700; margin: 0 0 14px; }
.passo-inst img { display: block; max-width: 100%; height: auto; margin: 0 auto; border-radius: var(--raio-card); }

/* Grade (catálogo) — mesmo cartão, sem o encaixe do carrossel */
.grade-prod { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(260px, 100%), 1fr)); gap: 20px; }
.grade-prod .card-prod { flex: none; }

/* Banner horizontal do rodapé do bloco */
.banner-bloco {
    margin-top: 30px; border-radius: var(--raio-card); overflow: hidden; position: relative;
    background: linear-gradient(100deg, var(--escuro-2), var(--primaria));
    display: flex; align-items: center; justify-content: space-between; gap: 24px;
    padding: 32px 36px; flex-wrap: wrap; color: #fff;
}
.banner-bloco.com-foto::after { content: ''; position: absolute; inset: 0; background: rgba(var(--escuro-1-rgb), .72); }
.banner-bloco > * { position: relative; z-index: 1; }
.banner-bloco h3 { font-size: clamp(19px, 2.2vw, 24px); font-weight: 700; margin: 8px 0 0; max-width: 46ch; }
.banner-bloco p { font-size: 14.5px; color: var(--sobre-escuro); margin: 8px 0 0; max-width: 60ch; }

/* ============================================================= NOTÍCIAS == */
.noticias-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 24px; }
.card-not { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); overflow: hidden; display: flex; flex-direction: column; }
.card-not:hover { box-shadow: var(--sombra-card); }
.card-not .im { height: 200px; background: var(--listra); overflow: hidden; display: block; }
.card-not .im img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; transition: transform .4s ease; }
.card-not:hover .im img { transform: scale(1.045); }
.card-not .bd { padding: 20px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.card-not .meta { font-family: var(--mono); font-size: 11.5px; color: var(--primaria); letter-spacing: .1em; text-transform: uppercase; }
.card-not h3 { font-size: 18px; font-weight: 600; line-height: 1.35; }
.card-not p { font-size: 14px; color: var(--texto-2); margin: 0; flex: 1; }
.card-not .ir { font-size: 13.5px; font-weight: 600; color: var(--primaria); }

/* ======================================================== INSTITUCIONAL == */
.inst-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); gap: 56px; align-items: start; }
.inst p { color: var(--sobre-escuro); font-size: 16px; line-height: 1.7; margin: 16px 0 30px; max-width: 56ch; }
.inst-stats { display: flex; gap: 40px; flex-wrap: wrap; margin-bottom: 32px; }
.inst-stats .v { font-family: var(--mono); font-size: 38px; font-weight: 500; color: #fff; line-height: 1; }
.inst-stats .l { font-size: 13px; color: var(--sobre-escuro-2); margin-top: 8px; max-width: 18ch; }
.certs { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 20px; }
.cert { background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.1); border-radius: var(--raio-card); padding: 20px; }
.cert .ic { width: 44px; height: 44px; border-radius: 50%; background: rgba(255,255,255,.1); display: flex; align-items: center; justify-content: center; font-size: 22px; color: #fff; margin-bottom: 12px; }
.cert b { display: block; font-size: 15px; color: #fff; }
.cert small { font-size: 12.5px; color: var(--sobre-escuro-2); line-height: 1.4; }

/* ============================================================= CLIENTES == */
.clientes-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr)); gap: 16px; }
.cliente { height: 92px; background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); display: flex; align-items: center; justify-content: center; padding: 18px; }
/* Largura E altura explícitas, com object-fit cuidando da proporção.
   `width:auto` não serve aqui: SVG que traz só o viewBox — o formato em que
   vem a maioria das logomarcas — não tem tamanho intrínseco, a largura resolve
   em zero e a logo simplesmente não aparece. Com a caixa fixa e `contain`, cada
   marca ocupa o espaço que couber sem distorcer, seja SVG, PNG ou JPG. */
.cliente img { width: 100%; height: 100%; object-fit: contain; object-position: center; filter: grayscale(1); opacity: .72; transition: .2s; }
.cliente:hover img { filter: none; opacity: 1; }
.cliente span { font-size: 13px; color: var(--texto-3); font-weight: 600; text-align: center; }

/* ================================================================== FAQ == */
.faq-lista { display: flex; flex-direction: column; gap: 10px; }
.faq-item { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); overflow: hidden; }
.faq-item button {
    width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 20px;
    padding: 20px 22px; background: none; border: none; cursor: pointer; text-align: left;
    font-size: 16.5px; font-weight: 600; color: var(--texto); font-family: var(--fonte);
}
.faq-item .mais { width: 32px; height: 32px; flex-shrink: 0; border-radius: 50%; background: var(--sup-3); color: var(--primaria); display: flex; align-items: center; justify-content: center; font-size: 13px; }
.faq-item .resp { padding: 0 22px; max-height: 0; overflow: hidden; transition: max-height .3s ease, padding .3s ease; }
.faq-item.aberto .resp { max-height: 500px; padding: 0 22px 22px; }
.faq-item .resp p { font-size: 15.5px; color: var(--texto-2); line-height: 1.65; margin: 0; }

/* =============================================================== RODAPÉ == */
.rodape { background: var(--escuro-3); color: var(--sobre-escuro); padding: 56px 0 0; }
.rodape-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.4fr; gap: 40px; }
.rodape h4 { font-size: 13px; text-transform: uppercase; letter-spacing: .1em; color: #fff; margin-bottom: 18px; font-weight: 700; }
.rodape a:hover { color: #fff; }
.rodape ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 11px; font-size: 14px; }
.rodape .marca img { height: 34px; width: auto; margin-bottom: 18px; }
.rodape .marca p { font-size: 14px; line-height: 1.65; margin: 0 0 22px; max-width: 42ch; }
.rodape .redes { display: flex; gap: 10px; }
.rodape .redes a { width: 38px; height: 38px; border-radius: 50%; background: rgba(255,255,255,.08); display: flex; align-items: center; justify-content: center; font-size: 15px; }
.rodape .redes a:hover { background: var(--primaria); color: #fff; }
.rodape .contato { display: flex; flex-direction: column; gap: 14px; font-size: 14px; }
.rodape .contato div { display: flex; gap: 11px; align-items: flex-start; }
.rodape .contato i { color: var(--primaria); margin-top: 3px; font-size: 15px; }
.rodape-fim {
    margin-top: 48px; border-top: 1px solid rgba(255,255,255,.09); padding: 22px 0;
    display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; font-size: 13px;
}
.rodape-fim .legais { display: flex; gap: 22px; flex-wrap: wrap; }

/* ============================================================ INTERNAS == */
.pag-hero { background: var(--escuro-1); color: #fff; padding: 60px 0; position: relative; overflow: hidden; }
.pag-hero.com-foto::after { content: ''; position: absolute; inset: 0; background: rgba(var(--escuro-1-rgb), .8); }
.pag-hero > * { position: relative; z-index: 1; }
.pag-hero h1 { font-size: clamp(28px, 4vw, 42px); font-weight: 700; margin: 12px 0 0; }
.pag-hero p { font-size: 17px; color: var(--sobre-escuro); margin: 14px 0 0; max-width: 66ch; }

.migalhas { background: var(--sup-2); font-family: var(--mono); font-size: 13.5px; color: var(--texto-2); position: relative; z-index: 30; }
.migalhas .wrap { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; padding-top: 14px; padding-bottom: 14px; }
.migalhas a:hover { color: var(--primaria); }
.migalhas .atual { color: var(--primaria); }
.migalhas .sep { opacity: .45; }
/* Migalha ramificada: o nível com seta abre a lista de irmãos, para trocar de
   categoria sem voltar duas telas. */
.mig-drop { position: relative; }
.mig-drop > button { background: none; border: none; font-family: var(--mono); font-size: 13.5px; color: inherit; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; padding: 0; }
.mig-drop-painel {
    position: absolute; top: calc(100% + 10px); left: 0; background: var(--sup); border-top: 3px solid var(--primaria);
    border-radius: 0 0 var(--raio-card) var(--raio-card); box-shadow: var(--sombra-drop); padding: 10px;
    min-width: 248px; z-index: 50; display: none; font-family: var(--fonte);
}
.mig-drop:hover .mig-drop-painel, .mig-drop:focus-within .mig-drop-painel { display: grid; }
.mig-drop-painel.duas { grid-template-columns: 1fr 1fr; min-width: 430px; }
.mig-drop-painel a { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 6px; font-size: 13.5px; color: var(--texto-2); }
.mig-drop-painel a:hover { background: var(--sup-3); color: var(--primaria); }
.mig-drop-painel a i { font-size: 18px; color: var(--primaria); }

.prosa { font-size: 16px; line-height: 1.75; color: var(--texto-2); }
.prosa h2 { font-size: 25px; color: var(--texto); margin: 34px 0 14px; }
.prosa h3 { font-size: 20px; color: var(--texto); margin: 30px 0 12px; }
.prosa p { margin: 0 0 16px; }
.prosa ul, .prosa ol { margin: 0 0 18px; padding-left: 22px; }
.prosa li { margin-bottom: 8px; }
.prosa a { color: var(--primaria); font-weight: 600; }
.prosa a:hover { text-decoration: underline; }
.prosa img { border-radius: var(--raio-card); margin: 22px 0; }
.prosa table { width: 100%; border-collapse: collapse; margin: 22px 0; font-size: 14.5px; }
.prosa th, .prosa td { padding: 12px 14px; border-bottom: 1px solid var(--borda); text-align: left; }
.prosa th { background: var(--sup-2); font-weight: 700; color: var(--texto); }
.prosa blockquote {
    margin: 22px 0; padding: 4px 0 4px 20px; border-left: 3px solid var(--primaria);
    color: var(--texto); font-size: 17px; line-height: 1.65;
}
/* Classes que o editor do painel escreve no HTML. Sem estas regras, alinhar um
   parágrafo ou recuar uma lista no editor não teria efeito nenhum no site —
   e a pessoa ficaria achando que o botão está quebrado. */
.prosa .ql-align-center { text-align: center; }
.prosa .ql-align-right  { text-align: right; }
.prosa .ql-align-justify{ text-align: justify; }
.prosa .ql-indent-1 { padding-left: 3em; }
.prosa .ql-indent-2 { padding-left: 6em; }
.prosa .ql-indent-3 { padding-left: 9em; }

/* ====================================================== PÁG. DO PRODUTO == */
.prod-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 56px; align-items: start; }
.galeria { display: flex; gap: 16px; }
/* Coluna de miniaturas: rola quando as fotos não cabem, com setas em cima e
   embaixo. A altura acompanha a da imagem principal para as duas terminarem
   na mesma linha. */
.thumbs-col { display: flex; flex-direction: column; gap: 8px; flex-shrink: 0; max-height: 480px; }
.thumbs-seta {
    width: 78px; height: 26px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center;
    border: 1px solid var(--borda); border-radius: 6px; background: var(--sup);
    color: var(--primaria); font-size: 11px; cursor: pointer;
}
.thumbs-seta:hover:not([disabled]) { background: var(--sup-3); border-color: var(--primaria); }
.thumbs-seta[disabled] { opacity: .35; cursor: default; }
.thumbs-seta[hidden] { display: none; }

.galeria .thumbs {
    display: flex; flex-direction: column; gap: 10px; flex: 1 1 auto;
    overflow-y: auto; scrollbar-width: none;
}
.galeria .thumbs::-webkit-scrollbar { display: none; }
/* flex:0 0 78px — sem isso as miniaturas ENCOLHEM para caber na altura da
   coluna em vez de transbordar, e aí não há o que rolar: oito fotos viravam
   oito tirinhas achatadas e as setas nunca apareciam. */
.galeria .thumbs button { flex: 0 0 78px; width: 78px; height: 78px; border: 1px solid var(--borda); background: var(--sup); border-radius: 6px; cursor: pointer; padding: 8px; }
.galeria .thumbs button.on { border: 2px solid var(--primaria); }
.galeria .thumbs img { width: 100%; height: 100%; object-fit: contain; }
.galeria .principal {
    flex: 1; min-width: 0; max-height: 480px; aspect-ratio: 1/1; background: var(--sup);
    border: 1px solid var(--borda); border-radius: 10px; padding: 7%; position: relative;
}
.galeria .principal img { width: 100%; height: 100%; object-fit: contain; }
.galeria .principal .tag { position: absolute; top: 16px; left: 16px; background: var(--escuro-2); color: #fff; font-family: var(--mono); font-size: 10.5px; letter-spacing: .1em; padding: 5px 10px; border-radius: 3px; }
.galeria .principal .tag-novo { position: absolute; top: 16px; right: 16px; background: var(--acento); color: #fff; font-size: 11px; font-weight: 700; padding: 5px 11px; border-radius: 3px; text-transform: uppercase; letter-spacing: .04em; }
.btn-zoom {
    position: absolute; right: 14px; bottom: 14px; width: 40px; height: 40px; border-radius: 50%;
    border: 1px solid var(--borda-2); background: var(--sup); color: var(--primaria); cursor: pointer;
    display: flex; align-items: center; justify-content: center; font-size: 15px; transition: .18s;
}
.btn-zoom:hover { background: var(--primaria); color: #fff; border-color: var(--primaria); }

/* Lightbox da imagem principal */
.zoom-overlay {
    position: fixed; inset: 0; background: rgba(10,11,16,.92); z-index: 200;
    display: none; align-items: center; justify-content: center; padding: 5vw; cursor: zoom-out;
}
.zoom-overlay.on { display: flex; }
.zoom-overlay img { max-width: 100%; max-height: 90vh; object-fit: contain; }
.zoom-fechar {
    position: absolute; top: 20px; right: 24px; width: 46px; height: 46px; border-radius: 50%;
    border: 1px solid rgba(255,255,255,.3); background: rgba(255,255,255,.08); color: #fff;
    font-size: 20px; cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.zoom-fechar:hover { background: rgba(255,255,255,.18); }
.zoom-seta {
    position: absolute; top: 50%; transform: translateY(-50%);
    width: 46px; height: 46px; border-radius: 50%;
    border: 1px solid rgba(255,255,255,.3); background: rgba(255,255,255,.08); color: #fff;
    font-size: 18px; cursor: pointer; display: flex; align-items: center; justify-content: center;
    transition: background .16s;
}
.zoom-seta:hover { background: rgba(255,255,255,.18); }
.zoom-seta.ant { left: 18px; }
.zoom-seta.prox { right: 18px; }
.zoom-contador {
    position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%);
    padding: 6px 14px; border-radius: 999px; background: rgba(255,255,255,.1);
    border: 1px solid rgba(255,255,255,.2); color: #fff; font-size: 13px; cursor: default;
}
@media (max-width: 700px) {
    .zoom-seta { width: 40px; height: 40px; font-size: 16px; }
    .zoom-seta.ant { left: 8px; }
    .zoom-seta.prox { right: 8px; }
}

/* Embed do Desenho 3D — o link abre POR CIMA da página, num iframe que toma a
   tela inteira menos 50px de respiro, com duas saídas só: nova aba e fechar. */
.embed-overlay {
    position: fixed; inset: 0; background: rgba(10,11,16,.78); z-index: 210;
    display: none; align-items: center; justify-content: center;
    backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
}
.embed-overlay.on { display: flex; }
.embed-caixa {
    width: calc(100vw - 50px); height: calc(100vh - 50px);
    background: var(--sup); border-radius: 12px; overflow: hidden;
    display: flex; flex-direction: column; box-shadow: 0 40px 90px -30px rgba(0,0,0,.55);
}
.embed-topo {
    display: flex; align-items: center; justify-content: space-between; gap: 14px;
    padding: 0 10px 0 18px; height: 48px; flex-shrink: 0;
    border-bottom: 1px solid var(--borda); background: var(--sup);
}
.embed-marca { display: flex; align-items: center; gap: 10px; min-width: 0; }
.embed-marca img { height: 20px; width: auto; flex-shrink: 0; }
.embed-marca .nm { font-size: 14px; font-weight: 700; color: var(--texto); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.embed-marca .sep { color: var(--texto-3); flex-shrink: 0; }
.embed-marca strong { font-size: 14px; font-weight: 500; color: var(--texto-2); white-space: nowrap; flex-shrink: 0; }
.embed-acoes { display: flex; gap: 4px; }
.embed-acoes a, .embed-acoes button {
    width: 36px; height: 36px; border-radius: 8px; border: 0; background: none;
    color: var(--texto-2); font-size: 15px; cursor: pointer;
    display: flex; align-items: center; justify-content: center; transition: .15s;
}
.embed-acoes a:hover, .embed-acoes button:hover { background: var(--sup-3); color: var(--primaria); }
/* O corpo é a janela; o iframe, o papel atrás dela. Com --corte > 0 o iframe
   cresce e sobe, e a faixa cortada (a barra do site embutido) fica fora da
   vista sem tocar no DOM dele — que é de outro domínio e não aceita CSS nosso. */
.embed-corpo { flex: 1; position: relative; overflow: hidden; background: #fff; }
.embed-corpo iframe {
    position: absolute; left: 0; width: 100%; border: 0; background: #fff;
    top: calc(-1 * var(--corte, 0px)); height: calc(100% + var(--corte, 0px));
}
@media (max-width: 700px) { .embed-caixa { width: calc(100vw - 20px); height: calc(100vh - 20px); border-radius: 10px; } }

/* Compartilhar */
.prod-share { display: flex; align-items: center; gap: 10px; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--borda); flex-wrap: wrap; }
.prod-share span { font-size: 12.5px; font-weight: 700; color: var(--texto-3); text-transform: uppercase; letter-spacing: .06em; }
.prod-share a, .prod-share button {
    width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--borda);
    background: var(--sup); color: var(--texto-2); display: flex; align-items: center; justify-content: center;
    font-size: 14px; cursor: pointer; transition: .16s;
}
.prod-share a:hover, .prod-share button:hover { border-color: var(--primaria); color: var(--primaria); }

/* ---- Compre junto ---- */
.junto { display: grid; grid-template-columns: minmax(0,1fr) 280px; gap: 28px; align-items: center; }
.junto-itens { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.junto-mais { color: var(--texto-3); font-size: 13px; flex: 0 0 auto; }
.junto-item {
    display: flex; align-items: center; gap: 11px; padding: 12px; background: var(--sup);
    border: 1px solid var(--borda); border-radius: var(--raio-card); cursor: pointer;
    flex: 1 1 210px; min-width: 0; transition: .16s;
}
.junto-item:hover { border-color: var(--primaria); }
.junto-item.fixo { cursor: default; background: var(--sup-3); }
.junto-item input { accent-color: var(--primaria); width: 17px; height: 17px; flex: 0 0 auto; }
/* Fundo branco, pelo mesmo motivo do carrinho em /orcamento: a listra é o
   marcador de "sem imagem" das grades do catálogo, mas aqui a foto sempre
   existe — e como ela é um render de fundo transparente exibido com `contain`,
   a listra aparecia por trás da peça e virava ruído. */
.junto-item .im { width: 52px; height: 52px; flex: 0 0 auto; border-radius: 6px; background: var(--sup); overflow: hidden; display: flex; }
.junto-item .im img { width: 100%; height: 100%; object-fit: contain; padding: 5px; }
.junto-item .tx { min-width: 0; font-size: 13px; line-height: 1.35; color: var(--texto-2); }
.junto-item .tx b { display: block; font-family: var(--mono); font-size: 11px; color: var(--primaria); margin-bottom: 3px; }
.junto-acao { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 20px; text-align: center; }
.junto-acao .junto-conta { font-size: 13.5px; color: var(--texto-2); margin-bottom: 12px; }
.junto-acao .junto-conta b { font-family: var(--mono); font-size: 20px; color: var(--primaria); display: block; }
.junto-acao small { display: block; font-size: 12px; color: var(--texto-3); margin-top: 10px; line-height: 1.5; }

/* Tabela que rola sozinha em vez de estourar a página.
   O min-width garante que as colunas não virem uma coluna só de palavras
   quebradas; quem faz a tabela caber é o scroll do contêiner, não o texto. */
.tabela-rolavel { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
.tabela-rolavel table { min-width: 420px; }

.prod-info .cod { font-family: var(--mono); font-size: 13px; color: var(--primaria); letter-spacing: .06em; text-transform: uppercase; }
.prod-info h1 { font-size: clamp(25px, 3vw, 34px); font-weight: 700; margin: 12px 0 14px; }
.prod-info .resumo { font-size: 16px; color: var(--texto-2); line-height: 1.65; margin: 0 0 22px; }
.selos { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 26px; }
.selo { display: inline-flex; align-items: center; gap: 7px; padding: 7px 14px; border-radius: 20px; background: var(--sup-3); color: var(--primaria); font-size: 12.5px; font-weight: 600; }
/* Estilo "verde claro" do selo — estado positivo (estoque, garantia), como no
   layout de referência. Cores fixas de propósito: verde de "ok" é semântico e
   não muda de marca para marca. */
.selo.selo-verde { background: #eef9f1; color: #1d7a45; }
.qspecs { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 26px; }
.qspec { border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 14px 16px; display: flex; gap: 12px; align-items: center; }
.qspec > i { font-size: 24px; color: var(--primaria); flex: 0 0 auto; }
.qspec .r { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--texto-3); font-weight: 700; }
.qspec .v { font-family: var(--mono); font-size: 15px; color: var(--texto); margin-top: 4px; }

/* A grade das abas + coluna de ajuda. Estava só em <style> na página; vive aqui
   porque a regra de quebra é responsividade, e responsividade mora no CSS. */
.prod-abas-grid { display: grid; grid-template-columns: minmax(0,1fr) 320px; gap: 44px; align-items: start; }

/* ------------------------------------------------------------------------
   min-width:0 em TODA coluna de grid deste site.
   Uma coluna `1fr` tem min-width:auto por padrão, e basta um conteúdo largo
   lá dentro (uma tabela com min-width, um <pre>, um código sem espaço) para
   ela recusar encolher e empurrar a página inteira para a direita. Foi
   exatamente o que aconteceu com a tabela de especificações a 360px.
   ------------------------------------------------------------------------ */
.prod-abas-grid > *, .prod-grid > *, .dist-layout > *, .dist-ficha > *,
.carr-grid > *, .emp-abertura > *, .orc-grid > *, .pag-grid > *,
.cat-grid > *, .inst-grid > * { min-width: 0; }
.qtd-linha { display: flex; gap: 12px; align-items: stretch; margin-bottom: 12px; flex-wrap: wrap; }
.qtd { display: flex; align-items: center; border: 1px solid var(--borda-2); border-radius: var(--raio-btn); overflow: hidden; }
.qtd button { width: 44px; height: 100%; min-height: 48px; border: none; background: var(--sup); cursor: pointer; font-size: 15px; color: var(--primaria); }
.qtd button:hover { background: var(--sup-3); }
.qtd input { width: 56px; border: none; text-align: center; font-family: var(--mono); font-size: 15px; background: var(--sup); color: var(--texto); }
.qtd input:focus { outline: none; }
/* Botões de ação do produto: lado a lado, cada um esticando para preencher a
   linha. Com um só, ele ocupa tudo; com três, dividem em três. */
.prod-acoes { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }
.acao-btn {
    flex: 1 1 130px; display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 8px; padding: 16px 12px; border: 1px solid var(--borda); border-radius: var(--raio-btn);
    font-size: 13px; font-weight: 600; color: var(--texto-2); text-align: center; transition: .18s; min-width: 0;
}
.acao-btn i { font-size: 20px; color: var(--primaria); }
.acao-btn span { line-height: 1.3; }
.acao-btn:hover { border-color: var(--primaria); color: var(--primaria); background: var(--primaria-05); }

.prod-downloads { display: flex; flex-direction: column; gap: 10px; margin-top: 20px; }
.dl-btn { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border: 1px solid var(--borda); border-radius: var(--raio-btn); font-size: 14px; font-weight: 600; color: var(--texto); }
.dl-btn:hover { border-color: var(--primaria); color: var(--primaria); }
.dl-btn i.ic { font-size: 18px; color: var(--primaria); }
.dl-btn .seta-ind { margin-left: auto; font-size: 13px; color: var(--texto-3); }

.abas { display: flex; gap: 4px; border-bottom: 1px solid var(--borda); overflow-x: auto; margin-bottom: 30px; }
.abas button { background: none; border: none; padding: 15px 20px; font-family: var(--fonte); font-size: 14.5px; font-weight: 600; color: var(--texto-2); cursor: pointer; border-bottom: 3px solid transparent; white-space: nowrap; }
.abas button.on { color: var(--primaria); border-bottom-color: var(--primaria); }
.aba-pane { display: none; }
.aba-pane.on { display: block; }
.tab-specs { width: 100%; border-collapse: collapse; font-size: 14.5px; }
.tab-specs td { padding: 13px 16px; border-bottom: 1px solid var(--borda); }
.tab-specs tr:nth-child(odd) { background: var(--sup-2); }
.tab-specs td:first-child { color: var(--texto-2); width: 42%; }
.tab-specs td:last-child { font-family: var(--mono); color: var(--texto); }
.vantagens { list-style: none; padding: 0; margin: 20px 0 0; display: flex; flex-direction: column; gap: 12px; }
.vantagens li { display: flex; gap: 11px; align-items: flex-start; font-size: 15px; color: var(--texto-2); }
.vantagens i { color: var(--verde); font-size: 17px; margin-top: 2px; }
.aplic-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.aplic { display: flex; align-items: center; gap: 12px; padding: 15px; border: 1px solid var(--borda); border-radius: var(--raio-card); font-size: 14.5px; font-weight: 600; }
.aplic i { font-size: 22px; color: var(--primaria); }

/* Caixa fixa da coluna lateral.
   O fundo opaco NÃO é decoração: sendo `sticky`, ela para no lugar enquanto o
   resto da página desliza por baixo. Sem fundo, o conteúdo que passa atrás
   aparece através dela e os dois textos se sobrepõem, ilegíveis. O z-index
   garante a ordem de pintura mesmo quando o vizinho cria contexto próprio. */
.ajuda-card {
    border: 1px solid var(--borda); border-radius: var(--raio-card); overflow: hidden;
    background: var(--sup); position: sticky; top: calc(var(--h-header) + 20px); z-index: 2;
}
.ajuda-card .top { background: linear-gradient(120deg, var(--escuro-2), var(--primaria)); color: #fff; padding: 22px; }
.ajuda-card .top h4 { font-size: 17px; font-weight: 700; }
.ajuda-card .top p { font-size: 13.5px; color: var(--sobre-escuro); margin: 8px 0 0; }
.ajuda-card .bd { padding: 20px; display: flex; flex-direction: column; gap: 10px; }

/* Logomarca do distribuidor, no topo do cartão de contato.
   Altura fixa com object-fit:contain porque as logos chegam em proporções
   imprevisíveis — sem isso uma marca larga e baixa e outra alta e estreita
   deixariam o cartão pulando de tamanho de uma ficha para outra. */
.dist-logo { display: flex; align-items: center; justify-content: center;
    padding: 4px 4px 16px; margin-bottom: 4px; border-bottom: 1px solid var(--borda); }
.dist-logo img { max-width: 100%; height: 54px; width: auto; object-fit: contain; }

/* ================================================= PÁGINA DA EMPRESA == */
.emp-abertura { display: grid; grid-template-columns: minmax(0,1.15fr) minmax(0,1fr); gap: clamp(32px, 5vw, 70px); align-items: center; }
.emp-texto { font-size: 16.5px; line-height: 1.75; color: var(--texto-2); margin: 18px 0 0; max-width: 60ch; }
.emp-numeros { display: flex; gap: clamp(24px, 4vw, 48px); flex-wrap: wrap; margin-top: 34px; padding-top: 30px; border-top: 1px solid var(--borda); }
.emp-numeros .v { font-family: var(--mono); font-size: clamp(28px, 3.4vw, 40px); font-weight: 500; color: var(--primaria); line-height: 1; }
.emp-numeros .l { font-size: 13px; color: var(--texto-2); margin-top: 8px; max-width: 20ch; line-height: 1.45; }
.emp-foto { margin: 0; position: relative; border-radius: var(--raio-card); overflow: hidden; }
.emp-foto img { width: 100%; height: 100%; min-height: 320px; object-fit: cover; display: block; }
.emp-foto figcaption {
    position: absolute; left: 0; bottom: 0; background: var(--escuro-2); color: #fff;
    font-family: var(--mono); font-size: 11.5px; letter-spacing: .12em; text-transform: uppercase;
    padding: 12px 18px; max-width: 90%;
}

/* Pilares: missão, visão, valores */
.emp-pilares { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)); gap: 20px; }
.emp-pilar { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 30px 26px; position: relative; transition: .22s; }
.emp-pilar:hover { border-color: var(--primaria); transform: translateY(-4px); box-shadow: var(--sombra-card); }
.emp-pilar .num { position: absolute; top: 22px; right: 24px; font-family: var(--mono); font-size: 13px; color: var(--borda-2); font-weight: 600; }
.emp-pilar .ic { width: 52px; height: 52px; border-radius: 50%; background: var(--sup-3); color: var(--primaria); display: flex; align-items: center; justify-content: center; font-size: 26px; margin-bottom: 18px; }
.emp-pilar h3 { font-size: 20px; font-weight: 700; margin-bottom: 10px; }
.emp-pilar p { font-size: 14.5px; line-height: 1.65; color: var(--texto-2); margin: 0; }

/* Linha do tempo — horizontal no desktop, vertical no celular */
.linha-tempo { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr)); gap: 0; }
.linha-tempo li { position: relative; padding: 0 20px 0 0; }
.linha-tempo .eixo { display: block; position: relative; height: 2px; background: var(--borda); margin-bottom: 24px; }
.linha-tempo li:last-child .eixo { background: linear-gradient(90deg, var(--borda) 0%, var(--borda) 40%, transparent 100%); }
.linha-tempo .ponto { position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 14px; height: 14px; border-radius: 50%; background: var(--primaria); box-shadow: 0 0 0 4px var(--sup), 0 0 0 7px var(--primaria-18); }
.linha-tempo .ano { display: block; font-family: var(--mono); font-size: 20px; font-weight: 600; color: var(--primaria); margin-bottom: 8px; }
.linha-tempo h3 { font-size: 16.5px; font-weight: 700; margin-bottom: 8px; padding-right: 10px; }
.linha-tempo p { font-size: 14px; line-height: 1.6; color: var(--texto-2); margin: 0; padding-right: 14px; }

/* Diferenciais: coluna com borda superior, como no delta */
.emp-difs { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr)); gap: 22px; }
.emp-dif { border-top: 3px solid var(--primaria); padding-top: 22px; }
.emp-dif > i { font-size: 30px; color: var(--primaria); display: block; margin-bottom: 14px; }
.emp-dif h3 { font-size: 17px; font-weight: 700; margin-bottom: 9px; }
.emp-dif p { font-size: 14px; line-height: 1.65; color: var(--texto-2); margin: 0; }

/* Lista de valores dentro da faixa escura */
.emp-valores { list-style: none; padding: 0; margin: 26px 0 0; display: flex; flex-direction: column; gap: 16px; }
.emp-valores li { display: flex; gap: 13px; align-items: flex-start; }
.emp-valores i { font-size: 20px; color: var(--sobre-escuro-2); margin-top: 2px; flex: 0 0 auto; }
.emp-valores span { font-size: 14.5px; line-height: 1.6; color: var(--sobre-escuro); }
.emp-valores b { display: block; color: #fff; font-size: 15px; margin-bottom: 3px; }

/* Chamada final */
.emp-cta { display: flex; align-items: center; justify-content: space-between; gap: 28px; flex-wrap: wrap; }
.emp-cta p { font-size: 15.5px; color: var(--texto-2); margin: 10px 0 0; }
.emp-cta-btns { display: flex; gap: 10px; flex-wrap: wrap; }

/* ======================================================= DISTRIBUIDORES == */
.dist-layout { display: grid; grid-template-columns: 400px minmax(0, 1fr); gap: 28px; align-items: start; }
.dist-painel { position: sticky; top: calc(var(--h-header) + 16px); display: flex; flex-direction: column; gap: 14px; }
.dist-busca { position: relative; }
.dist-busca input {
    width: 100%; padding: 15px 16px 15px 46px; border: 1px solid var(--borda-2); border-radius: var(--raio-btn);
    font-family: var(--fonte); font-size: 15px; background: var(--sup); color: var(--texto);
}
.dist-busca input:focus { outline: none; border-color: var(--primaria); box-shadow: 0 0 0 3px var(--primaria-18); }
.dist-busca i { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--primaria); font-size: 17px; }
.dist-filtros { display: flex; gap: 8px; flex-wrap: wrap; }
.dist-filtros select {
    flex: 1; min-width: 140px; padding: 11px 12px; border: 1px solid var(--borda); border-radius: var(--raio-btn);
    font-family: var(--fonte); font-size: 13.5px; background: var(--sup); color: var(--texto);
}
.dist-contagem { font-size: 13px; color: var(--texto-2); display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.dist-contagem b { color: var(--texto); }
.dist-lista { display: flex; flex-direction: column; gap: 10px; max-height: 62vh; overflow-y: auto; padding-right: 4px; }
.dist-lista::-webkit-scrollbar { width: 6px; }
.dist-lista::-webkit-scrollbar-thumb { background: var(--borda-2); border-radius: 4px; }
.dist-card { border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 17px; background: var(--sup); cursor: pointer; transition: .18s; }
.dist-card:hover { border-color: var(--primaria); box-shadow: var(--sombra-card); }
.dist-card.on { border-color: var(--primaria); box-shadow: 0 0 0 2px var(--primaria-18); }
.dist-card .cab { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.dist-card h3 { font-size: 15.5px; font-weight: 700; line-height: 1.35; }
.dist-card .uf { font-family: var(--mono); font-size: 12px; font-weight: 700; color: var(--primaria); background: var(--sup-3); padding: 3px 9px; border-radius: 4px; flex-shrink: 0; }
.dist-card .loc { font-size: 13.5px; color: var(--texto-2); margin-top: 6px; display: flex; align-items: flex-start; gap: 7px; }
.dist-card .loc i { color: var(--texto-3); margin-top: 2px; }
.dist-card .tipo { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--primaria); margin-top: 10px; }
.dist-card .contatos { display: flex; gap: 8px; margin-top: 14px; flex-wrap: wrap; }
.dist-card .contatos a { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; border: 1px solid var(--borda); border-radius: var(--raio-btn); font-size: 12.5px; font-weight: 600; color: var(--texto-2); }
.dist-card .contatos a:hover { border-color: var(--primaria); color: var(--primaria); }
.dist-card .contatos a.zap:hover { border-color: var(--verde); color: var(--verde); }
.dist-card .dist-km { font-family: var(--mono); font-size: 12px; color: var(--primaria); font-weight: 700; }
.dist-card .linhas { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 12px; }
.dist-card .linhas span { font-size: 11px; padding: 3px 8px; border-radius: 4px; background: var(--sup-2); color: var(--texto-3); }

.mapa-caixa { border: 1px solid var(--borda); border-radius: var(--raio-card); background: var(--sup-2); padding: 20px; position: relative; overflow: hidden; }
.mapa-caixa svg { width: 100%; height: auto; display: block; }
.mapa-legenda { display: flex; gap: 18px; flex-wrap: wrap; align-items: center; font-size: 12.5px; color: var(--texto-2); margin-top: 16px; }
.mapa-legenda span { display: inline-flex; align-items: center; gap: 7px; }
.mapa-legenda i.pt { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
/* Divisas estaduais e siglas. O estado inteiro é área de hover: passar o mouse
   sobre o território e ver qual é vale mais que ter de acertar a sigla. */
/* A divisa não pode usar --borda-2 como a malha de bolinhas: na mesma cor do
   ponto ela sumia no meio da textura. É --texto-3 rebaixado — escuro o bastante
   para separar dois estados, claro o bastante para não competir com os pinos. */
.mapa-caixa path.uf { stroke: var(--texto-3); stroke-opacity: .45; stroke-width: 1; stroke-linejoin: round; transition: stroke-opacity .16s, stroke .16s; }
/* O realce vem da classe .on posta pelo JS (e não só do :hover): assim o estado
   continua aceso mesmo quando o cursor está sobre um pino dele. */
.mapa-caixa path.uf:hover, .mapa-caixa path.uf.on { stroke: var(--primaria); stroke-opacity: 1; stroke-width: 1.6; }
.mapa-caixa path.uf.tem { cursor: pointer; }
.uf-siglas {
    /* Sem isto a sigla intercepta o clique do pino que estiver embaixo dela. */
    pointer-events: none;
    font-family: var(--mono); font-size: 12px; font-weight: 700;
    fill: var(--texto-2); text-anchor: middle; dominant-baseline: central;
    /* Um halo da cor do mapa separa a letra da malha de bolinhas atrás dela. */
    paint-order: stroke; stroke: var(--sup); stroke-width: 3.5; stroke-linejoin: round;
}
/* O SVG encolhe junto com a coluna, e a sigla encolhe com ele: num celular
   estreito os 12 do desktop chegam à tela com 6px, ilegíveis. O tamanho sobe em
   unidades do mapa para o resultado na tela continuar por volta de 11px. */
@media (max-width: 620px) { .uf-siglas { font-size: 16px; stroke-width: 4.5; } }
@media (max-width: 460px) { .uf-siglas { font-size: 21px; stroke-width: 6; } }
.mapa-dica {
    position: absolute; pointer-events: none; background: var(--escuro-2); color: #fff; padding: 12px 14px 11px;
    border-radius: 8px; font-size: 12.5px; opacity: 0; transition: opacity .15s; z-index: 5;
    box-shadow: 0 10px 24px rgba(0,0,0,.24); min-width: 210px; max-width: min(300px, calc(100% - 16px));
    line-height: 1.35;
}
/* Estados com muitas unidades: a lista abre em colunas (2 ou 3, via --cols
   posto pelo JS) e a dica alarga em vez de crescer para baixo. A dica não
   recebe mouse (pointer-events:none), então rolar dentro dela nunca foi opção:
   cortar itens escondia distribuidores sem aviso. Agora todos aparecem. */
.mapa-dica.cols-2 { max-width: min(560px, calc(100% - 16px)); }
.mapa-dica.cols-3 { max-width: min(820px, calc(100% - 16px)); }
.mapa-dica.cols-2 ul, .mapa-dica.cols-3 ul { display: grid; grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr)); gap: 7px 18px; }
.mapa-dica b { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13.5px; margin-bottom: 2px; }
.mapa-dica b .sg { font-family: var(--mono); font-size: 11px; font-weight: 700; opacity: .7; }
.mapa-dica small { display: block; font-size: 11px; opacity: .6; margin-bottom: 8px; }
/* Lista vertical das unidades do estado: um ponto da cor do pino, nome e cidade. */
.mapa-dica ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.mapa-dica li { display: flex; align-items: flex-start; gap: 8px; }
/* O ponto do distribuidor comum é claro, não da primária: sobre o fundo escuro
   da dica a primária (azul) sumia. O da matriz segue vermelho como no mapa. */
.mapa-dica li i { flex-shrink: 0; width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.85); margin-top: 4px; box-shadow: 0 0 0 2px rgba(255,255,255,.18); }
.mapa-dica li.mz i { background: #e11d2f; }
.mapa-dica li > span { display: flex; flex-direction: column; min-width: 0; }
.mapa-dica li strong { font-size: 12.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 260px; }
.mapa-dica.cols-2 li strong, .mapa-dica.cols-3 li strong { max-width: 240px; }
.mapa-dica li .loc { font-size: 11.5px; opacity: .7; }
.mapa-dica em { display: block; font-style: normal; font-size: 11px; opacity: .6; margin-top: 9px; padding-top: 7px; border-top: 1px solid rgba(255,255,255,.12); }
.mapa-dica.on { opacity: 1; }

/* O nome do distribuidor é link para a ficha completa */
.dist-card h3 a { display: inline-flex; align-items: baseline; gap: 6px; color: inherit; }
.dist-card h3 a i { font-size: 10px; color: var(--primaria); opacity: 0; transition: .16s; }
.dist-card:hover h3 a i { opacity: 1; transform: translateX(2px); }
.dist-card h3 a:hover { color: var(--primaria); }

/* ---------------------------- ficha do distribuidor ---------------------- */
.dist-ficha { display: grid; grid-template-columns: minmax(0,1fr) 330px; gap: 48px; align-items: start; }
.ficha-bloco { border-top: 1px solid var(--borda); padding-top: 26px; margin-top: 26px; }
.dist-ficha .ficha-bloco:first-child { border-top: none; padding-top: 0; margin-top: 0; }
.ficha-bloco h3 { display: flex; align-items: center; gap: 10px; font-size: 17px; font-weight: 700; margin-bottom: 14px; }
.ficha-bloco h3 i { font-size: 22px; color: var(--primaria); }
.ficha-bloco p { font-size: 15px; line-height: 1.7; color: var(--texto-2); margin: 0 0 14px; }
.ficha-bloco small { display: block; font-size: 12.5px; color: var(--texto-3); margin-top: 12px; line-height: 1.55; }
.ficha-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.ficha-chips span { font-size: 13px; padding: 7px 13px; border-radius: 999px; background: var(--sup-2); border: 1px solid var(--borda); color: var(--texto-2); }
.ficha-linhas { display: flex; gap: 9px; flex-wrap: wrap; }
.ficha-linha {
    display: inline-flex; align-items: center; gap: 8px; padding: 10px 15px; border-radius: var(--raio-btn);
    border: 1px solid var(--borda); background: var(--sup); font-size: 14px; font-weight: 600; color: var(--texto-2);
}
.ficha-linha i { color: var(--verde); font-size: 12px; }
a.ficha-linha:hover { border-color: var(--primaria); color: var(--primaria); }
.viz-link { display: block; padding: 11px 12px; border-radius: var(--raio-btn); transition: .15s; }
.viz-link:hover { background: var(--sup-2); }
.viz-link b { display: block; font-size: 13.5px; color: var(--texto); }
.viz-link span { font-size: 12.5px; color: var(--texto-3); }
.mapa-limpar { position: absolute; top: 18px; right: 18px; z-index: 4; }

/* ============================================ CARREIRAS / PROCESSOS == */
.passos { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); gap: 20px; }
.passo { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 26px 22px; position: relative; transition: .2s; }
.passo:hover { border-color: var(--primaria); transform: translateY(-3px); box-shadow: var(--sombra-card); }
.passo .n { position: absolute; top: 20px; right: 22px; font-family: var(--mono); font-size: 26px; font-weight: 600; color: var(--sup-3); line-height: 1; }
.passo > i { font-size: 30px; color: var(--primaria); display: block; margin-bottom: 16px; }
.passo h3 { font-size: 17px; font-weight: 700; margin-bottom: 8px; }
.passo p { font-size: 14px; line-height: 1.6; color: var(--texto-2); margin: 0; }

.benef-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 20px; }
.benef { display: flex; align-items: center; gap: 11px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.1); border-radius: var(--raio-card); padding: 15px; font-size: 14px; color: #fff; }
.benef i { font-size: 21px; color: var(--sobre-escuro-2); flex: 0 0 auto; }

.carr-grid { display: grid; grid-template-columns: minmax(0,1fr) 330px; gap: 48px; align-items: start; }

/* Campo de anexo: alvo grande, porque é a ação principal da página */
.arquivo-drop {
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px;
    border: 2px dashed var(--borda-2); border-radius: var(--raio-card); padding: 30px 20px;
    cursor: pointer; text-align: center; transition: .18s; background: var(--sup-2);
}
.arquivo-drop:hover { border-color: var(--primaria); background: var(--primaria-05); }
.arquivo-drop.ok { border-color: var(--verde); border-style: solid; background: rgba(37,193,94,.06); }
.arquivo-drop input { position: absolute; width: 1px; height: 1px; opacity: 0; }
.arquivo-drop i { font-size: 30px; color: var(--primaria); }
.arquivo-drop.ok i { color: var(--verde); }
.arquivo-drop b { font-size: 14.5px; color: var(--texto); word-break: break-all; }
.arquivo-drop small { font-size: 12.5px; color: var(--texto-3); }

.card-info { border: 1px solid var(--borda); border-radius: var(--raio-card); padding: 22px; margin-top: 14px; }
.card-info h4 { font-size: 12.5px; text-transform: uppercase; letter-spacing: .1em; color: var(--texto-3); margin-bottom: 14px; }
.card-info dl { margin: 0; }
.card-info dt { font-size: 14px; font-weight: 700; color: var(--texto); margin-bottom: 5px; }
.card-info dd { font-size: 13.5px; color: var(--texto-2); line-height: 1.55; margin: 0 0 16px; }
.card-info dd:last-child { margin-bottom: 0; }

.ok-circulo {
    width: 76px; height: 76px; border-radius: 50%; background: rgba(37,193,94,.12); color: var(--verde);
    display: flex; align-items: center; justify-content: center; font-size: 34px; margin: 0 auto 22px;
}

/* ======================================== MATERIAIS (conteúdo técnico) == */
.mat-filtros { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 28px; }
.mat-filtro {
    display: inline-flex; align-items: center; gap: 8px; padding: 10px 15px; border-radius: 999px;
    border: 1px solid var(--borda); background: var(--sup); font-size: 13.5px; font-weight: 600; color: var(--texto-2);
    transition: .16s;
}
.mat-filtro i { font-size: 17px; }
.mat-filtro span { font-family: var(--mono); font-size: 11px; opacity: .7; }
.mat-filtro:hover { border-color: var(--primaria); color: var(--primaria); }
.mat-filtro.on { background: var(--primaria); border-color: var(--primaria); color: #fff; }
.mat-filtro.on span { opacity: .85; }

/* Cartão fora do filtro. `display:none` e não `visibility`: o grid precisa
   fechar o buraco, senão a fileira fica com vãos onde estavam os escondidos. */
.mat-oculto { display: none !important; }
/* Entrada suave de quem aparece — a troca de aba não recarrega mais nada, então
   sem isso a grade muda de um quadro para o outro.
   Só a opacidade é animada: `transform` aqui, com fill-mode, venceria o
   translateY(-3px) do :hover e o cartão deixaria de subir ao passar o mouse. */
.mat-card { animation: matEntra .22s ease; }
@keyframes matEntra { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .mat-card { animation: none; } }

.mat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(272px, 100%), 1fr)); gap: 22px; }
.mat-card { background: var(--sup); border: 1px solid var(--borda); border-radius: var(--raio-card); overflow: hidden; display: flex; flex-direction: column; transition: .22s; }
.mat-card:hover { box-shadow: var(--sombra-card); border-color: var(--borda-2); transform: translateY(-3px); }
.mat-card.destaque { border-color: var(--primaria); }
.mat-capa {
    height: 172px; background: var(--escuro-1); position: relative; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
}
.mat-capa img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; transition: transform .4s ease; }
.mat-card:hover .mat-capa img { transform: scale(1.045); }
.mat-capa i { font-size: 48px; color: rgba(255,255,255,.3); }
.mat-lock {
    position: absolute; top: 12px; right: 12px; width: 32px; height: 32px; border-radius: 50%;
    background: rgba(255,255,255,.16); backdrop-filter: blur(6px); color: #fff;
    display: flex; align-items: center; justify-content: center; font-size: 12px;
}
.mat-bd { padding: 20px; display: flex; flex-direction: column; gap: 9px; flex: 1; }
.mat-cat { display: inline-flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--primaria); }
.mat-cat i { font-size: 15px; }
.mat-bd h3 { font-size: 17px; font-weight: 700; line-height: 1.35; }
.mat-bd p { font-size: 14px; color: var(--texto-2); margin: 0; line-height: 1.55; flex: 1; }
.mat-meta { display: flex; gap: 8px; flex-wrap: wrap; margin: 4px 0 8px; }
.mat-meta span { font-family: var(--mono); font-size: 11px; color: var(--texto-3); background: var(--sup-2); padding: 3px 9px; border-radius: 4px; }

/* ------------------------------- modal do site (liberação de material) -- */
.modal-site {
    position: fixed; inset: 0; background: rgba(10,11,16,.6); backdrop-filter: blur(4px); z-index: 180;
    display: none; align-items: center; justify-content: center; padding: 20px;
}
.modal-site.on { display: flex; }
.modal-site-cx {
    background: var(--sup); border-radius: var(--raio-card); width: 100%; max-width: 520px;
    max-height: 92vh; overflow-y: auto; position: relative; box-shadow: 0 30px 70px rgba(0,0,0,.35);
}
/* A caixa da liberação de material reusa o desenho da janela de conversa do
   balão do WhatsApp (.zap-topo, .zap-corpo, .zap-balao, .zap-enviar). Só os
   ajustes de encaixe ficam aqui — o visual em si mora num lugar só, e mexer
   nele muda os dois. */
.modal-site-cx .zap-topo { border-radius: var(--raio-card) var(--raio-card) 0 0; }
.modal-site-cx .zap-corpo { padding: 16px 18px 10px; }
.modal-site-cx .zap-balao { max-width: 92%; }
.modal-site-cx .zap-balao-3 { animation-delay: .9s; }
.modal-site-cx .zap-form { padding: 16px 20px 22px; gap: 0; }
/* O balão do arquivo: ícone à esquerda, nome e tamanho à direita — o mesmo
   formato do anexo que chega numa conversa de WhatsApp. */
.mat-balao-arq { display: flex; align-items: center; gap: 11px; }
.mat-balao-arq > i { font-size: 21px; color: var(--verde); flex: 0 0 auto; }
.mat-balao-arq strong { display: block; font-size: 13.5px; line-height: 1.35; }
.mat-balao-arq small { display: block; font-family: var(--mono); font-size: 10.5px; color: #667781; margin-top: 2px; }
.mat-balao-arq small:empty { display: none; }

.modal-site-x {
    position: absolute; top: 14px; right: 14px; width: 36px; height: 36px; border-radius: 50%;
    border: 1px solid rgba(255,255,255,.28); background: rgba(255,255,255,.12); color: #fff;
    cursor: pointer; font-size: 15px; display: flex; align-items: center; justify-content: center; z-index: 2;
}
.modal-site-x:hover { background: rgba(255,255,255,.24); }
.modal-site-top { background: linear-gradient(120deg, var(--escuro-2), var(--primaria)); color: #fff; padding: 30px 28px 26px; }
.modal-site-top h3 { font-size: 21px; font-weight: 700; margin: 12px 0 10px; padding-right: 40px; }
.modal-site-top p { font-size: 14px; color: var(--sobre-escuro); margin: 0; line-height: 1.6; }
.modal-site-bd { padding: 26px 28px 28px; }
.modal-site-legal { font-size: 12px; color: var(--texto-3); margin: 14px 0 0; line-height: 1.55; text-align: center; }
.modal-site-legal a { color: var(--primaria); font-weight: 600; }

/* ============================================================= CARRINHO == */
.car-linha { display: grid; grid-template-columns: 84px minmax(0,1fr) 150px 46px; gap: 16px; align-items: center; padding: 18px 0; border-bottom: 1px solid var(--borda); }
/* Fundo branco, e não a textura listrada.
   A listra é o marcador de "sem imagem" das grades do catálogo; aqui a foto
   SEMPRE existe (o item veio de um produto) e é um render com fundo
   transparente, então a listra aparecia atrás da peça e virava ruído. */
.car-linha .im { width: 84px; height: 84px; border: 1px solid var(--borda); border-radius: var(--raio-card); background: var(--sup); overflow: hidden; }
.car-linha .im img { width: 100%; height: 100%; object-fit: contain; padding: 8px; }
.car-linha .cod { font-family: var(--mono); font-size: 12px; color: var(--primaria); }
.car-linha h3 { font-size: 15.5px; font-weight: 600; margin-top: 4px; }
.car-vazio { text-align: center; padding: 70px 20px; }
.car-vazio i { font-size: 54px; color: var(--borda-2); display: block; margin-bottom: 16px; }

/* =============================================================== FORMS == */
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.campo { display: flex; flex-direction: column; gap: 7px; }
.campo.full { grid-column: 1 / -1; }
.campo label { font-size: 12.5px; font-weight: 700; color: var(--texto-2); text-transform: uppercase; letter-spacing: .04em; }
.campo input, .campo select, .campo textarea {
    padding: 13px 15px; border: 1px solid var(--borda-2); border-radius: var(--raio-btn);
    font-family: var(--fonte); font-size: 15px; background: var(--sup); color: var(--texto);
}
.campo textarea { min-height: 130px; resize: vertical; line-height: 1.6; }
.campo input:focus, .campo select:focus, .campo textarea:focus { outline: none; border-color: var(--primaria); box-shadow: 0 0 0 3px var(--primaria-18); }
.aviso { padding: 15px 18px; border-radius: var(--raio-card); font-size: 14.5px; display: flex; gap: 11px; align-items: flex-start; line-height: 1.5; }
.aviso i { font-size: 19px; flex-shrink: 0; margin-top: 1px; }
.aviso.ok { background: rgba(37,193,94,.1); color: #14803c; border: 1px solid rgba(37,193,94,.3); }
.aviso.erro { background: rgba(237,50,55,.08); color: #a02020; border: 1px solid rgba(237,50,55,.25); }

/* ============================================================ FLUTUANTE == */
.zap-flutua {
    position: fixed; right: 22px; bottom: 22px; width: 56px; height: 56px; border-radius: 50%;
    background: var(--verde); color: #fff; display: flex; align-items: center; justify-content: center;
    font-size: 27px; box-shadow: 0 10px 26px rgba(0,0,0,.22); z-index: 60;
}
.zap-flutua:hover { transform: translateY(-3px); transition: transform .2s; }
/* Como <button> o balão herdaria a borda e o fundo do agente; como <a> não.
   Os dois precisam sair iguais porque a escolha entre eles é do painel. */
button.zap-flutua { border: none; cursor: pointer; padding: 0; font: inherit; }

/* Pulso: o balão precisa ser notado uma vez, não pedir atenção o tempo todo.
   Some assim que a janela abre (.zap-aberto). */
.zap-ping {
    position: absolute; inset: 0; border-radius: 50%; border: 2px solid var(--verde);
    animation: zapPing 2.4s cubic-bezier(.2,.7,.3,1) infinite;
}
@keyframes zapPing { 0% { transform: scale(1); opacity: .7 } 70%, 100% { transform: scale(1.7); opacity: 0 } }
.zap-aberto .zap-ping { display: none; }
@media (prefers-reduced-motion: reduce) { .zap-ping { display: none; } }

/* ---- Janela de conversa ---------------------------------------------------
   Imita o WhatsApp na forma (cabeçalho verde, balões, fundo de papel) mas as
   cores do cabeçalho são fixas de propósito: é a marca do WhatsApp que faz o
   visitante reconhecer o que aquilo é. O resto segue o tema da empresa. */
.zap-janela {
    position: fixed; right: 22px; bottom: 90px; width: 340px; max-width: calc(100vw - 28px);
    max-height: min(78vh, 620px); display: flex; flex-direction: column; overflow: hidden;
    background: var(--sup); border-radius: 16px; z-index: 61;
    box-shadow: 0 24px 60px -12px rgba(0,0,0,.32), 0 0 0 1px rgba(0,0,0,.06);
    animation: zapSobe .22s cubic-bezier(.2,.8,.3,1) both;
}
.zap-janela[hidden] { display: none; }
@keyframes zapSobe { from { opacity: 0; transform: translateY(14px) scale(.97) } to { opacity: 1; transform: none } }
@media (prefers-reduced-motion: reduce) { .zap-janela { animation: none; } }

.zap-topo { display: flex; align-items: center; gap: 11px; padding: 13px 14px; background: #075e54; color: #fff; }
.zap-foto {
    width: 42px; height: 42px; flex: 0 0 42px; border-radius: 50%; overflow: hidden; background: #fff;
    display: flex; align-items: center; justify-content: center; color: #25d366; font-size: 22px;
}
.zap-foto img { width: 100%; height: 100%; object-fit: contain; padding: 5px; }
.zap-quem { flex: 1 1 auto; min-width: 0; line-height: 1.3; }
.zap-quem strong { display: block; font-size: 14.5px; }
/* Ponto verde de "online": o mesmo sinal do app, e o motivo de a pessoa
   escrever agora em vez de anotar o número para depois. */
.zap-quem span {
    display: flex; align-items: center; gap: 5px; font-size: 11.5px; opacity: .85;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.zap-quem span::before { content: ''; width: 7px; height: 7px; flex: 0 0 7px; border-radius: 50%; background: #4ade80; }
.zap-fechar { background: none; border: none; color: #fff; font-size: 17px; cursor: pointer; opacity: .8; padding: 4px; line-height: 1; }
.zap-fechar:hover { opacity: 1; }

.zap-corpo {
    padding: 16px 14px 8px; background: #e5ddd5;
    /* Papel do WhatsApp sugerido por pontos: uma textura leve basta, e evita
       carregar imagem de fundo só para isso. */
    background-image: radial-gradient(rgba(0,0,0,.045) 1px, transparent 1px);
    background-size: 18px 18px;
}
.zap-balao {
    position: relative; background: #fff; color: #1f2c33; border-radius: 0 10px 10px 10px;
    padding: 9px 12px; font-size: 13.5px; line-height: 1.5; max-width: 88%;
    box-shadow: 0 1px 1px rgba(0,0,0,.13); margin-bottom: 8px;
    animation: zapBalao .3s ease both;
}
.zap-balao::before {
    content: ''; position: absolute; left: -7px; top: 0;
    border: 7px solid transparent; border-top-color: #fff; border-right: 0;
}
.zap-balao-2 { animation-delay: .5s; }
@keyframes zapBalao { from { opacity: 0; transform: translateY(6px) } to { opacity: 1; transform: none } }
@media (prefers-reduced-motion: reduce) { .zap-balao { animation: none; } }

.zap-form { padding: 12px 14px 14px; overflow-y: auto; display: flex; flex-direction: column; gap: 9px; }
.zap-campo { display: block; }
.zap-campo > span { display: block; font-size: 11.5px; font-weight: 600; color: var(--texto-2); margin-bottom: 3px; }
.zap-campo > span i { font-style: normal; font-weight: 400; color: var(--texto-3); }
.zap-campo input, .zap-campo textarea {
    width: 100%; border: 1px solid var(--borda); border-radius: 9px; padding: 9px 11px;
    font-family: var(--fonte); font-size: 13.5px; color: var(--texto); background: #fff; resize: vertical;
}
.zap-campo input:focus, .zap-campo textarea:focus { outline: none; border-color: var(--verde); box-shadow: 0 0 0 3px rgba(37,211,102,.16); }
.zap-campo.erro input, .zap-campo.erro textarea { border-color: #c62828; }
.zap-erro { margin: 0; font-size: 12.5px; color: #c62828; }
.zap-enviar {
    display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%;
    background: var(--verde); color: #fff; border: none; border-radius: 10px; padding: 12px;
    font-family: var(--fonte); font-size: 14px; font-weight: 600; cursor: pointer;
}
.zap-enviar:hover { filter: brightness(1.06); }
.zap-enviar[disabled] { opacity: .65; cursor: default; }
.zap-nota { text-align: center; font-size: 11px; color: var(--texto-3); }

/* No celular a janela encosta nas bordas: 340px fixos sobrariam da tela, e o
   balão fica no mesmo canto onde o polegar já está. */
@media (max-width: 460px) {
    .zap-janela { right: 10px; left: 10px; bottom: 78px; width: auto; max-width: none; max-height: 76vh; }
}

/* Fita de prévia: só o dono da plataforma vê, e só quando está testando outra
   marca. Deixar isso invisível seria a receita para publicar o tema errado. */
.previa-fita {
    background: repeating-linear-gradient(45deg, #1c1d22 0 12px, #2a2c33 12px 24px);
    color: #fff; font-size: 12.5px; text-align: center; padding: 8px 16px; font-weight: 600;
}
.previa-fita a { color: #fff; text-decoration: underline; }

/* ========================================================== RESPONSIVO == */
@media (max-width: 1080px) {
    .prod-grid { grid-template-columns: 1fr; gap: 34px; }
    .prod-abas-grid { grid-template-columns: 1fr; gap: 34px; }
    .junto { grid-template-columns: 1fr; gap: 18px; }
    .ajuda-card { position: static; }
    .dist-layout { grid-template-columns: 1fr; }
    .dist-painel { position: static; }
    .dist-lista { max-height: none; }
    .rodape-grid { grid-template-columns: 1fr 1fr; gap: 34px; }
    .mega-grid { grid-template-columns: 220px minmax(0,1fr); }
    .mega-fer { display: none; }
}
@media (max-width: 980px) {
    .emp-abertura { grid-template-columns: 1fr; }
    .carr-grid { grid-template-columns: 1fr; gap: 34px; }
    .dist-ficha { grid-template-columns: 1fr; gap: 34px; }
    .benef-grid { grid-template-columns: 1fr; }
    .emp-foto img { min-height: 260px; }
    /* A linha do tempo vira vertical: o eixo passa a ser uma barra à esquerda,
       e cada marco pendura o próprio pedaço dela. */
    .linha-tempo { grid-template-columns: 1fr; gap: 0; }
    .linha-tempo li { padding: 0 0 30px 30px; }
    .linha-tempo li:last-child { padding-bottom: 0; }
    .linha-tempo .eixo { position: absolute; left: 6px; top: 6px; bottom: -6px; width: 2px; height: auto; margin: 0; }
    .linha-tempo li:last-child .eixo { background: linear-gradient(180deg, var(--borda) 0%, transparent 100%); }
    .linha-tempo .ponto { left: -6px; top: 0; transform: none; }
    .linha-tempo .ano { margin-top: -4px; }
}
/* ---------------------------------------------------- CABEÇALHO COMPACTO --
   O menu horizontal precisa de ~1060px para caber: logo (153) + seis itens
   (672) + busca e carrinho (96), mais os vãos e o respiro do container.
   O corte estava em 880px, e entre 881 e 1100 nada disso cabia — o logo, único
   item flexível da linha, era espremido até ZERO e sumia da tela, e o que
   sobrava ainda empurrava a página em até 150px de rolagem lateral.
   Daí 1080px: é o mesmo corte que o resto do layout já usa, e cobre o iPad
   deitado com o cabeçalho de hambúrguer, que funciona. Só as regras do
   CABEÇALHO mudaram de faixa; o resto continua nos 880. */
/* Telas muito estreitas (iPhone SE e afins, 320px). Com o logo protegido de
   encolher, sobravam 33px de estouro: 153 de marca + 148 de botões não cabem em
   303. A marca diminui de altura — encolhe proporcional, sem achatar — e o vão
   da linha aperta. Preferi isto a deixar o logo espremer de novo. */
@media (max-width: 400px) {
    .hdr-in { gap: 14px; }
    .hdr-logo img { height: 26px; }
}

/* A caixa de busca tem corte próprio, mais largo que o do menu: ela sozinha
   ocupa 175px com o vão, e voltar junto com o menu horizontal aos 1081px
   estourava a barra de novo. Até 1200px quem atende é o botão-lupa, que abre a
   mesma busca numa faixa larga logo abaixo do cabeçalho. */
@media (max-width: 1200px) {
    .busca-topo { display: none; }
    .btn-busca { display: flex; }
}
@media (max-width: 1080px) {
    .btn-menu { display: flex; }
    .nav { display: none; }
    .nav.aberto {
        display: flex; flex-direction: column; align-items: stretch; gap: 0;
        position: absolute; top: 100%; left: 0; right: 0; background: var(--sup);
        border-bottom: 1px solid var(--borda); box-shadow: var(--sombra-drop); padding: 8px 0; z-index: 44;
    }
    .nav.aberto .nav-item { min-height: 0; display: block; }
    .nav.aberto .nav-link { padding: 14px var(--container-pad); }
    .nav.aberto .submenu { position: static; display: block; box-shadow: none; border-top: none; padding: 0 0 8px 18px; }
    .mega { display: none !important; }

    /* ----- catálogo em sanfona dentro do menu compacto ----- */
    .nav.aberto .nav-item.tem-mega.aberta .nav-cats { display: block; background: var(--sup-2); }
    /* A seta do "Produtos" é o botão de abrir: sozinha ela tem 10px e ninguém
       acerta com o dedo. O padding dá o alvo sem mudar o desenho. */
    .nav.aberto .nav-item.tem-mega > .nav-link .fa-chevron-down { padding: 12px; margin: -12px -12px -12px 0; }
    .nav.aberto .nav-item.tem-mega.aberta > .nav-link .fa-chevron-down { transform: rotate(180deg); }

    .nav-cat + .nav-cat { border-top: 1px solid var(--borda); }
    .nav-cat-lin { display: flex; align-items: center; justify-content: space-between; gap: 4px; }
    .nav-cat-lin > a {
        flex: 1; padding: 13px var(--container-pad); font-size: 14.5px; font-weight: 600; color: var(--texto);
    }
    .nav-cat-lin > a:hover { color: var(--primaria); }
    .nav-cat-abre {
        background: none; border: none; cursor: pointer; color: var(--primaria);
        padding: 13px var(--container-pad); font-size: 11px; line-height: 1;
    }
    .nav-cat-abre i { transition: transform .18s; display: block; }
    .nav-cat.aberta .nav-cat-abre i { transform: rotate(180deg); }
    .nav-subcats { padding: 0 0 10px 0; background: var(--sup-3); }
    .nav-subcats a {
        display: block; padding: 10px var(--container-pad) 10px calc(var(--container-pad) + 16px);
        font-size: 13.5px; color: var(--texto-2);
    }
    .nav-subcats a:hover { color: var(--primaria); }
    .nav-cat-todos {
        display: flex; align-items: center; justify-content: center; gap: 8px;
        padding: 14px; font-size: 14px; font-weight: 700; color: var(--primaria);
        border-top: 1px solid var(--borda);
    }
}
@media (max-width: 880px) {
    .hero { height: auto; min-height: 460px; }
    .slide { position: relative; opacity: 1; display: none; }
    .slide.on { display: block; }
    .slide-in { padding: 60px 0 80px; }
    .slide-render { display: none; }
    .inst-grid { gap: 34px; }
    .certs { grid-template-columns: 1fr; }
    .form-grid { grid-template-columns: 1fr; }
    .qspecs { grid-template-columns: 1fr; }
    .aplic-grid { grid-template-columns: 1fr; }
    .galeria { flex-direction: column-reverse; }
    .galeria .thumbs { flex-direction: row; }
    .topbar .links, .topbar .redes { display: none; }
    /* Os separadores acompanham o que eles separam. Escondendo só os blocos,
       sobravam duas barrinhas soltas depois do seletor de idioma, com nada
       entre elas — o que sobra na faixa é só o idioma, e ele não precisa de
       divisor nenhum. */
    .topbar-d .divisor { display: none; }
    .car-linha { grid-template-columns: 64px minmax(0,1fr); gap: 12px; }
    .car-linha .im { width: 64px; height: 64px; }
}
@media (max-width: 560px) {
    .rodape-grid { grid-template-columns: 1fr; }
    .sec { padding: 44px 0; }
    .card-prod { flex: 0 0 78vw; }
    .linha-card { height: 380px; }
    /* Dois selects lado a lado a 360px truncam o rótulo no meio da palavra
       ("Todos os segm…"), que é pior que uma linha a mais. */
    .dist-filtros select { flex: 1 1 100%; min-width: 0; }
    /* O botão flutuante fica menor: em tela estreita ele cobre exatamente o
       canto onde costuma estar o último campo de um formulário. */
    .zap-flutua { width: 48px; height: 48px; font-size: 23px; right: 14px; bottom: 14px; }
    .emp-numeros { gap: 20px 28px; }
    .modal-site-top { padding: 24px 20px 20px; }
    .modal-site-bd { padding: 20px; }
    .junto-item { flex-basis: 100%; }
    .junto-mais { display: none; }
    .prod-share { gap: 8px; }
}
