/**
 * Due Imobiliária — folha principal.
 *
 * Linguagem visual no padrão dos grandes portais (Loft): fundo branco, laranja
 * de marca reservado às ações, verde para links de navegação editorial, cartões
 * sem moldura e tipografia de peso alto com tracking negativo.
 *
 * Cores, fonte e raio chegam como variáveis injetadas pelo Personalizador
 * (inc/core/customizer.php). O que está aqui são apenas os padrões, para o
 * tema funcionar mesmo sem nenhuma opção salva.
 *
 * O modo escuro é derivado: [data-tema="escuro"] no <html>, gravado em
 * LocalStorage. O claro é sempre o ponto de partida — a preferência do
 * sistema não decide por quem visita, só o botão decide.
 */

/* ---------------------------------------------------------------- tokens -- */

:root {
	/* Verde-represa da Chris&Leo. Trocável no Personalizador, que recalcula as variantes. */
	--cor-principal: #0f5563;
	--cor-principal-rgb: 15, 85, 99;
	--cor-principal-forte: #0b424d;
	--cor-secundaria: #a8813f;
	--cor-secundaria-rgb: 168, 129, 63;
	--cor-secundaria-forte: #836431;

	/* Sucesso tem cor própria: verde é convenção, não identidade da marca. */
	--cor-sucesso: #12855c;
	--cor-sucesso-rgb: 18, 133, 92;
	--cor-titulo: #13272c;
	--raio: 12px;
	--fonte: "Manrope", system-ui, -apple-system, sans-serif;
	/* Títulos de seção e capas. A serifa fica nos títulos; o texto corrido segue sem serifa. */
	--fonte-display: "Fraunces", Georgia, "Times New Roman", serif;

	--fundo: #ffffff;
	--fundo-alt: #f4f6f5;
	--superficie: #ffffff;
	--superficie-alt: #f5f1ea;
	--texto: #191f23;
	--texto-suave: #5f6a72;
	--texto-tenue: #8b9299;
	--borda: #e4e7eb;
	--borda-forte: #cfd4da;

	/* Faixa do topo: o verde da marca, escurecido. */
	--hero-de: #0c4652;
	--hero-para: #06262d;

	--sombra-sm: 0 1px 2px rgba(25, 31, 35, 0.06), 0 1px 3px rgba(25, 31, 35, 0.04);
	--sombra: 0 4px 12px rgba(25, 31, 35, 0.07), 0 2px 4px rgba(25, 31, 35, 0.04);
	--sombra-lg: 0 18px 46px rgba(25, 31, 35, 0.14), 0 4px 10px rgba(25, 31, 35, 0.06);

	--raio-sm: calc(var(--raio) * 0.62);
	--raio-botao: 6px;
	--raio-cartao: calc(var(--raio) * 2);
	--raio-pill: 999px;

	--e1: 0.25rem;
	--e2: 0.5rem;
	--e3: 0.75rem;
	--e4: 1rem;
	--e5: 1.5rem;
	--e6: 2rem;
	--e7: 3rem;
	--e8: 4.5rem;
	--e9: 6.5rem;

	/*
	 * Diz ao navegador em que mundo ele está. Sem isto, num sistema em modo
	 * escuro, os controles nativos (select, campo de data, barra de rolagem)
	 * viriam escuros dentro de uma página clara.
	 */
	color-scheme: light;

	--envelope: 75rem;
	--transicao: 200ms cubic-bezier(0.16, 1, 0.3, 1);
	--cabecalho-altura: 6rem;
	/* Altura da barra do WordPress. Zero para quem não está logado. */
	--barra-admin: 0px;
}

/*
 * A barra do WordPress é fixa no topo da janela; o cabeçalho é sticky e vai
 * para o topo do documento. Sem este recuo, ao rolar a página o cabeçalho
 * desliza por baixo da barra e a marca aparece cortada.
 *
 * As medidas são as do próprio WordPress: 32px acima de 782px de largura,
 * 46px abaixo disso. Até 600px a barra deixa de ser fixa e rola junto com a
 * página, então o recuo volta a zero.
 *
 * A classe fica no <body>, mas o scroll-padding é do <html>: daí o :has(), que
 * leva a medida um nível acima. Navegador sem :has() ignora a regra e volta ao
 * comportamento de antes — a âncora para um pouco alta, nada quebra.
 */
html:has(body.admin-bar),
body.admin-bar {
	--barra-admin: 32px;
}

@media screen and (max-width: 782px) {
	html:has(body.admin-bar),
	body.admin-bar {
		--barra-admin: 46px;
	}
}

@media screen and (max-width: 600px) {
	html:has(body.admin-bar),
	body.admin-bar {
		--barra-admin: 0px;
	}
}

[data-tema="escuro"] {
	color-scheme: dark;

	--hero-de: #0a3a44;
	--hero-para: #041a1f;

	--fundo: #101418;
	--fundo-alt: #161b20;
	--superficie: #191f25;
	--superficie-alt: #212831;
	--texto: #e8ecef;
	--texto-suave: #a7b0b7;
	--texto-tenue: #7b858d;
	--borda: #29313a;
	--borda-forte: #3a444e;
	--cor-titulo: #f3f6f8;

	--hero-de: #0a3a44;
	--hero-para: #041a1f;

	--sombra-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
	--sombra: 0 4px 14px rgba(0, 0, 0, 0.45);
	--sombra-lg: 0 16px 40px rgba(0, 0, 0, 0.55);
}

/* -------------------------------------------------------------- alicerce -- */

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
	/*
	 * O menu do celular fica estacionado fora da tela, à direita, esperando o
	 * toque. Estacionado é posição real: sem cortar aqui, o documento ganha
	 * uma rolagem lateral do tamanho do painel em toda página do site.
	 *
	 * clip e não hidden: hidden transformaria o <html> em contêiner de
	 * rolagem e o cabeçalho grudado pararia de grudar. clip apenas corta.
	 * Navegador sem suporte fica com o hidden da linha acima.
	 */
	overflow-x: hidden;
	overflow-x: clip;
	scroll-padding-top: calc(var(--barra-admin) + var(--cabecalho-altura) + 1rem);
}

body {
	margin: 0;
	background: var(--fundo);
	color: var(--texto);
	font-family: var(--fonte);
	font-size: 1rem;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	transition: background var(--transicao), color var(--transicao);
}

img {
	max-width: 100%;
	height: auto;
	display: block;
}

/*
 * Tamanho padrão de qualquer ícone do tema. Specificity baixa de propósito:
 * cada componente redefine o seu tamanho e vence esta regra.
 */
.icone {
	width: 1.15em;
	height: 1.15em;
	flex: none;
	vertical-align: -0.18em;
}

a {
	color: inherit;
	text-underline-offset: 0.2em;
}

button {
	font-family: inherit;
}

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
	outline: 2px solid var(--cor-principal);
	outline-offset: 2px;
	border-radius: 4px;
}

h1,
h2,
h3,
h4 {
	margin: 0;
	color: var(--cor-titulo);
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.025em;
	text-wrap: balance;
}

p {
	margin: 0 0 var(--e4);
}

p:last-child {
	margin-bottom: 0;
}

.envelope {
	width: min(100% - 2.5rem, var(--envelope));
	margin-inline: auto;
}

.pular-para-conteudo {
	position: absolute;
	left: -9999px;
	z-index: 200;
	padding: var(--e3) var(--e4);
	background: var(--cor-principal);
	color: #fff;
	border-radius: 0 0 var(--raio-sm) 0;
}

.pular-para-conteudo:focus {
	left: 0;
	top: 0;
}

.so-leitor {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* ---------------------------------------------------------------- botões -- */

.botao {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--e2);
	padding: 0.75rem 1.25rem;
	border: 1px solid transparent;
	border-radius: var(--raio-botao);
	background: var(--cor-principal);
	color: #fff;
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1.2;
	text-decoration: none;
	cursor: pointer;
	transition: background var(--transicao), border-color var(--transicao), color var(--transicao);
}

.botao:hover {
	background: var(--cor-principal-forte);
}

.botao:disabled {
	opacity: 0.6;
	cursor: progress;
}

.botao--destaque {
	background: var(--cor-secundaria);
}

.botao--destaque:hover {
	background: var(--cor-secundaria-forte);
}

.botao--contorno {
	background: transparent;
	border-color: var(--borda-forte);
	color: var(--texto);
}

.botao--contorno:hover {
	background: var(--superficie-alt);
	border-color: var(--texto-tenue);
	color: var(--texto);
}

.botao--fantasma {
	background: transparent;
	color: var(--cor-principal-forte);
	padding-inline: 0;
}

.botao--fantasma:hover {
	background: transparent;
	text-decoration: underline;
}

.botao--bloco {
	width: 100%;
}

.botao--grande {
	padding: 0.9rem 1.75rem;
	font-size: 1rem;
}

.botao--pequeno {
	padding: 0.45rem 0.9rem;
	font-size: 0.8125rem;
}

.botao svg {
	width: 1.15em;
	height: 1.15em;
	flex: none;
}

.acao-centro {
	display: flex;
	justify-content: center;
	margin-top: var(--e6);
}

/* --------------------------------------------------------------- rótulos -- */

.tag {
	display: inline-flex;
	align-items: center;
	gap: 0.35em;
	padding: 0.3rem 0.65rem;
	border-radius: var(--raio-botao);
	background: var(--superficie-alt);
	color: var(--texto-suave);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.01em;
	line-height: 1.3;
}

.tag--principal {
	background: rgba(var(--cor-principal-rgb), 0.12);
	color: var(--cor-principal-forte);
}

.tag--destaque {
	background: var(--cor-principal);
	color: #fff;
}

.tag--verde {
	background: rgba(var(--cor-secundaria-rgb), 0.14);
	color: var(--cor-secundaria-forte);
}

.tag--vendido,
.tag--alugado {
	background: var(--superficie-alt);
	color: var(--texto-tenue);
}

.tag--reservado {
	background: #fcf3e4;
	color: #8a5700;
}

[data-tema="escuro"] .tag--reservado {
	background: rgba(217, 152, 42, 0.16);
	color: #e0a94a;
}

/* ------------------------------------------------------------- cabeçalho -- */

.cabecalho {
	position: sticky;
	top: var(--barra-admin);
	z-index: 100;
	background: var(--fundo);
	border-bottom: 1px solid var(--borda);
	/* O painel do mega menu escapa para fora; nada aqui pode recortá-lo. */
	overflow: visible;
}

/*
 * Três colunas em vez de uma linha: a do meio recebe o menu e fica centrada na
 * página, independente da largura do logo. Com flex, um logo mais largo empurrava
 * o menu para a direita.
 */
.cabecalho__interno {
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: var(--e4);
	min-height: var(--cabecalho-altura);
	/* A faixa cresce se precisar; nada aqui pode recortar a marca. */
	overflow: visible;
}

.marca {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	text-decoration: none;
	flex: none;
	color: var(--cor-principal);
	/* Sem isto, um logo mais alto que a linha do cabeçalho aparece cortado. */
	padding-block: var(--e2);
}

.marca__simbolo {
	width: 2.25rem;
	height: 2.25rem;
	flex: none;
}

/*
 * Logo em imagem: a altura manda, a largura acompanha a proporção.
 *
 * Duas travas, cada uma para um problema:
 *
 * O clamp resolve a largura. Este logo é quase três vezes mais largo que alto,
 * então 5rem de altura viravam 14rem de largura; somados ao menu e às ações,
 * passavam de 1.070px, mais do que cabe numa tela de 1.024px.
 *
 * O max-height resolve o corte. A altura da imagem precisa caber na linha do
 * cabeçalho descontado o respiro de cima e de baixo — senão a imagem fica mais
 * alta que a faixa e aparece cortada, que é o que acontecia com o cabeçalho
 * fixo durante a rolagem.
 */
.marca__logo {
	height: clamp(2.75rem, 4.6vw, 4.25rem);
	max-height: calc(var(--cabecalho-altura) - 1.25rem);
	width: auto;
	max-width: 20rem;
	object-fit: contain;
	display: block;
}

