/* =========================================================================
   Vinyl shelf (/vinyl/). Night Edition tokens only (night-edition.css).
   Each record is a sleeve with its disc showing at the open edge; on hover
   or keyboard focus the disc slides out and turns a little. Lanes follow the
   labels: Groove Protocol, Rhythmic Beatz Records, DKTech on other labels.
   ========================================================================= */

:root body .gp-vinyl{padding-bottom:var(--ne-section);}
:root body .gp-vinyl__empty{margin:0;padding:clamp(40px,4.4vw,64px) 0 0;font-size:var(--ne-fs-lead);color:var(--ne-text-2);}

/* Lanes */
:root body .gp-vinyl__lane{padding-top:clamp(56px,6vw,96px);}
:root body .gp-vinyl__lane-head{
  display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  margin:0 0 clamp(28px,3vw,44px);padding-bottom:14px;border-bottom:1px solid var(--ne-rule);
}
:root body .gp-vinyl__lane-title{display:flex;align-items:center;gap:16px;margin:0;font-size:var(--ne-fs-h2);font-weight:500;line-height:1.05;letter-spacing:-.02em;color:var(--ne-text);}
:root body .gp-vinyl__lane-logo{flex:none;width:44px;height:44px;border-radius:4px;box-shadow:0 0 0 1px var(--ne-rule);}
:root body .gp-vinyl__lane-count{flex:none;font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-muted);}

/* Shelf */
:root body .gp-vinyl__shelf{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(44px,4.4vw,72px) clamp(20px,2.6vw,40px);
  margin:0;padding:0;list-style:none;
}
:root body .gp-vinyl__item{margin:0;padding:0;min-width:0;}

/* Sleeve and disc. The sleeve keeps 14% of the column free on the right so
   the disc has room to slide out without leaving the column. */
