/* ═══════════════════════════════════════════════════════════════════════
   MOVIMENTO LEVE: os efeitos contínuos do painel na placa de vídeo (26/10/2026)

   Pedro: "quero otimizar e não que fique pesado, mas quero a mesma qualidade".
   Medido no painel parado: uma única animação infinita de box-shadow, left/top,
   background-position ou traço de SVG obriga o processador a desenhar a página
   inteira 60 vezes por segundo, e de carona recalcula toda animação viva. Era de 5% a
   8% de um núcleo só para manter um pontinho pulsando (Visão Geral da Saúde, Centro de
   Comando, Gestão Saúde). Sem nenhuma delas, o painel parado gasta quase zero.

   Esta folha carrega por ÚLTIMO e refaz cada um desses efeitos com transform e opacity
   (que a placa de vídeo anima sozinha), com a mesma cor, tamanho, duração, curva e
   atraso. O original fica intocado no módulo; aqui ele é desligado (animation:none
   !important) e o desenho volta por um pseudo-elemento ou por um elemento que o
   pages/movimento-leve.js acrescenta. Ao mexer num efeito listado aqui, mexer nos dois
   lugares. Régua: techplam-api/tools/varre-animacoes.js aponta animação infinita pesada
   que ainda não passou por aqui.

   Tudo vale só com prefers-reduced-motion: no-preference. Com movimento reduzido, esta
   folha some e o original (com as regras de movimento reduzido de cada módulo) volta inteiro.

   Ficou de fora de propósito: a aurora do topo do Meu Perfil. O degradê corre por trás do
   nome e do cargo; numa camada da placa de vídeo, o texto por cima perde o ClearType
   (medido). Ela só gasta enquanto o Meu Perfil está aberto.

   Técnicas (todas medidas na bancada contra o original, quadro a quadro):
   - PONTO que pulsa (box-shadow 0 0 0 Npx num ponto liso): um disco da cor do ponto, do
     tamanho dele, crescendo em escala (tamanho + 2N) / tamanho e sumindo. O ponto cobre o
     miolo, então o que se vê é o mesmo anel.
   - ANEL que cresce em volta de etiqueta, chip, contador ou ponto com borda/número: o
     lv-anel, desenhado por cima com um buraco do formato exato do elemento (seção 3).
   - BRILHO que atravessa (left: -55% → 135%): o mesmo caminho em translateX, convertido
     para a largura do próprio brilho (left/largura).
   - FAIXA que corre por trás de um recorte: uma janela parada (overflow:hidden) com o
     desenho deslizando dentro (fio neon e batimento, ver pages/movimento-leve.js).
   - Traço fino que cresce: desenho vetorial (SVG), nunca border, que o navegador
     arredonda para pixel inteiro antes de crescer (anel ficava mais fino).
   ═══════════════════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion:no-preference) {

/* ── 0. Curvas dos pontos que pulsam (parâmetros por variável no próprio pseudo) ── */
@keyframes lvVai50 { 0%,100% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 50% { transform:scale(var(--lv-s)); opacity:var(--lv-a1,0); } }
@keyframes lvVai55 { 0%,100% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 55% { transform:scale(var(--lv-s)); opacity:var(--lv-a1,0); } }
@keyframes lvVai60 { 0%,100% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 60% { transform:scale(var(--lv-s)); opacity:var(--lv-a1,0); } }
@keyframes lvSai70 { 0% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 70% { transform:scale(var(--lv-s)); opacity:0; } 100% { transform:scale(var(--lv-s0,1)); opacity:0; } }
@keyframes lvSai70f { 0% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 70%,100% { transform:scale(var(--lv-s)); opacity:0; } }
@keyframes lvSai75f { 0% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 75%,100% { transform:scale(var(--lv-s)); opacity:0; } }
@keyframes lvSai100 { 0% { transform:scale(var(--lv-s0,1)); opacity:var(--lv-a); } 100% { transform:scale(var(--lv-s)); opacity:0; } }

