.library-page{max-width:1200px;margin:0 auto;padding:1.5rem}.library-header{margin-bottom:1.5rem}.library-title-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.library-title{font-size:1.75rem;font-weight:700;color:var(--color-text, #1a1a2e);margin:0}.library-search{margin-bottom:.75rem}.search-input{width:100%;padding:.625rem 1rem;font-size:1rem;border:1.5px solid var(--color-border, #d1d5db);border-radius:8px;background:var(--color-surface, #fff);color:var(--color-text, #1a1a2e);outline:none;transition:border-color .15s;box-sizing:border-box}.search-input:focus{border-color:var(--color-primary, #4f46e5)}.tag-filter-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}.tag-chip{display:inline-flex;align-items:center;padding:.25rem .75rem;font-size:.8125rem;font-weight:500;border-radius:999px;border:1.5px solid var(--color-border, #d1d5db);background:var(--color-surface, #fff);color:var(--color-text-secondary, #6b7280);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.tag-chip:hover{border-color:var(--color-primary, #4f46e5);color:var(--color-primary, #4f46e5)}.tag-chip-active{background:var(--color-primary, #4f46e5);border-color:var(--color-primary, #4f46e5);color:#fff}.tag-chip-active:hover{background:var(--color-primary-dark, #4338ca);color:#fff}.tag-chip-clear{border-style:dashed;color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.tag-chip-clear:hover{background:var(--color-danger, #ef4444);color:#fff}.tag-chip-sm{padding:.125rem .5rem;font-size:.75rem;pointer-events:none}.song-count{font-size:.875rem;color:var(--color-text-secondary, #6b7280);margin:0 0 .5rem}.library-loading{display:flex;flex-direction:column;align-items:center;padding:4rem 0;gap:1rem;color:var(--color-text-secondary, #6b7280)}.spinner{width:36px;height:36px;border:3px solid var(--color-border, #d1d5db);border-top-color:var(--color-primary, #4f46e5);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.library-error{display:flex;flex-direction:column;align-items:center;padding:3rem 0;gap:1rem}.error-message{color:var(--color-danger, #ef4444);font-weight:500}.song-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}@media(max-width:640px){.song-grid{grid-template-columns:1fr}}.song-list-empty{display:flex;flex-direction:column;align-items:center;padding:4rem 0;gap:1.25rem}.empty-message{font-size:1.125rem;color:var(--color-text-secondary, #6b7280);text-align:center}.song-card{background:var(--color-surface, #fff);border:1.5px solid var(--color-border, #d1d5db);border-radius:12px;padding:1rem;cursor:pointer;transition:box-shadow .15s,border-color .15s,transform .1s;outline:none}.song-card:hover{box-shadow:0 4px 16px #0000001a;border-color:var(--color-primary, #4f46e5);transform:translateY(-1px)}.song-card:focus-visible{outline:2px solid var(--color-primary, #4f46e5);outline-offset:2px}.song-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;margin-bottom:.75rem}.song-card-info{flex:1;min-width:0}.song-card-title{font-size:1rem;font-weight:600;color:var(--color-text, #1a1a2e);margin:0 0 .25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-card-artist{font-size:.875rem;color:var(--color-text-secondary, #6b7280);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-card-actions{display:flex;gap:.25rem;flex-shrink:0;opacity:0;transition:opacity .15s}.song-card:hover .song-card-actions,.song-card:focus-within .song-card-actions{opacity:1}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:6px;background:transparent;cursor:pointer;font-size:.875rem;transition:background .15s;padding:0}.btn-icon:hover{background:var(--color-hover, rgba(0, 0, 0, .07))}.btn-icon-danger:hover{background:#ef44441f}.song-card-meta{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.file-type-badge{display:inline-block;padding:.125rem .5rem;font-size:.6875rem;font-weight:700;letter-spacing:.05em;border-radius:4px;text-transform:uppercase}.file-type-gfr{background:#ede9fe;color:#5b21b6}.file-type-pdf{background:#fee2e2;color:#991b1b}.file-type-chordpro{background:#dcfce7;color:#166534}.file-type-txt,.file-type-text{background:#f3f4f6;color:#374151}.song-meta-item{font-size:.8125rem;color:var(--color-text-secondary, #6b7280)}.song-card-tags{display:flex;flex-wrap:wrap;gap:.25rem}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1rem;font-size:.9375rem;font-weight:600;border-radius:8px;border:2px solid transparent;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}.btn-primary{background:var(--color-primary, #4f46e5);color:#fff;border-color:var(--color-primary, #4f46e5)}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark, #4338ca);border-color:var(--color-primary-dark, #4338ca)}.btn-secondary{background:transparent;color:var(--color-text, #1a1a2e);border-color:var(--color-border, #d1d5db)}.btn-secondary:hover:not(:disabled){background:var(--color-hover, rgba(0, 0, 0, .05))}.btn:disabled{opacity:.6;cursor:not-allowed}.modal-backdrop{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}.modal-panel{background:var(--color-surface, #fff);border-radius:16px;width:100%;max-width:520px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #00000040;animation:modal-in .15s ease-out}@keyframes modal-in{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem 0}.modal-title{font-size:1.25rem;font-weight:700;margin:0;color:var(--color-text, #1a1a2e)}.modal-close{color:var(--color-text-secondary, #6b7280)}.modal-footer{display:flex;justify-content:flex-end;gap:.75rem;padding-top:1rem;border-top:1px solid var(--color-border, #d1d5db);margin-top:1rem}.metadata-form{padding:1.25rem 1.5rem 1.5rem}.form-group{display:flex;flex-direction:column;gap:.375rem;margin-bottom:1rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:0}.form-row .form-group{margin-bottom:1rem}.form-label{font-size:.875rem;font-weight:600;color:var(--color-text, #1a1a2e)}.form-input{padding:.5rem .75rem;font-size:.9375rem;border:1.5px solid var(--color-border, #d1d5db);border-radius:8px;background:var(--color-surface, #fff);color:var(--color-text, #1a1a2e);outline:none;transition:border-color .15s}.form-input:focus{border-color:var(--color-primary, #4f46e5)}.form-hint{font-size:.8125rem;color:var(--color-text-secondary, #6b7280);margin:0}.form-hint-info{background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;padding:.5rem .75rem;color:#1d4ed8}.form-error{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:.625rem .875rem;color:#dc2626;font-size:.875rem;margin-bottom:1rem}.gfr-renderer{font-family:Courier New,Courier,monospace;font-size:var(--gfr-font-size, 16px);line-height:1.8;color:#f0f0f0;background:transparent;padding:8px;box-sizing:border-box}.gfr-section-header{font-weight:700;font-size:calc(var(--gfr-font-size, 16px) * .875);text-transform:uppercase;letter-spacing:.1em;color:#c4b5fd;background:#a78bfa14;border-left:3px solid #7c3aed;padding:4px 10px;margin:12px 0 6px;border-radius:0 4px 4px 0}.gfr-section-content{padding-left:4px}.gfr-chord-line{display:flex;flex-wrap:wrap;align-items:flex-end;margin-bottom:4px}.gfr-segment{display:inline-flex;flex-direction:column;align-items:flex-start;margin-right:2px}.gfr-chord{color:#a78bfa;font-weight:700;min-height:1.2em;white-space:pre}.gfr-lyric{color:inherit;white-space:pre}.gfr-tab-line{overflow-x:auto;margin:6px 0;padding:4px 0;font-family:Courier New,Courier,monospace;font-size:calc(var(--gfr-font-size, 16px) * .875)}.gfr-tab-row{white-space:pre;font-family:Courier New,Courier,monospace;font-size:inherit;color:#d1d5db;line-height:1.6}.gfr-comment{display:block;font-style:italic;color:#9ca3af;opacity:.85;margin:4px 0}.gfr-empty{height:.6em;display:block}.gfr-drum-bpm{font-weight:700;color:#a78bfa;font-size:calc(var(--gfr-font-size, 16px) * 1.1);margin-bottom:12px;padding:4px 0}.gfr-drum-section{border-left:3px solid #7c3aed;padding-left:12px;margin-bottom:12px}.gfr-drum-cue{font-size:calc(var(--gfr-font-size, 16px) * .9);color:#9ca3af;opacity:.9;margin:3px 0;padding-left:2px}.gfr-no-content{text-align:center;color:#6b7280;font-style:italic;padding:32px 16px}.editor-page{display:flex;flex-direction:column;height:100vh;overflow:hidden}.editor-page__toolbar{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;background:var(--surface-1, #1e1e2e);border-bottom:1px solid var(--border, #313244);flex-shrink:0}.editor-page__mode-tabs{display:flex;gap:.25rem}.editor-page__mode-tab{padding:.3rem .75rem;border:1px solid var(--border, #313244);border-radius:4px;background:transparent;color:inherit;cursor:pointer;font-size:.875rem}.editor-page__mode-tab--active{background:var(--accent, #cba6f7);color:#1e1e2e;border-color:var(--accent, #cba6f7)}.editor-page__save-btn{margin-left:auto;padding:.35rem 1rem;background:var(--accent, #cba6f7);color:#1e1e2e;border:none;border-radius:4px;cursor:pointer;font-weight:600;font-size:.875rem}.editor-page__save-btn:disabled{opacity:.6;cursor:not-allowed}.editor-page__status{font-size:.75rem;color:var(--text-muted, #6c7086)}.metadata-bar{display:flex;flex-wrap:wrap;gap:.5rem 1rem;padding:.5rem 1rem;background:var(--surface-2, #181825);border-bottom:1px solid var(--border, #313244);flex-shrink:0;align-items:center}.metadata-bar__field{display:flex;align-items:center;gap:.4rem}.metadata-bar__field--required .metadata-bar__label:after{content:" *";color:var(--error, #f38ba8)}.metadata-bar__label{font-size:.75rem;color:var(--text-muted, #6c7086);white-space:nowrap}.metadata-bar__input,.metadata-bar__select{background:var(--surface-1, #1e1e2e);border:1px solid var(--border, #313244);border-radius:4px;color:inherit;font-size:.875rem;padding:.2rem .4rem;min-width:120px}.metadata-bar__input--narrow{min-width:60px;max-width:80px}.metadata-bar__select{min-width:80px}.editor-split{display:flex;flex:1;overflow:hidden;min-height:0}.editor-split__left{flex:1;overflow:auto;border-right:1px solid var(--border, #313244);min-width:0}.editor-split__right{flex:1;overflow:auto;min-width:0;padding:1rem}.chord-sheet-editor{height:100%;min-height:400px}.chord-sheet-editor .cm-editor{height:100%}.chord-sheet-editor .cm-scroller{overflow:auto;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:14px;line-height:1.6}.live-preview{height:100%}.live-preview--empty{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.live-preview__placeholder{color:var(--text-muted, #6c7086);font-style:italic}.transpose-control{display:flex;align-items:center;gap:.4rem;flex-shrink:0}.transpose-control__label{font-size:.75rem;color:var(--text-muted, #6c7086)}.transpose-control__btn{width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;background:var(--surface-1, #1e1e2e);border:1px solid var(--border, #313244);border-radius:4px;cursor:pointer;color:inherit;font-size:1rem;line-height:1}.transpose-control__btn:hover{border-color:var(--accent, #cba6f7)}.transpose-control__value{min-width:2.5rem;text-align:center;font-size:.875rem;font-variant-numeric:tabular-nums}.transpose-control__nashville{display:flex;align-items:center;gap:.3rem;font-size:.75rem;cursor:pointer;margin-left:.5rem}.tab-editor{overflow:auto;padding:1rem;height:100%}.tab-editor__grid{display:grid;border-collapse:collapse;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px}.tab-editor__string-label{padding:0 .5rem;color:var(--text-muted, #6c7086);display:flex;align-items:center;justify-content:center;min-width:1.5rem;font-weight:700}.tab-editor__cell{width:2rem;height:1.8rem;text-align:center;background:var(--surface-1, #1e1e2e);border:1px solid var(--border, #313244);color:inherit;font-family:inherit;font-size:inherit;padding:0}.tab-editor__cell:focus{outline:2px solid var(--accent, #cba6f7);outline-offset:-1px;z-index:1;position:relative}.tab-editor__add-col{margin-top:.5rem;padding:.25rem .75rem;background:transparent;border:1px dashed var(--border, #313244);border-radius:4px;color:var(--text-muted, #6c7086);cursor:pointer;font-size:.75rem}.tab-editor__add-col:hover{border-color:var(--accent, #cba6f7);color:var(--accent, #cba6f7)}@media(max-width:768px){.editor-split{flex-direction:column}.editor-split__left{border-right:none;border-bottom:1px solid var(--border, #313244);min-height:300px;flex:none}.editor-split__right{flex:1;min-height:200px}.metadata-bar{gap:.5rem}}.upgrade-prompt{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.upgrade-prompt__card{background:var(--surface-2, #181825);border:1px solid var(--border, #313244);border-radius:8px;padding:2rem;max-width:400px;text-align:center}.upgrade-prompt__title{margin:0 0 .75rem;color:var(--accent, #cba6f7)}.upgrade-prompt__btn{display:inline-block;margin-top:1rem;padding:.5rem 1.5rem;background:var(--accent, #cba6f7);color:#1e1e2e;border:none;border-radius:4px;cursor:pointer;font-weight:600;text-decoration:none}.setlist-page{padding-top:1rem}.setlist-layout{display:grid;grid-template-columns:280px 1fr;gap:1.5rem;height:calc(100vh - 120px)}@media(max-width:700px){.setlist-layout{grid-template-columns:1fr;height:auto}}.setlist-list-panel{background:#1a1a1a;border:1px solid #2a2a2a;border-radius:8px;padding:1rem;display:flex;flex-direction:column;gap:.75rem;overflow-y:auto}.setlist-panel-header{display:flex;align-items:center;justify-content:space-between}.setlist-panel-header h1{font-size:1.25rem;margin:0}.new-setlist-form{display:flex;flex-direction:column;gap:.5rem}.setlist-name-input{width:100%;padding:.5rem .75rem;background:#0f0f0f;border:1px solid #3a3a3a;border-radius:6px;color:#e8e8e8;font-size:.875rem}.setlist-name-input:focus{outline:none;border-color:#6d6bff}.new-setlist-actions{display:flex;gap:.5rem}.setlist-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.setlist-item{display:flex;align-items:center;justify-content:space-between;padding:.625rem .75rem;border-radius:6px;cursor:pointer;transition:background .1s;border:1px solid transparent}.setlist-item:hover{background:#252525}.setlist-item.active{background:#1e1e3a;border-color:#6d6bff}.setlist-item-info{display:flex;flex-direction:column;gap:.15rem;flex:1;min-width:0}.setlist-item-name{font-size:.875rem;font-weight:500;color:#e8e8e8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.setlist-item-count{font-size:.75rem;color:#888}.setlist-builder-panel{background:#1a1a1a;border:1px solid #2a2a2a;border-radius:8px;padding:1.25rem;overflow-y:auto}.setlist-builder-empty{display:flex;align-items:center;justify-content:center;height:100%;color:#666;font-size:.9rem}.setlist-builder{display:flex;flex-direction:column;gap:1rem}.setlist-builder-header{display:flex;align-items:baseline;gap:.75rem}.setlist-builder-header h2{margin:0;font-size:1.25rem}.song-count{font-size:.8rem;color:#888}.setlist-songs-container{display:flex;flex-direction:column;gap:.25rem}.setlist-song-row{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;background:#0f0f0f;border:1px solid #2a2a2a;border-radius:6px;cursor:default;user-select:none}.setlist-song-row:hover{border-color:#3a3a3a}.setlist-song-row.sortable-ghost{opacity:.4;background:#1e1e3a}.setlist-song-row.sortable-chosen{background:#1e1e3a;border-color:#6d6bff}.drag-handle{color:#555;cursor:grab;font-size:1rem;flex-shrink:0;padding:0 .25rem}.drag-handle:active{cursor:grabbing}.setlist-song-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}.setlist-song-title{font-size:.875rem;font-weight:500;color:#e8e8e8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.setlist-song-artist{font-size:.75rem;color:#888;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.setlist-song-bpm{flex-shrink:0}.bpm-override-input{width:64px;padding:.25rem .4rem;background:#1a1a1a;border:1px solid #3a3a3a;border-radius:4px;color:#e8e8e8;font-size:.8rem;text-align:center}.bpm-override-input:focus{outline:none;border-color:#6d6bff}.btn-icon{background:none;border:none;cursor:pointer;color:#666;font-size:.9rem;padding:.25rem;border-radius:4px;line-height:1;flex-shrink:0;transition:color .15s,background .15s}.btn-icon:hover{color:#e8e8e8;background:#2a2a2a}.remove-song-btn:hover{color:#ff6b6b}.delete-setlist-btn{opacity:0;transition:opacity .15s}.setlist-item:hover .delete-setlist-btn,.setlist-item.active .delete-setlist-btn{opacity:1}.add-song-section{margin-top:.5rem}.add-song-dropdown{background:#0f0f0f;border:1px solid #3a3a3a;border-radius:8px;overflow:hidden}.add-song-dropdown-header{display:flex;align-items:center;justify-content:space-between;padding:.625rem .75rem;background:#1a1a1a;border-bottom:1px solid #2a2a2a;font-size:.875rem;font-weight:500;color:#ccc}.add-song-list{list-style:none;margin:0;padding:.25rem 0;max-height:240px;overflow-y:auto}.add-song-item{display:flex;flex-direction:column;gap:.1rem;width:100%;padding:.5rem .75rem;background:none;border:none;cursor:pointer;text-align:left;transition:background .1s}.add-song-item:hover{background:#1e1e3a}.song-item-title{font-size:.875rem;color:#e8e8e8}.song-item-artist{font-size:.75rem;color:#888}.no-songs-available{padding:.75rem;color:#666;font-size:.875rem;text-align:center}.setlist-loading{color:#666;font-size:.875rem;text-align:center;padding:1rem 0}.setlist-error{color:#ff6b6b;font-size:.8rem;padding:.5rem;background:#2a1a1a;border-radius:4px;border:1px solid #5a2a2a}.setlist-empty-state{color:#666;font-size:.875rem;padding:1.5rem 0;text-align:center}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:#0f0f0f;color:#e8e8e8}#app{min-height:100vh;display:flex;flex-direction:column}.page{flex:1;padding:1.5rem;max-width:1200px;margin:0 auto;width:100%}.page.loading{display:flex;align-items:center;justify-content:center;color:#666}h1{font-size:1.75rem;font-weight:600;margin:0 0 1rem;color:#f0f0f0}h2{font-size:1.25rem;font-weight:500;margin:0 0 .75rem;color:#d0d0d0}.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:background .15s,opacity .15s}.btn-primary{background:#6d6bff;color:#fff}.btn-primary:hover{background:#5a58e0}.btn-secondary{background:#2a2a2a;color:#d0d0d0;border:1px solid #3a3a3a}.btn-secondary:hover{background:#333}.navbar{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:#1a1a1a;border-bottom:1px solid #2a2a2a}.app-navbar{position:sticky;top:0;z-index:100}.navbar-brand{font-size:1rem;font-weight:700;color:#6d6bff;letter-spacing:-.02em;flex-shrink:0}.nav-links{display:flex;align-items:center;gap:.25rem;flex:1;padding-left:1rem}.nav-link{padding:.375rem .75rem;border-radius:6px;font-size:.875rem;font-weight:500;color:#888;text-decoration:none;transition:color .15s,background .15s}.nav-link:hover,.nav-link.active{color:#e8e8e8;background:#252525}.nav-user{display:flex;align-items:center;gap:.75rem;flex-shrink:0}.nav-user-name{font-size:.8rem;color:#888;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav-signout{padding:.3rem .75rem;font-size:.8rem}.upgrade-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.upgrade-card{background:#1a1a1a;border:1px solid #3a3a3a;border-radius:12px;padding:2rem;max-width:420px;width:90%;text-align:center;display:flex;flex-direction:column;align-items:center;gap:1rem}.upgrade-icon{font-size:2.5rem}.upgrade-title{font-size:1.25rem;font-weight:600;color:#f0f0f0;margin:0}.upgrade-message{font-size:.9rem;color:#ccc;margin:0}.upgrade-sub{font-size:.875rem;color:#888;margin:0}.upgrade-actions{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:center;margin-top:.5rem}.upgrade-cta{min-width:140px}.card{background:#1a1a1a;border:1px solid #2a2a2a;border-radius:8px;padding:1rem;margin-bottom:.75rem}
