/* ---------------------------------------------------------------- fontes
   Servidas do próprio site (static/fontes/), não do Google: uma página que
   busca fonte em servidor de terceiro fica na mão dele para carregar, e ainda
   conta a visita do cliente para fora. São 85 KB no total, uma vez só.

   Bricolage Grotesque no nome e nos títulos — grotesca de hoje, com pequenos
   desalinhos de propósito; escolha do Alexandre em 28/08/2026, entre seis
   candidatas mostradas com a logo ao lado. Instrument Sans no texto: neutra,
   mas não a de sempre. */
@font-face{font-family:'Bricolage';font-style:normal;font-weight:700;
  font-display:swap;src:url('/fontes/bricolage-700.woff2') format('woff2')}
@font-face{font-family:'Bricolage';font-style:normal;font-weight:800;
  font-display:swap;src:url('/fontes/bricolage-800.woff2') format('woff2')}
@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:400;
  font-display:swap;src:url('/fontes/instrument-400.woff2') format('woff2')}
@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:600;
  font-display:swap;src:url('/fontes/instrument-600.woff2') format('woff2')}
@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:700;
  font-display:swap;src:url('/fontes/instrument-700.woff2') format('woff2')}

/* Folha única do site publicado. Sai do gerador junto com as páginas —
   ver apps/vitrine/publicador.py.

   O desenho é o do figteam.com, que o Alexandre escolheu em 27/08/2026: o card
   É a foto, em cima dela um degradê escuro, e o texto branco por dentro da
   própria imagem. Sem moldura, sem cantos redondos, sem espaço entre um e
   outro — a grade parece uma parede de fotos.

   As cores saem da logo (static/img/logo.png), na versão de 27/08/2026 com
   contorno escuro: vermelho #ED3237, amarelo #FFF212, contorno #373435.

   O vermelho da marca dá 4,11 de contraste sobre branco — abaixo dos 4,5 que
   texto pequeno exige. Por isso ele fica nas faixas e nos detalhes, e onde há
   letra miúda (selo, botão, título de bloco) entra o --tijolo, meio tom mais
   fechado, que passa. O amarelo com letra preta dá 15,0: sobra. */
:root{
  --marca:#ed3237;                       /* o vermelho exato da logo */
  --tijolo:#d62a2f; --tijolo-e:#b01f24; --tijolo-c:#ed3237;
  --sol:#fff212; --sol-e:#e6da10;
  --contorno:#373435;                    /* o traço escuro da logo */
  --preto:#111; --preto-c:#1e1e1e;
  --chao:#fff; --papel:#fff; --tinta:#191919; --fraco:#6b6b6b;
  --linha:#e4e4e2; --grafite:#2a2a2a;
  /* faixa clara para alternar com o branco, no lugar das barras pretas que o
     site tinha até 28/08/2026 — o Alexandre pediu "claro e limpo", e no
     imobiliariamiami.com.br o único escuro da página é a foto */
  --faixa:#f6f7f5;
  /* azul-marinho, só para a moldura da miniatura aberta — em teste, a pedido
     do Alexandre em 28/08/2026. Se ficar, entra na paleta com nome próprio. */
  --azul-mini:#12305e;
  --sombra:0 1px 3px rgba(0,0,0,.08);
  --sombra-alta:0 14px 40px rgba(0,0,0,.14);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--chao);color:var(--tinta);line-height:1.5;
  font-family:'Instrument Sans',"Segoe UI",system-ui,-apple-system,Roboto,
              Helvetica,Arial,sans-serif;
  -webkit-font-smoothing:antialiased;display:flex;flex-direction:column;
  min-height:100vh}
main{flex:1}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
.wrap{max-width:1440px;margin:0 auto;padding:0 22px}

/* ------------------------------------------------------------ cabeçalho */
/* Branco, e não preto: em 28/08/2026 o Alexandre pediu o site "mais limpo e
   claro", no padrão do imobiliariamiami.com.br — lá o topo é branco e a única
   coisa escura da página é a foto. O preto ficou só no rodapé. */
header.topo{background:#fff;color:var(--tinta);position:sticky;top:0;z-index:30;
  border-bottom:1px solid var(--linha);
  box-shadow:0 1px 12px rgba(0,0,0,.05)}
header.topo .wrap{display:flex;align-items:center;gap:22px;min-height:64px;
  flex-wrap:wrap}
.marca{display:flex;align-items:center;gap:13px;padding:7px 0}
/* A logo e o CRECI empilhados: o registro fica preso ao símbolo e acompanha
   o tamanho dele em qualquer tela. Centrado sob a logo, e não alinhado à
   esquerda, porque a logo é mais larga que o texto. */
.marca .simbolo{display:flex;flex-direction:column;align-items:center;gap:3px}
.marca .creci{font-size:8.5px;font-weight:700;letter-spacing:.09em;
  color:var(--fraco);white-space:nowrap;line-height:1}
/* 2cm, o tamanho em que a logo foi desenhada (27/08/2026). Em tela, 2cm são
   76px — o CSS converte sozinho. Como o desenho é 1,34:1, os 2cm valem para a
   largura e a altura sai em 1,5cm. */
.marca img{width:2cm;height:auto}
/* O nome é a marca escrita: a logo diz quem é para quem já conhece, o nome
   diz para quem não conhece. Por isso ele vem grande, e "IMOBILIÁRIA" fica
   por cima como linha fina — é a palavra genérica, não o nome. */
/* O nome, em duas linhas que TERMINAM JUNTAS: "IMOBILIARIA" é esticada até
   ficar exatamente da largura de "BINATO" (pedido do Alexandre, 28/08/2026).

   Como: a caixa em flex-column pega a largura da palavra mais larga, que é
   BINATO; a linha de cima herda essa largura e o espaçamento entre letras faz
   o resto. O valor do letter-spacing não é chutado — foi medido no navegador
   com esta fonte neste tamanho (ver docs/07_site_publico.md). A margem
   negativa tira o espaço que o CSS insere DEPOIS da última letra, que senão
   deixaria a linha de cima um passo mais longa. */
