html {
  box-sizing: border-box;
}

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

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

body {
  overflow-x: hidden;
  overflow-y: auto;
}

.page {
  width: 100%;
  display: flex;
  justify-content: center;
  background: #02030a;
}

.hero {
  position: relative;
  width: 100%;
  max-width: 864px;
}

.hero-image {
  width: 100%;
  height: auto;
  display: block;
}

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

.hotspot:hover,
.hotspot:active {
  transform: scale(1.05);
  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.25);
  filter: saturate(1.35) brightness(1.18);
}

/* SPOTIFY */

.spotify-jmusicom {
  left: 3.00%;
  top: 19.65%;
  width: 26.00%;
  height: 4.80%;
  z-index: 50;
}

.spotify-iris {
  left: 3.00%;
  top: 25.10%;
  width: 26.00%;
  height: 4.80%;
  z-index: 50;
}

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

.spotify-jmusicom:hover,
.spotify-iris:hover,
.spotify-jmusicom:active,
.spotify-iris:active {
  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.72; }
  50% { opacity: 1; }
  100% { opacity: 0.72; }
}

/* JMUSICOM CENTER */

.jmusicom-center {
  left: 34.27%;
  top: 11.27%;
  width: 30.00%;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  z-index: 40;
}

/* ARTIST BLOCKS */

.versa {
  left: 4.00%;
  top: 52.00%;
  width: 22.00%;
  height: 11.80%;
}

.iris {
  left: 26.00%;
  top: 52.00%;
  width: 22.00%;
  height: 11.80%;
}

.nesh {
  left: 48.70%;
  top: 52.00%;
  width: 22.00%;
  height: 11.80%;
}

.joskal {
  left: 72.40%;
  top: 52.00%;
  width: 22.00%;
  height: 11.80%;
}

.sandry {
  left: 4.00%;
  top: 65.00%;
  width: 22.00%;
  height: 11.80%;
}

.afro {
  left: 27.00%;
  top: 65.00%;
  width: 22.00%;
  height: 11.80%;
}

.irka {
  left: 49.55%;
  top: 65.00%;
  width: 22.00%;
  height: 11.80%;
}

.ritmonyx {
  left: 72.20%;
  top: 65.00%;
  width: 22.00%;
  height: 11.80%;
}

.adrian {
  left: 26.00%;
  top: 78.05%;
  width: 22.00%;
  height: 11.80%;
}

.ayrona {
  left: 49.80%;
  top: 78.05%;
  width: 22.00%;
  height: 11.80%;
}

/* JMUSICOM MOBILE HEARTBEAT */

.jmusicom-center::after {
  content: "";
  position: absolute;
  top: -12%;
  left: -12%;
  width: 124%;
  height: 124%;
  border-radius: 50%;
  pointer-events: none;
  background:
    radial-gradient(
      circle,
      rgba(255,255,255,0.18) 0%,
      rgba(0,220,255,0.28) 38%,
      rgba(255,0,220,0.24) 68%,
      transparent 100%
    );
  box-shadow:
    0 0 18px rgba(0,220,255,0.70),
    0 0 42px rgba(255,0,220,0.55);
  filter: blur(7px);
  mix-blend-mode: screen;
  animation: jmusicomPulseMobile 2s ease-in-out infinite;
}

@keyframes jmusicomPulseMobile {
  0% {
    transform: scale(0.94);
    opacity: 0.30;
  }

  50% {
    transform: scale(1.14);
    opacity: 0.90;
  }

  100% {
    transform: scale(0.94);
    opacity: 0.24;
  }
}

/* MOBILE ROW LIGHT SWEEPS */

.hero::before {
  content: "";
  position: absolute;
  left: 2%;
  top: 52.3%;
  width: 18%;
  height: 10.8%;
  border-radius: 24px;
  pointer-events: none;
  z-index: 5;
  background: radial-gradient(circle, rgba(255,255,255,0.70), rgba(0,220,255,0.30), rgba(255,0,220,0.18), transparent 90%);
  filter: blur(10px);
  mix-blend-mode: screen;
  animation: sweepRow1 2s ease-in-out infinite alternate;
}

.hero::after {
  content: "";
  position: absolute;
  left: 2%;
  top: 65.3%;
  width: 18%;
  height: 10.8%;
  border-radius: 24px;
  pointer-events: none;
  z-index: 5;
  background: radial-gradient(circle, rgba(255,255,255,0.70), rgba(255,0,220,0.28), rgba(0,220,255,0.20), transparent 90%);
  filter: blur(10px);
  mix-blend-mode: screen;
  animation: sweepRow2 2s ease-in-out infinite alternate-reverse;
}

@keyframes sweepRow1 {
  0% { left: 2%; opacity: 0.45; }
  15% { opacity: 0.9; }
  100% { left: 76%; opacity: 1; }
}

@keyframes sweepRow2 {
  0% { left: 2%; opacity: 0.45; }
  15% { opacity: 0.85; }
  100% { left: 76%; opacity: 1; }
}