/* ── 1. Pontos "ao vivo": o disco cresce por cima do próprio ponto (mesma cor) ── */
.dx-luz, .gsfx-live, .gsav-pt, .gu-dot, .aud-dot, .aud-pulso-luz, .asf-vivo, .asd-ponto,
.fv-agora i, .fv-item[data-e="vencida"] .fv-l3 i, .fv-item[data-e="urgente"] .fv-l3 i, .po-agora i,
.sind-tag.pulsa i, .lay-caixa-pill.vivo > i, .wcx-st.tem[data-v="aguardando"] .wcx-st-v > i,
.wcx-mod[data-c="ok"] .wcx-mod-est i, .pdash-dias.urg .pt {
  position:relative; animation:none !important;
}
.dx-luz::after, .gsfx-live::after, .gsav-pt::after, .gu-dot::after, .aud-dot::after, .aud-pulso-luz::after,
.asf-vivo::after, .asd-ponto::after, .fv-agora i::after, .fv-item[data-e="vencida"] .fv-l3 i::after,
.fv-item[data-e="urgente"] .fv-l3 i::after, .po-agora i::after, .sind-tag.pulsa i::after,
.lay-caixa-pill.vivo > i::after, .wcx-st.tem[data-v="aguardando"] .wcx-st-v > i::after,
.wcx-mod[data-c="ok"] .wcx-mod-est i::after, .pdash-dias.urg .pt::after {
  content:''; position:absolute; inset:0; border-radius:50%; background:inherit; pointer-events:none; opacity:0;
  animation-iteration-count:infinite;
}
/* (tamanho + 2 x espalhamento) / tamanho; alfa e tempos do @keyframes original */
.dx-luz::after         { --lv-s:2.5;    --lv-a:.7;  animation-name:lvVai60;  animation-duration:2.4s; animation-timing-function:ease-in-out; }
.gsfx-live::after      { --lv-s:3.5714; --lv-a:.75; animation-name:lvSai70;  animation-duration:2.1s; animation-timing-function:ease-out; }
.gsav-pt::after        { --lv-s:3;      --lv-a:.65; animation-name:lvSai70;  animation-duration:2.4s; animation-timing-function:ease-out; }
.gu-dot::after         { --lv-s:3.5714; --lv-a:.75; animation-name:lvSai70;  animation-duration:2.1s; animation-timing-function:ease-out; }
.aud-dot::after        { --lv-s:2.5;    --lv-a:.55; animation-name:lvVai50;  animation-duration:2.2s; animation-timing-function:ease; }
.aud-pulso-luz::after  { --lv-s:2.5556; --lv-a:.55; animation-name:lvVai55;  animation-duration:2.4s; animation-timing-function:ease; }
.asf-vivo::after       { --lv-s:3.25;   --lv-a:.6;  animation-name:lvSai100; animation-duration:1.7s; animation-timing-function:ease-out; }
.asd-ponto::after      { --lv-s:3;      --lv-a:.55; animation-name:lvSai100; animation-duration:1.6s; animation-timing-function:ease-out; }
.fv-agora i::after     { --lv-s:3;      --lv-a:.6;  animation-name:lvSai75f; animation-duration:1.9s; animation-timing-function:ease-out; }
.fv-item[data-e="vencida"] .fv-l3 i::after,
.fv-item[data-e="urgente"] .fv-l3 i::after { --lv-s:2.6667; --lv-a:.65; animation-name:lvSai75f; animation-duration:1.8s; animation-timing-function:ease-out; }
.po-agora i::after     { --lv-s:3;      --lv-a:.6;  animation-name:lvSai75f; animation-duration:1.9s; animation-timing-function:ease-out; }
.sind-tag.pulsa i::after { --lv-s:2.3333; --lv-a:.45; animation-name:lvVai50; animation-duration:2s; animation-timing-function:ease-in-out; }
.lay-caixa-pill.vivo > i::after { --lv-s:3; --lv-a:.6; animation-name:lvSai70; animation-duration:2.2s; animation-timing-function:var(--pt-ease, cubic-bezier(.22,1,.36,1)); }
.wcx-st.tem[data-v="aguardando"] .wcx-st-v > i::after { --lv-s:3; --lv-a:.6; animation-name:lvSai70f; animation-duration:2.4s; animation-timing-function:ease-out; }
.wcx-mod[data-c="ok"] .wcx-mod-est i::after { --lv-s:2.75; --lv-a:.6; animation-name:lvSai100; animation-duration:2.2s; animation-timing-function:ease; }
.pdash-dias.urg .pt::after { --lv-s:2.4286; --lv-a:.5; animation-name:lvVai60; animation-duration:2.2s; animation-timing-function:ease-in-out; }

/* ── 2. Ponto que já é pseudo-elemento: o anel no OUTRO pseudo do pai, por baixo dele ── */
/* avatar de quem está no painel (Centro de Comando) */
.dx-pav::after { animation:none !important; }
/* (o ponto é pseudo-elemento: o * { box-sizing:border-box } não chega nele, então 9 px + 2 px
   de borda de cada lado = 13 px; o anel nasce na borda de fora) */
