:root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (width<=1024px){:root{font-size:16px}}@media (prefers-color-scheme:dark){:root{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}#social .button-icon{filter:invert()brightness(2)}}body{margin:0}#root{text-align:center;border-inline:1px solid var(--border);box-sizing:border-box;flex-direction:column;width:1126px;max-width:100%;min-height:100svh;margin:0 auto;display:flex}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}:root{--tag-quiet-bg:#dbeafe;--tag-quiet-color:#1e40af;--tag-praise-bg:#fef3c7;--tag-praise-color:#92400e;--tag-grace-bg:#d1fae5;--tag-grace-color:#065f46;--tag-communion-bg:#ede9fe;--tag-communion-color:#5b21b6;--tag-response-bg:#ccfbf1;--tag-response-color:#134e4a;--tag-default-bg:#f1f5f9;--tag-default-color:#475569}@media (prefers-color-scheme:dark){:root{--tag-quiet-bg:#1e3a5f;--tag-quiet-color:#93c5fd;--tag-praise-bg:#451a03;--tag-praise-color:#fcd34d;--tag-grace-bg:#064e3b;--tag-grace-color:#6ee7b7;--tag-communion-bg:#2e1065;--tag-communion-color:#c4b5fd;--tag-response-bg:#022c22;--tag-response-color:#99f6e4;--tag-default-bg:#1e293b;--tag-default-color:#94a3b8}}.app{text-align:left;flex-direction:column;flex:1;display:flex}.app-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;padding:24px 32px;display:flex}@media (width<=600px){.app-header{flex-wrap:wrap;padding:16px 20px}}.app-title{letter-spacing:-.5px;margin:0;font-size:28px;line-height:1.2}@media (width<=600px){.app-title{font-size:22px}}.app-subtitle{color:var(--text);margin:4px 0 0;font-size:14px}.app-main{flex:1;padding:32px}@media (width<=600px){.app-main{padding:20px}}.loading-state{text-align:center;color:#64748b;padding:80px 0;font-size:1rem}.btn{font-size:15px;font-family:var(--sans);cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:8px 18px;transition:box-shadow .2s,opacity .2s;display:inline-flex}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:hover{opacity:.88}.btn:active{opacity:.75}.btn-primary{background:var(--accent);color:#fff}.btn-secondary{color:var(--text-h);border-color:var(--border);background:0 0}.hymn-card-actions{opacity:0;flex-shrink:0;gap:6px;transition:opacity .15s;display:flex}.hymn-card:hover .hymn-card-actions{opacity:1}@media (hover:none){.hymn-card-actions{opacity:1}}@media (width<=600px){.hymn-card-actions{width:100%;padding-left:44px}}.action-btn{border:1px solid var(--border);color:var(--text);font-size:13px;font-family:var(--sans);cursor:pointer;background:0 0;border-radius:5px;padding:4px 10px;transition:background .15s,color .15s,border-color .15s}.action-btn:hover{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.action-btn-delete:hover{color:#dc2626;background:#fee2e2;border-color:#fca5a5}@media (prefers-color-scheme:dark){.action-btn-delete:hover{color:#f87171;background:#450a0a;border-color:#7f1d1d}}.form-optional{color:var(--text);margin-left:4px;font-size:12px;font-weight:400}.form-input-date{max-width:200px}.form-readonly{color:var(--text-h);border-bottom:1px dashed var(--border);margin:0;padding:9px 0;font-size:17px;font-weight:500}.tag{border-radius:999px;align-items:center;padding:2px 10px;font-size:13px;font-weight:500;line-height:1.8;display:inline-flex}.tag-安静{background:var(--tag-quiet-bg);color:var(--tag-quiet-color)}.tag-赞美{background:var(--tag-praise-bg);color:var(--tag-praise-color)}.tag-恩典{background:var(--tag-grace-bg);color:var(--tag-grace-color)}.tag-饼杯{background:var(--tag-communion-bg);color:var(--tag-communion-color)}.tag-回应{background:var(--tag-response-bg);color:var(--tag-response-color)}.tag-other{background:var(--tag-default-bg);color:var(--tag-default-color)}.filter-bar{flex-direction:column;gap:10px;margin-bottom:16px;display:flex}.search-mode-tabs{border-bottom:1px solid var(--border);gap:0;margin-bottom:4px;display:flex}.search-mode-btn{color:var(--text);font-size:13px;font-family:var(--sans);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:6px 16px;transition:color .15s}.search-mode-btn:hover{color:var(--text-h)}.search-mode-btn.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}.search-mode-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.lyrics-results-hint{color:var(--text);margin:0 0 12px;font-size:13px}.lyrics-results{margin-top:4px}.lyrics-result-item{border-bottom:1px solid var(--border);padding:14px 0}.lyrics-result-item:first-of-type{border-top:1px solid var(--border)}.lyrics-result-header{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.lyrics-result-rank{color:var(--text);text-align:right;flex-shrink:0;min-width:18px;font-size:13px}.lyrics-result-title{margin-bottom:0;font-size:16px}.lyrics-result-tags{flex-wrap:wrap;gap:4px;display:flex}.lyrics-result-score{background:color-mix(in srgb, var(--accent) calc(var(--score) * 20%), var(--accent-bg));color:var(--accent);border-radius:999px;flex-shrink:0;margin-left:auto;padding:2px 8px;font-size:12px;font-weight:500}.lyrics-result-snippet{color:var(--text);margin:8px 0 0 28px;font-size:13px;font-style:italic;line-height:1.7}.lyrics-highlight{background:var(--accent-bg);color:var(--accent);border-radius:2px;padding:0 1px;font-style:normal}@media (prefers-color-scheme:dark){.lyrics-highlight{background:color-mix(in srgb, var(--accent) 20%, transparent)}}.search-input{max-width:400px}.filter-tags{flex-wrap:wrap;gap:8px;display:flex}.tag-filter-btn{cursor:pointer;font-size:13px;font-weight:500;line-height:1.8;font-family:var(--sans);opacity:.55;background:0 0;border:1.5px solid;border-radius:999px;padding:3px 12px;transition:background .15s,color .15s}.tag-filter-btn:hover{opacity:.85}.tag-filter-btn.active{opacity:1}.tag-filter-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tag-filter-btn.tag-安静.active{background:var(--tag-quiet-bg)}.tag-filter-btn.tag-赞美.active{background:var(--tag-praise-bg)}.tag-filter-btn.tag-恩典.active{background:var(--tag-grace-bg)}.tag-filter-btn.tag-饼杯.active{background:var(--tag-communion-bg)}.tag-filter-btn.tag-回应.active{background:var(--tag-response-bg)}.clear-filter-btn{color:var(--accent);font-size:13px;font-family:var(--sans);cursor:pointer;text-underline-offset:2px;background:0 0;border:none;padding:0;text-decoration:underline}.clear-filter-btn:hover{opacity:.75}.clear-filter-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hymn-list{flex-direction:column;gap:0;display:flex}.hymn-list-empty{text-align:center;color:var(--text);padding:80px 20px}.hymn-list-empty .empty-icon{margin-bottom:16px;font-size:48px}.hymn-list-empty h3{color:var(--text-h);margin:0 0 8px;font-size:20px}.hymn-list-empty p{margin:0;font-size:15px}.hymn-list-header{color:var(--text);justify-content:space-between;align-items:center;margin-bottom:16px;font-size:14px;display:flex}.hymn-card{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:flex-start;gap:16px;padding:16px 0;display:flex}.hymn-card:first-child{border-top:1px solid var(--border)}.hymn-card-number{color:var(--text);text-align:right;flex-shrink:0;min-width:28px;padding-top:2px;font-size:14px}.hymn-card-body{flex:1;min-width:0}.hymn-card-title{color:var(--text-h);margin:0 0 6px;font-size:17px;font-weight:500}.hymn-card-meta{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.hymn-card-theme{color:var(--text);align-items:center;gap:4px;font-size:13px;display:flex}.hymn-card-theme:before{content:"·";margin-right:2px}.hymn-card-last-selected{color:var(--text);opacity:.7;font-size:12px}.hymn-card-last-selected:before{content:"·";margin-right:4px}.pagination{border-top:1px solid var(--border);justify-content:center;align-items:center;gap:6px;margin-top:32px;padding-top:24px;display:flex}.pagination-btn{border:1px solid var(--border);min-width:36px;height:36px;color:var(--text-h);font-size:14px;font-family:var(--sans);cursor:pointer;background:0 0;border-radius:6px;justify-content:center;align-items:center;padding:0 8px;transition:background .15s,border-color .15s;display:inline-flex}.pagination-btn:hover:not(:disabled){background:var(--accent-bg);border-color:var(--accent-border)}.pagination-btn:disabled{opacity:.35;cursor:default}.pagination-btn.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}.pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.add-hymn-form{max-width:640px}.form-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:28px;display:flex}.form-header h2{margin:0;font-size:22px}.form-group{margin-bottom:20px}.form-label{color:var(--text-h);margin-bottom:8px;font-size:14px;font-weight:500;display:block}.form-required{color:#ef4444;margin-left:2px}.form-input,.form-textarea{border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text-h);font-size:15px;font-family:var(--sans);box-sizing:border-box;border-radius:6px;padding:9px 12px;transition:border-color .15s,box-shadow .15s}:is(.form-input,.form-textarea):focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);outline:none}:is(.form-input,.form-textarea)::placeholder{color:var(--text);opacity:.6}.form-textarea{resize:vertical;min-height:120px;line-height:1.6}.form-error{color:#ef4444;margin-top:5px;font-size:13px}.tag-checkbox-group{flex-wrap:wrap;gap:16px;display:flex}.tag-checkbox-label{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.tag-checkbox-label input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer}.form-actions{gap:10px;margin-top:28px;display:flex}.app-nav{border-bottom:1px solid var(--border);gap:0;padding:0 32px;display:flex}@media (width<=600px){.app-nav{padding:0 20px}}.nav-btn{color:var(--text);font-size:15px;font-family:var(--sans);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:12px 20px;transition:color .15s}.nav-btn:hover{color:var(--text-h)}.nav-btn.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}.nav-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tabs{border-bottom:1px solid var(--border);margin-bottom:28px;display:flex}.tab-btn{color:var(--text);font-size:14px;font-family:var(--sans);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:10px 20px;transition:color .15s}.tab-btn:hover{color:var(--text-h)}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}.tab-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.modal-overlay{z-index:100;background:#00000073;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--bg);width:100%;max-width:360px;box-shadow:var(--shadow);border-radius:12px;padding:28px}.modal-title{color:var(--text-h);margin:0 0 8px;font-size:18px;font-weight:500}.modal-hymn-name{color:var(--accent);margin:0 0 20px;font-size:16px;font-weight:500}.modal-actions{gap:10px;margin-top:20px;display:flex}.action-btn-queue:hover{color:#16a34a;background:#dcfce7;border-color:#86efac}@media (prefers-color-scheme:dark){.action-btn-queue:hover{color:#4ade80;background:#052e16;border-color:#166534}}.workbench-date-row{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:28px;display:flex}.workbench-date-display{color:var(--text-h);padding-bottom:9px;font-size:16px;font-weight:500}.workbench-body{grid-template-columns:1fr 1fr;align-items:start;gap:20px;display:grid}@media (width<=768px){.workbench-body{grid-template-columns:1fr}}.workbench-panel{border:1px solid var(--border);border-radius:8px;padding:20px}.workbench-panel-title{color:var(--text-h);align-items:center;gap:8px;margin:0 0 16px;font-size:15px;font-weight:500;display:flex}.workbench-count{background:var(--accent-bg);color:var(--accent);border-radius:999px;padding:1px 8px;font-size:12px;font-weight:400}.pick-list{max-height:400px;margin-top:12px;overflow-y:auto}.pick-hint{text-align:center;color:var(--text);margin:0;padding:28px 0;font-size:14px}.pick-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:10px 0;display:flex}.pick-row:last-child{border-bottom:none}.pick-row-info{flex:1;min-width:0}.pick-row-title{color:var(--text-h);margin-bottom:4px;font-size:14px;font-weight:500;display:block}.pick-row-meta{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.pick-row-theme{color:var(--text);font-size:12px}.pick-row-theme:before{content:"·";margin-right:4px}.pick-row-last-selected{color:var(--text);opacity:.7;font-size:12px}.pick-row-last-selected:before{content:"·";margin-right:4px}.pick-add-btn{flex-shrink:0;padding:4px 12px;font-size:13px}.selected-list{flex-direction:column;gap:6px;margin-bottom:16px;display:flex}.selected-item{border:1px solid var(--border);background:var(--bg);cursor:grab;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:8px;padding:9px 10px;transition:box-shadow .15s,opacity .15s;display:flex}.selected-item:active{cursor:grabbing}.selected-item.dragging{opacity:.4;box-shadow:var(--shadow)}.drag-handle{color:var(--text);opacity:.35;flex-shrink:0;font-size:16px;line-height:1}.selected-index{color:var(--text);text-align:center;flex-shrink:0;min-width:18px;font-size:12px}.selected-title{color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14px;overflow:hidden}.selected-remove{color:var(--text);opacity:.5;cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 5px;font-size:13px;line-height:1}.selected-remove:hover{opacity:1;color:#dc2626;background:#fee2e2}.selected-remove:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-color-scheme:dark){.selected-remove:hover{color:#f87171;background:#450a0a}}.workbench-save-row{justify-content:flex-end;align-items:center;gap:12px;padding-top:4px;display:flex}.save-success{color:#16a34a;font-size:13px;font-weight:500}@media (prefers-color-scheme:dark){.save-success{color:#4ade80}}.history-list{flex-direction:column;display:flex}.history-entry{border-bottom:1px solid var(--border);padding:20px 0}.history-entry:first-child{border-top:1px solid var(--border)}.history-date{color:var(--text-h);margin-bottom:12px;font-size:16px;font-weight:500}.history-hymns{flex-direction:column;gap:8px;display:flex}.history-hymn-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.history-hymn-index{color:var(--text);text-align:right;flex-shrink:0;min-width:20px;font-size:13px}.history-hymn-title{color:var(--text-h);font-size:14px;font-weight:500}.history-hymn-tags{flex-wrap:wrap;gap:4px;display:flex}.history-hymn-theme{color:var(--text);font-size:12px}.history-hymn-theme:before{content:"·";margin-right:4px}.history-hymn-deleted{color:var(--text);opacity:.5;font-size:13px;font-style:italic}.hymn-card-title-btn{color:var(--text-h);font-size:17px;font-weight:500;font-family:var(--sans);cursor:pointer;text-align:left;text-underline-offset:3px;background:0 0;border:none;margin-bottom:6px;padding:0;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:color .15s,text-decoration-color .15s}.hymn-card-title-btn:hover{color:var(--accent);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.hymn-card-title-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.hymn-detail{max-width:640px}.detail-back-btn{color:var(--text);font-size:14px;font-family:var(--sans);cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;margin-bottom:24px;padding:0;transition:color .15s;display:inline-flex}.detail-back-btn:hover{color:var(--text-h)}.detail-back-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.detail-title{color:var(--text-h);letter-spacing:-.3px;margin:0 0 20px;font-size:28px;font-weight:500}.detail-meta{border-top:1px solid var(--border);border-bottom:1px solid var(--border);flex-direction:column;gap:12px;margin-bottom:28px;padding:20px 0;display:flex}.detail-row{align-items:flex-start;gap:16px;display:flex}.detail-label{color:var(--text);flex-shrink:0;min-width:60px;padding-top:3px;font-size:13px}.detail-tags{flex-wrap:wrap;gap:6px;display:flex}.detail-value{color:var(--text-h);font-size:15px}.detail-empty{color:var(--text);opacity:.4}.detail-section{margin-bottom:24px}.detail-section-title{color:var(--text);text-transform:uppercase;letter-spacing:.5px;margin:0 0 12px;font-size:14px;font-weight:500}.detail-lyrics{font-family:var(--sans);color:var(--text-h);white-space:pre-wrap;background:var(--code-bg);border-radius:8px;margin:0;padding:20px;font-size:15px;line-height:1.9}.app-header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}@media (width<=600px){.app-header-actions{flex-wrap:wrap;justify-content:flex-end}}.import-label{cursor:pointer}.import-input{display:none}
