/* ==========================================================================
   X8 ORB no /consultor-ia — o CARD do painel (main, raio 32) fica preto com a
   orb de fundo; o RESTO do shell (sidebar, topbar, fundo claro) fica normal.
   Só ativa com body.x8-orb-consultor (o x8-orb-consultor.js liga/desliga na
   rota). Estático no <head> pra não piscar (mesma lição do hero do dashboard).
   Camadas DENTRO do card: orb absolute z0 · conteúdo (.ob-consultor-page) z1.
   ========================================================================== */

/* ---- TOKENS DO VIDRO: a receita ÚNICA do material translúcido do modo orb.
   Input e cards de sugestão consomem daqui, então calibrar é mexer em UMA
   linha e os dois seguem juntos (o "padrão" pedido). Perfil atual: bem
   transparente + blur 40px (desfoca forte a nuvem atrás) ⇒ corpo escuro,
   por isso o TEXTO é claro. */
body.x8-orb-consultor {
  --x8-glass-bg:
    radial-gradient(80% 60% at 12% 0%, rgba(255, 255, 255, 0.10) 0%, rgba(255, 255, 255, 0) 60%),
    linear-gradient(rgba(255, 255, 255, 0.10) 0%, rgba(255, 255, 255, 0.06) 50%, rgba(255, 255, 255, 0.04) 100%);
  --x8-glass-border: 1px solid rgba(255, 255, 255, 0.26);
  --x8-glass-blur: blur(40px) saturate(1.5);
  --x8-glass-shadow: 0 16px 40px rgba(0, 0, 0, 0.35), 0 2px 8px rgba(0, 0, 0, 0.22);
  --x8-glass-text: #ececf2;
  --x8-glass-text-dim: #a9a9b6;
  /* raio do sistema (Mini Bento 22-24px; o modal do Histórico usa 20, o card
     do painel 32) — o componente vinha com 12px, quadrado demais pro padrão */
  --x8-glass-radius: 22px;
}

/* o card do painel vira o palco: preto, relativo, recorta a orb no raio 32.
   --via-bg: os fades decorativos do componente (ex.: a faixa acima do input)
   fazem gradiente pra var(--via-bg) = "a cor do fundo" — redefinir o token
   aqui faz TODOS eles fundirem pro preto, fiel ao propósito do design. */
body.x8-orb-consultor .via-shell-content main {
  position: relative;
  background: #000 !important;
  --via-bg: #000000;
}
body.x8-orb-consultor .x8-orb-bg {
  position: absolute; inset: 0; z-index: 0;
  background: #000;
  border-radius: inherit;
  overflow: hidden;
  pointer-events: none;   /* fundo decorativo: nunca rouba clique do painel */
}
body.x8-orb-consultor .x8-orb-bg canvas {
  width: 100%; height: 100%; display: block;
}
body.x8-orb-consultor .ob-consultor-page {
  position: relative; z-index: 1;
  background: transparent !important;
}
body.x8-orb-consultor .ob-consultor-page > main { background: transparent !important; }

