/* STAFF: a record wall hung inside the shop. Every surface is a photographed material: the shop room, printed
   sleeves, LPs, paper for anything you read, brushed metal for the deck. See img/CREDITS.txt. */
@font-face{font-family:"Newsreader";src:url(fonts/newsreader.woff2) format("woff2");font-weight:400 700;font-style:normal;font-display:swap}
@font-face{font-family:"Newsreader";src:url(fonts/newsreader-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Schibsted Grotesk";src:url(fonts/schibsted.woff2) format("woff2");font-weight:400 800;font-display:swap}
:root{
  --wall:#120f0c; --cream:#ece3d2; --dim:rgba(236,227,210,.58); --faint:rgba(236,227,210,.14);
  --ink:#1d1914; --ink2:rgba(29,25,20,.62); --rule:rgba(29,25,20,.16);
  --sig:#e0532b; --red:#b8361c; --led:#ffb85a;
  --serif:"Newsreader","Noto Serif JP","Noto Sans JP","Noto Sans KR",Georgia,serif;
  --f:"Schibsted Grotesk","Helvetica Neue","Noto Sans JP","Noto Sans KR",Arial,sans-serif;
  --paper:url(img/paper.jpg);
  /* physical edges: cut cardboard edge, a thin rim catching the light, a soft contact shadow */
  --edge-card:0 0 0 1px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,248,232,.22),inset 0 0 0 1px rgba(255,248,232,.07);
  --edge-paper:inset 0 0 0 1px rgba(255,255,255,.35),inset 0 -2px 0 rgba(120,100,70,.18),0 0 0 1px rgba(60,46,30,.45);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;background:var(--wall);color:var(--cream);font:400 13px/1.4 var(--f);-webkit-tap-highlight-color:transparent;overscroll-behavior:none;-webkit-font-smoothing:antialiased}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:3;transform:translateZ(0);background:radial-gradient(130% 95% at 50% 38%,transparent 50%,rgba(4,3,2,.6))}

/* ---------- the room: the shop's own photo, graded dark ---------- */
.room{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;background:#0d0b09}
.r-img{position:absolute;inset:-2%;background:center 35%/cover no-repeat;opacity:0;transition:opacity 1.4s ease;transform:translateZ(0)}
.r-img.on{opacity:1}
.room::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,8,6,.15) 0%,rgba(10,8,6,.0) 30%,rgba(10,8,6,.55) 62%,rgba(10,8,6,.88) 100%)}
.tint{position:absolute;inset:0;transition:opacity .9s}
.r-name{display:none}
.band{position:absolute;left:0;pointer-events:none;z-index:0;will-change:transform;opacity:.7}
.tags{position:absolute;inset:0;pointer-events:none;z-index:0}
/* Qloo tags as paper stickers stuck to the wall */
.tags span{position:absolute;padding:4px 8px 3px;border-radius:1.5px;font-weight:600;font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink);white-space:nowrap;
  background:var(--paper) 30% 40%/240px auto;box-shadow:var(--edge-paper),1px 3px 6px rgba(0,0,0,.45);opacity:.86}
.tags span.qt{color:var(--red)}
.tags span.qt::before{content:"Qloo · ";color:var(--ink2)}
.hours{position:absolute;left:0;height:22px;pointer-events:none}
.hours b{position:absolute;top:0;transform:translateX(-50%);font-weight:600;font-size:10px;letter-spacing:.06em;color:var(--dim);font-variant-numeric:tabular-nums}
.hours b.h{color:rgba(236,227,210,.82)}
.hours b::before{content:"";position:absolute;left:50%;top:-8px;width:1px;height:5px;background:currentColor;opacity:.7}
.clock-big{font-style:normal;font-variant-numeric:tabular-nums;color:var(--led);font-weight:700;letter-spacing:.02em}

