/* Seções da página. Mobile first; a partir de 56rem, desktop. */

.secao { padding-block: var(--espaco-8); }
.secao + .secao { border-top: 1px solid var(--cor-borda); }
.secao__cabeca { display: grid; gap: var(--espaco-3); margin-bottom: var(--espaco-6); max-width: var(--largura-texto); }
.secao__cabeca p { color: var(--cor-texto-suave); }

/* Cabeçalho no celular: nome, WhatsApp só com ícone e menu. */
.cabecalho__acoes { display: flex; align-items: center; gap: var(--espaco-2); }
.cabecalho__whatsapp-icone { width: 2.75rem; padding: 0; }
.cabecalho__whatsapp-icone .rotulo { display: none; }
.cabecalho__menu-botao {
  display: grid; place-items: center; width: 2.75rem; height: 2.75rem; padding: 0;
  border: 1px solid var(--cor-borda); border-radius: var(--raio-1); background: transparent; color: var(--cor-texto);
}
.cabecalho__menu-botao span, .cabecalho__menu-botao span::before, .cabecalho__menu-botao span::after {
  display: block; width: 1.125rem; height: 2px; background: currentColor; border-radius: 2px; position: relative;
}
.cabecalho__menu-botao span::before, .cabecalho__menu-botao span::after { content: ''; position: absolute; left: 0; }
.cabecalho__menu-botao span::before { top: -6px; }
.cabecalho__menu-botao span::after { top: 6px; }
@media (min-width: 60rem) {
  .cabecalho__menu-botao { display: none; }
  .cabecalho__whatsapp-icone { width: auto; padding: 0 1rem; }
  .cabecalho__whatsapp-icone .rotulo { display: inline; }
}

.menu-celular { position: relative; }
.menu-celular > summary { list-style: none; cursor: pointer; }
.menu-celular > summary::-webkit-details-marker { display: none; }
.menu-celular__painel {
  position: absolute; right: 0; top: calc(100% + var(--espaco-2)); z-index: 35; display: grid; min-width: 13rem;
  padding: var(--espaco-2); border: 1px solid var(--cor-borda); border-radius: var(--raio-2); background: var(--cor-superficie-alta);
  box-shadow: 0 18px 50px -20px rgb(0 0 0 / 0.6);
}
.menu-celular__painel a { padding: var(--espaco-3) var(--espaco-4); border-radius: var(--raio-1); text-decoration: none; color: var(--cor-texto); }
.menu-celular__painel a:hover { background: var(--cor-primaria-suave); }
@media (min-width: 60rem) { .menu-celular { display: none; } }

/* ---------- Hero ---------- */
.hero { padding-block: var(--espaco-6) var(--espaco-8); overflow: hidden; }
.hero__grade { display: grid; gap: var(--espaco-7); align-items: center; }
.hero__texto { display: grid; gap: var(--espaco-5); justify-items: start; }
.hero__apresentacao { color: var(--cor-texto-suave); max-width: 34rem; }
.hero__acoes { display: flex; flex-wrap: wrap; gap: var(--espaco-3); }
.hero__figura { position: relative; width: 100%; max-width: 34rem; aspect-ratio: 1; justify-self: center; }
.hero__figura > img.hero__foto-simples {
  width: 100%; height: 100%; object-fit: cover; border-radius: var(--raio-3);
  -webkit-mask-image: radial-gradient(120% 95% at 50% 35%, #000 55%, transparent 78%);
  mask-image: radial-gradient(120% 95% at 50% 35%, #000 55%, transparent 78%);
}
.hero__figura .painel { position: absolute; padding: var(--espaco-3); }
.hero__p1 { right: -2%; bottom: 24%; width: 46%; }
.hero__p2 { left: -2%; bottom: -3%; width: 80%; }
.hero__p3 { display: none; }
.hero__p1 .barras { height: 3rem; }
.hero__p1 .barras-legenda { display: none; }

.hero__painel-faixa { width: 100%; }

/* Peças dos painéis do hero. */
.barras { display: flex; align-items: flex-end; gap: 6px; height: 4.5rem; }
.barras span { flex: 1; border-radius: 3px 3px 0 0; background: linear-gradient(to top, rgb(61 139 255 / 0.35), var(--cor-primaria)); }
.barras-legenda { display: flex; justify-content: space-between; margin-top: var(--espaco-2); }
.pipeline { display: flex; align-items: center; gap: 4px; }
.pipeline span { padding: 3px 6px; border: 1px solid var(--cor-borda); border-radius: 4px; background: var(--cor-fundo); }
.pipeline i { flex: 1; height: 1px; min-width: 6px; background: var(--cor-primaria); }
.status { display: flex; align-items: center; gap: var(--espaco-2); font-size: var(--texto-2); }
.status::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--cor-ativo); box-shadow: 0 0 0 4px rgb(70 211 154 / 0.16); }

/* Faixa de ferramentas. */
.ferramentas { margin-top: var(--espaco-7); display: grid; gap: var(--espaco-3); }
.ferramentas__rotulo { color: var(--cor-texto-suave); font-size: var(--texto-2); }

@media (min-width: 56rem) {
  .hero { padding-block: var(--espaco-7) var(--espaco-8); }
  .hero__grade { grid-template-columns: 1.1fr 1fr; }
  .hero__figura .painel { padding: var(--espaco-4); }
  .hero__p1 { right: -2%; top: 8%; bottom: auto; width: min(58%, 15rem); }
  .hero__p2 { left: -3%; bottom: 14%; width: min(58%, 15rem); }
  .hero__p3 { display: block; right: 0; bottom: 2%; width: min(46%, 12rem); }
  .hero__p1 .barras { height: 4.5rem; }
  .hero__p1 .barras-legenda { display: flex; }
}

/* ---------- Problemas ---------- */
.problemas__grade { display: grid; gap: var(--espaco-4); }
@media (min-width: 56rem) { .problemas__grade { grid-template-columns: repeat(3, 1fr); } }

/* ---------- Casos ---------- */
.casos__lista { display: grid; }
.casos__acao { padding-top: var(--espaco-6); border-top: 1px solid var(--cor-borda); }

/* ---------- Sobre ---------- */
.sobre__grade { display: grid; gap: var(--espaco-7); }
.sobre__bio { display: grid; gap: var(--espaco-4); color: var(--cor-texto-suave); max-width: var(--largura-texto); }
.sobre__bio p:first-child { color: var(--cor-texto); font-size: var(--texto-4); line-height: 1.45; }
.sobre__bloco { display: grid; gap: var(--espaco-4); }
.sobre__bloco > h3 { font-size: var(--texto-3); font-stretch: 100%; color: var(--cor-texto-suave); font-weight: 600; }
.areas { display: grid; gap: var(--espaco-4); }
.areas div { display: grid; gap: var(--espaco-2); }
.areas p { font-size: var(--texto-2); color: var(--cor-texto-suave); }
.fatos { display: grid; gap: var(--espaco-3); padding: 0; margin: 0; list-style: none; }
.fatos li { display: flex; gap: var(--espaco-3); align-items: center; }
.fatos .icone { color: var(--cor-ativo); }
.sobre__links { display: flex; flex-wrap: wrap; gap: var(--espaco-3); }
@media (min-width: 56rem) { .sobre__grade { grid-template-columns: 1fr 1fr; align-items: start; } }

/* ---------- Perguntas ---------- */
.perguntas__lista { max-width: 48rem; border-top: 1px solid var(--cor-borda); }

/* ---------- Fechamento e rodapé ---------- */
.contato__caixa {
  display: grid; gap: var(--espaco-5); justify-items: start;
  padding: var(--espaco-7) var(--espaco-5);
  border: 1px solid var(--cor-borda); border-radius: var(--raio-3);
  background: radial-gradient(90% 120% at 100% 0%, rgb(61 139 255 / 0.2), transparent 60%), var(--cor-superficie);
}
.contato__caixa > p { color: var(--cor-texto-suave); max-width: 34rem; }
.contato__caixa > .assinatura { font-family: var(--fonte-titulo); font-stretch: 82%; font-weight: 700; font-size: var(--texto-4); color: var(--cor-texto); }
.rodape {
  padding-block: var(--espaco-7) calc(var(--altura-barra) + var(--espaco-6));
  border-top: 1px solid var(--cor-borda); color: var(--cor-texto-suave); font-size: var(--texto-2);
}
.rodape .conteudo { display: grid; gap: var(--espaco-4); }
.rodape__nome { color: var(--cor-texto); font-weight: 600; }
.rodape__links { display: flex; flex-wrap: wrap; gap: var(--espaco-2) var(--espaco-5); }
.rodape__links a { display: inline-block; padding-block: var(--espaco-2); text-underline-offset: 4px; }
@media (min-width: 60rem) { .rodape { padding-bottom: var(--espaco-7); } }
/* Com o aviso de cookies aberto, o fim da página sobe acima dele (medicao.js mede a altura do aviso). */
.com-banner body { padding-bottom: calc(var(--altura-banner, 0px) + var(--espaco-4)); }

