/* ==========================================================================
   X8 ORB no /consultor-ia — ILHA DARK  (V3, 2026-08-04)

   HISTÓRICO CURTO, porque explica a forma do arquivo:
   · V1 — ilha dark num sistema light. Era o desenho certo, mas exigia
     repintar tudo que o componente desenha (ele é light por natureza).
   · V2 — tudo claro, orb com partícula do dashboard. Testado e REPROVADO
     na prática: o consultor perdeu a presença.
   · V3 (aqui) — de volta ao dark, aproveitando o que o V2 deixou de bom: a
     folha ficou TOKENIZADA, então virar o painel é mexer no bloco de paleta,
     não caçar cor no corpo das regras. Foi exatamente o que aconteceu.

   O que NÃO volta: a troca de `data-theme` por rota. Era ela que deixava o
   sistema preso no escuro ao sair (bug de produção, 2026-08-03). O escuro
   daqui é LOCAL — CSS do card, nada de tema global.

   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.
   ========================================================================== */

/* ---- PALETA DA ILHA (dark) + TOKENS DO VIDRO.
   A folha inteira consome daqui: nenhuma cor literal no corpo das regras.
   A escada de texto é a do dark medido no Grok (fcfcfc → 9e9e9e); as
   superfícies são ALPHA DE BRANCO sobre o grafite. */
body.x8-orb-consultor {
  /* texto */
  --x8i-forte: #fcfcfc;    /* títulos, strong, code */
  --x8i-txt:   #e8e8ee;    /* corpo */
  --x8i-txt2:  #c9c9d4;    /* secundário */
  --x8i-dim:   #9e9e9e;    /* rótulos, meta */
  --x8i-fraco: #6b6b76;    /* marcadores, cronômetro */
  /* superfícies e linhas */
  --x8i-s1: rgba(255, 255, 255, 0.03);
  --x8i-s2: rgba(255, 255, 255, 0.05);
  --x8i-s3: rgba(255, 255, 255, 0.08);
  --x8i-s4: rgba(255, 255, 255, 0.13);
  --x8i-linha: rgba(255, 255, 255, 0.1);
  --x8i-linha-forte: rgba(255, 255, 255, 0.22);
  /* acentos da casa (Mini Bento): lilás no realce, laranja no code inline */
  --x8i-lilas: #c4b5fd;
  --x8i-lilas-fundo: rgba(196, 181, 253, 0.1);
  --x8i-lilas-linha: rgba(196, 181, 253, 0.22);
  --x8i-code-fundo: rgba(253, 186, 116, 0.1);
  --x8i-code-txt: #fdba74;
  /* CTA sólido = BRANCO com texto navy (o inverso do claro) */
  --x8i-cta: #ffffff;
  --x8i-cta-txt: #0a1f3b;

  /* VIDRO: bem transparente + blur forte, que desfoca a nuvem atrás ⇒ corpo
     escuro, por isso o texto é claro. Input e cards de sugestão consomem daqui:
     calibrar é mexer em UMA linha e os dois seguem juntos. */
  --x8-glass-bg:
    radial-gradient(80% 60% at 12% 0%, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 60%),
    linear-gradient(rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.06) 50%, rgba(255, 255, 255, 0.04) 100%);
  --x8-glass-border: 1px solid var(--x8i-linha-forte);
  --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: var(--x8i-forte);
  --x8-glass-text-dim: var(--x8i-dim);
  /* 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 é o palco: GRAFITE, 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 no tom do card, fiel ao propósito do design. */
body.x8-orb-consultor .via-shell-content main {
  position: relative;
  background: #131416 !important;
  --via-bg: #131416;
}
body.x8-orb-consultor .x8-orb-bg {
  position: absolute; inset: 0; z-index: 0;
  background: #131416;
  border-radius: inherit;
  overflow: hidden;
  pointer-events: none;   /* fundo decorativo: nunca rouba clique do painel */
}
/* no escuro a nuvem é azul sobre grafite: contraste baixo, o texto claro passa
   por cima sem disputa. Não precisa da dosagem por estado que o claro exigia —
   a orb fica inteira, o tempo todo. */
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; }