/* ---------- gate ---------- */
#gate{position:fixed;inset:0;z-index:40;background:#0f0c0a;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;transition:opacity .8s,visibility .8s}
#gate.gone{opacity:0;visibility:hidden}
.g-disc{position:relative;width:min(62vw,300px);aspect-ratio:1;border-radius:50%;box-shadow:0 26px 44px rgba(0,0,0,.6)}
.g-disc::before{content:"";position:absolute;inset:0;border-radius:50%;background:url(img/vinyl.webp) center/cover;animation:spin 1.8s linear infinite}
.g-disc::after{content:"";position:absolute;inset:0;border-radius:50%;background:url(img/vinyl-sheen.webp) center/cover;opacity:.9;pointer-events:none}
.g-disc i{position:absolute;inset:32.8%;border-radius:50%;background:var(--paper) center/cover;box-shadow:inset 0 0 0 1px rgba(0,0,0,.3);animation:spin 1.8s linear infinite}
.g-disc i::before{content:"STAFF";position:absolute;left:0;right:0;top:22%;text-align:center;font:800 9px var(--f);letter-spacing:.2em;color:var(--red)}
.g-disc i::after{content:"";position:absolute;left:50%;top:50%;width:5%;height:5%;margin:-2.5% 0 0 -2.5%;border-radius:50%;background:#0f0c0a}
.g-disc b{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;padding-top:22%;font:600 14px var(--f);letter-spacing:.06em;color:var(--ink);font-variant-numeric:tabular-nums}
.g-disc b::after{content:"%"}
.g-line{font-family:var(--serif);font-size:20px;font-style:italic;color:var(--dim)}
.g-btn{display:flex;gap:10px;opacity:0;transform:translateY(8px);transition:.6s;pointer-events:none;flex-wrap:wrap;justify-content:center}
.g-btn.show{opacity:1;transform:none;pointer-events:auto}
.g-btn button{padding:13px 22px;border-radius:3px;background:var(--paper) center/300px auto;color:var(--ink);font-weight:700;letter-spacing:.02em;box-shadow:var(--edge-paper),0 8px 20px rgba(0,0,0,.45)}
.g-btn button+button{background:none;color:var(--dim);box-shadow:inset 0 0 0 1px var(--faint)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- top ---------- */
.top{position:fixed;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;gap:20px;padding:16px 22px;padding-top:max(16px,env(safe-area-inset-top));
  background:linear-gradient(rgba(10,8,6,.72),rgba(10,8,6,0))}
.logo{flex:none;white-space:nowrap;font-weight:800;letter-spacing:.14em;font-size:13px}
.logo span{font-family:var(--serif);font-style:italic;font-weight:400;letter-spacing:0;font-size:15px;color:var(--dim);margin-left:10px}
.shops{position:relative;display:flex;gap:2px;margin-left:auto;min-width:0;flex:0 1 auto;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:4px 2px;scroll-behavior:smooth;--fl:0px;--fr:0px;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 var(--fl),#000 calc(100% - var(--fr)),transparent);mask-image:linear-gradient(90deg,transparent,#000 var(--fl),#000 calc(100% - var(--fr)),transparent)}
.shops::-webkit-scrollbar{display:none}
.shops.fl{--fl:34px}.shops.fr{--fr:34px}
.shops button{flex:0 0 auto;white-space:nowrap}
.shops button{padding:6px 12px 5px;border-radius:2px;color:var(--dim);font-weight:500}
.shops button.on{background:var(--paper) 40% 30%/260px auto;color:var(--ink);font-weight:700;box-shadow:var(--edge-paper),0 2px 6px rgba(0,0,0,.4)}
.shops button:disabled{opacity:.3}
.top-r{display:flex;gap:4px;flex:none;white-space:nowrap}
.top-r button{padding:6px 11px 5px;border-radius:2px;box-shadow:inset 0 0 0 1px var(--faint);font-weight:500}

/* ---------- wall ---------- */
#wall{position:fixed;inset:0;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab;z-index:1}
#wall.drag{cursor:grabbing}
#world{position:absolute;left:0;top:0;height:100%;will-change:transform}
#string{position:absolute;left:0;top:0;height:100%;overflow:visible;pointer-events:none}
.col{position:absolute;top:0;height:100%}
/* sleeve: printed cover on photographed card stock, a cut edge, a thin rim of light, and real weight on the wall */
.sleeve{position:absolute;background:#2a221a center/cover;z-index:2;border-radius:1.5px;
  box-shadow:var(--edge-card),calc(var(--shx,0px)*.25) 3px 3px rgba(0,0,0,.35),var(--shx,0px) 22px 34px -6px rgba(0,0,0,.7)}
.sleeve::before{content:"";position:absolute;right:-3px;top:2px;bottom:-1px;width:3px;border-radius:0 1px 1px 0;background:linear-gradient(90deg,#4a3f33,#2b241d);box-shadow:inset 1px 0 0 rgba(255,240,215,.12)}
.disc{position:absolute;border-radius:50%;z-index:1;will-change:transform;cursor:pointer;background:url(img/vinyl.webp) center/cover;filter:none;
  box-shadow:0 16px 30px rgba(0,0,0,.6),0 2px 4px rgba(0,0,0,.5)}
.disc.cut{background-size:cover!important}
.sheen{position:absolute;border-radius:50%;pointer-events:none;z-index:1;background:url(img/vinyl-sheen.webp) center/cover;opacity:.85}
.col.now .disc{box-shadow:0 16px 30px rgba(0,0,0,.6),0 2px 4px rgba(0,0,0,.5),0 0 0 1px rgba(255,184,90,.25)}
.glow{position:absolute;border-radius:50%;pointer-events:none;z-index:0;background:radial-gradient(closest-side,rgba(255,196,130,.20),rgba(255,196,130,0));opacity:0;will-change:opacity,transform}
.arm{position:absolute;z-index:3;pointer-events:none;opacity:0;transition:opacity .4s;transform-origin:92% 8%;filter:drop-shadow(2px 6px 4px rgba(0,0,0,.45))}
.col.now .arm{opacity:1}
.arm.hop{animation:hop .28s ease-out}
@keyframes hop{30%{translate:0 -3px}}
.txt{position:absolute;left:0;right:0;padding:0 6px}
.txt .idx{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);display:flex;gap:12px;align-items:baseline}
.txt .idx b{color:var(--led);font-weight:700}
.txt .idx .clock-big{font-size:12px}
.txt h2{font-family:var(--serif);font-weight:600;line-height:.98;letter-spacing:-.015em;margin:8px 0 6px;overflow-wrap:anywhere;font-variation-settings:"opsz" 72;text-shadow:0 2px 18px rgba(0,0,0,.5)}
.txt .art{font-family:var(--serif);font-style:italic;font-weight:400;font-size:17px;color:rgba(236,227,210,.86)}
.txt .facts{display:flex;gap:18px;margin-top:14px;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);flex-wrap:wrap}
.txt .facts b{display:block;color:var(--cream);font-weight:600;font-size:16px;letter-spacing:0;font-variant-numeric:tabular-nums}
.join{position:absolute;top:0;bottom:0;width:0;border-left:1px solid rgba(236,227,210,.13)}
.join span{position:absolute;left:8px;font-size:10px;font-weight:600;letter-spacing:.05em;color:rgba(255,184,90,.85);white-space:nowrap}
#ruler{position:absolute;left:0;height:22px}
#ruler i{position:absolute;top:0;width:1px;height:5px;background:rgba(236,227,210,.2)}
#ruler i.b8{height:10px;background:rgba(236,227,210,.55)}
#ruler::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:rgba(236,227,210,.16)}
#ph{position:absolute;top:0;bottom:0;width:0;pointer-events:none;z-index:4}
#ph i{position:absolute;left:-.5px;width:1px;background:linear-gradient(rgba(255,200,120,0),var(--led) 18%,var(--led));box-shadow:0 0 6px rgba(255,170,70,.8),0 0 16px rgba(255,150,60,.35)}
#ph i::after{content:"";position:absolute;left:-3px;bottom:-3px;width:7px;height:7px;border-radius:1px;background:#ffe2b0;box-shadow:0 0 8px rgba(255,170,70,.9)}
#ph.beat i::after{animation:pb .3s ease-out}
#ph.down i::after{animation:pd .5s ease-out}
@keyframes pb{from{box-shadow:0 0 0 0 rgba(255,184,90,.7)}to{box-shadow:0 0 0 8px rgba(255,184,90,0)}}
@keyframes pd{from{box-shadow:0 0 0 0 rgba(255,184,90,.9)}to{box-shadow:0 0 0 20px rgba(255,184,90,0)}}

.to-now{position:fixed;z-index:12;left:50%;bottom:110px;transform:translate(-50%,20px);opacity:0;pointer-events:none;transition:.35s;padding:9px 16px 8px;border-radius:3px;background:var(--paper) center/300px auto;color:var(--ink);font-weight:700;box-shadow:var(--edge-paper),0 8px 20px rgba(0,0,0,.5)}
.to-now.show{opacity:1;transform:translate(-50%,0);pointer-events:auto}

/* ---------- deck: a brushed-metal strip with an LED readout ---------- */
.deck{position:fixed;left:0;right:0;bottom:0;z-index:10;display:flex;align-items:center;gap:18px;padding:16px 22px 14px;padding-bottom:max(14px,env(safe-area-inset-bottom));
  background:url(img/deck-metal.jpg) center/cover,#1b1814;
  box-shadow:inset 0 1px 0 rgba(255,245,225,.16),inset 0 2px 0 rgba(0,0,0,.6),inset 0 -1px 0 rgba(0,0,0,.6),0 -10px 30px rgba(0,0,0,.45)}
.pbtn{position:relative;width:54px;height:54px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 35%,#3a352f,#16130f 70%);box-shadow:0 0 0 1px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,245,225,.22),inset 0 -2px 3px rgba(0,0,0,.6),0 4px 10px rgba(0,0,0,.6)}
.pbtn svg{width:24px;height:24px;fill:var(--led);filter:drop-shadow(0 0 4px rgba(255,170,70,.75))}
.d-now{min-width:0;flex:1;display:flex;flex-direction:column;gap:1px}
.d-now b{font-family:var(--serif);font-weight:600;font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.d-now span{color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px}
/* the readout sits behind smoked glass and is lit from behind */
.d-meta{display:flex;align-items:baseline;gap:8px;font-variant-numeric:tabular-nums;padding:7px 12px 6px;border-radius:3px;
  background:linear-gradient(rgba(255,255,255,.05),rgba(255,255,255,0) 45%),#0b0907;box-shadow:inset 0 1px 3px rgba(0,0,0,.9),inset 0 0 0 1px rgba(0,0,0,.8),0 1px 0 rgba(255,245,225,.1)}
.d-meta .big{font-size:26px;font-weight:600;color:var(--led);letter-spacing:.02em;text-shadow:0 0 8px rgba(255,160,60,.55)}
.d-meta .u{font-size:10px;font-weight:600;letter-spacing:.08em;color:rgba(255,184,90,.6)}
.beats{display:flex;gap:4px;margin:0 6px;align-self:center}
.beats i{width:7px;height:7px;border-radius:1px;background:rgba(255,184,90,.12)}
.beats i.on{background:#ffcf8a;box-shadow:0 0 6px rgba(255,170,70,.8)}.beats i.on.d{background:#ff7a45;box-shadow:0 0 7px rgba(255,110,60,.9)}
.snd{padding:6px 12px 5px;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(236,227,210,.18),0 1px 0 rgba(255,245,225,.06);font-size:12px;font-weight:500}
.snd.off{color:var(--dim)}

/* ---------- live build ---------- */
.any{background:var(--paper) center/260px auto!important;color:var(--ink);font-weight:700;box-shadow:var(--edge-paper)!important}
.build{position:fixed;z-index:11;left:50%;top:70px;transform:translate(-50%,-10px);opacity:0;pointer-events:none;transition:.4s;display:flex;align-items:center;gap:10px;padding:8px 9px 8px 13px;border-radius:3px;
  background:var(--paper) center/320px auto;color:var(--ink);box-shadow:var(--edge-paper),0 10px 26px rgba(0,0,0,.5);max-width:92vw;white-space:nowrap}
.build.show{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.build span{overflow:hidden;text-overflow:ellipsis;font-weight:500}
.build b{color:var(--red);font-variant-numeric:tabular-nums}
.spin{width:16px;height:16px;border-radius:50%;flex:none;background:url(img/vinyl.webp) center/cover;animation:spin 1s linear infinite}
.build.idle .spin{display:none}
.b-hang{display:none;padding:5px 10px 4px;border-radius:2px;background:var(--ink);color:var(--cream);font-weight:700}
.build.has .b-hang{display:block}
.empty{position:fixed;inset:0;z-index:2;display:none;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px;pointer-events:none}
.empty.show{display:flex}
.empty h2{font-family:var(--serif);font-weight:600;font-size:clamp(40px,7vw,88px);line-height:.95;max-width:14ch;letter-spacing:-.02em}
.empty p{color:var(--dim);margin-top:14px}
.col.fresh .sleeve,.col.fresh .disc{animation:hang .9s cubic-bezier(.2,1.4,.4,1) both}
@keyframes hang{from{translate:0 -60vh}}
.q{width:100%;padding:13px 14px;border-radius:2px;border:0;background:rgba(255,255,255,.35);color:var(--ink);font:500 16px var(--f);outline:none;box-shadow:inset 0 1px 3px rgba(60,46,30,.35),inset 0 0 0 1px rgba(60,46,30,.3)}
.q::placeholder{color:rgba(29,25,20,.42)}
.q:focus{box-shadow:inset 0 1px 3px rgba(60,46,30,.35),inset 0 0 0 1px var(--red)}
.places{list-style:none;margin-top:14px}
.places li{display:grid;grid-template-columns:56px 1fr;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--rule);cursor:pointer}
.places li img,.places li .ph{width:56px;height:56px;border-radius:1.5px;object-fit:cover;background:#cfc3ac;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 3px 6px rgba(60,46,30,.35)}
.places li b{display:block;font-family:var(--serif);font-weight:600;font-size:16px}
.places li span{color:var(--ink2);font-size:12px}
.places .hint{color:var(--ink2);padding:12px 0;border:0;display:block;font-style:italic;font-family:var(--serif);font-size:15px}
#artists li .st{display:block;font-size:10px;color:var(--red);font-weight:500;font-family:var(--f);font-style:normal;letter-spacing:.04em}

/* ---------- sheets: printed paper inserts ---------- */
.sheet{position:fixed;z-index:20;top:0;bottom:0;right:0;width:min(440px,100vw);color:var(--ink);background:var(--paper) center/cover,#e9dfcc;
  box-shadow:inset 1px 0 0 rgba(255,255,255,.45),inset 3px 0 0 rgba(120,100,70,.18),-1px 0 0 rgba(40,30,20,.6),-24px 0 60px rgba(0,0,0,.55);
  padding:26px;padding-top:max(26px,env(safe-area-inset-top));overflow-y:auto;transform:translateX(105%);transition:transform .55s cubic-bezier(.7,0,.2,1)}
.sheet.open{transform:none}
.sh-h{position:relative;margin-bottom:22px;padding-bottom:16px;border-bottom:2px solid var(--ink)}
.sh-h h3{font-family:var(--serif);font-weight:600;font-size:38px;line-height:1;letter-spacing:-.02em}
.sh-h p{color:var(--ink2);margin-top:8px;max-width:32ch;font-size:13px}
.x{position:absolute;right:0;top:0;padding:6px 11px 5px;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(29,25,20,.35);font-weight:600}
#artists{list-style:none}
#artists li{display:grid;grid-template-columns:44px 1fr auto;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--rule);cursor:pointer;transition:opacity .3s}
#artists li img,#artists li .ph{width:44px;height:44px;object-fit:cover;border-radius:50%;background:#cfc3ac;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 2px 5px rgba(60,46,30,.35)}
#artists li .nm{font-family:var(--serif);font-weight:600;font-size:16px}
#artists li .nm i{display:block;font-style:italic;font-weight:400;color:var(--ink2);font-size:12px}
#artists li .af{font-variant-numeric:tabular-nums;color:var(--red);font-weight:700}
#artists li.out{opacity:.3}#artists li.out .nm{text-decoration:line-through}
.dials{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 8px}
.dial{display:flex;flex-direction:column;align-items:center;gap:2px;touch-action:none;cursor:ns-resize;user-select:none}
.dial svg{width:120px;height:120px;filter:drop-shadow(0 4px 6px rgba(60,46,30,.35))}
.dial .lab{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2)}
.curve-svg{width:100%;height:70px;margin:20px 0}
.write{width:100%;padding:14px;border-radius:2px;background:var(--ink);color:var(--cream);font-weight:700;letter-spacing:.03em;box-shadow:0 1px 0 rgba(255,255,255,.4),0 6px 14px rgba(29,25,20,.3)}

@media (max-width:760px){
  .top{padding:12px 14px;gap:8px;flex-wrap:wrap}
  .logo span{display:none}
  .shops{order:3;margin:0;width:100%}
  .top-r{margin-left:auto}
  .deck{gap:12px;padding:14px 14px 10px;padding-bottom:max(10px,env(safe-area-inset-bottom))}
  .pbtn{width:46px;height:46px}
  .d-meta .u:not(:nth-of-type(1)),.clock,.beats{display:none}
  .d-meta{padding:6px 9px 5px}
  .d-meta .big{font-size:21px}
  .d-now b{font-size:15px}
  .snd{display:none}
  .build{top:98px}
  .top-r button{padding:6px 8px 5px}
  .to-now{bottom:88px}
}

/* ---------- light of the hour ---------- */
.day-chip{position:fixed;z-index:11;left:22px;top:54px;display:flex;align-items:center;gap:7px;font-weight:600;letter-spacing:.06em;font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums}
.day-chip i{width:7px;height:7px;border-radius:50%;box-shadow:0 0 8px currentColor}
#wall.scr{cursor:grabbing}
.col.now .disc{cursor:grab}
.col.drop .sleeve,.col.drop .disc,.col.drop .sheen{animation:drop 1s cubic-bezier(.2,1.25,.35,1) var(--d,0s) both}
@keyframes drop{from{translate:0 -110vh;rotate:-8deg}}
@media (max-width:760px){.day-chip{top:auto;bottom:98px;left:16px}}

/* ---------- split: same brand, different crowd ---------- */
.split{position:fixed;inset:0;z-index:30;pointer-events:none;display:none}
.split.show{display:block;pointer-events:auto}
.sp-half{position:absolute;top:0;bottom:0;width:50%;background:var(--paper) center/cover,#e9dfcc;color:var(--ink);display:flex;flex-direction:column;justify-content:center;padding:0 5vw;transition:transform .8s cubic-bezier(.7,0,.2,1)}
.sp-l{left:0;padding-right:max(15vw,170px);align-items:flex-end;text-align:right;box-shadow:inset -1px 0 0 rgba(40,30,20,.5),inset -3px 0 0 rgba(255,255,255,.3);animation:spL .7s cubic-bezier(.2,.9,.2,1) both}
.sp-r{right:0;padding-left:max(15vw,170px);align-items:flex-start;background:var(--paper) 70% 30%/cover,#e2d7c2;filter:brightness(.95);animation:spR .7s cubic-bezier(.2,.9,.2,1) both}
@keyframes spL{from{transform:translateX(-100%)}}@keyframes spR{from{transform:translateX(100%)}}
.split.part .sp-l{transform:translateX(-101%)}.split.part .sp-r{transform:translateX(101%)}
.split.part .sp-seam{opacity:0;transform:translate(-50%,-50%) scale(.8)}
.sp-half h3{font-family:var(--serif);font-weight:600;font-size:clamp(44px,6vw,100px);line-height:.92;letter-spacing:-.025em;margin:6px 0 10px}
.sp-k{font-size:10px;font-weight:600;color:var(--ink2);letter-spacing:.08em;text-transform:uppercase}
.sp-n{font-size:13px;color:var(--ink2)}.sp-n b{color:var(--ink);font-size:18px}
.sp-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px;max-width:340px}
.sp-l .sp-tags{justify-content:flex-end}
.sp-tags span{padding:4px 8px 3px;border-radius:1.5px;box-shadow:inset 0 0 0 1px rgba(29,25,20,.35);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.sp-fan{position:relative;width:min(34vw,240px);height:min(26vw,170px);margin-bottom:26px}
.sp-fan i{position:absolute;bottom:0;width:min(20vw,140px);aspect-ratio:1;background:#2a221a center/cover;border-radius:1.5px;box-shadow:var(--edge-card),0 14px 24px rgba(40,30,20,.45);animation:fan .8s cubic-bezier(.2,1.3,.4,1) calc(.25s + var(--i)*.07s) both}
.sp-l .sp-fan i{right:calc(var(--i)*13%);rotate:calc(var(--i)*-5deg)}
.sp-r .sp-fan i{left:calc(var(--i)*13%);rotate:calc(var(--i)*5deg)}
@keyframes fan{from{translate:0 40px;opacity:0;rotate:0deg}}
.sp-seam{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;z-index:2;color:var(--ink);transition:.5s;animation:seam .6s .45s both}
@keyframes seam{from{opacity:0;transform:translate(-50%,-40%)}}
.sp-seam b{display:block;font-family:var(--serif);font-weight:600;font-size:clamp(110px,17vw,220px);line-height:.85;color:var(--red);font-variant-numeric:tabular-nums}
.sp-seam p{font-weight:700;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:4px 8px}
.sp-seam small{display:block;margin-top:8px;font-family:var(--serif);font-style:italic;font-size:15px;color:var(--ink2);padding:2px 8px}
@media (max-width:760px){.sp-half{width:100%;height:50%;padding:0 22px!important}.sp-l{top:0;bottom:auto;align-items:flex-start;text-align:left;animation-name:spT;box-shadow:inset 0 -1px 0 rgba(40,30,20,.5)}.sp-r{top:auto;bottom:0;animation-name:spB}.sp-l .sp-tags{justify-content:flex-start}
  @keyframes spT{from{transform:translateY(-100%)}}@keyframes spB{from{transform:translateY(100%)}}
  .split.part .sp-l{transform:translateY(-101%)}.split.part .sp-r{transform:translateY(101%)}
  .sp-half h3{font-size:50px}.sp-fan{height:90px;margin-bottom:12px}.sp-fan i{width:80px}.sp-l .sp-fan i{right:auto;left:calc(var(--i)*13%)}
  .sp-seam{left:auto;right:18px;transform:translateY(-50%);text-align:right}.sp-seam b{font-size:110px}@keyframes seam{from{opacity:0}}}

/* ---------- sleeve back: opens and closes on transform/opacity only ---------- */
.back{position:fixed;inset:0;z-index:28;display:none;perspective:1600px}
.back.show{display:block}
.bk-scrim{position:absolute;inset:0;background:rgba(8,6,5,.74);opacity:0;transition:opacity .5s;will-change:opacity}
.back.lit .bk-scrim{opacity:1}
.bk-card{position:absolute;transform-origin:0 0;transition:transform .6s cubic-bezier(.3,.9,.2,1);transform-style:preserve-3d;will-change:transform}
.bk-front,.bk-rear{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:transform .6s cubic-bezier(.3,.9,.2,1);border-radius:2px}
.bk-front{background:#2a221a center/cover;box-shadow:var(--edge-card),0 24px 44px rgba(0,0,0,.55)}
.bk-rear{transform:rotateY(180deg);background:var(--paper) center/cover,#e9dfcc;color:var(--ink);box-shadow:var(--edge-paper),0 24px 44px rgba(0,0,0,.55);overflow:hidden}
.bk-in{position:absolute;inset:0;padding:22px 24px;display:flex;flex-direction:column;gap:12px;overflow:auto}
.bk-card.flip .bk-front{transform:rotateY(-180deg)}.bk-card.flip .bk-rear{transform:rotateY(0)}
.bk-h{display:flex;justify-content:space-between;font-weight:700;font-size:10px;letter-spacing:.08em;border-bottom:2px solid var(--ink);padding-bottom:8px}
.bk-rear h3{font-family:var(--serif);font-weight:600;font-size:40px;line-height:.95;letter-spacing:-.02em;overflow-wrap:anywhere}
.bk-a{font-family:var(--serif);font-style:italic;font-size:18px;margin-top:-6px;color:var(--ink2)}
.bk-why b,.bk-when b{display:block;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--red);margin-bottom:3px}
.bk-why p,.bk-when p{font-size:13px;line-height:1.5}
.bk-why em{font-style:normal;font-weight:700;color:var(--red)}
.bk-code svg{display:block;width:100%;height:44px;opacity:.88}
.bk-code span{font-size:10px;letter-spacing:.04em;opacity:.6}
.bk-f{display:flex;gap:8px;margin-top:auto}
.bk-f button{padding:9px 14px 8px;border-radius:2px;font-weight:700;background:var(--ink);color:var(--cream)}
.bk-f button+button{background:none;color:var(--ink);box-shadow:inset 0 0 0 1px rgba(29,25,20,.45)}

/* ---------- poster ---------- */
.poster{position:fixed;inset:0;z-index:29;display:none;background:rgba(8,6,5,.86);align-items:center;justify-content:center}
.poster.show{display:flex}
.po-in{display:flex;flex-direction:column;align-items:center;gap:14px;max-height:92vh;padding:16px}
.po-in img{max-height:78vh;max-width:92vw;border-radius:1px;box-shadow:0 0 0 1px rgba(0,0,0,.5),0 30px 70px rgba(0,0,0,.7);animation:press .7s cubic-bezier(.2,1.2,.4,1)}
@keyframes press{from{transform:scale(.6) rotate(-6deg);opacity:0}}
.po-wait{font-family:var(--serif);font-style:italic;font-size:18px;color:var(--dim)}
.po-b{display:flex;gap:8px}
.po-b button,.po-b a{padding:9px 16px 8px;border-radius:2px;font-weight:700;background:var(--paper) center/300px auto;color:var(--ink);text-decoration:none;font-size:13px;box-shadow:var(--edge-paper)}
.po-b #poX{background:none;color:var(--cream);box-shadow:inset 0 0 0 1px var(--faint)}

/* ---------- motion ---------- */
#cols{transform-origin:50% 40%;will-change:transform}
.txt h2 .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.08em;margin-bottom:-.08em}
.txt h2 .c{display:inline-block;transform:translate3d(0,108%,0) rotate(6deg);transition:transform .9s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i)*14ms)}
.col.in .txt h2 .c{transform:none}
.txt>*:not(h2){transition:transform .8s cubic-bezier(.16,1,.3,1) calc(var(--j)*60ms),opacity .8s calc(var(--j)*60ms);transform:translateY(14px);opacity:.0}
.col.in .txt>*:not(h2){transform:none;opacity:1}
.col .join span{transition:opacity .6s,letter-spacing .8s cubic-bezier(.16,1,.3,1);opacity:.35;letter-spacing:.2em}
.col.in .join span{opacity:1;letter-spacing:.05em}
#gate.leaving{background:transparent;transition:background .6s}
#gate.leaving>*:not(.g-disc){opacity:0;transform:translateY(16px);transition:.4s}
.g-disc.fly{transition:transform 1s cubic-bezier(.7,0,.2,1),opacity .4s;pointer-events:none}
.g-disc.fly.land{opacity:0}
.g-disc.fly b{opacity:0}
/* cursor */
body.has-cursor,body.has-cursor *{cursor:none!important}
#cursor{position:fixed;left:0;top:0;z-index:100;pointer-events:none}
#cursor i{position:absolute;left:-5px;top:-5px;width:10px;height:10px;border-radius:50%;background:var(--cream);box-shadow:0 0 0 1px rgba(0,0,0,.35);transition:transform .35s cubic-bezier(.16,1,.3,1),background .3s}
#cursor span{position:absolute;left:0;top:0;transform:translate(-50%,-50%) scale(.4);opacity:0;font-weight:700;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink);transition:.35s cubic-bezier(.16,1,.3,1)}
#cursor.lab i{transform:scale(7.6);background:#e9dfcc}
#cursor.lab span{opacity:1;transform:translate(-50%,-50%) scale(1)}
#cursor.btn i{transform:scale(3.2);background:rgba(236,227,210,.25)}
#cursor.down i{transform:scale(.6)}
#cursor.lab.down i{transform:scale(6.4)}
.top button,.deck button{transition:transform .4s cubic-bezier(.16,1,.3,1),background .2s,color .2s}
/* sheets */
.sheet{transition:transform .7s cubic-bezier(.77,0,.18,1),clip-path .7s cubic-bezier(.77,0,.18,1);clip-path:inset(0 0 0 100%)}
.sheet.open{clip-path:inset(0 0 0 -80px)}
.sheet .sh-h>*,.sheet li,.sheet .dial,.sheet .curve-svg,.sheet .write,.sheet .q{opacity:0;transform:translateY(22px)}
.sheet.open .sh-h>*,.sheet.open li,.sheet.open .dial,.sheet.open .curve-svg,.sheet.open .write,.sheet.open .q{opacity:1;transform:none;transition:opacity .6s calc(.25s + var(--k,0)*35ms),transform .8s cubic-bezier(.16,1,.3,1) calc(.25s + var(--k,0)*35ms)}
.sheet li.out{opacity:.35!important}
/* progress: a recessed slot in the metal, the played part lit amber from behind */
.deck{flex-wrap:wrap}
.prog{position:absolute;left:14px;right:14px;top:-15px;height:30px;touch-action:none;cursor:pointer;z-index:2}
.pr-track{position:absolute;left:0;right:0;top:12px;height:6px;border-radius:3px;overflow:hidden;background:#070605;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.95),0 1px 0 rgba(255,245,225,.14),0 -1px 0 rgba(0,0,0,.6);transition:height .3s cubic-bezier(.16,1,.3,1),top .3s cubic-bezier(.16,1,.3,1)}
.prog:hover .pr-track,.prog.on .pr-track{top:10px;height:10px;border-radius:5px}
#prFill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(#ffd7a0,#ffad4f 45%,#e67a2e);box-shadow:0 0 10px rgba(255,160,60,.65)}
#prFill::after{content:"";position:absolute;inset:0 0 50% 0;background:linear-gradient(rgba(255,255,255,.35),rgba(255,255,255,0))}
#prMarks s{position:absolute;top:0;bottom:0;width:1px;background:rgba(0,0,0,.55);box-shadow:1px 0 0 rgba(255,245,225,.1)}
#prKnob{position:absolute;top:7px;width:16px;height:16px;margin-left:-8px;border-radius:50%;background:radial-gradient(circle at 40% 30%,#f4efe6,#9d978d 70%,#6d675f);box-shadow:0 0 0 1px rgba(0,0,0,.7),0 2px 4px rgba(0,0,0,.7),0 0 10px rgba(255,170,70,.35);transform:scale(.75);transition:transform .3s cubic-bezier(.16,1,.3,1)}
.prog:hover #prKnob,.prog.on #prKnob{transform:scale(1.1)}
#prTip{position:absolute;bottom:32px;transform:translate(-50%,8px);opacity:0;pointer-events:none;white-space:nowrap;background:var(--paper) center/240px auto,#e9dfcc;color:var(--ink);padding:6px 10px 5px;border-radius:2px;font-size:11px;font-weight:500;box-shadow:var(--edge-paper),0 6px 14px rgba(0,0,0,.45);transition:.3s cubic-bezier(.16,1,.3,1)}
#prTip b{margin-right:8px;color:var(--red);font-variant-numeric:tabular-nums}
.prog.on #prTip{opacity:1;transform:translate(-50%,0)}
.ph-h{position:absolute;left:-18px;width:36px;top:0;bottom:-30px;pointer-events:auto;touch-action:none;cursor:ew-resize}
#ph.grab i{box-shadow:0 0 18px var(--led),0 0 2px #fff}
#ph.grab i::after{transform:scale(1.6)}
@media (prefers-reduced-motion:reduce){.txt h2 .c,.txt>*{transform:none!important;opacity:1!important}}

.disc,.sleeve{backface-visibility:hidden}
/* ---------- motion II ---------- */
.rip{position:absolute;border-radius:50%;pointer-events:none;z-index:1;border:1px solid rgba(255,190,110,.4);animation:rip 1.4s cubic-bezier(.1,.6,.3,1) forwards}
@keyframes rip{from{transform:scale(.55);opacity:.8}to{transform:scale(1.5);opacity:0}}
.rip.hit{border:2px solid rgba(255,184,90,.85);animation:hit .9s cubic-bezier(.05,.7,.25,1) forwards}.rip.h2{border-width:1px;border-color:rgba(236,227,210,.55)}
@keyframes hit{from{transform:scale(.4);opacity:1}to{transform:scale(2.6);opacity:0}}
#wall.thump{animation:thump .45s cubic-bezier(.2,1.6,.4,1)}@keyframes thump{30%{transform:scale(.985)}}
.col.flash .disc{animation:lflash .6s}@keyframes lflash{0%{filter:brightness(1.6)}}
.col{will-change:auto}
@media (max-width:760px){.rip.bar{border-color:rgba(255,190,110,.3)}}
@media (max-width:760px){.bk-in{padding:18px 18px;gap:10px}.bk-rear h3{font-size:34px}.bk-why p,.bk-when p{font-size:12.5px}}
