*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary:#1a1a2e;--bg-secondary:#16213e;--bg-surface:#0f3460;--accent:#e94560;--accent-hover:#ff6b81;--text-primary:#eaeaea;--text-secondary:#a0a0b0;--border-color:#2a2a4a;--clr-piano:#4a9eff;--clr-organ:#4ae04a;--clr-guitar:#ff9f43;--clr-strings:#a55eea;--clr-bass:#e94560;--clr-pads:#00d2d3;color:var(--text-primary);background-color:var(--bg-primary);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}html,body,#root{width:100%;height:100%}button{cursor:pointer;font-family:inherit}input,select{font-family:inherit;font-size:inherit}*,:before,:after{-webkit-tap-highlight-color:transparent}body{overscroll-behavior:none}button,[role=button],input[type=range],select,textarea{touch-action:manipulation}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.app{flex-direction:column;width:100%;height:100dvh;display:flex;overflow:hidden}.app-header{background:var(--bg-secondary);border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;height:48px;padding:.5rem 1.25rem;display:flex}.app-header h1{color:var(--accent);letter-spacing:.02em;font-size:1.15rem;font-weight:600}.app-main{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.settings-panel{background:var(--bg-secondary);border-bottom:1px solid var(--border-color);flex-shrink:0;padding:.5rem 1.25rem}.beat-grid-area{flex:1;min-height:0;padding:1rem 1.25rem;position:relative;overflow:auto}.app-footer{background:var(--bg-secondary);border-top:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:.5rem 1.25rem;display:flex}.footer-links{align-items:center;gap:1rem;display:flex}.bpm-link{color:var(--text-secondary);font-size:.8rem;text-decoration:none}.bpm-link:hover{color:var(--accent-color);text-decoration:underline}.mail-link{color:var(--text-secondary);font-size:.8rem;text-decoration:none}.mail-link:hover{color:var(--accent-hover);text-decoration:underline}.header-actions{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.song-manager{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.song-save-group,.song-select-group{align-items:center;gap:.3rem;display:flex}.song-name-input{background:var(--bg-primary);border:1px solid var(--border-color);width:140px;color:var(--text-primary);border-radius:4px;padding:.25rem .4rem;font-size:.8rem}.song-name-input::placeholder{color:var(--text-secondary);opacity:.7}.song-select{background:var(--bg-primary);border:1px solid var(--border-color);max-width:200px;color:var(--text-primary);cursor:pointer;border-radius:4px;padding:.25rem .4rem;font-size:.8rem}.song-btn{background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border-color);cursor:pointer;white-space:nowrap;border-radius:4px;padding:.3rem .6rem;font-size:.8rem;transition:background .15s,opacity .15s}.song-btn:hover:not(:disabled){background:#1a4a7a}.song-btn:disabled{opacity:.4;cursor:not-allowed}.song-save-btn:hover:not(:disabled){background:#1a7a3a}.song-delete-btn:hover:not(:disabled){background:var(--clr-drums)}.file-io{gap:.5rem;display:flex}.file-btn{background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border-color);cursor:pointer;border-radius:4px;padding:.3rem .6rem;font-size:.8rem;transition:background .15s}.file-btn:hover{background:#1a4a7a}.track-settings{flex-wrap:wrap;align-items:flex-end;gap:1rem;display:flex}.setting-group{flex-direction:column;gap:.25rem;display:flex}.setting-group label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.bpm-control{align-items:center;gap:.5rem;display:flex}.bpm-control input[type=range]{width:100px;accent-color:var(--accent)}.bpm-input{background:var(--bg-primary);border:1px solid var(--border-color);width:60px;color:var(--text-primary);text-align:center;border-radius:4px;padding:.25rem .4rem;font-size:.85rem}.volume-label{color:var(--text-secondary);text-align:right;min-width:45px;font-size:.75rem}.time-sig-control{align-items:center;gap:.25rem;display:flex}.time-sig-control select{background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-primary);cursor:pointer;border-radius:4px;padding:.25rem .4rem;font-size:.85rem}.time-sig-sep{color:var(--text-secondary);font-size:1rem}.drum-control{border:1px solid var(--border-color);border-radius:4px;gap:0;display:flex;overflow:hidden}.drum-btn{background:var(--bg-primary);color:var(--text-secondary);border:none;border-right:1px solid var(--border-color);cursor:pointer;padding:.3rem .65rem;font-size:.8rem;transition:background .15s,color .15s}.drum-btn:last-child{border-right:none}.drum-btn.active{background:var(--accent);color:#fff}.drum-btn:hover:not(.active){background:var(--bg-surface)}.bass-btn{background:var(--bg-primary);color:var(--text-secondary);border:1px solid var(--border-color);cursor:pointer;border-radius:4px;min-width:48px;padding:.3rem .65rem;font-size:.8rem;transition:background .15s,color .15s}.bass-btn.active{background:var(--clr-bass);color:#fff}.bass-btn:hover:not(.active){background:var(--bg-surface)}.beats-input{background:var(--bg-primary);border:1px solid var(--border-color);width:60px;color:var(--text-primary);text-align:center;border-radius:4px;padding:.25rem .4rem;font-size:.85rem}.beat-grid-container{flex-direction:column;gap:.5rem;min-height:120px;display:flex}.bars-wrapper{flex-wrap:wrap;align-content:flex-start;gap:.5rem;display:flex}.bar-group{flex-direction:column;gap:.15rem;display:flex}.bar-label{color:var(--text-secondary);text-align:center;padding:.15rem 0;font-size:.75rem}.bar-grid-area{position:relative}.bar-chords-overlay{pointer-events:none;z-index:2;position:absolute;inset:0}.beat-cells{gap:0;display:flex}.beat-cell{border:1px solid var(--border-color);background:var(--bg-primary);cursor:pointer;border-left:none;flex-shrink:0;width:48px;height:56px;padding:0;transition:background .1s;position:relative}.beat-cell:first-child{border-left:1px solid var(--border-color);border-top-left-radius:4px;border-bottom-left-radius:4px}.beat-cell.bar-start{border-left:2px solid var(--accent)}.beat-cell:hover{background:var(--bg-surface)}.sub-beat-tick{background:var(--border-color);opacity:.4;pointer-events:none;width:1px;position:absolute;top:0;bottom:0}.chord-block{cursor:pointer;opacity:.85;color:#fff;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;border:none;border-radius:4px;flex-direction:column;justify-content:center;align-items:center;width:100%;min-width:0;height:100%;padding:2px 4px;font-size:.75rem;line-height:1.3;transition:opacity .15s,transform .1s;display:flex;overflow:hidden}.chord-block:hover{opacity:1;transform:translateY(-1px)}.chord-block.selected{outline-offset:1px;opacity:1;outline:2px solid #fff;transform:translateY(-1px);box-shadow:0 0 8px #ffffff80}.chord-block-name{align-items:baseline;gap:1px;font-size:.8rem;font-weight:600;display:flex}.chord-block-octave{opacity:.7;font-size:.6rem;font-weight:400}.chord-block-instrument{opacity:.8;font-size:.65rem}.paste-cursor,.playback-cursor{z-index:3;pointer-events:none;background:#fff;width:2px;height:100%;position:absolute;top:0;box-shadow:0 0 6px #fff9}.help-content{width:460px;max-width:calc(100vw - 2rem);max-height:85vh;overflow-y:auto}.help-body{flex-direction:column;gap:.15rem;display:flex}.help-intro{color:var(--text-secondary);margin-bottom:.75rem;font-size:.8rem}.help-section{margin-bottom:1rem}.help-section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);border-bottom:1px solid var(--border-color);margin-bottom:.35rem;padding-bottom:.2rem;font-size:.7rem}.help-row{justify-content:space-between;align-items:baseline;gap:1rem;padding:.2rem 0;display:flex}.help-shortcut{color:var(--accent);white-space:nowrap;flex-shrink:0;font-family:Courier New,monospace;font-size:.8rem}.help-desc{color:var(--text-primary);text-align:right;font-size:.85rem}.modal-overlay{z-index:1000;background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;width:calc(100vw - 2rem);max-width:360px;padding:1.5rem;box-shadow:0 8px 32px #0006}.modal-title{color:var(--text-primary);margin-bottom:1rem;font-size:1rem;font-weight:600}.modal-form{flex-direction:column;gap:1rem;display:flex}.modal-field{flex-direction:column;gap:.3rem;display:flex}.modal-field label{color:var(--text-secondary);font-size:.8rem}.modal-field input[type=text],.modal-field input[type=number]{background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-primary);border-radius:4px;padding:.4rem .6rem;font-size:.9rem}.modal-field input.input-error{border-color:var(--accent)}.field-error{color:var(--accent);font-size:.75rem}.instrument-toggle{border:1px solid var(--border-color);border-radius:4px;gap:0;display:flex;overflow:hidden}.toggle-btn{background:var(--bg-primary);color:var(--text-secondary);cursor:pointer;border:none;flex:1;padding:.4rem .8rem;font-size:.85rem;transition:background .15s,color .15s}.instrument-grid{grid-template-columns:repeat(3,1fr);gap:.25rem;display:grid}.instrument-grid .toggle-btn{padding:.4rem .5rem;font-size:.8rem}.instrument-grid .toggle-btn.active{color:#fff}.toggle-btn:hover:not(.active){background:var(--bg-surface);background:var(--bg-surface)}.octave-selector{gap:.25rem;display:flex}.octave-btn{background:var(--bg-primary);color:var(--text-secondary);border:1px solid var(--border-color);cursor:pointer;text-align:center;border-radius:4px;flex:1;padding:.4rem .5rem;font-size:.85rem;transition:background .15s,color .15s}.octave-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}.octave-btn:hover:not(.active){background:var(--bg-surface)}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}.btn{cursor:pointer;border:none;border-radius:4px;padding:.4rem 1rem;font-size:.85rem;transition:background .15s}.btn-primary{background:var(--clr-piano);color:#fff}.btn-primary:hover{background:#3d8ae0}.btn-danger{background:var(--accent);color:#fff}.btn-danger:hover{background:#d63851}.btn-secondary{background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border-color)}.btn-secondary:hover{background:#1a4a7a}.transport-bar{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.transport-controls{gap:.25rem;display:flex}.transport-btn{background:var(--bg-surface);width:36px;height:36px;color:var(--text-primary);border:1px solid var(--border-color);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;font-size:1rem;transition:background .15s;display:flex}.transport-btn:hover{background:#1a4a7a}.play-btn{background:var(--accent);border-color:var(--accent)}.play-btn:hover{background:var(--accent-hover)}.small-btn{width:28px;height:28px;font-size:.8rem}.transport-position{flex-direction:column;gap:.1rem;display:flex}.position-label{color:var(--text-primary);font-variant-numeric:tabular-nums;font-size:.8rem}.position-bar{color:var(--text-secondary);font-size:.7rem}.transport-play-from{border-left:1px solid var(--border-color);align-items:center;gap:.25rem;margin-left:.5rem;padding-left:.5rem;display:flex}.transport-play-from label{color:var(--text-secondary);white-space:nowrap;font-size:.75rem}.play-from-input{background:var(--bg-primary);border:1px solid var(--border-color);width:50px;color:var(--text-primary);text-align:center;border-radius:4px;padding:.25rem .4rem;font-size:.85rem}.beat-grid-area::-webkit-scrollbar{height:8px}.beat-grid-area::-webkit-scrollbar-track{background:var(--bg-primary)}.beat-grid-area::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}.beat-grid-area::-webkit-scrollbar-thumb:hover{background:#3a3a5a}.drum-pattern-control{align-items:center;gap:.25rem;display:flex}.drum-select{background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-primary);cursor:pointer;border-radius:4px;max-width:160px;padding:.25rem .4rem;font-size:.85rem}.drum-action-btn{background:var(--bg-primary);width:28px;height:28px;color:var(--text-secondary);border:1px solid var(--border-color);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;font-size:.85rem;transition:background .15s,color .15s;display:flex}.drum-action-btn:hover:not(:disabled){background:var(--bg-surface);color:var(--text-primary)}.drum-action-btn:disabled{opacity:.4;cursor:not-allowed}.drum-delete-btn:hover:not(:disabled){background:var(--accent);color:#fff}.drum-editor-modal{width:520px;max-width:calc(100vw - 2rem);max-height:85vh;overflow-y:auto}.drum-grid-row{align-items:center;gap:.4rem;margin-bottom:.25rem;display:flex}.drum-grid-label{width:80px;color:var(--text-secondary);white-space:nowrap;font-size:.7rem}.drum-grid-steps{gap:2px;display:flex}.drum-bar-group{margin-bottom:.5rem}.drum-bar-sep{background:var(--border-color);height:1px;margin:.4rem 0}.drum-step-btn{border:1px solid var(--border-color);background:var(--bg-primary);cursor:pointer;border-radius:2px;width:20px;height:20px;padding:0;transition:background .1s}.drum-step-btn.beat-start{border-color:var(--accent)}.drum-step-btn.active{background:var(--accent);border-color:var(--accent)}.drum-step-btn:hover:not(.active){background:var(--bg-surface)}.drum-velocity-row{align-items:center;gap:.5rem;display:flex}.drum-velocity-row span{color:var(--text-secondary);min-width:36px;font-size:.75rem}.drum-velocity-row input[type=range]{width:140px;accent-color:var(--accent)}.drum-editor-modal .modal-field select{background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-primary);border-radius:4px;padding:.25rem .4rem;font-size:.85rem}.action-sheet-overlay{z-index:500;background:0 0;position:fixed;inset:0}.action-sheet{background:var(--bg-secondary);border:1px solid var(--border-color);z-index:501;border-radius:8px;min-width:140px;padding:.25rem 0;position:fixed;box-shadow:0 8px 24px #00000080}.action-sheet button{width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:none;padding:.6rem 1rem;font-size:.9rem;transition:background .1s;display:block}.action-sheet button:hover{background:var(--bg-surface)}.action-sheet button.danger{color:var(--accent)}.mobile-menu-overlay{z-index:99;background:0 0;position:fixed;inset:48px 0 0}.settings-toggle{display:none}.mobile-menu-toggle{background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border-color);cursor:pointer;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;font-size:1.1rem;display:none}@media (width<=600px){.transport-btn,.small-btn,.drum-action-btn{min-width:44px;min-height:44px}.drum-step-btn{min-width:36px;min-height:36px}.beat-grid-area{padding:.5rem;box-shadow:inset -12px 0 8px -8px #0000004d}.settings-toggle-summary{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:.7rem;overflow:hidden}.app-header{gap:.5rem}.app-header h1{font-size:1rem}.mobile-menu-toggle{display:flex}.header-actions{background:var(--bg-secondary);border-bottom:1px solid var(--border-color);z-index:100;flex-direction:column;gap:.75rem;padding:.75rem 1.25rem;display:none;position:absolute;top:48px;left:0;right:0}.header-actions.visible{display:flex}.song-manager{flex-direction:column;gap:.5rem}.song-save-group,.song-select-group{width:100%}.song-name-input{flex:1;min-width:0}.song-select{flex:1;max-width:none}.file-io{width:100%}.settings-toggle{background:var(--bg-surface);border:1px solid var(--border-color);width:100%;color:var(--text-primary);cursor:pointer;border-radius:4px;justify-content:space-between;align-items:center;padding:.4rem .75rem;font-size:.85rem;display:flex}.settings-toggle:hover{background:#1a4a7a}.track-settings.collapsed{display:none}.transport-bar{gap:.5rem}.transport-position{margin-left:auto}.transport-play-from{border-left:none;margin-left:0;padding-left:0}.footer-links{gap:.5rem}.modal-content{padding-left:max(1.5rem, env(safe-area-inset-left,0px));padding-right:max(1.5rem, env(safe-area-inset-right,0px));padding-bottom:max(1rem, env(safe-area-inset-bottom,0px))}.app-footer{padding-bottom:max(.5rem, env(safe-area-inset-bottom,0px))}.action-sheet{max-width:calc(100vw - 1rem)}}.beat-grid-area{-webkit-overflow-scrolling:touch;overscroll-behavior:contain}@media (height<=450px){.app-header{height:40px;padding-top:.25rem;padding-bottom:.25rem}.app-header h1{font-size:.9rem}.app-footer{padding-top:.25rem;padding-bottom:.25rem}.transport-btn{min-height:36px}.beat-grid-area{padding:.25rem .5rem}.beat-cell{height:48px}}
