/* ============================================================================
   AEGIS THEME — camada visual do Chatwoot (Liquid Glass)
   ----------------------------------------------------------------------------
   Injetada por vueapp.html.erb. NAO faz parte do bundle Vue: se algo aqui der
   errado, some a tag <link> e o Chatwoot volta 100% ao original.

   DOUTRINA (por que nao e "retangulo branco com blur"):
     vidro e LENTE, nao filtro. Tem espessura, entao (1) desloca o que esta
     atras, (2) concentra luz na borda, (3) joga um especular que aponta pra
     fonte de luz, (4) separa cor de leve no angulo mais fechado.

   FONTE DE LUZ (uma so, o resto obedece): topo-esquerda, fria (~6200K),
   em 22% / -10% de cada painel. Borda voltada pra luz (topo/esquerda) = anel
   aceso; borda oposta (baixo/direita) = retorno fraco; interior = bloom suave.

   PILHA DE CAMADAS de .ag-glass (de tras pra frente — falta uma, cai a ilusao):
     1. backdrop   -> blur + saturate + brightness  (o proprio elemento)
     2. refracao   -> deslocamento SVG, concentrado NA BORDA (::after)
     3. tint       -> corpo translucido com piso de opacidade
     4. edge lens  -> anel de borda com gradiente direcional (::after)
     5. especular  -> bloom interior + inset highlights (::before)
     6. aberracao  -> sussurro de magenta/ciano no anel
     7. conteudo   -> SEMPRE acima, nunca sofre as camadas opticas

   ORCAMENTO GPU: backdrop-filter = 1 passe cada. Teto de 4 na tela de conversa
   (cabecalho do chat, caixa de resposta, camada de popover, paleta de comando).
   Sidebar e lista NAO levam blur: nada passa por tras delas, seria passe pago
   por nada — ali a profundidade vem de gradiente + anel, que e de graca.
   ============================================================================ */

/* ---------------------------------------------------------------- 1. TOKENS */

html.ag-theme {
  /* posicao e temperatura da fonte de luz (tudo abaixo deriva daqui) */
  --ag-lx: 22%;
  --ag-ly: -10%;
  --ag-light: 232 242 255;

  /* marca — mesma do Chatwoot, nao inventamos identidade nova */
  --ag-brand: 39 129 246;
  --ag-brand-lift: 96 165 250;

  /* curvas de movimento */
  --ag-spring: cubic-bezier(.22, 1.28, .36, 1);   /* elastic ease (pop) */
  --ag-glide: cubic-bezier(.32, .72, 0, 1);        /* deslize sem overshoot */
  --ag-fast: 160ms;
  --ag-med: 280ms;
  --ag-slow: 420ms;

  /* geometria — raio continuo (squircle-ish) e concentrico */
  --ag-r-lg: 16px;
  --ag-r-md: 12px;
  --ag-r-sm: 8px;
}

/* ---- TEMA CLARO (padrao) — "Vellum Frost" -------------------------------- */
html.ag-theme {
  --ag-tint: 255 255 255;
  --ag-tint-a: .74;              /* piso de opacidade: legibilidade > efeito */
  --ag-rim-hi: 255 255 255;
  --ag-rim-hi-a: .95;
  --ag-rim-lo: 24 40 70;
  --ag-rim-lo-a: .10;
  --ag-bloom-a: .55;
  --ag-ink: 28 32 36;
  --ag-ink-soft: 96 100 108;

  --ag-sh-contact: 0 1px 1px rgb(20 35 60 / .08);
  --ag-sh-ambient: 0 4px 12px -2px rgb(20 35 60 / .10);
  --ag-sh-cast: 0 18px 40px -12px rgb(20 35 60 / .18);

  --ag-bubble-in: 255 255 255;
  --ag-bubble-in-a: .92;
  --ag-scroll: 24 40 70;
  --ag-scroll-a: .22;
}

/* ---- TEMA ESCURO — "Obsidian Translucence" ------------------------------- */
/* ATENCAO: o Chatwoot poe a classe .dark no <body>, NAO no <html>.
   A JS espelha isso em html.ag-dark pra permitir seletor de tema aqui. */
html.ag-theme.ag-dark {
  --ag-tint: 30 33 41;
  --ag-tint-a: .70;
  --ag-rim-hi: 190 214 255;
  --ag-rim-hi-a: .30;
  --ag-rim-lo: 120 150 200;
  --ag-rim-lo-a: .08;
  --ag-bloom-a: .40;
  --ag-ink: 237 238 240;
  --ag-ink-soft: 176 180 186;

  --ag-sh-contact: 0 1px 1px rgb(0 0 0 / .55);
  --ag-sh-ambient: 0 6px 16px -4px rgb(0 0 0 / .55);
  --ag-sh-cast: 0 22px 48px -16px rgb(0 0 0 / .70);

  --ag-bubble-in: 44 48 57;
  --ag-bubble-in-a: .96;
  --ag-scroll: 190 214 255;
  --ag-scroll-a: .20;
}