/* ---------- Página de privacidade ---------- */
.texto-legal { padding-block: var(--espaco-7) var(--espaco-8); }
.texto-legal .conteudo { display: grid; gap: var(--espaco-5); max-width: calc(var(--largura-texto) + 2 * var(--margem-lateral)); }
.texto-legal h2 { font-size: var(--texto-4); margin-top: var(--espaco-3); }
.texto-legal p { color: var(--cor-texto-suave); }
.texto-legal a:not(.botao) { color: var(--cor-primaria); text-underline-offset: 4px; }
.texto-legal .botao { justify-self: start; }
.texto-legal__rodape { padding-top: var(--espaco-5); border-top: 1px solid var(--cor-borda); font-size: var(--texto-2); }
.rodape--simples { padding-block: var(--espaco-6); }


/* ---------- Hero com retrato recortado (v2) ---------- */
.hero--retrato { padding-top: var(--espaco-4); }
.hero--retrato .hero__grade { gap: 0; }
.hero--retrato .hero__figura { max-width: 24rem; width: 100%; aspect-ratio: 1; margin-inline: auto; justify-self: center; }
.hero--retrato .hero__figura .retrato__foto { border-radius: 0; object-fit: contain; -webkit-mask-image: linear-gradient(to bottom, #000 76%, transparent 99%); mask-image: linear-gradient(to bottom, #000 76%, transparent 99%); }
.hero--retrato .hero__texto { margin-top: var(--espaco-5); position: relative; z-index: 3; }
.hero--retrato .hero__p1 { right: -4%; top: 40%; bottom: auto; width: 44%; }
.hero--retrato .hero__p2 { left: -4%; top: 64%; bottom: auto; width: 50%; }
.hero--retrato .hero__p2 .barras { height: 2.5rem; }
@media (min-width: 56rem) {
  .hero--retrato { padding-top: var(--espaco-6); }
  .hero--retrato .hero__grade { grid-template-columns: 1fr 1.05fr; gap: var(--espaco-7); }
  .hero--retrato .hero__figura { max-width: 34rem; }
  .hero--retrato .hero__texto { margin-top: 0; }
  .hero--retrato .hero__p1 { right: 2%; top: 40%; width: 14rem; }
  .hero--retrato .hero__p2 { left: -6%; top: 66%; width: 13rem; }
  .hero--retrato .hero__p2 .barras { height: 3.5rem; }
}

/* ---------- Casos com mockup (v2) ---------- */
.caso__visual { position: relative; display: grid; gap: var(--espaco-4); }
.caso__fluxo { padding: var(--espaco-3); }
@media (min-width: 56rem) {
  .caso__visual { padding-bottom: var(--espaco-6); }
  .caso__fluxo { position: absolute; left: -8%; bottom: -4%; width: 17rem; z-index: 2; }
  .caso__visual--celular .caso__fluxo { left: auto; right: 0; bottom: 6%; }
}

/* Caso do bot no desktop: celular e fluxo lado a lado, sem o fluxo cobrir a conversa. */
@media (min-width: 56rem) {
  .caso__visual--celular { grid-template-columns: 16.5rem minmax(13rem, 1fr); align-items: center; padding-bottom: 0; }
  .caso__visual--celular .mockup-celular { margin: 0; }
  .caso__visual--celular .caso__fluxo { position: static; width: auto; }
}

/* Casos alternados no desktop (pedido do Thiago): o 2º caso inverte os lados e o painel flutuante sai pela direita,
   espelhado. A ordem do HTML continua texto e depois imagem (leitura e celular). */
@media (min-width: 56rem) {
  .card-caso:nth-child(even) { grid-template-columns: 1fr 1.05fr; }
  .card-caso:nth-child(even) .caso__visual { order: -1; }
  .card-caso:nth-child(even) .caso__fluxo { left: auto; right: -4%; }
}

/* Peças posicionadas do hero (sem style inline). */
.hero__brilho1 { width: 22rem; height: 22rem; left: -6rem; top: 2rem; }
.hero__brilho2 { width: 14rem; height: 14rem; right: -4rem; top: 24rem; }
.barras .barra-36 { height: 36%; }
.barras .barra-48 { height: 48%; }
.barras .barra-60 { height: 60%; }
.barras .barra-72 { height: 72%; }
.barras .barra-88 { height: 88%; }

/* Larguras das barras do painel ilustrativo dos casos (sem style inline). */
.largura-28 { width: 28%; }
.largura-30 { width: 30%; }
.largura-46 { width: 46%; }
.largura-50 { width: 50%; }
.largura-64 { width: 64%; }
.largura-74 { width: 74%; }
.largura-82 { width: 82%; }
.largura-100 { width: 100%; }

/* ---------- Hero em moldura HUD (estrutura da referência 1) ---------- */
.hero--moldura { padding-block: var(--espaco-2) var(--espaco-7); }
.hero--moldura > .moldura-brilho { margin-inline: var(--espaco-2); }
.moldura-brilho { filter: drop-shadow(0 0 10px rgb(61 139 255 / 0.1)); }
.moldura, .moldura__interno {
  clip-path: polygon(var(--corte) 0, calc(100% - var(--corte)) 0, 100% var(--corte), 100% calc(100% - var(--corte)),
    calc(100% - var(--corte)) 100%, var(--corte) 100%, 0 calc(100% - var(--corte)), 0 var(--corte));
}
.moldura {
  --corte: 20px;
  padding: 1.5px;
  background: linear-gradient(135deg, rgb(70 200 255 / 0.32), rgb(61 139 255 / 0.12) 28%, rgb(61 139 255 / 0.08) 62%, rgb(255 154 77 / 0.28));
}
.moldura__interno {
  --corte: 19px;
  position: relative; isolation: isolate; overflow: hidden;
  padding: var(--espaco-5) 0 0;
  background: var(--cor-fundo-profundo);
}
.moldura__cidade { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; object-position: 50% 0%; }
.moldura__interno::before {
  content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(to bottom, rgb(7 16 29 / 0.25) 0%, rgb(7 16 29 / 0.6) 28%, rgb(7 16 29 / 0.97) 46%);
}
.hero--moldura .hero__grade { display: flex; flex-direction: column; gap: var(--espaco-4); }
.hero--moldura .hero__figura { order: -1; width: 100%; max-width: 22rem; aspect-ratio: 1; margin-inline: auto; }
.hero--moldura .hero__texto { margin-top: 0; padding-bottom: var(--espaco-6); }
.hero--moldura .hero__figura .painel { padding: var(--espaco-3); }
.hero--moldura .hero__p1 { left: auto; bottom: auto; right: 0; top: 53%; width: 47%; }
.hero--moldura .hero__p2 { right: auto; bottom: auto; left: 0; top: 68%; width: 47%; }
.hero__painel-faixa .painel__titulo { flex-wrap: wrap; row-gap: var(--espaco-1); }
.hero__painel-faixa .status { white-space: nowrap; }
.hero--moldura .hero__p2 .barras { height: 2.5rem; }
.hero--moldura .ferramentas { margin-top: var(--espaco-5); width: 100%; }

@media (min-width: 56rem) {
  .moldura { --corte: 26px; }
  .hero--moldura { padding-top: var(--espaco-3); }
  .hero--moldura > .moldura-brilho { margin-inline: var(--espaco-3); }
  .moldura__interno {
    --corte: 25px;
    display: flex; flex-direction: column; justify-content: center;
    min-height: calc(100svh - var(--altura-cabecalho) - 2 * var(--espaco-3));
    padding: var(--espaco-6) 0 0;
  }
  .moldura__cidade { object-position: 75% 55%; }
  .moldura__interno::before {
    background:
      linear-gradient(90deg, rgb(7 16 29 / 0.97) 0%, rgb(7 16 29 / 0.9) 36%, rgb(7 16 29 / 0.3) 66%, rgb(7 16 29 / 0.55) 100%),
      linear-gradient(to top, rgb(7 16 29 / 0.75), transparent 35%);
  }
  .hero--moldura .hero__grade { display: grid; grid-template-columns: 1.05fr 1fr; align-items: end; gap: var(--espaco-5); }
  .hero--moldura .hero__texto { align-self: center; padding-block: var(--espaco-4) var(--espaco-7); }
  .hero--moldura .hero__figura { order: 0; max-width: 31rem; margin: 0 0 0 auto; }
  .hero--moldura .hero__figura .painel { padding: var(--espaco-4); }
  .hero--moldura .hero__p1 { left: auto; right: -5%; top: 6%; width: 13.5rem; }
  .hero--moldura .hero__p2 { left: auto; right: -5%; top: 47%; width: 12.5rem; }
  .hero--moldura .hero__p2 .barras { height: 3.5rem; }
}
@media (min-width: 80rem) {
  .hero--moldura .trilho-social { left: 1rem; }
}

/* Retrato aterrado: luz refletida no chão atrás da base do corpo, que some na névoa da moldura. */
.retrato__chao {
  position: absolute; left: -18%; right: -18%; bottom: -8%; height: 38%; z-index: -1; pointer-events: none;
  background:
    radial-gradient(55% 50% at 50% 70%, rgb(61 139 255 / 0.16), transparent 80%),
    radial-gradient(30% 30% at 62% 74%, rgb(255 154 77 / 0.07), transparent 80%);
  filter: blur(22px);
}
@media (min-width: 56rem) {
  .hero--moldura .hero__conteudo { flex: 1; display: flex; flex-direction: column; }
  .hero--moldura .hero__grade { flex: 1; align-items: center; }
  .hero--moldura .hero__figura { max-width: clamp(34rem, 60svh, 42rem); align-self: center; }
  .retrato__chao { bottom: -4%; height: 36%; }
}
/* A imagem neon tem ~8% de margem transparente embaixo (espaço do brilho): desce a foto para o corpo chegar à borda. */
.hero--moldura .retrato__foto { translate: 0 6%; }
@media (min-width: 56rem) { .hero--moldura .retrato__foto { translate: 0 3%; } }

/* Retrato maior (pedido do Thiago). Celular: ~8% maior, painéis recuados para não sair da moldura. */
.hero--moldura .hero__figura { width: 108%; max-width: 26rem; margin-inline: -4%; align-self: center; }
.hero--moldura .hero__p1 { right: 5%; }
.hero--moldura .hero__p2 { left: 5%; }
@media (min-width: 56rem) {
  .hero--moldura .hero__figura { width: 100%; margin-inline: 0; }
  .hero--moldura .hero__p1 { right: -5%; }
  .hero--moldura .hero__p2 { left: auto; right: -5%; }
}
/* Desktop largo: o retrato passa da largura da coluna e avança para a lateral, sem sair da tela. Em telas altas
   (monitor de 27") o retrato chega a 48rem; o mínimo da coluna do texto faz ele avançar para a lateral vazia em vez
   de apertar o título em três linhas. */
@media (min-width: 75rem) {
  .hero--moldura .hero__grade { grid-template-columns: minmax(33rem, 1fr) 1fr; }
  .hero--moldura .hero__figura {
    width: clamp(40rem, 74svh, 48rem); max-width: none; justify-self: end;
    margin-right: max(-5rem, calc((72rem - 100vw) / 2 + 2rem));
  }
}
@media (min-width: 75rem) {
  .hero--moldura .hero__p1, .hero--moldura .hero__p2 { right: 0; }
}
/* O trilho de redes só cabe na lateral a partir de 1440 px. */
@media (max-width: 89.99rem) { .hero--moldura .trilho-social { display: none; } }

/* ---------- Névoa de ambiente (textura que desliza em loop; parada com "reduzir movimento") ---------- */
.nevoa { position: absolute; overflow: hidden; pointer-events: none; }
.nevoa span {
  position: absolute; top: 0; bottom: 0; left: 0; width: 200%;
  background: url('../img/nevoa.webp') repeat-x 0 50% / 50% 100%;
  animation: nevoa-deriva 70s linear infinite; will-change: transform;
}
.nevoa span + span { top: 22%; opacity: 0.7; animation-duration: 46s; animation-direction: reverse; }
@keyframes nevoa-deriva { to { transform: translateX(-50%); } }
.nevoa--fundo { left: 0; right: 0; top: 14%; height: 40%; z-index: -1; opacity: 0.55; }
.nevoa--frente {
  left: -12%; right: -12%; bottom: -4%; height: 30%; z-index: 1; opacity: 0.4;
  /* Dissolve em cima e nas duas laterais (as duas máscaras se multiplicam). */
  -webkit-mask-image: linear-gradient(to bottom, transparent, #000 45%), linear-gradient(90deg, transparent, #000 30%, #000 70%, transparent);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(to bottom, transparent, #000 45%), linear-gradient(90deg, transparent, #000 30%, #000 70%, transparent);
  mask-composite: intersect;
}
.nevoa--frente span { animation-duration: 38s; }
@media (min-width: 56rem) {
  .nevoa--fundo {
    top: auto; bottom: 0; height: 62%;
    -webkit-mask-image: linear-gradient(90deg, transparent 30%, #000 60%);
    mask-image: linear-gradient(90deg, transparent 30%, #000 60%);
  }
}
@media (prefers-reduced-motion: reduce) { .nevoa span { animation: none; } }

/* ---------- Pipeline vivo: do clique ao contato ---------- */
.pipeline-vivo { --ciclo: 4.8s; display: grid; gap: var(--espaco-3); }
.pipeline-vivo .painel__titulo { margin-bottom: 0; }
.pipeline-vivo__etapas {
  position: relative; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--espaco-1);
  padding: 0; margin: 0; list-style: none;
}
.pipeline-vivo__etapas > li:not(.pipeline-vivo__trilho) {
  position: relative; z-index: 1; display: grid; justify-items: center; gap: 2px; text-align: center;
}
.pipeline-vivo__nome { font-size: var(--texto-2); font-weight: 600; line-height: 1.3; margin-top: var(--espaco-1); }
.pipeline-vivo__etapas .rotulo-mono { font-size: 11px; }
.pipeline-vivo__no {
  --brilho: 61 139 255;
  display: grid; place-items: center; width: 2.5rem; height: 2.5rem; border-radius: 50%;
  background: radial-gradient(circle at 50% 35%, #16294a, var(--cor-fundo-profundo));
  border: 1.5px solid rgb(var(--brilho) / 0.45); color: rgb(var(--brilho));
}
.pipeline-vivo__no .icone { width: 1.1rem; height: 1.1rem; }
.pipeline-vivo__etapas > li:nth-child(4) .pipeline-vivo__no { --brilho: 255 154 77; }

/* Trilho tracejado entre os centros das etapas, com o pacote de luz. */
.pipeline-vivo__trilho {
  position: absolute; left: 12.5%; right: 12.5%; top: 1.25rem; height: 2px; translate: 0 -50%;
  background: repeating-linear-gradient(90deg, rgb(61 139 255 / 0.55) 0 6px, transparent 6px 11px);
}
.pipeline-vivo__trilho b { position: absolute; inset: 0; }
.pipeline-vivo__trilho b::before {
  content: ''; position: absolute; left: 0; top: 50%; width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%;
  background: #e9f3ff; box-shadow: 0 0 12px 3px rgb(61 139 255 / 0.9), 0 0 2px 1px #fff;
  opacity: 0;
}

/* Linha de eventos: um evento por etapa, trocando junto com o pacote. */
.pipeline-vivo__log {
  display: flex; align-items: center; gap: var(--espaco-2); padding-top: var(--espaco-3);
  border-top: 1px dashed rgb(61 139 255 / 0.25); color: var(--cor-texto-suave); font-size: 12px; line-height: 1.6;
}
.pipeline-vivo__log-rotulo { color: var(--cor-ativo); }
.pipeline-vivo__log-rotulo::before { content: '› '; }
.pipeline-vivo__log ul { height: 1.6em; overflow: hidden; padding: 0; margin: 0; list-style: none; color: var(--cor-texto); }
.pipeline-vivo__log li { height: 1.6em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

@media (prefers-reduced-motion: no-preference) {
  html.js .pipeline-vivo__trilho { animation: trilho-flui 0.9s linear infinite; }
  html.js .pipeline-vivo__trilho b { animation: pacote-anda var(--ciclo) linear infinite; }
  html.js .pipeline-vivo__trilho b::before { animation: pacote-aparece var(--ciclo) linear infinite; }
  html.js .pipeline-vivo__no { animation: etapa-acende var(--ciclo) ease-out infinite; }
  html.js .pipeline-vivo__etapas > li:nth-child(2) .pipeline-vivo__no { animation-delay: calc(var(--ciclo) * 0.25); }
  html.js .pipeline-vivo__etapas > li:nth-child(3) .pipeline-vivo__no { animation-delay: calc(var(--ciclo) * 0.5); }
  html.js .pipeline-vivo__etapas > li:nth-child(4) .pipeline-vivo__no { animation-delay: calc(var(--ciclo) * 0.75); }
  html.js .pipeline-vivo__log ul li:first-child { animation: log-troca var(--ciclo) steps(1, end) infinite; }
}
@keyframes trilho-flui { to { background-position-x: 11px; } }
@keyframes pacote-anda { 0% { transform: translateX(0); } 75%, 100% { transform: translateX(100%); } }
@keyframes pacote-aparece { 0% { opacity: 0; } 4%, 76% { opacity: 1; } 84%, 100% { opacity: 0; } }
@keyframes etapa-acende {
  0% { border-color: rgb(var(--brilho) / 0.45); box-shadow: none; transform: scale(1); }
  5% { border-color: rgb(var(--brilho)); box-shadow: 0 0 0 6px rgb(var(--brilho) / 0.16), 0 0 20px rgb(var(--brilho) / 0.6); transform: scale(1.1); }
  24%, 100% { border-color: rgb(var(--brilho) / 0.45); box-shadow: none; transform: scale(1); }
}
@keyframes log-troca {
  0% { margin-top: 0; }
  25% { margin-top: -1.6em; }
  50% { margin-top: -3.2em; }
  75% { margin-top: -4.8em; }
}

/* ---------- Luz percorrendo a borda da moldura (caminho desenhado pelo movimento.js) ---------- */
.moldura-brilho { position: relative; }
.moldura__luz {
  position: absolute; inset: 0; z-index: 2; width: 100%; height: 100%; overflow: visible; pointer-events: none;
  display: none; mix-blend-mode: screen;
}
.moldura__luz path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
/* Rastro fino em seis camadas transparentes que terminam no mesmo ponto (a frente, a 18% do início do caminho):
   somadas, formam um degradê quase contínuo, forte na frente e sumindo atrás. */
.moldura__luz path { stroke: #7cc4ff; stroke-width: 1.6; stroke-opacity: 0.17; }
.moldura__luz-r1 { stroke-dasharray: 18 82; }
.moldura__luz-r2 { stroke-dasharray: 15 85; }
.moldura__luz-r3 { stroke-dasharray: 12 88; }
.moldura__luz-r4 { stroke-dasharray: 9 91; }
.moldura__luz-r5 { stroke-dasharray: 6 94; }
.moldura__luz-r6 { stroke-dasharray: 3 97; stroke: #d6ecff; }

/* Cometa: brilho suave feito só de degradês, andando sobre o mesmo caminho (offset-path definido pelo movimento.js).
   O ponto de ancoragem (72%) fica na cabeça; o halo se estende para trás. */
.moldura__cometa {
  position: absolute; left: 0; top: 0; z-index: 3; width: 380px; height: 120px; pointer-events: none;
  display: none; mix-blend-mode: screen; will-change: transform;
  offset-anchor: 72% 50%; offset-rotate: auto; offset-distance: 2%;
}
.moldura__cometa-brilho {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent 0%, rgb(61 139 255 / 0.06) 22%, rgb(61 139 255 / 0.18) 40%,
    rgb(95 190 255 / 0.38) 56%, rgb(150 210 255 / 0.62) 67%, rgb(180 225 255 / 0.72) 72%, rgb(120 195 255 / 0.4) 78%,
    rgb(61 139 255 / 0.12) 86%, transparent 96%);
  -webkit-mask-image: radial-gradient(farthest-side at 62% 50%, #000 0%, rgb(0 0 0 / 0.78) 22%, rgb(0 0 0 / 0.42) 48%, rgb(0 0 0 / 0.14) 74%, transparent 100%);
  mask-image: radial-gradient(farthest-side at 62% 50%, #000 0%, rgb(0 0 0 / 0.78) 22%, rgb(0 0 0 / 0.42) 48%, rgb(0 0 0 / 0.14) 74%, transparent 100%);
}
.moldura__cometa-nucleo {
  position: absolute; left: calc(72% - 26px); top: calc(50% - 5px); width: 36px; height: 10px; border-radius: 50%;
  opacity: 0.85;
  background: radial-gradient(farthest-side, #ffffff 0%, rgb(215 238 255 / 0.75) 25%, rgb(95 190 255 / 0.3) 60%, transparent 100%);
}
@media (prefers-reduced-motion: no-preference) {
  /* Tudo começa no mesmo quadro: o movimento.js liga .luz-ligada depois de desenhar o caminho. */
  .luz-ligada .moldura__luz { display: block; }
  .luz-ligada .moldura__luz-r1 { animation: luz-r1 10s linear infinite; }
  .luz-ligada .moldura__luz-r2 { animation: luz-r2 10s linear infinite; }
  .luz-ligada .moldura__luz-r3 { animation: luz-r3 10s linear infinite; }
  .luz-ligada .moldura__luz-r4 { animation: luz-r4 10s linear infinite; }
  .luz-ligada .moldura__luz-r5 { animation: luz-r5 10s linear infinite; }
  .luz-ligada .moldura__luz-r6 { animation: luz-r6 10s linear infinite; }
  html.tem-cometa .luz-ligada .moldura__cometa { display: block; animation: luz-cometa 10s linear infinite; }
}
/* A frente da luz começa a 2% do caminho (logo após o canto superior esquerdo); o rastro dá a volta por trás. */
@keyframes luz-r1 { from { stroke-dashoffset: 16; } to { stroke-dashoffset: -84; } }
@keyframes luz-r2 { from { stroke-dashoffset: 13; } to { stroke-dashoffset: -87; } }
@keyframes luz-r3 { from { stroke-dashoffset: 10; } to { stroke-dashoffset: -90; } }
@keyframes luz-r4 { from { stroke-dashoffset: 7; } to { stroke-dashoffset: -93; } }
@keyframes luz-r5 { from { stroke-dashoffset: 4; } to { stroke-dashoffset: -96; } }
@keyframes luz-r6 { from { stroke-dashoffset: 1; } to { stroke-dashoffset: -99; } }
@keyframes luz-cometa { from { offset-distance: 2%; } to { offset-distance: 102%; } }

/* =====================================================================================================
   Seções enriquecidas (referências do Thiago, 01/11/2026): separador de luz entre seções, dobra do hero
   com logos e convite para rolar, barra de entregas, passos em cartões, faixa do "Sobre mim" com fatos e
   holograma, trajetória em linha e ferramentas em painéis.
   ===================================================================================================== */

/* ---------- Separador entre seções: linha de luz com um nó no centro ---------- */
.secao + .secao { border-top: 0; position: relative; }
.secao + .secao::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgb(61 139 255 / 0.25) 20%, rgb(124 196 255 / 0.65) 50%, rgb(61 139 255 / 0.25) 80%, transparent);
}
.secao + .secao::after {
  content: ''; position: absolute; top: 0; left: 50%; width: 9px; height: 9px; pointer-events: none;
  translate: -50% -50%; rotate: 45deg;
  border: 1px solid rgb(124 196 255 / 0.85); background: var(--cor-fundo);
  box-shadow: 0 0 14px rgb(61 139 255 / 0.75);
}

/* ---------- Dobra do hero: ferramentas em logos e convite para rolar (referência 20) ---------- */
.dobra { position: relative; z-index: 2; padding-block: var(--espaco-5); }
.dobra::before {
  content: ''; position: absolute; top: 0; left: var(--margem-lateral); right: var(--margem-lateral); height: 1px;
  background: linear-gradient(90deg, rgb(61 139 255 / 0.55), rgb(61 139 255 / 0.14) 55%, transparent);
}
.dobra__ferramentas { display: grid; gap: var(--espaco-3); min-width: 0; }
.dobra__rotulo { color: var(--cor-texto-suave); font-size: var(--texto-2); }
.marcas { display: flex; align-items: center; gap: var(--espaco-6); margin: 0; padding: 0 var(--espaco-6) 0 0; list-style: none; }
.marquee__trilha .marcas { flex-wrap: nowrap; }
.marcas li {
  display: inline-flex; align-items: center; gap: 0.55rem; white-space: nowrap;
  font-family: var(--fonte-titulo); font-weight: 650; font-size: 1rem; letter-spacing: -0.01em;
  color: #a8bad3; transition: color var(--duracao) var(--curva);
}
.marcas li:hover { color: var(--cor-texto); }
.marcas li.marcas__texto { font-stretch: 88%; font-weight: 750; }
.marca { flex: none; width: 1.3rem; height: 1.3rem; }
.dobra__rolar { display: none; }
@media (prefers-reduced-motion: reduce) { .marquee__trilha .marcas { flex-wrap: wrap; row-gap: var(--espaco-3); } }
@media (min-width: 56rem) {
  .dobra::before {
    left: 0; right: 0;
    background: linear-gradient(90deg, transparent, rgb(61 139 255 / 0.45) 12%, rgb(61 139 255 / 0.12) 46%, rgb(124 196 255 / 0.45) 50%, rgb(61 139 255 / 0.12) 54%, transparent 88%);
  }
  /* Logos na coluna do texto, com o rótulo na mesma linha (a dobra cabe em 1440×900); o convite para rolar fica no
     centro, sobre a base do retrato. */
  .dobra { padding-block: var(--espaco-4); }
  .hero--moldura .hero__texto { padding-bottom: var(--espaco-5); }
  .dobra__interno { display: grid; grid-template-columns: 1fr 1fr; }
  .dobra__ferramentas { grid-template-columns: auto 1fr; align-items: center; gap: var(--espaco-5); padding-right: var(--espaco-7); }
  .dobra__rotulo { max-width: 7.5rem; line-height: 1.3; }
  .dobra__rolar {
    position: absolute; left: 50%; top: 50%; translate: -50% -42%;
    display: grid; place-items: center; width: 2.75rem; height: 3.5rem; color: var(--cor-texto-suave);
    transition: color var(--duracao) var(--curva);
  }
  .dobra__rolar::before {
    content: ''; position: absolute; inset: -40% -120%; z-index: -1; pointer-events: none;
    background: radial-gradient(closest-side, rgb(61 139 255 / 0.28), transparent);
  }
  .dobra__rolar span { position: relative; width: 1.45rem; height: 2.3rem; border: 1.5px solid currentColor; border-radius: 999px; }
  .dobra__rolar span::after {
    content: ''; position: absolute; left: 50%; top: 0.4rem; width: 3px; height: 7px; translate: -50% 0;
    border-radius: 2px; background: var(--cor-acento); box-shadow: 0 0 8px var(--cor-acento);
  }
  .dobra__rolar:hover { color: var(--cor-texto); }
}
@media (min-width: 56rem) and (prefers-reduced-motion: no-preference) {
  .dobra__rolar span::after { animation: rolar 1.9s var(--curva) infinite; }
}
@keyframes rolar {
  0% { transform: translateY(0); opacity: 1; }
  65% { transform: translateY(11px); opacity: 0; }
  100% { transform: translateY(0); opacity: 0; }
}

/* ---------- Barra de entregas em "O que eu resolvo" (referência 19) ---------- */
.entregas { display: grid; gap: var(--espaco-4); margin-top: var(--espaco-7); }
.entregas__titulo { font-size: var(--texto-3); font-stretch: 100%; font-weight: 600; color: var(--cor-texto-suave); }
.entregas__lista {
  display: grid; grid-auto-flow: column; grid-auto-columns: min(74%, 16rem); gap: var(--espaco-3);
  margin: 0 calc(-1 * var(--margem-lateral)); padding: var(--espaco-1) var(--margem-lateral) var(--espaco-3); list-style: none;
  overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: var(--margem-lateral);
  scrollbar-width: none;
}
.entregas__lista::-webkit-scrollbar { display: none; }
.entregas__lista:focus-visible { outline-offset: -2px; }
.entrega {
  position: relative; display: grid; align-content: start; gap: var(--espaco-2); padding: var(--espaco-5) var(--espaco-4);
  scroll-snap-align: start; border: 1px solid var(--cor-borda); border-radius: var(--raio-2);
  background: linear-gradient(180deg, rgb(22 41 74 / 0.75), rgb(16 32 56 / 0.3));
  transition: border-color var(--duracao) var(--curva), box-shadow var(--duracao) var(--curva);
}
.entrega::before {
  content: ''; position: absolute; top: -1px; left: 20%; right: 20%; height: 1px; opacity: 0.45;
  background: linear-gradient(90deg, transparent, rgb(255 179 125 / 0.9), transparent);
  transition: opacity var(--duracao) var(--curva);
}
.entrega__icone {
  display: grid; place-items: center; width: 2.75rem; height: 2.75rem; margin-bottom: var(--espaco-2);
  border: 1px solid rgb(255 154 77 / 0.35); border-radius: var(--raio-1); color: var(--cor-acento);
  background: radial-gradient(circle at 50% 30%, rgb(255 154 77 / 0.2), rgb(255 154 77 / 0.04));
  box-shadow: 0 0 20px -6px rgb(255 154 77 / 0.55);
}
.entrega__icone .icone { width: 1.3rem; height: 1.3rem; }
.entrega h4 { margin: 0; font-family: var(--fonte-titulo); font-size: var(--texto-3); font-weight: 650; line-height: 1.25; }
.entrega p { color: var(--cor-texto-suave); font-size: var(--texto-2); line-height: 1.5; }
.entrega:hover { border-color: rgb(255 154 77 / 0.45); box-shadow: 0 20px 44px -30px rgb(255 154 77 / 0.7); }
.entrega:hover::before { opacity: 1; }
@media (min-width: 56rem) {
  .entregas__lista { grid-auto-flow: row; grid-template-columns: repeat(3, 1fr); margin: 0; padding: 0; overflow: visible; }
}
@media (min-width: 75rem) { .entregas__lista { grid-template-columns: repeat(6, 1fr); } }

/* ---------- Como eu trabalho: cada passo vira um cartão pendurado na linha ---------- */
.passos--icones .passo {
  padding: var(--espaco-4); border: 1px solid var(--cor-borda); border-radius: var(--raio-2);
  background: linear-gradient(180deg, rgb(22 41 74 / 0.7), rgb(16 32 56 / 0.25));
}
.passos--icones .passo::before {
  content: ''; position: absolute; top: -1px; left: var(--espaco-4); width: 2.5rem; height: 2px; border-radius: 2px;
  background: var(--cor-primaria); box-shadow: 0 0 10px rgb(61 139 255 / 0.8);
}
.passos--icones .passo__icone { top: var(--espaco-3); }
.passos--icones .passo:last-child { border-color: rgb(255 154 77 / 0.35); }
.passos--icones .passo:last-child::before { background: var(--cor-acento); box-shadow: 0 0 10px rgb(255 154 77 / 0.8); }
@media (min-width: 56rem) {
  .passos--icones { padding-top: calc(var(--espaco-7) + var(--espaco-4)); }
  .passos--icones .passo { padding: var(--espaco-5) var(--espaco-4); }
  .passos--icones .passo__icone { top: calc(-1 * var(--espaco-7) - var(--espaco-4) - 0.4rem); }
  .passos--icones .passo::after {
    content: ''; position: absolute; left: 1.5rem; bottom: 100%; width: 1px;
    height: calc(var(--espaco-7) + var(--espaco-4) - 3.1rem);
    background: linear-gradient(to bottom, rgb(61 139 255 / 0.6), rgb(61 139 255 / 0.15));
  }
}

/* ---------- Sobre mim: bio, coluna de fatos e holograma lado a lado (referência 18) ---------- */
.sobre__faixa { display: grid; gap: var(--espaco-6); align-items: center; }
.sobre__cartao { display: grid; gap: var(--espaco-5); padding: var(--espaco-5); }
.sobre__cartao .sobre__bio { max-width: none; }
.fatos-coluna { position: relative; display: grid; gap: var(--espaco-5); margin: 0; padding: 0; list-style: none; }
.fatos-coluna::before {
  content: ''; position: absolute; left: 1.5rem; top: 1.5rem; bottom: 1.5rem; width: 1px;
  background: linear-gradient(to bottom, rgb(61 139 255 / 0.55), rgb(61 139 255 / 0.12));
}
.fatos-coluna li { position: relative; display: grid; grid-template-columns: 3rem 1fr; column-gap: var(--espaco-4); row-gap: 0.15rem; }
.fatos-coluna__icone {
  grid-row: span 2; align-self: center; display: grid; place-items: center; width: 3rem; height: 3rem; border-radius: 50%;
  border: 1.5px solid rgb(61 139 255 / 0.75); color: #8ec5ff;
  background: radial-gradient(circle at 50% 35%, #16294a, var(--cor-fundo));
  box-shadow: 0 0 0 5px rgb(61 139 255 / 0.07), 0 0 22px rgb(61 139 255 / 0.35);
}
.fatos-coluna__icone .icone { width: 1.25rem; height: 1.25rem; }
.fatos-coluna strong { align-self: end; font-family: var(--fonte-titulo); font-stretch: 85%; font-size: var(--texto-4); line-height: 1.1; }
.fatos-coluna__rotulo { align-self: start; color: var(--cor-texto-suave); font-size: var(--texto-2); line-height: 1.4; }

.holo { --canto-tam: 22px; --canto-cor: rgb(124 196 255 / 0.85); position: relative; order: -1; margin: 0; padding: var(--espaco-4); }
.holo__topo, .holo__base { position: relative; z-index: 2; display: flex; justify-content: space-between; gap: var(--espaco-3); }
.holo__cena { position: relative; isolation: isolate; overflow: hidden; margin-block: var(--espaco-2); }
/* O retrato ocupa só o miolo da imagem: amplia e corta as margens vazias. */
.holo__cena img {
  display: block; width: 124%; max-width: none; height: auto; margin: -4% -12% -6%;
  -webkit-mask-image: linear-gradient(to bottom, #000 72%, transparent 98%);
  mask-image: linear-gradient(to bottom, #000 72%, transparent 98%);
}
.holo__anel {
  position: absolute; left: 50%; top: 40%; z-index: -1; width: 74%; aspect-ratio: 1; translate: -50% -50%; border-radius: 50%;
  border: 1px dashed rgb(124 196 255 / 0.4); box-shadow: inset 0 0 40px rgb(61 139 255 / 0.12);
}
.holo__anel--2 { width: 92%; border: 1px solid rgb(61 139 255 / 0.18); border-top-color: rgb(124 196 255 / 0.7); box-shadow: none; }
.holo__cena::before {
  content: ''; position: absolute; left: 12%; right: 12%; bottom: 2%; height: 16%; z-index: -1;
  background: radial-gradient(closest-side, rgb(61 139 255 / 0.4), transparent); filter: blur(6px);
}
.holo__cena::after {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 26%; pointer-events: none; z-index: 1;
  background: linear-gradient(to bottom, transparent, rgb(61 139 255 / 0.14) 85%, rgb(142 197 255 / 0.5) 100%);
  transform: translateY(-110%);
}
@media (prefers-reduced-motion: no-preference) {
  .holo__anel { animation: girar 60s linear infinite; }
  .holo__anel--2 { animation-duration: 24s; animation-direction: reverse; }
  .holo__cena::after { animation: varrer 5s ease-in-out infinite; }
}
@keyframes girar { to { rotate: 360deg; } }

@media (min-width: 56rem) {
  .sobre__faixa { grid-template-columns: 1fr 1fr; grid-template-areas: 'bio holo' 'fatos holo'; column-gap: var(--espaco-7); }
  .sobre__cartao { grid-area: bio; }
  .fatos-coluna { grid-area: fatos; grid-template-columns: 1fr 1fr; }
  .fatos-coluna::before { display: none; }
  .holo { grid-area: holo; }
}
@media (min-width: 75rem) {
  .sobre__faixa { grid-template-columns: 1.15fr 0.8fr 1fr; grid-template-areas: 'bio fatos holo'; column-gap: var(--espaco-6); }
  .fatos-coluna { grid-template-columns: 1fr; gap: var(--espaco-6); }
  .fatos-coluna::before { display: block; }
}

/* ---------- Trajetória em linha e ferramentas em painéis ---------- */
.sobre__detalhes { display: grid; gap: var(--espaco-7); margin-top: var(--espaco-8); }
.areas--paineis { gap: var(--espaco-3); }
.areas--paineis > div {
  align-content: start; padding: var(--espaco-4); border: 1px solid var(--cor-borda); border-radius: var(--raio-2);
  background: rgb(16 32 56 / 0.45);
}
.trajetoria--linha .item-trajetoria:last-child .item-trajetoria__ano { color: var(--cor-acento); }
@media (min-width: 60rem) {
  .areas--paineis { grid-template-columns: 1.45fr 0.9fr 1.35fr 0.7fr; }
  .trajetoria--linha { position: relative; grid-template-columns: repeat(6, 1fr); gap: var(--espaco-5); padding-top: 2.25rem; }
  .trajetoria--linha::before {
    content: ''; position: absolute; left: 0; right: 0; top: 0.75rem; height: 1px;
    background: linear-gradient(90deg, rgb(61 139 255 / 0.65), rgb(61 139 255 / 0.2) 80%, rgb(255 154 77 / 0.5));
  }
  .trajetoria--linha .item-trajetoria { grid-template-columns: 1fr; gap: var(--espaco-2); align-content: start; padding-bottom: 0; }
  .trajetoria--linha .item-trajetoria::before,
  .trajetoria--linha .item-trajetoria:last-child::before {
    display: block; left: 0; top: -1.5rem; bottom: auto; width: 11px; height: 11px; translate: 0 -50%; border-radius: 50%;
    background: var(--cor-fundo); border: 2px solid var(--cor-primaria); box-shadow: 0 0 10px rgb(61 139 255 / 0.7);
  }
  .trajetoria--linha .item-trajetoria:last-child::before { border-color: var(--cor-acento); box-shadow: 0 0 12px rgb(255 154 77 / 0.8); }
}

/* =====================================================================================================
   Ambiente das seções (pedido do Thiago): névoa bem mais leve que a do hero, feixes de luz e linhas suaves
   com um pulso de luz, para dar textura sem disputar com o conteúdo. Fica atrás de tudo, não pega cliques,
   só anima a seção que está na tela (movimento.js liga .em-cena) e para com "reduzir movimento".
   ===================================================================================================== */
.secao { position: relative; isolation: isolate; }
.ambiente { position: absolute; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }

/* Névoa: a mesma textura do hero, mais fraca e mais lenta, dissolvendo nas quatro bordas. */
.nevoa--secao {
  left: 0; right: 0; top: var(--nevoa-topo, 35%); height: min(60%, 34rem); opacity: 0.17;
  -webkit-mask-image: linear-gradient(to bottom, transparent, #000 35%, #000 65%, transparent), linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(to bottom, transparent, #000 35%, #000 65%, transparent), linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent);
  mask-composite: intersect;
}
.nevoa--secao span { animation-duration: 120s; }

/* Feixes: faixas de luz inclinadas, de bordas macias (só degradê, sem desfoque), que somem em cima e embaixo. */
.feixe {
  position: absolute; top: -15%; height: 130%; width: clamp(7rem, 16vw, 15rem); left: var(--feixe-x, 70%);
  rotate: var(--feixe-giro, 24deg); transform-origin: 50% 0;
  background: linear-gradient(90deg, transparent, rgb(61 139 255 / 0.1) 38%, rgb(142 197 255 / 0.16) 50%, rgb(61 139 255 / 0.1) 62%, transparent);
  -webkit-mask-image: linear-gradient(to bottom, transparent, #000 22%, #000 58%, transparent 92%);
  mask-image: linear-gradient(to bottom, transparent, #000 22%, #000 58%, transparent 92%);
  opacity: 0.7;
}
.feixe--2 {
  --feixe-x: 84%; --feixe-giro: 30deg; width: clamp(3.5rem, 7vw, 6.5rem); opacity: 0.55;
  background: linear-gradient(90deg, transparent, rgb(142 197 255 / 0.14) 50%, transparent);
}
.ambiente--esquerda .feixe--1 { --feixe-x: 8%; --feixe-giro: -24deg; }
.ambiente--esquerda .feixe--2 { --feixe-x: 24%; --feixe-giro: -30deg; }

/* Linhas: fita de fios finos com um pulso de luz percorrendo o primeiro. */
.linhas { position: absolute; left: 0; top: var(--linhas-topo, 30%); width: 100%; height: 37.5rem; overflow: visible; }
.ambiente--esquerda .linhas { scale: -1 1; }
.linhas path { fill: none; vector-effect: non-scaling-stroke; }
.linhas__fio { stroke-width: 1; }
.linhas__fio--1 { opacity: 0.2; }
.linhas__fio--2 { opacity: 0.13; }
.linhas__fio--3 { opacity: 0.09; }
.linhas__fio--4 { opacity: 0.06; }
/* A cor do pulso vem do degradê no HTML (some nas bordas, como os fios); aqui só espessura e opacidade. */
.linhas__pulso { stroke-width: 1.4; stroke-linecap: round; stroke-dasharray: 6 94; stroke-dashoffset: 60; opacity: 0.6; }
.linhas__pulso--brilho { stroke-width: 6; opacity: 0.12; }

/* Posição de cada camada, para as seções não repetirem o mesmo desenho. */
#problemas .ambiente { --linhas-topo: 34%; --nevoa-topo: 52%; }
#casos .ambiente { --linhas-topo: 6%; --nevoa-topo: 28%; }
#como-trabalho .ambiente { --linhas-topo: 18%; --nevoa-topo: 40%; }
#sobre .ambiente { --linhas-topo: 48%; --nevoa-topo: 18%; }
#perguntas .ambiente { --linhas-topo: 14%; --nevoa-topo: 46%; }
#contato .ambiente { --linhas-topo: 22%; --nevoa-topo: 30%; }

/* Celular: um feixe só e a névoa ainda mais discreta. */
@media (max-width: 55.99rem) {
  .feixe--2 { display: none; }
  .feixe--1 { width: 9rem; }
  .nevoa--secao { opacity: 0.1; }
}

@media (prefers-reduced-motion: no-preference) {
  .feixe { animation: feixe-respirar 18s ease-in-out infinite alternate; }
  .feixe--2 { animation-duration: 13s; animation-delay: -6s; }
  .linhas__pulso { animation: pulso-fio 16s linear infinite; }
}
@keyframes feixe-respirar {
  from { translate: -2.5rem 0; opacity: 0.35; }
  to { translate: 2.5rem 0; opacity: 0.85; }
}
@keyframes pulso-fio { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }

/* Fora da tela, tudo pausado: o movimento.js liga .em-cena só no ambiente, no núcleo e no hero que estão na tela.
   No hero, rastro e cometa da borda pausam e voltam juntos, então continuam sincronizados. */
.js .ambiente:not(.em-cena) *,
.js .ambiente:not(.em-cena) .nevoa span,
.js .orbita:not(.em-cena) *,
.js .hero:not(.em-cena) *, .js .hero:not(.em-cena) *::before, .js .hero:not(.em-cena) *::after,
.js .orbita:not(.em-cena) *::before, .js .orbita:not(.em-cena) *::after,
.js .mockup-painel:not(.em-cena) *, .js .mockup-painel:not(.em-cena) *::before, .js .mockup-painel:not(.em-cena) *::after,
.js .hero:not(.em-cena) .nevoa span { animation-play-state: paused !important; } /* vence os seletores mais específicos do cometa, do pipeline e do mouse */

/* =====================================================================================================
   Entrada das seções (pedido do Thiago, igual às conversas da apresentação): cada [data-revelar] se forma a partir
   de partículas conforme a rolagem (assets/js/particulas.js, WebGL2). O script marca data-revelar="oculto|formando|
   inteiro" e --nitidez (o HTML de verdade aparece no fim da formação). Sem JS ou com "reduzir movimento", nada se aplica.
   ===================================================================================================== */
@media (prefers-reduced-motion: no-preference) {
  .js [data-revelar="oculto"] { opacity: 0; }
  .js [data-revelar="formando"] { opacity: var(--nitidez, 0); }
}
.particulas { position: fixed; inset: 0; z-index: 20; width: 100%; height: 100%; pointer-events: none; }

/* =====================================================================================================
   O que eu resolvo (referência do Thiago, "Expertise with Passion"): texto e problemas à esquerda; à direita,
   núcleo de blocos de vidro flutuando — centro "Do clique ao contato" e as seis entregas ao redor, ligadas por
   linhas com pulsos de luz chegando ao centro. No desktop o núcleo acompanha a rolagem (sticky).
   ===================================================================================================== */
.problemas__layout { display: grid; gap: var(--espaco-7); }
.problemas__texto { display: grid; gap: var(--espaco-6); align-content: start; }
.problemas__texto .secao__cabeca { margin-bottom: 0; }
.problemas__layout .problemas__grade { grid-template-columns: 1fr; gap: var(--espaco-4); }

/* Problema em cartão compacto: ícone ao lado, texto e botão. */
.card-servico--compacto {
  display: grid; grid-template-columns: 2.75rem 1fr; align-items: start; gap: var(--espaco-4);
  padding: var(--espaco-5); border-radius: var(--raio-2);
  background: linear-gradient(160deg, rgb(22 41 74 / 0.85), rgb(16 32 56 / 0.55));
}
.card-servico--compacto .card-servico__icone { box-shadow: 0 0 0 1px rgb(61 139 255 / 0.3), 0 0 18px -4px rgb(61 139 255 / 0.6); }
.card-servico__corpo { display: grid; gap: var(--espaco-3); justify-items: start; }
/* Celular: ícone em cima, para o texto e o botão usarem a largura toda (o botão não quebra em duas linhas). */
@media (max-width: 35.99rem) { .card-servico--compacto { grid-template-columns: 1fr; } }
.card-servico--compacto h3 { font-size: var(--texto-4); }
.card-servico--compacto .botao { margin-top: var(--espaco-1); }

/* ---------- Núcleo ---------- */
.orbita { position: relative; }
.orbita__titulo { margin-bottom: var(--espaco-4); }
.orbita__linhas { display: none; }

/* Bloco de vidro: fundo translúcido, borda clara fina, brilho interno em cima e sombra azul. */
.bloco, .orbita__centro {
  display: grid; justify-items: start; gap: 0.3rem; padding: var(--espaco-3) var(--espaco-4) var(--espaco-4);
  border-radius: 18px; border: 1px solid rgb(255 255 255 / 0.1);
  /* Vidro escuro quase opaco: as linhas do núcleo passam por trás sem atravessar o texto. */
  background: linear-gradient(155deg, rgb(255 255 255 / 0.09), rgb(255 255 255 / 0.025) 42%, rgb(61 139 255 / 0.07)), rgb(12 24 43 / 0.88);
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.14), 0 24px 44px -24px rgb(0 0 0 / 0.85), 0 0 34px -14px rgb(61 139 255 / 0.45);
}
.bloco__icone, .orbita__icone {
  display: grid; place-items: center; width: 2.6rem; height: 2.6rem; margin-bottom: 0.35rem; border-radius: 12px;
  color: #d9ecff; background: linear-gradient(145deg, #2463c4, #0e2a52);
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.25), 0 8px 18px -8px rgb(61 139 255 / 0.9);
}
.bloco__icone .icone { width: 1.25rem; height: 1.25rem; }
.bloco strong, .orbita__centro strong { font-family: var(--fonte-titulo); font-size: var(--texto-3); font-weight: 650; line-height: 1.2; }
.bloco__nota { color: var(--cor-texto-suave); font-size: var(--texto-1); line-height: 1.35; }

/* Bloco central: maior, com auréola de luz embaixo e o ícone em destaque. */
.orbita__centro {
  position: relative; justify-items: center; text-align: center; padding: var(--espaco-5);
  border-color: rgb(124 196 255 / 0.35);
  background: linear-gradient(155deg, rgb(124 196 255 / 0.16), rgb(61 139 255 / 0.05) 45%, rgb(61 139 255 / 0.12)), rgb(12 26 48 / 0.9);
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2), 0 30px 60px -28px rgb(0 0 0 / 0.9), 0 0 60px -10px rgb(61 139 255 / 0.65);
}
.orbita__icone { width: 4.25rem; height: 4.25rem; border-radius: 18px; background: linear-gradient(145deg, #4aa3ff, #1446a0 60%, #0b2650); }
.orbita__icone .icone { width: 2rem; height: 2rem; }
.orbita__halo {
  position: absolute; left: 50%; bottom: -26%; z-index: -1; width: 150%; height: 46%; translate: -50% 0; pointer-events: none;
  background: radial-gradient(closest-side, rgb(61 139 255 / 0.45), rgb(61 139 255 / 0.12) 55%, transparent);
}

/* Celular e tablet: centro em cima, blocos em grade de duas colunas. */
.orbita__lista { display: grid; grid-template-columns: 1fr 1fr; gap: var(--espaco-3); margin: var(--espaco-5) 0 0; padding: 0; list-style: none; }
.orbita__centro { margin-inline: auto; width: min(100%, 15rem); }
/* A auréola do centro é mais larga que o bloco: no celular, corta nas bordas para não criar rolagem lateral. */
@media (max-width: 63.99rem) { .problemas__visual { overflow-x: clip; } }

/* Desktop: núcleo de verdade — centro no meio, blocos flutuando em volta, linhas ligando cada um ao centro. */
@media (min-width: 64rem) {
  .problemas__layout { grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr); align-items: start; gap: var(--espaco-7); }
  .problemas__visual { position: sticky; top: calc(var(--altura-cabecalho) + var(--espaco-5)); }
  /* Blocos inteiros dentro da caixa: a máscara da entrada recorta o que passa da borda. */
  .orbita { aspect-ratio: 1 / 0.96; }
  .orbita__titulo { position: absolute; left: 0; top: 0; margin: 0; }
  .orbita__linhas { display: block; position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
  .orbita__fio { fill: none; stroke: rgb(124 196 255 / 0.28); stroke-width: 1; stroke-dasharray: 3 5; vector-effect: non-scaling-stroke; }
  .orbita__pulso {
    fill: none; stroke: #cfe7ff; stroke-width: 2; stroke-linecap: round; vector-effect: non-scaling-stroke;
    stroke-dasharray: 8 92; stroke-dashoffset: 100; opacity: 0.9;
  }
  .orbita__centro { position: absolute; left: 50%; top: 50%; width: 13rem; translate: -50% -50%; margin: 0; z-index: 2; }
  .orbita__lista { display: block; margin: 0; }
  .bloco { position: absolute; left: var(--x); top: var(--y); width: 10rem; translate: -50% -50%; z-index: 1; }
  /* Mesmas posições das linhas no SVG (orbita.py). */
  .bloco--1 { --x: 22%; --y: 18%; }
  .bloco--2 { --x: 78%; --y: 14%; }
  .bloco--3 { --x: 86%; --y: 50%; width: 9.25rem; }
  .bloco--4 { --x: 75%; --y: 86%; }
  .bloco--5 { --x: 25%; --y: 87%; }
  .bloco--6 { --x: 14%; --y: 50%; width: 9.25rem; }
}

@media (prefers-reduced-motion: no-preference) {
  .bloco { animation: flutuar 7s ease-in-out infinite; }
  .bloco--2 { animation-duration: 8.5s; animation-delay: -2s; }
  .bloco--3 { animation-duration: 6.5s; animation-delay: -4s; }
  .bloco--4 { animation-duration: 9s; animation-delay: -1s; }
  .bloco--5 { animation-duration: 7.5s; animation-delay: -5s; }
  .bloco--6 { animation-duration: 8s; animation-delay: -3s; }
  .orbita__centro { animation: flutuar 10s ease-in-out infinite; }
  .orbita__halo { animation: halo 5s ease-in-out infinite alternate; }
  .orbita__pulso { animation: pulso-centro 3.6s linear infinite; }
  .orbita__pulso--2 { animation-delay: -0.6s; }
  .orbita__pulso--3 { animation-delay: -1.2s; }
  .orbita__pulso--4 { animation-delay: -1.8s; }
  .orbita__pulso--5 { animation-delay: -2.4s; }
  .orbita__pulso--6 { animation-delay: -3s; }
}
@keyframes flutuar { 50% { transform: translateY(-9px); } }
@keyframes halo { from { opacity: 0.6; } to { opacity: 1; } }
@keyframes pulso-centro { from { stroke-dashoffset: 100; opacity: 0; } 15% { opacity: 0.9; } 85% { opacity: 0.9; } to { stroke-dashoffset: 0; opacity: 0; } }

/* =====================================================================================================
   Tarefa 11, movimento e interações (spec, seção 6). Só transform e opacity; nada com "reduzir movimento".
   ===================================================================================================== */

/* Como eu trabalho: com JS (movimento.js), a linha começa vazia, se preenche com a rolagem e acende cada passo.
   Sem JS, --progresso fica em 1 e todos os passos acesos. */
@media (prefers-reduced-motion: no-preference) {
  .passos--rolagem { --progresso: 0; }
  .passos--rolagem::after { transition: transform 0.25s linear; }
  /* Apaga só o conteúdo: a opacidade do passo inteiro é das partículas (data-revelar). */
  .passos--rolagem .passo h3, .passos--rolagem .passo p, .passos--rolagem .passo::before { transition: opacity 0.45s ease; }
  .passos--rolagem .passo:not(.aceso) h3, .passos--rolagem .passo:not(.aceso) p { opacity: 0.55; }
  .passos--rolagem .passo:not(.aceso)::before { opacity: 0.3; }
  .passos--rolagem .passo__icone { transition: opacity 0.45s ease, transform 0.45s cubic-bezier(0.2, 0.7, 0.2, 1); }
  .passos--rolagem .passo:not(.aceso) .passo__icone { opacity: 0.6; transform: scale(0.88); }
  .passos--rolagem .passo__icone::after {
    content: ''; position: absolute; inset: -2px; border-radius: 50%; border: 1.5px solid var(--cor-primaria);
    opacity: 0; pointer-events: none;
  }
  .passos--rolagem .passo.aceso .passo__icone::after { animation: passo-acende 0.9s ease-out; }
}
@keyframes passo-acende { 0% { opacity: 0.9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.9); } }

/* Hero: os três painéis entram em sequência ao carregar (o título e a foto aparecem na hora). */
@media (prefers-reduced-motion: no-preference) {
  .js .hero__p1, .js .hero__p2, .js .pipeline-vivo { animation: painel-entra 0.7s cubic-bezier(0.2, 0.7, 0.2, 1) backwards; }
  .js .hero__p1 { animation-delay: 0.25s; }
  .js .hero__p2 { animation-delay: 0.45s; }
  .js .pipeline-vivo { animation-delay: 0.65s; }
}
@keyframes painel-entra { from { opacity: 0; transform: translateY(14px); } }

/* Hero no desktop com mouse: parallax leve (variáveis --px, --py e --rolagem escritas pelo movimento.js). */
@media (prefers-reduced-motion: no-preference) and (min-width: 60rem) and (pointer: fine) {
  .js .hero__figura {
    translate: calc(var(--px, 0) * -10px) calc(var(--py, 0) * -8px + var(--rolagem, 0) * 0.12px);
    transition: translate 0.9s cubic-bezier(0.2, 0.7, 0.2, 1);
  }
  .js .hero__p1, .js .hero__p2 {
    translate: calc(var(--px, 0) * 16px) calc(var(--py, 0) * 12px);
    transition: translate 0.9s cubic-bezier(0.2, 0.7, 0.2, 1);
  }
}

/* Botão de WhatsApp (base: INT-01 "Glass shimmer CTA"): um brilho atravessa os botões laranja de tempos em tempos,
   sem piscar, e com mouse o botão segue o cursor uns pixels (--ima-x/--ima-y, movimento.js). */
.botao--whatsapp:not(.botao--linha) { position: relative; overflow: hidden; isolation: isolate; }
@media (prefers-reduced-motion: no-preference) {
  .botao--whatsapp:not(.botao--linha)::after {
    content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none; transform: translateX(-130%);
    background: linear-gradient(100deg, transparent 30%, rgb(255 255 255 / 0.5) 50%, transparent 70%);
    animation: brilho-cta 6.5s cubic-bezier(0.4, 0, 0.2, 1) infinite;
  }
}
@media (prefers-reduced-motion: no-preference) and (pointer: fine) {
  .botao--whatsapp {
    translate: var(--ima-x, 0px) var(--ima-y, 0px);
    transition: background-color var(--duracao) var(--curva), border-color var(--duracao) var(--curva),
      transform var(--duracao) var(--curva), translate 0.35s cubic-bezier(0.2, 0.7, 0.2, 1);
  }
}
@keyframes brilho-cta { 0% { transform: translateX(-130%); } 16%, 100% { transform: translateX(130%); } }

/* Casos: ao passar o mouse, tocar ou navegar pelo teclado, a decisão-chave acende (fundo azul e barra laranja). */
.card-caso__decisao { position: relative; isolation: isolate; }
.card-caso__decisao::before, .card-caso__decisao::after { content: ''; position: absolute; pointer-events: none; opacity: 0; }
.card-caso__decisao::before {
  inset: -0.6rem 0 -0.6rem -2px; z-index: -1; border-radius: 0 var(--raio-1) var(--raio-1) 0; /* sem passar da direita: em 320 px estourava a tela */
  background: linear-gradient(90deg, rgb(61 139 255 / 0.16), rgb(61 139 255 / 0.04) 70%, transparent);
}
.card-caso__decisao::after { left: -2px; top: 0; bottom: 0; width: 2px; background: var(--cor-acento); box-shadow: 0 0 10px rgb(255 154 77 / 0.7); }
.card-caso:hover .card-caso__decisao::before, .card-caso:hover .card-caso__decisao::after,
.card-caso:focus-within .card-caso__decisao::before, .card-caso:focus-within .card-caso__decisao::after { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  .card-caso__decisao::before, .card-caso__decisao::after { transition: opacity 0.35s ease; }
}

/* Celular: a coluna do hero ocupa a largura da moldura. Com align-items: center (herdado da grade do desktop), ela
   crescia até a largura mínima do painel "Do clique ao contato" e saía da moldura em 320 px. */
@media (max-width: 55.99rem) {
  .hero--moldura .hero__grade { align-items: stretch; }
  .hero--moldura .hero__texto { min-width: 0; grid-template-columns: minmax(0, 1fr); }
  .hero--moldura .pipeline-vivo { justify-self: stretch; }
}
.pipeline-vivo { grid-template-columns: minmax(0, 1fr); } /* a linha de log (nowrap) não alarga o painel */
.pipeline-vivo > * { min-width: 0; }
.pipeline-vivo__etapas { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.pipeline-vivo__etapas > li:not(.pipeline-vivo__trilho) { min-width: 0; }
@media (max-width: 22.5rem) { .pipeline-vivo__etapas .rotulo-mono { font-size: 9px; } }
