/* ══════════════════════════════════════════════════════════════════════════
   PÁGINAS DE PRODUTO
   Uma página por produto, começando pelo chatbot. Tudo aqui é prefixado com
   .pd- e só existe nestas páginas: o cabeçalho, o rodapé, o formulário, o
   FAQ e a esteira de integrações continuam vindo dos arquivos compartilhados,
   para que a página nasça com a mesma identidade do resto do site.

   Este arquivo carrega DEPOIS de identidade.css. O hero herda a estrutura de
   .mz-hero, mas nada do movimento: aqui o fundo é um gradiente parado e o
   miolo tem duas colunas.
   ══════════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────── hero em duas colunas */

/* Um gradiente só, sem nenhuma camada animada por cima. As curvas correndo, a
   faixa de luz e as manchas da atmosfera saíram da marcação; o que resta são
   duas luzes paradas sobre a rampa do azul da logo até o violeta. Fundo parado
   também significa zero trabalho de composição por quadro. */
.pd-hero {
  background:
    radial-gradient(1180px 720px at 84% 6%, rgba(var(--tinta), .4), transparent 64%),
    radial-gradient(920px 640px at 6% 92%, rgba(var(--tinta-4), .24), transparent 62%),
    linear-gradient(152deg, #02182c 0%, #062c58 36%, #0a3c85 63%, #33299b 100%);
  background-color: #02182c;
}

/* O hero da matriz traz uma trama de pontos nos pseudoelementos; aqui ela sai,
   que é o que sobrava de ruído sobre o gradiente. */
.pd-hero::before,
.pd-hero::after { display: none; }

.pd-hero .mz-hero-inner {
  display: grid;
  grid-template-columns: minmax(0, 1.02fr) minmax(0, .86fr);
  gap: 56px;
  align-items: center;
  max-width: 1180px;
  margin-inline: auto;
}

.pd-hero .mz-hero-copy { max-width: none; text-align: left; }
.pd-hero .mz-hero-actions { justify-content: flex-start; }

.pd-hero h1 { font-size: clamp(38px, 4.5vw, 62px); }

/* O paragrafo abaixo do titulo. O hero tinha perdido a linha de apoio; ela
   volta porque e onde a pagina diz, em texto corrido, o que vende — o titulo
   sozinho nao cobre WhatsApp, site, Instagram e integracao. */
.pd-hero-text {
  max-width: 34em;
  margin-top: 22px;
  color: rgba(255, 255, 255, .76);
  font-size: 16px;
  line-height: 1.72;
}

/* O selo de canal abre a coluna de texto, no lugar do antigo kicker. */
.pd-hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 22px;
  padding: 7px 14px 7px 9px;
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 999px;
  background: rgba(255, 255, 255, .06);
  color: rgba(255, 255, 255, .82);
  font: 10px/1 var(--mono);
  letter-spacing: .11em;
  text-transform: uppercase;
}
.pd-hero-badge svg { width: 16px; height: 16px; }
/* O verde e o preenchimento pertencem ao logo do WhatsApp, nao ao selo. Sem
   este recorte, um icone de traco em outra pagina vira um bloco verde. */
.pd-hero-badge.is-whatsapp svg { fill: #25d366; }

/* A coluna direita do hero quando a arte nao e o celular: os mesmos cartoes
   .pd-arte que a linha do tempo ja usa, empilhados. Assim uma pagina de
   produto sem aparelho para mostrar nao precisa inventar componente novo. */
.pd-hero-arte {
  display: grid;
  gap: 14px;
  justify-self: center;
  width: 100%;
  max-width: 420px;
  text-align: left;
}

/* ── hero vitrine: a copy em cima, o painel grande embaixo ──────────────── */

/* Variante do hero para quando o produto se explica melhor sendo mostrado do
   que descrito. A copy deixa de dividir a largura com a arte e o painel entra
   inteiro embaixo, cortado pela borda da seção — o corte é de propósito: ele
   diz que tem mais coisa ali do que cabe na tela, que é exatamente o que um
   relatório é. */
.pd-hero.is-vitrine { padding-bottom: 0; overflow: hidden; }
.pd-hero.is-vitrine .mz-hero-inner { display: block; max-width: 1180px; }
.pd-hero.is-vitrine .mz-hero-copy { max-width: 640px; margin-inline: 0; }

/* ── o painel ───────────────────────────────────────────────────────────── */

/* Uma ilustração de relatório, montada em HTML e não em imagem: o texto fica
   nítido em qualquer tela, o peso é de alguns kB e dá para mexer nos números
   sem abrir editor. Os dados são de exemplo, e a etiqueta no topo diz isso —
   página de produto com número que parece de cliente é problema, não enfeite.

   A escala inteira sai do font-size do bloco: tudo aqui dentro é em em, então
   encolher o painel no celular é mudar uma linha. */
.pd-painel {
  max-width: 1180px;
  margin: 68px auto -78px;
  border-radius: 12px 12px 0 0;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .12), 0 44px 120px rgba(1, 8, 24, .62);
  font-size: 12px;
  line-height: 1.4;
  color: #1b2733;
  text-align: left;
}

.pd-pn-topo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.4em;
  padding: 1em 1.3em;
  border-bottom: 1px solid #e3e9f0;
  background: #f5f7fa;
}
.pd-pn-nome { display: flex; align-items: center; gap: .9em; min-width: 0; }
.pd-pn-nome b {
  font-size: 1em;
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  white-space: nowrap;
}
.pd-pn-tag {
  flex: none;
  padding: .3em .7em;
  border-radius: .35em;
  background: rgba(var(--tinta), .1);
  color: var(--violet);
  font: .72em/1 var(--mono);
  letter-spacing: .1em;
  text-transform: uppercase;
}

.pd-pn-filtros { display: flex; gap: .6em; }
.pd-pn-filtro {
  min-width: 7em;
  padding: .45em .7em;
  border: 1px solid #d9e1ea;
  border-radius: .35em;
  background: #fff;
}
.pd-pn-filtro small {
  display: block;
  margin-bottom: .25em;
  color: #5c6e83;
  font-size: .7em;
  letter-spacing: .09em;
  text-transform: uppercase;
}
.pd-pn-filtro b { font-size: .85em; font-weight: 600; }