/* ==========================================================================
   § A PALETA DO CONTEÚDO INTERNO — o design system VIA em dark, num bloco SÓ

   Os cards de pergunta, a jornada, os chips e os divisores não têm classe:
   são <div>/<button> com STYLE INLINE. Perseguir cada um com seletor seria
   uma pilha infinita de !important. Mas ao LER o inline apareceu o fato que
   resolve: o componente JÁ é tematizado por tokens —

     background: var(--via-surface, #fff)
     border: 1px solid var(--via-border-hairline, #E4E7EC)
     color: var(--via-text-primary, #0A1F3B)

   …então a ilha inteira é uma REDEFINIÇÃO de tokens no elemento raiz do card;
   a herança faz o resto, inclusive no que ainda nem montou.

   Os valores vieram de uma varredura que mediu, por token, em QUE propriedade
   ele é usado aqui dentro (fundo? borda? sombra? texto?) — porque o mesmo
   token muda de papel. Dois casos vividos:
     · --x8v-t05-10 / t25-10 só aparecem em box-shadow ⇒ no escuro a sombra é
       PRETA, não branca (virar branco apagaria a profundidade);
     · --via-navy é superfície (pílula do CTA) em 14 usos e texto em 5. Fica
       superfície, ERGUIDA pra existir sobre o grafite, e os 5 usos-texto são
       corrigidos pelo seletor de atributo no fim — que casa o inline literal.

   O dropdown do Histórico entra na MESMA lista porque é `createPortal`
   (role="dialog", position:fixed): mora fora do <main> e não herdaria nada.
   ========================================================================== */
