/* ===================================================================
   Painel ImobPro — CSS puro, sem build.
   Sem Tailwind, sem npm, sem Vite. O que você escreve é o que sobe
   para o servidor. Em hospedagem compartilhada isso vale muito.
   =================================================================== */
:root{
  --bg:#f6f7f9; --card:#fff; --border:#e8eaed; --txt:#2c3242; --muted:#8a94a6;
  --side:#27354B; --side-txt:#a7b0c0; --topbar:#fff;

  /* Paleta da marca. O painel usa a secundária como cor de ação, e não
     a primária: a primária é fundo escuro, e botão azul-marinho sobre
     branco some. */
  --pri:#2F50B3; --pri-soft:#eaefff;
  --apoio:#0B0F62;
  --ok:#0eb87f; --ok-soft:#e6f8f2;
  --warn:#f5a623; --warn-soft:#fef4e4;
  --dang:#f04b62; --dang-soft:#feeaed;
  --ia:#8b5cf6; --ia-soft:#f3edff;
}
[data-theme="dark"]{
  --bg:#161c2b; --card:#1e2637; --border:#2b3448; --txt:#e4e8f0; --muted:#7c8698;
  --side:#1b2534; --topbar:#1e2637; --pri-soft:#22305c; --ok-soft:#14352c;
  --warn-soft:#3a2f18; --dang-soft:#3a1f27; --ia-soft:#2a2140;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:Inter,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--txt);
     font-size:14px;-webkit-font-smoothing:antialiased}
a{text-decoration:none;color:inherit}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
table{border-collapse:collapse}

/* ---------- SIDEBAR ---------- */
.side{position:fixed;top:0;left:0;width:240px;height:100vh;background:var(--side);z-index:60;
      display:flex;flex-direction:column;transition:transform .25s}
.side-logo{height:64px;display:flex;align-items:center;gap:10px;padding:0 20px;color:#fff;
           font-weight:700;font-size:17px;border-bottom:1px solid rgba(255,255,255,.07)}
.side-logo .mark{width:30px;height:30px;border-radius:8px;background:var(--pri);
                 display:grid;place-items:center;font-size:15px}
.side-nav{flex:1;overflow-y:auto;padding:14px 10px}
.side-cap{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:#5d6980;
          padding:14px 12px 7px;font-weight:600}
.side-nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:8px;
            color:var(--side-txt);font-weight:500;margin-bottom:2px}