.marca--imagem {
	gap: 0;
}

.marca__texto {
	display: flex;
	flex-direction: column;
}

.marca__nome {
	font-size: 1.1875rem;
	font-weight: 800;
	letter-spacing: -0.03em;
	color: var(--cor-titulo);
	line-height: 1.15;
}

.marca__descricao {
	font-size: 0.6875rem;
	color: var(--texto-tenue);
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.custom-logo-link {
	display: block;
	flex: none;
	margin-right: var(--e4);
}

.custom-logo {
	max-height: 2.5rem;
	width: auto;
}

.navegacao {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var(--e5);
	min-width: 0;
}

.navegacao__lista {
	display: flex;
	align-items: center;
	gap: var(--e5);
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: 0.9375rem;
	font-weight: 500;
}

.navegacao__lista li {
	position: relative;
}

.navegacao__lista a {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
	text-decoration: none;
	color: var(--texto);
	transition: color var(--transicao);
	white-space: nowrap;
}

.navegacao__lista a:hover,
.navegacao__lista .current-menu-item > a,
.navegacao__lista .current-menu-parent > a {
	color: var(--cor-principal-forte);
}

/* Submenu: abre no hover e no foco por teclado. */
.navegacao__lista .menu-item-has-children > a::after {
	content: "";
	width: 0.5rem;
	height: 0.5rem;
	border-right: 1.5px solid currentColor;
	border-bottom: 1.5px solid currentColor;
	transform: translateY(-2px) rotate(45deg);
}

.navegacao__lista .sub-menu {
	position: absolute;
	top: calc(100% + 0.75rem);
	left: -0.75rem;
	z-index: 20;
	min-width: 13rem;
	margin: 0;
	padding: var(--e2);
	list-style: none;
	background: var(--superficie);
	border: 1px solid var(--borda);
	border-radius: var(--raio-sm);
	box-shadow: var(--sombra-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity var(--transicao), transform var(--transicao), visibility var(--transicao);
}

/* Mesma razão do mega menu: no celular quem manda é o toque, não o foco. */
@media (min-width: 68.0625rem) {
	.navegacao__lista li:hover > .sub-menu,
	.navegacao__lista li:focus-within > .sub-menu {
		opacity: 1;
		visibility: visible;
		transform: translateY(0);
	}
}

.navegacao__lista .sub-menu a {
	display: block;
	padding: 0.5rem 0.65rem;
	border-radius: 4px;
	font-size: 0.875rem;
	color: var(--texto-suave);
}

.navegacao__lista .sub-menu a:hover {
	background: var(--superficie-alt);
	color: var(--cor-titulo);
}

.cabecalho__acoes {
	display: flex;
	align-items: center;
	gap: var(--e2);
}

.cabecalho__cta {
	display: inline-flex;
}

.icone-botao {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.5rem;
	height: 2.5rem;
	padding: 0;
	border: 1px solid transparent;
	border-radius: 50%;
	background: transparent;
	color: var(--texto-suave);
	cursor: pointer;
	transition: color var(--transicao), background var(--transicao);
}

.icone-botao:hover {
	color: var(--cor-principal-forte);
	background: var(--superficie-alt);
}

.icone-botao svg {
	width: 1.25rem;
	height: 1.25rem;
}

.icone-botao__contador {
	position: absolute;
	top: 1px;
	right: 1px;
	min-width: 1.1rem;
	height: 1.1rem;
	padding: 0 0.28rem;
	border-radius: var(--raio-pill);
	background: var(--cor-principal);
	color: #fff;
	font-size: 0.6875rem;
	font-weight: 700;
	line-height: 1.1rem;
	text-align: center;
}

.icone-botao__contador[hidden] {
	display: none;
}

/* O sol e a lua trocam conforme o tema, sem duplicar o botão. */
.tema-alternar .icone-lua {
	display: none;
}

[data-tema="escuro"] .tema-alternar .icone-lua {
	display: block;
}

[data-tema="escuro"] .tema-alternar .icone-sol {
	display: none;
}

.menu-alternar {
	display: none;
}

/* ---------------------------------------------------------- mega menu -- */

/*
 * O painel fica preso ao <li>, que é position:static para o absolute se medir
 * pelo cabeçalho e não pelo item — sem isso ele abriria com a largura de uma
 * palavra.
 */
.navegacao__lista > li {
	position: static;
}

/*
 * Cartão, e não faixa de ponta a ponta: alinhado à mesma largura do conteúdo
 * da página, encostado na linha do cabeçalho. A borda é o que diz onde o
 * painel termina — sem ela, num fundo claro, ele se confunde com a página
 * atrás. Em cima ela é dispensada: a borda do próprio cabeçalho já fecha
 * aquele lado, e repetir daria linha dupla.
 */
.megamenu {
	position: absolute;
	top: 100%;
	left: 50%;
	right: auto;
	width: min(var(--envelope), 100% - 2.5rem);
	z-index: 30;
	background: var(--superficie);
	border: 1px solid var(--borda);
	border-top: 0;
	border-radius: 0 0 var(--raio-cartao) var(--raio-cartao);
	overflow: hidden;
	box-shadow: 0 24px 48px -12px rgba(25, 31, 35, 0.18);
	opacity: 0;
	visibility: hidden;
	transform: translateX(-50%) translateY(-10px);
	transition: opacity 180ms ease, transform 180ms ease, visibility 180ms;
}

/*
 * Uma ponte invisível sobre a fresta entre o item e o painel: sem ela, o
 * ponteiro "sai" do menu no caminho e o painel fecha antes de ser alcançado.
 */
.megamenu::before {
	content: "";
	position: absolute;
	top: -0.75rem;
	left: 0;
	right: 0;
	height: 0.75rem;
}

/*
 * Só a partir do desktop. Sem a media query, o :focus-within disparava no
 * celular assim que o dedo tocava o link do menu, e o translateX(-50%) do
 * painel flutuante empurrava a lista meia largura para fora da tela — os
 * rótulos saíam cortados pela esquerda. A regra tem especificidade maior que
 * a do bloco do celular, então lá ela ganhava mesmo com transform: none.
 */
@media (min-width: 68.0625rem) {
	.navegacao__lista > li:hover > .megamenu,
	.navegacao__lista > li:focus-within > .megamenu {
		opacity: 1;
		visibility: visible;
		transform: translateX(-50%) translateY(0);
	}
}

/* Dentro do cartão o envelope não centraliza nada; vira respiro interno. */
.megamenu__interno {
	display: grid;
	grid-template-columns: minmax(0, 14rem) minmax(0, 1fr);
	gap: var(--e6);
	width: auto;
	padding-inline: var(--e6);
	padding-block: var(--e5) var(--e6);
	align-items: start;
	max-height: calc(100vh - var(--barra-admin) - var(--cabecalho-altura) - 2rem);
	overflow-y: auto;
}

.megamenu__olho {
	display: block;
	margin-bottom: var(--e4);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--texto-tenue);
}

.megamenu__links {
	padding-right: var(--e5);
	border-right: 1px solid var(--borda);
}

.megamenu__links ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 0.1rem;
}

.megamenu__links a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e2);
	padding: 0.6rem 0.7rem;
	border-radius: var(--raio-botao);
	font-size: 0.9375rem;
	font-weight: 500;
	line-height: 1.3;
	color: var(--texto);
	text-decoration: none;
	white-space: normal;
	transition: background var(--transicao), color var(--transicao);
}

.megamenu__links a svg {
	width: 1rem;
	height: 1rem;
	flex: none;
	opacity: 0;
	color: var(--cor-principal);
	transition: opacity var(--transicao), transform var(--transicao);
}

.megamenu__links a:hover {
	background: var(--superficie-alt);
	color: var(--cor-principal-forte);
}

.megamenu__links a:hover svg {
	opacity: 1;
	transform: translateX(3px);
}

.megamenu__imoveis {
	min-width: 0;
}

/*
 * Quatro colunas em vez de três: o painel mostra mais imóveis sem crescer, e
 * cada card fica do tamanho de uma amostra — o menu é para escolher o caminho,
 * não para navegar a carteira inteira.
 */
.megamenu__grade {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--e4) var(--e3);
}

.mega-card {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	text-decoration: none;
	color: inherit;
}

/*
 * A foto é amostra, não vitrine: o teto de altura impede que o painel vire
 * uma página inteira quando a coluna é larga. O recorte fica por conta do
 * object-fit, que preenche a caixa sem deformar.
 */
.mega-card__figura {
	display: block;
	width: 100%;
	aspect-ratio: 16 / 10;
	max-height: 6.5rem;
	border-radius: var(--raio-sm);
	overflow: hidden;
	background: var(--superficie-alt);
}

.mega-card__imagem {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 400ms cubic-bezier(0.16, 1, 0.3, 1);
}

.mega-card:hover .mega-card__imagem {
	transform: scale(1.06);
}

.mega-card__dados {
	display: flex;
	flex-direction: column;
	gap: 0.15rem;
	min-width: 0;
}

.mega-card__preco {
	font-size: 0.875rem;
	font-weight: 700;
	color: var(--cor-titulo);
	letter-spacing: -0.02em;
}

/* O link do menu não quebra linha; o título do card precisa quebrar. */
.mega-card__titulo {
	white-space: normal;
	font-size: 0.75rem;
	color: var(--texto-suave);
	line-height: 1.3;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.mega-card__attrs {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-top: 0.1rem;
	font-size: 0.6875rem;
	color: var(--texto-tenue);
}

.mega-card__attrs span {
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
}

.mega-card__attrs svg {
	width: 0.8rem;
	height: 0.8rem;
}

.megamenu__todos {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
	margin-top: var(--e5);
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--cor-principal-forte);
	text-decoration: none;
}

.megamenu__todos svg {
	width: 1rem;
	height: 1rem;
	transition: transform var(--transicao);
}

.megamenu__todos:hover svg {
	transform: translateX(3px);
}

/* ------------------------------------------------------------------ hero -- */

.hero {
	position: relative;
	background: linear-gradient(105deg, var(--hero-de) 0%, var(--hero-para) 100%);
	padding-block: var(--e6) var(--e7);
	overflow: hidden;
}

/* Grafismos da marca ao fundo, no lugar da foto de campanha. */
.hero::before,
.hero::after {
	content: "";
	position: absolute;
	border-radius: 50%;
	pointer-events: none;
}

.hero::before {
	top: -8rem;
	right: 6%;
	width: 26rem;
	height: 26rem;
	background: radial-gradient(circle at 35% 35%, rgba(255, 255, 255, 0.16), transparent 62%);
}

.hero::after {
	bottom: -14rem;
	right: -6rem;
	width: 32rem;
	height: 32rem;
	background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0.18), transparent 65%);
}

.hero__interno {
	position: relative;
	z-index: 1;
	display: grid;
	/* A busca é o que traz o visitante; a foto acompanha, não disputa. */
	grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
	align-items: center;
	gap: var(--e6);
}

.hero__cartao {
	background: var(--superficie);
	border-radius: var(--raio-cartao);
	box-shadow: var(--sombra-lg);
	padding: var(--e6);
}

.hero__titulo {
	font-size: clamp(1.875rem, 3.6vw, 2.5rem);
	font-weight: 800;
	margin-bottom: var(--e3);
}

.hero__subtitulo {
	font-size: 0.9375rem;
	color: var(--texto-suave);
	margin-bottom: var(--e5);
}

/*
 * Foto do destaque à direita, na mesma altura do cartão de busca. A moldura
 * arredondada e a sombra a descolam da faixa laranja, como o recorte de
 * campanha dos grandes portais.
 */
.hero__figura {
	position: relative;
	margin: 0;
	align-self: stretch;
	min-height: 22rem;
	border-radius: var(--raio-cartao);
	overflow: hidden;
	box-shadow: var(--sombra-lg);
	background: rgba(0, 0, 0, 0.12);
}

.hero__figura img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}

/*
 * Véu quente só na borda que encosta na faixa, para a foto não parecer colada
 * por cima. No miolo a imagem fica limpa — céu azul contra laranja é contraste
 * que ajuda, não atrapalha.
 */
