.loader {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    background: rgba(129, 129, 129, 0.3);
    backdrop-filter: blur(10px);
    z-index: 9999;
    display: flex;
    justify-content: center;
    align-items: center;
    transition: clip-path 1s ease;
}


.bubble {
  opacity: 0;
  animation: rise 2s linear infinite;
  animation-delay: 1.5s;
}

@keyframes rise {
  0% {
    transform: translateY(0);
    opacity: 0.5;
  }
  100% {
    transform: translateY(-25vh);
    opacity: 0;
  }
}

.bubble:nth-child(1) { animation-delay: 0.2s; }
.bubble:nth-child(2) { animation-delay: 0.4s; }
.bubble:nth-child(3) { animation-delay: 0.6s; }
.bubble:nth-child(4) { animation-delay: 0.5s; }
.bubble:nth-child(5) { animation-delay: 0.7s; }
.bubble:nth-child(6) { animation-delay: 0.8s; }
.bubble:nth-child(7) { animation-delay: 0.5s; }
.bubble:nth-child(8) { animation-delay: 0.6s; }

/* 中间百分比文字 */
.percentage {
  position: absolute;
  font-family: Arial, sans-serif;
  font-size: 20px;
  fill: #333;
  font-weight: bold;
  display: flex;
  justify-self: center;
  text-shadow: #333 0 0 5px;
  z-index: 6;
}

#smain {
  fill: transparent;
  stroke: var(--primary-blue);
  stroke-width: 0;
  filter: drop-shadow(var(--drop-shadow-main));
  animation: strokeAnimate 1s forwards;
  animation-delay: 1s;
}

@keyframes strokeAnimate {
  0% { fill: aliceblue; }
  100% { fill: var(--primary-blue); }
}

#slu,
#sld,
#srd,
#shd {
  opacity: 0;
  filter: drop-shadow(var(--drop-shadow-dark));
  animation: fadeInOut 0.5s forwards;
}

#slu { animation-delay: 1.5s; }
#sld { animation-delay: 1.7s; }
#srd { animation-delay: 1.9s; }
#shd { animation-delay: 1.9s; }



/* 通用淡入动画 */
@keyframes fadeInOut {
  0% { opacity: 0; }
  100% { opacity: 1; }
}

#smain {
  fill: transparent;
  stroke: var(--primary-blue);
  stroke-width: 0;
  filter: drop-shadow(var(--drop-shadow-main));
  animation: strokeAnimate 1s forwards;
  animation-delay: 1s;
}

@keyframes strokeAnimate {
  0% { fill: aliceblue; }
  100% { fill: var(--primary-blue); }
}

#slu,
#sld,
#srd,
#shd {
  opacity: 0;
  filter: drop-shadow(var(--drop-shadow-dark));
  animation: fadeInOut 0.5s forwards;
}

#slu { animation-delay: 1.5s; }
#sld { animation-delay: 1.7s; }
#srd { animation-delay: 1.9s; }
#shd { animation-delay: 1.9s; }

#logo {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 30vh;
  width: 30vw;
  z-index: 1;
}
#bubble {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 30vh;
  width: 30vw;
  z-index: 2;
}
#progressSVG {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 8vh;
  width: 45vw;
  z-index: 3;
  top: 60vh;
}
