/* JADE — extensões de tela do design system (prefixo jx-)
   Painel do gestor e Meu painel: faixa do dia, arco da meta, corrida do mês,
   lista de ações, fila do salão e mini-números. Só usa tokens de variaveis.css,
   então o tema escuro vem de graça. Carrega depois de jade-ui.css. */

/* ---------- cabeçalho e utilitários do painel ---------- */
.painel-x .pagina-cab h2 { font-size: 28px; line-height: 34px; letter-spacing: -0.025em; }
.painel-x .card { min-width: 0; }
.painel-x .card.coluna { display: flex; flex-direction: column; }
.painel-x .mt-auto { margin-top: auto; }
.painel-x .card-titulo .badge { flex-shrink: 0; }
.jx-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.jx-tres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.jx-quatro { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.jx-caixa { min-width: 0; padding: 12px; border-radius: var(--raio-s); background: var(--superficie-2); }
.jx-caixa .tx-numero-kpi { display: block; margin-top: 8px; }
.jx-caixa .tx-legenda { color: var(--texto-suave); }
.jx-num { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.jx-num .tx-legenda { color: var(--texto-suave); }
.jx-num .tx-numero-kpi { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-sep { height: 1px; background: var(--borda); margin: 16px 0; }
.jx-sub { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.jx-ponto-leg { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 5px; vertical-align: middle; }
.jx-oport { cursor: pointer; color: var(--texto); text-decoration: none; }
.jx-oport:hover { color: var(--texto); }
.jx-oport .oport-topo { flex-direction: column; gap: 2px; }

/* ---------- A. arco da meta ---------- */
.jx-arco { position: relative; width: min(440px, 100%); margin: 0 auto; }
.jx-arco svg { display: block; width: 100%; height: auto; overflow: visible; }
.jx-arco-trilha { stroke: var(--neutro-suave); }
.jx-arco-fill { stroke: var(--marca-amarelo); stroke-dasharray: 100; stroke-dashoffset: calc(100 - var(--p, 0)); }
.jx-arco-ritmo { transform: rotate(var(--ang, 0deg)); transform-box: view-box; transform-origin: 130px 130px; }
.jx-arco-ritmo line { stroke: var(--texto); }
.jx-arco-texto { position: absolute; left: 0; right: 0; bottom: 0; text-align: center; }
.jx-arco-texto .tx-numero-heroi { display: block; white-space: nowrap; }
.jx-arco-texto .tx-legenda { display: block; margin-top: 2px; }
.jx-arco-texto .tx-legenda { color: var(--texto-suave); }
.jx-ritmo { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 8px 12px; margin-top: 10px; text-align: center; }
.jx-ritmo .tx-legenda { color: var(--texto-suave); }
.jx-fatos { display: grid; grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr)); gap: 10px 16px; margin: 14px 0 0; padding-top: 14px; border-top: 1px solid var(--borda); }
.jx-fatos > div { min-width: 0; }
.jx-fatos .tx-legenda, .jx-fatos dt { display: block; color: var(--texto-suave); }
.jx-fatos dd, .jx-fatos .jx-fato { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin: 2px 0 0; font-size: 15px; line-height: 20px; font-weight: 650; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; }
.jx-fatos small { font-size: 12px; font-weight: 500; color: var(--texto-suave); }

/* ---------- B. faixa do dia ---------- */
.jx-hoje { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 24px; align-items: center; }
.jx-dia { position: relative; height: 72px; margin-top: 26px; }
.jx-dia-linha { position: absolute; left: 0; right: 0; top: 40px; height: 2px; border-radius: 1px; background: var(--borda-forte); }
.jx-dia-hora { position: absolute; bottom: 0; transform: translateX(-50%); color: var(--texto-suave); white-space: nowrap; }
.jx-dia-hora::before { content: ""; position: absolute; left: 50%; top: -14px; width: 1px; height: 6px; background: var(--borda-forte); }
.jx-marco { position: absolute; top: 35px; width: 2px; height: 12px; margin-left: -1px; border-radius: 1px; background: var(--texto-suave); }
.jx-ev { position: absolute; top: 35px; width: 12px; height: 12px; margin-left: -6px; border-radius: 50%; box-sizing: border-box; background: var(--texto); box-shadow: 0 0 0 2px var(--superficie); cursor: default; }
.jx-ev-rua { background: var(--azul); }
.jx-ev-retorno { background: var(--primario); }
.jx-ev-aviso { background: var(--laranja); }
.jx-ev-venda { background: var(--verde); }
.jx-ev-futuro { background: var(--superficie); border: 2px solid var(--texto); }
.jx-ev-futuro.jx-ev-rua { border-color: var(--azul); }
.jx-ev-futuro.jx-ev-retorno { border-color: var(--primario); }
.jx-ev.vivo::after { content: ""; position: absolute; inset: -3px; border-radius: 50%; border: 2px solid currentColor; opacity: 0; }
.jx-ev-rua.vivo { color: var(--azul); }
.jx-ev.vivo { color: var(--texto); }
.jx-dia-agora { position: absolute; top: 20px; bottom: 0; width: 2px; margin-left: -1px; background: var(--marca-amarelo); z-index: 2; }
.jx-dia-agora::before { content: ""; position: absolute; left: 50%; top: 21px; width: 8px; height: 8px; margin: -4px 0 0 -4px; border-radius: 50%; background: var(--marca-amarelo); box-shadow: 0 0 0 2px var(--superficie); }
.jx-dia-agora::after { content: ""; position: absolute; left: 50%; top: 21px; width: 8px; height: 8px; margin: -4px 0 0 -4px; border-radius: 50%; border: 2px solid var(--marca-amarelo); opacity: 0; }
.jx-dia-etq { position: absolute; left: 50%; bottom: 100%; transform: translateX(-50%); margin-bottom: 2px; white-space: nowrap; }
.jx-dia-agora.na-direita .jx-dia-etq { left: auto; right: -2px; transform: none; }
.jx-dia-agora.na-esquerda .jx-dia-etq { left: -2px; transform: none; }
.jx-dia-legenda { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 10px; color: var(--texto-suave); }
.jx-dia-legenda span { display: inline-flex; align-items: center; gap: 6px; }
.jx-dia-legenda i { display: inline-block; width: 10px; height: 10px; border-radius: 50%; box-sizing: border-box; background: var(--texto); }
.jx-dia-legenda i.rua { background: var(--azul); }
.jx-dia-legenda i.retorno { background: var(--primario); }
.jx-dia-legenda i.futuro { background: var(--superficie); border: 2px solid var(--texto); }
.jx-dia-legenda i.marco { width: 2px; border-radius: 1px; background: var(--texto-suave); }
.jx-dia-vazia { position: absolute; left: 0; right: 0; top: 4px; text-align: center; color: var(--texto-suave); }
.jx-contadores { display: grid; grid-template-columns: repeat(var(--n, 4), minmax(88px, auto)); gap: 20px; padding-left: 24px; border-left: 1px solid var(--borda); }
.jx-contador { min-width: 0; color: inherit; text-decoration: none; border-radius: var(--raio-s); }
a.jx-contador:hover .tx-numero-kpi { color: var(--primario); }
.jx-contador span { display: block; }
.jx-contador .tx-legenda { color: var(--texto-suave); margin-bottom: 4px; white-space: nowrap; }
.jx-contador .tx-numero-kpi { font-size: 20px; line-height: 24px; }
.jx-contador.vermelho .tx-numero-kpi { color: var(--vermelho); }

/* ---------- C. pista do mês (corrida dos vendedores) ---------- */
.jx-pista-cab, .jx-raia { display: grid; grid-template-columns: 224px minmax(0, 1fr) 124px; align-items: center; gap: 16px; }
.jx-pista-cab { min-height: 24px; margin-bottom: 4px; color: var(--texto-suave); text-transform: uppercase; }
.jx-pista-cab > span:nth-child(2) { position: relative; height: 24px; }
.jx-raia { min-height: 56px; border-top: 1px solid var(--borda); }
.jx-raia-quem { display: flex; align-items: center; gap: 10px; min-width: 0; }
.jx-raia-nome { min-width: 0; }
.jx-raia-nome strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-raia-nome span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-raia.lider .rk-pos { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-pista { position: relative; height: 10px; border-radius: 999px; background: var(--neutro-suave); }
.jx-pista-fill { position: absolute; left: 0; top: 0; bottom: 0; width: var(--v, 0%); border-radius: 999px; background: var(--grafico-base); transform-origin: left center; }
.jx-raia.lider .jx-pista-fill { background: var(--marca-amarelo); }
.jx-pista-corredor { position: absolute; left: var(--v, 0%); top: 50%; transform: translate(-50%, -50%); box-shadow: 0 0 0 2px var(--superficie); }
.jx-pista-ritmo { position: absolute; top: -6px; bottom: -6px; width: 0; border-left: 1px dashed var(--borda-controle); }
.jx-pista-meta { position: absolute; right: 0; top: -7px; bottom: -7px; width: 0; border-left: 2px dashed var(--texto); }
.jx-pista-rotulo { position: absolute; top: 4px; white-space: nowrap; transform: translateX(-50%); color: var(--texto-suave); }
.jx-pista-rotulo.fim { transform: translateX(-100%); }
.jx-raia-valor { text-align: right; }
.jx-raia-valor strong { display: block; font-size: 14px; line-height: 20px; font-weight: 650; letter-spacing: -0.01em; }
.jx-raia-valor span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); }

/* ---------- D. fila do salão agora (cartão tinta) ---------- */
.jx-vez { display: block; padding: 16px; border-radius: var(--raio-l); color: var(--texto-inverso); text-decoration: none; background: radial-gradient(360px 160px at 100% 0%, color-mix(in srgb, var(--marca-amarelo) 14%, transparent), transparent 70%), var(--escuro); transition: transform var(--dur-base) var(--curva-saida), box-shadow var(--dur-base); }
.jx-vez:hover { color: var(--texto-inverso); transform: scale(1.02); box-shadow: var(--sombra-media); }
.jx-vez-pessoa { display: flex; align-items: center; gap: 14px; min-width: 0; }
.jx-vez-avatar { box-shadow: 0 0 0 3px var(--escuro), 0 0 0 5px var(--marca-amarelo); }
.jx-vez-rotulo { display: block; text-transform: uppercase; color: var(--marca-amarelo); }
.jx-vez-nome { display: block; margin-top: 2px; font-size: 20px; line-height: 26px; font-weight: 700; letter-spacing: -0.02em; color: var(--texto-inverso); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-vez-status { display: block; margin-top: 2px; font-size: 12.5px; line-height: 17px; color: var(--lateral-texto); }
.jx-vez .fv-seq { justify-content: flex-start; margin-top: 8px; }
.jx-vez .fv-seq-rotulo { display: block; margin-top: 14px; margin-bottom: 6px; }
.jx-mini { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 16px; }
.jx-mini > div { padding: 10px 12px; border-radius: var(--raio-s); background: var(--superficie-2); min-width: 0; }
.jx-mini .tx-legenda, .jx-mini .tx-numero-kpi { display: block; }
.jx-mini .tx-legenda { color: var(--texto-suave); margin-bottom: 2px; }
.jx-mini .tx-numero-kpi { font-size: 20px; line-height: 24px; }
.jx-mini .kpi-delta { margin-top: 4px; }

/* ---------- E. apoio dos gráficos e dos KPIs ---------- */
.jx-fatos-grafico { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 16px; margin-top: auto; padding-top: 12px; border-top: 1px solid var(--borda); }
.jx-fatos-grafico > div { min-width: 0; }
.jx-fatos-grafico span { display: block; }
.jx-fatos-grafico .tx-legenda { color: var(--texto-suave); }
.jx-fatos-grafico strong { display: block; font-size: 15px; line-height: 20px; font-weight: 650; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-pedidos-barra { display: flex; height: 6px; gap: 2px; border-radius: 999px; overflow: hidden; }
.jx-pedidos-barra i { display: block; height: 100%; background: var(--av, var(--grafico-base)); }
.jx-pedidos-legenda { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; color: var(--texto-suave); }
.jx-pedidos-legenda i { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 4px; background: var(--av, var(--grafico-base)); vertical-align: middle; }
.jx-funil-mini { display: flex; gap: 2px; height: 6px; border-radius: 999px; overflow: hidden; }
.jx-funil-mini i { display: block; height: 100%; transform-origin: left center; }
.jx-pips { display: flex; gap: 4px; }
.jx-pips i { display: block; width: 14px; height: 10px; border-radius: 3px; background: var(--marca-amarelo); }
.jx-pips i.sem { background: var(--neutro-suave); }
.jx-pips i.hoje { background: var(--superficie); border: 1.5px solid var(--borda-controle); }
.jx-empilhada { display: flex; height: 8px; border-radius: 999px; overflow: hidden; background: var(--neutro-suave); }
.jx-empilhada i { display: block; height: 100%; width: var(--v, 0%); transform-origin: left center; }
.jx-barra-fina { height: 6px; border-radius: 999px; background: var(--escuro-3); overflow: hidden; }
.jx-barra-fina i { display: block; height: 100%; width: var(--v, 0%); border-radius: inherit; transform-origin: left center; }
.kpi .kpi-extra .tx-legenda { color: var(--texto-suave); }
.kpi-extra .prog-rotulos { margin-bottom: 4px; }
.kpi .faisca { display: block; width: 100%; height: 32px; }

/* ---------- F. lista de ações e itens ---------- */
.jx-acao { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto auto; gap: 12px; align-items: center; margin: 0 -10px; padding: 8px 10px; border-radius: var(--raio-s); transition: background var(--dur-rapida); }
.jx-acao:hover { background: var(--superficie-2); }
.jx-acao + .jx-acao { box-shadow: inset 0 1px 0 var(--borda); }
.jx-acao .prazo { white-space: nowrap; }
.jx-acoes { display: flex; gap: 4px; align-items: center; justify-content: flex-end; }
.jx-item { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 10px 0; }
.jx-item + .jx-item { border-top: 1px solid var(--borda); }
.jx-item .at-texto strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-item-acoes { grid-column: 2 / -1; display: flex; gap: 6px; }

/* ---------- G. minha fila (sequência de vendedores) ---------- */
.jx-seq { position: relative; display: grid; grid-template-columns: repeat(auto-fit, minmax(72px, 1fr)); gap: 4px; margin-top: 12px; padding-top: 6px; }
.jx-seq::before { content: ""; position: absolute; left: 12%; right: 12%; top: 26px; height: 0; border-top: 1px dashed var(--lateral-texto-suave); }
.jx-seq-item { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; min-width: 0; }
.jx-seq-item .avatar { box-shadow: 0 0 0 3px var(--escuro); }
.jx-seq-item.voce .avatar { box-shadow: 0 0 0 3px var(--escuro), 0 0 0 5px var(--marca-amarelo); }
.jx-seq-item strong { display: block; max-width: 100%; font-size: 12px; line-height: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--texto-inverso); }
.jx-seq-item .jx-seq-sub { display: block; max-width: 100%; font-size: 11px; line-height: 14px; color: var(--lateral-texto); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-seq-pos { position: absolute; top: 0; left: 50%; margin-left: 8px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--escuro-3); color: var(--lateral-texto); font-size: 10px; line-height: 18px; font-weight: 700; box-shadow: 0 0 0 2px var(--escuro); }
.jx-seq-item.voce .jx-seq-pos { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-vez-titulo { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.jx-vez-titulo strong { font-size: 20px; line-height: 26px; font-weight: 700; letter-spacing: -0.02em; white-space: nowrap; }
.sobre-escuro { background: var(--escuro); border-color: var(--escuro-borda); color: var(--texto-inverso); }
.sobre-escuro .card-titulo h3, .sobre-escuro .tx-corpo-forte, .sobre-escuro strong { color: var(--texto-inverso); }
.sobre-escuro .card-sub, .sobre-escuro .tx-legenda, .sobre-escuro .prog-rotulos { color: var(--lateral-texto); }
.sobre-escuro .link-acao { color: var(--marca-amarelo); }
.sobre-escuro .link-acao:hover { color: var(--texto-inverso); }
.sobre-escuro .tx-sobrelinha { color: var(--lateral-texto-suave); }
.sobre-escuro .btn-vazado { border-color: var(--escuro-3); color: var(--texto-inverso); }
.sobre-escuro .btn-vazado:hover { background: var(--escuro-2); color: var(--texto-inverso); }
.sobre-escuro .vazio { background: transparent; border-color: var(--escuro-3); color: var(--lateral-texto); }

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jx-desenhar { from { stroke-dashoffset: 100; } }
  @keyframes jx-girar-ritmo { from { transform: rotate(0deg); } }
  @keyframes jx-entrar { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
  @keyframes jx-pulsar { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(3.2); opacity: 0; } }
  @keyframes jx-pulsar-leve { 0% { transform: scale(1); opacity: .8; } 100% { transform: scale(2.2); opacity: 0; } }
  @keyframes jx-crescer { from { transform: scaleX(0); } to { transform: scaleX(1); } }
  @keyframes jx-aparecer { from { opacity: 0; } to { opacity: 1; } }
  .jx-arco-fill { animation: jx-desenhar var(--dur-narrativa) var(--curva-saida) both; animation-delay: 120ms; }
  .jx-arco-ritmo { animation: jx-girar-ritmo var(--dur-narrativa) var(--curva-saida) both; animation-delay: 120ms; }
  .jx-ev, .jx-marco { animation: jx-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 150ms); }
  .jx-ev.vivo::after { animation: jx-pulsar-leve 2s var(--curva-saida) infinite; }
  .jx-dia-agora::after { animation: jx-pulsar 2.2s var(--curva-saida) infinite; }
  .jx-pista-fill { animation: jx-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 90ms + 150ms); }
  .jx-pista-corredor { animation: jx-aparecer var(--dur-lenta) var(--curva-padrao) both; animation-delay: calc(var(--i, 0) * 90ms + 600ms); }
  .jx-pedidos-barra i, .jx-funil-mini i, .jx-empilhada i, .jx-barra-fina i { animation: jx-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 80ms + 200ms); }
  .jx-acao, .jx-item, .jx-raia { animation: jx-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 200ms); }
  .jx-pips i { animation: jx-aparecer var(--dur-base) var(--curva-padrao) both; animation-delay: calc(var(--i, 0) * 60ms + 200ms); }
  .jx-seq-item { animation: jx-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 90ms + 240ms); }
}