.hero__figura::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(115deg, rgba(var(--cor-principal-rgb), 0.55) 0%, rgba(var(--cor-principal-rgb), 0.18) 34%, transparent 62%);
	pointer-events: none;
}

.hero__numeros {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
	gap: var(--e5);
	margin-top: var(--e6);
	padding-top: var(--e5);
	border-top: 1px solid rgba(255, 255, 255, 0.22);
	color: #fff;
}

.hero__numero {
	display: block;
	font-size: 1.75rem;
	font-weight: 800;
	letter-spacing: -0.03em;
	line-height: 1.1;
}

.hero__numero-rotulo {
	display: block;
	margin-top: 0.15rem;
	font-size: 0.8125rem;
	color: rgba(255, 255, 255, 0.8);
	max-width: 18rem;
}

/* Busca do hero. */
.busca-hero {
	text-align: left;
}

/*
 * A finalidade é uma taxonomia: o cliente pode cadastrar quantos termos quiser.
 * A linha rola no eixo horizontal em vez de vazar o cartão branco.
 */
.busca-hero__abas {
	display: flex;
	gap: var(--e5);
	margin-bottom: var(--e4);
	border-bottom: 1px solid var(--borda);
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
}

.busca-hero__abas::-webkit-scrollbar {
	display: none;
}

.busca-hero__aba {
	position: relative;
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	flex: none;
	padding: 0 0 0.7rem;
	border: 0;
	background: transparent;
	color: var(--texto-tenue);
	font-size: 0.9375rem;
	font-weight: 600;
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--transicao);
}

.busca-hero__aba svg {
	width: 1.1rem;
	height: 1.1rem;
}

.busca-hero__aba::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -1px;
	height: 3px;
	border-radius: 3px 3px 0 0;
	background: transparent;
	transition: background var(--transicao);
}

.busca-hero__aba:hover {
	color: var(--texto);
}

.busca-hero__aba.esta-ativa {
	color: var(--cor-titulo);
}

.busca-hero__aba.esta-ativa::after {
	background: var(--cor-principal);
}

/* Linha principal: campo colado ao botão, como no portal de referência. */
.busca-hero__linha {
	display: flex;
	gap: var(--e2);
	align-items: stretch;
}

.busca-hero__linha .busca-auto {
	flex: 1;
	min-width: 0;
}

.busca-hero__linha .controle {
	height: 100%;
}

.busca-hero__campos {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--e3) var(--e2);
	margin-top: var(--e4);
}

.busca-hero__campos .campo__rotulo {
	margin-bottom: 0.25rem;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}

.busca-hero__campos .controle {
	padding-block: 0.6rem;
	font-size: 0.875rem;
}

/* Comodidades como pastilhas, na largura toda do cartão. */
.busca-hero__extras {
	display: flex;
	flex-wrap: wrap;
	gap: var(--e2);
	margin-top: var(--e4);
	padding-top: var(--e4);
	border-top: 1px solid var(--borda);
}

.busca-hero__extras .filtros__check {
	font-size: 0.8125rem;
	padding: 0.4rem 0.8rem;
}

@media (max-width: 68rem) {
	.busca-hero__campos {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 34rem) {
	.busca-hero__campos {
		grid-template-columns: 1fr 1fr;
	}
}

.busca-hero__rodape {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e3);
	margin-top: var(--e4);
	font-size: 0.8125rem;
	color: var(--texto-tenue);
	flex-wrap: wrap;
}

.busca-hero__rodape a {
	color: var(--cor-secundaria-forte);
	font-weight: 600;
	text-decoration: none;
}

.busca-hero__rodape a:hover {
	text-decoration: underline;
}

/* -------------------------------------------------------------- controles -- */

.campo__rotulo {
	display: block;
	margin-bottom: 0.3rem;
	font-size: 0.75rem;
	font-weight: 600;
	color: var(--texto-tenue);
	letter-spacing: 0.02em;
}

.controle {
	width: 100%;
	padding: 0.72rem 0.85rem;
	border: 1px solid var(--borda-forte);
	border-radius: var(--raio-botao);
	background: var(--superficie);
	color: var(--texto);
	font-family: inherit;
	font-size: 0.9375rem;
	transition: border-color var(--transicao), box-shadow var(--transicao);
}

.controle::placeholder {
	color: var(--texto-tenue);
}

.controle:focus {
	outline: none;
	border-color: var(--cor-principal);
	box-shadow: 0 0 0 3px rgba(var(--cor-principal-rgb), 0.15);
}

select.controle {
	appearance: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b9299' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.6rem center;
	background-size: 1.1rem;
	padding-right: 2.2rem;
}

/* ---------------------------------------------------------------- seções -- */

.secao {
	padding-block: var(--e8);
}

.secao--curta {
	padding-block: var(--e7);
}

.secao--alt {
	background: var(--fundo-alt);
}

.secao__cabecalho {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: var(--e5);
	margin-bottom: var(--e6);
	flex-wrap: wrap;
}

.secao__cabecalho--centro {
	flex-direction: column;
	align-items: center;
	text-align: center;
	margin-bottom: var(--e5);
}

.secao__olho {
	display: block;
	margin-bottom: var(--e2);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--texto-tenue);
}

.secao__titulo {
	font-size: clamp(1.625rem, 3.4vw, 2.375rem);
	font-weight: 800;
}

.secao__cabecalho--centro .secao__descricao {
	margin-inline: auto;
}

.secao__descricao {
	color: var(--texto-suave);
	margin: var(--e2) 0 0;
	max-width: 46ch;
}

.secao__link {
	color: var(--cor-secundaria-forte);
	font-weight: 600;
	font-size: 0.9375rem;
	text-decoration: none;
	white-space: nowrap;
}

.secao__link:hover {
	text-decoration: underline;
}

/* ---------------------------------------------------------------- abas -- */

.abas {
	display: flex;
	gap: var(--e5);
	margin-bottom: var(--e5);
	border-bottom: 1px solid var(--borda);
	overflow-x: auto;
	scrollbar-width: none;
}

.abas::-webkit-scrollbar {
	display: none;
}

.abas__item {
	position: relative;
	padding: 0 0 0.7rem;
	border: 0;
	background: transparent;
	color: var(--texto-suave);
	font-size: 0.875rem;
	font-weight: 600;
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--transicao);
}

.abas__item::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -1px;
	height: 3px;
	border-radius: 3px 3px 0 0;
	background: transparent;
	transition: background var(--transicao);
}

.abas__item:hover {
	color: var(--texto);
}

.abas__item.esta-ativa {
	color: var(--cor-titulo);
}

.abas__item.esta-ativa::after {
	background: var(--cor-principal);
}

/* ------------------------------------------------------------- atalhos -- */

.atalhos {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
	gap: var(--e4);
}

.atalho {
	display: flex;
	flex-direction: column;
	gap: var(--e3);
	padding: var(--e5);
	border-radius: var(--raio);
	background: var(--superficie-alt);
	text-decoration: none;
	transition: background var(--transicao), transform var(--transicao);
}

.atalho:hover {
	background: rgba(var(--cor-principal-rgb), 0.08);
	transform: translateY(-2px);
}

.atalho__icone {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.75rem;
	height: 2.75rem;
	border-radius: var(--raio-sm);
	background: rgba(var(--cor-principal-rgb), 0.14);
	color: var(--cor-principal-forte);
}

.atalho:nth-child(2n) .atalho__icone {
	background: rgba(var(--cor-secundaria-rgb), 0.14);
	color: var(--cor-secundaria-forte);
}

.atalho__icone svg {
	width: 1.4rem;
	height: 1.4rem;
}

.atalho__titulo {
	font-size: 1rem;
	font-weight: 700;
	color: var(--cor-titulo);
	line-height: 1.35;
}

.atalho__texto {
	font-size: 0.8125rem;
	color: var(--texto-suave);
	margin: 0;
}

.atalho__mais {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e2);
	margin-top: auto;
	padding-top: var(--e4);
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--cor-titulo);
}

.atalho__mais svg {
	width: 1.1rem;
	height: 1.1rem;
	color: var(--texto-suave);
	transition: transform var(--transicao);
}

.atalho:hover .atalho__mais svg {
	transform: translateX(3px);
}

/* ------------------------------------------------------------ categorias -- */

.categorias {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
	gap: var(--e3);
}

.categoria {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--e2);
	padding: var(--e5) var(--e3);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
	text-decoration: none;
	text-align: center;
	transition: border-color var(--transicao), background var(--transicao);
}

.categoria:hover {
	border-color: var(--cor-principal);
	background: rgba(var(--cor-principal-rgb), 0.04);
}

.categoria svg {
	width: 1.75rem;
	height: 1.75rem;
	color: var(--cor-principal);
}

.categoria__nome {
	font-weight: 600;
	font-size: 0.9375rem;
	color: var(--cor-titulo);
}

.categoria__contagem {
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

/* ------------------------------------------------------------------ card -- */

.grade-imoveis {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(15.5rem, 1fr));
	gap: var(--e5) var(--e4);
}

.card {
	position: relative;
	display: flex;
	flex-direction: column;
	background: transparent;
}

/* Carrossel de fotos dentro do card. */
.card__figura {
	position: relative;
	margin: 0 0 var(--e3);
	aspect-ratio: 4 / 3;
	background: var(--superficie-alt);
	border-radius: var(--raio-sm);
	overflow: hidden;
}

.card__trilho {
	display: flex;
	height: 100%;
	transition: transform 380ms cubic-bezier(0.16, 1, 0.3, 1);
}

.card__slide {
	flex: 0 0 100%;
	height: 100%;
}

.card__imagem {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.card__seta {
	position: absolute;
	top: 50%;
	z-index: 3;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.9rem;
	height: 1.9rem;
	padding: 0;
	transform: translateY(-50%);
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.94);
	color: var(--cor-titulo);
	box-shadow: var(--sombra-sm);
	cursor: pointer;
	opacity: 0;
	transition: opacity var(--transicao), background var(--transicao);
}

.card__seta svg {
	width: 1rem;
	height: 1rem;
}

.card__seta--anterior {
	left: var(--e2);
}

.card__seta--proximo {
	right: var(--e2);
}

.card:hover .card__seta,
.card__seta:focus-visible {
	opacity: 1;
}

.card__seta[disabled] {
	opacity: 0 !important;
	pointer-events: none;
}

.card__pontos {
	position: absolute;
	left: 0;
	right: 0;
	bottom: var(--e2);
	z-index: 3;
	display: flex;
	justify-content: center;
	gap: 0.3rem;
	pointer-events: none;
}

.card__ponto {
	width: 0.36rem;
	height: 0.36rem;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.55);
	transition: background var(--transicao), transform var(--transicao);
}

.card__ponto.esta-ativo {
	background: #fff;
	transform: scale(1.25);
}

.card__selos {
	position: absolute;
	top: var(--e2);
	left: var(--e2);
	z-index: 2;
	display: flex;
	flex-wrap: wrap;
	gap: var(--e1);
	max-width: calc(100% - 1rem);
}

.card__selos .tag {
	background: rgba(255, 255, 255, 0.95);
	color: var(--cor-titulo);
	box-shadow: var(--sombra-sm);
	font-size: 0.6875rem;
	padding: 0.25rem 0.5rem;
}

.card__selos .tag--destaque {
	background: var(--cor-principal);
	color: #fff;
}

.card__corpo {
	display: flex;
	flex-direction: column;
	flex: 1;
	gap: 0.35rem;
}

.card__tipo {
	font-size: 0.75rem;
	color: var(--texto-tenue);
	margin: 0;
	line-height: 1.2;
}

.card__linha-preco {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--e2);
}

.card__preco {
	display: flex;
	align-items: baseline;
	gap: var(--e2);
	flex-wrap: wrap;
	min-width: 0;
	margin: 0;
	font-size: 1.125rem;
	font-weight: 700;
	color: var(--cor-titulo);
	letter-spacing: -0.02em;
	font-variant-numeric: tabular-nums;
}

/* O valor nunca quebra entre o "R$" e o número, por mais estreito que fique. */
.card__preco > span:first-child {
	white-space: nowrap;
}

