/* ============================================================
   Visual do site e do painel
   ============================================================ */

:root{
  --terracota:#b0522c;
  --terracota-esc:#8f411f;
  --marrom:#3f3327;
  --papel:#f4efe8;
  --papel-2:#fbf8f4;
  --linha:#e5d9cb;
  --verde:#5d7a4a;
  --suave:rgba(63,51,39,.66);
  --serif:"Cormorant Garamond", Georgia, serif;
  --sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

*{ box-sizing:border-box; }
html,body{ margin:0; padding:0; }
body{
  font-family:var(--sans); font-size:16px; line-height:1.6;
  color:var(--marrom); background:var(--papel);
  -webkit-font-smoothing:antialiased;
}
a{ color:var(--terracota); }
img{ max-width:100%; display:block; }

.env{ width:100%; max-width:1080px; margin:0 auto; padding:0 22px; }
.env-estreito{ max-width:560px; }

/* ---------------- topo ---------------- */
.topo{
  position:sticky; top:0; z-index:50;
  background:rgba(244,239,232,.92); backdrop-filter:blur(8px);
  border-bottom:1px solid var(--linha);
}
.topo .env{ display:flex; align-items:center; justify-content:space-between; height:64px; gap:16px; }
.marca{ font-family:var(--serif); font-size:24px; font-weight:600; color:var(--terracota);
        text-decoration:none; letter-spacing:.01em; white-space:nowrap; }
.topo nav{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }

/* ---------------- filtros e edição em lote do acervo ---------------- */
.filtros-acervo{
  display:grid; gap:12px; margin-bottom:8px;
  grid-template-columns:2fr 1fr 1fr 1fr;
}
@media (max-width:760px){ .filtros-acervo{ grid-template-columns:1fr 1fr; } }
@media (max-width:460px){ .filtros-acervo{ grid-template-columns:1fr; } }

/* Atualização em massa: fica grudada no rodapé e só aparece quando
   há seleção. Barra sempre visível ocupa espaço o tempo todo para
   uma ação que se usa de vez em quando. */
.massa{
  position:sticky; bottom:0; z-index:70;
  padding:14px 16px; margin:0 0 18px; border-radius:12px;
  background:rgba(255,255,255,.97); border:1px solid var(--terracota);
  box-shadow:0 -6px 24px rgba(0,0,0,.10);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
}
.massa[hidden]{ display:none; }
.massa-topo{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; margin-bottom:12px; padding-bottom:10px;
  border-bottom:1px solid var(--linha);
}
.massa-topo b{ color:var(--terracota); font-size:15px; }
.massa-linha{
  display:flex; gap:16px; align-items:flex-start; flex-wrap:wrap;
}
.massa-linha .campo{ flex:0 1 auto; min-width:170px; }
.massa-linha .campo > label:first-child{
  font-size:12px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--suave); font-weight:600;
}
.massa-linha .marcar{ font-size:13.5px; }
@media (max-width:640px){
  .massa-linha{ flex-direction:column; }
  .massa-linha .campo{ width:100%; }
}

.sel-item{ font-size:12px; color:var(--suave); }

/* ---------------- caixa de seleção sobre a arte ----------------
   Desenhada à mão porque a nativa é pequena demais e some sobre a
   imagem. Fica no canto, sempre visível, e o cartão inteiro muda
   quando marcado — a certeza não pode depender de enxergar um
   quadradinho de 16 pixels em cima de uma foto colorida.        */
.modelo{ position:relative; }
.sel-caixa{
  position:absolute; top:10px; left:10px; z-index:3; cursor:pointer;
  width:30px; height:30px; display:block;
}
.sel-caixa input{ position:absolute; opacity:0; width:0; height:0; }
.sel-caixa span{
  display:block; width:30px; height:30px; border-radius:9px;
  background:rgba(255,255,255,.92); border:2px solid var(--linha);
  box-shadow:0 2px 8px rgba(0,0,0,.18);
  transition:background .15s, border-color .15s;
}
.sel-caixa span::after{                       /* o "tique" */
  content:""; position:absolute; left:9px; top:6px;
  width:8px; height:14px; opacity:0;
  border:solid #fff; border-width:0 3px 3px 0;
  transform:rotate(45deg); transition:opacity .15s;
}
.sel-caixa:hover span{ border-color:var(--terracota); }
.sel-caixa input:checked + span{
  background:var(--terracota); border-color:var(--terracota);
}
.sel-caixa input:checked + span::after{ opacity:1; }
.sel-caixa input:focus-visible + span{ outline:2px solid var(--terracota); outline-offset:2px; }

/* o cartão inteiro responde: é isto que dá a certeza de longe.
   A classe .sel vem do JavaScript e cobre navegador sem :has(). */
.modelo.sel,
.modelo:has(input[name="sel[]"]:checked){
  border-color:var(--terracota);
  box-shadow:0 0 0 3px rgba(176,82,44,.22);
}
.modelo.sel img,
.modelo:has(input[name="sel[]"]:checked) img{ opacity:.85; }

.trilha-adm:has(input[name="sel[]"]:checked){
  border-color:var(--terracota);
  box-shadow:0 0 0 2px rgba(176,82,44,.18);
}

/* item da importação em lote: arte à esquerda, campos à direita */
.lote-item{ display:grid; gap:18px; grid-template-columns:190px 1fr; margin-bottom:16px; }
.lote-arte img{
  width:100%; aspect-ratio:9/16; object-fit:cover;
  border-radius:10px; border:1px solid var(--linha);
}
.lote-arte audio{ width:100%; height:36px; }
.lote-arte .mono{
  display:block; font-size:11.5px; color:var(--suave); margin-top:8px;
  word-break:break-all;
}
.lote-campos{ display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); }
@media (max-width:640px){
  .lote-item{ grid-template-columns:1fr; }
  .lote-arte img{ max-width:150px; }
}

/* registro de erros no diagnóstico */
.log-erros{
  margin:0; padding:14px; border-radius:10px; max-height:380px; overflow:auto;
  background:#2b2119; color:#e8ddd2; border:1px solid #1c1611;
  font:12.5px/1.6 ui-monospace,Consolas,monospace; white-space:pre-wrap;
  word-break:break-word;
}

/* blocos recolhíveis na edição de textos do admin */
.bloco-texto summary{
  cursor:pointer; font-family:var(--serif); font-size:19px; font-weight:600;
  list-style:none; position:relative; padding-right:28px;
}
.bloco-texto summary::-webkit-details-marker{ display:none; }
.bloco-texto summary::after{
  content:""; position:absolute; right:4px; top:50%; width:9px; height:9px;
  margin-top:-6px; border-right:2px solid var(--suave); border-bottom:2px solid var(--suave);
  transform:rotate(45deg); transition:transform .18s;
}
.bloco-texto[open] summary::after{ transform:rotate(-135deg); margin-top:-2px; }

/* ---------------- perguntas frequentes ----------------
   Respostas recolhidas: quarenta perguntas abertas viram uma
   parede de texto, e a pessoa desiste e escreve um e-mail que
   já estava respondido ali.                                  */
.faq-grupo{ margin-bottom:30px; }
.faq-grupo h2{
  font-family:var(--serif); font-size:20px; font-weight:600;
  color:var(--terracota); margin:0 0 12px;
}
.faq-item{
  border:1px solid var(--linha); border-radius:12px; background:#fff;
  margin-bottom:8px; overflow:hidden;
}
.faq-item summary{
  cursor:pointer; padding:15px 44px 15px 16px; position:relative;
  font-size:15.5px; font-weight:600; line-height:1.45; list-style:none;
}
.faq-item summary::-webkit-details-marker{ display:none; }
.faq-item summary::after{
  content:""; position:absolute; right:18px; top:50%; width:9px; height:9px;
  margin-top:-6px; border-right:2px solid var(--suave); border-bottom:2px solid var(--suave);
  transform:rotate(45deg); transition:transform .18s;
}
.faq-item[open] summary::after{ transform:rotate(-135deg); margin-top:-2px; }
.faq-item[open] summary{ color:var(--terracota); }
.faq-item summary:hover{ background:var(--papel); }
.faq-item p{
  margin:0; padding:0 16px 16px; font-size:15px; line-height:1.65;
  color:var(--suave); max-width:64ch;
}

/* atalhos de tema reaproveitam o visual das abas do admin */
#temas a{ text-decoration:none; }