/* Legibilidade adaptativa nao-negociavel: se o usuario pediu menos
   transparencia, o vidro vira superficie opaca. Sem excecao. */
@media (prefers-reduced-transparency: reduce) {
  html.ag-theme { --ag-tint-a: 1; }
  html.ag-theme .ag-glass { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
}
/* Mesma coisa quando o motor nao tem backdrop-filter: opaco, nunca "vidro sujo" */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  html.ag-theme { --ag-tint-a: 1; }
}

/* ------------------------------------------------- 2. PRIMITIVA .ag-glass */

html.ag-theme .ag-glass {
  position: relative;
  isolation: isolate;
  background: rgb(var(--ag-tint) / var(--ag-tint-a));

  /* CAMADA 1 — backdrop. Declaracao simples PRIMEIRO: motor que nao entende a
     versao com url() cai aqui em vez de largar a propriedade inteira e
     renderizar zero vidro. */
  -webkit-backdrop-filter: blur(22px) saturate(1.7) brightness(1.05);
  backdrop-filter: blur(22px) saturate(1.7) brightness(1.05);

  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient), var(--ag-sh-cast);
  transition: backdrop-filter var(--ag-med) var(--ag-glide),
              box-shadow var(--ag-med) var(--ag-glide);
}

/* CAMADA 5 — especular: bloom interior puxado pra fonte de luz + retorno fraco
   na borda oposta. mix-blend screen no escuro / soft-light no claro. */
html.ag-theme .ag-glass::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  border-radius: inherit;
  background:
    radial-gradient(120% 80% at var(--ag-lx) var(--ag-ly),
      rgb(var(--ag-light) / calc(var(--ag-bloom-a) * .30)) 0%,
      rgb(var(--ag-light) / 0) 60%),
    linear-gradient(to bottom,
      rgb(var(--ag-light) / calc(var(--ag-bloom-a) * .12)) 0%,
      rgb(var(--ag-light) / 0) 38%);
  mix-blend-mode: soft-light;
  opacity: 1;
}
html.ag-theme.ag-dark .ag-glass::before { mix-blend-mode: screen; }

/* CAMADAS 2+4+6 — o anel. Aqui mora o vidro de verdade:
   - mask de duas camadas (content-box vs padding-box, composite exclude) deixa
     SO a borda, entao o backdrop-filter dela desloca so onde o caminho optico
     e mais longo — que e exatamente o que uma lente faz;
   - gradiente direcional: topo/esquerda aceso, baixo/direita retorno fraco;
   - aberracao cromatica no sussurro: se der pra NOMEAR a cor, ta forte demais. */
html.ag-theme .ag-glass::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  padding: 1px;

  background: linear-gradient(
    to bottom right,
    rgb(var(--ag-rim-hi) / var(--ag-rim-hi-a)) 0%,
    rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .25)) 34%,
    rgb(var(--ag-rim-lo) / 0) 58%,
    rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a)) 100%
  );

  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;

  box-shadow:
    0 0 0 .5px rgb(255 0 200 / .035),
    0 0 1.5px rgb(0 220 255 / .030);
}

/* CAMADA 2 (refracao) so entra em motor que suporta url() em backdrop-filter.
   Escrita DEPOIS da declaracao simples, de proposito. */
@supports (backdrop-filter: url(#ag-refract)) {
  html.ag-theme .ag-glass::after {
    -webkit-backdrop-filter: blur(1.5px) url(#ag-refract);
    backdrop-filter: blur(1.5px) url(#ag-refract);
  }
}

/* CAMADA 7 — conteudo sempre acima das opticas. Nunca desfocamos texto. */
html.ag-theme .ag-glass > * { position: relative; z-index: 1; }

/* ---------------------------------------------------- 2b. PRIMITIVA .ag-card */
/* Mesma linguagem (tint+especular+anel+sombra em 3 niveis+motion elastico) MAS
   sem backdrop-filter — pra elementos que se REPETEM muito na tela (cards de
   Kanban/Follow-up: podem ser dezenas ao mesmo tempo, e cada backdrop-filter e
   um passe de GPU separado; nesse volume o orcamento do doc explode a toa).
   Tambem NAO define background/border — deixa o que o CSS do card ja define
   (a paleta de elevacao ja calibrada) e so soma luz+profundidade por cima. */
html.ag-theme .ag-card {
  position: relative;
  isolation: isolate;
  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient);
  transition: box-shadow var(--ag-med) var(--ag-glide),
              transform var(--ag-fast) var(--ag-spring);
}
html.ag-theme .ag-card:hover {
  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient), var(--ag-sh-cast);
  transform: translateY(-1px);
}
html.ag-theme .ag-card:active { transform: translateY(0) scale(.99); }
html.ag-theme .ag-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  border-radius: inherit;
  background: radial-gradient(120% 80% at var(--ag-lx) var(--ag-ly),
    rgb(var(--ag-light) / calc(var(--ag-bloom-a) * .22)) 0%,
    rgb(var(--ag-light) / 0) 62%);
  mix-blend-mode: soft-light;
}
html.ag-theme.ag-dark .ag-card::before { mix-blend-mode: screen; }
html.ag-theme .ag-card::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(to bottom right,
    rgb(var(--ag-rim-hi) / var(--ag-rim-hi-a)) 0%,
    rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .20)) 30%,
    rgb(var(--ag-rim-lo) / 0) 55%,
    rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a)) 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
}
html.ag-theme .ag-card > * { position: relative; z-index: 1; }