body.x8-orb-consultor .via-shell-content main,
body.x8-orb-consultor [role="dialog"][aria-label="Histórico de conversas"] {
  /* superfícies */
  --via-bg: #131416;
  --via-bg-2: #17181a;
  --via-bg-3: #1b1c1f;
  --via-bg-soft: rgba(255, 255, 255, 0.03);
  --via-surface: rgba(18, 19, 23, 0.66);
  --via-surface-elev: rgba(26, 27, 32, 0.78);
  --via-surface-onnavy: linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.05));
  --via-glass-card: linear-gradient(180deg, rgba(26, 27, 32, 0.72) 0%, rgba(18, 19, 23, 0.62) 100%);
  --via-glass-card-2: linear-gradient(180deg, rgba(24, 25, 30, 0.7), rgba(18, 19, 23, 0.6));
  --via-glass-bar: rgba(16, 17, 20, 0.55);
  --via-glass-sheen: linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent);
  --via-gray-50: rgba(255, 255, 255, 0.055);
  --via-gray-100: rgba(255, 255, 255, 0.08);
  --via-gray-200: rgba(255, 255, 255, 0.12);
  --via-gray-300: rgba(255, 255, 255, 0.18);

  /* linhas (hairline também é usado como background de divisor 1px) */
  --via-border-hairline: rgba(255, 255, 255, 0.1);
  --via-border-soft: rgba(255, 255, 255, 0.06);
  --via-border: rgba(255, 255, 255, 0.14);
  --via-border-1: 1px solid rgba(255, 255, 255, 0.14);
  --via-border-fine: 0.5px solid rgba(255, 255, 255, 0.1);
  --via-border-strong-color: rgba(255, 255, 255, 0.28);
  --via-border-strong: 1px solid rgba(255, 255, 255, 0.28);
  --via-stage-soft: rgba(255, 255, 255, 0.12);
  --via-stage-1: rgba(255, 255, 255, 0.22);
  --via-stage-2: rgba(255, 255, 255, 0.42);

  /* texto */
  --via-text-primary: #ececf2;
  --via-text: #d9d9e2;
  --via-text-body: #d9d9e2;
  --via-text-muted: #a9a9b6;
  --via-text-soft: #9a9aa9;
  --via-text-faint: #7d7d8b;
  --via-text-inverse: #101114;
  --via-ink-2: #b6b6c2;
  --via-ink-3: #a2a2b0;
  /* a escada gray-400..900 é TEXTO no light (cinza escuro) ⇒ inverte */
  --via-gray-400: #8c8c9a;
  --via-gray-500: #9a9aa9;
  --via-gray-600: #b0b0bd;
  --via-gray-700: #c8c8d3;
  --via-gray-800: #dedee6;
  --via-gray-900: #ececf2;

  /* tints de navy = preenchimento/borda sutil sobre claro ⇒ alpha de BRANCO */
  --via-navy-02: rgba(255, 255, 255, 0.022);
  --via-navy-03: rgba(255, 255, 255, 0.03);
  --via-navy-04: rgba(255, 255, 255, 0.04);
  --via-navy-05: rgba(255, 255, 255, 0.05);
  --via-navy-06: rgba(255, 255, 255, 0.06);
  --via-navy-08: rgba(255, 255, 255, 0.075);
  --via-navy-10: rgba(255, 255, 255, 0.1);
  --via-navy-12: rgba(255, 255, 255, 0.115);
  --via-navy-14: rgba(255, 255, 255, 0.13);
  --via-navy-16: rgba(255, 255, 255, 0.15);
  --via-navy-18: rgba(255, 255, 255, 0.17);
  --via-navy-20: rgba(255, 255, 255, 0.19);
  --via-navy-22: rgba(255, 255, 255, 0.21);
  --via-navy-25: rgba(255, 255, 255, 0.24);
  --via-navy-30: rgba(255, 255, 255, 0.28);
  --via-navy-40: rgba(255, 255, 255, 0.34);
  --via-navy-60: rgba(255, 255, 255, 0.46);
  --via-navy-80: rgba(255, 255, 255, 0.62);

  /* navy CHEIO = pílula do CTA. Erguido pra existir sobre #131416. */
  --via-navy: #2b4878;
  --via-navy-deep: #1b2f52;
  --via-navy-darker: #14243f;
  --via-accent: #2b4878;
  --via-accent-deep: #1b2f52;
  --via-accent-light: rgba(255, 255, 255, 0.22);
  --via-accent-soft: rgba(255, 255, 255, 0.18);

  /* sombra no escuro é PRETA (a navy translúcida some) */
  --via-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.35);
  --via-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.35), 0 1px 2px rgba(0, 0, 0, 0.25);
  --via-shadow-md: 0 6px 18px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.28);
  --via-shadow-lg: 0 16px 40px rgba(0, 0, 0, 0.45), 0 2px 8px rgba(0, 0, 0, 0.3);
  --via-shadow-xl: 0 32px 80px rgba(0, 0, 0, 0.5), 0 4px 16px rgba(0, 0, 0, 0.32);
  --via-shadow-focus: 0 0 0 3px rgba(255, 255, 255, 0.18);

  /* tokens de vidro do patcher (server.mjs): t* = tint de navy, l* = claro.
     Só os que a varredura viu EM USO aqui dentro — e pelo papel medido. */
  --x8v-t02-10: rgba(255, 255, 255, 0.025);
  --x8v-t03-10: rgba(255, 255, 255, 0.03);
  --x8v-t04-10: rgba(255, 255, 255, 0.045);
  --x8v-t06-10: rgba(255, 255, 255, 0.06);
  --x8v-t08-10: rgba(255, 255, 255, 0.075);
  --x8v-t10-10: rgba(255, 255, 255, 0.1);
  --x8v-t12-10: rgba(255, 255, 255, 0.115);
  --x8v-t05-10: rgba(0, 0, 0, 0.3);    /* só box-shadow */
  --x8v-t25-10: rgba(0, 0, 0, 0.45);   /* só box-shadow */
  --x8v-l88-249: rgba(255, 255, 255, 0.06);
  --x8v-l78-248: rgba(255, 255, 255, 0.05);
  --x8v-l66-247: rgba(255, 255, 255, 0.045);
  --x8v-l42-247: rgba(255, 255, 255, 0.035);
  --x8v-l72-255: rgba(255, 255, 255, 0.06);
  /* l40/l70-255 ficam como estão: são realce interno e ÍCONE sobre a pílula */
}

/* o vidro do dropdown do Histórico é gradiente BRANCO escrito à mão no inline
   (3 paradas + a linha de brilho no topo). O patcher do server já as trocou
   por tokens --x8v-*, então dá pra virar vidro grafite sem tocar no bundle. */
body.x8-orb-consultor [role="dialog"][aria-label="Histórico de conversas"] {
  --x8v-l84-255: rgba(24, 25, 29, 0.88);
  --x8v-l72-250: rgba(20, 21, 25, 0.84);
  --x8v-l64-247: rgba(18, 19, 23, 0.8);
  --x8v-l65-255: rgba(255, 255, 255, 0.14);   /* fio de brilho do topo */
  --x8v-l55-255: rgba(255, 255, 255, 0.06);   /* campo de busca */
  --x8v-t13-10: rgba(255, 255, 255, 0.05);
  --x8v-t05-10: rgba(0, 0, 0, 0.25);          /* aqui é FUNDO, não sombra */
}

