#app-loading {
  position: fixed;
  inset: 0;
  z-index: 999999;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  background: radial-gradient(circle at center, #111827 0%, #030712 100%);
  overflow: hidden;
}

/* 主容器 */

#app-loading .loader {
  position: relative;
  width: 260px;
  height: 260px;
}

/* 发光层 */

#app-loading .glow {
  position: absolute;
  inset: 0;
  margin: auto;
  border-radius: 50%;
  filter: blur(30px);
}

#app-loading .glow-1 {
  width: 90px;
  height: 90px;
  background: rgba(59, 130, 246, 0.6);
  animation: pulse1 1.5s ease infinite;
}

#app-loading .glow-2 {
  width: 140px;
  height: 140px;
  background: rgba(99, 102, 241, 0.3);
  animation: pulse2 2s ease infinite;
}

#app-loading .glow-3 {
  width: 200px;
  height: 200px;
  background: rgba(14, 165, 233, 0.15);
  animation: pulse3 2.5s ease infinite;
}

/* 核心球 */

#app-loading .center {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 60px;
  height: 60px;
  margin-left: -30px;
  margin-top: -30px;
  border-radius: 50%;
  background: radial-gradient(circle, #fff, #60a5fa);
  box-shadow:
    0 0 20px #60a5fa,
    0 0 60px rgba(96, 165, 250, 0.8);
  animation: centerPulse 1.2s ease infinite;
}

/* 外环 */

#app-loading .ring {
  position: absolute;
  left: 50%;
  top: 50%;
  border-radius: 50%;
}

#app-loading .ring-1 {
  width: 130px;
  height: 130px;
  margin-left: -65px;
  margin-top: -65px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  animation: rotate 2s linear infinite;
}

#app-loading .ring-2 {
  width: 200px;
  height: 200px;
  margin-left: -100px;
  margin-top: -100px;
  border: 1px solid rgba(255, 255, 255, 0.06);
  animation: rotateReverse 3s linear infinite;
}

#app-loading .ring::before {
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #60a5fa;
  top: -5px;
  left: 50%;
  box-shadow:
    0 0 12px #60a5fa,
    0 0 24px #60a5fa;
}

/* 文案 */

#app-loading .loading-text {
  margin-top: 60px;
  color: rgba(255, 255, 255, 0.75);
  font-size: 14px;
  letter-spacing: 4px;
  animation: fadeText 1s ease infinite;
}

/* 动画 */

@keyframes rotate {
  from {
    transform: translate(-50%, -50%) rotate(0deg);
  }

  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@keyframes rotateReverse {
  from {
    transform: translate(-50%, -50%) rotate(360deg);
  }

  to {
    transform: translate(-50%, -50%) rotate(0deg);
  }
}

@keyframes centerPulse {
  0%,
  100% {
    transform: translate(-50%, -50%) scale(1);
  }

  50% {
    transform: translate(-50%, -50%) scale(1.15);
  }
}

@keyframes pulse1 {
  0%,
  100% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.3);
  }
}

@keyframes pulse2 {
  0%,
  100% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.2);
  }
}

@keyframes pulse3 {
  0%,
  100% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.15);
  }
}

@keyframes fadeText {
  0%,
  100% {
    opacity: 0.5;
  }

  50% {
    opacity: 1;
  }
}