/* -------------------------------------------- 3. CHROME: sidebar e colunas */

/* Sidebar: sem blur (nada passa atras). Profundidade por gradiente + anel. */
html.ag-theme aside.bg-n-background {
  background-image: linear-gradient(
    165deg,
    rgb(var(--ag-light) / calc(var(--ag-bloom-a) * .10)) 0%,
    rgb(var(--ag-light) / 0) 42%);
  box-shadow: inset -1px 0 0 rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a)),
              var(--ag-sh-ambient);
}

/* Itens do menu: alvo maior, estado ativo obvio, resposta elastica ao clique */
html.ag-theme aside nav a,
html.ag-theme aside nav button {
  border-radius: var(--ag-r-md);
  transition: background-color var(--ag-fast) var(--ag-glide),
              transform var(--ag-fast) var(--ag-spring),
              box-shadow var(--ag-fast) var(--ag-glide);
}
html.ag-theme aside nav a:active,
html.ag-theme aside nav button:active { transform: scale(.97); }
html.ag-theme aside nav a:hover { box-shadow: inset 0 0 0 1px rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .35)); }

/* Coluna da lista: separacao clara das colunas vizinhas */
html.ag-theme .conversations-list-wrap {
  box-shadow: inset -1px 0 0 rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a));
}

/* ------------------------------------------ 4. LISTA DE CONVERSAS (usabilidade) */
/* Queixa real: nao da pra saber de bate-pronto qual conversa esta aberta. */

html.ag-theme .conversation {
  border-radius: var(--ag-r-md);
  margin: 2px 6px;
  padding-left: 10px !important;
  padding-right: 10px !important;
  border-bottom: 0 !important;
  transition: background-color var(--ag-fast) var(--ag-glide),
              transform var(--ag-fast) var(--ag-spring),
              box-shadow var(--ag-med) var(--ag-glide);
}
html.ag-theme .conversation:hover {
  transform: translateX(2px);
  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient);
}
html.ag-theme .conversation::before { display: none !important; }

/* Ativa: barra de acento + elevacao. Impossivel confundir. */
html.ag-theme .conversation.active,
html.ag-theme .conversation[class*="bg-n-alpha-2"],
html.ag-theme .conversation.ag-active {
  background: linear-gradient(
    100deg,
    rgb(var(--ag-brand) / .16) 0%,
    rgb(var(--ag-brand) / .05) 45%,
    transparent 100%) !important;
  box-shadow:
    inset 3px 0 0 rgb(var(--ag-brand)),
    inset 0 0 0 1px rgb(var(--ag-brand) / .22),
    var(--ag-sh-ambient);
}

/* Nao lida: peso visual de verdade */
html.ag-theme .conversation .conversation--user { letter-spacing: -.005em; }

/* Anel de canal no avatar — cor por canal (WhatsApp verde, Instagram rosa,
   e-mail azul...), setada via --ag-ring pelo JS (renderChannelRings). Gap
   contra o proprio avatar pra nao brigar com a foto (mesmo padrao do "anel
   de story" que todo mundo ja reconhece). */
html.ag-theme .ag-ring {
  box-shadow: 0 0 0 2px rgb(var(--ag-tint)), 0 0 0 3.5px var(--ag-ring, transparent);
}

/* ------------------------------------------------------ 5. PAINEL DE MENSAGENS */

html.ag-theme .conversation-panel {
  /* respiro pro cabecalho de vidro que agora flutua por cima.
     A altura real vem da JS (o cabecalho e 96px abaixo de xl e 48px acima) —
     chutar 60px fixo escondia mensagem em tela estreita. */
  padding-top: calc(var(--ag-header-h, 48px) + 14px);
  scroll-padding-top: calc(var(--ag-header-h, 48px) + 26px);
  background-image: radial-gradient(
    100% 55% at 50% 0%,
    rgb(var(--ag-light) / calc(var(--ag-bloom-a) * .05)) 0%,
    transparent 70%);
}

