/* Thickness constant: change this one value to make every cover edge thinner or
   thicker. It is now doubled from the old 8px depth to 16px. */
:root {
  --cover-depth: 16px;
}

/* Contained scroll section (embedded after the artists list). It is NOT the whole
   page surface anymore: it provides its own scroll length to drive the corridor and
   carries the BRUISE dark theme, while the rest of the site keeps its own layout. */
.carousel-section {
  position: relative;
  height: 400vh;        /* scroll length that drives the corridor */
  background: #000;     /* BRUISE dark theme */
}

/* Pinned viewport layer. It sticks to the top while the user scrolls through the
   400vh section. perspective is the CSS pseudo-3D camera; child covers use
   translate3d/rotate transforms inside this space. touch-action:pan-y lets native
   vertical scrolling drive the carousel on touch (and the page scroll past it). */
.cover-stage {
  position: sticky;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  perspective: 1150px;
  touch-action: pan-y;
}

/* Transform root for the whole row. This lets scroll/touch move the complete
   diagonal cover set as one object while each cover still has its own transform. */
.cover-stack {
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
}

/* One square album cover. left/top 50% establishes the viewport center, then JS
   offsets each cover from that center to create the diagonal corridor. */
.cover {
  position: absolute;
  left: 50%;
  top: 50%;
  width: clamp(270px, 33vw, 560px);
  aspect-ratio: 1;
  transform-style: preserve-3d;
  will-change: transform;
  cursor: pointer;
}

/* CSS-only thickness: these pseudo-elements are narrow side faces attached to the
   square. They are not real geometry, but with preserve-3d they read as thick
   album/card edges without adding extra DOM nodes. */
.cover::before,
.cover::after {
  content: "";
  position: absolute;
  background-image: var(--cover-image);
  background-size: cover;
  background-repeat: no-repeat;
  filter: brightness(0.68) saturate(0.9);
  pointer-events: none;
  backface-visibility: hidden;
}

/* Right side face of the cover thickness. It samples the right edge of the same
   cover image so the side feels like a thin continuation of the artwork. */
.cover::before {
  top: 0;
  right: 0;
  width: var(--cover-depth);
  height: 100%;
  background-position: right center;
  transform-origin: right center;
  transform: rotateY(90deg);
}

/* Top side face of the cover thickness. It samples the top of the same cover
   image, which makes the upper edge visible when the cover is tilted in the row. */
.cover::after {
  left: 0;
  top: 0;
  width: 100%;
  height: var(--cover-depth);
  background-position: center top;
  transform-origin: center top;
  transform: rotateX(90deg);
}

/* Cover image fills the square plane. User drag/select is disabled so gestures
   control the carousel rather than dragging the image asset. */
.cover img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  user-select: none;
  -webkit-user-drag: none;
  backface-visibility: hidden;
  transform: translateZ(calc(var(--cover-depth) / 2));
}

.cover-label {
  position: absolute;
  left: 24px;
  top: calc(2.5vw + 24px);
  z-index: 20;
  max-width: min(320px, calc(100vw - 48px));
  color: #fff;
  font: 11px/1.25 Arial, sans-serif;
  text-align: left;
  text-transform: uppercase;
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity 0.16s, transform 0.16s;
  pointer-events: none;
}

/* Album title line inside the label. */
.cover-label b {
  display: block;
  font-size: 12px;
  color: #FF0000;
}

@media (max-width: 760px) {
  .cover {
    width: 72vw;
  }

  .cover-label {
    font-size: 20px;
    margin-top: 8vw;
  }

  .cover-label b {
    font-size: 24px;
  }
}
