/* Camada do CRM sobre o sistema Industry (industry.css). O sistema entrega tokens, moldura
 * hairline e componentes; aqui moram as estruturas que so existem neste produto: a tela de
 * acesso, o topo do painel, a grade de indicadores e a vitrine publica.
 *
 * Carrega depois de industry.css — o Propshaft lista os arquivos de app/assets/stylesheets
 * em ordem alfabetica, e "siteimob" vem depois de "industry". Sem @layer, pelo mesmo motivo
 * explicado la.
 */

/* ── interacoes compartilhadas ─────────────────────────────────────────────────────────── */

.eleva { transition: transform .16s, box-shadow .16s; }
.eleva:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }

@keyframes entra { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
.entra { animation: entra .22s ease-out; }

@media (prefers-reduced-motion: reduce) {
  .entra { animation: none; }
  .eleva { transition: none; }
  .eleva:hover { transform: none; }
}

/* Quadradinho com iniciais. Substitui a foto que o cadastro nao tem: duas letras em
   Barlow Condensed sobre um bloco de aco, do mesmo tamanho da linha da tabela. */
.marca {
  display: grid; place-items: center; flex: none;
  width: 32px; height: 32px;
  font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 12px;
  background: var(--color-neutral-300); color: var(--color-neutral-800);
}
.marca--ativa { background: var(--color-accent-300); color: var(--color-accent-800); }
.marca--grande { width: 38px; height: 38px; font-size: 14px; }

/* Tabela larga nao encolhe: ela rola dentro do proprio cartao, e a pagina nunca ganha barra
   horizontal. */
.rolagem { overflow-x: auto; }

/* ── avisos e erros ────────────────────────────────────────────────────────────────────── */

.aviso {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 11px 15px; font-size: 13.5px;
  border: 1px solid var(--color-divider);
}
.aviso--ok { background: var(--color-accent-100); color: var(--color-accent-800); border-color: var(--color-accent-300); }
.aviso--erro { background: var(--color-neutral-100); color: var(--color-neutral-900); border-color: var(--color-neutral-400); }

/* O bloco de erros de validacao segue a mesma paleta mono do resto: o peso da moldura e o
   titulo em versal e que dizem "isto exige acao", nao um vermelho que nao existe no sistema. */
.erros {
  padding: 13px 16px; font-size: 13.5px;
  border: 1px solid var(--color-neutral-500); background: var(--color-neutral-100);
}
.erros > strong {
  display: block; margin-bottom: 5px;
  font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 15px;
}
.erros ul { margin: 0; padding-left: 18px; }

/* ── formularios ───────────────────────────────────────────────────────────────────────── */

/* Grade de seis colunas, como no desenho: um campo declara quantas ocupa com .span-N. Em
   tela estreita todos viram largura cheia — um CEP de duas colunas em 360px seria uma caixa
   de dois digitos. */
.campos { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 14px; }
.span-1 { grid-column: span 1; }
.span-2 { grid-column: span 2; }
.span-3 { grid-column: span 3; }
.span-4 { grid-column: span 4; }
.span-6 { grid-column: 1 / -1; }

@media (max-width: 860px) {
  .campos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .span-3, .span-4 { grid-column: 1 / -1; }
}
@media (max-width: 520px) {
  .campos { grid-template-columns: 1fr; }
  .span-1, .span-2 { grid-column: auto; }
}

.dica {
  display: block; margin-top: 4px; font-size: 11.5px;
  color: color-mix(in srgb, var(--color-text) 55%, transparent);
}
.obrigatorio { color: var(--color-accent-700); }

/* Paragrafo de apoio logo abaixo de um titulo: o mesmo corpo do formulario, sem a margem
   inferior que o <p> do sistema traz. */
.apoio { font-size: 14px; margin: 0; }
.apoio--miudo { font-size: 12.5px; }

/* Rotulo de um lado, atalho do outro (a linha "Senha … Esqueci minha senha"). */
.entre-campos { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }

.pilha { display: flex; flex-direction: column; gap: 18px; }
.pilha--curta { gap: 12px; }

/* O Rails embrulha o campo invalido em div.field_with_errors; sem isto, a unica pista do
   erro seria a lista no topo do formulario. */
.field_with_errors { display: contents; }
.field_with_errors .input { border-color: var(--color-neutral-600); border-width: 1.5px; }

.acoes { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }

/* `button_to` gera um <form>, que e bloco. Dentro de uma celula de tabela, ao lado dos links
   de acao, ele precisa se comportar como o resto da linha. */
.acao-inline { display: inline-flex; vertical-align: middle; }

/* Filtro segmentado navegavel: o desenho do .seg do sistema, mas cada opcao e um link em vez
   de um radio. O recorte passa a viver na URL — sobrevive ao refresh, volta no historico e
   pode ser mandado para outra pessoa. */
a.seg-opt { text-decoration: none; color: var(--color-text); }
a.seg-opt:hover { background: color-mix(in srgb, var(--color-text) 7%, transparent); color: var(--color-text); }
a.seg-opt[aria-current="page"],
a.seg-opt[aria-current="page"]:hover { background: var(--color-accent); color: var(--color-bg); }

/* ── tela de acesso ────────────────────────────────────────────────────────────────────── */

.acesso { display: grid; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); min-height: 100vh; }