.card__preco-periodo {
	font-size: 0.8125rem;
	font-weight: 500;
	color: var(--texto-tenue);
	letter-spacing: 0;
}

.card__preco-antigo {
	font-size: 0.8125rem;
	font-weight: 500;
	color: var(--texto-tenue);
	text-decoration: line-through;
}

.card__preco-encargo {
	font-size: 0.75rem;
	color: var(--texto-tenue);
	margin: 0;
}

.card__titulo {
	font-size: 0.875rem;
	font-weight: 500;
	letter-spacing: 0;
	color: var(--texto-suave);
	line-height: 1.4;
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.card__titulo a {
	text-decoration: none;
}

.card__titulo a::after {
	/* Área clicável cobre o card inteiro sem aninhar links. */
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
}

.card__local {
	font-size: 0.8125rem;
	color: var(--texto-suave);
	margin: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.card__atributos {
	display: flex;
	flex-wrap: wrap;
	gap: var(--e3);
	list-style: none;
	margin: 0.15rem 0 0;
	padding: 0;
	font-size: 0.8125rem;
	color: var(--texto-suave);
}

.card__atributos li {
	display: flex;
	align-items: center;
	gap: 0.25rem;
}

.card__atributos svg {
	width: 0.95rem;
	height: 0.95rem;
	color: var(--texto-tenue);
	flex: none;
}

.card__acoes {
	position: relative;
	display: flex;
	gap: var(--e1);
	flex: none;
	z-index: 2;
}

.card__acao {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.9rem;
	height: 1.9rem;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--texto-suave);
	cursor: pointer;
	transition: color var(--transicao), background var(--transicao);
}

.card__acao:hover {
	background: var(--superficie-alt);
	color: var(--cor-principal);
}

.card__acao svg {
	width: 1.15rem;
	height: 1.15rem;
}

.card__acao.esta-ativo {
	color: var(--cor-principal);
}

.card__acao.esta-ativo svg {
	fill: currentColor;
}

.card__rodape {
	margin-top: var(--e3);
	position: relative;
	z-index: 2;
}

.card__contato {
	width: 100%;
}

/* -------------------------------------------------------------- banners -- */

/*
 * O trilho põe os grupos lado a lado, um por tela, e desliza. Sem recorte, os
 * grupos que estão fora da vez continuam ocupando espaço no documento e o site
 * inteiro ganha rolagem lateral — o carrossel dos cards já recortava, estes
 * dois tinham ficado de fora.
 */
.banners {
	position: relative;
	overflow: hidden;
}

.banners__trilho {
	display: flex;
	transition: transform 460ms cubic-bezier(0.16, 1, 0.3, 1);
}

.banners__grupo {
	flex: 0 0 100%;
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--e4);
	padding-inline: 1px;
}

.banner {
	display: flex;
	flex-direction: column;
	text-decoration: none;
	color: inherit;
}

/* Proporção da arte de feed: a peça aparece inteira, sem corte. */
.banner__figura {
	margin: 0 0 var(--e3);
	aspect-ratio: 4 / 5;
	border-radius: var(--raio);
	overflow: hidden;
	background: var(--superficie-alt);
}

.banner__imagem {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1);
}

.banner:hover .banner__imagem {
	transform: scale(1.03);
}

.banner__conteudo {
	display: flex;
	flex-direction: column;
	gap: 0.2rem;
}

.banner__titulo {
	font-size: 1.0625rem;
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--cor-titulo);
	line-height: 1.3;
}

.banner__subtitulo {
	font-size: 0.8125rem;
	color: var(--texto-suave);
}

.banner__acao {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
	margin-top: var(--e2);
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--cor-principal-forte);
}

.banner__acao svg {
	width: 1rem;
	height: 1rem;
	transition: transform var(--transicao);
}

.banner:hover .banner__acao svg {
	transform: translateX(3px);
}

.banners__pontos {
	display: flex;
	justify-content: center;
	gap: 0.4rem;
	margin-top: var(--e4);
}

.banners__pontos .card__ponto {
	width: 0.5rem;
	height: 0.5rem;
	background: var(--borda-forte);
}

.banners__pontos .card__ponto.esta-ativo {
	background: var(--cor-principal);
}

.banners .card__seta {
	opacity: 0;
	background: var(--superficie);
	border: 1px solid var(--borda);
	top: 40%;
}

.banners:hover .card__seta,
.banners .card__seta:focus-visible {
	opacity: 1;
}

.banners .card__seta--anterior {
	left: -0.75rem;
}

.banners .card__seta--proximo {
	right: -0.75rem;
}

/* ------------------------------------------------------------ avaliações -- */

.avaliacoes {
	position: relative;
	overflow: hidden;
}

.avaliacoes__trilho {
	display: flex;
	transition: transform 460ms cubic-bezier(0.16, 1, 0.3, 1);
}

.avaliacoes__grupo {
	flex: 0 0 100%;
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--e4);
	padding-inline: 1px;
}

.avaliacao {
	display: flex;
	flex-direction: column;
	gap: var(--e3);
	margin: 0;
	padding: var(--e5);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
}

.avaliacao__texto {
	margin: 0;
	font-size: 0.9375rem;
	line-height: 1.7;
	color: var(--texto-suave);
	quotes: "“" "”";
}

.avaliacao__texto::before {
	content: open-quote;
}

.avaliacao__texto::after {
	content: close-quote;
}

.avaliacao__pessoa {
	display: flex;
	align-items: center;
	gap: var(--e3);
	margin-top: auto;
	padding-top: var(--e3);
	border-top: 1px solid var(--borda);
}

.avaliacao__foto {
	width: 2.75rem;
	height: 2.75rem;
	border-radius: 50%;
	object-fit: cover;
	flex: none;
}

.avaliacao__nome {
	display: block;
	font-weight: 700;
	font-size: 0.9375rem;
	color: var(--cor-titulo);
}

.avaliacao__meta {
	display: block;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

.avaliacao__origem {
	margin-left: auto;
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--texto-tenue);
	flex: none;
}

.estrelas {
	display: inline-flex;
	gap: 0.1rem;
	vertical-align: -0.2em;
}

.estrela {
	width: 1rem;
	height: 1rem;
	color: var(--borda-forte);
}

.estrela--cheia {
	color: #f5a623;
	fill: currentColor;
}

.avaliacoes__resumo {
	display: inline-flex;
	align-items: center;
	gap: var(--e2);
	flex-wrap: wrap;
	justify-content: center;
}

.avaliacoes__pontos {
	display: flex;
	justify-content: center;
	gap: 0.4rem;
	margin-top: var(--e4);
}

.avaliacoes__pontos .card__ponto {
	width: 0.5rem;
	height: 0.5rem;
	background: var(--borda-forte);
}

.avaliacoes__pontos .card__ponto.esta-ativo {
	background: var(--cor-principal);
}

.avaliacoes .card__seta {
	opacity: 0;
	background: var(--superficie);
	border: 1px solid var(--borda);
}

.avaliacoes:hover .card__seta,
.avaliacoes .card__seta:focus-visible {
	opacity: 1;
}

.avaliacoes .card__seta--anterior {
	left: -0.75rem;
}

.avaliacoes .card__seta--proximo {
	right: -0.75rem;
}

/* ------------------------------------------------------------ parceiros -- */

/* Quatro por linha no desktop; a lista fica legível e a logo cresce. */
.parceiros {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--e4);
	align-items: stretch;
}

@media (max-width: 60rem) {
	.parceiros {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

@media (max-width: 40rem) {
	.parceiros {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.parceiro {
	display: flex;
	align-items: center;
	justify-content: center;
	text-decoration: none;
	padding: var(--e4);
	border: 1px solid var(--borda);
	border-radius: var(--raio-sm);
	background: var(--superficie);
	transition: border-color var(--transicao), transform var(--transicao);
}

.parceiro:hover {
	border-color: var(--borda-forte);
	transform: translateY(-2px);
}

.parceiro__logo {
	max-width: 100%;
	max-height: 3.75rem;
	width: auto;
	object-fit: contain;
	/* Logo colorido em fundo branco vira ruído; a cor volta no hover. */
	filter: grayscale(1);
	opacity: 0.72;
	transition: filter var(--transicao), opacity var(--transicao);
}

.parceiro:hover .parceiro__logo {
	filter: none;
	opacity: 1;
}

/* Construtora sem logo utilizável entra como marca escrita. */
.parceiro__nome {
	font-size: 0.9375rem;
	font-weight: 700;
	letter-spacing: -0.01em;
	color: var(--texto-suave);
	text-align: center;
	line-height: 1.25;
}

.parceiro:hover .parceiro__nome {
	color: var(--cor-principal-forte);
}

[data-tema="escuro"] .parceiro__logo {
	filter: grayscale(1) invert(1) brightness(1.6);
}

[data-tema="escuro"] .parceiro:hover .parceiro__logo {
	filter: invert(1) brightness(1.6);
}

/* --------------------------------------------------------------- equipe -- */

/* Três por linha no desktop: o cartão fica largo o bastante para o telefone. */
.equipe {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--e4);
}

@media (max-width: 62rem) {
	.equipe {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 40rem) {
	.equipe {
		grid-template-columns: 1fr;
	}
}

.equipe__item {
	display: flex;
	align-items: center;
	gap: var(--e3);
	padding: var(--e4);
	border-radius: var(--raio);
	background: var(--superficie);
	border: 1px solid var(--borda);
}

.equipe__foto {
	width: 3.5rem;
	height: 3.5rem;
	border-radius: 50%;
	object-fit: cover;
	flex: none;
}

.equipe__dados {
	min-width: 0;
	flex: 1;
}

.equipe__nome {
	font-size: 0.9375rem;
	margin-bottom: 0.1rem;
}

.equipe__nome a {
	text-decoration: none;
}

.equipe__creci,
.equipe__telefone {
	margin: 0;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

.equipe__telefone a {
	color: inherit;
	text-decoration: none;
}

/* Botão de WhatsApp: verde do app, não o verde da marca — é um selo conhecido. */
.botao-whats {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.4rem;
	flex: none;
	padding: 0.5rem 0.85rem;
	border-radius: var(--raio-botao);
	background: #25d366;
	color: #0b2c17;
	font-size: 0.8125rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--transicao);
}

.botao-whats:hover {
	background: #1eb455;
}

.botao-whats svg {
	width: 1.1rem;
	height: 1.1rem;
}

.botao-whats--bloco {
	width: 100%;
	padding-block: 0.7rem;
	font-size: 0.9375rem;
}

/* ------------------------------------------------------------ curadoria -- */

.selecao {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
	gap: var(--e5) var(--e4);
}

.selecao__item {
	display: flex;
	flex-direction: column;
	gap: var(--e3);
	text-decoration: none;
}

.selecao__figura {
	position: relative;
	margin: 0;
	aspect-ratio: 4 / 3;
	border-radius: var(--raio-sm);
	overflow: hidden;
	background: var(--superficie-alt);
}

.selecao__figura img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1);
}

.selecao__item:hover .selecao__figura img {
	transform: scale(1.05);
}

/* Sem foto cadastrada, o ícone da comodidade preenche o quadro. */
.selecao__marca {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: linear-gradient(140deg, rgba(var(--cor-principal-rgb), 0.16), rgba(var(--cor-secundaria-rgb), 0.16));
	color: var(--cor-principal-forte);
}

.selecao__marca svg {
	width: 2.75rem;
	height: 2.75rem;
}

.selecao__titulo {
	font-size: 1rem;
	font-weight: 700;
	color: var(--cor-titulo);
}

.selecao__texto {
	font-size: 0.8125rem;
	color: var(--texto-suave);
	margin: 0;
}

/* ------------------------------------------------------------ links SEO -- */

.links-seo {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
	gap: var(--e5) var(--e4);
}

.links-seo__titulo {
	font-size: 0.875rem;
	font-weight: 700;
	color: var(--cor-titulo);
	margin-bottom: var(--e3);
}

.links-seo__lista {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 0.35rem;
}

.links-seo__lista a {
	font-size: 0.8125rem;
	color: var(--cor-secundaria-forte);
	text-decoration: none;
}

.links-seo__lista a:hover {
	text-decoration: underline;
}

/* ------------------------------------------------------------- catálogo -- */

.catalogo {
	padding-block: var(--e6) var(--e8);
}

.catalogo__topo {
	margin-bottom: var(--e5);
}

.catalogo__titulo {
	font-size: clamp(1.625rem, 4vw, 2.25rem);
	margin-bottom: var(--e2);
}

.catalogo__corpo {
	display: grid;
	grid-template-columns: 17rem minmax(0, 1fr);
	gap: var(--e6);
	align-items: start;
}

.filtros {
	position: sticky;
	top: calc(var(--barra-admin) + var(--cabecalho-altura) + 1rem);
	padding: var(--e5);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
}

.filtros__grupo {
	margin-bottom: var(--e4);
}

.filtros__par {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--e2);
}

.filtros__checks {
	display: flex;
	flex-wrap: wrap;
	gap: var(--e2);
}

.filtros__check {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.4rem 0.75rem;
	border: 1px solid var(--borda-forte);
	border-radius: var(--raio-pill);
	font-size: 0.8125rem;
	cursor: pointer;
	transition: border-color var(--transicao), background var(--transicao);
}

/* Quantos imóveis têm a característica, discreto ao lado do nome. */
.filtros__contagem {
	font-size: 0.6875rem;
	font-weight: 600;
	color: var(--texto-tenue);
}

.filtros__check:has(input:checked) .filtros__contagem {
	color: inherit;
}

.filtros__check input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.filtros__check:has(input:checked) {
	border-color: var(--cor-principal);
	background: rgba(var(--cor-principal-rgb), 0.1);
	color: var(--cor-principal-forte);
	font-weight: 600;
}

.filtros__check:has(input:focus-visible) {
	outline: 2px solid var(--cor-principal);
	outline-offset: 2px;
}

.filtros__acoes {
	display: flex;
	flex-direction: column;
	gap: var(--e2);
	margin-top: var(--e5);
}

.filtros__limpar {
	background: none;
	border: 0;
	color: var(--texto-tenue);
	font-size: 0.8125rem;
	cursor: pointer;
	text-decoration: underline;
}

.catalogo__resultados {
	min-height: 20rem;
}

.catalogo__barra {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e4);
	margin-bottom: var(--e4);
	flex-wrap: wrap;
}