/* barra do topo do painel (Nova conversa) → vidro escuro */
body.x8-orb-consultor .ob-consultor-header {
  background: rgba(14, 15, 18, 0.55) !important;
  border: 1px solid rgba(255, 255, 255, 0.07);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-radius: var(--x8-glass-radius) !important;
}
body.x8-orb-consultor .ob-consultor-header,
body.x8-orb-consultor .ob-consultor-header * { color: #e8e8ee !important; }
body.x8-orb-consultor .ob-consultor-header svg { color: #c9c9d4 !important; }

/* botões superiores → glass transparente.
   ⚠ armadilhas vividas aqui: (1) o componente injeta <style> com !important e
   pinta o glass claro num ::before — precisa neutralizar o pseudo também;
   (2) cada botão vive num <span> wrapper → :first-of-type pega TODOS (por isso
   a distinção é por CLASSE: --secondary = glass, --primary = branco). */
html body.x8-orb-consultor .ob-consultor-header button.via-btn--secondary.via-btn--secondary,
html body.x8-orb-consultor .ob-consultor-header > div > .via-tooltip-wrap > button:not(.via-btn--primary) {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
  color: #e8e8ee !important;
  box-shadow: none !important;
}
html body.x8-orb-consultor .ob-consultor-header button.via-btn--secondary.via-btn--secondary::before {
  display: none !important;   /* o brilho claro radial do componente */
}
html body.x8-orb-consultor .ob-consultor-header button.via-btn--secondary.via-btn--secondary:hover,
html body.x8-orb-consultor .ob-consultor-header > div > .via-tooltip-wrap > button:not(.via-btn--primary):hover {
  background: rgba(255, 255, 255, 0.15) !important;
  border-color: rgba(255, 255, 255, 0.3) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
}
/* …o "+ Nova" (via-btn--primary): branco sólido, texto escuro */
html body.x8-orb-consultor .ob-consultor-header button.via-btn--primary.via-btn--primary {
  background: #ffffff !important;
  border-color: #ffffff !important;
  color: #0a1f3b !important;
}
html body.x8-orb-consultor .ob-consultor-header button.via-btn--primary.via-btn--primary * {
  color: #0a1f3b !important;
}

/* ---- painel inicial (empty state) ----
   TIPOGRAFIA: Universal Sans é a fonte da parte de IA — Display no título
   grande, Text no resto (as duas cobrem todos os acentos PT-BR: verificado
   por measureText no browser antes de aplicar). */
body.x8-orb-consultor .ob-consultor-page,
body.x8-orb-consultor .ob-consultor-page input,
body.x8-orb-consultor .ob-consultor-page textarea,
body.x8-orb-consultor .ob-consultor-page button {
  font-family: var(--x8-font-text) !important;
}

/* logo X8 → claro, tamanho natural (o título grande é o herói agora) */
body.x8-orb-consultor .ob-consultor-empty .x8-lockup__path,
body.x8-orb-consultor .ob-consultor-empty .vla-logo-path {
  fill: #e8e8ee !important;
  filter: drop-shadow(0 2px 10px rgba(0, 0, 0, 0.6));
}
/* sem imagem de logo no welcome — só o texto (pedido 2026-08-02) */
body.x8-orb-consultor .ob-consultor-empty .vla-logo-wrapper { display: none !important; }

/* frase grande — 64px no desktop; o clamp evita quebrar em tela estreita */
body.x8-orb-consultor .ob-consultor-empty h2,
body.x8-orb-consultor .ob-consultor-empty h2 span {
  font-family: var(--x8-font-display) !important;
  color: #f2f2f7 !important;
  font-size: clamp(30px, 5.2vw, 64px) !important;
  line-height: 1.06 !important;
  font-weight: 400 !important;      /* Universal Sans só tem 400 e 550 */
  letter-spacing: -0.02em !important;
  text-shadow: 0 2px 40px rgba(0, 0, 0, 0.85), 0 1px 6px rgba(0, 0, 0, 0.6);
}
body.x8-orb-consultor .ob-consultor-empty h2 { margin-bottom: 14px !important; }

/* subtítulo — 16px */
body.x8-orb-consultor .ob-consultor-empty p {
  font-family: var(--x8-font-text) !important;
  color: #b9b9c4 !important;
  font-size: 16px !important;
  line-height: 1.5 !important;
  text-shadow: 0 1px 16px rgba(0, 0, 0, 0.85);
}

/* caixa de mensagem → o PADRÃO de glass do sistema (copiado do modal do
   Histórico, medido: blur(24px) saturate(1.6) + borda fina clara + sombra
   suave). ⚠ o BRANCO que insistia em aparecer era o PAI (div sem classe) com
   linear-gradient branco 0.96 + inset — o cartão claro do modo light. */
html body.x8-orb-consultor .ob-consultor-empty div:has(> .ob-consultor-input-box) {
  background: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
}
/* caixa de mensagem = o VIDRO padrão (tokens acima) */
html body.x8-orb-consultor .ob-consultor-input-box {
  background: var(--x8-glass-bg) !important;
  border: var(--x8-glass-border) !important;
  backdrop-filter: var(--x8-glass-blur) !important;
  -webkit-backdrop-filter: var(--x8-glass-blur) !important;
  box-shadow: var(--x8-glass-shadow) !important;
  border-radius: var(--x8-glass-radius) !important;
}
/* microfone + enviar → brancos (ícone escuro) */
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Gravar áudio"],
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Enviar mensagem"] {
  background: #ffffff !important;
  border-color: #ffffff !important;
  color: #0a1f3b !important;
}
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Gravar áudio"] svg,
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Enviar mensagem"] svg {
  color: #0a1f3b !important;
}
/* corpo do vidro é ESCURO (transparente sobre o card preto) → texto claro */
body.x8-orb-consultor .ob-consultor-input-box textarea {
  background: transparent !important;
  color: var(--x8-glass-text) !important;
  caret-color: #ff9040;
}
body.x8-orb-consultor .ob-consultor-input-box textarea::placeholder { color: var(--x8-glass-text-dim) !important; }
body.x8-orb-consultor .ob-consultor-input-hint { color: var(--x8-glass-text-dim) !important; }
/* mic/enviar brancos sobre corpo claro: borda e sombra sutis pra destacar */
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Gravar áudio"],
html body.x8-orb-consultor .ob-consultor-input-box button[aria-label="Enviar mensagem"] {
  border: 1px solid rgba(10, 31, 59, 0.10) !important;
  box-shadow: 0 2px 8px rgba(10, 31, 59, 0.12) !important;
}