.side-nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.side-nav a.on{background:var(--pri);color:#fff}
.side-nav a svg{width:17px;height:17px;flex:none}
.side-nav a .pill{margin-left:auto;background:var(--dang);color:#fff;font-size:10px;
                  font-weight:700;padding:1px 6px;border-radius:20px}
.side-foot{padding:14px;border-top:1px solid rgba(255,255,255,.07)}
.usage{background:rgba(255,255,255,.05);border-radius:9px;padding:11px}
.usage-t{font-size:11px;color:var(--side-txt);display:flex;justify-content:space-between;margin-bottom:7px}
.usage-b{height:5px;background:rgba(255,255,255,.12);border-radius:9px;overflow:hidden}
.usage-b i{display:block;height:100%;background:var(--pri);border-radius:9px}

/* ---------- TOPO ---------- */
.wrap{margin-left:240px;min-height:100vh}
.top{height:64px;background:var(--topbar);border-bottom:1px solid var(--border);display:flex;
     align-items:center;gap:12px;padding:0 22px;position:sticky;top:0;z-index:50}
.burger{display:none;font-size:20px}
.top h1{font-size:16px;font-weight:600}
.top-r{margin-left:auto;display:flex;align-items:center;gap:8px}
.icobtn{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;color:var(--muted)}
.icobtn:hover{background:var(--bg);color:var(--txt)}
.avatar{display:flex;align-items:center;gap:9px;padding:5px 10px 5px 5px;border-radius:9px}
.avatar:hover{background:var(--bg)}
.ini{width:30px;height:30px;border-radius:50%;background:var(--pri-soft);color:var(--pri);
     display:grid;place-items:center;font-weight:700;font-size:11px;flex:none}
.avatar span{font-weight:600;font-size:13px;text-align:left}
.avatar small{display:block;color:var(--muted);font-weight:400;font-size:11px}

/* ---------- LAYOUT ---------- */
.page{padding:22px}
.crumb{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:18px}
.crumb h2{font-size:19px;font-weight:600}
.crumb p{color:var(--muted);font-size:13px;margin-top:3px}
.grid{display:grid;gap:16px;margin-bottom:16px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.card{background:var(--card);border:1px solid var(--border);border-radius:11px}
.card-h{padding:15px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.card-h h3{font-size:14px;font-weight:600}
.card-h p{font-size:12px;color:var(--muted);margin-top:2px}
.card-b{padding:18px}

/* ---------- KPI ---------- */
.kpi{padding:18px;display:flex;gap:14px;align-items:flex-start}
.kpi-ico{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;flex:none;font-size:19px}
.kpi-l{font-size:12px;color:var(--muted);font-weight:500}
.kpi-v{font-size:24px;font-weight:700;margin:3px 0 5px;letter-spacing:-.5px}
.kpi small{font-size:11.5px;color:var(--muted)}

/* ---------- BADGES ---------- */
.bdg{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;
     padding:3px 9px;border-radius:20px;white-space:nowrap}
.b-ok{background:var(--ok-soft);color:var(--ok)}
.b-warn{background:var(--warn-soft);color:#c47f10}
.b-dang{background:var(--dang-soft);color:var(--dang)}
.b-pri{background:var(--pri-soft);color:var(--pri)}
.b-mut{background:var(--bg);color:var(--muted)}

/* ---------- TABELA ---------- */
.tbl-scroll{overflow-x:auto}
.tbl{width:100%}
.tbl th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;
        color:var(--muted);font-weight:600;padding:11px 18px;border-bottom:1px solid var(--border);white-space:nowrap}
.tbl td{padding:13px 18px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover{background:var(--bg)}
.nw{white-space:nowrap}

/* ---------- FORM ---------- */
.in{padding:10px 12px;border:1.5px solid var(--border);border-radius:8px;background:var(--card);
    color:var(--txt);font-family:inherit;font-size:14px;width:100%}
.in:focus{outline:none;border-color:var(--pri)}
label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:5px}
.btn{padding:10px 18px;border-radius:9px;font-weight:600;font-size:14px;
     display:inline-flex;align-items:center;justify-content:center;gap:8px}
.btn-p{background:var(--pri);color:#fff}
.btn-p:hover{filter:brightness(1.08)}
.btn-o{border:1.5px solid var(--border);color:var(--txt)}
.btn-o:hover{border-color:var(--pri);color:var(--pri)}
.btn-sm{padding:6px 12px;font-size:12px}

/* ---------- AVISOS ---------- */
.alert{padding:12px 16px;border-radius:9px;font-size:13.5px;margin-bottom:16px;
       display:flex;gap:10px;align-items:flex-start}
.a-ok{background:var(--ok-soft);color:#0a8f63}
.a-warn{background:var(--warn-soft);color:#a5700c}
.a-dang{background:var(--dang-soft);color:#c22f45}
.a-pri{background:var(--pri-soft);color:#3559e0}
.erro{color:var(--dang);font-size:12.5px;margin-top:5px}

/* ---------- FAIXA DE IMPERSONAÇÃO ---------- */
.imp{background:var(--warn);color:#3a2a00;padding:9px 22px;font-size:13px;font-weight:600;
     display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.imp button{margin-left:auto;background:rgba(0,0,0,.16);padding:5px 13px;border-radius:7px;
            font-size:12px;font-weight:700}
.imp button:hover{background:rgba(0,0,0,.26)}

/* ---------- LOGIN ---------- */
.login{min-height:100vh;display:grid;place-items:center;padding:20px;background:var(--bg)}
.login-box{width:100%;max-width:400px}
.login-logo{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:26px;
            font-weight:700;font-size:21px;color:var(--txt)}
.login-logo .mark{width:36px;height:36px;border-radius:9px;background:var(--pri);color:#fff;
                  display:grid;place-items:center;font-size:17px}
.login-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:30px}
.login-card h1{font-size:19px;font-weight:600;margin-bottom:5px}
.login-card p.sub{color:var(--muted);font-size:13.5px;margin-bottom:22px}
.fld{margin-bottom:16px}
.chk{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);margin-bottom:18px;cursor:pointer}
.chk input{accent-color:var(--pri)}
.login-foot{text-align:center;margin-top:20px;font-size:12.5px;color:var(--muted)}

/* ---------- RESPONSIVO ---------- */
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.g3,.g2{grid-template-columns:1fr}}
@media(max-width:768px){
  .side{transform:translateX(-100%)}.side.open{transform:none}
  .wrap{margin-left:0}.burger{display:block}.page{padding:15px}
  .g4{grid-template-columns:1fr}
  .hide-sm{display:none}
  .tbl{min-width:640px}
}
.backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:55}
.backdrop.on{display:block}


/* ===================================================================
   INTERRUPTOR  (rascunho / publicado)
   =================================================================== */
.toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer;padding:2px}
.toggle-t{width:38px;height:21px;border-radius:20px;background:var(--border);
          position:relative;flex:none;transition:background .2s}
.toggle-t i{position:absolute;top:3px;left:3px;width:15px;height:15px;border-radius:50%;
            background:#fff;transition:left .2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.toggle.on .toggle-t{background:var(--ok)}
.toggle.on .toggle-t i{left:20px}
.toggle b{font-size:12px;font-weight:600;color:var(--muted);white-space:nowrap}
.toggle.on b{color:var(--ok)}
.toggle:hover .toggle-t{filter:brightness(.94)}

/* ===================================================================
   CALENDÁRIO DE TEMPORADA
   =================================================================== */
.cal-wrap{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.cal-h{font-size:13px;font-weight:600;text-align:center;margin-bottom:10px}
.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-dow{font-size:10px;font-weight:700;color:var(--muted);text-align:center;padding-bottom:5px}
.cal-d{aspect-ratio:1;display:grid;place-items:center;font-size:12px;border-radius:6px;
       background:var(--card);border:1px solid var(--border);cursor:pointer;user-select:none}
.cal-d:hover{border-color:var(--pri)}
.cal-d.ocupado{background:var(--dang-soft);color:var(--dang);border-color:transparent;
               cursor:not-allowed;text-decoration:line-through}
.cal-d.passado{opacity:.35;cursor:not-allowed}
.cal-d.sel{background:var(--pri);color:#fff;border-color:var(--pri);font-weight:600}
.cal-leg{display:flex;gap:16px;justify-content:center;margin-top:14px;font-size:11.5px;color:var(--muted)}
.cal-leg span{display:flex;align-items:center;gap:6px}
.cal-sw{width:11px;height:11px;border-radius:3px;display:inline-block}
.cal-sw.livre{background:var(--card);border:1px solid var(--border)}
.cal-sw.ocupado{background:var(--dang-soft);border:1px solid var(--dang)}
.cal-sw.sel{background:var(--pri)}
@media(max-width:900px){.cal-wrap{grid-template-columns:1fr}}

/* ===================================================================
   FILTROS  (tela de contatos)
   =================================================================== */
.filtro-linha{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.filtro-linha:last-child{margin-bottom:0}
.filtro-tit{font-size:11px;font-weight:700;color:var(--muted);
            text-transform:uppercase;letter-spacing:.05em;width:52px;flex:none}

/* ===================================================================
   INDICADOR DE ROLAGEM NAS TABELAS

   O problema nunca foi rolar — era não saber que dá para rolar.
   Um degradê na borda direita mostra que há mais conteúdo, e some
   quando a pessoa chega ao fim. Bem menos invasivo que reescrever
   toda tabela como cartão.
   =================================================================== */
.tbl-scroll{position:relative;overflow-x:auto;-webkit-overflow-scrolling:touch}

.tbl-scroll::after{
  content:'';position:absolute;top:0;right:0;bottom:0;width:38px;
  background:linear-gradient(to right, transparent, var(--card));
  pointer-events:none;opacity:1;transition:opacity .2s;
}
.tbl-scroll.fim::after{opacity:0}
.tbl-scroll::-webkit-scrollbar{height:4px}
.tbl-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:8px}

@media(max-width:768px){
  .tbl-scroll[data-rolavel]::before{
    content:'← deslize para ver mais →';
    display:block;font-size:10.5px;color:var(--muted);
    text-align:center;padding:6px 0 2px;
  }
}

/* ===================================================================
   MOBILE

   Três causas de scroll horizontal, três correções.
   =================================================================== */

/* 1. Filho de grid não encolhe. O padrão é min-width:auto — "não fique
      menor que meu conteúdo" — e uma tabela larga estoura a tela toda.
      É a causa mais comum e a menos óbvia. */
.grid > *, .cols > *, .card, .tbl-scroll, .card-b > *{min-width:0}

/* 2. Grid escrito com style= no HTML. Media query não vence estilo em
      linha; só !important vence. Não é elegante — é o remédio certo
      para um problema criado ao escrever grid em atributo. */
@media(max-width:900px){
  .card-b[style*="grid-template-columns"],
  .grid[style*="grid-template-columns"],
  [style*="display:grid"][style*="grid-template-columns"],
  [style*="display: grid"][style*="grid-template-columns"]{
    grid-template-columns:1fr !important;
  }
  .card-b [style*="display:flex"]{flex-wrap:wrap}
}

/* 3. Texto longo sem espaço — e-mail, link — não pode esticar a coluna.
      Repare que a regra NÃO vale para a tabela inteira: quebrar qualquer
      célula deixa o navegador livre para espremer a coluna até uma letra
      por linha, que foi exatamente o que aconteceu na tela de Contatos.
      A tabela tem largura mínima e rola; a célula não se contorce. */
code, .quebra, .mail, [style*="monospace"]{overflow-wrap:anywhere}

/* Rede de segurança. Se algo continuar largo, fica cortado em vez de
   rolar — use para evitar estrago enquanto caça o que falta, não como
   substituto das correções acima. */
html, body{max-width:100%;overflow-x:hidden}
.page img, .page video, .page iframe{max-width:100%;height:auto}

/* Elemento escondido por atributo continua escondido, mesmo que o CSS
   defina display. Erro clássico e silencioso. */
[hidden]{display:none !important}

@media(max-width:768px){
  .crumb{flex-direction:column;align-items:flex-start}
  .crumb > div:last-child{width:100%}

  .filtro-linha{gap:8px;margin-bottom:16px}
  .filtro-tit{width:100%;margin-bottom:2px}
  .filtro-linha .in{width:100% !important;max-width:none !important}
  .filtro-linha .btn{width:100%}

  .filtros{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;-webkit-overflow-scrolling:touch}
  .filtros .chip{flex:none}

  .card-b form{display:flex;flex-direction:column;gap:10px}
  .card-b form > div{width:100%}
  .tbl form{flex-wrap:wrap}
  .tbl .in{min-width:0}
}

/*
 | O botão de salvar não ganha mais margem automática.
 |
 | A regra fazia sentido quando os formulários eram simples. Com cartões
 | e blocos, ela empurrava o botão em telas onde o espaçamento já vinha
 | do cartão anterior — e sobrar espaço é tão perceptível quanto faltar.
 | Onde precisar de respiro, o espaço vai na marcação, onde dá para ver.
 */
@media(max-width:768px){
  form > .btn-p:last-child,
  form > button[type="submit"]:last-of-type{width:100%}
}

.page{padding-bottom:34px}


/* ===================================================================
   TOPO

   O botão Sair vive dentro de um <form>, e form é elemento de bloco:
   ele quebra a linha dos vizinhos. Além disso o nome do usuário podia
   crescer até empurrar o botão para fora. Duas causas, duas correções.
   =================================================================== */
.top{gap:12px;flex-wrap:nowrap;overflow:hidden}
.top h1{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.top-r{margin-left:auto;display:flex;align-items:center;gap:6px;flex:none;flex-wrap:nowrap}
.top-r form{display:flex;align-items:center;margin:0;padding:0;flex:none}
.top-r > *{flex:none}
.top-r .icobtn{flex:none}

/* O nome trunca em vez de empurrar. */
.avatar{max-width:210px;min-width:0}
.avatar > span:not(.ini){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.avatar small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@media(max-width:900px){.avatar{max-width:none}}

/* ===================================================================
   TABELAS

   Largura mínima é o que faz a tabela ROLAR em vez de espremer as
   colunas. Sem ela o navegador encolhe a coluna do nome até uma letra
   por linha — que foi o que aconteceu na tela de Contatos.
   =================================================================== */
.tbl-scroll > .tbl{min-width:720px}
.tbl td, .tbl th{white-space:normal}

@media(max-width:768px){
  .tbl-scroll > .tbl{min-width:680px}
}

/* ===================================================================
   FILTROS EM FORMA DE ETIQUETA

   Sem estes estilos as etiquetas viravam texto solto, com o número
   grudado no rótulo: "Orgânico0". A contagem precisa parecer contagem.
   =================================================================== */
.chip{display:inline-flex;align-items:center;gap:7px;
      padding:7px 13px;border-radius:99px;border:1.5px solid var(--border);
      background:var(--card);color:var(--muted);
      font-family:inherit;font-size:12.5px;font-weight:600;
      cursor:pointer;white-space:nowrap;transition:.15s}
.chip:hover{border-color:var(--pri);color:var(--pri)}

.chip.on{background:var(--pri);border-color:var(--pri);color:#fff}

.chip .n{display:inline-grid;place-items:center;min-width:19px;height:18px;
         padding:0 5px;border-radius:99px;
         background:var(--bg);color:var(--muted);
         font-size:10.5px;font-weight:700;line-height:1}
.chip.on .n{background:rgba(255,255,255,.24);color:#fff}

/* Contagem zero fica apagada: o que interessa é onde há contato. */
.chip .n:empty, .chip .n[data-zero]{opacity:.45}

.filtros{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ===================================================================
   LINHAS DE FORMULÁRIO

   Campo e botão na mesma linha só se alinham se o container disser.
   Vários formulários trazem display:flex no atributo style e alinhavam
   pelo topo, deixando o botão mais alto que os campos.
   =================================================================== */
.card-b form[style*="flex"]{align-items:center}
.card-b form .in, .card-b form .btn{margin:0}
.card-b form .btn{min-height:40px;display:inline-flex;align-items:center;justify-content:center}
.in{height:40px}
textarea.in, select[multiple].in{height:auto}
select.in{padding-right:32px}

/* Situação e interruptor na mesma linha da tabela */
.tbl td .bdg, .tbl td .toggle{vertical-align:middle}
.tbl td > .toggle{margin:0}

@media(max-width:768px){
  .card-b form[style*="flex"]{flex-direction:column;align-items:stretch}
  .card-b form[style*="flex"] > *{width:100% !important;max-width:none !important}
}

.filtro-form{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.filtro-form .in{flex:0 1 auto}
.filtro-form .in[name=busca]{flex:1 1 240px;max-width:300px}

@media(max-width:768px){
  .filtro-form{flex-direction:column;align-items:stretch}
  .filtro-form > *{width:100%;max-width:none !important}
}

/* ---------- LOGIN ---------- */
.login-linha{display:flex;justify-content:space-between;align-items:center;
             gap:12px;margin:2px 0 18px;flex-wrap:wrap}
.login-linha a{font-size:12.5px;color:var(--pri);font-weight:500}
.login-linha a:hover{text-decoration:underline}
.login-linha .chk{margin:0}

.forca{height:4px;background:var(--border);border-radius:8px;overflow:hidden;margin-top:9px}
.forca i{display:block;height:100%;width:0;border-radius:8px;transition:width .2s,background .2s}

/* ---------- FAQ NA APARÊNCIA ---------- */
.faq-linha{display:flex;gap:11px;align-items:flex-start;margin-bottom:14px}
.faq-num{width:24px;height:24px;border-radius:50%;flex:none;margin-top:8px;
         background:var(--bg);color:var(--muted);display:grid;place-items:center;
         font-size:11px;font-weight:700}
.faq-linha textarea.in{height:auto;line-height:1.55}

/* ---------- SELETOR DE COR ---------- */
.cores{display:flex;gap:10px;flex-wrap:wrap}
.cor{width:38px;height:38px;border-radius:10px;padding:3px;cursor:pointer;
     border:2px solid transparent;display:block}
.cor span{display:block;width:100%;height:100%;border-radius:7px}
.cor:hover{border-color:var(--border)}
.cor.on{border-color:var(--txt)}

/* ---------- SELETOR DE COR LIVRE ---------- */
.cor-livre{position:relative;overflow:hidden}
.cor-livre input[type=color]{position:absolute;inset:0;opacity:0;
                             width:100%;height:100%;cursor:pointer;border:none;padding:0}
.arco-iris{display:block;width:100%;height:100%;border-radius:7px;
           background:conic-gradient(#ff4d4d,#ffd24d,#4dff88,#4dd2ff,#8a4dff,#ff4dd2,#ff4d4d)}
.cor-livre::after{content:'+';position:absolute;inset:0;display:grid;place-items:center;
                  color:#fff;font-size:17px;font-weight:700;
                  text-shadow:0 1px 4px rgba(0,0,0,.45);pointer-events:none}

.cor-atual{display:flex;align-items:center;gap:8px;
           font-size:12px;color:var(--muted);margin-top:12px}
.cor-atual code{font-size:12px;background:var(--bg);padding:2px 7px;border-radius:5px}
.cor-atual i{width:13px;height:13px;border-radius:4px;display:inline-block;
             border:1px solid var(--border)}

/* A paleta da identidade visual usa .swatch; a do CTA usa .cor. Os dois
   ficam do mesmo tamanho para não parecerem controles diferentes. */
.swatch{width:38px;height:38px;border-radius:10px;display:block;
        border:2px solid transparent}
.swatch.on{border-color:var(--txt)}

/* ---------- CORES DOS SELOS ---------- */
.selos-cfg{display:flex;gap:12px;flex-wrap:wrap}
.selo-cfg{position:relative;cursor:pointer;display:block}
.selo-pv{display:block;padding:7px 16px;border-radius:20px;color:#fff;
         font-size:11.5px;font-weight:700;letter-spacing:.02em}
.selo-cfg input[type=color]{position:absolute;inset:0;opacity:0;
                            width:100%;height:100%;cursor:pointer;border:none;padding:0}
.selo-cfg:hover .selo-pv{filter:brightness(1.08)}

/* ---------- ESCOLHA DA ORIGEM DOS DEPOIMENTOS ---------- */
.fonte-op{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-bottom:20px}
.fonte-op label{border:1.5px solid var(--border);border-radius:11px;padding:14px 16px;
                cursor:pointer;display:block;transition:.15s}
.fonte-op label:hover{border-color:var(--pri)}
.fonte-op label.on{border-color:var(--pri);background:var(--pri-soft)}
.fonte-op label.off{opacity:.5;cursor:not-allowed}
.fonte-op label.off:hover{border-color:var(--border)}
.fonte-op input{display:none}
.fonte-op b{display:block;font-size:13.5px;margin-bottom:3px}
.fonte-op small{display:block;font-size:11.5px;color:var(--muted);line-height:1.55}

.fonte-bloco[hidden]{display:none !important}

/* ---------- DEPOIMENTOS ---------- */
.depo-linha{display:flex;gap:11px;align-items:flex-start;margin-bottom:14px}
.depo-topo{display:grid;grid-template-columns:1.4fr 1fr 110px;gap:7px}
.depo-linha textarea.in{height:auto;line-height:1.55}

@media(max-width:900px){
  .fonte-op{grid-template-columns:1fr}
  .depo-topo{grid-template-columns:1fr}
}

/* ---------- BUSCA DO PERFIL NO GOOGLE ---------- */
.gbusca{display:flex;gap:9px;align-items:center}
.gbusca .in{flex:1;min-width:0}
.gbusca .btn{flex:none}

.gresultado{margin-top:11px;border:1px solid var(--border);border-radius:10px;overflow:hidden}
.glugar{display:block;width:100%;text-align:left;padding:12px 15px;
        background:var(--card);border:none;cursor:pointer;font-family:inherit}
.glugar + .glugar{border-top:1px solid var(--border)}
.glugar:hover{background:var(--bg)}
.glugar b{display:block;font-size:13.5px;margin-bottom:2px}
.glugar small{display:block;font-size:11.5px;color:var(--muted)}
.glugar em{font-style:normal;font-size:11.5px;color:#c47f10;font-weight:600}
.glugar em.sem{color:var(--muted);font-weight:400}

.gvazio{padding:13px 15px;font-size:12.5px;color:var(--muted)}

.gescolhido{display:flex;align-items:center;gap:8px;margin-top:11px;
            padding:11px 14px;border-radius:9px;
            background:var(--ok-soft);color:var(--ok);font-size:13px;font-weight:600}
.gescolhido[hidden]{display:none}
.gtrocar{margin-left:auto;background:none;border:none;cursor:pointer;
         font-family:inherit;font-size:12px;color:var(--muted);text-decoration:underline}

/* ===================================================================
   ESPAÇO ENTRE OS CARTÕES DE UM FORMULÁRIO

   .grid já trazia margem embaixo, mas cartão solto dentro de um <form>
   não tinha nenhuma — e os blocos da tela de Aparência foram ficando
   colados um no outro conforme a tela cresceu.
   =================================================================== */
form > .card,
form > .grid{margin-bottom:16px}
form > .card:last-of-type{margin-bottom:20px}

/* Respiro interno também: título e conteúdo estavam encostando. */
.card-h{padding:16px 18px 0}
.card-h + .card-b{padding-top:14px}
.card-h h3{line-height:1.35}
.card-h p{margin-top:4px;line-height:1.5}

/* Rótulo colado no campo anterior é o mesmo problema, em escala menor. */
.card-b label{display:block;margin-bottom:6px}
.card-b > label + .in,
.card-b > label + select,
.card-b > label + textarea{margin-bottom:4px}

/* Área de texto com respiro para não parecer campo de uma linha. */
textarea.in{padding:11px 13px;line-height:1.6}

/* ---------- BLOCO DE AJUDA RECOLHÍVEL ---------- */
.ajuda{border:1px solid var(--border);border-radius:10px;overflow:hidden}
.ajuda summary{display:flex;align-items:center;justify-content:space-between;
               padding:13px 16px;cursor:pointer;font-size:13.5px;font-weight:600;
               list-style:none;user-select:none;background:var(--bg)}
.ajuda summary::-webkit-details-marker{display:none}
.ajuda summary:hover{color:var(--pri)}
.ajuda[open] summary{border-bottom:1px solid var(--border)}
.ajuda .faq-s{width:9px;height:9px;border-right:2px solid var(--muted);
              border-bottom:2px solid var(--muted);
              transform:translateY(-3px) rotate(45deg);transition:transform .2s}
.ajuda[open] .faq-s{transform:translateY(2px) rotate(-135deg)}

.ajuda-b{padding:18px 20px 20px;font-size:13.5px;line-height:1.7;color:var(--muted)}
.ajuda-b h4{font-size:13px;font-weight:700;color:var(--txt);
            margin:20px 0 7px;text-transform:uppercase;letter-spacing:.04em}
.ajuda-b h4:first-child{margin-top:0}
.ajuda-b p{margin-bottom:11px}
.ajuda-b ol{margin:0 0 12px 20px}
.ajuda-b li{margin-bottom:6px}
.ajuda-b a{color:var(--pri);text-decoration:underline}
.ajuda-b code{background:var(--bg);padding:2px 6px;border-radius:5px;
              font-size:12px;color:var(--txt)}
.ajuda-b b{color:var(--txt)}

.ajuda-b .obs{background:var(--bg);border-left:3px solid var(--border);
              padding:11px 14px;border-radius:0 8px 8px 0;font-size:12.5px}

.ajuda-t{width:100%;border-collapse:collapse;margin:0 0 14px;font-size:12.5px}
.ajuda-t th{text-align:left;font-size:10.5px;text-transform:uppercase;
            letter-spacing:.05em;color:var(--muted);padding:0 10px 7px 0;
            border-bottom:1px solid var(--border)}
.ajuda-t td{padding:9px 10px 9px 0;border-bottom:1px solid var(--border);
            vertical-align:top}
.ajuda-t tr:last-child td{border-bottom:none}

/* ---------- LOGO DA PLATAFORMA NO PAINEL ---------- */
.side-img{height:32px;width:auto;max-width:170px;object-fit:contain;display:block}
.side-logo{min-height:56px}
.login-logo img{margin:0 auto}

/* ---------- ABAS ---------- */
.abas{display:flex;gap:2px;overflow-x:auto;padding:0 18px;
      border-bottom:1px solid var(--border);-webkit-overflow-scrolling:touch}
.aba{background:none;padding:13px 15px;font-family:inherit;font-size:13px;
     font-weight:600;color:var(--muted);white-space:nowrap;
     border-bottom:2px solid transparent;margin-bottom:-1px}
.aba:hover{color:var(--txt)}
.aba.on{color:var(--pri);border-bottom-color:var(--pri)}
.aba-p[hidden]{display:none !important}

/* ---------- CAMPOS DA LANDING ---------- */
.campo-lp{margin-bottom:16px}
.campo-lp.curto{max-width:400px}
.campo-lp label{display:flex;align-items:center;gap:8px}
.campo-lp textarea.in{height:auto;line-height:1.6}

.mudou{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
       background:var(--warn-soft);color:#c47f10;padding:2px 7px;border-radius:20px}

.conta{font-size:11.5px;color:var(--muted);margin-top:5px}
.conta b{font-weight:700}


/* ===================================================================
   TIPOGRAFIA DA MARCA

   Urbanist no corpo, como na página de vendas. Carregada no layout;
   aqui só entra a preferência, com as de sistema como reserva para o
   caso de a fonte não chegar.
   =================================================================== */
body, .in, .btn, input, select, textarea, button{
  font-family:'Urbanist','Inter',-apple-system,'Segoe UI',sans-serif;
}

/* ---------- REDES SOCIAIS ---------- */
.redes-cfg{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
.rede-linha{display:flex;align-items:center;gap:10px;min-width:0}
.rede-nome{font-size:12.5px;color:var(--muted);width:74px;flex:none;font-weight:500}
.rede-linha .in{flex:1;min-width:0}

@media(max-width:900px){.redes-cfg{grid-template-columns:1fr}}

/* ===================================================================
   INTERRUPTOR DAS CONFIGURAÇÕES

   Este CSS nunca existiu. A marcação com .sw e .sw-t foi escrita lá na
   Etapa 6A, o estilo ficou de fora, e o resultado era um rótulo de
   texto sem controle nenhum ao lado.

   Não dava para ligar o selo porque não havia o que clicar — e o
   formulário salvava "desligado" porque a caixa nunca era marcada. O
   bug do campo ausente que eu caçei antes era real, mas era o segundo
   da fila. Este aqui é o primeiro.
   =================================================================== */
.sw{display:flex;align-items:center;gap:11px;cursor:pointer;user-select:none}

.sw-t{width:42px;height:24px;border-radius:20px;background:var(--border);
      position:relative;flex:none;transition:background .2s}
.sw-t i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;
        background:#fff;transition:left .2s;box-shadow:0 1px 3px rgba(0,0,0,.28)}

.sw.on .sw-t{background:var(--ok)}
.sw.on .sw-t i{left:21px}
.sw:hover .sw-t{filter:brightness(.95)}

/* Quando o interruptor está ligado, a borda do bloco acompanha. Sem
   isso, num formulário com três empilhados, é preciso olhar cada
   bolinha para saber o estado. */
label.sw.on{border-color:var(--ok) !important;background:var(--ok-soft)}

/* Alguns interruptores usam <input type=checkbox> visível, sem a peça
   desenhada. Ele fica com a cor da marca em vez do azul do sistema. */
input[type=checkbox]{accent-color:var(--pri);width:16px;height:16px;cursor:pointer}

.ajuda-cod{background:var(--bg);padding:11px 14px;border-radius:8px;margin:10px 0;
           font-family:ui-monospace,Consolas,monospace;font-size:12.5px;
           color:var(--txt);overflow-x:auto;white-space:nowrap}
.ajuda-cod b{color:var(--pri);background:var(--pri-soft);padding:1px 4px;border-radius:4px}

/* ===================================================================
   CONVERSA DO SUPORTE

   Balões de lados opostos, como em aplicativo de mensagem. É o formato
   que qualquer pessoa já sabe ler sem explicação — e num chamado o que
   mais importa é enxergar de relance quem falou o quê.
   =================================================================== */
.conversa{display:flex;flex-direction:column;gap:16px}

.msg{max-width:78%;background:var(--bg);border-radius:12px;padding:14px 17px}
.msg.do-suporte{align-self:flex-end;background:var(--pri-soft)}

.msg-topo{display:flex;align-items:baseline;gap:10px;margin-bottom:7px}
.msg-topo b{font-size:13px}
.msg-topo small{font-size:11.5px;color:var(--muted)}

.msg-corpo{font-size:14px;line-height:1.65;word-break:break-word}

.msg-anexo{display:block;margin-top:11px}
.msg-anexo img{max-width:100%;max-height:280px;border-radius:9px;
               border:1px solid var(--border);display:block}

@media(max-width:768px){.msg{max-width:92%}}

/* ===================================================================
   TELAS PÚBLICAS COM FORMULÁRIO
   cadastro · obrigado · denúncia

   Mesmo cabeçalho, rodapé e paleta da página de vendas, mas usando as
   classes de formulário do painel. Quem vem da landing decidido a
   contratar não pode cair numa página com outra cara.
   =================================================================== */
.pub-body{background:var(--marca-fundo, #F9ECE5)}

.pub-ct{max-width:1160px;margin:0 auto;padding:0 22px}

.pub-topo{background:#fff;border-bottom:1px solid var(--border);
          position:sticky;top:0;z-index:40}
.pub-topo-in{display:flex;align-items:center;gap:16px;height:70px}

.pub-lg{display:flex;align-items:center;gap:10px;
        font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:19px;
        color:var(--marca, #27354B)}
.pub-lg img{height:38px;width:auto;max-width:180px;object-fit:contain;display:block}
.pub-lg i{width:34px;height:34px;border-radius:9px;background:var(--marca, #27354B);
          color:#fff;display:grid;place-items:center;font-style:normal;font-size:15px;flex:none}

.pub-topo-dir{margin-left:auto;display:flex;align-items:center;gap:12px}
.pub-entrar{font-size:14px;font-weight:500;color:var(--muted)}
.pub-entrar:hover{color:var(--pri)}

/* O fundo claro desce até o topo do conteúdo e vira branco — dá a
   mesma sensação de profundidade da landing sem repetir o degradê. */
.pub-main{padding:38px 0 70px;
          background:linear-gradient(180deg, var(--marca-fundo, #F9ECE5) 0, transparent 240px)}

.pub-rodape{background:var(--marca, #27354B);color:rgba(255,255,255,.6);padding:34px 0 26px}
.pub-rodape-in{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.pub-lg-rodape{color:#fff;font-size:17px}
.pub-lg-rodape i{background:rgba(255,255,255,.15)}
.pub-lg-rodape img{filter:brightness(0) invert(1);opacity:.92;height:32px}

.pub-rodape nav{display:flex;gap:20px;flex-wrap:wrap;margin-left:auto;font-size:13.5px}
.pub-rodape nav a:hover{color:#fff}
.pub-rodape small{font-size:12.5px;width:100%;padding-top:16px;margin-top:4px;
                  border-top:1px solid rgba(255,255,255,.12)}

/* A caixa do formulário tem largura própria por tela. */
.pub-estreito{max-width:720px;margin:0 auto}
.pub-medio{max-width:620px;margin:0 auto}
.pub-curto{max-width:520px;margin:0 auto;text-align:center}

.pub-cabeca{margin-bottom:26px}
.pub-cabeca h1{font-family:'Fraunces',Georgia,serif;font-size:29px;
               line-height:1.25;margin-bottom:8px;color:var(--marca, #27354B)}
.pub-cabeca p{color:var(--muted);font-size:14.5px;line-height:1.6}

@media(max-width:768px){
  .pub-topo-in{height:62px}
  .pub-main{padding:26px 0 50px}
  .pub-rodape nav{margin-left:0;gap:14px}
  .pub-cabeca h1{font-size:24px}
}

/* ===================================================================
   AVATAR

   O do topo mostra a foto quando existe e as iniciais quando não. Uma
   peça só, dois estados — em vez de dois blocos de marcação que se
   desencontram na primeira mudança.
   =================================================================== */
.ini{overflow:hidden}
.ini img{width:100%;height:100%;object-fit:cover;display:block}

.avatar{text-decoration:none;color:inherit}
.avatar:hover{background:var(--bg)}

.avatar-mini{width:34px;height:34px;border-radius:50%;flex:none;overflow:hidden;
             background:var(--pri-soft);color:var(--pri);
             display:grid;place-items:center;font-weight:700;font-size:12px}
.avatar-mini img{width:100%;height:100%;object-fit:cover;display:block}

.avatar-grande{width:84px;height:84px;border-radius:50%;flex:none;overflow:hidden;
               background:var(--pri-soft);color:var(--pri);
               display:grid;place-items:center;font-weight:700;font-size:26px;
               border:1px solid var(--border)}
.avatar-grande img{width:100%;height:100%;object-fit:cover;display:block}

.perfil-topo{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}

@media(max-width:600px){
  .perfil-topo{gap:14px}
  .avatar-grande{width:64px;height:64px;font-size:21px}
}

/* ===================================================================
   MEU DOMÍNIO
   =================================================================== */
.dominio-status{display:flex;align-items:flex-start;gap:14px;flex-wrap:wrap}

/* A luz é o primeiro sinal que a pessoa lê — antes do texto. */
.dominio-luz{width:12px;height:12px;border-radius:50%;flex:none;margin-top:5px}
.estado-ok   .dominio-luz{background:var(--ok);box-shadow:0 0 0 4px var(--ok-soft)}
.estado-dang .dominio-luz{background:var(--dang);box-shadow:0 0 0 4px var(--dang-soft)}
.estado-warn .dominio-luz{background:var(--warn);box-shadow:0 0 0 4px var(--warn-soft);
                          animation:pulsa 2s infinite}
.estado-mut  .dominio-luz{background:var(--muted);box-shadow:0 0 0 4px var(--bg)}

@keyframes pulsa{0%,100%{opacity:1}50%{opacity:.45}}

.dominio-status b{font-size:16px;font-family:ui-monospace,Consolas,monospace}

.dns-tbl code{background:var(--bg);padding:3px 9px;border-radius:6px;
              font-size:13px;color:var(--txt);user-select:all}
.dns-tbl td{vertical-align:middle}

.dns-valor{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dns-valor code{background:var(--bg);padding:8px 14px;border-radius:8px;
                font-size:14px;letter-spacing:.06em;user-select:all}

.passos-dom{margin:0 0 20px 20px;font-size:14.5px;line-height:1.75;color:var(--muted)}
.passos-dom li{margin-bottom:10px}
.passos-dom strong{color:var(--txt);font-weight:600}

/* Ponto no menu, para quem ainda não configurou. */
.ponto{width:7px;height:7px;border-radius:50%;background:var(--warn);
       margin-left:auto;flex:none}