/* ---------- responsivo ---------- */
@media (max-width: 900px) {
  .jx-hoje { grid-template-columns: minmax(0, 1fr); }
  .jx-contadores { grid-template-columns: repeat(var(--n, 4), minmax(0, 1fr)); gap: 12px; padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--borda); }
}
@media (max-width: 640px) {
  .painel-x .pagina-cab h2 { font-size: 22px; line-height: 28px; }
  /* KPI no celular: ícone em cima, número inteiro embaixo (duas colunas estreitas não cortam o valor) */
  .kpi { grid-template-columns: minmax(0, 1fr); grid-template-areas: "icone" "info"; row-gap: 8px; padding: 12px 14px; }
  .kpi-icone { width: 28px; height: 28px; }
  .kpi-valor { font-size: 22px; line-height: 28px; }
  .kpi-rotulo { margin-bottom: 6px; }
  .jx-contadores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .jx-dia-hora-impar { display: none; }
  .jx-arco .tx-numero-heroi { font-size: 34px; line-height: 40px; }
  .jx-fatos-grafico { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .jx-fatos { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .jx-pista-cab, .jx-raia { grid-template-columns: minmax(0, 1fr) auto; gap: 8px 12px; }
  .jx-pista-cab > span:nth-child(2) { display: none; }
  .jx-raia .jx-pista { order: 3; grid-column: 1 / -1; margin: 2px 0 10px; }
  .jx-acao { grid-template-columns: 32px minmax(0, 1fr); row-gap: 8px; }
  .jx-acao > .prazo, .jx-acao > .jx-acoes { grid-column: 2; justify-content: flex-start; }
  .jx-quatro { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* cartão de oportunidade dentro da grade de 2: cabe na coluna e o nome quebra */
  .jx-quatro .oport { min-width: 0; }
  .jx-quatro .oport-nome { white-space: normal; overflow-wrap: anywhere; }
  /* funil em barras: o valor vai para a linha de baixo da contagem (a 390px não cabe ao lado) */
  .painel-x .fb-valor small { display: block; margin-left: 0; }
  .jx-tres { gap: 10px; }
  .jx-tres .tx-numero-kpi { font-size: 18px; line-height: 24px; }
  .jx-mini { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
  .jx-mini > div { padding: 8px 10px; }
  .jx-mini .tx-numero-kpi { font-size: 18px; }
}

/* ===== telas redesenhadas ===== */

/* ---------- crm ---------- */
/* JADE — estilos da tela crm (prefixo jx-, escopados em .jx-crm)
 * A raiz da tela é <div class="pagina jx-crm">; o modal do lead recebe a
 * mesma classe (fica fora da página, no body). */

/* ---- tag de fase (MQL · SQL · Vendas · Perdidos): CRM e Painel ---- */
.jx-fase-tag { display: inline-flex; align-items: center; height: 18px; padding: 0 7px; border-radius: var(--raio-pill); font-size: 10.5px; line-height: 1; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; background: var(--neutro-suave); color: var(--texto-suave); }
.jx-fase-tag.mql { background: var(--roxo-suave); color: var(--roxo); }
.jx-fase-tag.sql { background: var(--azul-suave); color: var(--azul); }
.jx-fase-tag.venda, .jx-fase-tag.ok { background: var(--verde-suave); color: var(--verde); }
.jx-fase-tag.perdido, .jx-fase-tag.alerta { background: var(--vermelho-suave); color: var(--vermelho); }
.jx-caixa .jx-fase-tag { width: max-content; }

/* ---- faixa das fases: MQL → SQL → Vendas (coorte do período) ---- */
.jx-crm .jx-fases-card { margin-bottom: 16px; }
.jx-crm .jx-fases { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto minmax(0, 1fr) minmax(0, .9fr); gap: 10px; align-items: stretch; }
.jx-crm .jx-fase { min-width: 0; display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); box-shadow: inset 3px 0 0 var(--texto-suave); }
.jx-crm .jx-fase.mql { box-shadow: inset 3px 0 0 var(--roxo); }
.jx-crm .jx-fase.sql { box-shadow: inset 3px 0 0 var(--azul); }
.jx-crm .jx-fase.venda { box-shadow: inset 3px 0 0 var(--verde); }
.jx-crm .jx-fase.perdido { box-shadow: inset 3px 0 0 var(--vermelho); }
.jx-crm .jx-fase-topo { display: flex; align-items: center; gap: 8px; min-width: 0; }
.jx-crm .jx-fase-nome { min-width: 0; font-size: 12.5px; line-height: 16px; font-weight: 600; color: var(--texto); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-crm .jx-fase-num { font-size: 28px; line-height: 32px; font-weight: 700; letter-spacing: -.02em; color: var(--texto); }
.jx-crm .jx-fase.venda .jx-fase-num { color: var(--verde); }
.jx-crm .jx-fase.perdido .jx-fase-num { color: var(--texto-suave); }
.jx-crm .jx-fase-sub { font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-crm .jx-fase-seta { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; min-width: 76px; padding: 0 4px; color: var(--texto-suave); font-size: 11.5px; line-height: 14px; text-align: center; }
.jx-crm .jx-fase-seta .ico { width: 18px; height: 18px; margin-bottom: 2px; }
.jx-crm .jx-fase-seta b { font-size: 15px; line-height: 18px; font-weight: 700; color: var(--texto); }
.jx-crm .jx-fases-rodape { margin: 10px 0 0; }
@media (max-width: 900px) {
  .jx-crm .jx-fases { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }
  .jx-crm .jx-fase.mql, .jx-crm .jx-fase.sql, .jx-crm .jx-fase-seta { grid-column: 1 / -1; }
  .jx-crm .jx-fase-seta { flex-direction: row; justify-content: flex-start; gap: 6px; min-width: 0; padding: 0 4px; }
  .jx-crm .jx-fase-seta .ico { transform: rotate(90deg); margin: 0; }
}
@media (max-width: 640px) {
  .jx-crm .jx-fase.venda .jx-fase-nome, .jx-crm .jx-fase.perdido .jx-fase-nome { display: none; }
  .jx-crm .jx-fase.venda .jx-fase-sub, .jx-crm .jx-fase.perdido .jx-fase-sub { white-space: normal; }
}

/* cabeçalho da coluna de fase: contagem por etapa fina numa linha própria */
.jx-crm .fc-cab .jx-fase-tag { flex-shrink: 0; }
.jx-crm .fc-sub { order: 10; flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 2px 10px; margin-top: 2px; font-size: 11.5px; line-height: 16px; color: var(--texto-suave); }
.jx-crm .fc-sub b { font-weight: 650; color: var(--texto); font-variant-numeric: tabular-nums; }
.jx-crm .fc-sub .zero, .jx-crm .fc-sub .zero b { font-weight: 500; color: var(--texto-suave); }

/* cartão: pílula da etapa fina (clicável), espera sem contato, qualificação e WhatsApp rápido */
.jx-crm .jx-subetapa { display: inline-flex; align-items: center; gap: 5px; height: 20px; padding: 0 8px 0 7px; border: 1px solid var(--borda); border-radius: var(--raio-pill); background: var(--superficie); color: var(--texto); font: inherit; font-size: 11.5px; line-height: 1; font-weight: 600; white-space: nowrap; cursor: pointer; transition: border-color var(--dur-rapida), background var(--dur-rapida); }
.jx-crm .jx-subetapa::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--c, var(--etapa-1)); flex-shrink: 0; }
.jx-crm button.jx-subetapa:hover { border-color: var(--primario); background: var(--primario-suave); }
.jx-crm .jx-subetapa.estatica { cursor: default; color: var(--texto-suave); }
.jx-crm .jx-subetapa.estatica::before { background: var(--vermelho); }
.jx-crm .jx-espera .ico { width: 12px; height: 12px; }
.jx-crm .oport-rodape .jx-whats { margin-left: auto; width: 24px; height: 24px; border-radius: 6px; }
.jx-crm .oport-rodape .jx-whats .ico { width: 14px; height: 14px; }
.jx-crm .oport-rodape .jx-whats + .oport-mover { margin-left: 2px; }
.jx-crm .jx-etapa-fase { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.jx-crm .jx-etapas-grupo { margin-bottom: 14px; }
.jx-crm .jx-etapas-fase { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font-size: 12.5px; color: var(--texto-suave); }

/* cabeçalho da coluna: o nome da etapa quebra em até 2 linhas em vez de ser
 * cortado ("Orçamento enviado" cabe em seis colunas); quantidade e + nunca
 * encolhem; o total (com mês e ticket médio) pode quebrar de linha */
.jx-crm .fc-cab { align-items: center; }
.jx-crm .fc-nome { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
.jx-crm .fc-qtd, .jx-crm .fc-add { flex-shrink: 0; }
.jx-crm .fc-total { min-width: 0; white-space: normal; }
.jx-crm .fc-vazia { margin: 0 0 4px; }

/* filtros com select embutido (Vendedor: Todos · Origem: Todas) */
.jx-crm .filtro select {
  height: auto; min-height: 0; width: auto; max-width: 160px; padding: 0 16px 0 0; margin: 0;
  border: 0; border-radius: 0; background-color: transparent; box-shadow: none;
  font: inherit; font-size: 13px; font-weight: 600; color: inherit; cursor: pointer;
  background-position: right 0 center;
}
.jx-crm .filtro select:focus { outline: none; box-shadow: none; }
.jx-crm .filtro:focus-within { border-color: var(--primario); }
.jx-crm .barra-ferramentas .check { height: 34px; }

/* tabela de follow-ups dentro do card: sem moldura dupla, ocupa a largura do card */
.jx-crm .card > .jx-tabela > .tabela-scroll { margin: 0 -20px -20px; width: calc(100% + 40px); border: 0; border-radius: 0 0 var(--raio) var(--raio); box-shadow: none; border-top: 1px solid var(--borda); }
.jx-crm .jx-contato { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; }
.jx-crm .jx-contato strong { font-size: 13px; line-height: 18px; font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.jx-crm .jx-vendedor { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; min-width: 0; }
.jx-crm .jx-vendedor a { color: inherit; }
/* celular: a oportunidade vira o título do cartão (largura toda, sem rótulo),
 * com espaço à direita para os ícones de ação — nada fica por cima de nada */
@media (max-width: 640px) {
  .jx-crm .jx-tabela-fu .tabela-responsiva td:nth-child(2) { grid-column: 1 / -1; order: -1; padding-right: 64px; }
  .jx-crm .jx-tabela-fu .tabela-responsiva td:nth-child(2)::before { display: none; }
  .jx-crm .jx-tabela-fu .tabela-responsiva td:last-child { right: 10px; }
}

/* origem + aniversariantes lado a lado no mesmo card; empilha no celular */
.jx-crm .jx-duas { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 0 28px; }
.jx-crm .jx-duas > div { min-width: 0; }
.jx-crm .jx-duas-lado { border-left: 1px solid var(--borda); padding-left: 28px; }
@media (max-width: 900px) {
  .jx-crm .jx-duas { grid-template-columns: minmax(0, 1fr); gap: 20px 0; }
  .jx-crm .jx-duas-lado { border-left: 0; padding-left: 0; border-top: 1px solid var(--borda); padding-top: 20px; }
}

/* de onde vêm os leads: tabela Origem · MQL · SQL · Vendas · Vendido, com a
 * barra (quantos leads a origem traz) embaixo do nome */
.jx-crm .jx-origens { width: 100%; border-collapse: collapse; font-size: 13px; line-height: 18px; }
.jx-crm .jx-origens th { padding: 0 0 8px 12px; border-bottom: 1px solid var(--borda); font-size: 11px; line-height: 14px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--texto-suave); text-align: right; white-space: nowrap; }
.jx-crm .jx-origens td { padding: 8px 0 8px 12px; border-bottom: 1px solid var(--borda); text-align: right; vertical-align: top; white-space: nowrap; font-weight: 650; font-variant-numeric: tabular-nums; }
.jx-crm .jx-origens th:first-child, .jx-crm .jx-origens td:first-child { padding-left: 0; text-align: left; font-weight: 500; width: 40%; }
.jx-crm .jx-origens tbody tr:last-child td { border-bottom: 0; padding-bottom: 0; }
.jx-crm .jx-origens td small { display: block; font-size: 11px; line-height: 14px; font-weight: 500; color: var(--texto-suave); }
.jx-crm .jx-origem-rotulo { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
.jx-crm .jx-origem-rotulo .ico { width: 14px; height: 14px; color: var(--texto-suave); }
.jx-crm .jx-origem-trilha { display: block; height: 6px; margin-top: 5px; overflow: hidden; border-radius: 999px; background: var(--neutro-suave); }
.jx-crm .jx-origem-fill { display: block; height: 100%; width: var(--v, 0%); border-radius: inherit; background: var(--texto); transform-origin: left center; }
@media (max-width: 640px) {
  .jx-crm .jx-origens td small { display: none; }
  .jx-crm .jx-origens td:first-child, .jx-crm .jx-origem-rotulo { white-space: normal; }
  .jx-crm .jx-origens th, .jx-crm .jx-origens td { padding-left: 6px; }
  .jx-crm .jx-origens th, .jx-crm .jx-origens td { padding-left: 8px; }
}

/* aniversariantes (lista lateral) */
.jx-crm .jx-aniv { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--borda); }
.jx-crm .jx-aniv:last-child { border-bottom: 0; padding-bottom: 0; }
.jx-crm .jx-aniv:first-child { padding-top: 0; }
.jx-crm .jx-aniv-info { flex: 1; min-width: 0; }
.jx-crm .jx-aniv-info strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-crm .jx-aniv-info strong a { color: inherit; text-decoration: none; }
.jx-crm .jx-aniv-info strong a:hover { color: var(--primario-forte); }
.jx-crm .jx-aniv-info span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-crm .jx-aniv .btn-icone { flex-shrink: 0; }

/* ---- modal do lead: formulário à esquerda, prévia à direita ---- */
.jx-crm.jx-lead .modal-cab > div { min-width: 0; }
.jx-crm.jx-lead .modal-corpo { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 0 24px; padding-top: 20px; }
@media (max-width: 900px) { .jx-crm.jx-lead .modal-corpo { grid-template-columns: minmax(0, 1fr); } }
.jx-crm .jx-lead-col { min-width: 0; }
.jx-crm .jx-fieldset { border: 0; padding: 0; margin: 0 0 16px; min-width: 0; }
.jx-crm .jx-fieldset legend { padding: 0; margin: 0 0 6px; }
.jx-crm .jx-quando { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.jx-crm .jx-quando input[type="date"] { width: 172px; }
.jx-crm .jx-obs-wrap { margin: -4px 0 12px; }
.jx-crm .jx-sugestoes { display: flex; flex-direction: column; gap: 2px; padding: 6px; margin: 2px 0 0; }
.jx-crm .jx-sugestao { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 40px; padding: 6px 10px; border: 0; border-radius: 7px; background: transparent; color: var(--texto); font: inherit; text-align: left; cursor: pointer; transition: background var(--dur-rapida), transform var(--dur-rapida) var(--curva-saida); }
.jx-crm .jx-sugestao:hover { background: var(--superficie); }
.jx-crm .jx-sugestao:active { transform: scale(.995); }
.jx-crm .jx-sugestao strong { min-width: 0; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-crm .jx-sugestao .jx-fone { font-size: 12.5px; line-height: 16px; color: var(--texto-suave); font-variant-numeric: tabular-nums; white-space: nowrap; }
.jx-crm .jx-sugestao .tag { margin-left: auto; }
.jx-crm .jx-sugestao[aria-pressed="true"] { background: var(--superficie); box-shadow: 0 0 0 1px var(--primario) inset; }
.jx-crm .jx-previa { padding: 16px; margin: 0 0 16px; }
.jx-crm .jx-previa .card-titulo { margin-bottom: 12px; }
.jx-crm .jx-previa .oport { cursor: default; user-select: text; }
.jx-crm .jx-previa-etapa { margin-left: auto; white-space: nowrap; }
.jx-crm .jx-enviar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin: -4px 0 16px; }
.jx-crm .jx-enviar .btn[aria-disabled="true"] { opacity: .55; }
.jx-crm .jx-depois { padding: 14px 16px; margin: 0 0 8px; }
.jx-crm .jx-depois .tx-sobrelinha { margin-bottom: 10px; color: var(--texto-suave); }
.jx-crm .jx-passos { display: flex; flex-direction: column; gap: 10px; }
.jx-crm .jx-passo { display: flex; align-items: flex-start; gap: 10px; font-size: 12.5px; line-height: 17px; color: var(--texto-suave); }
.jx-crm .jx-passo b { font-weight: 600; color: var(--texto); }
.jx-crm .jx-passo-ico { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--neutro-suave); color: var(--texto-suave); }
.jx-crm .jx-passo-ico .ico { width: 13px; height: 13px; }
.jx-crm .jx-passo.jx-feito .jx-passo-ico { background: var(--marca-amarelo); color: var(--sobre-amarelo); }

/* ---- micro-interações (só com movimento permitido) ----
 * A entrada dos cartões vale só enquanto a lane tem .jx-entrando (o módulo
 * tira a classe depois): assim o pouso do arrastar (.pousou) não briga com
 * a animação nem a reinicia. */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxcrm-entrar { from { opacity: 0; transform: translateY(8px); } }
  @keyframes jxcrm-crescer { from { transform: scaleX(0); } }
  .jx-crm .jx-lane.jx-entrando .oport:not(.arrastando):not(.pousou) { animation: jxcrm-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 220ms); }
  .jx-crm .jx-tabela tbody tr { animation: jxcrm-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: 260ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(2) { animation-delay: 305ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(3) { animation-delay: 350ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(4) { animation-delay: 395ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(5) { animation-delay: 440ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(6) { animation-delay: 485ms; }
  .jx-crm .jx-tabela tbody tr:nth-child(n+7) { animation-delay: 530ms; }
  .jx-crm .jx-origem-fill { animation: jxcrm-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 80ms + 300ms); }
  .jx-crm .jx-aniv { animation: jxcrm-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 320ms); }
  .jx-crm .jx-lead-col > * { animation: jxcrm-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(180ms + var(--i, 0) * 45ms); }
}

/* ---------- vendas ---------- */
/* JADE — estilos da tela vendas (prefixo jx-, escopados em .jx-vendas)
   Trilho de etapas (tabela e cartão do pedido), itens do pedido, orçamentos
   esfriando e descontos do mês. Só tokens de variaveis.css: o tema escuro vem
   de graça. Nada aqui redefine classe do design system. */

/* ---------- lista: vendedor, etapa e trilho mini ---------- */
.jx-vendas .jx-vend { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-size: 13px; line-height: 18px; }
.jx-vendas .jx-tm { display: inline-flex; align-items: center; flex-shrink: 0; }
.jx-vendas .jx-tm i { position: relative; display: block; width: 10px; height: 10px; border-radius: 50%; background: var(--neutro-suave); box-shadow: inset 0 0 0 1px var(--borda-forte); }
.jx-vendas .jx-tm i + i { margin-left: 12px; }
.jx-vendas .jx-tm i + i::before { content: ""; position: absolute; right: 100%; top: 4px; width: 12px; height: 2px; background: var(--neutro-suave); }
.jx-vendas .jx-tm i.feito { background: var(--marca-amarelo); box-shadow: none; }
.jx-vendas .jx-tm i.feito::before, .jx-vendas .jx-tm i.atual::before { background: var(--marca-amarelo); }
.jx-vendas .jx-tm i.atual { background: var(--superficie); box-shadow: inset 0 0 0 2px var(--marca-amarelo); }
.jx-vendas .jx-etapa { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; white-space: nowrap; }
.jx-vendas .jx-tabela th, .jx-vendas .jx-tabela td { padding-left: 12px; padding-right: 12px; }
.jx-vendas .jx-tabela tr.selecionada .acoes-linha .btn-icone { opacity: 1; }
.jx-vendas .jx-tabela .celula-principal { min-width: 0; }
.jx-vendas .jx-tabela .celula-principal > strong { font-variant-numeric: tabular-nums; }
.jx-vendas .jx-tabela .celula-principal > span { white-space: nowrap; }
.jx-vendas .jx-itens-cel { display: block; max-width: 180px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 13px; color: var(--texto); }
.jx-vendas .jx-cli { display: block; max-width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-vendas .jx-etapa .badge { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.jx-vendas .jx-tabela .acoes-linha a.btn-icone { color: var(--texto-suave); }
.jx-vendas .jx-tabela .acoes-linha a.btn-icone:hover { color: var(--texto); }
.jx-vendas .jx-tabela .acoes-linha a.btn-icone.whatsapp, .jx-vendas .jx-tabela .acoes-linha a.btn-icone.whatsapp:hover { color: var(--verde); }

/* ---------- trilho de etapas do pedido: círculos de 24px ligados por linha ---------- */
.jx-vendas .jx-trilho { position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin: 4px 0 18px; }
.jx-vendas .jx-trilho::before { content: ""; position: absolute; left: 10%; right: 10%; top: 11px; height: 2px; background: var(--neutro-suave); }
.jx-vendas .jx-trilho-feito { position: absolute; left: 10%; top: 11px; width: var(--feito, 0%); height: 2px; background: var(--marca-amarelo); transform-origin: left center; }
.jx-vendas .jx-passo { position: relative; display: flex; flex-direction: column; align-items: center; gap: 8px; min-width: 0; padding: 0 4px; text-align: center; }
.jx-vendas .jx-passo i { position: relative; z-index: 1; display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--neutro-suave); color: var(--texto-suave); box-shadow: 0 0 0 3px var(--superficie); }
.jx-vendas .jx-passo i .ico { width: 14px; height: 14px; stroke-width: 2.5; }
.jx-vendas .jx-passo.feito i { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-vendas .jx-passo.atual i { background: var(--superficie); box-shadow: 0 0 0 3px var(--superficie), inset 0 0 0 2px var(--marca-amarelo); }
.jx-vendas .jx-passo.atual i::after { content: ""; position: absolute; inset: -3px; border-radius: 50%; border: 2px solid var(--marca-amarelo); opacity: 0; }
.jx-vendas .jx-passo span { display: block; max-width: 100%; font-size: 12.5px; line-height: 16px; font-weight: 600; overflow-wrap: anywhere; }
.jx-vendas .jx-passo small { display: block; max-width: 100%; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); overflow-wrap: anywhere; }
.jx-vendas .jx-passo.atual span { color: var(--primario); }
.jx-vendas .jx-passo.futuro span { color: var(--texto-suave); }
.jx-vendas .card > .jx-trilho { margin-bottom: 6px; }

/* ---------- itens do pedido ---------- */
.jx-vendas .jx-itens { box-shadow: none; border-radius: var(--raio-s); }
.jx-vendas .jx-itens .tx-codigo { color: var(--texto-suave); margin-right: 6px; }
.jx-vendas .jx-itens tfoot td { padding: 8px 16px; background: var(--superficie-2); border-bottom: 0; font-weight: 600; color: var(--texto-suave); }
.jx-vendas .jx-itens tfoot tr:last-child td { font-size: 14px; font-weight: 700; color: var(--texto); border-top: 1px solid var(--borda); }
.jx-vendas .jx-acoes-ped { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 16px; }
.jx-vendas .jx-acoes-ped .jx-direita { margin-left: auto; }
.jx-vendas #ven-pedido .card-titulo h3 a { color: inherit; text-decoration: none; }
.jx-vendas #ven-pedido .card-titulo h3 a:hover { color: var(--primario); }
.jx-vendas #ven-pedido .card-titulo .badge { flex-shrink: 0; }

/* ---------- orçamentos esfriando ---------- */
.jx-vendas .jx-frio { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--borda); }
.jx-vendas .jx-frio:first-child { padding-top: 0; }
.jx-vendas .jx-frio:last-child { border-bottom: 0; }
.jx-vendas .jx-frio-info { min-width: 0; }
.jx-vendas .jx-frio-info strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-vendas .jx-frio-info strong a { color: inherit; text-decoration: none; }
.jx-vendas .jx-frio-info strong a:hover { color: var(--primario); }
.jx-vendas .jx-frio-info span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); }
.jx-vendas .jx-frio-info em { font-style: normal; font-weight: 600; color: var(--laranja); }
.jx-vendas .jx-frio-acoes { display: flex; align-items: center; gap: 4px; }

/* ---------- descontos do mês ---------- */
.jx-vendas .jx-desc-valor { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; min-width: 0; }
.jx-vendas .jx-desc-valor .tx-legenda { color: var(--texto-suave); }
/* "ritmo 59%" e o selo do ritmo ficam cada um numa peça só: nada de número quebrado ao lado do selo */
.jx-vendas .kpi-extra .prog-rotulos > span:first-child { white-space: nowrap; }
.jx-vendas .kpi-extra .prog-rotulos .badge { flex-shrink: 0; }

/* ---------- responsivo ---------- */
@media (min-width: 641px) and (max-width: 1366px) {
  /* em telas médias a coluna "Itens" sai (o cartão do pedido selecionado já lista os itens)
     para a tabela caber sem rolagem interna */
  .jx-vendas .jx-tabela th:nth-child(3), .jx-vendas .jx-tabela td:nth-child(3) { display: none; }
  .jx-vendas .jx-cli { max-width: 170px; }
}
@media (max-width: 1180px) {
  .jx-vendas .jx-itens-cel { max-width: 240px; }
}
@media (max-width: 640px) {
  /* o número do mês inteiro no celular: duas colunas estreitas cortavam o valor */
  .jx-vendas .grade-4 > .kpi:first-child { grid-column: 1 / -1; }
  .jx-vendas .prog-rotulos { flex-wrap: wrap; }
  .jx-vendas .jx-itens-cel, .jx-vendas .jx-cli { max-width: none; white-space: normal; }
  .jx-vendas .jx-etapa { white-space: normal; flex-direction: row; flex-wrap: wrap; align-items: center; }
  /* a etapa (selo + trilho) ocupa a largura toda do cartão: o selo não invade a célula vizinha */
  .jx-vendas .jx-tabela td[data-rotulo="Etapa"] { grid-column: 1 / -1; }
  .jx-vendas .jx-tabela td.celula-principal { padding-right: 104px; }
  .jx-vendas .jx-tabela .acoes-linha .btn-icone { opacity: 1; }
  .jx-vendas .jx-frio { grid-template-columns: 32px minmax(0, 1fr); }
  .jx-vendas .jx-frio-acoes { grid-column: 2; }
  .jx-vendas .jx-acoes-ped .jx-direita { margin-left: 0; }
  /* itens do pedido: nome em linha inteira e rodapé em linha (a tabela virou cartões) */
  .jx-vendas .jx-itens td[data-rotulo="Item"] { grid-column: 1 / -1; }
  .jx-vendas .jx-itens .tx-codigo { white-space: nowrap; }
  .jx-vendas .jx-itens tfoot { display: block; }
  .jx-vendas .jx-itens tfoot tr { display: flex; justify-content: space-between; gap: 12px; background: var(--superficie-2); }
  .jx-vendas .jx-itens tfoot tr:last-child { border-top: 1px solid var(--borda); }
  .jx-vendas .jx-itens tfoot td { display: block; border: 0; padding: 8px 14px; background: transparent; }
  /* trilho vira lista vertical: cinco colunas não cabem em 358px sem sobrepor texto */
  .jx-vendas .jx-trilho { grid-template-columns: minmax(0, 1fr); grid-auto-rows: 1fr; margin: 4px 0 12px; }
  .jx-vendas .jx-trilho::before { left: 11px; right: auto; top: 10%; bottom: 10%; width: 2px; height: auto; }
  .jx-vendas .jx-trilho-feito { left: 11px; top: 10%; width: 2px; height: var(--feito, 0%); transform-origin: center top; }
  .jx-vendas .jx-passo { display: grid; grid-template-columns: 24px minmax(0, 1fr); column-gap: 12px; row-gap: 0; align-items: center; padding: 6px 0; text-align: left; }
  .jx-vendas .jx-passo i { grid-row: 1 / span 2; }
  .jx-vendas .jx-passo span, .jx-vendas .jx-passo small { grid-column: 2; }
}

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxv-entrar { from { opacity: 0; transform: translateY(8px); } }
  @keyframes jxv-crescer-x { from { transform: scaleX(0); } }
  @keyframes jxv-crescer-y { from { transform: scaleY(0); } }
  @keyframes jxv-pulsar { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(1.7); opacity: 0; } }
  @keyframes jxv-pop { from { transform: scale(.3); } }
  .jx-vendas .jx-tabela tbody tr { animation: jxv-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 300ms); }
  .jx-vendas .jx-frio { animation: jxv-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 380ms); }
  .jx-vendas .jx-trilho-feito { animation: jxv-crescer-x var(--dur-narrativa) var(--curva-saida) both; animation-delay: 320ms; }
  .jx-vendas .jx-passo.atual i::after { animation: jxv-pulsar 2.4s var(--curva-saida) infinite; animation-delay: 1s; }
  .jx-vendas .jx-tm i.feito, .jx-vendas .jx-tm i.atual { animation: jxv-pop var(--dur-base) var(--curva-mola) backwards; animation-delay: calc(var(--i, 0) * 45ms + 420ms); }
  .jx-vendas .jx-tm i:nth-child(2) { animation-delay: calc(var(--i, 0) * 45ms + 480ms); }
  .jx-vendas .jx-tm i:nth-child(3) { animation-delay: calc(var(--i, 0) * 45ms + 540ms); }
  .jx-vendas .jx-tm i:nth-child(4) { animation-delay: calc(var(--i, 0) * 45ms + 600ms); }
}
@media (prefers-reduced-motion: no-preference) and (max-width: 640px) {
  .jx-vendas .jx-trilho-feito { animation-name: jxv-crescer-y; }
}