/* o card só descola da orb com desfoque — senão as partículas atravessam o
   texto (medido: sobre a região clara da nuvem o título sumia). */
body.x8-orb-consultor .via-shell-content main [style*="var(--via-surface,"],
body.x8-orb-consultor .via-shell-content main [style*="var(--via-glass-card"] {
  backdrop-filter: blur(14px) saturate(1.25);
  -webkit-backdrop-filter: blur(14px) saturate(1.25);
}

/* os 5 usos em que --via-navy é TEXTO (títulos "Sua jornada", etc.): o
   seletor casa o inline literal — é o gancho que existe sem classe. */
body.x8-orb-consultor .via-shell-content main [style*="color: var(--via-navy,"],
body.x8-orb-consultor .via-shell-content main [style*="color: var(--via-navy-deep,"],
body.x8-orb-consultor [role="dialog"][aria-label="Histórico de conversas"] [style*="color: var(--via-navy,"],
body.x8-orb-consultor [role="dialog"][aria-label="Histórico de conversas"] [style*="color: var(--via-navy-deep,"] {
  color: #ececf2 !important;
}

/* a folha do LMS deixa a cor PADRÃO do documento navy (conserto global do
   texto branco herdado). Dentro da ilha o padrão tem que ser claro de novo. */
body.x8-orb-consultor .via-shell-content main { color: var(--x8i-txt); }


/* título da conversa atropelando os botões (bug de layout do componente, não
   de cor): `.ob-consultor-header-title` pede `min-width: 280px` num espaço de
   ~150px, e o `.via-tooltip-wrap` (inline-flex) cresce até o texto inteiro
   (558px medidos) — então o `text-overflow: ellipsis` do h1 nunca dispara e a
   frase passa POR BAIXO dos botões. Deixar a coluna encolher devolve o corte. */
body.x8-orb-consultor .ob-consultor-header-title { min-width: 0 !important; }
body.x8-orb-consultor .ob-consultor-header-title .via-tooltip-wrap,
body.x8-orb-consultor .ob-consultor-header-title-edit { min-width: 0; max-width: 100%; overflow: hidden; }

/* barra do topo do painel (Nova conversa) → vidro claro */
body.x8-orb-consultor .ob-consultor-header {
  background: rgba(14, 15, 18, 0.55) !important;
  border: 1px solid var(--x8i-s3);
  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: var(--x8i-txt) !important; }
body.x8-orb-consultor .ob-consultor-header svg { color: var(--x8i-txt2) !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: var(--x8i-s3) !important;
  border: 1px solid var(--x8i-linha-forte) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
  color: var(--x8i-txt) !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: var(--x8i-s4) !important;
  border-color: var(--x8i-linha-forte) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
}
/* …o "+ Nova" (via-btn--primary): no claro o CTA sólido é o NAVY (no dark era
   o branco) — é o mesmo botão do design system, invertido pelo fundo */
html body.x8-orb-consultor .ob-consultor-header button.via-btn--primary.via-btn--primary {
  background: var(--x8i-cta) !important;
  border-color: var(--x8i-cta) !important;
  color: var(--x8i-cta-txt) !important;
}
html body.x8-orb-consultor .ob-consultor-header button.via-btn--primary.via-btn--primary * {
  color: var(--x8i-cta-txt) !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 → navy, 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: var(--x8i-forte) !important;
}
/* 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: var(--x8i-forte) !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;
  /* no dark havia sombra preta pra descolar o título da nuvem; no claro a
     nuvem é clara e a sombra sujaria — um halo BRANCO faz o mesmo papel */
  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. Um degrau MAIS ESCURO que no dark: ele cai sobre a parte
   densa da nuvem e o cinza claro reprovava no contraste (medido 3.2:1). */
body.x8-orb-consultor .ob-consultor-empty p {
  font-family: var(--x8-font-text) !important;
  color: var(--x8i-txt) !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 → navy sólido (o CTA do claro), ícone branco */
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: var(--x8i-cta) !important;
  border: 1px solid var(--x8i-cta) !important;
  color: var(--x8i-cta-txt) !important;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.35) !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: var(--x8i-cta-txt) !important;
}
/* corpo do vidro é CLARO → texto navy */
body.x8-orb-consultor .ob-consultor-input-box textarea {
  background: transparent !important;
  color: var(--x8-glass-text) !important;
  caret-color: var(--x8i-lilas);
}
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; }