.dx-pav::before { content:''; position:absolute; right:-1px; bottom:-1px; width:13px; height:13px; border-radius:50%;
  background:#22C55E; pointer-events:none; opacity:0; --lv-s:1.9231; --lv-a:.7;
  animation:lvVai60 2.6s ease-in-out infinite; }
/* "hoje" nos gráficos de dias da Central do WhatsApp (o ::before do fim de semana fica) */
.wcx-dc.hoje:not(.fds)::after { animation:none !important; }
/* (o @keyframes wacHoje original pinta o anel com --wac-d-atendido, não com a cor do ponto) */
.wcx-dc.hoje:not(.fds)::before { content:''; position:absolute; left:50%; bottom:-9px; width:6px; height:6px; margin-left:-3px;
  border-radius:50%; background:var(--wac-d-atendido); pointer-events:none; opacity:0; --lv-s:3.3333; --lv-a:.55;
  animation:lvSai100 2.2s var(--wcx-ease, cubic-bezier(.22,1,.36,1)) infinite; }
.wac-col.hoje:not(.fds)::after { animation:none !important; }
.wac-col.hoje:not(.fds)::before { content:''; position:absolute; left:50%; bottom:-10px; width:6px; height:6px; margin-left:-3px;
  border-radius:50%; background:var(--wac-d-atendido); pointer-events:none; opacity:0; --lv-s:3.3333; --lv-a:.55;
  animation:lvSai100 2.2s var(--wac-ease, cubic-bezier(.22,1,.36,1)) infinite; }
/* atendente disponível: o anel nasce colado no aro de 2,5 px da cor do cartão */
.wcx-op[data-s="disponivel"] .wcx-op-av::after { animation:none !important; }
.wcx-op[data-s="disponivel"] .wcx-op-av::before { content:''; position:absolute; right:0; bottom:1px; width:11px; height:11px;
  border-radius:50%; background:#10B981; pointer-events:none; opacity:0; --lv-s0:1.4545; --lv-s:2.8182; --lv-a:.55;
  animation:lvSai100 2.4s var(--wcx-ease, cubic-bezier(.22,1,.36,1)) infinite; }
/* linha do tempo da Patrícia: o ponto tem aro da cor do cartão, então o anel vem do item */
.pt-hist-item:first-child .pt-hist-dot { animation:ptDotPop .5s cubic-bezier(.34,1.56,.64,1) both !important; }
.pt-hist-item:first-child::before { content:''; position:absolute; left:-28px; top:20px; width:14px; height:14px; border-radius:50%;
  background:#7C3AED; pointer-events:none; opacity:0; --lv-s:2.2857; --lv-a:.45;
  animation:lvSai70f 2.4s ease-out .6s infinite; }

/* ── 3. Anel que cresce em volta (box-shadow 0 0 0 Npx animado) ──
   O anel original nasce colado na borda do elemento e cresce para fora, sumindo. Aqui ele é
   desenhado POR CIMA, num lv-anel (pages/movimento-leve.js) com um buraco do formato exato do
   elemento (clip-path): não tinge o miolo nem fundo translúcido, e o texto do elemento é
   desenhado antes dele (continua com ClearType; anel por baixo tirava, medido). O anel é a
   soma de 4 discos nos cantos (raio r+s) e 4 barras nos lados (comprimento r+s), crescendo
   por escala k = (r+s)/(r+S), com s indo de --lv-s0 a --lv-S. As peças têm a cor inteira e o
   alfa vai no grupo, então onde elas se cruzam a cor não soma. O JS mede o elemento (tamanho,
   borda e raio de verdade) e monta o buraco; daqui ele lê a lista --lv-aneis e os dois
   espalhamentos. Cor, alfa, duração, curva e atraso: os do @keyframes original. */
:root { --lv-aneis: .patri-tag.sin.aberto, .dpc-acao.vencido, .inv-vb.pulse, .texf-kpi2.alerta .texf-kpi-ic, .wac-par-pede,
  .dx-chip.urgente, .pf-orb, .wac-aba-n[data-k="pareamento"], .sdash-etapa.agora .sdash-etapa-pt,
  .rot-bloco.agora .rot-dia-n, .snx-step-i.aqui .snx-step-p; }