/* ---------- entregas ---------- */
/* JADE — estilos da tela entregas (prefixo jx-, escopados em .jx-entregas)
   Semana em cartões "fileira", capacidade em três barras, rota do dia com
   resumo e paradas, aceite por item em pips, listas "Para agendar" e
   "Montagem pendente", equipe do dia e agenda do dia seguinte. Só tokens de
   variaveis.css (o tema escuro vem de graça) e nada aqui redefine classe do
   design system fora deste escopo. */

/* ---------- utilitários ---------- */
.jx-entregas .jx-blk { display: block; }
.jx-entregas .jx-legenda { color: var(--texto-suave); }
.jx-entregas .jx-mt8 { margin-top: 8px; }
.jx-entregas .jx-mb8 { margin-bottom: 8px; }
.jx-entregas .jx-flex1 { flex: 1; }
.jx-entregas .jx-verde { color: var(--verde); }
.jx-entregas .jx-laranja { color: var(--laranja); }
.jx-entregas .jx-vermelho { color: var(--vermelho); }
.jx-entregas .card-titulo h3 { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.jx-entregas .jx-h4 { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 0; }
.jx-entregas .jx-pedido { font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); white-space: nowrap; }
.jx-entregas .jx-pedido:hover { color: var(--primario); }

/* ---------- atenção: lista de avisos acionáveis ---------- */
.jx-entregas .jx-atencao { padding: 8px 20px; }
.jx-entregas .jx-at-btn { background: none; border: 0; padding: 0; font: inherit; cursor: pointer; }
.jx-entregas div.at-item { cursor: default; }

/* ---------- barra do dia: setas + Hoje + data, rótulo do dia à direita ---------- */
.jx-entregas .jx-barra { margin-bottom: 14px; flex-wrap: wrap; }
.jx-entregas .jx-nav { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.jx-entregas .jx-seg .btn-icone { width: 30px; height: 30px; padding: 0; border-radius: 7px; }
.jx-entregas .jx-seg .btn-icone .ico { width: 16px; height: 16px; }
.jx-entregas .jx-seg .jx-volta .ico { transform: rotate(180deg); }
.jx-entregas .jx-data { width: auto; height: 36px; margin: 0; padding: 0 10px; }
.jx-entregas .jx-dia-rotulo { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; color: var(--texto-suave); font-weight: 400; min-width: 0; }
.jx-entregas .jx-dia-rotulo strong { color: var(--texto); }

/* ---------- fileira da semana: cada dia cresce 4% no hover (sombra aqui; o crescimento só com movimento permitido) ---------- */
.jx-entregas .jx-netflix { position: relative; transition: transform var(--dur-base) var(--curva-saida), box-shadow var(--dur-base) var(--curva-padrao), border-color var(--dur-rapida), background var(--dur-rapida); }
.jx-entregas .ent-dia.jx-netflix:hover, .jx-entregas .ent-dia.jx-netflix:focus-visible { box-shadow: var(--sombra-alta); z-index: 2; }
.jx-entregas .ent-dia.jx-netflix.selecionado:hover, .jx-entregas .ent-dia.jx-netflix.selecionado:focus-visible { box-shadow: var(--sombra-alta), 0 0 0 1px var(--primario) inset; }
.jx-entregas .ent-dia.jx-netflix.fechado:hover { transform: none; box-shadow: none; }
/* número e legenda lado a lado: o número nunca encolhe, a legenda corta com reticências */
.jx-entregas .jx-ed-pct { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; min-width: 0; margin-top: 6px; font-size: 12px; line-height: 16px; color: var(--texto-suave); }
.jx-entregas .jx-ed-pct strong { flex-shrink: 0; font-weight: 650; font-variant-numeric: tabular-nums; }
.jx-entregas .jx-ed-pct span { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-entregas .ent-dia.fechado .jx-ed-pct, .jx-entregas .ent-dia.fechado .jx-ed-pct strong { color: var(--texto-desabilitado); }
/* cartão estreito (tela média, 7 colunas): a legenda some inteira em vez de virar "da ca…" colado no número */
.jx-entregas .ent-dia { container-type: inline-size; }
@container (max-width: 139px) { .jx-entregas .jx-ed-pct span { display: none; } }

/* ---------- capacidade do dia: três barras com a sobra escrita embaixo ---------- */
.jx-entregas .jx-capacidade { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--borda); }
.jx-entregas .jx-capacidade > div { min-width: 0; }
/* o texto quebra de linha dentro dele; o % fica fixo à direita, nunca por cima do texto */
.jx-entregas .jx-capacidade .prog-rotulos > span:first-child { min-width: 0; overflow-wrap: anywhere; }
.jx-entregas .jx-capacidade .prog-rotulos .num { flex-shrink: 0; margin-left: auto; }
.jx-entregas .jx-capacidade .jx-legenda { margin-top: 6px; }

/* ---------- resumo da rota: três números antes do detalhe ---------- */
.jx-entregas .jx-resumo { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 12px; }
.jx-entregas .jx-resumo > div { min-width: 0; padding: 10px 12px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); }
.jx-entregas .jx-resumo .tx-sobrelinha { margin-bottom: 2px; color: var(--texto-suave); text-transform: uppercase; }
.jx-entregas .jx-resumo .tx-corpo-forte { overflow-wrap: anywhere; }
.jx-entregas .jx-resumo .tx-legenda { margin-top: 2px; color: var(--texto-suave); }