.catalogo__contagem {
	font-size: 0.9375rem;
	color: var(--texto-suave);
}

.catalogo__contagem strong {
	color: var(--cor-titulo);
}

/* Estado de carregamento dos filtros AJAX. */
.catalogo__resultados.esta-carregando,
.grade-imoveis.esta-carregando {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 120ms linear;
}

.filtros-mobile {
	display: none;
}

.filtros__fechar {
	display: none;
}

/* --------------------------------------------------------- ficha imóvel -- */

.imovel__topo {
	padding-block: var(--e5) var(--e5);
}

.migalhas {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	margin: 0 0 var(--e3);
	font-size: 0.8125rem;
	color: var(--texto-tenue);
	list-style: none;
	padding: 0;
}

.migalhas a {
	color: var(--texto-suave);
	text-decoration: none;
}

.migalhas a:hover {
	color: var(--cor-principal-forte);
}

/* Trilha do Rank Math: links e o item atual soltos, com o separador entre eles. */
.migalhas .separator {
	color: var(--borda-forte);
}

.migalhas .last {
	color: var(--texto-tenue);
}

.imovel__cabecalho {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--e5);
	flex-wrap: wrap;
}

.imovel__titulo {
	font-size: clamp(1.75rem, 4vw, 2.375rem);
	margin-bottom: var(--e2);
}

.imovel__local {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	color: var(--texto-suave);
	margin: 0;
}

.imovel__local svg {
	width: 1.1rem;
	height: 1.1rem;
	color: var(--cor-principal);
}

.imovel__acoes {
	display: flex;
	gap: var(--e2);
}

/* Galeria: foto grande + duas menores, colapsa no mobile. */
.galeria {
	display: grid;
	grid-template-columns: 2fr 1fr;
	gap: var(--e2);
	margin-block: var(--e5);
	border-radius: var(--raio);
	overflow: hidden;
}

.galeria__principal,
.galeria__secundaria {
	position: relative;
	margin: 0;
	background: var(--superficie-alt);
	cursor: zoom-in;
	overflow: hidden;
}

.galeria__principal {
	aspect-ratio: 4 / 3;
}

.galeria__coluna {
	display: grid;
	grid-template-rows: 1fr 1fr;
	gap: var(--e2);
}

.galeria__secundaria {
	aspect-ratio: 4 / 3;
}

.galeria img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 400ms cubic-bezier(0.16, 1, 0.3, 1);
}

.galeria figure:hover img {
	transform: scale(1.03);
}

/*
 * Vídeo no lugar da foto principal. Vídeo de celular vem em pé: "contain"
 * mostra o quadro inteiro com faixas escuras, em vez de cortar a represa.
 */
.galeria__principal--video {
	background: #000;
	cursor: auto;
}

.galeria__principal--video video,
.galeria__principal--video iframe {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
	object-fit: contain;
}

.galeria--so-video {
	grid-template-columns: 1fr;
}

.galeria--so-video .galeria__principal {
	aspect-ratio: 16 / 9;
}

.tag--video svg {
	width: 0.95em;
	height: 0.95em;
}

.galeria__mais {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: rgba(25, 31, 35, 0.55);
	color: #fff;
	font-weight: 700;
	font-size: 1.125rem;
}

.imovel__corpo {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 21rem;
	gap: var(--e7);
	align-items: start;
	padding-bottom: var(--e8);
}

.bloco {
	margin-bottom: var(--e7);
}

.bloco__titulo {
	font-size: 1.375rem;
	margin-bottom: var(--e4);
}

.prosa {
	color: var(--texto-suave);
	line-height: 1.75;
}

.prosa > * + * {
	margin-top: var(--e4);
}

.prosa h2,
.prosa h3 {
	margin-top: var(--e6);
	color: var(--cor-titulo);
}

/* Ficha em grade de ícone + valor. */
.atributos {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
	gap: var(--e3);
	list-style: none;
	margin: 0;
	padding: 0;
}

.atributo {
	display: flex;
	align-items: center;
	gap: var(--e3);
	padding: var(--e3) var(--e4);
	border: 1px solid var(--borda);
	border-radius: var(--raio-sm);
	background: var(--superficie);
}

.atributo svg {
	width: 1.35rem;
	height: 1.35rem;
	color: var(--cor-principal);
	flex: none;
}

.atributo__valor {
	display: block;
	font-weight: 700;
	color: var(--cor-titulo);
	font-variant-numeric: tabular-nums;
}