lv-anel { display:none; }
:is(.patri-tag.sin.aberto, .dpc-acao.vencido, .inv-vb.pulse, .texf-kpi2.alerta .texf-kpi-ic, .wac-par-pede,
  .dx-chip.urgente, .pf-orb, .wac-aba-n[data-k="pareamento"], .sdash-etapa.agora .sdash-etapa-pt,
  .rot-bloco.agora .rot-dia-n, .snx-step-i.aqui .snx-step-p) > lv-anel {
  display:block; position:absolute; pointer-events:none; opacity:var(--lv-a0);
  animation:var(--lv-ga) var(--lv-dur) var(--lv-ease) var(--lv-delay) infinite;
}
.aba.active .wac-aba-n[data-k="pareamento"] > lv-anel { display:none; }
lv-anel > lv-p { position:absolute; display:block; background:var(--lv-cor); transform:scale(var(--kx), var(--ky));
  animation:var(--lv-pa) var(--lv-dur) var(--lv-ease) var(--lv-delay) infinite; }
lv-anel > .lv-d { width:calc(2 * var(--lv-rs)); height:calc(2 * var(--lv-rs)); border-radius:50%; --kx:var(--lv-k0); --ky:var(--lv-k0); }
lv-anel > .lv-d1 { left:0; top:0; }
lv-anel > .lv-d2 { right:0; top:0; }
lv-anel > .lv-d3 { left:0; bottom:0; }
lv-anel > .lv-d4 { right:0; bottom:0; }
lv-anel > .lv-bh { left:var(--lv-rs); right:var(--lv-rs); height:var(--lv-rs); --kx:1; --ky:var(--lv-k0); }
lv-anel > .lv-bt { top:0; transform-origin:50% 100%; }
lv-anel > .lv-bb { bottom:0; transform-origin:50% 0; }
lv-anel > .lv-bv { top:var(--lv-rs); bottom:var(--lv-rs); width:var(--lv-rs); --kx:var(--lv-k0); --ky:1; }
lv-anel > .lv-bl { left:0; transform-origin:100% 50%; }
lv-anel > .lv-br { right:0; transform-origin:0 50%; }
@keyframes lvAnel50 { 0%,100% { transform:scale(var(--kx), var(--ky)); } 50% { transform:scale(1); } }
@keyframes lvAnel55 { 0%,100% { transform:scale(var(--kx), var(--ky)); } 55% { transform:scale(1); } }
@keyframes lvAnel70 { 0% { transform:scale(var(--kx), var(--ky)); } 70%,100% { transform:scale(1); } }
@keyframes lvAnelBate { 0%,88%,100% { transform:scale(var(--kx), var(--ky)); } 94% { transform:scale(1); } }
@keyframes lvAnelA50 { 0%,100% { opacity:var(--lv-a0); } 50% { opacity:var(--lv-a1); } }
@keyframes lvAnelA55 { 0%,100% { opacity:var(--lv-a0); } 55% { opacity:var(--lv-a1); } }
@keyframes lvAnelA70 { 0% { opacity:var(--lv-a0); } 70%,100% { opacity:var(--lv-a1); } }
@keyframes lvAnelABate { 0%,88%,100% { opacity:var(--lv-a0); } 94% { opacity:var(--lv-a1); } }
/* valores comuns sem peso (cada elemento abaixo sobrepõe o que for dele) */
:where(.patri-tag.sin.aberto, .dpc-acao.vencido, .inv-vb.pulse, .texf-kpi2.alerta .texf-kpi-ic, .wac-par-pede,
  .dx-chip.urgente, .pf-orb, .wac-aba-n[data-k="pareamento"], .sdash-etapa.agora .sdash-etapa-pt,
  .rot-bloco.agora .rot-dia-n, .snx-step-i.aqui .snx-step-p) { --lv-s0:0; --lv-a1:0; --lv-delay:0s; }
