:root{--paper:#f3f0e8;--paper-raised:#faf8f2;--paper-deep:#e9e5da;--ink:#171714;--ink-muted:#706d66;--hairline:#cfcbc0;--rule:#9d998f;--performance:#e44d2e;--dominant:#be6a24;--guide:#2f6f8f;--colour:#745d96;--success:#3d7652;--shadow:#1c1a151c;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--focus:0 0 0 2px var(--paper-raised), 0 0 0 4px var(--performance);color:var(--ink);background:var(--paper);font-synthesis:none;text-rendering:geometricprecision;font-family:Geist Mono,SFMono-Regular,Consolas,monospace}*{box-sizing:border-box}html{background:var(--paper)}body{background:var(--paper);min-width:980px;min-height:100vh;margin:0}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{color:inherit}.metadata-row{flex-wrap:wrap;align-items:baseline;gap:4px 12px;display:inline-flex}.metadata-row strong{font-variant-numeric:tabular-nums;font-weight:500}.metadata-qualifier{margin-left:8px;font-size:.9em;font-weight:400}.supporting-copy{color:var(--ink-muted);margin-top:4px;font-size:.85em;font-weight:400;display:block}button:focus-visible,a:focus-visible,input:focus-visible{box-shadow:var(--focus);z-index:4;outline:none}button svg{fill:none;stroke:currentColor;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.5px;width:18px;height:18px}kbd{opacity:.72;border:1px solid;border-radius:2px;place-items:center;min-width:20px;min-height:20px;padding:2px 5px;font-family:inherit;font-size:10px;line-height:1;display:inline-grid}.app-shell{background:var(--paper);min-height:100vh;overflow:hidden}.topbar{z-index:20;height:72px;padding:0 var(--space-6);border-bottom:1px solid var(--hairline);background:#faf8f2f5;grid-template-columns:248px minmax(390px,1fr) auto;align-items:stretch;display:grid;position:relative}.brand{width:max-content;color:var(--ink);flex-direction:column;align-self:center;text-decoration:none;display:flex}.brand strong{letter-spacing:.08em;font-size:14px;font-weight:600}.brand span{color:var(--ink-muted);letter-spacing:.17em;margin-top:3px;font-size:9px}.mode-switcher{justify-content:center;align-items:stretch;gap:1px;display:flex}.mode-button{cursor:pointer;min-width:116px;color:var(--ink-muted);letter-spacing:.04em;background:0 0;border:0;padding:0 20px;font-size:12px;position:relative}.mode-button:after{background:var(--ink);content:"";opacity:0;height:2px;transition:opacity .14s,transform .14s;position:absolute;bottom:-1px;left:20px;right:20px;transform:scaleX(.4)}.mode-button:hover{background:var(--paper);color:var(--ink)}.mode-button[data-active]{color:var(--ink);font-weight:600}.mode-button[data-active]:after{opacity:1;transform:scaleX(1)}.mode-button small{color:var(--ink-muted);letter-spacing:0;margin-top:3px;font-size:7px;font-weight:400;display:block}.top-actions{justify-content:flex-end;align-items:center;gap:5px;display:flex;position:relative}.header-transport{border:1px solid var(--hairline);background:var(--paper-raised);grid-template-columns:repeat(2,42px);height:40px;display:grid}.header-transport-button{border:0;border-right:1px solid var(--hairline);cursor:pointer;min-width:0;color:var(--ink-muted);background:0 0;place-items:center;gap:1px;padding:3px 4px;display:grid}.header-transport-button:last-child{border-right:0}.header-transport-button:hover,.header-transport-button:focus-visible{background:var(--paper);color:var(--ink)}.header-transport-button:disabled{cursor:not-allowed;opacity:.42}.header-transport-button svg{width:14px;height:14px}.header-transport-button small{letter-spacing:.1em;font-size:5px}.header-transport-button.transport-play[data-active]{background:color-mix(in srgb, var(--guide) 7%, var(--paper-raised));color:var(--guide)}.header-transport-button.transport-record[data-active]{background:color-mix(in srgb, var(--performance) 7%, var(--paper-raised));color:var(--performance)}.header-transport-button[data-active] svg{fill:currentColor}.icon-button{cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:7px;min-width:38px;height:38px;padding:0 9px;transition:border-color .12s,background-color .12s,transform .12s;display:inline-flex}.icon-button>span{font-variant-numeric:tabular-nums;font-size:11px}.icon-button:hover,.icon-button[data-active]{border-color:var(--hairline);background:var(--paper);transform:translateY(-1px)}.icon-button.compact{width:32px;min-width:32px;height:32px;padding:0;font-size:20px;font-weight:300}.metronome-trigger{border:1px solid var(--hairline);cursor:pointer;background:0 0;grid-template-columns:28px 1fr;align-items:center;gap:4px;width:78px;height:32px;padding:1px 7px;display:inline-grid}.metronome-trigger:hover,.metronome-trigger[data-active]{border-color:var(--ink);background:var(--paper)}.header-pendulum{width:27px;height:28px;display:block;position:relative}.header-pendulum:after{background:var(--hairline);content:"";height:1px;position:absolute;bottom:3px;left:1px;right:1px}.header-pendulum i{background:var(--ink);transform-origin:50% 100%;width:1px;height:22px;position:absolute;bottom:3px;left:50%;transform:rotate(-30deg)}.header-pendulum i:before{background:var(--performance);content:"";border-radius:50%;width:7px;height:7px;position:absolute;top:-2px;left:-3px}.metronome-trigger[data-running] .header-pendulum i{animation:pendulum var(--beat-duration) ease-in-out var(--phase-delay) infinite alternate}.metronome-trigger[data-muted] .header-pendulum i:before{background:var(--ink-muted)}.header-metronome-copy{justify-items:end;gap:4px;line-height:1;display:grid}.header-metronome-copy strong{font-variant-numeric:tabular-nums;font-size:11px;font-weight:500}.header-metronome-copy small{color:var(--ink-muted);letter-spacing:.08em;white-space:nowrap;gap:6px;font-size:5px}.tooltip-positioner{z-index:100}.tooltip{z-index:100;border:1px solid var(--ink);background:var(--ink);max-width:300px;box-shadow:4px 4px 0 var(--shadow);color:var(--paper-raised);transform-origin:var(--transform-origin);border-radius:2px;align-items:center;gap:10px;padding:8px 10px;font-size:10px;line-height:1.45;transition:opacity .1s,transform .1s;display:flex;position:relative}.tooltip[data-starting-style],.tooltip[data-ending-style]{opacity:0;transform:translateY(2px)}.tooltip kbd{color:var(--paper-raised);flex:none}.mode-intent{min-height:54px;padding:0 var(--space-6);border-bottom:1px solid var(--hairline);background:var(--paper-deep);color:var(--ink-muted);grid-template-columns:90px 190px minmax(0,1fr);align-items:center;font-size:10px;display:grid}.mode-intent>span{letter-spacing:.14em}.mode-intent strong{color:var(--ink);font-size:11px;font-weight:600}.mode-intent p{text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.eyebrow{color:var(--ink-muted);letter-spacing:.16em;font-size:9px;font-weight:500}.score-strip,.observe-header{padding:var(--space-5) var(--space-6) var(--space-6);border-bottom:1px solid var(--ink);background:var(--paper-raised)}.score-meta{justify-content:space-between;align-items:flex-end;margin-bottom:18px;display:flex}.score-meta h1,.observe-header h1{letter-spacing:-.05em;margin:5px 0 0;font-size:clamp(22px,2vw,30px);font-weight:500}.score-meta dl{gap:var(--space-8);margin:0;display:flex}.score-meta dl div{min-width:72px}.score-meta dt{color:var(--ink-muted);letter-spacing:.16em;margin-bottom:4px;font-size:8px}.score-meta dd{margin:0;font-size:10px}.chart{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);grid-template-columns:repeat(8,minmax(96px,1fr));display:grid}.measure{border:0;border-right:1px solid var(--hairline);cursor:pointer;text-align:left;background:0 0;align-content:space-between;min-height:86px;padding:12px 14px 10px;transition:background-color .12s,transform .12s;display:grid;position:relative}.measure:last-child{border-right:0}.measure:hover{z-index:2;background:var(--paper);transform:translateY(-2px)}.measure[data-current]{background:#f7ebe3}.measure[data-current]:before{background:var(--performance);content:"";height:3px;position:absolute;top:-1px;left:0;right:0}.measure-number{color:var(--ink-muted);font-size:8px}.measure strong{letter-spacing:-.05em;font-size:clamp(15px,1.25vw,20px);font-weight:500}.measure small{color:var(--dominant);font-size:9px}.observe-header{justify-content:space-between;align-items:flex-end;min-height:160px;display:flex}.observe-header p{width:400px;color:var(--ink-muted);margin:0 0 4px;font-size:11px;line-height:1.6}.workspace{background:var(--paper);grid-template-columns:minmax(224px,.82fr) minmax(520px,2.3fr) minmax(260px,.98fr);min-height:548px;display:grid}.context-panel,.analysis-panel{min-width:0;padding:var(--space-6);background:var(--paper)}.context-panel{border-right:1px solid var(--hairline)}.analysis-panel{border-left:1px solid var(--hairline);background:var(--paper-raised)}.section-heading,.panel-heading{justify-content:space-between;align-items:center;display:flex}.section-heading{height:28px;margin-bottom:var(--space-4);border-bottom:1px solid var(--hairline);color:var(--ink-muted);letter-spacing:.14em;font-size:9px}.section-heading button,.analysis-copy button{cursor:pointer;color:var(--ink-muted);background:0 0;border:0;border-bottom:1px solid #0000;padding:3px 0;font-size:8px}.section-heading button:hover,.analysis-copy button:hover{color:var(--ink);border-bottom-color:currentColor}.context-list{display:grid}.context-list button{border:0;border-bottom:1px solid var(--hairline);cursor:pointer;text-align:left;background:0 0;justify-content:space-between;align-items:center;min-height:56px;padding:8px 10px;display:flex}.context-list button:hover{background:var(--paper-raised);padding-left:13px}.context-list button.active{border-left:2px solid var(--performance);background:var(--paper-raised)}.context-list button span{color:var(--ink-muted);font-size:9px}.context-list button strong{font-size:11px;font-weight:500}.secondary-action{width:100%;min-height:42px;margin-top:var(--space-5);border:1px solid var(--hairline);cursor:pointer;text-align:left;background:0 0;align-items:center;gap:10px;padding:0 12px;font-size:9px;display:flex}.secondary-action:hover{border-color:var(--ink);background:var(--paper-raised);transform:translateY(-1px)}.secondary-action span{font-size:18px}.instrument{--keybed-left:10px;--keybed-right:10px;--now-line-bottom:10px;background:var(--paper-raised);grid-template-rows:minmax(342px,1fr) 128px 42px;min-width:0;display:grid;position:relative}.piano-roll{border-bottom:1px solid var(--ink);background:var(--paper);min-height:342px;position:relative;overflow:hidden}.roll-grid{inset:0 var(--keybed-right) 0 var(--keybed-left);grid-template-columns:repeat(12,1fr);display:grid;position:absolute}.roll-grid span{border-right:1px solid #9d998f38}.roll-grid span:nth-child(2n){background:#706d6606}.roll-label{z-index:3;top:16px;right:calc(var(--keybed-right) + 8px);color:var(--ink-muted);letter-spacing:.12em;gap:9px;font-size:8px;display:flex;position:absolute}.note-stream{inset:0 var(--keybed-right) 0 var(--keybed-left);position:absolute}.roll-note{border:1px solid color-mix(in srgb, var(--performance) 80%, var(--ink));background:color-mix(in srgb, var(--performance) 72%, transparent);opacity:.78;position:absolute}.roll-note[data-tone="1"]{border-color:color-mix(in srgb, var(--guide) 80%, var(--ink));background:color-mix(in srgb, var(--guide) 67%, transparent)}.roll-note[data-tone="2"]{border-color:color-mix(in srgb, var(--colour) 80%, var(--ink));background:color-mix(in srgb, var(--colour) 64%, transparent)}.roll-note[data-tone="3"]{border-color:color-mix(in srgb, var(--dominant) 80%, var(--ink));background:color-mix(in srgb, var(--dominant) 65%, transparent)}.roll-note.live{--played-colour:var(--performance);--velocity-border:70%;--velocity-fill:60%;--velocity-glow:20%;z-index:2;border-color:color-mix(in srgb, var(--played-colour) var(--velocity-border), var(--hairline));background:linear-gradient(180deg, color-mix(in srgb, var(--played-colour) var(--velocity-fill), var(--paper-raised)) 0%, color-mix(in srgb, var(--played-colour) var(--velocity-border), var(--paper-deep)) 100%);min-height:10px;box-shadow:0 0 0 1px color-mix(in srgb, var(--played-colour) var(--velocity-glow), transparent);opacity:0;transform-origin:50% 100%;will-change:height, opacity, transform;border-radius:2px 2px 0 0;bottom:-1px;transform:translate(0,0)scaleY(.16)}.roll-note.live:after{background:color-mix(in srgb, var(--played-colour) var(--velocity-glow), transparent);content:"";filter:blur(2px);opacity:0;border-radius:50%;height:5px;transition:opacity 90ms;position:absolute;bottom:-2px;left:-2px;right:-2px}.roll-note.live[data-sounding]:after{opacity:.72}.played-note-origin{z-index:3;right:var(--keybed-right);bottom:0;left:var(--keybed-left);background:color-mix(in srgb, var(--ink) 38%, transparent);height:1px;box-shadow:0 -3px 8px color-mix(in srgb, var(--performance) 6%, transparent);pointer-events:none;position:absolute}.piano{min-width:0;height:128px;padding:0 var(--keybed-right) 10px var(--keybed-left);background:linear-gradient(180deg, #d4cfc3 0, var(--paper-raised) 10px, var(--paper-raised) 100%);isolation:isolate;-webkit-user-select:none;user-select:none;position:relative}.piano:before{z-index:4;top:0;right:var(--keybed-right);left:var(--keybed-left);content:"";pointer-events:none;background:linear-gradient(#1c1b183d,#1c1b1800);height:4px;position:absolute}.piano-keybed{filter:drop-shadow(0 2px 1px #1c1b181f);perspective:620px;min-width:0;height:100%;transform-style:preserve-3d;position:relative}.white-keys{height:100%;display:flex}.piano-key{--velocity-border:70%;--velocity-fill:60%;--velocity-glow:20%;box-sizing:border-box;cursor:pointer;transform-origin:50% 0;padding:0;transition:background-color 70ms,box-shadow 95ms,filter 95ms,transform 58ms cubic-bezier(.2,.8,.25,1)}.white-key{border:1px solid var(--ink);background:linear-gradient(90deg,#ece8df 0,#fffef9 7% 88%,#e9e4da 100%);border-top:0;border-left:0;flex:1;min-width:0;position:relative;box-shadow:inset 0 -7px 9px #59544a1a,inset 0 1px #ffffffe6}.white-key:first-child{border-left:1px solid var(--ink)}.white-key:hover{background:linear-gradient(90deg,#eee1d8 0,#fff6ee 8% 88%,#ead7cc 100%)}.white-key[data-active]{background:linear-gradient(90deg, color-mix(in srgb, var(--performance) var(--velocity-border), var(--paper-deep)) 0, color-mix(in srgb, var(--performance) var(--velocity-fill), var(--paper-raised)) 10%, color-mix(in srgb, var(--performance) var(--velocity-fill), var(--paper-raised)) 88%, color-mix(in srgb, var(--performance) var(--velocity-border), var(--paper-deep)) 100%);box-shadow:inset 0 -3px 6px color-mix(in srgb, var(--performance) var(--velocity-glow), transparent), inset 0 2px 2px #ffebe038;filter:saturate(1.04);transform:scaleY(.985)rotateX(1.2deg)}.white-key .piano-note-label{color:var(--ink-muted);text-align:center;font-size:clamp(5px,.48vw,7px);position:absolute;bottom:23px;left:0;right:0}.computer-key-label{color:var(--ink-muted);letter-spacing:.08em;text-align:center;font-size:clamp(5px,.48vw,7px);font-weight:600;position:absolute;bottom:7px;left:0;right:0}.black-key{z-index:2;border:1px solid var(--ink);background:linear-gradient(90deg,#0e0e0d 0,#2e2d29 13%,#24231f 76%,#090908 100%);height:65%;position:absolute;top:0;transform:translate(-50%);box-shadow:0 3px 3px #1c1b1847,inset 0 -7px 7px #00000080,inset 0 1px #ffffff24}.black-key:hover{background:linear-gradient(90deg,#171613 0,#4b4841 15%,#38352f 78%,#10100e 100%)}.black-key[data-active]{background:linear-gradient(90deg, color-mix(in srgb, var(--performance) var(--velocity-border), #151412) 0, color-mix(in srgb, var(--performance) var(--velocity-fill), #292723) 18%, color-mix(in srgb, var(--performance) var(--velocity-fill), #292723) 78%, color-mix(in srgb, var(--performance) var(--velocity-border), #151412) 100%);transform:translate(-50%)scaleY(.975)rotateX(1.5deg);box-shadow:0 1px 1px #1c1b1833,inset 0 -4px 5px #5b1a1247,inset 0 1px #ffe8de38}.black-key .computer-key-label{color:var(--paper-raised)}.piano[data-pedal]{box-shadow:inset 0 3px var(--performance)}.piano-key{touch-action:none}.instrument-footer{min-width:0;padding:0 var(--space-4);border-top:1px solid var(--hairline);background:var(--paper-deep);color:var(--ink-muted);letter-spacing:.06em;justify-content:space-between;align-items:center;font-size:8px;display:flex}.piano-range-controls{border:1px solid var(--hairline);background:var(--paper-raised);grid-template-columns:26px 26px minmax(98px,1fr) 26px 26px;min-width:202px;height:28px;display:inline-grid}.piano-range-controls button,.piano-range-controls output{border:0;border-right:1px solid var(--hairline);min-width:0;color:var(--ink-muted);font:inherit;background:0 0;place-items:center;padding:0;display:grid}.piano-range-controls button{cursor:pointer;font-size:11px}.piano-range-controls button:last-child{border-right:0}.piano-range-controls button:hover:not(:disabled){background:var(--paper-deep);color:var(--ink)}.piano-range-controls button:disabled{cursor:default;opacity:.25}.piano-range-controls output{color:var(--ink);letter-spacing:.08em;white-space:nowrap;font-size:7px}.analysis-panel>.eyebrow{margin-bottom:var(--space-3);display:block}.detected-chord{border-bottom:1px solid var(--ink);letter-spacing:-.1em;white-space:nowrap;min-height:74px;font-size:clamp(38px,4vw,62px);font-weight:500;line-height:1}.pitch-row{padding:var(--space-4) 0;border-bottom:1px solid var(--hairline);grid-template-columns:repeat(5,1fr);gap:4px;display:grid}.pitch-row>span{border:1px solid var(--hairline);place-items:center;min-width:0;height:44px;font-size:12px;display:grid}.pitch-row>span[data-role=root]{border-color:var(--performance);color:var(--performance)}.pitch-row>span[data-role=guide]{border-color:var(--guide);color:var(--guide)}.pitch-row>span[data-role=colour]{border-color:var(--colour);color:var(--colour)}.pitch-row small{letter-spacing:.08em;margin-top:-8px;font-size:7px;display:block}.analysis-copy{padding-top:var(--space-5)}.analysis-copy>span{color:var(--dominant);letter-spacing:.15em;font-size:8px}.analysis-copy h2{letter-spacing:-.04em;margin:10px 0 8px;font-size:15px;font-weight:500}.analysis-copy p{margin:10px 0 var(--space-5);color:#4e4b45;font-size:10px;line-height:1.7}.analysis-copy button{border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);width:100%;color:var(--ink);justify-content:space-between;align-items:center;padding:10px 0;display:flex}.voice-leading{margin-bottom:var(--space-5);border-top:1px solid var(--hairline);border-left:1px solid var(--hairline);grid-template-columns:1fr auto 1fr;display:grid}.voice-leading>*{border-right:1px solid var(--hairline);border-bottom:1px solid var(--hairline);place-items:center;min-height:38px;font-size:10px;font-style:normal;display:grid}.feedback-line{border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);grid-template-columns:10px auto 1fr;align-items:center;gap:9px;padding:12px 0;display:grid}.feedback-line>span{border:1px solid var(--success);border-radius:999px;width:7px;height:7px}.feedback-line strong{font-size:10px;font-weight:500}.feedback-line small{color:var(--ink-muted);text-align:right;font-size:8px}.record-button{border:1px solid var(--hairline);background:var(--paper-raised);cursor:pointer;align-items:center;gap:10px;width:100%;min-height:48px;padding:0 12px;font-size:10px;display:flex}.record-button:hover,.record-button[data-recording]{border-color:var(--performance)}.record-button[data-recording] svg{color:var(--performance);fill:var(--performance)}.record-button kbd{margin-left:auto}.practice-score{margin-top:var(--space-6);border-top:1px solid var(--hairline);border-left:1px solid var(--hairline);grid-template-columns:1fr 1fr;display:grid}.practice-score div{border-right:1px solid var(--hairline);border-bottom:1px solid var(--hairline);min-height:68px;padding:10px;display:grid}.practice-score span{color:var(--ink-muted);letter-spacing:.1em;font-size:7px}.practice-score strong{align-self:end;font-size:17px;font-weight:500}.exercise-title{border-bottom:1px solid var(--hairline);gap:6px;padding:12px 0 18px;display:grid}.exercise-title span{font-size:11px}.exercise-title strong{color:var(--ink-muted);font-size:9px;font-weight:400}.toggle-row{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;min-height:48px;font-size:9px;display:flex}.toggle-row button{border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:999px;width:32px;height:18px;padding:0;position:relative}.toggle-row button i{background:var(--rule);border-radius:999px;width:10px;height:10px;transition:transform .12s,background-color .12s;position:absolute;top:3px;left:3px}.toggle-row button[aria-pressed=true]{border-color:var(--success)}.toggle-row button[aria-pressed=true] i{background:var(--success);transform:translate(14px)}.metronome-panel,.help-panel{z-index:40;width:310px;padding:var(--space-5);border:1px solid var(--ink);background:var(--paper-raised);box-shadow:8px 8px 0 var(--shadow);opacity:0;pointer-events:none;transition:opacity .14s,transform .14s;position:fixed;top:84px;right:20px;transform:translateY(-8px)}.metronome-panel[data-open],.help-panel[data-open]{opacity:1;pointer-events:auto;transform:translateY(0)}.panel-heading>div{gap:5px;display:grid}.panel-heading h2{margin:0;font-size:16px;font-weight:500}.scope-note{color:var(--performance);letter-spacing:.1em;font-size:8px}.pendulum{width:100%;min-height:102px;margin:var(--space-5) 0;border:1px solid var(--hairline);background:var(--paper);cursor:pointer;place-items:center;gap:5px;padding:12px;font-size:9px;display:grid}.pendulum:hover{border-color:var(--ink)}.pendulum-track{width:150px;height:38px;display:block;position:relative}.pendulum-track:after{background:var(--hairline);content:"";height:1px;position:absolute;bottom:2px;left:0;right:0}.pendulum-track i{background:var(--ink);transform-origin:50% 100%;width:1px;height:33px;position:absolute;bottom:2px;left:50%;transform:rotate(-30deg)}.pendulum-track i:before{background:var(--performance);content:"";border-radius:999px;width:9px;height:9px;position:absolute;top:-3px;left:-4px}.pendulum[data-running] .pendulum-track i{animation:pendulum var(--beat-duration) ease-in-out var(--phase-delay) infinite alternate}.pendulum[data-muted] .pendulum-track i:before{background:var(--ink-muted)}@keyframes pendulum{0%{transform:rotate(-34deg)}to{transform:rotate(34deg)}}.pendulum kbd{min-width:42px}.tempo-field{gap:8px;display:grid}.tempo-label{color:var(--ink-muted);cursor:ew-resize;letter-spacing:.12em;-webkit-user-select:none;user-select:none;justify-content:space-between;font-size:8px;display:flex}.scrub-cursor{color:var(--ink);font-size:12px}.tempo-group{grid-template-columns:38px 1fr 36px 38px;min-height:44px;display:grid}.tempo-group button,.tempo-group input,.tempo-group>span{border:1px solid var(--ink);background:var(--paper-raised);text-align:center;border-right:0;min-width:0}.tempo-group button{cursor:pointer}.tempo-group button:hover{background:var(--paper-deep)}.tempo-group input{font-variant-numeric:tabular-nums;border-radius:0;padding:0 6px;font-size:18px}.tempo-group>span{color:var(--ink-muted);place-items:center;font-size:8px;display:grid}.tempo-group button:last-child{border-right:1px solid var(--ink)}.count-in-setting{border:1px solid var(--hairline);background:var(--paper-raised);cursor:pointer;text-align:left;justify-content:space-between;align-items:center;width:100%;min-height:50px;margin-top:12px;padding:8px 10px;display:flex}.count-in-setting:hover:not(:disabled){border-color:var(--ink);background:var(--paper)}.count-in-setting:disabled{cursor:not-allowed;opacity:.46}.count-in-setting>span{gap:4px;display:grid}.count-in-setting small{color:var(--ink-muted);letter-spacing:.14em;font-size:7px}.count-in-setting strong{font-size:11px;font-weight:500}.shortcut-list,.help-list{margin-top:var(--space-5);border-top:1px solid var(--hairline);display:grid}.shortcut-list>div,.help-list>div{border-bottom:1px solid var(--hairline);align-items:center;gap:5px;min-height:39px;display:flex}.shortcut-list span,.help-list span{color:var(--ink-muted);margin-right:auto;font-size:9px}.help-panel{top:84px}.help-panel p{margin:var(--space-4) 0 0;color:var(--ink-muted);font-size:9px;line-height:1.6}.toast{z-index:80;border:1px solid var(--ink);background:var(--ink);color:var(--paper-raised);opacity:0;pointer-events:none;padding:10px 14px;font-size:10px;transition:opacity .14s,transform .14s;position:fixed;bottom:22px;left:50%;transform:translate(-50%,6px)}.toast[data-visible]{opacity:1;transform:translate(-50%)}@media (width<=1160px){.topbar{padding:0 var(--space-4);grid-template-columns:188px minmax(360px,1fr) auto}.mode-button{min-width:104px;padding:0 14px}.midi-button{width:40px;min-width:40px;padding:0}.midi-button>span:last-child{display:none}.workspace{grid-template-columns:220px minmax(500px,1fr) 252px}.context-panel,.analysis-panel{padding:var(--space-4)}.instrument-footer>span:first-child{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app-shell{overflow:visible}.score-page{border-bottom:1px solid var(--ink);background:var(--paper-raised);padding:22px 24px 26px}.score-page-header{justify-content:space-between;align-items:flex-end;gap:32px;margin-bottom:18px;display:flex}.score-page-header h1{letter-spacing:-.055em;margin:4px 0 3px;font-size:clamp(22px,2.2vw,32px);font-weight:500}.score-page-header p,.score-actions>span{color:var(--ink-muted);margin:0;font-size:9px;line-height:1.5}.score-title-meta{align-items:center;gap:8px;display:flex}.score-title-meta .metadata-row strong{color:var(--ink)}.score-actions{flex-direction:column;align-items:flex-end;gap:8px;display:flex}.score-source-actions{align-items:center;gap:8px;display:flex}.score-loop-chip{border:1px solid var(--hairline);background:var(--paper-raised);cursor:pointer;min-height:20px;color:var(--ink-muted);letter-spacing:.07em;white-space:nowrap;align-items:center;padding:0 6px;font-size:6px;display:inline-flex}.score-loop-chip[data-active]{border-color:var(--guide);background:color-mix(in srgb, var(--guide) 7%, var(--paper-raised));color:var(--guide)}.score-loop-chip span{margin-left:6px;font-size:11px}.score-loop-chip:hover:not(:disabled){border-color:var(--guide);background:color-mix(in srgb, var(--guide) 13%, var(--paper-raised));color:var(--guide)}.score-loop-chip:disabled{cursor:not-allowed;opacity:.5}.score-provenance{color:var(--ink-muted);letter-spacing:.04em;font-size:8px;text-decoration:none}.score-provenance:hover{color:var(--ink)}.score-actions .secondary-action{white-space:nowrap;width:auto;min-height:36px;margin:0}.standard-picker-trigger{justify-content:space-between}.standard-picker-trigger span{margin-left:8px;font-size:13px}.material-error{border:1px solid color-mix(in srgb, var(--performance) 58%, var(--hairline));background:color-mix(in srgb, var(--performance) 7%, var(--paper-raised));justify-content:space-between;align-items:center;gap:16px;min-height:38px;margin:-8px 0 14px;padding:0 10px;display:flex}.material-error strong{text-overflow:ellipsis;white-space:nowrap;max-width:46%;font-size:8px;font-weight:500;overflow:hidden}.material-error span{color:var(--ink-muted);text-align:right;font-size:8px}.import-action{cursor:pointer}.import-action input{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.lead-sheet{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);scrollbar-color:var(--rule) transparent;display:grid}.score-system{border-bottom:1px solid var(--hairline);grid-template-columns:minmax(0,1fr);min-height:102px;display:grid}.score-system:last-child{border-bottom:0}.system-measures{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.score-measure{border:0;border-right:1px solid var(--hairline);cursor:pointer;text-align:left;background:0 0;min-width:0;min-height:102px;padding:10px 12px 8px;position:relative;overflow:hidden}.score-measure:last-child{border-right:0}.score-measure:hover,.score-measure[data-selected]{background:var(--paper)}.score-measure[data-selected]{box-shadow:inset 0 0 0 1px var(--ink)}.score-measure[data-current]:before{z-index:3;background:var(--performance);content:"";width:2px;position:absolute;top:0;bottom:0;left:0}.score-measure-number{color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:7px;position:absolute;top:7px;right:9px}.rehearsal-mark{z-index:2;border:1px solid var(--ink);background:var(--paper-raised);place-items:center;min-width:20px;height:20px;padding:0 5px;font-size:8px;font-weight:600;display:grid;position:absolute;top:5px;left:6px}.score-harmony{height:30px;position:absolute;top:12px;left:12px;right:12px}.rehearsal-mark+.score-harmony{left:48px}.attribute-change{z-index:2;color:var(--ink-muted);letter-spacing:.08em;font-size:6px;position:absolute;bottom:45px;left:7px}.score-harmony>.score-chord{gap:1px;display:grid;position:absolute;transform:translate(0)}.score-harmony strong{letter-spacing:-.05em;font-size:clamp(13px,1.25vw,18px);font-weight:500}.score-harmony small{color:var(--dominant);font-size:7px}.staff{border-left:1px solid var(--ink);height:43px;position:absolute;bottom:8px;left:0;right:0}.staff-line{left:0;right:0;top:calc(7px + var(--line,0) * 7px);background:color-mix(in srgb, var(--ink) 70%, transparent);height:1px;position:absolute}.staff-line:first-child{--line:0}.staff-line:nth-child(2){--line:1}.staff-line:nth-child(3){--line:2}.staff-line:nth-child(4){--line:3}.staff-line:nth-child(5){--line:4}.staff-note{z-index:2;top:clamp(1px, calc(28px - var(--pitch) * 1.7px), 34px);left:calc(12px + var(--beat) / var(--measure-duration) * (100% - 30px));background:var(--ink);border-radius:50%;width:10px;height:7px;position:absolute;transform:rotate(-14deg)}.staff-note[data-open]{border:1px solid var(--ink);background:var(--paper-raised)}.repeat-mark,.ending-mark{z-index:4;color:var(--ink);font-size:10px;position:absolute}.repeat-mark.left{bottom:23px;left:1px}.repeat-mark.right{bottom:23px;right:1px}.ending-mark{top:2px;left:5px}.staff-note:after{background:var(--ink);content:"";width:1px;height:20px;position:absolute;bottom:3px;right:0}.now-mark{z-index:4;background:var(--performance);color:#fff;letter-spacing:.1em;padding:2px 4px;font-size:6px;position:absolute;bottom:5px;right:7px}.workspace[data-score-visible]{min-height:500px}.workspace:not([data-context]){grid-template-columns:minmax(620px,1fr) minmax(280px,.38fr)}.lead-sheet:not([data-melody]) .score-system,.lead-sheet:not([data-melody]) .score-measure{min-height:68px}.lead-sheet:not([data-melody]) .attribute-change{bottom:7px}.record-control[data-recording]{border-color:var(--performance);color:var(--performance)}.record-control[data-recording] svg{fill:currentColor}.dynamics-meter{background:0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}.dynamics-meter:after{width:var(--level);background:var(--performance);content:"";height:100%;display:block}.empty-copy{margin:var(--space-6) 0 0;color:var(--ink-muted);font-size:9px;line-height:1.7}.analysis-state{border:1px solid var(--hairline);color:var(--ink-muted);letter-spacing:.12em;margin:10px 0 0;padding:3px 6px;font-size:7px;display:inline-flex}.analysis-state[data-certainty=clear]{border-color:var(--success);color:var(--success)}.analysis-state[data-certainty=ambiguous]{border-color:var(--dominant);color:var(--dominant)}.pitch-row{grid-template-columns:repeat(auto-fit,minmax(42px,1fr))}.analysis-copy button small{color:var(--ink-muted);font-size:7px}.written-heard{border-top:1px solid var(--hairline);grid-template-columns:auto 1fr;margin-top:20px;display:grid}.written-heard>*{border-right:1px solid var(--hairline);border-bottom:1px solid var(--hairline);min-height:34px;padding:8px;font-size:9px}.written-heard span{color:var(--ink-muted);letter-spacing:.1em;font-size:7px}.roll-note.target{opacity:0;animation:none}@media (width<=1280px){.workspace{grid-template-columns:210px minmax(480px,1fr) 250px}.workspace:not([data-context]){grid-template-columns:minmax(560px,1fr) 250px}.topbar{grid-template-columns:178px minmax(310px,1fr) auto}.record-control span{display:none}}@media print{.topbar,.workspace,.score-actions,.metronome-panel,.help-panel,.standard-picker-backdrop,.standard-picker-viewport{display:none!important}.score-page{border:0;padding:0}.lead-sheet{max-height:none;overflow:visible}}.standard-picker-backdrop{z-index:80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#1c1b1857;position:fixed;inset:0}.standard-picker-viewport{z-index:81;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.standard-picker-dialog{border:1px solid var(--ink);background:var(--paper-raised);width:min(620px,100vw - 48px);max-height:min(760px,100vh - 64px);display:grid;overflow:hidden;box-shadow:0 22px 80px #1c1b1833}.standard-picker-heading{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:flex-start;gap:24px;padding:24px 24px 18px;display:flex}.standard-picker-heading h2{letter-spacing:-.055em;margin:6px 0 5px;font-size:24px;font-weight:500}.standard-picker-heading p{color:var(--ink-muted);margin:0;font-size:9px;line-height:1.6}.standard-search-field{border-bottom:1px solid var(--ink);grid-template-columns:auto 1fr auto;align-items:center;gap:12px;min-height:52px;padding:0 20px;display:grid}.standard-search-field>span{color:var(--ink-muted);font-size:18px}.standard-search-field input{min-width:0;height:50px;color:var(--ink);font:inherit;background:0 0;border:0;outline:0;font-size:13px}.standard-search-field input::placeholder{color:color-mix(in srgb, var(--ink-muted) 62%, transparent)}.standard-search-field kbd{color:var(--ink-muted)}.standard-results-meta,.standard-picker-footer{min-height:34px;color:var(--ink-muted);letter-spacing:.1em;justify-content:space-between;align-items:center;padding:0 20px;font-size:7px;display:flex}.standard-results-meta{border-bottom:1px solid var(--hairline)}.standard-results{min-height:160px;overflow:auto}.standard-result{border:0;border-bottom:1px solid var(--hairline);width:100%;min-height:58px;color:var(--ink);cursor:pointer;text-align:left;background:0 0;grid-template-columns:minmax(0,1fr) auto;align-items:center;padding:9px 20px;display:grid}.standard-result:hover,.standard-result[data-active]{background:var(--paper-deep);box-shadow:inset 2px 0 var(--performance);padding-left:23px}.standard-result:disabled{cursor:wait}.standard-result-title,.standard-result-meta{gap:4px;min-width:0;display:grid}.standard-result-title strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;overflow:hidden}.standard-result small{color:var(--ink-muted);letter-spacing:.05em;font-size:7px;font-style:normal}.standard-result-meta{justify-items:end;padding-left:20px}.standard-result-meta .metadata-row{justify-content:flex-end}.standard-result-meta em{border:1px solid var(--hairline);color:var(--ink-muted);letter-spacing:.1em;padding:3px 5px;font-size:6px;font-style:normal}.standard-results-empty{min-height:160px;color:var(--ink-muted);place-items:center;margin:0;padding:24px;font-size:9px;display:grid}.standard-picker-footer{border-top:1px solid var(--ink)}.standard-picker-footer a{color:var(--ink-muted);text-decoration:none}.standard-picker-footer a:hover{color:var(--ink)}body{min-width:1080px;overflow:hidden}.app-shell{height:100vh;min-height:0;overflow:hidden}.topbar{grid-template-columns:minmax(180px,1fr) auto minmax(330px,1fr);height:64px;padding:0 20px}.study-workspace{--score-pane-width:56%;grid-template-columns:minmax(520px, var(--score-pane-width)) 9px minmax(430px, 1fr);background:var(--paper-raised);height:calc(100vh - 64px);min-height:0;display:grid}.study-workspace[data-resizing]{cursor:col-resize;-webkit-user-select:none;user-select:none}.score-pane{border-right:0;grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.workspace-splitter-slot{width:9px;min-width:9px;height:100%}.workspace-splitter{z-index:9;border:0;border-right:1px solid var(--hairline);border-left:1px solid var(--hairline);background:var(--paper-deep);cursor:col-resize;touch-action:none;place-items:center;width:9px;min-width:9px;height:100%;padding:0;display:grid;position:relative}.workspace-splitter:before{background:color-mix(in srgb, var(--ink) 24%, transparent);content:"";width:1px;transition:width .1s,background-color .1s;position:absolute;top:0;bottom:0;left:3px}.workspace-splitter>span{z-index:1;background:var(--paper-deep);border:1px solid #0000;place-content:center;gap:2px;width:7px;height:26px;display:grid;position:relative}.workspace-splitter i{background:var(--ink-muted);border-radius:50%;width:2px;height:2px;display:block}.workspace-splitter:hover,.workspace-splitter:focus-visible,.study-workspace[data-resizing] .workspace-splitter{background:color-mix(in srgb, var(--performance) 8%, var(--paper-deep));box-shadow:none}.workspace-splitter:hover:before,.workspace-splitter:focus-visible:before,.study-workspace[data-resizing] .workspace-splitter:before{background:var(--performance);width:2px}.workspace-splitter:hover>span,.workspace-splitter:focus-visible>span,.study-workspace[data-resizing] .workspace-splitter>span{border-color:color-mix(in srgb, var(--performance) 38%, var(--hairline));background:var(--paper-raised)}.score-pane .score-page-header{border-bottom:1px solid var(--hairline);background:var(--paper-raised);min-height:92px;margin:0;padding:17px 20px 15px}.score-pane .score-page-header h1{margin:3px 0 2px;font-size:24px}.score-pane .lead-sheet{overscroll-behavior:contain;border-top:0;border-bottom:0;min-height:0;overflow:hidden auto}.score-pane .score-system,.score-pane .score-measure{min-height:106px}.score-measure[data-in-loop]{background:#e8eff1}.score-measure[data-section] .score-harmony{left:48px}.score-measure[data-in-loop]:after{z-index:5;background:var(--guide);content:"";height:2px;position:absolute;top:0;left:0;right:0}.score-measure[data-loop-start]:after{left:8px}.score-measure[data-loop-end]:after{right:8px}.loop-mark{z-index:7;background:var(--guide);color:#fff;letter-spacing:.09em;padding:1px 4px;font-size:6px;position:absolute;top:1px}.loop-mark.in{left:calc(50% - 26px)}.loop-mark.out{right:calc(50% - 26px)}.score-measure[data-current]:before{z-index:8;width:3px}.score-measure[data-count-in-start]{outline:1px solid var(--performance);outline-offset:-3px}.start-mark{z-index:7;border:1px solid var(--performance);background:var(--paper-raised);color:var(--performance);letter-spacing:.1em;padding:2px 4px;font-size:6px;position:absolute;bottom:5px;right:6px}.live-dock{background:var(--paper-raised);grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.harmony-summary{border-bottom:1px solid var(--ink);grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;min-height:126px;padding:18px 20px 14px;display:grid;position:relative}.harmony-summary>.harmony-reading:only-of-type{grid-column:1/-1}.harmony-reading{align-content:start;gap:4px;min-width:0;display:grid}.harmony-reading>span,.harmony-reading>small{color:var(--ink-muted);letter-spacing:.12em;font-size:7px}.harmony-reading strong{letter-spacing:-.085em;text-overflow:ellipsis;white-space:nowrap;font-size:clamp(28px,2.8vw,46px);font-weight:500;line-height:1;overflow:hidden}.harmony-reading:not([data-primary]) strong{color:var(--ink-muted);font-size:clamp(23px,2.2vw,36px)}.harmony-alternatives{z-index:4;letter-spacing:.08em;font-size:7px;position:absolute;bottom:10px;right:18px}.harmony-alternatives summary{color:var(--dominant);cursor:pointer}.harmony-alternatives>div{border:1px solid var(--ink);background:var(--paper-raised);width:150px;box-shadow:4px 4px 0 var(--shadow);gap:5px;padding:8px;display:grid;position:absolute;top:18px;right:0}.live-dock .instrument{grid-template-rows:minmax(32px,auto) minmax(0,1fr) 132px;min-width:0;min-height:0;display:grid;overflow:hidden}.live-dock .piano-roll,.live-dock .piano,.live-dock .instrument-footer{box-sizing:border-box;width:100%}.live-dock .piano-roll{grid-row:2;min-height:0}.live-dock .piano{grid-row:3}.live-dock .instrument-footer{border-bottom:1px solid var(--hairline);grid-row:1}.roll-note{left:calc(var(--x) - var(--note-width) / 2);width:var(--note-width)}.roll-note[data-edge=low]{width:5px;left:0;right:auto}.roll-note[data-edge=high]{width:5px;left:auto;right:0}.roll-note.target{bottom:var(--now-line-bottom);border-color:color-mix(in srgb, var(--ink) 38%, transparent);background:color-mix(in srgb, var(--ink) 12%, transparent);opacity:0;transform-origin:50% 100%;will-change:transform;min-height:8px;transition:opacity 90ms,border-color 90ms,background-color 90ms}.roll-note.target[data-visible]{opacity:.64}.roll-note.target[data-state=now]{z-index:4;border-color:var(--performance);background:color-mix(in srgb, var(--performance) 34%, transparent);box-shadow:0 0 0 3px color-mix(in srgb, var(--performance) 9%, transparent);opacity:1}.roll-note.target[data-state=hit]{z-index:5;border-color:var(--success);background:color-mix(in srgb, var(--success) 44%, transparent);box-shadow:0 0 0 4px color-mix(in srgb, var(--success) 10%, transparent);opacity:1}.roll-note.target>i{background:var(--paper-raised);color:var(--ink);white-space:nowrap;padding:2px 3px;font-size:6px;font-style:normal;line-height:1;display:none;position:absolute;bottom:calc(100% + 3px);right:50%;transform:translate(50%)}.roll-note.target[data-state=now]>i,.roll-note.target[data-state=hit]>i{display:block}.target-now-line{z-index:3;right:var(--keybed-right);bottom:var(--now-line-bottom);left:var(--keybed-left);background:color-mix(in srgb, var(--performance) 82%, transparent);height:1px;box-shadow:0 0 0 3px color-mix(in srgb, var(--performance) 6%, transparent);pointer-events:none;position:absolute}.target-now-line span{background:var(--performance);color:var(--paper-raised);letter-spacing:.12em;padding:2px 4px;font-size:6px;position:absolute;bottom:4px;right:0}.target-now-line i{background:var(--performance);border-radius:50%;width:5px;height:5px;position:absolute;bottom:-2px;left:0}.count-in-overlay{z-index:10;top:50%;left:calc(var(--keybed-left) + (100% - var(--keybed-left) - var(--keybed-right)) / 2);border:1px solid var(--ink);background:color-mix(in srgb, var(--paper-raised) 90%, transparent);min-width:128px;box-shadow:4px 4px 0 var(--shadow);text-align:center;place-content:center;padding:14px 18px;display:grid;position:absolute;transform:translate(-50%,-50%)}.count-in-overlay>span,.count-in-overlay>small{color:var(--ink-muted);letter-spacing:.16em;font-size:8px}.count-in-overlay strong{color:var(--performance);letter-spacing:-.1em;margin:5px 0;font-size:clamp(64px,8vw,112px);font-weight:400;line-height:.9}.live-dock .piano{border-bottom:1px solid var(--ink);height:132px}.midi-port{--velocity:0%;z-index:2;box-sizing:border-box;border:1px solid var(--hairline);background:var(--paper-raised);cursor:default;place-items:center;width:40px;height:40px;padding:6px;display:grid;position:relative;overflow:visible}.midi-port[data-actionable]{cursor:pointer}.midi-port:hover,.midi-port:focus-visible{border-color:var(--ink);background:var(--paper)}.din-socket{z-index:2;border:1px solid var(--ink);background:#292824;border-radius:50%;width:26px;height:26px;display:block;position:relative;box-shadow:inset 0 0 0 2px #5b5952}.din-socket>i{background:var(--paper-deep);border-radius:50%;width:2px;height:2px;position:absolute}.din-socket>i:first-child{top:7px;left:5px}.din-socket>i:nth-child(2){top:4px;left:11px}.din-socket>i:nth-child(3){top:7px;right:5px}.din-socket>i:nth-child(4){top:14px;left:8px}.din-socket>i:nth-child(5){top:14px;right:8px}.midi-plug{z-index:3;opacity:0;pointer-events:none;background:#1d1d1b;border:2px solid #77746b;border-radius:50%;width:23px;height:23px;transition:top .22s,left .22s,opacity .12s,transform .22s;display:block;position:absolute;top:23px;left:-12px;transform:translateY(5px)rotate(-28deg)scale(.88);box-shadow:inset 0 0 0 1px #b1ada3}.midi-plug:after{content:"";background:#1d1d1b;width:4px;height:6px;position:absolute;top:18px;left:8px}.midi-plug em{border:1px solid #77746b;border-radius:50%;width:6px;height:6px;position:absolute;top:7px;left:7px}.midi-port:hover .midi-plug,.midi-port:focus-visible .midi-plug{opacity:1;top:17px;left:-10px;transform:translateY(0)rotate(-24deg)scale(1)}.midi-port[data-connected] .midi-plug{opacity:1;top:1px;left:1px;transform:translateY(0)rotate(0)scale(1)}.port-status{color:var(--ink);white-space:nowrap;align-items:center;gap:0;font-size:0;display:flex;position:absolute;top:3px;right:3px}.port-status>i{border:1px solid var(--rule);border-radius:50%;flex:none;width:5px;height:5px}.midi-port[data-connected] .port-status>i{border-color:var(--success);background:var(--success);box-shadow:0 0 0 2px color-mix(in srgb, var(--success) 16%, transparent)}.port-copy{z-index:1;background:var(--paper);opacity:0;pointer-events:none;text-align:left;white-space:nowrap;border:1px solid #0000;border-right:0;align-content:center;width:0;height:40px;padding:7px 0;transition:width .16s,opacity .12s,padding .16s,border-color .16s;display:grid;position:absolute;top:-1px;right:32px;overflow:hidden}.midi-port:hover .port-copy,.midi-port:focus-visible .port-copy{border-color:var(--ink);opacity:1;width:148px;padding-left:11px;padding-right:8px}.port-copy strong{letter-spacing:.12em;font-size:8px}.port-copy small{max-width:126px;color:var(--ink-muted);letter-spacing:.06em;text-overflow:ellipsis;font-size:6px;overflow:hidden}.port-activity{height:2px;position:absolute;bottom:0;left:0;right:0}@media (prefers-reduced-motion:reduce){.midi-plug,.port-copy{transition:none}.metronome-trigger[data-running] .header-pendulum i,.pendulum[data-running] .pendulum-track i{animation:none}}.port-activity:after{width:var(--velocity);background:color-mix(in srgb, var(--performance) var(--velocity-border), var(--paper-deep));content:"";height:100%;transition:width 80ms;display:block}.live-dock .instrument-footer{white-space:nowrap;gap:6px;padding:4px 10px}.live-dock .instrument-footer>span{text-overflow:ellipsis;flex:.7 1 0;min-width:0;overflow:hidden}.live-dock .instrument-footer>span:last-child{text-align:right;flex-grow:1.3;justify-content:flex-end}.live-dock .piano-range-controls{flex:0 0 202px}.piano-range-controls output.metadata-row{justify-content:center;align-items:center;gap:8px;display:inline-flex}.piano-range-controls output small{color:var(--ink-muted);font-size:7px}.mode-button:disabled{cursor:not-allowed;opacity:.48;transform:none}.observe-workspace{grid-template-columns:minmax(0,1fr);height:calc(100vh - 64px);min-height:0;display:grid}.observe-workspace .harmony-summary{grid-template-columns:1fr;min-height:112px}.live-readout{border-bottom:1px solid var(--ink);min-width:0}.live-readout .harmony-summary{border-bottom:0}.study-workspace .live-readout:has(.recording-display) .harmony-summary{min-height:110px}.observe-workspace .live-readout{justify-content:space-between;align-items:center;gap:24px;display:flex}.observe-workspace .harmony-summary{flex:1;min-width:0}.recording-display{border:1px solid var(--hairline);background:var(--paper);font-variant-numeric:tabular-nums;align-items:stretch;width:fit-content;max-width:calc(100% - 40px);margin:0 20px 14px;display:flex}.observe-workspace .recording-display{flex:none;margin:0 20px 0 0}.recording-display>div{border-right:1px solid var(--hairline);align-content:start;gap:5px;min-width:66px;padding:9px 12px;display:grid}.recording-display>div:last-child{border-right:0}.recording-display span{color:var(--ink-muted);letter-spacing:.08em;font-size:7px}.recording-display strong,.recording-time button{font:inherit;white-space:nowrap;font-size:19px;font-weight:500;line-height:1}.recording-display .recording-time{min-width:88px}.recording-time button{text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.recording-time button:hover,.recording-display[data-recording] .recording-time{color:var(--performance)}.recording-display[data-recording] .recording-time span{color:inherit}.recording-download{cursor:pointer;background:0 0;border:0;place-items:center;min-width:40px;padding:8px;display:grid}.recording-download svg{width:18px;height:18px}.recording-download:hover{color:var(--performance);background:var(--paper-raised)}.take-analysis{margin-top:12px;font-size:10px}.take-analysis summary{cursor:pointer;color:var(--ink-muted);padding:6px 0}.take-analysis ol{max-height:180px;margin:8px 0 0;padding:0;list-style:none;overflow-y:auto}.take-analysis li{gap:16px;padding:5px 0;display:flex}.take-analysis li>span{color:var(--ink-muted);font-variant-numeric:tabular-nums}.take-analysis li strong{color:var(--performance);font-weight:500}.take-analysis small{margin-left:6px;font-size:8px}.take-progression{border-top:1px solid var(--hairline);margin-top:10px;padding-top:10px}.take-progression p{color:var(--ink-muted);margin:4px 0 0;line-height:1.6}@media (width<=1240px){.score-actions>span{display:none}}@media print{body,.app-shell{height:auto;overflow:visible}.study-workspace{height:auto;display:block}.score-pane .lead-sheet{overflow:visible}.live-dock,.workspace-splitter-slot{display:none}}:root{--reference:#2f6f8f}.score-measure .score-harmony{top:43px}.score-measure .score-played{height:15px;color:var(--performance);font-size:11px;position:absolute;top:27px;left:12px;right:12px}.score-played>span{text-overflow:ellipsis;white-space:nowrap;padding-right:5px;position:absolute;overflow:hidden}.score-played small{margin-left:5px;font-size:8px}.score-measure[data-section] .score-played{left:48px}.score-measure .attribute-change{bottom:2px;left:auto;right:8px}.score-measure .staff{height:31px;bottom:4px}.harmony-reading:has(>span+strong):last-of-type strong{color:var(--performance)}.piano-key[data-reference]{box-shadow:inset 0 -5px var(--reference)}.piano-key[data-reference]:not([data-active]){background:color-mix(in srgb, var(--reference) 30%, var(--paper-raised))}.black-key[data-reference]:not([data-active]){background:#315568}.reference-stream{pointer-events:none;position:absolute;inset:0;overflow:hidden}.reference-note{width:var(--note-width);background:var(--reference);opacity:.42;border:1px solid var(--reference);min-height:4px;position:absolute;transform:translate(-50%)}.reference-note[data-sounding]{opacity:.8}.note-stream{z-index:2}.take-controls{align-items:center;display:flex}.take-trigger{position:relative}.take-trigger svg{width:18px;height:18px}.take-trigger[data-attached]{color:var(--reference)}.take-trigger>i{background:var(--reference);border-radius:50%;width:4px;height:4px;position:absolute;top:5px;right:5px}.take-popover-positioner{z-index:80}.take-popover,.take-import-dialog{background:var(--paper-raised);color:var(--ink);border:1px solid var(--hairline);box-shadow:0 12px 36px var(--shadow);width:min(340px,100vw - 32px);padding:20px}.take-import-viewport{padding:16px}.take-import-dialog{width:min(420px,100vw - 32px);max-height:calc(100dvh - 32px);overflow-y:auto}.take-popover{max-height:calc(100dvh - 100px);overflow-y:auto}.take-popover .panel-heading,.take-import-dialog .panel-heading{margin-bottom:16px}.take-popover h2,.take-import-dialog h2{margin:0;font-size:16px;font-weight:500}.take-metadata{min-width:0}.reference-name{color:var(--reference);overflow-wrap:anywhere;font-size:13px;font-weight:500;display:block}.take-filename{color:var(--ink-muted);overflow-wrap:anywhere;margin-top:4px;font-size:10px;display:block}.take-metadata dl{grid-template-columns:max-content minmax(0,1fr);gap:9px 18px;margin:18px 0 0;font-size:11px;line-height:1.4;display:grid}.take-metadata dt{color:var(--ink-muted)}.take-metadata dd{text-align:right;overflow-wrap:anywhere;margin:0}.take-hover{width:270px;padding:5px}.tooltip:has(.take-hover){background:var(--paper-raised);max-width:min(310px,100vw - 32px);color:var(--ink);border-color:var(--hairline);box-shadow:0 4px 12px var(--shadow)}.reference-position{gap:6px;margin:18px 0 10px;display:grid}.reference-position input{width:100%;accent-color:var(--reference);margin:0}.reference-position>span{text-align:right;color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:10px}.take-menu-actions{flex-direction:column;align-items:stretch;display:flex}.take-menu-actions button,.take-import-link{text-align:left;font:inherit;cursor:pointer;background:0 0;border:0;padding:10px 0;font-size:11px}.take-menu-actions button:hover,.take-import-link:hover{color:var(--reference)}.take-popover button:disabled{opacity:.4;cursor:default}.take-import-link{border-top:1px solid var(--hairline);align-items:center;gap:8px;width:100%;margin-top:10px;padding-top:16px;display:flex}.take-import-link svg{width:15px;height:15px}.take-recording-actions{border-top:1px solid var(--hairline);margin-top:14px;padding-top:16px}.take-loaded-recording>.eyebrow{color:var(--reference);margin:0 0 10px;display:block}.take-loaded-recording[data-after-recording]{border-top:1px solid var(--hairline);margin-top:14px;padding-top:16px}.take-empty{color:var(--ink-muted);margin:8px 0 18px;font-size:11px;line-height:1.6}.take-import-options{border-top:1px solid var(--hairline);margin:22px 0;padding-top:10px}.take-import-options label{cursor:pointer;grid-template-columns:16px 1fr auto;align-items:center;gap:9px;padding:10px 0;font-size:11px;display:grid}.take-import-options input{accent-color:var(--reference);margin:0}.take-import-options small{color:var(--ink-muted);text-align:right;max-width:130px;font-size:10px}.take-import-options p{color:var(--ink-muted);font-size:11px;line-height:1.5}.take-dialog-actions .secondary-action{border:0;width:auto;margin-top:0;padding:10px 0}.take-dialog-actions>button{white-space:nowrap;flex:none}.take-dialog-actions{justify-content:flex-end;align-items:center;gap:20px;display:flex}.take-apply{background:var(--ink);color:var(--paper-raised);font:inherit;cursor:pointer;border:0;padding:11px 16px;font-size:11px}.take-apply:hover{background:var(--reference)}.take-drop-overlay{z-index:100;border:1px dashed var(--reference);background:color-mix(in srgb, var(--paper) 90%, transparent);color:var(--reference);pointer-events:none;place-items:center;font-size:18px;display:grid;position:fixed;inset:10px}.performance-legend{gap:12px;font-size:9px;display:inline-flex}.performance-legend span:first-child{color:var(--performance)}.performance-legend span:last-child{color:var(--reference)}.score-measure .score-reference{color:var(--reference);top:12px}.app-shell{flex-direction:column;display:flex}.app-shell>.topbar{flex-shrink:0}.app-shell>.study-workspace,.app-shell>.observe-workspace{flex:1;height:auto}@media (width<=700px){.score-played small{display:none}.score-measure .score-played{font-size:9px}}@media (prefers-reduced-motion:reduce){.reference-note:not([data-sounding]){visibility:hidden}}.chart-controls{grid-column:1/-1;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.advancement-controls{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.chart-tools{flex-shrink:0;align-items:center;gap:6px;display:flex}.chart-tools>.icon-button{width:32px;min-width:32px;height:32px;padding:0}.advancement-controls>span{color:var(--ink-muted);letter-spacing:.08em;margin-right:4px;font-size:8px}.advancement-controls>button{color:var(--ink-muted);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;padding:6px 8px;font-size:10px}.advancement-controls>button[aria-pressed=true]{color:var(--ink);border-color:var(--hairline);background:var(--paper)}.advancement-controls>button:hover{color:var(--ink)}.advancement-controls>button:disabled{cursor:default;opacity:.55}.advancement-controls label{color:var(--ink-muted);align-items:center;gap:4px;margin-left:auto;font-size:8px;display:flex}.advancement-controls select{color:var(--ink);font:inherit;background:0 0;border:0;padding:4px}.score-pane .advancement-hint{grid-column:1/-1;margin:5px 0 0;font-size:8px;line-height:1.6}.score-measure{padding:0}.score-measure-select{cursor:pointer;background:0 0;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.score-measure>span{pointer-events:none}.score-measure .score-chord{z-index:4;pointer-events:auto;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;padding:2px 4px}.score-chord:hover{background:var(--paper-raised)}.score-chord[aria-current=step]{color:var(--performance);border-bottom-color:var(--performance)}.score-chord[aria-pressed=true]{background:var(--paper-raised)}.score-measure:has(.score-measure-select:focus-visible){outline:2px solid var(--performance);outline-offset:-2px}.topbar{grid-template-columns:minmax(150px,1fr) auto minmax(330px,2fr)}.topbar .mode-button{min-width:92px;padding:0 12px}.topbar .recording-display{flex:none;max-width:none;height:40px;margin:0 5px}.topbar .recording-display .recording-time{gap:3px;min-width:64px;padding:5px 8px}.topbar .recording-display strong,.topbar .recording-time button{font-size:14px}.topbar .recording-download{gap:5px;padding:0 8px;display:flex}.topbar .recording-download span{color:var(--ink);letter-spacing:0;font-size:9px}.topbar .recording-download svg{width:14px;height:14px}.take-trigger{gap:5px;width:auto;padding:0 8px;display:flex}.take-trigger span{font-size:9px}.take-save-hint{color:var(--ink-muted);font-size:10px;line-height:1.6}.score-pane .score-page-header{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:0 12px;display:grid}.score-page-header>.score-actions{grid-area:1/2}.score-page-header>.chart-controls{grid-row:2}.score-page-header>.advancement-hint{grid-row:3}.header-transport-button.transport-record small{white-space:nowrap;font-size:8px}.header-transport{flex-shrink:0;grid-template-columns:42px minmax(100px,max-content)}.top-actions{gap:6px}.score-title-meta{flex-wrap:wrap;row-gap:6px}.material-pane{padding:30px;display:block;overflow-y:auto}.material-pane .score-page-header{padding:0 0 22px;display:block}.material-pane .score-page-header p,.source-welcome p{color:var(--ink-muted);font-size:12px;line-height:1.7}.source-welcome{margin:10px 0 30px}.source-welcome h1{letter-spacing:-1.6px;margin:12px 0;font-size:clamp(26px,2.5vw,38px);font-weight:500}.source-picker-content{gap:14px;display:grid}.source-search-label{font-size:12px;font-weight:600}.source-search-row{align-items:stretch;gap:8px;display:flex}.source-search-row input{border:1px solid var(--rule);width:100%;min-width:0;color:var(--ink);background:var(--paper-raised);border-radius:3px;padding:14px 12px;font-size:12px}.source-search-row input::placeholder{color:var(--ink-muted)}.source-search-results:empty{display:none}.source-result{border:0;border-bottom:1px solid var(--hairline);cursor:pointer;text-align:left;background:0 0;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:12px;font-size:11px;display:flex}.source-result>span:first-child{gap:5px;display:grid}.source-result small,.source-result>span:last-child{color:var(--ink-muted)}.source-result[aria-selected=true],.source-result:hover{background:var(--paper-deep)}.source-suggestions{color:var(--ink-muted);flex-wrap:wrap;align-items:center;gap:8px;font-size:10px;display:flex}.source-suggestions button{border:1px solid var(--hairline);cursor:pointer;background:0 0;border-radius:3px;padding:6px 8px;font-size:10px}.source-file-drop{border:1px dashed var(--rule);background:var(--paper-raised);cursor:pointer;text-align:center;border-radius:4px;flex-direction:column;align-items:center;gap:10px;margin-top:10px;padding:28px 16px;display:flex;position:relative}.source-file-drop strong{font-size:14px;font-weight:500}.source-file-drop>span:not(.secondary-action){color:var(--ink-muted);font-size:10px}.source-file-drop input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.source-file-drop:focus-within{box-shadow:var(--focus)}.source-privacy,.source-attribution,.source-picker-content>p{color:var(--ink-muted);margin:0;font-size:10px;line-height:1.7}.source-attribution{text-underline-offset:3px;margin-top:10px}.source-recent{border-top:1px solid var(--hairline);padding-top:16px}.source-recent h3{margin:0 0 8px;font-size:11px;font-weight:500}.source-recent button{text-align:left;border:0;border-bottom:1px solid var(--hairline);cursor:pointer;background:0 0;gap:5px;width:100%;padding:10px 0;font-size:12px;display:grid}.source-recent small{color:var(--ink-muted);font-size:10px}.source-picker-dialog{border:1px solid var(--rule);background:var(--paper);border-radius:6px;width:min(680px,100vw - 48px);max-height:calc(100vh - 70px);padding:28px;overflow:auto;box-shadow:0 18px 70px #17171430}.source-picker-dialog .panel-heading{margin-bottom:25px}.source-picker-dialog h2{margin:0 0 8px;font-size:20px;font-weight:500}.source-picker-dialog .panel-heading p{color:var(--ink-muted);margin:0;font-size:11px}.source-error{font-size:12px;line-height:1.6;color:#a3311b!important}.workspace-error{border-top:1px solid var(--hairline);background:var(--paper-raised);color:#a3311b;padding:12px 30px;font-size:11px}.workspace-error button{cursor:pointer;background:0 0;border:0;margin-left:12px;text-decoration:underline}.workspace-header{grid-template-columns:minmax(150px,1fr) auto auto;align-items:center;gap:16px}.workspace-header .secondary-action{white-space:nowrap;width:auto;min-height:36px;margin:0}.workspace-header .top-actions{gap:10px}.workspace-header .recording-display{min-width:145px}.workspace-header .recording-download:disabled{opacity:.4;cursor:default}.saved-takes{font-size:11px}.saved-takes label{align-items:center;gap:12px;display:flex}.saved-takes select{border:1px solid var(--hairline);background:var(--paper);min-width:0;font:inherit;flex:1;padding:7px}.saved-takes p{color:var(--ink-muted);font-size:10px;line-height:1.6}.backing-player-host video,.backing-player-host iframe{aspect-ratio:16/9;background:#181816;border:0;border-radius:3px;width:100%;height:auto;display:block}.backing-player-host audio{width:100%;margin:12px 0;display:block}.media-transport{flex-wrap:wrap;align-items:center;gap:12px;padding:18px 0;font-size:11px;display:flex}.media-transport output{font-variant-numeric:tabular-nums;margin-right:auto}.media-transport button,.media-timeline-heading button{border:1px solid var(--hairline);cursor:pointer;background:0 0;border-radius:3px;padding:6px 8px;font-size:10px}.media-transport select,.media-timeline select{font:inherit;color:var(--ink);border:1px solid var(--hairline);background:var(--paper-raised);border-radius:3px;padding:5px}.media-timeline{border-top:1px solid var(--rule);margin-top:8px;padding-top:16px}.media-timeline-heading{align-items:center;gap:9px;font-size:10px;display:flex}.media-timeline-heading strong{margin-right:auto;font-size:12px;font-weight:500}.media-timeline-heading>span{color:var(--ink-muted)}.media-chord-lane{background:var(--paper-raised);border:1px solid var(--hairline);height:105px;margin-top:18px;position:relative;overflow:hidden}.media-tick{border-left:1px solid var(--hairline);color:var(--ink-muted);padding:6px;font-size:9px;position:absolute;top:0;bottom:0}.media-chord{color:#9f321d;text-align:left;cursor:pointer;white-space:nowrap;background:#e44d2e20;border:1px solid #e44d2e80;border-radius:3px;min-width:3px;height:47px;padding:6px;font-size:12px;position:absolute;top:36px;overflow:hidden}.media-playhead{background:var(--performance);pointer-events:none;width:1px;position:absolute;top:0;bottom:0}.media-chord-lane>p{text-align:center;width:100%;color:var(--ink-muted);margin:0;font-size:10px;position:absolute;top:45px}.media-timeline input[type=range],.free-take-review input[type=range]{width:100%;accent-color:var(--performance);margin:12px 0}.media-timeline-detail{min-height:30px;color:var(--ink-muted);font-size:10px;line-height:1.6}.free-take-review{border-top:1px solid var(--hairline);margin-top:20px;padding-top:18px;font-size:12px}.free-take-review p,.material-pane>p{color:var(--ink-muted);font-size:10px;line-height:1.7}select:focus-visible{box-shadow:var(--focus);outline:none}.app-error{max-width:640px;margin:15vh auto;padding:24px}.app-error p{margin:20px 0}.app-error a{margin-left:16px}:root{--partner:#24765b}.duet-trigger{border:1px solid var(--hairline);font:inherit;white-space:nowrap;color:var(--ink);background:0 0;align-items:center;gap:6px;padding:8px 10px;font-size:10px;display:inline-flex}.duet-trigger[data-connected]{color:var(--partner);border-color:var(--partner)}.duet-dialog{background:var(--paper);border:1px solid var(--hairline);width:min(460px,100vw - 32px);max-height:calc(100dvh - 48px);padding:24px;font-size:12px;overflow:auto;box-shadow:0 20px 70px #0002}.duet-dialog p{line-height:1.6}.duet-dialog .panel-heading{margin-bottom:14px}.duet-dialog h2{font-size:16px}.duet-status{color:var(--partner);font-weight:600}.duet-primary{background:var(--partner);color:#fff;width:100%;font:inherit;border:0;padding:12px}.duet-dialog button:disabled{opacity:.45;cursor:wait}.duet-join-label,.duet-invite label{margin:20px 0 8px;display:block}.duet-dialog input[type=url],.duet-invite input{box-sizing:border-box;border:1px solid var(--hairline);background:var(--paper-raised);width:100%;color:var(--ink);font:inherit;padding:10px;font-size:11px}.duet-dialog form .secondary-action,.duet-invite button{margin-top:8px}.duet-sound{grid-template-columns:1fr auto;align-items:center;gap:12px;margin:22px 0;display:grid}.duet-sound>label:last-of-type,.duet-sound>small{grid-column:1/-1}.duet-sound input[type=range]{width:130px;accent-color:var(--partner)}.duet-sound input[type=checkbox]{accent-color:var(--partner)}.duet-fine,.duet-sound small,.duet-credit{color:var(--ink-muted);font-size:10px;line-height:1.6}.duet-actions{justify-content:space-between;gap:12px;margin:20px 0 14px;display:flex}.duet-network{font-variant-numeric:tabular-nums}.duet-legend{gap:16px;margin:4px 0 8px;font-size:9px;display:flex}.duet-legend>span{align-items:center;gap:6px;display:inline-flex}.duet-legend-swatch{background:var(--performance);flex:none;width:8px;height:8px}.duet-legend-swatch[data-layer=partner]{background:var(--partner)}.duet-legend-swatch[data-layer=reference]{background:var(--reference)}.partner-key-mark{background:var(--partner);pointer-events:none;border:1px solid #fff9;height:8px;position:absolute;top:2px;left:2px;right:2px}.piano-key[data-partner]:not([data-active]):not([data-reference]){background:color-mix(in srgb, var(--partner) 35%, var(--paper-raised))}.black-key[data-partner]:not([data-active]):not([data-reference]){background:#245c4b}.duet-sound>button:first-child{grid-column:1/-1;justify-self:start}.roll-note.live[data-player=partner]{--played-colour:var(--partner)}.piano-roll[data-duet] .roll-note.live{width:calc(var(--note-width) / 2)}.piano-roll[data-duet] .roll-note.live[data-player=partner]{left:var(--x)}.piano-roll[data-duet] .roll-note.live[data-edge=low]{left:0}.piano-roll[data-duet] .roll-note.live[data-player=partner][data-edge=low]{left:calc(var(--note-width) / 2)}.piano-roll[data-duet] .roll-note.live[data-edge=high]{left:calc(100% - var(--note-width));right:auto}.piano-roll[data-duet] .roll-note.live[data-player=partner][data-edge=high]{left:calc(100% - var(--note-width) / 2)}