.atributo__rotulo {
	display: block;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

.comodidades {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
	gap: var(--e2) var(--e4);
	list-style: none;
	margin: 0;
	padding: 0;
}

.comodidades li {
	display: flex;
	align-items: center;
	gap: var(--e2);
	font-size: 0.9375rem;
	color: var(--texto-suave);
}

.comodidades svg {
	width: 1.1rem;
	height: 1.1rem;
	color: var(--cor-secundaria);
	flex: none;
}

.mapa {
	border: 0;
	width: 100%;
	aspect-ratio: 16 / 9;
	border-radius: var(--raio);
	background: var(--superficie-alt);
}

.midia-incorporada {
	position: relative;
	aspect-ratio: 16 / 9;
	border-radius: var(--raio);
	overflow: hidden;
	background: #000;
}

.midia-incorporada iframe {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

/*
 * Vídeos gravados no celular vêm em pé. Em grade, dois ou três lado a lado
 * ocupam a largura sem que cada um vire uma coluna alta no meio da ficha.
 */
.videos-imovel {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
	gap: var(--e3);
}

.videos-imovel .midia-incorporada {
	grid-column: 1 / -1;
}

.videos-imovel__arquivo {
	width: 100%;
	max-height: 34rem;
	border-radius: var(--raio);
	background: #000;
}

/* ------------------------------------------------------------- lateral -- */

.imovel__lateral {
	position: sticky;
	top: calc(var(--barra-admin) + var(--cabecalho-altura) + 1rem);
	display: grid;
	gap: var(--e4);
}

.painel {
	padding: var(--e5);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
	box-shadow: var(--sombra-sm);
}

.painel__preco {
	display: flex;
	align-items: baseline;
	gap: var(--e2);
	flex-wrap: wrap;
	font-size: 1.75rem;
	font-weight: 800;
	color: var(--cor-titulo);
	letter-spacing: -0.03em;
	font-variant-numeric: tabular-nums;
	margin-bottom: var(--e2);
}

.painel__preco-antigo {
	font-size: 1rem;
	font-weight: 500;
	color: var(--texto-tenue);
	text-decoration: line-through;
}

.painel__encargos {
	list-style: none;
	margin: 0 0 var(--e4);
	padding: var(--e3) 0 0;
	border-top: 1px solid var(--borda);
	font-size: 0.875rem;
}

.painel__encargos li {
	display: flex;
	justify-content: space-between;
	gap: var(--e3);
	padding-block: 0.2rem;
	color: var(--texto-suave);
}

.painel__encargos strong {
	color: var(--texto);
	font-variant-numeric: tabular-nums;
}

.painel__botoes {
	display: grid;
	gap: var(--e2);
}

.painel__codigo {
	margin: var(--e3) 0 0;
	text-align: center;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

/* Cartão do corretor. */
.painel--corretor {
	border-color: var(--cor-principal);
	box-shadow: 0 0 0 1px rgba(var(--cor-principal-rgb), 0.14), var(--sombra-sm);
}

.painel__olho {
	display: block;
	margin-bottom: var(--e3);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--texto-tenue);
}

.painel--corretor .botao-whats,
.painel--corretor .botao {
	margin-top: var(--e2);
}

.corretor-cartao {
	display: flex;
	align-items: center;
	gap: var(--e3);
	margin-bottom: var(--e4);
}

.corretor-cartao img {
	width: 3.25rem;
	height: 3.25rem;
	border-radius: 50%;
	object-fit: cover;
	flex: none;
}

.corretor-cartao__nome {
	font-weight: 700;
	color: var(--cor-titulo);
	text-decoration: none;
}

.corretor-cartao__creci {
	display: block;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

/* ------------------------------------------------------------ corretores -- */

.grade-corretores {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
	gap: var(--e5);
}

.corretor-card {
	padding: var(--e5);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
	text-align: center;
	transition: border-color var(--transicao), box-shadow var(--transicao);
}

.corretor-card:hover {
	border-color: var(--borda-forte);
	box-shadow: var(--sombra);
}

.corretor-card img {
	width: 5.5rem;
	height: 5.5rem;
	border-radius: 50%;
	object-fit: cover;
	margin: 0 auto var(--e3);
}

.corretor-card__nome {
	font-size: 1.0625rem;
	margin-bottom: 0.15rem;
}

.corretor-card__nome a {
	text-decoration: none;
}

.corretor-card__cargo {
	font-size: 0.8125rem;
	color: var(--texto-tenue);
	margin: 0 0 var(--e3);
}

.corretor-card .botao-whats {
	margin-bottom: var(--e3);
}

.corretor-card__redes {
	display: flex;
	justify-content: center;
	gap: var(--e2);
}

.corretor-card__redes a {
	color: var(--texto-tenue);
	transition: color var(--transicao);
}

.corretor-card__redes a:hover {
	color: var(--cor-principal-forte);
}

.corretor-card__redes svg {
	width: 1.1rem;
	height: 1.1rem;
}

/* ------------------------------------------------------------ formulário -- */

.formulario {
	display: grid;
	gap: var(--e3);
}

.formulario__linha {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--e3);
}

.formulario textarea.controle {
	resize: vertical;
	min-height: 6rem;
}

.formulario__aviso {
	padding: var(--e3) var(--e4);
	border-radius: var(--raio-sm);
	font-size: 0.875rem;
}

.formulario__aviso--ok {
	background: rgba(var(--cor-sucesso-rgb), 0.12);
	color: var(--cor-sucesso);
}

.formulario__aviso--erro {
	background: rgba(200, 45, 45, 0.12);
	color: #c22d2d;
}

[data-tema="escuro"] .formulario__aviso--erro {
	color: #ef8080;
}

[data-tema="escuro"] .formulario__aviso--ok {
	color: #5fd3b0;
}

.formulario__consentimento {
	display: flex;
	align-items: flex-start;
	gap: var(--e2);
	font-size: 0.8125rem;
	color: var(--texto-tenue);
}

/* Campo isca contra robôs: sai da tela mas continua no DOM. */
.formulario__isca {
	position: absolute;
	left: -9999px;
	opacity: 0;
}

/* Faixa de chamada com formulário, no fim da home. */
.chamada {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 24rem);
	gap: var(--e7);
	align-items: center;
	padding: var(--e7);
	border-radius: var(--raio-cartao);
	background: var(--superficie-alt);
}

.chamada__titulo {
	font-size: clamp(1.5rem, 3vw, 2rem);
	font-weight: 800;
	margin-bottom: var(--e3);
}

.chamada__lista {
	list-style: none;
	margin: var(--e4) 0 0;
	padding: 0;
	display: grid;
	gap: var(--e2);
	font-size: 0.9375rem;
	color: var(--texto-suave);
}

.chamada__lista li {
	display: flex;
	align-items: flex-start;
	gap: var(--e2);
}

.chamada__lista svg {
	width: 1.1rem;
	height: 1.1rem;
	color: var(--cor-secundaria);
	flex: none;
	margin-top: 0.2rem;
}

.chamada__caixa {
	padding: var(--e5);
	border-radius: var(--raio);
	background: var(--superficie);
	box-shadow: var(--sombra);
}

/* ------------------------------------------------------------- lightbox -- */

.lightbox {
	position: fixed;
	inset: 0;
	z-index: 300;
	display: none;
	align-items: center;
	justify-content: center;
	background: rgba(8, 12, 14, 0.94);
	padding: var(--e5);
}

.lightbox.esta-aberto {
	display: flex;
}

.lightbox__figura {
	margin: 0;
	max-width: min(72rem, 100%);
	max-height: 100%;
}

.lightbox__figura img {
	max-height: 78vh;
	width: auto;
	margin-inline: auto;
	border-radius: var(--raio-sm);
}

.lightbox__legenda {
	margin-top: var(--e3);
	text-align: center;
	color: rgba(255, 255, 255, 0.7);
	font-size: 0.875rem;
}

.lightbox__fechar,
.lightbox__anterior,
.lightbox__proximo {
	position: absolute;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.75rem;
	height: 2.75rem;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
	cursor: pointer;
	transition: background var(--transicao);
}

.lightbox__fechar:hover,
.lightbox__anterior:hover,
.lightbox__proximo:hover {
	background: rgba(255, 255, 255, 0.28);
}

.lightbox__fechar {
	top: var(--e4);
	right: var(--e4);
}

.lightbox__anterior {
	left: var(--e4);
}

.lightbox__proximo {
	right: var(--e4);
}

.lightbox svg {
	width: 1.35rem;
	height: 1.35rem;
}

/* ----------------------------------------------------------- comparador -- */

.comparador {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9375rem;
}

.comparador th,
.comparador td {
	padding: var(--e3) var(--e4);
	border-bottom: 1px solid var(--borda);
	text-align: left;
	vertical-align: top;
}

.comparador thead th {
	background: var(--superficie);
}

.comparador tbody th {
	font-weight: 600;
	color: var(--texto-tenue);
	font-size: 0.8125rem;
	white-space: nowrap;
}

.comparador img {
	border-radius: var(--raio-sm);
	margin-bottom: var(--e2);
}

.tabela-rolagem {
	overflow-x: auto;
}

/* Barra flutuante do comparador. */
.barra-comparar {
	position: fixed;
	left: 50%;
	bottom: var(--e4);
	transform: translateX(-50%) translateY(150%);
	z-index: 120;
	display: flex;
	align-items: center;
	gap: var(--e4);
	padding: var(--e3) var(--e4);
	border-radius: var(--raio-pill);
	background: var(--cor-titulo);
	color: #fff;
	box-shadow: var(--sombra-lg);
	transition: transform var(--transicao);
}

[data-tema="escuro"] .barra-comparar {
	background: var(--superficie-alt);
	border: 1px solid var(--borda-forte);
}

.barra-comparar.esta-visivel {
	transform: translateX(-50%) translateY(0);
}

.barra-comparar__texto {
	font-size: 0.875rem;
	font-weight: 600;
}

/*
 * A barra é escura, e o botão de contorno herdava o cinza-quase-preto do texto
 * padrão: o "Limpar" aparecia como um retângulo vazio. Aqui ele vira contorno
 * claro, que é o que o fundo pede.
 */
.barra-comparar .botao--contorno {
	border-color: rgba(255, 255, 255, 0.4);
	background: transparent;
	color: #fff;
}

.barra-comparar .botao--contorno:hover {
	border-color: #fff;
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
}

/* ----------------------------------------------------------- mapa busca -- */

.catalogo__acoes {
	display: flex;
	gap: var(--e2);
	align-items: center;
}

.mapa-busca {
	margin-bottom: var(--e5);
}

.mapa-busca__tela {
	height: min(70vh, 34rem);
	border-radius: var(--raio);
	border: 1px solid var(--borda);
	overflow: hidden;
	background: var(--superficie-alt);
	/* O Leaflet cria pilhas próprias; sem isto o popup passa por baixo. */
	isolation: isolate;
}

.mapa-busca__aviso {
	margin: var(--e3) 0 0;
	font-size: 0.8125rem;
	color: var(--texto-suave);
}

/* Alfinete com o preço: o dado que decide se vale clicar. */
.mapa-pino {
	width: auto !important;
	height: auto !important;
	margin: 0 !important;
}

.mapa-pino span {
	display: inline-block;
	transform: translate(-50%, -100%);
	padding: 0.3rem 0.55rem;
	border-radius: var(--raio-pill);
	background: var(--cor-principal);
	color: #fff;
	font-size: 0.75rem;
	font-weight: 700;
	white-space: nowrap;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.28);
}

.mapa-cartao {
	display: block;
	width: 12rem;
	text-decoration: none;
	color: var(--texto);
}

.mapa-cartao img {
	width: 100%;
	height: 6.5rem;
	object-fit: cover;
	border-radius: var(--raio-sm);
	margin-bottom: 0.4rem;
}

.mapa-cartao__preco {
	display: block;
	font-size: 0.9375rem;
	font-weight: 700;
	color: var(--cor-titulo);
}

.mapa-cartao__titulo {
	display: block;
	font-size: 0.8125rem;
	line-height: 1.3;
	color: var(--texto-suave);
}

.mapa-cartao__local,
.mapa-cartao__nota {
	display: block;
	font-size: 0.6875rem;
	color: var(--texto-tenue);
}

.mapa-cartao__nota {
	margin-top: 0.25rem;
	font-style: italic;
}

/* --------------------------------------------------------------- alerta -- */

.alerta {
	margin-top: var(--e4);
	padding: var(--e4);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--fundo-alt);
}

.alerta__titulo {
	margin: 0 0 0.4rem;
	font-size: 1rem;
	font-weight: 700;
	color: var(--cor-titulo);
}

.alerta__texto {
	margin: 0 0 var(--e3);
	font-size: 0.8125rem;
	line-height: 1.5;
	color: var(--texto-suave);
}

.alerta__linha {
	display: flex;
	gap: var(--e2);
	align-items: stretch;
}

.alerta__linha .controle {
	flex: 1;
	min-width: 0;
}

.alerta__nota {
	margin: var(--e3) 0 0;
	font-size: 0.6875rem;
	line-height: 1.45;
	color: var(--texto-tenue);
}

/* Comodidades separadas por grupo, com subtítulo discreto. */
.comodidades__grupo + .comodidades__grupo {
	margin-top: var(--e4);
}

.comodidades__titulo {
	margin: 0 0 var(--e3);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--texto-tenue);
}

/*
 * Com o menu do celular aberto, os botões flutuantes saem de cena: eles ficam
 * por cima do painel e cobrem justamente os dois botões do rodapé do menu.
 */
body.due-menu-aberto .whatsapp-flutuante,
body.due-menu-aberto .barra-comparar {
	display: none;
}

/* -------------------------------------------------------- WhatsApp fixo -- */

.whatsapp-flutuante {
	position: fixed;
	right: var(--e4);
	bottom: var(--e4);
	z-index: 110;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3.5rem;
	height: 3.5rem;
	border-radius: 50%;
	background: #25d366;
	color: #fff;
	box-shadow: var(--sombra-lg);
	transition: transform var(--transicao);
}

.whatsapp-flutuante:hover {
	transform: scale(1.06);
}

.whatsapp-flutuante svg {
	width: 1.75rem;
	height: 1.75rem;
}

/* ------------------------------------------------------------ paginação -- */

.pagination {
	margin-top: var(--e6);
}

.pagination .nav-links {
	display: flex;
	flex-wrap: wrap;
	gap: var(--e1);
	justify-content: center;
}

.pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.4rem;
	height: 2.4rem;
	padding: 0 0.6rem;
	border: 1px solid var(--borda);
	border-radius: var(--raio-botao);
	text-decoration: none;
	font-size: 0.9375rem;
	transition: border-color var(--transicao), color var(--transicao);
}

.pagination .page-numbers:hover {
	border-color: var(--cor-principal);
	color: var(--cor-principal-forte);
}

.pagination .page-numbers.current {
	background: var(--cor-principal);
	border-color: var(--cor-principal);
	color: #fff;
}

/* --------------------------------------------------------------- vazio -- */

.vazio {
	padding: var(--e8) var(--e5);
	text-align: center;
	border: 1px dashed var(--borda-forte);
	border-radius: var(--raio);
}

.vazio__titulo {
	font-size: 1.25rem;
	margin-bottom: var(--e2);
}

.vazio p {
	color: var(--texto-suave);
	margin-bottom: var(--e4);
}

/* --------------------------------------------------------------- página -- */

.pagina {
	padding-block: var(--e6) var(--e8);
}

.pagina--estreita {
	width: min(100% - 2.5rem, 46rem);
}

.pagina__titulo {
	font-size: clamp(1.75rem, 4vw, 2.5rem);
	margin-bottom: var(--e3);
}

.pagina__capa {
	margin: 0 0 var(--e5);
}

.pagina__capa img {
	border-radius: var(--raio);
}

.lista-posts {
	display: grid;
	gap: var(--e5);
}

.lista-posts--grade {
	grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
}

.post-resumo {
	padding-bottom: var(--e5);
	border-bottom: 1px solid var(--borda);
}

.lista-posts--grade .post-resumo {
	padding-bottom: 0;
	border-bottom: 0;
}

.post-resumo__capa {
	margin: 0 0 var(--e3);
	aspect-ratio: 3 / 2;
	border-radius: var(--raio-sm);
	overflow: hidden;
	background: var(--superficie-alt);
}

.post-resumo__capa img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.post-resumo__titulo {
	font-size: 1.125rem;
	margin-bottom: var(--e1);
}

.post-resumo__titulo a {
	text-decoration: none;
}

.post-resumo__titulo a:hover {
	color: var(--cor-principal-forte);
}

.post-resumo__meta {
	font-size: 0.8125rem;
	color: var(--texto-tenue);
	margin-bottom: var(--e2);
}

/* --------------------------------------------------------- autocomplete -- */

.busca-auto {
	position: relative;
}

.busca-auto__resultados {
	position: absolute;
	top: calc(100% + 0.35rem);
	left: 0;
	right: 0;
	z-index: 50;
	max-height: 21rem;
	overflow-y: auto;
	margin: 0;
	padding: 0.35rem;
	list-style: none;
	background: var(--superficie);
	border: 1px solid var(--borda);
	border-radius: var(--raio-sm);
	box-shadow: var(--sombra-lg);
}

.busca-auto__resultados:empty,
.busca-auto__resultados[hidden] {
	display: none;
}