:root body .gp-vinyl__sleeve{position:relative;display:block;width:86%;aspect-ratio:1/1;max-width:100%;text-decoration:none;}
/* Halo: the sleeve's own colours, blurred, as light on the black around it. */
:root body .gp-vinyl__halo{
  position:absolute;inset:2% -12% -14% -4%;z-index:0;display:block;pointer-events:none;
  opacity:.5;transition:opacity 700ms var(--ne-ease),transform 700ms var(--ne-ease);
  animation:gp-vinyl-breathe 9s var(--ne-ease) infinite alternate;animation-delay:var(--gp-vinyl-breath,0s);
}
:root body .gp-vinyl__halo img{display:block;width:100%;height:100%;object-fit:cover;filter:blur(48px) saturate(2) brightness(1.15);transform:translateZ(0);}
:root body .gp-vinyl__item:nth-child(3n+2) .gp-vinyl__halo{--gp-vinyl-breath:-3s;}
:root body .gp-vinyl__item:nth-child(3n) .gp-vinyl__halo{--gp-vinyl-breath:-6s;}
:root body .gp-vinyl__sleeve:is(:hover,:focus-visible) .gp-vinyl__halo{opacity:.85;transform:scale(1.08);animation:none;}
@keyframes gp-vinyl-breathe{from{opacity:.42;}to{opacity:.66;}}
:root body .gp-vinyl__cover{
  position:absolute;inset:0;z-index:2;display:block;overflow:hidden;
  background:var(--ne-surface);box-shadow:0 22px 44px rgba(0,0,0,.55),0 2px 0 rgba(255,255,255,.04) inset;
}
:root body .gp-vinyl__cover img{display:block;width:100%;height:100%;object-fit:cover;}
/* Type sleeve: a record whose artwork is not on file yet. */
:root body .gp-vinyl__type{
  position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;padding:9%;
  background:
    radial-gradient(circle at 50% 54%,transparent 0 31%,rgba(241,239,233,.10) 31.2% 31.6%,transparent 31.8%),
    radial-gradient(circle at 50% 54%,rgba(224,70,61,.16) 0 9%,transparent 9.4%),
    linear-gradient(160deg,#1b1b1b,#0e0e0e);
}
:root body .gp-vinyl__type-label{font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-muted);}
:root body .gp-vinyl__type-title{font-size:clamp(22px,2.4vw,34px);font-weight:500;line-height:1.02;letter-spacing:-.02em;color:var(--ne-text);}
:root body .gp-vinyl__type-foot{font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-text-2);}
:root body .gp-vinyl__disc{
  position:absolute;top:3%;left:3%;z-index:1;display:block;width:94%;height:94%;border-radius:50%;
  background:
    radial-gradient(circle at 50% 50%,rgba(255,255,255,.07) 0 18.6%,transparent 19%),
    conic-gradient(from 20deg at 50% 50%,transparent 0deg,rgba(255,255,255,.11) 28deg,transparent 64deg,transparent 180deg,rgba(255,255,255,.08) 208deg,transparent 244deg),
    repeating-radial-gradient(circle at 50% 50%,#121212 0 1px,#1d1d1d 1px 2px,#151515 2px 3px),
    #121212;
  box-shadow:0 0 0 1px rgba(255,255,255,.09),0 12px 30px rgba(0,0,0,.6);
  transform:translateX(10%);
  transition:transform 600ms var(--ne-ease);
}
/* Centre label carries the artwork; the spindle hole sits on top. */
:root body .gp-vinyl__disc img{position:absolute;left:32%;top:32%;width:36%;height:36%;border-radius:50%;object-fit:cover;filter:saturate(.85);}
:root body .gp-vinyl__disc::after{content:"";position:absolute;left:50%;top:50%;width:2.4%;height:2.4%;margin:-1.2% 0 0 -1.2%;border-radius:50%;background:var(--ne-bg);box-shadow:0 0 0 1px rgba(255,255,255,.12);}
:root body .gp-vinyl__sleeve:is(:hover,:focus-visible) .gp-vinyl__disc{transform:translateX(20%) rotate(24deg);}
/* On hover the label turns at 33 1/3 rpm. */
:root body .gp-vinyl__sleeve:is(:hover,:focus-visible) .gp-vinyl__disc img{animation:gp-vinyl-spin 1.8s linear infinite;}
@keyframes gp-vinyl-spin{to{transform:rotate(360deg);}}

/* Shelf reveal (night-vinyl.js, below the fold only): the record rises in
   with the Night Edition reveal, then its disc slides out of the sleeve. */
:root.ne-motion body .gp-vinyl__item.ne-rv:not(.is-in) .gp-vinyl__disc{transform:translateX(0) rotate(-40deg);}
:root body .gp-vinyl__item.is-in:not(.is-settled) .gp-vinyl__disc{transition-duration:1200ms;transition-delay:calc(var(--ne-rv-d,0ms) + 380ms);}
:root body .gp-vinyl__sleeve:focus-visible{outline:2px solid var(--ne-text);outline-offset:6px;}

/* One record in a lane: sleeve in the first column, facts and open notes
   across the other two (the columns match the three record shelf). */
:root body .gp-vinyl__shelf--solo{grid-template-columns:minmax(0,1fr);}
:root body .gp-vinyl__shelf--solo .gp-vinyl__item{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:clamp(20px,2.6vw,40px);align-items:start;
}
:root body .gp-vinyl__shelf--solo .gp-vinyl__body{grid-column:2 / span 2;margin-top:0;max-width:68ch;}

/* Facts */
:root body .gp-vinyl__body{margin-top:24px;}
:root body .gp-vinyl__meta{margin:0 0 8px;font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-muted);}
:root body .gp-vinyl__title{margin:0;font-size:var(--ne-fs-h3);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--ne-text);}
:root body .gp-vinyl__artists{margin:6px 0 0;font-size:15px;line-height:1.45;color:var(--ne-text-2);}
:root body .gp-vinyl__formats{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 0;padding:0;list-style:none;}
:root body .gp-vinyl__formats li{margin:0;padding:4px 9px;border:1px solid var(--ne-rule-strong);border-radius:2px;font-size:var(--ne-fs-meta);letter-spacing:.04em;color:var(--ne-text-2);}
:root body .gp-vinyl__actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px 22px;margin:20px 0 0;}
:root body .gp-vinyl__buy{
  display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 18px;border-radius:2px;
  background:var(--ne-text);color:var(--ne-ink);font-size:14px;font-weight:500;text-decoration:none;
  transition:background var(--ne-t-fast) var(--ne-ease);
}
:root body .gp-vinyl__buy:is(:hover,:focus-visible){background:#fff;color:var(--ne-ink);}
:root body .gp-vinyl__release{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:14px;color:var(--ne-text-2);text-decoration:none;transition:color var(--ne-t-fast) var(--ne-ease);}
:root body .gp-vinyl__release:is(:hover,:focus-visible){color:var(--ne-text);}

/* Notes: the label's own copy, folded */
:root body .gp-vinyl__notes{margin-top:14px;border-top:1px solid var(--ne-rule);}
:root body .gp-vinyl__notes summary{
  display:flex;align-items:center;justify-content:space-between;min-height:44px;cursor:pointer;list-style:none;
  font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-text-2);
}
:root body .gp-vinyl__notes summary::-webkit-details-marker{display:none;}
:root body .gp-vinyl__notes summary::after{content:"+";font-size:16px;line-height:1;color:var(--ne-muted);}
:root body .gp-vinyl__notes summary::after{transition:transform var(--ne-t-fast) var(--ne-ease);}
:root body .gp-vinyl__notes[open] summary::after{transform:rotate(45deg);} /* no minus sign: the dash rule */
:root body .gp-vinyl__notes summary:hover{color:var(--ne-text);}
:root body .gp-vinyl__notes p{max-width:62ch;margin:0 0 12px;font-size:15px;line-height:1.6;color:var(--ne-text-2);}

