:root{--panel-width:335px;--edge:30px;--header-height:93px;--fs-xs:10px;--fs-sm:11px;--fs-base:12px;--fs-md:18px;--fs-lg:20px;--title-word-spacing:-.3em;--p:#fff;--p3:#fff;--p4:#111;--bg:#000;--bg2:#0c0c0c;--bg3:#161616;--border:#fff;--glow:0 0 6px #ffffff1f;--ps-yellow:#ece457}[data-theme=clear]{--p:#fff;--p3:#fff;--p4:transparent;--bg:transparent;--bg2:transparent;--bg3:transparent;--border:#fff3;--glow:none}[data-theme=light]{--p:#000;--p3:#000;--p4:#f0f0f0;--bg:#fff;--bg2:#fff;--bg3:#fff;--border:#000;--glow:none}[data-theme=light] body{background:#fff}*,:before,:after{box-sizing:border-box;margin:0;padding:0}button,input,select,textarea{border-radius:0;font-family:inherit}body{background:#000;min-height:100dvh;font-family:IBM Plex Mono,Courier New,monospace}#bg-video{object-fit:cover;z-index:0;opacity:.85;background:url(/poster.png) 50%/cover no-repeat;width:100%;height:100%;position:fixed;top:0;left:0}.float-panel{width:var(--panel-width);background:var(--bg2);z-index:100;border-radius:5px;flex-direction:column;display:flex;position:fixed;overflow:hidden}#headerPanel{top:var(--edge);left:var(--edge);opacity:0;transition:opacity 1.2s}#headerPanel.ready{opacity:1}#playerPanel{top:calc(var(--edge) + var(--header-height) + 20px);left:var(--edge);height:calc(100dvh - var(--edge) - var(--header-height) - 20px - var(--edge));opacity:0;transition:opacity 1.2s}#playerPanel.ready{opacity:1}.resize-handle{z-index:10;position:absolute}.resize-n{cursor:n-resize;height:6px;top:0;left:12px;right:12px}.resize-s{cursor:s-resize;height:6px;bottom:0;left:12px;right:12px}.resize-e{cursor:e-resize;width:6px;top:12px;bottom:12px;right:0}.resize-w{cursor:w-resize;width:6px;top:12px;bottom:12px;left:0}.resize-ne{cursor:ne-resize;width:14px;height:14px;top:0;right:0}.resize-nw{cursor:nw-resize;width:14px;height:14px;top:0;left:0}.resize-se{cursor:se-resize;width:14px;height:14px;bottom:0;right:0}.resize-sw{cursor:sw-resize;width:14px;height:14px;bottom:0;left:0}.sys-header{background:var(--bg3);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 15px;display:flex}.sys-header:active{cursor:grabbing}.sys-wordmark{flex-direction:column;flex-shrink:0;line-height:1.15;display:flex}.wordmark-heat-row{align-items:center;line-height:1;display:flex}.header-logo{background:var(--ps-yellow);flex-shrink:0;width:50px;height:50px;margin-left:-5px;-webkit-mask:url(/ps-logo-transparent.png) 50%/contain no-repeat;mask:url(/ps-logo-transparent.png) 50%/contain no-repeat}.header-logo-mobile{display:none}.sys-wordmark span{letter-spacing:0;word-spacing:var(--title-word-spacing);color:var(--p);text-transform:uppercase;font-size:34px;font-weight:700;line-height:1}.ticker-strip{background:var(--bg2);border-top:1px solid var(--border);height:22px;position:relative;overflow:hidden}.ticker-text{white-space:nowrap;font-size:var(--fs-sm);letter-spacing:.08em;text-transform:uppercase;color:var(--p3);opacity:0;will-change:transform;position:absolute;top:50%;transform:translateY(-50%)}.sys-buttons{align-self:flex-end;align-items:center;gap:14px;display:flex}.theme-btn{color:var(--p);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;transition:color .15s;display:flex}.now-playing{border-bottom:1px solid var(--border);z-index:20;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-shrink:0;padding:15px;position:relative}.now-playing:active{cursor:grabbing}.section-label{font-size:var(--fs-base);color:var(--p3);text-transform:uppercase;margin-bottom:8px}.np-box{border:1px solid var(--border);background:var(--bg);align-items:center;gap:8px;margin-bottom:10px;padding:20px;display:flex;position:relative;overflow:hidden;transform:translateZ(0)}.np-info{flex:1;min-width:0;overflow:hidden}.np-box:before{content:"";background:var(--p);width:3px;box-shadow:var(--glow);position:absolute;top:0;bottom:0;left:0}.np-title{font-size:var(--fs-lg);color:var(--p);text-shadow:var(--glow);white-space:nowrap;text-overflow:clip;word-spacing:var(--title-word-spacing);font-weight:700;line-height:1.1;overflow:hidden}.np-title.scrolling{animation:np-marquee var(--marquee-duration,6s) linear 1s infinite;overflow:visible}@keyframes np-marquee{0%,15%{transform:translate(0)}45%,55%{transform:translateX(var(--marquee-offset,0px))}85%,to{transform:translate(0)}}.np-artist{font-size:var(--fs-sm);color:var(--p);white-space:nowrap;text-overflow:ellipsis;margin-top:3px;overflow:hidden}.np-controls{flex-shrink:0;align-items:center;gap:2px;display:flex}.np-ctrl-btn{width:30px;height:30px}.np-play-btn{width:36px;height:36px;color:var(--p)}.np-play-btn.is-playing{text-shadow:var(--glow)}.scrubber-wrap{flex-direction:column;gap:5px;display:flex}.scrubber-label{font-size:var(--fs-base);color:var(--p3)}.scrubber{appearance:none;background:linear-gradient(to right, var(--p) var(--pct,0%), var(--bg) var(--pct,0%));cursor:pointer;border:1px solid var(--border);outline:none;width:100%;height:8px}.scrubber::-webkit-slider-thumb{-webkit-appearance:none;background:var(--p);cursor:pointer;border:none;border-radius:50%;width:14px;height:14px}.scrubber::-moz-range-thumb{background:var(--p);cursor:pointer;border:none;border-radius:50%;width:14px;height:14px}.scrubber-times{font-size:var(--fs-base);color:var(--p3);justify-content:space-between;display:flex}.player-tabs{border-bottom:1px solid var(--border);background:var(--bg3);flex-shrink:0;align-items:center;gap:16px;padding:0 10px;display:flex}.tab-btn{color:var(--p);font-family:inherit;font-size:var(--fs-base);letter-spacing:0;cursor:pointer;opacity:.4;word-spacing:-4px;background:0 0;border:none;padding:7px 0;transition:opacity .15s;position:relative}.tab-btn.active{opacity:1}.tab-btn.active:after{content:"";background:var(--p);height:2px;position:absolute;bottom:-1px;left:0;right:0}.tab-btn:hover:not(.active){opacity:.7}.tab-controls{align-items:center;gap:4px;margin-left:auto;display:flex}.playlist-count{font-size:var(--fs-base);color:var(--p3);letter-spacing:0;word-spacing:var(--title-word-spacing)}.ctrl-btn{width:24px;height:24px}.ctrl-btn.active{color:var(--p);text-shadow:var(--glow)}.tab-content{flex:1;min-height:0;display:none;overflow-y:auto}.tab-content.active{animation:.25s both tab-in;display:block}@keyframes tab-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.tab-content::-webkit-scrollbar{width:6px}.tab-content::-webkit-scrollbar-track{background:var(--bg)}.tab-content::-webkit-scrollbar-thumb{background:var(--p3);border-radius:0}.playlist{z-index:20;position:relative}.track{cursor:pointer;border-bottom:1px solid var(--p4);border-left:3px solid #0000;align-items:center;gap:8px;padding:8px 10px;transition:background .1s;animation:.18s both track-in;display:flex}.track:hover{background:#ffffff0a}.track.active{border-left-color:var(--p);background:#ffffff12}.track-info{flex:1;min-width:0}.track-label{font-size:var(--fs-base);color:var(--p3);text-transform:uppercase}.track.active .track-label{color:var(--p)}.track-title{font-size:var(--fs-lg);word-spacing:var(--title-word-spacing);color:var(--p);white-space:nowrap;text-overflow:ellipsis;font-weight:700;line-height:1.1;overflow:hidden}.track.active .track-title{text-shadow:var(--glow)}.track-artist{font-size:var(--fs-base);color:var(--p3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.track-actions{flex-shrink:0;align-items:center;gap:2px;display:flex}.icon-btn{width:32px;height:32px;color:var(--p3);cursor:pointer;background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;transition:color .1s;display:flex}.icon-btn.play-btn.is-playing{color:var(--p)}.eq{align-items:flex-end;gap:3px;height:16px;display:flex}.eq span{background:var(--p);width:5px;animation:.55s ease-in-out infinite alternate eq}.eq span:first-child{animation-delay:0s}.eq span:nth-child(2){animation-delay:.15s}.eq span:nth-child(3){animation-delay:80ms}@keyframes eq{0%{height:15%}to{height:100%}}.eq.paused span{animation-play-state:paused}@keyframes track-in{0%{opacity:0}to{opacity:1}}@keyframes bar-breathe{0%,to{background:var(--p)}50%{background:color-mix(in srgb, var(--p) 20%, transparent)}}.np-box.playing:before{animation:2s ease-in-out infinite bar-breathe}.email-capture{border-top:1px solid var(--border);background:var(--bg2);z-index:20;flex-shrink:0;padding:10px;position:relative}.email-form{gap:6px;margin-top:6px;display:flex}.email-input{background:var(--bg);border:1px solid var(--border);min-width:0;color:var(--p);font-size:var(--fs-base);letter-spacing:0;outline:none;flex:1;padding:6px 8px}.email-input::placeholder{color:var(--p3)}.email-input:focus{border-color:var(--p3);box-shadow:var(--glow)}.email-submit{background:var(--bg3);border:1px solid var(--border);color:var(--p);font-size:var(--fs-base);letter-spacing:0;cursor:pointer;flex-shrink:0;padding:6px 10px;transition:border-color .1s,color .1s}.email-submit:hover{border-color:var(--p);text-shadow:var(--glow)}.email-status{font-size:var(--fs-base);letter-spacing:0;color:var(--p3);min-height:14px;margin-top:6px}.email-status.ok{color:var(--p)}.email-status.err{color:#c0392b}.album{border-bottom:1px solid var(--border)}.album-header{cursor:pointer;-webkit-user-select:none;user-select:none;z-index:1;align-items:center;gap:10px;padding:10px 14px;transition:background .1s,box-shadow .3s;display:flex;position:relative;box-shadow:0 4px 10px #0000}.album-header:hover{background:#ffffff0a}.album.open .album-header{box-shadow:0 4px 10px #0006}.album-caret{color:var(--p3);flex-shrink:0;align-items:center;transition:transform .15s;display:flex}.album.open .album-caret{transform:rotate(90deg)}.album-title{font-size:var(--fs-md);word-spacing:var(--title-word-spacing);color:var(--p);font-weight:700;line-height:1.1}.album-meta{font-size:var(--fs-base);color:var(--p3);margin-top:3px}.album-tracks{max-height:0;padding-bottom:0;transition:max-height .3s,padding-bottom .3s;overflow:hidden}.album.open .album-tracks{max-height:600px;padding-bottom:4px}.album-track{cursor:pointer;border-bottom:1px solid var(--p4);border-left:3px solid #0000;align-items:center;gap:8px;padding:10px;transition:background .1s;display:flex}.album-track:hover{background:#ffffff0a}.album-track.active{border-left-color:var(--p);background:#ffffff12}.album-track-num{font-size:var(--fs-base);color:var(--p3);letter-spacing:0;flex-shrink:0;width:18px}.album-track-title{font-size:var(--fs-base);word-spacing:var(--title-word-spacing);color:var(--p);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:400;line-height:1.1;overflow:hidden}.album-track.active .album-track-title{text-shadow:var(--glow)}.album-track .play-btn,.album-track .dl-btn{opacity:.25;flex-shrink:0;transition:opacity .1s}.album-track:hover .play-btn,.album-track:hover .dl-btn{opacity:1}.album-track.active .play-btn{opacity:1;color:var(--p)}.ctrl-btn.disabled{opacity:.25;cursor:not-allowed;pointer-events:none}.social-row{grid-template-columns:1fr 1fr;gap:6px;display:grid}.social-btn{background:var(--bg3);border:1px solid var(--border);color:var(--p3);font-family:IBM Plex Mono,Courier New,monospace;font-size:var(--fs-base);letter-spacing:.04em;text-align:center;text-transform:uppercase;padding:8px 10px;text-decoration:none;transition:border-color .1s,color .1s}.social-btn:hover{border-color:var(--ps-yellow);color:var(--ps-yellow)}.info-btn{border:1px solid var(--border);color:var(--p3);font-size:var(--fs-sm);letter-spacing:0;cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-family:inherit;transition:color .15s,border-color .15s}.info-btn:hover,.info-btn.active{color:var(--p);border-color:var(--p3)}#vizPanel{top:var(--edge);left:calc(var(--edge) + var(--panel-width) + var(--edge) + var(--panel-width) + var(--edge));opacity:0;pointer-events:none;z-index:150;width:500px;height:360px;transition:opacity .2s}#vizPanel.visible{opacity:1;pointer-events:all}.viz-header{border-bottom:1px solid var(--border);background:var(--bg3);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 10px;display:flex}.viz-header:active{cursor:grabbing}.viz-header-right{align-items:center;gap:8px;display:flex}.viz-mode-btns{gap:3px;display:flex}.viz-mode-btn{border:1px solid var(--border);color:var(--p3);font-family:inherit;font-size:var(--fs-xs);letter-spacing:.06em;cursor:pointer;background:0 0;padding:2px 6px;transition:color .15s,border-color .15s}.viz-mode-btn:hover:not(.active){color:var(--p)}.viz-mode-btn.active{color:var(--p);border-color:var(--p)}.viz-controls{background:var(--bg2);border-bottom:1px solid var(--border);flex-shrink:0;gap:8px;padding:6px 10px;display:flex}.viz-knob{cursor:default;flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.viz-knob span{font-size:var(--fs-xs);letter-spacing:.08em;color:var(--p3);-webkit-user-select:none;user-select:none}.viz-knob input[type=range]{cursor:pointer;width:100%;height:2px;accent-color:var(--p)}#heatmapCanvas{flex:1;width:100%;min-height:0;display:block}.info-overlay{top:var(--edge);left:calc(var(--edge) + var(--panel-width) + var(--edge));width:var(--panel-width);background:var(--bg2);z-index:200;opacity:0;pointer-events:none;border-radius:5px;flex-direction:column;max-height:calc(100dvh - 80px);transition:opacity .2s;display:flex;position:fixed}.info-overlay.visible{opacity:1;pointer-events:all}.info-overlay-header{border-bottom:1px solid var(--border);background:var(--bg3);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:5px 5px 0 0;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 10px 8px;display:flex}.info-overlay-header:active{cursor:grabbing}.info-close{color:var(--p3);font-size:var(--fs-md);cursor:pointer;background:0 0;border:none;padding:0 2px;font-family:inherit;line-height:1;transition:color .15s}.info-close:hover{color:var(--p);text-shadow:var(--glow)}.info-body{z-index:20;flex:1;position:relative;overflow-y:auto}.info-body::-webkit-scrollbar{width:6px}.info-body::-webkit-scrollbar-track{background:var(--bg)}.info-body::-webkit-scrollbar-thumb{background:var(--p3)}.info-section{flex-direction:column;gap:8px;padding:15px;display:flex}.info-section--social{padding-top:6px;padding-bottom:6px}.info-rule{background:var(--border);height:1px}.info-text{font-size:var(--fs-base);color:var(--p);letter-spacing:0;line-height:1.65}.info-spacer{flex:1;min-height:24px}.info-section--credits{opacity:.6}.info-credit{font-size:var(--fs-base);color:var(--p3);letter-spacing:0;justify-content:space-between;display:flex}.info-credit span:last-child{color:var(--p)}.info-credit-link{color:inherit;text-decoration:none;transition:color .15s}.info-credit-link:hover{color:var(--p)}.info-contact{font-size:var(--fs-base);color:var(--ps-yellow);letter-spacing:0;text-decoration:none;transition:color .15s}.info-contact:hover{text-shadow:none}.corner-logo{background:var(--ps-yellow);z-index:50;cursor:grab;width:100px;height:100px;position:fixed;bottom:28px;right:28px;-webkit-mask:url(/ps-logo-transparent.png) 50%/contain no-repeat;mask:url(/ps-logo-transparent.png) 50%/contain no-repeat}@media (width<=768px){.corner-logo{display:none}.header-logo-mobile{background:var(--ps-yellow);flex-shrink:0;width:28px;height:28px;margin-left:2px;display:block;-webkit-mask:url(/ps-logo-transparent.png) 50%/contain no-repeat;mask:url(/ps-logo-transparent.png) 50%/contain no-repeat}#headerPanel{z-index:300;width:calc(100vw - 40px)!important;top:20px!important;left:20px!important}#playerPanel{transition:opacity 1.2s,top .4s cubic-bezier(.16,1,.3,1),height .4s cubic-bezier(.16,1,.3,1);width:calc(100vw - 40px)!important;top:calc(20px + var(--header-height) + 20px)!important;height:calc(100dvh - 20px - var(--header-height) - 20px - var(--edge))!important;left:20px!important}#vizPanel{z-index:500!important;border-radius:0!important;width:100dvw!important;height:100dvh!important;top:0!important;left:0!important}#infoOverlay{z-index:400;transition:opacity .4s cubic-bezier(.16,1,.3,1),transform .4s cubic-bezier(.16,1,.3,1);transform:translateY(-20px);top:calc(20px + var(--header-height) + 20px)!important;width:calc(100vw - 40px)!important;height:250px!important;max-height:250px!important;left:20px!important}#infoOverlay.visible{transform:translateY(0)}body:has(#infoOverlay.visible) #playerPanel{top:calc(20px + var(--header-height) + 20px + 250px + 20px)!important;height:calc(100dvh - 20px - var(--header-height) - 20px - 250px - 20px - var(--edge))!important}.email-input{font-size:16px}}