.busca-auto__item a {
	display: flex;
	align-items: center;
	gap: var(--e3);
	padding: 0.5rem;
	border-radius: var(--raio-botao);
	text-decoration: none;
	font-size: 0.875rem;
}

.busca-auto__item a:hover,
.busca-auto__item.esta-focado a {
	background: var(--superficie-alt);
}

.busca-auto__item img {
	width: 3rem;
	height: 2.25rem;
	object-fit: cover;
	border-radius: 4px;
	flex: none;
}

.busca-auto__nome {
	display: block;
	font-weight: 600;
	color: var(--cor-titulo);
}

.busca-auto__meta {
	display: block;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

/* --------------------------------------------------------------- rodapé -- */

/*
 * Rodapé escuro em qualquer modo: fecha a página com contraste depois de todo o
 * conteúdo em branco, e faz o laranja da marca render mais.
 */
.rodape {
	--rodape-fundo: #12181d;
	--rodape-texto: #aab3ba;
	--rodape-titulo: #ffffff;
	--rodape-borda: rgba(255, 255, 255, 0.12);

	background: var(--rodape-fundo);
	color: var(--rodape-texto);
	padding-block: var(--e8) var(--e5);
	margin-top: var(--e8);
}

/*
 * O respiro acima do rodapé só serve depois de conteúdo sobre fundo branco.
 * A home termina numa faixa de cor que sangra de ponta a ponta, e ali ele
 * virava uma tira branca espremida entre dois blocos escuros.
 */
main:has(> .chamada-final:last-child) + .rodape {
	margin-top: 0;
}

.rodape__topo {
	display: grid;
	grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
	gap: var(--e7);
	padding-bottom: var(--e6);
	margin-bottom: var(--e6);
	border-bottom: 1px solid var(--rodape-borda);
}

.rodape__marca {
	display: inline-flex;
	align-items: center;
	gap: 0.6rem;
	margin-bottom: var(--e4);
	font-size: 1.25rem;
	font-weight: 800;
	letter-spacing: -0.03em;
	color: var(--rodape-titulo);
	text-decoration: none;
}

.rodape__simbolo {
	width: 2.25rem;
	height: 2.25rem;
	flex: none;
	color: var(--cor-principal);
}

/*
 * O nome e o slogan vêm do mesmo trecho do cabeçalho, onde a cor é a do título
 * (quase preta). Sobre o rodapé escuro isso deixava o nome da imobiliária
 * invisível: fundo #12181d, texto #13272c.
 */
.rodape__marca .marca__nome {
	color: var(--rodape-titulo);
}

.rodape__marca .marca__descricao {
	color: var(--rodape-texto);
}

/*
 * Logo colorido sobre o rodapé escuro: a placa branca preserva as cores da
 * marca e mantém legível a linha "compra · vende · troca · financia", que é
 * cinza e sumiria contra o fundo.
 */
.rodape__marca--imagem {
	display: inline-block;
	padding: var(--e3) var(--e4);
	border-radius: var(--raio-sm);
	background: #fff;
}

.rodape__marca--imagem .marca__logo {
	height: 3rem;
	max-width: 17rem;
}

.rodape__titulo {
	font-size: 0.9375rem;
	font-weight: 700;
	margin-bottom: var(--e3);
	color: var(--rodape-titulo);
}

.rodape__texto {
	color: var(--rodape-texto);
	font-size: 0.9375rem;
	max-width: 42ch;
	line-height: 1.65;
}

.rodape__categorias {
	margin: var(--e3) 0 0;
	font-size: 0.8125rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	color: #e2c48f;
}

.rodape__aviso {
	margin: 0 0 var(--e5);
	font-size: 0.8125rem;
	line-height: 1.6;
	color: var(--rodape-texto);
	opacity: 0.8;
}

/* Newsletter: o formulário genérico encolhe para caber numa linha só. */
.rodape__newsletter .formulario {
	margin-top: var(--e4);
	gap: var(--e2);
}

.rodape__newsletter .campo__rotulo {
	color: var(--rodape-texto);
}

.rodape__newsletter .controle {
	background: rgba(255, 255, 255, 0.06);
	border-color: var(--rodape-borda);
	color: #fff;
}

.rodape__newsletter .controle::placeholder {
	color: rgba(255, 255, 255, 0.45);
}

.rodape__newsletter .controle:focus {
	border-color: var(--cor-principal);
	background: rgba(255, 255, 255, 0.1);
}

.rodape__newsletter .formulario__consentimento {
	color: rgba(255, 255, 255, 0.4);
	font-size: 0.75rem;
}

.rodape__newsletter .formulario__aviso--ok {
	background: rgba(var(--cor-secundaria-rgb), 0.18);
	color: #7ee0be;
}

.rodape__grade {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
	gap: var(--e6);
	margin-bottom: var(--e6);
}

.rodape__etiqueta {
	display: block;
	margin-top: var(--e4);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
}

.rodape__menu,
.rodape__contato {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var(--e3);
	font-size: 0.9375rem;
}

.rodape__menu {
	gap: var(--e2);
}

.rodape__menu a,
.rodape__contato a {
	color: var(--rodape-texto);
	text-decoration: none;
	transition: color var(--transicao);
}

.rodape__menu a:hover,
.rodape__contato a:hover {
	color: #fff;
}

.rodape__contato strong {
	display: block;
	color: rgba(255, 255, 255, 0.55);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	margin-bottom: 0.1rem;
}

.rodape__redes {
	display: flex;
	gap: var(--e2);
	margin-top: var(--e5);
}

.rodape__redes a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 50%;
	border: 1px solid var(--rodape-borda);
	color: #fff;
	transition: background var(--transicao), border-color var(--transicao);
}

.rodape__redes a:hover {
	background: var(--cor-principal);
	border-color: var(--cor-principal);
}

.rodape__redes svg {
	width: 1.15rem;
	height: 1.15rem;
}

.rodape__base {
	display: flex;
	justify-content: space-between;
	gap: var(--e4);
	flex-wrap: wrap;
	padding-top: var(--e5);
	border-top: 1px solid var(--rodape-borda);
	font-size: 0.8125rem;
	color: rgba(255, 255, 255, 0.45);
}

/* --------------------------------------------------- capa das páginas -- */

/*
 * Faixa de abertura das páginas internas. Leva um véu da cor da marca e um
 * filete no topo para que contato, busca e ficha de imóvel não pareçam de outro
 * site depois da home, que tem a faixa verde inteira.
 */
.capa {
	position: relative;
	background:
		linear-gradient(160deg, rgba(var(--cor-principal-rgb), 0.07), rgba(var(--cor-principal-rgb), 0.02) 60%),
		var(--fundo-alt);
	border-top: 3px solid var(--cor-principal);
	padding-block: var(--e7);
}

/* Mesmo tratamento no topo da ficha do imóvel e do corretor. */
.imovel__topo {
	background:
		linear-gradient(160deg, rgba(var(--cor-principal-rgb), 0.07), rgba(var(--cor-principal-rgb), 0.02) 60%),
		var(--fundo-alt);
	border-top: 3px solid var(--cor-principal);
	margin-bottom: var(--e5);
}

.capa__titulo {
	font-size: clamp(1.875rem, 4.5vw, 2.75rem);
	font-weight: 800;
}

.capa__texto {
	margin: var(--e3) 0 0;
	max-width: 58ch;
	font-size: 1.0625rem;
	color: var(--texto-suave);
}

.capa__acoes {
	display: flex;
	flex-wrap: wrap;
	gap: var(--e2);
	margin-top: var(--e5);
}

.capa__busca {
	max-width: 34rem;
	margin-top: var(--e5);
}

.capa .migalhas {
	margin-bottom: var(--e4);
}

.duas-colunas {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 23rem);
	gap: var(--e7);
	align-items: start;
}

/* --------------------------------------------------------------- passos -- */

.passos {
	counter-reset: passo;
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var(--e4);
}

.passo {
	position: relative;
	padding: var(--e4) var(--e5) var(--e4) 4rem;
	border-radius: var(--raio);
	background: var(--superficie-alt);
}

.passo::before {
	counter-increment: passo;
	content: counter(passo);
	position: absolute;
	left: var(--e4);
	top: var(--e4);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2rem;
	height: 2rem;
	border-radius: 50%;
	background: var(--cor-principal);
	color: #fff;
	font-size: 0.875rem;
	font-weight: 700;
}

.passo__titulo {
	font-size: 1.0625rem;
	margin-bottom: 0.2rem;
}

.passo__texto {
	margin: 0;
	font-size: 0.9375rem;
	color: var(--texto-suave);
}

/* ------------------------------------------------------------- contatos -- */

.contatos {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
	gap: var(--e3);
}

.contato {
	display: flex;
	align-items: flex-start;
	gap: var(--e3);
	padding: var(--e4);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
}

.contato > svg {
	width: 1.35rem;
	height: 1.35rem;
	flex: none;
	margin-top: 0.15rem;
	color: var(--cor-principal);
}

.contato__rotulo {
	display: block;
	font-size: 0.75rem;
	color: var(--texto-tenue);
}

.contato__valor {
	display: block;
	font-weight: 600;
	color: var(--cor-titulo);
	text-decoration: none;
}

a.contato__valor:hover {
	color: var(--cor-principal-forte);
}

/* --------------------------------------------------------------- dúvidas -- */

.duvidas {
	display: grid;
	gap: var(--e2);
}

.duvida {
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
	padding: var(--e4);
}

.duvida[open] {
	border-color: var(--borda-forte);
}

.duvida__pergunta {
	font-weight: 700;
	color: var(--cor-titulo);
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e3);
}

.duvida__pergunta::-webkit-details-marker {
	display: none;
}

.duvida__pergunta::after {
	content: "";
	width: 0.6rem;
	height: 0.6rem;
	flex: none;
	border-right: 2px solid var(--texto-tenue);
	border-bottom: 2px solid var(--texto-tenue);
	transform: translateY(-3px) rotate(45deg);
	transition: transform var(--transicao);
}

.duvida[open] .duvida__pergunta::after {
	transform: translateY(2px) rotate(-135deg);
}

.duvida__resposta {
	margin: var(--e3) 0 0;
	color: var(--texto-suave);
	font-size: 0.9375rem;
}

/* --------------------------------------------------------------- números -- */

.numeros {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
	gap: var(--e4);
}

.numero {
	padding: var(--e5);
	border-radius: var(--raio);
	background: var(--superficie-alt);
}

.numero__valor {
	display: block;
	font-size: 2rem;
	font-weight: 800;
	letter-spacing: -0.03em;
	color: var(--cor-titulo);
	line-height: 1.1;
}

.numero__rotulo {
	display: block;
	margin-top: var(--e1);
	font-size: 0.875rem;
	color: var(--texto-suave);
}

/* --------------------------------------------------------- mapa do site -- */

.mapa-site__contagem {
	color: var(--texto-tenue);
	font-size: 0.75rem;
}

.mapa-site__imoveis {
	grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
}

/* ---------------------------------------------------------- comentários -- */

.comentarios {
	margin-top: var(--e7);
	padding-top: var(--e6);
	border-top: 1px solid var(--borda);
}

.comentarios__lista,
.comentarios__lista .children {
	list-style: none;
	margin: 0 0 var(--e5);
	padding: 0;
	display: grid;
	gap: var(--e4);
}

.comentarios__lista .children {
	margin: var(--e4) 0 0;
	padding-left: var(--e5);
	border-left: 2px solid var(--borda);
}

.comentarios__lista .comment-body {
	padding: var(--e4);
	border: 1px solid var(--borda);
	border-radius: var(--raio);
	background: var(--superficie);
}

.comentarios__lista .comment-author {
	display: flex;
	align-items: center;
	gap: var(--e2);
	font-weight: 600;
	color: var(--cor-titulo);
}

.comentarios__lista .comment-author img {
	border-radius: 50%;
}

.comentarios__lista .comment-meta,
.comentarios__lista .comment-metadata {
	font-size: 0.75rem;
	color: var(--texto-tenue);
	margin-bottom: var(--e2);
}