/* ---------- paradas: acendem no hover; marco verde quando feita, azul em rota ---------- */
.jx-entregas .jx-parada { margin: 0 -8px; padding-left: 8px; padding-right: 8px; border-radius: var(--raio-s); transition: background var(--dur-rapida); }
.jx-entregas .jx-parada:hover { background: var(--superficie-2); }
.jx-entregas .parada.jx-feita .parada-marco::before { background: var(--verde); }
.jx-entregas .parada.jx-viva .parada-marco::before { background: var(--azul); }
.jx-entregas .parada-hora { white-space: nowrap; }
.jx-entregas .parada-info { min-width: 0; }
.jx-entregas .parada-info strong a { color: inherit; }
.jx-entregas .parada-info strong a:hover { color: var(--primario); }
.jx-entregas .jx-aviso { display: inline-block; margin-top: 6px; padding: 4px 8px; border-radius: var(--raio-xs); background: var(--amarelo-suave); color: var(--primario); font-size: 12.5px; line-height: 17px; }
.jx-entregas .jx-aviso .ico { width: 13px; height: 13px; vertical-align: -2px; }
.jx-entregas .jx-montador { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin-top: 8px; font-size: 12.5px; line-height: 18px; color: var(--texto); }
.jx-entregas .jx-montador > .ico { width: 14px; height: 14px; color: var(--texto-suave); }
.jx-entregas .jx-montador > span { white-space: nowrap; }
/* o nome do montador fica na mesma linha do rótulo (o design system deixa <strong> da parada em bloco) */
.jx-entregas .jx-montador strong { display: inline; font-size: inherit; line-height: inherit; }
.jx-entregas .jx-montador .btn, .jx-entregas .jx-montador .badge { flex-shrink: 0; }
.jx-entregas .jx-acoes { justify-content: flex-start; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.jx-entregas .jx-etq { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.jx-entregas .jx-etq .badge { white-space: nowrap; }

/* ---------- aceite por item: um pip por unidade aceita (verde) ou recusada (vermelho) ---------- */
.jx-entregas .jx-aceite { margin-top: 16px; padding: 16px 18px; }
.jx-entregas .jx-aceite .card-titulo { margin-bottom: 6px; }
.jx-entregas .jx-aceite .tx-corpo-p { color: var(--texto-suave); }
.jx-entregas .jx-aceite .tx-corpo-p strong { color: var(--texto); }
.jx-entregas .jx-pips { flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 10px; }
.jx-entregas .jx-pip { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 6px; background: var(--verde-suave); color: var(--verde); }
.jx-entregas .jx-pip.recusado { background: var(--vermelho-suave); color: var(--vermelho); }
.jx-entregas .jx-pip .ico { width: 13px; height: 13px; stroke-width: 2.5; }

/* ---------- listas (para agendar, montagem pendente): item acende no hover ---------- */
.jx-entregas .jx-item { margin: 0 -8px; padding: 10px 8px; border-radius: var(--raio-s); transition: background var(--dur-rapida); }
.jx-entregas .jx-item:hover { background: var(--superficie-2); }
.jx-entregas .jx-item > .btn { white-space: nowrap; }
.jx-entregas .jx-cel { min-width: 0; }
.jx-entregas .jx-cel > span { max-width: none; }
.jx-entregas .jx-cel > strong a { color: inherit; }
.jx-entregas .jx-cel > strong a:hover { color: var(--primario); }
.jx-entregas .jx-etqs { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; }

/* ---------- equipe do dia e agenda do dia seguinte ---------- */
.jx-entregas .jx-sub { flex-wrap: wrap; }
.jx-entregas .jx-sub-dir { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.jx-entregas button.link-acao { cursor: pointer; }
.jx-entregas .jx-equipe { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.jx-entregas .jx-pessoa { display: flex; align-items: center; gap: 8px; min-width: 0; }
.jx-entregas .agenda .tag { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }

/* ---------- responsivo ---------- */
@media (max-width: 1366px) {
  .jx-entregas .jx-ed-pct span { display: none; }
}
@media (max-width: 640px) {
  .jx-entregas .jx-montador > span { white-space: normal; }
}
@media (max-width: 640px) {
  .jx-entregas .jx-resumo { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  /* parada no celular: hora | marco | etiquetas em cima, o texto embaixo — nada por cima de nada */
  .jx-entregas .parada { grid-template-columns: 48px 18px minmax(0, 1fr); }
  .jx-entregas .parada-hora { grid-column: 1; grid-row: 1; }
  .jx-entregas .parada-marco { grid-column: 2; grid-row: 1 / 3; }
  .jx-entregas .jx-etq { grid-column: 3; grid-row: 1; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: flex-start; min-height: 18px; }
  .jx-entregas .parada-info { grid-column: 3; grid-row: 2; }
  .jx-entregas .ag-item { grid-template-columns: 52px 14px minmax(0, 1fr); }
  .jx-entregas .ag-item .tag { grid-column: 3; justify-self: start; }
  .jx-entregas .jx-pessoa { width: 100%; }
  .jx-entregas .jx-barra .jx-dia-rotulo { width: 100%; }
}

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  .jx-entregas .ent-dia.jx-netflix:hover, .jx-entregas .ent-dia.jx-netflix:focus-visible { transform: scale(1.04); }
  .jx-entregas .ent-dia.jx-netflix.fechado:hover { transform: none; }
  @keyframes jx-ent-subir { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  .jx-entregas .jx-entrar > * { animation: jx-ent-subir var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 160ms); }
  @keyframes jx-ent-pip { from { opacity: 0; transform: scale(.6); } to { opacity: 1; transform: none; } }
  .jx-entregas .jx-pip { animation: jx-ent-pip var(--dur-base) var(--curva-mola) both; animation-delay: calc(var(--i, 0) * 45ms + 420ms); }
}

/* ---------- financeiro ---------- */
/* JADE — estilos da tela Financeiro (prefixo jx-, escopados em .jx-financeiro)
   Período no cabeçalho, números do fluxo com trilhas realizado × previsto,
   previsão em colunas, caixa de hoje com a gaveta de dinheiro, comissões com
   % liberado e resultado por categoria com parte do total. Só tokens de
   variaveis.css: o tema escuro vem de graça. Nada aqui redefine classe do
   design system. */

/* ---------- geral ---------- */
.jx-financeiro .card { min-width: 0; }
/* KPI mais baixo que o vizinho da linha: rótulo e número ficam no topo, não no meio */
.jx-financeiro .kpi { align-content: start; }
.jx-financeiro .card-titulo .badge { flex-shrink: 0; }
.jx-financeiro .card-titulo .link-acao { flex-shrink: 0; }
.jx-financeiro .card-titulo .titulo-bloco h3 { overflow-wrap: anywhere; }
.jx-financeiro .jx-nota { display: block; margin-top: 8px; color: var(--texto-suave); }
.jx-financeiro .jx-nota b { color: var(--texto); font-weight: 600; }
.jx-financeiro .jx-sep { height: 1px; background: var(--borda); margin: 18px 0; }
.jx-financeiro .vazio.embutido .link-acao { margin-top: 10px; }
.jx-financeiro .kpi-sub .badge { height: 20px; padding: 0 7px; font-size: 11.5px; }

/* ---------- cabeçalho: período ‹ Outubro de 2026 › ---------- */
.jx-financeiro .jx-periodo { display: inline-flex; align-items: center; gap: 2px; }
.jx-financeiro .jx-periodo .btn-icone { font-size: 20px; line-height: 1; font-weight: 500; }
.jx-financeiro .jx-periodo-rotulo { position: relative; cursor: pointer; }
.jx-financeiro .jx-periodo-rotulo strong { font-weight: 650; white-space: nowrap; }
.jx-financeiro .jx-periodo-rotulo input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.jx-financeiro .jx-periodo-rotulo:focus-within { box-shadow: 0 0 0 3px var(--primario-suave); }

/* ---------- KPI clicável: cresce um pouco no hover, só transform e sombra ---------- */
.jx-financeiro .kpi.jx-netflix { transition: transform var(--dur-base) var(--curva-saida), box-shadow var(--dur-base) var(--curva-padrao), border-color var(--dur-rapida); }
.jx-financeiro .kpi.jx-netflix:hover { transform: scale(1.04); box-shadow: var(--sombra-alta); border-color: var(--borda-forte); z-index: 2; }

/* ---------- números do fluxo ---------- */
.jx-financeiro .jx-nums { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.jx-financeiro .jx-nums + .jx-nums { margin-top: 14px; }
.jx-financeiro .jx-num { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.jx-financeiro .jx-num .tx-legenda { color: var(--texto-suave); }
.jx-financeiro .jx-num .tx-numero-kpi { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-financeiro .jx-leve { font-weight: 500; color: var(--texto-suave); }
.jx-financeiro .jx-forte { font-weight: 650; }
.jx-financeiro .jx-num-m { font-size: 20px; line-height: 26px; font-weight: 650; letter-spacing: -0.02em; white-space: nowrap; }
.jx-financeiro .jx-dois { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }

/* trilhas na mesma escala: cheio é o realizado, claro é o que ainda vence */
.jx-financeiro .jx-fluxo { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 8px 12px; align-items: center; margin-top: 16px; }
.jx-financeiro .jx-trilha { position: relative; height: 8px; border-radius: var(--raio-pill); background: var(--neutro-suave); overflow: hidden; }
.jx-financeiro .jx-trilha i { position: absolute; top: 0; bottom: 0; left: 0; display: block; transform-origin: left center; }
.jx-financeiro .jx-trilha i.jx-prev { opacity: .32; }

/* previsão das próximas 8 semanas */
.jx-financeiro .jx-cab-grafico { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.jx-financeiro .jx-cab-grafico h4 { margin: 0; }
.jx-financeiro .g-barra.jx-g-entrada { fill: var(--verde); }
.jx-financeiro .g-barra.jx-g-saida { fill: var(--vermelho); }
.jx-financeiro .jx-faixa-neg { fill: var(--vermelho-suave); }
.jx-financeiro .g-legenda i.jx-leg-neg { background: var(--vermelho-suave); border: 1px solid var(--vermelho); box-sizing: border-box; }

/* ---------- caixa de hoje ---------- */
.jx-financeiro .jx-dia-sel { display: flex; align-items: center; gap: 6px; margin: -4px 0 14px; }
.jx-financeiro .jx-dia-sel input { flex: 1 1 auto; min-width: 0; width: auto; height: 32px; padding: 0 8px; font-size: 13px; }
.jx-financeiro .jx-dia-sel .btn-icone { font-size: 20px; line-height: 1; font-weight: 500; flex-shrink: 0; }
.jx-financeiro .jx-gaveta-box { margin-top: 16px; padding: 14px 16px; border-radius: var(--raio-s); }
.jx-financeiro .jx-gaveta-cab { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.jx-financeiro .jx-gaveta-cab strong .ico { width: 14px; height: 14px; vertical-align: -2px; color: var(--verde); }
.jx-financeiro .jx-gaveta { display: grid; grid-template-columns: 14px minmax(0, 1fr) auto; gap: 4px 8px; align-items: baseline; font-size: 13px; line-height: 22px; }
.jx-financeiro .jx-gaveta .jx-op { color: var(--texto-suave); font-weight: 600; text-align: center; font-variant-numeric: tabular-nums; }
.jx-financeiro .jx-gaveta .jx-gaveta-sep { grid-column: 1 / -1; height: 1px; margin: 4px 0 2px; background: var(--borda-forte); }
.jx-financeiro .jx-gaveta .num { white-space: nowrap; }
.jx-financeiro .jx-movs { margin: 8px 0 0; padding: 0; list-style: none; color: var(--texto-suave); }
.jx-financeiro .jx-movs li { margin: 2px 0; }
.jx-financeiro .jx-acoes-caixa { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 16px; }
.jx-financeiro .jx-acoes-caixa .jx-esticar { flex: 1; }

/* ---------- tabelas sangrando até a borda do card ---------- */
.jx-financeiro .tabela-scroll.jx-sangra { margin: 0 -20px; border: 0; border-radius: 0; box-shadow: none; background: transparent; }
.jx-financeiro .tabela-scroll.jx-sangra-fim { margin-bottom: -20px; border-radius: 0 0 var(--raio) var(--raio); }
.jx-financeiro .tabela.jx-tabela th, .jx-financeiro .tabela.jx-tabela td { padding-left: 8px; padding-right: 8px; }
.jx-financeiro .tabela.jx-tabela th:first-child, .jx-financeiro .tabela.jx-tabela td:first-child { padding-left: 20px; }
.jx-financeiro .tabela.jx-tabela th:last-child, .jx-financeiro .tabela.jx-tabela td:last-child { padding-right: 20px; }
.jx-financeiro .tabela.jx-tabela tbody tr.jx-grupo td { padding-top: 7px; padding-bottom: 7px; background: var(--superficie-2); font-size: 11px; line-height: 14px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--texto-suave); }
.jx-financeiro .tabela.jx-tabela tbody tr.jx-grupo:hover td { background: var(--superficie-2); }
.jx-financeiro .tabela.jx-tabela tr.jx-total td { font-weight: 650; border-top: 1px solid var(--borda-forte); }
.jx-financeiro .tabela.jx-tabela tr.jx-saldo td { font-weight: 700; font-size: 14px; padding-top: 12px; padding-bottom: 12px; border-top: 2px solid var(--texto); border-bottom: 0; }
.jx-financeiro .tabela.jx-tabela tfoot td { border-bottom: 0; }
.jx-financeiro .tabela.jx-tabela td.jx-vazio-linha { padding-left: 32px; color: var(--texto-suave); }
.jx-financeiro .tabela.jx-tabela tr.jx-eventos td { padding: 10px 20px 14px; background: var(--superficie-2); }
.jx-financeiro .tabela.jx-tabela tr.jx-eventos:hover td { background: var(--superficie-2); }
.jx-financeiro .tabela.jx-tabela tr.jx-eventos .tabela-scroll { box-shadow: none; }
.jx-financeiro .tabela.jx-compacta th, .jx-financeiro .tabela.jx-compacta td { padding-left: 6px; padding-right: 6px; }
.jx-financeiro .tabela.jx-compacta td { padding-top: 10px; padding-bottom: 10px; }
.jx-financeiro .tabela.jx-compacta th.jx-caret, .jx-financeiro .tabela.jx-compacta td.jx-caret { width: 28px; padding-left: 2px; }
.jx-financeiro .jx-pessoa { display: flex; align-items: center; gap: 10px; min-width: 0; }
.jx-financeiro .jx-pessoa .celula-principal { min-width: 0; }
.jx-financeiro .jx-pct { display: flex; flex-direction: column; gap: 3px; }
.jx-financeiro .jx-pct .prog { width: 56px; min-width: 56px; }
.jx-financeiro .jx-share { display: flex; align-items: center; gap: 8px; }
.jx-financeiro .jx-share .prog { flex: 0 0 56px; min-width: 56px; }
.jx-financeiro .jx-nota-com { margin: 10px 0 16px; }
.jx-financeiro .card-rodape.jx-rodape { display: flex; align-items: flex-start; gap: 8px; }
.jx-financeiro .card-rodape.jx-rodape .ico { flex-shrink: 0; width: 16px; height: 16px; margin-top: 1px; }

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jx-fin-entrar { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  @keyframes jx-fin-crescer { from { transform: scaleX(0); } to { transform: scaleX(1); } }
  /* backwards, não both: depois de entrar o transform volta a ser o do hover */
  .jx-financeiro .jx-entrar { animation: jx-fin-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 120ms); }
  .jx-financeiro .jx-trilha i { animation: jx-fin-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 70ms + 200ms); }
}

/* ---------- responsivo ---------- */
@media (max-width: 900px) {
  .jx-financeiro .jx-nums { gap: 12px; }
  .jx-financeiro .jx-nums .tx-numero-kpi { font-size: 22px; line-height: 28px; }
}
@media (max-width: 640px) {
  .jx-financeiro .jx-nums { gap: 10px; }
  /* legenda de duas linhas não desalinha os números: eles se encostam embaixo */
  .jx-financeiro .jx-nums .jx-num { justify-content: flex-end; }
  .jx-financeiro .jx-nums .tx-numero-kpi { font-size: 17px; line-height: 22px; letter-spacing: -0.01em; }
  .jx-financeiro .jx-num-m { font-size: 18px; line-height: 24px; }
  .jx-financeiro .jx-dois { gap: 12px; }
  .jx-financeiro .jx-fluxo { grid-template-columns: 56px minmax(0, 1fr); }
  .jx-financeiro .jx-periodo-rotulo { padding: 0 8px 0 10px; }
  /* tabela de comissões vira cartões: rodapé também, eventos em largura cheia */
  .jx-financeiro .tabela-responsiva tfoot { display: block; width: 100%; }
  .jx-financeiro .tabela-responsiva tr.jx-eventos td, .jx-financeiro .tabela-responsiva tr.jx-total td.celula-principal { grid-column: 1 / -1; }
  .jx-financeiro .tabela-responsiva tr.jx-eventos { padding: 0; }
  .jx-financeiro .tabela.jx-tabela tr.jx-eventos td { padding: 10px 14px 14px; }
  .jx-financeiro .tabela-responsiva td.jx-caret { position: absolute; top: 12px; right: 10px; width: auto; padding: 0; }
  .jx-financeiro .tabela.jx-tabela tr.jx-total td { border-top: 0; }
  .jx-financeiro .tabela-responsiva tr.jx-total { border-top: 1px solid var(--borda-forte); }
  /* resultado por categoria: uma linha por categoria (nome · parte · valor), sem rolagem */
  .jx-financeiro .jx-tab-cat thead { display: none; }
  .jx-financeiro .jx-tab-cat, .jx-financeiro .jx-tab-cat tbody, .jx-financeiro .jx-tab-cat tfoot { display: block; width: 100%; }
  .jx-financeiro .jx-tab-cat tr { display: grid; grid-template-columns: minmax(0, 1fr) 84px max-content; align-items: center; gap: 0 10px; padding: 9px 20px; border-bottom: 1px solid var(--borda); }
  .jx-financeiro .tabela.jx-tabela.jx-tab-cat td { display: block; min-width: 0; padding: 0; border: 0; }
  .jx-financeiro .tabela.jx-tabela.jx-tab-cat td.jx-vazio-linha { padding-left: 0; }
  .jx-financeiro .jx-tab-cat td[colspan="3"] { grid-column: 1 / -1; }
  .jx-financeiro .jx-tab-cat td[colspan="2"] { grid-column: 1 / 3; }
  .jx-financeiro .jx-tab-cat tr.jx-grupo { padding: 6px 20px; background: var(--superficie-2); }
  .jx-financeiro .jx-tab-cat tr.jx-total { border-top: 1px solid var(--borda-forte); }
  .jx-financeiro .jx-tab-cat tr.jx-saldo { border-top: 2px solid var(--texto); border-bottom: 0; padding-top: 12px; padding-bottom: 12px; }
  .jx-financeiro .jx-tab-cat .jx-share .prog { flex-basis: 48px; min-width: 48px; }
}
@media (max-width: 420px) {
  .jx-financeiro .kpi-valor { font-size: 19px; line-height: 24px; }
  .jx-financeiro .jx-nums .tx-numero-kpi { font-size: 15px; line-height: 20px; letter-spacing: -0.02em; }
}

/* ---------- clientes ---------- */
/* JADE — estilos da tela clientes (prefixo jx-, escopados em .jx-clientes)
   Estante "quem procurar esta semana", tabela de clientes (telefone + WhatsApp,
   última compra, crediário, aniversário), gaveta Cliente 360 (capa com trilho da
   jornada, corpo rolável, rodapé) e a ficha completa. Só tokens de variaveis.css:
   o tema escuro vem de graça. Nada aqui redefine classe do design system.
   A raiz da lista e da ficha é <div class="pagina jx-clientes">; a gaveta
   (<aside class="gaveta jx-clientes jx-gv">) e o modal do cadastro recebem a
   mesma classe porque ficam fora da página, no body. */

/* ---------- KPIs ---------- */
.jx-clientes .kpi-sub .badge { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }

/* ---------- estante: quem procurar esta semana ---------- */
.jx-clientes .jx-estante-nav { display: inline-flex; align-items: center; gap: 4px; }
.jx-clientes .jx-estante-nav .link-acao { margin-right: 8px; }
.jx-clientes .jx-estante-nav .btn-icone { border: 1px solid var(--borda-forte); background: var(--superficie); }
.jx-clientes .jx-estante-nav .btn-icone:disabled { opacity: .4; cursor: default; }
.jx-clientes .jx-estante-wrap { position: relative; }
.jx-clientes .jx-estante-wrap::after { content: ""; position: absolute; top: 0; right: 0; bottom: 14px; width: 72px; pointer-events: none; z-index: 2; background: linear-gradient(to left, var(--fundo), transparent); }
.jx-clientes .jx-estante { display: flex; gap: 12px; overflow-x: auto; padding: 6px 4px 14px; scroll-snap-type: x proximity; scrollbar-width: none; }
.jx-clientes .jx-estante::-webkit-scrollbar { display: none; }
.jx-clientes .jx-capa {
  position: relative; flex: 0 0 220px; min-width: 0; scroll-snap-align: start; display: block; overflow: hidden;
  margin: 0; padding: 0; border: 1px solid var(--borda); border-radius: var(--raio); background: var(--superficie);
  box-shadow: var(--sombra); color: var(--texto); font: inherit; text-align: left; text-decoration: none; cursor: pointer;
  transition: transform var(--dur-base) var(--curva-saida), box-shadow var(--dur-base) var(--curva-padrao), border-color var(--dur-rapida);
}
.jx-clientes .jx-capa:hover, .jx-clientes .jx-capa:focus-visible { transform: scale(1.04); z-index: 3; border-color: var(--borda-forte); box-shadow: var(--sombra-alta); color: var(--texto); }
.jx-clientes .jx-capa-topo { position: relative; height: 52px; overflow: hidden; background: var(--av, var(--avatar-ardosia)); }
.jx-clientes .jx-capa-topo b { position: absolute; right: 8px; top: -8px; font-size: 56px; line-height: 1; font-weight: 800; letter-spacing: -0.05em; color: var(--texto-inverso); opacity: .16; }
.jx-clientes .jx-capa > .avatar { display: flex; margin: -20px 0 0 14px; box-shadow: 0 0 0 3px var(--superficie); }
.jx-clientes .jx-capa-corpo { padding: 8px 14px 12px; }
.jx-clientes .jx-capa-corpo strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-clientes .jx-motivo { display: block; margin-top: 2px; font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-clientes .jx-capa-corpo .badge { margin-top: 8px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.jx-clientes #cli-procurar .vazio.embutido { padding: 18px 12px 10px; }

/* ---------- filtros com select embutido (Origem: Todas · Cidade: Todas) ---------- */
.jx-clientes .filtro select {
  height: auto; min-height: 0; width: auto; max-width: 180px; padding: 0 16px 0 0; margin: 0;
  border: 0; border-radius: 0; background-color: transparent; box-shadow: none;
  font: inherit; font-size: 13px; font-weight: 600; color: inherit; cursor: pointer;
  background-position: right 0 center;
}
.jx-clientes .filtro select:focus { outline: none; box-shadow: none; }
.jx-clientes .filtro:focus-within { border-color: var(--primario); }
.jx-clientes .barra-ferramentas .check { height: 34px; }

/* ---------- tabela de clientes ---------- */
.jx-clientes .jx-tabela .celula-principal > strong { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; }
.jx-clientes .jx-tabela .celula-principal > strong .badge { font-weight: 600; }
.jx-clientes .jx-tel { display: inline-flex; align-items: center; gap: 2px; white-space: nowrap; }
.jx-clientes .jx-tel .btn-icone { opacity: .75; }
.jx-clientes .jx-tel .btn-icone:hover, .jx-clientes .jx-tel .btn-icone:focus-visible, .jx-clientes .jx-tabela tbody tr:hover .jx-tel .btn-icone { opacity: 1; }
.jx-clientes .jx-compra { display: flex; flex-direction: column; white-space: nowrap; font-variant-numeric: tabular-nums; }
.jx-clientes .jx-compra span { font-size: 12px; line-height: 16px; color: var(--texto-suave); font-variant-numeric: tabular-nums; }
.jx-clientes .jx-nada { color: var(--texto-suave); }
.jx-clientes .jx-aniv { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.jx-clientes .jx-aniv small { font-size: 12px; color: var(--texto-suave); }
.jx-clientes .jx-limite { display: inline-flex; flex-direction: column; line-height: 16px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.jx-clientes .jx-limite strong { font-weight: 600; }
.jx-clientes .jx-limite small { font-size: 12px; color: var(--texto-suave); }
.jx-clientes .jx-tabela .acoes-linha a.btn-icone { color: var(--texto-suave); }
.jx-clientes .jx-tabela .acoes-linha a.btn-icone:hover { color: var(--texto); }
.jx-clientes .jx-pag-sep { padding: 0 2px; color: var(--texto-desabilitado); }
.jx-clientes .paginacao button:disabled { opacity: .4; cursor: default; }
.jx-clientes .paginacao button:disabled:hover { background: transparent; color: var(--texto-suave); }
.jx-clientes .paginacao .ico { width: 16px; height: 16px; }

/* ---------- gaveta Cliente 360: cabeçalho fixo com trilho, corpo rolável e rodapé ---------- */
.jx-clientes .jx-gv-capa { position: relative; flex: none; padding: 20px 20px 18px; background: var(--superficie); border-bottom: 1px solid var(--borda); }
.jx-clientes .jx-gv-fechar { position: absolute; right: 12px; top: 12px; z-index: 2; }
.jx-clientes .jx-gv-pessoa { position: relative; display: flex; align-items: center; gap: 12px; padding-right: 40px; }
.jx-clientes .jx-gv-pessoa h2 { margin: 0; font-size: 18px; line-height: 24px; font-weight: 700; letter-spacing: -0.01em; overflow-wrap: anywhere; }
.jx-clientes .jx-gv-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; margin-top: 3px; font-size: 12.5px; line-height: 18px; color: var(--texto-suave); }
.jx-clientes .jx-gv-acoes { position: relative; display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.jx-clientes .jx-trilho { position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--borda); }
.jx-clientes .jx-passo { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; min-width: 0; text-align: center; }
.jx-clientes .jx-passo::before { content: ""; position: absolute; top: 11px; right: 50%; width: 100%; height: 2px; background: var(--neutro-suave); transform-origin: left center; }
.jx-clientes .jx-passo:first-child::before { display: none; }
.jx-clientes .jx-passo.feito::before, .jx-clientes .jx-passo.atual::before { background: var(--marca-amarelo); }
.jx-clientes .jx-passo-ponto { position: relative; z-index: 1; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: var(--neutro-suave); color: var(--texto-suave); font-size: 11px; line-height: 1; font-weight: 650; box-shadow: 0 0 0 3px var(--superficie); }
.jx-clientes .jx-passo-ponto .ico { width: 13px; height: 13px; stroke-width: 2.5; }
.jx-clientes .jx-passo.feito .jx-passo-ponto { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-clientes .jx-passo.atual .jx-passo-ponto { background: var(--superficie); color: var(--primario); box-shadow: 0 0 0 3px var(--superficie), inset 0 0 0 2px var(--marca-amarelo); }
.jx-clientes .jx-passo.atual .jx-passo-ponto::after { content: ""; position: absolute; inset: -2px; border-radius: 50%; border: 2px solid var(--marca-amarelo); opacity: 0; }
.jx-clientes .jx-passo-rotulo { max-width: 100%; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-clientes .jx-passo.feito .jx-passo-rotulo, .jx-clientes .jx-passo.atual .jx-passo-rotulo { color: var(--texto); }
.jx-clientes .jx-passo-rotulo small { display: block; font-size: 11px; line-height: 14px; font-weight: 600; color: var(--primario); overflow: hidden; text-overflow: ellipsis; }
.jx-clientes .jx-gv-corpo { flex: 1; min-height: 0; overflow-y: auto; padding: 20px; }
.jx-clientes .jx-gv-secao { margin-top: 20px; }
.jx-clientes .jx-gv-secao:first-child { margin-top: 0; }
.jx-clientes .jx-gv-secao .secao-titulo { margin: 0 0 10px; }
.jx-clientes .jx-dado { display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 10px; align-items: start; padding: 5px 0; font-size: 13.5px; line-height: 20px; color: var(--texto); text-decoration: none; }
.jx-clientes .jx-dado > .ico { width: 16px; height: 16px; margin-top: 2px; color: var(--texto-suave); }
.jx-clientes .jx-dado > div { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; min-width: 0; overflow-wrap: anywhere; }
.jx-clientes .jx-dado-link { border-radius: var(--raio-xs); }
.jx-clientes .jx-dado-link:hover { color: var(--primario); }
.jx-clientes .jx-dado-link:hover strong { color: var(--primario); }
.jx-clientes .jx-gv-total { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.jx-clientes .jx-gv-total strong { font-size: 18px; line-height: 24px; font-weight: 700; letter-spacing: -0.01em; }
.jx-clientes .jx-gv-total span { font-size: 12.5px; color: var(--texto-suave); }
.jx-clientes .jx-gv-motivo, .jx-clientes .jx-gv-oport { padding: 14px 16px; }
.jx-clientes .jx-gv-motivo p, .jx-clientes .jx-gv-oport p { margin: 10px 0 0; font-size: 13.5px; line-height: 20px; }
.jx-clientes .jx-gv-motivo-acoes { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 12px; }
.jx-clientes .jx-gv-oport-topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.jx-clientes .jx-gv-oport-topo strong { font-size: 15px; line-height: 22px; font-weight: 650; white-space: nowrap; }
.jx-clientes .jx-gv-oport-pe { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; margin-top: 12px; flex-wrap: wrap; }
.jx-clientes .jx-proximo { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; line-height: 18px; color: var(--texto-suave); white-space: nowrap; }
.jx-clientes .jx-proximo .ico { width: 14px; height: 14px; }
.jx-clientes .jx-proximo strong { color: var(--texto); font-weight: 600; }
.jx-clientes .jx-vendedor { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; line-height: 18px; color: var(--texto-suave); white-space: nowrap; }
.jx-clientes .jx-gv-corpo .vazio.embutido { padding: 18px 12px; }
.jx-clientes .jx-gv-rodape { flex: none; display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; padding: 14px 20px; border-top: 1px solid var(--borda); background: var(--superficie-2); }
.jx-clientes .jx-gv-rodape .btn .ico { width: 15px; height: 15px; }

/* ---------- ficha completa (#/clientes/detalhe): capa + trilho + dados ---------- */
.jx-clientes .jx-ficha .jx-gv-pessoa { padding-right: 0; }
.jx-clientes .jx-ficha .jx-trilho { margin-top: 16px; padding-top: 16px; }
.jx-clientes .jx-ficha-dados { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--borda); }

/* ---------- modal do cadastro: avisos embaixo dos campos ---------- */
.jx-clientes #cli-f-dup-aviso a { color: inherit; font-weight: 600; }

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxc-entrar { from { opacity: 0; transform: translateY(8px); } }
  @keyframes jxc-crescer { from { transform: scaleX(0); } }
  @keyframes jxc-pulsar { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(1.9); opacity: 0; } }
  .jx-clientes .jx-capa { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 200ms); }
  .jx-clientes .jx-tabela tbody tr { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 280ms); }
  .jx-clientes .jx-gv-corpo > .jx-gv-secao { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 60ms + 220ms); }
  .jx-clientes .jx-passo.feito::before, .jx-clientes .jx-passo.atual::before { animation: jxc-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 160ms + 300ms); }
  .jx-clientes .jx-passo.atual .jx-passo-ponto::after { animation: jxc-pulsar 2.2s var(--curva-saida) infinite; animation-delay: 1.2s; }
}

/* ---------- responsivo ---------- */
@media (max-width: 640px) {
  .jx-clientes .jx-estante-wrap::after { width: 40px; }
  .jx-clientes .jx-capa { flex-basis: 200px; }
  .jx-clientes .jx-capa:hover { transform: none; }
  /* telefone + WhatsApp numa linha só, com o botão visível (não é ação secundária aqui) */
  .jx-clientes .jx-tel .btn-icone { opacity: 1; }
  /* cartão do cliente: nome em linha inteira (sem rótulo), ícone de abrir no canto;
     número alinhado à esquerda como as outras células do cartão */
  .jx-clientes .jx-tabela td:first-child { grid-column: 1 / -1; order: -1; padding-right: 48px; }
  .jx-clientes .jx-tabela td:first-child::before { display: none; }
  .jx-clientes .jx-tabela .celula-principal { min-width: 0; }
  .jx-clientes .jx-tabela .celula-principal > span { max-width: none; }
  .jx-clientes .jx-tabela td.ta-dir { text-align: left; }
  .jx-clientes .jx-tabela .acoes-linha .btn-icone { opacity: 1; }
  /* KPI em duas colunas estreitas: o selo quebra de linha em vez de cortar o texto */
  .jx-clientes .kpi-sub .badge { white-space: normal; height: auto; min-height: 22px; padding: 2px 8px; text-align: left; }
  .jx-clientes .tabela-rodape { flex-wrap: wrap; justify-content: center; }
  /* trilho em 5 colunas estreitas: rótulo menor, sem estourar o cartão */
  .jx-clientes .jx-trilho { margin-top: 14px; }
  .jx-clientes .jx-ficha { padding: 16px 12px; }
  .jx-clientes .jx-ficha .jx-gv-pessoa, .jx-clientes .jx-ficha-dados { padding-left: 4px; padding-right: 4px; }
  .jx-clientes .jx-passo-rotulo { font-size: 11px; letter-spacing: -0.01em; }
  .jx-clientes .jx-passo-rotulo small { font-size: 10px; }
  .jx-clientes .jx-gv-capa { padding: 16px 16px 14px; }
  .jx-clientes .jx-gv-corpo { padding: 16px; }
  .jx-clientes .jx-gv-rodape { padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px)); }
  .jx-clientes .jx-gv-rodape .btn { flex: 1 1 auto; justify-content: center; }
  .jx-clientes .jx-proximo { white-space: normal; }
}

/* ---------- estoque ---------- */
/* JADE — estilos da tela estoque (prefixo jx-, escopados em .jx-estoque)
   Só usa tokens de variaveis.css (tema escuro vem de graça); carrega depois de
   jade-ui.css e jade-x.css. Nenhuma classe do design system é redefinida fora
   do escopo .jx-estoque. */

.jx-estoque .card { min-width: 0; }
.jx-estoque .card.jx-coluna { display: flex; flex-direction: column; }
.jx-estoque .card-titulo .badge { flex-shrink: 0; }

/* ---------- vitrine de KPIs: o cartão sob o mouse sobe e os vizinhos recuam ---------- */
.jx-estoque .kpi.jx-netflix { position: relative; transform-origin: center; transition: transform var(--dur-base) var(--curva-saida), box-shadow var(--dur-base) var(--curva-padrao), border-color var(--dur-rapida), opacity var(--dur-base) var(--curva-padrao); }
.jx-estoque .kpi.jx-netflix:hover, .jx-estoque .kpi.jx-netflix:focus-visible { box-shadow: var(--sombra-alta); border-color: var(--borda-forte); z-index: 2; }
.jx-estoque .jx-vitrine:has(.kpi.jx-netflix:hover) > .kpi.jx-netflix:not(:hover) { opacity: .85; }
.jx-estoque .kpi.jx-netflix:focus-visible { outline: 2px solid var(--primario); outline-offset: 2px; }
.jx-estoque .kpi.jx-netflix[role="button"] { cursor: pointer; }
.jx-estoque .kpi-valor { font-variant-numeric: tabular-nums; }

/* ---------- lista de produtos: tabela densa (11 colunas sem rolagem horizontal) ---------- */
.jx-estoque .jx-densa { font-size: 13px; }
.jx-estoque .jx-densa th, .jx-estoque .jx-densa td { padding-left: 8px; padding-right: 8px; }
.jx-estoque .jx-densa th:first-child, .jx-estoque .jx-densa td:first-child { padding-left: 16px; }
.jx-estoque .jx-densa th:last-child, .jx-estoque .jx-densa td:last-child { padding-right: 12px; }
.jx-estoque .jx-densa td.celula-principal { min-width: 150px; }
.jx-estoque .jx-densa td.celula-principal > strong { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.jx-estoque .jx-densa .acoes-linha { gap: 2px; }
.jx-estoque .jx-giro { display: inline-flex; align-items: center; justify-content: flex-end; gap: 6px; white-space: nowrap; }
.jx-estoque .jx-faisca { width: 60px; height: 20px; display: block; overflow: visible; flex: none; }
.jx-estoque .jx-disp { display: inline-flex; align-items: center; justify-content: flex-end; gap: 6px; white-space: nowrap; }
.jx-estoque .jx-outros { color: var(--texto-suave); }
.jx-estoque .jx-outros .jx-avar { color: var(--amarelo); }
.jx-estoque .jx-sem { color: var(--texto-suave); }
.jx-estoque .jx-densa .tag { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }

/* ---------- reposição inteligente (cartão abaixo da lista) ---------- */
.jx-estoque .jx-rep { box-shadow: none; }
.jx-estoque .jx-rep tfoot td { background: var(--superficie-2); border-bottom: 0; border-top: 1px solid var(--borda); font-weight: 600; }
.jx-estoque .jx-rep-forn { white-space: nowrap; }
.jx-estoque .jx-rep-rodape { display: flex; align-items: center; gap: 14px; margin-top: 16px; flex-wrap: wrap; }
.jx-estoque .jx-rep-rodape .tx-legenda { color: var(--texto-suave); }

/* ---------- estoque por categoria + mostruário ---------- */
.jx-estoque .jx-cat { flex: 1; display: flex; flex-direction: column; justify-content: space-evenly; gap: 12px; }
.jx-estoque .jx-cat .prog-fill { background: var(--texto); }
.jx-estoque .jx-cat .prog-rotulos .num { color: var(--texto); font-weight: 600; }
.jx-estoque .jx-most { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--borda); }
.jx-estoque .jx-most .tx-sobrelinha { color: var(--texto-suave); text-transform: uppercase; }
.jx-estoque .jx-most-num { display: flex; align-items: center; gap: 10px; margin-top: 6px; flex-wrap: wrap; }
.jx-estoque .jx-most-num .tx-corpo-p { color: var(--texto-suave); }

/* ---------- ações em texto nas tabelas de alerta: fluem no celular ---------- */
.jx-estoque .jx-acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
.jx-estoque .jx-inv-input, .jx-estoque .jx-etq-input { width: 90px; }
.jx-estoque .jx-nao-ajustado { color: var(--vermelho); }
.jx-estoque .jx-aviso-loja { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; margin-bottom: 14px; padding: 10px 14px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); font-size: 13px; color: var(--texto-suave); }

@media (prefers-reduced-motion: no-preference) {
  .jx-estoque .kpi.jx-netflix:hover, .jx-estoque .kpi.jx-netflix:focus-visible { transform: scale(1.04); transition-delay: 120ms, 120ms, 0ms, 0ms; }
  @keyframes jx-est-entrar { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  .jx-estoque .jx-entrar > tr { animation: jx-est-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 180ms); }
  .jx-estoque .jx-linha .celula-principal > strong { transition: transform var(--dur-base) var(--curva-saida); }
  .jx-estoque .jx-linha:hover .celula-principal > strong { transform: translateX(2px); }
}

@media (max-width: 640px) {
  /* nome do produto ocupa a linha inteira do cartão, mesmo quando o .celula-principal está dentro do td (UI.tabela) */
  .jx-estoque .tabela-responsiva td:first-child:has(> .celula-principal) { grid-column: 1 / -1; order: -1; }
  .jx-estoque .tabela-responsiva td:first-child:has(> .celula-principal) > .celula-principal { min-width: 0; }
  .jx-estoque .tabela-responsiva td:first-child:has(> .celula-principal) > .celula-principal > span { max-width: none; }
  .jx-estoque .tabela-responsiva td:first-child:has(> .celula-principal)::before { display: none; }
  /* botões de texto (Abrir OS, Voltar a disponível…) ocupam a largura toda do cartão, sem cortar na borda */
  .jx-estoque .tabela-responsiva td:has(> .jx-acoes) { grid-column: 1 / -1; }
  .jx-estoque .jx-acoes .btn { max-width: 100%; }
  /* lista: dois ícones (entrada e ficha) no canto do cartão, sem cobrir nada */
  .jx-estoque .jx-densa td.celula-principal { padding-right: 84px; }
  .jx-estoque .jx-giro, .jx-estoque .jx-disp { justify-content: flex-start; }
  .jx-estoque .jx-acoes { justify-content: flex-start; }
  /* o rodapé "Pedido sugerido" vira cartão de largura inteira (sem o tfoot em display de tabela, o fundo cobria só parte da linha) */
  .jx-estoque .jx-rep tfoot { display: block; width: 100%; }
  .jx-estoque .jx-rep tfoot td[colspan] { grid-column: 1 / -1; }
  .jx-estoque .jx-rep tfoot td { border-top: 0; }
  .jx-estoque .jx-rep tfoot tr { background: var(--superficie-2); }
}

/* ---------- compras ---------- */
/* JADE — estilos da tela compras (prefixo jx-, escopados em .jx-compras)
   Alerta do pedido em risco, tabela de pedidos com previsão × promessa,
   prazo prometido × real por fornecedor, trilho do pedido em foco,
   encomendas de clientes e conferência de chegada. Só tokens de
   variaveis.css: o tema escuro vem de graça. */

.jx-compras .grade-12 { align-items: start; }
.jx-compras .card { min-width: 0; }

/* ---------- alerta do topo ---------- */
.jx-compras .alerta-atencao { align-items: center; flex-wrap: wrap; }
.jx-compras .alerta-atencao .alerta-acoes { display: flex; flex-shrink: 0; flex-wrap: wrap; gap: 8px; margin: -5px 0; }

/* ---------- tabela de pedidos: 8 colunas, células mais justas ---------- */
.jx-compras .jx-tab th, .jx-compras .jx-tab td { padding-left: 8px; padding-right: 8px; }
.jx-compras .jx-tab th:first-child, .jx-compras .jx-tab td:first-child { padding-left: 12px; }
.jx-compras .jx-tab th:last-child, .jx-compras .jx-tab td:last-child { padding-right: 12px; }
.jx-compras .jx-tab th.jx-quebra { white-space: normal; line-height: 14px; }
.jx-compras .jx-tab .celula-principal, .jx-compras .jx-tab td.celula-principal { min-width: 0; }
.jx-compras .jx-tab .celula-principal > strong { white-space: nowrap; font-variant-numeric: tabular-nums; }
.jx-compras .jx-tab .celula-principal > span { max-width: 150px; }
.jx-compras .jx-tab .prazo, .jx-compras .jx-tab .badge { padding: 0 6px; }
.jx-compras .jx-tab .valor { white-space: nowrap; }
.jx-compras .jx-tab .acoes-linha { gap: 2px; }
.jx-compras .jx-tab .acoes-linha .btn-mini { padding: 0 8px; white-space: nowrap; }
.jx-compras .jx-tab tr.selecionada .acoes-linha .btn-icone { opacity: 1; }
.jx-compras .jx-tab .btn-icone.jx-cobrar { color: var(--vermelho); }
.jx-compras .jx-tab .btn-icone.jx-cobrar:hover { background: var(--vermelho-suave); color: var(--vermelho); }
.jx-compras .jx-pilha { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.jx-compras .jx-pilha > strong { font-weight: 600; font-variant-numeric: tabular-nums; line-height: 20px; white-space: nowrap; }
.jx-compras .jx-pilha > .tx-legenda { color: var(--texto-suave); }
.jx-compras .jx-prom { display: inline-flex; align-items: center; gap: 6px; }
.jx-compras .jx-prom strong { font-weight: 600; font-variant-numeric: tabular-nums; line-height: 20px; white-space: nowrap; }
.jx-compras .jx-cli { display: block; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jx-compras .tabela-rodape { flex-wrap: wrap; }

/* ---------- prazo prometido × real por fornecedor ---------- */
.jx-compras .jx-forn { display: grid; grid-template-columns: 176px minmax(0, 1fr) 164px; align-items: center; gap: 16px; padding: 12px 0; }
.jx-compras .jx-forn + .jx-forn { border-top: 1px solid var(--borda); }
.jx-compras .jx-forn-nome { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.jx-compras .jx-forn-nome strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jx-compras .jx-forn-nome .tx-legenda { color: var(--texto-suave); }
.jx-compras .jx-barras { display: flex; flex-direction: column; gap: 6px; }
.jx-compras .jx-trilha { position: relative; height: 6px; border-radius: 999px; background: var(--neutro-suave); overflow: hidden; }
.jx-compras .jx-barra { position: absolute; top: 0; bottom: 0; left: 0; width: var(--v, 0%); border-radius: inherit; background: var(--grafico-base); transform-origin: left center; }
.jx-compras .jx-barra.real { background: var(--texto); }
.jx-compras .jx-barra.estourou { background: var(--vermelho); }
.jx-compras .jx-forn-valor { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.jx-compras .jx-forn-valor .num { white-space: nowrap; font-weight: 650; }
.jx-compras .jx-legenda { display: flex; flex-shrink: 0; align-items: center; gap: 14px; color: var(--texto-suave); }
.jx-compras .jx-legenda span { display: inline-flex; align-items: center; gap: 6px; }
.jx-compras .jx-legenda i { display: inline-block; width: 14px; height: 6px; border-radius: 3px; background: var(--grafico-base); }
.jx-compras .jx-legenda i.real { background: var(--texto); }
.jx-compras .jx-nota { margin: 14px 0 0; padding-top: 12px; border-top: 1px solid var(--borda); color: var(--texto-suave); }

/* reposição sugerida com o prazo real */
.jx-compras .jx-repo-caixa { margin-top: 12px; padding: 10px 14px 8px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); }
.jx-compras .jx-repo-cab { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 4px; }
.jx-compras .jx-repo { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 5px 0; font-size: 13px; line-height: 18px; }
.jx-compras .jx-repo + .jx-repo { border-top: 1px solid var(--borda); }
.jx-compras .jx-repo b { font-weight: 600; }
.jx-compras .jx-repo > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jx-compras .jx-repo > span:nth-child(2) { color: var(--texto-suave); }
.jx-compras .jx-repo .num { font-weight: 600; }

/* ---------- pedido em foco: trilho de etapas ---------- */
.jx-compras .jx-trilho { position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin: 4px 0 18px; }
.jx-compras .jx-trilho::before { content: ""; position: absolute; left: 10%; right: 10%; top: 11px; height: 2px; background: var(--neutro-suave); }
.jx-compras .jx-trilho-feito { position: absolute; left: 10%; top: 11px; width: var(--feito, 0%); height: 2px; background: var(--marca-amarelo); transform-origin: left center; }
.jx-compras .jx-passo { position: relative; display: flex; flex-direction: column; align-items: center; gap: 8px; min-width: 0; padding: 0 4px; text-align: center; }
.jx-compras .jx-passo i { position: relative; z-index: 1; display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--neutro-suave); color: var(--texto-suave); box-shadow: 0 0 0 3px var(--superficie); font-style: normal; }
.jx-compras .jx-passo i .ico { width: 14px; height: 14px; stroke-width: 2.5; }
.jx-compras .jx-passo.feito i { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-compras .jx-passo.atual i { background: var(--superficie); box-shadow: 0 0 0 3px var(--superficie), inset 0 0 0 2px var(--marca-amarelo); }
.jx-compras .jx-passo.atual i::after { content: ""; position: absolute; inset: -3px; border-radius: 50%; border: 2px solid var(--marca-amarelo); opacity: 0; }
.jx-compras .jx-passo span { display: block; max-width: 100%; font-size: 12.5px; line-height: 16px; font-weight: 600; overflow-wrap: anywhere; }
.jx-compras .jx-passo small { display: block; max-width: 100%; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); overflow-wrap: anywhere; }
.jx-compras .jx-passo.atual span { color: var(--primario); }
.jx-compras .jx-passo.futuro span { color: var(--texto-suave); }
.jx-compras .jx-passo small.jx-vencido { color: var(--vermelho); }
.jx-compras .jx-tl { margin-top: 4px; }
.jx-compras .jx-tl .tl-nota { margin-top: 4px; }
.jx-compras .jx-ligada { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 18px; padding: 12px 14px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); }
.jx-compras .jx-ligada > div { flex: 1; min-width: 0; }
.jx-compras .jx-ligada .tx-rotulo { display: block; }
.jx-compras .jx-ligada .texto-suave { overflow-wrap: anywhere; }
.jx-compras .jx-acoes { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--borda); }
.jx-compras .jx-acoes .jx-direita { margin-left: auto; }
.jx-compras .jx-foco-vazio { padding: 8px 0 4px; }

/* ---------- encomendas de clientes ---------- */
.jx-compras .jx-enc { margin-bottom: 12px; }
.jx-compras .jx-enc-cab { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 12px; align-items: flex-start; }
.jx-compras .jx-enc-info { min-width: 0; }
.jx-compras .jx-enc-info > strong { display: block; }
.jx-compras .jx-enc-info .tx-legenda { display: block; color: var(--texto-suave); margin-top: 2px; }
.jx-compras .jx-enc-acoes { display: flex; flex-direction: column; align-items: stretch; gap: 6px; }
.jx-compras .jx-enc-acoes .btn { justify-content: center; }
.jx-compras .jx-enc.jx-enc-sem { border-left: 3px solid var(--vermelho); }
.jx-compras .jx-enc.jx-enc-parcial { border-left: 3px solid var(--amarelo); }
.jx-compras .jx-enc.jx-enc-atrasada { border-left: 3px solid var(--laranja); }
.jx-compras .jx-enc-situacao { margin-top: 8px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.jx-compras .jx-enc-situacao .texto-mini { flex-basis: 100%; }

/* ---------- conferência de chegada ---------- */
.jx-compras .jx-cheg { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 12px 0; }
.jx-compras .jx-cheg + .jx-cheg { border-top: 1px solid var(--borda); }
.jx-compras .jx-cheg-info { min-width: 0; }
.jx-compras .jx-cheg-info strong { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.jx-compras .jx-cheg-info .tx-legenda { display: block; color: var(--texto-suave); overflow-wrap: anywhere; }
.jx-compras .jx-cheg-acoes { display: flex; gap: 6px; }

/* ---------- modal de conferência: um bloco por item (o corpo do modal leva a classe jx-compras) ---------- */
.jx-compras .jx-cmp-rec-item { padding: 12px 14px; margin-bottom: 10px; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie-2); }
.jx-compras .jx-cmp-rec-item .form-grid { margin-top: 8px; }
.jx-compras .jx-cmp-rec-item .form-grid .campo { margin-bottom: 0; }
.jx-compras .jx-cmp-rec-item input[type="number"] { width: 100%; }
.jx-compras .jx-cmp-rec-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }

/* ---------- responsivo ---------- */
@media (min-width: 641px) and (max-width: 1180px) {
  /* em telas médias a coluna "Itens" sai (o pedido em foco já lista os itens) */
  .jx-compras .jx-tab th:nth-child(3), .jx-compras .jx-tab td:nth-child(3) { display: none; }
}
@media (max-width: 640px) {
  .jx-compras .jx-tab td.celula-principal { padding-right: 150px; }
  .jx-compras .jx-tab .celula-principal > span, .jx-compras .jx-cli { max-width: none; white-space: normal; }
  .jx-compras .jx-tab .acoes-linha .btn-icone { opacity: 1; }
  .jx-compras .jx-tab td[data-rotulo="Promessa ao cliente"] { grid-column: 1 / -1; }
  .jx-compras .tabela-rodape { flex-direction: column; align-items: flex-start; gap: 4px; }
  .jx-compras .jx-forn { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .jx-compras .jx-forn-valor { flex-direction: row; align-items: center; justify-content: space-between; }
  .jx-compras .jx-repo { grid-template-columns: minmax(0, 1fr); gap: 2px; padding: 8px 0; }
  .jx-compras .jx-repo > span { white-space: normal; }
  /* trilho vira lista vertical: cinco colunas não cabem em 358px */
  .jx-compras .jx-trilho { grid-template-columns: minmax(0, 1fr); grid-auto-rows: 1fr; margin: 4px 0 12px; }
  .jx-compras .jx-trilho::before { left: 11px; right: auto; top: 10%; bottom: 10%; width: 2px; height: auto; }
  .jx-compras .jx-trilho-feito { left: 11px; top: 10%; width: 2px; height: var(--feito, 0%); transform-origin: center top; }
  .jx-compras .jx-passo { display: grid; grid-template-columns: 24px minmax(0, 1fr); column-gap: 12px; row-gap: 0; align-items: center; padding: 6px 0; text-align: left; }
  .jx-compras .jx-passo i { grid-row: 1 / span 2; }
  .jx-compras .jx-passo span, .jx-compras .jx-passo small { grid-column: 2; }
  .jx-compras .jx-enc-cab { grid-template-columns: auto minmax(0, 1fr); }
  .jx-compras .jx-enc-acoes { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; }
  .jx-compras .jx-cheg { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .jx-compras .jx-cheg-acoes { flex-wrap: wrap; }
  .jx-compras .alerta-atencao .alerta-acoes { width: 100%; margin: 4px 0 0; }
  .jx-compras .jx-acoes .btn { flex: 1 1 auto; justify-content: center; }
  .jx-compras .jx-acoes .jx-direita { margin-left: 0; }
}

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxc-entrar { from { opacity: 0; transform: translateY(8px); } }
  @keyframes jxc-crescer-x { from { transform: scaleX(0); } }
  @keyframes jxc-crescer-y { from { transform: scaleY(0); } }
  @keyframes jxc-anel { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(1.7); opacity: 0; } }
  .jx-compras .jx-barra { animation: jxc-crescer-x var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 70ms + 260ms); }
  .jx-compras .jx-forn { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 200ms); }
  .jx-compras .jx-trilho-feito { animation: jxc-crescer-x var(--dur-narrativa) var(--curva-saida) both; animation-delay: 220ms; }
  .jx-compras .jx-passo.atual i::after { animation: jxc-anel 2.4s var(--curva-saida) infinite; animation-delay: 900ms; }
  .jx-compras .jx-tab tbody tr { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 180ms); }
  .jx-compras .jx-tl .tl-item { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 260ms); }
  .jx-compras .jx-enc, .jx-compras .jx-cheg { animation: jxc-entrar var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 45ms + 120ms); }
}
@media (prefers-reduced-motion: no-preference) and (max-width: 640px) {
  .jx-compras .jx-trilho-feito { animation-name: jxc-crescer-y; }
}

