* {
  padding: 0;
  margin: 0;
  border: 0;
  box-sizing: border-box;
  transform-style: preserve-3d;
}

body {
  display: grid;
  place-items: center;
  background: #121418;
  min-height: 100vh;
  overflow: hidden;
}

.ball {
  --size: 80vmin;
  --thickness: 0.3vmin;
  --lineColor: #ffffff;
  --shineColor: #00ff00;
  position: relative;
  width: var(--size);
  aspect-ratio: 1;
  animation: globe 20s infinite linear;
  perspective: 10000px;
}
.ball .h, .ball .v {
  position: absolute;
  inset: 0;
}
.ball i {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: var(--thickness) solid var(--lineColor);
  transform-origin: center center;
  box-shadow: 0 0 2vmax var(--shineColor), inset 0 0 2vmax var(--shineColor);
}
.ball .v i {
  transform: rotateY(calc(360deg / var(--rings) * var(--i)));
}
.ball .h {
  transform: rotateX(90deg) translateZ(0vmax);
}
.ball .h i {
  --angle: calc((var(--i) / var(--rings)) * 180deg);
  width: calc(var(--size) * sin(var(--angle)));
  aspect-ratio: 1;
  margin: auto;
  transform: translateZ(calc((var(--size) * .5) * cos(var(--angle))));
}

@keyframes globe {
  from {
    transform: rotateX(-30deg) rotateY(0deg);
  }
  to {
    transform: rotateX(-30deg) rotateY(360deg);
  }
}