.comentarios__lista .comment-meta a,
.comentarios__lista .comment-metadata a {
	color: inherit;
	text-decoration: none;
}

.comentarios__lista .reply {
	margin-top: var(--e2);
	font-size: 0.8125rem;
	font-weight: 600;
}

.comentarios__lista .reply a {
	color: var(--cor-principal-forte);
	text-decoration: none;
}

.comment-form .comment-notes,
.comment-form .logged-in-as {
	font-size: 0.8125rem;
	color: var(--texto-tenue);
}

.comment-form .form-submit {
	margin: 0;
}

/* ----------------------------------------------------------- responsivo -- */

@media (max-width: 68rem) {
	/*
	 * minmax(0, 1fr) e não 1fr: com 1fr o piso da coluna é o min-content do
	 * cartão, que a fila de abas de finalidade empurra para além da largura
	 * da tela. O zero deixa a coluna encolher, e a fila de abas volta a
	 * rolar dentro do cartão, que é o que ela já sabia fazer.
	 */
	.hero__interno {
		grid-template-columns: minmax(0, 1fr);
	}

	.hero__figura {
		display: none;
	}

	.rodape__topo {
		grid-template-columns: 1fr;
		gap: var(--e6);
	}
}

@media (max-width: 64rem) {
	.catalogo__corpo,
	.imovel__corpo,
	.chamada,
	.duas-colunas {
		grid-template-columns: 1fr;
		gap: var(--e5);
	}

	.imovel__lateral {
		position: static;
	}

	.chamada {
		padding: var(--e5);
	}

	/* No mobile os filtros viram uma gaveta acionada por botão. */
	.filtros-mobile {
		display: inline-flex;
	}

	.filtros {
		position: fixed;
		inset: 0;
		z-index: 150;
		border-radius: 0;
		border: 0;
		overflow-y: auto;
		display: none;
		/* Espaço para o X, que fica parado no topo enquanto a lista rola. */
		padding-top: calc(var(--e5) + 2.5rem);
	}

	.filtros.esta-aberto {
		display: block;
	}

	/*
	 * Fixo, e não absoluto: a lista de características é longa, e com position
	 * absolute o X subia junto com o conteúdo. Quem descia até o fim da gaveta
	 * ficava sem como fechá-la.
	 */
	.filtros__fechar {
		display: inline-flex;
		position: fixed;
		top: var(--e4);
		right: var(--e4);
		z-index: 1;
		border-color: var(--borda);
		background: var(--superficie);
		box-shadow: var(--sombra-sm);
	}
}

@media (max-width: 68rem) {
	.menu-alternar {
		display: inline-flex;
	}

	.cabecalho__cta {
		display: none;
	}

	.marca__logo {
		height: 3rem;
		max-width: 12rem;
	}

	:root {
		--cabecalho-altura: 4.5rem;
	}

	/*
	 * Aqui o menu e o véu viram position:fixed e saem do fluxo, então sobram
	 * dois filhos no grid: marca e ações. Com as três colunas do desktop, as
	 * ações caíam na do meio (1fr) e o hambúrguer parava longe da borda. Duas
	 * colunas resolvem: a marca ocupa o que sobra, as ações encostam à direita.
	 */
	.cabecalho__interno {
		grid-template-columns: 1fr auto;
		gap: var(--e3);
		/*
		 * Metade do respiro lateral da página. Numa tela estreita os 1,25rem
		 * de cada lado afastavam o hambúrguer da borda sem servir a nada — a
		 * faixa do cabeçalho não tem texto correndo até o limite.
		 */
		width: min(100% - 1.25rem, var(--envelope));
	}

	/*
	 * Menu mobile: painel de tela cheia, que entra deslizando pela direita. A
	 * rolagem da página trava enquanto ele está aberto e o foco fica preso
	 * dentro — é o comportamento que as pessoas esperam de um app.
	 *
	 * Cobre também a faixa do cabeçalho. Deixar o cabeçalho aparecendo por
	 * cima criava uma tira clara acima do painel, e o menu ficava sem começo
	 * definido. Quem precisa sair usa o X, que fica no topo do próprio painel.
	 */
	.navegacao {
		position: fixed;
		top: var(--barra-admin);
		right: 0;
		bottom: 0;
		left: 0;
		z-index: 200;
		width: auto;
		display: flex;
		flex-direction: column;
		align-items: stretch;
		gap: 0;
		padding: var(--e4) var(--e5) var(--e6);
		margin: 0;
		background: var(--fundo);
		overflow-y: auto;
		overscroll-behavior: contain;
		transform: translateX(100%);
		visibility: hidden;
		transition: transform 280ms cubic-bezier(0.16, 1, 0.3, 1), visibility 280ms;
	}

	.navegacao.esta-aberta {
		transform: translateX(0);
		visibility: visible;
	}

	/* Véu: fecha ao toque e some junto com o painel. */
	.menu-veu {
		position: fixed;
		inset: var(--barra-admin) 0 0;
		z-index: 190;
		background: rgba(10, 14, 17, 0.5);
		backdrop-filter: blur(2px);
		opacity: 0;
		visibility: hidden;
		transition: opacity 280ms, visibility 280ms;
		border: 0;
		padding: 0;
		cursor: pointer;
	}

	.menu-veu.esta-visivel {
		opacity: 1;
		visibility: visible;
	}

	.navegacao__lista {
		flex-direction: column;
		align-items: stretch;
		gap: 0;
		font-size: 1.0625rem;
	}

	.navegacao__lista > li > a {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding-block: var(--e4);
		font-weight: 600;
		color: var(--cor-titulo);
		border-bottom: 1px solid var(--borda);
	}

	.navegacao__lista .menu-item-has-children > a::after {
		transition: transform var(--transicao);
	}

	.navegacao__lista li.esta-aberto > a::after {
		transform: translateY(2px) rotate(-135deg);
	}

	/*
	 * No painel o mega menu vira lista recolhível, e só isso. Os cards de
	 * imóvel saem: numa coluna de celular eles empurravam o texto para fora,
	 * misturavam-se aos itens do menu e faziam a navegação parecer quebrada.
	 * Menu no celular serve para escolher o caminho; a vitrine está a um
	 * toque de distância, no próprio catálogo.
	 */
	.navegacao__lista .sub-menu,
	.navegacao__lista .megamenu {
		position: static;
		width: auto;
		border-radius: 0;
		opacity: 1;
		visibility: visible;
		transform: none;
		border: 0;
		box-shadow: none;
		background: transparent;
		min-width: 0;
		padding: 0;
		display: none;
	}

	/* A ponte do ponteiro não tem função sem painel flutuante. */
	.megamenu::before {
		display: none;
	}

	.navegacao__lista li.esta-aberto > .sub-menu,
	.navegacao__lista li.esta-aberto > .megamenu {
		display: block;
		padding: 0 0 var(--e3);
		border-bottom: 1px solid var(--borda);
	}

	.navegacao__lista .sub-menu a {
		padding-block: var(--e3);
		font-size: 0.9375rem;
	}

	.megamenu__interno {
		display: block;
		width: 100%;
		max-height: none;
		overflow: visible;
		padding: 0;
	}

	.megamenu__links {
		padding-right: 0;
		border-right: 0;
	}

	.megamenu__links a {
		padding-inline: 0;
		padding-block: var(--e3);
		font-size: 0.9375rem;
	}

	.megamenu__links a svg {
		opacity: 1;
	}

	/* Sem os cards, o rótulo e o "ver todos" da vitrine também saem. */
	.megamenu__imoveis,
	.megamenu__links .megamenu__olho {
		display: none;
	}

	/* Ações que ficam escondidas no topo reaparecem no rodapé do painel. */
	.menu-rodape {
		margin-top: auto;
		padding-top: var(--e5);
		display: grid;
		gap: var(--e2);
	}

	.menu-fechar {
		position: absolute;
		top: var(--e2);
		right: var(--e3);
	}
}

@media (min-width: 68.0625rem) {
	.menu-veu,
	.menu-fechar,
	.menu-rodape {
		display: none;
	}
}

/* Telas médias: três colunas e uma linha só, para o painel não virar página. */
@media (max-width: 80rem) {
	.megamenu__grade {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.megamenu__grade .mega-card:nth-child(n + 7) {
		display: none;
	}
}

@media (max-width: 62rem) {
	.avaliacoes__grupo,
	.banners__grupo {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.avaliacoes__grupo .avaliacao:nth-child(3),
	.banners__grupo .banner:nth-child(3) {
		display: none;
	}
}

@media (max-width: 52rem) {
	.hero__cartao {
		padding: var(--e5);
	}

	.avaliacoes__grupo,
	.banners__grupo {
		grid-template-columns: 1fr;
	}

	.avaliacoes__grupo .avaliacao:nth-child(n + 2),
	.banners__grupo .banner:nth-child(n + 2) {
		display: none;
	}

	.busca-hero__linha {
		flex-direction: column;
	}

	.galeria {
		grid-template-columns: 1fr;
	}

	.galeria__coluna {
		grid-template-rows: none;
		grid-template-columns: 1fr 1fr;
	}

	.formulario__linha {
		grid-template-columns: 1fr;
	}

	.rodape__grade {
		grid-template-columns: 1fr 1fr;
		gap: var(--e5);
	}
}

@media (max-width: 34rem) {
	/*
	 * Uma coluna, e não duas.
	 *
	 * Com duas colunas num aparelho de 390px cada card ficava com 169px, e a
	 * linha do preço não cabia: o preço divide a linha com os botões de
	 * favoritar e comparar, e "R$ 3.500.000" quebrava no meio — o "R$" numa
	 * linha e o número na outra, em toda a vitrine. Um card por linha devolve
	 * ao preço a largura inteira e ainda deixa a foto maior, que é o que faz
	 * alguém abrir o anúncio.
	 */
	.grade-imoveis {
		grid-template-columns: 1fr;
		gap: var(--e5) var(--e3);
	}

	.card__titulo {
		-webkit-line-clamp: 2;
	}

	/* O item atual da trilha repete o título da página: uma linha basta. */
	.migalhas .last {
		min-width: 0;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	/*
	 * A barra do comparador nasce centrada e estreita. Numa tela de celular ela
	 * encostava no botão flutuante do WhatsApp, que cobria justamente o
	 * "Limpar". Aqui ela ocupa a largura da tela e o WhatsApp sobe.
	 */
	.barra-comparar {
		left: var(--e3);
		right: var(--e3);
		justify-content: space-between;
		gap: var(--e2);
		padding: var(--e3);
		transform: translateY(150%);
	}

	.barra-comparar.esta-visivel {
		transform: translateY(0);
	}

	.barra-comparar__texto {
		font-size: 0.8125rem;
	}

	body:has(.barra-comparar.esta-visivel) .whatsapp-flutuante {
		bottom: calc(var(--e4) + 4.75rem);
	}

	.rodape__grade {
		grid-template-columns: 1fr;
	}

	.hero__numeros {
		gap: var(--e5);
	}
}

@media (max-width: 30rem) {
	/*
	 * Nesta largura o nome da imobiliária já ocupa duas linhas, e o slogan
	 * ocupava mais duas: o cabeçalho virava um bloco de texto com metade da
	 * altura da tela. O slogan continua no rodapé, onde há largura para ele.
	 */
	.marca .marca__descricao {
		display: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}
}

@media print {
	.cabecalho,
	.rodape,
	.imovel__acoes,
	.painel__botoes,
	.whatsapp-flutuante,
	.barra-comparar,
	.filtros {
		display: none !important;
	}

	body {
		background: #fff;
		color: #000;
	}

	.imovel__corpo {
		grid-template-columns: 1fr;
	}
}

/* ------------------------------------------------------------ títulos -- */

/*
 * Fraunces nos títulos de seção, capas e fichas. O peso cai de 800 para 600
 * porque serifa pesada vira mancha; o tracking negativo do tema também sai,
 * senão as serifas se encostam.
 */
.secao__titulo,
.capa__titulo,
.chamada__titulo,
.imovel__titulo,
.hero__titulo {
	font-family: var(--fonte-display);
	font-weight: 600;
	letter-spacing: -0.01em;
}
