#cloud-preloader-overlay {
  position: fixed;
  inset: 0;
  background: #0d1117;
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.5s ease;
}

#cloud-preloader-overlay.fade-out {
  opacity: 0;
  pointer-events: none;
}

.cp-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
}

.cp-svg {
  width: 140px;
  height: 140px;
  overflow: visible;
}

.cp-ring-outer {
  fill: none;
  stroke: #1a6cf6;
  stroke-width: 0.8;
  stroke-dasharray: 5 6;
  opacity: 0.25;
  transform-origin: 60px 60px;
  animation: cp-spin-cw 8s linear infinite;
}

.cp-scan-arc {
  fill: none;
  stroke: #3b82f6;
  stroke-width: 2;
  stroke-dasharray: 30 260;
  stroke-linecap: round;
  transform-origin: 60px 60px;
  animation: cp-spin-cw 1.6s linear infinite;
  filter: drop-shadow(0 0 4px #3b82f6);
}

.cp-ring-mid {
  fill: none;
  stroke: #1a6cf6;
  stroke-width: 0.6;
  stroke-dasharray: 2 5;
  opacity: 0.3;
  transform-origin: 60px 60px;
  animation: cp-spin-ccw 12s linear infinite;
}

.cp-hex {
  fill: #080f1e;
  stroke: #1a6cf6;
  stroke-width: 1.2;
  opacity: 0.9;
  filter: drop-shadow(0 0 8px #0d2d6b);
}

.cp-ring-inner {
  fill: none;
  stroke: #1a6cf6;
  stroke-width: 1;
  stroke-dasharray: 8 4;
  opacity: 0.5;
  transform-origin: 60px 60px;
  animation: cp-spin-ccw 3s linear infinite;
}

.cp-core {
  fill: #60a5fa;
  filter: drop-shadow(0 0 8px #3b82f6) drop-shadow(0 0 16px #1a6cf6);
  transform-origin: 60px 60px;
  animation: cp-core-beat 1.6s ease-in-out infinite;
}

.cp-v {
  fill: #1a6cf6;
  filter: drop-shadow(0 0 3px #3b82f6);
}

.v1 { animation: cp-v-pulse 1.8s ease-in-out infinite 0.0s; }
.v2 { animation: cp-v-pulse 1.8s ease-in-out infinite 0.3s; }
.v3 { animation: cp-v-pulse 1.8s ease-in-out infinite 0.6s; }
.v4 { animation: cp-v-pulse 1.8s ease-in-out infinite 0.9s; }
.v5 { animation: cp-v-pulse 1.8s ease-in-out infinite 1.2s; }
.v6 { animation: cp-v-pulse 1.8s ease-in-out infinite 1.5s; }

.cp-ray {
  stroke: #1a6cf6;
  stroke-width: 0.5;
  opacity: 0;
}

.r1 { animation: cp-ray-flash 1.8s ease-in-out infinite 0.0s; }
.r2 { animation: cp-ray-flash 1.8s ease-in-out infinite 0.3s; }
.r3 { animation: cp-ray-flash 1.8s ease-in-out infinite 0.6s; }
.r4 { animation: cp-ray-flash 1.8s ease-in-out infinite 0.9s; }
.r5 { animation: cp-ray-flash 1.8s ease-in-out infinite 1.2s; }
.r6 { animation: cp-ray-flash 1.8s ease-in-out infinite 1.5s; }

@keyframes cp-spin-cw  { to { transform: rotate(360deg); } }
@keyframes cp-spin-ccw { to { transform: rotate(-360deg); } }

@keyframes cp-core-beat {
  0%, 100% { r: 5;   opacity: 1;   filter: drop-shadow(0 0 8px #3b82f6) drop-shadow(0 0 16px #1a6cf6); }
  50%       { r: 3.5; opacity: 0.6; filter: drop-shadow(0 0 3px #3b82f6); }
}

@keyframes cp-v-pulse {
  0%, 100% { opacity: 1;   r: 2.5; }
  40%       { opacity: 0.1; r: 1.5; }
  60%       { opacity: 1;   r: 3.2; filter: drop-shadow(0 0 6px #60a5fa); }
}

@keyframes cp-ray-flash {
  0%, 30%, 100% { opacity: 0; }
  45%, 55%      { opacity: 0.6; }
}