:root{
  --ink:#0b0b0b;
  --panel:#161616;
  --line:#262626;
  --line-strong:#4a4a46;
  --text:#edebe6;
  --muted:#8c8c86;
  --bone:#edebe6;
  --on-bone:#0b0b0b;
  --on-bone-muted:#55554f;
  --gutter:clamp(20px,5.6vw,80px);
  --font:"helvetica-neue-lt-pro","Helvetica Neue",Helvetica,Arial,sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:88px}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
body{margin:0;background:var(--ink);color:var(--text);font-family:var(--font);font-size:17px;line-height:1.5;-webkit-font-smoothing:antialiased}
body.has-player{padding-bottom:190px}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
a:hover{color:#fff}
h1,h2,h3,p,ul{margin:0}
ul{padding:0;list-style:none}
:focus-visible{outline:2px solid var(--text);outline-offset:3px}
.skip{position:absolute;left:-999px;top:8px;background:var(--bone);color:var(--ink);padding:10px 16px;z-index:100;border-radius:4px}
.skip:focus{left:8px}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.meta{color:var(--muted);font-size:15px}

/* nav */
.nav{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:0 var(--gutter);height:88px;position:sticky;top:0;z-index:60;background:var(--ink);border-bottom:1px solid transparent}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.nav{background:rgba(11,11,11,.82);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}}
.nav.is-scrolled{border-bottom-color:var(--line)}
@media (prefers-reduced-motion:no-preference){.nav{transition:border-color .3s ease}}
.nav__logo{font-weight:700;font-size:32px;letter-spacing:-.05em;line-height:1}
.nav__links{display:flex;gap:40px;font-size:14px;letter-spacing:.02em}
.nav__links a{position:relative;color:rgba(237,235,230,.72)}
.nav__links a::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:1px;background:#fff;transform:scaleX(0);transform-origin:left}
.nav__links a:hover,.nav__links a:focus-visible{color:#fff}
.nav__links a:hover::after,.nav__links a:focus-visible::after{transform:scaleX(1)}
@media (prefers-reduced-motion:no-preference){
  .nav__links a{transition:color .2s ease}
  .nav__links a::after{transition:transform .25s ease}
}
.nav__toggle{display:none;background:none;border:1px solid var(--line-strong);color:var(--text);font:inherit;font-size:14px;padding:0 18px;height:44px;border-radius:999px;cursor:pointer}

/* hero */
.hero{position:relative;overflow:hidden;background:var(--panel);min-height:clamp(620px,52vw,760px);display:flex}
.hero__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 33%}
.hero__shade{position:absolute;inset:0;background:rgba(11,11,11,.3)}
/* Slow, hypnotic push-in on the hero photo. Off when the visitor asks for reduced motion. */
@media (prefers-reduced-motion:no-preference){
  .hero__img{transform-origin:60% 38%;animation:hero-drift 40s ease-in-out infinite alternate;will-change:transform}
}
@keyframes hero-drift{from{transform:scale(1)}to{transform:scale(1.07)}}
.hero__inner{position:relative;width:100%;padding:clamp(20px,2.8vw,40px) var(--gutter) clamp(24px,4.4vw,64px);display:flex;flex-direction:column;justify-content:space-between}
.hero__socials{color:var(--text)}
.hero__row{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}
.wordmark{font-weight:700;font-size:clamp(88px,16.1vw,232px);line-height:.8;letter-spacing:-.06em;padding-bottom:.02em}
.latest{display:flex;align-items:center;gap:24px;background:rgba(11,11,11,.74);padding:20px 24px;max-width:100%}
.latest__text{text-align:right;min-width:0}
.latest__text .meta{color:#b5b5ae}
.latest__title{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2;margin:4px 0}

/* buttons and links */
.play{width:72px;height:72px;border-radius:50%;border:0;background:var(--bone);color:var(--ink);display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;padding:0}
.play svg{margin-left:3px}
.play--sm{width:52px;height:52px;background:transparent;color:var(--text);border:1px solid var(--line-strong)}
.play--sm:hover{background:var(--bone);color:var(--ink)}
.link{display:inline-block;background:none;border:0;border-bottom:1px solid var(--text);color:var(--text);font:inherit;font-size:14px;font-weight:500;padding:0 0 2px;cursor:pointer;line-height:1.5}
.link--quiet{border-bottom-color:var(--line-strong)}
.link:hover{border-bottom-color:#fff}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 30px;border:0;border-radius:999px;background:var(--bone);color:var(--ink);font:inherit;font-weight:700;font-size:16px;cursor:pointer}
.btn:hover{background:#fff;color:var(--ink)}

/* sections */
.section{padding:clamp(64px,8.5vw,120px) var(--gutter)}
.section--rule{border-top:1px solid var(--line)}
.section__title{font-weight:700;font-size:clamp(44px,5vw,72px);line-height:.95;letter-spacing:-.05em}
.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:48px 24px;margin-top:48px}
.release{display:flex;flex-direction:column;gap:18px}
.release h3{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2}
.release .meta{margin-top:6px}
.actions{margin-top:14px;display:flex;gap:24px;flex-wrap:wrap}
.cover{aspect-ratio:1/1;background:var(--panel);border:1px solid var(--line);overflow:hidden}
.cover img{width:100%;height:100%;object-fit:cover}
.more{margin-top:48px}
.more summary{cursor:pointer;font-size:14px;font-weight:500;display:inline-block;border-bottom:1px solid var(--line-strong);padding-bottom:2px}
.more .grid{margin-top:32px}
.more .rows{margin-top:24px}
.empty{color:var(--muted);margin-top:24px}

.split{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:24px;row-gap:32px}
.split__head{grid-column:span 4}
.split__body{grid-column:6 / span 7}
.rows{border-top:1px solid var(--line)}
.row{display:grid;align-items:center;column-gap:24px;padding:26px 0;border-bottom:1px solid var(--line)}
.row h3{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2}
.row .meta{margin-top:6px}
.row--mix{grid-template-columns:1fr auto 52px}
.row__len{text-align:right}
.row--show{grid-template-columns:130px 1fr auto}
.show__date{font-weight:700}
.statement{font-size:clamp(26px,2.4vw,32px);font-weight:700;letter-spacing:-.03em;line-height:1.1;margin-bottom:16px}

/* about */
.about{background:var(--bone);color:var(--on-bone);padding:clamp(64px,8.5vw,120px) var(--gutter)}
.about__inner{max-width:1080px}
.about__lead{font-weight:700;font-size:clamp(32px,3.9vw,56px);line-height:1.06;letter-spacing:-.04em}
.about__more{margin-top:24px;font-size:19px;color:var(--on-bone-muted);max-width:640px}

/* contact */
.rows--contact .row{grid-template-columns:150px 1fr}
.email{font-size:clamp(18px,2.1vw,30px);font-weight:700;letter-spacing:-.03em;overflow-wrap:anywhere}
.press{margin-top:28px}
.form__title{font-size:22px;font-weight:700;letter-spacing:-.01em;margin:56px 0 20px}
.form{display:flex;flex-direction:column;gap:18px;max-width:640px}
.form__grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.form label{display:flex;flex-direction:column;gap:8px;font-size:14px;font-weight:500;color:var(--muted)}
.form input,.form textarea{font:inherit;font-size:17px;color:var(--text);background:var(--panel);border:1px solid var(--line-strong);border-radius:4px;padding:13px 14px;width:100%}
.form textarea{resize:vertical}
.form .btn{align-self:flex-start}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.notice{padding:14px 18px;border-radius:4px;margin-bottom:18px;max-width:640px;font-size:16px}
.notice--ok{background:#1b2a1f;border:1px solid #2f5a3a;color:#cfe8d5}
.notice--err{background:#2c1a1a;border:1px solid #6a2f2f;color:#f1d3d3}

/* scroll reveal (classes are added by site.js only when motion is welcome) */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}
.reveal.is-in{opacity:1;transform:none}
.grid .reveal:nth-child(2),.rows .reveal:nth-child(2){transition-delay:.1s}
.grid .reveal:nth-child(3),.rows .reveal:nth-child(3){transition-delay:.2s}
.rows .reveal:nth-child(4){transition-delay:.3s}
.rows .reveal:nth-child(5){transition-delay:.4s}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}}

/* footer */
.footer{border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap;padding:48px var(--gutter);color:var(--muted);font-size:14px}
.footer a:hover{color:#fff}

/* social icons (hero and footer) */
.socials{display:flex;gap:24px;flex-wrap:wrap;list-style:none;margin:0;padding:0}
.socials a{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;margin:-11px}
.socials a:hover,.socials a:focus-visible{color:var(--brand,#fff)}
@media (prefers-reduced-motion:no-preference){.socials a{transition:color .2s ease}}
/* Brand colors from Simple Icons. TikTok's is black, so it uses the cyan from its logo instead. */
.social--bandcamp{--brand:#408294}
.social--soundcloud{--brand:#ff5500}
.social--tiktok{--brand:#25f4ee}
.social--instagram{--brand:#ff0069}
.social--mixcloud{--brand:#8c66ff} /* lighter than the official #5000ff so it stays visible on black */
.social--spotify{--brand:#1ed760}
.social--beatport{--brand:#01ff95}

/* player bar */
.player{position:fixed;left:0;right:0;bottom:0;background:var(--ink);border-top:1px solid var(--line-strong);z-index:50;padding:12px var(--gutter) 16px}
.player[hidden]{display:none}
.player__bar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:10px}
.player__title{font-size:14px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.player__close{background:none;border:0;border-bottom:1px solid var(--line-strong);color:var(--text);font:inherit;font-size:14px;cursor:pointer;padding:0 0 2px;flex-shrink:0}
.player iframe{width:100%;height:120px;border:0;display:block}

@media (max-width:820px){
  body{font-size:16px}
  html{scroll-padding-top:64px}
  .nav{height:64px}
  .nav__logo{font-size:28px}
  .js .nav__toggle{display:block}
  .nav__links{gap:24px;flex-wrap:wrap;font-size:14px}
  .js .nav__links{display:flex;visibility:hidden;opacity:0;pointer-events:none;position:absolute;left:0;right:0;top:64px;background:var(--ink);padding:8px var(--gutter) 24px;flex-direction:column;gap:0;z-index:40;border-bottom:1px solid var(--line)}
  .js .nav__links.is-open{visibility:visible;opacity:1;pointer-events:auto}
  .js .nav__links a{padding:14px 0;border-top:1px solid var(--line);font-size:18px}
  .js .nav__links a::after{display:none}
  .hero{min-height:620px}
  .hero__row{flex-direction:column;align-items:stretch;gap:20px}
  .latest{justify-content:space-between;padding:14px 16px;gap:16px}
  .latest__text{text-align:left}
  .latest__title{font-size:17px}
  .play{width:60px;height:60px}
  .grid{grid-template-columns:1fr;gap:28px;margin-top:28px}
  .release{display:grid;grid-template-columns:92px minmax(0,1fr);gap:16px;align-items:center}
  .release h3{font-size:17px}
  .release .meta{font-size:14px;margin-top:2px}
  .actions{margin-top:8px;gap:20px}
  .split{grid-template-columns:1fr}
  .split__head,.split__body{grid-column:auto}
  .row{padding:18px 0}
  .row h3{font-size:18px}
  .row--mix{grid-template-columns:1fr 52px}
  .row__len{display:none}
  .row--show{grid-template-columns:1fr auto;row-gap:4px}
  .show__date{grid-column:1 / -1}
  .rows--contact .row{grid-template-columns:1fr;row-gap:6px}
  .form__grid{grid-template-columns:1fr}
  .footer{padding:32px var(--gutter) 48px;flex-direction:column;align-items:flex-start}
  body.has-player{padding-bottom:200px}
}

/* ------------------------------------------------------------------
   Apple-style polish (see CLAUDE.md > Style)
   ------------------------------------------------------------------ */

/* Press feedback: react the instant a control is pressed, not on release. */
.play:active,.btn:active,.link:active,.player__close:active,.nav__toggle:active,.more summary:active,.socials a:active,.nav__links a:active{transform:scale(.97)}
@media (prefers-reduced-motion:no-preference){
  .play,.btn,.link,.player__close,.nav__toggle,.more summary{transition:transform .1s ease-out}
  .socials a{transition:color .2s ease,transform .1s ease-out}
  .nav__links a{transition:color .2s ease,transform .1s ease-out}
}
@media (prefers-reduced-motion:reduce){
  .play:active,.btn:active,.link:active,.player__close:active,.nav__toggle:active,.more summary:active,.socials a:active,.nav__links a:active{transform:none;opacity:.7}
}

/* Wayfinding: the nav link for the section on screen stays lit. */
.nav__links a[aria-current]{color:#fff}
.nav__links a[aria-current]::after{transform:scaleX(1)}

/* Player: slides up from the bottom and back down the same path, in the same frosted material as the nav. */
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .player{background:rgba(11,11,11,.82);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
}
@media (prefers-reduced-motion:no-preference){
  .player{transform:translateY(100%);transition:transform .35s cubic-bezier(.8,0,.8,.2)}
  .player.is-open{transform:none;transition:transform .45s cubic-bezier(.2,.8,.2,1)}
}
@media (prefers-reduced-motion:reduce){
  .player{opacity:0;transition:opacity .2s ease}
  .player.is-open{opacity:1}
}

/* System settings: reduce transparency makes the bars solid; increase contrast strengthens lines and grey text. */
@media (prefers-reduced-transparency:reduce){
  .nav,.player{background:var(--ink);-webkit-backdrop-filter:none;backdrop-filter:none}
}
@media (prefers-contrast:more){
  :root{--line:#6a6a66;--line-strong:#9a9a94;--muted:#c4c2bc}
  .nav__links a{color:#fff}
  .nav,.player{background:var(--ink);-webkit-backdrop-filter:none;backdrop-filter:none}
}

/* Now playing: the play button for the current track shows level bars (decorative, not audio-reactive). */
.eq{display:none;align-items:flex-end;gap:3px;height:18px}
.eq i{display:block;width:3px;height:100%;background:currentColor;border-radius:1px;transform-origin:bottom;transform:scaleY(.5)}
.eq i:nth-child(2){transform:scaleY(.9)}
.eq i:nth-child(3){transform:scaleY(.65)}
.play--sm .eq{height:13px;gap:2px}
.play--sm .eq i{width:2px}
.play.is-playing svg{display:none}
.play.is-playing .eq{display:flex}
.play--sm.is-playing{background:var(--bone);color:var(--ink);border-color:var(--bone)}
@media (prefers-reduced-motion:no-preference){
  .is-playing .eq i{animation:eq-level 1s ease-in-out infinite alternate}
  .is-playing .eq i:nth-child(2){animation-duration:.8s;animation-delay:-.4s}
  .is-playing .eq i:nth-child(3){animation-duration:1.2s;animation-delay:-.7s}
}
@keyframes eq-level{from{transform:scaleY(.3)}to{transform:scaleY(1)}}

/* Phone menu: unfolds down out of the nav bar and folds back up into it along the same path. */
@media (max-width:820px) and (prefers-reduced-motion:no-preference){
  .js .nav__links{clip-path:inset(0 0 100% 0);transition:clip-path .3s cubic-bezier(.8,0,.8,.2),opacity .3s ease,visibility 0s linear .3s}
  .js .nav__links.is-open{clip-path:inset(0 0 0 0);transition:clip-path .45s cubic-bezier(.2,.8,.2,1),opacity .2s ease,visibility 0s}
}
@media (max-width:820px) and (prefers-reduced-motion:reduce){
  .js .nav__links{transition:opacity .2s ease,visibility 0s linear .2s}
  .js .nav__links.is-open{transition:opacity .2s ease,visibility 0s}
}