/* ---------- assistencia ---------- */
/* JADE — estilos da tela assistencia (prefixo jx-, escopados em .jx-assistencia)
   Lista de OS em cartões (relógio em anel | ficha | trilho de etapas | status e ações),
   réguas dos relógios do CDC e avarias por origem. Só tokens de variaveis.css:
   o tema escuro vem de graça. Carrega depois de jade-ui.css e jade-x.css. */

.jx-assistencia .card { min-width: 0; }
.jx-assistencia .grade-12 { align-items: start; }
.jx-assistencia .kpi-valor { font-variant-numeric: tabular-nums; }
.jx-assistencia .kpi-sub .texto-vermelho { font-weight: 600; }
.jx-assistencia .alerta-atencao { align-items: center; }
.jx-assistencia .abas { margin-bottom: 14px; }
.jx-assistencia .barra-ferramentas .btn-mini { height: 34px; }

/* etiquetas de origem/avaria no título do cartão (variações do .tag do design system) */
.jx-assistencia .tag.tag-vermelho { color: var(--vermelho); border-color: var(--vermelho-suave); background: var(--vermelho-suave); }
.jx-assistencia .tag.tag-roxo { color: var(--roxo); border-color: var(--roxo-suave); background: var(--roxo-suave); }
.jx-assistencia .tag.tag-neutro { color: var(--texto-suave); }