.acesso__vitrine {
  position: relative; overflow: hidden;
  background: var(--color-accent-800); color: var(--color-accent-100);
  padding: 52px 52px 40px;
  display: flex; flex-direction: column; justify-content: space-between; gap: 40px;
}
/* Papel milimetrado: a planta do imovel como pano de fundo, desenhada em CSS para nao
   custar uma imagem. */
.acesso__vitrine::before {
  content: ""; position: absolute; inset: 0;
  background-image:
    linear-gradient(color-mix(in srgb, #fff 8%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, #fff 8%, transparent) 1px, transparent 1px);
  background-size: 68px 68px;
}
.acesso__vitrine > * { position: relative; }
.acesso__marca { display: flex; align-items: center; gap: 12px; }
.acesso__marca span { font-family: var(--font-heading); font-size: 20px; }
.acesso__sigla {
  display: grid; place-items: center; flex: none;
  width: 38px; height: 38px; background: var(--color-accent-300); color: var(--color-accent-800);
}
.acesso__discurso { max-width: 460px; }
.acesso__discurso h1 { font-size: 44px; color: var(--color-accent-100); margin: 0 0 14px; }
.acesso__discurso p { font-size: 16px; line-height: 1.6; opacity: .85; margin: 0; }
.acesso__numeros { display: flex; flex-wrap: wrap; gap: 28px; margin-top: 34px; }
.acesso__numero { font-family: var(--font-heading); font-size: 29px; line-height: 1.1; }
.acesso__rotulo { font-size: 12px; opacity: .75; }
.acesso__pe { font-size: 12px; opacity: .6; }

.acesso__painel { display: flex; flex-direction: column; justify-content: center; padding: 44px 56px; }
.acesso__form { width: 100%; max-width: 460px; display: flex; flex-direction: column; gap: 18px; }
.acesso__endereco {
  display: flex; align-items: center; gap: 9px; align-self: flex-start;
  padding: 7px 14px; background: var(--color-accent-100); color: var(--color-accent-800);
  font-size: 12px;
}
.acesso__endereco::before { content: ""; width: 8px; height: 8px; background: var(--color-accent-500); }
.acesso__selo {
  display: grid; place-items: center; width: 52px; height: 52px;
  background: var(--color-accent-200); color: var(--color-accent-800);
}
.acesso__confirmacao {
  display: flex; flex-direction: column; align-items: flex-start; gap: 14px;
  padding: 26px; background: var(--color-accent-100);
}

@media (max-width: 900px) {
  .acesso__vitrine { padding: 34px 28px; gap: 28px; }
  .acesso__discurso h1 { font-size: 34px; }
  .acesso__painel { padding: 34px 28px; }
}
@media (max-width: 460px) {
  .acesso { grid-template-columns: 1fr; }
}

/* ── painel: topo e moldura ────────────────────────────────────────────────────────────── */

.painel { min-height: 100vh; display: flex; flex-direction: column; }

.painel__topo {
  position: sticky; top: 0; z-index: 5;
  background: var(--color-neutral-100); border-bottom: 1px solid var(--color-divider);
}
.painel__barra { display: flex; align-items: center; gap: 22px; padding: 14px 28px; flex-wrap: wrap; }
.painel__marca {
  display: flex; align-items: center; gap: 11px; margin-right: 8px;
  font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 18px;
  color: var(--color-text);
}
.painel__marca:hover { color: var(--color-text); }
.painel__sigla {
  display: grid; place-items: center; flex: none;
  width: 32px; height: 32px; background: var(--color-accent); color: var(--color-bg);
}

.painel__nav { display: flex; flex-wrap: wrap; gap: 2px; margin-right: auto; }
.painel__item {
  display: flex; align-items: center; gap: 7px;
  padding: 8px 13px; font-size: 14px; font-weight: 500; white-space: nowrap;
  color: var(--color-neutral-700);
}
.painel__item:hover { background: color-mix(in srgb, var(--color-text) 8%, transparent); color: var(--color-neutral-700); }
.painel__item[aria-current="page"] {
  background: var(--color-accent-200); color: var(--color-accent-800); font-weight: 700;
}
.painel__item svg { flex: none; }
.painel__contagem {
  display: grid; place-items: center; min-width: 19px; height: 19px; padding: 0 5px;
  background: var(--color-accent-200); color: var(--color-accent-800);
  font-size: 11px; font-weight: 700;
}
.painel__item[aria-current="page"] .painel__contagem { background: var(--color-accent-800); color: var(--color-accent-100); }

.painel__ferramentas { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.busca { position: relative; }
.busca .input { width: 264px; padding-left: 36px; }
.busca svg { position: absolute; left: 13px; top: 9px; opacity: .5; pointer-events: none; }

.painel__conta { display: flex; align-items: center; gap: 9px; padding: 5px 12px 5px 5px; color: var(--color-text); }
.painel__conta:hover { background: color-mix(in srgb, var(--color-text) 8%, transparent); color: var(--color-text); }
.painel__conta div { line-height: 1.15; }
.painel__nome { font-size: 13px; font-weight: 600; }
.painel__perfil { font-size: 11px; }
.painel__sair { display: flex; }

.painel__corpo { padding: 26px 28px 56px; display: flex; flex-direction: column; gap: 22px; }
.painel__cabecalho { display: flex; align-items: flex-end; gap: 16px; flex-wrap: wrap; }
.painel__migalha { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
.painel__titulo { margin: 2px 0 0; }
.painel__cabecalho .acoes { margin-left: auto; }

@media (max-width: 720px) {
  .painel__barra { padding: 12px 16px; }
  .painel__corpo { padding: 20px 16px 40px; }
  .busca .input { width: 100%; }
  .busca { flex: 1; min-width: 180px; }
}

/* ── indicadores ───────────────────────────────────────────────────────────────────────── */

.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(212px, 1fr)); gap: 14px; }
.kpi { gap: 6px; padding: 18px 20px; }
.kpi__topo { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.kpi__icone {
  display: grid; place-items: center; flex: none; width: 28px; height: 28px;
  background: var(--color-accent-200); color: var(--color-accent-800);
}
.kpi__icone--suave { background: var(--color-accent-100); color: var(--color-neutral-800); }
.kpi__icone--neutro { background: var(--color-neutral-200); color: var(--color-neutral-700); }
.kpi__valor { font-family: var(--font-heading); font-size: 30px; line-height: 1.05; }
.kpi__nota { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.kpi__nota .text-muted { font-size: 12px; }

/* ── paineis do painel ─────────────────────────────────────────────────────────────────── */

.blocos { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 16px; align-items: start; }
.bloco { padding: 22px 24px; gap: 14px; min-width: 0; }
.bloco--duplo { grid-column: span 2; }

/* Conteudo principal com uma coluna de apoio ao lado — o arranjo da tela de equipe. Duas
   colunas fixas em vez de auto-fit: com auto-fit a tabela sobraria uma faixa vazia a
   direita nas telas largas. */
.blocos--lateral { grid-template-columns: minmax(0, 2fr) minmax(300px, 1fr); }
.bloco__titulo { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 19px; }
.bloco__cabecalho { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }

@media (max-width: 900px) {
  .bloco--duplo { grid-column: auto; }
  .blocos--lateral { grid-template-columns: 1fr; }
}

/* Grafico de barras empilhadas: altura pela variavel --altura, fatia de cima pela --parte.
   Sem biblioteca — sao dois divs e uma media query. */
.grafico { display: flex; align-items: flex-end; gap: 14px; height: 184px; }
.grafico__coluna {
  flex: 1; height: 100%;
  display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 7px;
}
.grafico__total { font-size: 12px; font-weight: 600; }
.grafico__pilha {
  width: 100%; height: var(--altura, 0%);
  display: flex; flex-direction: column; justify-content: flex-end; gap: 2px;
  min-height: 2px;
}
.grafico__venda { background: var(--color-accent); height: var(--parte, 0%); }
.grafico__aluguel { background: var(--color-accent-400); flex: 1; }
.grafico__mes { font-size: 11px; }
.legenda { display: flex; gap: 14px; font-size: 12px; flex-wrap: wrap; }
.legenda span { display: flex; align-items: center; gap: 6px; }
.legenda i { width: 10px; height: 10px; }

/* Barra unica da carteira: cada situacao ocupa a fracao que tem. */
.carteira__faixa { display: flex; height: 22px; border: 1px solid var(--color-divider); }
.carteira__parte { border-right: 1px solid var(--color-divider); }
.carteira__parte:last-child { border-right: 0; }
.carteira__linha { display: flex; align-items: center; gap: 9px; font-size: 13px; }
.carteira__cor { width: 11px; height: 11px; flex: none; border: 1px solid var(--color-divider); }
.carteira__pct { font-size: 12px; min-width: 44px; text-align: right; }
.carteira__destaque { display: flex; align-items: baseline; gap: 8px; }
.carteira__destaque b { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 38px; line-height: 1; }
.carteira__destaque span { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; }

/* Listas de linhas dentro de um bloco (ultimos cadastros, pendencias). */
.lista { display: flex; flex-direction: column; }
.lista__linha {
  display: flex; align-items: center; gap: 13px; padding: 10px 6px;
  border-bottom: 1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
}
.lista__linha:last-child { border-bottom: 0; }
.lista__linha:hover { background: color-mix(in srgb, var(--color-text) 4%, transparent); }
.lista__quando { width: 58px; flex: none; text-align: center; }
.lista__quando b { display: block; font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 15px; }
.lista__quando span { font-size: 10px; }
.lista__corpo { flex: 1; min-width: 0; }
.lista__titulo { font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lista__apoio { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lista__icone { display: grid; place-items: center; flex: none; width: 28px; height: 28px; background: var(--color-accent-200); color: var(--color-accent-800); }

/* ── formulario de imovel em duas colunas ──────────────────────────────────────────────── */

.editor { display: grid; grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr); gap: 18px; align-items: start; }
.editor__principal { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.editor__lateral { display: flex; flex-direction: column; gap: 14px; position: sticky; top: 96px; min-width: 0; }
.editor__secao { padding: 24px 26px; gap: 18px; }

@media (max-width: 900px) {
  .editor { grid-template-columns: 1fr; }
  .editor__lateral { position: static; }
}

.previa__foto { background: var(--color-accent-200); aspect-ratio: 16 / 10; }
.previa__preco { display: flex; align-items: baseline; gap: 4px; }
.previa__preco b { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 22px; }
.previa__atributos { display: flex; gap: 8px; flex-wrap: wrap; }
.nota-lateral { padding: 14px 16px; background: var(--color-accent-100); color: var(--color-accent-800); font-size: 12.5px; }

/* ── site publico ──────────────────────────────────────────────────────────────────────── */

.site { min-height: 100vh; display: flex; flex-direction: column; }
.site__topo { background: var(--color-neutral-100); border-bottom: 1px solid var(--color-divider); }
.site__barra { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 16px 28px; max-width: 1180px; margin: 0 auto; width: 100%; }
.site__corpo { flex: 1; width: 100%; max-width: 1180px; margin: 0 auto; padding: 34px 28px 64px; }
.site__pe {
  border-top: 1px solid var(--color-divider); background: var(--color-neutral-100);
  font-size: 12px; padding: 18px 28px;
}
.site__pe > div { max-width: 1180px; margin: 0 auto; display: flex; gap: 12px; flex-wrap: wrap; }

.vitrine { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.anuncio { padding: 20px 22px; gap: 9px; }
.anuncio__titulo { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 19px; line-height: 1.15; }
.anuncio__preco { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 24px; line-height: 1.1; }
.anuncio__preco small { font-family: var(--font-body); font-size: 12px; font-weight: 400; }
.anuncio__atributos { display: flex; gap: 7px; flex-wrap: wrap; margin-top: 2px; }

.ficha { max-width: 860px; display: flex; flex-direction: column; gap: 18px; }
.ficha__preco { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 40px; line-height: 1.05; }
.ficha__preco small { font-family: var(--font-body); font-size: 14px; font-weight: 400; }
.ficha__descricao { white-space: pre-line; font-size: 15px; }

@media (max-width: 720px) {
  .site__barra, .site__corpo, .site__pe { padding-left: 16px; padding-right: 16px; }
}

/* ── paginas de erro e estados vazios ──────────────────────────────────────────────────── */

.aviso-pagina {
  min-height: 100vh; display: grid; place-items: center; padding: 28px;
}
.aviso-pagina > div { width: min(520px, 100%); padding: 34px 36px; gap: 12px; }

.vazio {
  padding: 34px; text-align: center; font-size: 14px;
  border: 1px dashed var(--color-neutral-400);
  color: color-mix(in srgb, var(--color-text) 55%, transparent);
}