/* chips "explorar por área" e demais botões do empty → vidro claro */
body.x8-orb-consultor .ob-consultor-empty button {
  background: rgba(20, 21, 26, 0.55) !important;
  border-color: var(--x8i-linha) !important;
  color: var(--x8i-txt) !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
body.x8-orb-consultor .ob-consultor-empty button:hover {
  border-color: var(--x8i-lilas-linha) !important;
  color: var(--x8i-lilas) !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: var(--x8i-fraco) !important; }

/* ==========================================================================
   CONVERSA, CARDS E PAINÉIS INTERNOS — V2 light.
   Doutrina de materiais:
   · VIDRO CLARO (padrão do input/cards): branco translúcido + blur sobre a
     orb, hairline navy, TEXTO NAVY.
   · SUPERFÍCIE SUTIL: alpha de navy (--x8i-s1..s4) para bolhas, roadmap,
     timeline — o equivalente claro do "vidro escuro leve" do V1.
   · BOTÕES: --primary = NAVY sólido (o "+ Nova") · --secondary = branco com
     hairline (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. O pedido original era só ENCURTAR o
   vão texto→input: o wrapper interno do scroll tinha 32px de padding → 8px.
   V2: o fade é BRANCO (no dark era preto) — a cor do palco. */
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;
}
/* (V1 tinha aqui uma regra que repintava de PRETO todo fade branco inline do
   painel. No V2 o palco é branco: o fade nativo do componente já está certo,
   e a regra saiu — menos uma camada.) */

/* bolha do assistente + prosa: no claro os tokens de texto do componente já
   são os certos; o bloco fica porque o markdown do bundle escreve cor INLINE
   via var(--via-text-*, …) e queremos a mesma escada da ilha. */
body.x8-orb-consultor .ob-consultor-assistant-bubble,
body.x8-orb-consultor .ob-consultor-prose {
  --via-text-primary: var(--x8i-forte);
  --via-text-secondary: var(--x8i-txt2);
  --via-text-muted: var(--x8i-dim);
  --via-navy: var(--x8i-forte);
}
/* 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: var(--x8i-txt) !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; }
/* A BOLHA DO USUÁRIO É UMA SÓ (2026-08-04).
   Existem DOIS recipientes no DOM: o nosso (a linha `.x8-row-user > div`, que
   recebe a geometria do Grok — rounded-3xl 24 + br-lg 8, max-w 90%) e o do
   COMPONENTE, por dentro, com gradiente navy e raio próprio.

   No claro isso passava porque os dois eram navy e pareciam um. No dark deu
   o defeito que apareceu na tela: o de fora ficou BRANCO (o token de CTA
   inverte no escuro) e o de dentro navy, com o texto navy por cima do navy —
   dois balões e o texto sumido.

   Conserto: o recipiente de fora é o único que pinta (vidro branco 8%, texto
   claro) e o balão nativo de dentro fica TRANSPARENTE, sem padding nem raio
   próprios — vira só um invólucro do texto. */
body.x8-orb-consultor .x8-row-user > div:first-child {
  background: var(--x8i-s3) !important;
  border: 1px solid var(--x8i-s3) !important;
  border-radius: 24px 24px 8px 24px !important;
  padding: 8px 16px !important;
  max-width: 90%;
}
body.x8-orb-consultor .x8-row-user > div:first-child,
body.x8-orb-consultor .x8-row-user > div:first-child * { color: var(--x8i-txt) !important; }
/* o balão nativo (gradiente navy) por dentro: some, senão ficam dois */
body.x8-orb-consultor .x8-row-user > div:first-child > div:first-child {
  background: transparent !important;
  background-image: none !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  border-radius: 0 !important;
}
body.x8-orb-consultor .ob-consultor-assistant-bubble * { color: var(--x8i-txt) !important; }
body.x8-orb-consultor .ob-consultor-assistant-bubble a { color: var(--x8i-lilas) !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: var(--x8i-s3) !important;
  color: var(--x8i-forte) !important;
}
/* prose inteira na escada navy (o markdown do bundle traz headings/strong/
   spans com cor 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: var(--x8i-txt) !important; }
body.x8-orb-consultor .ob-consultor-prose a { color: var(--x8i-lilas) !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: var(--x8i-s3) !important;
  color: var(--x8i-forte) !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: var(--x8i-txt2) !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: var(--x8i-txt) !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; }
/* (V1 tinha aqui uma defensiva que trocava por vidro escuro todo card pintado
   de BRANCO por inline style. No V2 branco é o certo — regra removida.) */