/* Cabecalho do chat vira VIDRO DE VERDADE: as mensagens correm por tras dele.
   Sem sobreposicao real, blur em cima de cor chapada e so plastico fosco. */
html.ag-theme .conversation-details-wrap > div:first-child {
  position: absolute;
  top: 0; left: 0; right: 0;
  z-index: 20;
  border-bottom: 0 !important;
  border-radius: 0 0 var(--ag-r-lg) var(--ag-r-lg);
  /* o Chatwoot nativo trava essa altura em h-12/xl:h-12 (48/96px) — sem
     espaco pra nenhuma faixa de chip extra (Instagram/janela do WhatsApp/
     resumo do cliente). Sem soltar isso, o conteudo extra "vaza" por cima
     das mensagens em vez de empurrar o cabecalho pra baixo (achado ao vivo:
     os chips apareciam boiando sobre a conversa). */
  height: auto !important;
  min-height: 48px;
  flex-wrap: wrap;
}

/* ---- Bolhas ---- */

html.ag-theme .message-bubble-container {
  animation: ag-arrive var(--ag-slow) var(--ag-glide) both;
}
/* Dissolucao gaussiana: entra POR DESFOQUE, nao por opacity seca */
@keyframes ag-arrive {
  from { opacity: 0; transform: translateY(10px) scale(.985); filter: blur(8px); }
  to   { opacity: 1; transform: none;                          filter: blur(0);  }
}

html.ag-theme [data-bubble-name] {
  border-radius: var(--ag-r-lg) !important;
  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient);
  transition: box-shadow var(--ag-med) var(--ag-glide),
              transform var(--ag-med) var(--ag-spring);
}
html.ag-theme .message-bubble-container:hover [data-bubble-name] {
  box-shadow: var(--ag-sh-contact), var(--ag-sh-ambient), var(--ag-sh-cast);
}

/* Recebida (esquerda) — corpo neutro com anel superior aceso */
html.ag-theme .left-bubble {
  background: rgb(var(--ag-bubble-in) / var(--ag-bubble-in-a)) !important;
  border-bottom-left-radius: var(--ag-r-sm) !important;
  box-shadow:
    inset 0 1px 0 rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .40)),
    var(--ag-sh-contact), var(--ag-sh-ambient);
}

/* Enviada (direita) — a identidade da marca vive aqui. O azul chapado do
   Chatwoot no escuro (15 57 102) sumia no fundo; gradiente + anel resolvem. */
