html {
  box-sizing: border-box;
}

body,
main,
section,
img,
a {
  box-sizing: inherit;
}

html,
body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: #02030a;
}

.page {
  width: 100%;
  height: 100vh;
  padding: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.hero {
  position: relative;
  width: min(96vw, calc((100vh - 20px) * 1.5));
  max-width: 1536px;
  aspect-ratio: 1536 / 1024;
}

.hero-image {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: contain;
}

.hotspot {
  position: absolute;
  display: block;
  cursor: pointer;
  z-index: 10;
  background: transparent;
  transition:
    transform 0.25s ease,
    box-shadow 0.25s ease,
    filter 0.25s ease,
    outline 0.25s ease;
}

.hotspot:hover {
  transform: scale(1.08);
  background: transparent;
  box-shadow:
    0 0 22px rgba(0,220,255,0.85),
    0 0 48px rgba(255,0,220,0.65),
    0 0 80px rgba(255,255,255,0.35);
  outline: 1px solid rgba(255,255,255,0.28);
  filter: saturate(1.35) brightness(1.22);
}

/* SPOTIFY */

.spotify-jmusicom {
  left: 1.7%;
  top: 38.4%;
  width: 13.9%;
  height: 8.8%;
  border-radius: 14px;
  z-index: 50;
}

.spotify-iris {
  left: 1.7%;
  top: 49.6%;
  width: 13.9%;
  height: 8.8%;
  border-radius: 14px;
  z-index: 50;
}

.spotify-jmusicom,
.spotify-iris {
  box-shadow:
    0 0 12px rgba(30,215,96,0.65),
    0 0 26px rgba(30,215,96,0.45);
  animation: spotifyPulse 2.2s ease-in-out infinite;
}

.spotify-jmusicom:hover,
.spotify-iris:hover {
  box-shadow:
    0 0 18px rgba(30,215,96,1),
    0 0 42px rgba(30,215,96,0.85),
    0 0 72px rgba(30,215,96,0.60);
  outline: 1px solid rgba(30,215,96,0.8);
}

@keyframes spotifyPulse {
  0% { opacity: 0.70; }
  50% { opacity: 1; }
  100% { opacity: 0.70; }
}

/* JMUSICOM CENTER */

.jmusicom-center {
  left: 43.35%;
  top: 20.00%;
  width: 13.30%;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  z-index: 30;
}

.jmusicom-center::after {
  content: "";
  position: absolute;
  top: -18%;
  left: -18%;
  width: 136%;
  height: 136%;
  border-radius: 50%;
  pointer-events: none;
  background:
    radial-gradient(
      circle,
      rgba(255,255,255,0.18) 0%,
      rgba(0,220,255,0.26) 38%,
      rgba(255,0,220,0.25) 68%,
      transparent 100%
    );
  box-shadow:
    0 0 22px rgba(0,220,255,0.70),
    0 0 48px rgba(255,0,220,0.55);
  filter: blur(8px);
  mix-blend-mode: screen;
  animation: jmusicomPulse 2.2s ease-in-out infinite;
}

@keyframes jmusicomPulse {
  0% { transform: scale(0.92); opacity: 0.25; }
  50% { transform: scale(1.18); opacity: 0.95; }
  100% { transform: scale(0.92); opacity: 0.25; }
}

/* LOWER IDs */

.versa {
  left: 2.00%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.iris {
  left: 11.15%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.nesh {
  left: 20.90%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.joskal {
  left: 30.75%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.sandry {
  left: 40.95%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.afro {
  left: 51.24%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.irka {
  left: 61.40%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.ritmonyx {
  left: 70.85%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.adrian {
  left: 80.45%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

.ayrona {
  left: 89.99%;
  top: 73.60%;
  width: 8.80%;
  height: 17.60%;
  border-radius: 16px;
}

/* LIGHT SWEEP */

.hero::after {
  content: "";
  position: absolute;
  left: 1.8%;
  top: 74.5%;
  width: 9%;
  height: 15%;
  border-radius: 18px;
  pointer-events: none;
  z-index: 5;
  background:
    radial-gradient(
      circle,
      rgba(255,255,255,0.42) 0%,
      rgba(0,220,255,0.28) 35%,
      rgba(255,0,220,0.22) 60%,
      transparent 75%
    );
  filter: blur(14px);
  mix-blend-mode: screen;
  animation: iconSweep 2s ease-in-out infinite alternate;
}

@keyframes iconSweep {
  0% {
    left: 1.8%;
    opacity: 0.25;
  }

  12% {
    opacity: 0.95;
  }

  100% {
    left: 87.5%;
    opacity: 0.95;
  }
}