/*
 * Trilha de progresso em estilo de percurso sinuoso (Duolingo/Candy Crush):
 * histórico em ordem cronológica de baixo para cima, conector contínuo entre os nós,
 * e cartões elevados com quem realizou cada atividade e quando.
 */

.dua-trail-wrap {
  position: relative;
  padding: 1.5rem 0 1rem;
  border-radius: 28px;
  background:
    radial-gradient(circle at 12% 8%, rgb(7 140 244 / 7%) 0 22%, transparent 22.5%),
    radial-gradient(circle at 88% 30%, rgb(32 201 87 / 7%) 0 16%, transparent 16.5%),
    radial-gradient(circle at 15% 78%, rgb(255 194 10 / 10%) 0 14%, transparent 14.5%);
}

/* ---------- Marcador de início ---------- */

.dua-trail__start {
  position: relative;
  display: flex;
  width: fit-content;
  margin: 1.4rem auto 0;
  align-items: center;
  gap: .5rem;
  padding: .5rem 1.1rem;
  border: 1px solid var(--dua-color-line);
  border-radius: 999px;
  background: #fff;
  box-shadow: var(--dua-shadow-sm);
  color: var(--dua-color-muted);
  font-size: .78rem;
  font-weight: 850;
  letter-spacing: .03em;
  text-transform: uppercase;
}

.dua-trail__start::before {
  position: absolute;
  bottom: 100%;
  left: 50%;
  width: 3px;
  height: 1.4rem;
  background: var(--dua-color-success);
  content: "";
  transform: translateX(-50%);
}

.dua-trail-wrap--start-progress .dua-trail__start::before {
  background: var(--dua-color-primary);
}

.dua-trail-wrap--start-upcoming .dua-trail__start::before {
  background: repeating-linear-gradient(
    to bottom,
    var(--dua-color-line) 0 6px,
    transparent 6px 11px
  );
}

.dua-trail__start-flag {
  display: grid;
  width: 22px;
  height: 22px;
  place-items: center;
  border-radius: 50%;
  background: var(--dua-color-accent-soft);
  color: var(--dua-color-accent-dark);
}

.dua-trail__start-flag .dua-icon {
  width: 13px;
  height: 13px;
}

/* ---------- Lista / itens ---------- */

.dua-trail {
  position: relative;
  display: flex;
  width: 100%;
  flex-direction: column-reverse;
  margin: 0;
  padding: 1rem 0 0;
  list-style: none;
}

.dua-trail__item {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .7rem;
  min-height: 210px;
  padding-block: 26px .6rem;
}

/* Conector: duas curvas em quarto de elipse (sempre geometricamente exatas,
   nunca distorcidas) ligadas por um trecho reto que se ajusta a qualquer
   altura de conteúdo - garante o mesmo traçado simétrico em todo item. */
.dua-trail__connector {
  position: absolute;
  z-index: 0;
  inset: 0;
  --dua-trail-line: var(--dua-color-line);
}

.dua-trail__item.is-completed .dua-trail__connector { --dua-trail-line: var(--dua-color-success); }
.dua-trail__item.is-progress .dua-trail__connector { --dua-trail-line: var(--dua-color-primary); }

.dua-trail__curve-top,
.dua-trail__curve-bottom {
  position: absolute;
  /* Soma metade do traço para que bordas opostas compartilhem o mesmo
     eixo central, sem o degrau de 3 px entre um item e o seguinte. */
  width: calc(20% + 1.5px);
  height: 54px;
  border: 0 solid var(--dua-trail-line);
}

.dua-trail__item.is-upcoming .dua-trail__curve-top,
.dua-trail__item.is-upcoming .dua-trail__curve-bottom,
.dua-trail__item.is-upcoming .dua-trail__curve-mid {
  border-style: dashed;
}

.dua-trail__curve-top { top: 0; }
.dua-trail__curve-bottom { bottom: 0; }

/* O item visualmente mais alto encerra o caminho sem uma ponta solta. */
.dua-trail__item:last-child .dua-trail__curve-top {
  display: none;
}

.dua-trail__curve-mid {
  position: absolute;
  top: 54px;
  bottom: 54px;
  width: 3px;
  background: var(--dua-trail-line);
}

.dua-trail__item.is-upcoming .dua-trail__curve-mid {
  width: 0;
  border-right: 3px dashed var(--dua-trail-line);
  background: none;
}

/* O nó fica em left:30%/70% (ver .dua-trail__node) - as curvas cobrem
   exatamente a mesma distância horizontal, do centro (50%) até o nó. */
.dua-trail__item--left .dua-trail__curve-top {
  left: 30%;
  border-width: 0 3px 3px 0;
  border-bottom-right-radius: 100%;
}

.dua-trail__item--left .dua-trail__curve-bottom {
  left: 30%;
  border-width: 3px 3px 0 0;
  border-top-right-radius: 100%;
}

.dua-trail__item--left .dua-trail__curve-mid { left: 30%; }

.dua-trail__item--right .dua-trail__curve-top {
  right: 30%;
  border-width: 0 0 3px 3px;
  border-bottom-left-radius: 100%;
}

.dua-trail__item--right .dua-trail__curve-bottom {
  right: 30%;
  border-width: 3px 0 0 3px;
  border-top-left-radius: 100%;
}

.dua-trail__item--right .dua-trail__curve-mid { right: 30%; }

/* ---------- Nó ---------- */

.dua-trail__row {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 78px;
}

.dua-trail__item.is-progress .dua-trail__row { height: 90px; }

