:root{color-scheme:dark;font-family:'DM Sans',sans-serif;color:#eee6d7;background:#14171c;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button{cursor:pointer;color:inherit;border:0}button:disabled{cursor:wait;opacity:.6}a{color:inherit}button:focus-visible,input:focus-visible,[tabindex]:focus-visible,a:focus-visible{outline:2px solid #f8d69a;outline-offset:4px}button,input{touch-action:manipulation}[hidden]{display:none!important}.app{position:relative;min-height:100dvh;overflow:hidden;isolation:isolate;--d0-meter:0;--d1-meter:0}
/* Turning platters get their own compositor layer: a new rotate each frame repositions it without repainting. */
.instrument-stage [data-spin]{will-change:rotate}
.scene{position:absolute;inset:0;z-index:-3;pointer-events:none}.scene svg{width:100%;height:100%;min-height:1000px;display:block}.room-shade{position:absolute;inset:0;z-index:-2;background:linear-gradient(180deg,#11151cc9 0,#11151c55 180px,#11151c05 45%,#0a0c1199 100%);pointer-events:none}
.app-header{height:78px;display:flex;align-items:center;justify-content:space-between;padding:0 42px;gap:20px;position:relative;z-index:2}.wordmark{font-family:'IBM Plex Mono',monospace;font-size:23px;font-weight:600;letter-spacing:-1px;text-decoration:none;display:flex;align-items:baseline;gap:18px}.wordmark span{font:11px 'DM Sans',sans-serif;letter-spacing:.3px;color:#ddd4c4a0}.header-actions{display:flex;gap:8px;align-items:center}.header-actions button{background:#14171c60;border:1px solid #ddd4c425;border-radius:30px;padding:10px 15px;font-size:11px;backdrop-filter:blur(14px);transition:background .2s}.header-actions button:hover{background:#ddd4c420}.header-actions .sound-start{color:#26211b;background:#edd4a7;border-color:#edd4a7;font-weight:700}

.stage-room{position:relative;min-height:675px;padding:0 26px 36px;display:flex;flex-direction:column;align-items:center;perspective:1400px}.room-caption{display:flex;justify-content:space-between;align-items:center;width:min(1180px,100%);margin:22px 0 0;color:#efdec4a0;font:8px 'IBM Plex Mono',monospace;letter-spacing:1.5px;text-transform:uppercase}.live-status{font-size:8px;letter-spacing:1px;color:#dfc59b}.instrument-title{text-align:center;margin:16px 0;position:relative;z-index:1}.instrument-title:before{content:'';position:absolute;inset:-14px -28px;background:#14171c55;filter:blur(16px);border-radius:50%;z-index:-1;pointer-events:none}.instrument-title small{font:8px 'IBM Plex Mono',monospace;letter-spacing:2px;text-transform:uppercase;color:#e8d3ac85}.instrument-title h1{font:400 30px 'Fraunces',serif;margin:6px 0 7px;letter-spacing:-.8px}.instrument-title p{margin:0;font-size:11px;color:#e8e0d1a0;max-width:510px;line-height:1.6}.instrument-viewport{position:relative;width:min(1180px,100%);overflow:visible;min-height:480px;display:flex;align-items:center;justify-content:center}.instrument-stage{width:100%;transform-origin:50% 62%;position:relative;z-index:1;transition:transform 1.4s cubic-bezier(.2,.75,.1,1),filter 1.4s;filter:drop-shadow(0 28px 24px #0009)}.instrument-stage:before{content:'';position:absolute;width:90%;height:30px;bottom:-25px;left:5%;background:#0006;border-radius:50%;filter:blur(25px);z-index:-1}.world-caption{text-align:center;position:absolute;bottom:22px;opacity:0;transition:opacity 1s;pointer-events:none}.world-caption p{font:italic 20px 'Fraunces',serif;margin:0 0 7px}.world-caption span{font-size:10px;opacity:.55}.mobile-pan-hint,.instrument-areas{display:none}
.session-bar{display:flex;align-items:center;gap:18px;margin:0 42px;padding:15px 0;border-top:1px solid #e5d1a926;font-size:10px;position:relative;z-index:2}.session-bar:before{content:'';position:absolute;inset:0 -42px;background:#0e111756;backdrop-filter:blur(5px);z-index:-1;pointer-events:none}.session-bar button{background:none;font-size:10px;padding:8px 0;white-space:nowrap}.session-bar button:first-child{display:flex;align-items:center;gap:9px}.session-bar button small{font-size:8px;color:#e8dfcd65}.crate-icon{font-size:22px}.now-playing{display:flex;align-items:center;gap:12px;font:9px 'IBM Plex Mono',monospace;flex:1;justify-content:center;color:#ddcfb9a0}.now-playing i{font:16px 'Fraunces',serif;color:#ddcfb950}.session-status{font:8px 'IBM Plex Mono',monospace;letter-spacing:1px;color:#dfd6c74d}.control-caption{margin:0 42px 20px;min-height:44px;display:flex;align-items:baseline;justify-content:center;gap:14px;font-size:10px;line-height:1.7;opacity:.8}.control-caption b{font-weight:500;color:#e8c890;white-space:nowrap}.control-caption span{color:#e8dfcc80;max-width:750px}
.app[data-mode=world] .instrument-title{opacity:.65}.app[data-mode=world] .room-shade{background:linear-gradient(180deg,#11151c99,#11151c00 45%,#11151c99)}.app[data-mode=world] .world-caption{opacity:1}.app[data-mode=world] .control-caption{visibility:hidden}.app[data-mode=world] .instrument-viewport{height:520px;min-height:520px;overflow:hidden;width:100%;position:relative}.app[data-mode=world] .instrument-stage{position:absolute;width:1100px;min-width:1100px;left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--world-scale,.58)) rotateX(10deg);transform-origin:50% 50%;filter:drop-shadow(0 28px 24px #0008)}.app[data-mode=world] .instrument{width:100%;max-width:none}.app[data-mode=world] .still-pan{overflow:visible}.app[data-mode=world] .still-body{width:1100px}.app[data-mode=world] .still-hint{display:none}.app[data-board=still][data-mode=world] .instrument-stage{top:calc(50% + 22px)}
.app[data-board=teeter]{color:#3a2b20}.app[data-board=teeter] .room-shade{background:linear-gradient(180deg,#fff3da99,#ffecc522 35%,#9c734233)}.app[data-board=teeter] .instrument-title:before{background:#f3e4c275}.app[data-board=teeter] .wordmark span,.app[data-board=teeter] .instrument-title p,.app[data-board=teeter] .instrument-title small,.app[data-board=teeter] .room-caption,.app[data-board=teeter] .live-status{color:#513c2eaa}.app[data-board=teeter] .header-actions button{background:#fff2d577;border-color:#654c3b33}.app[data-board=teeter] .header-actions .sound-start{background:#774330;color:#fff4de}.app[data-board=teeter] .session-bar{border-color:#5a3c2c33}.app[data-board=teeter] .session-bar:before{background:#f3e4c255}.app[data-board=teeter] .now-playing,.app[data-board=teeter] .control-caption span,.app[data-board=teeter] .control-caption b,.app[data-board=teeter] .session-status,.app[data-board=teeter] .session-bar button small{color:#573d2da0}
.field-notes,.crate-panel{position:fixed;z-index:20;background:linear-gradient(135deg,#252627f7,#151a1ff7);color:#e6dcc9;border:1px solid #ddcba636;border-radius:4px;box-shadow:0 20px 80px #0008;backdrop-filter:blur(24px)}.field-notes{right:26px;top:88px;width:380px;max-height:calc(100dvh - 115px);overflow:auto;padding:24px}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.panel-heading small{font:8px 'IBM Plex Mono',monospace;letter-spacing:1.5px;color:#d9b97c}.panel-heading h2{font:400 22px 'Fraunces',serif;margin:8px 0 0}.close{font-size:25px;background:none;width:40px;height:40px;flex:none;color:#ddd1beaa}.field-notes>p{font-size:11px;line-height:1.8;color:#ddcfbb99}.field-notes ol{list-style:none;padding:0;margin:22px 0}.field-notes li{display:flex;align-items:baseline;gap:15px;border-top:1px solid #dbccae18;padding:14px 0}.field-notes li>small{font:9px 'IBM Plex Mono',monospace;color:#d9b97c}.field-notes li b{font-size:12px;font-weight:500}.field-notes li p{font-size:11px;line-height:1.8;color:#ddcfbb99;margin:6px 0 0}.signal-path{padding:14px;background:#d9b97c0a;border:1px solid #d9b97c25}.signal-path small{font:8px 'IBM Plex Mono',monospace;letter-spacing:1px;color:#d9b97c}.signal-path p{font:10px 'IBM Plex Mono',monospace;line-height:1.8}.signal-path span{font-size:10px;line-height:1.7;color:#ddcfbb77}.field-notes .honest-note{font-size:10px}.notes-links{display:flex;gap:16px;flex-wrap:wrap}.notes-links a{font-size:9px;text-decoration:none;color:#d9b97c}.control-dictionary{font:9px/1.8 'IBM Plex Mono',monospace!important;padding:13px;border-left:2px solid #d9b97c50;background:#d9b97c08}.practice-list{display:grid;gap:6px;margin:22px 0}.practice-list>small{font:8px 'IBM Plex Mono',monospace;letter-spacing:1px;color:#d9b97c;margin-bottom:6px}.practice-list button{display:flex;flex-direction:column;text-align:left;gap:6px;padding:13px 14px;border:1px solid #d9b97c25;background:#d9b97c08;border-radius:3px}.practice-list button:hover{background:#d9b97c15}.practice-list b{font-size:11px;font-weight:500;color:#ebd5a8}.practice-list span{font-size:10px;line-height:1.7;color:#ddcfbb99}.lesson-highlight{outline:2px solid #ffe3a4!important;outline-offset:7px;filter:drop-shadow(0 0 9px #f4cc7766)}
.crate-panel{left:50%;bottom:26px;transform:translateX(-50%);width:min(980px,calc(100% - 40px));max-height:calc(100dvh - 60px);overflow:auto;padding:24px}.deck-choice{display:flex;gap:5px;margin-left:auto}.deck-choice button{font:9px 'IBM Plex Mono',monospace;padding:10px 15px;background:#fff1da09;border:1px solid #fff1da22;border-radius:3px}.deck-choice button[aria-pressed=true]{color:#d9b97c;border-color:#d9b97c88;background:#d9b97c10}.record-shelf{display:grid;grid-template-columns:repeat(6,1fr);gap:16px;margin:24px 0}.record-sleeve{min-width:0;text-align:left;background:transparent;padding:0;transition:transform .25s;cursor:grab}.record-sleeve:hover{transform:translateY(-7px)}.sleeve-art{aspect-ratio:1;display:flex;position:relative;flex-direction:column;justify-content:space-between;background:var(--sleeve-art);background-size:cover;color:#302b25;padding:11px;box-shadow:4px 6px 8px #0004;border:1px solid #33261133;overflow:hidden}.sleeve-art:after{content:'';position:absolute;inset:0;box-shadow:inset 0 0 0 2px #fff3,inset -7px 0 8px #0001;pointer-events:none}.sleeve-art small{font:5px 'IBM Plex Mono',monospace;letter-spacing:.4px}.sleeve-art strong{font:500 21px/1 'Fraunces',serif;letter-spacing:-.6px;max-width:100px}.sleeve-art>span{font:7px 'IBM Plex Mono',monospace;text-transform:uppercase;letter-spacing:1px}.sleeve-caption{display:flex;flex-direction:column;gap:5px;margin:11px 0}.sleeve-caption b{font-size:10px;font-weight:500}.sleeve-caption small{font:8px 'IBM Plex Mono',monospace;color:#ddcfbb77}.crate-foot{display:flex;align-items:center;gap:20px;border-top:1px solid #fff1da15;padding-top:15px}.crate-foot button{padding:10px 15px;background:#d9b97c18;border:1px solid #d9b97c44;font-size:10px;white-space:nowrap}.crate-foot p{font-size:9px;line-height:1.7;color:#ddcfbb88;margin:0}#toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,12px);background:#ede0c7;color:#30281c;box-shadow:0 8px 40px #0005;border-radius:4px;padding:13px 20px;z-index:50;font-size:12px;max-width:calc(100% - 30px);opacity:0;pointer-events:none;transition:opacity .25s,transform .25s}#toast.visible{opacity:1;transform:translate(-50%,0)}.drop-ready{outline:2px dashed #efd496!important;outline-offset:5px}body:has(.crate-panel:not([hidden])) .control-caption{visibility:hidden}.instrument [data-control=scratch],.instrument [data-control=needle],.instrument input[type=range],.instrument [data-control=cut],.instrument [data-control=hotcue]{touch-action:none;user-select:none}.instrument canvas{display:block}.instrument input[type=number]:disabled{opacity:.35;cursor:default}.instrument button:active{translate:0 1px}
@media(min-width:1600px){.stage-room{padding-top:16px;min-height:730px}.instrument-viewport{width:1240px}.instrument-title{margin-bottom:30px}}
@media(min-width:1001px) and (max-height:950px){.app-header{height:64px}.room-caption{margin-top:14px}.instrument-title{margin:11px 0 12px}.instrument-title h1{font-size:27px}.instrument-title p{font-size:10px}.stage-room{padding-bottom:25px}}
@media(max-width:1000px){.app-header{padding:0 22px}.wordmark span{display:none}.stage-room{padding:0 14px 25px}.instrument-title h1{font-size:27px}.session-bar{margin:0 22px;gap:14px}.session-status{display:none}.control-caption{margin:0 22px 15px}.record-shelf{gap:10px}.sleeve-art strong{font-size:17px}}
@media(max-width:790px){.instrument-areas{display:flex;gap:5px;padding:0 14px;align-self:stretch;justify-content:center;margin:0 0 4px}.instrument-areas button{background:#151a2099;border:1px solid #eed4a733;border-radius:3px;padding:9px 12px;font:9px 'IBM Plex Mono',monospace;color:#ebd5ad}.app[data-board=teeter] .instrument-areas button{background:#fff0d9aa;color:#573d2d;border-color:#5b3a2e40}.app[data-mode=world] .instrument-areas{display:none}}
@media(max-width:640px){.app-header{height:67px;padding:0 16px;gap:10px}.wordmark{font-size:19px}.header-actions{gap:5px}.header-actions button{font-size:9px;padding:9px 10px}.header-actions [data-action=world]{font-size:0;width:35px;height:35px;padding:0}.header-actions [data-action=world]:before{content:'↙';font-size:17px}.header-actions [data-action=world][aria-pressed=true]:before{content:'↗'}.stage-room{padding:0 0 22px;min-height:590px}.room-caption{width:calc(100% - 30px);margin:16px 0 0;font-size:6px}.live-status{font-size:6px}.instrument-title{margin:17px 20px 14px}.instrument-title h1{font-size:26px}.instrument-title small{font-size:7px}.instrument-title p{font-size:10px;max-width:320px}.instrument-viewport{overflow-x:auto;overflow-y:hidden;justify-content:flex-start;padding:15px 14px 20px;scrollbar-width:thin;scrollbar-color:#d9b97c55 transparent;min-height:420px}.instrument-stage{flex:none;min-width:100%;width:auto}.mobile-pan-hint{display:block;font:7px 'IBM Plex Mono',monospace;letter-spacing:.6px;text-align:center;color:#d9b97c88;margin:10px}.session-bar{margin:0 15px;padding:12px 0;gap:10px;flex-wrap:wrap}.session-bar button{font-size:9px}.session-bar button small{display:none}.now-playing{order:3;flex-basis:100%;justify-content:flex-start;font-size:8px;gap:12px}.session-bar [data-action=reset]{margin-left:auto}.control-caption{margin:0 15px 15px;display:block;font-size:9px;line-height:1.7;min-height:64px}.control-caption b{display:block;margin-bottom:3px}.control-caption span{display:block}.field-notes{right:12px;left:12px;width:auto;top:80px;padding:20px;max-height:calc(100dvh - 100px)}.crate-panel{padding:18px;bottom:12px;width:calc(100% - 24px)}.panel-heading h2{font-size:19px}.panel-heading{gap:8px}.deck-choice{gap:3px}.deck-choice button{font-size:8px;padding:8px}.record-shelf{grid-template-columns:repeat(3,1fr);gap:14px 10px;margin:20px 0}.sleeve-art{padding:8px}.sleeve-art strong{font-size:20px}.sleeve-art small{font-size:4px}.crate-foot{align-items:flex-start;flex-direction:column;gap:9px}.app[data-mode=world] .instrument-viewport{height:420px;min-height:420px;padding:0}.app[data-mode=world] .mobile-pan-hint{display:none}.app[data-mode=world] .world-caption{bottom:10px}.world-caption p{font-size:16px}.world-caption span{font-size:8px}.scene svg{min-height:1100px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.header-actions .sound-start:hover{background:#f6dfb8}.app[data-board=teeter] .header-actions .sound-start:hover{background:#8d523c}

.field-notes details{border-top:1px solid #ddcba626;padding:14px 0;font-size:11px;color:#ddd0bd}.field-notes summary{cursor:pointer;font-size:12px}.field-notes .practice-list{margin:18px 0}.field-notes .panel-heading h2{margin:0;font-size:23px}.field-notes .notes-links{margin-top:15px}.header-actions [data-action=equipment]{border-color:#d9b97c88;color:#f2d5a4}.app[data-board=teeter] .header-actions [data-action=equipment]{color:#573d2d;border-color:#654c3b66}
