.cluster-canvas {
  cursor: crosshair;
}

textarea {
  scrollbar-width: thin;
}

.progress-bar {
  background: linear-gradient(90deg, #2563eb 0%, #3b82f6 45%, #60a5fa 100%);
  position: relative;
}

.progress-bar::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: repeating-linear-gradient(
    -45deg,
    rgba(255, 255, 255, 0.2) 0,
    rgba(255, 255, 255, 0.2) 10px,
    rgba(255, 255, 255, 0.08) 10px,
    rgba(255, 255, 255, 0.08) 20px
  );
  animation: progress-stripes 0.9s linear infinite;
}

.alive-dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background: #22c55e;
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7);
  animation: alive-pulse 1.6s infinite;
}

@keyframes progress-stripes {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(28px);
  }
}

@keyframes alive-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.65);
  }
  70% {
    box-shadow: 0 0 0 8px rgba(34, 197, 94, 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
  }
}
