:root{--bg: #fafaf7;--surface: #ffffff;--ink: #1a1a1a;--ink-muted: #666;--ink-faint: #999;--chord: #b2362d;--chord-strum-once: #7a1f19;--accent: #3a6ea5;--rule: #e5e3dc;--section: #2a2a2a;--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", Menlo, Consolas, "Liberation Mono", monospace;--line-height-sheet: 1.15}@media (prefers-color-scheme: dark){:root{--bg: #17171a;--surface: #1e1e22;--ink: #ececec;--ink-muted: #aaa;--ink-faint: #777;--chord: #ff8a7a;--chord-strum-once: #ffb4a8;--accent: #7fb3ff;--rule: #2e2e34;--section: #d8d8d8}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.app{height:100dvh;display:flex;flex-direction:column;overflow:hidden}.app__topbar{display:flex;flex-direction:column;gap:.5rem;padding:.6rem 1rem;border-bottom:1px solid var(--rule);background:var(--surface);position:sticky;top:0;z-index:10}.app__topbar-row{display:flex;align-items:center;gap:.75rem;min-width:0}.app__topbar-row--secondary{flex-wrap:wrap;row-gap:.4rem}.app__brand{font-family:var(--font-mono);font-weight:600;font-size:.95rem;letter-spacing:.02em;color:var(--ink);flex-shrink:0}.app__brand-dot{color:var(--chord)}.app__song-picker{font-family:var(--font-ui);font-size:.85rem;padding:.35rem .6rem;border:1px solid var(--rule);border-radius:.35rem;background:var(--surface);color:var(--ink)}.app__mode{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-faint);letter-spacing:.06em;text-transform:uppercase}.app__scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:2rem 1.25rem 6rem}.app__status{max-width:60ch;margin:3rem auto;color:var(--ink-muted);font-size:.95rem}.app__error{border:1px solid var(--chord);background:color-mix(in srgb,var(--chord) 8%,transparent);color:var(--chord);padding:1rem 1.25rem;border-radius:.5rem;font-family:var(--font-mono);font-size:.85rem;white-space:pre-wrap}.app__back-to-top-wrap{display:flex;justify-content:center;margin:2.5rem 0 1rem}.app__back-to-top{font-family:var(--font-ui);font-size:.85rem;font-weight:500;letter-spacing:.01em;padding:.55rem 1.25rem;border:1px solid var(--rule);border-radius:.6rem;background:var(--surface);color:var(--ink);cursor:pointer;transition:border-color .15s,color .15s,background .15s,box-shadow .15s}.app__back-to-top:hover{border-color:var(--accent);color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}.app__back-to-top:active{transform:translateY(1px)}.app__footer{text-align:center;font-size:.72rem;color:var(--ink-faint);padding:.5rem 0 .25rem;letter-spacing:.02em}.app__asterisk-note{max-width:72ch;margin:0 auto 1.25rem;display:flex;align-items:baseline;gap:.5rem;padding:.5rem .75rem;border:1px solid color-mix(in srgb,var(--ink-muted) 25%,transparent);border-radius:.4rem;background:color-mix(in srgb,var(--ink-muted) 6%,transparent);color:var(--ink-muted);font-size:.85rem;line-height:1.3}.app__asterisk-note code{font-family:var(--font-mono);font-size:.85em;color:var(--chord);background:none;padding:0}.app__asterisk-note-mark{color:var(--chord);font-weight:700;font-size:1.1em;line-height:1}.chord-sheet{max-width:72ch;margin:0 auto}.chord-sheet__header{margin-bottom:2rem;padding-bottom:1.25rem;border-bottom:1px solid var(--rule)}.chord-sheet__title{font-family:var(--font-ui);font-size:1.75rem;font-weight:700;margin:0 0 .25rem;letter-spacing:-.01em}.chord-sheet__artist{margin:0;color:var(--ink-muted);font-size:1rem}.chord-sheet__meta{display:flex;gap:1.5rem;margin:.75rem 0 0;padding:0;font-size:.8rem;color:var(--ink-muted)}.chord-sheet__meta-item{display:flex;gap:.35rem;margin:0}.chord-sheet__meta-item dt{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.08em;font-size:.7rem;align-self:center}.chord-sheet__meta-item dd{margin:0;color:var(--ink);font-family:var(--font-mono)}.section{margin-bottom:2rem}.section__name{font-family:var(--font-ui);font-size:.8rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--section);margin:0 0 .75rem;padding-bottom:.3rem;border-bottom:1px dashed var(--rule);text-align:center}.section__lines{overflow-x:visible;padding-left:0;padding-right:1em}.line{margin-bottom:.25rem;font-family:var(--font-mono);font-size:calc(.95rem * var(--lyric-font-scale, 1));line-height:var(--line-height-sheet);color:var(--ink);white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere;overflow:visible}.line--blank{height:1.25rem}.line__gap{white-space:inherit}.stack{display:inline-block;vertical-align:bottom;white-space:nowrap;min-width:calc(var(--chord-len, 0) * 1.18ch * var(--chord-font-scale, 1))}.stack__chord{display:block;line-height:1.25;font-weight:700;letter-spacing:0;color:var(--chord);white-space:nowrap}.stack__word{display:block;font-weight:400}.line:not(.line--with-chords) .stack__chord{display:none}.line--chord-only .stack__word{display:none}.seg{white-space:inherit}.seg--chord{font-size:calc(1.18em * var(--chord-font-scale, 1));font-weight:800;letter-spacing:.01em;display:inline-block;vertical-align:baseline}.seg--chord-strum-once{color:var(--chord-strum-once);font-style:italic}.seg--ghost{visibility:hidden}.app__search{flex:1;display:flex;align-items:center;position:relative;min-width:0}.app__search-status{font-size:.85rem;color:var(--ink-faint);font-style:italic}.app__search-status--error{color:var(--chord);font-style:normal}.songsearch{width:100%;position:relative}.songsearch__input{width:100%;padding:.5rem .75rem;font:inherit;font-size:.9rem;color:var(--ink);background:var(--bg);border:1px solid var(--rule);border-radius:.4rem;outline:none;transition:border-color .12s ease,box-shadow .12s ease}.songsearch__input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}.songsearch__input::placeholder{color:var(--ink-faint)}.songsearch__listbox{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:20;margin:0;padding:.25rem 0;list-style:none;background:var(--surface);border:1px solid var(--rule);border-radius:.5rem;box-shadow:0 8px 24px #0000001f,0 1px 3px #0000000f;max-height:min(420px,60vh);overflow-y:auto}.songsearch__option{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;font-size:.9rem;line-height:1.3}.songsearch__option--active{background:color-mix(in srgb,var(--accent) 14%,transparent)}.songsearch__option--current{border-left:2px solid var(--accent);padding-left:calc(.75rem - 2px)}.songsearch__option-title{color:var(--ink);font-weight:500;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.songsearch__option-artist{color:var(--ink-muted);font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;min-width:0}.songsearch__empty{padding:.6rem .75rem;color:var(--ink-faint);font-size:.85rem;font-style:italic}.line--speed{display:flex;align-items:center;gap:.4rem;padding:.15rem .5rem;margin:.3rem 0;font-family:var(--font-ui);font-size:.75rem;font-style:italic;color:var(--ink-faint);border-left:2px solid color-mix(in srgb,var(--accent) 35%,transparent);background:color-mix(in srgb,var(--accent) 5%,transparent);border-radius:0 .25rem .25rem 0;-webkit-user-select:none;user-select:none}.line__speed-arrow{font-family:var(--font-mono);color:var(--accent);font-style:normal}.line__speed-label{letter-spacing:.02em}.playback{display:flex;align-items:center;gap:.6rem;font-family:var(--font-ui);flex-wrap:wrap;row-gap:.4rem}.playback__button{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--rule);border-radius:50%;background:var(--bg);color:var(--ink);cursor:pointer;transition:background .12s ease,border-color .12s ease,box-shadow .12s ease;flex-shrink:0}.playback__button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.playback__button:disabled{opacity:.4;cursor:not-allowed}.playback__button svg{fill:currentColor}.playback__button--playing{background:var(--accent);border-color:var(--accent);color:var(--surface)}.playback__button--playing:hover:not(:disabled){color:var(--surface);background:color-mix(in srgb,var(--accent) 85%,black);border-color:color-mix(in srgb,var(--accent) 85%,black)}.playback__slider{display:inline-flex;align-items:center;gap:.4rem;flex:1;min-width:0}.playback__slider-label{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);flex-shrink:0}.playback__slider input[type=range]{flex:1;min-width:80px;max-width:220px;accent-color:var(--accent);cursor:pointer}.playback__slider input[type=range]:disabled{cursor:not-allowed;opacity:.4}.playback__mult-readout{display:inline-flex;align-items:baseline;gap:.05rem;padding:.15rem .35rem;border:1px solid transparent;border-radius:.25rem;background:transparent;color:var(--ink);font-family:var(--font-mono);font-size:.8rem;font-variant-numeric:tabular-nums;cursor:pointer;min-width:3rem;justify-content:flex-end;flex-shrink:0}.playback__mult-readout:hover:not(:disabled){border-color:var(--rule)}.playback__mult-readout:disabled{cursor:default;opacity:.5}.playback__mult-x{color:var(--ink-faint);margin-left:.05rem}.playback__readout{display:inline-flex;align-items:baseline;gap:.2rem;padding:.15rem .4rem;border-radius:.25rem;background:color-mix(in srgb,var(--ink) 5%,transparent);color:var(--ink-muted);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums;flex-shrink:0}.playback__readout--marker{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}.playback__readout-unit{color:var(--ink-faint);font-size:.7rem}.playback__readout--marker .playback__readout-unit{color:color-mix(in srgb,var(--accent) 70%,var(--ink-faint))}.playback__readout-timer{margin-left:.35rem;padding-left:.35rem;border-left:1px solid color-mix(in srgb,var(--accent) 35%,transparent);font-size:.7rem}.app__playhead{position:fixed;left:0;right:0;top:33vh;height:0;border-top:1px dashed color-mix(in srgb,var(--accent) 50%,transparent);pointer-events:none;z-index:5;opacity:0;transition:opacity .2s ease}.app__playhead--visible{opacity:1}@media (max-width: 640px){.app__topbar{padding:.5rem .75rem;gap:.4rem}.app__scroll{padding:1.25rem .75rem 5rem}.line{font-size:calc(.85rem * var(--lyric-font-scale, 1))}.chord-sheet__title{font-size:1.4rem}.playback__readout{font-size:.7rem}}.chordlegend{background:var(--surface);border-bottom:1px solid var(--rule);position:sticky;top:0;z-index:9;flex-shrink:0}.chordlegend__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding-right:.5rem}.chordlegend__toggle{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem 1rem;flex:1 1 auto;background:transparent;border:none;color:var(--ink-faint);font-family:var(--font-ui);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;text-align:left}.chordlegend__toggle:hover{color:var(--ink)}.chordlegend__sort{position:relative;flex:0 0 auto}.chordlegend__sort-button{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .55rem;background:transparent;border:1px solid transparent;border-radius:.35rem;color:var(--ink-faint);font-family:var(--font-ui);font-size:.65rem;letter-spacing:.06em;text-transform:uppercase;cursor:pointer}.chordlegend__sort-button:hover,.chordlegend__sort-button[aria-expanded=true]{color:var(--ink);border-color:var(--rule)}.chordlegend__sort-icon{display:block;flex:0 0 auto}.chordlegend__sort-label{white-space:nowrap}.chordlegend__sort-menu{position:absolute;top:calc(100% + 4px);right:0;margin:0;padding:.25rem;list-style:none;background:var(--surface);border:1px solid var(--rule);border-radius:.4rem;box-shadow:0 6px 18px #00000040;z-index:20;min-width:200px}.chordlegend__sort-item{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;width:100%;padding:.4rem .55rem;background:transparent;border:none;border-radius:.3rem;color:var(--ink);font-family:var(--font-ui);text-align:left;cursor:pointer}.chordlegend__sort-item:hover,.chordlegend__sort-item--active{background:var(--bg)}.chordlegend__sort-item-label{font-size:.78rem;font-weight:600}.chordlegend__sort-item--active .chordlegend__sort-item-label:before{content:"✓";display:inline-block;width:1em;margin-right:.25rem;color:var(--ink)}.chordlegend__sort-item:not(.chordlegend__sort-item--active) .chordlegend__sort-item-label{padding-left:calc(1em + .25rem)}.chordlegend__sort-item-hint{font-size:.65rem;color:var(--ink-faint);padding-left:calc(1em + .25rem)}.chordlegend__chevron{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;transition:transform .15s ease}.chordlegend__chevron--open{transform:rotate(90deg)}.chordlegend__label{display:inline-flex;align-items:baseline;gap:.3rem}.chordlegend__count{color:var(--ink-faint);font-variant-numeric:tabular-nums}.chordlegend__strip{display:flex;gap:.4rem;align-items:flex-start;padding:0 1rem .6rem;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--rule) transparent;flex:1 1 auto;min-width:0}.chordlegend__strip::-webkit-scrollbar{height:6px}.chordlegend__strip::-webkit-scrollbar-track{background:transparent}.chordlegend__strip::-webkit-scrollbar-thumb{background:var(--rule);border-radius:3px}.chordlegend__chip{flex:0 0 auto;display:flex;align-items:center;justify-content:center;padding:.25rem .4rem;border:1px solid var(--rule);border-radius:.4rem;background:var(--bg);color:var(--ink)}.chordlegend__chip--dim{opacity:.42;filter:saturate(.7)}.chordlegend__divider{flex:0 0 auto;align-self:stretch;width:1px;margin:.25rem .4rem;background:var(--rule);border:0}.chorddiagram{display:block;color:var(--ink)}.chorddiagram__name{fill:var(--chord-name-color, var(--ink))}@media (max-width: 640px){.chordlegend__toggle{padding:.3rem .75rem}.chordlegend__strip{width:100%}}.app__shuffle{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--rule);border-radius:.4rem;background:var(--bg);color:var(--ink-muted);cursor:pointer;flex-shrink:0;transition:color .12s ease,border-color .12s ease,background .12s ease,transform .12s ease}.app__shuffle:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.app__shuffle:active:not(:disabled){transform:scale(.94)}.app__shuffle:disabled{opacity:.4;cursor:not-allowed}.app__edit,.app__copy{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 .65rem;border:1px solid var(--rule);border-radius:.4rem;background:var(--bg);color:var(--ink-muted);font:inherit;font-size:.78rem;font-weight:600;letter-spacing:.02em;cursor:pointer;flex-shrink:0;white-space:nowrap;transition:color .12s ease,border-color .12s ease,background .12s ease,transform .12s ease}.app__edit:hover:not(:disabled),.app__copy:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.app__edit:active:not(:disabled),.app__copy:active:not(:disabled){transform:scale(.97)}.app__edit:disabled,.app__copy:disabled{opacity:.4;cursor:not-allowed}.app__edit--active{color:var(--bg);background:var(--accent);border-color:var(--accent)}.app__edit--active:hover:not(:disabled){color:var(--bg);background:var(--accent);border-color:var(--accent);filter:brightness(1.05)}.app__copy--ok{color:var(--bg);background:#2e7d32;border-color:#2e7d32}.app__copy--err{color:var(--bg);background:#c62828;border-color:#c62828}.chord-sheet--editing{outline:1px dashed var(--rule);outline-offset:6px;border-radius:4px}.seg--chord-editable{cursor:grab;touch-action:none;position:relative}.seg--chord-editable:after{content:"";position:absolute;top:-2px;right:-1px;bottom:-2px;left:-1px;border:1px dashed transparent;border-radius:3px;pointer-events:none;transition:border-color .12s ease,background .12s ease}.seg--chord-editable:hover:after{border-color:var(--rule);background:#7f7f7f0f}.seg--chord-dragging{cursor:grabbing}.seg--chord-dragging:after{border-color:var(--accent);background:#7f7f7f1a}.app--editing .stack__chord,.app--editing .seg--chord{user-select:none;-webkit-user-select:none}.app__settings{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--rule);border-radius:.4rem;background:var(--bg);color:var(--ink-muted);cursor:pointer;flex-shrink:0;transition:color .12s ease,border-color .12s ease,transform .12s ease}.app__settings:hover{color:var(--accent);border-color:var(--accent)}.app__settings:active{transform:scale(.95) rotate(20deg)}.settings-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem;animation:settings-fade-in .14s ease-out}@keyframes settings-fade-in{0%{opacity:0}to{opacity:1}}.settings-panel{width:min(420px,100%);max-height:calc(100dvh - 2rem);overflow-y:auto;background:var(--surface);color:var(--ink);border:1px solid var(--rule);border-radius:.6rem;box-shadow:0 20px 60px #00000059;padding:1rem 1.1rem 1.1rem;outline:none;animation:settings-slide-in .18s ease-out}@keyframes settings-slide-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.settings-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.6rem}.settings-panel__title{margin:0;font-size:1rem;font-weight:700;letter-spacing:.01em}.settings-panel__close{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;background:transparent;border:1px solid transparent;border-radius:.35rem;color:var(--ink-muted);cursor:pointer;transition:color .12s ease,border-color .12s ease}.settings-panel__close:hover{color:var(--accent);border-color:var(--rule)}.settings-section{padding:.7rem 0;border-top:1px solid var(--rule)}.settings-section:first-of-type{border-top:none;padding-top:.2rem}.settings-section__title{margin:0 0 .55rem;font-size:.72rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.settings-row{display:grid;grid-template-columns:4.2rem 1fr 2.4rem;align-items:center;gap:.65rem;padding:.3rem 0;font-size:.85rem}.settings-row__label{color:var(--ink);font-weight:500}.settings-row__slider{width:100%;accent-color:var(--accent);cursor:pointer}.settings-row__value{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-muted);text-align:right;font-variant-numeric:tabular-nums}.settings-palettes{display:grid;grid-template-columns:1fr;gap:.4rem}.settings-palette{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.7rem;padding:.45rem .55rem;border:1px solid var(--rule);border-radius:.45rem;background:var(--bg);color:inherit;font:inherit;cursor:pointer;text-align:left;transition:border-color .12s ease,background .12s ease}.settings-palette:hover{border-color:var(--accent)}.settings-palette--selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--bg))}.settings-palette__swatches{display:inline-flex;align-items:center;gap:0;border-radius:.3rem;overflow:hidden;border:1px solid var(--rule)}.settings-palette__chip{display:inline-block;width:14px;height:22px}.settings-palette__meta{display:flex;flex-direction:column;min-width:0}.settings-palette__name{font-size:.85rem;font-weight:600;color:var(--ink)}.settings-palette__desc{font-size:.72rem;color:var(--ink-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-panel__footer{display:flex;justify-content:flex-end;margin-top:.4rem;padding-top:.7rem;border-top:1px solid var(--rule)}.settings-panel__reset{display:inline-flex;align-items:center;height:28px;padding:0 .7rem;border:1px solid var(--rule);border-radius:.4rem;background:var(--bg);color:var(--ink-muted);font:inherit;font-size:.78rem;font-weight:600;cursor:pointer;transition:color .12s ease,border-color .12s ease}.settings-panel__reset:hover{color:var(--accent);border-color:var(--accent)}.app__wheel{float:right;width:180px;max-width:180px;margin:0 0 .75rem 1rem}.chord-wheel{width:100%;height:auto;display:block;user-select:none;-webkit-user-select:none}.chord-wheel__seg{fill:var(--bg);stroke:var(--rule);stroke-width:1;transition:fill .2s ease}.chord-wheel__seg--minor{fill:color-mix(in srgb,var(--bg) 70%,var(--rule))}.chord-wheel__seg--active{stroke:var(--surface);stroke-width:1.2}.chord-wheel__label{font-family:var(--font-ui);font-weight:700;fill:var(--ink-muted);pointer-events:none}.chord-wheel__label--major{font-size:11px}.chord-wheel__label--minor{font-size:9px}.chord-wheel__label--on-fill{fill:#1a1a1a}.chord-wheel__extrusion{stroke:var(--surface);stroke-width:1}.chord-wheel__hub{fill:var(--surface);stroke:var(--rule);stroke-width:1}@media (max-width: 640px){.app__wheel{width:130px;max-width:130px;margin:0 0 .5rem .5rem}}.app__wheel-button{display:block;width:100%;padding:0;margin:0;background:transparent;border:none;border-radius:.4rem;color:inherit;cursor:pointer;outline:none}.app__wheel-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app__wheel-button:hover .chord-wheel,.app__wheel-button:focus-visible .chord-wheel{filter:drop-shadow(0 1px 6px color-mix(in srgb,var(--accent) 35%,transparent))}.wheel-modal__panel{width:min(560px,100%);max-width:100%}.wheel-modal__body{display:flex;align-items:center;justify-content:center;padding:.25rem 0 .5rem;cursor:pointer}.wheel-modal__body .chord-wheel{width:100%;height:auto}