.dua-trail__node {
  position: absolute;
  top: 0;
  display: grid;
  width: 78px;
  height: 78px;
  place-items: center;
  border: 4px solid #fff;
  border-radius: 50%;
  background: var(--dua-tone, var(--dua-color-primary-soft));
  box-shadow:
    0 14px 26px rgb(6 36 84 / 20%),
    0 0 0 4px rgb(255 255 255 / 55%);
  text-decoration: none;
  transition: transform .18s ease, box-shadow .18s ease;
}

.dua-trail__item--left .dua-trail__node {
  left: 30%;
  transform: translateX(-50%);
}

.dua-trail__item--right .dua-trail__node {
  left: 70%;
  transform: translateX(-50%);
}

.dua-trail__node:hover {
  box-shadow:
    0 18px 30px rgb(6 36 84 / 24%),
    0 0 0 4px rgb(255 255 255 / 65%);
}

.dua-trail__item--left .dua-trail__node:hover {
  transform: translateX(-50%) translateY(-3px);
}

.dua-trail__item--right .dua-trail__node:hover {
  transform: translateX(-50%) translateY(-3px);
}

.dua-trail__node-icon {
  width: 54%;
  height: 54%;
  object-fit: contain;
}

.dua-trail__index {
  position: absolute;
  top: -4px;
  left: -4px;
  display: grid;
  width: 24px;
  height: 24px;
  place-items: center;
  border: 2px solid var(--dua-tone, var(--dua-color-primary-soft));
  border-radius: 50%;
  background: #fff;
  color: var(--dua-color-ink);
  font-size: .68rem;
  font-weight: 950;
}

.dua-trail__badge {
  position: absolute;
  right: -4px;
  bottom: -4px;
  display: grid;
  width: 30px;
  height: 30px;
  place-items: center;
  border: 3px solid #fff;
  border-radius: 50%;
  color: #fff;
}

.dua-trail__badge .dua-icon {
  width: 15px;
  height: 15px;
}

.dua-trail__badge--done {
  background: var(--dua-color-success);
}

.dua-trail__badge--progress {
  background: var(--dua-color-primary);
}

.dua-trail__badge--lock {
  background: var(--dua-color-muted);
}

/* ---------- Cartão de metadados (elevado) ---------- */

.dua-trail__meta {
  position: relative;
  z-index: 1;
  display: grid;
  max-width: 240px;
  justify-items: center;
  gap: .3rem;
  padding: .65rem .85rem;
  border: 1px solid var(--dua-color-line);
  border-radius: 16px;
  background: #fff;
  box-shadow: var(--dua-shadow-sm);
  text-align: center;
}

.dua-trail__tag {
  display: inline-flex;
  padding: .18rem .6rem;
  border-radius: 999px;
  font-size: .64rem;
  font-weight: 850;
  letter-spacing: .04em;
  text-transform: uppercase;
}

.dua-trail__tag--progress {
  background: var(--dua-color-primary-soft);
  color: var(--dua-color-primary-dark);
}

.dua-trail__tag--upcoming {
  background: #eef1f6;
  color: var(--dua-color-muted);
}

.dua-trail__title {
  color: var(--dua-color-ink);
  font-weight: 850;
  font-size: .92rem;
  line-height: 1.25;
  text-decoration: none;
}

.dua-trail__info {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .15rem .6rem;
}

.dua-trail__info span {
  display: inline-flex;
  align-items: center;
  gap: .25rem;
  color: var(--dua-color-muted);
  font-size: .74rem;
  font-weight: 700;
}

.dua-trail__info .dua-icon {
  width: 13px;
  height: 13px;
}

/* ---------- Estado: em andamento ---------- */

.dua-trail__item.is-progress .dua-trail__node {
  width: 90px;
  height: 90px;
  animation: dua-trail-pulse 2.4s ease-in-out infinite;
}

.dua-trail__item.is-progress .dua-trail__meta {
  border-color: var(--dua-color-primary);
  box-shadow: 0 12px 24px rgb(7 140 244 / 16%);
}

/* ---------- Estado: sugestão futura ---------- */

.dua-trail__item.is-upcoming .dua-trail__node {
  box-shadow: 0 6px 14px rgb(6 36 84 / 10%);
  filter: grayscale(.45);
  opacity: .68;
}

.dua-trail__item.is-upcoming .dua-trail__index {
  opacity: .8;
}

.dua-trail__item.is-upcoming .dua-trail__meta {
  background: rgb(255 255 255 / 70%);
  box-shadow: none;
}

.dua-trail__item.is-upcoming .dua-trail__title {
  color: var(--dua-color-muted);
}

@keyframes dua-trail-pulse {
  0%, 100% {
    box-shadow:
      0 14px 26px rgb(6 36 84 / 20%),
      0 0 0 4px rgb(255 255 255 / 55%),
      0 0 0 0 rgb(7 140 244 / 35%);
  }

  50% {
    box-shadow:
      0 14px 26px rgb(6 36 84 / 20%),
      0 0 0 4px rgb(255 255 255 / 55%),
      0 0 0 12px rgb(7 140 244 / 0%);
  }
}

@media (max-width: 419px) {
  .dua-trail__item {
    min-height: 190px;
  }

  .dua-trail__curve-top,
  .dua-trail__curve-bottom {
    height: 44px;
  }

  .dua-trail__curve-mid {
    top: 44px;
    bottom: 44px;
  }

  .dua-trail__row {
    height: 68px;
  }

  .dua-trail__item.is-progress .dua-trail__row {
    height: 80px;
  }

  .dua-trail__node {
    width: 68px;
    height: 68px;
  }

  .dua-trail__item.is-progress .dua-trail__node {
    width: 80px;
    height: 80px;
  }

  .dua-trail__meta {
    max-width: 210px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .dua-trail__item.is-progress .dua-trail__node {
    animation: none;
  }
}
