:root{--bg: #dfe2e4;--paper: #ffffff;--ink: #252a2e;--muted: #626b72;--line: #cdd2d6;--chrome: #f4f5f6;--accent: #275f98;--accent-soft: #e3edf7;--danger: #ad3935;--ok: #397451;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--serif: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:13px;line-height:1.45}button,input,select{font:inherit}button,select,input[type=checkbox]{accent-color:var(--accent)}button:focus-visible,select:focus-visible,summary:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}kbd{font-family:var(--mono);font-size:.9em}.app{display:grid;grid-template-rows:auto 1fr;height:100vh;height:100dvh}header.topbar{display:flex;align-items:center;gap:6px;min-height:54px;padding:10px 16px;background:var(--chrome);border-bottom:1px solid var(--line)}.brand{min-width:70px;margin-right:auto}.brand h1{font-size:17px;font-weight:650;margin:0;letter-spacing:-.4px}.brand p{display:none}.topbar #undo,.topbar .zoom,.topbar .menu{margin-left:10px}.topbar .btn{white-space:nowrap}.btn{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:3px;min-height:30px;padding:5px 10px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;justify-content:center}.btn:hover{border-color:#a8b0b7;background:#e9ecef}.btn:disabled{opacity:.45;cursor:default}.btn.primary{border-color:#a9b9c9;color:var(--accent)}.btn.primary:hover{background:var(--accent-soft)}.btn.listening{background:#f9e7e5;border-color:var(--danger);color:var(--danger)}.btn .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.menu{position:relative}.menu-list{position:absolute;right:0;top:calc(100% + 4px);background:var(--paper);border:1px solid var(--line);border-radius:3px;box-shadow:0 4px 14px #19232d26;display:none;flex-direction:column;min-width:210px;z-index:10;padding:4px}.menu.open .menu-list{display:flex}.menu-list button{text-align:left;color:var(--ink);border:0;background:none;padding:7px 10px;cursor:pointer;border-radius:2px}.menu-list button:hover{background:var(--accent-soft)}.menu-list button[data-action=json],.menu-list button[data-action=load],.menu-list button[data-action=demo]{border-top:1px solid var(--line);margin-top:4px;padding-top:10px}main.workspace{display:grid;grid-template-columns:minmax(0,1fr) 330px;min-height:0}.score-wrap{overflow:auto;min-width:0;padding:0 28px 24px;scrollbar-gutter:stable}.score-sheet{background:var(--paper);border:1px solid #c1c6ca;border-radius:0;box-shadow:0 2px 5px #1e28321f;margin:0 auto;max-width:1100px;min-height:max(560px,calc(100dvh - 175px));padding:8px}.score-sheet svg{display:block;width:100%;height:auto}aside.panel{border-left:1px solid var(--line);background:#fafbfc;display:flex;flex-direction:column;min-height:0;overflow:auto;overscroll-behavior:contain}.panel section{padding:12px 14px;border-bottom:1px solid var(--line);flex-shrink:0;min-width:0}.panel h2{font-size:12px;font-weight:650;color:var(--ink);margin:0 0 9px}.status-grid{display:grid;grid-template-columns:90px minmax(0,1fr);gap:5px 12px;font-size:12px;font-variant-numeric:tabular-nums}.status-grid .k{color:var(--muted)}.status-grid .v{font-weight:500;overflow-wrap:anywhere}.parts{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.parts .part{padding:8px;border:1px solid var(--line);border-radius:3px;background:var(--paper)}.parts .part.current{border-left:3px solid var(--accent);padding-left:6px}.parts .part-name{display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:600;font-size:12px;margin-bottom:6px}.parts .staff-row{display:flex;align-items:center;gap:4px}.parts .staff-label{width:26px;font-size:11px;color:var(--muted)}.voice-btn{width:28px;height:26px;border:1px solid var(--line);border-radius:3px;background:var(--chrome);color:var(--muted);font:inherit;font-size:12px;cursor:pointer}.voice-btn:hover{border-color:var(--accent)}.voice-btn.used{color:inherit;font-weight:700}.voice-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.part-row{display:flex;gap:6px;margin-bottom:6px}.part-row select{flex:1;min-width:0;padding:5px 8px;border:1px solid #b9c1c8;border-radius:3px;background:var(--paper);color:var(--ink)}.check{display:flex;align-items:center;gap:6px;font-size:13px;margin-bottom:4px}.interim{min-height:22px;color:var(--muted);font-size:12px;line-height:1.6}.interim.live{color:var(--ink)}.command-form{display:flex;gap:6px}.command-form input{flex:1;min-width:0;padding:7px 8px;border:1px solid #b9c1c8;border-radius:3px;background:var(--paper)}.command-form input:focus{outline:2px solid var(--accent-soft);outline-offset:0;border-color:var(--accent)}.command-form .btn{color:var(--accent);background:var(--accent-soft);border-color:#b6c9dc}.log{display:flex;flex-direction:column;gap:10px;max-height:180px;overflow:auto;overflow-wrap:anywhere}.log-entry{border-left:2px solid var(--line);padding:1px 8px}.log-entry .said{font-size:12px;font-weight:500}.log-entry .heard{color:var(--muted);font-size:11px;margin-top:3px}.log-entry .warn{color:var(--danger);font-size:12px}.log-entry.ok{border-color:var(--ok)}.log-entry.warn{border-color:var(--danger)}.panel summary{cursor:pointer;font-size:12px;font-weight:500;padding:7px 0}.panel summary:hover{color:var(--accent)}.help details{border-top:1px solid var(--line)}.help table{width:100%;border-collapse:collapse;font-size:12px}.help tr{display:grid;gap:3px;padding:8px 0;border-top:1px solid #e3e6e9}.help td{padding:0;color:var(--muted)}.help td:first-child{font-family:var(--mono);color:var(--ink);overflow-wrap:anywhere}.help kbd{background:#e9ecef;padding:1px 4px;border-radius:2px}.rules label{display:flex;gap:8px;align-items:flex-start;margin-bottom:12px;font-size:12px;cursor:pointer}.rules label input{flex-shrink:0;margin:3px 0 0}.rules .cite{display:inline-block;color:var(--muted);font-size:11px;line-height:1.5;margin-top:3px}.rules ul{padding-left:18px;color:var(--muted);font-size:12px}.rules li+li{margin-top:8px}.warnings{color:var(--danger);font-size:12px;margin-top:6px}.warnings:empty,.hint:empty{display:none}.badge{display:inline-block;font-size:10px;padding:1px 4px;border-radius:2px;background:var(--accent-soft);color:var(--accent)}.badge.bad{background:#fdecea;color:var(--danger)}.hint{color:var(--muted);font-size:11px;line-height:1.5;margin-top:6px}.hint.alert{color:var(--danger);background:#fdecea;border:1px solid var(--danger);border-radius:6px;padding:8px 10px;font-size:12px}.score-sheet{position:relative;user-select:none;cursor:default}.marquee{position:absolute;border:1px solid var(--accent);background:#275f981f;pointer-events:none;z-index:2}.selection-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;max-width:1100px;margin:0 auto 10px;padding:8px 12px;background:var(--accent-soft);border:1px solid #b5c9dd;border-radius:3px;color:var(--accent)}.selection-bar[hidden]{display:none}.selection-bar>span:first-child{font-weight:600}.selection-bar .hint{flex:1;min-width:180px;color:#455f79;margin:0}.btn.small{padding:4px 8px;font-size:12px}.hint.center{text-align:left;max-width:1100px;margin:12px auto 0}.zoom{display:inline-flex;align-items:center;gap:2px}.zoom .btn{background:transparent;border-color:transparent;padding:4px 7px}.zoom .btn:hover{background:#e2e6e9}.zoom span{font-size:11px;font-variant-numeric:tabular-nums;color:var(--muted);min-width:40px;text-align:center}.palette{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:2px;flex-wrap:nowrap;overflow-x:auto;margin:0 -28px 24px;padding:7px 12px;background:var(--chrome);border-bottom:1px solid #bdc4ca}.palette>*{flex-shrink:0}.palette .sep{width:1px;height:24px;background:var(--line);margin:0 6px}.pal{display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;background:none;color:var(--ink);border-radius:3px;min-width:30px;height:34px;font-size:20px;line-height:1;cursor:pointer;padding:0 6px;font-family:Bravura,Noto Music,Segoe UI Symbol,serif}.pal.text{font-family:var(--sans);font-size:12px;text-transform:capitalize}.pal-select{height:30px;margin:0 2px;padding:0 6px;font-family:var(--sans);font-size:12px;color:var(--ink);border:1px solid #b9c1c8;border-radius:3px;background:var(--paper);cursor:pointer}.pal:hover{background:#e2e6e9;border-color:#c2c8ce}.pal.active,.btn.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.pal[data-duration],.pal[data-dot],.pal[data-cmd=piano]{font-size:0}.pal[data-duration]:before,.pal[data-dot]:before,.pal[data-cmd=piano]:before{content:"";width:22px;height:28px;background:currentColor;mask:var(--symbol) center / contain no-repeat}.pal[data-duration="1"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='12' cy='21' rx='6.5' ry='4' fill='none' stroke='black' stroke-width='2'/%3E%3C/svg%3E")}.pal[data-duration="2"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='9' cy='23' rx='4.8' ry='3.1' transform='rotate(-22 9 23)' fill='none' stroke='black' stroke-width='1.7'/%3E%3Cpath d='M13.5 22V3' stroke='black' stroke-width='1.5'/%3E%3C/svg%3E")}.pal[data-duration="4"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='9' cy='23' rx='5' ry='3.5' transform='rotate(-22 9 23)'/%3E%3Cpath d='M13.5 22V3' stroke='black' stroke-width='1.5'/%3E%3C/svg%3E")}.pal[data-duration="8"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='8' cy='23' rx='5' ry='3.5' transform='rotate(-22 8 23)'/%3E%3Cpath d='M12.5 22V3' stroke='black' stroke-width='1.5'/%3E%3Cpath d='M12.5 3C13 8 23 8 18 18C20 11 13 11 12.5 9Z'/%3E%3C/svg%3E")}.pal[data-duration="16"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='8' cy='23' rx='5' ry='3.5' transform='rotate(-22 8 23)'/%3E%3Cpath d='M12.5 22V2' stroke='black' stroke-width='1.5'/%3E%3Cpath d='M12.5 2C13 6 22 7 19 14C20 9 13 9 12.5 7ZM12.5 7C13 11 22 12 18 20C20 14 13 14 12.5 12Z'/%3E%3C/svg%3E")}.pal[data-duration="32"]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cellipse cx='8' cy='24' rx='5' ry='3.5' transform='rotate(-22 8 24)'/%3E%3Cpath d='M12.5 23V1' stroke='black' stroke-width='1.5'/%3E%3Cpath d='M12.5 1C13 5 22 6 19 12C20 8 13 8 12.5 6ZM12.5 6C13 10 22 11 19 17C20 13 13 13 12.5 11ZM12.5 11C13 15 22 16 18 22C20 18 13 18 12.5 16Z'/%3E%3C/svg%3E")}.pal[data-dot]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Ccircle cx='12' cy='18' r='2'/%3E%3C/svg%3E")}.pal[data-cmd=piano]{--symbol: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 30'%3E%3Cpath d='M2 7h20v16H2ZM7 7v16m5-16v16m5-16v16' fill='none' stroke='black' stroke-width='1.3'/%3E%3Cpath d='M5 7h4v9H5Zm5 0h4v9h-4Zm5 0h4v9h-4Z'/%3E%3C/svg%3E")}body.note-input .score-sheet{outline:1px solid #9bb7d2;cursor:crosshair}.playhead{position:absolute;background:#275f9829;border-radius:1px;pointer-events:none;z-index:1;transition:left .05s linear}.playhead[hidden]{display:none}.piano{max-width:1100px;margin:16px auto 0;padding:8px;background:var(--chrome);border:1px solid #bcc3c9;border-radius:3px}.piano[hidden]{display:none}.piano-keys{display:flex;height:96px;user-select:none}.key.white{position:relative;flex:1;background:#fff;border:1px solid #999;border-radius:0 0 4px 4px;cursor:pointer}.key.white:hover{background:#eef4ff}.key.white span{position:absolute;bottom:4px;left:0;right:0;text-align:center;font-size:10px;color:var(--muted)}.key.black{position:absolute;top:0;right:-30%;width:60%;height:58%;background:#222;border-radius:0 0 3px 3px;z-index:2;cursor:pointer}.key.black:hover{background:var(--accent)}@media print{header.topbar,aside.panel,.palette,.selection-bar,.hint,.piano{display:none!important}main.workspace{display:block}.score-wrap{padding:0;overflow:visible}.app{display:block;height:auto}.score-sheet{border:0;box-shadow:none;min-height:0;outline:none!important}.marquee,.playhead{display:none!important}}.scheme-row{display:flex;gap:8px;align-items:center;margin-bottom:6px}.scheme-row select{flex:1;min-width:0;padding:6px 8px;color:var(--ink);border:1px solid #b9c1c8;border-radius:3px;background:var(--paper)}.keys table{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:6px}.keys th{text-align:left;font-size:11px;font-weight:500;color:var(--muted);padding:10px 4px 5px}.keys td{padding:3px 4px;border-top:1px solid var(--line);vertical-align:middle}.keys td:last-child{text-align:right;white-space:nowrap}.keycap{font-family:var(--mono);font-size:11px;background:#f0f2f4;border:1px solid #cdd2d6;border-bottom-width:2px;border-radius:3px;padding:2px 7px;cursor:pointer;color:var(--ink)}.keycap.custom{background:var(--accent-soft);border-color:#b6c9dc;color:var(--accent)}.keycap.capturing{background:#fff2cc;border-color:#e0c060}@media screen and (max-width: 1100px){main.workspace{grid-template-columns:minmax(0,1fr) 300px}.score-wrap{padding-right:18px;padding-left:18px}.palette{margin-right:-18px;margin-left:-18px}}@media screen and (max-width: 800px){main.workspace{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(240px,1fr) minmax(180px,.75fr)}aside.panel{border-left:0;border-top:1px solid #b7bec5}.score-sheet{min-height:500px}.panel section{padding:12px 16px}}@media screen and (max-width: 640px){header.topbar{display:grid;grid-template-columns:repeat(4,auto) minmax(0,1fr);padding:8px 12px}.brand{grid-column:1 / -2}.topbar .menu{grid-column:-2 / -1;grid-row:1;justify-self:end}.topbar .zoom{grid-column:5;grid-row:2;justify-self:end}.topbar #undo,.topbar .zoom,.topbar .menu{margin-left:2px}.topbar .btn{padding-right:7px;padding-left:7px;font-size:12px}.score-wrap{padding-right:12px;padding-left:12px}.palette{margin-right:-12px;margin-left:-12px;margin-bottom:16px}.selection-bar{gap:6px;padding:8px}}@media (prefers-reduced-motion: reduce){.playhead{transition:none}}.count-in{display:inline-block;min-width:1.4em;font-size:28px;font-weight:700;font-style:normal;color:var(--accent);text-align:center;vertical-align:middle}
