/* cardapio-conversa.css — skin "Conversa" (ativado por ?conversa=1).
 *
 * Só é baixado por quem entrou pelo link do anúncio: o <link> em index.php é
 * condicional. As outras lojas não pagam um byte disto.
 *
 * PALETA — decisão do Cayu em 09/08, depois de ver a primeira versão com a cor
 * da loja: o CABEÇALHO e o corpo do bate-papo levam a caracterização do
 * WhatsApp ("é importante manter essa caracterização para realmente lembrar o
 * wpp"), e o RODAPÉ fica como está, na cor da loja.
 *
 * A primeira versão usava `--cor-topo` (a cor do lojista) em tudo, e ele achou
 * que perdia o efeito — num Dom Burger vermelho não lembrava conversa nenhuma.
 * ⚠️ Registro honesto: é exatamente o elemento que o parecer do advogado dele
 * tocou no Mosaico. Ele foi avisado e decidiu; fica anotado aqui pra quem ler
 * depois saber que não foi descuido.
 *
 * As alturas de header, rodapé e barra do carrinho chegam como --conv-*-h,
 * MEDIDAS por JS. Os fallbacks aqui existem só pro primeiro frame, antes de o
 * script rodar — não são a fonte de verdade.
 */

.cardapio-conversa {
  --conv-header: #075e54;
  --conv-eu: #dcf8c6;          /* minha mensagem */
  --conv-eu-txt: #111b21;
  --conv-loja-bg: #ffffff;     /* mensagem da loja */
  --conv-loja-txt: #111b21;
  --conv-fundo: #ece5dd;       /* papel de parede do bate-papo */
  --conv-acao: #00a884;        /* verde de ação (enviar, escolher) */
  --conv-borda: #dcd9d2;
  --conv-suave: #667781;
  --conv-barra-h: 60px;
}

/* `!important` é necessário aqui, não é preguiça: o index.php imprime
   `background-color:<corfundo>` no atributo STYLE do <body> a partir da cor que
   a loja escolheu, e estilo inline vence qualquer seletor — só perde para um
   !important. Sem isto o papel de parede do bate-papo saía branco (medido:
   rgb(255,255,255) em vez do bege). */
body.cardapio-conversa { background-color: var(--conv-fundo) !important; }

/* Cabeçalho da loja com a cara de conversa. Redefine a VARIÁVEL no próprio
   header em vez de sobrescrever o `background` com !important: as regras de
   .header-modern são 6 (capa, gradiente, sticky…) e todas leem var(--cor-topo),
   então trocar a variável acerta as 6 de uma vez e não briga com nenhuma.
   Definir a custom property no elemento vence o valor herdado do <body>, que
   vem inline — inline não é herança, é o valor do body; o filho pode redefinir. */
.cardapio-conversa .header-modern {
  --cor-topo: var(--conv-header);
  --cor-topo-texto: #ffffff;
}


/* O padding inferior do body do cardápio (80px) não conta com a barra de digitar
   NEM com a do carrinho. Sem a segunda, a mensagem "Adicionado ao seu pedido!"
   nascia atrás da barra que aparecia junto com ela. */
.cardapio-conversa body,
body.cardapio-conversa {
  padding-bottom: calc(var(--conv-base, 58px) + var(--conv-barra-h)
                     + var(--conv-rapidas-h, 46px)
                     + var(--conv-carrinho-h, 0px) + 24px);
}

.conv-wrap { max-width: 620px; margin: 0 auto; }

/* ───────── Chips de categoria (grudam sob o header) ───────── */