.pd-pn-corpo {
  display: grid;
  grid-template-columns: minmax(0, 1.22fr) minmax(0, 1fr);
  gap: .8em;
  padding: .9em;
  background: #edf1f6;
}
.pd-pn-bloco {
  padding: 1em 1.1em 1.1em;
  border-radius: .5em;
  background: #fff;
  box-shadow: 0 1px 2px rgba(2, 24, 44, .07);
}
.pd-pn-bloco > b {
  display: block;
  margin-bottom: 1.1em;
  color: #56697d;
  font-size: .78em;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
}

/* Os três indicadores do topo. A faixa colorida à esquerda é o que o Power BI
   faz num cartão de KPI, e é ela que separa um número do outro sem borda. */
.pd-pn-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .7em; }
.pd-pn-kpi {
  padding: .85em .95em .95em;
  border-left: 3px solid var(--blue);
  border-radius: 0 .4em .4em 0;
  background: #f7f9fc;
}
.pd-pn-kpi:nth-child(2) { border-left-color: var(--violet); }
.pd-pn-kpi:nth-child(3) { border-left-color: var(--magenta); }
.pd-pn-kpi small {
  display: block;
  color: #5c6e83;
  font-size: .72em;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.pd-pn-kpi strong {
  display: block;
  margin: .35em 0 .6em;
  font-size: 1.55em;
  font-weight: 620;
  letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
}
.pd-pn-kpi i { display: block; color: #6b7c8f; font-size: .76em; font-style: normal; }
.pd-pn-kpi i em { color: #12a150; font-style: normal; font-weight: 600; }

.pd-pn-meta { display: flex; align-items: center; gap: .5em; margin-top: .7em; }
.pd-pn-meta span { flex: none; color: #5c6e83; font-size: .7em; letter-spacing: .08em; text-transform: uppercase; }
.pd-pn-meta u {
  flex: 1;
  height: .5em;
  border-radius: .25em;
  background: #dde5ee;
  text-decoration: none;
  overflow: hidden;
}
.pd-pn-meta u::before {
  content: "";
  display: block;
  width: var(--n);
  height: 100%;
  border-radius: .25em;
  background: var(--grad-brand);
}
.pd-pn-meta b { flex: none; font-size: .78em; font-variant-numeric: tabular-nums; }

/* Barras horizontais: rótulo, trilho e valor na ponta. */
.pd-pn-barras { list-style: none; display: grid; gap: .62em; }
.pd-pn-barras li { display: grid; grid-template-columns: 8.5em minmax(0, 1fr) 4.6em; align-items: center; gap: .7em; }
.pd-pn-barras span { color: #56697d; font-size: .8em; }
.pd-pn-barras u {
  height: 1.05em;
  border-radius: .18em;
  background: linear-gradient(90deg, var(--blue), var(--violet));
  text-decoration: none;
  width: var(--n);
}
.pd-pn-barras b { color: #1b2733; font-size: .78em; font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }

/* A série do tempo: barras verticais e uma linha de base. */
.pd-pn-serie { display: flex; align-items: flex-end; gap: .4em; height: 10.2em; padding-bottom: .5em; border-bottom: 1px solid #e3e9f0; }
.pd-pn-serie i {
  flex: 1;
  height: var(--n);
  border-radius: .18em .18em 0 0;
  background: linear-gradient(180deg, var(--violet), rgba(var(--tinta), .38));
}
.pd-pn-serie i:last-child { background: linear-gradient(180deg, var(--magenta), rgba(var(--tinta-5), .4)); }
.pd-pn-meses { display: flex; justify-content: space-between; margin-top: .5em; color: #62748a; font-size: .7em; }

/* A tabela da direita. */
.pd-pn-tabela { width: 100%; border-collapse: collapse; }
.pd-pn-tabela th {
  padding: 0 0 .6em;
  border-bottom: 1px solid #e3e9f0;
  color: #5c6e83;
  font-size: .7em;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  text-align: right;
}
.pd-pn-tabela th:first-child { text-align: left; }
.pd-pn-tabela td {
  padding: .62em 0;
  border-bottom: 1px solid #f0f4f8;
  font-size: .82em;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.pd-pn-tabela td:first-child { text-align: left; color: #56697d; }
.pd-pn-tabela tr:last-child td { border-bottom: 0; }
.pd-pn-tabela .is-ok { color: #12a150; font-weight: 600; }

@media (max-width: 1040px) {
  .pd-painel { font-size: 10.5px; margin-bottom: -100px; }
}
@media (max-width: 780px) {
  .pd-painel { font-size: 9px; margin-top: 48px; margin-bottom: -70px; }
  .pd-pn-topo { flex-wrap: wrap; gap: .9em; }
  .pd-pn-corpo { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 520px) {
  /* Abaixo disto o painel inteiro vira ilegível de qualquer jeito. Melhor
     mostrar só o topo — os indicadores — do que espremer tudo. */
  .pd-painel { font-size: 8px; }
  .pd-pn-filtros { display: none; }
}

/* ─────────────────────────────────────────────────────────────── seções */

.pd-section { padding: 100px 0; background: var(--paper-bright); }
.pd-section.is-alt { background: var(--paper); }


/* ───────────────────────────────────────── como funciona: linha do tempo */

/* Uma linha vertical no meio, com os passos alternando de lado. O trilho é
   cinza; por cima dele um segundo elemento cresce conforme a página rola,
   e cada ponto acende quando o preenchimento chega nele. O crescimento é
   feito com scaleY, e não com height, para não disparar layout a cada
   quadro — o navegador resolve isso na composição. */

.pd-flow { padding: 110px 0 96px; background: var(--paper-bright); }
.pd-flow-head { max-width: 760px; margin: 0 auto 76px; text-align: center; }
.pd-flow-head .section-label { justify-content: center; margin-bottom: 18px; }
.pd-flow-head h2 {
  font-size: clamp(32px, 3.9vw, 52px);
  font-weight: 350;
  line-height: 1.06;
  letter-spacing: -.042em;
}

.pd-linha { position: relative; max-width: 1080px; margin-inline: auto; padding: 8px 0 0; }

/* O trilho e o preenchimento. */
.pd-linha-trilho {
  position: absolute;
  top: 0;
  bottom: 46px;
  left: 50%;
  width: 2px;
  margin-left: -1px;
  background: var(--hairline);
  border-radius: 2px;
}
.pd-linha-trilho i {
  display: block;
  height: 100%;
  border-radius: 2px;
  background: linear-gradient(180deg, #065bff, #6738ff 62%, #9146ff);
  transform: scaleY(0);
  transform-origin: top;
  will-change: transform;
}

/* Cada passo: texto de um lado, ilustração do outro. */
.pd-passo {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 0 96px;
  align-items: center;
  padding-bottom: 78px;
}

/* O ponto que marca o passo em cima da linha. */
.pd-passo::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 2;
  width: 11px;
  height: 11px;
  margin: -5.5px 0 0 -5.5px;
  border: 2px solid var(--hairline);
  border-radius: 50%;
  background: var(--paper-bright);
  transition: border-color .35s ease, background .35s ease, box-shadow .35s ease;
}
.pd-passo.is-on::before {
  border-color: var(--violet);
  background: var(--violet);
  box-shadow: 0 0 0 5px rgba(var(--tinta), .14);
}

/* Ímpares: arte à esquerda, texto à direita. Pares, o contrário. O texto
   sempre encosta na linha, que é o que dá a leitura de trilha.
   É nth-of-type, e não nth-child: o trilho é o primeiro filho de .pd-linha e
   deslocaria a contagem, invertendo todos os lados. */
.pd-passo:nth-of-type(odd) .pd-passo-copy { grid-column: 2; text-align: left; }
.pd-passo:nth-of-type(odd) .pd-passo-arte { grid-column: 1; grid-row: 1; }
.pd-passo:nth-of-type(even) .pd-passo-copy { grid-column: 1; text-align: right; }
.pd-passo:nth-of-type(even) .pd-passo-arte { grid-column: 2; grid-row: 1; }

.pd-passo-copy { position: relative; padding-top: 6px; }
.pd-passo-copy h3 {
  position: relative;
  z-index: 1;
  margin-bottom: 12px;
  font-size: 22px;
  font-weight: 620;
  letter-spacing: -.025em;
}
.pd-passo-copy p { max-width: 34em; color: var(--ink-muted); font-size: 14.5px; line-height: 1.68; }
.pd-passo:nth-of-type(even) .pd-passo-copy p { margin-left: auto; }

/* O número grande e apagado atrás do título. */
.pd-passo-n {
  position: absolute;
  top: -34px;
  z-index: 0;
  color: rgba(var(--tinta), .1);
  font: 700 68px/1 var(--mono);
  letter-spacing: -.04em;
  pointer-events: none;
}
.pd-passo:nth-of-type(odd) .pd-passo-n { left: -26px; }
.pd-passo:nth-of-type(even) .pd-passo-n { right: -26px; }

/* ── as ilustrações ─────────────────────────────────────────────────────── */

.pd-arte {
  padding: 20px 20px 22px;
  border: 1px solid var(--hairline);
  border-radius: 14px;
  background: #fff;
  box-shadow: var(--sombra-card);
  text-align: left;
}

.pd-arte-bolha {
  display: inline-block;
  max-width: 100%;
  padding: 11px 15px;
  border-radius: 13px;
  border-bottom-left-radius: 5px;
  background: var(--paper);
  color: var(--ink);
  font-size: 13.5px;
  line-height: 1.45;
}
.pd-arte-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 16px; }
.pd-arte-chips span {
  padding: 6px 11px;
  border: 1px solid rgba(var(--tinta), .22);
  border-radius: 999px;
  background: rgba(var(--tinta), .06);
  color: var(--violet);
  font: 10px/1 var(--mono);
  letter-spacing: .05em;
}

.pd-arte-topo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: 13px;
  margin-bottom: 14px;
  border-bottom: 1px solid var(--hairline);
  color: var(--ink-muted);
  font: 10px/1 var(--mono);
  letter-spacing: .11em;
  text-transform: uppercase;
}
.pd-arte-topo b { color: #12a150; font-weight: 400; }

.pd-arte-campos { list-style: none; display: grid; gap: 11px; }
.pd-arte-campos li { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; font-size: 13px; }
.pd-arte-campos span { color: var(--ink-muted); }
.pd-arte-campos b { font-weight: 580; }
.pd-arte-campos b.is-ok { color: #12a150; }

.pd-arte-passagem { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.pd-arte-quem { padding: 8px 13px; border-radius: 9px; font-size: 12.5px; font-weight: 560; }
.pd-arte-quem.is-ia { background: rgba(var(--tinta), .1); color: var(--violet); }
.pd-arte-quem.is-gente { background: var(--paper); border: 1px solid var(--hairline); color: var(--ink); }
.pd-arte-seta { color: var(--ink-muted); font-size: 15px; }
.pd-arte-nota { margin-top: 13px; color: var(--ink-muted); font-size: 12.5px; line-height: 1.5; }
.pd-arte-nota.is-ok { color: #12a150; }

.pd-arte-barras { list-style: none; display: grid; gap: 13px; }
.pd-arte-barras li { display: grid; gap: 7px; font-size: 12.5px; color: var(--ink-muted); }
.pd-arte-barras i {
  display: block;
  height: 5px;
  border-radius: 3px;
  background: var(--hairline);
  position: relative;
  overflow: hidden;
}
.pd-arte-barras i::after {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: calc(var(--n) * 100%);
  border-radius: 3px;
  background: var(--grad-brand);
}

/* ── o botão que fecha a linha ──────────────────────────────────────────── */

/* ── a linha do tempo sem arte ──────────────────────────────────────────── */

/* Quando a pagina ja mostrou o mecanismo em outro lugar, desenhar um cartao ao
   lado de cada passo e contar a mesma coisa duas vezes — e enche a tela de
   bloco branco logo antes da secao de casos, que tambem e uma grade. Sem os
   cartoes os passos alternam como texto puro dos dois lados do trilho.

   O respiro entre passos foi medido para caber um cartao ao lado. Sem ele
   sobra buraco: a coluna vazia da frente ja e espaco de sobra. E o ponto do
   trilho deixa de ficar no meio da altura da linha, que so fazia sentido
   quando havia um cartao alto do outro lado — passa a marcar o titulo. */
.pd-linha.is-texto .pd-passo {
  align-items: start;
  gap: 0 72px;
  padding-bottom: 46px;
}
.pd-linha.is-texto .pd-passo::before { top: 16px; }
.pd-linha.is-texto .pd-passo-copy { padding-top: 0; }
.pd-linha.is-texto .pd-passo-copy p { max-width: 30em; }
.pd-linha.is-texto .pd-passo:nth-of-type(even) .pd-passo-copy p { margin-left: auto; }

@media (max-width: 720px) {
  .pd-linha.is-texto .pd-passo { padding-bottom: 38px; }
  .pd-linha.is-texto .pd-passo::before { top: 8px; }
  .pd-linha.is-texto .pd-passo-copy p { max-width: none; }
}

.pd-linha-fim {
  position: relative;
  display: flex;
  justify-content: center;
  padding-top: 4px;
}
.pd-linha-fim .button {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity .45s ease, transform .45s cubic-bezier(.2, .7, .3, 1);
}
.pd-linha-fim.is-on .button { opacity: 1; transform: translateY(0); }

/* Sem animação por preferência do sistema, a linha já nasce cheia e tudo
   aparece — o conteúdo nunca depende do movimento para existir. */
@media (prefers-reduced-motion: reduce) {
  .pd-linha-trilho i { transform: scaleY(1); }
  .pd-passo::before { border-color: var(--violet); background: var(--violet); }
  .pd-linha-fim .button { opacity: 1; transform: none; }
}
/* ─────────────────────────────────────────────────────────────  recursos */

/* Sem cartão e sem moldura: os itens respiram no espaço da seção, separados
   só pelo intervalo entre eles. O selo redondo de check abre cada um. */
.pd-feats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 56px 48px;
  max-width: 1120px;
  margin-inline: auto;
}
.pd-feat { max-width: 24em; }
.pd-feat-ic {
  display: grid;
  place-items: center;
  width: 54px;
  height: 54px;
  margin-bottom: 22px;
  border-radius: 50%;
  background: rgba(var(--tinta), .11);
  color: var(--violet);
  transition: background .25s ease, transform .25s ease;
}
.pd-feat-ic svg { width: 22px; height: 22px; }
.pd-feat:hover .pd-feat-ic { background: rgba(var(--tinta), .18); transform: translateY(-2px); }
.pd-feat b { display: block; margin-bottom: 11px; color: var(--ink); font-size: 18px; font-weight: 660; letter-spacing: -.022em; }
.pd-feat p { color: var(--ink-muted); font-size: 14.5px; line-height: 1.68; }

/* ────────────────────────────────── grade de motivos sobre fundo escuro ── */

/* Uma variante da secao de recursos: os mesmos seis itens, mas em cartao claro
   sobre fundo escuro. Serve quando a pagina precisa de um respiro visual no
   meio — tres blocos claros seguidos cansam — e quando os itens sao motivos
   para escolher, e nao capacidades soltas: o cartao fechado agrupa titulo,
   icone e texto numa unidade que se compara com a de baixo.

   Vive aqui, e nao numa folha propria, porque qualquer pagina de produto pode
   trocar .pd-feats por .pd-cartoes com uma classe. */
.pd-section.is-escuro {
  background:
    radial-gradient(900px 520px at 14% 12%, rgba(var(--tinta), .3), transparent 62%),
    radial-gradient(780px 500px at 88% 88%, rgba(var(--tinta-4), .2), transparent 60%),
    linear-gradient(162deg, #04101c 0%, #02182c 52%, #072544 100%);
  background-color: #02182c;
}

/* O titulo e o rotulo da secao invertem, como ja fazem no contato e na
   calculadora. O <em> troca o gradiente da marca pelo mais claro: o original
   tem azul escuro na ponta esquerda e some no fundo. */
.pd-section.is-escuro .pd-flow-head h2 { color: #fff; }
.pd-section.is-escuro .pd-flow-head h2 em {
  background: var(--grad-glow);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
}
.pd-section.is-escuro .section-label { color: var(--magenta-bright); }

/* A linha de apoio abaixo do titulo. So existe nesta variante — nas outras o
   titulo fala sozinho. */
.pd-flow-head-apoio {
  max-width: 46em;
  margin: 18px auto 0;
  font-size: 15px;
  line-height: 1.7;
}
.pd-section.is-escuro .pd-flow-head-apoio { color: rgba(255, 255, 255, .66); }

.pd-cartoes {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 22px;
  max-width: 1080px;
  margin-inline: auto;
}

.pd-cartao {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 40px 30px 34px;
  border-radius: 16px;
  background: #f1f4f8;
  text-align: center;
  transition: transform .25s ease, box-shadow .25s ease;
}
.pd-cartao:hover {
  transform: translateY(-3px);
  box-shadow: 0 22px 48px rgba(1, 8, 24, .38);
}

/* O icone e de traco e herda a cor do texto do cartao, para nao virar mais um
   tom a manter. */
.pd-cartao-ic {
  display: grid;
  place-items: center;
  width: 54px;
  height: 54px;
  margin-bottom: 24px;
  color: var(--ink);
}
.pd-cartao-ic svg { width: 100%; height: 100%; stroke-width: 1.55; }

.pd-cartao b {
  margin-bottom: 14px;
  color: var(--violet);
  font-size: 17px;
  font-weight: 660;
  line-height: 1.25;
  letter-spacing: -.018em;
}
.pd-cartao p { color: var(--ink-muted); font-size: 14px; line-height: 1.68; }

@media (max-width: 1040px) {
  .pd-cartoes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .pd-cartoes { grid-template-columns: 1fr; gap: 16px; }
  .pd-cartao { padding: 32px 24px 28px; }
}

/* ─────────────────────────────────────────────────────── grade de casos */

/* Ocupa o mesmo lugar que .pd-feats ocupa na pagina de chatbot: a secao de
   prova, depois da linha do tempo. A diferenca e o que cada item precisa
   carregar. Um recurso e um titulo e um paragrafo, e o selo de check diz
   "incluso". Um caso tem quando acontece e o que faz — e e a comparacao entre
   os quatro que informa, nao cada um isolado. Por isso o rotulo de gatilho no
   lugar do selo, e a linha de fecho separada por um filete.

   Duas colunas, e nao tres: o texto de um caso e mais longo que o de um
   recurso, e em tres colunas cada coluna vira uma tira estreita. */
.pd-casos {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 52px 60px;
  max-width: 1000px;
  margin-inline: auto;
}
.pd-caso { max-width: 30em; }

.pd-caso-quando {
  display: inline-block;
  margin-bottom: 18px;
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(var(--tinta), .1);
  color: var(--violet);
  font: 10px/1 var(--mono);
  letter-spacing: .11em;
  text-transform: uppercase;
}
.pd-caso h3 {
  margin-bottom: 11px;
  color: var(--ink);
  font-size: 20px;
  font-weight: 660;
  letter-spacing: -.024em;
}
.pd-caso p { color: var(--ink-muted); font-size: 14.5px; line-height: 1.68; }

.pd-caso-faz {
  margin-top: 16px;
  padding-top: 15px;
  border-top: 1px solid var(--hairline);
}
.pd-caso-faz b { color: var(--ink); font-weight: 600; }

/* O caso que nao usa IA. O tom mais baixo no rotulo e o que o separa dos
   outros tres sem precisar de cor nova nem de borda. */
.pd-caso.is-sem-ia .pd-caso-quando { background: rgba(2, 24, 44, .06); color: var(--ink-soft); }

/* ─────────────────────────────────────────────────── chamada de fechamento */

/* ── o celular ──────────────────────────────────────────────────────────── */

/* O celular vive no hero, sobre o gradiente escuro: a sombra e o brilho da
   borda sao mais fortes do que seriam sobre fundo claro, senao ele afunda. */
.pd-fone {
  justify-self: center;
  /* O hero centraliza o texto; dentro da conversa isso nao vale. */
  text-align: left;
  width: 100%;
  max-width: 330px;
  padding: 11px;
  border-radius: 42px;
  background: linear-gradient(160deg, #2a3644, #0b141c);
  box-shadow:
    0 40px 100px rgba(1, 8, 24, .55),
    0 0 0 1px rgba(255, 255, 255, .1),
    0 2px 0 rgba(255, 255, 255, .2) inset;
}
/* Altura fixa de proposito: e ela que faz o teclado empurrar a conversa para
   cima quando abre, em vez de esticar o celular. */
.pd-fone-tela {
  display: flex;
  flex-direction: column;
  height: 552px;
  overflow: hidden;
  border-radius: 32px;
  background: #f2f4f6;
}

.pd-fone-status {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 20px 8px;
  background: #fff;
  color: #0b141c;
  font-size: 11px;
  font-weight: 660;
}
.pd-fone-icones { display: inline-flex; align-items: center; gap: 5px; }
.pd-fone-icones svg { width: 13px; height: 13px; }

.pd-fone-topo {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 6px 16px 12px;
  border-bottom: 1px solid rgba(2, 24, 44, .08);
  background: #fff;
}
.pd-fone-voltar { color: var(--ink-muted); font-size: 20px; line-height: 1; }
.pd-fone-foto {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  flex: none;
  border-radius: 50%;
  background: var(--grad-brand);
}
.pd-fone-foto img { width: 16px; height: 16px; object-fit: contain; filter: brightness(0) invert(1); }
.pd-fone-nome { display: grid; gap: 2px; line-height: 1; }
.pd-fone-nome b { font-size: 13px; font-weight: 620; }
.pd-fone-nome small { color: var(--ink-muted); font-size: 10px; }

/* justify-content: flex-end faz as mensagens novas empurrarem as antigas para
   cima sozinhas — sem nenhum calculo de rolagem no script. */
.pd-fone-log {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 8px;
  flex: 1;
  min-height: 0;
  overflow: hidden;
  padding: 14px 12px 16px;
  background: #eceff2;
}
.pd-fone-dia {
  align-self: center;
  margin-bottom: 2px;
  padding: 4px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .9);
  color: var(--ink-muted);
  font-size: 10px;
}

.pd-bal {
  position: relative;
  max-width: 82%;
  padding: 7px 10px 6px;
  border-radius: 10px;
  background: #fff;
  box-shadow: 0 1px 1px rgba(2, 24, 44, .08);
  font-size: 12.5px;
  line-height: 1.42;
}
.pd-bal p { color: #0b141c; }
.pd-bal-hora {
  display: block;
  margin-top: 3px;
  color: rgba(11, 20, 28, .42);
  font-size: 9.5px;
  text-align: right;
}
.pd-bal-hora b { color: #3aa3f0; font-weight: 400; letter-spacing: -2px; }

.pd-bal.is-bot { align-self: flex-start; border-top-left-radius: 3px; }
/* O verde do WhatsApp, porque a tela e do WhatsApp: quem manda e o cliente. */
.pd-bal.is-cliente { align-self: flex-end; border-top-right-radius: 3px; background: #d9fdd3; }

.pd-bal.is-aviso {
  align-self: center;
  max-width: 92%;
  background: #fff5d6;
  color: #6b5a1e;
  font-size: 10.5px;
  text-align: center;
  line-height: 1.4;
}

/* A etiqueta que separa a transcricao da resposta: sem ela o balao parece o
   chatbot falando pelo cliente. */
.pd-bal-tag {
  display: inline-block;
  margin-bottom: 5px;
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(var(--tinta), .1);
  color: var(--violet);
  font: 8.5px/1 var(--mono);
  letter-spacing: .09em;
  text-transform: uppercase;
}
.pd-bal.is-bot p em { font-style: italic; }

/* ── o audio ────────────────────────────────────────────────────────────── */

/* min-width porque o balao encolhe para caber no conteudo: sem uma largura
   minima o audio fica com a cara de uma mensagem de duas palavras. */
.pd-audio { display: flex; align-items: center; gap: 8px; min-width: 172px; padding: 2px 0 1px; }
.pd-audio-play { display: grid; place-items: center; width: 22px; height: 22px; flex: none; border-radius: 50%; background: rgba(11, 20, 28, .1); }
.pd-audio-play svg { width: 12px; height: 12px; color: #0b141c; margin-left: 1px; }
.pd-audio-onda { display: flex; align-items: center; justify-content: space-between; gap: 2px; flex: 1; height: 20px; }
/* Largura fixa, e nao flex: 1. Dentro de um balao que encolhe para caber no
   conteudo, uma barra flexivel sem base resolve para zero e a onda some. */
.pd-audio-onda i {
  width: 2px;
  flex: none;
  border-radius: 1px;
  background: rgba(11, 20, 28, .22);
}
/* Alturas irregulares: uma onda de tamanho uniforme nao parece voz. */
.pd-audio-onda i:nth-child(3n)   { height: 62%; }
.pd-audio-onda i:nth-child(3n+1) { height: 34%; }
.pd-audio-onda i:nth-child(3n+2) { height: 90%; }
.pd-audio-onda i:nth-child(5n)   { height: 46%; }
.pd-audio-onda i:nth-child(7n)   { height: 76%; }
/* O trecho ja ouvido fica escuro, como no aplicativo. */
.pd-audio-onda i:nth-child(-n+9) { background: rgba(11, 20, 28, .55); }
.pd-audio-tempo { flex: none; color: rgba(11, 20, 28, .45); font-size: 9.5px; }

/* ── a encenacao: teclado, digitacao e envio ────────────────────────────── */

/* As mensagens comecam escondidas e entram uma a uma, no ritmo do roteiro que
   vive no site.js. Sem o script — ou com movimento reduzido — a classe .is-vis
   e aplicada em todas de uma vez e a conversa aparece inteira. */
.pd-fone[data-encena] .pd-bal[data-msg] { display: none; }
.pd-fone[data-encena] .pd-bal[data-msg].is-vis {
  display: block;
  animation: pd-msg-entra .3s cubic-bezier(.2, .7, .3, 1);
}
@keyframes pd-msg-entra {
  from { opacity: 0; transform: translateY(8px) scale(.98); }
}

/* O campo de texto: cursor piscando e o texto sendo escrito dentro dele. */
.pd-fone-campo {
  display: flex;
  align-items: center;
  gap: 1px;
  min-width: 0;
  padding: 0 12px;
  overflow: hidden;
  transition: box-shadow .25s ease;
}
.pd-fone-campo.is-ativo { box-shadow: 0 0 0 1.5px rgba(var(--tinta), .35); }
.pd-fone-texto {
  color: #0b141c;
  font-size: 12px;
  white-space: nowrap;
}
.pd-fone-cursor {
  width: 1.5px;
  height: 14px;
  flex: none;
  background: var(--violet);
  opacity: 0;
}
.pd-fone-campo.is-ativo .pd-fone-cursor { animation: pd-cursor 1.05s steps(1) infinite; }
@keyframes pd-cursor { 0%, 50% { opacity: 1; } 50.01%, 100% { opacity: 0; } }

/* O estado de gravacao, que antecede o audio. */
.pd-fone-grava {
  display: none;
  align-items: center;
  gap: 7px;
  flex: 1;
  padding: 0 12px;
  color: var(--ink-muted);
  font-size: 11px;
}
.pd-fone-grava i {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #e5484d;
  animation: pd-grava 1.1s ease-in-out infinite;
}
@keyframes pd-grava { 50% { opacity: .25; } }
.pd-fone-barra.is-gravando .pd-fone-campo { display: none; }
.pd-fone-barra.is-gravando .pd-fone-grava { display: flex; }

/* O microfone vira seta de enviar assim que ha texto no campo. */
.pd-fone-acao { display: grid; place-items: center; width: 26px; height: 26px; flex: none; border-radius: 50%; }
.pd-fone-acao svg { grid-area: 1 / 1; width: 16px; height: 16px; color: var(--ink-muted); }
.pd-ic-envia { opacity: 0; }
.pd-fone-barra.is-enviando .pd-fone-acao { background: var(--grad-brand); }
.pd-fone-barra.is-enviando .pd-ic-mic { opacity: 0; }
.pd-fone-barra.is-enviando .pd-ic-envia { opacity: 1; color: #fff; width: 14px; height: 14px; }

/* O teclado sobe e desce mudando a altura, e nao com transform: e a altura que
   devolve espaco para a conversa, que e o comportamento real do aparelho. */
.pd-fone-teclado {
  display: grid;
  gap: 5px;
  height: 0;
  padding: 0 4px;
  overflow: hidden;
  background: #d6dae0;
  transition: height .3s cubic-bezier(.3, .8, .3, 1), padding .3s ease;
}
.pd-fone-teclado.is-aberto { height: 152px; padding: 8px 4px 12px; }

.pd-tecla-linha { display: flex; gap: 4px; justify-content: center; }
.pd-tecla-linha.is-2 { padding: 0 14px; }
.pd-tecla-linha.is-3 { padding: 0 2px; }
.pd-tecla-linha b {
  display: grid;
  place-items: center;
  flex: 1;
  height: 30px;
  border-radius: 5px;
  background: #fff;
  box-shadow: 0 1px 0 rgba(2, 24, 44, .22);
  color: #0b141c;
  font-size: 12px;
  font-weight: 400;
  transition: background .1s ease;
}
.pd-tecla-linha b.is-larga { flex: 1.5; background: #adb4bd; font-size: 11px; }
.pd-tecla-linha b.is-espaco { flex: 5; }
/* A tecla acesa acompanha a letra que esta sendo escrita. */
.pd-tecla-linha b.is-tocada { background: #adb4bd; }

@media (prefers-reduced-motion: reduce) {
  .pd-fone[data-encena] .pd-bal[data-msg] { display: block; }
  .pd-fone-teclado, .pd-fone-cursor, .pd-fone-grava i { animation: none; transition: none; }
}

.pd-fone-barra {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 9px 14px 14px;
  background: #fff;
}
.pd-fone-campo { flex: 1; height: 26px; border-radius: 999px; background: #eceff2; }


.pd-final { padding: 96px 0; background: var(--paper-bright); }
.pd-final-card {
  position: relative;
  overflow: hidden;
  padding: 64px 56px;
  border-radius: 22px;
  background:
    radial-gradient(700px 420px at 82% 10%, rgba(var(--tinta-2), .34), transparent 64%),
    linear-gradient(122deg, #065bff, #6738ff 56%, #9146ff);
  color: #fff;
  box-shadow: 0 30px 80px rgba(var(--tinta-3), .26);
  text-align: center;
}
.pd-final-card h2 { max-width: 17em; margin: 0 auto 18px; font-size: clamp(30px, 3.6vw, 46px); font-weight: 400; line-height: 1.08; letter-spacing: -.035em; color: #fff; }
.pd-final-card h2 em { color: #fff; -webkit-text-fill-color: #fff; background: none; font-style: italic; }
.pd-final-card p { max-width: 46em; margin: 0 auto 32px; color: rgba(255, 255, 255, .84); font-size: 15px; line-height: 1.65; }
.pd-final-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 14px; }
.pd-final-card .button-primary { background: #fff; color: #02182c; box-shadow: 0 12px 30px rgba(1, 12, 30, .22); }
.pd-final-card .button-primary:hover { background: #fff; }
/* A seta é branca por padrão; sobre o botão branco ela precisa escurecer. */
.pd-final-card .button-primary span { color: var(--violet); }
.pd-final-card .mz-btn-ghost { border-color: rgba(255, 255, 255, .5); color: #fff; background: transparent; }
.pd-final-card .mz-btn-ghost:hover { border-color: #fff; background: rgba(255, 255, 255, .12); }

/* ── fechamento com formulario na propria pagina ─────────────────────────
   Antes, todo CTA de pagina de produto levava para ../?produto=X#fale: quem
   chegou por busca no termo certo, leu a pagina certa e se convenceu era
   mandado embora dessa pagina para preencher formulario em outro lugar. Cada
   carregamento a mais perde gente, e sao justamente estas as paginas que
   recebem busca e anuncio.

   O cartao vira duas colunas — a chamada de um lado, o formulario do outro,
   no mesmo desenho do hero da home. Empilha abaixo de 900px. */
.pd-final-card.is-form {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: 56px;
  align-items: center;
  padding: 52px 52px;
  text-align: left;
}
.pd-final-card.is-form h2 { max-width: 14em; margin: 0 0 16px; }
.pd-final-card.is-form p { max-width: 34em; margin: 0 0 26px; }
.pd-final-copy { min-width: 0; }

/* O cartao ja e escuro; o formulario dentro dele nao precisa de fundo
   proprio, so da moldura que separa campo de chamada. */
.pd-fale-form {
  min-width: 0;
  padding: 26px 24px 24px;
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 16px;
  background: rgba(0, 0, 0, .18);
}
.pd-fale-form .mz-fale-enviar { margin-top: 6px; }
.pd-fale-nota { margin-top: 14px; color: rgba(255, 255, 255, .5); font-size: 12px; line-height: 1.5; }
.pd-fale-form .form-ok { display: block; margin-top: 10px; font-size: 13px; }

@media (max-width: 900px) {
  .pd-final-card.is-form {
    grid-template-columns: minmax(0, 1fr);
    gap: 34px;
    padding: 44px 30px;
  }
  .pd-final-card.is-form h2,
  .pd-final-card.is-form p { max-width: none; }
}

/* ─────────────────────────────────────────── migalhas de navegação (topo) */

.pd-crumbs { display: flex; align-items: center; gap: 9px; margin-bottom: 20px; font: 10px/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; }
.pd-crumbs a { color: rgba(255, 255, 255, .5); }
.pd-crumbs a:hover { color: #fff; }
.pd-crumbs span { color: rgba(255, 255, 255, .28); }
.pd-crumbs b { color: var(--violet-soft); font-weight: 400; }


/* ─────────────────────────────────────────── o que fica mais fácil ────── */

/* Uma lista do que o cliente passa a conseguir fazer. Fica entre a linha do
   tempo e a grade de motivos, e por isso nao pode ter peso de cartao: sao
   itens soltos, so icone e uma linha de texto, centralizados.

   Flex com quebra, e nao grid: com oito itens numa grade de tres a ultima
   linha fica com dois encostados a esquerda. No flex centralizado eles ficam
   no meio, que e o que a referencia faz e o que parece resolvido. */
.pd-solucoes {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 46px 40px;
  max-width: 920px;
  margin-inline: auto;
}
.pd-soluc {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 240px;
  text-align: center;
}
.pd-soluc-ic {
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  margin-bottom: 18px;
  border-radius: 50%;
  background: rgba(2, 24, 44, .05);
  color: var(--ink-soft);
}
.pd-soluc-ic svg { width: 21px; height: 21px; }
.pd-soluc p { color: var(--ink-muted); font-size: 14.5px; line-height: 1.6; }

/* O botao fecha a secao, como na referencia: a lista mostra o que da para
   fazer e o botao pergunta se a pessoa quer. */
.pd-solucoes-fim { display: flex; justify-content: center; margin-top: 60px; }

/* Sobre fundo escuro. A pagina precisa de um respiro no meio — sem ele sao
   tres blocos claros seguidos ate o rodape —, e o circulo do icone inverte:
   de sombra sobre claro para luz sobre escuro. */
.pd-section.is-escuro .pd-soluc-ic { background: rgba(255, 255, 255, .07); color: #cfe0ef; }
.pd-section.is-escuro .pd-soluc p { color: rgba(255, 255, 255, .72); }

@media (max-width: 720px) {
  .pd-solucoes { gap: 34px 28px; }
  .pd-soluc { width: 100%; max-width: 300px; }
  .pd-solucoes-fim { margin-top: 44px; }
}

/* ──────────────────────────────────────────────────────────── responsivo */

@media (max-width: 1040px) {
  .pd-hero .mz-hero-inner { grid-template-columns: 1fr; gap: 44px; }
  .pd-feats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pd-passo { gap: 0 56px; }
  .pd-passo-copy h3 { font-size: 20px; }
}

@media (max-width: 720px) {
  .pd-section, .pd-final { padding: 72px 0; }
  .pd-feats, .pd-casos { grid-template-columns: 1fr; }
  .pd-final-card { padding: 44px 26px; }

  /* Sem espaço para duas colunas, a linha encosta na esquerda e todo o
     conteúdo passa a correr ao lado dela, sempre no mesmo sentido. */
  .pd-flow { padding: 72px 0 64px; }
  .pd-flow-head { margin-bottom: 48px; }
  .pd-linha { padding-left: 30px; }
  .pd-linha-trilho { left: 0; margin-left: 0; }
  .pd-passo { grid-template-columns: 1fr; gap: 20px; padding-bottom: 52px; }
  .pd-passo::before { top: 8px; left: -30px; margin-left: -4.5px; }
  .pd-passo:nth-of-type(odd) .pd-passo-copy,
  .pd-passo:nth-of-type(even) .pd-passo-copy { grid-column: 1; text-align: left; }
  .pd-passo:nth-of-type(odd) .pd-passo-arte,
  .pd-passo:nth-of-type(even) .pd-passo-arte { grid-column: 1; grid-row: 2; }
  .pd-passo:nth-of-type(even) .pd-passo-copy p { margin-left: 0; }
  .pd-passo-n { top: -22px; font-size: 52px; }
  .pd-passo:nth-of-type(odd) .pd-passo-n,
  .pd-passo:nth-of-type(even) .pd-passo-n { left: -6px; right: auto; }
  .pd-linha-fim { justify-content: flex-start; margin-left: -30px; }
}

/* Piso de legibilidade no celular — a regra geral vive no identidade.css, mas
   esta folha carrega depois dele e ganharia a disputa nos componentes .pd-*.
   Por isso a parte que e desta folha fica aqui, e nao la.

   A maquete do painel (.pd-painel) e a do celular (.pd-fone) ficam de fora de
   proposito: ali o texto e proporcao de uma ilustracao, e subir a fonte
   estouraria o desenho. */
@media (max-width: 620px) {
  .pd-hero-badge,
  .pd-arte-topo span,
  .pd-arte-topo b,
  .pd-arte-chips span,
  .pd-caso-quando,
  .pd-crumbs,
  .pd-crumbs a,
  .pd-crumbs b,
  .pd-fale-form label,
  .pd-fale-nota { font-size: 11px; }

}

/* ══════════════════════════════════════════════════════════════════════════
   RELACIONADOS — a ligação entre as páginas de produto

   Antes, todo link dentro do conteúdo de uma página de produto apontava para
   a home. As seis eram folhas soltas: nada dizia ao Google que chatbot,
   agentes e automação pertencem ao mesmo assunto, e a autoridade não
   circulava entre elas. Para quem lê, o efeito era o mesmo — quem está vendo
   Power BI e precisa de integração antes não recebia esse caminho.

   Cada cartão traz o motivo da ligação, e não só o nome do produto. É o
   motivo que faz a âncora valer alguma coisa, para o leitor e para a busca.
   ══════════════════════════════════════════════════════════════════════════ */
.pd-relac { padding: 82px 0 96px; background: var(--paper-bright); }

.pd-relac-head { margin-bottom: 26px; }
.pd-relac-head h2 {
  max-width: 20em;
  font-size: clamp(22px, 2.4vw, 29px);
  font-weight: 660;
  line-height: 1.22;
  letter-spacing: -.022em;
  color: var(--ink);
}

.pd-relac-lista {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  list-style: none;
  margin: 0;
  padding: 0;
}

/* A grade se ajusta à contagem, em vez de fixar duas colunas e deixar o
   ímpar sozinho com um vazio do lado. Três cartões viram três colunas;
   quatro voltam a duas, em duas linhas cheias. Duas continuam no padrão.

   O número de relacionados vem do grafo de pares, não do layout — hoje é 2,
   3 ou 4 por página — então quem tem de se adaptar é a grade. */
/* Dentro de media query de propósito: :has() carrega a especificidade do
   argumento mais específico — aqui 0,3,1 — e venceria o empilhamento do
   celular, que é só .pd-relac-lista. Três colunas em 390px é o oposto do que
   a regra existe para fazer. */
@media (min-width: 761px) {
  .pd-relac-lista:has(li:nth-child(3):last-child) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* O <li> e o cartao; o link e so o nome do produto. Envolvendo o cartao
   inteiro num <a>, a ancora virava a soma de rotulo, titulo, motivo e "Ver a
   pagina" — quarenta palavras onde o sinal deveria ser o nome do produto. Com
   o ::after esticado, o alvo de clique continua sendo o cartao todo. */
.pd-relac-lista li {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 24px 24px 22px;
  border: 1px solid var(--hairline);
  border-radius: 12px;
  background: var(--paper-bright);
  transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}
.pd-relac-lista li:hover,
.pd-relac-lista li:has(a:focus-visible) {
  border-color: var(--ink);
  transform: translateY(-2px);
  box-shadow: 0 10px 30px rgba(19, 19, 19, .07);
}

.pd-relac-lista b a { color: inherit; text-decoration: none; }
/* z-index porque o ::after pertence ao <b>, que vem antes do <p> e do <i> na
   ordem do documento: sem ele, o texto pinta por cima e o canto do cartao
   deixa de ser clicavel. */
.pd-relac-lista b a::after { content: ''; position: absolute; inset: 0; z-index: 1; border-radius: 12px; }
/* O foco precisa aparecer no cartao, e nao so nas letras do titulo. */
.pd-relac-lista b a:focus-visible { outline: none; }
.pd-relac-lista b a:focus-visible::after { outline: 2px solid var(--ink); outline-offset: 3px; }

.pd-relac-lista small {
  font: 600 10px/1 var(--mono);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.pd-relac-lista b {
  font-size: 17px;
  font-weight: 660;
  letter-spacing: -.016em;
  color: var(--ink);
}
.pd-relac-lista p {
  margin: 0;
  color: var(--ink-muted);
  font-size: 14px;
  line-height: 1.6;
}
.pd-relac-lista i {
  margin-top: auto;
  padding-top: 12px;
  font-style: normal;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
}

@media (max-width: 760px) {
  .pd-relac { padding-bottom: 68px; }
  .pd-relac-lista { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 620px) {
  .pd-relac-lista small { font-size: 11px; }
}

/* O bloco de relacionados e o cartao de fechamento sao os dois brancos: sem
   este corte, sobravam 192px de vazio entre um e outro. */
.pd-relac + .pd-final { padding-top: 0; }