/* espalhamento (px) | cor | alfa no começo e no auge | curva do original */
.patri-tag.sin.aberto { --lv-S:5; --lv-cor:#DC2626; --lv-a0:.32; --lv-ga:lvAnelA55; --lv-pa:lvAnel55; --lv-dur:2.6s; --lv-ease:ease-in-out; }
.dpc-acao.vencido { --lv-S:5; --lv-cor:var(--cor); --lv-a0:.34; --lv-ga:lvAnelA55; --lv-pa:lvAnel55; --lv-dur:2.4s; --lv-ease:ease-in-out; }
.inv-vb.pulse { --lv-S:5; --lv-cor:#EF4444; --lv-a0:.5; --lv-ga:lvAnelA50; --lv-pa:lvAnel50; --lv-dur:2s; --lv-ease:ease-in-out; }
.texf-kpi2.alerta .texf-kpi-ic { --lv-S:7; --lv-cor:var(--c); --lv-a0:.45; --lv-ga:lvAnelA50; --lv-pa:lvAnel50; --lv-dur:2.4s; --lv-ease:ease-in-out; }
.wac-par-pede, .wac-aba-n[data-k="pareamento"] { --lv-S:7; --lv-cor:#FBBF24; --lv-a0:.6; --lv-ga:lvAnelA70; --lv-pa:lvAnel70; --lv-dur:1.8s; --lv-ease:var(--wac-ease, cubic-bezier(.22,1,.36,1)); }
.dx-chip.urgente { --lv-S:8; --lv-cor:var(--c); --lv-a0:.45; --lv-ga:lvAnelABate; --lv-pa:lvAnelBate; --lv-dur:3s; --lv-ease:ease-in-out; --lv-delay:1.2s; }
.pf-orb { --lv-S:9; --lv-cor:#6366F1; --lv-a0:.5; --lv-ga:lvAnelA55; --lv-pa:lvAnel55; --lv-dur:2.8s; --lv-ease:ease-in-out; }
/* pontos com aro fixo: o aro é o começo do anel (s0) */
.sdash-etapa.agora .sdash-etapa-pt { --lv-S:8; --lv-s0:4; --lv-cor:#0EA5E9; --lv-a0:.2; --lv-a1:.08; --lv-ga:lvAnelA50; --lv-pa:lvAnel50; --lv-dur:1.8s; --lv-ease:ease-in-out; }
.rot-bloco.agora .rot-dia-n { --lv-S:7; --lv-s0:4; --lv-cor:#0EA5E9; --lv-a0:.16; --lv-a1:.06; --lv-ga:lvAnelA50; --lv-pa:lvAnel50; --lv-dur:2.4s; --lv-ease:ease-in-out; }
.snx-step-i.aqui .snx-step-p { --lv-S:9; --lv-s0:5; --lv-cor:var(--sc); --lv-a0:.22; --lv-a1:.06; --lv-ga:lvAnelA50; --lv-pa:lvAnel50; --lv-dur:2.4s; --lv-ease:ease-in-out; }
/* com o anel no lugar o original para. A sombra fixa ou de passar o mouse que a animação
   original cobria (etiqueta de sinistro, botão vencido, chip, resumo do pareamento, ícone do
   NEON escuro) também fica de fora, como no original. */
:is(.patri-tag.sin.aberto, .dpc-acao.vencido, .inv-vb.pulse, .texf-kpi2.alerta .texf-kpi-ic, .wac-par-pede,
  .pf-orb, .wac-aba-n[data-k="pareamento"], .sdash-etapa.agora .sdash-etapa-pt,
  .rot-bloco.agora .rot-dia-n, .snx-step-i.aqui .snx-step-p):has(> lv-anel) { animation:none !important; box-shadow:none !important; }
.dx-chip.urgente:has(> lv-anel) { animation:dxIn .5s cubic-bezier(.16,.84,.44,1) both !important; box-shadow:none !important; }
:is(.patri-tag.sin.aberto, .dpc-acao.vencido, .inv-vb.pulse, .texf-kpi2.alerta .texf-kpi-ic, .wac-par-pede,
  .dx-chip.urgente, .wac-aba-n[data-k="pareamento"], .rot-bloco.agora .rot-dia-n):has(> lv-anel) { position:relative; }

/* ── 4. Brilhos que atravessam (left → translateX, na largura do próprio brilho) ──
   A classe vai repetida (.phero.phero) de propósito: o estilo do módulo entra DEPOIS desta
   folha e tem transform:skewX na mesma regra; durante o atraso de cada brilho (0,5 a 1,4 s,
   ainda sem animação) valeria o dele e o brilho ficaria parado à vista, na borda. Com mais peso,
   vale o daqui (fora da faixa). !important não serve: passaria por cima da própria animação. */
/* herói do Patrimonial: 40% de largura, de -55% a 135% (-137,5% a 337,5% dele mesmo) */
.phero.phero::before { left:0 !important; transform:translateX(-137.5%) skewX(-18deg); animation-name:lvPheroBrilho !important; }
@keyframes lvPheroBrilho { 0% { transform:translateX(-137.5%) skewX(-18deg); } 55%,100% { transform:translateX(337.5%) skewX(-18deg); } }
/* 45% de largura, de -60% a 150% em 55%: Gestão Saúde (herói) e Utilização (módulos) */
.gsfx-hero.gsfx-hero::after, .gu-mod-hd.gu-mod-hd::after { left:0 !important; transform:translateX(-133.333%) skewX(-18deg); animation-name:lvBrilho45 !important; }
@keyframes lvBrilho45 { 0% { transform:translateX(-133.333%) skewX(-18deg); } 55%,100% { transform:translateX(333.333%) skewX(-18deg); } }
/* 42% de largura, de -55% a 150% em 52%: folha da Gestão Saúde e folha do sinistro */
.gsx-hd.gsx-hd::before, .snx-hd.snx-hd::before { left:0 !important; transform:translateX(-130.952%) skewX(-18deg); animation-name:lvBrilho42 !important; }
@keyframes lvBrilho42 { 0% { transform:translateX(-130.952%) skewX(-18deg); } 52%,100% { transform:translateX(357.143%) skewX(-18deg); } }
/* 40% de largura, de -55% a 150% em 52%: carteirinha e cartão da Saúde Individual, herói dos sinistros */
.sind-cart.sind-cart::after, .sind-cf-face.sind-cf-face::after, .snl-hero.snl-hero::before { left:0 !important; transform:translateX(-137.5%) skewX(-18deg); animation-name:lvBrilho40 !important; }
@keyframes lvBrilho40 { 0% { transform:translateX(-137.5%) skewX(-18deg); } 52%,100% { transform:translateX(375%) skewX(-18deg); } }
/* a varredura da zona de documento (Saúde Individual): top -30% → 110%, altura 30% */
.sind-zona-doc.sind-zona-doc::after { top:0 !important; transform:translateY(-100%); animation-name:lvSindScan !important; }
@keyframes lvSindScan { 0% { transform:translateY(-100%); } 60%,100% { transform:translateY(366.667%); } }

/* ── 5. Os pontos que viajam pela rota (Central do WhatsApp) ──
   left: 0 → calc(100% - 10px) do trilho vira translateX em unidade do trilho (cqw). */
.wcx-rota em { container-type:inline-size; }
.wcx-rota em::before { left:0 !important; animation-name:lvIda !important; }
.wcx-rota em::after { left:0 !important; animation-name:lvVolta !important; }
@keyframes lvIda { 0% { transform:translateX(0); opacity:0; } 15%,85% { opacity:1; } 100% { transform:translateX(calc(100cqw - 10px)); opacity:0; } }
@keyframes lvVolta { 0% { transform:translateX(calc(100cqw - 10px)); opacity:0; } 15%,85% { opacity:1; } 100% { transform:translateX(0); opacity:0; } }

/* ── 6. Barra do robô atendendo (Central do WhatsApp): a faixa de 45% desliza dentro ── */
.wac-tempo[data-f="robo"] .wac-tempo-b i { position:relative; overflow:hidden; background:transparent !important; animation:none !important; }
.wac-tempo[data-f="robo"] .wac-tempo-b i::after { content:''; position:absolute; top:0; bottom:0; left:0; width:45%; pointer-events:none;
  background:linear-gradient(90deg, transparent, var(--wac-proc), transparent); transform:translateX(-97.78%);
  animation:lvRoboBar 1.9s linear infinite; }
@keyframes lvRoboBar { from { transform:translateX(-97.78%); } to { transform:translateX(220%); } }

/* ── 7. Linha pendente na tabela dos Termos: o brilho de dentro acende e apaga ── */
.texf-tab tr.texf-pend td:first-child { position:relative; animation:none !important; }
.texf-tab tr.texf-pend td:first-child::after { content:''; position:absolute; top:0; bottom:0; left:3px; width:24px; pointer-events:none;
  background:linear-gradient(90deg, rgba(139,92,246,.42), rgba(139,92,246,0)); opacity:0;
  animation:lvTexfPend 2.6s ease-in-out infinite; }
@keyframes lvTexfPend { 0%,100% { opacity:0; } 50% { opacity:1; } }

/* ── 8. A onda do destino no aviso do Seguro Viagem ──
   Era um círculo DENTRO do SVG (não vai para a placa de vídeo). Vira um anel na camada das
   estrelas, que tem o mesmo tamanho do desenho: viewBox 520x90, centro em (478, 60), raio 6 e
   traço 2, a 10 px do topo. O anel é o mesmo círculo em SVG (borda seria arredondada para
   pixel inteiro e o traço sairia mais fino), desenhado 10 vezes maior e encolhido na mesma
   proporção: num quadrado de 8 px, o arredondamento da imagem para pixel inteiro dava 4% no
   raio (medido); em 86 px, 0,4%. */
.svx-pop-rota .onda { animation:none !important; opacity:0 !important; }
.svx-pop-estr { container-type:size; }
.svx-pop-estr::after { content:''; position:absolute; pointer-events:none;
  width:calc(100cqw * 140 / 520); height:calc(100cqw * 140 / 520);
  left:calc(100cqw * 408 / 520); top:calc(10px - 100cqw * 10 / 520);
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Ccircle cx='7' cy='7' r='6' fill='none' stroke='%23FBBF24' stroke-width='2'/%3E%3C/svg%3E") 0 0 / 100% 100% no-repeat;
  opacity:0; animation:lvSvxOnda 2.2s ease-out 2.55s infinite; }
@keyframes lvSvxOnda { 0% { opacity:.95; transform:scale(.06); } 100% { opacity:0; transform:scale(.27); } }

/* ── 9. Fio neon e linha de batimento (as janelas vêm do pages/movimento-leve.js) ── */
#saude-content.op-neon .saude-card:has(> .lv-fio)::before, #saude-content.op-neon .cmpc:has(> .lv-fio)::before { animation:none !important; opacity:0 !important; }
.lv-fio { position:absolute; top:-1px; left:22px; right:22px; height:2px; border-radius:2px; overflow:hidden; pointer-events:none; opacity:.9; }
.cmpc > .lv-fio { top:0; left:0; right:0; height:3px; border-radius:0; opacity:1; }
.lv-fio > i { position:absolute; top:0; bottom:0; left:0; width:400%; background:var(--nn-fio); background-size:50% 100%;
  animation:lvFio 7s linear infinite; }
@keyframes lvFio { from { transform:translateX(0); } to { transform:translateX(-50%); } }
/* Linha de batimento da Utilização (gestao-saude-utilizacao.js). O SVG mede sempre 1200x76 px
   (viewBox 1200x76; SVG posicionado não estica com left/right) e o traço tem 1528,5 de
   comprimento. Ele corria por stroke-dashoffset 1400 → -1400 com stroke-dasharray 1400: desenha,
   apaga e descansa com o toco de x 1071,5 a 1200 aceso. Agora o traço fica parado e duas bordas
   andam por cima dele, a cabeça e o rabo, cada uma numa janela com o conteúdo andando ao
   contrário. Há um quadro em cada canto do traço e, entre dois cantos, o pedaço exato da curva
   original. Uma cópia do traço faz o toco que some no começo de cada volta. Os quadros saem de
   uma conta, não de olho: techplam-api/tools/quadros-batimento.js (mudou o desenho, rodar de novo). */
.gu-hero-ecg.lv-ecg-svg path { animation:none !important; stroke-dashoffset:0 !important; stroke-dasharray:none !important; }
.lv-ecg { position:absolute; left:0; bottom:-6px; width:1200px; height:76px; pointer-events:none; }
.lv-ecg span { position:absolute; top:0; left:0; width:1200px; height:76px; }
.lv-ecg .gu-hero-ecg { top:0; bottom:auto; }
.lv-ecg .lv-ecg-cab { left:-1200px; overflow:hidden; transform:translateX(1200px); animation:lvEcgCab 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-cab-v { left:1200px; transform:translateX(-1200px); animation:lvEcgCabV 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-rabo { overflow:hidden; transform:translateX(1071.53px); animation:lvEcgRabo 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-rabo-v { transform:translateX(-1071.53px); animation:lvEcgRaboV 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-toco { overflow:hidden; transform:translateX(1200px); animation:lvEcgToco 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-toco-v { transform:translateX(-1200px); animation:lvEcgTocoV 4.6s linear .35s infinite; }
.lv-ecg .lv-ecg-toco-v > svg[hidden] { display:block; }
@keyframes lvEcgCab {0%{transform:translateX(0px);animation-timing-function:cubic-bezier(0.384,0,0.712,0.369)}10.409%{transform:translateX(160px)}11.34%{transform:translateX(174px);animation-timing-function:cubic-bezier(0.34,0.318,0.673,0.651)}12.531%{transform:translateX(187px)}13.825%{transform:translateX(199px)}14.695%{transform:translateX(213px);animation-timing-function:cubic-bezier(0.351,0.303,0.683,0.639)}18.067%{transform:translateX(420px)}18.45%{transform:translateX(436px)}18.943%{transform:translateX(448px)}19.548%{transform:translateX(461px)}19.997%{transform:translateX(476px);animation-timing-function:cubic-bezier(0.347,0.317,0.678,0.653)}23.259%{transform:translateX(760px)}23.572%{transform:translateX(774px)}24.009%{transform:translateX(786px)}24.542%{transform:translateX(799px)}24.935%{transform:translateX(813px);animation-timing-function:cubic-bezier(0.337,0.329,0.667,0.667)}28.765%{transform:translateX(1200px)}100%{transform:translateX(1200px)}}
@keyframes lvEcgCabV {0%{transform:translateX(0px);animation-timing-function:cubic-bezier(0.384,0,0.712,0.369)}10.409%{transform:translateX(-160px)}11.34%{transform:translateX(-174px);animation-timing-function:cubic-bezier(0.34,0.318,0.673,0.651)}12.531%{transform:translateX(-187px)}13.825%{transform:translateX(-199px)}14.695%{transform:translateX(-213px);animation-timing-function:cubic-bezier(0.351,0.303,0.683,0.639)}18.067%{transform:translateX(-420px)}18.45%{transform:translateX(-436px)}18.943%{transform:translateX(-448px)}19.548%{transform:translateX(-461px)}19.997%{transform:translateX(-476px);animation-timing-function:cubic-bezier(0.347,0.317,0.678,0.653)}23.259%{transform:translateX(-760px)}23.572%{transform:translateX(-774px)}24.009%{transform:translateX(-786px)}24.542%{transform:translateX(-799px)}24.935%{transform:translateX(-813px);animation-timing-function:cubic-bezier(0.337,0.329,0.667,0.667)}28.765%{transform:translateX(-1200px)}100%{transform:translateX(-1200px)}}
@keyframes lvEcgRabo {0%{transform:translateX(0px)}27.5%{transform:translateX(0px);animation-timing-function:cubic-bezier(0.333,0.334,0.665,0.668)}29.078%{transform:translateX(160px)}29.407%{transform:translateX(174px)}29.887%{transform:translateX(187px)}30.489%{transform:translateX(199px)}30.945%{transform:translateX(213px);animation-timing-function:cubic-bezier(0.327,0.341,0.659,0.675)}33.183%{transform:translateX(420px)}33.495%{transform:translateX(436px)}33.915%{transform:translateX(448px)}34.464%{transform:translateX(461px)}34.9%{transform:translateX(476px);animation-timing-function:cubic-bezier(0.315,0.361,0.645,0.698)}38.96%{transform:translateX(760px)}39.466%{transform:translateX(774px)}40.222%{transform:translateX(786px)}41.236%{transform:translateX(799px)}42.066%{transform:translateX(813px);animation-timing-function:cubic-bezier(0.277,0.619,0.601,1)}55%{transform:translateX(1071.53px)}100%{transform:translateX(1071.53px)}}
@keyframes lvEcgRaboV {0%{transform:translateX(0px)}27.5%{transform:translateX(0px);animation-timing-function:cubic-bezier(0.333,0.334,0.665,0.668)}29.078%{transform:translateX(-160px)}29.407%{transform:translateX(-174px)}29.887%{transform:translateX(-187px)}30.489%{transform:translateX(-199px)}30.945%{transform:translateX(-213px);animation-timing-function:cubic-bezier(0.327,0.341,0.659,0.675)}33.183%{transform:translateX(-420px)}33.495%{transform:translateX(-436px)}33.915%{transform:translateX(-448px)}34.464%{transform:translateX(-461px)}34.9%{transform:translateX(-476px);animation-timing-function:cubic-bezier(0.315,0.361,0.645,0.698)}38.96%{transform:translateX(-760px)}39.466%{transform:translateX(-774px)}40.222%{transform:translateX(-786px)}41.236%{transform:translateX(-799px)}42.066%{transform:translateX(-813px);animation-timing-function:cubic-bezier(0.277,0.619,0.601,1)}55%{transform:translateX(-1071.53px)}100%{transform:translateX(-1071.53px)}}
@keyframes lvEcgToco {0%{transform:translateX(1071.53px);animation-timing-function:cubic-bezier(0.378,0,0.707,0.365)}9.412%{transform:translateX(1200px)}100%{transform:translateX(1200px)}}
@keyframes lvEcgTocoV {0%{transform:translateX(-1071.53px);animation-timing-function:cubic-bezier(0.378,0,0.707,0.365)}9.412%{transform:translateX(-1200px)}100%{transform:translateX(-1200px)}}

/* ── 10. Enfeite escondido não gira: sol no escuro, estrelas da lua no claro ── */
body.dark .tb-sun svg { animation-play-state:paused; }
body:not(.dark) .tb-star { animation-play-state:paused; }

}