.conv-chips {
  position: sticky;
  top: var(--conv-header-h, 56px);
  z-index: 1020;
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 10px 14px;
  background: var(--conv-fundo);
  border-bottom: 1px solid var(--conv-borda);
  /* Esconde a barra de rolagem sem matar o gesto de arrastar. */
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.conv-chips::-webkit-scrollbar { display: none; }

.conv-chip {
  flex: 0 0 auto;
  border: 1px solid var(--conv-borda);
  background: #fff;
  color: var(--conv-loja-txt);
  border-radius: 50px;
  padding: 8px 15px;
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  cursor: pointer;
  white-space: nowrap;
}
.conv-chip:active { background: var(--conv-fundo); }

/* ── Categoria com FOTO ──────────────────────────────────────────────────────
 * Três pessoas testaram o skin e nenhuma viu a fileira de cápsulas (Cayu,
 * 09/08). Cápsula branca sobre fundo bege lê como moldura; foto de comida lê
 * como conteúdo — e é a mesma bolinha que as 81 lojas do Mosaico já usam, então
 * não é vocabulário novo, é o de casa.
 *
 * 52px e não os 64 do Mosaico: lá a fileira é a tela; aqui ela divide espaço com
 * a conversa, que é o que a pessoa veio ler. Fora quando a loja não tem foto
 * nenhuma (13 das 38 em produção) — o PHP cai pra cápsula, porque uma sequência
 * de logos padrão idênticos promete foto e entrega repetição.
 */
.conv-chips-circ { align-items: flex-start; padding: 8px 14px 6px; gap: 12px; }

.conv-circ {
  flex: 0 0 auto;
  width: 60px;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: inherit;
  font-family: inherit;
  text-align: center;
}
.conv-circ-foto {
  display: block;
  width: 52px; height: 52px;
  margin: 0 auto 4px;
  border-radius: 50%;
  overflow: hidden;
  border: 1px solid var(--conv-borda);
  padding: 2px;
  background: #fff;
}
.conv-circ-foto img, .conv-circ-foto picture {
  width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;
}
/* A imagem padrão é um LOGO: `cover` recorta e vira logo picotado. */
.conv-circ-foto img.is-default { object-fit: contain; padding: 14%; background: #fafafa; }
.conv-circ-nome {
  display: block;
  font-size: 10.5px; line-height: 1.2; font-weight: 600;
  color: var(--conv-loja-txt);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.conv-circ:active .conv-circ-foto { border-color: var(--conv-acao); }

/* A mesma fileira DENTRO da bolha de abertura — é aqui que ela é vista.
   Margens negativas pra usar a largura da bolha inteira, e rolagem própria:
   conteúdo largo nunca pode fazer a página rolar de lado. */
.conv-cats-msg {
  display: flex;
  gap: 8px;
  margin: 9px -6px 2px;
  padding: 2px 6px 4px;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.conv-cats-msg::-webkit-scrollbar { display: none; }
.conv-cats-msg-circ { gap: 11px; }
/* Dentro da mensagem o nome pode ocupar DUAS linhas: é onde a descoberta
   acontece, e "OFERTA ..." não diz o que "OFERTA DO DIA" diz. Na fileira do topo
   fica em uma linha só — lá a altura é permanente e cara. */
.conv-cats-msg .conv-circ { width: 74px; }
.conv-cats-msg .conv-circ-nome {
  white-space: normal;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  /* A bolha usa `overflow-wrap: anywhere` (nome de prato sem espaço estourava o
     body). Herdado aqui, ele partia "HAMBURGER" no meio — "HAMBURGE / R". Nome
     de categoria quebra entre palavras ou não quebra. */
  overflow-wrap: normal;
}
.conv-abertura-dica {
  display: block;
  margin-top: 6px;
  font-size: 12.5px;
  color: var(--conv-suave);
}

/* ───────── O fio da conversa ───────── */

.conv-fluxo { padding: 16px 14px 8px; display: flex; flex-direction: column; gap: 10px; }

.conv-msg { display: flex; }
.conv-de-loja { justify-content: flex-start; }
.conv-de-cliente { justify-content: flex-end; }

.conv-bolha {
  max-width: 85%;
  padding: 11px 14px;
  border-radius: 16px;
  font-size: 15px;
  line-height: 1.45;
  /* Nome de prato sem espaço (COMBO-DUPLO-FRITAS-REFRIGERANTE existe em
     produção) estourava a bolha e o body inteiro no Mosaico. */
  overflow-wrap: anywhere;
}
.conv-de-loja .conv-bolha {
  background: var(--conv-loja-bg);
  color: var(--conv-loja-txt);
  border-bottom-left-radius: 5px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .07);
}
.conv-de-cliente .conv-bolha {
  background: var(--conv-eu);
  color: var(--conv-eu-txt);
  border-bottom-right-radius: 5px;
}

/* Só a bolha de resposta rápida preserva quebra de linha (o horário da semana
   sai em linhas). Na bolha comum isso quebraria a saudação, que é HTML indentado
   pelo servidor e ganharia as quebras do próprio código-fonte. */
.conv-bolha-linhas { white-space: pre-line; }
.conv-bolha-link {
  display: inline-block;
  margin-top: 4px;
  color: var(--conv-acao);
  font-weight: 700;
  text-decoration: none;
}
.conv-bolha-link:hover { color: var(--conv-acao); text-decoration: underline; }

/* ───────── Carrossel de produtos dentro da resposta ─────────
 *
 * Horizontal, e não a lista vertical da primeira versão: uma categoria de 20
 * itens empurrava a conversa 20 cards para baixo e o cliente perdia o fio e o
 * campo de digitar. Deitado, a resposta ocupa a altura de UM card qualquer que
 * seja o número de itens.
 *
 * ⚠️ Rola DENTRO do próprio container. Conteúdo largo nunca pode fazer a página
 * rolar de lado — é o que o teste de overflow verifica a cada largura.
 */

.conv-cards {
  display: flex;
  gap: 10px;
  width: 100%;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  /* Padding lateral pra sombra do card não ser cortada, e o negativo casa a
     borda do carrossel com a das bolhas. */
  padding: 2px 14px 8px;
  margin: 0 -14px;
  /* SEM isto o carrossel nasce rolado em 14px e o primeiro card fica desalinhado
     das bolhas (medido: scrollLeft=14, card em x=0 contra bolha em x=14).
     `scroll-snap-align:start` alinha o card ao início do "snapport", que por
     padrão ignora o padding — então o navegador rola pra compensar. O
     scroll-padding é o que ensina onde o snapport realmente começa. */
  scroll-padding-left: 14px;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.conv-cards::-webkit-scrollbar { display: none; }

.conv-card {
  /* 76% e não 100%: o pedaço do próximo card espiando na borda é o que conta
     que existe mais coisa. Carrossel de card inteiro parece item único. */
  flex: 0 0 76%;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  gap: 8px;
  background: var(--conv-loja-bg);
  border: 1px solid var(--conv-borda);
  border-radius: 14px;
  padding: 10px;
  cursor: pointer;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .07);
}
.conv-card:active { background: #fafbfa; }

.conv-card-foto {
  width: 100%;
  aspect-ratio: 4 / 3;
  border-radius: 10px;
  overflow: hidden;
  background: var(--conv-fundo);
}

/* ── "Ver mais": último SLIDE do carrossel, não botão embaixo ──
   O gesto continua sendo um só — arrastar. Estreito de propósito (48%): não
   compete com produto, e deixa entrever que ainda há catálogo depois dele. */
.conv-card-mais {
  flex: 0 0 48%;
  scroll-snap-align: start;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 6px;
  background: var(--conv-loja-bg);
  border: 1px dashed var(--conv-borda);
  border-radius: 14px;
  padding: 10px;
  cursor: pointer;
  color: var(--conv-acao);
  font-family: inherit;
}
.conv-mais-icone { font-size: 24px; line-height: 1; }
.conv-mais-txt { font-size: 14px; font-weight: 800; }
.conv-mais-n { font-size: 12px; color: var(--conv-suave); font-weight: 600; }

.conv-de-loja > .conv-cards { max-width: 100%; }
.conv-card-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* A imagem padrão do sistema é um LOGO: `cover` recorta e vira logo picotado. */
.conv-card-foto img.is-default { object-fit: contain; padding: 10px; }

/* minmax(0,…) e não `auto`: sem isto, nome longo sem espaço estica a coluna e
   arrebenta o card — exatamente o bug que só apareceu com dado de produção. */
.conv-card-corpo { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: flex-start; gap: 3px; }

.conv-card-nome {
  margin: 0; font-size: 15px; font-weight: 700; line-height: 1.25;
  color: var(--conv-loja-txt); overflow-wrap: anywhere;
}
.conv-card-desc {
  margin: 0; font-size: 12.5px; line-height: 1.35; color: var(--conv-suave);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.conv-card-pe { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 3px; }

.conv-preco { font-size: 15px; font-weight: 800; color: var(--cor-preco, #1a9e3f); }
.conv-preco-opcoes { font-size: 13.5px; font-weight: 700; color: var(--conv-suave); }
.conv-preco-de { font-size: 12.5px; font-weight: 600; color: var(--conv-suave); }
.conv-preco-por { color: #ea580c; }

/* Contorno e não preenchido: medido no beta com a cor real de uma loja, o botão
   sólido tinha o mesmo peso visual do PREÇO e os dois brigavam no mesmo canto.
   Quem decide a compra é o preço; o botão só precisa dizer para onde ir — e o
   card inteiro é clicável de qualquer forma. */
.conv-add {
  flex: 0 0 auto;
  background: transparent; color: var(--conv-acao);
  border: 1.5px solid var(--conv-acao);
  border-radius: 50px; padding: 5px 13px;
  font-size: 12.5px; font-weight: 700; line-height: 1.2;
}

/* ───────── Convite pra ver o cardápio completo (a saída) ─────────
 *
 * Formato de peça de anúncio — imagem em cima, texto e botão embaixo — e não um
 * link solto no meio do papo. Decisão do Cayu (09/08): a troca de modo não pode
 * ser abrupta. Como card, a saída chega como mais uma mensagem, no ritmo da
 * conversa, e quem decide sair é o dedo dele no botão.
 *
 * ⚠️ Peça honesta, não falso anúncio: nada de "OFERTA", selo de desconto ou
 * preço riscado. É a loja mostrando o próprio cardápio — o mesmo critério que
 * proíbe este skin de se apresentar como robô.
 *
 * Largura menor que a bolha (300px contra 85%) de propósito: card de mídia
 * ocupando a linha inteira parece anúncio intrusivo; menor, parece link
 * compartilhado. O canto inferior esquerdo reto casa com o rabicho das
 * mensagens da loja.
 */

.conv-ads {
  width: min(300px, 85%);
  background: var(--conv-loja-bg);
  border: 1px solid var(--conv-borda);
  border-radius: 16px;
  border-bottom-left-radius: 5px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .09);
}

/* Mosaico 2×2 com fotos REAIS do catálogo (clonadas do DOM pelo JS). É o
   argumento do convite: "o cardápio completo tem cara disto". `gap` com fundo
   da borda desenha as linhas sem precisar de border em cada célula. */
.conv-ads-grade {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2px;
  background: var(--conv-borda);
  aspect-ratio: 16 / 10;
}
/* Neutraliza o que o card de produto define — aqui a célula é do tamanho da
   grade, não 4/3 com canto arredondado. */
.conv-ads-grade .conv-card-foto {
  width: 100%; height: 100%;
  aspect-ratio: auto;
  border-radius: 0;
  min-height: 0;
}

.conv-ads-capa { aspect-ratio: 16 / 10; background: var(--conv-fundo); }
.conv-ads-capa img { width: 100%; height: 100%; object-fit: cover; display: block; }

.conv-ads-corpo { padding: 12px 14px 12px; }
.conv-ads-tit {
  margin: 0 0 3px;
  font-size: 15px; font-weight: 800; line-height: 1.25;
  color: var(--conv-loja-txt);
}
.conv-ads-sub {
  margin: 0 0 11px;
  font-size: 12.5px; line-height: 1.35;
  color: var(--conv-suave);
}

/* Sólido, ao contrário do "Escolher" do card de produto — lá o botão não podia
   brigar com o preço; aqui ele É a única ação da peça. */
.conv-ads-btn,
.conv-ads-btn:hover,
.conv-ads-btn:focus {
  display: block;
  text-align: center;
  background: var(--conv-acao);
  color: #fff;
  border-radius: 50px;
  padding: 11px 14px;
  font-size: 14px; font-weight: 800; line-height: 1.2;
  text-decoration: none;
}
.conv-ads-btn:active { opacity: .88; }

/* A recusa precisa existir e precisa ser secundária. Sem ela, o convite
   automático (o que a loja oferece sem ser pedido) viraria empurrão — e quem
   está gostando da conversa ficaria sem como dizer isso. */
.conv-ads-nao {
  display: block;
  width: 100%;
  margin-top: 6px;
  padding: 8px 4px 2px;
  background: none;
  border: none;
  color: var(--conv-suave);
  font-family: inherit;
  font-size: 12.5px; font-weight: 600;
  cursor: pointer;
}

/* ───────── Respostas rápidas (acima do campo de digitar) ─────────
 *
 * A saída morava no topo, grudada à direita da fileira de categorias, e tinha
 * dois defeitos que o Cayu pegou (09/08): discreta demais e com as categorias
 * passando por baixo dela. Somando: o canto superior direito é o ponto mais
 * difícil de alcançar com o polegar num celular — lugar ruim pra porta de saída.
 *
 * Aqui é o idioma do próprio meio: sugestão de resposta acima do campo é o que
 * todo mensageiro faz. Deixa de ser cromo e vira conversa, fica na zona do
 * polegar, e a fileira de categorias volta a ser só categorias.
 */

.conv-rapidas {
  position: fixed;
  left: 0; right: 0;
  /* Quarta camada fixa, empilhada sobre a barra de digitar. Todas as alturas vêm
     da medição por JS: o número de chips muda por loja e a barra de baixo cresce
     com o safe-area do iPhone. */
  bottom: calc(var(--conv-base, 58px) + var(--conv-barra-h));
  z-index: 1044;                       /* logo abaixo da barra de digitar */
  display: flex;
  gap: 7px;
  overflow-x: auto;
  padding: 7px 12px;
  background: var(--conv-fundo);
  border-top: 1px solid var(--conv-borda);
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.conv-rapidas::-webkit-scrollbar { display: none; }

.conv-rapida {
  flex: 0 0 auto;
  border: 1px solid var(--conv-borda);
  background: #fff;
  color: var(--conv-loja-txt);
  border-radius: 50px;
  padding: 7px 13px;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.15;
  white-space: nowrap;
  cursor: pointer;
}
.conv-rapida:active { background: #f1efeb; }

/* A saída vem primeiro e é a única com cor: ela TROCA DE MODO, as outras
   respondem. Coisas diferentes não podem parecer a mesma coisa — foi o que
   tornou o botão anterior invisível, parecendo mais um enfeite do topo. */
.conv-rapida-sair {
  border-color: var(--conv-acao);
  color: var(--conv-acao);
  font-weight: 800;
}
.conv-rapida-sair i { margin-right: 3px; font-size: 12px; }
/* Um respiro separando a saída das perguntas, sem desenhar uma linha. */
.conv-rapida-sair { margin-right: 5px; }

/* ── Teclado aberto: só o campo fica ──
   Com o teclado na tela sobra pouco mais de um terço dela, e ali cabiam três
   camadas de cromo: respostas rápidas, campo e os 7 atalhos do rodapé. Quem
   está escrevendo não vai tocar em nenhum dos dois extremos — some com eles e
   a conversa respira. A classe entra pelo JS, que é quem sabe do teclado
   (`visualViewport`); some sozinha quando ele fecha. */
.cardapio-conversa.conv-teclado .conv-rapidas,
.cardapio-conversa.conv-teclado .bottom-action-bar { display: none; }

/* Com o teclado aberto a barra sobe pela diferença entre a janela de layout (à
   qual `position:fixed` se ancora) e a área realmente visível — senão ela fica
   presa a uma borda fora da tela e "desce" a cada rolagem. O valor vem medido do
   JS e é 0 onde as duas janelas coincidem, então isto não muda nada nesses
   aparelhos. */
.cardapio-conversa.conv-teclado .conv-barra {
  transform: translateY(calc(-1 * var(--conv-teclado-shift, 0px)));
}

/* ───────── Barra de digitar (campo + enviar, nada mais) ───────── */

.conv-barra {
  position: fixed;
  left: 0; right: 0;
  /* Empilha ACIMA da .bottom-action-bar em vez de escondê-la: Ofertas e Cupom
     moram lá e são dinheiro. Altura vinda da medição, não chutada — em iPhone
     com notch o env(safe-area-inset-bottom) muda esse número. */
  bottom: var(--conv-base, 58px);
  z-index: 1045;
  display: flex; align-items: center; gap: 8px;
  padding: 9px 12px;
  background: rgba(255, 255, 255, .97);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-top: 1px solid var(--conv-borda);
  box-shadow: 0 -2px 14px rgba(0, 0, 0, .05);
}

/* O botão que abre a folha de categorias, no lugar do clipe de papel do WhatsApp
   — que este skin deixava vazio porque ícone sem destino é promessa falsa.
   Agora tem destino, e ganhou o melhor imóvel da tela: ao lado de onde o olho já
   está, no alcance do polegar. Foi pra cá depois de a fileira do topo falhar o
   teste do olho TRÊS vezes, com três formas diferentes.

   SÓLIDO, não contorno: a primeira versão tinha borda fina sobre fundo branco e
   sumia ao lado do botão de enviar, que é um círculo cheio — os testadores
   acharam, mas apontaram que estava discreto demais.
   Leva o verde do CABEÇALHO (#075e54) e não o verde de ação (#00a884): mesmo
   PESO do enviar, então é encontrado; VALOR diferente, então não disputa o papel
   de ação principal. Dois círculos iguais fariam o enviar perder a singularidade.
   Preto com traços amarelos foi cogitado e daria mais contraste ainda, mas seria
   o único par preto-e-amarelo do skin — coloração de aviso, lê como corpo
   estranho ou anúncio. */
.conv-opcoes {
  flex: 0 0 auto;
  width: 42px; height: 42px;
  border: 0;
  border-radius: 50%;
  background: var(--conv-header);
  color: #fff;
  font-size: 16px;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.conv-opcoes:active { opacity: .85; }

/* ───────── Folha de categorias (list message) ───────── */

.conv-folha { position: fixed; inset: 0; z-index: 1100; }
.conv-folha[hidden] { display: none; }
.conv-folha-fundo { position: absolute; inset: 0; background: rgba(0, 0, 0, .45); }
.conv-folha-painel {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  max-height: 72vh;
  display: flex; flex-direction: column;
  background: #fff;
  border-radius: 18px 18px 0 0;
  /* Respeita o notch de baixo: sem isto o último item fica sob a barra do iPhone. */
  padding-bottom: env(safe-area-inset-bottom, 0px);
  box-shadow: 0 -6px 26px rgba(0, 0, 0, .22);
  animation: convFolhaSobe .18s ease-out;
}
@keyframes convFolhaSobe { from { transform: translateY(14px); opacity: .6 } to { transform: none; opacity: 1 } }
@media (min-width: 700px) { .conv-folha-painel { max-width: 620px; margin: 0 auto; } }

.conv-folha-topo {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px 10px;
  border-bottom: 1px solid var(--conv-borda);
}
.conv-folha-titulo { font-size: 15px; font-weight: 800; color: var(--conv-loja-txt); }
.conv-folha-x {
  border: 0; background: none; color: var(--conv-suave);
  font-size: 18px; cursor: pointer; padding: 4px 4px 4px 12px; line-height: 1;
}

.conv-folha-lista { overflow-y: auto; -webkit-overflow-scrolling: touch; }
.conv-folha-item {
  display: flex; align-items: center; gap: 12px;
  width: 100%;
  padding: 11px 16px;
  border: 0; border-bottom: 1px solid #f1efec;
  background: none;
  font-family: inherit;
  text-align: left;
  cursor: pointer;
}
.conv-folha-item:last-child { border-bottom: 0; }
.conv-folha-item:active { background: #f6f5f3; }
.conv-folha-foto {
  flex: 0 0 auto;
  width: 46px; height: 46px;
  border-radius: 10px;
  overflow: hidden;
  background: var(--conv-fundo);
  display: block;
}
.conv-folha-foto img, .conv-folha-foto picture {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.conv-folha-foto img.is-default { object-fit: contain; padding: 8px; background: #fafafa; }
/* min-width:0 pra nome comprido truncar em vez de esticar a linha. */
.conv-folha-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.conv-folha-nome {
  font-size: 14.5px; font-weight: 700; color: var(--conv-loja-txt); line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.conv-folha-n { font-size: 12px; color: var(--conv-suave); }
.conv-folha-seta { flex: 0 0 auto; color: var(--conv-borda); font-size: 13px; }

/* Trava a página atrás da folha: rolar o fundo com a folha aberta é o jeito mais
   rápido de perder o lugar na conversa. */
body.conv-folha-aberta { overflow: hidden; }

.conv-input {
  flex: 1; min-width: 0;
  border: 1px solid var(--conv-borda);
  border-radius: 50px;
  padding: 11px 16px;
  /* 16px não é estética: abaixo disso o iOS dá zoom ao focar e desalinha a tela
     inteira. Já mordeu no checkout do Mosaico. */
  font-size: 16px;
  background: #fff; color: var(--conv-loja-txt);
  outline: none;
}
.conv-input:focus { border-color: var(--conv-acao); }

.conv-enviar {
  flex: 0 0 auto;
  width: 44px; height: 44px;
  border: none; border-radius: 50%;
  background: var(--conv-acao); color: #fff;
  font-size: 16px; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.conv-enviar:active { opacity: .85; }

/* A barra do carrinho sobe pra não cobrir a barra de digitar. Ela só existe
   quando há item, então as 3 barras só coexistem no momento em que o carrinho
   é, de longe, a coisa mais importante da tela. */
.cardapio-conversa .cart-float {
  bottom: calc(var(--conv-base, 58px) + var(--conv-barra-h)
             + var(--conv-rapidas-h, 46px) + 6px);
}

/* ───────── O que NÃO cabe numa conversa ─────────
 *
 * Rodapé da loja e o convite do Indicaê são renderizados por include/fundo.php
 * DEPOIS do conteúdo do skin. Numa grade eles são o fim natural da página; num
 * bate-papo eles caem ENTRE a última mensagem e o campo de digitar — medido no
 * beta, com a conversa vazia os dois apareciam colados na saudação, parecendo
 * parte do diálogo. A regra de um chat é simples: a última mensagem encosta no
 * campo. Nada pode se meter ali.
 *
 * O que eles davam continua no ar: identidade da loja está no header, e os
 * atalhos (incl. Ofertas e Cupom) na .bottom-action-bar, que fica.
 * ⚠️ Isto esconde o "Powered by 67food" NESTE skin — é decisão de marca, não
 * técnica. Reverter é apagar a linha do .footer-mini abaixo. */
.cardapio-conversa .footer-mini,
.cardapio-conversa .cardapio-creator-cta { display: none; }

/* A regra que escondia a `.fav-bar` neste skin saiu em 22/08 junto com a
   própria faixa, que deixou de existir em todas as skins — o Curtir mudou para
   a fileira de ícones do header e o selo de influencer foi removido. O motivo
   de 09/08 continua valendo e agora vale sozinho: curtir no meio de um
   atendimento é gesto de outra tela — só que hoje isso custa um ícone, não uma
   faixa de 46px. */

/* ───────── Catálogo-fonte ───────── */

/* Escondido por CLASSE e não pelo atributo `hidden`: se este arquivo falhar em
   carregar, o cliente cai num cardápio feio porém inteiro, em vez de numa
   página com uma saudação e nada mais. */
.conv-catalogo { display: none; }

/* ───────── Telas maiores ───────── */

@media (min-width: 700px) {
  .conv-barra { max-width: 620px; margin: 0 auto; border-radius: 14px 14px 0 0; border: 1px solid var(--conv-borda); border-bottom: none; }
  .conv-cards { max-width: 78%; }
}

/* HEADER DA CONVERSA — verde de app de mensagem (2026-08-16).
   `--conv-header` existia desde o começo do skin e NUNCA foi usado por regra
   nenhuma: a cor foi decidida, escrita e nunca aplicada. O header é o
   `.header-modern` compartilhado, então sem isto ele vinha com `--cor-topo` da
   loja (vermelho de fábrica) — e, no Moderno, com a foto de capa por cima.
   Tudo na tela dizia "conversa" menos a única faixa que o cliente vê primeiro.

   `!important` porque o `.header-capa` do Moderno chega com background-image
   inline, e inline vence especificidade. O conserto do PHP já impede a imagem
   de ser emitida; isto é a segunda linha de defesa, para o dia em que outro
   caminho escrever a capa de novo. */
.cardapio-conversa .header-modern{
  background: var(--conv-header) !important;
  background-image: none !important;
  color: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,.25);
}
.cardapio-conversa .header-modern .header-name,
.cardapio-conversa .header-modern .header-subline,
.cardapio-conversa .header-modern a,
.cardapio-conversa .header-modern i{ color: #fff; }

/* ── "Tem promoção?" ─────────────────────────────────────────────────────────
   O chip fica ao lado das outras perguntas, mas com um traço de destaque: é a
   única da fileira que anuncia dinheiro na mesa. Menos peso que o de SAIR, que
   troca de modo — a hierarquia da fileira continua sendo saída > oferta > FAQ. */
.conv-rapida-promo { border-color: #e11d48; color: #be123c; font-weight: 800; }

/* Os cupons dentro da bolha da loja. Lista, não ticket: o ticket (com recorte,
   código e o botão COPIAR) já existe no modal do rodapé, e o botão abaixo leva
   até ele. Duas implementações de "copiar cupom" divergiriam na primeira
   mudança. → funcoes/CupomRotulo.php */
.conv-cupons { margin-top: 8px; display: flex; flex-direction: column; gap: 7px; }
/* Código EM CIMA, descrição embaixo — e não lado a lado. Lado a lado funciona
   até aparecer um código real: "MICHAELJACKSONCORUMBA" (Dom Burger, produção)
   come dois terços da largura e espreme a regra do cupom numa coluna de três
   palavras por linha. Empilhar custa uma linha e não tem caso ruim. */
.conv-cupom {
  display: flex; flex-direction: column; gap: 2px;
  padding: 7px 9px; border-radius: 9px;
  background: rgba(225, 29, 72, .06);
  border: 1px dashed rgba(225, 29, 72, .35);
}
.conv-cupom-cod {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12.5px; font-weight: 800; color: #be123c; letter-spacing: .5px;
  overflow-wrap: anywhere;   /* código longo quebra em vez de estourar a bolha */
}
.conv-cupom-txt { font-size: 12.5px; line-height: 1.35; }
.conv-cupom-btn {
  margin-top: 9px; width: 100%;
  border: 1px solid var(--conv-acao); border-radius: 9px;
  background: transparent; color: var(--conv-acao);
  font-family: inherit; font-size: 13px; font-weight: 700;
  padding: 8px 12px; cursor: pointer;
}
.conv-cupom-btn:active { background: rgba(0, 0, 0, .04); }

/* ── Esgotado ────────────────────────────────────────────────────────────────
 * A Conversa é onde o cliente pergunta pelo prato PELO NOME. Esconder o item
 * que acabou faria o bate-papo responder "não achei nada" sobre algo que a loja
 * vende — a pior resposta que ele pode dar. Marcado, a resposta é a verdadeira:
 * existe, e acabou. Decisão completa no bloco "ESGOTADO" do cardapio.css. */
.conv-esgotado .conv-card-foto img{filter:grayscale(.65);opacity:.72}
.conv-esgotado .conv-card-nome{opacity:.78}
.conv-esgotado .conv-preco{color:#6b7280}

.conv-tag-esgotado{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:5px;background:#fee2e2;color:#b3261e;font-size:10px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;vertical-align:middle}

.conv-add-off{background:#e5e7eb;color:#6b7280;cursor:not-allowed}