html.ag-theme .right-bubble {
  background: linear-gradient(
    155deg,
    rgb(var(--ag-brand-lift) / .95) 0%,
    rgb(var(--ag-brand) / .98) 55%,
    rgb(var(--ag-brand) / 1) 100%) !important;
  color: #fff !important;
  border-bottom-right-radius: var(--ag-r-sm) !important;
  box-shadow:
    inset 0 1px 0 rgb(255 255 255 / .28),
    inset 0 -1px 0 rgb(0 0 0 / .10),
    0 1px 1px rgb(var(--ag-brand) / .30),
    0 6px 18px -6px rgb(var(--ag-brand) / .45);
}
html.ag-theme .right-bubble,
html.ag-theme .right-bubble * { color: #fff !important; }
html.ag-theme .right-bubble a { text-decoration: underline; text-underline-offset: 2px; }

/* Falha de envio continua gritando — mas com acabamento */
html.ag-theme [data-bubble-name].bg-n-ruby-4,
html.ag-theme .message-bubble-container .bg-n-ruby-4 {
  box-shadow: inset 0 0 0 1px rgb(229 70 102 / .45), var(--ag-sh-ambient) !important;
}

/* Retry de mensagem com falha: nativo era um triangulo/icone de 20px quase
   invisible do lado de "Falha ao enviar". Vira pilula com rotulo — sem
   precisar de JS, e um <button> real do proprio Chatwoot, so estilizado
   via :has() no icone que so ele carrega (i-lucide-refresh-ccw). O icone
   de alerta (i-lucide-alert-triangle, so tooltip com o erro, SEM retry —
   erro permanente tipo token invalido) fica do jeito nativo, sem rotulo. */
html.ag-theme button.bg-n-alpha-2.rounded-md.size-5:has(> .i-lucide-refresh-ccw) {
  width: auto;
  height: 24px;
  padding: 0 10px 0 6px;
  gap: 5px;
  border-radius: 999px;
  background: rgb(229 70 102 / .14);
  box-shadow: inset 0 0 0 1px rgb(229 70 102 / .40);
  transition: background-color var(--ag-fast) var(--ag-glide),
              transform var(--ag-fast) var(--ag-spring),
              box-shadow var(--ag-fast) var(--ag-glide);
}
html.ag-theme button.bg-n-alpha-2.rounded-md.size-5:has(> .i-lucide-refresh-ccw)::after {
  content: "Tentar de novo";
  font-size: 11px;
  font-weight: 600;
  color: rgb(229 70 102);
  white-space: nowrap;
}
html.ag-theme button.bg-n-alpha-2.rounded-md.size-5:has(> .i-lucide-refresh-ccw):hover {
  background: rgb(229 70 102 / .24);
  box-shadow: inset 0 0 0 1px rgb(229 70 102 / .55);
  transform: scale(1.03);
}
html.ag-theme button.bg-n-alpha-2.rounded-md.size-5:has(> .i-lucide-refresh-ccw):active { transform: scale(.96); }

/* Nota privada: fita lateral ambar, le-se "isso o cliente NAO ve" */
html.ag-theme [data-bubble-name].bg-n-solid-amber {
  box-shadow: inset 3px 0 0 rgb(255 197 61 / .85), var(--ag-sh-ambient) !important;
}

/* Atividade (sistema): discreto, nao compete com a conversa */
html.ag-theme [data-bubble-name="activity"] {
  box-shadow: none !important;
  opacity: .72;
  transition: opacity var(--ag-fast) var(--ag-glide);
}
html.ag-theme [data-bubble-name="activity"]:hover { opacity: 1; }

/* ---- Citacao dentro da bolha (a resposta a mensagem especifica) ---- */
/* Nativo: retangulo escuro sem hierarquia. Vira bloco com fita e parallax. */
html.ag-theme [data-bubble-name] > .bg-n-alpha-black1 {
  border-radius: var(--ag-r-sm) !important;
  padding: 6px 10px !important;
  background: rgb(0 0 0 / .16) !important;
  box-shadow: inset 3px 0 0 rgb(var(--ag-rim-hi) / .55);
  transition: transform var(--ag-med) var(--ag-spring),
              background-color var(--ag-fast) var(--ag-glide);
}
html.ag-theme .right-bubble > .bg-n-alpha-black1 {
  box-shadow: inset 3px 0 0 rgb(255 255 255 / .75);
  background: rgb(0 0 0 / .18) !important;
}
/* Separacao por parallax: a citacao anda menos que a bolha, sugerindo camada */
html.ag-theme .message-bubble-container:hover [data-bubble-name] > .bg-n-alpha-black1 {
  transform: translateX(2px);
  background: rgb(0 0 0 / .24) !important;
}
html.ag-theme [data-bubble-name] > .bg-n-alpha-black1::before {
  content: "\21A9\FE0E";
  float: left;
  margin-right: 6px;
  opacity: .6;
  font-size: 11px;
  line-height: 1.4;
}

/* ---- Flash de destaque ao pular pra mensagem original ---- */
html.ag-theme .ag-jump-flash [data-bubble-name] {
  animation: ag-flash 1.6s var(--ag-glide) both;
}
@keyframes ag-flash {
  0%   { box-shadow: 0 0 0 0 rgb(var(--ag-brand) / .0),  0 0 0 0 rgb(var(--ag-brand) / 0); }
  12%  { box-shadow: 0 0 0 3px rgb(var(--ag-brand) / .55), 0 0 26px 6px rgb(var(--ag-brand) / .38); }
  55%  { box-shadow: 0 0 0 3px rgb(var(--ag-brand) / .40), 0 0 22px 4px rgb(var(--ag-brand) / .22); }
  100% { box-shadow: 0 0 0 0 rgb(var(--ag-brand) / 0),   0 0 0 0 rgb(var(--ag-brand) / 0); }
}

/* ------------------------------------------- 6. BARRA DE ACOES DA MENSAGEM */
/* O "responder" nativo existe mas mora no botao direito. Ninguem descobre. */

html.ag-theme .ag-msg-actions {
  position: absolute;
  z-index: 30;
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  border-radius: 999px;
  opacity: 0;
  transform: translateY(4px) scale(.94);
  pointer-events: none;
  transition: opacity var(--ag-fast) var(--ag-glide),
              transform var(--ag-med) var(--ag-spring);
}
html.ag-theme .ag-msg-actions.ag-on {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}
html.ag-theme .ag-msg-actions button {
  display: grid;
  place-content: center;
  width: 28px; height: 28px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: rgb(var(--ag-ink-soft));
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  transition: background-color var(--ag-fast) var(--ag-glide),
              color var(--ag-fast) var(--ag-glide),
              transform var(--ag-fast) var(--ag-spring);
}
html.ag-theme .ag-msg-actions button:hover {
  background: rgb(var(--ag-brand) / .16);
  color: rgb(var(--ag-brand-lift));
}
html.ag-theme .ag-msg-actions button:active { transform: scale(.88); }
html.ag-theme .ag-msg-actions button:focus-visible {
  outline: 2px solid rgb(var(--ag-brand));
  outline-offset: 1px;
}
html.ag-theme .ag-msg-actions svg { width: 15px; height: 15px; }

/* dica curta de teclado/uso, sem ocupar espaco permanente */
html.ag-theme .ag-msg-actions button::after {
  content: attr(data-tip);
  position: absolute;
  bottom: calc(100% + 6px);
  left: 50%;
  translate: -50% 0;
  padding: 3px 7px;
  border-radius: var(--ag-r-sm);
  background: rgb(var(--ag-ink) / .92);
  color: rgb(var(--ag-tint));
  font-size: 11px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--ag-fast) var(--ag-glide);
}
html.ag-theme .ag-msg-actions button:hover::after { opacity: 1; }

