/* ==========================================================================
   BRUCEE — Imóveis de Alto Padrão
   Sistema visual extraído do mockup aprovado (paleta amostrada por pixel).
   ========================================================================== */

:root{
  /* Paleta — verdes profundos do mockup + papel branco */
  --tinta:        #191919;   /* botão principal do hero */
  --verde:        #2F2F2F;   /* botão buscar / newsletter */
  --verde-fundo:  #1F1F1F;   /* bloco de lançamentos / rodapé */
  --papel:        #FFFFFF;
  --areia:        #F3F3F3;   /* faixa de diferenciais */
  --linha:        #E4E4E4;
  --texto:        #242424;
  --suave:        #5F5F5F;   /* escurecido: em 11px o cinza antigo não alcançava
                                 contraste 4.5:1, que é o mínimo legível */
  --claro:        #747474;   /* idem. 4,71:1 sobre o branco — o valor antigo
                                 (#9B9B9B) dava 2,80, ilegível para muita gente */

  /* Tipografia
     A Cormorant Garamond saiu por causa dos algarismos: o "1" dela é um traço
     estreito, de serifas mínimas, e no peso 300 com espaçamento largo some ao
     lado dos outros números — "15.800.000" ficava ilegível. A EB Garamond é da
     mesma família de desenho (revival de Garamond, mesmo ar clássico), mas com
     algarismos mais encorpados e um "1" com bandeira e serifa de base bem
     marcadas. Para voltar atrás, basta trocar esta linha e o link da fonte em
     inc/comum.php. */
  --serif: "EB Garamond", "Cormorant Garamond", "Times New Roman", Georgia, serif;
  --sans:  "Jost", "Helvetica Neue", Arial, sans-serif;

  /* Métrica */
  --largura: 1180px;
  --raio: 2px;
  --sombra: 0 1px 3px rgba(24,24,24,.06), 0 8px 28px rgba(24,24,24,.05);
}

*{box-sizing:border-box}
/* Página curta não tem barra de rolagem; página longa tem. A área útil muda de
   largura entre as duas, e todo o conteúdo centralizado — inclusive o menu —
   escorrega alguns pixels ao navegar de uma para outra.
   scrollbar-gutter reserva o espaço sempre, então a régua não se move.
   O overflow-y:scroll é a reserva para navegadores que ainda não entendem a
   propriedade: dá o mesmo resultado por outro caminho. */
html{
  -webkit-text-size-adjust:100%;
  scrollbar-gutter: stable;
}
@supports not (scrollbar-gutter: stable) {
  html { overflow-y: scroll; }
}
body{
  margin:0; background:var(--papel); color:var(--texto);
  font-family:var(--sans); font-size:15px; line-height:1.6;
  font-weight:300; letter-spacing:.01em;
}
img{max-width:100%; display:block}
a{color:inherit; text-decoration:none}
button,input,select,textarea{font:inherit; color:inherit}
:focus-visible{outline:2px solid var(--verde); outline-offset:3px}

.env{width:min(100% - 40px, var(--largura)); margin-inline:auto}
/* O cabeçalho é a única seção que precisa de mais espaço que o resto do
   conteúdo do site: com a logo equilibrando o bloco de ações para o menu
   ficar centralizado de verdade (ver .marca mais abaixo), a barra pede até
   1683px em inglês — bem mais que os 1180px do --largura padrão. Sem esta
   exceção, o cabeçalho ficava preso em 1180px por causa da MESMA classe .env
   que também é usada aqui, e o bloco de ações era empurrado para fora da
   tela em qualquer janela, por mais larga que fosse — o problema nunca era
   a largura da janela, era o teto fixo herdado do .env genérico. */
.topo-int.env{width:min(100% - 40px, 1750px)}
.oculto{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;padding:0!important;border:0!important;margin:-1px!important;left:0;top:0}
/* padding/borda/left: sem isso o campo isca herdava o padding dos campos do
   formulário e, posicionado na coluna da direita, passava da borda da tela
   no celular (a página ganhava rolagem lateral). */

/* ---------- Cabeçalho ---------- */
/* --------------------------------------------------------------------------
   Barra do topo — uma peça só, que não recarrega ao trocar de página
   --------------------------------------------------------------------------
   Duas coisas trabalhando juntas:

   1. position:sticky — a barra acompanha a rolagem em vez de sumir para cima.
      O menu fica sempre a um clique, sem obrigar a voltar ao começo da página.

   2. view-transition-name — com as transições entre documentos já ligadas, dar
      um nome à barra faz o navegador entendê-la como o MESMO elemento nas duas
      páginas. Em vez de a barra apagar e redesenhar junto com o resto, ela
      permanece parada e só o conteúdo abaixo troca. É o que dá a sensação de
      frame fixo, sem usar frame nenhum — e sem o custo de recarregar o menu.
   -------------------------------------------------------------------------- */
.topo{
  background:var(--papel); border-bottom:1px solid transparent;
  position:sticky; top:0; z-index:40;
  view-transition-name: barra-topo;
  transition: box-shadow .2s ease, border-color .2s ease;
}
/* Sombra discreta só depois que a página rola: encostada no alto, a barra deve
   parecer parte do papel; sobre o conteúdo, precisa se destacar dele. */
.topo.rolou{
  border-bottom-color:var(--linha);
  box-shadow:0 4px 18px rgba(21,21,21,.07);
}
.topo-int{display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:34px; padding:18px 0}
/* Só o monograma na barra. Ele é vertical (179x255), então a mesma altura da
   assinatura completa deixaria a barra alta demais — 44px equilibra com o menu.
   O nome completo continua no alt e no aria-label, para leitor de tela e busca. */
.marca img{height:46px; width:auto; max-width:none; display:block; transition:opacity .18s ease}
/* max-width:none: a regra geral img{max-width:100%} deixava a grade do
   cabeçalho espremer a logo em 320px — o monograma saía achatado (proporção
   0,66 em vez de 0,97). */
.marca{flex:none}
.marca:hover img{opacity:.72}
/* Sem isto, o menu ficava "centralizado" só no espaço que sobrava entre a
   logo e o bloco de ações à direita — e como esse bloco (favoritos + entrar +
   idioma + botão) é bem mais largo que a logo sozinha, o menu saía puxado
   para a esquerda da barra inteira, não centralizado de verdade. Dar à coluna
   da logo a MESMA largura do bloco de ações faz as duas margens da barra
   pesarem igual, e o menu do meio cair no centro verdadeiro da página — não
   só no centro do que sobra. A largura muda por idioma porque o texto muda
   de tamanho (449px em português, medido com "Anunciar imóvel"; 403px em
   inglês, com "List a property" mais curto que o botão em português). */
/* Só no modo de menu inteiro (acima de 1700px). Até a v15.6 estas duas
   linhas valiam em qualquer largura e o reset do modo hambúrguer (.marca
   {min-width:0}) só vencia a primeira: a regra do inglês, mais específica
   (html[lang] .marca), continuava forçando 403px — no celular em inglês a
   logo ocupava a tela inteira e o botão e o hambúrguer ficavam fora dela. */
@media (min-width:1701px){
  .marca{min-width:449px}
  html[lang="en"] .marca{min-width:403px}
}
.menu{display:flex; gap:26px; justify-self:center; list-style:none; padding:0; margin-block:0}
/* Ajustes de legibilidade (v8.9)
   Três coisas somadas deixavam o texto pequeno difícil de ler: tamanho baixo,
   peso leve e espaçamento largo entre letras. O espaçamento é o menos óbvio dos
   três — em caixa alta e tamanho pequeno, muito espaço separa as letras a ponto
   de o olho deixar de ler a palavra e passar a soletrar. */
.menu a{
  font-size:13px; font-weight:500; letter-spacing:.1em; text-transform:uppercase;
  color:var(--texto); white-space:nowrap;
  padding:7px 0; border-bottom:1px solid transparent; transition:border-color .18s
}
.menu a:hover, .menu a[aria-current="page"]{border-bottom-color:var(--tinta)}
.topo-acoes{display:flex; align-items:center; gap:20px}
.menu li.menu-extra{display:none}
.acao-txt{display:inline-flex; align-items:center; gap:7px; font-size:12.5px; font-weight:500; letter-spacing:.09em; text-transform:uppercase; color:var(--texto); white-space:nowrap}
.acao-txt svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.3}
.acao-idioma {
  font-size: 11px; font-weight: 600; letter-spacing: .05em; color: var(--suave);
  border: 1px solid var(--linha); padding: 4px 8px; text-decoration: none;
}
.acao-idioma:hover { border-color: var(--verde); color: var(--verde); }
.btn-anunciar{
  background:var(--tinta); color:#fff; padding:12px 20px; border-radius:var(--raio);
  font-size:12px; font-weight:500; letter-spacing:.1em; text-transform:uppercase; white-space:nowrap
}
.btn-anunciar:hover{background:var(--verde)}
.abrir-menu{display:none; background:none; border:0; padding:8px; cursor:pointer}
.abrir-menu span{display:block; width:22px; height:1px; background:var(--tinta); margin:5px 0}

/* ---------- Hero ---------- */
/* Título preso no alto (v15.4), não centralizado na altura: com centralização,
   o subtítulo em duas linhas no português e em uma no inglês fazia o título
   pular 13px ao trocar de idioma. O padding de cima foi ajustado para o título
   ficar exatamente onde ficava no português. */