/* ---------------- contato ---------------- */
.canais{ display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); }
.canal{
  display:block; text-decoration:none; color:inherit; text-align:center;
  padding:20px 16px; border-radius:14px; background:#fff;
  border:1px solid var(--linha); transition:border-color .15s, transform .15s;
}
.canal:hover{ border-color:var(--terracota); transform:translateY(-2px); }
.canal svg{ width:26px; height:26px; color:var(--terracota); margin-bottom:8px; }
.canal b{ display:block; font-size:15.5px; }
.canal i{ display:block; font-style:normal; font-size:13px; color:var(--suave); margin-top:2px; }
.canal.zap svg{ color:#25d366; }
.canal.zap:hover{ border-color:#25d366; }

/* isca anti-robô: fora da tela, fora do teclado, fora do leitor */
.isca{
  position:absolute; left:-9999px; width:1px; height:1px;
  overflow:hidden; opacity:0; pointer-events:none;
}

/* caixa de edição dos documentos legais: texto longo pede fonte
   de largura fixa, para o "##" e o "-" ficarem visíveis na coluna */
textarea.mono-edit{
  font-family:ui-monospace,Consolas,"Courier New",monospace;
  font-size:13.5px; line-height:1.6; min-height:380px;
}

/* aceite dos termos no cadastro */
.aceite-termos{
  align-items:flex-start; gap:11px; margin:22px 0 18px;
  padding:14px; border-radius:12px; background:var(--papel);
  border:1px solid var(--linha);
}
.aceite-termos input{ margin-top:3px; flex:none; }
.aceite-termos span{ font-size:14.5px; line-height:1.55; }
.aceite-termos i{
  display:block; font-style:normal; font-size:13px;
  color:var(--suave); margin-top:6px;
}

/* ---------------- documentos legais ----------------
   Texto longo pede medida de leitura curta e respiro entre
   seções: termos que ninguém consegue ler não protegem ninguém. */
.legal .painel-cx{ padding:26px 24px; }
.legal h2{
  font-family:var(--serif); font-size:19px; font-weight:600;
  color:var(--terracota); margin:30px 0 10px;
}
.legal h2:first-child{ margin-top:0; }
.legal p{ margin:0 0 12px; font-size:15.5px; line-height:1.7; max-width:66ch; }
.legal ul{ margin:0 0 14px; padding-left:20px; max-width:66ch; }
.legal li{ margin-bottom:7px; font-size:15.5px; line-height:1.6; }
.legal strong{ color:var(--marrom); }

/* ---------------- marca desenhada ----------------
   Onde o nicho tem arquivo de logo, ele entra no lugar do nome
   escrito. A altura muda por contexto; a largura é livre para o
   desenho não distorcer.                                       */
.marca.com-logo{ display:inline-flex; align-items:center; line-height:0; }
.marca.com-logo img{
  height:44px; width:auto; max-width:190px; object-fit:contain; display:block;
}
/* barra do admin e do parceiro são mais baixas que o topo do site */
.menu-admin .marca.com-logo img{ height:30px; max-width:130px; }
.marca-parceiro.com-logo img{ height:30px; max-width:130px; }
.marca-parceiro{ margin-right:6px; }
/* marca isolada, centralizada, em telas sem cabeçalho */
.marca-solta.com-logo img{ height:70px; max-width:240px; }

@media (max-width:560px){
  .marca.com-logo img{ height:34px; max-width:140px; }
  .marca-solta.com-logo img{ height:56px; }
}

/* ---------------- botões ---------------- */
.bt{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  padding:11px 20px; border:0; border-radius:999px; cursor:pointer;
  font:600 15px/1 var(--sans); text-decoration:none; white-space:nowrap;
  background:linear-gradient(180deg,var(--terracota),var(--terracota-esc));
  color:#fff; box-shadow:0 4px 12px rgba(143,65,31,.26);
  transition:transform .15s, box-shadow .15s;
}
.bt:hover{ transform:translateY(-1px); box-shadow:0 7px 18px rgba(143,65,31,.32); }
.bt:active{ transform:translateY(0); }
.bt.fantasma{ background:none; color:var(--terracota); box-shadow:none;
              border:1px solid rgba(176,82,44,.42); }
.bt.claro{ background:#fff; color:var(--terracota); box-shadow:none; border:1px solid var(--linha); }
.bt.pequeno{ padding:8px 14px; font-size:14px; }
.bt.largo{ width:100%; }
.bt[disabled]{ opacity:.45; pointer-events:none; }
.bt svg{ width:17px; height:17px; }

/* ---------------- landing ---------------- */
.heroi{ padding:76px 0 60px; text-align:center; }
.heroi h1{
  font-family:var(--serif); font-weight:600; font-size:clamp(36px,6vw,60px);
  line-height:1.1; margin:0 0 18px; letter-spacing:-.01em;
}
.heroi h1 em{ font-style:italic; color:var(--terracota); }
.heroi p.sub{ font-size:clamp(17px,2.2vw,20px); color:var(--suave);
              max-width:600px; margin:0 auto 30px; }
.heroi .acoes{ display:flex; gap:12px; justify-content:center; flex-wrap:wrap; }
.selo{ display:inline-block; font-size:13px; letter-spacing:.14em; text-transform:uppercase;
       color:var(--terracota); margin-bottom:18px; font-weight:600; }

/* ---------------- marca no herói ----------------
   Grande, abrindo a página. O logo do cabeçalho é pequeno e serve
   de âncora durante a rolagem; este é a apresentação.

   O multiply some com o fundo branco do PNG sobre o degradê claro
   do herói — remendo, não solução: o certo é um arquivo com fundo
   transparente, e aí esta linha pode sair.                      */
.heroi-marca{
  display:block; margin:0 auto 22px;
  max-height:120px; max-width:min(340px, 78vw); width:auto; height:auto;
  object-fit:contain; mix-blend-mode:multiply;
}
/* com a marca desenhada em cima, o selo vira legenda dela */
.heroi-marca + .selo{ margin-bottom:14px; opacity:.9; }

@media (max-width:640px){
  .heroi-marca{ max-height:82px; margin-bottom:16px; }
}

.secao{ padding:62px 0; }
.secao.alt{ background:var(--papel-2); border-top:1px solid var(--linha);
            border-bottom:1px solid var(--linha); }
.secao h2{ font-family:var(--serif); font-size:clamp(28px,4vw,40px); font-weight:600;
           margin:0 0 12px; text-align:center; }
.secao .intro{ text-align:center; color:var(--suave); max-width:600px; margin:0 auto 40px; }

.grade{ display:grid; gap:22px; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
.cartao{ background:#fff; border:1px solid var(--linha); border-radius:14px; padding:26px; }
.cartao h3{ font-family:var(--serif); font-size:22px; margin:0 0 8px; font-weight:600; }
.cartao p{ margin:0; color:var(--suave); font-size:15px; }
.cartao .ico{ width:40px; height:40px; color:var(--terracota); margin-bottom:14px; }
.cartao .ico svg{ width:100%; height:100%; }

/* passos */
.passos{ counter-reset:p; display:grid; gap:20px;
         grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); }
.passo{ position:relative; padding-left:52px; }
.passo::before{
  counter-increment:p; content:counter(p);
  position:absolute; left:0; top:0; width:36px; height:36px; border-radius:50%;
  display:grid; place-items:center; font:600 16px var(--sans);
  background:var(--terracota); color:#fff;
}
.passo h3{ font-family:var(--serif); font-size:20px; margin:4px 0 6px; font-weight:600; }
.passo p{ margin:0; color:var(--suave); font-size:15px; }

/* planos */
.planos{ display:grid; gap:18px; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); }
/* Modo aberto: um cartão só. Sem isto ele estica na largura toda da
   seção e parece um banner, não uma oferta. */
.planos-um{ grid-template-columns:minmax(0,340px); justify-content:center; }
.planos-um .plano{ border-color:var(--terracota); box-shadow:0 10px 28px rgba(143,65,31,.13); }
.plano{ background:#fff; border:1px solid var(--linha); border-radius:14px;
        padding:26px 22px; text-align:center; position:relative; }
.plano.destaque{ border-color:var(--terracota); box-shadow:0 10px 28px rgba(143,65,31,.13); }
.plano .fita{ position:absolute; top:-11px; left:50%; transform:translateX(-50%);
              background:var(--terracota); color:#fff; font-size:12px; font-weight:600;
              letter-spacing:.08em; text-transform:uppercase; padding:4px 12px; border-radius:999px; }
.plano h3{ font-family:var(--serif); font-size:19px; margin:0 0 10px; font-weight:600; }
.plano .valor{ font-family:var(--serif); font-size:38px; color:var(--terracota);
               font-weight:600; line-height:1; }
.plano .valor small{ font-size:16px; }
.plano ul{ list-style:none; padding:0; margin:18px 0 0; text-align:left; font-size:14.5px;
           color:var(--suave); }
.plano li{ padding:5px 0 5px 22px; position:relative; }
.plano li::before{ content:"✓"; position:absolute; left:0; color:var(--verde); font-weight:700; }

/* quantidade e "o que este plano acrescenta" no cartão de faixa */
.plano-qtd{ margin:10px 0 0; font-size:14px; color:var(--suave); font-weight:600; }
.plano-itens{ list-style:none; padding:0; margin:14px 0 0; text-align:left;
              font-size:13.5px; color:var(--suave); }
.plano-itens li{ padding:4px 0 4px 20px; position:relative; }
.plano-itens li::before{ content:"+"; position:absolute; left:0; top:4px;
                         color:var(--terracota); font-weight:700; }

.rodape{ border-top:1px solid var(--linha); padding:34px 0; text-align:center;
         color:var(--suave); font-size:14px; }

/* ---------------- formulários ---------------- */
.painel-cx{ background:#fff; border:1px solid var(--linha); border-radius:14px; padding:28px; }
.campo{ margin-bottom:16px; }
.campo label{ display:block; font-size:14px; font-weight:600; margin-bottom:6px; }
.campo .dica{ font-weight:400; color:var(--suave); font-size:13px; }
input[type=text], input[type=email], input[type=password], input[type=file], textarea, select{
  width:100%; padding:11px 13px; border:1px solid var(--linha); border-radius:9px;
  font:15px/1.5 var(--sans); color:var(--marrom); background:#fff;
}
textarea{ min-height:86px; resize:vertical; }
input:focus, textarea:focus, select:focus{
  outline:none; border-color:var(--terracota); box-shadow:0 0 0 3px rgba(176,82,44,.13);
}
.linha2{ display:grid; gap:14px; grid-template-columns:1fr 1fr; }
@media (max-width:640px){ .linha2{ grid-template-columns:1fr; } }

/* ---------------- avisos ---------------- */
.aviso{ padding:13px 16px; border-radius:10px; margin-bottom:20px; font-size:15px; }
.aviso.ok{ background:#eaf5e6; border:1px solid #bcd9ae; color:#39602a; }
.aviso.erro{ background:#fdecea; border:1px solid #f0b4ac; color:#8f2015; }
.aviso.info{ background:#fff6e6; border:1px solid #e8cf9a; color:#7a5a1c; }

/* ---------------- painel ---------------- */
.painel{ display:grid; grid-template-columns:232px 1fr; gap:28px; padding:30px 0 60px; align-items:start; }
@media (max-width:860px){ .painel{ grid-template-columns:1fr; } }
.menu{ background:#fff; border:1px solid var(--linha); border-radius:14px; padding:10px;
       position:sticky; top:84px; }
@media (max-width:860px){ .menu{ position:static; } }
.menu a{ display:flex; align-items:center; gap:10px; padding:10px 13px; border-radius:9px;
         text-decoration:none; color:var(--marrom); font-size:15px; font-weight:500; }
.menu a:hover{ background:var(--papel); }
.menu a.on{ background:var(--terracota); color:#fff; }
.menu a svg{ width:17px; height:17px; opacity:.8; }
.menu hr{ border:0; border-top:1px solid var(--linha); margin:8px 4px; }

h1.titulo{ font-family:var(--serif); font-size:32px; font-weight:600; margin:0 0 6px; }
p.legenda{ color:var(--suave); margin:0 0 24px; }

.estado{ display:inline-flex; align-items:center; gap:7px; padding:5px 13px; border-radius:999px;
         font-size:13px; font-weight:600; }
.estado::before{ content:""; width:7px; height:7px; border-radius:50%; background:currentColor; }
.estado.rascunho{ background:#f0ebe4; color:#7a6a58; }
.estado.aguardando{ background:#fff3dc; color:#9a6b12; }
.estado.ativo{ background:#e6f4e2; color:#3d6b2c; }

.secao-form{ margin-bottom:30px; }
.secao-form h2{ font-family:var(--serif); font-size:21px; font-weight:600;
                margin:0 0 4px; padding-bottom:8px; border-bottom:1px solid var(--linha); }
.secao-form .nota{ color:var(--suave); font-size:14px; margin:6px 0 16px; }

table.lista{ width:100%; border-collapse:collapse; font-size:15px; }
table.lista th{ text-align:left; font-size:13px; text-transform:uppercase; letter-spacing:.06em;
                color:var(--suave); padding:8px 10px; border-bottom:1px solid var(--linha); }
table.lista td{ padding:11px 10px; border-bottom:1px solid var(--linha); vertical-align:middle; }
table.lista tr:last-child td{ border-bottom:0; }
table.lista .mono{ font-family:ui-monospace,Consolas,monospace; font-size:13px; color:var(--suave);
                   word-break:break-all; }
.acoes-linha{ display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; }

.vazio{ text-align:center; padding:40px 20px; color:var(--suave); }

/* galeria de modelos */
.modelos{ display:grid; gap:20px; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); }
.modelo{ border:2px solid var(--linha); border-radius:14px; overflow:hidden; background:#fff;
         cursor:pointer; text-align:center; padding:0 0 14px; transition:border-color .15s; }
.modelo:hover{ border-color:rgba(176,82,44,.5); }
.modelo.on{ border-color:var(--terracota); }
.modelo img{ width:100%; aspect-ratio:9/16; object-fit:cover; border-bottom:1px solid var(--linha); }
.modelo h3{ font-family:var(--serif); font-size:18px; margin:12px 0 4px; font-weight:600; }
.modelo input{ display:none; }
/* a capa é o alvo natural de clique: é nela que a pessoa toca */
.modelo .capa{ display:block; cursor:pointer; }
.modelo.travado .capa{ cursor:not-allowed; }
.modelo .marca-sel{ font-size:13px; color:var(--suave); display:block; cursor:pointer; }
.modelo .marca-sel.on{ color:var(--terracota); font-weight:600; }
.modelo.on .marca-sel{ color:var(--terracota); font-weight:600; }

/* Selos do cartão de modelo, no admin.
   Discretos de propósito: são referência de conferência, não
   decoração. O ícone só acompanha o texto — sozinho ele viraria
   charada, e no celular não existe passar o mouse para ler o title. */
.modelo .selos{
  display:flex; flex-wrap:wrap; gap:5px;
  padding:0 10px; margin:6px 0 2px;
}
.modelo .selo{
  display:inline-flex; align-items:center; gap:4px;
  font-size:11.5px; line-height:1.35; color:var(--suave);
  background:var(--papel); border:1px solid var(--linha);
  border-radius:999px; padding:3px 8px 3px 6px;
  cursor:help; white-space:nowrap;
}
.modelo .selo i{ font-style:normal; font-size:12.5px; }

/* O mesmo selo, solto — usado nos modelos de e-mail para marcar
   "editado", "só sininho" e a lista de marcadores. */
.selo{
  display:inline-flex; align-items:center; gap:4px;
  font-size:11.5px; line-height:1.35; color:var(--suave);
  background:var(--papel); border:1px solid var(--linha);
  border-radius:999px; padding:3px 8px 3px 6px;
}
.selo i{ font-style:normal; font-size:12.5px; }

/* escolha do tamanho dentro do cartão da arte */
.modelo .tamanhos{ display:flex; gap:6px; padding:0 10px; margin-top:4px; }
.modelo .tamanhos label{
  flex:1 1 0; cursor:pointer; border:1px solid var(--linha); border-radius:9px;
  padding:7px 4px; background:var(--papel); transition:border-color .15s, background .15s;
}
.modelo .tamanhos label:hover{ border-color:rgba(176,82,44,.5); }
.modelo .tamanhos label.on{
  border-color:var(--terracota); background:#fff;
  box-shadow:inset 0 0 0 1px var(--terracota);
}
.modelo .tamanhos b{ display:block; font-size:13px; }
.modelo .tamanhos i{ display:block; font-style:normal; font-size:11.5px; color:var(--suave); }
.modelo .tamanhos label.on b{ color:var(--terracota); }

/* modelo fora do plano: aparece, mas não deixa escolher.
   Ver o que está fechado é o que faz querer abrir.        */
.modelo.travado{ cursor:not-allowed; }
.modelo.travado img{ filter:grayscale(.55) blur(1.5px); opacity:.62; }
.modelo.travado h3{ color:var(--suave); }
.modelo.travado .marca-sel{ font-size:12px; }
.modelo.travado:hover{ border-color:var(--linha); }

/* ============================================================
   BLOG
   ------------------------------------------------------------
   Tipografia de leitura, e só. Nada de biblioteca nova: o site é
   PHP renderizado no servidor, e essa é a vantagem que faz a
   página abrir rápido. Não vale estragar por enfeite.
   ============================================================ */

.post-trilha{ font-size:13.5px; color:var(--suave); display:flex; gap:8px; flex-wrap:wrap; }
.post-trilha a{ color:var(--suave); }

.post-resumo{
  font-size:18px; line-height:1.6; color:var(--suave);
  margin:0 0 18px; max-width:62ch;
}

.post-meta{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  font-size:14px; color:var(--suave); margin-bottom:22px;
}
.post-autor-foto{ border-radius:50%; object-fit:cover; }

.post-capa{ margin:0 0 26px; }
.post-capa img{
  width:100%; height:auto; border-radius:14px;
  border:1px solid var(--linha); display:block;
}

/* O corpo do texto. A medida de linha é o que decide se a pessoa
   lê até o fim — linha longa demais faz o olho perder o começo. */
.post-corpo{ font-size:17.5px; line-height:1.75; max-width:66ch; }
.post-corpo p{ margin:0 0 18px; }
.post-corpo h2{
  font-family:var(--serif); font-size:26px; font-weight:600;
  margin:36px 0 12px; line-height:1.25;
}
.post-corpo h3{
  font-family:var(--serif); font-size:21px; font-weight:600;
  margin:28px 0 10px;
}
.post-corpo a{ color:var(--terracota); text-decoration:underline; text-underline-offset:2px; }

.post-fig{ margin:26px 0; }
.post-fig img{
  width:100%; height:auto; border-radius:12px;
  border:1px solid var(--linha); display:block;
}
.post-fig figcaption{
  font-size:13.5px; color:var(--suave); margin-top:8px; text-align:center;
}

.post-lista{ margin:0 0 18px; padding-left:22px; }
.post-lista li{ margin-bottom:8px; }

.post-cit{
  margin:26px 0; padding:4px 0 4px 18px;
  border-left:3px solid var(--terracota);
  font-family:var(--serif); font-size:20px; font-style:italic;
}
.post-cit p{ margin:0 0 6px; }
.post-cit cite{ font-size:14px; font-style:normal; color:var(--suave); }

.post-destaque{
  margin:26px 0; padding:16px 18px; border-radius:12px;
  background:var(--papel); border:1px solid var(--linha);
  border-left:3px solid var(--verde); font-size:16.5px;
}

.post-qa{ margin:0 0 20px; }
.post-qa h3{ margin-bottom:6px; }

/* Chamada de conversão. Precisa ser visível sem parecer anúncio:
   quem está lendo aceita uma oferta relacionada, não um banner. */
.post-cta{
  margin:32px 0; padding:22px; border-radius:16px;
  background:var(--papel-2); border:1px solid var(--linha);
  text-align:center;
}
.post-cta b{ font-family:var(--serif); font-size:21px; display:block; margin-bottom:6px; }
.post-cta p{ margin:0 0 16px; color:var(--suave); font-size:15.5px; }
.post-cta-fim{ background:var(--papel); }

.post-modelos{ margin:30px 0; text-align:center; }
.post-modelos .grade{
  display:grid; gap:10px; margin-bottom:14px;
  grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
}
.post-modelos figure{ margin:0; }
.post-modelos img{
  width:100%; aspect-ratio:9/16; object-fit:cover;
  border-radius:10px; border:1px solid var(--linha); display:block;
}
.post-modelos figcaption{ font-size:12.5px; color:var(--suave); margin-top:5px; }

.post-bio{
  display:flex; gap:14px; align-items:flex-start;
  margin:34px 0; padding:18px; border-radius:14px;
  background:var(--papel); border:1px solid var(--linha);
}
.post-bio img{ border-radius:50%; object-fit:cover; flex:0 0 auto; }
.post-bio b{ display:block; font-size:16px; }
.post-bio .legenda{ display:block; font-size:13.5px; margin-bottom:6px; }
.post-bio p{ margin:0; font-size:15px; color:var(--suave); }

.post-vizinhos{ margin-top:40px; }
.post-vizinhos h2{ font-family:var(--serif); font-size:22px; margin:0 0 14px; }
.post-vizinhos .grade{
  display:grid; gap:14px; grid-template-columns:repeat(auto-fit,minmax(170px,1fr));
}
.post-vizinhos .cartao{
  display:block; border:1px solid var(--linha); border-radius:12px;
  overflow:hidden; background:var(--papel-2); color:inherit; text-decoration:none;
}
.post-vizinhos .cartao img{
  width:100%; aspect-ratio:16/9; object-fit:cover; display:block;
}
.post-vizinhos .cartao b{ display:block; padding:10px 12px; font-size:15px; line-height:1.35; }

/* --- lista --- */
.post-lista-cartoes{ display:grid; gap:22px; margin-top:24px; }
.post-cartao{
  display:grid; gap:16px; grid-template-columns:200px 1fr;
  align-items:start; border-bottom:1px solid var(--linha); padding-bottom:22px;
}
.post-cartao.destaque{ grid-template-columns:1fr; }
.post-cartao .capa img{
  width:100%; aspect-ratio:16/9; object-fit:cover;
  border-radius:12px; border:1px solid var(--linha); display:block;
}
.post-cartao.destaque .capa img{ aspect-ratio:21/9; }
.post-cartao h2{ font-family:var(--serif); font-size:22px; margin:6px 0 8px; line-height:1.25; }
.post-cartao.destaque h2{ font-size:29px; }
.post-cartao h2 a{ color:inherit; text-decoration:none; }
.post-cartao h2 a:hover{ color:var(--terracota); }
.post-cartao p{ margin:0 0 10px; color:var(--suave); font-size:15.5px; line-height:1.6; }
.post-cat{
  font-size:12px; text-transform:uppercase; letter-spacing:.07em;
  color:var(--terracota); text-decoration:none; font-weight:600;
}
.post-paginas{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; margin-top:28px; flex-wrap:wrap;
}

/* Barra do celular. Discreta de propósito: o Google penaliza
   interstício que atrapalha, e leitor irritado não vira cliente. */
.post-barra{
  position:fixed; left:0; right:0; bottom:0; z-index:80;
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:10px 14px; background:var(--papel-2);
  border-top:1px solid var(--linha); box-shadow:0 -4px 18px rgba(0,0,0,.07);
  font-size:13.5px; color:var(--suave);
}
.post-barra[hidden]{ display:none; }
@media (min-width:760px){ .post-barra{ display:none; } }

@media (max-width:640px){
  .post-cartao{ grid-template-columns:1fr; }
  .post-corpo{ font-size:17px; }
  .post-cartao.destaque h2{ font-size:24px; }
}

/* ---------------- Analytics ---------------- */
.cartoes-num{
  display:grid; gap:12px;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
}
.cartao-num{
  background:var(--papel-2); border:1px solid var(--linha);
  border-radius:14px; padding:16px 18px;
}
.cartao-num b{ display:block; font-size:30px; line-height:1.1; font-family:var(--serif); }
.cartao-num span{ display:block; font-size:14px; margin-top:2px; }
.cartao-num i{ display:block; font-style:normal; font-size:12.5px; color:var(--suave); margin-top:4px; }

/* Ícone do cartão. Classe em vez de estilo inline porque ele
   muda de lugar no celular — e regra que muda por tamanho de tela
   não cabe num atributo style. */
.cartao-num .ico-num{ display:block; color:var(--suave); margin:0 0 2px; line-height:0; }
.cartao-num .ico-num svg{ width:26px; height:26px; }

/* Rótulo curto acima de campo estreito. No computador fica
   discreto ao lado do seletor; no celular é o que diz se a
   caixinha é de adulto ou de criança. */
.campo-min{ display:inline-flex; flex-direction:column; gap:2px; }
.campo-min span{
  font-size:11px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--suave); font-weight:600;
}

/* Barras por dia. Sem biblioteca de gráfico: são divs com altura em
   porcentagem, e isso não custa um único kilobyte de JavaScript. */
.barras-dia{
  display:flex; align-items:flex-end; gap:3px;
  height:150px; overflow-x:auto; padding-bottom:2px;
}
.barras-dia .barra{
  flex:1 0 14px; display:flex; flex-direction:column;
  align-items:center; justify-content:flex-end; height:100%; cursor:help;
}
.barras-dia .barra span{
  width:100%; min-height:2px; border-radius:4px 4px 0 0;
  background:linear-gradient(180deg,var(--terracota),var(--terracota-esc));
}
.barras-dia .barra i{
  font-style:normal; font-size:9.5px; color:var(--suave);
  margin-top:4px; white-space:nowrap; transform:rotate(-45deg);
  transform-origin:center; height:14px;
}

.linha-barra{
  display:grid; grid-template-columns:100px 1fr 44px;
  gap:8px; align-items:center; margin-bottom:7px; font-size:14px;
}
.linha-barra .rot{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.linha-barra .tr{ background:var(--papel); border-radius:999px; height:9px; overflow:hidden; }
.linha-barra .tr i{ display:block; height:100%; background:var(--terracota); border-radius:999px; }
.linha-barra b{ text-align:right; font-size:13.5px; }

.grade-analytics{
  display:grid; gap:18px; margin-top:22px;
  grid-template-columns:repeat(auto-fit,minmax(320px,1fr));
}

/* Editor de blocos do admin. Cada bloco é uma caixa com cabeçalho
   próprio: sem a moldura, cinco parágrafos seguidos viram uma
   parede de campos e ninguém acha onde está mexendo. */
.bloco-ed{
  border:1px solid var(--linha); border-radius:12px;
  padding:14px; margin-bottom:12px; background:var(--papel-2);
}
.bloco-cab{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; margin-bottom:10px;
}
.bloco-cab b{ font-size:13px; text-transform:uppercase; letter-spacing:.05em; color:var(--suave); }
.bloco-ed textarea{ width:100%; font-family:inherit; font-size:15px; line-height:1.6; }
.bloco-ed[data-tipo="chamada"]{ border-left:3px solid var(--terracota); }
.bloco-ed[data-tipo="modelos"]{ border-left:3px solid var(--verde); }

.tabela-rolagem{ overflow-x:auto; }
.tabela{ width:100%; border-collapse:collapse; font-size:14.5px; }
.tabela th{
  text-align:left; font-size:12px; text-transform:uppercase; letter-spacing:.05em;
  color:var(--suave); padding:0 10px 8px; border-bottom:1px solid var(--linha);
  white-space:nowrap;
}
.tabela td{ padding:12px 10px; border-bottom:1px solid var(--linha); vertical-align:top; }

/* Linha de estado no diagnóstico: nem aviso, nem erro — só o
   fato. Serve para responder "de onde vem este dado" antes de
   alguém precisar abrir o FTP para descobrir. */
.linha-info{
  font-size:14.5px; line-height:1.55;
  background:var(--papel); border:1px solid var(--linha);
  border-left:3px solid var(--terracota);
  border-radius:10px; padding:12px 14px;
}
.linha-info .legenda{ font-size:13px; }

/* Escolha do meio de pagamento. Dois cartões grandes em vez de um
   select: é a última decisão antes de pagar, e select escondido
   nessa hora faz a pessoa não perceber que havia opção. */
.metodos{ display:grid; gap:10px; margin-top:14px; }
@media (min-width:520px){ .metodos{ grid-template-columns:1fr 1fr; } }
.metodo{
  display:block; cursor:pointer; padding:14px 16px;
  border:1px solid var(--linha); border-radius:12px; background:var(--papel-2);
  transition:border-color .15s, background .15s;
}
.metodo input{ position:absolute; opacity:0; }
.metodo .corpo b{ display:block; font-size:16px; margin-bottom:2px; }
.metodo .corpo i{ font-style:normal; font-size:13.5px; color:var(--suave); }
.metodo:has(input:checked){
  border-color:var(--terracota); background:#fff;
  box-shadow:0 0 0 2px rgba(176,82,44,.14);
}
.metodo:hover{ border-color:var(--terracota); }

/* Aviso de cores não salvas. Cobre a tela de propósito: é uma
   decisão de três saídas, e as três precisam estar à vista. */
.guarda-cores{
  position:fixed; inset:0; z-index:9000;
  background:rgba(24,18,14,.55);
  display:flex; align-items:center; justify-content:center; padding:18px;
}
.guarda-cores[hidden]{ display:none; }
.guarda-cores .cartao{
  background:var(--papel-2); border-radius:16px; padding:24px 22px 20px;
  max-width:430px; width:100%; box-shadow:0 18px 50px rgba(0,0,0,.28);
}
.guarda-cores h3{
  font-family:var(--serif); font-size:20px; margin:0 0 10px; font-weight:600;
}
.guarda-cores p{ margin:0 0 18px; font-size:14.5px; line-height:1.5; color:var(--suave); }
.guarda-cores .acoes{ display:flex; flex-direction:column; gap:8px; }
.guarda-cores .acoes .bt{ width:100%; text-align:center; }

/* chave pix */
.pix-chave{ font-family:ui-monospace,Consolas,monospace; font-size:15px; background:var(--papel);
            border:1px dashed rgba(176,82,44,.5); border-radius:9px; padding:14px;
            word-break:break-all; margin:10px 0 14px; user-select:all; }

/* opções de escolha (música, etc.) */
.opcao{
  display:flex; align-items:flex-start; gap:11px; cursor:pointer;
  padding:13px 14px; margin-bottom:8px;
  border:1px solid var(--linha); border-radius:12px; background:#fff;
  transition:border-color .15s, background .15s;
}
.opcao:hover{ border-color:rgba(176,82,44,.45); }
.opcao input{ width:auto; margin-top:3px; flex:none; accent-color:var(--terracota); }
.opcao span{ display:block; }
.opcao b{ display:block; font-size:15.5px; font-weight:600; }
.opcao i{ display:block; font-style:normal; font-size:13.5px; color:var(--suave); margin-top:2px; }
.opcao:has(input:checked){ border-color:var(--terracota); background:var(--papel); }

.sub-opcao{ display:none; margin:-2px 0 12px; padding:14px; border-radius:12px;
            background:var(--papel); border:1px dashed var(--linha); }
.sub-opcao.on{ display:block; }

.trilha{
  display:flex; align-items:center; gap:11px; cursor:pointer;
  padding:9px 11px; border-radius:10px; background:#fff;
  border:1px solid var(--linha); margin-bottom:7px;
}
.trilha:has(input:checked){ border-color:var(--terracota); }
.trilha input{ width:auto; flex:none; accent-color:var(--terracota); }
.trilha .tocar{
  width:32px; height:32px; flex:none; padding:0; cursor:pointer;
  display:grid; place-items:center; border-radius:50%;
  border:1px solid rgba(176,82,44,.4); background:#fff; color:var(--terracota);
}
.trilha .tocar svg{ width:14px; height:14px; margin-left:2px; }
.trilha .tocar.on{ background:var(--terracota); color:#fff; }
.trilha .tocar.on svg{ margin-left:0; }
.trilha .info b{ display:block; font-size:15px; font-weight:600; }
.trilha .info i{ display:block; font-style:normal; font-size:13px; color:var(--suave); }

/* fundos próprios */
.fundos{ display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); }
.fundo-item{
  border:1px solid var(--linha); border-radius:12px; padding:10px; background:#fff;
}
.fundo-item img{
  width:100%; aspect-ratio:9/16; object-fit:cover;
  border-radius:8px; border:1px solid var(--linha); margin-bottom:9px;
}
.fundo-item .rot{
  display:flex; align-items:center; justify-content:space-between; gap:6px;
  font-size:13.5px; font-weight:600; margin-bottom:8px;
}
.fundo-item .rot span{ font-weight:400; font-size:12px; color:var(--suave); }
.fundo-item .rot span.meu{ color:var(--terracota); font-weight:600; }
.fundo-item input[type=file]{ font-size:12.5px; padding:7px; }

/* ---------------- escolher foto no celular ----------------
   O <input type=file> nativo vira um botão minúsculo escrito
   "Escolher arquivo". Escondê-lo e usar o <label> como área de
   toque dá um alvo grande e um texto que se entende.          */
.entrada-foto{ position:absolute; opacity:0; width:0; height:0; pointer-events:none; }
.escolher-foto{
  display:flex; align-items:center; gap:10px; cursor:pointer;
  padding:12px; border-radius:10px; text-align:left;
  border:1.5px dashed var(--linha); background:var(--papel);
  transition:border-color .15s, background .15s;
}
.escolher-foto:hover, .escolher-foto:focus-within{
  border-color:var(--terracota); background:#fff;
}
.escolher-foto svg{ width:22px; height:22px; flex:none; color:var(--terracota); }
.escolher-foto b{ font-size:14px; display:block; }
.escolher-foto i{
  display:block; font-style:normal; font-size:12px; color:var(--suave);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:100%;
}
.escolher-foto.tem{ border-style:solid; border-color:var(--terracota); background:#fff; }
.escolher-foto.tem i{ color:var(--terracota); font-weight:600; }

/* ---------------- galeria de músicas no admin ---------------- */
.trilha-adm{
  border:1px solid var(--linha); border-radius:12px; padding:14px;
  margin-bottom:12px; background:var(--papel-2);
}
.trilha-adm.faltando{ border-color:#f0b4ac; background:#fdf5f4; }
.trilha-adm .topo-tr{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; flex-wrap:wrap; margin-bottom:12px;
}
.trilha-adm .topo-tr b{ font-size:16px; }
.trilha-adm .topo-tr .mono{ font-size:12px; color:var(--suave); margin-left:8px; }
.trilha-adm audio{ height:34px; max-width:280px; }
.trilha-adm .linha-tr{
  display:grid; gap:12px; align-items:start;
  grid-template-columns:1.2fr .8fr 1.6fr 1fr auto;
}
.trilha-adm .acoes-tr{ align-self:end; }
@media (max-width:900px){
  .trilha-adm .linha-tr{ grid-template-columns:1fr; }
  .trilha-adm audio{ max-width:100%; width:100%; }
}

/* ---------------- menu do admin, grudado no topo ----------------
   As listas do admin são longas. Menu que sobe junto com a rolagem
   obrigava a voltar ao topo para pular de seção.                 */
.menu-admin{
  position:sticky; top:0; z-index:80;
  background:rgba(255,255,255,.96); border-bottom:1px solid var(--linha);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
}
.menu-admin .env{
  display:flex; align-items:center; gap:14px; padding:10px 16px;
}
.menu-admin .marca{
  font-family:var(--serif); font-size:17px; font-weight:600;
  color:var(--terracota); text-decoration:none; flex:0 0 auto;
}
/* O menu cresceu e passou de dez itens. Com rolagem horizontal e a
   barra escondida, os últimos — Documentos e Diagnóstico — sumiam
   sem nenhum sinal de que havia mais coisa: parecia que o botão
   tinha deixado de existir.

   Na tela larga ele agora QUEBRA em duas linhas. Ocupa mais altura,
   e em troca nada fica escondido. Menu que esconde item não é menu. */
.menu-admin nav{
  display:flex; gap:4px; flex:1 1 auto; flex-wrap:wrap; row-gap:2px;
}
.menu-admin nav a{
  white-space:nowrap; text-decoration:none; font-size:14px; font-weight:500;
  color:var(--suave); padding:7px 12px; border-radius:999px;
  transition:background .15s, color .15s;
}
.menu-admin nav a:hover{ background:var(--papel); color:var(--terracota); }
.menu-admin nav a.on{ background:var(--terracota); color:#fff; font-weight:600; }
.menu-admin .fim{ display:flex; align-items:center; gap:8px; flex:0 0 auto; }
.menu-admin .fim form{ margin:0; }

@media (max-width:760px){
  .menu-admin .env{ flex-wrap:wrap; gap:8px; padding:8px 12px; }
  .menu-admin .marca{ font-size:15px; }
  .menu-admin .fim{ margin-left:auto; }

  /* No celular, onze itens quebrados dariam quatro linhas de menu
     antes de qualquer conteúdo. Aqui a rolagem lateral compensa —
     mas com um esmaecido na borda direita, que é o sinal de que há
     mais coisa. Foi a falta dele que fez o Diagnóstico "sumir". */
  .menu-admin nav{
    order:3; flex:1 1 100%; flex-wrap:nowrap;
    overflow-x:auto; scrollbar-width:none; padding-bottom:2px;
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 26px),transparent);
            mask-image:linear-gradient(to right,#000 calc(100% - 26px),transparent);
  }
  .menu-admin nav::-webkit-scrollbar{ display:none; }
  /* o último item ganha uma folga para não morrer dentro do esmaecido */
  .menu-admin nav a:last-child{ margin-right:20px; }
}

/* ---------------- barra fixa de ação no celular ----------------
   Páginas longas de painel escondem os botões que dão sentido a
   elas. A barra mantém "salvar" e "ver prévia" ao alcance do
   polegar, sem o usuário rolar de volta ao topo.                */
.so-mobile{ display:none; }
.barra-fixa{
  position:fixed; left:0; right:0; bottom:0; z-index:90;
  display:flex; gap:10px; padding:12px 14px;
  padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));
  background:rgba(255,255,255,.94);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  border-top:1px solid var(--linha);
  box-shadow:0 -6px 20px rgba(0,0,0,.07);
}
.barra-fixa .bt{ flex:1 1 0; justify-content:center; }

@media (max-width:760px){
  .so-desktop{ display:none !important; }
  .so-mobile{ display:flex; }
  /* espaço para a barra não cobrir o fim da página */
  body:has(.barra-fixa) .painel main{ padding-bottom:84px; }
}

/* campo que o modelo curto não mostra: fica, com aviso, e o texto
   continua salvo para quando a pessoa voltar ao completo */
.campo.fora-do-modelo{ opacity:.72; }
.campo.fora-do-modelo input,
.campo.fora-do-modelo textarea{ background:var(--papel); }
.marca-fora{
  display:inline-block; margin:0 0 6px; font-size:11.5px; font-weight:600;
  letter-spacing:.02em; color:var(--suave);
  background:var(--papel); border:1px solid var(--linha);
  border-radius:999px; padding:2px 9px;
}

/* numeração das etapas no cadastro de modelo */
.rot-etapa{
  font-family:var(--serif); font-size:17px; font-weight:600;
  margin:26px 0 12px; padding-bottom:8px; border-bottom:1px solid var(--linha);
}

/* abas de filtro por nicho, na galeria do admin */
.filtro-nicho{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:18px; }
.filtro-nicho a{
  display:inline-flex; align-items:center; gap:7px; text-decoration:none;
  font-size:14px; padding:7px 14px; border-radius:999px;
  border:1px solid var(--linha); background:#fff; color:var(--suave);
  transition:border-color .15s, color .15s;
}
.filtro-nicho a:hover{ border-color:var(--terracota); color:var(--terracota); }
.filtro-nicho a.on{
  background:var(--terracota); border-color:var(--terracota); color:#fff; font-weight:600;
}
.filtro-nicho a span{
  font-size:12px; padding:1px 7px; border-radius:999px;
  background:var(--papel); color:var(--suave);
}
.filtro-nicho a.on span{ background:rgba(255,255,255,.22); color:#fff; }

/* placeholder de slot sem arte, no cadastro de modelo */
.fundo-item .atual.vazia{
  width:100%; aspect-ratio:9/16; border-radius:8px; margin-bottom:9px;
  border:1px dashed var(--linha); background:var(--papel);
  display:grid; place-items:center; font-size:12.5px; color:var(--suave);
}
.fundo-item .rot span.marca-arte:empty{ display:none; }
.fundo-item img.nova{ border-color:var(--terracota); }

/* aviso preso ao próprio campo, em vez de só no topo da página */
.erro-campo{
  margin:6px 0 0; font-size:13px; color:#8f2015; font-weight:600;
}
.erro-campo::before{ content:"▲ "; font-size:10px; }
.campo.com-erro input,
.campo.com-erro select,
.campo.com-erro textarea{ border-color:#d4756a; background:#fffaf9; }
.fundo-item.com-erro{ border-color:#d4756a; background:#fffaf9; }

/* linha de campo + botão (cupom, tipo de evento) */
.linha-cupom{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.linha-cupom input, .linha-cupom select{
  flex:1 1 200px; min-width:0; max-width:100%;
}
.linha-cupom input[name="codigo"]{
  text-transform:uppercase; letter-spacing:.06em;
  font-family:ui-monospace,Consolas,monospace;
}
.linha-cupom .bt{ flex:0 0 auto; }
@media (max-width:560px){
  /* em tela estreita o par vira duas linhas inteiras, sem estourar */
  .linha-cupom{ display:grid; grid-template-columns:1fr; gap:12px; }
  .linha-cupom .bt{ width:100%; }
}

.cupom-ok{
  display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap;
  padding:15px 16px; border-radius:12px;
  background:#eaf5e6; border:1px solid #bcd9ae;
}
.cupom-ok b{
  display:block; font-family:ui-monospace,Consolas,monospace;
  font-size:17px; letter-spacing:.06em; color:#2f5722;
}
.cupom-ok span{ display:block; font-size:14.5px; color:#39602a; font-weight:600; }
.cupom-ok i{ display:block; font-style:normal; font-size:13px; color:#5a7a4c; margin-top:2px; }

.plano .antes{
  font-size:15px; color:var(--suave); text-decoration:line-through; margin-bottom:2px;
}

.form-cupom{
  display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  padding:16px; border-radius:12px; background:var(--papel); border:1px solid var(--linha);
}
.form-cupom .largo{ grid-column:1 / -1; }
.form-cupom label{ display:block; font-size:13px; font-weight:600; margin-bottom:5px; }

/* carimbo de versão, só para o administrador */
.carimbo{
  margin-top:8px; font-family:ui-monospace,Consolas,monospace; font-size:12px;
  color:var(--suave); opacity:.8;
}
.carimbo b{ color:var(--terracota); }

/* diagnóstico */
.mod-diag{
  border:1px solid var(--linha); border-radius:12px;
  padding:14px; margin-bottom:12px; background:var(--papel-2);
}
.mod-diag .cab{ display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
.mod-diag .cab b{ font-size:16px; }
.mod-diag .cab .mono{ font-size:12.5px; }
.mod-diag .cab .nichos{
  font-size:12px; padding:2px 9px; border-radius:999px;
  background:var(--papel); color:var(--suave);
}
.mod-diag .recursos{ display:flex; flex-wrap:wrap; gap:7px; }
.mod-diag .rec{
  font-size:12.5px; padding:4px 10px; border-radius:999px; white-space:nowrap;
  background:#eaf5e6; color:#39602a; border:1px solid #cfe4c5;
}
.mod-diag .rec.nao{ background:#fdecea; color:#8f2015; border-color:#f0b4ac; font-weight:600; }
.mod-diag .rec.aviso{ background:#fff6e6; color:#7a5a1c; border-color:#e8cf9a; }
/* recurso que não cabe no convite curto: ausência de projeto, não falha */
.mod-diag .rec.fora{ background:var(--papel); color:var(--suave); border-color:var(--linha); }
.mod-diag .rec i{ font-style:normal; opacity:.7; }
.mod-diag .cab .uso{ font-size:12px; color:var(--suave); margin-left:auto; }
.mod-diag .cab .uso b{ font-size:12px; color:var(--terracota); }

/* botões de conserto, abaixo dos selos de recurso */
.mod-diag .conserto{
  display:flex; flex-wrap:wrap; gap:8px; align-items:center;
  margin-top:12px; padding-top:12px; border-top:1px dashed var(--linha);
}
.mod-diag .conserto form{ margin:0; }
.mod-diag .conserto .bt i{
  font-style:normal; opacity:.65; font-size:11.5px; margin-left:5px;
}
.mod-diag .sem-fonte{
  font-size:12.5px; color:var(--suave); font-style:italic; max-width:60ch;
}

/* seletores de cor do convite */
.cores{ display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
.cor-bloco{
  padding:16px; border:1px solid var(--linha); border-radius:12px; background:var(--papel-2);
}
.cor-bloco .cab{ margin-bottom:12px; }
.cor-bloco .cab b{ display:block; font-size:15.5px; }
.cor-bloco .cab span{ display:block; font-size:13.5px; color:var(--suave); margin-top:2px; }

.amostras + .amostras{ margin-top:14px; }
.amostras .rot{
  font-size:12px; text-transform:uppercase; letter-spacing:.07em;
  color:var(--suave); font-weight:600; margin-bottom:7px;
}
.grade-cores{ display:flex; flex-wrap:wrap; gap:8px; }

/* alvo de toque de 38px: confortável no polegar */
.amostra{
  width:38px; height:38px; padding:0; cursor:pointer; flex:none;
  border-radius:10px; border:2px solid transparent;
  background:var(--c); position:relative;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.12);
  transition:transform .12s;
}
.amostra:active{ transform:scale(.9); }
.amostra.on{ border-color:var(--marrom); }
.amostra.on::after{
  content:"✓"; position:absolute; inset:0;
  display:grid; place-items:center; color:#fff; font-size:16px; font-weight:700;
  text-shadow:0 1px 3px rgba(0,0,0,.55);
}

.cor-bloco .outra{ margin-top:14px; }
.cor-bloco .outra summary{
  cursor:pointer; font-size:13.5px; color:var(--terracota); list-style:none;
}
.cor-bloco .outra summary::-webkit-details-marker{ display:none; }
.cor-bloco .outra summary::before{ content:"▸ "; }
.cor-bloco .outra[open] summary::before{ content:"▾ "; }
.cor-bloco .outra .corpo{ display:flex; align-items:center; gap:10px; margin-top:10px; }
.cor-bloco .nativo{
  width:52px; height:40px; flex:none; padding:0; cursor:pointer;
  border:1px solid var(--linha); border-radius:9px; background:none;
}
.cor-bloco .nativo::-webkit-color-swatch-wrapper{ padding:3px; }
.cor-bloco .nativo::-webkit-color-swatch{ border:0; border-radius:6px; }
.cor-bloco .hex{
  font-family:ui-monospace,Consolas,monospace; font-size:12.5px;
  background:var(--papel); padding:4px 9px; border-radius:5px; text-transform:uppercase;
}

@media (max-width:860px){
  .amostra{ width:42px; height:42px; }
}

.previa-cores{
  --pt:#b0522c; --pd:#b0522c;
  margin-top:16px; padding:24px 18px; border-radius:12px; text-align:center;
  background:#fdfaf6; border:1px dashed var(--linha);
}
.previa-cores .p-titulo{
  display:block; font-family:var(--serif); font-size:34px; font-weight:600; color:var(--pt);
}
.previa-cores .p-texto{
  display:block; font-family:var(--serif); font-size:15px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--marrom); margin:8px 0 16px;
}
.previa-cores .p-botao{
  display:inline-block; padding:9px 20px; border-radius:999px;
  background:var(--pd); color:#fff; font-size:13.5px; font-weight:600;
  letter-spacing:.08em; text-transform:uppercase;
}

/* nomes de quem vem junto, na tela de confirmações */
.acomp-nomes{
  margin-top:6px; padding:7px 9px; border-radius:8px;
  background:var(--papel); border-left:3px solid var(--terracota);
  font-size:13px; line-height:1.45; color:var(--marrom);
}

/* O detalhamento que o cerimonialista fez, no painel da cliente.
   Recolhido: ela abre quando quer conferir, e não leva uma lista
   de quatro nomes em cada linha da tabela. */
.acomp-det{ margin-top:6px; }
.acomp-det > summary{
  cursor:pointer; font-size:12.5px; color:var(--terracota);
  list-style:none; display:inline-block;
  border-bottom:1px dotted currentColor;
}
.acomp-det > summary::-webkit-details-marker{ display:none; }
.acomp-det > summary::before{ content:"▸ "; }
.acomp-det[open] > summary::before{ content:"▾ "; }
.acomp-lista{
  margin:7px 0 0; padding:7px 9px 7px 26px; border-radius:8px;
  background:var(--papel); border-left:3px solid var(--linha);
  font-size:13px; line-height:1.5;
}
.acomp-lista .legenda{ font-size:12px; }

/* preços no admin */
.planos-admin{ display:grid; gap:12px; }
/* ---------------- faixa do modo desenvolvedor ----------------
   Cor de alerta de propósito: esquecer que se está vendo como
   outra pessoa é o erro mais fácil e mais caro deste recurso. */
.faixa-dev{
  position:sticky; top:0; z-index:200;
  background:repeating-linear-gradient(135deg,#2b2119,#2b2119 12px,#332619 12px,#332619 24px);
  color:#f4efe8; font-size:13.5px; border-bottom:2px solid #c9a227;
}
.faixa-dev .env{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:9px 16px;
}
.faixa-dev .tag{
  background:#c9a227; color:#2b2119; font-weight:700; font-size:11px;
  letter-spacing:.08em; text-transform:uppercase; padding:4px 10px; border-radius:999px;
  flex:0 0 auto;
}
.faixa-dev .quem{ flex:1 1 auto; min-width:0; }
.faixa-dev .quem b{ color:#fff; }
.faixa-dev .quem i{
  font-style:normal; opacity:.65; font-size:12px; margin-left:5px;
  border:1px solid rgba(255,255,255,.3); border-radius:99px; padding:1px 7px;
}
.faixa-dev form{ flex:0 0 auto; margin:0; }
.faixa-dev select, .faixa-dev button{
  font:inherit; font-size:13px; padding:5px 10px; border-radius:8px; cursor:pointer;
  background:rgba(255,255,255,.1); color:#f4efe8; border:1px solid rgba(255,255,255,.28);
  max-width:200px;
}
.faixa-dev select option, .faixa-dev select optgroup{ color:#2b2119; background:#fff; }
.faixa-dev .volta button{ background:#c9a227; color:#2b2119; border-color:#c9a227; font-weight:600; }

/* lembrete permanente na borda, para quem rolou a página */
body.modo-dev{ box-shadow:inset 0 0 0 3px rgba(201,162,39,.55); }

@media (max-width:560px){
  .faixa-dev .env{ gap:8px; padding:8px 12px; }
  .faixa-dev .quem{ flex:1 1 100%; order:3; }
  .faixa-dev select{ max-width:130px; }
}

/* chamada do parceiro na landing: presente, sem competir com o cliente */
.faixa-parceiro{
  text-align:center; font-size:14.5px; color:var(--suave);
  border-top:1px solid var(--linha); padding-top:22px; margin:0;
}
.faixa-parceiro a{ font-weight:600; }

/* amostra das fontes no cadastro de modelo: a letra de verdade,
   sobre a cor de papel escolhida — nome de fonte numa lista não
   diz nada a quem não decorou o catálogo */
.fonte-previa{
  margin-top:18px; padding:26px 22px 24px; border-radius:12px;
  border:1px solid var(--linha); background:var(--pp, #f4efe8);
  text-align:center; position:relative; overflow:hidden;
}
.fonte-previa .rot{
  position:absolute; top:8px; left:12px; font-size:11px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--suave); opacity:.65;
}
.fonte-previa p{ margin:0 0 10px; line-height:1.3; }
.fonte-previa .script{ font-size:38px; color:var(--pt, #b0522c); line-height:1.15; }
.fonte-previa .serif-g{ font-size:20px; color:var(--pt, #b0522c); letter-spacing:.02em; }
.fonte-previa .serif-p{
  font-size:15px; color:var(--px, #3f3327); max-width:42ch;
  margin:0 auto 16px; opacity:.9;
}
.fonte-previa .bt-falso{
  display:inline-block; padding:9px 20px; border-radius:999px; font-size:14px;
  background:var(--pd, #b0522c); color:#fff; font-weight:600;
}

/* ---------------- sininho ---------------- */
.sino{ position:relative; flex:0 0 auto; }
.sino-bt{
  position:relative; width:38px; height:38px; border-radius:50%;
  display:grid; place-items:center; cursor:pointer;
  background:#fff; border:1px solid var(--linha); color:var(--suave);
  transition:border-color .15s, color .15s;
}
.sino-bt:hover{ border-color:var(--terracota); color:var(--terracota); }
.sino-bt svg{ width:19px; height:19px; }
.sino-bt .bolinha{
  position:absolute; top:-4px; right:-4px; min-width:18px; height:18px;
  padding:0 5px; border-radius:99px; background:var(--terracota); color:#fff;
  font-size:11px; font-weight:700; line-height:18px; text-align:center;
  border:2px solid #fff;
}

.sino-cx{
  position:absolute; right:0; top:46px; z-index:70; width:320px; max-width:86vw;
  background:#fff; border:1px solid var(--linha); border-radius:14px;
  box-shadow:0 14px 40px rgba(0,0,0,.16); overflow:hidden;
}
.sino-topo{
  padding:12px 16px; font-family:var(--serif); font-size:16px; font-weight:600;
  border-bottom:1px solid var(--linha); background:var(--papel);
}
.sino-vazio{ padding:26px 18px; text-align:center; color:var(--suave); font-size:14px; }
.sino-vazio span{ font-size:13px; opacity:.8; }

.sino-item{
  display:block; padding:12px 16px; text-decoration:none; color:inherit;
  border-bottom:1px solid var(--linha);
}
.sino-item:last-child{ border-bottom:0; }
a.sino-item:hover{ background:var(--papel); }
.sino-item p{ margin:0; font-size:14px; line-height:1.45; }
.sino-item i{ display:block; font-style:normal; font-size:12px; color:var(--suave); margin-top:3px; }
.sino-item.nova{ background:rgba(176,82,44,.07); }
.sino-item.nova p{ font-weight:600; }

@media (max-width:560px){
  .sino-cx{ position:fixed; right:12px; left:12px; top:64px; width:auto; max-width:none; }
}

/* baixa de comissão: parceiro, observação e botão numa linha só */
.baixa-linha{
  display:grid; gap:12px; align-items:end;
  grid-template-columns:1.2fr 1.6fr auto;
  padding:12px 0; border-top:1px solid var(--linha);
}
@media (max-width:640px){
  .baixa-linha{ grid-template-columns:1fr; align-items:stretch; }
}

.plano-recursos{
  margin:2px 0 16px; padding:0 0 14px; border-bottom:1px solid var(--linha);
  display:flex; flex-wrap:wrap; gap:6px;
}
.plano-recursos .tag{
  font-size:12px; background:var(--papel); border:1px solid var(--linha);
  border-radius:999px; padding:3px 10px; color:var(--suave);
}
.plano-recursos .nada{ font-size:13px; color:var(--suave); font-style:italic; }

.plano-linha{
  display:grid; gap:12px; align-items:end;
  grid-template-columns:1.6fr 1fr 1fr 1.1fr;
  padding:14px; border:1px solid var(--linha); border-radius:12px; background:var(--papel-2);
}
.plano-linha .campo{ margin:0; }
.plano-linha .campo-ativo{ display:flex; flex-direction:column; gap:6px; }
.plano-linha .campo-ativo .mono{ font-size:12px; color:var(--suave); }
@media (max-width:760px){
  .plano-linha{ grid-template-columns:1fr 1fr; }
  .plano-linha .campo:first-child{ grid-column:1 / -1; }
  .plano-linha .campo-ativo{ grid-column:1 / -1; flex-direction:row;
                             align-items:center; justify-content:space-between; }
}

/* recurso bloqueado pelo plano */
.upgrade{
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  padding:20px; margin-bottom:22px; border-radius:14px;
  background:linear-gradient(135deg, rgba(176,82,44,.10), rgba(176,82,44,.02));
  border:1px solid rgba(176,82,44,.35);
}
.upgrade .cadeado{ width:36px; height:36px; flex:none; color:var(--terracota); }
.upgrade .cadeado svg{ width:100%; height:100%; }
.upgrade .txt{ flex:1 1 240px; min-width:0; }
.upgrade .txt b{ display:block; font-family:var(--serif); font-size:19px; margin-bottom:3px; }
.upgrade .txt p{ margin:0 0 6px; font-size:14.5px; color:var(--suave); }
.upgrade .onde{ display:block; font-size:13.5px; color:var(--terracota); }
.upgrade .bt{ flex:0 0 auto; }

/* prévia do que está travado: mostra o formato, não os dados */
.borrado{ position:relative; }
.borrado > *{ filter:blur(4px); opacity:.55; pointer-events:none; user-select:none; }
.borrado::after{
  content:"exemplo"; position:absolute; top:10px; right:12px;
  font-size:11px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--suave); background:var(--papel); padding:3px 9px; border-radius:999px;
}

@media (max-width:640px){
  .upgrade{ flex-direction:column; align-items:flex-start; }
  .upgrade .bt{ width:100%; }
}

/* cartão de indicação */
.indicar{
  display:flex; align-items:center; gap:18px; flex-wrap:wrap;
  padding:20px; margin-bottom:22px; border-radius:14px;
  background:linear-gradient(135deg, rgba(109,190,69,.12), rgba(109,190,69,.03));
  border:1px solid rgba(109,190,69,.35);
}
.indicar .ico{ width:40px; height:40px; flex:none; color:var(--verde); }
.indicar .ico svg{ width:100%; height:100%; }
.indicar .txt{ flex:1 1 240px; min-width:0; }
.indicar .txt b{ display:block; font-family:var(--serif); font-size:19px; margin-bottom:3px; }
.indicar .txt p{ margin:0; font-size:14.5px; color:var(--suave); }
.indicar .acoes-ind{ display:flex; gap:8px; flex-wrap:wrap; flex:0 1 auto; }

/* progresso do bônus por indicação */
.ind-progresso{ margin-top:12px; }
.ind-progresso .barra{ display:flex; gap:5px; margin-bottom:7px; }
.ind-progresso .barra span{
  flex:1 1 0; height:7px; border-radius:99px;
  background:rgba(109,190,69,.22); transition:background .3s;
}
.ind-progresso .barra span.on{ background:var(--verde); }
.ind-progresso p{ margin:0 !important; font-size:14px !important; }
.ind-progresso b{ color:var(--verde); }
.ind-progresso i{
  display:block; font-style:normal; font-size:12.5px;
  color:var(--suave); opacity:.8; margin-top:3px;
}

.indicar .bt.zap{
  background:linear-gradient(180deg,#25d366,#1da851);
  box-shadow:0 4px 12px rgba(29,168,81,.3);
}
.indicar .bt.zap:hover{ box-shadow:0 7px 18px rgba(29,168,81,.36); }
.indicar .bt.zap svg{ width:18px; height:18px; }

/* versão maior, para a página de vendas */
.indicar.grande{ padding:28px; text-align:center; flex-direction:column; gap:14px; }
.indicar.grande .ico{ width:48px; height:48px; }
.indicar.grande .txt{ flex:none; }
.indicar.grande .txt b{ font-size:clamp(22px,3.4vw,28px); }
.indicar.grande .txt p{ font-size:16px; max-width:520px; margin:0 auto; }
.indicar.grande .acoes-ind{ justify-content:center; }

@media (max-width:640px){
  .indicar{ flex-direction:column; align-items:flex-start; gap:14px; }
  .indicar .acoes-ind{ width:100%; }
  .indicar .acoes-ind .bt{ flex:1 1 100%; }
}

/* pergunta ao trocar de modelo tendo cores próprias */
.escolha-cores{ display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); }
.opc-cor{
  display:flex; align-items:flex-start; gap:11px; cursor:pointer;
  padding:15px; border:2px solid var(--linha); border-radius:12px; background:#fff;
  transition:border-color .15s, background .15s;
}
.opc-cor:has(input:checked){ border-color:var(--terracota); background:var(--papel); }
.opc-cor input{ width:auto; margin-top:3px; flex:none; accent-color:var(--terracota); }
.opc-cor .corpo{ display:block; }
.opc-cor b{ display:block; font-size:15.5px; }
.opc-cor i{ display:block; font-style:normal; font-size:13.5px; color:var(--suave); margin:3px 0 9px; }
.opc-cor .quadros{ display:flex; gap:6px; }
.opc-cor .quadros i{
  width:30px; height:30px; border-radius:7px; margin:0;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);
}

/* sugestões de cor a partir da arte (cadastro de modelo) */
#sugestoes{ margin-top:20px; padding-top:18px; border-top:1px dashed var(--linha); }
.rot-sug{ font-size:15px; font-weight:600; margin-bottom:14px; }
.rot-sug span{
  display:block; font-size:13px; font-weight:400; color:var(--suave); margin-top:2px;
}
.combos{ display:grid; gap:14px; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); }
.combo{
  border:2px solid var(--linha); border-radius:12px; padding:12px; background:#fff;
  text-align:center; transition:border-color .15s;
}
.combo.on{ border-color:var(--terracota); }
.combo .mini{
  --pp:#fff; --pt:#000; --px:#333; --pd:#000;
  background:var(--pp); border-radius:9px; padding:16px 10px;
  border:1px solid rgba(0,0,0,.08); margin-bottom:10px;
}
.combo .m-titulo{
  display:block; font-family:var(--serif); font-size:24px; font-weight:600; color:var(--pt);
  line-height:1.1;
}
.combo .m-texto{
  display:block; font-size:11px; letter-spacing:.09em; text-transform:uppercase;
  color:var(--px); margin:6px 0 11px;
}
.combo .m-botao{
  display:inline-block; padding:6px 14px; border-radius:999px;
  background:var(--pd); color:#fff; font-size:10.5px; font-weight:600;
  letter-spacing:.07em; text-transform:uppercase;
}
.combo .quadros{ display:flex; gap:5px; justify-content:center; margin-bottom:10px; }
.combo .quadros i{
  width:26px; height:26px; border-radius:6px; display:block;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);
}
.combo .usar{ width:100%; }

/* convite para gerar arte com IA */
.convite-ia{
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  padding:18px; margin-bottom:18px; border-radius:14px;
  background:linear-gradient(135deg, rgba(176,82,44,.09), rgba(176,82,44,.02));
  border:1px solid rgba(176,82,44,.3);
}
.convite-ia .ico{ width:38px; height:38px; flex:none; color:var(--terracota); }
.convite-ia .ico svg{ width:100%; height:100%; }
.convite-ia .txt{ flex:1 1 240px; }
.convite-ia .txt b{ display:block; font-size:16px; margin-bottom:3px; }
.convite-ia .txt p{ margin:0; font-size:14.5px; color:var(--suave); }

/* lista de prompts */
.prompt{
  border:1px solid var(--linha); border-radius:12px;
  padding:14px; margin-bottom:12px; background:var(--papel-2);
}
.prompt:last-child{ margin-bottom:0; }
.topo-prompt{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; margin-bottom:8px; flex-wrap:wrap;
}
.topo-prompt b{ font-size:16px; }
.topo-prompt .bt{ flex:none; }
.texto-prompt{
  margin:0; font-size:14.5px; line-height:1.55; color:var(--marrom);
  background:#fff; border-left:3px solid var(--terracota);
  border-radius:8px; padding:11px 13px;
}
.ver-completo{ margin-top:8px; }
.ver-completo summary{
  cursor:pointer; font-size:13.5px; color:var(--suave);
  list-style:none;
}
.ver-completo summary::-webkit-details-marker{ display:none; }
.ver-completo summary::before{ content:"▸ "; }
.ver-completo[open] summary::before{ content:"▾ "; }
.ver-completo .completo{
  margin-top:8px; padding:11px 13px; border-radius:8px;
  background:var(--papel); border:1px dashed var(--linha);
  font-family:ui-monospace,Consolas,monospace; font-size:12.5px;
  line-height:1.6; color:var(--suave); white-space:pre-wrap; word-break:break-word;
}
@media (max-width:520px){
  .topo-prompt .bt{ width:100%; }
  .convite-ia .bt{ width:100%; }
}

/* entrar com o Google */
.bt-google{
  display:flex; align-items:center; justify-content:center; gap:11px;
  width:100%; padding:13px 20px; margin-bottom:6px;
  border:1px solid #dadce0; border-radius:999px; background:#fff;
  color:#3c4043; font:600 15.5px/1 var(--sans); text-decoration:none;
  box-shadow:0 1px 2px rgba(60,64,67,.14);
  transition:background .15s, box-shadow .15s;
}
.bt-google:hover{ background:#f8f9fa; box-shadow:0 2px 6px rgba(60,64,67,.18); }
.bt-google:active{ background:#f1f3f4; }
.bt-google svg{ width:19px; height:19px; flex:none; }

.ou{
  display:flex; align-items:center; gap:12px;
  margin:20px 0; color:var(--suave); font-size:14px;
}
.ou::before, .ou::after{
  content:""; flex:1; height:1px; background:var(--linha);
}

/* títulos das seções do formulário, na cor de destaque */
.secao-form.grupo{
  border:1px solid var(--linha); border-radius:14px;
  padding:0 18px 6px; margin-bottom:24px; background:var(--papel-2);
}
.secao-form.grupo h2{
  display:flex; align-items:center; gap:10px;
  margin:0 -18px 0; padding:14px 18px;
  font-size:19px; color:var(--terracota);
  border-bottom:1px solid var(--linha);
  background:linear-gradient(180deg, rgba(176,82,44,.07), rgba(176,82,44,0));
  border-radius:14px 14px 0 0;
}
.secao-form.grupo h2::before{
  content:""; width:4px; height:19px; border-radius:2px; flex:none;
  background:var(--terracota);
}
.secao-form.grupo .nota{ padding-top:12px; margin-bottom:4px; }
@media (max-width:860px){
  .secao-form.grupo{ padding:0 14px 4px; }
  .secao-form.grupo h2{ margin:0 -14px 0; padding:13px 14px; font-size:17.5px; }
}

/* botão de ajuda ao lado do rótulo */
.campo label{ display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
.ajuda{
  width:19px; height:19px; flex:none; padding:0; cursor:pointer;
  display:inline-grid; place-items:center; border-radius:50%;
  border:1px solid rgba(176,82,44,.4); background:#fff; color:var(--terracota);
  transition:background .15s, transform .15s;
}
.ajuda:hover{ background:var(--papel); }
.ajuda:active{ transform:scale(.9); }
.ajuda[aria-expanded="true"]{ background:var(--terracota); color:#fff; border-color:var(--terracota); }
.ajuda-txt{
  margin:0 0 8px; padding:11px 13px; border-radius:10px;
  background:var(--papel); border-left:3px solid var(--terracota);
  font-size:14px; line-height:1.5; color:var(--suave); font-weight:400;
}

/* disponibilidade do endereço, no cadastro */
.estado-slug{ margin-top:8px; font-size:14px; line-height:1.5; }
.estado-slug:empty{ display:none; }
.estado-slug.checando{ color:var(--suave); }
.estado-slug.ok{ color:#3d6b2c; }
.estado-slug.erro{ color:#8f2015; }

.sugestoes{ display:flex; flex-wrap:wrap; gap:7px; margin-top:9px; }
.chip{
  padding:6px 12px; border-radius:999px; cursor:pointer;
  font:600 13.5px/1 ui-monospace,Consolas,monospace;
  color:var(--terracota); background:#fff;
  border:1px dashed rgba(176,82,44,.55);
  transition:background .15s, border-color .15s;
}
.chip:hover{ background:var(--papel); border-style:solid; }
.chip:active{ transform:translateY(1px); }

/* link do convite, na lista de convidados */
.link-convite{
  display:inline-flex; align-items:flex-start; gap:7px;
  text-decoration:none; color:var(--terracota); line-height:1.4;
}
.link-convite svg{ width:13px; height:13px; flex:none; margin-top:3px; opacity:.75; }
.link-convite span{ text-decoration:underline; text-underline-offset:2px; }
.link-convite:hover span{ color:var(--terracota-esc); }

/* player da música enviada */
.player{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  background:var(--papel); border:1px solid var(--linha);
  border-radius:12px; padding:12px 14px; margin-bottom:14px;
}
.player audio{ flex:1 1 240px; min-width:0; height:38px; }
.player .arq{ font-size:13.5px; color:var(--suave); word-break:break-all; }

/* ajuste rápido de plano no admin */
.ajuste{ border:0; margin:0; padding:0; }
.ajuste summary{ list-style:none; cursor:pointer; display:inline-flex; align-items:center; gap:6px;
                 font-size:14px; font-weight:600; color:var(--terracota); }
.ajuste summary::-webkit-details-marker{ display:none; }
.ajuste summary::after{ content:"▾"; font-size:11px; }
.ajuste[open] summary::after{ content:"▴"; }
.ajuste .corpo{ margin-top:12px; padding:14px; background:var(--papel); border-radius:10px;
                display:grid; gap:10px; }
.ajuste .corpo label{ font-size:13px; font-weight:600; }
.marcar{
  display:flex; align-items:flex-start; gap:8px; cursor:pointer;
  font-size:14px; font-weight:400; line-height:1.45; margin-bottom:6px;
}
.marcar input{ width:auto; margin-top:3px; flex:none; accent-color:var(--terracota); }
.ajuste .marcar{ font-size:13.5px; }

/* ============================================================
   RESPONSIVO — celular e tablet
   ============================================================ */

@media (max-width:860px){

  .env{ padding:0 16px; }

  /* topo compacto, sem quebrar em duas alturas */
  .topo .env{ height:58px; gap:10px; }
  .marca{ font-size:20px; }
  .topo nav{ gap:6px; flex-wrap:nowrap; }
  .topo .bt{ padding:8px 13px; font-size:13.5px; }

  /* menu do painel vira barra de abas deslizante */
  .painel{ gap:18px; padding:18px 0 48px; }
  .menu{
    display:flex; gap:6px; padding:7px; overflow-x:auto; scrollbar-width:none;
    -webkit-overflow-scrolling:touch; scroll-snap-type:x proximity;
  }
  .menu::-webkit-scrollbar{ display:none; }
  .menu a{ white-space:nowrap; flex:none; padding:9px 14px; font-size:14px; scroll-snap-align:center; }
  .menu hr{ display:none; }

  h1.titulo{ font-size:26px; }
  .painel-cx{ padding:20px 16px; }
  .cartao{ padding:20px 18px; }

  /* tabelas viram cartões empilhados */
  table.lista, table.lista tbody, table.lista tr, table.lista td{ display:block; width:100%; }
  table.lista thead{ display:none; }
  table.lista tr{
    border:1px solid var(--linha); border-radius:12px;
    padding:14px; margin-bottom:12px; background:#fff;
  }
  table.lista td{ border:0; padding:5px 0; }
  table.lista td[data-r]::before{
    content:attr(data-r); display:block; font-size:11.5px; text-transform:uppercase;
    letter-spacing:.07em; color:var(--suave); margin-bottom:2px; font-weight:600;
  }
  table.lista td:empty{ display:none; }
  table.lista .mono{ font-size:12.5px; }

  /* botões de linha ocupam a largura, com alvo de toque confortável */
  .acoes-linha{ justify-content:stretch; gap:8px; margin-top:10px; }
  .acoes-linha > *{ flex:1 1 auto; }
  .acoes-linha form{ display:flex; }
  .acoes-linha .bt{ width:100%; padding:11px 12px; font-size:14px; }

  /* formulários mais largos ao toque */
  input[type=text], input[type=email], input[type=password], textarea, select{
    padding:13px; font-size:16px;   /* 16px evita o zoom automático do iOS */
  }
  .bt{ padding:12px 20px; }

  .secao{ padding:44px 0; }
  .heroi{ padding:44px 0 44px; }
  .planos, .modelos{ grid-template-columns:1fr; }
  .plano{ padding:22px 18px; }
  .passo{ padding-left:46px; }
}

/* ---------------- painel do parceiro no celular ----------------
   Esta área é usada em pé, no salão, com uma mão. Vale ter regra
   própria em vez de deixar o empilhamento genérico resolver. */
@media (max-width:640px){

  /* Cartão de número vira linha: ícone à esquerda, número e
     rótulo à direita. Empilhado, cada cartão ocupava quatro
     linhas de altura e a pessoa rolava quatro telas só para
     passar pelos indicadores. */
  .cartoes-num{ grid-template-columns:1fr; gap:8px; }
  .cartao-num{
    display:grid; grid-template-columns:34px 1fr; column-gap:12px;
    align-items:center; padding:12px 14px;
  }
  .cartao-num .ico-num{ grid-row:1 / span 2; margin:0; }
  .cartao-num .ico-num svg{ width:24px; height:24px; }
  .cartao-num b{ font-size:24px; }
  .cartao-num span{ margin-top:0; font-size:13.5px; }

  /* Lançar presença: os campos ganham rótulo visível e param de
     brigar por espaço. Sem o rótulo, "uma caixinha com 2" não
     diz se é adulto, criança ou mesa. */
  .frm-presenca{ width:100%; gap:8px 10px; }
  .frm-presenca select{ flex:1 1 100%; }
  .frm-presenca .campo-min{
    display:flex; flex-direction:column; gap:2px; flex:0 0 auto;
  }
  .frm-presenca .campo-min span{
    font-size:11px; text-transform:uppercase; letter-spacing:.06em;
    color:var(--suave); font-weight:600;
  }
  .frm-presenca .campo-min input{ width:72px; }
  .frm-presenca .eco{ flex:1 1 100%; min-height:18px; }

  /* Ações de cada linha empilhada: botões lado a lado, não um
     por linha — três linhas de botão por convidado, com oitenta
     convidados, é rolagem sem fim. */
  table.lista td .acoes-linha,
  table.lista td form{ display:inline-flex; }
  table.lista td .bt.pequeno{ width:auto; }
}

@media (max-width:420px){
  .marca{ font-size:18px; }
  .topo .bt{ padding:7px 11px; font-size:13px; }
  .grade{ grid-template-columns:1fr; }
}

/* ---------------- tour guiado ----------------
   O escuro não é uma camada por cima de tudo: é a SOMBRA do
   furo. Uma sombra de 9999px cobre qualquer tela e deixa
   exatamente um retângulo claro, sem máscara SVG nem canvas.

   Quem engole o clique é .tour-captura, embaixo: o furo precisa
   ser pointer-events:none, senão a sombra — que é desenho, não
   área — deixaria passar o clique no meio e bloquearia nas
   bordas, o oposto do esperado. */
.tour[hidden]{ display:none; }
.tour-captura{ position:fixed; inset:0; z-index:9000; }
.tour-furo{
  position:fixed; z-index:9001; pointer-events:none;
  border-radius:12px; border:2px solid var(--terracota);
  box-shadow:0 0 0 9999px rgba(30,22,14,.62);
  transition:top .18s, left .18s, width .18s, height .18s;
}
/* Nos passos sem alvo (abertura e fecho) o furo está escondido e
   com ele a sombra. O escuro passa a vir da própria camada de
   captura — marcada pelo JS, não por :has(), que é novo demais
   para se confiar no celular de quem trabalha em festa. */
.tour.sem-alvo .tour-captura{ background:rgba(30,22,14,.62); }
.tour-cx{
  position:fixed; z-index:9002; width:min(380px, calc(100vw - 24px));
  background:var(--papel-2); border:1px solid var(--linha);
  border-radius:14px; padding:16px 18px 14px;
  box-shadow:0 16px 44px rgba(30,22,14,.3);
}
.tour-conta{
  margin:0 0 4px; font-size:11.5px; font-weight:600;
  text-transform:uppercase; letter-spacing:.08em; color:var(--terracota);
}
.tour-cx h3{
  margin:0 0 8px; font-family:var(--serif); font-size:21px;
  font-weight:600; line-height:1.25;
}
.tour-txt{ font-size:14.5px; line-height:1.55; color:var(--marrom); }
.tour-txt b{ color:var(--terracota-esc); }
.tour-bts{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  margin-top:14px; padding-top:12px; border-top:1px solid var(--linha);
}
.tour-bts [hidden]{ display:none; }

/* Sem overflow:hidden no body durante o tour.

   Seria o reflexo normal — travar a rolagem atrás do modal — mas
   aqui ele quebraria o próprio tour: cada passo chama
   scrollIntoView() para trazer o bloco à vista, e body travado
   impede isso. A rolagem fica livre, e o JS reposiciona o
   destaque a cada scroll. */

@media (max-width:480px){
  /* No celular a caixa mora no pé da tela: calcular "abaixo do
     alvo" em 360px de largura joga o texto fora da viewport na
     metade dos passos. */
  .tour-cx{
    top:auto !important; left:12px !important; right:12px;
    bottom:12px; width:auto; transform:none !important;
    padding:14px 15px 12px;
  }
  .tour-cx h3{ font-size:19px; }
  .tour-txt{ font-size:14px; }
}

/* ---------------- abas do relatório ----------------
   A página tinha oito blocos empilhados — no celular, dois
   metros de rolagem para chegar nas mesas. As abas são links: o
   servidor manda só a seção pedida.

   Grudam no topo ao rolar. Numa lista de oitenta convidados,
   trocar de seção sem a barra fixa exigiria voltar ao topo
   primeiro — duas viagens para um gesto. */
.abas{
  display:flex; gap:4px; margin:0 0 20px;
  overflow-x:auto; -webkit-overflow-scrolling:touch;
  position:sticky; top:0; z-index:30;
  padding:8px 0; background:var(--papel);
  border-bottom:1px solid var(--linha);
  scrollbar-width:none;
  /* Uma folga ao chegar pela âncora: colado na borda da tela o
     controle parece cortado, e no iPhone some atrás da barra do
     navegador quando ela reaparece. */
  scroll-margin-top:10px;
}
.abas::-webkit-scrollbar{ display:none; }
.abas a{
  flex:0 0 auto; text-decoration:none; white-space:nowrap;
  padding:9px 16px; border-radius:999px;
  font-size:14.5px; font-weight:600; color:var(--suave);
  border:1px solid transparent;
}
.abas a:hover{ color:var(--marrom); background:var(--papel-2); }
.abas a.ativa{
  color:#fff; background:var(--terracota); border-color:var(--terracota);
}

@media (max-width:640px){
  /* Alvo de 44px e as bordas sangrando até a margem da tela:
     aba cortada no canto é aba que ninguém descobre que existe. */
  .abas{
    margin-left:-16px; margin-right:-16px; padding:8px 16px;
  }
  .abas a{ padding:11px 15px; font-size:14px; }
}

/* ---------------- organizar as mesas ----------------
   Grupo de afinidade e ordem. Desenhado para o polegar: alvo
   grande, um toque, nenhuma precisão — é tela de véspera, usada
   de pé no salão com uma mão só. */
.setor-faixa{
  margin:16px 0 8px; padding:5px 10px; border-radius:7px;
  background:var(--papel); border-left:3px solid var(--terracota);
  font-size:12.5px; font-weight:700; letter-spacing:.05em;
  text-transform:uppercase; color:var(--marrom);
}

.mesa-org{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  padding:10px 12px; margin-bottom:8px;
  border:1px solid var(--linha); border-radius:10px; background:var(--papel-2);
}
.mesa-org-id{ flex:0 0 130px; line-height:1.3; }
.mesa-org-id .legenda{ display:block; font-size:12px; }

/* As setas são dois formulários independentes, por isso o flex
   em volta: cada toque salva uma mesa e volta, e assim a tela
   funciona sem JavaScript e não perde trabalho se a conexão do
   salão cair no meio. */
.mesa-org-setas{ display:flex; gap:4px; flex:0 0 auto; }
.mesa-org-setas .bt{
  min-width:42px; min-height:38px; padding:0;
  font-size:15px; line-height:1;
}

.mesa-org-campos{
  display:flex; gap:8px; align-items:flex-end; flex:1 1 300px; flex-wrap:wrap;
}
.mesa-org-campos input{
  padding:7px 9px; font-size:15px; border:1px solid var(--linha);
  border-radius:6px; background:#fff; color:var(--marrom); width:100%;
}
.mesa-org-campos input[name="lugares"]{ width:92px; }
.mesa-org-campos .campo-min{ min-width:0; }

/* --- quem está na mesa ---
   <details> em vez de popover em JavaScript: funciona sem
   script, e no celular um balão flutuante ou sai da tela ou
   cobre o que a pessoa quer comparar. Balão no computador,
   painel embaixo no celular — mesmo HTML. */
.mesa-quem{ position:relative; flex:0 0 auto; }
.mesa-quem > summary{
  list-style:none; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center;
  width:42px; height:38px; border-radius:8px;
  border:1px solid var(--linha); background:#fff; color:var(--terracota);
}
.mesa-quem > summary::-webkit-details-marker{ display:none; }
.mesa-quem > summary svg{ margin:0; }
.mesa-quem[open] > summary{ border-color:var(--terracota); background:var(--papel); }

.mesa-quem-bal{
  position:absolute; z-index:40; top:calc(100% + 6px); left:0;
  width:290px; max-width:78vw;
  padding:11px 13px; border-radius:10px;
  background:#fff; border:1px solid var(--linha);
  box-shadow:0 10px 30px rgba(30,22,14,.18);
  font-size:13px; line-height:1.45;
}
.mesa-quem-bal ul{ margin:8px 0 0; padding-left:17px; }
.mesa-quem-bal li{ margin-bottom:6px; }
.mesa-quem-bal .legenda{ font-size:12px; margin:0; }

/* O mesmo balão dentro da tabela Por mesa. Ali o gatilho é um
   ícone no meio do texto, não um botão de 42px — ele acompanha
   o nome do núcleo. */
.mesa-quem-linha{ display:inline-block; vertical-align:middle; margin-left:6px; }
.mesa-quem-linha > summary{
  width:auto; height:auto; padding:3px 5px; border:0; background:none;
}
.mesa-quem-linha > summary svg{ width:15px; height:15px; }
.mesa-quem-linha[open] > summary{ background:none; }

@media (max-width:760px){
  /* Dentro de tabela que rola na horizontal, um balão absoluto
     some atrás do corte. No celular ele vira bloco no fluxo:
     empurra o conteúdo, mas aparece inteiro. */
  .mesa-quem-linha{ display:block; margin:4px 0 0; }
  .mesa-quem-bal{
    position:static; width:auto; max-width:none;
    box-shadow:none; background:var(--papel);
  }
}

/* Tranco curto: diz "não dá" sem mensagem no topo da página. */
@keyframes mesaTrava{
  0%,100%{ transform:translateX(0); }
  25%{ transform:translateX(-4px); }
  75%{ transform:translateX(4px); }
}
.mesa-trava{ animation:mesaTrava .3s; border-color:var(--terracota); }

@media (max-width:640px){
  /* No celular o cartão vira três faixas empilhadas: identidade,
     setas e campos. As setas ganham a largura inteira porque são
     o controle mais usado desta tela. */
  .mesa-org{ gap:8px; }
  .mesa-org-id{ flex:1 1 100%; }
  .mesa-org-setas{ flex:1 1 100%; }
  .mesa-org-setas form{ flex:1 1 0; }
  .mesa-org-setas .bt{ width:100%; min-height:44px; }
  .mesa-org-campos{ flex:1 1 100%; }
  .mesa-org-campos input[name="setor"],
  .mesa-org-campos input[name="obs"]{ flex:1 1 100%; }
  .mesa-org-campos .bt{ flex:1 1 100%; }
}

/* ---------------- quem vem: pessoas do convite ----------------
   Fica dentro da célula do convite, na lista. Fechado por padrão
   porque 24 convites com 79 subitens abertos é uma parede. */
.pessoas-cx{ margin-top:6px; }
.pessoas-cx > summary{
  cursor:pointer; font-size:12.5px; color:var(--terracota);
  list-style:none; display:inline-block;
  border-bottom:1px dotted currentColor; padding-bottom:1px;
}
.pessoas-cx > summary::-webkit-details-marker{ display:none; }
.pessoas-cx > summary::before{ content:"▸ "; }
.pessoas-cx[open] > summary::before{ content:"▾ "; }
.pessoas-cx[open] > summary{ margin-bottom:8px; }

/* Cada pessoa é um formulário próprio: salvar uma não mexe nas
   outras, e sem JavaScript continua funcionando. */
.pessoa-linha{
  display:inline-flex; flex-wrap:wrap; gap:5px; align-items:center;
  margin:0 0 5px;
}
.pessoa-linha input[type="text"]{ width:165px; }
.pessoa-linha input[type="number"]{ width:64px; }
.pessoa-linha input, .pessoa-linha select{
  padding:5px 7px; font-size:15px; border:1px solid var(--linha);
  border-radius:6px; background:#fff; color:var(--marrom);
}
.pessoa-nova{ margin-top:4px; padding-top:7px; border-top:1px dashed var(--linha); }
.pessoa-nova input, .pessoa-nova select{ background:var(--papel-2); }

@media (max-width:640px){
  /* No celular a linha da pessoa ocupa a largura toda, e o nome
     ganha a primeira linha inteira — é o campo que se lê. */
  .pessoa-linha{ display:flex; width:100%; }
  .pessoa-linha input[type="text"]{ flex:1 1 100%; width:auto; }
  .pessoa-linha select{ flex:1 1 120px; }
}

/* ---------------- o croqui do salão ----------------
   Duas camadas de grid, uma em cima da outra, com o MESMO
   template. Atrás as células, que são os alvos de toque; na
   frente as peças, cada uma declarando grid-column e grid-row.

   É isso que tira a conta de pixel do caminho: a peça diz "da
   coluna 4, ocupando 2" e o navegador resolve. Girar o celular,
   mudar o zoom ou mudar o tamanho da grade não exigem recalcular
   nada — só trocar --cc e --cl. */
.croqui-area{
  position:relative;
  display:grid;
  grid-template-columns:repeat(var(--cc), 1fr);
  grid-template-rows:repeat(var(--cl), 1fr);
  /* A proporção da grade vira a proporção da caixa. Sem isto a
     célula não seria quadrada e um salão de 20×14 apareceria
     achatado — o croqui inteiro mentiria sobre as distâncias que
     ele existe para mostrar. */
  aspect-ratio:var(--cc) / var(--cl);
  width:100%;
  border:1px solid var(--linha);
  border-radius:8px;
  background:var(--papel-2);
  overflow:hidden;
  /* A grade é o chão do salão: quem toca aqui está escolhendo
     lugar, não rolando a página. */
  touch-action:manipulation;
}
.croqui-cel{
  border:0; padding:0; margin:0; background:transparent;
  box-shadow:inset 0 0 0 .5px rgba(0,0,0,.055);
  cursor:default;
}

/* A planta do salão, por baixo de tudo.
   ------------------------------------------------------------
   Camada própria, e não background da .croqui-area: separada,
   a opacidade desbota a IMAGEM sem levar as linhas da grade e
   as peças junto. --fop vem do banco, porque o ponto certo
   depende da imagem — planta escura engole as peças, clara
   demais não mostra parede. */
.croqui-planta{
  position:absolute; inset:0;
  background-size:contain;
  background-position:center;
  background-repeat:no-repeat;
  opacity:var(--fop, .35);
  pointer-events:none;
}
/* Com planta, a grade fica branca e as linhas somem quase de
   todo: elas existem para orientar o dedo, e por cima de um
   desenho de arquiteto virariam ruído sobre ruído. */
.croqui-area.com-planta{ background:#fff; }
.croqui-area.com-planta .croqui-cel{
  box-shadow:inset 0 0 0 .5px rgba(0,0,0,.03);
}

/* A planta na caixa de ajustes, para conferir o que foi enviado. */
.croqui-planta-cx{
  display:flex; flex-wrap:wrap; gap:14px; align-items:flex-start;
  padding:12px; margin-bottom:4px;
  border:1px solid var(--linha); border-radius:8px;
  background:var(--papel-2);
}
.croqui-planta-cx img{
  width:200px; max-width:100%; height:auto; display:block;
  border:1px solid var(--linha); border-radius:6px; background:#fff;
}
.croqui-planta-cx input[type="range"]{ display:block; width:190px; }
/* A célula só acende quando há peça escolhida: antes disso o
   destaque prometeria uma ação que não existe. A classe entra no
   container, não em cada célula — 280 toggles por seleção seriam
   280 recálculos de estilo. */
.croqui-area.armada .croqui-cel{ cursor:pointer; }
.croqui-area.armada .croqui-cel:hover{ background:rgba(176,82,44,.14); }

.croqui-pecas{
  position:absolute; inset:0;
  display:grid;
  grid-template-columns:repeat(var(--cc), 1fr);
  grid-template-rows:repeat(var(--cl), 1fr);
  /* A camada não intercepta o toque; só as peças dentro dela.
     Sem isto a camada cobriria as células e nenhum toque na
     grade chegaria ao destino. */
  pointer-events:none;
}
.croqui-peca{
  pointer-events:auto;
  grid-column:calc(var(--c) + 1) / span var(--w);
  grid-row:calc(var(--l) + 1) / span var(--h);
  margin:1px; padding:2px;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:1px;
  border:1px solid rgba(0,0,0,.18); border-radius:6px;
  font-size:11.5px; line-height:1.15; font-weight:600;
  overflow:hidden; cursor:grab;
  /* Sem isto o arrastar no celular rolaria a página em vez de
     mover a peça. */
  touch-action:none;
  transition:box-shadow .12s, transform .12s;
}
.croqui-peca.e-mesa{
  background:#fff; color:var(--marrom);
  border-color:var(--linha);
}
.croqui-peca.e-item{
  background:var(--pc); color:#fff; opacity:.9;
  border-color:rgba(0,0,0,.25);
}
.croqui-peca .croqui-rot{
  max-width:100%; overflow:hidden; text-overflow:ellipsis;
  white-space:nowrap;
}
/* O elemento mostra o NOME INTEIRO — "Pista", "Mesa do bolo" — e
   não a sigla: a sigla é dos núcleos, e abreviar "Pista" para "P"
   foi um erro meu. Como o retângulo do elemento é grande (a pista
   nasce 5×4) o nome cabe; quando não cabe, quebra em duas linhas
   em vez de virar reticências, porque "Mesa do…" não identifica
   nada. O title tem o nome completo de qualquer forma. */
.croqui-peca.e-item .croqui-rot{
  white-space:normal; text-align:center;
  line-height:1.1; word-break:break-word;
  padding:0 2px;
}

/* O rótulo do elemento se edita no lugar.
   ------------------------------------------------------------
   Sem affordance nenhuma ninguém descobre que dá para clicar e
   escrever. Mas afford*ance* permanente (moldura, fundo branco)
   poluiria o mapa, que é feito para ser lido de relance. Então o
   convite aparece no hover e a moldura só no foco — o estado em
   que ela de fato informa algo.

   min-width porque rótulo apagado vira um alvo de zero pixel, e
   aí não há como clicar para escrever de novo. */
.croqui-peca.e-item .croqui-rot[data-editavel]{
  min-width:18px; cursor:text; border-radius:3px;
}
@media (hover:hover){
  .croqui-peca.e-item .croqui-rot[data-editavel]:hover{
    background:rgba(255,255,255,.22);
    box-shadow:inset 0 0 0 1px rgba(255,255,255,.45);
  }
}
.croqui-peca.e-item .croqui-rot[data-editavel]:focus{
  outline:none;
  background:#fff; color:var(--marrom);
  box-shadow:0 0 0 2px var(--terracota);
  /* Editando, o texto precisa caber: deixa de ser cortado e
     passa a quebrar, ainda que transborde a peça por um
     instante. Nome que não se lê não se corrige. */
  white-space:normal; overflow:visible;
  position:relative; z-index:6;
}
.croqui-peca .croqui-qtd{
  font-weight:400; font-size:10.5px; opacity:.72;
}
.croqui-peca.sel{
  box-shadow:0 0 0 2px var(--terracota);
  transform:scale(1.04); z-index:3;
}
.croqui-peca.arrastando{ opacity:.55; cursor:grabbing; }

/* As iniciais dos núcleos, dentro da peça.
   ------------------------------------------------------------
   É o que torna o mapa legível de relance: "Mesa 7" não diz
   nada, "7 · BS JM" diz que ali estão os Souza e os Martins.
   Menor e mais clara que o número da mesa, porque a hierarquia
   é essa — primeiro qual mesa, depois quem. */
.croqui-peca .croqui-inis{
  font-weight:400; font-size:9.5px; letter-spacing:.3px;
  opacity:.72; line-height:1.1;
  max-width:100%; overflow:hidden; text-overflow:ellipsis;
  white-space:nowrap;
}

/* O ícone de ver quem senta ali.
   Canto superior direito, fora do caminho do rótulo, e com área
   de toque maior que o desenho — 13px de ícone com 20px de alvo,
   que é o mínimo tolerável para dedo em peça pequena. */
.croqui-quem-bt{
  position:absolute; top:0; right:0;
  width:20px; height:20px; padding:0;
  display:flex; align-items:center; justify-content:center;
  border:0; border-radius:0 5px 0 5px;
  background:rgba(0,0,0,.07); color:inherit;
  cursor:pointer; opacity:.65;
}
.croqui-quem-bt:hover{ opacity:1; background:rgba(0,0,0,.14); }
.croqui-peca{ position:relative; }

/* A alça de redimensionar, canto inferior direito.
   ------------------------------------------------------------
   Eu havia recusado alça de canto, e a recusa valia para o
   DEDO: em 40 pixels de peça ela é alvo pequeno demais, e o dedo
   que erra arrasta a peça inteira. Com ponteiro o argumento se
   inverte — o mouse acerta 10 pixels sem esforço, e esticar o
   canto é mais rápido que contar cliques no ±.

   Por isso ela só existe onde há ponteiro de verdade. No celular
   ficam o ± e o Tamanho padrão, que acertam sempre. */
.croqui-tam{ display:none; }

@media (hover:hover) and (pointer:fine){
  .croqui-tam{
    display:block; position:absolute; right:0; bottom:0;
    width:11px; height:11px; cursor:nwse-resize;
    /* Dois riscos na diagonal, o desenho que todo canto de
       redimensionar tem — sem imagem e sem ícone a manter. */
    background:
      linear-gradient(135deg, transparent 42%, currentColor 42%,
                      currentColor 54%, transparent 54%),
      linear-gradient(135deg, transparent 68%, currentColor 68%,
                      currentColor 80%, transparent 80%);
    opacity:.35;
  }
  .croqui-peca:hover .croqui-tam,
  .croqui-peca.sel .croqui-tam{ opacity:.85; }
}
/* Enquanto mede, a peça não transiciona: a transição de 120ms
   faria o retângulo correr atrás do ponteiro em vez de acompanhá-lo. */
.croqui-peca.medindo{
  transition:none;
  box-shadow:0 0 0 2px var(--terracota);
  z-index:4;
}

/* O laço: o retângulo que escolhe várias de uma vez.
   Tracejado e translúcido para não esconder o que está laçando —
   o ponto do gesto é ver quem vai entrar. */
.croqui-laco{
  position:absolute; z-index:5; pointer-events:none;
  border:1.5px dashed var(--terracota);
  background:rgba(176,82,44,.10);
  border-radius:3px;
}

/* O interruptor de escolher várias, quando ligado. */
#croquiVarias.ligado{
  background:var(--terracota); color:#fff; border-color:var(--terracota);
}

/* ---- a gaveta: mesas ainda fora do mapa ---- */
.croqui-gaveta{
  display:flex; flex-wrap:wrap; gap:6px; align-items:center;
  padding:10px 12px; margin-bottom:12px;
  border:1px dashed var(--linha); border-radius:8px;
}
/* Vermelho porque é trabalho que falta, igual ao grupo "sem
   mesa" da lista — e verde-neutro quando acabou, para o fim do
   trabalho ser visível de relance. */
.croqui-gaveta.tem{ border-color:var(--terracota); background:rgba(176,82,44,.05); }
.croqui-gaveta.vazia{ opacity:.75; }
.croqui-gaveta-rot{ font-size:12.5px; color:var(--suave); margin-right:4px; }
/* O chip da gaveta. Virou <div> pelo mesmo motivo da peça: tem
   um botão dentro (o ícone de quem senta). */
.croqui-fora{
  display:inline-flex; align-items:center; gap:5px;
  background:#fff; border:1px solid var(--linha); border-radius:6px;
  padding:5px 5px 5px 10px; font-size:13.5px; color:var(--marrom);
  cursor:pointer; min-height:36px;
  touch-action:none;
}
.croqui-fora-nome{ font-weight:600; }
.croqui-fora small{ opacity:.6; letter-spacing:.3px; }
.croqui-fora.sel{ box-shadow:0 0 0 2px var(--terracota); }
/* Aqui o ícone fica no fluxo, não no canto: o chip tem largura
   para ele, ao contrário da peça apertada do mapa. */
.croqui-fora .croqui-quem-bt{
  position:static; border-radius:5px;
}

/* ---- a barra da peça escolhida ---- */
.croqui-barra{
  display:flex; flex-wrap:wrap; gap:10px; align-items:center;
  margin-top:12px; padding:10px 12px;
  border:1px solid var(--terracota); border-radius:8px;
  background:var(--papel-2);
}
.croqui-grupo{ display:inline-flex; align-items:center; gap:5px; }
.croqui-grupo small{ color:var(--suave); font-size:12px; }
.croqui-grupo b{ min-width:16px; text-align:center; }

/* ---- quem senta ali: o balão ----
   ------------------------------------------------------------
   position:fixed porque o mesmo balão atende às peças do mapa e
   aos chips da gaveta, que estão fora da grade: a âncora é o
   retângulo do ícone na tela, venha ele de onde vier. O JS põe
   left/top e --seta; o CSS só desenha.

   Era um painel fixo abaixo da barra, e a resposta aparecia
   longe da pergunta — quem toca o ícone da mesa 7 está olhando
   para a mesa 7. */
.croqui-quem{
  position:fixed; z-index:60;
  width:min(270px, calc(100vw - 20px));
  max-height:min(320px, 60vh); overflow:auto;
  padding:11px 13px;
  border:1px solid var(--linha); border-radius:10px;
  background:#fff;
  box-shadow:0 6px 24px rgba(0,0,0,.18);
}
/* A seta, apontando o ícone. --seta é a distância a partir da
   borda esquerda do balão, já aparada pelo JS: sem o aparo ela
   sairia pela quina quando o balão é empurrado para dentro da
   tela por estar perto da borda. */
.croqui-quem::before,
.croqui-quem::after{
  content:""; position:absolute; left:var(--seta, 50%);
  margin-left:-7px; border:7px solid transparent;
}
.croqui-quem::before{ top:-14px; border-bottom-color:var(--linha); }
.croqui-quem::after{  top:-13px; border-bottom-color:#fff; }
.croqui-quem.acima::before{
  top:auto; bottom:-14px; border-bottom-color:transparent;
  border-top-color:var(--linha);
}
.croqui-quem.acima::after{
  top:auto; bottom:-13px; border-bottom-color:transparent;
  border-top-color:#fff;
}
/* O X existe para o dedo: clicar fora também fecha, mas num
   celular "fora" costuma ser outra peça, e aí o toque viraria
   uma seleção que ninguém pediu. */
.croqui-quem-x{
  position:absolute; top:4px; right:6px;
  width:26px; height:26px; padding:0;
  border:0; background:none; cursor:pointer;
  font-size:21px; line-height:1; color:var(--suave);
}
.croqui-quem-x:hover{ color:var(--marrom); }
.croqui-quem-rot{
  display:block; font-size:12.5px; color:var(--suave);
  margin:0 26px 7px 0;   /* espaço para o X */
}
/* A lista é por NÚCLEO, com as pessoas aninhadas: a mesa 7 não
   tem "oito pessoas", tem a família Souza, os Martins e a Ana.

   Uma coluna: o balão é estreito por natureza (ele acompanha o
   ícone, não a largura da página), e duas colunas de 120px
   cortariam "Maria Aparecida (7)" no meio. */
.croqui-quem > ul{
  margin:0; padding:0; list-style:none;
  font-size:14px; line-height:1.5;
}
.croqui-quem > ul > li{ break-inside:avoid; margin-bottom:7px; }
.croqui-quem .croqui-sigla{
  display:inline-block; min-width:24px; margin-right:5px;
  padding:1px 4px; border-radius:4px;
  background:var(--papel-2); border:1px solid var(--linha);
  font-size:11px; letter-spacing:.5px; text-align:center;
}
.croqui-quem ul ul{
  margin:2px 0 0 29px; padding:0; list-style:none;
  font-size:13px; color:var(--suave);
}
.croqui-quem small{ display:block; margin-left:29px; opacity:.7; }

/* ---- a paleta ---- */
.croqui-paleta{
  display:flex; flex-wrap:wrap; gap:6px; align-items:center;
  margin-top:16px; padding-top:14px; border-top:1px dashed var(--linha);
}
.croqui-novo{
  background:var(--pc); color:#fff; border:0; border-radius:6px;
  padding:7px 11px; font-size:13px; cursor:pointer; min-height:36px;
  opacity:.92;
}
.croqui-novo:hover{ opacity:1; }

/* ---- ajustes ---- */
.croqui-ajustes > summary{
  cursor:pointer; font-size:13.5px; color:var(--terracota);
  list-style:none; display:inline-block;
  border-bottom:1px dotted currentColor; padding-bottom:1px;
}
.croqui-ajustes > summary::-webkit-details-marker{ display:none; }
.croqui-ajustes > summary::before{ content:"▸ "; }
.croqui-ajustes[open] > summary::before{ content:"▾ "; }
.croqui-grade-frm{
  display:flex; flex-wrap:wrap; gap:10px; align-items:flex-end;
  margin-top:12px;
}
.croqui-grade-frm label{ font-size:12.5px; color:var(--suave); }
.croqui-grade-frm input[type="number"]{
  display:block; width:84px; padding:6px 8px; font-size:15px;
  border:1px solid var(--linha); border-radius:6px; background:#fff;
}
.croqui-grade-frm p{ flex:1 1 100%; margin:0; }
.croqui-digitar{ display:flex; flex-wrap:wrap; gap:8px; }
.croqui-digitar form{
  display:inline-flex; align-items:center; gap:4px;
  border:1px solid var(--linha); border-radius:6px; padding:4px 7px;
}
.croqui-dig-nome{ font-size:13px; font-weight:600; min-width:34px; }
.croqui-digitar input[type="number"]{
  width:56px; padding:4px 6px; font-size:14px;
  border:1px solid var(--linha); border-radius:5px; background:#fff;
}

@media (max-width:640px){
  /* No celular a grade cresce em altura: largura total e a
     proporção mantida pelo aspect-ratio. A peça perde o rótulo
     longo e fica com fonte menor — o que se lê de relance é o
     número da mesa, não o nome do grupo. */
  .croqui-peca{ font-size:10px; margin:.5px; }
  .croqui-peca .croqui-qtd{ display:none; }
  /* A barra da peça escolhida gruda no fim da tela: com a grade
     ocupando a altura toda, uma barra no fluxo ficaria fora da
     vista justamente quando a peça está selecionada. */
  .croqui-barra{
    position:sticky; bottom:0; z-index:4;
    background:#fff; box-shadow:0 -2px 10px rgba(0,0,0,.12);
  }
  .croqui-barra .bt{ min-height:40px; }
  .croqui-digitar form{ flex:1 1 100%; }
  /* Uma coluna de nomes no celular: duas de 160px cortariam
     "Maria Aparecida (7)" no meio. */
  .croqui-planta-cx img{ width:100%; }
  /* No celular as iniciais somem da peça: em 10 pixels de altura
     elas viram borrão, e o número da mesa é o que se lê. Quem
     senta ali continua a um toque, no ícone. */
  .croqui-peca .croqui-inis{ display:none; }
}

/* ---------------- faixa da rede ----------------
   Os outros produtos, no fim de tudo. Tom mais escuro que o
   rodapé de propósito: marca o fim da página e separa o que é
   deste site do que é de fora dele. */
.rede{
  border-top:1px solid var(--linha);
  background:var(--papel-2);
  padding:30px 0 34px;
}
.rede-titulo{
  margin:0 0 20px; text-align:center;
  font-size:14.5px; color:var(--suave); line-height:1.6;
}
.rede-titulo b{ color:var(--marrom); }
.rede-itens{
  display:flex; justify-content:center; align-items:stretch;
  gap:14px; flex-wrap:wrap;
}
.rede-item{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:9px; text-decoration:none; min-width:186px;
  padding:18px 22px; border-radius:12px;
  border:1px solid var(--linha); background:#fff;
  transition:border-color .18s, transform .18s;
}
.rede-item:hover{ border-color:var(--terracota); transform:translateY(-2px); }
/* Altura fixa e largura livre: os três logos têm proporções
   diferentes, e travar a largura esmagaria dois deles. */
.rede-item img{
  height:30px; width:auto; max-width:160px; object-fit:contain;
}
.rede-nome{
  font-family:var(--serif); font-size:21px; font-weight:600;
  color:var(--terracota); line-height:1.1;
}
.rede-para{
  font-size:12px; text-transform:uppercase; letter-spacing:.07em;
  font-weight:600; color:var(--suave);
}

@media (max-width:560px){
  .rede{ padding:24px 0 28px; }
  .rede-itens{ flex-direction:column; gap:10px; }
  .rede-item{
    width:100%; min-width:0;
    flex-direction:row; justify-content:space-between; padding:14px 16px;
  }
  .rede-item img{ height:26px; }
  .rede-para{ font-size:11px; text-align:right; }
}

/* Link "continuar de onde parei" dentro do aviso do topo.
   Não é um botão: é um atalho para quem quer, e não pode competir
   com a leitura da mensagem em si. */
.aviso-ir{
  display:inline-block; margin-left:10px; white-space:nowrap;
  font-weight:600; font-size:14px; text-decoration:none;
  border-bottom:1px solid currentColor; padding-bottom:1px;
}
.aviso-ir:hover{ opacity:.75; }

/* ---------------- conferência da importação ----------------
   Sete colunas de campos editáveis. No desktop é uma tabela
   normal; no celular o .lista empilha cada linha num cartão, e
   sem estas regras cada convite vira sete linhas de altura — uma
   lista de 90 ficaria com uns dez metros de rolagem. */
.imp-tabela input[type="text"],
.imp-tabela input[type="number"]{
  padding:6px 8px; font-size:15px; border:1px solid var(--linha);
  border-radius:6px; background:#fff; color:var(--marrom);
}
.imp-tabela input:focus{ outline:2px solid var(--terracota); outline-offset:-1px; }
.imp-tabela input[type="checkbox"]{ width:19px; height:19px; accent-color:var(--terracota); }
.imp-tabela td{ vertical-align:middle; }

@media (max-width:760px){
  /* Rótulo e campo na mesma linha, em vez de um por cima do
     outro: o ::before do .lista já diz o que é cada campo. */
  .imp-tabela td[data-r]{
    display:flex; align-items:center; gap:10px;
    padding:4px 12px; border:0;
  }
  .imp-tabela td[data-r]::before{
    flex:0 0 86px; margin:0; text-align:left;
  }
  .imp-tabela td[data-r] input{ flex:1 1 auto; min-width:0 !important; }
  .imp-tabela td[data-r="Importar"]{ padding-top:10px; }
  .imp-tabela td[data-r="Observação"]{ align-items:flex-start; }
  .imp-tabela tbody tr{ padding:6px 0 10px; }
  /* O nome é o campo que importa: ganha a linha inteira. */
  .imp-tabela td[data-r="Nome"]{ display:block; padding:8px 12px 4px; }
  .imp-tabela td[data-r="Nome"]::before{ display:block; margin-bottom:3px; }
  .imp-tabela td[data-r="Nome"] input{ width:100% !important; }
}

/* ---------------- ajuda do parceiro ---------------- */
.ajuda-grupo{ margin-bottom:26px; }
.ajuda-grupo h2{
  font-family:var(--serif); font-size:21px; font-weight:600;
  margin:0 0 10px; padding-bottom:6px; border-bottom:1px solid var(--linha);
}
.ajuda-item:target summary{ color:var(--terracota); }
.ajuda-item:target{ box-shadow:0 0 0 2px var(--terracota); border-radius:8px; }

/* respeita quem prefere menos animação */
@media (prefers-reduced-motion:reduce){
  .bt{ transition:none; }
  .bt:hover{ transform:none; }
  .tour-furo{ transition:none; }
}
