/* VoiceHot 声线动效 · Minimal Gov */

.vh-soundline {
  display: block;
  width: 100%;
  height: auto;
  overflow: visible;
}

.vh-soundline__path {
  fill: none;
  stroke: var(--c-blue, #1d4ed8);
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-dasharray: 120;
  stroke-dashoffset: 120;
  animation: vh-soundline-draw 2.4s ease-in-out infinite alternate;
}

.vh-soundline__dot {
  fill: var(--c-blue, #1d4ed8);
  animation: vh-soundline-pulse 1.6s ease-in-out infinite;
}

.vh-soundline-deco {
  position: absolute;
  pointer-events: none;
  opacity: 0.55;
}

.vh-soundline-deco--hero {
  right: 4%;
  top: 18%;
  width: min(42vw, 420px);
  z-index: 0;
}

.vh-soundline-deco--hero .vh-soundline__path {
  stroke: rgba(29, 78, 216, 0.35);
  stroke-width: 3;
}

.vh-soundline-deco--subtle {
  width: 160px;
  opacity: 0.4;
}

/* Loading · 三点声线 */
.vh-loader {
  display: inline-flex;
  align-items: flex-end;
  gap: 5px;
  height: 20px;
}

.vh-loader__bar {
  width: 3px;
  border-radius: 999px;
  background: var(--c-blue, #1d4ed8);
  animation: vh-loader-bar 0.9s ease-in-out infinite;
}

.vh-loader__bar:nth-child(1) { height: 8px; animation-delay: 0s; }
.vh-loader__bar:nth-child(2) { height: 14px; animation-delay: 0.12s; }
.vh-loader__bar:nth-child(3) { height: 20px; animation-delay: 0.24s; }
.vh-loader__bar:nth-child(4) { height: 12px; animation-delay: 0.36s; }
.vh-loader__bar:nth-child(5) { height: 6px; animation-delay: 0.48s; }

.vh-loader--light .vh-loader__bar {
  background: #fff;
}

@keyframes vh-soundline-draw {
  from { stroke-dashoffset: 120; opacity: 0.35; }
  to { stroke-dashoffset: 0; opacity: 1; }
}

@keyframes vh-soundline-pulse {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.15); }
}

@keyframes vh-loader-bar {
  0%, 100% { transform: scaleY(0.45); opacity: 0.45; }
  50% { transform: scaleY(1); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .vh-soundline__path,
  .vh-soundline__dot,
  .vh-loader__bar {
    animation: none;
  }
  .vh-soundline__path {
    stroke-dashoffset: 0;
  }
}