.hero{position:relative; min-height:430px; display:flex; align-items:flex-start; color:#fff; overflow:hidden}
.hero-foto{position:absolute; inset:0; object-fit:cover; width:100%; height:100%}
.hero::after{content:""; position:absolute; inset:0; background:linear-gradient(100deg, rgba(16,16,16,.90) 0%, rgba(16,16,16,.68) 46%, rgba(16,16,16,.18) 82%)}
.hero-txt{position:relative; z-index:2; padding:96px 0 96px; max-width:560px}
.hero h1{
  font-family:var(--serif); font-weight:400; font-size:clamp(34px, 4.6vw, 52px);
  line-height:1.12; letter-spacing:.03em; text-transform:uppercase; margin:0 0 20px
}
.hero p{font-size:16px; color:#E7E7E7; max-width:380px; margin:0 0 28px; text-wrap:balance}
/* balance: as duas linhas saem de tamanho parecido ("…de alto padrão / que
   combina com o seu estilo de vida.") em vez de uma linha cheia e um "o"
   solto no fim dela. */

/* ---------- Caixa de busca ---------- */
.busca{
  background:#fff; box-shadow:var(--sombra); border:1px solid var(--linha);
  margin-top:-58px; position:relative; z-index:20; padding:0 26px 26px
}
.busca-abas{display:flex; gap:28px; border-bottom:1px solid var(--linha); margin-bottom:22px;
  overflow-x:auto; scrollbar-width:none}
.busca-abas::-webkit-scrollbar{display:none}
.busca-abas .aba{flex:none}
/* As 5 abas (v12.8) somam ~600px: no celular empurravam a página inteira para
   o lado. Agora a faixa de abas rola sozinha, e o espaço entre elas encolhe. */
@media (max-width:560px){ .busca-abas{gap:18px} }
.aba{
  background:none; border:0; border-bottom:2px solid transparent; padding:18px 2px;
  font-size:13px; font-weight:500; letter-spacing:.1em; text-transform:uppercase; color:var(--suave); cursor:pointer
}
.aba[aria-selected="true"]{color:var(--tinta); border-bottom-color:var(--tinta)}
.busca-linha{display:grid; grid-template-columns:1fr 1.2fr 1fr .9fr auto; gap:16px; align-items:end}

/* Modo simples: lançamentos, condomínios e imobiliárias têm um campo só, então
   ele ocupa quase toda a linha em vez de ficar espremido do tamanho de
   "dormitórios". */
.busca-linha-simples{grid-template-columns:1fr auto}

/* Formulário de refinar nas páginas de resultado (Lançamentos, Condomínios,
   Imobiliárias) — a mesma ideia da busca da home, só mais discreto: aqui a
   pessoa já está vendo resultados, não decidindo por onde começar.
   Flexbox em vez de grid com auto-fit: com só 2 ou 3 campos (menos que o
   número de "colunas" que auto-fit calcularia para a largura disponível), a
   grade deixava faixas vazias no lugar de simplesmente juntar os campos —
   flex-wrap com um tamanho mínimo por campo dá o mesmo resultado visual sem
   essa armadilha. */
.refinar {
  display: flex; flex-wrap: wrap; align-items: end; gap: 14px;
  padding: 18px 22px; margin: -6px 0 30px;
  background: var(--areia); border: 1px solid var(--linha);
}
.refinar .campo, .refinar .campo-check { flex: 1 1 190px; }
.refinar .campo label { font-size: 11px; }
.refinar .btn-buscar { flex: 0 0 auto; padding: 12px 22px; font-size: 11.5px; }
@media (max-width: 640px) { .refinar .campo, .refinar .campo-check, .refinar .btn-buscar { flex-basis: 100%; } }

/* Lançamentos, Condomínios e Imobiliárias têm um número diferente de campos
   cada (2, 3 ou 4), ao contrário da fileira de imóvel, que é sempre a mesma.
   auto-fit deixa cada campo ocupar o espaço disponível e o botão fica compacto
   no fim, sem precisar de uma grade fixa para cada combinação possível. */
#linha-lancamentos, #linha-condominios, #linha-imobiliarias {
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)) auto;
}

/* A caixa "só com imóvel disponível" entra como mais uma célula da grade, ao
   lado dos outros campos — por isso fica alinhada à mesma linha de base
   (align-items:end, herdado de .busca-linha) em vez de flutuar solta. */
.campo-check {
  display: flex; align-items: center; gap: 9px;
  padding-bottom: 12px; font-size: 13.5px; color: var(--texto);
  white-space: nowrap; cursor: pointer;
}
.campo-check input { width: 17px; height: 17px; accent-color: var(--verde); flex: none; }
.campo-largo{grid-column:1}

/* Aviso de que a listagem está filtrada, com saída rápida para o total. */
.filtro-ativo{
  font-size:13px; color:var(--suave); margin:0 0 18px;
  padding-bottom:14px; border-bottom:1px solid var(--linha);
}
.filtro-ativo a{color:var(--verde); text-decoration:underline}
.campo{display:flex; flex-direction:column; gap:8px; min-width:0}
.campo label{font-size:11.5px; font-weight:500; letter-spacing:.09em; text-transform:uppercase; color:var(--suave)}
.campo select, .campo input{
  width:100%; height:46px; padding:0 14px; background:#fff;
  border:1px solid var(--linha); border-radius:var(--raio);
  font-size:14px; font-weight:400; color:var(--texto)
}
/* O select mostra texto e o campo de localização mostra placeholder — e o
   navegador desenha placeholder mais claro por conta própria, o que fazia os
   dois campos parecerem de famílias diferentes. Aqui eles voltam a combinar.
   O opacity:1 é necessário: o Firefox aplica transparência ao placeholder e
   ignoraria a cor definida. */
