*{box-sizing:border-box;margin:0;padding:0}body{color:#d0d0d0;background:#0d0d0d;flex-direction:column;height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;display:flex;overflow:hidden}#top-bar{background:#161616;border-bottom:1px solid #2a2a2a;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:16px;padding:10px 20px;display:flex}#top-bar h1{color:#fff;white-space:nowrap;margin-right:8px;font-size:18px;font-weight:600}#midi-status{color:#666;white-space:nowrap;font-size:13px}#midi-status.connected{color:#6ec77a}#main{flex:1;min-height:0;display:flex}#left-panel{background:#141414;border-right:1px solid #2a2a2a;flex-direction:column;flex-shrink:0;width:280px;display:flex;overflow-y:auto}.panel-section{border-bottom:1px solid #222;padding:14px 16px}.panel-section h3{text-transform:uppercase;letter-spacing:1px;color:#666;margin-bottom:10px;font-size:12px;font-weight:500}#drop-zone{text-align:center;cursor:pointer;border:1px dashed #333;border-radius:6px;padding:10px;transition:border-color .2s,background .2s}#drop-zone:hover,#drop-zone.drag-over{background:#ffffff05;border-color:#666}#drop-zone p{color:#555;font-size:12px}#drop-zone p.label{color:#666}#file-input{display:none}#panel-footer{margin-top:auto}#kbd-section summary{text-transform:uppercase;letter-spacing:1px;color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:11px;list-style:none}#kbd-section summary::-webkit-details-marker{display:none}#kbd-section summary:before{content:"▸";margin-right:6px;transition:transform .15s;display:inline-block}#kbd-section details[open] summary:before{transform:rotate(90deg)}#kbd-section summary:hover{color:#888}#kbd-section p{color:#555;margin-top:10px;font-size:11px;line-height:1.6}#kbd-section b{color:#999;font-weight:500}#kbd-octave{color:#d4aa40}#site-nav{border-bottom:1px solid #222;flex-direction:column;gap:8px;display:flex}#site-nav a{color:#777;font-size:12px;text-decoration:none;transition:color .15s}#site-nav a:hover{color:#d4aa40}#credits-section{border-bottom:none}#credits-section summary{text-transform:uppercase;letter-spacing:1px;color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:11px;list-style:none}#credits-section summary::-webkit-details-marker{display:none}#credits-section summary:before{content:"▸";margin-right:6px;transition:transform .15s;display:inline-block}#credits-section details[open] summary:before{transform:rotate(90deg)}#credits-section summary:hover{color:#888}#credits-section p{color:#555;margin:10px 0 8px;font-size:11px;line-height:1.5}#credits-section ul{flex-direction:column;gap:6px;list-style:none;display:flex}#credits-section li{color:#555;font-size:11px;line-height:1.4}#credits-section a{color:#777;border-bottom:1px solid #333;text-decoration:none}#credits-section a:hover{color:#d4aa40;border-bottom-color:#d4aa40}#filter-bar{align-items:center;gap:6px;margin-bottom:8px;display:flex}#fav-filter{color:#555;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:26px;padding:0;font-size:14px;transition:all .15s;display:flex}#fav-filter:hover{color:#d4aa40;border-color:#d4aa40}#fav-filter.active{color:#d4aa40;background:#d4aa401a;border-color:#d4aa40}#level-filters{flex:1;gap:2px;display:flex}.level-chip{color:#666;cursor:pointer;white-space:nowrap;text-align:center;background:0 0;border:1px solid #333;border-radius:4px;flex:1;padding:4px 2px;font-size:11px;transition:all .15s}.level-chip.active{color:#e0e0e0;background:#ffffff0f;border-color:#888}.level-chip:hover{border-color:#666}#genre-filters{gap:2px;margin-bottom:8px;display:flex}.genre-chip{color:#666;cursor:pointer;white-space:nowrap;text-align:center;background:0 0;border:1px solid #333;border-radius:4px;flex:1;padding:4px 2px;font-size:11px;transition:all .15s}.genre-chip.active{color:#e0e0e0;background:#ffffff0f;border-color:#888}.genre-chip:hover{border-color:#666}#search-row{gap:4px;margin-bottom:8px;display:flex}#song-search{color:#d0d0d0;background:#0d0d0d;border:1px solid #333;border-radius:4px;outline:none;flex:1;min-width:0;padding:5px 8px;font-size:12px}#song-search:focus{border-color:#888}#composer-select{color:#d0d0d0;cursor:pointer;appearance:none;background:#0d0d0d url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%23666'/%3E%3C/svg%3E") right 6px center no-repeat;border:1px solid #333;border-radius:4px;outline:none;flex-shrink:0;width:110px;padding:5px 18px 5px 4px;font-size:11px}#composer-select:focus{border-color:#888}#preloaded-list{max-height:300px;list-style:none;overflow-y:auto}#preloaded-list li{cursor:pointer;border-radius:4px;align-items:center;gap:4px;padding:6px 8px;font-size:13px;transition:background .15s;display:flex}#preloaded-list li:hover{background:#ffffff0d}#preloaded-list li.active{color:#fff;background:#ffffff14}.song-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.preview-btn{color:#666;cursor:pointer;background:#ffffff0a;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;font-size:10px;transition:all .15s;display:flex}.preview-btn:hover{color:#ccc;background:#ffffff1a}.preview-btn.playing{color:#f06060;background:#ff646426}.fav-btn{color:#444;cursor:pointer;background:0 0;border:none;flex-shrink:0;width:24px;height:24px;padding:0;font-size:14px;line-height:1}.fav-btn:hover,.fav-btn.fav{color:#d4aa40}#track-section{display:none}#track-list{list-style:none}#track-list li{cursor:pointer;border-radius:4px;justify-content:space-between;align-items:center;padding:6px 8px;font-size:13px;transition:background .15s;display:flex}#track-list li:hover{background:#ffffff0d}#track-list li.selected{background:#ffffff14}#track-list li .note-count{color:#555;font-size:11px}#canvas-wrapper{flex:1;min-height:0;position:relative}#hand-controls{z-index:10;gap:4px;display:flex;position:absolute;top:10px;right:10px}.hand-btn{color:#888;cursor:pointer;background:#0009;border:1px solid #ffffff26;border-radius:4px;padding:5px 12px;font-size:12px;transition:all .15s}.hand-btn.active{color:#e0e0e0;background:#ffffff1a;border-color:#fff6}.hand-btn:hover{border-color:#ffffff4d}#top-bar-spacer{flex:1}#progress-bar-container{z-index:10;background:#ffffff0d;height:4px;position:absolute;top:0;left:0;right:0}#progress-bar{background:#6ec77a;width:0%;height:100%;transition:width .15s}#progress-text{color:#777;white-space:nowrap;font-size:13px}#expected-note{color:#e0e0e0;white-space:nowrap;font-size:14px;font-weight:600}#hand-indicator{color:#c07060;white-space:nowrap;font-size:13px}#playback-controls{gap:2px;display:flex}#playback-controls button{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;justify-content:center;align-items:center;width:32px;height:26px;font-size:10px;transition:all .15s;display:flex}#playback-controls button:hover{color:#ddd;background:#ffffff0d;border-color:#666}#playback-controls button.active{color:#6ec77a;background:#6ec77a1a;border-color:#6ec77a}#speed-control{align-items:center;gap:2px;display:flex}#speed-control button{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:3px;justify-content:center;align-items:center;width:22px;height:22px;padding:0;font-size:12px;transition:all .15s;display:flex}#speed-control button:hover{color:#ddd;border-color:#666}#speed-display{color:#aaa;text-align:center;font-variant-numeric:tabular-nums;min-width:28px;font-size:11px}#bpm-control{align-items:center;gap:2px;display:flex}#bpm-control button{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:3px;justify-content:center;align-items:center;width:22px;height:22px;padding:0;font-size:12px;transition:all .15s;display:flex}#bpm-control button:hover{color:#ddd;border-color:#666}#bpm-display{color:#aaa;text-align:center;font-variant-numeric:tabular-nums;min-width:24px;font-size:11px}#bpm-display:after{content:"bpm";color:#666;margin-left:2px;font-size:9px}#metronome-btn{color:#666;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;justify-content:center;align-items:center;width:28px;height:26px;padding:0;font-size:13px;transition:all .15s;display:flex}#metronome-btn:hover{color:#ddd;border-color:#666}#metronome-btn.active{color:#6ec77a;background:#6ec77a1a;border-color:#6ec77a}#reset-btn{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;padding:4px 12px;font-size:12px;transition:all .15s}#reset-btn:hover{color:#ddd;background:#ffffff0d;border-color:#666}#hint-btn{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;padding:4px 12px;font-size:12px;transition:all .15s}#hint-btn:hover{color:#ddd;background:#ffffff0d;border-color:#666}#hint-btn.active{color:#c0a040;background:#c0a0401a;border-color:#c0a040}#piano-area{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}#timeline{z-index:10;cursor:ns-resize;background:#0006;border-right:1px solid #222;width:20px;position:absolute;top:4px;bottom:0;left:0}#timeline:hover{background:#ffffff08}#note-canvas{background:#0a0a0a;border-bottom:1px solid #222;width:100%;height:100%;display:block}#piano-container{background:#0a0a0a;flex-shrink:0;height:160px;position:relative;overflow:hidden}#piano-svg{touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%}#panel-toggle{color:#888;cursor:pointer;background:0 0;border:1px solid #333;border-radius:4px;flex-shrink:0;width:32px;height:30px;padding:0;font-size:15px;display:none}#panel-toggle:hover{color:#e0e0e0;border-color:#666}#panel-backdrop{z-index:40;background:#0009;display:none;position:fixed;inset:0}@media (width<=768px){#panel-toggle{display:block}#top-bar{gap:10px;padding:8px 12px}#top-bar h1{margin-right:0;font-size:15px}#midi-status,#progress-text{display:none}#left-panel{z-index:50;width:82vw;max-width:320px;transition:transform .2s;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%)}#left-panel.open{transform:none}#panel-backdrop.show{display:block}#piano-container{height:110px}#hand-controls{top:6px;right:6px}.hand-btn{padding:4px 9px;font-size:11px}}#completed-overlay{z-index:100;background:#000c;justify-content:center;align-items:center;display:none;position:fixed;inset:0}#completed-overlay.show{display:flex}#completed-box{text-align:center;background:#1a1a1a;border:1px solid #333;border-radius:12px;padding:40px}#completed-box h2{color:#6ec77a;margin-bottom:12px}#completed-box button{color:#ccc;cursor:pointer;background:0 0;border:1px solid #444;border-radius:6px;margin-top:16px;padding:10px 24px;font-size:14px}