/* chips "explorar por área" e demais botões do empty → vidro */
body.x8-orb-consultor .ob-consultor-empty button {
  background: rgba(20, 21, 26, 0.55) !important;
  border-color: rgba(255, 255, 255, 0.09) !important;
  color: #d6d6de !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
body.x8-orb-consultor .ob-consultor-empty button:hover {
  border-color: rgba(255, 144, 64, 0.55) !important;
  color: #ffb27a !important;
}
body.x8-orb-consultor .ob-consultor-empty button svg { color: currentColor !important; }
/* rótulo "explorar por área" */
body.x8-orb-consultor .ob-consultor-empty > div > p { color: #6b6b76 !important; }

/* ==========================================================================
   CONVERSA, CARDS E PAINÉIS INTERNOS — o modo escuro completo da rota.
   Doutrina de materiais (a família construída aqui):
   · VIDRO CLARO (o padrão do input/modal): cards de sugestão/recomendação —
     corpo claro translúcido, TEXTO NAVY.
   · VIDRO ESCURO leve: bolhas de mensagem, cards da timeline/roadmap —
     TEXTO CLARO.
   · BOTÕES: --primary = branco sólido (o "+ Nova") · --secondary = glass
     transparente (o "Planejamento estratégico"), na página INTEIRA.
   ========================================================================== */

/* área de mensagens */
body.x8-orb-consultor .ob-consultor-messages-area,
body.x8-orb-consultor .ob-consultor-scroll { background: transparent !important; }
/* FIM DA CONVERSA (revisto 2026-08-02b — o "texto por trás do input" foi
   TESTADO E REJEITADO): o input fica no FLUXO, o texto acaba um pouco acima
   dele com o FADE nativo do bundle vivo (retintado preto pela regra global de
   fades). O pedido original era só ENCURTAR o vão texto→input: o wrapper
   interno do scroll tinha 32px de padding → 8px. */
html body.x8-orb-consultor .ob-consultor-input-wrap {
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.55) 34%, rgba(0, 0, 0, 0.82) 100%) !important;
  box-shadow: none !important;
}
body.x8-orb-consultor .ob-consultor-scroll > div:has(> .ob-consultor-messages-area) {
  padding-bottom: 8px !important;
}
/* composer com corpo (pedido nº4 mantido) */
body.x8-orb-consultor .ob-consultor-input-box {
  background-color: rgba(10, 10, 13, 0.45) !important;
}
html body.x8-orb-consultor .ob-consultor-input-wrap::before,
html body.x8-orb-consultor .ob-consultor-input-wrap::after,
html body.x8-orb-consultor .ob-consultor-scroll::before,
html body.x8-orb-consultor .ob-consultor-scroll::after,
html body.x8-orb-consultor .ob-consultor-messages-area::before,
html body.x8-orb-consultor .ob-consultor-messages-area::after {
  display: none !important; content: none !important;
}
/* QUALQUER fade com branco em estilo inline dentro do painel → fade preto
   (pega todos os formatos: rgba(255,255,255,x), rgb(255,255,255), to top…) */
body.x8-orb-consultor .ob-consultor-page [style*="gradient"][style*="255, 255, 255"] {
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%) !important;
}

/* bolha do assistente + prosa → vidro escuro leve, texto claro.
   O markdown renderiza DIRETO na bolha (fora da .prose) com cor inline via
   var(--via-text-primary, #0A1F3B) → redefinir os TOKENS de texto no escopo
   (lição C4: resolver na fonte) + cobertura * para o resto. */
body.x8-orb-consultor .ob-consultor-assistant-bubble,
body.x8-orb-consultor .ob-consultor-prose {
  --via-text-primary: #f2f2f7;
  --via-text-secondary: #c9c9d4;
  --via-text-muted: #9b9ba6;
  --via-navy: #f2f2f7;
}
/* resposta SEM container (Grok: texto direto no fundo, arejado) */
body.x8-orb-consultor .ob-consultor-assistant-bubble {
  background: transparent !important;
  border: none !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: none !important;
  padding: 0 !important;
  border-radius: 0 !important;
  color: #e8e8ee !important;
}
/* avatar/logo X8 da linha de resposta → fora (só o texto). As linhas são
   taggeadas pelo x8-chat-fx (o DOM não tem classes): o filho da linha que NÃO
   contém a bolha é a coluna do avatar. */
body.x8-orb-consultor .x8-row-ia > div:not(:has(.ob-consultor-assistant-bubble)) { display: none !important; }
/* mensagem do usuário: ELA ganha o container (bolha só do usuário, Grok) */
body.x8-orb-consultor .x8-row-user { justify-content: flex-end !important; }
/* Grok verbatim: rounded-3xl (24) + rounded-br-lg (8), bg surface-l1 dark
   (neutral-950) + border white/8%, max-w 90% */