.marca .nome{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:40px;font-weight:800;letter-spacing:.005em;
  text-transform:uppercase;line-height:.94;display:flex;
  flex-direction:column-reverse;align-items:flex-start}
.marca .nome small{display:block;font-size:13px;font-weight:700;
  color:var(--tijolo);margin-bottom:3px;text-transform:uppercase;
  --kicker-ls:.452em;
  letter-spacing:var(--kicker-ls);
  margin-right:calc(-1 * var(--kicker-ls))}
/* Menu de duas linhas: rótulo forte em cima, complemento fino embaixo.
   Fica centrado entre a marca e o botão, como no modelo. */
nav.menu{display:flex;gap:4px;margin:0 auto;flex-wrap:wrap;
  align-items:center}
nav.menu a{display:flex;flex-direction:column;align-items:center;
  padding:8px 15px;border-radius:8px;line-height:1.22;text-align:center}
nav.menu a b{font-size:15px;font-weight:700;color:var(--tinta);
  letter-spacing:-.005em}
nav.menu a small{font-size:11.5px;font-weight:500;color:var(--fraco);
  margin-top:1px}
nav.menu a:hover{background:#f4f4f2}
nav.menu a.aqui b{color:var(--tijolo)}
nav.menu a.aqui small{color:var(--tijolo-e)}

/* O botão-pílula do WhatsApp, à direita. A bolha branca com o ícone é o que
   o faz ser reconhecido antes de a pessoa ler o texto. */
.botao-zap{display:inline-flex;align-items:center;gap:10px;flex:0 0 auto;
  background:var(--preto);color:#fff;padding:11px 22px 11px 11px;
  border-radius:40px;font-size:14.5px;font-weight:700;letter-spacing:.01em;
  white-space:nowrap;transition:background .15s}
.botao-zap:hover{background:var(--tijolo)}
.botao-zap .bolha{width:30px;height:30px;border-radius:50%;background:#fff;
  color:#25d366;display:grid;place-items:center;flex:0 0 auto}

/* Entre 940 e 1200px (notebook pequeno, tablet deitado) tudo encolhe um
   pouco para o cabeçalho continuar em UMA linha: a 1024px ele quebrava em
   duas alturas e empurrava a página 74px para baixo. */
@media(min-width:701px) and (max-width:1200px){
  .marca img{width:1.6cm}
  .marca .creci{font-size:8px}
  .marca .nome{font-size:31px}
  .marca .nome small{font-size:10.1px;--kicker-ls:.462em}
  nav.menu a{padding:7px 9px}
  nav.menu a b{font-size:13.5px}
  nav.menu a small{font-size:10.5px}
  .botao-zap{padding:9px 16px 9px 9px;font-size:13px}
  .botao-zap .bolha{width:26px;height:26px}
}

/* ----------------------------------------------------------------- capa */
/* Clara, com o título em texto escuro. Era uma faixa preta com a foto por
   baixo e letra branca; ficava pesada logo abaixo do cabeçalho e era metade
   do "muito escuro" que o Alexandre apontou em 28/08/2026. */
.capa{background:var(--faixa);color:var(--tinta);padding:34px 0 0;
  border-bottom:1px solid var(--linha);min-height:0;display:block}
.capa>.wrap{width:100%}
.capa h1{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:31px;line-height:1.18;margin:0 0 6px;font-weight:700;
  letter-spacing:-.015em;max-width:680px;color:var(--tinta)}
.capa h1 em{font-style:normal;color:var(--tijolo)}
.capa p{margin:0 0 22px;color:var(--fraco);font-size:15px}

/* ---------------------------------------------------------------- busca */
/* Flex, e não grade: os campos dividem a sobra em partes iguais e o botão
   fica do tamanho que precisa. Com grade de colunas iguais o "Limpar" ficava
   tão largo quanto um filtro. E são 4 campos na inicial e 3 em /alugar/ e
   /comprar/ — o flex se vira com os dois casos sozinho. */
.busca{display:flex;flex-wrap:wrap;gap:0;
  background:#fff;border:1px solid var(--linha);transform:translateY(1px)}
.busca .campo{display:flex;flex-direction:column;min-width:0;flex:1 1 200px;
  border-right:1px solid var(--linha);padding:12px 18px}
.busca .campo:last-child{border-right:0}
.busca label{font-size:10px;font-weight:700;color:var(--fraco);
  text-transform:uppercase;letter-spacing:.12em;margin-bottom:2px}
.busca select,.busca input{padding:3px 0;border:0;font-size:14.5px;
  font-family:inherit;background:transparent;color:var(--tinta);width:100%;
  font-weight:600}
.busca select:focus,.busca input:focus{outline:none;color:var(--tijolo)}
.busca .limpar{justify-content:center;padding:0;border-right:0;
  flex:0 0 auto}
.busca button{height:100%;border:0;cursor:pointer;font-family:inherit;
  background:var(--tijolo);color:#fff;font-size:12px;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;padding:14px 34px}
.busca button:hover{background:var(--tijolo-e)}

/* --------------------------------------------------------- barra da lista */
.barra{display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:20px 0 16px}
.barra .conta{font-size:14px;color:var(--fraco)}
.barra .conta b{color:var(--tinta);font-size:19px;font-weight:700}
.ordenar{margin-left:auto;display:flex;align-items:center;gap:3px;flex-wrap:wrap}
.ordenar span{font-size:10.5px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--fraco);margin-right:6px}
.ordenar button{border:1px solid var(--linha);background:#fff;cursor:pointer;
  font-family:inherit;font-size:12.5px;font-weight:600;padding:7px 13px;
  color:var(--fraco)}
.ordenar button:hover{border-color:var(--tinta);color:var(--tinta)}
.ordenar button.aqui{background:var(--preto);border-color:var(--preto);
  color:#fff}

/* ------------------------------------------------------- a grade de fotos */
/* Nasceu colada, no aperto do figteam.com. O Alexandre pediu separadas em
   27/08/2026: o branco entre elas dá ar e cada imóvel vira uma peça, em vez
   de uma parede única. A sombra fininha existe por causa disso — sem ela,
   foto clara sobre fundo branco fica sem onde terminar. */
.grade{display:grid;gap:22px;
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  padding-bottom:48px}
.card{position:relative;display:block;background:#101010;overflow:hidden;
  box-shadow:0 1px 3px rgba(0,0,0,.10),0 6px 16px rgba(0,0,0,.06);
  transition:transform .18s ease,box-shadow .18s ease}
.card:hover{transform:translateY(-3px);
  box-shadow:0 3px 8px rgba(0,0,0,.13),0 14px 30px rgba(0,0,0,.12)}
/* PRECISA existir: `display:block` acima vence o display:none que o navegador
   dá ao atributo [hidden], e sem esta linha o filtro marca os cards mas
   nenhum some da tela. */
.card[hidden]{display:none}
.card .foto{position:relative;aspect-ratio:16/9;background:#1a1a1a}
.card .foto img{width:100%;height:100%;object-fit:cover;
  transition:transform .5s ease}
.card:hover .foto img{transform:scale(1.045)}
.card .sem-foto{width:100%;height:100%;display:grid;place-items:center}
/* Casa desenhada em SVG, e não o emoji 🏠: no Windows o emoji sai colorido e
   em outro estilo de desenho, destoando de tudo. Aqui é traço, na cor certa. */
.ic-casa{width:46px;height:46px;fill:none;stroke:#4a4a4a;stroke-width:1.4;
  stroke-linecap:round;stroke-linejoin:round}
.linha .retratinho .ic-casa{width:34px;height:34px;stroke:#a8b0a9}
/* o degradê é o que faz o texto branco ficar legível em cima de foto clara */
/* O degradê é só o necessário para ler o texto branco: forte na tira de
   baixo, e some antes da metade. Antes ia a 72% de preto na altura do meio e
   escurecia o imóvel inteiro. */
.card .info{position:absolute;inset:auto 0 0 0;color:#fff;padding:44px 15px 13px;
  background:linear-gradient(to top,rgba(0,0,0,.86) 0%,rgba(0,0,0,.42) 34%,
                             rgba(0,0,0,0) 66%);
  text-shadow:0 1px 3px rgba(0,0,0,.55)}
.card .cod{display:block;font-size:9.5px;letter-spacing:.13em;
  text-transform:uppercase;color:rgba(255,255,255,.6);margin-bottom:0}
.card .preco{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;font-size:21px;font-weight:700;
  line-height:1.2;letter-spacing:-.005em}
.card .preco .mes{font-size:12px;font-weight:600;color:rgba(255,255,255,.72)}
.card .preco .aster{color:var(--sol)}
.card .rua{font-size:13px;font-weight:600;margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card .local{font-size:11.5px;color:rgba(255,255,255,.72)}
.card .medidas{font-size:11px;color:rgba(255,255,255,.86);margin-top:6px;
  padding-top:6px;border-top:1px solid rgba(255,255,255,.18);font-weight:600;
  letter-spacing:.02em}
.tag{position:absolute;top:0;left:0;padding:5px 11px;font-size:9.5px;
  font-weight:800;text-transform:uppercase;letter-spacing:.13em;
  background:var(--tijolo);color:#fff;z-index:2}
.tag.venda{background:var(--sol);color:#191919}
.tag-destaque{position:absolute;top:0;right:0;padding:5px 11px;font-size:9.5px;
  font-weight:800;text-transform:uppercase;letter-spacing:.13em;
  background:rgba(0,0,0,.72);color:var(--sol);z-index:2}

/* O selo de vídeo fica embaixo, e não em cima: em cima já moram a finalidade
   e o "Destaque", e três tarjas na mesma linha viram sujeira. */
.tag-video{position:absolute;left:0;bottom:0;display:inline-flex;
  align-items:center;gap:6px;padding:5px 11px 5px 9px;font-size:9.5px;
  font-weight:800;text-transform:uppercase;letter-spacing:.13em;
  background:rgba(0,0,0,.72);color:#fff;z-index:3;border-radius:0 8px 0 0}
/* o triângulo do play é desenhado com borda: um caractere de símbolo dependeria
   da fonte que a máquina do cliente tiver */
.play{width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;
  border-color:transparent transparent transparent currentColor}

.vazio{text-align:center;padding:64px 20px;color:var(--fraco);
  border:1px dashed var(--linha);margin-bottom:44px}
.vazio strong{display:block;font-size:18px;color:var(--tinta);margin-bottom:6px}

/* ---------------------------------------------------------------- ficha */
/* Migalha: diz onde a pessoa está e como voltar. Do lado direito, o
   Anterior/Próximo, para andar de imóvel em imóvel sem passar pelo catálogo. */
/* Uma linha SEMPRE, custe o que custar ao nome do imóvel. A migalha termina
   com o título, que tem de 20 a 60 caracteres; numa janela estreita ela
   quebrava em duas linhas e empurrava foto e painel para baixo — e o botão
   "Próximo" mudava de lugar de um imóvel para o outro. Nome comprido agora é
   cortado com reticências. */
.migalha{display:flex;align-items:center;gap:7px;flex-wrap:nowrap;
  font-size:12.5px;color:var(--fraco);padding:18px 0 14px;
  white-space:nowrap;overflow:hidden}
.migalha a,.migalha span{flex:0 0 auto}
.migalha strong{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;
  min-width:0}
.migalha a:hover{color:var(--tijolo)}
.migalha strong{color:var(--tinta);font-weight:600}
.migalha span{color:#c3c3bf}
.migalha .andar{margin-left:auto;display:flex;align-items:center;gap:12px;
  color:var(--fraco)}
.migalha .andar a{font-weight:700;color:var(--tinta)}
.migalha .andar a:hover{color:var(--tijolo)}
.migalha .andar .apagado{color:#c3c3bf}
.migalha .andar .posicao{font-variant-numeric:tabular-nums;
  border-left:1px solid var(--linha);border-right:1px solid var(--linha);
  padding:0 12px}

/* O carrossel: uma foto por vez, 4:3 e cantos arredondados — a proporção do
   modelo, que mostra mais do imóvel que o 16:9. */
.carrossel{margin-bottom:6px}
/* 3:2, não 4:3: é a proporção do modelo e a de máquina fotográfica; em 4:3 a
   foto ficava alta demais ao lado do painel. */
.palco{position:relative;background:#111;aspect-ratio:3/2;overflow:hidden;
  border-radius:14px}
.palco.sem-foto{display:grid;place-items:center;background:#1a1a1a}
.palco .quadro{position:absolute;inset:0;display:none}
.palco .quadro.aqui{display:block}
.palco img{width:100%;height:100%;object-fit:cover}
.palco img[data-inteira]{object-fit:contain;background:#fff}
/* O vídeo NÃO é cortado. Filmagem de imóvel sai do celular quase sempre em
   pé, e cortar 3/2 num vídeo vertical decapitaria metade do cômodo — o que a
   foto aguenta (ela é escolhida) o vídeo não aguenta. Fica inteiro sobre o
   preto do palco, do mesmo tamanho de todos os outros quadros. */
.palco video{width:100%;height:100%;object-fit:contain;background:#111;
  display:block}
.selo-foto{position:absolute;top:16px;right:16px;background:rgba(255,255,255,.94);
  color:var(--tinta);font-size:12.5px;padding:7px 15px;border-radius:24px;
  box-shadow:0 2px 10px rgba(0,0,0,.18)}
.selo-foto b{font-size:15px;font-weight:800;margin-right:2px}
.palco .seta{position:absolute;top:50%;transform:translateY(-50%);border:0;
  cursor:pointer;background:rgba(255,255,255,.92);color:#111;width:46px;
  height:46px;border-radius:50%;font-size:26px;line-height:1;
  display:grid;place-items:center;padding-bottom:4px;
  box-shadow:0 2px 10px rgba(0,0,0,.25);transition:background .15s}
.palco .seta:hover{background:#fff}
.palco .seta.antes{left:16px}
.palco .seta.depois{right:16px}

/* Miniaturas maiores e arredondadas, com moldura na que está aberta. */
/* altura fixa mesmo vazia: imóvel com uma foto só não pode encurtar a
   página em relação ao que tem dezenove */
.tira{display:flex;gap:9px;overflow-x:auto;padding:9px 0 4px;
  scrollbar-width:thin;min-height:101px}
/* Moldura em TODAS as miniaturas, não só na aberta: a fila fica com desenho
   próprio em vez de parecer fotos soltas. A que está aberta se distingue pela
   opacidade cheia e pela moldura mais grossa. */
.tira .mini{flex:0 0 124px;height:88px;overflow:hidden;background:#e7e9e4;
  border-radius:10px;border:2px solid var(--azul-mini);opacity:.62;
  transition:opacity .15s,box-shadow .15s}
.tira .mini img{width:100%;height:100%;object-fit:cover}
.tira .mini:hover{opacity:.9}
.tira .mini.aqui{opacity:1;
  box-shadow:0 0 0 2px var(--azul-mini)}
/* a miniatura do vídeo leva o play no meio: na tira de 12 miniaturas é o que
   diz qual delas se mexe */
.tira .mini.e-video{position:relative}
.tira .mini.e-video .play{position:absolute;top:50%;left:50%;
  transform:translate(-50%,-50%);border-width:9px 0 9px 15px;color:#fff;
  filter:drop-shadow(0 1px 3px rgba(0,0,0,.85))}

/* Perto de meio a meio, como no modelo: com a foto ocupando dois terços, o
   painel ficava estreito e os dados espremidos contra a borda. */
.ficha{display:grid;gap:38px;grid-template-columns:1.15fr 1fr;
  align-items:start;padding-bottom:60px}
/* PRECISA existir: coluna de grid nasce com min-width:auto e cresce até caber
   o conteúdo. A tira de miniaturas empurrava a página inteira para o lado no
   celular, apesar do overflow-x da própria tira. */
.ficha>*{min-width:0}
@media(max-width:940px){.ficha{grid-template-columns:1fr}}

/* ---- o painel da direita: é ele que dá a cara de ficha organizada ---- */
.painel{position:sticky;top:94px;border:1px solid var(--linha);
  border-radius:14px;background:#fff;padding:18px 22px 22px;
  box-shadow:0 6px 24px rgba(0,0,0,.07)}
.andar-ficha{display:flex;justify-content:space-between;align-items:center;
  font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  padding-bottom:14px;border-bottom:1px solid var(--linha)}
.andar-ficha a{color:var(--tinta)}
.andar-ficha a:hover{color:var(--tijolo)}
.andar-ficha .apagado{color:#c9cac5}
/* Altura reservada para DUAS linhas, sempre. Nome curto ocupa uma e o resto
   fica vazio de propósito: é o que impede tudo o que vem abaixo — valor,
   dados e botões — de subir num imóvel e descer no outro. */
.painel h1{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:25px;font-weight:800;line-height:1.18;letter-spacing:-.01em;
  text-align:center;margin:18px 0 14px;
  min-height:calc(2 * 25px * 1.18);display:flex;align-items:center;
  justify-content:center}
.valor-ficha{text-align:center;padding:0 0 16px;
  border-bottom:1px solid var(--linha)}
.valor-ficha .rotulo{display:block;font-size:10.5px;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;color:var(--fraco)}
.valor-ficha .valor{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:31px;font-weight:800;color:var(--tijolo-e);letter-spacing:-.015em;
  line-height:1.2}
.valor-ficha .valor small{font-size:15px;font-weight:700;color:var(--fraco)}

/* Linha com ícone, rótulo com dois-pontos e valor à direita — é o desenho do
   modelo, e o que faz a lista de dados parecer ficha e não etiqueta. */
.dados{margin:0;padding:4px 0 0}
.dados>div{display:flex;align-items:center;gap:12px;padding:11px 0;
  border-bottom:1px solid var(--linha)}
.dados>div:last-child{border-bottom:0}
.dados dt{display:flex;align-items:center;gap:9px;font-size:14px;
  color:var(--fraco);flex:0 0 auto}
.dados dt svg{width:17px;height:17px;flex:0 0 auto;fill:none;
  stroke:var(--tijolo);stroke-width:1.6;stroke-linecap:round;
  stroke-linejoin:round}
.dados dd{margin:0 0 0 auto;font-size:15px;font-weight:700;text-align:right;
  color:var(--tinta)}

/* Largura cheia, acima dos três de contato. Sempre presente — apagado quando
   o bairro não tem coordenada — para o painel não mudar de altura. */
.ver-mapa{display:block;width:100%;margin-top:18px;padding:13px;border:0;
  border-radius:9px;cursor:pointer;font-family:inherit;font-size:11.5px;
  font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  text-align:center;background:#fff;color:var(--azul-mini);
  box-shadow:inset 0 0 0 2px var(--azul-mini);transition:background .15s}
.ver-mapa:hover{background:var(--azul-mini);color:#fff}
.ver-mapa.apagado{color:#b6b8b3;box-shadow:inset 0 0 0 2px var(--linha);
  cursor:default}
.ver-mapa.apagado:hover{background:#fff;color:#b6b8b3}

.acoes-ficha{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;
  margin-top:8px}
.acao{background:var(--preto);color:#fff;text-align:center;padding:13px 6px;
  border-radius:9px;font-size:11.5px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase}
.acao:hover{background:var(--tijolo)}
.acao.zap{background:#25d366}
.acao.zap:hover{background:#1fbb59}
/* o espaço da nota existe sempre, com ou sem texto — ver imovel.html */
.painel .nota{font-size:12.5px;color:var(--fraco);margin:14px 0 0;
  line-height:1.45;text-align:center;min-height:36px}

.bloco{border-top:1px solid var(--linha);padding:22px 0 4px;margin-top:26px}
.bloco h2{font-size:11px;text-transform:uppercase;letter-spacing:.15em;
  color:var(--tijolo-e);margin:0 0 15px;font-weight:800}
.bloco ul{margin:0;padding:0;list-style:none;display:grid;gap:8px 22px;
  grid-template-columns:repeat(auto-fit,minmax(196px,1fr))}
.bloco li{font-size:14.5px;display:flex;gap:9px;align-items:flex-start}
.bloco li::before{content:"";width:5px;height:5px;background:var(--tijolo);
  margin-top:9px;flex:0 0 auto}

.painel{position:sticky;top:94px;border:1px solid var(--linha);overflow:hidden}
.painel .cabeca{background:var(--preto);color:#fff;padding:20px 22px}
.painel .cabeca .rotulo{font-size:10.5px;text-transform:uppercase;
  letter-spacing:.14em;color:rgba(255,255,255,.6);font-weight:700}
.painel .cabeca .valor{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;font-size:31px;
  font-weight:700;line-height:1.18;letter-spacing:-.01em}
.painel .cabeca .mes{font-size:15px;font-weight:600;color:rgba(255,255,255,.7)}
.painel .conteudo{padding:18px 22px 22px}
.painel .linha{display:flex;justify-content:space-between;gap:12px;
  padding:9px 0;font-size:14.5px;border-bottom:1px solid var(--linha)}
.painel .linha:last-of-type{border-bottom:0}
.painel .linha .r{color:var(--fraco)}
.painel .linha .v{font-weight:700;text-align:right}
.botao{display:flex;align-items:center;justify-content:center;gap:9px;
  padding:14px;font-size:12.5px;font-weight:800;letter-spacing:.1em;
  text-transform:uppercase;margin-top:11px;background:var(--tijolo);color:#fff}
.botao:hover{background:var(--tijolo-e)}
.botao.zap{background:#1faa54}
.botao.zap:hover{background:#178f45}
.botao.claro{background:#fff;color:var(--tinta);
  box-shadow:inset 0 0 0 1px var(--linha)}
.botao.claro:hover{background:#f5f5f3}
.nota{font-size:12.5px;color:var(--fraco);margin-top:14px;line-height:1.45}

/* --------------------------------------------------------------- contato */
.cartao-contato{border:1px solid var(--linha);padding:28px;max-width:580px;
  margin-bottom:54px}
.cartao-contato .item{display:flex;gap:15px;padding:15px 0;
  border-bottom:1px solid var(--linha);align-items:flex-start}
.cartao-contato .item:last-child{border-bottom:0}
.cartao-contato .ic{width:21px;height:21px;flex:0 0 auto;margin-top:2px;
  fill:none;stroke:var(--tijolo);stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.cartao-contato .r{font-size:10.5px;text-transform:uppercase;
  letter-spacing:.14em;color:var(--fraco);font-weight:800}
.cartao-contato .v{font-size:16.5px}
.cartao-contato .v:hover{color:var(--tijolo)}

/* ---------------------------------------------------------------- rodapé */
/* Claro. Era preto (#111) e, com o cabeçalho já branco, virava o bloco mais
   pesado da página — foi o que sobrou da reclamação de 28/08/2026. O vermelho
   da marca segura o topo dele; a informação é pouca e não precisa de contraste
   invertido para ser lida. */
footer.rodape{background:var(--faixa);color:var(--fraco);
  padding:40px 0 30px;margin-top:auto;font-size:14px;
  border-top:3px solid var(--marca)}
footer.rodape .wrap{display:grid;gap:26px;
  grid-template-columns:repeat(auto-fit,minmax(226px,1fr))}
footer.rodape strong{color:var(--tinta);display:block;margin-bottom:9px;
  font-size:11px;text-transform:uppercase;letter-spacing:.14em}
footer.rodape a{color:var(--tinta)}
footer.rodape a:hover{color:var(--tijolo)}
footer.rodape .logo-pe img{width:2cm;height:auto;margin-bottom:10px}
footer.rodape .logo-pe .nome{display:block;font-size:19px;font-weight:800;
  letter-spacing:.03em;text-transform:uppercase;color:var(--tinta);
  margin-bottom:2px}
footer.rodape .logo-pe .nome{display:flex;flex-direction:column-reverse;
  align-items:flex-start}
footer.rodape .logo-pe .nome small{display:block;font-size:6.5px;
  font-weight:700;color:var(--tijolo);margin-bottom:2px;
  --kicker-ls:.469em;
  letter-spacing:var(--kicker-ls);
  margin-right:calc(-1 * var(--kicker-ls))}
footer.rodape .logo-pe .endereco{display:block;margin-top:8px}
.creditos{border-top:1px solid var(--linha);margin-top:30px;
  padding-top:18px;font-size:12.5px;color:#9aa09a;line-height:1.7}
.creditos a{text-decoration:underline;color:#8a908a}
.creditos a:hover{color:var(--tijolo)}

@media(max-width:700px){
  /* no celular o texto ocupa a largura toda, então o véu tem de ser parelho —
     o degradê da esquerda deixaria o fim das linhas em cima da casa clara */
  .capa{padding-top:24px}
  /* no celular o cabeçalho é fixo no topo e o menu quebra para baixo: com a
     logo em 2cm ele comia 126px dos 812px da tela */
  .marca img{width:1.4cm}
  .marca .creci{font-size:7.5px;letter-spacing:.06em}
  /* a razao entre as duas linhas tem de ser a mesma do computador (13/40),
     senao o espacamento em `em` deixa de igualar as larguras */
  .marca .nome{font-size:28px}
  /* 1,9px a mais que o computador: em tamanho pequeno o arredondamento de
     subpixel do navegador come parte do espacamento */
  .marca .nome small{font-size:9.1px;margin-bottom:2px;--kicker-ls:.471em}
  .capa{padding-top:28px}
  .capa h1{font-size:23px}
  header.topo .wrap{min-height:62px;gap:12px}
  /* no celular o menu desce inteiro e vira uma fila que rola, em vez de
     quebrar em duas alturas e empurrar a página para baixo */
  nav.menu{order:3;width:100%;margin:0;justify-content:flex-start;
    flex-wrap:nowrap;overflow-x:auto;border-top:1px solid var(--linha);
    padding-top:4px;gap:0}
  nav.menu a{padding:8px 14px 8px 0;align-items:flex-start;text-align:left;
    flex:0 0 auto}
  nav.menu a b{font-size:14px}
  nav.menu a small{font-size:10.5px}
  .botao-zap{margin-left:auto;padding:9px 16px 9px 9px;font-size:13px}
  .botao-zap .bolha{width:26px;height:26px}
  .busca .campo{flex:1 1 46%;border-bottom:1px solid var(--linha)}
  .busca .campo:nth-child(2n){border-right:0}
  .busca .limpar{flex:1 1 100%;border-bottom:0}
  .busca button{width:100%}
  .grade{grid-template-columns:1fr;gap:18px}
  .painel h1{font-size:21px}
  .palco{aspect-ratio:4/3;border-radius:11px}   /* no celular cabe mais alto */
  .palco .seta{width:38px;height:38px;font-size:22px}
  .selo-foto{top:11px;right:11px;font-size:11.5px;padding:5px 12px}
  .tira .mini{flex:0 0 92px;height:66px}
  .dados dd{font-size:14px}
  .ordenar{margin-left:0;width:100%}
}
@media print{
  header.topo,nav.menu,.busca,.botao,.ordenar,footer.rodape{display:none !important}
}


/* ======================================================================
   A PÁGINA INICIAL — refeita em 28/08/2026

   A home não é catálogo: é foto, busca e uns poucos destaques. Quem quer o
   catálogo inteiro clica em "Ver todos os imóveis", que leva a /imoveis/.
   ====================================================================== */

/* A capa da home leva a foto de volta — mas ao lado do texto, num painel de
   cantos arredondados, e não como fundo escurecido atrás de letra branca.
   É assim que o imobiliariamiami.com.br faz: o título é texto escuro sobre
   claro, e a foto é um elemento da página, não o fundo dela. */
.capa-home{padding:56px 0 52px}
/* A foto ocupa menos que a metade: o texto é o assunto da home, ela é o
   apoio. Estava 1fr 1fr (669px de foto em 1440) e o Alexandre pediu menor em
   28/08/2026. Para mudar de tamanho, é só esta linha. */
.capa-home>.wrap{display:grid;gap:48px;grid-template-columns:1.35fr .95fr;
  align-items:center}
.capa-home .dizeres{max-width:560px}
.capa-home .retrato{border-radius:14px;overflow:hidden;aspect-ratio:4/3;
  box-shadow:0 18px 46px rgba(0,0,0,.16)}
.capa-home .retrato img{width:100%;height:100%;object-fit:cover;display:block}
.capa-home h1{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;font-size:42px;
  line-height:1.08;letter-spacing:-.01em;color:var(--tinta)}
.capa-home p{font-size:16.5px;margin-bottom:26px;color:var(--fraco)}
.chamada-botao{display:inline-block;background:var(--tijolo);color:#fff;
  padding:15px 30px;border-radius:9px;font-size:14px;font-weight:700;
  letter-spacing:.05em;margin-bottom:44px}
.chamada-botao:hover{background:var(--tijolo-e)}

/* A caixa de busca monta em cima da divisa entre a foto e o branco — é o
   jeito de ela ser a primeira coisa que a pessoa vê depois da chamada. */
.faixa-busca{background:linear-gradient(to bottom,var(--faixa) 46px,#fff 46px)}
.caixa-busca{background:#fff;border:1px solid var(--linha);border-radius:12px;
  box-shadow:0 12px 34px rgba(0,0,0,.12);padding:8px 8px 14px;
  transform:translateY(-32px)}
.caixa-busca .contrato{display:flex;gap:4px;padding:6px 8px 10px;
  border-bottom:1px solid var(--linha);margin-bottom:12px}
.caixa-busca .contrato input{position:absolute;opacity:0;pointer-events:none}
.caixa-busca .contrato span{display:block;padding:9px 22px;border-radius:8px;
  font-size:13.5px;font-weight:700;color:var(--fraco);cursor:pointer;
  letter-spacing:.03em}
.caixa-busca .contrato label:hover span{background:#f3f3f1;color:var(--tinta)}
.caixa-busca .contrato input:checked+span{background:var(--preto);color:#fff}
.caixa-busca .campos{display:flex;flex-wrap:wrap;gap:0;align-items:stretch;
  padding:0 8px}
.caixa-busca .campo{flex:1 1 190px;display:flex;flex-direction:column;
  min-width:0;padding:4px 16px;border-right:1px solid var(--linha)}
.caixa-busca .campo label{font-size:10px;font-weight:700;color:var(--fraco);
  text-transform:uppercase;letter-spacing:.12em;margin-bottom:3px}
.caixa-busca .campo select{border:0;background:transparent;font-family:inherit;
  font-size:15px;font-weight:600;color:var(--tinta);padding:3px 0;width:100%}
.caixa-busca .campo select:focus{outline:none;color:var(--tijolo)}
.caixa-busca button{flex:0 0 auto;margin-left:16px;border:0;cursor:pointer;
  font-family:inherit;background:var(--tijolo);color:#fff;font-size:13px;
  font-weight:700;letter-spacing:.06em;padding:15px 30px;border-radius:9px}
.caixa-busca button:hover{background:var(--tijolo-e)}

.secao-destaques{padding:14px 0 10px}
.titulo-secao{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;
  margin-bottom:20px}
.titulo-secao h2{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;font-size:26px;margin:0;
  letter-spacing:-.005em;font-weight:700}
.titulo-secao a{margin-left:auto;font-size:13px;font-weight:700;
  color:var(--tijolo);letter-spacing:.03em}
.titulo-secao a:hover{color:var(--tijolo-e)}

.chamada-final{background:#f7f7f5;border-top:1px solid var(--linha);
  padding:48px 0 52px;text-align:center}
.chamada-final h2{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;font-size:24px;
  margin:0 0 20px;font-weight:700}
.chamada-final p{margin:0 0 22px;color:var(--fraco);font-size:15px}
.chamada-final .chamada-botao{margin-bottom:0;font-size:17px;padding:14px 34px}

@media(max-width:700px){
  .capa-home{padding:28px 0 30px}
  .capa-home>.wrap{grid-template-columns:1fr;gap:24px}
  .capa-home .retrato{aspect-ratio:16/9}
  .capa-home h1{font-size:29px}
  .capa-home p{font-size:15px;margin-bottom:22px}
  .chamada-botao{margin-bottom:30px;padding:13px 24px}
  .faixa-busca{background:#fff}
  .caixa-busca{transform:none;margin-top:-18px}
  .caixa-busca .campo{flex:1 1 100%;border-right:0;
    border-bottom:1px solid var(--linha);padding:8px 16px}
  .caixa-busca button{width:calc(100% - 32px);margin:12px 16px 0}
  .titulo-secao h2{font-size:20px}
  .titulo-secao a{margin-left:0;width:100%}
}


/* ------------------------------------------------------- bolha do WhatsApp */
.zap-flutuante{position:fixed;right:20px;bottom:20px;z-index:50;
  display:flex;align-items:center;gap:10px;
  background:#25d366;color:#fff;padding:13px 20px 13px 16px;border-radius:40px;
  font-size:14.5px;font-weight:700;letter-spacing:.01em;
  box-shadow:0 6px 22px rgba(0,0,0,.22);transition:transform .16s,background .16s}
.zap-flutuante:hover{background:#1fbb59;transform:translateY(-2px)}
.zap-flutuante svg{flex:0 0 auto}
@media(max-width:700px){
  /* no celular só o ícone: a bolha com texto cobre o preço do card */
  .zap-flutuante{right:14px;bottom:14px;padding:14px;gap:0}
  .zap-flutuante span{display:none}
}
@media print{.zap-flutuante{display:none !important}}


/* ======================================================================
   RESULTADOS DA BUSCA — no desenho do imobiliariamiami.com.br (28/08/2026)

   Só em lista — o seletor lista/galeria foi tirado a pedido do Alexandre em
   28/08/2026. A grade de cards continua servindo aos destaques da home.
   ====================================================================== */
.titulo-resultado{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:38px;font-weight:800;letter-spacing:-.02em;margin:2px 0 20px;
  color:var(--tinta)}

.ferramentas{display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  border:1px solid var(--linha);border-radius:12px;padding:14px 18px;
  margin-bottom:22px;background:#fff}
.ferramentas .ordenar{margin-left:auto}

.resultados{display:flex;flex-direction:column;gap:14px;padding-bottom:48px}
/* PRECISA existir: `.linha` tem display:flex, que vence o display:none que o
   navegador dá ao atributo [hidden] — sem esta linha o filtro marca e nada
   some da tela. Foi o que aconteceu em 27/08/2026 com os cards. */
.linha[hidden]{display:none}

/* ---- a linha ---- */
.linha{display:flex;gap:20px;align-items:stretch;position:relative;
  border:1px solid var(--linha);border-radius:12px;padding:14px;background:#fff;
  transition:border-color .15s,box-shadow .15s}
.linha:hover{border-color:#c9cac5;box-shadow:0 4px 16px rgba(0,0,0,.07)}
.linha .retratinho{position:relative;flex:0 0 168px;height:118px;
  border-radius:9px;overflow:hidden;background:#e7e9e4;display:grid;
  place-items:center}
.linha .retratinho img{width:100%;height:100%;object-fit:cover}
.linha .retratinho .sem-foto{font-size:30px;color:#a8b0a9}
.linha .corpo{flex:1;min-width:0;display:flex;flex-direction:column;gap:9px}
.linha h3{margin:0;font-size:17px;font-weight:700;color:var(--tijolo-e);
  line-height:1.25}
.linha:hover h3{text-decoration:underline}
.linha .miolo{display:flex;align-items:center;gap:22px;flex-wrap:wrap;
  flex:1}
.linha .valor-bloco{display:flex;flex-direction:column;min-width:158px;
  padding-right:22px;border-right:1px solid var(--linha)}
.linha .valor-bloco .rotulo{font-size:10.5px;font-weight:700;color:var(--fraco);
  text-transform:uppercase;letter-spacing:.11em}
.linha .valor-bloco .valor{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:23px;font-weight:800;color:var(--tinta);line-height:1.15;
  letter-spacing:-.01em}
.linha .valor-bloco .extra{font-size:11.5px;color:var(--fraco);margin-top:2px}
.linha .atributos{display:flex;gap:26px;flex-wrap:wrap;margin:0;flex:1}
.linha .atributos>div{min-width:74px}
.linha .atributos dt{font-size:11.5px;color:var(--fraco);
  display:flex;align-items:center;gap:5px;margin-bottom:3px}
/* Traço, não preenchimento: os ícones são desenhados na hora, com a cor do
   texto ao lado. Sem `fill:none` o SVG sai como uma mancha preta. */
.linha .atributos dt .ic{width:15px;height:15px;flex:0 0 auto;
  fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;opacity:.75}
.linha .atributos dd{margin:0;font-size:15px;font-weight:700;color:var(--tinta)}
.linha .mais{flex:0 0 auto;background:#f4f5f7;color:var(--tijolo-e);
  border-radius:9px;padding:14px 22px;font-size:13.5px;font-weight:700;
  line-height:1.3;align-self:center;white-space:nowrap}
.linha:hover .mais{background:var(--tijolo);color:#fff}
/* cor explícita, e não `currentColor`: o SVG não estava herdando a cor do
   botão e a seta saía preta ao lado do texto vermelho */

.tag-linha{position:absolute;top:0;left:14px;transform:translateY(-50%);
  background:var(--tijolo);color:#fff;font-size:9.5px;font-weight:800;
  letter-spacing:.13em;text-transform:uppercase;padding:4px 10px;
  border-radius:20px}
.tag-linha.venda{background:var(--sol);color:#191919}
.cod-linha{position:absolute;top:10px;right:14px;font-size:11px;
  color:#a8aca6;font-variant-numeric:tabular-nums}

@media(max-width:900px){
  .titulo-resultado{font-size:27px}
  .linha{flex-wrap:wrap;gap:14px}
  .linha .retratinho{flex:0 0 100%;height:180px}
  .linha .miolo{gap:14px}
  .linha .valor-bloco{border-right:0;padding-right:0;min-width:0;flex:1 1 100%;
    border-bottom:1px solid var(--linha);padding-bottom:9px}
  .linha .atributos{gap:18px}
  .linha .mais{flex:1 1 100%;padding:12px;justify-content:center}
  .ferramentas{gap:12px}
  .ferramentas .ordenar{margin-left:0;width:100%}
}


/* ---------------------------------------------------- a janela do mapa ---- */
.janela-mapa{border:0;border-radius:14px;padding:0;width:min(92vw,760px);
  box-shadow:0 24px 70px rgba(0,0,0,.35);overflow:hidden}
.janela-mapa::backdrop{background:rgba(0,0,0,.55)}
.janela-mapa .cabeca{display:flex;align-items:center;gap:10px;
  padding:15px 18px;border-bottom:1px solid var(--linha)}
.janela-mapa .cabeca strong{font-family:'Bricolage','Segoe UI',system-ui,sans-serif;
  font-size:18px;font-weight:800}
.janela-mapa .cabeca span{color:var(--fraco);font-size:13.5px}
.janela-mapa .cabeca button{margin-left:auto;border:0;background:#f1f2ef;
  width:34px;height:34px;border-radius:50%;font-size:22px;line-height:1;
  cursor:pointer;color:var(--fraco)}
.janela-mapa .cabeca button:hover{background:var(--tijolo);color:#fff}
.janela-mapa .moldura{position:relative;aspect-ratio:16/10;background:#eceee9}
.janela-mapa .moldura iframe{width:100%;height:100%;border:0;display:block}
/* o Leaflet precisa de altura declarada no elemento onde ele se monta */
.janela-mapa .moldura .leaflet-container{width:100%;height:100%;
  background:#eceee9;font:inherit}
.janela-mapa .carregando{position:absolute;inset:0;display:grid;
  place-items:center;color:var(--fraco);font-size:13.5px}
.aviso-mapa{margin:0;padding:13px 18px;font-size:12.5px;color:var(--fraco);
  line-height:1.5;background:var(--faixa)}
.aviso-mapa a{color:var(--azul-mini);text-decoration:underline}
@media(max-width:700px){
  .janela-mapa .moldura{aspect-ratio:1/1}
}