:root body .gp-vinyl__footnote{max-width:62ch;margin:var(--ne-section-tight) 0 0;padding-top:20px;border-top:1px solid var(--ne-rule);font-size:14px;line-height:1.55;color:var(--ne-muted);}

@media (max-width:1000px){
  :root body .gp-vinyl__shelf{grid-template-columns:repeat(2,minmax(0,1fr));}
  :root body .gp-vinyl__shelf--solo{grid-template-columns:minmax(0,1fr);}
  :root body .gp-vinyl__shelf--solo .gp-vinyl__item{grid-template-columns:repeat(2,minmax(0,1fr));}
  :root body .gp-vinyl__shelf--solo .gp-vinyl__body{grid-column:2;}
}
@media (max-width:560px){
  :root body .gp-vinyl__shelf{grid-template-columns:minmax(0,1fr);gap:48px;}
  :root body .gp-vinyl__sleeve{width:82%;}
  :root body .gp-vinyl__shelf--solo .gp-vinyl__item{display:block;}
  :root body .gp-vinyl__shelf--solo .gp-vinyl__body{margin-top:24px;}
}
@media (prefers-reduced-motion:reduce){
  :root body .gp-vinyl__disc{transition:none;}
  :root body .gp-vinyl__sleeve:is(:hover,:focus-visible) .gp-vinyl__disc{transform:translateX(10%);}
}

/* =========================================================================
   Deck: a record turning in the empty end of the title column. The tone arm
   drops when the page is ready and the shelf's records take turns on it
   (night-vinyl.js). Decoration only; still under reduced motion.
   ========================================================================= */