/* roadmap (plano/fases) → superfície sutil, texto navy */
body.x8-orb-consultor .ob-roadmap-item {
  background: var(--x8i-s2) !important;
  border: 1px solid var(--x8i-linha) !important;
  color: var(--x8i-txt) !important;
}
body.x8-orb-consultor .ob-roadmap-item * { color: var(--x8i-txt); }
body.x8-orb-consultor .ob-roadmap-handle { color: var(--x8i-fraco) !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: var(--x8i-s3) !important;
  border: 1px solid var(--x8i-linha-forte) !important;
  color: var(--x8i-txt) !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

/* cards da timeline/recomendações → superfície sutil */
body.x8-orb-consultor .ob-consultor-timeline-card {
  background: var(--x8i-s2) !important;
  border: 1px solid var(--x8i-linha) !important;
  color: var(--x8i-txt) !important;
}
body.x8-orb-consultor .ob-consultor-timeline-card * { color: var(--x8i-txt2); }

/* BOTÕES na página INTEIRA (mesma regra do header, escopo ampliado):
   --primary = NAVY sólido · --secondary = branco com hairline */
html body.x8-orb-consultor .ob-consultor-page button.via-btn--secondary.via-btn--secondary {
  background: var(--x8i-s3) !important;
  border: 1px solid var(--x8i-linha-forte) !important;
  backdrop-filter: blur(14px) !important;
  -webkit-backdrop-filter: blur(14px) !important;
  color: var(--x8i-txt) !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: var(--x8i-s4) !important;
  border-color: var(--x8i-linha-forte) !important;
}
html body.x8-orb-consultor .ob-consultor-page button.via-btn--primary.via-btn--primary {
  background: var(--x8i-cta) !important;
  border-color: var(--x8i-cta) !important;
  color: var(--x8i-cta-txt) !important;
}
html body.x8-orb-consultor .ob-consultor-page button.via-btn--primary.via-btn--primary * { color: var(--x8i-cta-txt) !important; }
/* botões dentro dos cards de vidro: o vidro é claro, então um degrau a mais
   de tinta pra não sumir */
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: var(--x8i-s2) !important;
  border: 1px solid var(--x8i-linha) !important;
  color: var(--x8-glass-text) !important;
}

/* scrollbar do painel */
body.x8-orb-consultor .ob-consultor-scroll::-webkit-scrollbar { width: 10px; }
body.x8-orb-consultor .ob-consultor-scroll::-webkit-scrollbar-thumb {
  background: var(--x8i-linha); 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: var(--x8i-dim);                      /* 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, var(--x8i-dim) 30%, var(--x8i-forte) 50%, var(--x8i-dim) 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: var(--x8i-fraco); }
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: var(--x8i-dim);
  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: var(--x8i-dim); }
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: var(--x8i-s2);
  border: 1px solid var(--x8i-s3);
}
body.x8-orb-consultor .ob-consultor-assistant-bubble td {
  padding: 7px 12px; border: 1px solid var(--x8i-s3);
}

/* ---- code block estilo Grok: wrapper rounded-xl + header com a linguagem ---- */
body.x8-orb-consultor .x8-codewrap {
  border: 1px solid var(--x8i-s3);
  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: var(--x8i-dim);
  background: var(--x8i-s1);
  border-bottom: 1px solid var(--x8i-s2);
}
body.x8-orb-consultor .x8-codehead-lang { text-transform: capitalize; }
body.x8-orb-consultor .x8-codehead-copy {
  background: none; border: none; cursor: pointer;
  color: var(--x8i-dim); font-size: 12px; font-family: inherit;
  padding: 2px 6px; border-radius: 6px;
}
body.x8-orb-consultor .x8-codehead-copy:hover { color: var(--x8i-forte); background: var(--x8i-s2); }
body.x8-orb-consultor .x8-codewrap pre {
  margin: 0 !important; border: none !important; border-radius: 0 !important;
  padding: 12px 14px !important;
  background: var(--x8i-s1) !important;
  font-family: 'Geist Mono', ui-monospace, monospace !important;
  font-size: 13.5px !important; line-height: 20px !important;
  color: var(--x8i-txt) !important;
  overflow-x: auto;
}
body.x8-orb-consultor .x8-codewrap pre * { color: var(--x8i-txt) !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: var(--x8i-forte);
  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: var(--x8i-forte); }
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: var(--x8i-forte); }
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: var(--x8i-linha-forte);
  text-underline-offset: 2px;
}
body.x8-orb-consultor .x8-md .x8-a:hover { color: var(--x8i-forte); text-decoration-color: var(--x8i-forte); }

