*,:before,:after{box-sizing:border-box}body{-webkit-font-smoothing:antialiased;margin:0;font-family:system-ui,Segoe UI,Roboto,sans-serif}#root{flex-direction:column;min-height:100dvh;display:flex}.app{background:#f4f5f8;flex-direction:column;height:100dvh;display:flex;overflow:hidden}.header{background:#1a1d2e;border-bottom:1px solid #2a2d40;flex-shrink:0;justify-content:space-between;align-items:center;height:56px;padding:0 24px;display:flex}.header-brand{align-items:center;gap:10px;display:flex}.header-icon{color:#818cf8;font-size:24px;line-height:1}.header-title{color:#e2e8f0;letter-spacing:.02em;font-size:16px;font-weight:600}.header-right{align-items:center;gap:12px;display:flex}.header-filename{color:#94a3b8;text-overflow:ellipsis;white-space:nowrap;max-width:240px;font-size:13px;overflow:hidden}.btn-ghost{color:#94a3b8;cursor:pointer;background:0 0;border:1px solid #3a3d54;border-radius:6px;padding:6px 12px;font-size:13px;transition:border-color .15s,color .15s}.btn-ghost:hover{color:#e2e8f0;border-color:#818cf8}.playback-bar{background:#1e2235;border-bottom:1px solid #2a2d40;flex-direction:column;flex-shrink:0;gap:4px;padding:8px 24px 10px;display:flex}.playback-bar-row{justify-content:space-between;align-items:center;width:100%;min-height:36px;display:flex}.progress-row{align-items:center;gap:10px;width:100%;display:flex}.progress-slider{appearance:none;cursor:pointer;background:#3a3d54;border-radius:2px;outline:none;flex:1;height:4px}.progress-slider:disabled{opacity:.3;cursor:not-allowed}.progress-slider::-webkit-slider-thumb{appearance:none;cursor:pointer;background:#6366f1;border-radius:50%;width:14px;height:14px;transition:background .15s}.progress-slider::-webkit-slider-thumb:hover{background:#818cf8}.progress-slider::-moz-range-thumb{cursor:pointer;background:#6366f1;border:none;border-radius:50%;width:14px;height:14px}.progress-time{color:#64748b;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:32px;font-size:11px}.playback-buttons{align-items:center;gap:8px;display:flex}.btn-playback{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:6px;padding:7px 16px;font-size:13px;font-weight:500;transition:opacity .15s,filter .15s;display:inline-flex}.btn-playback:disabled{opacity:.4;cursor:not-allowed}.btn-playback:not(:disabled):hover{filter:brightness(1.12)}.btn-icon{font-size:11px;line-height:1}.btn-play{color:#fff;background:#6366f1}.btn-pause{color:#fff;background:#0ea5e9}.btn-stop{color:#94a3b8;background:0 0;border:1px solid #3a3d54}.btn-stop:hover{color:#e2e8f0!important;border-color:#6366f1!important}.tempo-control{align-items:center;gap:8px;display:flex}.tempo-label{color:#64748b;white-space:nowrap;font-size:12px}.tempo-slider{appearance:none;cursor:pointer;background:#3a3d54;border-radius:2px;outline:none;width:100px;height:4px}.tempo-slider::-webkit-slider-thumb{appearance:none;cursor:pointer;background:#6366f1;border-radius:50%;width:14px;height:14px;transition:background .15s}.tempo-slider::-webkit-slider-thumb:hover{background:#818cf8}.tempo-slider::-moz-range-thumb{cursor:pointer;background:#6366f1;border:none;border-radius:50%;width:14px;height:14px}.tempo-value{color:#94a3b8;text-align:right;font-variant-numeric:tabular-nums;min-width:36px;font-size:12px}.playback-status{font-size:12px}.status-label{color:#64748b;letter-spacing:.04em;background:#2a2d40;border-radius:12px;padding:3px 10px;font-weight:500}.status-playing{color:#818cf8;background:#6366f133}.status-paused{color:#38bdf8;background:#0ea5e926}.main{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}.upload-wrapper{flex:1;justify-content:center;align-items:center;padding:40px 24px;display:flex}.upload-zone{cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border:2px dashed #cbd5e1;border-radius:16px;outline:none;flex-direction:column;justify-content:center;align-items:center;gap:8px;width:100%;max-width:440px;padding:56px 40px;transition:border-color .15s,background .15s;display:flex}.upload-zone:hover,.upload-zone:focus-visible{background:#f5f3ff;border-color:#818cf8}.upload-zone--active{background:#eef2ff;border-color:#6366f1}.upload-icon{color:#818cf8;margin-bottom:8px;font-size:56px;line-height:1}.upload-title{color:#1e293b;margin:0;font-size:17px;font-weight:600}.upload-subtitle{color:#64748b;margin:0;font-size:14px}.upload-formats{color:#94a3b8;letter-spacing:.04em;margin:8px 0 0;font-size:12px}.viewer{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.viewer-overlay{color:#64748b;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:40px;font-size:15px;display:flex}.viewer-error{color:#ef4444}.error-detail{color:#94a3b8;text-align:center;max-width:480px;font-size:13px}.osmd-container{background:#fff;padding:24px 32px;overflow-x:auto}.spinner{border:3px solid #e2e8f0;border-top-color:#818cf8;border-radius:50%;width:32px;height:32px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.practice-page{flex-direction:column;flex:1;min-height:0;padding-bottom:120px;display:flex;overflow:hidden}.practice-main{flex:1;min-height:0;overflow-y:auto}.piano-container{z-index:50;box-sizing:border-box;background:#1a1d2e;border-top:1px solid #2a2d40;height:120px;padding:8px 4px 0;position:fixed;bottom:0;left:0;right:0}.piano{height:100%;display:flex;position:relative}.white-key{box-sizing:border-box;background:#f0ede8;border-bottom:1px solid #c5bfba;border-right:1px solid #c5bfba;border-radius:0 0 4px 4px;flex:1;transition:background 50ms}.white-key:first-child{border-left:1px solid #c5bfba}.white-key.active{background:#6366f1}.black-key{z-index:1;box-sizing:border-box;background:#1c1c28;border-radius:0 0 3px 3px;height:64%;transition:background 50ms;position:absolute;top:0}.black-key.active{background:#818cf8}.view-toggles{align-items:center;gap:14px;display:flex}.view-toggle{color:#94a3b8;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:flex}.view-toggle input[type=checkbox]{accent-color:#6366f1;cursor:pointer;width:13px;height:13px}.view-toggle--disabled{opacity:.35;cursor:not-allowed}.view-toggle--disabled input{cursor:not-allowed}.falling-notes-container{background:#0d0f1a;border-top:1px solid #2a2d40;flex-shrink:0;width:100%;position:relative}.falling-notes-canvas{width:100%;height:100%;display:block}.falling-notes-resize-handle{cursor:ns-resize;z-index:1;height:6px;position:absolute;top:0;left:0;right:0}.falling-notes-resize-handle:after{content:"";background:#ffffff26;border-radius:1px;width:32px;height:2px;transition:background .15s;position:absolute;top:2px;left:50%;transform:translate(-50%)}.falling-notes-resize-handle:hover:after{background:#6366f1}.landing{color:#e2e8f0;background:#1a1d2e;flex-direction:column;flex:1;display:flex;overflow-y:auto}.landing-hero{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:48px 24px 36px;display:flex}.landing-hero-glyph{color:#818cf8;font-size:56px;line-height:1}.landing-hero-title{color:#e2e8f0;letter-spacing:.01em;margin:0;font-size:28px;font-weight:700}.landing-hero-subtitle{color:#94a3b8;max-width:520px;margin:0;font-size:15px;line-height:1.6}.landing-filters{border-bottom:1px solid #2a2d40;flex-wrap:wrap;align-items:center;gap:12px;padding:0 24px 16px;display:flex}.filter-tabs{gap:6px;display:flex}.filter-tab{color:#94a3b8;cursor:pointer;background:0 0;border:1px solid #3a3d54;border-radius:20px;padding:5px 14px;font-size:13px;transition:border-color .15s,color .15s,background .15s}.filter-tab:hover{color:#e2e8f0;border-color:#6366f1}.filter-tab.active{color:#fff;background:#6366f1;border-color:#6366f1}.landing-search{color:#e2e8f0;background:#12141f;border:1px solid #3a3d54;border-radius:6px;outline:none;flex:1;min-width:180px;max-width:320px;padding:6px 12px;font-size:13px;transition:border-color .15s}.landing-search::placeholder{color:#4a5568}.landing-search:focus{border-color:#6366f1}.landing-list{flex:1;padding:16px 24px 8px;overflow-y:auto}.landing-empty{color:#64748b;text-align:center;padding:40px 0;font-size:14px}.composer-group{margin-bottom:24px}.composer-header{color:#64748b;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #2a2d40;align-items:center;gap:8px;margin-bottom:6px;padding-bottom:6px;font-size:13px;font-weight:600;display:flex}.composer-count{color:#94a3b8;background:#2a2d40;border-radius:10px;padding:1px 7px;font-size:11px;font-weight:500}.piece-row{color:#e2e8f0;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:space-between;align-items:center;width:100%;padding:9px 12px;font-size:14px;transition:background .12s;display:flex}.piece-row:hover{background:#22253a}.piece-title{text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:12px;overflow:hidden}.difficulty-badge{text-transform:capitalize;border-radius:10px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:500}.difficulty-beginner{color:#4ade80;background:#22c55e26}.difficulty-intermediate{color:#818cf8;background:#6366f126}.difficulty-advanced{color:#f87171;background:#ef444426}.landing-upload-cta{border-top:1px solid #2a2d40;flex-shrink:0;align-items:center;gap:16px;padding:20px 24px;display:flex}.landing-upload-text{color:#64748b;margin:0;font-size:14px}.landing-divider{flex-shrink:0;align-items:center;margin:4px 0 32px;padding:0 32px;display:flex}.landing-divider:before,.landing-divider:after{content:"";background:linear-gradient(90deg,#0000,#3a3d54 60%);flex:1;height:1px}.landing-divider:after{background:linear-gradient(270deg,#0000,#3a3d54 60%)}.landing-divider-label{color:#4a5568;text-transform:uppercase;letter-spacing:.12em;white-space:nowrap;padding:0 18px;font-size:11px;font-weight:700}.instrument-section{flex-direction:column;flex:1;align-items:center;padding:0 24px 36px;display:flex}.instrument-grid{grid-template-columns:repeat(auto-fill,minmax(210px,250px));justify-content:center;gap:20px;width:100%;max-width:1060px;display:grid}.instrument-card{cursor:pointer;color:#e2e8f0;text-align:center;background:#1e2235;border:1px solid #2a2d40;border-radius:16px;flex-direction:column;align-items:center;gap:12px;padding:36px 24px 28px;transition:border-color .18s,background .18s,transform .18s,box-shadow .18s;display:flex}.instrument-card:hover{background:#22253a;border-color:#6366f1;transform:translateY(-4px);box-shadow:0 12px 32px #6366f138}.instrument-card:active{transform:translateY(-1px)}.instrument-card-icon{background:#6366f11a;border-radius:50%;justify-content:center;align-items:center;width:76px;height:76px;font-size:38px;line-height:1;transition:background .18s;display:flex}.instrument-card:hover .instrument-card-icon{background:#6366f133}.instrument-card-name{color:#e2e8f0;letter-spacing:.01em;font-size:18px;font-weight:700}.instrument-card-desc{color:#64748b;font-size:13px;line-height:1.4}.instrument-card-count{color:#818cf8;letter-spacing:.02em;background:#6366f11f;border-radius:12px;padding:3px 12px;font-size:12px;font-weight:600}.instrument-card--soon{cursor:default;opacity:.5;pointer-events:none}.instrument-card--soon .instrument-card-icon{filter:grayscale();background:#64748b1a}.coming-soon-badge{color:#64748b;letter-spacing:.04em;border:1px solid #3a3d54;border-radius:12px;padding:3px 10px;font-size:11px;font-weight:600}.library-nav{border-bottom:1px solid #2a2d40;flex-shrink:0;align-items:center;gap:10px;padding:14px 24px 12px;display:flex}.library-back-btn{color:#818cf8;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;transition:color .15s}.library-back-btn:hover{color:#e2e8f0}.library-nav-sep{color:#3a3d54;font-size:14px}.library-nav-current{color:#e2e8f0;font-size:13px;font-weight:600}.accordion-group{margin-bottom:2px}.accordion-header{color:#64748b;text-transform:uppercase;letter-spacing:.06em;cursor:pointer;text-align:left;background:0 0;border:none;border-bottom:1px solid #2a2d40;border-radius:6px 6px 0 0;align-items:center;gap:8px;width:100%;padding:10px 12px;font-size:13px;font-weight:600;transition:color .15s,background .15s;display:flex}.accordion-header:hover{color:#e2e8f0;background:#1e2235}.accordion-composer{flex:1}.accordion-chevron{color:#4a5568;font-size:18px;line-height:1;transition:transform .2s;display:inline-block}.accordion-chevron.open{transform:rotate(90deg)}.accordion-body{padding:4px 0 10px}