body.x8-orb-consultor .x8-row-user > div:first-child {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-radius: 24px 24px 8px 24px !important;
  padding: 8px 16px !important;
  max-width: 90%;
}
body.x8-orb-consultor .ob-consultor-assistant-bubble * { color: #e8e8ee !important; }
body.x8-orb-consultor .ob-consultor-assistant-bubble a { color: #a5b4fc !important; }
body.x8-orb-consultor .ob-consultor-assistant-bubble code,
body.x8-orb-consultor .ob-consultor-assistant-bubble pre,
body.x8-orb-consultor .ob-consultor-assistant-bubble pre * {
  background: rgba(255, 255, 255, 0.08) !important;
  color: #f2f2f7 !important;
}
/* (o vidro agora é escuro: cards dentro da bolha seguem o texto claro geral —
   nada de exceção navy aqui) */
/* prose INTEIRA clara (o markdown traz headings/strong/spans com navy do
   design system e até color inline — o `*` com !important cobre tudo; links e
   code re-especializam por especificidade maior logo abaixo) */
body.x8-orb-consultor .ob-consultor-prose,
body.x8-orb-consultor .ob-consultor-prose * { color: #e8e8ee !important; }
body.x8-orb-consultor .ob-consultor-prose a { color: #a5b4fc !important; }
body.x8-orb-consultor .ob-consultor-prose code,
body.x8-orb-consultor .ob-consultor-prose pre,
body.x8-orb-consultor .ob-consultor-prose pre * {
  background: rgba(255, 255, 255, 0.08) !important;
  color: #f2f2f7 !important;
}
/* SEM linhas de separação no markdown (pedido 2026-08-02): o --- vira só
   respiro vertical, nunca linha pintada */
body.x8-orb-consultor .ob-consultor-prose hr,
body.x8-orb-consultor .ob-consultor-assistant-bubble hr {
  border: none !important;
  background: none !important;
  height: 8px !important;
  margin: 4px 0 !important;
}
body.x8-orb-consultor .ob-typing-word, body.x8-orb-consultor .ob-typing-dot { color: #c9c9d4 !important; }

/* rótulos/eyebrows/títulos soltos do painel → claros */
body.x8-orb-consultor .ob-consultor-header-eyebrow,
body.x8-orb-consultor .ob-consultor-header-title,
body.x8-orb-consultor .ob-consultor-desktop-insights-label,
body.x8-orb-consultor .ob-history-label,
body.x8-orb-consultor .ob-plan-label,
body.x8-orb-consultor .ob-new-thread-label { color: #e8e8ee !important; }

/* CARDS DE SUGESTÃO/RECOMENDAÇÃO = o MESMO vidro do input (tokens) */
html body.x8-orb-consultor .ob-consultor-card,
html body.x8-orb-consultor .ob-consultor-glass-card,
html body.x8-orb-consultor .ob-consultor-card-cover {
  background: var(--x8-glass-bg) !important;
  border: var(--x8-glass-border) !important;
  backdrop-filter: var(--x8-glass-blur) !important;
  -webkit-backdrop-filter: var(--x8-glass-blur) !important;
  box-shadow: var(--x8-glass-shadow) !important;
  color: var(--x8-glass-text) !important;
  border-radius: var(--x8-glass-radius) !important;
}
html body.x8-orb-consultor .ob-consultor-card *,
html body.x8-orb-consultor .ob-consultor-glass-card * { color: var(--x8-glass-text) !important; }
/* defensiva: cards pintados de branco POR ESTILO INLINE dentro da conversa */
body.x8-orb-consultor .ob-consultor-scroll [style*="background: rgb(255, 255, 255)"],
body.x8-orb-consultor .ob-consultor-scroll [style*="background-color: rgb(255, 255, 255)"],
body.x8-orb-consultor .ob-consultor-scroll [style*="background: white"] {
  background: var(--x8-glass-bg) !important;
  backdrop-filter: var(--x8-glass-blur) !important;
  -webkit-backdrop-filter: var(--x8-glass-blur) !important;
  border-color: rgba(255, 255, 255, 0.26) !important;
}

/* roadmap (plano/fases) → vidro escuro leve, texto claro */
body.x8-orb-consultor .ob-roadmap-item {
  background: rgba(255, 255, 255, 0.05) !important;
  border: 1px solid rgba(255, 255, 255, 0.10) !important;
  color: #e8e8ee !important;
}
body.x8-orb-consultor .ob-roadmap-item * { color: #d6d6de; }
body.x8-orb-consultor .ob-roadmap-handle { color: #7a7a86 !important; }
html body.x8-orb-consultor .ob-roadmap-regen-btn,
html body.x8-orb-consultor .ob-roadmap-partial-regen-btn,
html body.x8-orb-consultor .ob-roadmap-fasenav-btn {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  color: #e8e8ee !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

/* cards da timeline/recomendações → vidro escuro leve */
body.x8-orb-consultor .ob-consultor-timeline-card {
  background: rgba(255, 255, 255, 0.05) !important;
  border: 1px solid rgba(255, 255, 255, 0.10) !important;
  color: #e8e8ee !important;
}
body.x8-orb-consultor .ob-consultor-timeline-card * { color: #c9c9d4; }

/* BOTÕES na página INTEIRA (mesma regra do header, escopo ampliado):
   --primary = branco sólido · --secondary = glass transparente */
html body.x8-orb-consultor .ob-consultor-page button.via-btn--secondary.via-btn--secondary {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
  color: #e8e8ee !important;
  box-shadow: none !important;
}
html body.x8-orb-consultor .ob-consultor-page button.via-btn--secondary.via-btn--secondary::before { display: none !important; }
html body.x8-orb-consultor .ob-consultor-page button.via-btn--secondary.via-btn--secondary:hover {
  background: rgba(255, 255, 255, 0.15) !important;
  border-color: rgba(255, 255, 255, 0.3) !important;
}
html body.x8-orb-consultor .ob-consultor-page button.via-btn--primary.via-btn--primary {
  background: #ffffff !important;
  border-color: #ffffff !important;
  color: #0a1f3b !important;
}
html body.x8-orb-consultor .ob-consultor-page button.via-btn--primary.via-btn--primary * { color: #0a1f3b !important; }
/* botões dentro dos cards de vidro: o vidro é escuro, então seguem a regra
   geral (glass claro por cima) — só um degrau a mais de contraste */
html body.x8-orb-consultor .ob-consultor-card button.via-btn--secondary.via-btn--secondary,
html body.x8-orb-consultor .ob-consultor-glass-card button.via-btn--secondary.via-btn--secondary {
  background: rgba(255, 255, 255, 0.13) !important;
  border: 1px solid rgba(255, 255, 255, 0.24) !important;
  color: var(--x8-glass-text) !important;
}

/* scrollbar do painel em dark */
body.x8-orb-consultor .ob-consultor-scroll::-webkit-scrollbar { width: 10px; }
body.x8-orb-consultor .ob-consultor-scroll::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.14); border-radius: 8px;
}
body.x8-orb-consultor .ob-consultor-scroll::-webkit-scrollbar-track { background: transparent; }

/* ==========================================================================
   CHAT FX — a dinâmica de streaming extraída do grok.com
   (xai-study/MAPEAMENTO_GROK_CHAT.md · aplicada por x8-chat-fx.js)
   ========================================================================== */

/* o fade dos tokens — keyframes RECONSTRUÍDO POR MEDIÇÃO (raf-loop sobre
   computed): opacity 0→.5 + blur 3→0 em 100ms ease-in-out; fill none dá o
   "pop" .5→1 na chegada. É o `animate-gaussian` deles. */
@keyframes x8-gaussian {
  from { opacity: 0; filter: blur(3px); }
  to   { opacity: 0.5; filter: blur(0); }
}
body.x8-orb-consultor .x8-gaussian { animation: x8-gaussian 0.1s ease-in-out; }

/* "Pensando ✦ 3s" → "Trabalhou por 6s" (cronômetro local, front puro) */
body.x8-orb-consultor .x8-pensando {
  display: flex; align-items: center; gap: 7px;
  font-family: var(--x8-font-text);
  font-size: 13px; line-height: 1.5;
  color: #9e9e9e;                      /* o text-secondary medido (158) */
  margin-bottom: 8px;
  user-select: none;
}
body.x8-orb-consultor .x8-pensando-icone {
  display: inline-block;
  animation: x8-pensa-gira 2.2s linear infinite;
  font-size: 12px;
}
body.x8-orb-consultor .x8-pensando-rotulo {
  background: linear-gradient(90deg, #9e9e9e 30%, #fcfcfc 50%, #9e9e9e 70%);
  background-size: 200% 100%;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: x8-pensa-shimmer 1.6s linear infinite;
}
body.x8-orb-consultor .x8-pensando-tempo { font-variant-numeric: tabular-nums; color: #555; }
body.x8-orb-consultor .x8-pensando--fim .x8-pensando-icone { animation: none; }
body.x8-orb-consultor .x8-pensando--fim .x8-pensando-rotulo {
  background: none; -webkit-text-fill-color: currentColor; color: #9e9e9e;
  animation: none;
}
@keyframes x8-pensa-gira { to { transform: rotate(360deg); } }
@keyframes x8-pensa-shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }

/* ---- tipografia do markdown no padrão medido do Grok ---- */
body.x8-orb-consultor .ob-consultor-assistant-bubble { font-size: 15px; line-height: 1.5; }
body.x8-orb-consultor .ob-consultor-assistant-bubble :is(h1, h2, h3) {
  font-size: 20px !important; line-height: 28px !important;
  font-weight: 550 !important;
  margin: 24px 0 10px !important;
}
body.x8-orb-consultor .ob-consultor-assistant-bubble li::marker { color: #9e9e9e; }
body.x8-orb-consultor .ob-consultor-assistant-bubble table {
  font-size: 13.5px; border-collapse: collapse; margin: 10px 0;
}
body.x8-orb-consultor .ob-consultor-assistant-bubble th {
  font-size: 14px; font-weight: 550; text-align: left;
  padding: 7px 12px; background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.08);
}
body.x8-orb-consultor .ob-consultor-assistant-bubble td {
  padding: 7px 12px; border: 1px solid rgba(255, 255, 255, 0.08);
}

/* ---- code block estilo Grok: wrapper rounded-xl + header com a linguagem ---- */
body.x8-orb-consultor .x8-codewrap {
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 12px;
  margin: 12px 0;
  overflow: hidden;
}
body.x8-orb-consultor .x8-codehead {
  display: flex; align-items: center; justify-content: space-between;
  padding: 6px 14px;
  font-family: var(--x8-font-text);
  font-size: 12px; color: #9e9e9e;
  background: rgba(255, 255, 255, 0.04);
  border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}
body.x8-orb-consultor .x8-codehead-lang { text-transform: capitalize; }
body.x8-orb-consultor .x8-codehead-copy {
  background: none; border: none; cursor: pointer;
  color: #9e9e9e; font-size: 12px; font-family: inherit;
  padding: 2px 6px; border-radius: 6px;
}
body.x8-orb-consultor .x8-codehead-copy:hover { color: #fcfcfc; background: rgba(255, 255, 255, 0.07); }
body.x8-orb-consultor .x8-codewrap pre {
  margin: 0 !important; border: none !important; border-radius: 0 !important;
  padding: 12px 14px !important;
  background: rgba(255, 255, 255, 0.03) !important;
  font-family: 'Geist Mono', ui-monospace, monospace !important;
  font-size: 13.5px !important; line-height: 20px !important;
  color: #e6e6e6 !important;
  overflow-x: auto;
}
body.x8-orb-consultor .x8-codewrap pre * { color: #e6e6e6 !important; background: transparent !important; }

/* ==========================================================================
   X8MD — o renderer de markdown NOSSO (x8-md.js + x8-chat-md.js)
   Valores VERBATIM do grok.com (leituras em xai-study/grok-chat/_leituras/):
   corpo 15/1.5 (--font-size-ui) · h-escala própria 1.7/1.4/1.1em · listas
   tight (li margin-block .5rem, padding-inline .25em) · inline code LARANJA
   (bg orange-300/10 + text orange-300) · tabela por DIVISÓRIAS de linha (não
   grade) · shimmer-text com color-mix · user bubble rounded-3xl + br-lg.
   Identidade nossa: Universal Sans (400/550), Geist Mono, âmbar/lilás.
   ========================================================================== */

/* a bolha adotada esconde o markdown do BUNDLE; só o nosso aparece.
   ⚠ via :has(), NÃO por classe — o React re-renderiza a bolha e APAGA
   qualquer classe nossa (className é dele; vivido 2026-08-02) */
/* (exceção: os CARDS de recomendação do bundle continuam visíveis — só o
   markdown de texto dele é substituído pelo nosso) */
body.x8-orb-consultor .ob-consultor-assistant-bubble:has(> .x8-md) > *:not(.x8-md):not(:has(.ob-consultor-card)) { display: none !important; }
/* THINKING UNIFICADO: a LINHA inteira do typing do bundle (dots + status
   girando) fica 100% oculta — o indicador é a linha-placeholder NOSSA
   (.x8-md--fx, mesma estrutura do renderer) no fim da lista, no MESMO lugar
   onde a resposta nasce: Pensando → Trabalhou por Xs → texto, contínuo. */
body.x8-orb-consultor .ob-consultor-messages-area > div:has(.ob-typing-dot) { display: none !important; }
body.x8-orb-consultor .ob-typing-dot { display: none !important; }
/* −21px: iguala o Y do think do placeholder ao do think dentro da bolha da
   resposta (medido RELATIVO à linha da pergunta: fx +42 vs sessão +27 com
   −6 → precisa de −15 a mais; os 15 vêm dos gaps do flex + sentinelas h0
   da lista). Troca sem NENHUM salto. */
body.x8-orb-consultor .x8-md--fx { padding: 0; margin-top: -21px; }

body.x8-orb-consultor .x8-md {
  font-size: 15px; line-height: 1.5;
  color: #f2f2f7;
  overflow-wrap: break-word;
}
body.x8-orb-consultor .x8-md-corpo > :first-child { margin-top: 0 !important; }
body.x8-orb-consultor .x8-md-corpo > :last-child { margin-bottom: 0 !important; }

/* blocos (margens do container do Grok: p my-2 · h mt-3/mb-1.5 · pre my-2) */
body.x8-orb-consultor .x8-md .x8-p { margin: 8px 0; white-space: pre-wrap; }
body.x8-orb-consultor .x8-md .x8-h { font-weight: 550; color: #fcfcfc; }
body.x8-orb-consultor .x8-md .x8-h1 { font-size: 25px; line-height: 1.15; margin: 14px 0 6px; }
body.x8-orb-consultor .x8-md .x8-h2 { font-size: 21px; line-height: 1.33; margin: 14px 0 6px; }
body.x8-orb-consultor .x8-md .x8-h3 { font-size: 16.5px; line-height: 1.6; margin: 10px 0 6px; }
body.x8-orb-consultor .x8-md :is(.x8-h4, .x8-h5, .x8-h6) { font-size: 15px; margin: 10px 0 6px; }
body.x8-orb-consultor .x8-md strong { font-weight: 550; color: #fcfcfc; }
body.x8-orb-consultor .x8-md em { font-style: italic; }
body.x8-orb-consultor .x8-md del { text-decoration: line-through; opacity: 0.75; }

/* links: cor herdada + sublinhado 30% → cheio no hover (chat-md-links verbatim) */
body.x8-orb-consultor .x8-md .x8-a {
  color: inherit;
  text-decoration-line: underline;
  text-decoration-color: rgba(252, 252, 252, 0.3);
  text-underline-offset: 2px;
}
body.x8-orb-consultor .x8-md .x8-a:hover { color: #fcfcfc; text-decoration-color: #fcfcfc; }

/* listas TIGHT (remark: list.spread=false sempre) */
body.x8-orb-consultor .x8-md .x8-lista { margin: 4px 0; padding-inline-start: 1.2rem; }
body.x8-orb-consultor .x8-md .x8-li {
  margin-block: 6px; padding-inline-start: 0.25em; white-space: pre-wrap;
}
body.x8-orb-consultor .x8-md ul.x8-lista { list-style-type: disc; }
body.x8-orb-consultor .x8-md ol.x8-lista { list-style-type: decimal; }
body.x8-orb-consultor .x8-md ul.x8-lista .x8-li::marker { color: #6b6b76; }
body.x8-orb-consultor .x8-md ol.x8-lista .x8-li::marker { color: #9e9e9e; font-weight: 400; }
body.x8-orb-consultor .x8-md .x8-lista .x8-lista { margin: 2px 0; }

/* blockquote */
body.x8-orb-consultor .x8-md .x8-quote {
  border-inline-start: 0.25rem solid rgba(255, 255, 255, 0.14);
  padding-inline-start: 1em;
  margin: 8px 0;
  color: #c9c9d4;
  font-style: italic;
}
body.x8-orb-consultor .x8-md .x8-quote .x8-p { margin: 4px 0; }

/* hr = SÓ respiro (pedido: sem linhas de separação) */
body.x8-orb-consultor .x8-md .x8-hr { height: 10px; margin: 4px 0; }

/* inline code — LARANJA verbatim do Grok (bg-orange-300/10 text-orange-300) */
body.x8-orb-consultor .x8-md .x8-code-inline {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 13.5px;
  padding: 1px 4px;
  border-radius: 4px;
  background: rgba(253, 186, 116, 0.1) !important;
  color: #fdba74 !important;
}

/* tabela: DIVISÓRIAS de linha (Grok), não grade; wrapper com scroll */
body.x8-orb-consultor .x8-md .x8-tablewrap { overflow-x: auto; margin: 10px 0; }
body.x8-orb-consultor .x8-md .x8-table {
  width: 100%; border-collapse: collapse;
  font-size: 13.5px; line-height: 1.6;
}
body.x8-orb-consultor .x8-md .x8-table th {
  font-weight: 550; text-align: left; color: #fcfcfc;
  padding: 6px 10px 8px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.14);
  background: none;
}
body.x8-orb-consultor .x8-md .x8-table td {
  padding: 8px 10px; vertical-align: baseline;
  border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}
body.x8-orb-consultor .x8-md .x8-table tbody tr:last-child td { border-bottom: none; }

/* ---- realce de sintaxe (nosso micro-highlighter, paleta Mini Bento) ---- */
body.x8-orb-consultor .x8-codewrap pre .x8-tk-com { color: #7a7a85 !important; font-style: italic; }
body.x8-orb-consultor .x8-codewrap pre .x8-tk-str { color: #ffd28f !important; }
body.x8-orb-consultor .x8-codewrap pre .x8-tk-num { color: #ff9040 !important; }
body.x8-orb-consultor .x8-codewrap pre .x8-tk-kw  { color: #c4b5fd !important; }
body.x8-orb-consultor .x8-codewrap pre .x8-tk-fn  { color: #a5b4fc !important; }

/* header do code block no padrão Grok: 40px, sticky, rótulo mono 12 */
body.x8-orb-consultor .x8-md .x8-codewrap { margin: 8px 0; }
body.x8-orb-consultor .x8-codehead {
  height: 40px; padding: 0 16px;
  position: sticky; top: 0; z-index: 2;
  background: rgba(10, 10, 12, 0.92);
}
body.x8-orb-consultor .x8-codehead-lang {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 12px; text-transform: none; user-select: none;
}

/* ---- linha de THINKING (✦ Pensando shimmer → Trabalhou por Xs) ---- */
body.x8-orb-consultor .x8-think {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px; line-height: 1.5;
  color: #9e9e9e;
  margin-bottom: 10px;
  user-select: none;
}
/* o ícone do Grok: matriz 3×3 de pontos, pulso 20↔100% em varredura
   diagonal, ciclo 1333ms, easing do Lottie (o .45/0 · i .1/1). Os delays
   (com a fase do relógio) vêm inline do JS. Cor da casa: lilás. */
body.x8-orb-consultor .x8-think-matriz {
  display: grid; flex: none;
  grid-template-columns: repeat(3, 4px);
  grid-template-rows: repeat(3, 4px);
  gap: 2px;
  width: 16px; height: 16px;
}
body.x8-orb-consultor .x8-think-matriz i {
  width: 4px; height: 4px; border-radius: 50%;
  background: #c4b5fd;
  opacity: 0.2;
  animation: x8-dot-pulse 1.333s cubic-bezier(0.45, 0, 0.1, 1) infinite;
}
@keyframes x8-dot-pulse {
  0% { opacity: 0.2; }
  14% { opacity: 1; }
  52% { opacity: 1; }
  100% { opacity: 0.2; }
}
/* shimmer-text VERBATIM do Grok (L13234): gradiente com color-mix varrendo */
body.x8-orb-consultor .x8-think-rotulo {
  --shimmer-base: #9e9e9e;
  --shimmer-peak: #fcfcfc;
  background: linear-gradient(100deg,
    var(--shimmer-base) 0%, var(--shimmer-base) 28%,
    color-mix(in srgb, var(--shimmer-peak) 16%, var(--shimmer-base)) 42%,
    color-mix(in srgb, var(--shimmer-peak) 42%, var(--shimmer-base)) 52%,
    color-mix(in srgb, var(--shimmer-peak) 78%, var(--shimmer-base)) 58%,
    var(--shimmer-peak) 61%, var(--shimmer-base) 66%, var(--shimmer-base) 100%);
  color: transparent;
  background-size: 200%;
  -webkit-background-clip: text; background-clip: text;
  animation: x8-shimmer-text-sweep 2.4s linear infinite;
}
body.x8-orb-consultor .x8-think-tempo { font-variant-numeric: tabular-nums; color: #6b6b76; }
body.x8-orb-consultor .x8-think--fim .x8-think-matriz i { animation: none; opacity: 0.45; background: #9e9e9e; }
body.x8-orb-consultor .x8-think--fim .x8-think-rotulo {
  background: none; color: #9e9e9e; animation: none;
}
@keyframes x8-shimmer-text-sweep { 0% { background-position: 200%; } to { background-position: -200%; } }

/* ---- action bar pós-resposta (h-8, ghost, hover-reveal; fixa na última) ---- */
body.x8-orb-consultor .x8-actions {
  display: flex; align-items: center; gap: 2px;
  height: 32px; margin: 6px 0 2px;
  opacity: 0; transition: opacity 0.15s ease;
}
body.x8-orb-consultor .ob-consultor-assistant-bubble:hover .x8-actions,
body.x8-orb-consultor .x8-actions--fixa { opacity: 1; }
body.x8-orb-consultor .x8-action {
  display: inline-flex; align-items: center; gap: 6px;
  background: none; border: none; cursor: pointer;
  color: #9e9e9e; font-size: 12px; font-family: var(--x8-font-text);
  padding: 5px 8px; border-radius: 8px;
}
body.x8-orb-consultor .x8-action:hover { color: #fcfcfc; background: rgba(255, 255, 255, 0.07); }

/* ==========================================================================
   CARDS DE RECOMENDAÇÃO — redesenho dark (2026-08-02). O componente do
   bundle pinta por INLINE STYLES com tokens --via-* (fallback light):
   redefinir os tokens no escopo do card resolve o grosso; o resto (badge
   navy hardcoded "10,31,59", capa, tipografia) entra por override !important
   (inline style perde de !important). ========================================================================== */
body.x8-orb-consultor .ob-consultor-card {
  --via-surface: rgba(255, 255, 255, 0.045);
  --via-navy-10: rgba(255, 255, 255, 0.08);
  --via-text-primary: #fcfcfc;
  --via-text-body: #c9c9d4;
  --via-text-muted: #9e9ea7;
  --via-text-faint: #82828e;
  --via-navy: #c4b5fd;
  --via-gray-50: rgba(255, 255, 255, 0.05);
  --via-radius-md: 16px;
  --via-radius-sm: 10px;
  padding: 14px !important;
  gap: 14px !important;
  border-color: rgba(255, 255, 255, 0.08) !important;
  box-shadow: none !important;
  backdrop-filter: blur(24px) saturate(1.4);
  -webkit-backdrop-filter: blur(24px) saturate(1.4);
  margin: 5px 0;
}
body.x8-orb-consultor .ob-consultor-card:hover {
  background: rgba(255, 255, 255, 0.07) !important;
  border-color: rgba(255, 255, 255, 0.16) !important;
}
/* capa maior, arredondada, sem moldura dura */
body.x8-orb-consultor .ob-consultor-card .ob-consultor-card-cover {
  width: 72px !important; height: 72px !important;
  border-radius: 12px !important;
  border: 1px solid rgba(255, 255, 255, 0.07) !important;
}
/* badge (SOLUÇÃO/FORMAÇÃO) — o navy hardcoded vira pílula lilás da casa */
body.x8-orb-consultor .ob-consultor-card span[style*="uppercase"] {
  background: rgba(196, 181, 253, 0.10) !important;
  border: 1px solid rgba(196, 181, 253, 0.22) !important;
  color: #c4b5fd !important;
  padding: 2px 8px !important;
}
/* título */
body.x8-orb-consultor .ob-consultor-card h3 {
  font-size: 15px !important;
  font-weight: 550 !important;
  color: #fcfcfc !important;
  letter-spacing: -0.01em !important;
}
/* descrição (1 linha, nowrap) */
body.x8-orb-consultor .ob-consultor-card p[style*="nowrap"] {
  color: #9e9ea7 !important;
  font-size: 12.5px !important;
}
/* o PORQUÊ (clamp de linhas) — a frase personalizada ganha presença */
body.x8-orb-consultor .ob-consultor-card p[style*="line-clamp"],
body.x8-orb-consultor .ob-consultor-card p[style*="box-orient"] {
  color: #d6d6df !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
}

/* coluna/timeline lateral do consultor → escura translúcida */
body.x8-orb-consultor .ob-consultor-timeline-col {
  background: rgba(12, 13, 16, 0.72) !important;
  border-color: rgba(255, 255, 255, 0.07) !important;
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
body.x8-orb-consultor .ob-consultor-timeline-col h2,
body.x8-orb-consultor .ob-consultor-timeline-col p,
body.x8-orb-consultor .ob-consultor-timeline-col div { color: #c9c9d4; }
body.x8-orb-consultor .ob-consultor-timeline-col [style*="rgb(247, 248, 250)"],
body.x8-orb-consultor .ob-consultor-timeline-col [style*="rgba(10, 31, 59"] {
  background: rgba(255, 255, 255, 0.05) !important;
  color: #c9c9d4 !important;
}