.campo input::placeholder{
  color:var(--suave); opacity:1; font-weight:400; font-size:14px
}
.campo .com-icone svg{stroke:var(--suave)}
.campo .com-icone{position:relative}
.campo .com-icone input{padding-left:38px}
.campo .com-icone svg{position:absolute; left:13px; top:50%; transform:translateY(-50%); width:15px; height:15px; stroke:var(--claro); fill:none; stroke-width:1.4}
.btn-buscar{
  height:46px; padding:0 32px; background:var(--verde); color:#fff; border:0; border-radius:var(--raio);
  display:inline-flex; align-items:center; gap:10px; font-size:12.5px; font-weight:500; letter-spacing:.1em;
  text-transform:uppercase; cursor:pointer
}
.btn-buscar:hover{background:var(--tinta)}
.btn-buscar svg{width:15px;height:15px;stroke:#fff;fill:none;stroke-width:1.5}
.busca-avancada{display:flex; justify-content:flex-end; margin-top:16px}
.busca-avancada button{background:none;border:0;cursor:pointer;min-height:44px;margin:-12px 0;padding:0 4px;font-size:12px;font-weight:500;letter-spacing:.09em;text-transform:uppercase;color:var(--texto);display:inline-flex;align-items:center;gap:8px}
.busca-avancada .seta{
  width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round; transition:transform .2s ease
}
/* Aberta, a seta aponta para cima: o botão passa a significar "recolher". */
.busca-avancada button[aria-expanded="true"] .seta{transform:rotate(180deg)}
.busca-extra{display:none; grid-template-columns:repeat(4,1fr); gap:16px; margin-top:20px; padding-top:20px; border-top:1px solid var(--linha)}
.busca-extra.aberta{display:grid}

/* ---------- Seções ---------- */
.secao{padding:52px 0}
.secao-topo{display:flex; align-items:baseline; justify-content:space-between; margin-bottom:22px; gap:8px 20px; flex-wrap:wrap}
/* flex-wrap: em 320px o título e o link ao lado ("Quero ser parceira →") não
   cabiam juntos e o link saía da tela, fazendo a página rolar de lado. */
.secao-topo h2{
  font-family:var(--serif); font-weight:400; font-size:26px; letter-spacing:.09em;
  text-transform:uppercase; margin:0
}
.ver-todos{font-size:12px; font-weight:500; letter-spacing:.09em; text-transform:uppercase; display:inline-flex; align-items:center; gap:8px; color:var(--texto);
  padding:12px 0; margin:-12px 0}
/* padding + margem negativa: área de toque de 43px de altura (era 19px) sem
   mudar nada no desenho da página. */
.ver-todos:hover{color:var(--verde)}

/* ---------- Cartão de imóvel ---------- */
.grade-imoveis{display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
.cartao{background:#fff; border:1px solid var(--linha); display:flex; flex-direction:column; overflow:hidden}
.cartao:hover .cartao-foto img{transform:scale(1.04)}
.cartao-foto{position:relative; aspect-ratio:16/10.6; overflow:hidden; background:var(--areia)}
.cartao-foto img{width:100%; height:100%; object-fit:cover; transition:transform .5s ease}
.selo{
  position:absolute; top:12px; left:12px; background:var(--verde-fundo); color:#fff;
  padding:5px 11px; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase
}
.selo.claro{background:rgba(255,255,255,.94); color:var(--tinta)}
.favorito{
  position:absolute; top:10px; right:10px; width:32px; height:32px; border-radius:50%;
  background:rgba(255,255,255,.94); border:0; cursor:pointer; display:grid; place-items:center
}
.favorito svg{width:16px;height:16px;stroke:var(--tinta);fill:none;stroke-width:1.4}
.favorito[aria-pressed="true"] svg{fill:var(--verde); stroke:var(--verde)}
.cartao-corpo{padding:16px 15px 18px; display:flex; flex-direction:column; gap:10px; flex:1}
.cartao h3{font-size:15px; font-weight:400; margin:0; letter-spacing:.01em}
.cartao .local{font-size:13px; color:var(--suave); margin:-6px 0 0}
.atributos{display:flex; flex-wrap:wrap; gap:12px; font-size:11.5px; color:var(--suave); padding:10px 0; border-top:1px solid var(--linha); border-bottom:1px solid var(--linha)}
.atributos span{display:inline-flex; align-items:center; gap:5px}
.atributos svg{width:13px;height:13px;stroke:var(--claro);fill:none;stroke-width:1.4}
.preco{font-size:18px; font-weight:400; letter-spacing:.02em; margin-top:auto}
.creditada{font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--claro)}

/* ---------- Lançamentos ---------- */
.lancamentos{display:grid; grid-template-columns:1.02fr repeat(3,1fr); gap:0; border:1px solid var(--linha)}
.lanc-chamada{background:var(--verde-fundo); color:#fff; padding:38px 32px; display:flex; flex-direction:column; justify-content:center}
.lanc-chamada h2{font-family:var(--serif); font-weight:400; font-size:28px; line-height:1.2; letter-spacing:.06em; text-transform:uppercase; margin:0 0 14px}
.lanc-chamada p{color:#D8D8D8; font-size:13.5px; margin:0 0 26px; max-width:250px}
.btn-linha{display:inline-block; align-self:flex-start; border:1px solid rgba(255,255,255,.5); color:#fff; padding:13px 20px; font-size:10.5px; letter-spacing:.16em; text-transform:uppercase}
.btn-linha:hover{background:#fff; color:var(--verde-fundo)}
.lanc-item{border-left:1px solid var(--linha); display:flex; flex-direction:column}
.lanc-foto{position:relative; aspect-ratio:16/7.4; overflow:hidden}
.lanc-foto img{width:100%;height:100%;object-fit:cover}
.lanc-corpo{padding:16px 18px 20px; display:flex; flex-direction:column; gap:5px; flex:1}
.lanc-corpo h3{margin:0; font-size:15px; font-weight:400}
.lanc-corpo p{margin:0; font-size:12.5px; color:var(--suave)}
.saiba{margin-top:auto; padding-top:12px; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; display:inline-flex; gap:8px; align-items:center}

/* ---------- Diferenciais ---------- */
.diferenciais{background:var(--areia); padding:34px 0}
.dif-grade{display:grid; grid-template-columns:repeat(4,1fr)}
.dif{display:flex; gap:16px; padding:0 26px; border-right:1px solid #DCDCDC}
.dif:last-child{border-right:0}
.dif:first-child{padding-left:0}
.dif svg{width:36px;height:36px;stroke:var(--tinta);fill:none;stroke-width:1;flex:none}
.dif h3{margin:2px 0 5px; font-size:11px; letter-spacing:.14em; text-transform:uppercase; font-weight:400}
.dif p{margin:0; font-size:12.5px; color:var(--suave); line-height:1.5}

/* ---------- Bairros ---------- */
.grade-bairros{display:grid; grid-template-columns:repeat(6,1fr); gap:12px}
.bairro{position:relative; aspect-ratio:1/.62; overflow:hidden; display:block}
.bairro img{width:100%;height:100%;object-fit:cover; transition:transform .5s}
.bairro:hover img{transform:scale(1.05)}
.bairro::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(19,19,19,.15), rgba(19,19,19,.72))}
.bairro span{position:absolute; left:0; right:0; bottom:14px; z-index:2; color:#fff; text-align:center; font-size:10.5px; letter-spacing:.13em; text-transform:uppercase}

/* ---------- Parceiras ---------- */
.grade-parceiras{display:grid; grid-template-columns:repeat(3,1fr); gap:16px}
.parceira{border:1px solid var(--linha); padding:26px 24px; display:flex; flex-direction:column; gap:12px; background:#fff}
.parceira-logo{height:52px; display:flex; align-items:center}
.parceira-logo img{max-height:52px; width:auto; object-fit:contain}
.parceira-logo .iniciais{
  font-family:var(--serif); font-size:30px; letter-spacing:.14em; color:var(--verde-fundo)
}
.parceira h3{margin:0; font-size:16px; font-weight:400}
.parceira .meta{font-size:12px; color:var(--suave); margin:0}
.parceira p.sobre{font-size:13px; color:var(--suave); margin:0; line-height:1.55}
.plano{
  align-self:flex-start; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase;
  border:1px solid var(--linha); padding:4px 10px; color:var(--verde)
}
.plano.diamante{background:var(--verde-fundo); color:#fff; border-color:var(--verde-fundo)}
.plano.premium{background:var(--areia)}

/* ---------- Newsletter ---------- */
.news{background:var(--verde); color:#fff; padding:34px 0}
.news-int{display:grid; grid-template-columns:1fr auto; gap:40px; align-items:center}
.news h2{font-family:var(--serif); font-weight:400; font-size:22px; letter-spacing:.1em; text-transform:uppercase; margin:0 0 6px}
.news p{margin:0; font-size:13px; color:#D8D8D8; max-width:420px}
.news-form{display:flex; min-width:520px}
.news-form input{flex:1; height:50px; border:0; padding:0 18px; font-size:14px}
.news-form button{height:50px; padding:0 34px; background:var(--tinta); color:#fff; border:0; cursor:pointer; font-size:11px; letter-spacing:.16em; text-transform:uppercase}
.news-form button:hover{background:#000}

/* ---------- Rodapé ---------- */
.rodape{background:var(--verde-fundo); color:#D9D9D9; padding:44px 0 0; font-size:13px}
.rodape-grade{display:grid; grid-template-columns:1.35fr repeat(3,.8fr) 1.1fr; gap:32px; align-items:start}
/* Sem a coluna de contato preenchida, a grade volta a quatro colunas — senão
   sobra um vão à direita, que parece defeito. */
.rodape-grade.sem-contato{grid-template-columns:1.45fr repeat(3,1fr)}
/* As regras de celular abaixo precisam citar também .sem-contato: com duas
   classes esta linha vencia as media queries, e no celular o rodapé ficava
   em 4 colunas com a última (Anunciar, Alertas, Mapa do site) fora da tela. */
/* Logo e redes formam um bloco de marca: os dois centralizados no mesmo eixo.
   Antes a logo era <img> inline (encostada à esquerda) e os ícones flutuavam
   em outro alinhamento — daí a sensação de estarem tortos. */
.rodape-marca{text-align:center}
.rodape img.logo{height:92px; width:auto; max-width:100%; margin:0 auto 22px; display:block}
.rodape h4{font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; color:#fff; margin:0 0 14px; font-weight:400}
.rodape ul{list-style:none; padding:0; margin:0; display:flex; flex-direction:column; gap:9px}
.rodape a:hover{color:#fff}
.contato-li{display:flex; gap:10px; align-items:flex-start}
.contato-li svg{width:15px;height:15px;stroke:#BCBCBC;fill:none;stroke-width:1.3;flex:none;margin-top:3px}
/* A primeira coluna do rodapé tem a logo centralizada; os ícones seguiam
   alinhados à esquerda e ficavam visivelmente fora de prumo com ela. */
.sociais{display:flex; gap:12px; margin-top:20px; justify-content:center}
.sociais a, .sociais .rede-sem-link{
  width:40px;height:40px;border:1px solid rgba(255,255,255,.22);
  display:grid;place-items:center;border-radius:50%
}
/* Sem perfil ainda: o ícone reage ao mouse como qualquer outro, mas não leva a
   lugar nenhum. Cursor de ajuda em vez de mãozinha — sinaliza que há informação
   (a dica "em breve") sem prometer navegação. */
.sociais .rede-sem-link{opacity:.72; cursor:help}
.sociais .rede-sem-link svg{stroke:currentColor;fill:none;stroke-width:1.3;width:18px;height:18px}

/* Reação ao mouse, igual para link e para ícone sem link. */
.sociais a, .sociais .rede-sem-link{
  transition:background .18s ease, border-color .18s ease, opacity .18s ease, transform .18s ease;
}
.sociais a:hover, .sociais .rede-sem-link:hover{
  background:#fff; border-color:#fff; opacity:1; transform:translateY(-2px);
}
.sociais a:hover svg, .sociais .rede-sem-link:hover svg{stroke:var(--verde-fundo)}
.sociais a:focus-visible, .sociais .rede-sem-link:focus-visible{
  outline:2px solid #fff; outline-offset:3px;
}

/* Glifo preenchido (TikTok): fill em vez de contorno, senão sai um rabisco. */
.sociais svg.cheio{fill:currentColor; stroke:none}
.sociais a:hover svg.cheio, .sociais .rede-sem-link:hover svg.cheio{
  fill:var(--verde-fundo); stroke:none;
}
.sociais a:hover{background:#fff}
.sociais svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.3}
.sociais a:hover svg{stroke:var(--verde-fundo)}
.rodape-fim{margin-top:36px; border-top:1px solid rgba(255,255,255,.12); padding:18px 0; text-align:center; font-size:11.5px; color:#9E9E9E}

/* ---------- Páginas internas ---------- */
.cabeca{background:var(--verde-fundo); color:#fff; padding:52px 0 44px}
.cabeca h1{font-family:var(--serif); font-weight:400; font-size:clamp(28px,3.4vw,40px); letter-spacing:.06em; text-transform:uppercase; margin:0 0 10px}
.cabeca p{margin:0; color:#D2D2D2; max-width:560px; font-size:14.5px}
.trilha{font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:#9E9E9E; margin-bottom:16px}
.trilha a:hover{color:#fff}

.layout-busca{display:grid; grid-template-columns:262px 1fr; gap:30px; align-items:start; padding:36px 0 60px}
.filtros{border:1px solid var(--linha); padding:22px 20px; position:sticky; top:20px}
.filtros h3{margin:0 0 16px; font-size:11px; letter-spacing:.16em; text-transform:uppercase; font-weight:400}
.filtro-bloco{padding:14px 0; border-top:1px solid var(--linha)}
.filtro-bloco > label{display:block; font-size:10.5px; letter-spacing:.13em; text-transform:uppercase; color:var(--suave); margin-bottom:8px}
.filtro-bloco select, .filtro-bloco input{width:100%; height:42px; border:1px solid var(--linha); padding:0 12px; border-radius:var(--raio)}
.opcoes{display:flex; flex-direction:column; gap:8px; font-size:13px}
.opcoes label{display:flex; gap:9px; align-items:center; cursor:pointer}
.btn-limpar{width:100%; margin-top:16px; height:42px; background:none; border:1px solid var(--linha); cursor:pointer; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase}
.btn-limpar:hover{border-color:var(--verde); color:var(--verde)}
.resultado-topo{display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:18px; flex-wrap:wrap}
.resultado-topo p{margin:0; font-size:13.5px; color:var(--suave)}
.grade-resultado{display:grid; grid-template-columns:repeat(3,1fr); gap:14px}
.vazio{border:1px solid var(--linha); padding:44px; text-align:center; color:var(--suave)}
.vazio strong{display:block; color:var(--texto); font-weight:400; font-size:16px; margin-bottom:6px}

/* Ficha do imóvel */
/* min-width:0 nos filhos é obrigatório aqui. Um item de grid tem min-width:auto
   por padrão, ou seja, ele se recusa a ficar menor que o próprio conteúdo — e a
   tira de miniaturas é uma linha flex que soma 30 itens de largura. Sem esta
   linha, a coluna estoura a grade e empurra o aside de contato para fora da tela.
   Foi o que aconteceu quando a galeria ganhou as miniaturas. */
.ficha{display:grid; grid-template-columns:1.7fr 1fr; gap:34px; padding:34px 0 60px; align-items:start}
.ficha > *{min-width:0}
.layout-busca > *{min-width:0}
.grade-resultado > *{min-width:0}
.ficha h1{overflow-wrap:anywhere}
/* Uma imagem só, com altura travada. Não depende de quantos filhos existem —
   era isso que quebrava a ficha quando a galeria passou a ter tamanho variável. */
.galeria{position:relative; overflow:hidden; background:#F0F0F0}
.galeria .principal{display:block; width:100%; aspect-ratio:4/3; max-height:520px;
                    object-fit:cover; background:#F0F0F0;
                    transition:opacity .45s ease}
/* Estado intermediario da troca automatica: a foto some, a nova entra ja
   carregada. Sem o fade a passagem "pisca"; com ele, escorrega. */
.galeria .principal.trocando{opacity:0}

@media (prefers-reduced-motion:reduce){
  /* Quem pediu menos movimento nao recebe nem o fade nem o rodizio (o rodizio
     e desligado no proprio script). */
  .galeria .principal{transition:none}
  .galeria .principal.trocando{opacity:1}
}
.ficha h1{font-family:var(--serif); font-weight:400; font-size:32px; letter-spacing:.03em; margin:26px 0 6px}
.ficha .local{color:var(--suave); margin:0 0 20px}
/* Era grid de 4 colunas fixas: com 5 atributos, o quinto caía sozinho numa
   segunda linha. Flex distribui quantos existirem — 3, 4, 5 ou 6 — numa linha
   só, e só quebra quando de fato não couberem. */
.especificacoes{
  display:flex; flex-wrap:wrap; gap:14px 24px;
  border-block:1px solid var(--linha); padding:18px 0; margin-bottom:26px
}
.especificacoes > div{flex:1 1 92px; min-width:0}
.especificacoes div span{display:block; font-size:10.5px; letter-spacing:.13em; text-transform:uppercase; color:var(--suave); margin-bottom:4px}
.especificacoes div strong{font-weight:400; font-size:17px}
.ficha h2{font-family:var(--serif); font-size:22px; font-weight:400; letter-spacing:.06em; text-transform:uppercase; margin:30px 0 12px}
.lista-check{list-style:none; padding:0; margin:0; display:grid; grid-template-columns:repeat(2,1fr); gap:9px; font-size:13.5px}
.lista-check li::before{content:"—"; color:var(--claro); margin-right:9px}
.aside-contato{border:1px solid var(--linha); padding:26px 24px; position:sticky; top:20px}
.aside-preco{font-size:28px; font-family:var(--serif); margin:0 0 4px}
.aside-custos{font-size:12.5px; color:var(--suave); margin:0 0 20px}
.aside-parceira{border-block:1px solid var(--linha); padding:16px 0; margin-bottom:20px; display:flex; gap:14px; align-items:center}
.aside-parceira .iniciais{font-family:var(--serif); font-size:24px; letter-spacing:.1em}
.aside-parceira small{display:block; font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--claro)}
.btn-bloco{display:block; width:100%; text-align:center; padding:15px; font-size:11px; letter-spacing:.15em; text-transform:uppercase; border:1px solid var(--verde); margin-bottom:10px; cursor:pointer; background:none}
.btn-bloco.cheio{background:var(--verde); color:#fff}
.btn-bloco.cheio:hover{background:var(--tinta)}
.btn-bloco:hover{background:var(--areia)}

/* Formulários públicos */
.form-cartao{max-width:820px; margin:38px auto 60px; border:1px solid var(--linha); padding:34px}
.form-grade{display:grid; grid-template-columns:repeat(2,1fr); gap:18px}
.form-grade .largo{grid-column:1/-1}
.form-grade label{display:block; font-size:11.5px; font-weight:500; letter-spacing:.09em; text-transform:uppercase; color:var(--suave); margin-bottom:7px}
.form-grade input, .form-grade select, .form-grade textarea{
  width:100%; border:1px solid var(--linha); border-radius:var(--raio); padding:12px 14px; background:#fff
}
.form-grade textarea{min-height:120px; resize:vertical}
.ajuda{font-size:12px; color:var(--claro); margin:6px 0 0}
.aviso{background:var(--areia); border-left:3px solid var(--verde); padding:14px 16px; font-size:13px; margin-bottom:24px}

/* ---------- Responsivo ---------- */
@media (max-width:1080px){
  .grade-imoveis{grid-template-columns:repeat(2,1fr)}
  .lancamentos{grid-template-columns:repeat(2,1fr)}
  .lanc-item:nth-child(2){border-left:0}
  .grade-bairros{grid-template-columns:repeat(3,1fr)}
  .dif-grade{grid-template-columns:repeat(2,1fr); gap:24px 0}
  .dif{padding:0 20px}
  .dif:nth-child(2n){border-right:0}
  .grade-parceiras{grid-template-columns:repeat(2,1fr)}
  .grade-resultado{grid-template-columns:repeat(2,1fr)}
  .busca-linha{grid-template-columns:1fr 1fr; }
  .busca-linha .campo:nth-child(5), .btn-buscar{grid-column:1/-1}
  .news-int{grid-template-columns:1fr}
  .news-form{min-width:0}
  .ficha{grid-template-columns:1fr}
  .ficha > *{min-width:0}
  .rodape-grade, .rodape-grade.sem-contato{grid-template-columns:repeat(2,1fr)}
}
/* O cabeçalho precisa da própria barreira, separada do resto do layout de
   celular: o menu completo (seis itens + favoritos + entrar + alternador de
   idioma + botão preto), com a logo equilibrando o bloco de ações para
   centralizar de verdade (ver comentário acima, em .marca), só cabe numa
   linha a partir de 1683px em inglês (o pior caso — 1635px em português).
   Centralizar de verdade custa largura: a coluna da logo precisa "pesar" o
   mesmo que o bloco de ações, o que empurra o limite bem mais alto do que se
   o menu só ficasse encostado perto da logo, sem equilíbrio nenhum. As
   regras de grade/rodapé/galeria abaixo, que são de conteúdo e não do
   cabeçalho, continuam na faixa de celular de sempre (760px), porque essas
   sim já cabem bem numa tela de tablet. */
@media (max-width:1700px){
  /* O min-width da logo (mais abaixo, fora deste bloco) existe só para
     equilibrar a barra larga do modo com o menu inteiro visível — em
     hambúrguer, o menu some e a barra volta a ser só logo + botão, então
     essa largura extra não faz sentido nenhum aqui. Sem este reset, ela
     continuava valendo em qualquer tela abaixo de 1700px, inclusive
     celular, e empurrava tudo para fora da tela numa janela de 390px. */
  .marca{min-width:0}
  /* justify-self:stretch: o .menu herda justify-self:center do modo largo, e
     o navegador aplica esse alinhamento também a elemento absoluto — o menu
     aberto saía como uma caixinha de 150px no meio da tela em vez da faixa
     inteira de ponta a ponta. */
  .menu{
    justify-self:stretch; max-height:calc(100vh - 90px); overflow-y:auto; overscroll-behavior:contain;
    display:none; position:absolute; top:100%; left:0; right:0; background:#fff;
    flex-direction:column; gap:0; padding:8px 20px 18px; border-bottom:1px solid var(--linha); box-shadow:var(--sombra)
  }
  .menu.aberto{display:flex}
  .menu li{border-bottom:1px solid var(--linha)}
  .menu a{display:block; padding:14px 0}
  /* Colunas explícitas, e não a ordem natural do HTML: com o menu escondido
     (display:none), a grade pula ele sozinha ao distribuir as colunas — sem
     dizer onde cada coisa vai, o hambúrguer entraria colado no logo, na
     coluna que devia ficar vazia como respiro. */
  .abrir-menu{display:block; grid-column:4}
  .topo-acoes{grid-column:3}
  /* Linha 1 para os três, explicitamente (v15.7). No HTML o hambúrguer vem
     antes das ações; a grade o coloca na coluna 4 e, ao chegar nas ações
     (coluna 3, à esquerda do cursor), abria uma SEGUNDA linha. O cabeçalho
     ficava com 131–134px em vez de ~80px em toda tela abaixo de 1700px —
     celular, tablet e notebook. */
  .marca, .topo-acoes, .abrir-menu{grid-row:1}
  .topo-acoes{gap:14px}
  .topo-acoes .acao-txt{display:none}
  /* Favoritos e Entrar saem da barra no modo hambúrguer; passam a morar
     dentro do menu, para quem está no celular não perder o acesso a eles. */
  .menu li.menu-extra{display:block}
  .menu li.menu-extra a{display:flex; align-items:center; gap:10px}
  .menu li.menu-extra svg{width:16px; height:16px; stroke:currentColor; fill:none; stroke-width:1.3}
  .topo-int{gap:12px; grid-template-columns:auto 1fr auto auto}
  .marca img{height:42px}
}
/* Celular estreito: o botão preto encolhe para caber na mesma linha que a
   logo, o idioma e o hambúrguer (320px é o menor celular em uso comum). */
@media (max-width:420px){
  .lanc-chamada{padding:30px 22px}
  .lanc-chamada h2{font-size:24px; overflow-wrap:break-word}
  .topo-int{gap:10px; padding:14px 0}
  .topo-acoes{gap:10px}
  .btn-anunciar{padding:10px 12px; font-size:11px; letter-spacing:.06em}
  .abrir-menu{padding:8px 4px}
}
@media (max-width:760px){
  /* minmax(0,1fr) e não 1fr: "1fr" nunca fica menor que a palavra mais longa
     da coluna. Em 320px, "DEVELOPMENTS" em 28px (versão em inglês) deixava o
     bloco de lançamentos com 303px numa tela de 280px úteis. */
  .grade-imoveis, .lancamentos, .grade-parceiras, .grade-resultado{grid-template-columns:minmax(0,1fr)}
  .lanc-item{border-left:0; border-top:1px solid var(--linha)}
  .grade-bairros{grid-template-columns:repeat(2,1fr)}
  .dif-grade{grid-template-columns:1fr}
  .dif{border-right:0; padding-left:0}
  .busca{margin-top:-30px; padding:0 18px 20px}
  .busca-linha{grid-template-columns:1fr}
  .layout-busca{grid-template-columns:1fr}
  .filtros{position:static}
  .especificacoes > div{flex:1 1 40%}   /* dois por linha no celular */
  .lista-check, .form-grade{grid-template-columns:1fr}
  .marca img{height:38px}
  .rodape img.logo{height:70px; margin-bottom:16px}
  /* Galeria em tela estreita: imagem mais baixa e miniaturas menores, senão a
     tira ocupa metade da altura útil do celular. */
  .galeria .principal{aspect-ratio:3/2; max-height:300px}
  .tira{flex:0 0 76px; width:76px; height:56px}
  .tiras{padding:8px 0 2px}
  .rodape-grade, .rodape-grade.sem-contato{grid-template-columns:1fr}
  .news-form{flex-direction:column; gap:10px}
  /* Em coluna, o flex:1 do campo virava altura zero (a base do flex passa a
     ser a altura): o campo de e-mail ficava com 20px, quase invisível. */
  .news-form input, .news-form button{flex:none; height:50px}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important; transition:none!important}
}

/* ---------- Paginação ---------- */
.paginacao{display:flex; gap:8px; justify-content:center; margin-top:32px; flex-wrap:wrap}
.paginacao a{
  min-width:40px; height:40px; display:grid; place-items:center; border:1px solid var(--linha);
  font-size:13px; padding:0 12px
}
.paginacao a:hover{border-color:var(--verde)}
.paginacao a.atual{background:var(--verde); color:#fff; border-color:var(--verde)}

/* ---------- Formulário de contato na ficha ---------- */
.form-lead{display:flex; flex-direction:column; gap:10px; margin-bottom:12px}
.form-lead input, .form-lead textarea{
  width:100%; border:1px solid var(--linha); border-radius:var(--raio); padding:11px 13px; font:inherit; background:#fff
}
/* A caixa de aceite herdava width:100% da regra acima e esticava pela largura
   toda, aparecendo sozinha e centralizada acima do texto. */
.form-lead .aceite input[type="checkbox"]{
  width:16px; height:16px; flex:none; padding:0; border-radius:2px; margin-top:2px
}
.form-lead textarea{resize:vertical}
.form-lead .btn-bloco{margin-bottom:0}

/* --------------------------------------------------------------------------
   Blocos de texto corrido (página de integração e institucionais)
   -------------------------------------------------------------------------- */
.texto-longo { max-width: 760px; }
.texto-longo h3 {
  font-family: var(--fonte-titulo, Georgia, serif);
  font-size: 1.15rem; font-weight: 400;
  margin: 32px 0 10px; letter-spacing: .01em;
}
.texto-longo p, .texto-longo li { line-height: 1.75; margin-bottom: 12px; }
.texto-longo ul { padding-left: 20px; margin-bottom: 18px; }
.texto-longo li { margin-bottom: 8px; }
.texto-longo code {
  background: rgba(0,0,0,.05); padding: 1px 5px; border-radius: 3px; font-size: .9em;
}
.texto-longo .nota {
  border-left: 2px solid var(--linha, #D8D8D8);
  padding: 10px 0 10px 16px; margin: 24px 0;
  font-size: .93rem; opacity: .82;
}
.texto-longo .btn { display: inline-block; margin-top: 12px; }

/* --------------------------------------------------------------------------
   Tira de miniaturas da ficha do imóvel
   -------------------------------------------------------------------------- */
.tiras {
  display: flex; gap: 8px; overflow-x: auto; overflow-y: hidden;
  padding: 10px 0 4px; scrollbar-width: thin;
  width: 100%; min-width: 0; max-width: 100%;
}
.tiras::-webkit-scrollbar { height: 6px; }
.tiras::-webkit-scrollbar-thumb { background: #D8D8D8; border-radius: 3px; }
.tira {
  flex: 0 0 104px; width: 104px; height: 74px; padding: 0;
  border: 2px solid transparent;          /* borda sempre presente, para a ativa
                                             não mudar o tamanho das vizinhas */
  background: none; cursor: pointer; opacity: .55; transition: opacity .18s;
}
.tira img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tira:hover, .tira.ativa { opacity: 1; }
.tira.ativa { border-color: var(--tinta, #1A1A1A); }
.contagem-fotos {
  font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
  color: #707070; margin: 2px 0 18px;
}

/* --------------------------------------------------------------------------
   Aceite de consentimento (LGPD)
   -------------------------------------------------------------------------- */
.aceite {
  display: flex; gap: 9px; align-items: flex-start;
  font-size: 12px; line-height: 1.5; color: var(--suave, #707070);
  margin: 4px 0 14px; cursor: pointer;
}
.aceite input { margin-top: 2px; flex: none; accent-color: var(--tinta, #1A1A1A); }
.aceite a { text-decoration: underline; }

/* Dentro de .form-grade, o aceite herdava o estilo dos rótulos do formulário —
   caixa alta, espaçamento largo, cor de rótulo — e a caixa de marcação esticava
   pela largura toda por causa da regra que formata os campos de texto. É frase
   corrida, não rótulo: precisa se comportar como frase. */
.form-grade label.aceite,
.form-lead label.aceite {
  grid-column: 1 / -1;
  display: flex; align-items: flex-start; gap: 9px;
  font-size: 12.5px; font-weight: 400; letter-spacing: normal;
  text-transform: none; color: var(--suave); line-height: 1.55;
  margin: 4px 0 16px;
}
.form-grade label.aceite input[type="checkbox"],
.form-lead label.aceite input[type="checkbox"] {
  width: 16px; height: 16px; flex: none; margin-top: 2px; padding: 0;
}
.news-aviso { font-size: 12px; color: #BCBCBC; margin-top: 10px; max-width: 420px; }
.news-aviso a { text-decoration: underline; }

/* --------------------------------------------------------------------------
   Agendamento de visita
   -------------------------------------------------------------------------- */
.abas-contato { display: flex; gap: 6px; margin-bottom: 18px; }
.abas-contato .aba {
  flex: 1; text-align: center; padding: 10px 8px; font-size: 12px;
  letter-spacing: .08em; text-transform: uppercase;
  border: 1px solid var(--linha); color: var(--suave); background: #fff;
}
.abas-contato .aba.ativa {
  background: var(--verde-fundo); color: #fff; border-color: var(--verde-fundo);
}
.agendar { margin-bottom: 6px; }
.agendar-titulo {
  font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--suave); margin: 16px 0 8px;
}
.chips { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  position: relative; cursor: pointer; border: 1px solid var(--linha);
  background: #fff; padding: 8px 10px; text-align: center; line-height: 1.15;
  transition: border-color .15s, background .15s;
}
/* O radio fica escondido dentro do label: sem JavaScript o formulário continua
   funcionando, só perde o destaque visual. */
.chip input { position: absolute; opacity: 0; width: 0; height: 0; }
.chip:hover { border-color: var(--tinta); }
.chip.ativa { background: var(--verde-fundo); color: #fff; border-color: var(--verde-fundo); }
.chip .chip-dia, .chip .chip-mes { display: block; font-size: 10px; letter-spacing: .06em; opacity: .8; }
.chip .chip-num { display: block; font-size: 16px; font-family: var(--serif); }
.chips.horas .chip { min-width: 62px; font-size: 12.5px; padding: 7px 6px; }
.chips.modos .chip { flex: 1; font-size: 12px; letter-spacing: .06em; padding: 10px; }
.chip.bloqueada {
  opacity: .3; cursor: not-allowed; text-decoration: line-through;
  background: #F4F4F4; border-color: var(--linha);
}
.chip.bloqueada:hover { border-color: var(--linha); }


/* --------------------------------------------------------------------------
   Algarismos
   --------------------------------------------------------------------------
   Duas garantias, independentes da fonte que estiver ativa:

   lining-nums  força os algarismos de altura uniforme. Fontes de texto
                clássicas costumam vir com os "antigos", em que o 1, o 3 e o 7
                descem abaixo da linha e o 0 fica do tamanho de um "o" — bonito
                num parágrafo, confuso num preço.
   tabular-nums dá a mesma largura a todos, então os preços de uma listagem
                alinham coluna com coluna em vez de dançar.
   -------------------------------------------------------------------------- */
.aside-preco, .preco, .especificacoes strong, .contagem-fotos,
.chip-num, .valor, .p-tabela td {
  font-variant-numeric: lining-nums tabular-nums;
  font-feature-settings: "lnum" 1, "tnum" 1;
}
/* O preço da ficha é o número mais importante da página: um pingo de peso a
   mais separa bem os algarismos sem pesar no ar do conjunto. */
.aside-preco { font-weight: 500; letter-spacing: .01em; }

/* A imagem de reserva já diz o que é ("FOTO INDISPONÍVEL", com o monograma),
   então não precisa mais ser esmaecida — esmaecer era um remendo de quando a
   reserva era a foto de outro imóvel. Só o ajuste de encaixe. */
.foto-indisponivel { object-fit: cover; background: #F0F0F0; }

/* Atributos do lançamento na home: mesma linguagem visual dos cartões de
   imóvel, mas sobre o fundo escuro do bloco de lançamentos. */
.lanc-atributos{display:flex; flex-direction:column; gap:6px; margin:8px 0 14px}
.lanc-atributos span{display:inline-flex; align-items:center; gap:6px}
.lanc-atributos svg{
  width:13px; height:13px; flex:none;
  stroke:currentColor; fill:none; stroke-width:1.4; opacity:.7
}

/* --------------------------------------------------------------------------
   Transição entre páginas
   --------------------------------------------------------------------------
   Uma regra e a navegação deixa de piscar branco. Quem não suporta navega
   normal — é melhoria progressiva, não depende de JavaScript e não quebra nada.
   Suporte hoje: Chrome 126+, Safari 18.2+, Firefox parcial a partir da 143.
   -------------------------------------------------------------------------- */
@view-transition { navigation: auto; }

/* Curta de propósito. A transição deve sugerir continuidade, não custar espera:
   acima de uns 150ms ela deixa de parecer fluidez e passa a parecer lentidão,
   porque a página nova já está pronta e é a animação que segura. */
::view-transition-old(root) { animation-duration: .09s; }
::view-transition-new(root) { animation-duration: .11s; }

/* A barra não participa da transição: fica exatamente onde está enquanto o
   conteúdo troca. Sem isto ela piscaria junto com o resto, que é justamente o
   efeito de "menu recarregando" que se quer evitar. */
::view-transition-group(barra-topo) { animation: none; }
::view-transition-old(barra-topo),
::view-transition-new(barra-topo) { animation: none; mix-blend-mode: normal; }

/* A foto do imóvel acompanha o cartão até a ficha: o mesmo nome nos dois lados
   faz o navegador animar de um para o outro em vez de trocar a tela inteira. */
.cartao-foto img, .cartao-foto picture { view-transition-name: none; }
.galeria .principal { view-transition-name: foto-imovel; }

@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
}

/* --------------------------------------------------------------------------
   Listas longas
   --------------------------------------------------------------------------
   content-visibility deixa o navegador pular a renderização do que está fora da
   tela. contain-intrinsic-size reserva a altura estimada, senão a barra de
   rolagem pula enquanto a pessoa desce.
   -------------------------------------------------------------------------- */
.grade-imoveis > article, .grade-resultado > article {
  content-visibility: auto;
  contain-intrinsic-size: auto 420px;
}

/* --------------------------------------------------------------------------
   Galeria em tela cheia (<dialog> nativo)
   --------------------------------------------------------------------------
   O elemento nativo já traz fundo modal, fechamento com Esc e prisão de foco —
   coisas que uma janela feita à mão quase sempre esquece, e que são justamente
   as que importam para quem navega por teclado.
   -------------------------------------------------------------------------- */
.visor::backdrop { background: rgba(13, 13, 13, .92); }
.visor {
  border: 0; padding: 0; background: none; max-width: 96vw; max-height: 96vh;
}
.visor img { max-width: 96vw; max-height: 88vh; object-fit: contain; display: block; }
.visor-fechar {
  position: fixed; top: 18px; right: 22px; z-index: 2;
  background: none; border: 1px solid rgba(255,255,255,.4); color: #fff;
  width: 40px; height: 40px; border-radius: 50%; cursor: pointer; font-size: 18px;
}
.visor-fechar:hover { background: #fff; color: #272727; }
.visor-legenda {
  color: #d8d8d0; font-size: 12px; letter-spacing: .08em; text-align: center;
  padding-top: 10px; text-transform: uppercase;
}
.galeria .principal { cursor: zoom-in; }


/* --------------------------------------------------------------------------
   Campos de formulário: um padrão só
   --------------------------------------------------------------------------
   Placeholder e texto digitado precisam ter o mesmo corpo e o mesmo peso — o
   navegador desenha placeholder mais claro por conta própria, e sem isto um
   campo de texto vazio parece de outra família que um select ao lado dele.
   O opacity:1 é obrigatório: o Firefox aplica transparência e ignoraria a cor.
   -------------------------------------------------------------------------- */
.form-grade input, .form-grade select, .form-grade textarea,
.form-lead input, .form-lead textarea,
.filtros input, .filtros select {
  font-family: var(--sans); font-size: 14px; font-weight: 400; color: var(--texto);
}
.form-grade ::placeholder, .form-lead ::placeholder, .filtros ::placeholder {
  color: var(--suave); opacity: 1; font-weight: 400;
}

/* Foco visível: contorno na cor da marca, à frente da borda. Sem isto o campo
   ativo é indistinguível dos vizinhos para quem navega por teclado. */
.campo input:focus, .campo select:focus,
.form-grade input:focus, .form-grade select:focus, .form-grade textarea:focus,
.form-lead input:focus, .form-lead textarea:focus {
  outline: 2px solid var(--verde); outline-offset: 1px; border-color: var(--verde);
}

/* --------------------------------------------------------------------------
   Sugestões de localização
   --------------------------------------------------------------------------
   A lista do <datalist> nativo era desenhada pelo navegador: tipografia de
   sistema, largura própria, aparência diferente em cada um. Esta acompanha o
   campo e o resto do site.
   -------------------------------------------------------------------------- */
.campo .com-icone { position: relative; }
.sugestoes {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 40;
  margin: 0; padding: 6px 0; list-style: none;
  background: #fff; border: 1px solid var(--linha); border-radius: var(--raio);
  box-shadow: 0 12px 28px rgba(21, 21, 21, .12);
  max-height: 300px; overflow-y: auto;
}
.sugestoes li {
  display: grid; grid-template-columns: 1fr auto; align-items: baseline;
  gap: 2px 12px; padding: 9px 14px; cursor: pointer;
}
.sugestoes li.marcada { background: var(--areia); }
.sug-bairro { font-size: 14px; color: var(--texto); }
.sug-cidade {
  grid-column: 1; font-size: 12px; color: var(--suave);
}
.sug-total {
  grid-row: 1 / span 2; align-self: center;
  font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--claro);
  white-space: nowrap;
}

/* --------------------------------------------------------------------------
   Mapa do site
   -------------------------------------------------------------------------- */
.mapa-grade {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 34px 40px; align-items: start;
}
.mapa-grade > * { min-width: 0; }
.mapa-grade h2 {
  font-family: var(--serif); font-weight: 400; font-size: 19px;
  letter-spacing: .04em; margin: 0 0 12px; padding-bottom: 8px;
  border-bottom: 1px solid var(--linha);
}
.mapa-grade h3 {
  font-size: 11.5px; font-weight: 500; letter-spacing: .09em; text-transform: uppercase;
  color: var(--suave); margin: 22px 0 8px;
}
.mapa-lista { list-style: none; margin: 0; padding: 0; }
.mapa-lista li { padding: 5px 0; }
.mapa-lista a { display: block; font-size: 14px; }
.mapa-lista a small {
  display: block; font-size: 12px; color: var(--suave); margin-top: 1px;
}
/* Listas longas (bairros, tipos) em duas colunas, para não virar uma tira
   comprida que empurra o resto da página para baixo. */
.mapa-lista.compacta { columns: 2; column-gap: 22px; }
.mapa-lista.compacta li { break-inside: avoid; }
@media (max-width: 760px) { .mapa-lista.compacta { columns: 1; } }

/* --------------------------------------------------------------------------
   Página de condomínio
   -------------------------------------------------------------------------- */
.cond-topo { display: grid; grid-template-columns: 1.7fr 1fr; gap: 40px; align-items: start; }
.cond-topo > * { min-width: 0; }
.cond-lazer {
  background: var(--areia); padding: 24px 26px; border: 1px solid var(--linha);
}
.cond-lazer h3 {
  font-size: 11.5px; font-weight: 500; letter-spacing: .09em; text-transform: uppercase;
  color: var(--suave); margin: 0 0 14px;
}
@media (max-width: 900px) { .cond-topo { grid-template-columns: 1fr; } }

/* Perguntas frequentes: <details> nativo já traz abrir/fechar por teclado e é
   lido corretamente por leitor de tela. */
.faq { max-width: 820px; }
.faq details { border-bottom: 1px solid var(--linha); padding: 4px 0; }
.faq summary {
  cursor: pointer; padding: 16px 0; font-size: 15px; list-style: none;
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: '+'; font-size: 20px; color: var(--suave); }
.faq details[open] summary::after { content: '−'; }
.faq details p { margin: 0 0 18px; color: var(--suave); line-height: 1.7; max-width: 70ch; }


/* --------------------------------------------------------------------------
   Seta dos campos de seleção
   --------------------------------------------------------------------------
   A seta nativa do <select> é desenhada pelo sistema: muda de forma entre
   Chrome, Firefox, Windows e Mac, e não combinava com a seta da busca avançada
   ao lado. Desenhando a nossa, todas ficam iguais em qualquer navegador.

   O appearance:none precisa dos três prefixos: sem o -webkit- o Safari mantém
   a seta dele por cima da nossa.
   -------------------------------------------------------------------------- */
.campo select,
.form-grade select,
.filtros select {
  -webkit-appearance: none; -moz-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml;charset=UTF-8,\
%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' \
stroke='%235F5F59' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'\
%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 13px center;
  background-size: 15px 15px;
  padding-right: 38px;
}
/* O Firefox deixa uma sombra no texto do select em alguns temas. */
.campo select { text-shadow: 0 0 0 var(--texto); }

/* Linha de contexto no topo da lista de sugestões. role="presentation" para o
   leitor de tela não anunciá-la como opção selecionável. */
.sug-dica {
  padding: 7px 14px 9px; font-size: 11px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--claro);
  border-bottom: 1px solid var(--linha); cursor: default;
}

/* --------------------------------------------------------------------------
   Simulador de financiamento
   -------------------------------------------------------------------------- */
.simulador {
  display: grid; grid-template-columns: 1.1fr 1fr; gap: 32px;
  border: 1px solid var(--linha); padding: 26px 28px; margin-bottom: 26px;
}
.simulador > * { min-width: 0; }
.sim-campos label { display: block; margin-bottom: 20px; }
.sim-campos label > span.sim-valor {
  float: right; font-size: 14px; color: var(--texto); font-weight: 500;
}
.sim-campos label {
  font-size: 11.5px; font-weight: 500; letter-spacing: .09em;
  text-transform: uppercase; color: var(--suave);
}
.sim-campos input[type="range"] {
  width: 100%; height: 28px; margin: 4px 0 -2px; accent-color: var(--verde);
}
/* 28px de altura (era 16px) para o dedo acertar o controle no celular; as
   margens compensam, e o espaço ocupado continua o mesmo. */
.sim-campos small {
  display: block; font-size: 12px; letter-spacing: normal;
  text-transform: none; color: var(--claro);
}
.sim-saida { background: var(--areia); padding: 22px 24px; align-self: start; }
.sim-saida p { display: flex; justify-content: space-between; align-items: baseline;
  gap: 12px; margin: 0 0 12px; font-size: 13px; color: var(--suave); }
.sim-saida strong { font-size: 15px; color: var(--texto);
  font-variant-numeric: lining-nums tabular-nums; }
.sim-parcela { border-bottom: 1px solid var(--linha); padding-bottom: 14px; margin-bottom: 16px !important; }
.sim-parcela strong { font-family: var(--serif); font-size: 26px; }
.sim-aviso { display: block !important; font-size: 12px; color: var(--claro);
  line-height: 1.6; margin: 16px 0 0 !important; }
@media (max-width: 860px) { .simulador { grid-template-columns: 1fr; gap: 22px; } }

/* --------------------------------------------------------------------------
   Salvar a busca como alerta
   -------------------------------------------------------------------------- */
.salvar-busca {
  border: 1px solid var(--linha); background: var(--areia);
  padding: 0 20px; margin-bottom: 22px;
}
.salvar-busca summary {
  cursor: pointer; padding: 15px 0; font-size: 13px; list-style: none;
  display: flex; justify-content: space-between; align-items: center;
}
.salvar-busca summary::-webkit-details-marker { display: none; }
.salvar-busca summary::after { content: '+'; font-size: 19px; color: var(--suave); }
.salvar-busca[open] summary::after { content: '−'; }
.salvar-busca form { padding: 0 0 20px; }
.busca-salva {
  font-size: 13px; color: var(--suave); margin: 0 0 12px;
  padding-top: 14px; border-top: 1px solid var(--linha);
}
.salvar-linha { display: flex; gap: 10px; flex-wrap: wrap; }
.salvar-linha input {
  flex: 1 1 240px; height: 44px; padding: 0 14px; background: #fff;
  border: 1px solid var(--linha); border-radius: var(--raio); font: inherit;
}
.salvar-linha button {
  height: 44px; padding: 0 26px; background: var(--verde); color: #fff; border: 0;
  border-radius: var(--raio); cursor: pointer; font-size: 12.5px; font-weight: 500;
  letter-spacing: .09em; text-transform: uppercase;
}
.salvar-linha button:hover { background: var(--tinta); }
.salvar-busca small { display: block; margin-top: 10px; font-size: 12px; color: var(--claro); }

/* --------------------------------------------------------------------------
   Assistente do portal
   -------------------------------------------------------------------------- */
.fala-abrir {
  position: fixed; right: 22px; bottom: 22px; z-index: 60;
  display: inline-flex; align-items: center; gap: 10px;
  padding: 14px 20px; border: 0; border-radius: 999px; cursor: pointer;
  background: var(--verde); color: #fff;
  font: inherit; font-size: 13px; font-weight: 500; letter-spacing: .04em;
  box-shadow: 0 8px 26px rgba(21, 21, 21, .22);
  transition: background .18s ease, transform .18s ease;
}
.fala-abrir:hover { background: var(--tinta); transform: translateY(-2px); }
.fala-abrir svg { width: 20px; height: 20px; fill: currentColor; stroke: none; flex: none; }
/* Pequeno movimento dos pontos ao passar o mouse: sinal de "digitando", sem
   animação contínua chamando atenção o tempo todo. */
.fala-abrir svg circle { transition: transform .25s ease; transform-box: fill-box; transform-origin: center; }
.fala-abrir:hover svg circle:nth-child(2) { transform: translateY(-1px); }
.fala-abrir:hover svg circle:nth-child(3) { transform: translateY(-.5px); }
.fala-abrir:hover svg circle:nth-child(4) { transform: translateY(-1px); }
@media (prefers-reduced-motion: reduce) { .fala-abrir svg circle { transition: none; } }
.fala-abrir.aberto { transform: scale(.94); opacity: .85; }
/* O botão flutua sobre qualquer parte da página — inclusive o rodapé e o hero,
   que são quase da mesma cor dele depois da paleta ter virado tons de cinza
   (contraste de só 1,23:1, praticamente invisível). Quando o JS detecta que
   está sobre um desses dois fundos escuros, troca para um cinza mais claro —
   var(--suave), que o site já usa em outro lugar — sem inventar cor nova. */
.fala-abrir.sobre-escuro { background: var(--suave); }
.fala-abrir.sobre-escuro:hover { background: #707070; }

/* O atributo hidden aplica display:none pela folha do navegador, que perde para
   qualquer regra do site. Como esta classe declara display:flex, o hidden não
   tinha efeito nenhum: o botão de fechar disparava, a classe mudava, e o painel
   continuava na tela.
   Vale para todo elemento que combine hidden com display no CSS — por isso a
   regra abaixo cobre os três casos do portal de uma vez. */
[hidden] { display: none !important; }

/* Contorno do painel (v15.1).
   Antes o arredondamento estava só na borda do painel, e o topo cinza
   (.fala-topo) era um retângulo de cantos vivos por dentro dela: nos dois
   cantos de cima o cinza passava por baixo da curva da borda, e o topo
   parecia torto. Agora o painel recorta tudo que está dentro dele
   (overflow: hidden) e o contorno é desenhado por sombra, não por borda —
   a sombra acompanha exatamente a mesma curva do recorte, e continua visível
   tanto sobre o fundo branco quanto sobre o rodapé escuro. */
.fala {
  position: fixed; right: 22px; bottom: 86px; z-index: 61;
  width: min(380px, calc(100vw - 32px));
  max-height: min(680px, calc(100vh - 110px));
  display: flex; flex-direction: column;
  background: #fff; border: 0; border-radius: 10px;
  overflow: hidden; isolation: isolate;
  box-shadow:
    0 0 0 1px rgba(21, 21, 21, .12),
    0 18px 50px rgba(21, 21, 21, .22);
}
.fala-topo {
  display: flex; align-items: flex-start; gap: 12px; flex: none;
  padding: 16px 18px; border-bottom: 1px solid var(--linha); background: var(--areia);
}
.fala-topo strong { display: block; font-size: 14px; }
.fala-topo small { display: block; font-size: 11.5px; color: var(--suave); margin-top: 3px; line-height: 1.45; }
.fala-fechar {
  margin-left: auto; background: none; border: 0; cursor: pointer;
  font-size: 22px; line-height: 1; color: var(--suave); padding: 0 2px;
}
.fala-fechar:hover { color: var(--texto); }

.fala-corpo { overflow-y: auto; padding: 14px 18px; }
.fala-msg {
  background: var(--areia); padding: 10px 13px; border-radius: 3px;
  font-size: 13.5px; line-height: 1.55; margin: 0 0 9px; white-space: pre-line;
}
.fala-msg.minha { background: var(--verde); color: #fff; margin-left: 26px; }

.fala-assuntos { display: flex; flex-direction: column; gap: 7px; margin-top: 4px; }
.fala-assuntos button {
  text-align: left; padding: 11px 14px; cursor: pointer; font: inherit; font-size: 13px;
  background: #fff; border: 1px solid var(--linha); border-radius: 3px; color: var(--texto);
}
.fala-assuntos button:hover:not(:disabled) { border-color: var(--verde); background: var(--areia); }
.fala-assuntos button:disabled { opacity: .4; cursor: default; }

/* Espaçamento enxuto: são seis campos, e cada pixel a mais empurra o botão
   para fora da tela — o que obriga a rolar para começar uma conversa. */
.fala-form label {
  display: block; margin-bottom: 9px;
  font-size: 11.5px; font-weight: 500; letter-spacing: .07em;
  text-transform: uppercase; color: var(--suave);
}
.fala-form input, .fala-form select {
  width: 100%; margin-top: 4px; padding: 9px 12px; font: inherit; font-size: 14px;
  border: 1px solid var(--linha); border-radius: var(--raio); background: #fff; color: var(--texto);
}
.fala-form input.errado, .fala-form select.errado { border-color: #a1341f; }
.fala-erro { display: block; margin-top: 4px; color: #a1341f; font-size: 11.5px;
  letter-spacing: normal; text-transform: none; font-weight: 400; }
.fala-dupla { display: grid; grid-template-columns: 1fr 92px; gap: 10px; }
.fala-form label.aceite {
  display: flex; gap: 8px; align-items: flex-start;
  font-size: 12px; font-weight: 400; letter-spacing: normal; text-transform: none;
  color: var(--suave); line-height: 1.5; margin: 4px 0 14px;
}
.fala-form label.aceite input { width: 16px; height: 16px; flex: none; margin-top: 2px; }
.fala-enviar {
  width: 100%; padding: 12px; border: 0; border-radius: var(--raio); cursor: pointer;
  background: var(--verde); color: #fff; font: inherit; font-size: 12.5px;
  font-weight: 500; letter-spacing: .09em; text-transform: uppercase;
}
.fala-enviar:hover:not(:disabled) { background: var(--tinta); }
.fala-enviar:disabled { opacity: .6; cursor: default; }
.fala-nota { font-size: 11.5px; color: var(--claro); line-height: 1.45; margin: 9px 0 0; }

/* No celular o painel ocupa a tela quase toda: 380px numa tela de 360 não cabe,
   e meia conversa visível é pior que nenhuma. */
@media (max-width: 520px) {
  .fala { right: 8px; left: 8px; bottom: 76px; width: auto; max-height: calc(100vh - 96px); }
  .fala-abrir { right: 12px; bottom: 12px; padding: 12px 16px; }
  .fala-abrir span { display: none; }
  .fala-abrir svg { width: 22px; height: 22px; }
}
@media print { .fala, .fala-abrir { display: none; } }

/* Imóveis sugeridos dentro da conversa. */
.fala-imoveis { display: flex; flex-direction: column; gap: 7px; margin: 2px 0 10px; }
.fala-imoveis a {
  display: block; padding: 11px 13px; border: 1px solid var(--linha);
  border-radius: 3px; text-decoration: none; background: #fff;
}
.fala-imoveis a:hover { border-color: var(--verde); background: var(--areia); }
.fala-imoveis strong { display: block; font-size: 13.5px; color: var(--texto); line-height: 1.35; }
.fala-imoveis small { display: block; font-size: 12px; color: var(--suave); margin: 2px 0 4px; }
.fala-imoveis span { font-size: 14px; color: var(--verde); font-weight: 500;
  font-variant-numeric: lining-nums tabular-nums; }

/* Link-armadilha: invisível e inacessível de propósito, para pessoas e para
   leitor de tela. Só um raspador que ignora robots.txt chega a ele. */
.oculto-total {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* Cartão sem subtítulo (o "Ver todos" não tem local): o span de destaque some
   para o topo em vez de ficar preso ao vão vazio do <small> ausente. */
.fala-imoveis a:not(:has(small)) span { margin-top: 2px; }

/* ---------- Impressão da ficha de imóvel (botão "Baixar ficha em PDF") ----
 * Nenhuma biblioteca de PDF no servidor: hospedagem compartilhada nem sempre
 * tem memória ou extensão para isso, e as bibliotecas PHP de PDF costumam ser
 * pesadas. O "Salvar como PDF" já existe pronto em qualquer navegador — a
 * folha de estilo de impressão só precisa deixar a página apresentável nesse
 * caminho: sem menu, sem formulário, sem botão, só a informação do imóvel.
 */
@media print {
  .topo, .trilha, .tiras, .abas-contato, .aviso, .form-lead, .ajuda,
  .fala-abrir, .fala, .rodape, .similares, .bloco-simulador, a.btn-bloco, button.btn-bloco,
  .barra-topo, .scroll-progresso {
    display: none !important;
  }

  /* Sem o menu fixo, a página não precisa reservar espaço nenhum no topo. */
  body { padding-top: 0 !important; }

  /* A galeria de fotos vira uma imagem só — a tira de miniaturas já está
     escondida acima, e várias fotos grandes gastariam papel à toa. */
  .galeria { height: auto !important; }
  .galeria .principal { max-height: 320px; object-fit: cover; }

  /* Preço, custos e a parceira responsável continuam visíveis — são
     informação, não interação — só o que pede clique ou preenchimento some. */
  .ficha { display: block !important; }
  .aside-contato { border: none !important; padding: 16px 0 0 !important; margin-top: 16px !important;
    border-top: 1px solid #ccc !important; }

  a { color: #000 !important; text-decoration: underline; }

  /* Rodapé de página simples, só com a referência — para quem imprimir em
     papel de verdade saber de qual imóvel e portal aquilo veio. */
  .ficha::after {
    content: "BRUCEE — brucee.com.br — impresso em " attr(data-impresso);
    display: block; grid-column: 1 / -1; margin-top: 24px; font-size: 10px; color: #777;
  }
}

/* ---------- Comparar imóveis (até 3, guardados no navegador) ---------- */
.comparar-caixa {
  display: flex; align-items: center; gap: 7px; margin: -2px 0 0;
  font-size: 12px; color: var(--suave); cursor: pointer; user-select: none;
}
.comparar-caixa input { width: 15px; height: 15px; accent-color: var(--verde); flex: none; margin: 0; }
.comparar-caixa input:disabled { cursor: not-allowed; opacity: .5; }
.comparar-caixa-bloco { margin: 4px 0 2px; font-size: 13px; }
/* No cartão a caixa fica entre a foto e o corpo, fora do .cartao-corpo — e
   por isso sem o recuo lateral dele: o quadradinho encostava na borda e na
   foto, desalinhado do título logo abaixo. Agora usa o mesmo recuo do corpo
   (15px) e um respiro em cima; o corpo perde um pouco do topo para a altura
   total do cartão continuar a mesma. */
.cartao > .comparar-caixa { padding: 12px 15px 0; margin: 0; align-self: flex-start; }
.cartao > .comparar-caixa + .cartao-corpo { padding-top: 10px; }

/* Barra flutuante: some quando não há nada selecionado, aparece do nada
   quando a primeira caixa é marcada — igual ao botão do assistente, no canto
   oposto para os dois nunca disputarem o mesmo espaço. */
.barra-comparar {
  position: fixed; left: 20px; bottom: 20px; z-index: 60;
  background: var(--tinta); color: #fff; padding: 12px 16px;
  display: flex; align-items: center; gap: 14px; font-size: 13px;
  box-shadow: 0 6px 20px rgba(0,0,0,.18);
}
.barra-comparar .btn-bloco { padding: 8px 16px; font-size: 11.5px; margin: 0; width: auto; }
.barra-comparar-limpar {
  background: none; border: 0; color: #B0B0B0; font-size: 12px; cursor: pointer;
  text-decoration: underline; padding: 0;
}
.barra-comparar-limpar:hover { color: #fff; }
@media (max-width: 640px) {
  .barra-comparar { left: 12px; right: 12px; bottom: 12px; flex-wrap: wrap; }
}

/* ---------- Tabela de comparação de imóveis ---------- */
.tabela-comparar-wrap { overflow-x: auto; }
.tabela-comparar { width: 100%; border-collapse: collapse; min-width: 560px; table-layout: fixed; }
/* Coluna dos rótulos: larga o bastante para duas ou três palavras por linha,
   e o texto quebra dentro do retângulo cinza. Até a v15.2 ela tinha 16% e
   white-space:nowrap — características longas ("Suíte master com closet
   duplo") atravessavam a borda e invadiam a coluna do imóvel ao lado. */
.tabela-comparar th:first-child, .tabela-comparar td:first-child { width: 24%; }
.tabela-comparar th, .tabela-comparar td {
  border: 1px solid var(--linha); padding: 12px 14px; text-align: center; vertical-align: top; font-size: 13.5px;
}
.tabela-comparar tbody th {
  text-align: left; font-size: 12px; color: var(--suave); text-transform: uppercase;
  letter-spacing: .04em; background: var(--areia);
  white-space: normal; overflow-wrap: break-word; hyphens: auto; line-height: 1.4;
}
.tabela-comparar thead th { padding: 16px; }
.tabela-comparar thead th:first-child { width: 24%; }
.comp-foto { display: block; aspect-ratio: 16/10; overflow: hidden; margin-bottom: 10px; background: var(--areia); }
.comp-foto img { width: 100%; height: 100%; object-fit: cover; }
.comp-titulo { display: block; font-size: 14px; color: var(--texto); text-decoration: none; }
.comp-titulo:hover { text-decoration: underline; }
.comp-local { display: block; font-size: 12px; color: var(--suave); margin-top: 3px; text-transform: none; letter-spacing: 0; }
.comp-preco { font-size: 16px; font-weight: 500; }
.comp-sim-nao.tem { color: var(--verde); font-size: 16px; }
.comp-sim-nao.nao-tem { color: #C8C8C8; }
.tabela-comparar .btn-bloco { padding: 9px 10px; font-size: 10.5px; margin: 0; letter-spacing: .08em; }

/* Aviso de que o texto do anúncio (não a interface) está em português —
   aparece só na versão em inglês, junto da descrição de cada imóvel. */
.aviso-idioma-original { font-size: 12px; font-style: italic; color: var(--suave); margin: -6px 0 14px; }

/* ==========================================================================
   v15.0 — preço reduzido, aviso de preço, preço por m², mapa, avaliação
   ========================================================================== */

/* Botão genérico. A classe .btn já aparecia em alerta, condomínio e outras
   páginas, mas não tinha estilo próprio: saía como link comum. */
.btn{
  display:inline-block; background:var(--tinta); color:#fff; padding:13px 22px;
  font-size:11px; letter-spacing:.15em; text-transform:uppercase; border-radius:var(--raio);
  text-decoration:none; border:1px solid var(--tinta); cursor:pointer; font-family:var(--sans);
}
.btn:hover{background:var(--verde); border-color:var(--verde)}

.aviso.erro{border-left-color:#9A3B2E}

/* Selo no cartão: o segundo selo desce para não cobrir o primeiro. */
.selo.selo-reducao{background:#fff; color:var(--tinta); border:1px solid var(--tinta)}
.selo.selo-reducao.segundo{top:44px}

/* Ficha: preço anterior acima do atual */
.preco-reduzido{font-size:12.5px; color:var(--suave); margin:0 0 4px}
.preco-reduzido s{color:var(--suave)}
.selo-reducao{
  display:inline-block; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase;
  border:1px solid var(--tinta); color:var(--tinta); padding:3px 8px; margin-right:6px
}

/* Avise-me se o preço baixar (ficha) */
.aviso-preco{border:1px solid var(--linha); padding:0 14px; margin:0 0 10px}
.aviso-preco summary{cursor:pointer; padding:13px 0; font-size:11px; letter-spacing:.15em;
  text-transform:uppercase; list-style:none; text-align:center}
.aviso-preco summary::-webkit-details-marker{display:none}
.aviso-preco form{display:grid; gap:10px; padding-bottom:14px}
.aviso-preco input[type=email]{height:44px; padding:0 12px; border:1px solid var(--linha);
  border-radius:var(--raio); font:inherit; width:100%}
.aviso-preco .btn-bloco{margin-bottom:0}

/* Preço pedido por m² */
.preco-m2{border:1px solid var(--linha); background:var(--areia); padding:14px 18px; margin:0 0 22px}
.preco-m2-valor{display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  flex-wrap:wrap; margin:0 0 6px}
.preco-m2-valor span{font-size:11.5px; letter-spacing:.09em; text-transform:uppercase; color:var(--suave)}
.preco-m2-valor strong{font-family:var(--serif); font-size:24px; font-weight:500}
.preco-m2-nota{font-size:12.5px; color:var(--suave); margin:0}

/* Mapa da busca */
.mapa-busca{border:1px solid var(--linha); padding:0 20px; margin-bottom:22px}
.mapa-busca summary{cursor:pointer; padding:15px 0; font-size:13px; list-style:none;
  display:flex; justify-content:space-between; align-items:center}
.mapa-busca summary::-webkit-details-marker{display:none}
.mapa-busca summary::after{content:'+'; font-size:19px; color:var(--suave)}
.mapa-busca[open] summary::after{content:'−'}
.mapa-area{height:380px; margin:0 0 10px; background:var(--areia)}
.mapa-busca .nota{font-size:12px; color:var(--suave); margin:0 0 12px}
.mapa-busca .nota:empty{display:none}
.mapa-numero{background:transparent; border:0; box-shadow:none; color:#fff; font-weight:600; font-size:12px}
.mapa-numero::before{display:none}
.leaflet-popup-content strong{display:block; font-family:var(--serif); font-size:17px}
.leaflet-popup-content p{margin:4px 0 8px}

/* Faixa "Vai vender ou alugar?" na home */
.faixa-avaliar-caixa{display:flex; justify-content:space-between; align-items:center; gap:24px;
  flex-wrap:wrap; border:1px solid var(--linha); padding:28px 32px}
.faixa-avaliar-caixa h2{margin:0 0 6px}
.faixa-avaliar-caixa p{margin:0; color:var(--suave); max-width:60ch}
