/*
 * Pedido por conversa: o chat (#triagem-root) e o cartão do pedido
 * (#home-pedido-root) que ele preenche. Mora fora do <head> das páginas
 * porque a mesma experiência roda na home e no /pedido-simplificado — as
 * regras nasceram na home e viveram um tempo só lá.
 *
 * Comportamento: public/assets/js/home-triagem.js (conversa) e
 * public/assets/js/home-pedido.js (cartão, validação, OTP e envio).
 * Marcação: src/_includes/global/pedido-chat.njk e pedido-card.njk.
 *
 * O que é do hero de cada página (fundo, título, chamada) fica no
 * head-extra dela: aqui só entra o que as duas telas compartilham.
 */

/* Chamada da página (#hero-head): sai de cena quando a conversa começa, para
   a dobra ser toda do chat — no celular ela custava a altura de duas
   perguntas. Recolhe por altura, e não por `display`, para o chat subir
   deslizando em vez de dar um salto. A margem negativa anula o `gap` do
   hero, senão sobraria o vão do elemento recolhido. Quem põe e tira o
   `is-hidden` é o home-triagem.js. A marca continua no header do site. */
#hero-head {
    overflow: hidden;
    max-height: 26rem;
    transition: max-height 0.35s ease, opacity 0.25s ease, margin-bottom 0.35s ease;
}
#hero-head.is-hidden { max-height: 0; opacity: 0; margin-bottom: -1.5rem; }
@media (min-width: 640px) { #hero-head.is-hidden { margin-bottom: -1.75rem; } }
@media (prefers-reduced-motion: reduce) { #hero-head { transition: none; } }

/* Chat de triagem do hero (home-triagem.js)
   A barra de busca e o chat são o MESMO container: `.triagem-shell`
   começa como pílula e vira um cartão de conversa quando `.is-chat`
   entra, com o campo virando o compositor no rodapé. */
.triagem-shell {
    position: relative;
    background: #ffffff;
    border: 1px solid #e2e8f0;
    border-radius: 2rem;
    box-shadow: 0 30px 60px -10px rgba(15,23,42,0.18);
    overflow: hidden;
    text-align: left;
    transition: border-radius 0.35s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.triagem-shell:hover,
.triagem-shell:focus-within { box-shadow: 0 30px 60px -10px rgba(15,23,42,0.24); border-color: #cbd5e1; }
.triagem-shell.is-chat { border-radius: 1.5rem; }

.triagem-chat {
    max-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    opacity: 0;
    transition: max-height 0.4s ease, opacity 0.3s ease, padding 0.4s ease;
    padding: 0 1rem;
}
.triagem-shell.is-chat .triagem-chat {
    max-height: min(52vh, 420px);
    opacity: 1;
    padding: 1rem;
    border-bottom: 1px solid #f1f5f9;
}
.triagem-chat > * + * { margin-top: 0.75rem; }

/* Campo + ferramentas. Enquanto é busca, os dois ficam empilhados e a
   linha de baixo é uma prateleira com rótulo; quando vira conversa, a
   mesma prateleira encolhe para ícones e passa para a esquerda do
   campo (`row-reverse`), que é onde ela cabe num compositor de chat. */
.triagem-bar { display: flex; flex-direction: column; }
.triagem-shell.is-chat .triagem-bar {
    flex-direction: row-reverse; align-items: center;
    gap: 0.25rem; padding: 0.375rem 0.5rem 0.375rem 0.625rem;
}
.triagem-shell.is-recording .triagem-bar { display: none; }

.triagem-composer {
    display: flex; align-items: center; gap: 0.75rem;
    padding: 0.625rem 0.625rem 0.625rem 1.25rem;
}
.triagem-shell.is-chat .triagem-composer { flex: 1; min-width: 0; padding: 0 0 0 0.25rem; gap: 0.5rem; }
.triagem-shell.is-chat .triagem-composer-icon { display: none; }

/* Um botão redondo só: microfone com o campo vazio, enviar assim que
   aparece texto — a troca é o sinal de que a busca virou conversa. */
.triagem-primary {
    width: 3rem; height: 3rem; flex: none; border-radius: 9999px;
    display: inline-flex; align-items: center; justify-content: center;
    background: #1bafbf; color: #ffffff;
    box-shadow: 0 8px 22px rgba(0,196,181,0.32);
    transition: background 0.2s, opacity 0.2s;
}
.triagem-primary:hover { background: #158d99; }
.triagem-primary:disabled { opacity: 0.4; cursor: not-allowed; box-shadow: none; }
.triagem-primary.hidden { display: none; }
.triagem-shell.is-chat .triagem-primary { width: 2.5rem; height: 2.5rem; box-shadow: 0 6px 18px rgba(0,196,181,0.30); }
/* O microfone só entra em cena quando o navegador realmente grava (ver
   home-triagem.js): sem ele, o botão de enviar fica desde o início. */
.triagem-shell.has-mic:not(.is-typing) #triagem-send { display: none; }
.triagem-shell.is-typing #triagem-mic { display: none; }

.triagem-tools {
    display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.5rem;
    padding: 0.75rem 1.25rem 0.75rem; border-top: 1px solid #f1f5f9;
}
.triagem-tools-group { display: flex; align-items: center; gap: 0.5rem; }
.triagem-tool {
    display: inline-flex; align-items: center; gap: 0.4375rem; flex: none;
    padding: 0.5rem 0.875rem; border-radius: 9999px;
    background: #ffffff; border: 1px solid #e2e8f0;
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-size: 0.8125rem; font-weight: 700; color: #475569;
    transition: border-color 0.2s, color 0.2s, background 0.2s;
}
.triagem-tool svg { color: #1bafbf; flex: none; }
.triagem-tool:hover { border-color: #1bafbf; color: #106a73; }
.triagem-tool:disabled { opacity: 0.4; cursor: not-allowed; }
.triagem-tool.hidden { display: none; }

/* Cotar material: o pedido ainda não tem esse campo, então o botão
   existe só como anúncio — cara de caixa desmarcada e apagada, sem
   reagir ao hover. */
.triagem-material { opacity: 0.6; cursor: not-allowed; }
.triagem-material:hover { border-color: #e2e8f0; color: #475569; }
.triagem-material-box {
    display: inline-flex; width: 1.125rem; height: 1.125rem; flex: none;
    border-radius: 0.375rem; border: 1px solid #cbd5e1; background: #ffffff;
}

/* Tooltip curto acima do botão. Cabe dentro do `overflow: hidden` do
   shell porque a prateleira é a última linha do cartão, e é ancorado
   pela esquerda para não vazar da borda num botão de canto. */
.triagem-tip { position: relative; }
.triagem-tip::after {
    content: attr(data-tip);
    position: absolute; bottom: calc(100% + 0.5rem); left: 0;
    padding: 0.375rem 0.625rem; border-radius: 0.5rem;
    background: #18181b; color: #ffffff;
    font-size: 0.6875rem; font-weight: 600; white-space: nowrap;
    opacity: 0; visibility: hidden; transform: translateY(0.25rem);
    transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
    pointer-events: none; z-index: 20;
}
.triagem-tip:hover::after,
.triagem-tip:focus-visible::after { opacity: 1; visibility: visible; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) { .triagem-tip::after { transition: none; } }

.triagem-shell.is-chat .triagem-tools { padding: 0; border-top: none; gap: 0.25rem; }
.triagem-shell.is-chat .triagem-tool {
    width: 2.25rem; height: 2.25rem; padding: 0; justify-content: center;
    background: #f1f5f9; border-color: transparent;
}
.triagem-shell.is-chat .triagem-tool:hover { background: #e5f9fb; }
.triagem-shell.is-chat .triagem-tool-label { display: none; }
/* Na conversa a prateleira é só ícone, e um anúncio não vale um ícone. */
.triagem-shell.is-chat .triagem-material { display: none; }

/* Anexos: mesma lista do formulário de pedido, mostrada dentro do campo. */
.triagem-attachments {
    display: flex; flex-wrap: wrap; gap: 0.375rem;
    padding: 0 1.25rem 0.875rem;
}
.triagem-attachments.hidden { display: none; }
.triagem-attach-chip {
    display: inline-flex; align-items: center; gap: 0.375rem; max-width: 100%;
    padding: 0.25rem 0.5rem 0.25rem 0.625rem; border-radius: 0.625rem;
    background: #f8fafc; border: 1px solid #e2e8f0;
    font-size: 0.75rem; font-weight: 600; color: #475569;
}
.triagem-attach-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.triagem-attach-chip button { color: #94a3b8; line-height: 0; }
.triagem-attach-chip button:hover { color: #ef4444; }
/* O anexo sobe na hora em que é escolhido, então o chip precisa contar
   em que pé está: pulsando enquanto sobe, vermelho quando falha. */
.triagem-attach-chip.is-uploading { opacity: 0.7; animation: triagem-attach-pulse 1.2s ease-in-out infinite; }
.triagem-attach-chip.is-error { background: #fef2f2; border-color: #fecaca; color: #b91c1c; }
.triagem-attach-retry {
    flex: none; line-height: 1; text-decoration: underline;
    font-size: 0.6875rem; font-weight: 700; color: #b91c1c;
}
.triagem-attach-chip.is-error button:hover { color: #7f1d1d; }
@keyframes triagem-attach-pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 0.9; } }
@media (prefers-reduced-motion: reduce) {
    .triagem-attach-chip.is-uploading { animation: none; }
}

/* Arrastar arquivo para o campo: a camada só existe durante o arrasto,
   senão ela roubaria os cliques do compositor. */
.triagem-drop {
    position: absolute; inset: 0; z-index: 5;
    display: none; align-items: center; justify-content: center; gap: 0.5rem;
    background: rgba(224, 252, 249, 0.96);
    border: 2px dashed #00c4b5; border-radius: inherit;
    color: #00857c; font-size: 0.875rem; font-weight: 700;
}
.triagem-shell.is-dragging .triagem-drop { display: flex; }

/* Aviso da gravação, fora do cartão para não empurrar o compositor. */
.triagem-voice-error {
    display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.5rem 0.75rem;
    padding: 0.625rem 0.875rem; border-radius: 0.875rem;
    background: #fef2f2; border: 1px solid #fecaca;
    font-size: 0.8125rem; font-weight: 600; color: #b91c1c;
}
.triagem-voice-error.hidden { display: none; }
/* O ícone acompanha a primeira linha do texto: sem o grupo, a frase
   longa jogaria ele sozinho para a linha de cima. */
.triagem-voice-error-body {
    display: flex; align-items: flex-start; gap: 0.5rem;
    flex: 1 1 16rem; min-width: 0; text-align: left; line-height: 1.4;
}
.triagem-voice-error svg { color: #ef4444; flex: none; margin-top: 0.0625rem; }
.triagem-voice-retry {
    flex: none; padding: 0.3125rem 0.75rem; border-radius: 9999px;
    background: #ffffff; border: 1px solid #fca5a5; color: #b91c1c;
    font-size: 0.75rem; font-weight: 700; cursor: pointer; transition: background 0.2s;
}
.triagem-voice-retry:hover { background: #fee2e2; }
.triagem-voice-retry.hidden { display: none; }

.triagem-recording {
    display: flex; align-items: center; gap: 0.5rem;
    height: 3.5rem; padding: 0 0.75rem 0 1.25rem; background: #fef2f2;
}
.triagem-recording.hidden { display: none; }
.triagem-recording-dot {
    width: 9px; height: 9px; border-radius: 9999px; background: #ef4444; flex-shrink: 0;
    animation: triagem-rec 1.2s ease-in-out infinite;
}
@keyframes triagem-rec { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }

/* Fio de progresso enquanto a IA responde */
.triagem-shell.is-loading { position: relative; }
.triagem-shell.is-loading::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 2px;
    background: linear-gradient(90deg, transparent, #00c4b5, #F7B731, transparent);
    background-size: 50% 100%; background-repeat: no-repeat;
    animation: triagem-sweep 1.1s linear infinite;
}
@keyframes triagem-sweep {
    0% { background-position: -50% 0; }
    100% { background-position: 150% 0; }
}

/* Saídas do assistente. Não usa a classe `hidden` do Tailwind de
   propósito: o CDN injeta o utilitário em outro <style> e a ordem da
   cascata não é garantida — aqui quem manda são as classes de estado do
   #triagem-root (`is-chatting`, `is-manual`). */
.triagem-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.25rem; }
.triagem-link {
    display: inline-flex; align-items: center; gap: 0.375rem;
    padding: 0.375rem 0.875rem; border-radius: 9999px;
    background: transparent; border: 1px solid transparent; color: #64748b;
    font-size: 0.8125rem; font-weight: 600; line-height: 1.4;
    cursor: pointer; transition: all 0.2s;
}
.triagem-link:hover { background: #ffffff; border-color: #e2e8f0; color: #0f172a; }
.triagem-link:disabled { opacity: 0.4; cursor: not-allowed; }

/* "Limpar" só faz sentido com conversa em andamento; "falar com o
   assistente" só quando o usuário escolheu o formulário. */
#triagem-clear, #triagem-assistant { display: none; }
#triagem-root.is-chatting:not(.is-manual) #triagem-clear { display: inline-flex; }
#triagem-root.is-manual #triagem-manual { display: none; }
#triagem-root.is-manual #triagem-assistant { display: inline-flex; }

/* Formulário escolhido na mão: o chat sai de cena para não deixar dois
   lugares pedindo a mesma coisa. */
#triagem-root.is-manual #triagem-shell,
#triagem-root.is-manual #triagem-chips { display: none; }

/* Atalhos de busca: um bloco parado abaixo de um divisor, que existe
   para dar exemplo do que pedir. Já foi uma esteira animada, mas
   movimento sob a barra de busca disputava atenção com ela e cortava os
   atalhos das pontas no meio da palavra. */
.triagem-chips {
    display: flex; flex-direction: column; gap: 0.75rem; width: 100%;
    padding-top: 1.25rem; border-top: 1px solid #e8eef2; text-align: left;
}
/* Vence o `hidden` do Tailwind, que o CDN injeta em outro <style> e sem
   ordem garantida na cascata. */
.triagem-chips.hidden { display: none; }
.triagem-chips-title {
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-size: 0.6875rem; font-weight: 800; letter-spacing: 0.15em;
    text-transform: uppercase; color: #94a3b8;
}
.triagem-chips-list { display: flex; flex-wrap: wrap; gap: 0.5rem; }

.triagem-chip {
    display: inline-flex; align-items: center; gap: 0.4375rem; white-space: nowrap;
    padding: 0.4375rem 0.8125rem; border-radius: 9999px;
    background: #ffffff; border: 1px solid #e2e8f0; color: #475569;
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-size: 0.8125rem; font-weight: 600; line-height: 1.4;
    cursor: pointer; transition: all 0.2s;
}
.triagem-chip svg { color: #94a3b8; flex: none; transition: color 0.2s; }
.triagem-chip:hover { border-color: #1bafbf; color: #106a73; }
.triagem-chip:hover svg { color: #1bafbf; }
.triagem-row { display: flex; animation: fadeIn 0.3s ease-out forwards; }
.triagem-row-user { justify-content: flex-end; }
.triagem-row-ai { justify-content: flex-start; }
.triagem-bubble {
    max-width: 85%; padding: 0.625rem 0.875rem; border-radius: 1rem;
    font-size: 0.9375rem; line-height: 1.5; white-space: pre-wrap;
}
.triagem-bubble-user { background: #00c4b5; color: #ffffff; border-bottom-right-radius: 0.25rem; }
.triagem-bubble-ai { background: #f1f5f9; color: #334155; border-bottom-left-radius: 0.25rem; }
/* Foto anexada: a bolha vira a própria imagem, com a legenda embaixo
   só quando sobrou texto para dizer. */
.triagem-bubble-media { padding: 0.25rem; }
.triagem-thumbs { display: flex; flex-wrap: wrap; gap: 0.25rem; }
.triagem-thumb {
    width: 8.5rem; height: 8.5rem; object-fit: cover;
    border-radius: 0.75rem; display: block; background: #e2e8f0;
}
.triagem-bubble-media .triagem-caption { display: block; padding: 0.375rem 0.625rem 0.25rem; }
/* Bolha do consumidor enquanto o áudio dele vira texto. */
.triagem-bubble-pending { display: flex; align-items: center; min-height: 1.5rem; }
.triagem-bubble-pending .triagem-typing span { background: rgba(255, 255, 255, 0.9); }

/* "Pensando": pontinhos + frase que troca, para a espera não ser vazia */
.triagem-thinking { display: flex; align-items: center; gap: 0.5rem; }
.triagem-typing { display: flex; align-items: center; gap: 0.25rem; flex-shrink: 0; }
.triagem-typing span {
    width: 6px; height: 6px; border-radius: 9999px; background: #00c4b5;
    animation: triagem-bounce 1.2s infinite ease-in-out;
}
.triagem-typing span:nth-child(2) { animation-delay: 0.15s; }
.triagem-typing span:nth-child(3) { animation-delay: 0.3s; }
@keyframes triagem-bounce {
    0%, 70%, 100% { opacity: 0.3; transform: translateY(0); }
    35% { opacity: 1; transform: translateY(-3px); }
}
.triagem-thinking-text {
    font-size: 0.875rem; color: #64748b;
    transition: opacity 0.25s ease, transform 0.25s ease;
}
.triagem-thinking-text.is-swapping { opacity: 0; transform: translateY(4px); }
.triagem-quick-wrap { display: flex; flex-wrap: wrap; gap: 0.5rem; padding-top: 0.125rem; }
.triagem-quick {
    padding: 0.3125rem 0.75rem; border-radius: 9999px;
    background: #ffffff; border: 1px solid #00c4b5; color: #009b8f;
    font-size: 0.8125rem; font-weight: 600; cursor: pointer; transition: all 0.2s;
}
.triagem-quick:hover { background: #e0fcf9; }
/* Botão que fecha um passo (o "Pronto" da escolha de datas): cheio, para
   não competir de igual para igual com as opções em volta. */
.triagem-quick.is-primary { background: #00c4b5; border-color: #00c4b5; color: #ffffff; }
.triagem-quick.is-primary:hover { background: #009b8f; }
.triagem-quick:disabled { opacity: 0.5; cursor: not-allowed; }

/* Recibo: a última tela antes do código de verificação. O formulário
   não abre mais nesse caminho, então tudo o que vai no envio precisa
   estar legível aqui — inclusive a escolha de mandar a conversa. */
.triagem-receipt {
    display: flex; flex-direction: column; gap: 0.4375rem;
    padding: 0.875rem 1rem; border-radius: 1rem;
    background: #ffffff; border: 1px solid #e2e8f0;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
.triagem-receipt-title {
    font-size: 0.6875rem; font-weight: 800; letter-spacing: 0.08em;
    text-transform: uppercase; color: #0f172a;
}
.triagem-receipt-row {
    display: flex; gap: 0.75rem; align-items: baseline;
    font-size: 0.8125rem; line-height: 1.45;
}
.triagem-receipt-label { flex: none; width: 5.5rem; color: #94a3b8; font-weight: 600; }
.triagem-receipt-value { flex: 1; min-width: 0; color: #0f172a; font-weight: 600; }
.triagem-receipt-share {
    display: flex; gap: 0.5rem; align-items: flex-start; cursor: pointer;
    margin-top: 0.125rem; padding-top: 0.625rem; border-top: 1px solid #f1f5f9;
    font-size: 0.75rem; line-height: 1.4; color: #64748b;
}
.triagem-receipt-share input {
    flex: none; margin-top: 0.125rem; width: 0.875rem; height: 0.875rem;
    accent-color: #00c4b5; cursor: pointer;
}

/* Confirmação: o botão manda o código e o aceite mora embaixo dele. */
.triagem-confirm { flex-direction: column; align-items: stretch; gap: 0.375rem; }
.triagem-confirm .triagem-quick.is-primary { padding: 0.625rem 1rem; font-size: 0.875rem; }
.triagem-confirm-legal { font-size: 0.6875rem; line-height: 1.4; color: #94a3b8; text-align: center; }
.triagem-confirm-legal a { color: #64748b; font-weight: 700; text-decoration: underline; }
.triagem-confirm-fix {
    align-self: center; border-color: transparent; color: #64748b;
    background: transparent; font-size: 0.75rem;
}
.triagem-confirm-fix:hover { background: #f1f5f9; }

/* Escolha de datas dentro da conversa: mesma dupla data + período do
   formulário, só que na bolha, para quem está conversando não precisar
   descer até o cartão para responder "quando". */
.triagem-datepick {
    display: flex; flex-direction: column; gap: 0.5rem;
    padding: 0.625rem; border-radius: 1rem;
    background: #ffffff; border: 1px solid #e2e8f0;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
.triagem-datepick-row { display: flex; gap: 0.5rem; }
.triagem-datepick-row input, .triagem-datepick-row select {
    flex: 1 1 0; min-width: 0; height: 2.25rem;
    padding: 0 0.625rem; border-radius: 0.75rem;
    border: 1px solid #e2e8f0; background: #ffffff;
    font-size: 0.8125rem; font-weight: 500; color: #334155;
}
.triagem-datepick-row input:focus, .triagem-datepick-row select:focus {
    outline: none; border-color: #00c4b5;
}
.triagem-datepick-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }

/* ---------------------------------------------------------------
   Progresso do pedido (#triagem-progress)

   Fica acima da conversa, dentro do mesmo cartão, e nasce escondido:
   só entra junto com a conversa (`.is-chat` no shell). É uma barra e
   uma legenda porque a graça é sentir o pedido andando — quanto falta
   exatamente é coisa que nem o roteiro sabe de antemão, já que passos
   são pulados conforme as respostas.
   --------------------------------------------------------------- */
#triagem-progress { display: none; }
/* A borda não é enfeite: a conversa rola logo abaixo, e sem uma linha
   separando parece que o texto passa por baixo da barra. */
.triagem-shell.is-chat #triagem-progress {
    display: flex; flex-direction: column; gap: 0.4375rem;
    padding: 0.875rem 1rem 0.75rem; border-bottom: 1px solid #f1f5f9;
}
.triagem-progress-label {
    font-size: 0.6875rem; font-weight: 800; letter-spacing: 0.08em;
    text-transform: uppercase; color: #009b8f;
}
.triagem-progress-track {
    height: 5px; border-radius: 9999px; background: #eef2f6; overflow: hidden;
}
.triagem-progress-fill {
    display: block; height: 100%; width: 0; border-radius: 9999px;
    background: linear-gradient(90deg, #00c4b5, #1bafbf);
    transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
@media (prefers-reduced-motion: reduce) {
    .triagem-progress-fill { transition: none; }
}

/* ---------------------------------------------------------------
   Conversa em tela cheia no celular (#triagem-root.is-sheet)

   No fluxo da página o teclado cobria justamente o campo de digitar,
   e a conversa ficava espremida numa janelinha. Enquanto a conversa
   corre — e antes de o pedido abrir — o bloco vira uma folha do
   tamanho da tela: progresso em cima, mensagens rolando no meio e o
   compositor colado embaixo.

   A altura não pode ser `100dvh`: no iOS o teclado encolhe só o
   viewport visível e o layout continua do tamanho da tela inteira.
   Quem mede de verdade é o `visualViewport`, e é dele que saem o
   `--triagem-vh` e o `--triagem-top` (ver home-triagem.js).
   --------------------------------------------------------------- */
html.is-chat-sheet, html.is-chat-sheet body { overflow: hidden; }

@media (max-width: 639px) {
    /* O cabeçalho do site sai junto com a logo do hero: com o teclado
       aberto ele custa a altura de duas mensagens, e a conversa já
       carrega as próprias saídas no topo da folha. */
    html.is-chat-sheet header { display: none; }
    #triagem-root.is-sheet {
        position: fixed; left: 0; right: 0; top: 0; z-index: 60;
        height: var(--triagem-vh, 100dvh);
        transform: translateY(var(--triagem-top, 0px));
        max-width: none; gap: 0;
    }
    #triagem-root.is-sheet .triagem-shell.is-chat {
        flex: 1 1 auto; min-height: 0;
        display: flex; flex-direction: column;
        border: none; border-radius: 0; box-shadow: none;
    }
    #triagem-root.is-sheet #triagem-progress,
    #triagem-root.is-sheet .triagem-bar,
    #triagem-root.is-sheet .triagem-recording,
    #triagem-root.is-sheet .triagem-attachments { flex: none; }
    /* Barra de progresso mais rasa: com o teclado aberto sobra pouca
       altura, e ela precisa marcar presença sem tomar a tela. */
    #triagem-root.is-sheet .triagem-shell.is-chat #triagem-progress {
        padding: 0.5rem 1rem 0.4375rem; gap: 0.3125rem;
    }
    /* A conversa é a única parte elástica: é ela que rola. */
    #triagem-root.is-sheet .triagem-shell.is-chat .triagem-chat {
        flex: 1 1 auto; min-height: 0; max-height: none;
    }
    /* Compositor um pouco mais alto que no cartão: encostado no
       teclado, ele é a borda de baixo da tela. */
    #triagem-root.is-sheet .triagem-shell.is-chat .triagem-bar {
        padding: 0.5rem 0.625rem calc(0.5rem + env(safe-area-inset-bottom));
    }
    /* As saídas sobem para o topo: embaixo elas ficariam entre o campo
       e o teclado, e some-las no foco deslocaria o layout bem no meio
       do toque em enviar — o dedo levantaria fora do botão. Numa linha
       só, porque cada linha aqui é altura tirada da conversa. */
    #triagem-root.is-sheet #triagem-actions {
        order: -1; flex: none; flex-wrap: nowrap;
        padding: 0.25rem 0.5rem; background: #ffffff;
    }
    #triagem-root.is-sheet .triagem-link {
        padding: 0.375rem 0.5rem; font-size: 0.75rem; white-space: nowrap;
    }

    /* O Safari do iPhone dá zoom em qualquer campo com menos de 16px, e
       a revisão é a continuação da conversa: a tela não pode pular
       quando a pessoa toca aqui para conferir os dados. */
    #home-pedido-root input:not([type="checkbox"]):not([type="radio"]),
    #home-pedido-root textarea,
    #home-pedido-root select { font-size: 16px; }
}

/* ---------------------------------------------------------------
   Formulário de cotação da home (#home-pedido-root)

   O pedido pode chegar por dois caminhos, e o cartão muda de tom em
   cada um — as classes são ligadas pelo home-triagem.js:
     `is-from-triage` → veio da conversa; o cabeçalho fala como o
       assistente e o que a IA preencheu vira resumo.
     `is-summary`     → resumo fechado; "Editar" devolve os campos.
   Sem classe é o formulário de sempre, que é o que as outras páginas
   renderizam. Como em `.triagem-*`, o estado mora aqui e não na classe
   `hidden` do Tailwind: o CDN injeta os utilitários em outro <style> e
   a ordem da cascata não é garantida.
   --------------------------------------------------------------- */

/* Linha que liga o chat ao cartão do pedido */
.pedido-bridge { display: none; }
.pedido-bridge.is-visible {
    display: flex; flex-direction: column; align-items: center;
    margin: -1rem 0 -1.25rem;
}
.pedido-bridge-line {
    width: 2px; height: 1.75rem;
    background: repeating-linear-gradient(to bottom, #cbd5e1 0 4px, transparent 4px 9px);
}
.pedido-bridge-dot {
    width: 0.5rem; height: 0.5rem; border-radius: 9999px;
    background: #00c4b5; box-shadow: 0 0 0 4px rgba(0, 196, 181, 0.15);
}

.pedido-head {
    display: flex; align-items: center; gap: 0.625rem;
    padding: 0.75rem 1rem; background: #00c4b5; color: #ffffff;
}
.pedido-head-avatar {
    width: 1.75rem; height: 1.75rem; border-radius: 9999px; flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    background: rgba(255, 255, 255, 0.2);
}
.pedido-head-title { font-size: 0.875rem; font-weight: 800; line-height: 1.3; }
.pedido-head-sub {
    margin-top: 0.1875rem; font-size: 0.6875rem; font-weight: 500;
    line-height: 1.4; color: rgba(255, 255, 255, 0.88);
}
.pedido-head-step {
    margin-left: auto; flex-shrink: 0;
    padding: 0.1875rem 0.5rem; border-radius: 9999px;
    background: rgba(255, 255, 255, 0.18);
    font-size: 0.5625rem; font-weight: 800;
    text-transform: uppercase; letter-spacing: 0.08em;
}
@media (max-width: 480px) { .pedido-head-step { display: none; } }

.pedido-only-triage { display: none; }
#home-pedido-root.is-from-triage .pedido-only-manual { display: none; }
#home-pedido-root.is-from-triage .pedido-only-triage { display: inline; }

/* Três blocos com papéis diferentes: o que veio da conversa, o que só o
   consumidor responde e o que é opcional. O primeiro não leva régua. */
.pedido-section + .pedido-section { padding-top: 0.75rem; border-top: 1px solid #f1f5f9; }
.pedido-section-head {
    display: flex; align-items: center; justify-content: space-between;
    gap: 0.5rem; margin-bottom: 0.5rem;
}
.pedido-section-title {
    font-size: 0.6875rem; font-weight: 800; color: #18181b;
    text-transform: uppercase; letter-spacing: 0.08em;
}
.pedido-section-optional {
    font-size: 0.5625rem; font-weight: 600; color: #94a3b8;
    text-transform: none; letter-spacing: normal;
}
.pedido-section-hint {
    margin: -0.25rem 0 0.625rem; font-size: 0.6875rem;
    font-weight: 500; color: #64748b;
}
.pedido-section-action {
    display: none; align-items: center; gap: 0.25rem;
    font-size: 0.6875rem; font-weight: 700; color: #158d99;
    cursor: pointer; transition: color 0.2s;
}
.pedido-section-action:hover { color: #0e5f67; }
#home-pedido-root.is-from-triage.is-summary .pedido-section-action { display: inline-flex; }

/* Resumo: a leitura de "foi isso que você me contou", no lugar de dois
   campos já preenchidos que o usuário não pediu para preencher. */
.pedido-summary { display: none; }
#home-pedido-root.is-from-triage.is-summary .pedido-summary {
    display: block;
    padding: 0.75rem 0.875rem; border-radius: 1rem;
    border: 1px solid rgba(0, 196, 181, 0.28); background: #f0fdfa;
}
#home-pedido-root.is-from-triage.is-summary #pedido-fields-chat { display: none; }
.pedido-summary-role {
    display: flex; align-items: center; gap: 0.375rem;
    font-size: 0.875rem; font-weight: 800; color: #0f172a;
    text-transform: capitalize;
}
.pedido-summary-desc {
    margin-top: 0.25rem; font-size: 0.8125rem; line-height: 1.5;
    color: #475569; white-space: pre-wrap;
}
.pedido-summary-done {
    display: none; align-items: center; gap: 0.375rem;
    padding: 0.375rem 0.875rem; border-radius: 9999px;
    border: 1px solid #00c4b5; background: #ffffff; color: #009b8f;
    font-size: 0.75rem; font-weight: 700; cursor: pointer; transition: background 0.2s;
}
.pedido-summary-done:hover { background: #e0fcf9; }
#home-pedido-root.is-from-triage:not(.is-summary) .pedido-summary-done { display: inline-flex; }
