*,*:before,*:after{box-sizing:border-box}:root{--bg-app: #f5f5f5;--text-main: #111111;--surface: #ffffff;--surface-muted: #f7f7f7;--surface-elevated: #ffffff;--border-subtle: #e5e7eb;--border-input: #d1d5db;--text-muted: #374151;--text-soft: #4b5563;--focus-outline: #bfdbfe;--focus-border: #60a5fa;--filter-btn-bg: #e0ecff;--filter-btn-border: #7aa2ff;--filter-btn-text: #1e40af;--chord-color: #b91c1c;--chord-color-strong: #d00000;--chord-bg: rgba(185, 28, 28, .08);--chord-border: rgba(185, 28, 28, .18);--chord-border-strong: rgba(185, 28, 28, .45);--chord-focus-bg: rgba(185, 28, 28, .1);--chord-focus-outline: rgba(185, 28, 28, .5);--navbar-bg: #1e1e1e;--navbar-text: #ffffff;--navbar-logout-bg: #cc0000;--navbar-logout-hover-bg: #990000;--navbar-toggle-bg: #2f3640;--navbar-toggle-hover-bg: #404b57;--navbar-toggle-border: #5a6778;--navbar-toggle-text: #f3f4f6}:root[data-theme=dark]{--bg-app: #111827;--text-main: #f3f4f6;--surface: #1f2937;--surface-muted: #111827;--surface-elevated: #1f2937;--border-subtle: #374151;--border-input: #4b5563;--text-muted: #d1d5db;--text-soft: #c4c9d4;--focus-outline: #1d4ed8;--focus-border: #3b82f6;--filter-btn-bg: #1e3a8a;--filter-btn-border: #60a5fa;--filter-btn-text: #dbeafe;--chord-color: #D4624A;--chord-color-strong: #D4624A;--chord-bg: rgba(212, 98, 74, .12);--chord-border: rgba(212, 98, 74, .24);--chord-border-strong: rgba(212, 98, 74, .45);--chord-focus-bg: rgba(212, 98, 74, .14);--chord-focus-outline: rgba(212, 98, 74, .52);--navbar-bg: #0b1220;--navbar-text: #f9fafb;--navbar-logout-bg: #b91c1c;--navbar-logout-hover-bg: #991b1b;--navbar-toggle-bg: #243041;--navbar-toggle-hover-bg: #314156;--navbar-toggle-border: #4b5f79;--navbar-toggle-text: #e5e7eb}html,body,#root{margin:0;padding:0;height:100%}body{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5;background-color:var(--bg-app);color:var(--text-main);transition:background-color .2s ease,color .2s ease}.page{width:min(100% - 2rem,960px);margin:0 auto;padding:1rem;background-color:var(--surface);border-radius:12px}.page-form{width:min(100% - 2rem,640px)}.song-input-method-card{background:var(--surface-elevated);border:1px solid var(--border-subtle);border-radius:12px;box-shadow:0 8px 22px #1118270f;margin-top:1rem;padding:1rem}.song-input-method-card h3{font-size:1rem;margin:0 0 .85rem}.home-page{display:flex;flex-direction:column;gap:.8rem;height:calc(100dvh - 64px);min-height:0;overflow:hidden}.home-page .header-row,.home-page .search-filter-row{flex:0 0 auto}.song-list-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:.25rem;scrollbar-color:rgba(100,116,139,.7) transparent;scrollbar-gutter:stable;scrollbar-width:thin}.song-list-scroll::-webkit-scrollbar{width:.55rem}.song-list-scroll::-webkit-scrollbar-thumb{background:#64748bb3;border-radius:999px}.song-list-scroll::-webkit-scrollbar-track{background:transparent}.auth-page{min-height:calc(100dvh - 2rem);display:grid;place-items:center;padding:1rem}.auth-card{width:min(100%,420px);background:var(--surface-elevated);border:1px solid var(--border-subtle);border-radius:12px;padding:1.2rem;box-shadow:0 10px 28px #11182714}.auth-title{margin:0 0 1rem}.auth-subtitle{margin:-.65rem 0 .35rem;color:var(--text-soft);font-size:.92rem}.stack-form{display:flex;flex-direction:column;gap:.9rem}.form-field{display:flex;flex-direction:column;gap:.3rem}.form-field label{font-size:.92rem;color:var(--text-muted)}.required-asterisk{color:#dc2626;font-weight:700}.text-input{width:100%;border:1px solid var(--border-input);border-radius:8px;padding:.5rem .65rem;font-size:.96rem;background-color:var(--surface);color:var(--text-main)}.text-input:focus{outline:2px solid var(--focus-outline);border-color:var(--focus-border)}.text-input.input-error{border-color:#dc2626;background-color:#fef2f2}.text-input.input-error:focus{outline:2px solid #fecaca;border-color:#dc2626}.file-hint{color:#15803d;margin:.25rem 0 0}.field-hint{color:var(--text-soft);font-size:.85rem;margin:0}.field-hint-error{color:#b91c1c}.button-row{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap}.btn-confirm{background-color:#28a745}.btn-neutral{background-color:#4b5563}.docx-import-button{align-items:center;background-color:#007bff;border-radius:8px;display:inline-flex;font-size:.96rem;justify-content:center;min-height:calc(1.96rem + 2px);padding:.5rem .65rem;width:100%}.status-error{color:#b00020;margin:0}.status-success{color:#0f766e;margin:0}.auth-switch-text{margin:.2rem 0 0;text-align:center;font-size:.92rem;color:var(--text-muted)}.auth-switch-link{margin-left:.35rem;background:none;border:none;padding:0;color:#007bff;font:inherit;cursor:pointer;text-decoration:underline}.auth-switch-link:hover,.auth-switch-link:focus-visible{color:#0056b3}.profile-grid{display:grid;grid-template-columns:minmax(100px,auto) 1fr;gap:.6rem 1rem}.profile-label{font-weight:700}.song-meta-grid{display:grid;gap:.6rem;grid-template-columns:repeat(3,minmax(0,1fr));margin-bottom:1rem}.song-meta-columns{background:var(--surface-muted);border:1px solid var(--border-subtle);border-radius:8px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.2rem;margin:0 0 1rem;padding:.75rem .85rem;text-indent:0}.song-meta-column{min-width:0}.song-meta-column:first-child{padding-left:.89cm}.song-meta-item{margin:0 0 .45rem;min-height:3.15rem;text-indent:0}.song-meta-item-label{display:block;font-size:.84rem;font-weight:700;line-height:1.05;overflow-wrap:anywhere;padding:0}.song-meta-item-value{display:block;font-size:.84rem;line-height:1.05;min-height:1rem;overflow-wrap:anywhere;padding:.18rem 0 0;text-indent:0}.song-meta-field{background:var(--surface-muted);border:1px solid var(--border-subtle);border-radius:8px;margin:0;padding:.55rem .65rem}.song-meta-field strong{display:block;font-size:.82rem;color:var(--text-soft)}.song-meta-value{display:block;margin-top:.2rem}.meta-number-input{width:8rem;margin-top:.1rem}.song-meta-key-inputs{display:inline-flex;gap:.5rem}.song-meta-field .meta-number-input{margin-top:.25rem;max-width:none;width:100%}.song-meta-field select.text-input{width:100%}.header-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:1rem}.header-actions{display:flex;gap:.5rem;align-items:center}.admin-section-header{margin-top:1.5rem}.admin-select{min-width:14rem}.text-box{background:var(--surface-muted);border:1px solid var(--border-subtle);border-radius:8px;padding:.75rem 1rem;margin-top:1rem;overflow-x:auto}.line-wrapper{display:flex;align-items:flex-start;gap:1rem;margin-bottom:8px}.line-number{width:2rem;text-align:right;font-family:system-ui,sans-serif;font-size:.9rem;color:var(--text-soft);-webkit-user-select:none;user-select:none;flex-shrink:0;margin-top:1.25rem}.pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre;margin:0;line-height:1.25}.textarea-chords{width:100%;min-height:1.8rem;font-family:inherit;font-size:.95rem;padding:4px 6px;border-radius:4px;border:1px solid var(--border-input);resize:vertical;background-color:var(--surface);color:var(--text-main)}.chord-hit{color:var(--chord-color-strong)}.no-margin{margin:0}.primary-button{color:#fff;border:none;border-radius:4px;padding:6px 12px;cursor:pointer;font-weight:500}.primary-button:disabled{opacity:.7;cursor:default}.btn-edit{background-color:#007bff}.btn-save{background-color:#28a745}.btn-export{background-color:#17a2b8}.is-saving{opacity:.7;cursor:default}.song-item-btn{background:none;border:none;padding:0;margin:0;color:inherit;text-align:left;cursor:pointer;font-size:1rem;width:100%;font-family:inherit;min-width:0}.song-item-btn:hover,.song-item-btn:focus{text-decoration:underline;outline:none}.song-list{list-style:none;margin:0;padding:0}.song-item{display:flex;align-items:center;gap:.75rem;border-bottom:1px solid var(--border-subtle);padding:.4rem 0}.song-item-content{display:flex;flex-direction:column;gap:.2rem;min-width:0}.song-main-row{display:flex;align-items:baseline;gap:.75rem;min-width:0;white-space:nowrap}.song-main-text{display:block;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.song-main-number{flex:0 0 auto;margin-left:auto;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--text-soft);font-weight:600}.song-tags-row{display:flex;flex-wrap:nowrap;gap:.35rem;margin-top:.2rem;overflow:hidden;min-width:0}.song-tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.8rem;font-weight:600;vertical-align:middle;white-space:nowrap;overflow-wrap:normal;word-break:keep-all;border:1px solid rgba(17,24,39,.22);box-shadow:inset 0 -1px #fff3}.song-tag-title{background-color:#334155;color:#f8fafc}.song-tag-running-number{background-color:#7c3aed;color:#fff}.song-tag-album{background-color:#d97706;color:#fff}.song-tag-bpm{background-color:#2563eb;color:#fff}.song-tag-capo{background-color:#16a34a;color:#fff}.song-tag-pending{background-color:#facc15;color:#fff}.song-tag-language{background-color:#dc2626;color:#fff}.song-tag-cadence{background-color:#65a30d;color:#fff}.song-tag-year{background-color:#0891b2;color:#fff}.song-tag-time-signature{background-color:#db2777;color:#fff}.song-tag-interpret{background-color:#b45309;color:#fff}.song-tag-interpret-version{background-color:#4338ca;color:#fff}.song-tag-lyricist{background-color:#ea580c;color:#fff}.song-tag-composer{background-color:#0f766e;color:#fff}.song-tag-producer{background-color:#a21caf;color:#fff}.song-tag-key{background-color:#111827;color:#fff}.song-tag-play{background-color:#be123c;color:#fff}.song-tag-genre{background-color:#14532d;color:#fff}.song-item-actions{margin-left:auto;display:flex;gap:.4rem;flex-shrink:0}.song-small-btn{border:none;border-radius:4px;color:#fff;font-size:.75rem;padding:4px 7px;cursor:pointer;white-space:nowrap}.icon-only-btn{align-items:center;display:inline-flex;justify-content:center;min-width:2rem}.song-action-icon{display:block;height:.95rem;width:.95rem}.song-small-btn:disabled{opacity:.7;cursor:default}.table-wrap{width:100%;overflow-x:auto}.admin-table{width:100%;border-collapse:collapse;min-width:640px}.admin-table th,.admin-table td{border-bottom:1px solid var(--border-subtle);padding:.55rem .6rem;text-align:left;vertical-align:middle}.admin-table th{font-size:.9rem;color:var(--text-muted)}.btn-overwrite{background-color:#0d9488}.btn-delete{background-color:#dc2626}.search-input{width:100%;padding:8px 12px;margin:12px 0;border:1px solid var(--border-input);border-radius:8px;font-size:1rem;background-color:var(--surface);color:var(--text-main);outline:none;transition:border-color .2s}.search-input:focus{border-color:var(--focus-border)}.song-lists-layout{display:grid;gap:1rem;grid-template-columns:minmax(220px,300px) minmax(0,1fr);margin-top:.8rem}.song-lists-sidebar{border:1px solid var(--border-subtle);border-radius:10px;padding:.6rem;background:var(--surface-muted)}.song-list-folder-create{display:grid;gap:.45rem;grid-template-columns:minmax(0,1fr) auto;margin-bottom:.75rem}.song-list-folder-create .primary-button{white-space:nowrap}.song-list-folder-group-title{color:var(--text-muted);font-size:.82rem;font-weight:700;margin:.75rem 0 .35rem;text-transform:uppercase}.song-list-folder-list{display:grid;gap:.35rem;list-style:none;margin:0;padding:0}.song-list-folder{display:grid;gap:.35rem}.song-list-folder-toggle{align-items:center;background:var(--surface);border:1px solid var(--border-subtle);border-radius:8px;color:inherit;cursor:pointer;display:grid;gap:.35rem;grid-template-columns:auto minmax(0,1fr);padding:.48rem .55rem;text-align:left;width:100%}.song-list-folder-toggle.is-open{background:#3b82f61f;border-color:#3b82f659}.song-list-folder-body,.song-list-folder-items{display:grid;gap:.35rem}.song-list-folder-items{list-style:none;margin:0;padding:0 0 0 .7rem}.song-list-folder-add-list{background:transparent;border:1px dashed var(--border-input);border-radius:7px;color:var(--text-main);cursor:pointer;font:inherit;padding:.42rem .5rem;text-align:left}.song-list-folder-empty,.song-list-folder-placeholder{color:var(--text-soft);font-size:.86rem;margin:0}.song-list-folder-placeholder{border:1px dashed var(--border-subtle);border-radius:8px;padding:.42rem .55rem}.song-lists-list{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}.song-lists-item{border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface);padding:.45rem}.song-lists-item-main{align-items:flex-start;background:transparent;border:none;color:inherit;cursor:pointer;display:grid;gap:.15rem;padding:.15rem;text-align:left;width:100%}.song-lists-item-main.is-active{background:#3b82f61f;border-radius:6px}.song-lists-item-main span{color:var(--text-soft);font-size:.82rem}.song-lists-item-actions{display:flex;gap:.35rem;margin-top:.45rem}.song-lists-content{border:1px solid var(--border-subtle);border-radius:10px;padding:.8rem;background:var(--surface);min-height:14rem}.song-lists-song-rows{margin:.5rem 0 0;padding:0;list-style:none;display:grid;gap:.35rem}.song-lists-song-link{align-items:start;background:none;border:none;color:inherit;cursor:pointer;display:grid;gap:.8rem;grid-template-columns:minmax(0,1fr) auto;font:inherit;line-height:1.3;padding:.2rem 0;text-align:left;text-decoration:underline;width:100%}.song-lists-song-title{min-width:0;overflow-wrap:anywhere;white-space:normal}.song-lists-song-number{color:var(--text-soft);font-variant-numeric:tabular-nums;font-weight:600;text-align:right;white-space:nowrap}.song-list-editor{display:grid;gap:.8rem}.song-list-add-row{display:grid;gap:.5rem;grid-template-columns:minmax(0,1fr) auto}.song-list-editor-rows{margin:0;padding-left:1.1rem;display:grid;gap:.45rem}.song-list-editor-rows li{align-items:center;display:flex;gap:.7rem;justify-content:space-between}.song-list-editor-actions{display:flex;gap:.35rem;flex-shrink:0}.search-filter-row{display:flex;align-items:stretch;gap:.5rem;margin:12px 0}.search-filter-row .search-input{margin:0;flex:1;min-width:0}.filter-popup-wrapper{position:relative;flex-shrink:0;display:flex}.filter-toggle-btn{border:1px solid var(--filter-btn-border);background:var(--filter-btn-bg);color:var(--filter-btn-text);border-radius:8px;width:44px;min-height:42px;height:100%;padding:0;font-size:.95rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.filter-toggle-icon{width:20px;height:20px}.filter-toggle-btn.has-active-filters{border-color:#0d9488;color:#0f766e;background:#f0fdfa}.filter-popup{position:absolute;top:calc(100% + 8px);right:0;width:min(280px,85vw);background:var(--surface-elevated);border:1px solid var(--border-input);border-radius:10px;box-shadow:0 10px 25px #00000024;padding:.7rem;z-index:20}.filter-label{display:block;font-size:.8rem;color:var(--text-soft);margin-bottom:.2rem}.filter-control{width:100%;border:1px solid var(--border-input);border-radius:6px;padding:.45rem .55rem;margin-bottom:.55rem;font-size:.92rem;background:var(--surface);color:var(--text-main)}.filter-reset-btn{width:100%;margin-top:.2rem;border:1px solid var(--border-input);border-radius:6px;background:var(--surface-muted);color:var(--text-main);padding:.45rem .6rem;cursor:pointer}.filter-reset-btn:disabled{opacity:.6;cursor:default}.genre-checkbox-grid{display:grid;gap:.85rem;border:1px solid var(--border-subtle);border-radius:8px;padding:.6rem;background:var(--surface-muted)}.genre-checkbox-group{display:grid;gap:.4rem}.genre-checkbox-group h4{color:var(--text-muted);font-size:.86rem;margin:0}.genre-checkbox-group-options,.song-list-checkbox-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem .7rem}.song-list-checkbox-grid{border:1px solid var(--border-subtle);border-radius:8px;padding:.6rem;background:var(--surface-muted)}.genre-checkbox-item,.song-list-checkbox-item{display:inline-flex;align-items:center;gap:.4rem;min-width:0;font-size:.92rem;color:var(--text-main)}.genre-checkbox-item input[type=checkbox],.song-list-checkbox-item input[type=checkbox]{margin:0}@media(max-width:640px){.home-page{height:calc(100dvh - 132px)}.search-filter-row{align-items:stretch}.filter-toggle-btn{min-width:44px;min-height:42px}}.offline-banner{background:#fff4e5;color:#8a4b08;border:1px solid #f0c36d;border-radius:8px;padding:.6rem .8rem;margin-bottom:.8rem}.line-wrapper-word{margin-bottom:1rem;display:block}.line-chords-word{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.95rem;margin:0;white-space:pre;line-height:1.2;color:var(--chord-color-strong);font-weight:600}.text-box .line-chords-word{color:var(--chord-color-strong)}.line-text-word{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:1rem;margin:0;white-space:pre-wrap;line-height:1.6;word-wrap:break-word}.html-preview-page{width:min(100% - 2rem,1200px)}.html-preview-wrap{display:flex;justify-content:center}.html-preview-frame{width:min(100%,1080px);height:82dvh;border:1px solid var(--border-input);border-radius:12px;background:var(--surface)}@media(max-width:1024px){.page{width:min(100% - 1.5rem,860px)}.song-meta-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.song-meta-columns{gap:.8rem}}@media(max-width:768px){.page,.page-form{width:calc(100% - 1rem);padding:.85rem}.song-item{align-items:flex-start;gap:.5rem}.song-item-actions{margin-left:0}.song-tag{margin-top:.2rem}.song-tags-row{overflow-x:auto;padding-bottom:.15rem}.line-wrapper{gap:.55rem}.line-number{width:1.5rem}.html-preview-page{width:calc(100% - 1rem)}.html-preview-frame{height:76dvh}.song-lists-layout,.song-list-add-row{grid-template-columns:1fr}}@media(max-width:640px){.auth-page{align-items:flex-start;padding:.75rem}.auth-card{width:100%;padding:1rem}.header-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}.song-item{flex-direction:column}.song-item-actions{width:100%;justify-content:flex-end}.genre-checkbox-group-options,.song-list-checkbox-grid{grid-template-columns:1fr}.meta-number-input{width:100%;max-width:10rem}.song-meta-grid{grid-template-columns:1fr}.song-meta-columns{gap:.45rem;padding:.6rem}.song-meta-column:first-child{padding-left:0}.song-meta-item-label,.song-meta-item-value{font-size:.82rem}.button-row{width:100%}.html-preview-frame{height:72dvh}}.lyrics-editor{display:grid;gap:0;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface);overflow:visible}.lyrics-editor-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border-subtle);background:var(--surface-muted);padding:.65rem .75rem}.lyrics-editor-mode-indicator{border:1px solid var(--border-subtle);border-radius:999px;background:var(--surface);color:var(--text-soft);font-size:.82rem;font-weight:600;line-height:1;padding:.42rem .65rem}.lyrics-editor-mode-indicator.is-active{border-color:var(--chord-border-strong);background:var(--chord-bg);color:var(--chord-color)}.lyrics-mode-button{min-width:9.5rem}.lyrics-toolbar-actions{align-items:center;display:flex;flex-wrap:wrap;gap:.55rem;justify-content:flex-end}.lyrics-songpart-menu-wrap{position:relative}.lyrics-songpart-menu{background:var(--surface-elevated);border:1px solid var(--border-subtle);border-radius:8px;box-shadow:0 16px 38px #0f172a33;display:grid;gap:.5rem;min-width:min(16rem,90vw);padding:.6rem;position:absolute;right:0;top:calc(100% + .35rem);z-index:14}.lyrics-songpart-menu-actions{display:flex;gap:.45rem;justify-content:flex-end}.lyrics-editor-import{display:grid;gap:.45rem;padding:.75rem}.lyrics-editor-readonly{margin-top:1rem;max-width:100%;overflow-x:auto}.song-detail-page{padding-bottom:calc(4.5rem + env(safe-area-inset-bottom,0px))}.song-lyrics-footer{align-items:center;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172ae6;border-top:1px solid rgba(255,255,255,.16);bottom:0;color:#fff;display:grid;gap:.55rem;grid-template-columns:repeat(4,minmax(0,1fr));left:0;overflow-x:auto;padding:.45rem max(.8rem,env(safe-area-inset-left,0px)) calc(.45rem + env(safe-area-inset-bottom,0px)) max(.8rem,env(safe-area-inset-right,0px));position:fixed;right:0;transform:translateZ(0);z-index:1000}.song-footer-btn{background:#ffffff21;border:1px solid rgba(255,255,255,.22);border-radius:999px;color:#fff;cursor:pointer;font-size:.88rem;font-weight:600;align-items:center;display:inline-flex;flex-shrink:0;min-height:2.1rem;justify-self:center;min-width:4.8rem;justify-content:center;padding:.4rem .75rem;touch-action:manipulation}.song-footer-icon-btn{min-width:2.1rem;padding:.4rem;width:2.1rem}.song-footer-btn:disabled{cursor:not-allowed;opacity:.45}.song-footer-fullscreen-btn.is-active{background:#0050a485;border-color:#ffffff4d}.song-footer-scroll-btn.is-active{background:#1e66447a;border-color:#ffffff4d}.song-footer-tempo-controls{align-items:center;display:flex;flex-shrink:0;gap:.4rem;justify-content:center;justify-self:center;min-width:0}.song-footer-control-label{font-size:.82rem;font-weight:700}.song-footer-control-row{align-items:center;display:flex;gap:.4rem}.song-footer-step-btn{align-items:center;background:#ffffff21;border:1px solid rgba(255,255,255,.22);border-radius:999px;color:#fff;cursor:pointer;display:inline-flex;font-size:1.12rem;font-weight:700;height:2.1rem;justify-content:center;line-height:1;padding:0;touch-action:manipulation;width:2.1rem}.song-footer-step-btn:disabled{cursor:default;opacity:.45}.song-footer-control-value{display:inline-block;font-size:.88rem;font-variant-numeric:tabular-nums;font-weight:700;min-width:2.85rem;text-align:center}@media(max-width:640px){.song-detail-page{padding-bottom:calc(5.8rem + env(safe-area-inset-bottom,0px))}.lyrics-chord-surface{--lyrics-base-font-size: .86rem;padding-left:.55rem;padding-right:.55rem}.lyrics-editor-textline{column-gap:.55rem;grid-template-columns:2.3rem minmax(0,1fr)}.lyrics-readonly-title{margin-left:2.85rem}.song-lyrics-footer{gap:.35rem;padding-left:.45rem;padding-right:.45rem}.song-footer-btn{font-size:.74rem;min-width:4.2rem;padding-left:.5rem;padding-right:.5rem}.song-footer-icon-btn{min-width:2rem;padding:.35rem;width:2rem}.song-footer-tempo-controls{gap:.35rem}.song-footer-control-label{display:none}.song-footer-step-btn{height:2rem;width:2rem}.song-footer-control-value{font-size:.78rem;min-width:2.45rem}}.lyrics-editor-fulltext .textarea-chords{min-height:20rem}.lyrics-chord-surface{--lyrics-char-width: 1ch;--lyrics-base-font-size: .95rem;border-color:var(--border-subtle);background-color:var(--surface);color:var(--text-main);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--lyrics-base-font-size);line-height:1.35;max-height:42rem;overflow:auto;padding:1rem .85rem 1.25rem;resize:vertical;white-space:pre}.lyrics-chord-surface.is-chord-mode{border-color:var(--chord-border-strong);box-shadow:0 0 0 3px var(--chord-bg)}.lyrics-chord-surface-readonly{max-height:none;max-width:100%;overflow-x:auto;overflow-y:visible;resize:none}.lyrics-readonly-title{font-size:1.12em;font-weight:700;margin:0 0 .85rem 3.85rem;min-width:max-content;white-space:pre}.lyrics-editor-textline{display:grid;grid-template-columns:3rem minmax(0,1fr);column-gap:.85rem;min-height:2.75rem;min-width:100%;padding:.1rem 0}.lyrics-editor-textline-readonly.is-after-strophe-end{margin-top:.85rem}.lyrics-line-number-static{align-self:end;color:var(--text-soft);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem;line-height:1.35;opacity:.48;padding-bottom:.25rem;text-align:right;-webkit-user-select:none;user-select:none}.lyrics-line-number-static.is-song-part-line{opacity:.22}.lyrics-line-number-static.is-strophe-number{color:inherit;opacity:1}.lyrics-line-stack{--lyrics-chord-rows: 1;--lyrics-chord-row-height: 1.22rem;display:grid;grid-template-rows:calc(var(--lyrics-chord-rows) * var(--lyrics-chord-row-height)) 1.35rem;min-width:0;position:relative}.lyrics-line-readonly{color:inherit;font:inherit;margin:0;min-height:1.35rem;white-space:pre}.lyrics-line-readonly-chords{color:var(--chord-color);font-weight:700;line-height:1.22rem;min-height:1.22rem}.lyrics-line-readonly-text{line-height:1.35rem}.lyrics-chord-layer,.lyrics-text-layer{min-width:max-content;position:relative}.lyrics-chord-marker{--lyrics-chord-pointer-offset: .55ch;background:var(--chord-bg);border:1px solid var(--chord-border);border-radius:4px;color:var(--chord-color);font-size:.74rem;font-weight:700;line-height:1;padding:.08rem .22rem;pointer-events:none;position:absolute;white-space:nowrap;z-index:2}.lyrics-chord-marker:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--chord-border-strong);content:"";left:var(--lyrics-chord-pointer-offset);position:absolute;top:calc(100% + .08rem)}.lyrics-text-layer{align-self:start;line-height:1.35}.lyrics-text-layer.is-refrain-underlined .lyrics-line-editable,.lyrics-text-layer.is-refrain-underlined .lyrics-editor-chars,.lyrics-text-layer.is-refrain-underlined .lyrics-line-readonly-text,.lyrics-text-layer.is-refrain-underlined .lyrics-char-btn{text-decoration:underline;text-underline-offset:.14em;text-decoration-thickness:.08em}.lyrics-text-layer.is-refrain-emphasized .lyrics-line-editable,.lyrics-text-layer.is-refrain-emphasized .lyrics-editor-chars,.lyrics-text-layer.is-refrain-emphasized .lyrics-line-readonly-text,.lyrics-text-layer.is-refrain-emphasized .lyrics-char-btn{font-weight:700}.lyrics-text-layer.is-songpart-display{color:#0050a4}.lyrics-text-layer.is-instrumental-songpart{color:#d4624a}.lyrics-text-layer.is-background-content .lyrics-line-editable,.lyrics-text-layer.is-background-content .lyrics-editor-chars,.lyrics-text-layer.is-background-content .lyrics-line-readonly-text,.lyrics-text-layer.is-background-content .lyrics-char-btn{color:#6b7280;text-decoration:underline;text-underline-offset:.14em;text-decoration-thickness:.08em}.lyrics-line-editable,.lyrics-editor-chars{font:inherit;letter-spacing:0;min-height:1.35rem;min-width:1ch;outline:none;position:relative;white-space:pre}.lyrics-line-editable:focus{background:#0f172a09;box-shadow:inset 0 -1px #0f172a1f}.lyrics-line-editable.is-readonly-songpart{background:#0f172a0a;cursor:default}.lyrics-editor-chars{display:inline-flex}.lyrics-char-wrap{align-items:flex-start;display:inline-flex;position:relative}.lyrics-char-btn{background:transparent;border:0;color:inherit;cursor:crosshair;font:inherit;line-height:1.35;margin:0;width:var(--lyrics-char-width);min-width:var(--lyrics-char-width);outline:none;padding:0;text-align:left}.lyrics-empty-line{display:inline-block;min-height:1.35rem}.lyrics-char-btn.has-chord{border-bottom-color:transparent;background:var(--chord-bg);color:var(--chord-color);border-radius:2px}.lyrics-char-btn.is-selected{background:var(--chord-focus-bg);outline:1px solid var(--chord-focus-outline)}.lyrics-chord-underline{display:none;bottom:.05rem;height:1rem;pointer-events:none;position:absolute;width:var(--lyrics-char-width);z-index:1}.lyrics-chord-popover{position:absolute;left:50%;bottom:1.9rem;z-index:10;width:min(13rem,82vw);transform:translate(-50%);border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-elevated);box-shadow:0 16px 38px #0f172a33;padding:.5rem;display:grid;gap:.45rem}.lyrics-chord-popover:after{content:"";position:absolute;left:50%;bottom:-.38rem;width:.7rem;height:.7rem;transform:translate(-50%) rotate(45deg);border-right:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);background:var(--surface-elevated)}.lyrics-chord-popover.is-below{top:1.75rem;bottom:auto}.lyrics-chord-popover.is-below:after{top:-.38rem;bottom:auto;border:0;border-left:1px solid var(--border-subtle);border-top:1px solid var(--border-subtle)}.lyrics-chord-popover.is-near-left{left:0;transform:none}.lyrics-chord-popover.is-near-left:after{left:.45ch;transform:translate(-50%) rotate(45deg)}.lyrics-chord-popover-actions{display:flex;gap:.4rem;justify-content:flex-end;flex-wrap:wrap}.navbar{display:flex;justify-content:space-between;align-items:center;gap:.8rem;background-color:var(--navbar-bg);color:var(--navbar-text);padding:10px 20px}body.song-fullscreen-active .navbar{display:none}.app-layout.has-sticky-navbar .navbar{position:sticky;top:0;z-index:100}.navbar-left{display:flex;align-items:center;gap:20px}.navbar-logo{color:var(--navbar-text);text-decoration:none;display:inline-flex;align-items:center;gap:.6rem;line-height:1}.navbar-logo-icon{width:40px;height:40px;border-radius:999px;display:block}.navbar-logo-text{display:inline-flex;flex-direction:column;gap:.12rem}.navbar-logo-campfire{color:#ff8c2a;font-size:1rem;font-weight:800;letter-spacing:.02em}.navbar-logo-songs{color:var(--navbar-text);font-size:.88rem;font-weight:600;letter-spacing:.03em}.navbar-link{color:var(--navbar-text);text-decoration:none;font-size:16px;white-space:nowrap}.navbar-link:hover,.navbar-logo:hover{text-decoration:underline}.navbar-logo:hover{color:var(--navbar-text);text-decoration:none}.navbar-actions{display:inline-flex;align-items:center;gap:.5rem}.navbar-theme-toggle{background-color:var(--navbar-toggle-bg);color:var(--navbar-toggle-text);border:1px solid var(--navbar-toggle-border);border-radius:4px;padding:6px 12px;cursor:pointer;font-weight:500;transition:background-color .2s ease,border-color .2s ease}.navbar-theme-toggle:hover{background-color:var(--navbar-toggle-hover-bg)}.navbar-logout{background-color:var(--navbar-logout-bg);color:#fff;border:none;border-radius:4px;padding:6px 12px;cursor:pointer;font-weight:500;transition:background-color .2s ease}.navbar-logout:hover{background-color:var(--navbar-logout-hover-bg)}.connection-indicator{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .6rem;border-radius:999px;font-size:.85rem;font-weight:600;border:1px solid transparent}.connection-dot{width:9px;height:9px;border-radius:999px;display:inline-block}.connection-indicator.is-online{background:#10381f;color:#b7f7cb;border-color:#1e7a3f}.connection-indicator.is-online .connection-dot{background:#34d399;box-shadow:0 0 0 3px #34d39933}.connection-indicator.is-offline{background:#472612;color:#ffd9bb;border-color:#a65a2b}.connection-indicator.is-offline .connection-dot{background:#fb923c;box-shadow:0 0 0 3px #fb923c33}@media(max-width:760px){.navbar{flex-wrap:wrap;gap:.6rem;padding:10px 14px}.navbar-left{width:100%;justify-content:space-between;gap:.8rem}.navbar-logo-icon{width:34px;height:34px}.navbar-logo-campfire{font-size:.94rem}.navbar-logo-songs{font-size:.82rem}.connection-indicator{order:3;width:100%;justify-content:center}.navbar-actions{width:100%;flex-direction:column}.navbar-theme-toggle,.navbar-logout{width:100%}}@media(max-width:480px){.navbar-left{align-items:center}.navbar-link{font-size:.92rem}}