/* ---------- lista de OS: um cartão por linha, relógio | ficha | trilho | lado ---------- */
.jx-assistencia .jx-lista { gap: 12px; }
.jx-assistencia .jx-fechadas-titulo { margin: 8px 0 0; }
.jx-assistencia .jx-os { display: grid; grid-template-columns: 96px minmax(0, 1fr) 300px auto; align-items: center; gap: 20px; padding: 16px 20px; cursor: pointer; transition: border-color var(--dur-rapida), box-shadow var(--dur-base) var(--curva-padrao); }
.jx-assistencia .jx-os:hover { border-color: var(--borda-forte); box-shadow: var(--sombra-media); }
.jx-assistencia .jx-os-info { min-width: 0; }
.jx-assistencia .jx-os-info > strong { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; line-height: 20px; }
.jx-assistencia .jx-os-info > span { max-width: none; }
.jx-assistencia .jx-os-info > .jx-os-prazos { display: block; -webkit-line-clamp: unset; margin-top: 6px; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); }
.jx-assistencia .jx-os-prazos .texto-vermelho { font-weight: 600; }
.jx-assistencia .jx-os-lado { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
.jx-assistencia .jx-os-lado .badge { max-width: 100%; }
.jx-assistencia .jx-os-acoes { display: flex; align-items: center; gap: 4px; }
.jx-assistencia .jx-os-acoes .btn-mini { white-space: nowrap; }
.jx-assistencia .jx-os-acoes .btn-icone { width: 32px; height: 32px; }

/* F. relógio legal: anel com os dias que faltam, cor pelo significado */
.jx-assistencia .jx-relogio { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.jx-assistencia .jx-relogio .anel-prog { width: 72px; height: 72px; }
.jx-assistencia .jx-relogio .trilha, .jx-assistencia .jx-relogio .arco { stroke-width: 3.5; }
.jx-assistencia .jx-relogio .anel-prog span { font-size: 15px; letter-spacing: -0.02em; }
.jx-assistencia .jx-relogio.verde .arco { stroke: var(--verde); }
.jx-assistencia .jx-relogio.laranja .arco { stroke: var(--laranja); }
.jx-assistencia .jx-relogio.vermelho .arco { stroke: var(--vermelho); }
.jx-assistencia .jx-relogio.vermelho .anel-prog span { color: var(--vermelho); }
.jx-assistencia .jx-relogio.fechada .arco { stroke: var(--verde); }
.jx-assistencia .jx-relogio.fechada.fora .arco { stroke: var(--vermelho); }
.jx-assistencia .jx-relogio.fechada .anel-prog span, .jx-assistencia .jx-relogio.neutra .anel-prog span { color: var(--texto-suave); }
.jx-assistencia .jx-relogio-check { position: absolute; right: -3px; bottom: -3px; z-index: 1; display: flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; background: var(--verde); color: var(--sobre-status); box-shadow: 0 0 0 2px var(--superficie); }
.jx-assistencia .jx-relogio.fora .jx-relogio-check { background: var(--vermelho); }
.jx-assistencia .jx-relogio-check .ico { width: 13px; height: 13px; stroke-width: 3; }
.jx-assistencia .jx-relogio-texto { font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); white-space: nowrap; }
.jx-assistencia .jx-relogio.verde .jx-relogio-texto b { color: var(--verde); font-weight: 650; }
.jx-assistencia .jx-relogio.laranja .jx-relogio-texto b { color: var(--laranja); font-weight: 650; }
.jx-assistencia .jx-relogio.vermelho .jx-relogio-texto b { color: var(--vermelho); font-weight: 650; }
.jx-assistencia .jx-relogio.fechada .jx-relogio-texto b { color: var(--texto); font-weight: 650; }

/* E. trilho de etapas da OS */
.jx-assistencia .jx-trilho { position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); padding-top: 2px; min-width: 0; }
.jx-assistencia .jx-trilho-linha, .jx-assistencia .jx-trilho-feito { position: absolute; left: 10%; top: 13px; height: 2px; border-radius: 1px; background: var(--neutro-suave); }
.jx-assistencia .jx-trilho-linha { width: 80%; }
.jx-assistencia .jx-trilho-feito { width: calc(var(--feito, 0%) * .8); background: var(--marca-amarelo); transform-origin: left center; }
.jx-assistencia .jx-passo { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; min-width: 0; }
.jx-assistencia .jx-passo i { position: relative; display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--neutro-suave); color: var(--sobre-amarelo); font-style: normal; box-shadow: 0 0 0 3px var(--superficie); }
.jx-assistencia .jx-passo i .ico { width: 14px; height: 14px; stroke-width: 2.5; }
.jx-assistencia .jx-passo.feito i { background: var(--marca-amarelo); }
.jx-assistencia .jx-passo.atual i { background: var(--superficie); box-shadow: inset 0 0 0 2px var(--marca-amarelo), 0 0 0 3px var(--superficie); }
.jx-assistencia .jx-passo.atual i::after { content: ""; position: absolute; inset: -4px; border-radius: 50%; border: 2px solid var(--marca-amarelo); opacity: 0; }
.jx-assistencia .jx-passo.cancelado i { background: var(--vermelho-suave); color: var(--vermelho); }
.jx-assistencia .jx-passo span { font-size: 11.5px; line-height: 14px; font-weight: 500; color: var(--texto-suave); overflow-wrap: anywhere; }
.jx-assistencia .jx-passo.feito span, .jx-assistencia .jx-passo.atual span { color: var(--texto); }
.jx-assistencia .jx-passo.atual span { font-weight: 600; }
.jx-assistencia .jx-passo.cancelado span { color: var(--vermelho); }
.jx-assistencia .jx-passo small { display: block; font-size: 11px; line-height: 14px; font-weight: 500; color: var(--texto-suave); }

/* detalhe da OS: anel + trilho no topo do cartão dos relógios */
.jx-assistencia .jx-os-topo { display: grid; grid-template-columns: 96px minmax(0, 1fr); align-items: center; gap: 16px; margin-bottom: 16px; padding-bottom: 16px; border-bottom: 1px solid var(--borda); }

/* ---------- réguas do CDC: 30 dias contados da reclamação, 90 da entrega ---------- */
.jx-assistencia .jx-sobrelinha { display: block; margin-top: 4px; color: var(--texto-suave); text-transform: uppercase; }
.jx-assistencia .jx-regua { position: relative; height: 84px; margin-top: 10px; }
.jx-assistencia .jx-regua-90 { height: 56px; margin-top: 6px; }
.jx-assistencia .jx-regua-trilha { position: absolute; left: 0; right: 0; top: 40px; display: flex; height: 10px; border-radius: 999px; background: var(--neutro-suave); overflow: hidden; }
.jx-assistencia .jx-regua-90 .jx-regua-trilha { top: 14px; }
.jx-assistencia .jx-regua-seg { flex: 0 0 var(--v, 0%); height: 100%; background: var(--marca-amarelo); transform-origin: left center; }
.jx-assistencia .jx-regua-seg.verde { background: var(--verde); }
.jx-assistencia .jx-regua-seg.laranja { background: var(--laranja); }
.jx-assistencia .jx-regua-seg.vermelho { background: var(--vermelho); }
.jx-assistencia .jx-regua-seg.marca { background: var(--marca-amarelo); }
.jx-assistencia .jx-regua-marca { position: absolute; top: 20px; width: 2px; height: 20px; margin-left: -1px; border-radius: 1px; background: var(--texto); }
.jx-assistencia .jx-regua-rotulo { position: absolute; top: 2px; white-space: nowrap; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto); }
.jx-assistencia .jx-regua-rotulo b { font-weight: 650; }
.jx-assistencia .jx-regua-rotulo-dir { text-align: right; }
.jx-assistencia .jx-regua-pips { position: absolute; left: 0; right: 0; top: 45px; height: 0; }
.jx-assistencia .jx-regua-90 .jx-regua-pips { top: 19px; }
.jx-assistencia .jx-pip { position: absolute; top: 0; width: 14px; height: 14px; border-radius: 50%; transform: translate(-50%, -50%); background: var(--verde); box-shadow: 0 0 0 2px var(--superficie); transition: transform var(--dur-base) var(--curva-mola); }
.jx-assistencia .jx-pip:hover, .jx-assistencia .jx-pip:focus-visible { transform: translate(-50%, -50%) scale(1.3); z-index: 2; }
/* a dica só existe no hover/foco: escondida ela ainda ocuparia largura e criaria rolagem no celular */
.jx-assistencia .jx-pip::after { display: none; }
.jx-assistencia .jx-pip:hover::after, .jx-assistencia .jx-pip:focus-visible::after, .jx-assistencia .jx-pip.dica-visivel::after { display: block; }
.jx-assistencia .jx-pip.laranja { background: var(--laranja); }
.jx-assistencia .jx-pip.vermelho { background: var(--vermelho); }
.jx-assistencia .jx-pip.marca { background: var(--marca-amarelo); box-shadow: 0 0 0 2px var(--superficie), 0 0 0 3px var(--marca-ambar-escuro); }
.jx-assistencia .jx-regua-escala { position: absolute; left: 0; right: 0; top: 58px; height: 16px; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); font-variant-numeric: tabular-nums; }
.jx-assistencia .jx-regua-90 .jx-regua-escala { top: 32px; }
.jx-assistencia .jx-regua-escala span { position: absolute; white-space: nowrap; }
.jx-assistencia .jx-regua-escala b { font-weight: 650; color: var(--texto); }
.jx-assistencia .jx-regua-sanar { left: 66.667%; transform: translateX(-50%); font-weight: 600; color: var(--primario-forte); }
.jx-assistencia .jx-regua-fim { right: 0; text-align: right; }
.jx-assistencia .jx-regua-legenda { margin-top: 10px; color: var(--texto-suave); }
.jx-assistencia .jx-regras { list-style: none; margin: 16px 0 0; padding: 14px 0 0; border-top: 1px solid var(--borda); display: flex; flex-direction: column; gap: 10px; }
.jx-assistencia .jx-regras li { display: flex; align-items: center; gap: 10px; font-size: 13px; line-height: 18px; color: var(--texto); }
.jx-assistencia .jx-regras b { font-weight: 650; }
.jx-assistencia .jx-regras-ico { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; border-radius: var(--raio-s); background: var(--neutro-suave); color: var(--texto-suave); }
.jx-assistencia .jx-regras-ico .ico { width: 15px; height: 15px; }

/* ---------- avarias por origem: barras horizontais de uma cor + faísca do tempo para sanar ---------- */
.jx-assistencia .jx-origens { display: flex; flex-direction: column; gap: 10px; }
.jx-assistencia .jx-origem { display: grid; grid-template-columns: 84px minmax(0, 1fr) 24px; align-items: center; gap: 12px; }
.jx-assistencia .jx-origem-nome { font-size: 13px; line-height: 18px; color: var(--texto); }
.jx-assistencia .jx-origem-trilha { height: 12px; border-radius: 4px; background: var(--neutro-suave); overflow: hidden; }
.jx-assistencia .jx-origem-barra { height: 100%; width: var(--v, 0%); border-radius: inherit; background: var(--etapa-2); transform-origin: left center; }
.jx-assistencia .jx-origem-num { font-size: 13.5px; line-height: 18px; font-weight: 650; text-align: right; color: var(--texto); }
.jx-assistencia .jx-sanar { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--borda); }
.jx-assistencia .jx-sanar-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.jx-assistencia .jx-faisca { display: block; width: 100%; height: 44px; }
.jx-assistencia .jx-faisca-leg { display: flex; align-items: center; gap: 6px; margin-top: 8px; }
.jx-assistencia .jx-tend { display: inline-flex; align-items: center; gap: 4px; }
.jx-assistencia .jx-tend.verde { color: var(--verde); }
.jx-assistencia .jx-tend.vermelho { color: var(--vermelho); }
.jx-assistencia .jx-faisca-vazio { margin: 0; }

/* ---------- animações (só com movimento permitido; só na entrada da tela) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxa-crescer { from { transform: scaleX(0); } }
  @keyframes jxa-entrar { from { opacity: 0; transform: translateY(8px); } }
  @keyframes jxa-anel { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(1.7); opacity: 0; } }
  @keyframes jxa-anel-desenhar { from { stroke-dasharray: 0 100; } }
  @keyframes jxa-pop { from { transform: translate(-50%, -50%) scale(0); } }
  .anima-entrada .jx-assistencia .jx-lista > .card { animation: jxa-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 60ms + 160ms); }
  .anima-entrada .jx-assistencia .jx-relogio .arco { animation: jxa-anel-desenhar var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 60ms + 320ms); }
  .anima-entrada .jx-assistencia .jx-trilho-feito { animation: jxa-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 60ms + 320ms); }
  .anima-entrada .jx-assistencia .jx-regua-seg { animation: jxa-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 120ms + 360ms); }
  .anima-entrada .jx-assistencia .jx-regua-marca, .anima-entrada .jx-assistencia .jx-regua-rotulo { animation: jxa-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 90ms + 700ms); }
  .anima-entrada .jx-assistencia .jx-pip { animation: jxa-pop var(--dur-lenta) var(--curva-mola) both; animation-delay: calc(var(--i, 0) * 60ms + 900ms); }
  .anima-entrada .jx-assistencia .jx-origem-barra { animation: jxa-crescer var(--dur-narrativa) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 70ms + 300ms); }
  .anima-entrada .jx-assistencia .jx-regras li { animation: jxa-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 900ms); }
  .jx-assistencia .jx-passo.atual i::after { animation: jxa-anel 2.4s var(--curva-saida) infinite; animation-delay: 1s; }
  /* filtro/busca redesenham a lista sem re-animar a entrada */
  .jx-assistencia .jx-quieto .card, .jx-assistencia .jx-quieto .arco, .jx-assistencia .jx-quieto .jx-trilho-feito { animation: none; }
}

/* ---------- responsivo ---------- */
@media (max-width: 1280px) {
  .jx-assistencia .jx-os { grid-template-columns: 96px minmax(0, 1fr); row-gap: 16px; }
  .jx-assistencia .jx-trilho, .jx-assistencia .jx-os-lado { grid-column: 1 / -1; }
  .jx-assistencia .jx-os-lado { flex-direction: row; align-items: center; justify-content: space-between; flex-wrap: wrap; }
}
@media (max-width: 640px) {
  .jx-assistencia .jx-os { grid-template-columns: 72px minmax(0, 1fr); gap: 14px; padding: 14px; }
  .jx-assistencia .jx-relogio .anel-prog { width: 60px; height: 60px; }
  .jx-assistencia .jx-relogio .anel-prog span { font-size: 13px; }
  .jx-assistencia .jx-relogio-texto { white-space: normal; text-align: center; }
  .jx-assistencia .jx-passo small { display: none; }
  .jx-assistencia .jx-passo span { font-size: 11px; }
  .jx-assistencia .jx-os-acoes { flex-wrap: wrap; justify-content: flex-end; }
  /* réguas: os rótulos "Dia 20" e "Dia 27" ficam em duas linhas e o "limite" vai para a linha de baixo da escala */
  .jx-assistencia .jx-regua-30 { height: 122px; }
  .jx-assistencia .jx-regua-30 .jx-regua-trilha { top: 58px; }
  .jx-assistencia .jx-regua-30 .jx-regua-marca { top: 20px; height: 38px; }
  .jx-assistencia .jx-regua-30 .jx-regua-marca:nth-of-type(2) { top: 38px; height: 20px; }
  .jx-assistencia .jx-regua-30 .jx-regua-rotulo-dir { top: 20px; }
  .jx-assistencia .jx-regua-30 .jx-regua-pips { top: 63px; }
  .jx-assistencia .jx-regua-30 .jx-regua-escala { top: 76px; }
  .jx-assistencia .jx-regua-escala .jx-regua-fim { top: 18px; }
  .jx-assistencia .jx-regua-90 { height: 74px; }
  .jx-assistencia .jx-os-topo { grid-template-columns: 72px minmax(0, 1fr); }
  .jx-assistencia .pagina-acoes .btn { flex: 1 1 auto; justify-content: center; }
}