/* ---------------------------------------------- 7. CAIXA DE RESPOSTA (vidro) */

html.ag-theme .reply-box {
  position: relative;
  z-index: 15;
  margin: 0 10px 10px;
  border-radius: var(--ag-r-lg) !important;
  border: 0 !important;
  /* sobe 14px: esse tanto de mensagem passa REALMENTE por tras do rim, que e
     onde a lente aparece. Sem isso o blur nao teria o que refratar. */
  margin-top: -14px;
  overflow: visible;
}
html.ag-theme .reply-box.is-focused {
  box-shadow:
    var(--ag-sh-contact), var(--ag-sh-ambient), var(--ag-sh-cast),
    0 0 0 1px rgb(var(--ag-brand) / .45),
    0 0 24px -6px rgb(var(--ag-brand) / .40);
}

/* Preview "Respondendo a:" — nativo e um texto solto, vira bloco com fita */
html.ag-theme .ag-replying-to {
  box-shadow: inset 3px 0 0 rgb(var(--ag-brand));
  border-radius: var(--ag-r-sm);
  background: rgb(var(--ag-brand) / .10);
}

/* Botao de enviar com resposta elastica */
html.ag-theme .reply-box button {
  transition: transform var(--ag-fast) var(--ag-spring),
              filter var(--ag-fast) var(--ag-glide),
              box-shadow var(--ag-fast) var(--ag-glide);
}
html.ag-theme .reply-box button:active { transform: scale(.94); }

/* ------------------------------------------- 8. CHIPS DE CONTEXTO NO CABECALHO */
/* Base compartilhada por qualquer chip de cabecalho (Instagram, janela do
   WhatsApp Cloud, o que vier depois). Modificadores especificos ficam com
   prefixo por feature (--ig-handle, --wa-warn etc.) mas a pilula e uma so. */

html.ag-theme .ag-chip-strip {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-left: 8px;
}
html.ag-theme .ag-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 20px;
  padding: 0 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  color: rgb(var(--ag-ink-soft));
  background: rgb(var(--ag-rim-lo) / calc(var(--ag-rim-lo-a) * 1.4));
  box-shadow: inset 0 0 0 1px rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a));
  transition: transform var(--ag-fast) var(--ag-spring),
              box-shadow var(--ag-fast) var(--ag-glide);
}
html.ag-theme a.ag-chip:hover { transform: translateY(-1px); }

