@import "https://fonts.googleapis.com/css2?family=Recursive:wght@300;400;500;600;700;800&display=swap";:root{color:#111827;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--blue:#316dca;--blue-dark:#2d7de8;--gray-50:#f8f9fa;--gray-100:#eef2f7;--gray-500:#6b7280;--shadow-sm:0 1px 3px #0f172a1f;--shadow-md:0 8px 28px #0f172a24;background:#fff;font-family:Recursive,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box;scrollbar-width:none}::-webkit-scrollbar{width:0;height:0;display:none}html,body,#root{min-height:100%;margin:0}body{overflow-x:hidden}button,input,textarea{font:inherit}a{color:inherit}.app{min-height:100vh;box-shadow:var(--shadow-sm);background:#fff;flex-direction:column;display:flex}.topbar{background:var(--gray-50);padding:20px}.topbar-inner{justify-content:space-between;align-items:center;gap:18px;width:min(992px,100%);margin:0 auto;display:flex}.brand-cluster{align-items:center;gap:10px;min-width:0;display:flex}.brand{white-space:nowrap;align-items:center;gap:7px;min-width:0;font-size:18px;font-weight:800;text-decoration:none;display:inline-flex}.brand-mark{background:linear-gradient(135deg, var(--blue-dark), var(--blue));border-radius:10%;flex:none;width:20px;height:20px}.brand-name{text-overflow:ellipsis;overflow:hidden}.github-button{color:#fff;background:var(--blue);border-radius:999px;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:9px 18px;font-size:14px;font-weight:600;text-decoration:none;display:inline-flex}.screen{flex-direction:column;flex:1;justify-content:center;gap:40px;width:100%;padding:34px 0 42px;display:flex}.song-rail{width:100%}.rail-scroll{scroll-snap-type:x proximity;align-items:flex-start;gap:14px;width:100%;padding:8px 24px 18px;scroll-padding-inline:24px;display:flex;overflow:auto hidden}.song-card,.song-skeleton,.detail-skeleton{border:1px solid #1118272e;border-radius:8px;width:min(380px,100vw - 32px);min-width:min(380px,100vw - 32px);height:350px;min-height:350px;max-height:350px;margin:4px;padding:18px;box-shadow:0 2px 8px #0f172a14}.song-card{scroll-snap-align:start;flex-direction:column;justify-content:flex-start;gap:12px;min-height:0;display:flex;overflow:hidden}.song-card.compact{flex:0 0 min(380px,100vw - 48px);justify-content:flex-start;width:min(380px,100vw - 48px);min-width:min(380px,100vw - 48px);transition:transform .18s,box-shadow .18s}.song-card:not(.compact){flex:0 0 min(380px,100vw - 32px)}.song-card.compact:hover{transform:translateY(-2px);box-shadow:0 7px 18px #0f172a1f}.song-skeleton,.detail-skeleton{background:linear-gradient(90deg,#f1f5f9,#e2e8f0,#f1f5f9) 0 0/220% 100%;animation:1.4s linear infinite shimmer}.song-card-header{flex:0 0 32px;justify-content:space-between;align-items:center;gap:12px;min-width:0;display:flex}.song-card-header h2{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-family:inherit;font-size:15px;font-weight:700;line-height:1.2;overflow:hidden}.song-actions{flex:none;align-items:center;gap:4px;display:flex}.song-icon{cursor:pointer;background:0 0;border:0;place-items:center;width:32px;height:32px;text-decoration:none;display:inline-grid}.generation-panel{color:#111827;width:min(400px,100vw - 32px);margin:12px;padding:0}.song-rail .generation-panel{flex:0 0 min(400px,100vw - 48px)}.detail-card-wrap .generation-panel{margin-inline:auto}.download-wrap{position:relative}.download-menu{z-index:15;color:#111827;width:132px;box-shadow:var(--shadow-md);background:#fffffff5;border:1px solid #94a3b847;border-radius:5px;gap:4px;padding:8px;display:grid;position:absolute;top:38px;left:50%;transform:translate(-50%)}.download-menu span{color:#475569;padding:5px 8px;font-size:12px;font-weight:700}.download-menu a{border-radius:4px;padding:7px 8px;font-size:14px;text-decoration:none}.download-menu a:hover{background:#f1f5f9}.song-status{text-align:center;flex-direction:column;flex:auto;justify-content:center;min-height:0;font-size:15px;font-weight:600;display:flex}.song-card.compact .song-status{flex:auto;min-height:0}.generation-progress{text-align:left;gap:12px;width:100%;padding:6px 2px 2px}.progress-header{grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.progress-icon{opacity:.8;border:1px solid;border-radius:999px;place-items:center;width:32px;height:32px;display:inline-grid}.progress-icon .spinning{animation:1s linear infinite abcjs-spin}.progress-copy{gap:2px;min-width:0;display:grid}.progress-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:15px;overflow:hidden}.progress-copy span,.progress-meta{opacity:.72;font-size:11px;font-weight:500;line-height:1.35}.progress-percent{font-size:13px;font-weight:800}.progress-track{background:color-mix(in srgb, currentColor 18%, transparent);border-radius:999px;height:8px;overflow:hidden}.progress-track span{border-radius:inherit;background:currentColor;height:100%;transition:width .32s;display:block}.progress-steps{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:0;padding:0;list-style:none;display:grid}.progress-steps li{opacity:.5;white-space:nowrap;align-items:center;gap:4px;min-width:0;font-size:10px;font-weight:800;line-height:1.2;display:flex}.progress-steps li.active,.progress-steps li.done{opacity:1}.progress-steps li span{border:1px solid;border-radius:999px;flex:0 0 12px;place-items:center;width:12px;height:12px;display:inline-grid}.progress-steps li.done span{border:0}.progress-meta{margin:0}.generation-progress.failed .progress-track span{background:#991b1b}.song-card.compact .generation-progress{gap:9px;padding-top:0}.song-card.compact .progress-copy span,.song-card.compact .progress-meta{display:none}.song-card.compact .progress-header{gap:8px}.song-card.compact .progress-icon{width:28px;height:28px}.song-card.compact .progress-copy strong{font-size:13px}.song-card.compact .progress-steps{gap:4px}.song-card.compact .progress-steps li{font-size:9px}.composer{flex-direction:column;align-items:center;gap:22px;width:min(992px,100%);margin:0 auto;padding:0 20px;display:flex}.instrument-picker{color:#111827;align-items:center;gap:8px;width:min(900px,100vw - 40px);min-width:0;display:flex}.instrument-picker-scroll{overscroll-behavior-x:contain;flex:auto;gap:8px;min-width:0;display:flex;overflow-x:auto}.instrument-chip,.instrument-add{color:#374151;cursor:pointer;background:#fff;border:1px solid #d7dee8;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:8px;height:42px;padding:0 13px;font-size:12px;font-weight:650;transition:border-color .16s,color .16s,background-color .16s;display:inline-flex}.instrument-chip:hover,.instrument-chip:focus-visible,.instrument-add:hover,.instrument-add:focus-visible{border-color:var(--blue);color:var(--blue);outline:0}.instrument-chip:disabled,.instrument-add:disabled{cursor:default;opacity:.58}.instrument-remove{opacity:.52;margin-left:2px}.instrument-add-wrap{z-index:8;flex:none;position:relative}.instrument-add{color:#111827;border-style:dashed}.instrument-menu{z-index:20;width:230px;box-shadow:var(--shadow-md);background:#fff;border:1px solid #d7dee8;border-radius:7px;gap:3px;padding:6px;display:grid;position:absolute;top:calc(100% + 8px);right:0}.instrument-menu button{color:#111827;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:9px;min-width:0;padding:9px 10px;font-size:12px;font-weight:600;display:flex}.instrument-menu button:hover,.instrument-menu button:focus-visible{background:#eef4fc;outline:0}.instrument-menu button span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.color-screen .instrument-picker{color:#111827}.model-selector{--model-selector-color:#4b5563;--model-selector-active-bg:var(--blue);--model-selector-active-color:#fff;border:1px solid color-mix(in srgb, var(--model-selector-color) 22%, transparent);width:146px;height:34px;color:var(--model-selector-color);background:#ffffffdb;border-radius:8px;grid-template-columns:repeat(2,72px);padding:2px;display:grid}.model-selector button{min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;font-size:12px;font-weight:700}.model-selector button.selected{color:var(--model-selector-active-color);background:var(--model-selector-active-bg)}.model-selector button:focus-visible{outline:2px solid var(--model-selector-color);outline-offset:1px}.prompt-shell{background:#fff;border:1px solid #e8edf4;border-radius:18px;grid-template-columns:46px 1fr 46px;align-items:center;width:min(720px,100vw - 40px);min-height:64px;transition:box-shadow .16s,border-color .16s;display:grid;box-shadow:0 1px 3px #0f172a0f}.prompt-shell:hover{border-color:#dde5ef;box-shadow:0 3px 10px #0f172a14}.prompt-shell:focus-within{border-color:#cbd7e6;box-shadow:0 4px 14px #316dca1a}.prompt-shell textarea{resize:none;color:#111827;background:0 0;border:0;outline:0;width:100%;height:42px;min-height:42px;max-height:42px;padding:9px 4px;font-size:17px;line-height:1.4;overflow:hidden}.prompt-shell textarea::placeholder{color:#98a1af}.prompt-icon,.palette-button{color:#98a1af;cursor:pointer;background:0 0;border:0;border-radius:999px;place-self:center;place-items:center;width:34px;height:34px;display:inline-grid}.palette-button{color:#fff;background:var(--blue)}.hint{text-align:center;color:#374151;max-width:400px;margin:-8px 0 0;padding:0 20px;font-size:11px;line-height:1.6}.generate-button{border:1px solid var(--gray-100);color:#1f2937;min-width:200px;min-height:52px;box-shadow:var(--shadow-sm);cursor:pointer;background:0 0;border-radius:8px;padding:12px 28px;font-size:18px;font-weight:700}.generate-button:not(:disabled):hover{box-shadow:var(--shadow-md)}.generate-button:disabled{cursor:not-allowed;opacity:.55}.loading-note,.error-note{margin:-10px 0 0;font-size:14px}.error-note{color:#b91c1c}.submit-progress{gap:8px;width:min(280px,100%);margin-top:-8px;display:grid}.submit-progress span{background:#e5eaf2;border-radius:999px;height:6px;position:relative;overflow:hidden}.submit-progress span:before{content:"";border-radius:inherit;background:var(--blue);width:45%;animation:1.15s ease-in-out infinite indeterminate-progress;position:absolute;inset:0}.submit-progress p{color:#64748b;text-align:center;margin:0;font-size:12px;font-weight:700}.detail-screen{gap:28px}.detail-card-wrap{justify-content:center;display:flex}.detail-compose{gap:18px;display:grid}.examples-link{color:#4b5563;justify-self:center;font-size:12px;text-decoration:none}.empty-state{color:#64748b;text-align:center;margin:12px 20px;font-size:14px}.color-screen{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:30px;min-height:calc(100vh - 178px);padding:42px 20px;display:flex}.color-generate{background:0 0}.footer{background:var(--gray-50);flex-direction:column;align-items:center;gap:8px;padding:12px 20px;display:flex}.footer a{text-decoration:underline}.footer p{text-align:center;color:#111827;margin:0;font-size:11px;font-weight:700}.modal-backdrop{z-index:100;background:#0f172a66;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.modal{color:#111827;width:min(500px,100%);max-height:min(86vh,720px);box-shadow:var(--shadow-md);background:#fff;border-radius:8px;flex-direction:column;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.modal-header h2{margin:0;font-size:17px}.modal-header button{cursor:pointer;background:0 0;border:0;width:34px;height:34px}.modal-body{padding:20px;overflow:auto}.modal-body p{color:#374151;margin:0;line-height:1.6}.modal-copy{margin-bottom:14px}.settings-textarea{resize:vertical;border:1px solid #d1d5db;border-radius:6px;outline:none;width:100%;min-height:260px;padding:10px;line-height:1.45}.reset-button{color:#475569;cursor:pointer;background:0 0;border:0;margin:12px auto 0;display:block}.response-text{white-space:pre-wrap;color:#111827;margin:0;font-family:inherit;font-size:14px;line-height:1.5}.abc-player{flex-direction:column;flex:1 1 0;gap:10px;min-height:0;display:flex;overflow:hidden}.compact-player{flex-direction:column;flex:1 1 0;gap:8px;min-height:0;display:flex;overflow:hidden}.abcjs-scroll{overscroll-behavior-y:contain;flex:1 1 0;width:100%;min-height:0;overflow:hidden auto}.compact-player .abcjs-scroll{flex:1 1 0;min-height:0;overflow:hidden auto}.abcjs-container{width:100%;overflow:visible}.abcjs-container svg{max-width:100%;display:block}.compact-player .abcjs-container svg{display:block}.abcjs-audio-shell{flex:0 0 42px;min-height:42px;overflow:hidden}.inverse *{color:#111827!important;fill:#111827!important;stroke:#111827!important;border-color:#111827!important}.abcjs-container text,.abcjs-container tspan,.inverse .abcjs-container text,.inverse .abcjs-container tspan{stroke:none!important;stroke-width:0!important;font-family:Georgia,Times New Roman,serif!important;font-weight:400!important}.abcjs-inline-audio{background:0 0;border-radius:0;align-items:center;gap:10px;width:100%;min-width:0;height:42px;padding:0;display:flex;overflow:hidden}.compact-player .abcjs-audio{flex:0 0 42px;min-width:0;overflow:hidden}.compact-player .abcjs-audio-shell{min-height:42px}.compact-player .abcjs-inline-audio{height:42px}.abcjs-inline-audio.abcjs-disabled{opacity:.5}.abcjs-inline-audio .abcjs-btn{box-sizing:border-box;border-radius:999px;place-items:center;width:42px;min-width:42px;height:42px;margin:0;padding:9px;line-height:1;transition:opacity .16s,transform .16s;display:inline-grid;background:0 0!important;border:1px solid!important}.compact-player .abcjs-inline-audio .abcjs-btn{width:42px;min-width:42px;height:42px;padding:9px}.abcjs-btn g{fill:currentColor!important;stroke:currentColor!important}.abcjs-inline-audio .abcjs-btn:hover,.abcjs-inline-audio .abcjs-btn:focus-visible{opacity:.72;outline:0}.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed{transform:scale(.94);color:inherit!important;background:0 0!important}.abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg,.abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg,.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg,.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg{display:none}.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg,.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-loading-svg{display:block}.abcjs-inline-audio .abcjs-midi-progress-background{cursor:pointer;background:0 0;border:0;border-radius:0;flex:1;min-width:72px;height:30px;margin:0;padding:0;position:relative}.compact-player .abcjs-inline-audio .abcjs-midi-progress-background{min-width:72px;margin:0}.abcjs-inline-audio .abcjs-midi-progress-indicator{opacity:0;width:1px;height:100%;margin:0;position:absolute;top:0;left:0}.abcjs-waveform{pointer-events:none;justify-content:space-between;align-items:center;gap:2px;display:flex;position:absolute;inset:0}.abcjs-waveform i{width:3px;height:var(--wave-height);opacity:.22;transform-origin:50%;background:currentColor;border-radius:2px;flex:3px;max-width:4px;min-height:4px;transition:opacity .1s linear}.abcjs-waveform i.played{opacity:1}.abcjs-audio:has(.abcjs-midi-start.abcjs-pushed) .abcjs-waveform i{animation:.62s ease-in-out infinite alternate waveform-pulse;animation-delay:var(--wave-delay)}.abcjs-inline-audio .abcjs-midi-clock{white-space:nowrap;flex:none;margin:0;font-family:inherit;font-size:13px;font-weight:600;color:currentColor!important}.compact-player .abcjs-inline-audio .abcjs-midi-clock{margin:0;font-size:13px}.abcjs-inline-audio .abcjs-tempo-wrapper{display:none}.audio-hint{left:50%;bottom:max(18px, env(safe-area-inset-bottom));z-index:120;width:min(390px,100vw - 28px);box-shadow:var(--shadow-md);background:#fff;border:1px solid #cbd5e1;border-radius:7px;grid-template-columns:20px 1fr 28px;align-items:center;gap:10px;padding:11px 12px;font-size:12px;line-height:1.35;display:grid;position:fixed;transform:translate(-50%);color:#111827!important}.audio-hint>svg,.audio-hint>svg *{color:var(--blue)!important;fill:none!important;stroke:var(--blue)!important}.audio-hint strong{font-weight:750}.audio-hint button{cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;width:28px;height:28px;padding:0;display:grid;color:#475569!important}.audio-hint button:hover,.audio-hint button:focus-visible{background:#eef2f7;outline:0}.abcjs-inline-audio .abcjs-loading{outline:none;animation-name:abcjs-spin;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite}.abcjs-css-warning{display:none}@keyframes shimmer{0%{background-position:220% 0}to{background-position:-220% 0}}@keyframes abcjs-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes waveform-pulse{0%{transform:scaleY(.72)}to{transform:scaleY(1)}}@keyframes indeterminate-progress{0%{transform:translate(-110%)}55%{transform:translate(70%)}to{transform:translate(230%)}}@media (prefers-reduced-motion:reduce){.song-card.compact{transition:none}.song-card.compact:hover{transform:none}.abcjs-audio:has(.abcjs-midi-start.abcjs-pushed) .abcjs-waveform i{animation:none}}@media (width<=640px){.topbar-inner{align-items:center;gap:12px}.topbar{padding:16px}.brand-cluster{flex:auto}.brand{font-size:16px}.github-button{width:44px;min-width:44px;padding:0}.github-button span{display:none}.screen{gap:28px;padding-top:22px}.instrument-picker{gap:6px;width:100%}.instrument-picker-scroll{gap:6px}.instrument-chip,.instrument-add{height:38px;padding-inline:10px}.instrument-menu{width:min(230px,100vw - 40px)}.prompt-shell{border-radius:22px;grid-template-columns:40px 1fr 44px;width:100%}.prompt-shell textarea{font-size:16px}.song-card,.song-skeleton{margin:4px}.rail-scroll{gap:8px;padding-inline:12px}.song-card.compact{flex-basis:min(350px,100vw - 40px);width:min(350px,100vw - 40px);min-width:min(350px,100vw - 40px)}}