/* ---------- relatorios ---------- */
/* JADE — estilos da tela relatorios (prefixo jx-, escopados em .jx-relatorios)
   Só usa tokens de variaveis.css (tema escuro vem de graça); carrega depois de
   jade-ui.css e jade-x.css. Nenhuma classe do design system é redefinida fora
   do escopo .jx-relatorios. */

.jx-relatorios .card { min-width: 0; }
.jx-relatorios .card-titulo { flex-wrap: wrap; }
.jx-relatorios .card-titulo .btn, .jx-relatorios .card-titulo .badge, .jx-relatorios .card-titulo .g-legenda, .jx-relatorios .card-titulo .link-acao { flex-shrink: 0; }
.jx-relatorios .card-acoes { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; flex-wrap: wrap; }
.jx-relatorios .card-acoes select { height: 32px; min-height: 0; width: auto; padding-top: 0; padding-bottom: 0; font-size: 13px; }
.jx-relatorios .secao-titulo { margin-top: 24px; }
.jx-relatorios .texto-mini.mt-8 { margin-top: 8px; }

/* ---------- cabeçalho: filtro de período com select embutido + exportar tudo ---------- */
.jx-relatorios .filtro { cursor: pointer; }
.jx-relatorios .filtro select {
  height: auto; min-height: 0; width: auto; max-width: 180px; padding: 0 18px 0 0; margin: 0;
  border: 0; border-radius: 0; background-color: transparent; box-shadow: none;
  font: inherit; font-size: 13px; font-weight: 600; color: inherit; cursor: pointer;
  background-position: right 0 center;
}
.jx-relatorios .filtro select:focus { outline: none; box-shadow: none; }
.jx-relatorios .filtro:focus-within { border-color: var(--primario); box-shadow: 0 0 0 3px var(--anel-foco); }

/* ---------- KPIs ---------- */
.jx-relatorios .kpi-valor { font-variant-numeric: tabular-nums; }
.jx-relatorios .kpi-sub .kpi-delta { flex-shrink: 0; }
.jx-relatorios .kpi-extra .faisca { display: block; width: 100%; height: 32px; }
.jx-relatorios .kpi-extra .prog-rotulos { flex-wrap: wrap; }
.jx-relatorios .kpi-extra > .kpi-sub { margin-top: 0; }
.jx-relatorios .jx-fill-base { background: var(--grafico-base); }
.jx-relatorios .jx-fill-tinta { background: var(--texto); }