/* @usuario: gradiente do Instagram, o unico lugar onde ele aparece */
html.ag-theme .ag-chip--ig-handle {
  color: #fff;
  background: linear-gradient(100deg, #F58529 0%, #DD2A7B 48%, #8134AF 100%);
  box-shadow: 0 1px 1px rgb(221 42 123 / .35), 0 4px 12px -4px rgb(129 52 175 / .5);
}
/* "te segue" = o sinal de qualificacao que hoje fica preso no app do Instagram */
html.ag-theme .ag-chip--ok {
  color: rgb(16 185 129);
  background: rgb(16 185 129 / .12);
  box-shadow: inset 0 0 0 1px rgb(16 185 129 / .35);
}
html.ag-theme .ag-chip--cold {
  color: rgb(var(--ag-ink-soft));
  opacity: .8;
}
html.ag-theme .ag-chip--verified {
  color: rgb(var(--ag-brand-lift));
  background: rgb(var(--ag-brand) / .14);
  box-shadow: inset 0 0 0 1px rgb(var(--ag-brand) / .35);
}
html.ag-theme .ag-chip--reach {
  color: rgb(245 158 11);
  background: rgb(245 158 11 / .12);
  box-shadow: inset 0 0 0 1px rgb(245 158 11 / .32);
}
/* Janela do WhatsApp Cloud: verde enquanto ha tempo de sobra, ambar quando
   falta pouco (<2h), vermelho quando ja fechou (so entra mensagem de
   template aprovado — mensagem livre vai falhar). */
html.ag-theme .ag-chip--wa-open {
  color: rgb(16 185 129);
  background: rgb(16 185 129 / .12);
  box-shadow: inset 0 0 0 1px rgb(16 185 129 / .35);
}
html.ag-theme .ag-chip--wa-urgent {
  color: rgb(245 158 11);
  background: rgb(245 158 11 / .14);
  box-shadow: inset 0 0 0 1px rgb(245 158 11 / .38);
  animation: ag-pulse-warn 2.2s ease-in-out infinite;
}
html.ag-theme .ag-chip--wa-closed {
  color: rgb(229 70 102);
  background: rgb(229 70 102 / .14);
  box-shadow: inset 0 0 0 1px rgb(229 70 102 / .4);
}
@keyframes ag-pulse-warn {
  0%, 100% { box-shadow: inset 0 0 0 1px rgb(245 158 11 / .38); }
  50% { box-shadow: inset 0 0 0 1px rgb(245 158 11 / .38), 0 0 10px 1px rgb(245 158 11 / .35); }
}

/* ------------------------------- 8b. RESUMO DO CLIENTE (painel lateral) */
/* Card no topo de "Atributos do contato" — dado que o CRM ja grava no
   custom_attributes do contato (LTV/pedidos/ultimo produto), so falta ler e
   dar hierarquia. Usa a primitiva .ag-card (sem blur — e um elemento so,
   podia levar .ag-glass, mas fica consistente com os cards do Kanban). */

html.ag-theme .ag-resumo-card {
  margin: 0 16px 14px;
  padding: 14px;
  border-radius: var(--ag-r-md);
  background: rgb(var(--ag-tint) / calc(var(--ag-tint-a) * 1.05));
  display: flex;
  flex-direction: column;
  gap: 12px;
  animation: ag-arrive var(--ag-med) var(--ag-glide) both;
}

html.ag-theme .ag-resumo-status {
  display: flex;
  align-items: center;
  gap: 7px;
}
html.ag-theme .ag-resumo-dot {
  width: 7px; height: 7px; border-radius: 999px;
  background: rgb(16 185 129);
  box-shadow: 0 0 0 3px rgb(16 185 129 / .18);
  flex-shrink: 0;
}
html.ag-theme .ag-resumo-label {
  font-size: 12.5px;
  font-weight: 650;
  color: rgb(16 185 129);
}

html.ag-theme .ag-resumo-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
html.ag-theme .ag-resumo-stat .n {
  font-size: 17px;
  font-weight: 700;
  letter-spacing: -.01em;
  font-variant-numeric: tabular-nums;
  color: rgb(var(--ag-ink));
}
html.ag-theme .ag-resumo-stat .l {
  font-size: 10.5px;
  color: rgb(var(--ag-ink-soft));
  text-transform: uppercase;
  letter-spacing: .04em;
  margin-top: 1px;
}

html.ag-theme .ag-resumo-last {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 9px 10px;
  border-radius: var(--ag-r-sm);
  background: rgb(var(--ag-rim-lo) / calc(var(--ag-rim-lo-a) * .6));
  box-shadow: inset 0 0 0 1px rgb(var(--ag-rim-lo) / var(--ag-rim-lo-a));
}
html.ag-theme .ag-resumo-last-ic {
  width: 26px; height: 26px; border-radius: 7px; flex-shrink: 0;
  background: rgb(var(--ag-brand) / .16);
  display: grid; place-content: center; font-size: 12px;
}
html.ag-theme .ag-resumo-last-tx { min-width: 0; }
html.ag-theme .ag-resumo-last-tx .p {
  font-size: 12px; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: rgb(var(--ag-ink));
}
html.ag-theme .ag-resumo-last-tx .d {
  font-size: 10.5px; color: rgb(var(--ag-ink-soft));
}

html.ag-theme .ag-resumo-risk {
  display: flex; align-items: center; gap: 7px;
  font-size: 11.5px; font-weight: 600; color: rgb(245 158 11);
  background: rgb(245 158 11 / .12);
  box-shadow: inset 0 0 0 1px rgb(245 158 11 / .3);
  border-radius: var(--ag-r-sm); padding: 7px 9px;
}

/* Chips no cabecalho reaproveitam .ag-chip — so precisam do agrupamento
   visual (fica junto de qualquer outra faixa, IG/janela do WhatsApp, no
   mesmo .ag-chip-strip). Nada de CSS extra alem do que ag-chip ja da. */

/* ---------------------------------------------------- 9. AVISOS / TOASTS */

html.ag-theme .ag-toast {
  position: fixed;
  left: 50%;
  bottom: 26px;
  translate: -50% 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: 90vw;
  padding: 10px 16px;
  border-radius: 999px;
  font-size: 13px;
  color: rgb(var(--ag-ink));
  opacity: 0;
  transform: translateY(12px) scale(.96);
  filter: blur(6px);
  transition: opacity var(--ag-med) var(--ag-glide),
              transform var(--ag-med) var(--ag-spring),
              filter var(--ag-med) var(--ag-glide);
}
html.ag-theme .ag-toast.ag-on { opacity: 1; transform: none; filter: blur(0); }
html.ag-theme .ag-toast--err { box-shadow: inset 0 0 0 1px rgb(229 70 102 / .5), var(--ag-sh-cast); }

/* ------------------------------------------------ 10. POPOVERS / MODAIS */
/* Aqui o vidro e gratuito e correto: eles ficam MESMO por cima de conteudo. */

html.ag-theme [role="dialog"],
html.ag-theme .ag-glass-pop {
  border-radius: var(--ag-r-lg);
}

/* Fundo escurecido atras de um modal: 1 instancia por vez quando aberto,
   entao o blur aqui e de graca — reforca a hierarquia (o que importa agora
   e o modal, o resto desfoca). Usado no Kanban/Follow-up (modais proprios,
   fora do Vue do Chatwoot). */
html.ag-theme .ag-modal-backdrop {
  -webkit-backdrop-filter: blur(6px) saturate(1.15);
  backdrop-filter: blur(6px) saturate(1.15);
}

/* Fundo de QUALQUER modal nativo do Chatwoot (.modal-mask, componente
   Modal.vue global — contatos, macros, o lightbox de imagem/video etc.). Uma
   instancia por vez quando aberto, entao o blur sai de graca aqui tambem. */
html.ag-theme .modal-mask {
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
  backdrop-filter: blur(10px) saturate(1.2);
  background: rgb(0 0 0 / .35) !important;
}

/* Lightbox de imagem/video (GalleryView.vue) — ja vem com zoom/rotacao/pan
   nativos (achado lendo o componente, nao um placeholder simples como
   parecia); a melhoria aqui e so de acabamento: header/footer ganham vidro
   de verdade (a imagem passa atras ao arrastar/dar zoom) em vez de bloco
   solido, com anel de luz na borda. Selecionado pelas classes Tailwind reais
   do componente (nao minificadas — sobrevivem ao build), sem precisar de JS. */
html.ag-theme div.flex.flex-col.overflow-hidden.select-none.bg-n-background {
  background: rgb(var(--ag-ink) / .04) !important;
}
html.ag-theme header.z-10.bg-n-background.border-b.border-n-weak,
html.ag-theme footer.z-10.border-t.border-n-weak {
  background: rgb(var(--ag-tint) / .82) !important;
  -webkit-backdrop-filter: blur(18px) saturate(1.6);
  backdrop-filter: blur(18px) saturate(1.6);
}
html.ag-theme header.z-10.bg-n-background.border-b.border-n-weak {
  box-shadow: inset 0 -1px 0 rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .5));
}
html.ag-theme footer.z-10.border-t.border-n-weak {
  box-shadow: inset 0 1px 0 rgb(var(--ag-rim-hi) / calc(var(--ag-rim-hi-a) * .5));
}
/* botoes de zoom/girar/baixar/fechar: mesma resposta elastica do resto do tema */
html.ag-theme header.z-10.bg-n-background.border-b.border-n-weak button {
  transition: transform var(--ag-fast) var(--ag-spring), background-color var(--ag-fast) var(--ag-glide);
}
html.ag-theme header.z-10.bg-n-background.border-b.border-n-weak button:active { transform: scale(.90); }

