/* Generated by build-home-assets.mjs. Preserve source order. */
/* dist/style-692021415208.css */
:root{--wall: #78857a;--wall-dark: #5f6b62;--oak: #c49a62;--oak-mid: #a87c46;--oak-dark: #7d5730;--oak-light: #ddb887;--panel: #c3c4bf;--panel-dark: #9b9c97;--panel-light: #e2e3de;--screen: #080b0a;--led-green: #59e39a;--led-red: #e2483a;--led-amber: #f2b134;--ink: #221f1a;--paper: #f2efe8;--focus: #f2b134;--reel-size: 8.6%;--reel-top: 38.33%;--reel-left-x: 28.19%;--reel-right-x: 62.95%;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}html,body{margin:0;padding:0;background:var(--wall);color:var(--paper);font-family:Helvetica Neue,Arial,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}body{background:radial-gradient(120% 90% at 50% 10%,#8a9789 0%,var(--wall) 45%,var(--wall-dark) 100%);min-height:100vh}.skip-link{position:absolute;left:-9999px;top:0;z-index:999;background:var(--paper);color:var(--ink);padding:.6em 1em}.skip-link:focus{left:8px;top:8px}.site-head{display:flex;align-items:center;gap:clamp(.6rem,2.5vw,1rem);padding:1.4rem clamp(1rem,4vw,2.5rem) .4rem;max-width:1100px;margin:0 auto}.site-head__logo{height:26px;width:auto;filter:invert(1) brightness(1.8);opacity:.9}.site-head{position:relative;min-height:82px;padding-right:170px}.site-head__home{position:absolute;left:50%;top:20px;transform:translate(-50%);display:flex;align-items:center;justify-content:center;width:126px;min-height:46px;border:1px solid #3ddc57;border-radius:5px;background:#0c160e;box-shadow:inset 0 0 14px #66ff6614,0 0 8px #66ff661f}.site-head__home-logo{display:block;width:96px;height:35px;background:#6f6;-webkit-mask:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp) center / contain no-repeat;mask:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp) center / contain no-repeat}.site-head__home:hover{background:#172b1b;border-color:#6f6}.site-head__home:focus-visible{outline:2px solid #66ff66;outline-offset:4px}.site-head__tag{margin-left:auto!important}@media(max-width:760px){.site-head__tag{display:none}.site-head{padding-right:1rem}}.site-head__tag{margin:0;font-size:.78rem;letter-spacing:.09em;color:#ffffff9e;text-transform:uppercase;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:420px){.site-head__tag{display:none}}.cabinet{max-width:980px;margin:1rem auto 4rem;padding:14px;border-radius:6px;background:linear-gradient(160deg,#ffffff42,#83542538 72%,#3b25116b),url(../assets/materials/oak-seamless-v32.webp) center / 520px auto;background-blend-mode:soft-light,normal;box-shadow:0 30px 60px -20px #0000008c,0 4px 10px #0000004d,inset 0 1px #ffffff59}.cabinet__inner{background:#efece4;border-radius:3px;overflow:hidden;box-shadow:inset 0 0 0 1px #00000040}.deck{position:relative;padding:18px 20px 16px;background:linear-gradient(175deg,#ffffff8a,#b9bab580 48%,#76777261),url(../assets/materials/silver-painted-metal-seamless-v32.webp) center / 440px auto;background-blend-mode:soft-light,normal;border-bottom:3px solid var(--oak-dark);display:grid;grid-template-columns:1fr 1fr;grid-template-areas:"screen    screen" "bay       controls" "bay       grilles" "recording recording";gap:14px 16px}.deck:before,.deck:after{content:"";position:absolute;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,#8d8e89 60%,#5f605c);box-shadow:inset 0 0 0 1px #00000059}.deck:before{left:8px;top:8px}.deck:after{right:8px;top:8px}.deck__screen-wrap{grid-area:screen;position:relative;border-radius:16px/20px;padding:9px;background:linear-gradient(180deg,#b6b7b2,#85868150);box-shadow:inset 0 2px 5px #00000059}.deck__screen-wrap:before{content:"";position:absolute;inset:9px;border-radius:12px/16px;pointer-events:none;z-index:3;background-image:repeating-linear-gradient(0deg,#00000057 0 1px,#0000 1px 3px),repeating-linear-gradient(90deg,#ff5a5a0b 0 1px,#5aff8c0b 1px 2px,#788cff0b 2px 3px)}.deck__screen-wrap:after{content:"";position:absolute;inset:9px;border-radius:12px/16px;pointer-events:none;z-index:4;background-image:radial-gradient(125% 150% at 50% 48%,#0000 52%,#00000047 82%,#0000009e),linear-gradient(103deg,#ffffff16 0 14%,#ffffff05 22%,#fff0 34%)}.deck__screen-wrap{--crt-bloom: rgba(130, 232, 206, .13)}.deck__screen{display:block;width:100%;aspect-ratio:16 / 3.2;min-height:148px;max-height:210px;border-radius:12px/16px;background:var(--screen);box-shadow:inset 0 0 26px #000000f2,inset 0 0 3px #78dcdc2e,0 0 24px var(--crt-bloom, transparent)}.deck__bay-wrap{grid-area:bay;position:relative;display:flex;flex-direction:column;justify-content:center;border-radius:8px;padding:9px;background:linear-gradient(180deg,#b6b7b2,#8586813f);box-shadow:inset 0 2px 5px #00000059}.deck__bay{position:relative;width:100%;aspect-ratio:4 / 3;border-radius:4px;background:linear-gradient(180deg,#2a2b28,#141513);box-shadow:inset 0 0 18px #000000e6;overflow:hidden;display:flex;align-items:center;justify-content:center}.deck__bay-empty{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);text-align:center;font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;color:#ffffff47}.cassette{position:relative;width:100%;aspect-ratio:1536 / 1024;opacity:0;transform:translateY(-120%) scale(.82);transition:transform .62s cubic-bezier(.22,.72,.24,1),opacity .3s ease}.cassette.is-seated{opacity:1;transform:none}.cassette__img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block;z-index:1}.cassette__reel{position:absolute;z-index:0;top:var(--reel-top);width:var(--reel-size);aspect-ratio:1;transform-origin:50% 50%;pointer-events:none;opacity:.96}.cassette__reel--left{left:var(--reel-left-x)}.cassette__reel--right{left:var(--reel-right-x)}.cassette__reel img{width:100%;height:100%;display:block}.deck__grilles{grid-area:grilles;display:flex;gap:10px;align-items:center;align-self:center}.grille{flex:1;aspect-ratio:1;max-width:112px;border-radius:50%;position:relative;overflow:hidden;background:radial-gradient(circle at 50% 7%,rgba(255,255,255,.7) 0 1.1%,rgba(0,0,0,.42) 1.3% 2.4%,transparent 2.6%),radial-gradient(circle at 93% 50%,rgba(255,255,255,.7) 0 1.1%,rgba(0,0,0,.42) 1.3% 2.4%,transparent 2.6%),radial-gradient(circle at 50% 93%,rgba(255,255,255,.7) 0 1.1%,rgba(0,0,0,.42) 1.3% 2.4%,transparent 2.6%),radial-gradient(circle at 7% 50%,rgba(255,255,255,.7) 0 1.1%,rgba(0,0,0,.42) 1.3% 2.4%,transparent 2.6%),radial-gradient(circle at 34% 26%,rgba(255,255,255,.55),transparent 52%),conic-gradient(from 212deg,#eceded,#b7b8b2,#dcdcd6 68deg,#a9aaa4 104deg,#e6e7e1 142deg,#adaea8,#e0e1db,#a5a69f 250deg,#e3e4de 288deg,#b2b3ad,#eceded 360deg);box-shadow:inset 0 1px #fffc,inset 0 -1px #0006,inset 0 0 0 1px #0003,0 2px 5px -1px #00000080}.grille:before{content:"";position:absolute;inset:13%;border-radius:50%;background:radial-gradient(circle at 37% 29%,rgba(255,255,255,.2),transparent 48%),radial-gradient(circle at 50% 50%,#34352f 0 34%,#292a25 40%,#3c3d36 52%,#23241f 74%,#1a1b17);box-shadow:inset 0 3px 8px #000c,inset 0 -1px #ffffff14,0 1px #ffffff73}.grille:after{content:"";position:absolute;inset:13%;border-radius:50%;background-image:radial-gradient(circle at 48% 44%,rgba(150,151,144,.95) 0 7%,rgba(96,97,90,.95) 9%,rgba(38,39,34,.95) 14%,transparent 15%),radial-gradient(circle,rgba(8,8,7,.62) 28%,transparent 30%),radial-gradient(circle,rgba(255,255,255,.055) 26%,transparent 28%);background-size:100% 100%,3.5px 3.5px,3.5px 3.5px;background-position:0 0,0 0,1.75px 1.75px}.deck__engrave{flex:1 1 auto;min-width:0;align-self:center;position:relative;height:66px;margin-left:12px;opacity:.82}.deck__engrave:before,.deck__engrave:after{content:"";position:absolute;inset:0;-webkit-mask:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp) left center / contain no-repeat;mask:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp) left center / contain no-repeat}.deck__engrave:after{transform:translate(1.2px,1.2px);background:#fffffff2}.deck__engrave:before{z-index:1;background:linear-gradient(170deg,#6c6e67,#94968e);filter:drop-shadow(-1.2px -1.2px 0 rgba(20,21,18,.62))}.deck__controls{grid-area:controls;display:flex;flex-direction:column;gap:9px;justify-content:center}.transport{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.btn{appearance:none;border:none;cursor:pointer;flex:0 0 54px;width:54px;min-width:44px;min-height:46px;border:1px solid #8d8e88;border-radius:5px;background:linear-gradient(145deg,#f4f4f0,#d7d8d2 42%,#b2b3ad);box-shadow:0 3px #777870,0 5px 8px #0000004d,inset 1px 1px #fffffff2,inset -1px -1px #4646412e;color:#3f403a;font-size:.54rem;font-weight:800;letter-spacing:.045em;display:flex;align-items:center;justify-content:center;transition:transform .06s ease,box-shadow .06s ease}.btn.is-latched{background:linear-gradient(145deg,#cfd0ca,#b4b5af 45%,#9c9d97);box-shadow:0 0 #86877f,0 1px 2px #00000059,inset 0 1px 3px #00000052;transform:translateY(2px)}.btn:active,.btn.is-down{transform:translateY(2px);box-shadow:0 0 #86877f,0 1px 2px #00000059,inset 0 1px 3px #0000004d}.btn--rec{background:linear-gradient(145deg,#f47e71,#d84434 48%,#a72d22);color:#fff;border-color:#872b21;box-shadow:0 3px #702118,0 5px 8px #0000004d,inset 1px 1px #ffffff7a}.btn[aria-pressed=true]{box-shadow:0 0 0 2px var(--focus),inset 0 1px 3px #00000059}.btn:focus-visible,.knob:focus-visible,.tape:focus-visible,.case__load:focus-visible,.track:focus-visible,.case__close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.deck__meters{display:flex;align-items:center;justify-content:flex-end;gap:14px}.leds{display:flex;gap:4px}.led{width:6px;height:6px;border-radius:50%;background:#6c4a46;box-shadow:inset 0 0 2px #0009;transition:background .12s ease,box-shadow .12s ease}.led.is-lit{background:var(--led-red);box-shadow:0 0 7px var(--led-red)}.led--signal.is-lit{background:var(--led-green);box-shadow:0 0 7px var(--led-green)}.knobs{display:flex;gap:12px}.knob-wrap{display:flex;flex-direction:column;align-items:center;gap:3px}.knob{width:26px;height:26px;border-radius:50%;background:radial-gradient(circle at 34% 28%,#fbfbf8,#c9cac4 55%,#85867f);box-shadow:0 2px 4px #0006,inset 0 0 0 1px #0000002e;position:relative;cursor:ns-resize;touch-action:none}.knob__pointer{position:absolute;left:50%;top:3px;width:2px;height:9px;margin-left:-1px;background:#3a3b36;border-radius:1px;transform-origin:50% 120%}.knob__label{font-size:.42rem;letter-spacing:.08em;text-transform:uppercase;color:#56574f;white-space:nowrap}.deck__recording{grid-area:recording;padding:10px;border-radius:5px;color:#36352f;background:linear-gradient(180deg,#f2f3efbd,#9a9b957a);box-shadow:inset 0 1px 4px #0000004d,0 1px #ffffff8c}.recording-bay__head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:7px;font-size:.55rem;font-weight:800;letter-spacing:.11em;text-transform:uppercase}.recording-bay__head strong{font-family:SF Mono,Consolas,monospace;color:#2f5f48;font-size:.58rem}.recording-bay__well{min-height:74px;padding:10px 7%;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:4px;background:linear-gradient(180deg,#0b0c0a 0 18%,#292a26 19% 79%,#0b0c0a 80%),linear-gradient(90deg,#171814,#2c2d28 50%,#171814);box-shadow:inset 0 0 20px #000000f2,0 1px #ffffff40}.recording-slot{position:relative;width:min(62%,540px);aspect-ratio:1060 / 142;overflow:hidden;border-radius:2px;filter:saturate(.82) contrast(1.04);transition:filter .2s ease,transform .2s ease;box-shadow:0 7px 9px #00000094,inset 0 0 0 1px #ffffff1f}.recording-slot img{width:100%;height:100%;object-fit:cover;display:block}.recording-slot:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(255,255,255,.19),transparent 28% 72%,rgba(0,0,0,.28))}.deck__recording.is-armed .recording-slot{filter:saturate(.95) contrast(1.07)}.deck__recording.is-recording .recording-slot{filter:saturate(1.04) contrast(1.08);transform:translateY(2px)}.deck__recording.is-recording .recording-bay__head strong{color:#aa2e22}.recording-bay__status{margin:7px 1px 0;font-size:.58rem;line-height:1.4;color:#625e54}.recording-bay__actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:8px}.recording-bay__actions a,.recording-bay__actions button{min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:7px 10px;border:1px solid rgba(0,0,0,.18);border-radius:3px;font:700 .57rem/1.2 inherit;letter-spacing:.06em;text-transform:uppercase}.recording-bay__download{background:#273e34;color:#f0f4ed;text-decoration:none}.recording-bay__download[aria-disabled=true]{background:#565b53;color:#f1eee5;border-color:#73796f}.recording-bay__download[hidden]{display:none!important}.recording-bay__actions button{color:#76736b;background:#ffffff52}.recording-bay__actions button:disabled{cursor:not-allowed;opacity:.72}.deck__label{grid-column:1 / -1;display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:3px;background:linear-gradient(180deg,#f6f4ec,#ddd9cc);box-shadow:inset 0 0 0 1px #00000029,0 1px 2px #0003;min-height:34px;color:var(--ink)}.deck__label-main{min-width:0;flex:1}.deck__label-title{font-size:.74rem;font-weight:700;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.deck__label-sub{font-size:.58rem;color:#6a6459;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.deck__counter{font-family:SF Mono,Consolas,monospace;font-size:.64rem;color:#2c6b4a;background:#0d1210;padding:3px 7px;border-radius:2px;color:var(--led-green);text-shadow:0 0 5px rgba(89,227,154,.6);white-space:nowrap}.deck__notice{grid-column:1 / -1;font-size:.62rem;color:#5d5348;margin:-2px 0 0;min-height:1em;line-height:1.35}.deck__notice[data-tone=warn]{color:#6d3325;background:#e2483a1a;border-left:2px solid rgba(226,72,58,.5);padding:5px 8px;border-radius:2px}.btn:disabled{cursor:not-allowed}.transport.is-inert .btn:disabled{filter:saturate(.25) brightness(.94);opacity:.5;box-shadow:0 1px #8b8c85,inset 0 1px #fff6;transform:translateY(1px)}.host-banner{max-width:980px;margin:.2rem auto 0;padding:8px 14px;font-size:.68rem;line-height:1.45;color:#f0e6d2;background:#7a4a1e80;border:1px solid rgba(242,177,52,.32);border-radius:4px}.host-banner strong{color:var(--led-amber);font-weight:700}.host-banner[hidden]{display:none}.shelf{padding:14px 12px 18px;background:repeating-linear-gradient(92deg,rgba(0,0,0,.03) 0 2px,transparent 2px 7px),linear-gradient(180deg,#e8e2d5,#d8d0be)}.shelf__row{position:relative;display:flex;gap:3px;padding:6px 6px 9px;margin-bottom:10px;border-radius:2px;background:linear-gradient(180deg,var(--oak-light),var(--oak) 55%,var(--oak-mid));box-shadow:inset 0 2px 5px #0000004d,0 2px 3px #00000038}.shelf__row:last-child{margin-bottom:0}.shelf__row:after{content:"";position:absolute;left:0;right:0;bottom:0;height:5px;background:linear-gradient(180deg,var(--oak-dark),#64451f);border-radius:0 0 2px 2px}.tape{appearance:none;border:none;padding:0;margin:0;background:transparent;position:relative;flex:0 0 calc((100% - (var(--tapes-per-row, 19) - 1) * 3px) / var(--tapes-per-row, 19));min-width:0;aspect-ratio:96 / 720;cursor:pointer;border-radius:1px;transition:transform .18s cubic-bezier(.25,.7,.3,1),filter .18s ease;transform-origin:50% 100%;container-type:inline-size}.tape:before{content:"";position:absolute;inset:0;border-radius:1px;background:linear-gradient(90deg,rgba(255,255,255,.55) 0 1px,rgba(255,255,255,.14) 1px 2px,transparent 2px calc(100% - 2px),rgba(0,0,0,.28) calc(100% - 2px) 100%);box-shadow:0 3px 4px -2px #0009;pointer-events:none;z-index:2}.tape__card{position:absolute;inset:1px 2px;display:flex;flex-direction:column;border-radius:1px;background:linear-gradient(90deg,rgba(0,0,0,.18),transparent 28%,transparent 72%,rgba(0,0,0,.12)),var(--spine-label, #ddd8cc);overflow:hidden}.tape__band{flex:0 0 auto;background:var(--spine-band, #333);color:var(--spine-band-ink, #f4f1e8);writing-mode:vertical-rl;text-orientation:mixed;padding:4px 0 5px;font-size:clamp(4.5px,1.25vw,7px);letter-spacing:.2em;font-weight:700;text-align:start;overflow:hidden}@supports (container-type: inline-size){.tape__band{font-size:clamp(4.5px,23.75cqw,7px)}}.tape__text{flex:1 1 auto;min-height:0;writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:flex-start;gap:.5em;padding:7px 0 6px;color:var(--spine-ink, #1a1713);overflow:hidden}.tape__title{font-weight:800;font-size:calc(clamp(8px,2.7vw,16px) * var(--tier-title, 1));letter-spacing:.01em;line-height:1.08;min-height:0;white-space:nowrap;overflow:hidden}.tape__artist{font-weight:650;font-size:calc(clamp(7px,2.15vw,12.5px) * var(--tier-artist, 1));opacity:.82;letter-spacing:.01em;line-height:1.12;min-height:0;white-space:nowrap;overflow:hidden}@supports (container-type: inline-size){.tape__title{font-size:calc(clamp(8px,51.3cqw,16px) * var(--tier-title, 1))}.tape__artist{font-size:calc(clamp(7px,40.85cqw,12.5px) * var(--tier-artist, 1))}}.tape[data-tier=short]{--tier-title: 1;--tier-artist: 1}.tape[data-tier=medium]{--tier-title: .92;--tier-artist: .94}.tape[data-tier=long]{--tier-title: .8;--tier-artist: .86}.tape[data-tier=huge]{--tier-title: .72;--tier-artist: .78}.tape[data-tier=long] .tape__artist,.tape[data-tier=huge] .tape__artist,.tape--wrap-title .tape__title,.tape--wrap-artist .tape__artist{white-space:normal}.tape__art{flex:0 0 13%;min-height:0;display:block;background-image:var(--spine-art);background-size:cover;background-position:center;border-bottom:1px solid rgba(0,0,0,.28);box-shadow:inset 0 -1px #ffffff2e;filter:saturate(.9) contrast(1.05)}.tape:hover,.tape:focus-visible{transform:translateY(-7px);filter:brightness(1.06)}.tape.is-open{transform:translateY(-11px);filter:brightness(1.1)}.tape.is-loaded:before{box-shadow:0 0 0 1px var(--focus),0 3px 5px -2px #0009}.tape.is-played:after{content:"";position:absolute;left:50%;bottom:-5px;width:3px;height:3px;margin-left:-1.5px;border-radius:50%;background:var(--led-green);box-shadow:0 0 4px var(--led-green)}.case-backdrop{position:fixed;inset:0;z-index:40;background:#0a0e0b8c;opacity:0;pointer-events:none;transition:opacity .2s ease}.case-backdrop.is-visible{opacity:1;pointer-events:auto}.case{position:fixed;z-index:50;width:min(620px,94vw);background:linear-gradient(180deg,#23261f,#171a15);border-radius:8px;box-shadow:0 26px 60px -14px #000000bf,0 0 0 1px #ffffff14;padding:12px;opacity:0;visibility:hidden;transform:translateY(6px) scale(.97);transition:opacity .2s ease,transform .24s cubic-bezier(.2,.7,.25,1),visibility .2s;max-height:calc(100vh - 24px);overflow-y:auto}.case.is-open{opacity:1;visibility:visible;transform:none}.case__visual{position:relative;width:100%;aspect-ratio:1312 / 1199;overflow:hidden;border-radius:4px;background:transparent}.case__shell{position:absolute;inset:0;z-index:1;width:100%;height:100%;object-fit:contain;pointer-events:none}.case__jcard{position:absolute;z-index:2;left:12.05%;top:12.43%;width:75.91%;height:30.28%;object-fit:cover;border-radius:1px;box-shadow:inset 0 0 0 1px #0000002e}.case__cassette{position:absolute;z-index:3;left:9%;bottom:5.5%;width:82%;height:auto;object-fit:contain;filter:drop-shadow(0 9px 9px rgba(0,0,0,.42))}.case__visual:after{content:"";position:absolute;inset:7% 5%;z-index:4;pointer-events:none;background:linear-gradient(112deg,rgba(255,255,255,.14),transparent 17% 78%,rgba(255,255,255,.08)),linear-gradient(180deg,rgba(255,255,255,.06),transparent 22% 84%,rgba(255,255,255,.05));mix-blend-mode:screen}.case__meta{padding:9px 3px 4px}.case__title{margin:0;font-size:.95rem;font-weight:700;letter-spacing:.01em}.case__artist{margin:1px 0 0;font-size:.76rem;color:#ffffffad}.case__tags{display:flex;gap:6px;align-items:center;margin-top:7px;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase}.case__tag{padding:2px 7px;border-radius:999px;background:#ffffff1a;color:#fffc}.case__tag--album{background:#f2b1342e;color:var(--led-amber)}.case__tracks{margin:9px 0 0;padding:0;list-style:none;max-height:190px;overflow-y:auto;border-top:1px solid rgba(255,255,255,.1)}.track{appearance:none;border:none;background:transparent;width:100%;text-align:left;cursor:pointer;display:flex;gap:8px;align-items:baseline;padding:5px 4px;border-radius:3px;color:#ffffffd1;font-size:.72rem;font-family:inherit}.track:hover{background:#ffffff12}.track.is-current{background:#f2b13424;color:#fff}.track__n{font-family:SF Mono,Consolas,monospace;font-size:.62rem;color:#ffffff6b;min-width:1.6em}.track__title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.track__state{font-size:.56rem;color:#ffffff59}.case__actions{display:flex;gap:8px;margin-top:10px}.case__load{appearance:none;border:none;cursor:pointer;flex:1;padding:10px 12px;border-radius:4px;background:linear-gradient(180deg,#f3d79a,var(--led-amber));color:#3a2a08;font-weight:800;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;font-family:inherit}.case__load:active{transform:translateY(1px)}.case__close{appearance:none;border:1px solid rgba(255,255,255,.2);cursor:pointer;background:transparent;color:#ffffffb3;border-radius:4px;padding:0 12px;font-size:.72rem;font-family:inherit}.deck__tracks{grid-column:1 / -1;margin-top:2px;border-radius:4px;background:linear-gradient(180deg,#f6f4ec,#e4e0d3);box-shadow:inset 0 0 0 1px #00000029,0 1px 2px #0003;color:var(--ink);overflow:hidden}.deck__tracks-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;border-bottom:1px solid rgba(0,0,0,.12);font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:#6a6459}.deck__tracks-list{margin:0;padding:4px;list-style:none;max-height:210px;overflow-y:auto}.deck-track{appearance:none;border:none;background:transparent;width:100%;text-align:left;cursor:pointer;font-family:inherit;display:flex;gap:9px;align-items:baseline;padding:7px 8px;border-radius:3px;color:#3a352d;font-size:.72rem;min-height:34px}.deck-track:hover{background:#0000000e}.deck-track:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.deck-track__n{flex:0 0 auto;font-family:SF Mono,Consolas,monospace;font-size:.62rem;color:#8a8375}.deck-track__title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.deck-track__note{flex:0 0 auto;font-size:.56rem;letter-spacing:.08em;text-transform:uppercase;color:#a8482f}.deck-track:disabled{cursor:not-allowed;color:#8a8375}.deck-track.is-current{background:linear-gradient(90deg,#f2b13452,#f2b1341f);font-weight:700;box-shadow:inset 2px 0 0 var(--led-amber)}.account{max-width:980px;margin:1.1rem auto 0;padding:16px 18px 18px;border-radius:10px;background:linear-gradient(180deg,#141816d1,#0c0f0ee6);box-shadow:inset 0 0 0 1px #ffffff12,0 8px 22px #0000004d;color:#ffffffdb}.account__head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}.account__title{margin:0;font-size:.92rem;letter-spacing:.02em;font-weight:700}.account__state{margin:0;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:#ffffff73;font-family:SF Mono,Consolas,monospace}.account__state[data-tone=on]{color:var(--led-green)}.account__state[data-tone=warn]{color:var(--led-amber)}.account.is-unavailable .account__form,.account.is-unavailable .account__fans{opacity:.4}.account__reason{margin:0 0 12px;padding:9px 11px;border-left:3px solid var(--led-amber);background:#f2b13417;font-size:.7rem;line-height:1.45;color:#ffffffc7}.account__form{display:grid;gap:10px 12px;grid-template-columns:repeat(2,minmax(0,1fr));align-items:end;max-width:660px}.account__fans{display:grid;gap:10px 12px;grid-template-columns:minmax(0,1fr) auto;align-items:end;max-width:660px;margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,255,255,.08)}.account__field{display:grid;gap:4px;min-width:0}.account__field>span{font-size:.58rem;letter-spacing:.13em;text-transform:uppercase;color:#ffffff80}.account__field input{appearance:none;min-height:44px;padding:0 11px;border-radius:5px;border:1px solid rgba(255,255,255,.16);background:#00000059;color:#fff;font-size:.84rem;font-family:inherit;min-width:0}.account__field input:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.account__field input:disabled{cursor:not-allowed}.account__actions{grid-column:1 / -1;display:flex;gap:8px;flex-wrap:wrap}.account__btn{appearance:none;cursor:pointer;font-family:inherit;min-height:44px;padding:0 16px;border-radius:5px;border:1px solid rgba(255,255,255,.2);background:#ffffff14;color:#ffffffe6;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;flex:1 1 auto}.account__btn--primary{background:linear-gradient(180deg,#f3d79a,var(--led-amber));border-color:#00000040;color:#3a2a08}.account__btn:disabled{cursor:not-allowed;opacity:.55}.account__btn:not(:disabled):active{transform:translateY(1px)}.account__note,.account__who{grid-column:1 / -1;margin:0;font-size:.66rem;line-height:1.5;color:#ffffff80}.account__who{color:#ffffffd9;font-size:.8rem}.account__signed{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.account__message{margin:12px 0 0;min-height:1em;font-size:.7rem;color:#ffffffa8}.account__message[data-tone=warn]{color:var(--led-amber)}.archive-foot{max-width:980px;margin:0 auto 3rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;padding:0 14px;font-size:.64rem;color:#ffffff80}.archive-foot button{appearance:none;background:none;border:none;cursor:pointer;color:#ffffff9e;font-size:.64rem;text-decoration:underline;font-family:inherit;min-height:44px;padding:0 2px}.archive-foot button:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.sfx-level{display:inline-flex;align-items:center;gap:.5rem;white-space:nowrap;min-height:44px}.sfx-level input{width:90px;accent-color:var(--led-amber);min-height:44px}@media(max-width:1099px){.cabinet,.host-banner,.archive-foot{max-width:840px}.case{width:min(560px,94vw)}}@media(max-width:860px){.deck{grid-template-columns:minmax(0,1fr);grid-template-areas:"screen" "bay" "controls" "grilles" "recording";gap:12px}.deck__screen{aspect-ratio:16 / 5;min-height:150px;max-height:230px}.deck__bay{aspect-ratio:16 / 9}.deck__grilles{justify-content:flex-start}.transport{justify-content:stretch}}@media(max-width:639px){.cabinet{margin:.5rem auto 2.5rem;padding:9px}.deck{grid-template-columns:minmax(0,1fr);grid-template-areas:"screen" "bay" "controls" "grilles" "recording";padding:10px 9px 9px;gap:9px}.deck__screen-wrap,.deck__bay-wrap{padding:6px}.deck__screen{aspect-ratio:16 / 8;min-height:150px;max-height:220px}.deck__bay{aspect-ratio:16 / 9}.transport{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.transport .btn{flex:none;width:auto;min-width:0;height:48px;font-size:.6rem}.deck__meters{gap:12px}.leds{gap:6px}.knobs{gap:16px}.knob{width:42px;height:42px}.knob__pointer{height:14px;top:4px}.deck__grilles{justify-content:flex-start;gap:9px}.grille{max-width:44px}.deck__engrave{height:34px;margin-left:8px}.deck__recording{padding:9px 10px 10px}.recording-bay__well{min-height:0}.recording-slot{width:100%}.recording-bay__head{align-items:flex-start;flex-direction:column;gap:3px}.recording-bay__status{font-size:.6rem;line-height:1.45}.recording-bay__actions>*{width:100%}.recording-bay__actions button{font-size:.62rem;min-height:44px}.deck__label{align-items:flex-start;flex-direction:column;gap:4px}.deck__tracks-list{max-height:260px}.deck-track{min-height:44px;font-size:.76rem}.deck__counter{align-self:stretch;text-align:center}.account{padding:13px 12px 14px;border-radius:8px}.account__form,.account__fans{grid-template-columns:minmax(0,1fr);max-width:none}.account__actions{display:grid;grid-template-columns:1fr 1fr}.archive-foot{gap:.6rem;font-size:.6rem}.shelf{padding:10px 8px 12px}.shelf__row{gap:3px;padding:5px 5px 8px;margin-bottom:8px}.case{position:fixed!important;inset:auto 0 0!important;width:100%!important;border-radius:14px 14px 0 0;padding:14px 14px calc(14px + env(safe-area-inset-bottom));transform:translateY(14px);max-height:88vh;overflow-y:auto}.case.is-open{transform:none}.case__tracks{max-height:34vh}.case__load{padding:14px;font-size:.74rem;min-height:48px}.case__close{padding:14px 16px;min-height:48px}}@media(max-width:520px){.site-head{display:grid;grid-template-columns:48px minmax(0,1fr) minmax(58px,auto);align-items:center;gap:6px;min-height:72px;padding:9px 10px}.site-head__home{width:100%!important;min-width:0}.site-head__home-logo{width:min(100%,138px)!important;height:48px}.basket-key{position:static!important;max-width:72px;justify-self:end;white-space:normal;line-height:1.15}.transport{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.transport .btn{min-width:0;width:100%;padding-inline:4px;white-space:normal;line-height:1.05;overflow-wrap:anywhere}.recording-bay__head,.deck__label,.deck__tracks-head,.account__head{min-width:0}.recording-bay__head *,.deck__label *,.deck__tracks-head *,.account__head *{min-width:0;overflow-wrap:anywhere}.account__actions{display:grid;grid-template-columns:1fr}.account__actions .account__btn{width:100%;white-space:normal}.deck__notice,.recording-bay__status,.account__note,.account__message{overflow-wrap:anywhere}}@media(max-width:380px){.transport .btn{font-size:.55rem;height:46px}.deck__screen{aspect-ratio:16 / 9;min-height:142px}.grille{max-width:38px}}@media(prefers-reduced-motion:reduce){.cassette,.tape,.case{transition:none!important}}.menu-key{flex:none;appearance:none;cursor:pointer;width:46px;height:46px;min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #8d8e88;border-radius:6px;background:linear-gradient(145deg,#f4f4f0,#d7d8d2 42%,#b2b3ad);box-shadow:0 2px #8b8c85,inset 0 1px #ffffffa6}.menu-key:active{transform:translateY(1px);box-shadow:0 1px #8b8c85}.menu-key:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.menu-key__bars{display:grid;gap:4px;width:20px}.menu-key__bars i{display:block;height:2px;background:#3a3730;border-radius:1px}.menu-scrim{position:fixed;inset:0;z-index:60;background:#100e0b8c;backdrop-filter:blur(2px)}.menu{position:fixed;z-index:61;inset:0 auto 0 0;width:min(420px,92vw);display:flex;flex-direction:column;background:linear-gradient(180deg,#efece3,#e2ded2);border-right:1px solid rgba(0,0,0,.25);box-shadow:4px 0 28px -8px #0009;overflow:hidden}.menu__head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 14px 10px;border-bottom:1px solid rgba(0,0,0,.14)}.menu__heading{margin:0;font-size:.95rem;letter-spacing:.04em;color:#23201b}.menu__close{appearance:none;cursor:pointer;background:none;border:none;min-width:44px;min-height:44px;font-size:1.5rem;line-height:1;color:#3a3730}.menu__close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.menu__tabs{display:flex;gap:4px;padding:10px 12px 0}.menu__tab{appearance:none;cursor:pointer;font-family:inherit;flex:1 1 0;min-height:44px;padding:0 8px;border:1px solid #b6b1a4;border-bottom:none;border-radius:6px 6px 0 0;background:#d9d5c9;color:#55504a;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700}.menu__tab.is-current{background:#f6f3ea;color:#23201b}.menu__tab:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.menu__panel{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px;background:#f6f3ea;border-top:1px solid #b6b1a4}.menu__note{margin:0 0 12px;font-size:.74rem;line-height:1.45;color:#5d574e}.menu,.menu__panel{color:#23201b}.artist-list{list-style:none;margin:0;padding:0;display:grid;gap:4px}.artist{appearance:none;cursor:pointer;font-family:inherit;width:100%;min-height:46px;padding:0 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #ccc6b7;border-radius:6px;background:#fffdf7;color:#23201b;text-align:left}.artist:hover{background:#f1ece0}.artist:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.artist__name{font-weight:700;font-size:.84rem}.artist__count{flex:none;font-size:.66rem;letter-spacing:.06em;color:#6d675d;text-transform:uppercase}.dl-block{padding:12px;margin-bottom:10px;border:1px solid #ccc6b7;border-radius:6px;background:#fffdf7}.dl-block__title{margin:0 0 6px;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase}.dl-block__body{margin:0 0 10px;font-size:.76rem;line-height:1.5;color:#4e4840}.dl-block__link{display:inline-flex;align-items:center;min-height:44px;padding:0 14px;border-radius:6px;background:#23201b;color:#f6f3ea;font-size:.72rem;letter-spacing:.06em;text-decoration:none;font-weight:700}.dl-block__link:hover{background:#3a352d}.dl-block__link:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.merch-grid{list-style:none;margin:0 0 14px;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.merch__link{display:flex;flex-direction:column;gap:6px;padding:8px;height:100%;border:1px solid #ccc6b7;border-radius:6px;background:#fffdf7;color:inherit;text-decoration:none}.merch__link:hover{background:#f1ece0}.merch__link:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.merch__img{display:block;width:100%;aspect-ratio:1 / 1;max-width:100%;object-fit:cover;border-radius:3px;background:#e5e0d4}.merch__img--none{display:block}.merch__name{font-size:.72rem;font-weight:700;line-height:1.3}.merch__meta{margin-top:auto;display:flex;justify-content:space-between;gap:6px;font-size:.64rem;color:#6d675d}.merch__price{font-weight:700;color:#23201b}.merch.is-sold-out .merch__img{filter:grayscale(1) brightness(.94);opacity:.75}.merch.is-sold-out .merch__price{color:#8a4a3c}.filter-bar{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px;margin:0 auto 10px;padding:9px 14px;max-width:900px;border:1px solid #b6b1a4;border-radius:6px;background:#efece3;color:#3a3730;font-size:.78rem}.filter-bar__clear{appearance:none;cursor:pointer;font-family:inherit;min-height:44px;padding:0 14px;border:1px solid #8d8e88;border-radius:6px;background:linear-gradient(145deg,#f4f4f0,#d7d8d2);font-size:.7rem;font-weight:700;letter-spacing:.04em}.filter-bar__clear:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.deck-track__save{appearance:none;cursor:pointer;font-family:inherit;flex:none;min-width:44px;min-height:44px;border:1px solid #b6b1a4;border-radius:5px;background:#efece3;color:#3a3730;font-size:.8rem;font-weight:700;line-height:1}.deck-track__save:hover:not(:disabled){background:#e3dfd2}.deck-track__save:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.deck-track__save.is-working{font-size:.58rem;letter-spacing:0}.deck-track__save.is-done{background:#d8e8d2;border-color:#7da874}.deck-track__save.is-failed{background:#f0d9d2;border-color:#b57c6c}.deck-track__save:disabled{cursor:default}.deck__tracks-list li{display:flex;align-items:stretch;gap:4px}.deck__tracks-list li .deck-track{flex:1 1 auto;min-width:0}@media(max-width:520px){.merch-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.menu{width:100vw}}.menu__note--link{display:inline-block;margin-top:10px;color:#5d574e}@keyframes crt-breathe{0%,to{opacity:1}47%{opacity:.975}52%{opacity:.995}}@keyframes crt-roll{0%{transform:translateY(-18%)}to{transform:translateY(118%)}}.deck__screen{animation:crt-breathe 5.2s ease-in-out infinite}.deck__screen-wrap .crt-roll{position:absolute;left:9px;right:9px;height:14%;pointer-events:none;z-index:3;background:linear-gradient(180deg,#beffeb00,#beffeb09 45%,#beffeb0e 55%,#beffeb00);animation:crt-roll 7.5s linear infinite}@media(prefers-reduced-motion:reduce){.deck__screen{animation:none}.deck__screen-wrap .crt-roll{display:none}}:root{--term-bg: #0a140a;--term-bg-deep: #060d06;--term-green: #66ff66;--term-dim: #5ac668;--term-mid: #78e084;--term-hot: #d8ffd2;--term-line: #3ddc57}.menu{background:var(--term-bg-deep);border-right:none;color:var(--term-green);box-shadow:6px 0 40px -10px #000000e6;font-family:Arial Narrow,Helvetica Neue,Helvetica,Arial,sans-serif}.menu:before{content:"";position:absolute;inset:0;pointer-events:none;background-color:var(--term-bg-deep);background-image:repeating-linear-gradient(0deg,rgba(90,255,120,.03) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(90,255,120,.022) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(0,0,0,.3) 0 2px,transparent 2px 7px),radial-gradient(130% 100% at 50% 0%,rgba(70,220,90,.1),transparent 62%);z-index:0}.menu:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:3;background-image:repeating-linear-gradient(0deg,rgba(0,0,0,.55) 0 1px,transparent 1px 2px),repeating-linear-gradient(90deg,rgba(0,0,0,.4) 0 1px,transparent 1px 2px);mix-blend-mode:multiply;opacity:.8}.menu>*{position:relative;z-index:2}.menu__frame{position:relative;display:flex;flex-direction:column;min-height:0;height:100%;margin:10px;border:1px solid var(--term-line);box-shadow:0 0 0 3px var(--term-bg-deep),0 0 0 4px #3ddc5773,0 0 18px #3ddc572e}.menu__titlebar{flex:none;display:flex;align-items:stretch;border-bottom:1px solid var(--term-line);min-height:34px}.menu__titlebar-label{flex:1 1 auto;display:flex;align-items:center;justify-content:center;padding:0 10px;font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;font-weight:700;color:var(--term-green);text-shadow:0 0 6px rgba(102,255,102,.55)}.menu__close{flex:none;width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;appearance:none;cursor:pointer;border:none;border-left:1px solid var(--term-line);background:var(--term-line);color:var(--term-bg-deep);font-size:1.1rem;font-weight:800;line-height:1}.menu__close:hover{background:var(--term-hot)}.menu__close:focus-visible{outline:2px solid var(--term-hot);outline-offset:-4px}.menu__home{flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;padding:clamp(14px,4vh,26px) 14px clamp(10px,3vh,18px);text-decoration:none;border-bottom:1px solid rgba(61,220,87,.35)}.menu__home:focus-visible{outline:2px solid var(--term-hot);outline-offset:-3px}.menu__home-mark{display:block;width:min(74%,320px);aspect-ratio:1800 / 919;background-color:var(--term-green);-webkit-mask-image:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp);mask-image:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;filter:drop-shadow(0 0 10px rgba(102,255,102,.45))}.menu__home:hover .menu__home-mark{background-color:var(--term-hot)}.menu__home-sub{font-size:.56rem;letter-spacing:.28em;text-transform:uppercase;color:var(--term-dim)}.menu__home:hover .menu__home-sub{color:var(--term-mid)}.menu__tabs{flex:none;display:flex;gap:0;padding:0;border-bottom:1px solid var(--term-line)}.menu__tab{flex:1 1 0;min-height:46px;padding:0 6px;appearance:none;cursor:pointer;font-family:inherit;border:none;border-right:1px solid rgba(61,220,87,.35);border-radius:0;background:transparent;color:var(--term-dim);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;font-weight:800}.menu__tab:last-child{border-right:none}.menu__tab:hover{color:var(--term-mid);background:#3ddc570f}.menu__tab.is-current{background:var(--term-line);color:var(--term-bg-deep);text-shadow:none}.menu__tab:focus-visible{outline:2px solid var(--term-hot);outline-offset:-4px}.menu__panel{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px;background:transparent;border-top:none;color:var(--term-green);scrollbar-color:var(--term-dim) transparent}.menu__note{color:var(--term-dim);font-size:.72rem;line-height:1.5;letter-spacing:.02em}.artist{background:transparent;border:1px solid rgba(61,220,87,.28);border-radius:0;color:var(--term-green)}.artist:hover{background:#3ddc571a;border-color:var(--term-line)}.artist:focus-visible{outline:2px solid var(--term-hot);outline-offset:-3px}.artist__name{letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px rgba(102,255,102,.35)}.artist__count{color:var(--term-dim)}.dl-block{background:transparent;border:1px solid rgba(61,220,87,.28);border-radius:0}.dl-block__title{color:var(--term-green);text-shadow:0 0 6px rgba(102,255,102,.35)}.dl-block__body{color:var(--term-dim)}.dl-block__link{border-radius:0;background:var(--term-line);color:var(--term-bg-deep);font-weight:800;letter-spacing:.12em;text-transform:uppercase}.dl-block__link:hover{background:var(--term-hot);color:var(--term-bg-deep)}.dl-block__link:focus-visible{outline:2px solid var(--term-hot);outline-offset:2px}.menu__screen{border-top:1px solid rgba(61,220,87,.35)}.crt-toggle{background:transparent;border:1px solid rgba(61,220,87,.28);border-radius:0;color:var(--term-green)}.crt-toggle:hover{background:#3ddc571a}.crt-toggle__name{letter-spacing:.06em;text-transform:uppercase}.crt-toggle__state{color:var(--term-dim)}.crt-toggle[aria-pressed=true] .crt-toggle__state{color:var(--term-green)}.menu-scrim{background:#020602b8}@media(max-width:520px){.menu__frame{margin:6px}.menu__home-mark{width:min(82%,260px)}.menu__tab{min-width:0;padding-inline:3px;font-size:.56rem;line-height:1.15;letter-spacing:.06em;overflow-wrap:anywhere}.menu__titlebar-label{min-width:0;font-size:.56rem;letter-spacing:.12em;overflow-wrap:anywhere}.menu__panel,.menu__note,.dl-block__body,.dl-block__title{min-width:0;overflow-wrap:anywhere}}@media(min-width:900px){.menu__home-mark{width:min(70%,360px)}}@media(max-width:639px){.menu:after{opacity:.5}}@media(prefers-reduced-motion:reduce){.menu__home-mark{filter:none}}.deck{grid-template-areas:"screen screen" "bay controls" "bay grilles" "tone tone" "recording recording"}.tone-panel{grid-area:tone;min-width:0}@media(max-width:860px){.deck{grid-template-areas:"screen" "bay" "controls" "grilles" "tone" "recording"}}.site-head__home{width:190px;min-height:56px;border:0;background:none;box-shadow:none}.site-head__home:hover{background:none;filter:drop-shadow(0 0 5px #66ff6655)}.site-head__home-logo{width:174px;height:54px}.grille{max-width:155px;min-width:0}.deck__grilles{gap:16px}.knob{width:62px;height:62px}.knob__pointer{top:7px;height:21px}.knob__label{font-size:.65rem}.knobs{gap:22px}.tone-panel{margin:22px 0;padding:20px;border:2px solid #92948b;border-radius:7px;background:#bfc1b8 url(../assets/materials/silver-painted-metal-seamless-v32.webp) center/420px;box-shadow:inset 0 1px 2px #fff8,0 3px 5px #0004;color:#262923}.tone-panel__top{display:grid;grid-template-columns:minmax(200px,1fr) minmax(220px,1fr);gap:24px}.vu-face{position:relative;height:150px;border:7px solid #262923;border-radius:8px;background:linear-gradient(#d9ca9f,#f4e7c3);overflow:hidden;box-shadow:inset 0 2px 8px #0004;text-align:center}.vu-face__scale{position:absolute;top:20px;width:100%;font:11px monospace;color:#514630}.vu-face__needle{position:absolute;width:2px;height:87px;background:#a12218;left:50%;bottom:4px;transform-origin:center bottom;transform:rotate(-65deg);transition:transform .12s linear}.vu-face__name{position:absolute;bottom:12px;left:12px;font:700 11px monospace}.vu-face output{position:absolute;bottom:12px;right:12px;font:11px monospace}.tone-filters{display:grid;gap:14px;align-content:center}.tone-filters label{display:grid;grid-template-columns:1fr auto;gap:7px;font:700 12px monospace}.tone-filters input{grid-column:1/-1;grid-row:2;width:100%;min-height:36px;accent-color:#303a2d}.tone-panel__head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:20px 0 12px}.tone-panel h2{font:700 13px monospace;letter-spacing:.1em;margin:0}.tone-panel button{min-height:44px;padding:8px 12px;border:1px solid #72756a;border-radius:4px;background:linear-gradient(#f4f4eb,#b9bbae);color:#262923;font:700 11px monospace;cursor:pointer}.tone-eq{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:9px}.tone-band{display:flex;flex-direction:column;align-items:center;gap:8px;font:10px monospace;text-align:center}.tone-band input{writing-mode:vertical-lr;direction:rtl;width:32px;height:125px;accent-color:#353d31;cursor:ns-resize}.tone-panel__note{font:11px/1.5 monospace;margin:16px 0 0}.tone-panel input:focus-visible,.tone-panel button:focus-visible{outline:2px solid #174e23;outline-offset:3px}@media(max-width:760px){.grille{max-width:110px;flex:0 1 110px}.knob{width:58px;height:58px}.tone-panel__top{grid-template-columns:1fr}.tone-panel{padding:14px}.tone-eq{grid-template-columns:repeat(5,minmax(0,1fr));gap:20px 8px}.tone-band input{height:110px}.tone-panel__head{flex-wrap:wrap}.tone-panel__head>*{min-width:0;overflow-wrap:anywhere}.tone-filters label{grid-template-columns:minmax(0,1fr) auto}.tone-filters output{white-space:nowrap}.tone-panel__note{overflow-wrap:anywhere}}@media(max-width:380px){.tone-eq{gap:18px 3px}.tone-band{font-size:9px}.tone-band input{width:28px}.tone-panel h2{font-size:11px}.vu-face__scale{font-size:9px;letter-spacing:-.04em}}@media(prefers-reduced-motion:reduce){.vu-face__needle{transition:none}}[hidden]{display:none!important}.menu-key,.menu-key:active,.shop-back{border:0!important;background:none!important;box-shadow:none!important;color:#6f6!important;min-width:48px;min-height:48px}.menu-key__bars{width:28px}.menu-key__bars i{background:#6f6!important;height:3px}.basket-key{position:absolute;right:12px;top:28px;border:0;background:none;color:#6f6;font:12px ui-monospace,monospace;cursor:pointer;padding:12px 4px;min-height:44px}.basket-key:hover,.menu-key:hover{filter:drop-shadow(0 0 5px #66ff6680)}.basket-overlay{position:fixed;inset:0;z-index:10000;background:#000a;display:grid;place-items:center;padding:20px;backdrop-filter:blur(4px)}.basket-panel{background:#071108;color:#6f6;border:1px solid #66ff6670;box-shadow:0 0 35px #66ff6620;width:min(680px,100%);max-height:85dvh;overflow:auto;padding:26px;font:14px/1.6 ui-monospace,monospace;border-radius:5px}.basket-panel h2{font:20px ui-monospace,monospace;margin:0 0 20px}.basket-panel button,.basket-panel a{color:#6f6;background:transparent;border:1px solid #66ff6660;padding:10px;cursor:pointer;min-height:44px;font:inherit}.basket-panel button:disabled{opacity:.45;cursor:not-allowed}.basket-panel button:hover:not(:disabled){background:#66ff6615}.basket-close{float:right}.basket-line{display:grid;grid-template-columns:72px 1fr;gap:18px;padding:18px 0;border-bottom:1px solid #66ff6630}.basket-line img{width:72px;height:85px;object-fit:contain;background:#fff}.basket-line p{margin:0 0 8px}.basket-quantity{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.basket-total{font-size:18px}.basket-status{color:#baf9ba}.basket-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:20px}.has-basket{overflow:hidden!important}@media(max-width:480px){.basket-overlay{padding:10px}.basket-panel{padding:18px}.site-head__home{width:150px!important}.site-head__home-logo{width:140px!important}.basket-key{font-size:10px;right:4px}}.basket-line>div{min-width:0}.basket-line a{display:inline-flex;align-items:center;margin:0 0 12px;max-width:100%;box-sizing:border-box;white-space:normal;overflow-wrap:anywhere}.basket-quantity{clear:both;position:relative;gap:8px;min-height:44px;margin-top:4px}.basket-quantity button{display:inline-flex;align-items:center;justify-content:center;flex:none}.basket-quantity span{min-width:24px;text-align:center}.basket-panel{overflow-wrap:anywhere}.menu,.menu-scrim{visibility:hidden!important;pointer-events:none!important;opacity:0!important}body.has-menu .menu,body.has-menu .menu-scrim{visibility:visible!important;pointer-events:auto!important;opacity:1!important}.case{left:auto!important;right:16px!important;top:16px!important;bottom:16px;width:min(380px,calc(100vw - 32px));max-height:calc(100dvh - 32px);z-index:9100}.case__tracks{max-height:23dvh}.case__actions{position:sticky;bottom:-12px;background:#171a15;padding:12px 0;margin:0}.case__visual{max-height:340px}.case-backdrop{z-index:9050}@media(max-width:639px){.case{right:8px!important;left:8px!important;top:auto!important;bottom:8px;width:auto;max-height:78dvh}.case__visual{max-height:270px;width:min(100%,300px);margin:auto}.case__tracks{max-height:18dvh}}@media(min-width:1100px){body.has-case #crtScreen{margin-right:400px}}

/* ======================================================================
   THE SHOP STANDS ON THE TERMINAL GROUND

   Measured on this build before the change, and every one of these is
   text a customer has to read:

     product__meta   #6d675d  on the sage wall #78857a   1.45 : 1
     product__name   #23201b  on the sage wall           4.20 : 1
     shop__filter    white 78% on the sage wall          3.86 : 1
     shop__note      white 66% on the sage wall          3.86 : 1

   The shop was wearing the deck room's wall. The menu in this same build
   already uses a terminal palette and measures 15:1, so the palette was
   here all along — it just never reached the pages.

   THE TOKENS ARE SPELLED OUT, NOT INHERITED. Only index's stylesheet
   defines --term-*; the shop's two sheets define none. A var() with no
   definition resolves to nothing, and `background-color: <nothing>` is
   transparent, not an error — which is how a basket panel once shipped
   see-through with no warning anywhere. So they are declared here.

   index.html is deliberately untouched: the deck is a room with a sage
   wall, the shop is a terminal. Only .shop-body pages change.
   ====================================================================== */

:root {
  --term-bg: #0a140a;
  --term-bg-deep: #060d06;
  --term-green: #66ff66;
  --term-dim: #5ac668;
  --term-mid: #78e084;
  --term-hot: #d8ffd2;
  --term-line: #3ddc57;
  --term-figure: #f6f4ec;
  --term-grid:
    repeating-linear-gradient(0deg,  rgba(0,0,0,.55) 0 1px, transparent 1px 2px),
    repeating-linear-gradient(90deg, rgba(0,0,0,.40) 0 1px, transparent 1px 2px);
}

body.shop-body {
  background-color: #060d06;
  background-image: var(--term-grid);
  color: #66ff66;
  min-height: 100vh;
}
/* the CRT mode paints its own backdrop behind the warped screen */
body.shop-body.has-crt::before { background: #060d06; }

/* --- the grid's cards ------------------------------------------------- */
.shop-body .product__open {
  background-color: #0a140a;
  background-image: var(--term-grid);
  border: 1px solid rgba(61,220,87,.34);
  color: #d8ffd2;
}
.shop-body .product__open:hover { border-color: #3ddc57; }
/* the photograph keeps its white sweep — that is what a product photo is,
   and it is the only light rectangle left on the page */
.shop-body .product__frame { background: #f6f3ea; }
.shop-body .product__name  { color: #d8ffd2; }
.shop-body .product__meta  { color: #5ac668; }

/* a price is the one number somebody has to read exactly, so it is the
   plainest thing on the page rather than the most decorated */
.shop-body .product__price,
.shop-body .price,
.shop-body .basket-total,
.shop-body .order-line__price { color: #f6f4ec; text-shadow: none; }

/* --- notes, filters, footers ------------------------------------------ */
.shop-body .shop__note,
.shop-body .shop__foot { color: #5ac668; }
.shop-body .shop__filter {
  background: rgba(102,255,102,.06);
  border: 1px solid rgba(61,220,87,.34);
  color: #78e084;
}
.shop-body .shop__filter.is-current { background: #3ddc57; color: #060d06; }

/* --- the order card reads as a panel, like the basket ------------------ */
.shop-body .order-card,
.shop-body .order-downloads,
.shop-body .basket-panel {
  background-color: #0a140a;
  background-image: var(--term-grid);
  border: 1px solid rgba(61,220,87,.34);
  color: #d8ffd2;
}
.shop-body .order-card__title,
.shop-body .order-downloads__title { color: #66ff66; }
.shop-body .order-card__sub,
.shop-body .order-card__foot,
.shop-body .order-downloads__note,
.shop-body .basket-status { color: #5ac668; }
.shop-body .order-lines > *,
.shop-body .basket-line { border-bottom: 1px solid rgba(61,220,87,.32); }

/* ======================================================================
   THE ACCOUNT PANEL ON THE DECK PAGE

   Separate problem, same cause. .account is written in white at 86% but
   sits inside .cabinet__inner, which is #efece4 — near-white on near-white,
   1.18 : 1, the worst number on the site. The white text says the panel was
   meant to have a dark ground of its own and never got one, so it gets one
   here rather than repainting the type to fight the cabinet.
   ====================================================================== */
.account {
  background: #12180f;
  border: 1px solid rgba(61,220,87,.28);
  border-radius: 10px;
  padding: 16px 18px;
}
.account__title { color: #d8ffd2; }
.account__reason { color: #f0d9a8; }
/* white at 45% measured 4.50:1 once the panel went dark — technically a pass,
   but this is 9.6px uppercase with letter-spacing, which is the hardest thing
   on the panel to read. 72% puts it at 8.7:1 with room to spare. */
.account__state { color: rgba(255,255,255,.72); }

/* ======================================================================
   THE LANGUAGE KEYS AND THE SOCIAL LINKS

   Both in the logo's phosphor, both 44px tall so they are real touch
   targets on a phone. Colours are literal rather than var() because two of
   the three stylesheets here define no --term-* tokens at all, and an
   undefined custom property resolves to nothing rather than to an error.
   ====================================================================== */

/* No margin-left:auto here. .site-head__tag already carries one, and two
   auto margins split the free space between them — which parked the tag at
   x=589 with the mark, absolutely centred, spanning 625-815. They overlapped
   by 16px on every shop page at 1440. One auto margin, on the tag, keeps the
   keys and the basket together at the end and leaves the centre clear. */
.lang-select {
  display: inline-flex; gap: 0; align-items: stretch;
  padding: 0;
  font-family: "Arial Narrow","Helvetica Neue",Helvetica,Arial,sans-serif;
}
.lang-select__key {
  appearance: none; cursor: pointer;
  min-width: 32px; min-height: 44px; padding: 0 4px;
  border: 1px solid rgba(61,220,87,.45); border-radius: 0;
  background: transparent;
  color: #66ff66;
  font: 700 .6rem/1 inherit; letter-spacing: .08em; text-transform: uppercase;
  text-shadow: 0 0 6px rgba(102,255,102,.45);
}
.lang-select__key:hover { background: rgba(61,220,87,.16); }
.lang-select__key:focus-visible { outline: 2px solid #d8ffd2; outline-offset: -3px; }
.lang-select__key[aria-pressed="true"] {
  background: #3ddc57; color: #060d06; text-shadow: none;
}

.site-social { display: flex; gap: 10px; justify-content: center; padding: 26px 16px 34px; }
.social__key {
  display: inline-flex; align-items: center;
  min-height: 44px; padding: 0 14px;
  border: 1px solid #3ddc57; border-radius: 0;
  color: #66ff66; text-decoration: none;
  font-family: "Arial Narrow","Helvetica Neue",Helvetica,Arial,sans-serif;
  text-transform: uppercase; letter-spacing: .14em;
  font-weight: 700; font-size: .68rem;
}
.social__key:hover { background: rgba(61,220,87,.16); color: #d8ffd2; border-color: #d8ffd2; }
.social__key:focus-visible { outline: 2px solid #d8ffd2; outline-offset: -3px; }


/* ======================================================================
   THE HEADER ON A PHONE

   .site-head__home is position:absolute, left:50%, translate(-50%) — the
   mark floats over the header rather than sitting in it. That was survivable
   when the header held a back arrow and a basket key. With four language
   keys as well it is not: measured at 390px, the mark (120-270) sat on top
   of the basket key (190-246) and the language keys (252-380).

   Below 560px the header becomes two rows and the mark goes back into the
   flow, so there is nothing underneath it to collide with.
   ====================================================================== */
@media (max-width: 560px) {
  .site-head {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    min-height: 0;
    padding: 10px 10px 8px;
  }
  .site-head__home {
    position: static !important;
    transform: none !important;
    order: 1;
    flex: 0 0 100%;
    width: auto !important;
    justify-content: center;
  }
  .site-head__home-logo { width: 132px !important; height: 44px; }
  .site-head .shop-back   { order: 2; }
  .site-head__tag         { order: 3; margin-left: 0 !important; }
  .site-head .lang-select { order: 4; margin-left: auto; }
  .site-head .basket-key  { order: 5; }
}

@media (min-width: 561px) and (max-width: 1200px) {
  /* The mark is centred and absolutely positioned, so the header's free space
     is the only thing keeping anything out of the middle. At 1440 there is
     enough of it; at 820 the tag's auto margin walks it straight into the
     mark — measured, 50px of overlap. Below 1200 the tag sits on the left
     beside the back arrow, where there is nothing to collide with. */
  .site-head__tag { margin-left: 8px !important; }
}

/* ======================================================================
   THE PROJECTION, AND THE PRODUCT PAGE

   MONOCHROME. The earlier version pushed the photograph through
   `sepia(1) hue-rotate(160deg) saturate(5.5)`, which is what made it blue.
   GG's rule is that the CRT treatment is monochrome and there is no
   blue/cyan wash, so the chain lands on the same green phosphor the rest
   of the site already uses — one hue, like the deck screen and the menu.

   WHAT THIS IS, PLAINLY: two photographs on a plane that turns. Not a 3D
   model, and it does not pretend to be — at 90 degrees the plane is
   edge-on and the shirt is a line, which is exactly what a sheet of
   projected light does. Nothing is synthesised: where a product was only
   photographed once the plane is single-sided and its reverse is its own
   mirror, and the caption says so.
   ====================================================================== */

.holo { position: relative; width: 100%; height: 100%; display: grid; place-items: center;
        perspective: 1100px; overflow: hidden; }
.holo__stage { position: relative; width: 74%; aspect-ratio: 1/1; transform-style: preserve-3d;
               display: grid; place-items: center; }
.holo__card { position: relative; width: 100%; height: 100%; transform-style: preserve-3d;
              will-change: transform; }
.holo__face {
  position: absolute; inset: 0;
  background-size: contain; background-position: center; background-repeat: no-repeat;
  backface-visibility: hidden; -webkit-backface-visibility: hidden;
  filter: grayscale(1) brightness(1.18) contrast(1.12)
          sepia(1) hue-rotate(72deg) saturate(3.2)
          drop-shadow(0 0 10px rgba(102,255,102,.45));
  opacity: .88;
}
.holo__face--back { transform: rotateY(180deg); }
/* One-sided items: the plane is see-through from behind, so turning it round
   shows the genuine mirror of the photograph rather than a second front
   pretending to be a back. */
.holo__face--only { backface-visibility: visible; -webkit-backface-visibility: visible; }

/* the light it stands in */
.holo__cone { position: absolute; left: 50%; top: 4%; width: 74%; height: 92%;
  transform: translateX(-50%);
  background: linear-gradient(to bottom, rgba(102,255,102,.10), rgba(102,255,102,.02) 70%, transparent);
  clip-path: polygon(34% 0, 66% 0, 100% 100%, 0 100%); pointer-events: none; }
.holo__pad { position: absolute; left: 50%; bottom: 6%; width: 46%; height: 5%;
  transform: translateX(-50%);
  background: radial-gradient(ellipse at center, rgba(160,255,170,.55), rgba(102,255,102,.12) 55%, transparent 72%);
  filter: blur(2px); pointer-events: none; }
/* scan bars, drifting upward */
.holo__scan { position: absolute; inset: 0; pointer-events: none;
  background: repeating-linear-gradient(to bottom, rgba(0,0,0,.22) 0 1px, transparent 1px 4px);
  animation: holo-drift 5.5s linear infinite; }
@keyframes holo-drift { to { background-position-y: -40px; } }
/* stepped, irregular — a smooth sine reads as a fade, not as unstable light */
@keyframes holo-flicker {
  0%, 92%, 100% { opacity: .88 } 93% { opacity: .78 } 94% { opacity: .9 }
  96% { opacity: .82 } 97% { opacity: .88 }
}
.holo__card { animation: holo-flicker 4.3s steps(1, end) infinite; }
.holo.is-held { cursor: grabbing; }
@media (prefers-reduced-motion: reduce) {
  .holo__card, .holo__scan { animation: none; }
}

/* --- the page itself -------------------------------------------------- */
.product__layout { display: grid; gap: 28px; grid-template-columns: minmax(0,1fr) minmax(0,1fr);
                   align-items: start; max-width: 1100px; margin: 0 auto; padding: 0 16px 40px; }
@media (max-width: 860px) { .product__layout { grid-template-columns: minmax(0,1fr); } }
.product__stage { position: relative; width: 100%; aspect-ratio: 1/1; display: grid; place-items: center;
                  background: #f6f3ea; border: 1px solid rgba(61,220,87,.34); }
.product__stage.is-holo { background: #050a06; }
.product__photo { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.product__views { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.product__view-key, .product__size, .product__buy {
  appearance: none; cursor: pointer; min-height: 44px; padding: 0 14px;
  font-family: "Arial Narrow","Helvetica Neue",Helvetica,Arial,sans-serif;
  text-transform: uppercase; letter-spacing: .14em; font-weight: 700; font-size: .68rem;
  border: 1px solid rgba(61,220,87,.45); border-radius: 0;
  background: transparent; color: #66ff66;
}
.product__view-key:hover, .product__size:hover, .product__buy:hover { background: rgba(61,220,87,.16); }
.product__view-key[aria-pressed="true"], .product__size[aria-pressed="true"] {
  background: #3ddc57; color: #060d06;
}
.product__buy { width: 100%; background: #3ddc57; color: #060d06; margin-top: 14px; }
.product__buy[disabled] { opacity: .5; cursor: not-allowed; }
.holo-note { margin: 8px 0 0; font-size: .68rem; letter-spacing: .1em; text-transform: uppercase;
             color: #5ac668; }
.product__detail { background-color: #0a140a; background-image: var(--term-grid);
                   border: 1px solid rgba(61,220,87,.34); padding: 18px; }
.product__title { margin: 0 0 6px; font-size: 1.15rem; letter-spacing: .06em;
                  text-transform: uppercase; color: #d8ffd2; }
.product__price { margin: 0 0 10px; font-size: 1.05rem; color: #f6f4ec; text-shadow: none; }
.product__type, .product__sizes-label { margin: 0 0 6px; font-size: .66rem; letter-spacing: .14em;
                  text-transform: uppercase; color: #5ac668; }
.product__sizes { display: flex; flex-wrap: wrap; gap: 6px; }
.product__desc { margin-top: 18px; color: #78e084; font-size: .82rem; line-height: 1.6; }
.product__desc p { margin: 0 0 10px; }
.product__release { margin-top: 26px; padding-top: 18px; border-top: 1px solid rgba(61,220,87,.32); }
.product__release-label { margin: 0 0 10px; font-size: .64rem; letter-spacing: .16em;
                          text-transform: uppercase; color: #5ac668; }
/* square, because it is the cover — not a strip with the title printed twice */
.product__release-art { width: 100%; height: auto; max-width: 260px; aspect-ratio: 1;
  object-fit: contain; display: block; margin: 0 0 12px;
  border: 1px solid rgba(61,220,87,.4); background: #0a0f0a; }
.product__release-title { margin: 0 0 4px; font-size: .92rem; color: #d8ffd2; }
.product__release-note { margin: 0; font-size: .74rem; color: #5ac668; }
.product__loading, .product__missing { padding: 60px 16px; text-align: center; color: #66ff66; }
.product__back-link { color: #66ff66; }

/* css/patches-v46.css */
/* v46 additive patch sheet — kept separate from the bundled dist/style-*.css
   because this deployment ships no build tooling to re-run esbuild against
   css/archive.css or css/merch.css. Loaded directly, unbundled, same
   reasoning as js/downloads-panel.js and js/downloads-shop.js this version. */

/* Case view (index.html): a release with no physical cassette to
   photograph shows its real cover art instead of a faked product shot. */
.case__digital {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  padding: 18px 10px; text-align: center;
}
.case__digital-cover {
  width: 62%; max-width: 220px; aspect-ratio: 1 / 1; object-fit: cover;
  border-radius: 4px; box-shadow: 0 9px 18px rgba(0,0,0,.35);
}
.case__digital-note { margin: 0; font-size: .78rem; color: rgba(255,255,255,.7); }
.case__digital-link {
  display: inline-block; margin-top: 2px; font-size: .8rem; font-weight: 700;
  color: var(--led-amber, #f2b134); text-decoration: underline;
}

/* Downloads shop sheet (downloads.html): tracklist + related merch. */
.sheet__tracks { margin: 10px 0 0; padding: 0; list-style: none; }
.sheet__tracks:not([hidden]) { border-top: 1px solid rgba(0,0,0,.1); padding-top: 8px; }
.sheet__track {
  display: flex; gap: 8px; align-items: baseline; padding: 3px 0;
  font-size: .78rem; line-height: 1.35;
}
.sheet__track-n { flex: none; width: 1.4em; color: #92897a; font-variant-numeric: tabular-nums; }
.sheet__track-title { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.sheet__track-artist { flex: none; color: #6d675d; font-size: .72rem; max-width: 45%; text-align: right; overflow-wrap: anywhere; }

.sheet__merch { margin: 12px 0 0; padding-top: 10px; border-top: 1px solid rgba(0,0,0,.1); }
.sheet__merch:not([hidden]) { display: block; }
.sheet__merch-label { margin: 0 0 6px; font-size: .66rem; letter-spacing: .1em; text-transform: uppercase; color: #777064; }
.sheet__merch-list { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 6px; }
.sheet__merch-link {
  display: inline-block; padding: 6px 10px; font-size: .74rem; font-weight: 600;
  border: 1px solid #ccc6b7; border-radius: 999px; color: #23201b; text-decoration: none;
}
.sheet__merch-link:hover { background: #f1ece0; }
.sheet__merch-link:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }

/* GG: MP3 download comes off the main screen entirely -- downloading only
   happens through the shop now. The per-track save button is generated by
   the frozen dist/main-*.js bundle on every tracklist render, so hiding it
   here (rather than patching the bundle) is what actually holds regardless
   of how many times that list re-renders. */
.deck-track__save { display: none !important; }

/* css/patches-v62-mobile-fixes.css */
/* v62 — two mobile fixes, loaded unbundled for the same reason as
   patches-v46/v59: no build tooling here to fold these into dist/*, and
   /assets and /dist are served immutable for a year (see _headers), so a
   fix has to arrive as a brand-new file rather than an edit to a cached one.

   1. THE BLACK-ON-SCROLL BUG.
      `body.has-crt .screen` is both the barrel-warp filter target
      (`filter: url(#crt-barrel)`) AND the fixed, internally-scrolling
      container (`position: fixed; overflow-y: auto;
      -webkit-overflow-scrolling: touch`) for the entire page. That exact
      combination — an SVG filter on the element that is also its own
      momentum-scrolling viewport — is a known iOS/WebKit rendering fault:
      content scrolled into view is not repainted and shows solid black
      until something forces a recomposite, which scrolling back over it
      does. That is exactly "scroll down, it's black underneath; scroll up
      and the image is there." CRT mode is on by default, so this hits most
      phone visitors, most of the time.

      It is also already documented as the single most expensive CRT layer
      (see the frame-rate comment in <head>: ~13.4fps with the warp off
      against ~7.4fps with it on) — removing it on handheld widths is a
      performance win as well as the actual bug fix. The scanlines,
      vignette, edge and bezel are separate non-filtered fixed overlays and
      are untouched, so CRT mode still reads as CRT mode on a phone.

   2. LANGUAGE BUTTONS, OUT OF THE HEADER ON A PHONE.
      js/i18n.js now builds the EN/NL/DE/FR switcher twice: once into
      .site-head (unchanged — desktop keeps it there) and once into a new
      .menu__lang section at the bottom of the hamburger menu. This just
      hides the header copy below the site's own phone breakpoint and
      styles the menu copy to match the menu's existing settings-style
      sections (see .menu__screen, the CRT toggle, in css). */

@media (max-width: 1099px) {
  body.has-crt .screen { filter: none; }
}

@media (max-width: 639px) {
  .site-head .lang-select { display: none; }
}

.menu__lang {
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid rgba(0, 0, 0, .12);
}
.menu__lang .lang-select {
  flex-wrap: wrap;
}

/* v63 — product page, size/buy buttons unresponsive to taps on some mobile
   browsers. No blocking overlay or handler was found (pointer events land on
   the button itself; the hologram's own drag listeners are scoped to its own
   element and release cleanly). The one real gap: these buttons never
   declared touch-action, so a touchscreen's default gesture handling (which
   includes double-tap-to-zoom detection and up to a ~300ms delay deciding
   whether a tap is the start of a zoom/scroll gesture) is left to guess on
   every tap instead of being told plainly "this is a tap target". Also
   widens the gap between size chips slightly on narrow screens so adjacent
   36-44px buttons are less likely to catch a miss-tap on their neighbour. */
.product__size,
.product__buy,
.product__view-key {
  touch-action: manipulation;
}

@media (max-width: 480px) {
  .product__sizes { gap: 10px; }
}

/* v71 — Language + Elsewhere (social) sat stranded near the very bottom of
   the hamburger menu, "too far into the bottom-left" on desktop. Root cause:
   .menu__frame forces height:100% of the full-viewport-height .menu drawer,
   and .menu__panel's flex-grow always stretches to fill whatever is left —
   so a short tab (Artists, 3-4 rows) leaves a large empty gap above
   Language/Elsewhere, shoving both down to the literal bottom edge. Same
   flex math runs identically at every width — desktop, tablet and phone all
   showed the same stranding when checked.

   Fix: let the visible bordered terminal box size to its own content
   instead of forcing full height, so Language/Elsewhere follow immediately
   after whatever tab content is showing. The outer .menu drawer is
   untouched (still full height, still the click target/backdrop). The
   active tab panel keeps a generous cap plus its own scroll for genuinely
   long lists (the Artists tab already runs to 8 rows and will keep
   growing), so nothing can overflow past .menu's own edge (.menu has
   overflow: hidden). Downloads/Merch are just a short callout each, well
   under the cap either way. */
.menu__frame {
  height: auto;
  max-height: 100%;
}
.menu__panel {
  flex: 0 1 auto;
  max-height: min(52vh, 460px);
}

/* v73 — Language + Elsewhere still read as "too far to the left" after v71
   fixed the vertical stranding. Real cause: .menu__lang and .menu__social
   have no horizontal padding at all (only padding-top, from the original
   v62 rule), so their text/buttons sit flush against .menu__frame's inner
   edge — while .menu__panel (everything above them: the artist list,
   downloads/merch callouts) has 14px of padding on every side. That 14px
   gap is what makes the rest of the menu look properly inset; Language and
   Elsewhere were the only two sections missing it, so they visibly stick
   out to the left of everything above them. Match the panel's padding. */
.menu__lang,
.menu__social {
  padding-left: 14px;
  padding-right: 14px;
}

/* v74 — EQ bands read as "glitchy, fights with scroll" on touch. Root cause:
   the 10 EQ faders (.tone-band input, real vertical <input type=range>) had
   no touch-action set at all, so on a touchscreen the browser has to guess
   mid-drag whether a vertical drag means "move the slider" or "scroll the
   page", and can change its mind partway through — read as glitchy/hard to
   hit. Same fix already used for the volume/rec-level knob (.knob, above,
   already has touch-action:none) and the v63 product-page buttons.
   NOTE: this rule was originally (and uselessly) added to css/tone.css —
   tone.css is only a *source* for the frozen dist/style-*.css bundle (see
   the big comment on js/shelf-patch.js for why there's no build tooling
   here to regenerate that bundle), so it never reached the live page. This
   patch file is what's actually <link>-ed after the bundle, so this is the
   copy that counts. */
.tone-band input {
  touch-action: none;
}

/* v76 — GG asked for the volume/rec-level knobs to click through 11 fixed
   positions (0-10) instead of moving freely, with the full 0-10 scale
   printed around the knob (like a real stepped hardware dial) rather than
   just reported to assistive tech. The interactive/detent half of this is
   js/knob-patch.js (new, unbundled, loaded from index.html) — same "frozen
   bundle, patch from outside it" situation as the touch-action rule just
   above; js/utils.js/deckControls.js/main.js were updated too, for
   whenever this site's bundle is next rebuilt, but knob-patch.js is what
   actually runs today. This half is just the printed scale's appearance:
   11 <span>s (0-10, index.html's #volumeKnobTicks/#recordVolumeKnobTicks,
   built into the page already) arranged in a circle around the dial.
   --knob-r is each tick's distance from the knob's own center, kept as a
   custom property so it can be tuned per breakpoint below as .knob itself
   changes size. Each tick's angle exactly matches one of makeKnob's 11
   possible pointer rotations -- KNOB_MIN_DEG=-90 to KNOB_MAX_DEG=90, in
   steps of 18deg: a clean left/9-o'clock -> top/12 -> right/3-o'clock
   sweep (v78 -- the original -132/132 range let 0 and 10 dip down past
   horizontal at each end, which read as "numbers running along the
   bottom") -- so the pointer always ends up aimed straight at whichever
   number is current. The gap between the two knobs was widened
   from 12px so their scales don't collide (verified via screenshot at
   desktop, 760px and 639px widths — 12px put "8" and "2" on top of each
   other). js/knob-patch.js toggles .is-active on whichever tick is current. */
.knobs {
  gap: 44px;
}
.knob-dial {
  position: relative;
  --knob-r: 40px;
}
.knob-dial__ticks {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.knob-dial__tick {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 1.4em;
  margin-left: -.7em;
  text-align: center;
  font: 700 9px/1 monospace;
  color: #6b6d63;
  transform: rotate(var(--tick-angle)) translateY(calc(-1 * var(--knob-r))) rotate(calc(-1 * var(--tick-angle)));
}
.knob-dial__tick.is-active {
  color: #174e23;
}
@media (max-width: 860px) {
  .knobs { gap: 40px; }
}
@media (max-width: 760px) {
  .knob-dial { --knob-r: 37px; }
}
/* v127 -- phone: the 0-10 numbers were printing ON the knob, not around it.
   The knob stays 58px wide on phones (radius 29px), but this rule had pulled
   the numbers in to a 28px radius, so every number sat on the knob's own
   edge. Measured live at 390px and 320px wide. The fix:
   - radius back to 37px, the same clearance as tablet
   - 8px type
   - 14px top margin, so "4"/"5" clear the REC button above
   - 16px side padding: .deck__meters is flex-end, and without it REC LEVEL's
     "10" ran past the deck's right edge and was clipped
   Verified at 390, 360 and 320px wide: no tick on the knob face, 14px clear
   of REC, 15px between the two scales, and every tick inside the deck. */
@media (max-width: 639px) {
  .knob-dial { --knob-r: 37px; }
  .knob-dial__tick { font-size: 8px; }
  .knobs { margin-top: 14px; padding: 0 16px; }
}

/* v79 -- desktop/tablet: the "5" tick (top of the 0-10 arc, closest to the
   transport row above) was touching/overlapping the REC button -- confirmed
   live (0px gap between the REC LEVEL knob's "5" tick and REC's bottom
   edge at 900px-1440px+, where the transport buttons + REC sit on their own
   row above .knobs). The tick sits --knob-r above the knob's own center,
   which is a few px taller than half of .knob-dial's own box, so the tick
   was already poking out above .knob-dial before this -- .knobs just had
   zero margin to absorb that. Below ~870px the transport row and .knobs
   share one row instead (see the merch/downloads-style single-row layout),
   where this doesn't apply and margin-top would only add unwanted space. */
@media (min-width: 900px) {
  .knobs { margin-top: 24px; }
}

/* v92 -- mobile landscape: the hamburger menu (.menu) is a fixed-height,
   full-viewport drawer with `overflow: hidden` (see the v71 note above --
   that's deliberate there, to stop the active tab panel's own scroll from
   also scrolling the whole drawer). At a short landscape height like
   812x375 the drawer is only ~371px tall but its content -- tab strip, the
   active tab panel, then the Language and Elsewhere (social) block below
   it -- runs to ~475px. With no scroll on the drawer itself, that last
   ~104px (Language + social links) is simply clipped off and unreachable.
   Confirmed live via an iframe at 812x375: menu.scrollHeight (475) >
   menu.clientHeight (371), overflow-y: hidden.

   Fix: let the drawer scroll, but only in the cramped landscape case --
   portrait phones are already tall enough that this never triggers, and
   leaving overflow: hidden everywhere else keeps the v71 behavior intact. */
@media (max-width: 900px) and (orientation: landscape) {
  .menu {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }
}

/* Pre-launch audit (Oct 2026): iPhones zoom the whole page in when a text
   field smaller than 16px gets focus — sign-in, fan sign-up, artist portal,
   basket discount code. 16px on touch screens stops that. */
@media (pointer: coarse) {
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),
  select, textarea { font-size: max(16px, 1em) !important; }
}

/* css/patches-v63-menu.css */
/* v63 — Videos sits with the other menu sections as a plain link: it is a
   page of its own, so it navigates rather than opening a panel. */
.menu__tab--link{display:flex;align-items:center;justify-content:center;text-decoration:none;text-align:center}

/* css/site-menu-v1.css */
/* ======================================================================
   Site menu on every page (v1, Oct 2026).
   The home page's hamburger menu styles, copied verbatim from its own
   stylesheet (dist/style-692021415208.css) so the menu on the other pages
   looks identical, plus the page list js/ui/site-menu.js renders.
   ====================================================================== */
.menu-key{flex:none;appearance:none;cursor:pointer;width:46px;height:46px;min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #8d8e88;border-radius:6px;background:linear-gradient(145deg,#f4f4f0,#d7d8d2 42%,#b2b3ad);box-shadow:0 2px #8b8c85,inset 0 1px #ffffffa6}
.menu-key:active{transform:translateY(1px);box-shadow:0 1px #8b8c85}
.menu-key:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.menu-key__bars{display:grid;gap:4px;width:20px}
.menu-key__bars i{display:block;height:2px;background:#3a3730;border-radius:1px}
.menu-scrim{position:fixed;inset:0;z-index:60;background:#100e0b8c;backdrop-filter:blur(2px)}
.menu{position:fixed;z-index:61;inset:0 auto 0 0;width:min(420px,92vw);display:flex;flex-direction:column;background:linear-gradient(180deg,#efece3,#e2ded2);border-right:1px solid rgba(0,0,0,.25);box-shadow:4px 0 28px -8px #0009;overflow:hidden}
.menu__head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 14px 10px;border-bottom:1px solid rgba(0,0,0,.14)}
.menu__heading{margin:0;font-size:.95rem;letter-spacing:.04em;color:#23201b}
.menu__close{appearance:none;cursor:pointer;background:none;border:none;min-width:44px;min-height:44px;font-size:1.5rem;line-height:1;color:#3a3730}
.menu__close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.menu__tabs{display:flex;gap:4px;padding:10px 12px 0}
.menu__tab{appearance:none;cursor:pointer;font-family:inherit;flex:1 1 0;min-height:44px;padding:0 8px;border:1px solid #b6b1a4;border-bottom:none;border-radius:6px 6px 0 0;background:#d9d5c9;color:#55504a;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700}
.menu__tab.is-current{background:#f6f3ea;color:#23201b}
.menu__tab:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.menu__panel{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px;background:#f6f3ea;border-top:1px solid #b6b1a4}
.menu__note{margin:0 0 12px;font-size:.74rem;line-height:1.45;color:#5d574e}
.menu,.menu__panel{color:#23201b}
.artist-list{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.artist{appearance:none;cursor:pointer;font-family:inherit;width:100%;min-height:46px;padding:0 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #ccc6b7;border-radius:6px;background:#fffdf7;color:#23201b;text-align:left}
.artist:hover{background:#f1ece0}
.artist:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.artist__name{font-weight:700;font-size:.84rem}
.artist__count{flex:none;font-size:.66rem;letter-spacing:.06em;color:#6d675d;text-transform:uppercase}
@media(max-width:520px){.menu{width:100vw}}
.menu__note--link{display:inline-block;margin-top:10px;color:#5d574e}
.menu{background:var(--term-bg-deep);border-right:none;color:var(--term-green);box-shadow:6px 0 40px -10px #000000e6;font-family:Arial Narrow,Helvetica Neue,Helvetica,Arial,sans-serif}
.menu:before{content:"";position:absolute;inset:0;pointer-events:none;background-color:var(--term-bg-deep);background-image:repeating-linear-gradient(0deg,rgba(90,255,120,.03) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(90,255,120,.022) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(0,0,0,.3) 0 2px,transparent 2px 7px),radial-gradient(130% 100% at 50% 0%,rgba(70,220,90,.1),transparent 62%);z-index:0}
.menu:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:3;background-image:repeating-linear-gradient(0deg,rgba(0,0,0,.55) 0 1px,transparent 1px 2px),repeating-linear-gradient(90deg,rgba(0,0,0,.4) 0 1px,transparent 1px 2px);mix-blend-mode:multiply;opacity:.8}
.menu>*{position:relative;z-index:2}
.menu__frame{position:relative;display:flex;flex-direction:column;min-height:0;height:100%;margin:10px;border:1px solid var(--term-line);box-shadow:0 0 0 3px var(--term-bg-deep),0 0 0 4px #3ddc5773,0 0 18px #3ddc572e}
.menu__titlebar{flex:none;display:flex;align-items:stretch;border-bottom:1px solid var(--term-line);min-height:34px}
.menu__titlebar-label{flex:1 1 auto;display:flex;align-items:center;justify-content:center;padding:0 10px;font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;font-weight:700;color:var(--term-green);text-shadow:0 0 6px rgba(102,255,102,.55)}
.menu__close{flex:none;width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;appearance:none;cursor:pointer;border:none;border-left:1px solid var(--term-line);background:var(--term-line);color:var(--term-bg-deep);font-size:1.1rem;font-weight:800;line-height:1}
.menu__close:hover{background:var(--term-hot)}
.menu__close:focus-visible{outline:2px solid var(--term-hot);outline-offset:-4px}
.menu__home{flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;padding:clamp(14px,4vh,26px) 14px clamp(10px,3vh,18px);text-decoration:none;border-bottom:1px solid rgba(61,220,87,.35)}
.menu__home:focus-visible{outline:2px solid var(--term-hot);outline-offset:-3px}
.menu__home-mark{display:block;width:min(74%,320px);aspect-ratio:1800 / 919;background-color:var(--term-green);-webkit-mask-image:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp);mask-image:url(../assets/brand/lifelong-logo-official-black-transparent-600.webp);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;filter:drop-shadow(0 0 10px rgba(102,255,102,.45))}
.menu__home:hover .menu__home-mark{background-color:var(--term-hot)}
.menu__home-sub{font-size:.56rem;letter-spacing:.28em;text-transform:uppercase;color:var(--term-dim)}
.menu__home:hover .menu__home-sub{color:var(--term-mid)}
.menu__tabs{flex:none;display:flex;gap:0;padding:0;border-bottom:1px solid var(--term-line)}
.menu__tab{flex:1 1 0;min-height:46px;padding:0 6px;appearance:none;cursor:pointer;font-family:inherit;border:none;border-right:1px solid rgba(61,220,87,.35);border-radius:0;background:transparent;color:var(--term-dim);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;font-weight:800}
.menu__tab:last-child{border-right:none}
.menu__tab:hover{color:var(--term-mid);background:#3ddc570f}
.menu__tab.is-current{background:var(--term-line);color:var(--term-bg-deep);text-shadow:none}
.menu__tab:focus-visible{outline:2px solid var(--term-hot);outline-offset:-4px}
.menu__panel{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px;background:transparent;border-top:none;color:var(--term-green);scrollbar-color:var(--term-dim) transparent}
.menu__note{color:var(--term-dim);font-size:.72rem;line-height:1.5;letter-spacing:.02em}
.artist{background:transparent;border:1px solid rgba(61,220,87,.28);border-radius:0;color:var(--term-green)}
.artist:hover{background:#3ddc571a;border-color:var(--term-line)}
.artist:focus-visible{outline:2px solid var(--term-hot);outline-offset:-3px}
.artist__name{letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px rgba(102,255,102,.35)}
.artist__count{color:var(--term-dim)}
.menu__screen{border-top:1px solid rgba(61,220,87,.35)}
.menu-scrim{background:#020602b8}
@media(max-width:520px){.menu__frame{margin:6px}.menu__home-mark{width:min(82%,260px)}.menu__tab{min-width:0;padding-inline:3px;font-size:.56rem;line-height:1.15;letter-spacing:.06em;overflow-wrap:anywhere}.menu__titlebar-label{min-width:0;font-size:.56rem;letter-spacing:.12em;overflow-wrap:anywhere}.menu__panel,.menu__note,.dl-block__body,.dl-block__title{min-width:0;overflow-wrap:anywhere}}
@media(min-width:900px){.menu__home-mark{width:min(70%,360px)}}
@media(max-width:639px){.menu:after{opacity:.5}}
@media(prefers-reduced-motion:reduce){.menu__home-mark{filter:none}}
.menu-key,.menu-key:active,.shop-back{border:0!important;background:none!important;box-shadow:none!important;color:#6f6!important;min-width:48px;min-height:48px}
.menu-key__bars{width:28px}
.menu-key__bars i{background:#6f6!important;height:3px}
.basket-key:hover,.menu-key:hover{filter:drop-shadow(0 0 5px #66ff6680)}
.menu,.menu-scrim{visibility:hidden!important;pointer-events:none!important;opacity:0!important}
body.has-menu .menu,body.has-menu .menu-scrim{visibility:visible!important;pointer-events:auto!important;opacity:1!important}
/* page list (other pages; the home page keeps its own artist/downloads panels) */
.site-menu__list{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.site-menu__link{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:46px;padding:6px 12px;
  border:1px solid rgba(92,240,143,.35);border-radius:4px;background:rgba(0,0,0,.28);color:#6ef08a;text-decoration:none;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-shadow:0 0 6px rgba(92,240,143,.35)}
.site-menu__link:hover{background:rgba(92,240,143,.12)}
.site-menu__link:focus-visible{outline:2px solid #6ef08a;outline-offset:-2px}
.site-menu__link b{font-size:.78rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.site-menu__link small{font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:rgba(110,240,138,.6);text-align:right}
.site-menu__link[aria-current=page]{background:#2fbf5a;border-color:#2fbf5a;color:#04130a;text-shadow:none}
.site-menu__link[aria-current=page] small{color:rgba(4,19,10,.7)}
a.menu__tab{display:flex;align-items:center;justify-content:center;text-decoration:none;text-align:center}
.site-head .menu-key + .shop-back{margin-left:6px}

/* v2: one list everywhere. Home page: hide the old tab row and the
   downloads/merch panels (their own pages are a row away now) */
.menu--simple .menu__tabs,.menu--simple #panelDownloads,.menu--simple #panelMerch{display:none!important}
.menu--simple #panelArtists{display:block!important}
.site-menu__sub{margin:16px 0 8px}
.menu__panel .site-menu__list + .site-menu__sub{border-top:1px solid rgba(92,240,143,.2);padding-top:14px}

/* css/patches-v63-shop.css */
/* v63 — the display-currency control sat unstyled above the filters
   (css/merch.css held its rule but merch.html never loaded that file).
   It now reads as part of the green terminal toolbar. */
.shop-body .shop__currency{
  display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;
  margin:0 0 14px;padding:0;
  font:600 .7rem/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;
  letter-spacing:.08em;text-transform:uppercase;color:#5ac668;
}
.shop-body .shop__currency label{color:#5ac668}
.shop-body .shop__currency select{
  appearance:none;-webkit-appearance:none;cursor:pointer;
  min-height:36px;padding:0 30px 0 14px;
  border:1px solid rgba(61,220,87,.55);border-radius:999px;
  background:#071107 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%233ddc57'/%3E%3C/svg%3E") no-repeat right 12px center;
  color:#d8ffd2;font:inherit;letter-spacing:.06em;
}
.shop-body .shop__currency select:hover{border-color:#3ddc57}
.shop-body .shop__currency select:focus-visible{outline:2px solid #3ddc57;outline-offset:2px}
.shop-body .shop__currency select option{background:#071107;color:#d8ffd2}
.shop-body .shop__currency [data-currency-note]{
  text-transform:none;letter-spacing:.02em;font-weight:400;color:rgba(216,255,210,.6)
}
@media (max-width:639px){.shop-body .shop__currency{gap:6px 10px}.shop-body .shop__currency [data-currency-note]{flex-basis:100%}}
.shop__search{display:grid;gap:6px;max-width:460px;margin:0 0 14px;color:#5ac668;font:700 .68rem ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.1em;text-transform:uppercase}
.shop__search input{width:100%;min-height:46px;padding:10px 12px;border:1px solid #3f7446;border-radius:5px;background:#071107;color:#d8ffd2;font:inherit;font-size:16px;text-transform:none;letter-spacing:0}
.shop__search input:focus-visible{outline:2px solid #3ddc57;outline-offset:2px}
.shop__search input::placeholder{color:rgba(216,255,210,.5)}
.shop__results{min-height:1.3em;margin:0 0 10px;color:rgba(216,255,210,.66);font-size:.72rem}
.shop__empty{grid-column:1/-1;min-height:180px;display:grid;place-items:center;padding:24px;border:1px dashed rgba(92,240,143,.38);color:#9ddaa6;text-align:center}

/* v63 — downloads show who made them, not just the title. */
.shop-body .product__artist{
  display:block;margin-top:2px;
  font-size:.7rem;line-height:1.3;font-weight:600;color:#9be89f;
  overflow-wrap:anywhere;
}
.shop-body .sheet__artist{margin:-4px 0 8px;font-size:.85rem;font-weight:700;color:#3a3730}
@media (max-width:639px){.shop-body .product__artist{font-size:.64rem}}

/* v64: the stock line fills in when live stock arrives; reserve its line so
   the currency row and the grid don't get pushed down when it does */
#shopNote{min-height:1.5em}

/* v64: discount code field in the basket (js/discount-code-patch.js) */
.basket-discount{display:grid;gap:6px;margin:12px 0 4px}
.basket-discount__label{font-size:.66rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.basket-discount__row{display:flex;gap:6px}
.basket-discount__row input{flex:1;min-width:0;min-height:40px;padding:0 10px;border:1px solid rgba(92,240,143,.5);border-radius:4px;background:#050a06;color:#d9ffe3;font:inherit;font-size:16px;text-transform:uppercase;letter-spacing:.06em}
.basket-discount__row button{flex:none;min-height:40px;padding:0 14px;border:1px solid #3df07a;border-radius:4px;background:#103a1d;color:#c8ffd6;font:700 .66rem/1 ui-monospace,Menlo,monospace;letter-spacing:.1em;cursor:pointer}
.basket-discount__msg{margin:0;min-height:1.2em;font-size:.72rem}
.basket-discount__msg[data-kind=ok]{color:#5cf08f}
.basket-discount__msg[data-kind=error]{color:#ff8a7a}
.basket-ship{display:grid;gap:6px;margin:12px 0 0}
.basket-ship select{flex:1;min-height:40px;padding:0 10px;border:1px solid rgba(92,240,143,.5);border-radius:4px;background:#050a06;color:#d9ffe3;font:inherit;font-size:16px}

/* css/deck-fx-v1.css */
/* TAPE FX panel under the home deck (Oct 2026) — reverb, echo, tape wow */
.fx-panel{margin:10px 0 0;padding:10px 12px 12px;border-radius:8px;background:linear-gradient(180deg,rgba(0,0,0,.18),rgba(0,0,0,.06));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),inset 0 0 0 1px rgba(0,0,0,.25)}
.fx-panel__head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.fx-panel__title{font:800 .62rem/1 ui-monospace,Menlo,monospace;letter-spacing:.22em;opacity:.8}
.fx-panel__lamp{width:7px;height:7px;border-radius:50%;background:#3b2b29;box-shadow:inset 0 0 2px #000a}
.fx-panel__lamp.is-lit{background:#ffb13a;box-shadow:0 0 8px #ffb13a}
.fx-panel__bypass{margin-left:auto;min-height:28px;padding:0 10px;border-radius:4px;border:1px solid currentColor;background:transparent;color:inherit;
  font:700 .56rem/1 ui-monospace,Menlo,monospace;letter-spacing:.16em;opacity:.75;cursor:pointer}
.fx-panel__bypass:disabled{opacity:.3;cursor:default}
.fx-panel__knobs{display:flex;justify-content:space-around;gap:10px;flex-wrap:wrap}

/* css/public-improvements.css */
.catalogue-tools{display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,.7fr);gap:12px 20px;align-items:end;padding:20px;border-top:3px solid var(--oak-dark);border-bottom:1px solid #8f8a7d;background:linear-gradient(145deg,#f4f1e9,#ded8cb);color:var(--ink)}
.catalogue-tools h2{margin:0 0 4px;font-size:1rem;letter-spacing:.04em;text-transform:uppercase}
.catalogue-tools p{margin:0;font-size:.74rem;line-height:1.5;color:#625d54}
.catalogue-search{display:grid;gap:6px;font-size:.68rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.catalogue-search input{width:100%;min-height:46px;padding:10px 12px;border:1px solid #8d887d;border-radius:4px;background:#fffdf7;color:#23201b;font:inherit;font-size:1rem}
.catalogue-search input:focus-visible,.catalogue-filters button:focus-visible{outline:3px solid #174e23;outline-offset:2px}
.catalogue-filters{display:flex;gap:7px;flex-wrap:wrap}
.catalogue-filters button{min-height:44px;padding:8px 15px;border:1px solid #8d887d;border-radius:999px;background:#ece7dc;color:#3a3730;font:inherit;font-size:.7rem;font-weight:700;letter-spacing:.05em;cursor:pointer}
.catalogue-filters button[aria-pressed=true]{border-color:#172019;background:#172019;color:#9cff9c}
.catalogue-results{align-self:center;text-align:right}
.shelf__row[hidden]{display:none!important}
@media(max-width:680px){.catalogue-tools{grid-template-columns:1fr;padding:15px 12px}.catalogue-results{text-align:left}.catalogue-filters{flex-wrap:nowrap;overflow-x:auto;padding-bottom:3px}.catalogue-filters button{flex:0 0 auto}}
.mobile-quick-nav{display:none}
@media(max-width:680px){.mobile-quick-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:8px 10px 10px;background:#131b14}.mobile-quick-nav a{display:flex;align-items:center;justify-content:center;min-height:44px;padding:6px;border:1px solid rgba(156,255,156,.38);border-radius:3px;color:#9cff9c;font:700 .62rem/1.25 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em;text-align:center;text-decoration:none;text-transform:uppercase}.mobile-quick-nav a:focus-visible{outline:3px solid #f2b134;outline-offset:2px}}

/* v65 — a crawlable, human-readable description of the label. The cassette
   catalogue is rendered by JavaScript; this gives visitors and search engines
   the label's identity and its main destinations before that code runs. */

/* css/preorders-v2.css */
.product__frame{position:relative}
.preorder-badge,.product__preorder{display:block;background:#e9dfae;color:#191919;padding:8px 12px;font-weight:800;font-size:12px;letter-spacing:.06em;line-height:1.45;border:1px solid #191919}
.product__frame>.preorder-badge{position:absolute;left:0;right:0;bottom:0;z-index:2;text-align:center}
.product__preorder{font-size:14px;margin:12px 0 18px}
.basket-line .preorder-badge{margin:6px 0}
.product__colour{display:block;width:100%;padding:12px;margin:8px 0 20px;background:#171e16;color:#e9efdc;border:1px solid #7dc977;font:inherit}