/* ---------- raias de vendedor (pista contra a meta individual) ---------- */
.jx-relatorios .jx-raias { display: flex; flex-direction: column; }
.jx-relatorios .jx-raia-cab, .jx-relatorios .jx-raia { display: grid; grid-template-columns: 24px 32px minmax(120px, 172px) minmax(0, 1fr) 112px; align-items: center; gap: 12px; }
.jx-relatorios .jx-raia-cab { min-height: 0; margin: 0; padding: 0 8px 8px; border: 0; color: var(--texto-suave); text-transform: uppercase; }
.jx-relatorios .jx-raia-cab .jx-raia-eixo { display: flex; justify-content: space-between; }
.jx-relatorios .jx-raia { min-height: 56px; margin: 0 -8px; padding: 6px 8px; border-top: 1px solid var(--borda); border-radius: var(--raio-s); transition: background var(--dur-rapida); }
.jx-relatorios .jx-raia:hover { background: var(--superficie-2); }
.jx-relatorios .jx-raia-nome { min-width: 0; }
.jx-relatorios .jx-raia-nome strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-relatorios .jx-raia-nome span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-relatorios .jx-raia-valor { text-align: right; font-size: 13.5px; line-height: 18px; font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.jx-relatorios .jx-raia-valor span { display: block; font-size: 12px; line-height: 16px; font-weight: 500; color: var(--texto-suave); }
.jx-relatorios .jx-raia.lider .rk-pos { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-relatorios .jx-raia .prog-meta { min-width: 0; }
.jx-relatorios .jx-raia .prog-marca-meta { border-radius: 0; background: repeating-linear-gradient(to bottom, var(--texto) 0 3px, transparent 3px 5px); }

/* ---------- composição (forma · origem · categoria): barras de uma cor ---------- */
.jx-relatorios .jx-uma-cor .fb-barra { background: var(--etapa-2); }
.jx-relatorios .fb-trilha { outline: none; }
.jx-relatorios .fb-trilha:focus-visible { box-shadow: 0 0 0 2px var(--foco); }
.jx-relatorios .fb-valor small { white-space: nowrap; }
.jx-relatorios .jx-bloco + .jx-bloco { margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--borda); }
.jx-relatorios .jx-bloco .card-titulo { margin-bottom: 12px; }
.jx-relatorios .jx-bloco .vazio.embutido { padding: 14px 8px; }

/* ---------- funil real: degraus em rampa ---------- */
.jx-relatorios .jx-funil { display: flex; flex-direction: column; gap: 14px; }
.jx-relatorios .jx-funil-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 6px; font-size: 13.5px; line-height: 20px; }
.jx-relatorios .jx-funil-cab strong { font-weight: 600; min-width: 0; }
.jx-relatorios .jx-funil-num { font-size: 15px; font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.jx-relatorios .jx-funil-num small { margin-left: 8px; font-size: 12px; font-weight: 500; color: var(--texto-suave); }
.jx-relatorios .jx-funil .fb-trilha { height: 14px; border-radius: 4px; }
.jx-relatorios .jx-fatos { --cols: 3; margin-top: 18px; padding-top: 16px; }
.jx-relatorios .jx-fatos dt { font-size: 11.5px; line-height: 16px; }

/* ---------- orçamentos em aberto ---------- */
.jx-relatorios .jx-orcs { display: flex; flex-direction: column; }
.jx-relatorios .jx-orc { display: grid; grid-template-columns: minmax(0, 1fr) auto 36px; align-items: center; gap: 12px; margin: 0 -8px; padding: 7px 8px; border-top: 1px solid var(--borda); border-radius: var(--raio-s); transition: background var(--dur-rapida); }
.jx-relatorios .jx-orc:first-child { border-top: 0; }
.jx-relatorios .jx-orc:hover { background: var(--superficie-2); }
.jx-relatorios .jx-orc-nome { min-width: 0; }
.jx-relatorios .jx-orc-nome > strong { display: block; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-relatorios .jx-orc-nome > strong a { color: inherit; text-decoration: none; }
.jx-relatorios .jx-orc-nome > strong a:hover { color: var(--primario); }
.jx-relatorios .jx-orc-nome > span { display: block; font-size: 12px; line-height: 16px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-relatorios .jx-orc-nome em { font-style: normal; }
.jx-relatorios .jx-orc-valor { font-size: 13.5px; line-height: 18px; font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.jx-relatorios .jx-orc .btn-icone { width: 36px; height: 36px; }

/* ---------- cards em coluna: rodapé colado embaixo mesmo quando a grade estica ---------- */
.jx-relatorios .jx-card-coluna { display: flex; flex-direction: column; }
.jx-relatorios .jx-card-coluna > .card-rodape { margin-top: auto; }
.jx-relatorios .jx-card-coluna > .jx-raias, .jx-relatorios .jx-card-coluna > .jx-fatos, .jx-relatorios .jx-card-coluna > .jx-orcs, .jx-relatorios .jx-card-coluna > .vazio { margin-bottom: 16px; }
.jx-relatorios .jx-rodape-flex { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; }
.jx-relatorios .jx-rodape-flex strong, .jx-relatorios .card-rodape strong { color: var(--texto); font-variant-numeric: tabular-nums; }
.jx-relatorios .card-rodape .link-acao { font-size: 12.5px; }

/* ---------- gráficos SVG ---------- */
.jx-relatorios .grafico { min-height: 120px; }
.jx-relatorios .g-barra.zero { fill: var(--borda-forte); }
.jx-relatorios .g-barra { transition: fill var(--dur-rapida), opacity var(--dur-rapida); }

/* ---------- barras com número alinhado (régua única nos cards) ---------- */
.jx-relatorios .jx-num-barra { flex: 0 0 52px; text-align: right; font-variant-numeric: tabular-nums; }

/* ---------- células: nome do produto dentro de UI.tabela não força 180px (no
   celular a célula tem metade da largura) · complemento em linha própria ---------- */
.jx-relatorios .tabela td > .celula-principal { min-width: 0; }
.jx-relatorios .jx-sub-cel { display: block; }

/* ---------- DRE: linhas fortes e recuo por categoria ---------- */
.jx-relatorios .jx-dre tr.jx-forte td { border-top: 2px solid var(--borda); font-weight: 650; }
.jx-relatorios .jx-dre td.jx-recuo { padding-left: 28px; }

/* ---------- cartão de insight (borda colorida à esquerda) ---------- */
.jx-relatorios .jx-insight { border-left: 4px solid var(--primario); }
.jx-relatorios .jx-insight.alerta { border-left-color: var(--amarelo); }
.jx-relatorios .jx-insight p { margin: 0; }
.jx-relatorios .jx-insight p + p { margin-top: 6px; }

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jxr-entrar { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  .jx-relatorios .jx-orc, .jx-relatorios .jx-funil-passo, .jx-relatorios .jx-fatos > div { animation: jxr-entrar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 240ms); }
}

/* ---------- responsivo ---------- */
@media (max-width: 1180px) {
  .jx-relatorios .jx-card-coluna > .card-rodape { margin-top: 16px; }
}
@media (max-width: 640px) {
  .jx-relatorios .pagina-acoes { width: 100%; }
  /* KPI em coluna única: o valor inteiro (R$ 126.245,00) cabe sem reticências */
  .jx-relatorios .jx-kpis { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .jx-relatorios .jx-kpis .kpi { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "info icone"; }
  .jx-relatorios .filtro select { max-width: 132px; }
  .jx-relatorios .card-titulo .g-legenda { gap: 8px 12px; }
  .jx-relatorios .jx-raia-cab, .jx-relatorios .jx-raia { grid-template-columns: 24px 32px minmax(0, 1fr) auto; gap: 8px 10px; }
  .jx-relatorios .jx-raia-cab > :nth-child(4) { display: none; }
  .jx-relatorios .jx-raia > .prog-meta { order: 5; grid-column: 1 / -1; margin: 2px 0 6px; }
  .jx-relatorios .jx-raia-valor { font-size: 13px; }
  /* "3 pedidos · meta R$ 75 mil" quebra em duas linhas em vez de cortar com reticências */
  .jx-relatorios .jx-raia-nome span { white-space: normal; }
  /* célula do produto (Curva ABC) ocupa a largura toda do cartão */
  .jx-relatorios .tabela-responsiva td:has(> .celula-principal) { grid-column: 1 / -1; }
  .jx-relatorios .jx-fatos { --cols: 2; }
  .jx-relatorios .jx-funil-num { font-size: 14px; }
  .jx-relatorios .jx-orc { gap: 8px; }
  .jx-relatorios .jx-orc-valor { font-size: 13px; }
  .jx-relatorios .fb-rotulo { font-size: 12.5px; }
  .jx-relatorios .fb-valor { font-size: 12.5px; }
  .jx-relatorios .fb-valor small { display: none; }
  .jx-relatorios .card-acoes { width: 100%; justify-content: flex-start; }
}

/* ---------- fila ---------- */
/* JADE — estilos da tela Fila do salão (prefixo jx-, escopados em .jx-fila)
   Balcão (desktop), celular (≤ 640px) e TV do salão (#/fila/tv, .jx-fila-tv).
   Só usa tokens de variaveis.css (tema escuro vem de graça); carrega depois de
   jade-ui.css e jade-x.css e nunca redefine classes do design system fora do
   escopo .jx-fila. */

/* ---------- cabeçalho: modo balcão/TV, subtítulo por tamanho de tela ---------- */
.jx-fila .pagina-acoes { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.jx-fila .segmentado a.jx-seg { position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; border-radius: 7px; color: var(--texto-suave); font-size: 13px; font-weight: 600; text-decoration: none; white-space: nowrap; transition: color var(--dur-rapida); }
.jx-fila .segmentado a.jx-seg:hover { color: var(--texto); }
.jx-fila .segmentado a.jx-seg .ico { width: 15px; height: 15px; }
.jx-fila .jx-sub-cel { display: none; }
.jx-fila .jx-sub-cel .badge { margin-left: 8px; }
.jx-fila .jx-so-cel { display: none; }

/* ---------- cartão "Vez de": roda do rodízio + lado direito ---------- */
.jx-fila .jx-vezcard { grid-template-columns: auto minmax(0, 1fr); gap: 36px; padding: 20px 28px; align-items: center; }
.jx-fila .jx-vezcard .fv-lado { align-items: flex-start; gap: 16px; min-width: 0; width: 100%; }
.jx-fila .jx-vezcard .fv-pessoa { width: 100%; }
.jx-fila .jx-seq-bloco { width: 100%; min-width: 0; }
.jx-fila .jx-seq-bloco .fv-seq-rotulo { display: block; margin-bottom: 8px; }
.jx-fila .jx-vezcard .fv-seq { justify-content: flex-start; }
.jx-fila .jx-cz-nome { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.jx-fila .jx-cz-nome span:last-child { overflow: hidden; text-overflow: ellipsis; }
.jx-fila .jx-vezcard .fv-acoes { margin-top: 4px; align-items: center; }
.jx-fila .jx-aviso { color: var(--lateral-texto); }
.jx-fila .jx-link-claro { color: var(--marca-amarelo); font-size: 12px; line-height: 16px; margin-left: 4px; }
.jx-fila .jx-link-claro:hover { color: var(--marca-ambar-claro); }
.jx-fila .fv-seq-item .avatar[data-status]::after { box-shadow: 0 0 0 2px var(--escuro-2); }

.jx-fila .jx-roda { position: relative; width: var(--tam, 300px); height: var(--tam, 300px); flex-shrink: 0; }
.jx-fila .jx-roda-anel { position: absolute; inset: 34px; border: 1px dashed var(--lateral-texto-suave); border-radius: 50%; opacity: .45; }
.jx-fila .jx-roda-seta { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; }
.jx-fila .jx-roda-seta-tracado { stroke: var(--lateral-texto-suave); }
.jx-fila .jx-roda-seta-ponta { fill: var(--lateral-texto-suave); }
.jx-fila .jx-roda-sats { position: absolute; inset: 0; }
.jx-fila .jx-roda-sat { position: absolute; left: 50%; top: 50%; width: 40px; height: 40px; }
.jx-fila .jx-roda-sat .avatar { box-shadow: 0 0 0 3px var(--escuro); }
.jx-fila .jx-roda-sat .avatar[data-status]::after { box-shadow: 0 0 0 2px var(--escuro); }
.jx-fila .jx-roda-sat-rot { position: absolute; top: 44px; left: 50%; transform: translateX(-50%); height: 18px; padding: 0 7px; border-radius: var(--raio-pill); background: var(--escuro-3); color: var(--lateral-texto); font-size: 11px; line-height: 18px; font-weight: 600; white-space: nowrap; font-variant-numeric: tabular-nums; }
.jx-fila .jx-roda-sat-rot strong { color: var(--texto-inverso); font-weight: 600; margin-right: 4px; }
.jx-fila .jx-roda-centro { position: absolute; left: 50%; top: 50%; width: 150px; transform: translate(-50%, -50%); text-align: center; }
.jx-fila .jx-roda-centro-in { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.jx-fila .jx-roda-centro .fv-avatar { display: inline-flex; }
.jx-fila .jx-roda-vez { display: block; margin-top: 6px; color: var(--marca-amarelo); text-transform: uppercase; }
.jx-fila .jx-roda-nome { display: block; max-width: 150px; font-size: 28px; line-height: 32px; font-weight: 700; letter-spacing: -0.025em; color: var(--texto-inverso); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ---------- "Hoje no salão": faixa do dia ---------- */
.jx-fila .card-titulo { flex-wrap: wrap; }
.jx-fila .jx-hoje-dir { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.jx-fila .jx-hoje-dir .jx-dia-legenda { margin-top: 0; gap: 14px; }
.jx-fila .jx-dia-legenda i.jx-pt-venda { background: var(--verde); }
.jx-fila .jx-dia-legenda i.jx-pt-agora { background: var(--marca-amarelo); }
.jx-fila .jx-dia { margin-top: 10px; }
.jx-fila .jx-ev { cursor: default; }
.jx-fila .jx-ev:focus-visible { outline: 2px solid var(--primario); outline-offset: 3px; }

/* ---------- KPIs ---------- */
.jx-fila .kpi-valor { font-variant-numeric: tabular-nums; }
.jx-fila .kpi .prog-fill { background: var(--marca-amarelo); }
.jx-fila .kpi .prog-fill.prog-verde { background: var(--verde); }

/* ---------- barra de filtros: status dentro do controle "filtro" ---------- */
.jx-fila .filtro { padding-right: 6px; }
.jx-fila .filtro select { height: 30px; padding: 0 22px 0 4px; border: 0; background: transparent; box-shadow: none; color: var(--texto); font-size: 13px; font-weight: 600; cursor: pointer; }
.jx-fila .filtro select:focus { outline: none; box-shadow: none; }
.jx-fila .filtro:focus-within { border-color: var(--primario); }

/* ---------- visitas de hoje (tabela) ---------- */
.jx-fila .jx-visitas td { padding: 10px 16px; vertical-align: middle; }
.jx-fila .jx-visitas td.num { white-space: nowrap; }
.jx-fila .jx-visitas .jx-v-hora strong { font-weight: 600; white-space: nowrap; }
.jx-fila .jx-visitas .jx-v-dia { display: block; color: var(--amarelo); white-space: nowrap; }
.jx-fila .jx-visitas tr.jx-aberta td:first-child { box-shadow: inset 3px 0 0 var(--azul); }
.jx-fila .jx-vend { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
.jx-fila .jx-obs { display: block; max-width: 32ch; font-size: 12.5px; line-height: 18px; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-fila .jx-visitas .celula-principal > .jx-v-cab { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin: 0; max-width: none; font-size: 14px; line-height: 20px; color: var(--texto); -webkit-line-clamp: unset; }
.jx-fila .jx-visitas .jx-v-cab strong { display: block; min-width: 0; font-weight: 600; color: var(--texto); }
.jx-fila .jx-visitas .celula-principal > .jx-v-chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 5px; max-width: none; -webkit-line-clamp: unset; }
.jx-fila .jx-visitas .acoes-linha { gap: 6px; flex-wrap: wrap; }
.jx-fila .jx-visitas .acoes-linha .link-acao { margin-right: 4px; }
.jx-fila .jx-visitas-wrap .tabela-rodape strong { color: var(--texto); font-weight: 600; }

/* ---------- conversão por vendedor (14 dias) ---------- */
.jx-fila .jx-conv-acoes { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }
.jx-fila .jx-conv-linha { display: grid; grid-template-columns: 32px 104px minmax(0, 1fr) 212px; align-items: center; gap: 12px; min-height: 36px; padding: 3px 0; border-bottom: 1px solid var(--borda); }
.jx-fila .jx-conv-linha:last-child { border-bottom: 0; }
.jx-fila .jx-conv-nome { font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jx-fila .jx-conv-num { font-size: 13px; line-height: 18px; color: var(--texto-suave); white-space: nowrap; }
.jx-fila .jx-conv-num strong { color: var(--texto); font-weight: 650; }
.jx-fila .jx-conv-num strong.texto-verde { color: var(--verde); }
.jx-fila .jx-conv-linha .prog-fill { background: var(--marca-amarelo); }
.jx-fila .jx-conv-linha .prog-fill.jx-prog-neutra { background: var(--grafico-base); }

/* ---------- como funciona a fila ---------- */
.jx-fila .jx-regras-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.jx-fila .jx-regras-lista li { display: flex; align-items: flex-start; gap: 10px; }
.jx-fila .jx-regras-lista .tx-corpo { padding-top: 4px; }
.jx-fila .jx-caixa-ico { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: 1px solid var(--borda); border-radius: var(--raio-s); background: var(--superficie); color: var(--texto-suave); }
.jx-fila .jx-caixa-ico .ico { width: 15px; height: 15px; }
.jx-fila .jx-regras-rodape { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--borda); flex-wrap: wrap; }
.jx-fila .jx-regras-rodape .tx-corpo-p { display: inline-flex; align-items: center; gap: 6px; color: var(--texto-suave); }
.jx-fila .jx-regras-rodape strong { color: var(--texto); font-weight: 600; }

/* ---------- histórico: dia a dia ---------- */
.jx-fila .jx-dia-card { margin: 0 0 8px; }
.jx-fila .jx-dia-card .card-titulo { margin-bottom: 8px; }
.jx-fila .jx-dia-resumo { font-weight: 500; font-size: 12.5px; }
.jx-fila .jx-dia-vends { display: flex; flex-wrap: wrap; gap: 10px 20px; }
.jx-fila .jx-dia-vend { display: inline-flex; align-items: center; gap: 8px; }
.jx-fila .texto-amarelo { color: var(--amarelo); }

/* ---------- animações (só com movimento permitido) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @keyframes jx-fila-subir { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
  @keyframes jx-fila-aparecer { from { opacity: 0; } to { opacity: 1; } }
  @keyframes jx-fila-pop { from { opacity: 0; transform: scale(.88); } to { opacity: 1; transform: none; } }
  @keyframes jx-fila-marchar { to { stroke-dashoffset: -20; } }
  @keyframes jx-fila-deslizar { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }
  @keyframes jx-fila-nova { from { background: var(--primario-suave); } to { background: transparent; } }
  .jx-fila .jx-roda-sats { transition: transform var(--dur-lenta) var(--curva-saida); }
  .jx-fila .jx-roda-centro-in { animation: jx-fila-pop var(--dur-lenta) var(--curva-mola) both; }
  .jx-fila .jx-roda-sat { animation: jx-fila-aparecer var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 70ms + 120ms); }
  .jx-fila .jx-roda-seta-tracado { animation: jx-fila-marchar 2.4s linear infinite; }
  .jx-fila .jx-seq-anima .fv-seq-item { animation: jx-fila-deslizar var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 60ms + 80ms); }
  .jx-fila .jx-ev { animation: jx-fila-subir var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 60ms + 200ms); }
  .jx-fila .jx-conv-linha { animation: jx-fila-subir var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 45ms + 100ms); }
  .jx-fila .jx-visitas tr.jx-nova td { animation: jx-fila-nova 1.6s var(--curva-saida) both; }
  .jx-fila .jx-visitas tr { animation: jx-fila-subir var(--dur-lenta) var(--curva-saida) backwards; animation-delay: calc(var(--i, 0) * 30ms); }
  .jx-fila .btn-icone:active { transform: scale(.94); }
  .jx-fila .jx-tv-quieta .jx-arco-fill, .jx-fila .jx-tv-quieta .jx-arco-ritmo, .jx-fila .jx-tv-quieta .jx-pista-fill, .jx-fila .jx-tv-quieta .jx-pista-corredor,
  .jx-fila .jx-tv-quieta .jx-roda-sat, .jx-fila .jx-tv-quieta .jx-roda-centro-in, .jx-fila .jx-tv-quieta .jx-ev, .jx-fila .jx-tv-quieta .jx-raia { animation: none; }
}

/* ---------- tablet / telas médias ---------- */
@media (max-width: 900px) {
  .jx-fila .jx-vezcard { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .jx-fila .jx-vezcard .jx-roda { justify-self: center; }
  .jx-fila .jx-conv-linha { grid-template-columns: 32px minmax(0, 1fr) auto; row-gap: 6px; }
  .jx-fila .jx-conv-linha .prog-meta { grid-column: 1 / -1; }
}

/* ---------- celular (≤ 640px): Vez de empilhado, sequência em fileira, visitas como cartões ---------- */
@media (max-width: 640px) {
  .jx-fila .jx-so-desk { display: none !important; }
  .jx-fila .jx-so-cel { display: inline-flex; }
  .jx-fila .jx-sub-desk { display: none; }
  .jx-fila .jx-sub-cel { display: inline-flex; align-items: center; flex-wrap: wrap; }
  .jx-fila .jx-cab .pagina-cab { margin-bottom: 16px; align-items: center; }
  .jx-fila .jx-cab .pagina-acoes { display: none; }
  .jx-fila .jx-hoje-card, .jx-fila .jx-regras { display: none; }
  .jx-fila .secao { margin-top: 16px; }
  .jx-fila .grade-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .jx-fila .kpi { padding: 12px 14px; column-gap: 8px; }
  .jx-fila .kpi-icone { width: 28px; height: 28px; }
  .jx-fila .kpi-valor { font-size: 22px; line-height: 28px; }
  .jx-fila .kpi-rotulo { margin-bottom: 6px; font-size: 12px; }
  .jx-fila .jx-vezcard { padding: 18px; gap: 14px; }
  .jx-fila .jx-vezcard .fv-pessoa { gap: 16px; }
  .jx-fila .jx-vezcard .fv-pessoa .fv-avatar { display: inline-flex; }
  .jx-fila .jx-vezcard .fv-nome { font-size: 26px; line-height: 32px; }
  .jx-fila .jx-vezcard .fv-lado { gap: 10px; }
  .jx-fila .jx-seq-bloco .fv-seq-rotulo { margin-bottom: 6px; }
  .jx-fila .jx-fileira { flex-wrap: nowrap; align-items: stretch; gap: 8px; overflow-x: auto; scroll-snap-type: x proximity; scrollbar-width: none; margin: 0 -18px; padding: 0 18px; -webkit-overflow-scrolling: touch; }
  .jx-fila .jx-fileira::-webkit-scrollbar { display: none; }
  .jx-fila .jx-fileira .fv-seq-item { flex: 1 0 96px; height: auto; flex-direction: column; justify-content: center; gap: 5px; padding: 8px 6px; border-radius: var(--raio); line-height: 16px; text-align: center; scroll-snap-align: start; }
  .jx-fila .jx-fileira .fv-seq-item .avatar { width: 40px; height: 40px; font-size: 14px; }
  .jx-fila .jx-fileira .fv-seq-item small { line-height: 14px; white-space: normal; }
  .jx-fila .jx-cz-nome { display: flex; justify-content: center; max-width: 100%; }
  .jx-fila .jx-vezcard .fv-acoes { flex-direction: column-reverse; gap: 8px; width: 100%; }
  .jx-fila .jx-vezcard .fv-acoes .btn { width: 100%; }
  .jx-fila .jx-aviso { display: block; }
  .jx-fila .barra-ferramentas .filtro { flex: 1 1 auto; }
  /* a tabela vira cartão de visita: hora à esquerda, nome + resultado, vendedor, observação e ações */
  .jx-fila .jx-visitas tr { grid-template-columns: 44px minmax(0, 1fr); gap: 4px 10px; padding: 12px; }
  .jx-fila .jx-visitas td.jx-v-hora { grid-column: 1; grid-row: 1 / span 2; padding-top: 2px; color: var(--texto-suave); font-size: 12.5px; }
  .jx-fila .jx-visitas td.jx-v-hora strong { font-weight: 600; color: var(--texto-suave); }
  .jx-fila .jx-visitas tr.jx-aberta td:first-child { box-shadow: none; }
  .jx-fila .jx-visitas td.celula-principal { grid-column: 2; order: 0; padding-right: 0; }
  .jx-fila .jx-visitas td:last-child { position: static; grid-column: 2; }
  .jx-fila .jx-visitas .acoes-linha { justify-content: flex-start; margin-top: 6px; }
  .jx-fila .jx-visitas .acoes-linha .btn:not(.btn-icone) { display: inline-flex; }
  .jx-fila .jx-visitas .jx-v-cab strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .jx-fila .jx-visitas .jx-v-res { flex-shrink: 0; }
  .jx-fila .jx-visitas .celula-principal > .jx-v-linha { display: flex; align-items: center; gap: 6px; margin-top: 2px; color: var(--texto-suave); max-width: none; white-space: nowrap; }
  .jx-fila .jx-visitas .celula-principal > .jx-v-obs { display: block; margin-top: 4px; color: var(--texto-suave); max-width: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .jx-fila .jx-visitas-wrap .tabela-rodape { flex-direction: column; align-items: flex-start; gap: 2px; }
  .jx-fila .jx-conv-linha { grid-template-columns: 32px minmax(0, 1fr); }
  .jx-fila .jx-conv-num { grid-column: 2; text-align: left; white-space: normal; }
  .jx-fila .jx-dia-hora-impar { display: none; }
}

/* ========== TV do salão (#/fila/tv): tela cheia, tinta, nada abaixo de 14px ========== */
.jx-fila.jx-fila-tv { position: fixed; inset: 0; z-index: calc(var(--z-lateral) + 1); padding: 0; max-width: none; margin: 0; overflow: auto; background: var(--escuro); }
.jx-fila .jx-tv { min-height: 100%; width: 100%; box-sizing: border-box; background: radial-gradient(90% 70% at 50% 0%, var(--escuro-2), var(--escuro) 72%); color: var(--texto-inverso); padding: 40px 48px; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; gap: 24px; font-family: var(--font-sans); }
.jx-fila .jx-tv .tx-sobrelinha { font-size: 14px; line-height: 18px; text-transform: uppercase; color: var(--lateral-texto); }
.jx-fila .jx-tv .tx-legenda { font-size: 14px; line-height: 18px; color: var(--lateral-texto); }
.jx-fila .jx-tv .badge { height: 28px; padding: 0 12px; font-size: 14px; line-height: 18px; }
.jx-fila .jx-tv .badge .ico { width: 16px; height: 16px; }
.jx-fila .jx-tv .ao-vivo::before { width: 8px; height: 8px; }
.jx-fila .jx-tv .avatar[data-status]::after { box-shadow: 0 0 0 2px var(--escuro); }
.jx-fila .jx-tv .rk-pos { width: 28px; height: 28px; background: var(--escuro-3); color: var(--lateral-texto); font-size: 14px; }
.jx-fila .jx-tv .jx-raia.lider .rk-pos { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
.jx-fila .jx-topo { display: flex; align-items: center; gap: 16px; min-height: 28px; }
.jx-fila .jx-topo .logo { font-size: 22px; }
.jx-fila .jx-topo .logo svg { width: 26px; height: 26px; }
.jx-fila .jx-tv .jx-sep { display: block; width: 1px; height: 20px; background: var(--escuro-3); margin: 0; }
.jx-fila .jx-info { font-size: 16px; line-height: 20px; color: var(--lateral-texto); white-space: nowrap; }
.jx-fila .jx-tv-vivo { background: var(--escuro-3); color: var(--verde); }
.jx-fila .jx-tv .btn-fantasma { color: var(--lateral-texto); }
.jx-fila .jx-tv .btn-fantasma:hover { background: var(--escuro-2); color: var(--texto-inverso); }
.jx-fila .jx-tv-meio { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; min-height: 0; }
.jx-fila .jx-tv-roda-sec { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; min-height: 0; padding-bottom: 12px; }
.jx-fila .jx-tv-roda { display: block; margin-bottom: 28px; }
.jx-fila .jx-tv .jx-roda-anel { inset: 43px; }
.jx-fila .jx-tv .jx-roda-sat { width: 56px; height: 56px; }
.jx-fila .jx-tv .jx-roda-sat .avatar { width: 56px; height: 56px; font-size: 20px; }
.jx-fila .jx-tv .jx-roda-sat-rot { top: 62px; height: auto; padding: 4px 10px; border-radius: var(--raio-s); font-size: 14px; line-height: 18px; font-weight: 500; text-align: center; }
.jx-fila .jx-tv .jx-roda-sat-rot strong { display: block; margin: 0; }
.jx-fila .jx-tv .jx-roda-centro { width: 260px; }
.jx-fila .jx-tv .jx-roda-centro .fv-avatar .avatar { width: 96px; height: 96px; font-size: 32px; }
.jx-fila .jx-tv .jx-roda-vez { margin-top: 14px; }
.jx-fila .jx-tv .jx-roda-nome { max-width: 260px; font-size: 44px; line-height: 48px; }
.jx-fila .jx-tv-linha { margin: 0; font-size: 15px; line-height: 20px; text-align: center; white-space: normal; }
.jx-fila .jx-tv-vazio { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; color: var(--lateral-texto); }
.jx-fila .jx-tv-vazio strong { color: var(--texto-inverso); font-size: 20px; }
.jx-fila .jx-tv-dir { display: flex; flex-direction: column; min-height: 0; min-width: 0; }
.jx-fila .jx-tv-meta-cab { display: flex; align-items: center; justify-content: space-between; min-height: 28px; gap: 12px; }
.jx-fila .jx-badge-verde { background: var(--escuro-3); color: var(--verde); }
.jx-fila .jx-badge-laranja { background: var(--escuro-3); color: var(--laranja); }
.jx-fila .jx-tv .jx-arco { width: min(320px, 100%); margin: 4px auto 0; }
.jx-fila .jx-tv .jx-arco-trilha { stroke: var(--escuro-3); }
.jx-fila .jx-tv .jx-arco-ritmo line { stroke: var(--texto-inverso); }
.jx-fila .jx-tv .jx-arco-texto { bottom: -6px; }
.jx-fila .jx-tv .jx-arco-texto .tx-numero-heroi { font-size: 44px; line-height: 48px; color: var(--texto-inverso); }
.jx-fila .jx-tv .jx-arco-texto .tx-legenda { font-size: 16px; line-height: 20px; color: var(--lateral-texto); }
.jx-fila .jx-tv-pista { margin-top: auto; padding-top: 16px; }
.jx-fila .jx-tv .jx-pista-cab, .jx-fila .jx-tv .jx-raia { grid-template-columns: 150px minmax(0, 1fr) 110px; gap: 12px; }
.jx-fila .jx-tv .jx-pista-cab { min-height: 18px; margin-bottom: 4px; }
.jx-fila .jx-tv .jx-pista-cab > span:nth-child(2) { height: 18px; }
.jx-fila .jx-tv .jx-raia { min-height: 36px; border-top: 0; }
.jx-fila .jx-tv .jx-raia-nome strong { font-size: 16px; line-height: 18px; color: var(--texto-inverso); }
.jx-fila .jx-tv .jx-raia-nome span { font-size: 14px; line-height: 18px; color: var(--lateral-texto); }
.jx-fila .jx-tv .jx-pista { background: var(--escuro-3); }
.jx-fila .jx-tv .jx-pista-fill { background: var(--lateral-texto-suave); }
.jx-fila .jx-tv .jx-raia.lider .jx-pista-fill { background: var(--marca-amarelo); }
.jx-fila .jx-tv .jx-pista-corredor { width: 30px; height: 30px; font-size: 14px; box-shadow: 0 0 0 2px var(--escuro); }
.jx-fila .jx-tv .jx-pista-ritmo { border-left-color: var(--lateral-texto-suave); }
.jx-fila .jx-tv .jx-pista-meta { border-left-color: var(--texto-inverso); }
.jx-fila .jx-tv .jx-pista-rotulo { top: 0; font-size: 14px; color: var(--lateral-texto); }
.jx-fila .jx-tv .jx-raia-valor strong { font-size: 16px; line-height: 18px; color: var(--texto-inverso); }
.jx-fila .jx-tv .jx-raia-valor span { font-size: 14px; line-height: 18px; color: var(--lateral-texto); }
.jx-fila .jx-tv-seq { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.jx-fila .jx-tv-seq .jx-raia { grid-template-columns: minmax(0, 1fr); }
.jx-fila .jx-numeros { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--escuro-3); }
.jx-fila .jx-numero span, .jx-fila .jx-numero strong { display: block; }
.jx-fila .jx-numero strong { font-size: 28px; line-height: 32px; font-weight: 650; letter-spacing: -0.025em; font-variant-numeric: tabular-nums; color: var(--texto-inverso); }
.jx-fila .jx-tv-base-cab { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; min-height: 18px; margin: 0 16px 8px; }
.jx-fila .jx-tv-base .jx-dia-legenda { margin-top: 0; gap: 16px; }
.jx-fila .jx-tv-base .jx-dia-legenda i { background: var(--texto-inverso); }
.jx-fila .jx-tv-base .jx-dia-legenda i.rua { background: var(--azul); }
.jx-fila .jx-tv-base .jx-dia-legenda i.jx-pt-venda { background: var(--verde); }
.jx-fila .jx-tv-base .jx-dia-legenda i.futuro { background: var(--escuro); border: 2px solid var(--lateral-texto); }
.jx-fila .jx-tv-base .jx-dia { margin: 0 16px; }
.jx-fila .jx-tv-base .jx-dia-linha { background: var(--escuro-3); }
.jx-fila .jx-tv-base .jx-dia-hora { color: var(--lateral-texto-suave); }
.jx-fila .jx-tv-base .jx-dia-hora::before { background: var(--escuro-3); }
.jx-fila .jx-tv-base .jx-marco { background: var(--lateral-texto-suave); }
.jx-fila .jx-tv-base .jx-ev { width: 14px; height: 14px; margin-left: -7px; background: var(--texto-inverso); box-shadow: 0 0 0 2px var(--escuro); }
.jx-fila .jx-tv-base .jx-ev-rua { background: var(--azul); }
.jx-fila .jx-tv-base .jx-ev-venda { background: var(--verde); }
.jx-fila .jx-tv-base .jx-ev-futuro { background: var(--escuro); border: 2px solid var(--texto-inverso); }
.jx-fila .jx-tv-base .jx-ev-futuro.jx-ev-rua { border-color: var(--azul); }
.jx-fila .jx-tv-base .jx-ev.vivo { color: var(--texto-inverso); }
.jx-fila .jx-tv-base .jx-dia-agora::before { box-shadow: 0 0 0 2px var(--escuro); }
.jx-fila .jx-tv-base .jx-dia-vazia { color: var(--lateral-texto); }
.jx-fila .jx-etq-escura { background: var(--marca-amarelo); color: var(--sobre-amarelo); }
@media (prefers-reduced-motion: no-preference) {
  .jx-fila .jx-tv .fv-avatar::after { animation-duration: 3.2s; }
  .jx-fila .jx-tv .jx-raia { animation: jx-fila-subir var(--dur-lenta) var(--curva-saida) both; animation-delay: calc(var(--i, 0) * 90ms + 300ms); }
}
@media (max-width: 1100px) {
  .jx-fila .jx-tv { padding: 24px 20px; gap: 20px; grid-template-rows: auto auto auto; }
  .jx-fila .jx-tv-meio { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .jx-fila .jx-tv-pista { margin-top: 16px; }
}
@media (max-width: 640px) {
  .jx-fila .jx-tv { padding: 16px; }
  .jx-fila .jx-topo { flex-wrap: wrap; gap: 8px 12px; }
  .jx-fila .jx-topo .flex-esticar { display: none; }
  .jx-fila .jx-tv-roda-sec { overflow: hidden; }
  .jx-fila .jx-tv .jx-roda { transform: scale(.78); transform-origin: center; margin: -40px 0; }
  .jx-fila .jx-tv .jx-pista-cab, .jx-fila .jx-tv .jx-raia { grid-template-columns: 110px minmax(0, 1fr) 96px; gap: 8px; }
  .jx-fila .jx-numeros { gap: 8px; }
  .jx-fila .jx-numero strong { font-size: 22px; line-height: 26px; }
  .jx-fila .jx-tv-base-cab { margin: 0 0 8px; }
  .jx-fila .jx-tv-base .jx-dia { margin: 0; }
  .jx-fila .jx-tv-base .jx-dia-hora-impar { display: none; }
}

/* ---------- config ---------- */
/* JADE — Configurações (js/modules/config.js)
 * Extensões escopadas na raiz da tela (.pagina.jx-config). Só celular:
 * nas tabelas com ações (Equipe e Montadores) a célula do nome ocupa a linha
 * inteira do cartão e reserva espaço à direita para os gêmeos .btn-icone.so-celular,
 * que o design system posiciona em absoluto no canto superior direito
 * (mesmo padrão de .jx-crm .jx-tabela-fu e .jx-vendas .jx-tabela). */
@media (max-width: 640px) {
  .jx-config .jx-tabela-acoes .tabela-responsiva td:first-child { grid-column: 1 / -1; padding-right: 88px; }
  .jx-config .jx-tabela-acoes.jx-acoes-3 .tabela-responsiva td:first-child { padding-right: 126px; } /* 3 gêmeos (Editar, Redefinir senha, Desativar) */
  .jx-config .jx-tabela-acoes .celula-principal { min-width: 0; }                                   /* não estoura a largura do cartão */
  .jx-config .jx-tabela-acoes .acoes-linha .btn-icone { opacity: 1; }                                /* sem hover no celular */
}
