.timeline-section{
  width:100%;
  max-width:560px;
}
.timeline-title{
  font-size:14px;
  margin:0 0 4px;
  text-align:center;
}
.timeline-sub{
  font-size:11px;
  color:var(--ink-dim);
  margin:0 0 20px;
  text-align:center;
}

#timeline{
  position:relative;
  padding-left:28px;
  display:flex;
  flex-direction:column;
}
#timeline::before{
  content:"";
  position:absolute;
  left:8px;
  top:6px;
  bottom:6px;
  width:2px;
  background:linear-gradient(var(--slime-dim), #173026);
}

.milestone{
  position:relative;
  padding:0 0 26px 20px;
}
.milestone::before{
  content:"";
  position:absolute;
  left:-24px;
  top:4px;
  width:12px;
  height:12px;
  border-radius:50%;
  background:var(--void);
  border:2px solid var(--slime-dim);
}
.milestone.hit::before{
  background:var(--slime);
  border-color:var(--slime);
  box-shadow:0 0 8px var(--slime);
}

.milestone-label{
  font-size:13px;
  font-weight:600;
  color:var(--ink);
  margin-bottom:6px;
}
.milestone.hit .milestone-label{ color:var(--slime); }

.memo-box{
  border:1px solid #173026;
  border-radius:8px;
  padding:10px 14px;
  font-size:12px;
  color:var(--ink-dim);
  min-height:20px;
}
.memo-box.loading{
  color:#4d6459;
  font-style:italic;
}
.memo-box.hit{
  color:var(--ink);
  border-color:var(--slime-dim);
}
.memo-box a{
  color:var(--slime);
  text-decoration:none;
  font-weight:600;
}
.memo-box a:hover{ text-decoration:underline; }

.milestone.loading-more::before{
  background:var(--void);
  border-color:#4d6459;
  border-style:dashed;
}
.milestone.loading-more .milestone-label{
  color:var(--ink-dim);
  display:flex;
  align-items:center;
  gap:8px;
}

.dot-pulse{
  display:inline-flex;
  gap:3px;
}
.dot-pulse span{
  width:5px;
  height:5px;
  border-radius:50%;
  background:var(--slime-dim);
  animation:dot-pulse 1.2s ease-in-out infinite;
}
.dot-pulse span:nth-child(2){ animation-delay:.2s; }
.dot-pulse span:nth-child(3){ animation-delay:.4s; }
@keyframes dot-pulse{
  0%, 80%, 100% { opacity:.25; transform:scale(0.8); }
  40% { opacity:1; transform:scale(1.15); }
}