/* --------------------------------------------------- 11. SCROLL E FOCO */

html.ag-theme .conversation-panel::-webkit-scrollbar,
html.ag-theme .conversations-list::-webkit-scrollbar { width: 10px; }
html.ag-theme .conversation-panel::-webkit-scrollbar-thumb,
html.ag-theme .conversations-list::-webkit-scrollbar-thumb {
  border: 3px solid transparent;
  background-clip: content-box;
  border-radius: 999px;
  background-color: rgb(var(--ag-scroll) / var(--ag-scroll-a));
}
html.ag-theme .conversation-panel::-webkit-scrollbar-thumb:hover,
html.ag-theme .conversations-list::-webkit-scrollbar-thumb:hover {
  background-color: rgb(var(--ag-scroll) / calc(var(--ag-scroll-a) * 2));
}
html.ag-theme .conversation-panel::-webkit-scrollbar-track,
html.ag-theme .conversations-list::-webkit-scrollbar-track { background: transparent; }

/* Foco visivel — acessibilidade, e tambem quem navega no teclado ganha tempo */
html.ag-theme :focus-visible {
  outline: 2px solid rgb(var(--ag-brand));
  outline-offset: 2px;
  border-radius: var(--ag-r-sm);
}

/* --------------------------------------------------- 12. MOVIMENTO REDUZIDO */
/* Luz que se move e parada num canto qualquer parece bug. Estaciona no neutro. */

@media (prefers-reduced-motion: reduce) {
  html.ag-theme * ,
  html.ag-theme *::before,
  html.ag-theme *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
  html.ag-theme { --ag-lx: 50%; --ag-ly: 0%; }
  html.ag-theme .message-bubble-container { animation: none; }
}