/* 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: var(--x8i-fraco); }
body.x8-orb-consultor .x8-md ol.x8-lista .x8-li::marker { color: var(--x8i-dim); 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 var(--x8i-linha);
  padding-inline-start: 1em;
  margin: 8px 0;
  color: var(--x8i-txt2);
  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: var(--x8i-code-fundo) !important;
  color: var(--x8i-code-txt) !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: var(--x8i-forte);
  padding: 6px 10px 8px;
  border-bottom: 1px solid var(--x8i-linha);
  background: none;
}
body.x8-orb-consultor .x8-md .x8-table td {
  padding: 8px 10px; vertical-align: baseline;
  border-bottom: 1px solid var(--x8i-s2);
}
body.x8-orb-consultor .x8-md .x8-table tbody tr:last-child td { border-bottom: none; }

/* ---- realce de sintaxe (nosso micro-highlighter) — no claro os tons
   precisam ESCURECER: o âmbar/dourado do dark some sobre branco ---- */
body.x8-orb-consultor .x8-codewrap pre .x8-tk-com { color: var(--x8i-fraco) !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: var(--x8i-lilas) !important; }
body.x8-orb-consultor .x8-codewrap pre .x8-tk-fn  { color: var(--x8i-lilas) !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: var(--x8i-dim);
  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: var(--x8i-lilas);
  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: var(--x8i-dim);
  --shimmer-peak: var(--x8i-forte);
  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: var(--x8i-fraco); }
body.x8-orb-consultor .x8-think--fim .x8-think-matriz i { animation: none; opacity: 0.45; background: var(--x8i-dim); }
body.x8-orb-consultor .x8-think--fim .x8-think-rotulo {
  background: none; color: var(--x8i-dim); 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: var(--x8i-dim); font-size: 12px; font-family: var(--x8-font-text);
  padding: 5px 8px; border-radius: 8px;
}
body.x8-orb-consultor .x8-action:hover { color: var(--x8i-forte); background: var(--x8i-s2); }

/* ==========================================================================
   CARDS DE RECOMENDAÇÃO — o LAYOUT do redesenho fica (capa 72, badge pílula,
   escala tipográfica); a cor volta pro claro. O componente pinta por INLINE
   STYLE com tokens --via-*: no V2 só sobra o que é ESCOLHA nossa (o badge
   lilás no lugar do navy, os tamanhos), não repintura de tema.
   ========================================================================== */
body.x8-orb-consultor .ob-consultor-card {
  --via-navy: var(--x8i-lilas);   /* o badge/realce do card é lilás da casa */
  --via-radius-md: 16px;
  --via-radius-sm: 10px;
  padding: 14px !important;
  gap: 14px !important;
  background: var(--x8i-s2) !important;
  border-color: var(--x8i-s3) !important;
  box-shadow: none !important;
  backdrop-filter: blur(18px) saturate(1.3);
  -webkit-backdrop-filter: blur(18px) saturate(1.3);
  margin: 5px 0;
}
body.x8-orb-consultor .ob-consultor-card:hover {
  background: var(--x8i-s3) !important;
  border-color: var(--x8i-linha-forte) !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 var(--x8i-s2) !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: var(--x8i-lilas-fundo) !important;
  border: 1px solid var(--x8i-lilas-linha) !important;
  color: var(--x8i-lilas) !important;
  padding: 2px 8px !important;
}
/* título */
body.x8-orb-consultor .ob-consultor-card h3 {
  font-size: 15px !important;
  font-weight: 550 !important;
  color: var(--x8i-forte) !important;
  letter-spacing: -0.01em !important;
}
/* descrição (1 linha, nowrap) */
body.x8-orb-consultor .ob-consultor-card p[style*="nowrap"] {
  color: var(--x8i-dim) !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: var(--x8i-txt) !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
}

/* coluna/timeline lateral ("Sua jornada") → vidro claro sobre a orb */
body.x8-orb-consultor .ob-consultor-timeline-col {
  background: rgba(12, 13, 16, 0.72) !important;
  border-color: var(--x8i-linha) !important;
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