:root body .gp-vinyl-head{position:relative;}
:root body .gp-vinyl-head .gp-page-hero{position:relative;z-index:1;}
:root body .gp-vinyl-deck{position:absolute;inset:0;z-index:0;pointer-events:none;}
:root body .gp-vinyl-deck__frame{
  display:grid;grid-template-columns:minmax(0,7fr) clamp(32px,4vw,72px) minmax(0,5fr);grid-template-rows:minmax(0,1fr);
  height:100%;padding-top:clamp(64px,7.4vw,120px);padding-bottom:clamp(48px,5.2vw,80px);box-sizing:border-box;
}
:root body .gp-vinyl-deck__unit{
  position:relative;grid-column:1;justify-self:end;align-self:end;
  width:clamp(180px,20vw,290px);aspect-ratio:1/1;margin-right:clamp(12px,3vw,56px);
}
:root body .gp-vinyl-deck__glow{
  position:absolute;inset:-10%;border-radius:50%;background:center/cover no-repeat;
  filter:blur(64px) saturate(1.9);opacity:.42;transition:opacity 520ms var(--ne-ease);
}
:root body .gp-vinyl-deck__platter{position:absolute;inset:0;display:block;border-radius:50%;}
:root body .gp-vinyl-deck__disc{
  position:absolute;inset:0;display:block;border-radius:50%;
  background:
    radial-gradient(circle at 50% 50%,rgba(255,255,255,.06) 0 17.6%,transparent 18%),
    repeating-radial-gradient(circle at 50% 50%,#111 0 1px,#1c1c1c 1px 2px,#141414 2px 3px),
    #111;
  box-shadow:0 0 0 1px rgba(255,255,255,.08),0 30px 70px rgba(0,0,0,.7);
  animation:gp-vinyl-spin 3.6s linear infinite;animation-play-state:paused;
}
:root body .gp-vinyl-deck__label{
  position:absolute;left:33%;top:33%;width:34%;height:34%;border-radius:50%;object-fit:cover;
  transition:opacity 520ms var(--ne-ease);
}
/* Light on the record stays still while it turns. */
:root body .gp-vinyl-deck__platter::after{
  content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;
  background:conic-gradient(from 25deg,transparent 0deg,rgba(255,255,255,.10) 26deg,transparent 60deg,transparent 180deg,rgba(255,255,255,.07) 206deg,transparent 240deg);
}
:root body .gp-vinyl-deck__platter::before{
  content:"";position:absolute;left:50%;top:50%;z-index:2;width:3%;height:3%;margin:-1.5% 0 0 -1.5%;border-radius:50%;
  background:var(--ne-bg);box-shadow:0 0 0 1px rgba(255,255,255,.18);
}
/* Tone arm: lifted beside the record, dropped onto it while playing. */
:root body .gp-vinyl-deck__unit::after{
  content:"";position:absolute;left:104%;top:-3%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;
  background:#1a1a1a;box-shadow:0 0 0 1px rgba(241,239,233,.28),0 0 0 5px #121212,0 0 0 6px rgba(241,239,233,.12);
}
:root body .gp-vinyl-deck__arm{
  position:absolute;left:104%;top:-3%;z-index:3;display:block;width:3px;height:70%;margin-left:-1.5px;border-radius:2px;
  background:linear-gradient(rgba(241,239,233,.55),rgba(241,239,233,.32));
  transform-origin:50% 0;transform:rotate(-6deg);transition:transform 1100ms var(--ne-ease);
}
:root body .gp-vinyl-deck__head{
  position:absolute;left:50%;bottom:-2px;width:9px;height:16px;margin-left:-4.5px;border-radius:2px;
  background:rgba(241,239,233,.6);transform:rotate(22deg);transform-origin:50% 0;
}
:root body .gp-vinyl-deck__unit.is-playing .gp-vinyl-deck__arm{transform:rotate(15deg);}
:root body .gp-vinyl-deck__unit.is-playing .gp-vinyl-deck__disc{animation-play-state:running;}
:root body .gp-vinyl-deck__unit.is-paused .gp-vinyl-deck__disc{animation-play-state:paused;}
:root body .gp-vinyl-deck__unit.is-swapping .gp-vinyl-deck__arm{transform:rotate(9deg);}
:root body .gp-vinyl-deck__unit.is-swapping :is(.gp-vinyl-deck__label,.gp-vinyl-deck__glow){opacity:0;}
:root body .gp-vinyl-deck__unit.is-swapping .gp-vinyl-deck__now-v{opacity:0;}
:root body .gp-vinyl-deck__now{
  position:absolute;left:-40%;right:-40%;top:100%;margin-top:16px;text-align:center;white-space:nowrap;
  font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-muted);
}
:root body .gp-vinyl-deck__now-v{color:var(--ne-text-2);transition:opacity 520ms var(--ne-ease);}

/* Catalogue strip: every record's catalogue number, drifting left. */
:root body .gp-vinyl-ticker{
  overflow:hidden;padding:18px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);
}
:root body .gp-vinyl-ticker__track{display:flex;width:max-content;animation:gp-vinyl-ticker 70s linear infinite;}
:root body .gp-vinyl-ticker__set{display:flex;flex:none;}
:root body .gp-vinyl-ticker__item{
  display:inline-flex;align-items:center;gap:26px;padding-right:26px;white-space:nowrap;
  font-size:var(--ne-fs-meta);letter-spacing:var(--ne-track-meta);text-transform:uppercase;color:var(--ne-muted);
}
:root body .gp-vinyl-ticker__cat{color:var(--ne-text-2);margin-right:-14px;}
:root body .gp-vinyl-ticker__item::after{content:"";width:5px;height:5px;border-radius:50%;background:var(--ne-red-text);opacity:.85;}
@keyframes gp-vinyl-ticker{to{transform:translateX(-50%);}}

@media (max-width:760px){
  :root body .gp-vinyl-deck__frame{grid-template-columns:minmax(0,1fr);padding-top:16px;}
  :root body .gp-vinyl-deck__unit{grid-column:1;align-self:start;width:124px;margin-right:22px;}
  :root body .gp-vinyl-deck__now{display:none;}
  :root body .gp-vinyl-deck__glow{filter:blur(36px) saturate(1.6);}
  :root body .gp-vinyl-ticker{padding:12px 0;}
}
@media (prefers-reduced-motion:reduce){
  :root body .gp-vinyl-deck__disc{animation:none;}
  :root body .gp-vinyl-deck__arm{transform:rotate(15deg);transition:none;}
  :root body .gp-vinyl-ticker__track{animation:none;}
  :root body .gp-vinyl__halo{animation:none;}
  :root body .gp-vinyl__sleeve:is(:hover,:focus-visible) .gp-vinyl__disc img{animation:none;}
}
