@font-face{font-family:AtelierSerif;src:local('Georgia');font-display:swap}
:root{--ink:#1b211f;--stage:#252c29;--paper:#edf0e9;--white:#f9faf5;--line:#cbd0c7;--muted:#687268;--accent:#d85e3e;--serif:AtelierSerif,Georgia,'Times New Roman',serif;--sans:'Segoe UI',Arial,sans-serif;color-scheme:light;font-family:var(--sans);color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}button{border:0;background:none}a{color:inherit;text-decoration:none}button:disabled{cursor:default;opacity:.4}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--accent);outline-offset:4px}button, a{touch-action:manipulation}svg{fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}input[type=range]{accent-color:var(--accent);cursor:pointer}dialog{color:var(--ink);border:1px solid var(--line);background:var(--paper);padding:28px;max-height:85dvh;box-shadow:0 24px 100px #0006}dialog::backdrop{background:#101816aa;backdrop-filter:blur(5px)}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.masthead{height:88px;padding:0 36px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:var(--paper)}.brand{display:flex;align-items:center;gap:13px}.brand>svg{width:33px;height:35px;stroke-width:1}.brand .black{fill:var(--ink);stroke:none}.brand>span{font:24px var(--serif);letter-spacing:-.6px}.brand em{font-weight:normal}.brand small{font:10px var(--sans);letter-spacing:2.4px;display:block;margin-top:5px}.header-end{display:flex;align-items:center;gap:24px}.text-link{font-size:14px;border-bottom:1px solid var(--ink);padding-bottom:4px}.text-link:hover{color:var(--accent)}.icon-button{display:grid;place-items:center;border:1px solid var(--line);width:32px;height:32px;border-radius:50%;font-size:17px}.icon-button:hover{border-color:var(--accent);color:var(--accent)}.sound-button{display:flex;align-items:center;gap:9px;font-size:14px}.sound-button svg{width:22px;height:22px}.sound-button[aria-pressed=true]{color:var(--muted)}
.workbench{display:grid;grid-template-columns:minmax(0,1fr) 340px;min-height:630px;height:calc(100dvh - 310px);max-height:880px}.stage{position:relative;overflow:hidden;color:var(--paper);background:radial-gradient(ellipse at 60% 28%,#424c45 0%,#2b332f 37%,#1b2220 100%);isolation:isolate}.stage:after{content:'';position:absolute;inset:0;pointer-events:none;z-index:2;box-shadow:inset 0 0 120px #10161540}.stage-heading{position:absolute;left:34px;top:28px;z-index:3;pointer-events:none}.eyebrow{font-size:11px;font-weight:600;letter-spacing:1.8px}.stage-heading>.eyebrow{color:#bec9bf}.stage h1{font:normal clamp(32px,3.2vw,46px)/1.06 var(--serif);letter-spacing:-1.6px;margin:14px 0}.stage h1 em{font-weight:normal;color:#c0cbbd}.stage-heading p{font-size:14px;color:#b3bfb4;margin:0}.view-controls{position:absolute;right:24px;top:28px;z-index:5;display:flex;border:1px solid #83928555;border-radius:4px;padding:3px;background:#17231b66;backdrop-filter:blur(12px)}.view-controls button{font-size:13px;color:#c5d0c5;padding:8px 13px;border-radius:2px;min-height:34px}.view-controls button.active{background:var(--paper);color:var(--ink)}.view-controls button:hover:not(.active){background:#7b8c7a33}.view-controls svg{width:16px;height:16px;display:block}.stage #viewport{position:absolute;inset:0}.stage canvas{display:block;width:100%;height:100%;cursor:grab;touch-action:none}.stage canvas.playing{cursor:col-resize}.stage canvas.key-hover{cursor:pointer}.stage-bottom{position:absolute;left:32px;right:24px;bottom:23px;z-index:4;display:flex;align-items:center;gap:16px;color:#abb9ad}.gesture-hint{display:flex;align-items:center;gap:9px;flex:1;font-size:11px}.gesture-hint svg{width:15px;height:21px}.gesture-hint b{margin:0 6px;font-weight:400;color:#637769}.subtle-button{color:#cbd6c9;font-size:12px;border-bottom:1px solid #7f957f66;padding:3px 0}.subtle-button[aria-pressed=false]{opacity:.5}.stage-caption{position:absolute;bottom:67px;left:34px;display:flex;gap:18px;font-size:10px;letter-spacing:1.5px;color:#91a792;z-index:3}.part-labels{position:absolute;inset:0;pointer-events:none;z-index:4}.part-label{position:absolute;pointer-events:auto;display:flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid #c3cdbd55;background:#16231ddb;backdrop-filter:blur(5px);color:#dae2d4;font-size:12px;white-space:nowrap;transform:translate(-50%,-50%);transition:opacity .15s}.part-label b{color:#df9277;font-size:10px}.part-label:hover,.part-label.selected{border-color:var(--accent);color:white}.scene-error{position:absolute;top:42%;left:12%;right:12%;z-index:10;background:var(--ink);border:1px solid #657467;padding:24px}.scene-error h2{font:26px var(--serif);margin:0 0 12px}.scene-error p{font-size:16px;line-height:1.6;margin:0}
.inspector{overflow:auto;scrollbar-width:thin;padding:28px 27px 16px;border-left:1px solid var(--line);background:var(--paper)}.inspector-title>.eyebrow{color:var(--muted)}.inspector h2{font:29px var(--serif);letter-spacing:-.8px;margin:10px 0 24px}.separation-control{padding-bottom:24px;border-bottom:1px solid var(--line)}.range-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.range-title label{font-size:14px;color:#485548}.range-title output{font:32px var(--serif);letter-spacing:-1.5px;min-width:70px;text-align:right}.range-title output span{font:12px var(--sans);letter-spacing:0;margin-left:3px}.separation-control input{width:100%;height:24px;margin:0;appearance:none;background:transparent}.separation-control input::-webkit-slider-runnable-track{height:3px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--separation,0%),#bcc5b9 var(--separation,0%));border-radius:2px}.separation-control input::-webkit-slider-thumb{appearance:none;width:14px;height:20px;background:var(--ink);border-radius:1px;transform:translateY(-8px);border:3px solid var(--paper);box-shadow:0 0 0 1px var(--ink)}.range-endpoints{display:flex;justify-content:space-between;margin-top:4px}.range-endpoints button{font-size:12px;color:var(--muted);padding:4px 0}.range-endpoints button:hover{color:var(--accent)}.parts-head{display:flex;align-items:center;justify-content:space-between;margin:23px 0 12px}.parts-head h3{font-size:14px;font-weight:600;margin:0}.parts-head>span{font-size:9px;letter-spacing:1.4px;color:var(--muted)}.parts-list button{width:100%;display:grid;grid-template-columns:25px 1fr 18px;align-items:center;text-align:left;font-size:14px;min-height:41px;border-bottom:1px solid #cbd0c799;transition:color .15s,background .15s}.parts-list .part-index{font:11px var(--sans);color:#8b9488}.part-symbol{font-size:19px;font-weight:300;color:#83907d}.parts-list button:hover{color:var(--accent)}.parts-list button.selected{color:var(--accent);background:#dae0d377;padding-left:8px}.parts-list button.selected .part-symbol{color:var(--accent)}.part-detail{padding:22px 0 16px;min-height:148px}.part-detail>.eyebrow{font-size:9px;letter-spacing:1.3px;color:var(--accent)}.part-detail h3{font:21px/1.12 var(--serif);letter-spacing:-.4px;margin:10px 0}.part-detail p{font-size:13px;line-height:1.65;color:#5b6859;margin:0}.text-button{font-size:12px;color:var(--accent);padding:10px 0 0;border-bottom:1px solid #d85e3e55}.demonstrate-button{width:100%;min-height:46px;background:var(--ink);color:var(--paper);display:flex;align-items:center;gap:8px;text-align:left;padding:12px;font-size:12px;border-radius:2px}.demonstrate-button:hover{background:#3b4d3e}.demonstrate-button svg{width:15px;height:15px;fill:currentColor;stroke:none}.demonstrate-button small{margin-left:auto;color:#a8b4a5;font-size:8px;letter-spacing:1px}.demonstrate-button.active{background:var(--accent)}.demonstrate-button.active small{color:#fff}.model-note{font-size:10px;color:#7a8676;line-height:1.5;margin:12px 0 0}
.play-deck{padding:20px 36px 13px;background:var(--paper);border-top:1px solid var(--line)}.deck-head{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:15px}.deck-title{display:flex;align-items:center;gap:30px;min-width:0}.deck-title h2{font:23px var(--serif);letter-spacing:-.6px;margin:0;white-space:nowrap}#noteReadout{font:22px var(--serif);min-width:170px;white-space:nowrap}#noteReadout small{font:11px var(--sans);color:var(--muted);margin-left:7px}.play-controls{display:flex;align-items:center;gap:20px;font-size:12px;white-space:nowrap}.octave-control{display:flex;align-items:center;gap:8px}.octave-control>span{color:var(--muted);margin-right:2px}.octave-control button{width:24px;height:26px;border:1px solid var(--line);border-radius:2px;font-size:15px}.octave-control output{width:17px;text-align:center}#sustainButton{padding:6px 9px;border:1px solid var(--line);border-radius:2px}#sustainButton[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}kbd{font:9px var(--sans);border:1px solid #a1aca0;padding:2px 4px;margin-left:6px;border-radius:2px;color:var(--muted)}.volume-control{display:flex;align-items:center;gap:8px;color:var(--muted)}.volume-control input{width:65px;height:16px}#mappingButton{border-bottom:1px solid var(--ink);padding:3px 0}.keyboard-scroll{overflow-x:auto;scrollbar-width:thin;scrollbar-color:#aab7a5 transparent;padding-bottom:4px}.keyboard{height:84px;position:relative;min-width:850px;display:flex;padding:0 2px;background:var(--ink);border:1px solid var(--ink);border-bottom:4px solid var(--ink);border-radius:3px;isolation:isolate;user-select:none;touch-action:pan-y}.piano-key{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;flex:1;min-width:0;border-left:1px solid #bfc4b8;border-right:1px solid #f7f9ee;background:linear-gradient(90deg,#e8ecde,#f9faf2 30%,#f4f6e9);border-bottom:3px solid #d6dcca;border-radius:0 0 2px 2px;color:#6b7b63;padding:0 0 7px;font-size:10px;touch-action:none}.piano-key.black{position:absolute;top:0;width:1.13%;height:60%;z-index:2;background:linear-gradient(90deg,#161b16,#333c31 45%,#191f19);border:1px solid #111711;border-bottom:4px solid #0b100b;box-shadow:1px 3px 2px #0006;color:#9da793;border-radius:0 0 2px 2px;padding-bottom:5px}.piano-key .note-label{font-size:8px;color:#94a38b;margin-top:3px}.piano-key .key-letter{font-size:10px;line-height:1}.piano-key.black .key-letter{font-size:9px}.piano-key:hover{background:#dbe5cd}.piano-key.black:hover{background:#52604c}.piano-key.pressed{background:#dc8868;border-bottom-color:#ab5132;transform:translateY(2px);height:calc(100% - 2px);color:#472916}.piano-key.black.pressed{background:#a95c3d;height:calc(60% + 2px);color:#fff}.piano-key.mapped:after{content:'';position:absolute;bottom:24px;width:3px;height:3px;border-radius:50%;background:#bd654b}.deck-foot{display:flex;justify-content:space-between;gap:16px;font-size:10px;color:var(--muted);margin-top:9px}.footer{height:40px;padding:0 36px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);font-size:10px;letter-spacing:1.2px}.footer i{color:var(--accent);font-style:normal;margin:0 9px}.footer>span:nth-child(2){letter-spacing:0;color:var(--muted)}.footer a{letter-spacing:0;border-bottom:1px solid var(--line)}
.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:15px}.dialog-head h2{font:30px/1.1 var(--serif);letter-spacing:-.7px;margin:8px 0 0}.mapping-dialog{width:620px}.mapping-dialog>p{font-size:14px;line-height:1.6;color:var(--muted);max-width:490px}.mapping-builder{display:grid;grid-template-columns:1fr 125px 70px;gap:8px}.mapping-builder>button,.mapping-builder>select{font-size:13px;min-height:43px;border:1px solid var(--line);border-radius:2px;padding:8px 10px;background:var(--white)}.mapping-builder #assignButton{background:var(--ink);color:var(--paper);border-color:var(--ink)}#captureButton.listening{border-color:var(--accent);color:var(--accent)}.mapping-message{min-height:20px;font-size:12px!important}.mapping-list{max-height:33dvh;overflow:auto;border-top:1px solid var(--line);scrollbar-width:thin}.mapping-row{display:grid;grid-template-columns:1fr 1fr 30px;align-items:center;gap:15px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}.mapping-row select{padding:5px 8px;border:1px solid var(--line);border-radius:2px;background:var(--white);font-size:13px}.mapping-row>button{font-size:20px;color:var(--muted)}.mapping-row>button:hover{color:var(--accent)}.dialog-foot{display:flex;align-items:center;gap:20px;border-top:1px solid var(--line);padding-top:20px;margin-top:15px;font-size:12px}.dialog-foot button{border-bottom:1px solid var(--ink);padding:3px 0}.dialog-foot>span{margin-left:auto;color:var(--muted)}.help-dialog{width:560px}.help-dialog dl{margin-bottom:0}.help-dialog dl>div{display:grid;grid-template-columns:70px 1fr;gap:10px;padding:17px 0;border-bottom:1px solid var(--line)}.help-dialog dt{font:20px var(--serif)}.help-dialog dd{margin:0;font-size:14px;line-height:1.7;color:var(--muted)}.noscript{position:fixed;bottom:0;left:0;right:0;background:var(--accent);color:white;padding:20px;text-align:center;z-index:99}
.piano-key:not(.black){margin:0 1px;border-left:0;border-right:0}
@media(min-width:1600px){.workbench{grid-template-columns:minmax(0,1fr) 370px}.inspector{padding:32px}.inspector h2{font-size:34px}.parts-list button{min-height:47px}.part-detail p{font-size:14px}.stage-heading{left:45px;top:40px}.stage h1{font-size:52px}.keyboard{height:96px}}
@media(max-width:1150px){.workbench{grid-template-columns:minmax(0,1fr) 300px}.inspector{padding:25px 22px}.view-controls{top:22px;right:18px}.stage-heading{left:26px;top:24px}.stage h1{font-size:34px}.stage-heading p{font-size:12px}.view-controls button{padding:7px 9px}.stage-bottom{left:24px;gap:12px}.gesture-hint span{max-width:220px;line-height:1.7}.deck-title h2{font-size:20px}.deck-title{gap:16px}.play-controls{gap:12px}.volume-control{display:none}#noteReadout{font-size:20px;min-width:145px}.play-deck{padding-left:26px;padding-right:26px}}
@media(max-width:850px){.masthead{height:76px;padding:0 22px}.header-end{gap:16px}.brand>span{font-size:22px}.brand small{font-size:8px;letter-spacing:1.8px}.workbench{grid-template-columns:1fr;height:auto;min-height:0}.stage{height:620px}.inspector{display:grid;grid-template-columns:1fr 1fr;column-gap:30px;padding:25px 26px;border-left:0;border-top:1px solid var(--line)}.inspector-title{grid-column:1}.inspector h2{margin-bottom:15px}.separation-control{grid-column:1;padding-bottom:15px}.parts-head{grid-column:1;margin-top:15px}.parts-list{grid-column:1;grid-row:4/7}.part-detail{grid-column:2;grid-row:1/5;padding-top:0;align-self:end;min-height:200px}.part-detail h3{font-size:27px}.part-detail p{font-size:15px}.demonstrate-button{grid-column:2;grid-row:5;align-self:end}.model-note{grid-column:2;grid-row:6}.deck-head{align-items:flex-start;flex-wrap:wrap;gap:14px}.play-controls{margin-left:auto}.deck-title{justify-content:space-between;width:100%}.deck-title h2{font-size:24px}.play-deck{padding-top:22px}.keyboard{min-width:1000px;height:98px}.piano-key .key-letter{font-size:12px}.piano-key .note-label{font-size:10px}.deck-foot{font-size:11px}.footer>span:nth-child(2){display:none}.stage-caption{bottom:77px}.stage-bottom{bottom:22px}.stage h1{font-size:40px}}
@media(max-width:540px){.masthead{height:70px;padding:0 18px}.brand>svg{width:26px}.brand>span{font-size:20px}.brand small{display:none}.header-end{gap:13px}.header-end>.text-link{font-size:11px}.header-end>.icon-button{display:none}.sound-button{font-size:12px}.sound-button>svg{width:17px}.sound-button>span{display:none}.stage{height:520px}.stage-heading{left:22px;top:23px}.stage-heading>.eyebrow{font-size:9px;letter-spacing:1.4px}.stage h1{font-size:34px;margin-top:12px}.stage-heading p{font-size:12px}.view-controls{top:auto;bottom:66px;right:18px}.view-controls button{font-size:11px;min-height:28px;padding:6px 9px}.stage-bottom{left:22px;right:18px;bottom:22px;gap:14px}.gesture-hint{display:none}.stage-caption{left:22px;bottom:75px;display:grid;gap:6px;font-size:8px}.stage-caption>span:last-child{display:none}.stage-bottom button{font-size:11px}.stage-bottom #resetButton{margin-left:auto}.part-label{font-size:10px;padding:4px 6px}.part-label b{font-size:9px}.inspector{display:block;padding:24px 22px}.inspector-title{display:flex;align-items:baseline;justify-content:space-between}.inspector-title>.eyebrow{font-size:9px;max-width:90px;line-height:1.6}.inspector h2{font-size:29px;margin-top:0}.range-title output{font-size:28px}.separation-control{padding-bottom:18px}.parts-list{display:grid;grid-template-columns:1fr 1fr;column-gap:16px}.parts-list button{font-size:12px;grid-template-columns:21px 1fr 14px;min-height:43px}.parts-head{margin-top:20px}.parts-head>span{font-size:8px}.part-detail{min-height:0;padding:23px 0 19px}.part-detail h3{font-size:25px}.part-detail p{font-size:14px}.demonstrate-button{font-size:13px}.demonstrate-button small{font-size:9px}.model-note{font-size:10px;margin:10px 0 0}.play-deck{padding:23px 22px 18px}.deck-title h2{font-size:22px}.deck-title{gap:6px;align-items:baseline}.deck-title #noteReadout{font-size:18px;min-width:0}.deck-title #noteReadout small{font-size:9px;margin-left:3px}.play-controls{width:100%;justify-content:space-between;gap:8px;font-size:11px}.octave-control{gap:5px}.octave-control>span{font-size:10px}.octave-control button{width:22px}#sustainButton{font-size:11px;padding:6px}#sustainButton kbd{font-size:8px;margin-left:3px}#mappingButton{font-size:11px}.deck-foot{font-size:10px;line-height:1.6}.deck-foot>span:last-child{display:none}.footer{padding:0 22px;font-size:8px;letter-spacing:.6px}.footer>a{font-size:10px}.mapping-dialog,.help-dialog{width:calc(100vw - 24px);padding:22px}.dialog-head h2{font-size:26px}.mapping-builder{grid-template-columns:1fr 105px}.mapping-builder #assignButton{grid-column:1/-1}.dialog-foot{gap:14px;font-size:11px}.dialog-foot span{font-size:10px}.help-dialog dl>div{grid-template-columns:55px 1fr}.help-dialog dd{font-size:13px}.volume-control{display:none}}
.eyebrow{font-size:12px}.brand small{font-size:11px}.parts-head>span{font-size:10px}.part-detail p{font-size:14px}.part-detail>.eyebrow{font-size:10px}.gesture-hint{font-size:12px}.subtle-button{font-size:12px}.play-controls{font-size:14px}.deck-foot{font-size:12px}.footer{font-size:11px}.demonstrate-button{font-size:13px}.model-note{font-size:11px}
@media(max-width:1150px){.play-controls{font-size:12px}.deck-foot{font-size:11px}}
@media(max-width:850px){.workbench{max-height:none;grid-template-rows:auto auto}.inspector{overflow:visible}}
@media(max-width:540px){.deck-foot{font-size:11px}.eyebrow,.stage-heading>.eyebrow{font-size:10px}.parts-head>span{font-size:9px}.play-controls{font-size:11px}.model-note{font-size:11px}.header-end>.icon-button{display:grid;width:25px;height:25px;font-size:13px}.header-end{gap:11px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
