@uimaxbai/am-lyrics 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"am-lyrics.js","sources":["../../node_modules/tslib/tslib.es6.js","../../node_modules/@lit/reactive-element/css-tag.js","../../node_modules/@lit/reactive-element/reactive-element.js","../../node_modules/lit-html/lit-html.js","../../node_modules/lit-element/lit-element.js","../../node_modules/@lit/reactive-element/decorators/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../node_modules/@lit/reactive-element/decorators/base.js","../../node_modules/@lit/reactive-element/decorators/query.js","../../../src/GoogleService.ts","../../../src/AmLyrics.ts","../../../src/am-lyrics.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * Config for GoogleService\n */\nconst CONFIG = {\n GOOGLE: {\n MAX_RETRIES: 3,\n RETRY_DELAY_MS: 1000,\n FETCH_TIMEOUT_MS: 6000,\n },\n};\n\ninterface RomanizableLine {\n text?: { text: string; romanizedText?: string }[] | string;\n romanizedText?: string;\n isWordSynced?: boolean;\n}\n\n/**\n * Service for translating and romanizing text using Google Translate (unofficial API)\n */\nexport class GoogleService {\n private static delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n }\n\n private static fetchWithTimeout(\n url: string,\n timeoutMs = CONFIG.GOOGLE.FETCH_TIMEOUT_MS,\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n return fetch(url, { signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n }\n\n private static isPurelyLatinScript(text: string): boolean {\n // Basic check for Latin script characters plus common punctuation and numbers\n // eslint-disable-next-line no-control-regex\n return /^[\\u0000-\\u007F\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]*$/.test(\n text,\n );\n }\n\n static async translate(\n textOrArray: string | string[],\n targetLang: string,\n ): Promise<string | string[]> {\n if (\n !textOrArray ||\n (Array.isArray(textOrArray) && textOrArray.length === 0)\n ) {\n return Array.isArray(textOrArray) ? [] : '';\n }\n\n const isArray = Array.isArray(textOrArray);\n const texts = isArray ? (textOrArray as string[]) : [textOrArray as string];\n\n // Check for empty strings to preserve indices\n const nonEmptyIndices: number[] = [];\n const textsToTranslate: string[] = [];\n\n texts.forEach((t, i) => {\n if (t && t.trim()) {\n nonEmptyIndices.push(i);\n textsToTranslate.push(t);\n }\n });\n\n if (textsToTranslate.length === 0) {\n return isArray ? texts : texts[0];\n }\n\n // Batching logic: Google Translate URL limit is roughly 2000 chars.\n // We'll be conservative with 1500 chars per batch.\n const BATCH_SIZE_CHARS = 1500;\n const translatedResults: string[] = new Array(textsToTranslate.length).fill(\n '',\n );\n\n let currentBatch: string[] = [];\n let currentBatchIndices: number[] = [];\n let currentBatchLength = 0;\n\n const processBatch = async (batch: string[], indices: number[]) => {\n if (batch.length === 0) return;\n const joinedText = batch.join('\\n');\n\n let attempt = 0;\n let success = false;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${targetLang}&dt=t&q=${encodeURIComponent(joinedText)}`;\n // eslint-disable-next-line no-await-in-loop\n const response = await GoogleService.fetchWithTimeout(url);\n if (!response.ok) throw new Error(`Status ${response.status}`);\n // eslint-disable-next-line no-await-in-loop\n const data = await response.json();\n\n // data[0] contains segments.\n // With batching/newlines, Google sometimes returns one large segment with newlines,\n // or multiple segments. We need to reconstruct the full text first.\n\n const fullTranslation =\n data?.[0]?.map((seg: any) => seg?.[0]).join('') || '';\n\n // Split by newline to get individual lines back\n const lines = fullTranslation.split('\\n');\n\n // Edge case: Google might strip trailing newlines or add extra.\n // If we sent N lines, we expect N lines back approx.\n // However, empty lines in input were filtered out before sending.\n // So 'lines' should match 'batch'.\n\n // If mismatch, try to align? Or just take what we have.\n // If lines.length < batch.length, we might have lost some.\n // If lines.length > batch.length, maybe some line wrap?\n\n // We'll trust the split for now but ensure we don't overflow.\n\n indices.forEach((originalIdx, i) => {\n // Safe access\n if (i < lines.length) {\n translatedResults[originalIdx] = lines[i];\n } else {\n // Fallback if response is shorter\n translatedResults[originalIdx] = batch[i];\n }\n });\n\n success = true;\n } catch (e) {\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n // eslint-disable-next-line no-await-in-loop\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n );\n } else {\n // Fail: fill with original\n indices.forEach((originalIdx, i) => {\n translatedResults[originalIdx] = batch[i];\n });\n }\n }\n }\n };\n\n for (let i = 0; i < textsToTranslate.length; i += 1) {\n const text = textsToTranslate[i];\n if (currentBatchLength + text.length > BATCH_SIZE_CHARS) {\n // eslint-disable-next-line no-await-in-loop\n await processBatch(currentBatch, currentBatchIndices);\n currentBatch = [];\n currentBatchIndices = [];\n currentBatchLength = 0;\n }\n currentBatch.push(text);\n currentBatchIndices.push(i);\n currentBatchLength += text.length;\n }\n\n if (currentBatch.length > 0) {\n await processBatch(currentBatch, currentBatchIndices);\n }\n\n // Reconstruct final array\n const finalArray = [...texts];\n nonEmptyIndices.forEach((realIdx, mappedIdx) => {\n finalArray[realIdx] = translatedResults[mappedIdx];\n });\n\n return isArray ? finalArray : finalArray[0];\n }\n\n static async romanize<T extends RomanizableLine>(\n originalLyrics: T[] | { data?: T[]; content?: T[] },\n ): Promise<T[]> {\n // Determine if we should treat as word-synced (has syllabus) or line-synced\n const lines: T[] = Array.isArray(originalLyrics)\n ? originalLyrics\n : (originalLyrics as { data?: T[]; content?: T[] }).data ||\n (originalLyrics as { data?: T[]; content?: T[] }).content ||\n [];\n\n if (!lines || lines.length === 0)\n return Array.isArray(originalLyrics) ? originalLyrics : [];\n\n // Check if word synced\n const isWordSynced = lines.some(\n (l: RomanizableLine) =>\n l.isWordSynced !== false && Array.isArray(l.text) && l.text.length > 1,\n );\n\n if (isWordSynced) {\n return this.romanizeWordSynced(lines);\n }\n\n return this.romanizeLineSynced(lines);\n }\n\n static async romanizeWordSynced<T extends RomanizableLine>(\n lines: T[],\n ): Promise<T[]> {\n return Promise.all(\n lines.map(async (line: T) => {\n if (\n !line.text ||\n !Array.isArray(line.text) ||\n line.text.length === 0 ||\n line.romanizedText // Skip if already romanized\n )\n return line;\n\n // Get the entire line text to romanize together for context-aware pronunciation\n const fullText = line.text\n .map((s: { text: string }) => s.text)\n .join('');\n\n // romanizeTexts expects an array of strings, so we pass an array of one\n const [romanizedFullLine] = await this.romanizeTexts([fullText]);\n\n const newSyllabus = line.text.map(\n (s: { text: string; romanizedText?: string }) => ({\n ...s,\n romanizedText: s.romanizedText, // Keep any existing syllabus romanization if provided by API natively\n }),\n );\n\n return {\n ...line,\n text: newSyllabus,\n romanizedText: romanizedFullLine || '',\n };\n }),\n );\n }\n\n static async romanizeLineSynced<T extends RomanizableLine>(\n lines: T[],\n ): Promise<T[]> {\n const linesToRomanize = lines.map((line: T) => {\n // If already romanized, skip\n if (line.romanizedText) {\n return '';\n }\n // If it's line-synced, it usually has 1 syllable with the full text.\n if (Array.isArray(line.text) && line.text.length > 0) {\n return line.text.map((s: { text: string }) => s.text).join('');\n }\n return '';\n });\n\n const romanizedLines = await this.romanizeTexts(linesToRomanize);\n\n return lines.map((line: T, index: number) => ({\n ...line,\n romanizedText: romanizedLines[index] || '',\n }));\n }\n\n static async romanizeTexts(texts: string[]): Promise<string[]> {\n const contextText = texts.join(' ');\n\n if (GoogleService.isPurelyLatinScript(contextText)) {\n return texts;\n }\n\n const romanizedTexts: string[] = [];\n\n /* eslint-disable no-await-in-loop */\n for (const text of texts) {\n if (!text || GoogleService.isPurelyLatinScript(text)) {\n romanizedTexts.push(text);\n } else {\n let attempt = 0;\n let success = false;\n let lastError = null;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const romanizeUrl = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=rm&q=${encodeURIComponent(\n text,\n )}`;\n const response = await GoogleService.fetchWithTimeout(romanizeUrl);\n const data = await response.json();\n\n // Response format is [[[\"...\",\"...\",\"...\",\"romanization\"]],...]\n // or [null, ...] for English/Latin input where no romanization is needed\n const romanized = data?.[0]?.[0]?.[3] || text;\n\n romanizedTexts.push(romanized);\n success = true;\n } catch (error) {\n lastError = error;\n // eslint-disable-next-line no-console\n console.warn(\n `GoogleService: Error romanizing text \"${text}\" (attempt ${\n attempt + 1\n }/${CONFIG.GOOGLE.MAX_RETRIES}):`,\n error,\n );\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n ); // Exponential backoff\n }\n }\n }\n\n if (!success) {\n // eslint-disable-next-line no-console\n console.error(\n `GoogleService: Failed to romanize text \"${text}\" after ${CONFIG.GOOGLE.MAX_RETRIES} attempts. Last error:`,\n lastError,\n );\n romanizedTexts.push(text); // Fallback to original text\n }\n }\n }\n /* eslint-enable no-await-in-loop */\n\n return romanizedTexts;\n }\n}\n","import { css, html, LitElement, svg } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { GoogleService } from './GoogleService.js';\n\nconst VERSION = '1.2.2';\nconst INSTRUMENTAL_THRESHOLD_MS = 7000; // Show dots for gaps >= 7s\nconst FETCH_TIMEOUT_MS = 8000; // Timeout for all lyrics fetch requests\nconst SEEK_THRESHOLD_MS = 500;\nconst PRE_SCROLL_LEAD_MS = 500;\nconst SCROLL_ANIMATION_DURATION_MS = 280;\nconst SCROLL_DELAY_INCREMENT_MS = 24;\nconst GAP_PULSE_DURATION_MS = 4000;\nconst GAP_PULSE_CYCLE_MS = GAP_PULSE_DURATION_MS * 2;\nconst GAP_EXIT_LEAD_MS = 360;\nconst GAP_MIN_SCALE = 0.85;\n\n/**\n * Fetch with an automatic timeout via AbortSignal.\n * Rejects if the request takes longer than `timeoutMs`.\n */\nfunction fetchWithTimeout(\n url: string,\n options: Parameters<typeof fetch>[1] = {},\n timeoutMs = FETCH_TIMEOUT_MS,\n): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return fetch(url, { ...options, signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n}\n\nconst KPOE_SERVERS = [\n 'https://lyricsplus.binimum.org',\n 'https://lyricsplus.atomix.one',\n 'https://lyricsplus-seven.vercel.app',\n 'https://lyricsplus.prjktla.workers.dev',\n 'https://lyrics-plus-backend.vercel.app',\n];\nconst DEFAULT_KPOE_SOURCE_ORDER =\n 'apple,lyricsplus,musixmatch,spotify,qq,deezer,musixmatch-word';\n\nconst TIDAL_SERVERS = [\n 'https://arran.monochrome.tf',\n 'https://api.monochrome.tf/',\n 'https://triton.squid.wtf',\n 'https://wolf.qqdl.site',\n 'https://maus.qqdl.site',\n 'https://vogel.qqdl.site',\n 'https://katze.qqdl.site',\n 'https://hund.qqdl.site',\n 'https://tidal.kinoplus.online',\n 'https://hifi-one.spotisaver.net',\n 'https://hifi-two.spotisaver.net',\n];\nconst GENIUS_WORKER_URL = 'https://fetch-genius.samidy.workers.dev/';\n\ninterface Syllable {\n text: string;\n part: boolean;\n timestamp: number;\n endtime: number;\n romanizedText?: string;\n lineSynced?: boolean; // New flag for line-synced lyrics\n}\n\ninterface LyricsLine {\n text: Syllable[];\n background: boolean;\n backgroundText: Syllable[];\n oppositeTurn: boolean;\n timestamp: number;\n endtime: number;\n isWordSynced?: boolean;\n alignment?: 'start' | 'end';\n songPart?: string;\n romanizedText?: string;\n translation?: string;\n}\n\ninterface SongMetadata {\n title: string;\n artist: string;\n album?: string;\n durationMs?: number;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n id?: {\n appleMusic?: string;\n [key: string]: unknown;\n };\n isrc?: string;\n}\n\ninterface ParsedQueryMetadata {\n title?: string;\n artist?: string;\n album?: string;\n}\n\ninterface YouLyPlusLyricsResult {\n lines: LyricsLine[];\n source: string;\n}\n\ninterface ResolvedMetadata {\n metadata?: SongMetadata;\n appleId?: string;\n appleSong?: any;\n catalogIsrc?: string;\n}\n\nexport class AmLyrics extends LitElement {\n static styles = css`\n /* ==========================================================================\n YOULYPLUS-INSPIRED STYLING - Design Tokens & Variables\n ========================================================================== */\n :host {\n --lyplus-lyrics-palette: var(\n --am-lyrics-highlight-color,\n var(--highlight-color, #ffffff)\n );\n --lyplus-text-primary: var(--lyplus-lyrics-palette);\n /* Use color-mix with the text color rather than just opacity so it adapts */\n --lyplus-text-secondary: color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent 45%\n );\n\n --lyplus-padding-base: 1em;\n --lyplus-padding-line: 10px;\n --lyplus-padding-gap: 0.3em;\n --lyplus-border-radius-base: 0.6em;\n --lyplus-gap-dot-size: 0.4em;\n --lyplus-gap-dot-margin: 0.08em;\n\n --lyplus-font-size-base: 32px;\n --lyplus-font-size-base-grow: 24.5;\n --lyplus-font-size-subtext: 0.6em;\n\n --lyplus-blur-amount: 0.07em;\n --lyplus-blur-amount-near: 0.035em;\n --lyplus-fade-gap-timing-function: ease-out;\n\n --lyrics-scroll-padding-top: 25%;\n\n display: block;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,\n Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n background: transparent;\n height: 100%;\n overflow: hidden;\n font-weight: bold;\n color: var(--lyplus-text-primary);\n }\n\n /* ==========================================================================\n CONTAINER & SCROLL BEHAVIOR\n ========================================================================== */\n .lyrics-container {\n padding: 20px;\n padding-top: 80px;\n border-radius: 8px;\n background-color: transparent;\n width: 100%;\n height: 100%;\n max-height: 100vh;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n scrollbar-width: none;\n transform: translateZ(0);\n }\n\n .lyrics-container::-webkit-scrollbar {\n display: none;\n }\n\n /* Disable transitions during touch-scrolling for 1:1 feedback */\n .lyrics-container.touch-scrolling .lyrics-line,\n .lyrics-container.touch-scrolling .lyrics-plus-metadata {\n transition: none !important;\n }\n\n /* Apply smooth gliding transition for mouse-wheel scrolling */\n .lyrics-container.wheel-scrolling .lyrics-line {\n transition: transform 0.3s ease-out !important;\n }\n\n .lyrics-line.scroll-animate {\n transition: none !important; /* Prevent conflict with scroll animation */\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 280ms);\n animation-timing-function: cubic-bezier(0.41, 0, 0.12, 0.99);\n animation-fill-mode: both;\n animation-delay: var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-container.user-scrolling .lyrics-line {\n --lyrics-line-delay: 0ms !important;\n transition-delay: 0ms !important;\n }\n\n /* ==========================================================================\n LYRICS LINE BASE STYLES\n ========================================================================== */\n .lyrics-line {\n padding: var(--lyplus-padding-line);\n opacity: 0.8;\n color: var(--lyplus-text-secondary);\n font-size: var(--lyplus-font-size-base);\n cursor: pointer;\n transform-origin: left;\n transform: translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n will-change: transform, filter, opacity;\n content-visibility: auto;\n text-rendering: optimizeLegibility;\n overflow-wrap: break-word;\n mix-blend-mode: lighten;\n border-radius: var(--lyplus-border-radius-base);\n }\n\n .lyrics-line:not(.scroll-animate) {\n animation: none;\n }\n\n /* --- Line Container & Vocal Containers --- */\n .lyrics-line-container {\n overflow-wrap: break-word;\n transform-origin: left;\n transform: scale3d(0.93, 0.93, 0.95);\n transition:\n transform 0.7s ease,\n background-color 0.7s,\n color 0.7s;\n }\n\n .lyrics-line.active .lyrics-line-container,\n .lyrics-line.pre-active .lyrics-line-container {\n transform: scale3d(1.001, 1.001, 1);\n will-change: transform;\n transition:\n transform 0.5s ease,\n background-color 0.18s,\n color 0.18s;\n }\n\n .main-vocal-container {\n transform-origin: 5% 50%;\n margin: 0;\n }\n\n .background-vocal-container {\n max-height: 0;\n padding-top: 0.2em;\n overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n transition:\n max-height 350ms cubic-bezier(0.33, 1, 0.68, 1),\n opacity 300ms ease-out,\n padding 350ms cubic-bezier(0.33, 1, 0.68, 1);\n margin: 0;\n }\n\n .lyrics-line.active .background-vocal-container,\n .lyrics-line.pre-active .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n transition:\n max-height 350ms cubic-bezier(0.22, 1, 0.36, 1),\n opacity 300ms ease-out,\n padding 350ms cubic-bezier(0.22, 1, 0.36, 1);\n will-change: max-height, opacity, padding;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n will-change: transform, opacity;\n }\n\n .lyrics-line.pre-active {\n opacity: 1;\n will-change: transform, opacity;\n }\n\n .lyrics-line.singer-right {\n text-align: end;\n }\n\n .lyrics-line.singer-right .lyrics-line-container,\n .lyrics-line.singer-right .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text {\n direction: rtl;\n }\n\n /* --- Unsynced (Plain Text) Lyrics Overrides --- */\n .lyrics-container.is-unsynced .lyrics-line {\n opacity: 1 !important;\n color: var(--lyplus-text-primary) !important;\n filter: none !important;\n transform: none !important;\n cursor: default;\n }\n\n .lyrics-container.is-unsynced .lyrics-line-container {\n transform: none !important;\n background-color: transparent !important;\n }\n\n .lyrics-container.is-unsynced .lyrics-syllable {\n color: var(--lyplus-text-primary) !important;\n background-color: transparent !important;\n -webkit-background-clip: unset !important;\n background-clip: unset !important;\n -webkit-text-fill-color: unset !important;\n text-fill-color: unset !important;\n text-shadow: none !important;\n filter: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .lyrics-line:hover {\n background: var(--hover-background-color, rgba(255, 255, 255, 0.13));\n }\n .lyrics-container.is-unsynced .lyrics-line:hover {\n background: transparent !important;\n }\n }\n\n /* --- Blur Effect for Inactive Lines --- */\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line:not(.active):not(.pre-active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.post-active-line:not(.lyrics-gap):not(.active):not(\n .pre-active\n ),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.next-active-line:not(.lyrics-gap):not(.active):not(\n .pre-active\n ),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap):not(\n .pre-active\n ) {\n filter: blur(var(--lyplus-blur-amount-near));\n }\n\n /* Unblur all lines when user is scrolling */\n .lyrics-container.user-scrolling .lyrics-line {\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n /* Unblur early for pre-active lines */\n .lyrics-container.blur-inactive-enabled .lyrics-line.pre-active {\n filter: blur(0px) !important;\n opacity: 1;\n }\n\n /* ==========================================================================\n WORD & SYLLABLE STYLES\n ========================================================================== */\n .lyrics-word:not(.allow-break) {\n display: inline-block;\n vertical-align: baseline;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap:has(.lyrics-syllable.transliteration) {\n display: inline-flex;\n flex-direction: column;\n align-items: start;\n }\n\n .lyrics-syllable {\n display: inline-block;\n vertical-align: baseline;\n color: transparent;\n background-color: var(--lyplus-text-secondary);\n white-space: pre-wrap;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n /* --- Syllable States --- */\n .lyrics-syllable.finished {\n background-color: var(--lyplus-text-primary);\n transition: transform 1s ease !important;\n }\n\n .lyrics-syllable.finished:has(.char) {\n background-color: transparent;\n }\n\n .lyrics-line:not(.active) .lyrics-syllable.finished {\n transition: color 0.18s;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transform: translateY(0.001%) translateZ(1px);\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n will-change: transform, background;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.highlight:not(:has(.char)),\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight:not(:has(.char)) {\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.rtl-text {\n direction: rtl;\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 100%,\n transparent 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n right;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight,\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%) translateZ(1px);\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.finished {\n background-image: none;\n }\n\n .lyrics-syllable.pre-highlight {\n animation-name: pre-wipe-universal;\n animation-duration: var(--pre-wipe-duration);\n animation-delay: var(--pre-wipe-delay);\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n }\n\n .lyrics-syllable.pre-highlight.rtl-text {\n animation-name: pre-wipe-universal-rtl;\n }\n\n .lyrics-syllable.transliteration {\n font-size: var(--lyplus-font-size-subtext);\n white-space: pre-wrap;\n pointer-events: none;\n user-select: none;\n }\n\n /* Syllable with chars: make syllable transparent, chars handle color */\n .lyrics-line .lyrics-syllable:has(span.char):not(.finished) {\n background-color: transparent;\n color: transparent;\n }\n\n .lyrics-syllable span.char {\n display: inline-block;\n background-color: var(--lyplus-text-secondary);\n white-space: break-spaces;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n .lyrics-syllable.finished span.char {\n transition: color 0.18s;\n background-color: var(--lyplus-text-primary);\n }\n\n /* Active char spans: structural only, wipe animation sets gradient */\n .lyrics-line.active .lyrics-syllable span.char {\n background-clip: text;\n -webkit-background-clip: text;\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n transform-origin: 50% 80%;\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n transition:\n transform 0.7s ease,\n color 0.18s;\n will-change: background, transform;\n }\n\n .lyrics-line.active .lyrics-syllable span.char.highlight {\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 0%,\n #0000 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n calc(100% + 0.25em) 0%;\n }\n\n .lyrics-line.active .lyrics-syllable.pre-highlight span.char {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n -0.25em 0%;\n }\n\n /* ==========================================================================\n INSTRUMENTAL GAP STYLES\n ========================================================================== */\n .lyrics-gap {\n max-height: 0;\n padding: 0 var(--lyplus-padding-gap);\n overflow: hidden;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transform-origin: top;\n transition:\n padding 220ms cubic-bezier(0.33, 1, 0.68, 1),\n max-height 220ms cubic-bezier(0.33, 1, 0.68, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms) var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n max-height: 1.6em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 220ms cubic-bezier(0.22, 1, 0.36, 1),\n max-height 220ms cubic-bezier(0.22, 1, 0.36, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\n will-change: max-height, opacity, padding;\n }\n\n /* Exiting state: quickly collapse width and height so dots don't distort page, or remove max-height transition */\n .lyrics-gap.gap-exiting {\n max-height: 0;\n padding: 0 var(--lyplus-padding-gap);\n opacity: 0;\n overflow: visible;\n transition:\n padding var(--gap-exit-duration, 360ms) cubic-bezier(0.33, 1, 0.68, 1),\n max-height var(--gap-exit-duration, 360ms)\n cubic-bezier(0.33, 1, 0.68, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n\n /* Jump animation plays during exit */\n .lyrics-gap.gap-exiting .main-vocal-container {\n animation: gap-ended var(--gap-exit-duration, 360ms)\n cubic-bezier(0.33, 1, 0.68, 1) forwards;\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting)\n .main-vocal-container\n .lyrics-word {\n animation-play-state: paused;\n }\n\n .lyrics-gap.active .main-vocal-container .lyrics-word {\n animation: gap-loop var(--gap-pulse-duration, 4000ms) ease-in-out infinite\n alternate;\n animation-delay: var(--gap-loop-delay, 0ms);\n will-change: transform;\n }\n\n .lyrics-gap .lyrics-syllable {\n display: inline-block;\n width: var(--lyplus-gap-dot-size);\n height: var(--lyplus-gap-dot-size);\n background-color: var(--lyplus-text-primary);\n border-radius: 50%;\n margin: 0 var(--lyplus-gap-dot-margin);\n }\n\n /* Line-synced lyrics should fade in instantly/quickly instead of wiping */\n .lyrics-syllable.line-synced {\n background: transparent !important;\n color: var(--lyplus-text-secondary) !important;\n }\n\n .lyrics-line.active .lyrics-syllable.line-synced {\n animation: fade-in-line 0.2s ease-out forwards !important;\n color: var(--lyplus-text-primary) !important;\n }\n\n .lyrics-line.pre-active .lyrics-syllable.line-synced {\n animation: fade-in-line 0.14s ease-out forwards !important;\n color: var(--lyplus-text-primary) !important;\n }\n\n .lyrics-line.active .lyrics-syllable.line-synced span.char,\n .lyrics-line.pre-active .lyrics-syllable.line-synced span.char {\n background-image: none !important;\n background-color: var(--lyplus-text-primary) !important;\n transition: background-color 120ms ease-out !important;\n }\n\n @keyframes fade-in-line {\n from {\n opacity: 0.5;\n color: var(--lyplus-text-secondary);\n }\n to {\n opacity: 1;\n color: var(--lyplus-lyrics-palette);\n }\n }\n\n .lyrics-gap .lyrics-syllable {\n background-color: var(--lyplus-text-secondary);\n background-clip: unset;\n }\n\n .lyrics-gap.active .lyrics-syllable.highlight,\n .lyrics-gap.active .lyrics-syllable.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable,\n .lyrics-gap:not(.active).post-active-line .lyrics-syllable,\n .lyrics-gap:not(.active).lyrics-activest .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\n }\n\n .lyrics-gap.active .lyrics-syllable.finished {\n animation: none !important;\n }\n\n /* ==========================================================================\n METADATA & FOOTER STYLES\n ========================================================================== */\n .lyrics-plus-metadata {\n display: block;\n position: relative;\n box-sizing: border-box;\n font-weight: normal;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.6s cubic-bezier(0.23, 1, 0.32, 1)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n }\n\n .lyrics-plus-empty {\n display: block;\n height: 100vh;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n }\n\n .lyrics-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n text-align: left;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.5);\n padding: 10px 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n margin-top: 10px;\n font-weight: normal;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n }\n\n .lyrics-footer a:hover {\n text-decoration: underline;\n }\n\n .footer-content {\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: 8px;\n }\n\n .footer-controls {\n display: flex;\n align-items: center;\n }\n\n /* ==========================================================================\n HEADER & CONTROLS\n ========================================================================== */\n .lyrics-header {\n display: flex;\n padding: 10px 0;\n margin-bottom: 10px;\n gap: 10px;\n justify-content: space-between;\n align-items: center;\n }\n\n .lyrics-header .download-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #aaa;\n padding: 0;\n margin-left: 10px;\n vertical-align: middle;\n display: inline-flex;\n align-items: center;\n font-family: inherit;\n }\n\n .lyrics-header .download-button:hover {\n color: rgba(255, 255, 255, 0.9);\n }\n\n .header-controls {\n display: flex;\n gap: 8px;\n }\n\n .download-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .control-button {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.6);\n cursor: pointer;\n transition: all 0.2s;\n font-weight: normal;\n }\n\n .control-button:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .control-button.active {\n background-color: var(--lyplus-text-primary);\n border-color: var(--lyplus-text-primary);\n color: #000;\n }\n\n .format-select {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8em;\n margin-left: 10px;\n padding: 2px 5px;\n cursor: pointer;\n font-weight: normal;\n font-family: inherit;\n }\n\n .format-select:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .format-select option {\n background: #1a1a1a;\n color: #fff;\n }\n\n /* ==========================================================================\n TRANSLATION & ROMANIZATION\n ========================================================================== */\n .lyrics-translation-container,\n .lyrics-romanization-container {\n padding-top: 0.2em;\n opacity: 0.8;\n font-size: var(--lyplus-font-size-subtext);\n overflow-wrap: break-word;\n pointer-events: none;\n user-select: none;\n transition:\n opacity 0.3s ease,\n color 0.3s;\n font-weight: normal;\n }\n\n .lyrics-romanization-container {\n direction: ltr !important;\n }\n\n .lyrics-romanization-container.rtl-text {\n direction: rtl !important;\n }\n\n .lyrics-romanization-container .lyrics-syllable {\n white-space: pre-wrap;\n }\n\n .lyrics-translation-container {\n opacity: 0.5;\n }\n\n .main-line-wrapper.small {\n font-size: 0.5em;\n opacity: 0.8;\n display: block;\n margin-bottom: 0px;\n }\n\n .translation-line {\n font-size: 1em;\n font-weight: bold;\n display: block;\n margin-top: 0px;\n line-height: 1.1;\n }\n\n .romanized-line {\n font-size: 0.5em;\n color: rgba(255, 255, 255, 0.5);\n display: block;\n margin-top: 2px;\n font-weight: normal;\n }\n\n /* ==========================================================================\n SKELETON LOADING\n ========================================================================== */\n @keyframes skeleton-loading {\n 0% {\n background-color: rgba(255, 255, 255, 0.1);\n }\n 100% {\n background-color: rgba(255, 255, 255, 0.2);\n }\n }\n\n .skeleton-line {\n height: 2.5em;\n margin: 20px 0;\n border-radius: 8px;\n animation: skeleton-loading 1s linear infinite alternate;\n opacity: 0.7;\n width: 60%;\n }\n\n .skeleton-line:nth-child(even) {\n width: 80%;\n }\n .skeleton-line:nth-child(3n) {\n width: 50%;\n }\n .skeleton-line:nth-child(5n) {\n width: 70%;\n }\n\n .no-lyrics {\n color: rgba(255, 255, 255, 0.5);\n font-size: 1.2em;\n text-align: center;\n padding: 2em;\n font-weight: normal;\n }\n\n /* ==========================================================================\n KEYFRAME ANIMATIONS\n ========================================================================== */\n\n /* Wipe animation for syllables */\n @keyframes wipe {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes start-wipe {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes wipe-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n calc(100% + 0.36em);\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes start-wipe-rtl {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n calc(100% + 0.5em);\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-universal {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.75em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n }\n\n @keyframes pre-wipe-universal-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n right;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-char {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n }\n\n /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: scale(1.12);\n }\n to {\n transform: scale(var(--gap-exit-scale, 0.85));\n }\n }\n\n @keyframes gap-ended {\n 0% {\n transform: translateY(-25%) scale(var(--gap-exit-scale, 0.85))\n translateZ(0);\n }\n 35% {\n transform: translateY(-5%) scale(1.08) translateZ(0);\n }\n 100% {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n }\n\n @keyframes fade-gap {\n from {\n background-color: var(--lyplus-text-secondary);\n }\n to {\n background-color: var(--lyplus-text-primary);\n }\n }\n\n /* Scroll animation — class is removed and re-added (with a forced\n reflow in between) to reliably restart the animation each time */\n @keyframes lyrics-scroll {\n from {\n transform: translateY(var(--scroll-delta)) translateZ(1px);\n }\n to {\n transform: translateY(0) translateZ(1px);\n }\n }\n\n /* Character grow animation - exact copy from YouLyPlus */\n @keyframes grow-dynamic {\n 0% {\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n 25%,\n 30% {\n transform: matrix3d(\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n calc(\n var(--char-offset-x, 0) *\n calc(var(--lyplus-font-size-base-grow) / 25)\n ),\n var(--translate-y-peak, -2),\n 0,\n 1\n );\n filter: drop-shadow(\n 0 0 0.1em\n color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent calc((1 - var(--shadow-intensity, 1)) * 100%)\n )\n );\n }\n 100% {\n transform: translateY(-3.5%) translateZ(1px);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n }\n\n @keyframes grow-static {\n 0%,\n 100% {\n transform: scale3d(1.01, 1.01, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%);\n }\n 30%,\n 40% {\n transform: scale3d(1.1, 1.1, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0.3em\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 50%);\n }\n }\n\n /* Fade in animation */\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 0.7;\n transform: translateY(0);\n }\n }\n\n /* Legacy support */\n .opposite-turn {\n text-align: right;\n }\n\n .singer-right {\n text-align: right;\n justify-content: flex-end;\n }\n\n .singer-left {\n text-align: left;\n justify-content: flex-start;\n }\n\n /* Legacy progress-text for backward compatibility */\n .progress-text {\n position: relative;\n display: inline-block;\n background: linear-gradient(\n to right,\n var(--lyplus-text-primary) 0%,\n var(--lyplus-text-primary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) 100%\n );\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--lyplus-text-secondary);\n transform: translate3d(0, 0, 0);\n will-change: background-size;\n }\n\n .progress-text::before {\n display: none;\n }\n\n .active-line {\n font-weight: bold;\n }\n\n .background-text {\n display: block;\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n font-style: normal;\n margin: 0;\n flex-shrink: 0;\n line-height: 1.1;\n }\n\n .background-text.before {\n order: -1;\n }\n\n .background-text.after {\n order: 1;\n }\n\n .instrumental-line {\n display: inline-flex;\n align-items: baseline;\n gap: 8px;\n color: var(--lyplus-text-secondary);\n font-size: 0.9em;\n padding: 4px 10px;\n animation: fadeInUp 220ms ease;\n font-weight: normal;\n }\n\n .instrumental-duration {\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n }\n `;\n\n @property({ type: String })\n query?: string;\n\n @property({ type: String })\n musicId?: string;\n\n @property({ type: String })\n isrc?: string;\n\n @property({ type: String, attribute: 'song-title' })\n songTitle?: string;\n\n @state()\n private downloadFormat: 'auto' | 'lrc' | 'ttml' = 'auto';\n\n @property({ type: String, attribute: 'song-artist' })\n songArtist?: string;\n\n @property({ type: String, attribute: 'song-album' })\n songAlbum?: string;\n\n @property({ type: Number, attribute: 'song-duration' })\n songDurationMs?: number;\n\n @property({ type: String, attribute: 'highlight-color' })\n highlightColor = '#ffffff';\n\n @property({ type: String, attribute: 'hover-background-color' })\n hoverBackgroundColor = 'rgba(255, 255, 255, 0.13)';\n\n @property({ type: String, attribute: 'font-family' })\n fontFamily?: string;\n\n @property({ type: Boolean })\n autoScroll = true;\n\n @property({ type: Boolean })\n interpolate = true;\n\n @state()\n private showRomanization = false;\n\n @state()\n private showTranslation = false;\n\n private async toggleRomanization() {\n this.showRomanization = !this.showRomanization;\n await this.applyRomanization();\n }\n\n private async applyRomanization() {\n if (this.showRomanization && this.lyrics) {\n const needsRomanization = this.lyrics.some(\n l =>\n !l.romanizedText && (!l.text || !l.text.some(s => s.romanizedText)),\n );\n\n if (needsRomanization) {\n this.isLoading = true;\n try {\n const romanizedLines = await GoogleService.romanize(this.lyrics);\n this.lyrics = romanizedLines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Romanization failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n private async toggleTranslation() {\n this.showTranslation = !this.showTranslation;\n await this.applyTranslation();\n }\n\n private async applyTranslation() {\n if (this.showTranslation && this.lyrics) {\n const needsTranslation = this.lyrics.some(l => !l.translation);\n if (needsTranslation) {\n this.isLoading = true;\n try {\n // Prepare batch: extract text from all lines\n const textToTranslate = this.lyrics.map(line => {\n if (line.translation) return '';\n return line.text.map(s => s.text).join('');\n });\n\n // If all are empty, skip\n if (textToTranslate.every(t => !t)) {\n this.isLoading = false;\n return;\n }\n\n const result = await GoogleService.translate(textToTranslate, 'en');\n const translations = Array.isArray(result) ? result : [result];\n\n const newLyrics = this.lyrics.map((line, index) => {\n if (line.translation) return line;\n return {\n ...line,\n translation: translations[index] || undefined,\n };\n });\n\n this.lyrics = newLyrics;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Translation failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n @property({ type: Number })\n duration?: number;\n\n private _currentTime = 0;\n\n @property({ type: Number, attribute: 'currenttime', hasChanged: () => false })\n set currentTime(value: number) {\n const oldValue = this._currentTime;\n this._currentTime = value;\n if (oldValue !== value && this.lyrics) {\n this._onTimeChanged(oldValue, value);\n }\n }\n\n get currentTime(): number {\n return this._currentTime;\n }\n\n @state()\n private isLoading = false;\n\n @state()\n private lyrics?: LyricsLine[];\n\n private activeLineIndices: number[] = [];\n\n private activeMainWordIndices: Map<number, number> = new Map();\n\n private activeBackgroundWordIndices: Map<number, number> = new Map();\n\n private mainWordProgress: Map<number, number> = new Map();\n\n private backgroundWordProgress: Map<number, number> = new Map();\n\n @state()\n private lyricsSource: string | null = null;\n\n @state()\n private availableSources: { lines: LyricsLine[]; source: string }[] = [];\n\n @state()\n private currentSourceIndex = 0;\n\n @state()\n private isFetchingAlternatives = false;\n\n @state()\n private hasFetchedAllProviders = false;\n\n private animationFrameId?: number;\n\n private mainWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n private backgroundWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n @query('.lyrics-container')\n private lyricsContainer?: HTMLElement;\n\n private lastInstrumentalIndex: number | null = null;\n\n private userScrollTimeoutId?: number;\n\n @state()\n private isUserScrolling = false;\n\n private isProgrammaticScroll = false;\n\n private isClickSeeking = false;\n\n private clickSeekTimeout?: ReturnType<typeof setTimeout>;\n\n // Cached DOM elements for animation updates\n private cachedLyricsLines: HTMLElement[] = [];\n\n // Active line tracking\n private activeLineIds: Set<string> = new Set();\n\n private currentPrimaryActiveLine: HTMLElement | null = null;\n\n private lastPrimaryActiveLine: HTMLElement | null = null;\n\n // Scroll animation state\n private scrollAnimationState: {\n isAnimating: boolean;\n pendingUpdate: number | null;\n } | null = null;\n\n private currentScrollOffset = 0;\n\n private animatingLines: HTMLElement[] = [];\n\n private scrollUnlockTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n // AbortController for cancelling in-flight lyrics fetches\n private fetchAbortController?: AbortController;\n\n // Syllable animation tracking\n private lastActiveIndex = 0;\n\n private visibleLineIds: Set<string> = new Set();\n\n // Bound handler references for proper event listener removal\n private _boundHandleUserScroll = this.handleUserScroll.bind(this);\n\n private _boundAnimateProgress = this.animateProgress.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n this.fetchLyrics();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n if (this.clickSeekTimeout) {\n clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n // Cancel any in-flight fetch requests\n this.fetchAbortController?.abort();\n this.fetchAbortController = undefined;\n // Remove scroll event listeners\n if (this.lyricsContainer) {\n this.lyricsContainer.removeEventListener(\n 'wheel',\n this._boundHandleUserScroll,\n );\n this.lyricsContainer.removeEventListener(\n 'touchmove',\n this._boundHandleUserScroll,\n );\n }\n }\n\n private async fetchLyrics() {\n // Cancel any in-flight fetch to prevent stale results from racing\n this.fetchAbortController?.abort();\n const controller = new AbortController();\n this.fetchAbortController = controller;\n\n this.isLoading = true;\n this.lyrics = undefined;\n this.lyricsSource = null;\n this.availableSources = [];\n this.currentSourceIndex = 0;\n this.isFetchingAlternatives = false;\n this.hasFetchedAllProviders = false;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n // If a newer fetch was triggered while we awaited, bail out\n if (controller.signal.aborted) return;\n\n const isMusicIdOnlyRequest =\n Boolean(this.musicId) &&\n !this.songTitle &&\n !this.songArtist &&\n !this.query;\n\n const collectedSources: { lines: LyricsLine[]; source: string }[] = [];\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const title = resolvedMetadata.metadata.title?.trim() || '';\n const artist = resolvedMetadata.metadata.artist?.trim() || '';\n\n const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n );\n\n if (youLyResults && youLyResults.length > 0) {\n collectedSources.push(...youLyResults);\n }\n }\n\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const tidalResult = await AmLyrics.fetchLyricsFromTidal(\n resolvedMetadata.metadata,\n resolvedMetadata.catalogIsrc,\n );\n if (tidalResult && tidalResult.lines.length > 0) {\n collectedSources.push({\n lines: tidalResult.lines,\n source: 'Tidal',\n });\n }\n }\n\n // Fallback: LRCLIB\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(\n resolvedMetadata.metadata,\n );\n if (lrclibResult && lrclibResult.lines.length > 0) {\n collectedSources.push({\n lines: lrclibResult.lines,\n source: 'LRCLIB',\n });\n }\n }\n\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const geniusResult = await AmLyrics.fetchLyricsFromGenius(\n resolvedMetadata.metadata,\n );\n if (geniusResult && geniusResult.lines.length > 0) {\n collectedSources.push({\n lines: geniusResult.lines,\n source: 'Genius',\n });\n }\n }\n\n this.hasFetchedAllProviders =\n collectedSources.length === 0 ||\n collectedSources.some(\n s =>\n s.source === 'LRCLIB' ||\n s.source === 'Tidal' ||\n s.source === 'Genius',\n );\n\n if (collectedSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources(collectedSources);\n\n this.currentSourceIndex = 0;\n this.lyrics = this.availableSources[0].lines;\n this.lyricsSource = this.availableSources[0].source;\n await this.onLyricsLoaded();\n return;\n }\n\n this.lyrics = undefined;\n this.lyricsSource = null;\n } finally {\n // Only update loading state if this fetch wasn't superseded\n if (!controller.signal.aborted) {\n this.isLoading = false;\n }\n }\n }\n\n private async onLyricsLoaded() {\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n\n if (this.lyricsContainer) {\n this.isProgrammaticScroll = true;\n this.lyricsContainer.scrollTop = 0;\n window.setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n }\n\n await this.autoProcessLyrics();\n }\n\n private async autoProcessLyrics() {\n if (this.showRomanization) {\n await this.applyRomanization();\n }\n if (this.showTranslation) {\n await this.applyTranslation();\n }\n }\n\n private static getRankForCollected(\n sourceLabel: string,\n parsedLines: any[],\n ): number {\n const lower = sourceLabel.toLowerCase();\n const hasWordSync = parsedLines.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n const isUnsynced =\n parsedLines.length > 0 &&\n parsedLines.every(\n (line: any) => line.timestamp === 0 && line.endtime === 0,\n );\n const isQQ = lower.includes('qq') || lower.includes('lyricsplus');\n\n if (lower.includes('apple') && hasWordSync) return 1;\n if (isQQ && hasWordSync) return 2;\n if (lower.includes('musixmatch') && hasWordSync) return 3;\n if (lower.includes('tidal') && hasWordSync) return 4;\n if (lower.includes('lrclib') && hasWordSync) return 5;\n if (hasWordSync) return 6;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 7;\n if (isQQ && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 9;\n if (lower.includes('tidal') && !hasWordSync && !isUnsynced) return 10;\n if (lower.includes('lrclib') && !hasWordSync && !isUnsynced) return 11;\n if (!hasWordSync && !isUnsynced) return 12;\n\n if (lower.includes('apple') && isUnsynced) return 13;\n if (isQQ && isUnsynced) return 14;\n if (lower.includes('musixmatch') && isUnsynced) return 15;\n if (lower.includes('tidal') && isUnsynced) return 16;\n if (lower.includes('lrclib') && isUnsynced) return 17;\n if (lower.includes('genius')) return 18;\n\n return 20;\n }\n\n private static mergeAndSortSources(\n collectedSources: { lines: LyricsLine[]; source: string }[],\n ): { lines: LyricsLine[]; source: string }[] {\n const uniqueSourcesMap = new Map<\n string,\n { lines: LyricsLine[]; source: string }\n >();\n\n for (const source of collectedSources) {\n const normalizedSource = source.source\n .toLowerCase()\n .includes('lyricsplus')\n ? 'QQ'\n : source.source;\n\n if (!uniqueSourcesMap.has(normalizedSource)) {\n uniqueSourcesMap.set(normalizedSource, {\n ...source,\n source: normalizedSource,\n });\n }\n }\n\n return Array.from(uniqueSourcesMap.values()).sort(\n (a, b) =>\n AmLyrics.getRankForCollected(a.source, a.lines) -\n AmLyrics.getRankForCollected(b.source, b.lines),\n );\n }\n\n private async switchSource() {\n if (this.isFetchingAlternatives) return;\n\n if (!this.hasFetchedAllProviders) {\n this.isFetchingAlternatives = true;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n if (resolvedMetadata?.metadata) {\n const newSources: { lines: LyricsLine[]; source: string }[] = [];\n\n // Try Tidal if not fetched\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('tidal'),\n )\n ) {\n const tidalResult = await AmLyrics.fetchLyricsFromTidal(\n resolvedMetadata.metadata,\n resolvedMetadata.catalogIsrc,\n );\n if (tidalResult && tidalResult.lines.length > 0) {\n newSources.push({ lines: tidalResult.lines, source: 'Tidal' });\n }\n }\n\n // Try LRCLIB if not fetched\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('lrclib'),\n )\n ) {\n const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(\n resolvedMetadata.metadata,\n );\n if (lrclibResult && lrclibResult.lines.length > 0) {\n newSources.push({ lines: lrclibResult.lines, source: 'LRCLIB' });\n }\n }\n\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('genius'),\n )\n ) {\n const geniusResult = await AmLyrics.fetchLyricsFromGenius(\n resolvedMetadata.metadata,\n );\n if (geniusResult && geniusResult.lines.length > 0) {\n newSources.push({ lines: geniusResult.lines, source: 'Genius' });\n }\n }\n\n if (newSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources([\n ...this.availableSources,\n ...newSources,\n ]);\n // Re-sync current index since sorting might shift elements\n this.currentSourceIndex = this.availableSources.findIndex(\n s => s.source === this.lyricsSource,\n );\n if (this.currentSourceIndex === -1) this.currentSourceIndex = 0;\n }\n }\n } finally {\n this.hasFetchedAllProviders = true;\n this.isFetchingAlternatives = false;\n }\n }\n\n if (this.availableSources.length > 1) {\n this.currentSourceIndex =\n (this.currentSourceIndex + 1) % this.availableSources.length;\n this.lyrics = this.availableSources[this.currentSourceIndex].lines;\n this.lyricsSource = this.availableSources[this.currentSourceIndex].source;\n await this.onLyricsLoaded();\n }\n }\n\n private async resolveSongMetadata(): Promise<ResolvedMetadata> {\n const metadata: SongMetadata = {\n title: this.songTitle?.trim() ?? '',\n artist: this.songArtist?.trim() ?? '',\n album: this.songAlbum?.trim() || undefined,\n durationMs: undefined,\n };\n\n if (typeof this.songDurationMs === 'number' && this.songDurationMs > 0) {\n metadata.durationMs = this.songDurationMs;\n } else if (typeof this.duration === 'number' && this.duration > 0) {\n metadata.durationMs = this.duration;\n }\n\n const appleSong: any = null;\n let appleId = this.musicId;\n let catalogIsrc: string | undefined;\n\n if (\n this.query &&\n (!metadata.title || !metadata.artist || !metadata.album)\n ) {\n const parsed = AmLyrics.parseQueryMetadata(this.query);\n if (parsed) {\n if (!metadata.title && parsed.title) {\n metadata.title = parsed.title;\n }\n if (!metadata.artist && parsed.artist) {\n metadata.artist = parsed.artist;\n }\n if (!metadata.album && parsed.album) {\n metadata.album = parsed.album;\n }\n }\n }\n\n let catalogResult: SongCatalogResult | null = null;\n\n if (this.query && (!metadata.title || !metadata.artist)) {\n catalogResult = await AmLyrics.searchLyricsPlusCatalog(this.query);\n\n if (catalogResult) {\n if (!metadata.title && catalogResult.title) {\n metadata.title = catalogResult.title;\n }\n if (!metadata.artist && catalogResult.artist) {\n metadata.artist = catalogResult.artist;\n }\n if (!metadata.album && catalogResult.album) {\n metadata.album = catalogResult.album;\n }\n if (\n metadata.durationMs == null &&\n typeof catalogResult.durationMs === 'number' &&\n catalogResult.durationMs > 0\n ) {\n metadata.durationMs = catalogResult.durationMs;\n }\n\n if (!appleId && catalogResult.id?.appleMusic) {\n appleId = catalogResult.id.appleMusic;\n }\n\n if (!catalogIsrc && catalogResult.isrc) {\n catalogIsrc = catalogResult.isrc;\n }\n }\n }\n\n const trimmedTitle = metadata.title?.trim() ?? '';\n const trimmedArtist = metadata.artist?.trim() ?? '';\n const trimmedAlbum = metadata.album?.trim();\n const sanitizedDuration =\n typeof metadata.durationMs === 'number' &&\n Number.isFinite(metadata.durationMs) &&\n metadata.durationMs > 0\n ? Math.round(metadata.durationMs)\n : undefined;\n\n const finalMetadata =\n trimmedTitle && trimmedArtist\n ? {\n title: trimmedTitle,\n artist: trimmedArtist,\n album: trimmedAlbum || undefined,\n durationMs: sanitizedDuration,\n }\n : undefined;\n\n return {\n metadata: finalMetadata,\n appleId,\n appleSong,\n catalogIsrc,\n };\n }\n\n private static parseQueryMetadata(\n rawQuery: string,\n ): ParsedQueryMetadata | null {\n const trimmed = rawQuery?.trim();\n if (!trimmed) return null;\n\n const result: ParsedQueryMetadata = {};\n\n const hyphenSplit = trimmed.split(/\\s[-–—]\\s/);\n if (hyphenSplit.length >= 2) {\n const [rawTitle, ...rest] = hyphenSplit;\n const rawArtist = rest.join(' - ');\n const titleCandidate = rawTitle.trim();\n const artistCandidate = rawArtist.trim();\n if (titleCandidate && artistCandidate) {\n result.title = titleCandidate;\n result.artist = artistCandidate;\n return result;\n }\n }\n\n const bySplit = trimmed.split(/\\s+[bB]y\\s+/);\n if (bySplit.length === 2) {\n const [maybeTitle, maybeArtist] = bySplit.map(part => part.trim());\n if (maybeTitle && maybeArtist) {\n result.title = maybeTitle;\n result.artist = maybeArtist;\n return result;\n }\n }\n\n return null;\n }\n\n private static async searchLyricsPlusCatalog(\n searchTerm: string,\n ): Promise<SongCatalogResult | null> {\n const trimmedQuery = searchTerm?.trim();\n if (!trimmedQuery) return null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v1/songlist/search?q=${encodeURIComponent(\n trimmedQuery,\n )}`;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n const payload = await response.json();\n let results: SongCatalogResult[] = [];\n\n const typedPayload = payload as {\n results?: SongCatalogResult[];\n } | null;\n\n if (Array.isArray(typedPayload?.results)) {\n results = typedPayload.results as SongCatalogResult[];\n } else if (Array.isArray(payload)) {\n results = payload as SongCatalogResult[];\n }\n\n if (results.length > 0) {\n const primary = results.find(\n (item: SongCatalogResult) => item?.id && item.id.appleMusic,\n );\n return (primary ?? results[0]) as SongCatalogResult;\n }\n }\n } catch (error) {\n // Ignore and try next server\n }\n }\n\n return null;\n }\n\n private static async fetchLyricsFromYouLyPlus(\n title: string,\n artist: string,\n isrc?: string,\n metadata: { durationMs?: number; album?: string } = {},\n ): Promise<YouLyPlusLyricsResult[]> {\n if (!title || !artist) return [];\n\n const params = new URLSearchParams({ title, artist });\n\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n if (!DEFAULT_KPOE_SOURCE_ORDER.includes('apple')) {\n params.append('source', DEFAULT_KPOE_SOURCE_ORDER);\n }\n\n const getRank = (sourceLabel: string, parsedLines: any[]): number => {\n const lower = sourceLabel.toLowerCase();\n const hasWordSync = parsedLines.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n\n const isUnsynced =\n parsedLines.length > 0 &&\n parsedLines.every(\n (line: any) => line.timestamp === 0 && line.endtime === 0,\n );\n\n const isQQ = lower.includes('qq') || lower.includes('lyricsplus');\n\n if (lower.includes('apple') && hasWordSync) return 1;\n if (isQQ && hasWordSync) return 2;\n if (lower.includes('musixmatch') && hasWordSync) return 3;\n if (hasWordSync) return 4;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 5;\n if (isQQ && !hasWordSync && !isUnsynced) return 6;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 7;\n if (!hasWordSync && !isUnsynced) return 8;\n\n if (lower.includes('apple') && isUnsynced) return 9;\n if (isQQ && isUnsynced) return 10;\n if (lower.includes('musixmatch') && isUnsynced) return 11;\n\n return 20;\n };\n\n const allResults: YouLyPlusLyricsResult[] = [];\n\n // Try BiniLyrics cache API first\n try {\n let cacheData: any = null;\n\n // First attempt: Prefer ISRC search if available\n if (isrc) {\n try {\n const isrcUrl = `https://lyrics-api.binimum.org/?isrc=${encodeURIComponent(isrc)}`;\n const isrcRes = await fetchWithTimeout(isrcUrl);\n if (isrcRes.ok) {\n const data = await isrcRes.json();\n if (data.results && data.results.length > 0) {\n cacheData = data;\n }\n }\n } catch (isrcErr) {\n // Fall through to title/artist search\n }\n }\n\n // Second attempt: Fallback to title and artist search if ISRC search failed or was not available\n if (!cacheData) {\n const cacheParams = new URLSearchParams({\n track: title,\n artist,\n });\n if (metadata.album) {\n cacheParams.append('album', metadata.album);\n }\n if (metadata.durationMs && metadata.durationMs > 0) {\n cacheParams.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n const cacheUrl = `https://lyrics-api.binimum.org/?${cacheParams.toString()}`;\n const cacheRes = await fetchWithTimeout(cacheUrl);\n if (cacheRes.ok) {\n cacheData = await cacheRes.json();\n }\n }\n\n if (cacheData && cacheData.results && cacheData.results.length > 0) {\n const result = cacheData.results[0];\n if (result.timing_type === 'word' && result.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const lines = AmLyrics.parseTTML(ttmlText);\n if (lines && lines.length > 0) {\n allResults.push({ lines, source: 'BiniLyrics' });\n return allResults;\n }\n }\n } else {\n // Not word type, try fetching any word synced lyrics from lyricsplus\n const fallbackParams = new URLSearchParams(params);\n const fallbackUrl = `https://lyricsplus.binimum.org/v2/lyrics/get?${fallbackParams.toString()}`;\n try {\n const fallbackRes = await fetchWithTimeout(fallbackUrl);\n if (fallbackRes.ok) {\n const payload = await fallbackRes.json();\n const lines = AmLyrics.convertKPoeLyrics(payload);\n const hasWordSync = lines?.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n if (lines && lines.length > 0 && hasWordSync) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n allResults.push({ lines, source: sourceLabel });\n return allResults;\n }\n }\n } catch (fallbackError) {\n // Ignore fallback fetch error\n }\n\n // If fallback fails or has no word sync, fall back to bini lyrics\n if (result.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const lines = AmLyrics.parseTTML(ttmlText);\n if (lines && lines.length > 0) {\n allResults.push({\n lines,\n source: 'BiniLyrics',\n });\n return allResults;\n }\n }\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Cache API failed', e);\n }\n\n // Shuffle servers so we pick a random one first, with all others as fallback\n // Try up to 3 servers to improve reliability when some have CORS or connectivity issues\n const shuffledServers = [...KPOE_SERVERS]\n .sort(() => Math.random() - 0.5)\n .slice(0, 3);\n\n for (const base of shuffledServers) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v2/lyrics/get?${params.toString()}`;\n\n let payload: any = null;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n payload = await response.json();\n }\n } catch {\n payload = null;\n }\n\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n if (lines && lines.length > 0) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n\n const rank = getRank(sourceLabel, lines);\n const result = { lines, source: sourceLabel };\n\n allResults.push(result);\n\n // If source is Apple synced, we have the best so we can just immediately break the sweep\n if (rank === 1) {\n break;\n }\n }\n }\n }\n\n // If we haven't found a completely synced result (rank 1 or 2) among the servers,\n // force an explicit query against lyricsplus.binimum.org looking for word lyrics\n const hasHighRankResult = allResults.some(\n r => getRank(r.source, r.lines) <= 2,\n );\n\n if (!hasHighRankResult) {\n try {\n const fallbackParams = new URLSearchParams(params);\n const url = `https://lyricsplus.binimum.org/v2/lyrics/get?${fallbackParams.toString()}`;\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n const payload = await response.json();\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n const hasWordSync = lines?.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n if (lines && lines.length > 0 && hasWordSync) {\n allResults.push({ lines, source: sourceLabel });\n }\n }\n }\n } catch (error) {\n // Explicit fallback failed, ignore\n }\n }\n\n return allResults;\n }\n\n /**\n * Parse LRC subtitle format into LyricsLine[].\n * Handles \"[mm:ss.xx] text\" lines.\n */\n private static parseLrcSubtitles(lrc: string): LyricsLine[] {\n if (!lrc || typeof lrc !== 'string') return [];\n\n const lines: LyricsLine[] = [];\n const rawLines = lrc.split('\\n');\n const parsed: { timestamp: number; text: string }[] = [];\n\n for (const raw of rawLines) {\n const match = raw.match(/^\\[(\\d{1,3}):(\\d{2})\\.(\\d{2,3})\\]\\s?(.*)$/);\n if (!match) {\n // Skip non-timestamped lines (headers like [ti:], [ar:], etc.)\n // eslint-disable-next-line no-continue\n continue;\n }\n const minutes = parseInt(match[1], 10);\n const seconds = parseInt(match[2], 10);\n let centiseconds = parseInt(match[3], 10);\n // Handle both mm:ss.xx (centiseconds) and mm:ss.xxx (milliseconds)\n if (match[3].length === 3) {\n centiseconds = Math.round(centiseconds / 10);\n }\n const timestamp = (minutes * 60 + seconds) * 1000 + centiseconds * 10;\n const text = match[4] || '';\n parsed.push({ timestamp, text });\n }\n\n for (let i = 0; i < parsed.length; i += 1) {\n const { timestamp, text } = parsed[i];\n // Endtime is the start of the next line, or timestamp + 5s for the last line\n const endtime =\n i + 1 < parsed.length ? parsed[i + 1].timestamp : timestamp + 5000;\n\n // Skip empty lines (instrumental gaps)\n if (!text.trim()) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const syllable: Syllable = {\n text,\n part: false,\n timestamp,\n endtime,\n lineSynced: true,\n };\n\n lines.push({\n text: [syllable],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp,\n endtime,\n isWordSynced: false,\n });\n }\n\n return lines;\n }\n\n /**\n * Fetch lyrics from Tidal API.\n * Picks 2 random servers, tries search + lyrics on each.\n */\n private static async fetchLyricsFromTidal(\n metadata: SongMetadata,\n isrc?: string,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n // Pick 3 random unique servers for better reliability\n const shuffled = [...TIDAL_SERVERS].sort(() => Math.random() - 0.5);\n const serversToTry = shuffled.slice(0, 3);\n\n for (const base of serversToTry) {\n try {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n\n // Step 1: Search for the track\n const searchQuery = `${title} ${artist}`;\n const searchParams = new URLSearchParams({ s: searchQuery });\n // eslint-disable-next-line no-await-in-loop\n const searchResponse = await fetchWithTimeout(\n `${normalizedBase}/search/?${searchParams.toString()}`,\n );\n\n if (!searchResponse.ok) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // eslint-disable-next-line no-await-in-loop\n const searchData = await searchResponse.json();\n const items = searchData?.data?.items;\n\n if (!Array.isArray(items) || items.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Find best match: prefer ISRC match, then first result\n let bestTrack = items[0];\n if (isrc) {\n const isrcMatch = items.find(\n (item: any) =>\n item.isrc && item.isrc.toLowerCase() === isrc.toLowerCase(),\n );\n if (isrcMatch) {\n bestTrack = isrcMatch;\n }\n }\n\n const trackId = bestTrack?.id;\n if (!trackId) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Step 2: Fetch lyrics\n // eslint-disable-next-line no-await-in-loop\n const lyricsResponse = await fetchWithTimeout(\n `${normalizedBase}/lyrics/?id=${trackId}`,\n );\n\n if (!lyricsResponse.ok) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // eslint-disable-next-line no-await-in-loop\n const lyricsData = await lyricsResponse.json();\n const subtitles = lyricsData?.lyrics?.subtitles;\n\n if (subtitles && typeof subtitles === 'string') {\n const lines = AmLyrics.parseLrcSubtitles(subtitles);\n if (lines.length > 0) {\n const provider = lyricsData?.lyrics?.lyricsProvider || 'Tidal';\n return {\n lines,\n source: `Tidal (${provider})`,\n };\n }\n }\n } catch {\n // Try next server\n }\n }\n\n return null;\n }\n\n /**\n * Fetch lyrics from LRCLIB.\n * Uses search endpoint, prefers synced lyrics.\n */\n private static async fetchLyricsFromLrclib(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n try {\n const searchQuery = `${artist} ${title}`;\n const params = new URLSearchParams({ q: searchQuery });\n const response = await fetchWithTimeout(\n `https://lrclib.net/api/search?${params.toString()}`,\n {\n headers: {\n 'User-Agent': `apple-music-web-components/${VERSION}`,\n },\n },\n );\n\n if (!response.ok) return null;\n\n const results = await response.json();\n if (!Array.isArray(results) || results.length === 0) return null;\n\n // Prefer results with synced lyrics\n const withSynced = results.find(\n (r: any) => r.syncedLyrics && typeof r.syncedLyrics === 'string',\n );\n const bestMatch = withSynced || results[0];\n\n // Try synced lyrics first\n if (bestMatch.syncedLyrics) {\n const lines = AmLyrics.parseLrcSubtitles(bestMatch.syncedLyrics);\n if (lines.length > 0) {\n return { lines, source: 'LRCLIB' };\n }\n }\n\n // Fall back to plain lyrics (unsynced)\n if (bestMatch.plainLyrics && typeof bestMatch.plainLyrics === 'string') {\n const plainLines = bestMatch.plainLyrics\n .split('\\n')\n .filter((l: string) => l.trim());\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [\n {\n text,\n part: false,\n timestamp: 0,\n endtime: 0,\n },\n ],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'LRCLIB (unsynced)' };\n }\n }\n } catch {\n // LRCLIB fetch failed\n }\n\n return null;\n }\n\n private static async fetchLyricsFromGenius(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n try {\n const params = new URLSearchParams({ title, artist });\n const response = await fetchWithTimeout(\n `${GENIUS_WORKER_URL}?${params.toString()}`,\n );\n\n if (!response.ok) return null;\n const data = await response.json();\n\n if (data.lyrics) {\n const plainLines = data.lyrics\n .split('\\n')\n .map((l: string) => l.trim())\n .filter((l: string) => l && !l.startsWith('['));\n\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [\n {\n text,\n part: false,\n timestamp: 0,\n endtime: 0,\n },\n ],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'Genius' };\n }\n }\n } catch {\n // Genius fetch failed, will fall through to return null\n }\n\n return null;\n }\n\n private static calculateLineAlignments(\n lineSingers: (string | undefined)[],\n agentTypes: Record<string, string>,\n ): ('start' | 'end' | undefined)[] {\n const lineSideAssignments = new Array(lineSingers.length).fill(undefined);\n let currentSideIsLeft = true;\n let lastPersonSingerId: string | null = null;\n let rightCount = 0;\n let totalCount = 0;\n\n lineSingers.forEach((singerId, index) => {\n let sideClass: 'start' | 'end' | undefined;\n\n if (singerId) {\n let type = agentTypes[singerId];\n if (!type) {\n if (singerId === 'v1000') {\n type = 'group';\n } else if (singerId === 'v2000') {\n type = 'other';\n } else {\n type = 'person';\n }\n }\n\n if (type === 'group') {\n sideClass = 'start';\n } else {\n if (lastPersonSingerId === null) {\n if (type === 'other') {\n currentSideIsLeft = false;\n } else {\n currentSideIsLeft = true;\n }\n } else if (singerId !== lastPersonSingerId) {\n currentSideIsLeft = !currentSideIsLeft;\n }\n\n sideClass = currentSideIsLeft ? 'start' : 'end';\n lastPersonSingerId = singerId;\n }\n }\n\n if (sideClass) {\n totalCount += 1;\n if (sideClass === 'end') rightCount += 1;\n }\n\n lineSideAssignments[index] = sideClass;\n });\n\n if (totalCount > 0 && Math.round((rightCount / totalCount) * 100) >= 85) {\n const flip = (s: 'start' | 'end' | undefined) => {\n if (s === 'start') return 'end';\n if (s === 'end') return 'start';\n return s;\n };\n\n for (let i = 0; i < lineSideAssignments.length; i += 1) {\n lineSideAssignments[i] = flip(lineSideAssignments[i]);\n }\n }\n\n return lineSideAssignments;\n }\n\n private static parseTTML(ttmlString: string): LyricsLine[] | null {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(ttmlString, 'text/xml');\n\n const translations: Record<string, string> = {};\n const transliterations: Record<string, any> = {};\n const agentMap: Record<string, string> = {};\n\n const agents = doc.getElementsByTagName('ttm:agent');\n for (let i = 0; i < agents.length; i += 1) {\n const agent = agents[i];\n const id = agent.getAttribute('xml:id');\n const type = agent.getAttribute('type');\n if (id && type) {\n agentMap[id] = type;\n }\n }\n\n const translationNodes = doc.getElementsByTagName('translation');\n for (let i = 0; i < translationNodes.length; i += 1) {\n const texts = translationNodes[i].getElementsByTagName('text');\n for (let j = 0; j < texts.length; j += 1) {\n const textNode = texts[j];\n const key = textNode.getAttribute('for');\n if (key && textNode.textContent) {\n translations[key] = textNode.textContent;\n }\n }\n }\n\n const timeToMs = (timeStr: string | null): number => {\n if (!timeStr) return 0;\n const parts = timeStr.split(':');\n let seconds = 0;\n if (parts.length === 2) {\n seconds = parseInt(parts[0], 10) * 60 + parseFloat(parts[1]);\n } else if (parts.length === 3) {\n seconds =\n parseInt(parts[0], 10) * 3600 +\n parseInt(parts[1], 10) * 60 +\n parseFloat(parts[2]);\n } else {\n seconds = parseFloat(parts[0]);\n }\n return Math.round(seconds * 1000);\n };\n\n const transliterationNodes = doc.getElementsByTagName('transliteration');\n for (let i = 0; i < transliterationNodes.length; i += 1) {\n const texts = transliterationNodes[i].getElementsByTagName('text');\n for (let j = 0; j < texts.length; j += 1) {\n const textNode = texts[j];\n const key = textNode.getAttribute('for');\n if (!key) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const spans = Array.from(\n textNode.getElementsByTagName('span'),\n ).filter(span => span.getAttribute('begin'));\n\n if (spans.length > 0) {\n const syllabus: any[] = [];\n let fullText = '';\n for (let k = 0; k < spans.length; k += 1) {\n const span = spans[k];\n const begin = span.getAttribute('begin');\n const end = span.getAttribute('end');\n let spanText = span.textContent || '';\n const nextNode = span.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !spanText.endsWith(' ')\n ) {\n spanText += ' ';\n }\n if (spanText.trim() === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n syllabus.push({\n time: timeToMs(begin),\n duration: timeToMs(end) - timeToMs(begin),\n text: spanText,\n });\n fullText += spanText;\n }\n transliterations[key] = { text: fullText.trim(), syllabus };\n } else if (textNode.textContent) {\n transliterations[key] = {\n text: textNode.textContent.trim().replace(/\\s+/g, ' '),\n };\n }\n }\n }\n\n const lines: LyricsLine[] = [];\n const pNodes = doc.getElementsByTagName('p');\n\n const lineSingers: (string | undefined)[] = [];\n for (let i = 0; i < pNodes.length; i += 1) {\n lineSingers.push(pNodes[i].getAttribute('ttm:agent') || undefined);\n }\n const alignments = AmLyrics.calculateLineAlignments(\n lineSingers,\n agentMap,\n );\n\n for (let i = 0; i < pNodes.length; i += 1) {\n const p = pNodes[i];\n const key = p.getAttribute('itunes:key');\n const beginMs = timeToMs(p.getAttribute('begin'));\n const endMs = timeToMs(p.getAttribute('end'));\n\n let songPart: string | undefined;\n if (p.parentNode && (p.parentNode as Element).tagName === 'div') {\n songPart =\n (p.parentNode as Element).getAttribute('itunes:songPart') ||\n undefined;\n }\n\n const mainSyllables: Syllable[] = [];\n const bgSyllables: Syllable[] = [];\n\n const spans = p.getElementsByTagName('span');\n if (spans.length > 0) {\n for (let j = 0; j < spans.length; j += 1) {\n const span = spans[j];\n\n if (span.getAttribute('ttm:role') === 'x-bg') {\n const bgInnerSpans = span.getElementsByTagName('span');\n for (let k = 0; k < bgInnerSpans.length; k += 1) {\n const bgSpan = bgInnerSpans[k];\n let bgText = bgSpan.textContent || '';\n const nextNode = bgSpan.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !bgText.endsWith(' ')\n ) {\n bgText += ' ';\n }\n bgSyllables.push({\n text: bgText,\n timestamp: timeToMs(bgSpan.getAttribute('begin')),\n endtime: timeToMs(bgSpan.getAttribute('end')),\n part: false,\n });\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n span.parentNode &&\n (span.parentNode as Element).getAttribute?.('ttm:role') === 'x-bg'\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n let text = span.textContent || '';\n const nextNode = span.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !text.endsWith(' ')\n ) {\n text += ' ';\n }\n mainSyllables.push({\n text,\n timestamp: timeToMs(span.getAttribute('begin')),\n endtime: timeToMs(span.getAttribute('end')),\n part: false,\n });\n }\n } else {\n mainSyllables.push({\n text: p.textContent?.trim() || '',\n timestamp: beginMs,\n endtime: endMs,\n part: false,\n lineSynced: true,\n });\n }\n\n const alignment = alignments[i];\n\n // Distribute line-level transliteration to individual syllables\n // so that per-syllable animated romanisation works (like KPoe lyrics)\n const lineTransliterationItem = key ? transliterations[key] : undefined;\n if (\n lineTransliterationItem &&\n mainSyllables.length > 1 &&\n spans.length > 0\n ) {\n if (\n lineTransliterationItem.syllabus &&\n lineTransliterationItem.syllabus.length === mainSyllables.length\n ) {\n mainSyllables.forEach((syl, mapIdx) => {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = lineTransliterationItem.syllabus[mapIdx].text;\n });\n } else {\n const lineTransliteration = lineTransliterationItem.text;\n const romanWords = lineTransliteration.split(/\\s+/).filter(Boolean);\n\n const syllableGroups: number[][] = [];\n for (let si = 0; si < mainSyllables.length; si += 1) {\n if (mainSyllables[si].part && syllableGroups.length > 0) {\n syllableGroups[syllableGroups.length - 1].push(si);\n } else {\n syllableGroups.push([si]);\n }\n }\n\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n mainSyllables.map(s => s.text).join(''),\n );\n\n if (romanWords.length === syllableGroups.length) {\n syllableGroups.forEach((group, gi) => {\n // eslint-disable-next-line no-param-reassign\n mainSyllables[group[0]].romanizedText = romanWords[gi];\n });\n } else if (romanWords.length === mainSyllables.length) {\n mainSyllables.forEach((syl, mapIdx) => {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = romanWords[mapIdx];\n });\n } else if (isCJK) {\n let romanIdx = 0;\n for (const group of syllableGroups) {\n const syl = mainSyllables[group[0]];\n const sylText = group\n .map(gIndex => mainSyllables[gIndex].text)\n .join('');\n const validChars =\n sylText.match(\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7afA-Za-z0-9]/g,\n ) || [];\n const needed = validChars.length;\n if (needed > 0 && romanIdx < romanWords.length) {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = romanWords\n .slice(romanIdx, romanIdx + needed)\n .join(' ');\n romanIdx += needed;\n }\n }\n }\n }\n }\n\n lines.push({\n text: mainSyllables,\n background: bgSyllables.length > 0,\n backgroundText: bgSyllables,\n timestamp: beginMs,\n endtime: endMs,\n isWordSynced: spans.length > 0,\n alignment,\n songPart,\n translation: key ? translations[key] : undefined,\n romanizedText: lineTransliterationItem?.text,\n oppositeTurn: alignment === 'end',\n });\n }\n\n return lines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to parse TTML', e);\n return null;\n }\n }\n\n private static convertKPoeLyrics(payload: any): LyricsLine[] | null {\n if (!payload) {\n return null;\n }\n\n let rawLyrics: any[] | null = null;\n if (Array.isArray(payload?.lyrics)) {\n rawLyrics = payload.lyrics;\n } else if (Array.isArray(payload?.data?.lyrics)) {\n rawLyrics = payload.data.lyrics;\n } else if (Array.isArray(payload?.data)) {\n rawLyrics = payload.data;\n }\n\n if (!rawLyrics || rawLyrics.length === 0) {\n return null;\n }\n\n const sanitizedEntries = rawLyrics.filter((item: any) => Boolean(item));\n const lines: LyricsLine[] = [];\n\n // If type is 'Line', we revert to line-by-line highlighting by skipping syllabus parsing\n const isLineType = payload.type === 'Line' || payload.type === 'line';\n\n // Convert metadata.agents to type map\n const agentTypes: Record<string, string> = {};\n if (payload.metadata?.agents) {\n Object.entries(payload.metadata.agents).forEach(\n ([key, agent]: [string, any]) => {\n const mappedKey = agent.alias || key;\n agentTypes[mappedKey] = agent.type;\n },\n );\n }\n\n const lineSingers = sanitizedEntries.map(\n (entry: any) => entry.element?.singer,\n );\n const alignments = AmLyrics.calculateLineAlignments(\n lineSingers,\n agentTypes,\n );\n\n for (let i = 0; i < sanitizedEntries.length; i += 1) {\n const entry = sanitizedEntries[i];\n const start = AmLyrics.toMilliseconds(entry.time);\n const duration = AmLyrics.toMilliseconds(entry.duration);\n\n const alignment = alignments[i];\n const lineText = typeof entry.text === 'string' ? entry.text : '';\n const lineStart = AmLyrics.toMilliseconds(entry.time);\n const lineDuration = AmLyrics.toMilliseconds(entry.duration);\n const explicitEnd = AmLyrics.toMilliseconds(entry.endTime);\n const lineEnd = explicitEnd || lineStart + (lineDuration || 0);\n\n let syllabus = [];\n if (Array.isArray(entry.syllabus)) {\n syllabus = entry.syllabus.filter((s: any) => Boolean(s));\n } else if (Array.isArray(entry.words)) {\n syllabus = entry.words.filter((s: any) => Boolean(s));\n }\n\n const mainSyllables: Syllable[] = [];\n const backgroundSyllables: Syllable[] = [];\n\n if (!isLineType && syllabus.length > 0) {\n for (const syl of syllabus) {\n const sylStart = AmLyrics.toMilliseconds(syl.time, lineStart);\n const sylDuration = AmLyrics.toMilliseconds(syl.duration);\n\n // If there's only 1 syllable and duration is 0, it's likely a line-synced fallback.\n // Otherwise, it's an instantaneous boundary (like a space or comma) and should not span the line.\n const sylEnd =\n sylDuration === 0 && syllabus.length === 1\n ? lineEnd\n : sylStart + sylDuration;\n\n const syllable: Syllable = {\n text: typeof syl.text === 'string' ? syl.text : '',\n part: Boolean(syl.part),\n timestamp: sylStart,\n endtime: sylEnd,\n };\n\n if (syl.isBackground) {\n backgroundSyllables.push(syllable);\n } else {\n mainSyllables.push(syllable);\n }\n }\n }\n\n if (mainSyllables.length === 0 && lineText) {\n mainSyllables.push({\n text: lineText,\n part: false,\n timestamp: lineStart,\n endtime: lineEnd || lineStart,\n lineSynced: isLineType, // Mark as line-synced\n });\n }\n\n const hasWordSync =\n mainSyllables.length > 0 || backgroundSyllables.length > 0;\n\n const { transliteration } = entry;\n let romanizedTextFromPayload: string | undefined;\n\n if (transliteration) {\n romanizedTextFromPayload = transliteration.text;\n // If syllabus data matches, map it to main syllables\n if (\n Array.isArray(transliteration.syllabus) &&\n transliteration.syllabus.length === mainSyllables.length\n ) {\n transliteration.syllabus.forEach((s: any, idx: number) => {\n mainSyllables[idx].romanizedText = s.text;\n });\n }\n }\n\n // Extract translation from KPoe API if available\n const translationText = entry.translation?.text;\n\n const lineResult: LyricsLine = {\n text: mainSyllables,\n background: backgroundSyllables.length > 0,\n backgroundText: backgroundSyllables,\n oppositeTurn:\n alignment === 'end' ||\n (Array.isArray(entry.element)\n ? entry.element.includes('opposite') ||\n entry.element.includes('right')\n : false),\n timestamp: lineStart,\n endtime: start + duration,\n isWordSynced: isLineType ? false : hasWordSync,\n alignment,\n songPart: entry.element?.songPart,\n romanizedText: romanizedTextFromPayload,\n translation: translationText,\n };\n\n lines.push(lineResult);\n }\n\n return lines;\n }\n\n private static toMilliseconds(value: unknown, fallback = 0): number {\n const num = Number(value);\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n return fallback;\n }\n\n if (!Number.isInteger(num)) {\n return Math.round(num * 1000);\n }\n\n return Math.max(0, Math.round(num));\n }\n\n firstUpdated() {\n // Set up scroll event listener for user scroll detection\n // Use wheel/touchmove which are guaranteed to be user initiated,\n // unlike 'scroll' which fires for both user and programmatic/inertia\n if (this.lyricsContainer) {\n this.lyricsContainer.addEventListener(\n 'wheel',\n this._boundHandleUserScroll,\n { passive: true },\n );\n this.lyricsContainer.addEventListener(\n 'touchmove',\n this._boundHandleUserScroll,\n { passive: true },\n );\n }\n }\n\n /**\n * Handle currentTime changes imperatively, bypassing Lit's render cycle.\n * This prevents the template from re-rendering on every frame, which would\n * reset imperative animation classes (highlight, finished, etc.) set by\n * updateSyllablesForLine.\n */\n private _onTimeChanged(oldTime: number, newTime: number): void {\n const timeDiff = Math.abs(newTime - oldTime);\n const isSeek = timeDiff > SEEK_THRESHOLD_MS;\n\n const newActiveLines = this.findActiveLineIndices(newTime);\n const oldActiveLines = this.activeLineIndices;\n\n // Reset animation if active lines change or if we skip time.\n const linesChanged = !AmLyrics.arraysEqual(newActiveLines, oldActiveLines);\n\n if (linesChanged || isSeek) {\n // Imperatively manage 'active' class so that scroll-animate and other\n // imperative classes are never clobbered.\n if (this.lyricsContainer) {\n // Remove 'active' from lines that are no longer active\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n lineElement.classList.remove('active');\n AmLyrics.resetSyllables(lineElement);\n }\n }\n }\n // Add 'active' to newly active lines\n for (const lineIndex of newActiveLines) {\n if (!oldActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n lineElement.classList.add('active');\n lineElement.classList.remove('pre-active'); // Cleanup pre-active when fully active\n }\n }\n }\n\n if (newActiveLines.length > 0) {\n this.clearPreActiveClasses();\n }\n }\n\n this.startAnimationFromTime(newTime);\n\n // Trigger scroll imperatively (was previously in updated() via @state)\n this._handleActiveLineScroll(oldActiveLines, isSeek);\n }\n\n // YouLyPlus-style syllable animation updates\n if (this.lyricsContainer) {\n // Update syllables in active lines\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n const activeGaps =\n this.lyricsContainer.querySelectorAll('.lyrics-gap.active');\n activeGaps.forEach(gapLine => {\n AmLyrics.updateSyllablesForLine(gapLine as HTMLElement, newTime);\n });\n\n // Imperatively manage gap active state (template doesn't re-render on time changes)\n const allGaps = this.lyricsContainer.querySelectorAll('.lyrics-gap');\n allGaps.forEach(gap => {\n const gapStartTime = parseFloat(\n gap.getAttribute('data-start-time') || '0',\n );\n const gapEndTime = parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive = newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n // Start exit animation early so it completes before the next lyric\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && !isActive && !isExiting) {\n // Entering gap: remove any leftover exit state, add active\n gap.classList.remove('gap-exiting');\n gap.classList.add('active');\n // Mark dots whose time has already passed as finished, and\n // trigger highlight on the dot currently in its time window\n // so the first dot always lights up even on late load.\n const dotSyllables = gap.querySelectorAll('.lyrics-syllable');\n dotSyllables.forEach(dot => {\n const dotStart = parseFloat(\n dot.getAttribute('data-start-time') || '0',\n );\n const dotEnd = parseFloat(dot.getAttribute('data-end-time') || '0');\n if (newTime > dotEnd) {\n dot.classList.add('finished');\n // Also ensure the highlight + animation fired so CSS state is correct\n if (!dot.classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(dot as HTMLElement);\n }\n } else if (newTime >= dotStart && newTime <= dotEnd) {\n // Currently within this dot's window — trigger its highlight\n AmLyrics.updateSyllableAnimation(dot as HTMLElement);\n }\n });\n } else if (shouldStartExiting) {\n // Exiting gap: keep visible while dots animate out\n gap.classList.add('gap-exiting');\n gap.classList.remove('active');\n // After exit animation completes, remove gap-exiting to collapse\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (isActive && !shouldBeActive) {\n // NEW: Immediate cleanup if we seeked out of valid range\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n // NEW: Cleanup exiting state if we seeked backwards before exit window\n gap.classList.remove('gap-exiting');\n }\n });\n\n // Track instrumental gap state\n const currentGap = this.findInstrumentalGapAt(newTime);\n if (currentGap) {\n this.lastInstrumentalIndex = currentGap.insertBeforeIndex;\n } else if (this.lastInstrumentalIndex !== null) {\n this.lastInstrumentalIndex = null;\n }\n\n // Pre-scroll: scroll to upcoming line ~0.5s before it starts\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n this.lyrics\n ) {\n // Condition: ONLY pre-scroll if no other lyric is currently playing.\n // If a lyric is playing, we must wait for it to finish (handled by updated()).\n if (this.activeLineIndices.length === 0) {\n let preActiveLineIndex: number | null = null;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const timeUntilStart = line.timestamp - newTime;\n\n const nextLineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement;\n\n if (timeUntilStart > 0 && timeUntilStart <= PRE_SCROLL_LEAD_MS) {\n // Time to pre-scroll and pre-activate!\n if (nextLineEl) {\n // Apply unblur & zoom effect ahead of lyric start\n preActiveLineIndex = i;\n nextLineEl.classList.add('pre-active');\n this.clearPreActiveClasses(i);\n this.focusLine(nextLineEl);\n }\n break;\n }\n }\n\n this.clearPreActiveClasses(preActiveLineIndex);\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n // Recalculate timing data for accurate animations whenever lyrics change\n this._updateCharTimingData();\n\n // Apply 'active' classes imperatively after lyrics first render,\n // since the template no longer binds the 'active' class (to avoid\n // clobbering imperative scroll-animate classes on re-render).\n if (this.lyricsContainer && this.lyrics) {\n const activeLines = this.findActiveLineIndices(this.currentTime);\n for (const lineIndex of activeLines) {\n const lineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineEl) lineEl.classList.add('active');\n }\n }\n }\n\n // Handle duration reset (-1 stops playback and resets currentTime to 0)\n if (changedProperties.has('duration') && this.duration === -1) {\n this.currentTime = 0;\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.isUserScrolling = false;\n\n // Cancel any running animations\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n // Clear user scroll timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n // Scroll to top\n if (this.lyricsContainer) {\n this.lyricsContainer.scrollTop = 0;\n }\n\n return; // Exit early, don't process other changes\n }\n\n if (\n (changedProperties.has('query') ||\n changedProperties.has('musicId') ||\n changedProperties.has('isrc') ||\n changedProperties.has('songTitle') ||\n changedProperties.has('songArtist') ||\n changedProperties.has('songAlbum') ||\n changedProperties.has('songDurationMs')) &&\n !changedProperties.has('currentTime')\n ) {\n this.fetchLyrics();\n }\n\n if (changedProperties.has('currentTime') && this.lyrics) {\n // currentTime changes are now handled by the custom setter (_onTimeChanged)\n // This block intentionally left empty — only here for backwards compat with\n // any subclasses that might check changedProperties\n }\n }\n\n /**\n * Handle scrolling when active line indices change.\n * Called imperatively from _onTimeChanged instead of from updated().\n */\n private _handleActiveLineScroll(\n _oldActiveIndices: number[],\n forceScroll = false,\n ): void {\n if (this.activeLineIndices.length === 0 || !this.lyricsContainer) {\n return;\n }\n\n const targetLineIndex = this.getPrimaryActiveLineIndex(\n this.activeLineIndices,\n );\n if (targetLineIndex === null) return;\n\n const targetLine = this.lyricsContainer.querySelector(\n `#lyrics-line-${targetLineIndex}`,\n ) as HTMLElement;\n\n if (targetLine) {\n this.focusLine(targetLine, forceScroll);\n }\n }\n\n private _textWidthCanvas: HTMLCanvasElement | undefined;\n\n private _textWidthCtx: CanvasRenderingContext2D | null | undefined;\n\n private _getTextWidth(text: string, font: string): number {\n if (!this._textWidthCanvas) {\n this._textWidthCanvas = document.createElement('canvas');\n this._textWidthCtx = this._textWidthCanvas.getContext('2d', {\n willReadFrequently: true,\n });\n }\n if (this._textWidthCtx) {\n this._textWidthCtx.font = font;\n return this._textWidthCtx.measureText(text).width;\n }\n return 0;\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n // Get the computed font from the first syllable to ensure accuracy\n const referenceSyllable = this.shadowRoot.querySelector('.lyrics-syllable');\n if (!referenceSyllable) return;\n\n const computedStyle = getComputedStyle(referenceSyllable);\n const { font } = computedStyle; // Full font string\n const fontSize = parseFloat(computedStyle.fontSize);\n\n const growableWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable',\n );\n if (!growableWords) return;\n\n growableWords.forEach((wordSpan: any) => {\n const syllableWraps = wordSpan.querySelectorAll('.lyrics-syllable-wrap');\n\n // Flatten syllables\n const syllables: HTMLElement[] = [];\n syllableWraps.forEach((wrap: HTMLElement) => {\n const syl = wrap.querySelector('.lyrics-syllable');\n if (syl) syllables.push(syl as HTMLElement);\n });\n\n syllables.forEach(sylSpan => {\n const charSpans = sylSpan.querySelectorAll('.char');\n if (charSpans.length === 0) return;\n\n // Logic from YouLyPlus renderCharWipes:\n // Use textContent from spans to ensure we measure what is rendered\n const chars = Array.from(charSpans).map(span => span.textContent || '');\n const charWidths = chars.map(c => this._getTextWidth(c, font));\n const totalSyllableWidth = charWidths.reduce((a, b) => a + b, 0);\n\n const duration = parseFloat(sylSpan.dataset.duration || '0');\n const velocityPxPerMs =\n duration > 0 ? totalSyllableWidth / duration : 0;\n\n // Gradient width in pixels = 0.375 * fontSize\n // This matches YouLyPlus visual gradient size\n const gradientWidthPx = 0.375 * fontSize;\n const gradientDurationMs =\n velocityPxPerMs > 0 ? gradientWidthPx / velocityPxPerMs : 100;\n\n let cumulativeCharWidth = 0;\n\n charSpans.forEach((spanArg: any, i: number) => {\n const charWidth = charWidths[i];\n const span = spanArg;\n\n if (totalSyllableWidth > 0) {\n const startPercent = cumulativeCharWidth / totalSyllableWidth;\n const durationPercent = charWidth / totalSyllableWidth;\n\n span.dataset.wipeStart = startPercent.toFixed(4);\n span.dataset.wipeDuration = durationPercent.toFixed(4);\n\n // The critical missing piece:\n span.dataset.preWipeArrival = (duration * startPercent).toFixed(2);\n span.dataset.preWipeDuration = gradientDurationMs.toFixed(2);\n }\n\n cumulativeCharWidth += charWidth;\n });\n });\n });\n }\n\n private static arraysEqual(a: number[], b: number[]): boolean {\n return a.length === b.length && a.every((val, i) => val === b[i]);\n }\n\n private static getLineIndexFromElement(\n lineElement: HTMLElement | null,\n ): number | null {\n if (!lineElement) return null;\n const match = lineElement.id.match(/^lyrics-line-(\\d+)$/);\n return match ? parseInt(match[1], 10) : null;\n }\n\n private static getGapLoopDelay(gapDuration: number): number {\n const desiredPhase = GAP_PULSE_DURATION_MS;\n const targetTime = gapDuration - GAP_EXIT_LEAD_MS;\n const normalizedTarget =\n ((targetTime % GAP_PULSE_CYCLE_MS) + GAP_PULSE_CYCLE_MS) %\n GAP_PULSE_CYCLE_MS;\n\n return (\n (((desiredPhase - normalizedTarget) % GAP_PULSE_CYCLE_MS) +\n GAP_PULSE_CYCLE_MS) %\n GAP_PULSE_CYCLE_MS\n );\n }\n\n private clearPreActiveClasses(exceptLineIndex: number | null = null): void {\n if (!this.lyricsContainer) return;\n\n this.lyricsContainer\n .querySelectorAll('.lyrics-line.pre-active')\n .forEach(element => {\n const lineElement = element as HTMLElement;\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex !== exceptLineIndex) {\n lineElement.classList.remove('pre-active');\n }\n });\n }\n\n private getPrimaryActiveLineIndex(activeIndices: number[]): number | null {\n if (activeIndices.length === 0) return null;\n\n const groupStart = activeIndices[0];\n const groupEnd = activeIndices[activeIndices.length - 1];\n let candidateIndex = Math.max(groupStart, groupEnd - 2);\n\n const currentPrimaryIndex = AmLyrics.getLineIndexFromElement(\n this.currentPrimaryActiveLine,\n );\n if (\n currentPrimaryIndex !== null &&\n activeIndices.includes(currentPrimaryIndex) &&\n candidateIndex < currentPrimaryIndex\n ) {\n candidateIndex = currentPrimaryIndex;\n }\n\n return candidateIndex;\n }\n\n private focusLine(lineElement: HTMLElement, forceScroll = false): void {\n const primaryChanged = lineElement !== this.currentPrimaryActiveLine;\n\n if (primaryChanged) {\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = lineElement;\n }\n\n this.updatePositionClasses(lineElement);\n\n if (\n (forceScroll || primaryChanged) &&\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.scrollToActiveLineYouLy(lineElement, forceScroll);\n }\n }\n\n private handleUserScroll() {\n // Ignore programmatic scrolls and click-seek scrolls\n if (this.isProgrammaticScroll || this.isClickSeeking) {\n return;\n }\n\n // Mark that user is currently scrolling\n this.isUserScrolling = true;\n this.lyricsContainer?.classList.add('user-scrolling');\n\n // Clear any existing timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n\n // Set timeout to re-enable auto-scroll after 2 seconds of no scrolling\n this.userScrollTimeoutId = window.setTimeout(() => {\n this.isUserScrolling = false;\n this.userScrollTimeoutId = undefined;\n\n // Optionally scroll back to current active line when re-enabling auto-scroll\n if (this.activeLineIndices.length > 0) {\n this.scrollToActiveLine();\n }\n }, 2000);\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics) return [];\n const activeLines: number[] = [];\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n let effectiveEndTime = line.endtime;\n\n // Extend the \"active\" highlight window to abut the next line,\n // leaving a 500ms gap for breathing/scrolling\n if (i < this.lyrics.length - 1) {\n const nextLineStart = this.lyrics[i + 1].timestamp;\n const gapDuration = nextLineStart - line.endtime;\n\n // If the gap is large enough to trigger the breathing dots,\n // DO NOT extend the highlight. The text should dim when the dots appear.\n if (gapDuration < INSTRUMENTAL_THRESHOLD_MS) {\n if (effectiveEndTime < nextLineStart) {\n effectiveEndTime = Math.max(effectiveEndTime, nextLineStart - 500);\n }\n }\n }\n\n if (time >= line.timestamp && time <= effectiveEndTime) {\n activeLines.push(i);\n }\n }\n return activeLines;\n }\n\n private findInstrumentalGapAt(\n time: number,\n ): { insertBeforeIndex: number; gapStart: number; gapEnd: number } | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // Start-of-song gap: from 0 to first line timestamp\n const first = this.lyrics[0];\n if (time >= 0 && time < first.timestamp) {\n const gapStart = 0;\n const gapEnd = first.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: 0, gapStart, gapEnd };\n }\n return null;\n }\n\n // Find consecutive pair (i, i+1) that bounds the current time\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (time > gapStart && time < gapEnd) {\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: i + 1, gapStart, gapEnd };\n }\n return null;\n }\n }\n\n return null;\n }\n\n /**\n * Find ALL instrumental gaps in the song, regardless of current time.\n * Used by the template to always render gap elements in the DOM.\n */\n private findAllInstrumentalGaps(): Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const gaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Start-of-song gap\n const first = this.lyrics[0];\n if (first.timestamp >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: 0, gapStart: 0, gapEnd: first.timestamp });\n }\n\n // Inter-line gaps\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: i + 1, gapStart, gapEnd });\n }\n }\n\n return gaps;\n }\n\n private startAnimationFromTime(time: number) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(time);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n\n if (activeLineIndices.length === 0) {\n return;\n }\n\n // Set up animations for each active line\n for (const lineIndex of activeLineIndices) {\n const line = this.lyrics[lineIndex];\n\n // Find main word based on the reset time\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (time >= line.text[i].timestamp && time <= line.text[i].endtime) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIndex, mainWordIdx);\n\n // Find background word based on the reset time\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n time >= line.backgroundText[i].timestamp &&\n time <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIndex, backWordIdx);\n }\n\n // With the state correctly set, configure the animation parameters\n this.setupAnimations();\n\n // Start the animation loop\n if (this.interpolate) {\n this.animateProgress();\n }\n }\n\n private updateActiveLineAndWords() {\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(this.currentTime);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n\n for (const lineIdx of activeLineIndices) {\n const line = this.lyrics[lineIdx];\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (\n this.currentTime >= line.text[i].timestamp &&\n this.currentTime <= line.text[i].endtime\n ) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIdx, mainWordIdx);\n\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n this.currentTime >= line.backgroundText[i].timestamp &&\n this.currentTime <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIdx, backWordIdx);\n }\n }\n\n private setupAnimations() {\n if (this.activeLineIndices.length === 0 || !this.lyrics) {\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n return;\n }\n\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordIndex = this.activeMainWordIndices.get(lineIndex) ?? -1;\n const backgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n\n // Main word animation\n if (mainWordIndex !== -1) {\n const word = line.text[mainWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.mainWordAnimations.set(lineIndex, { startTime: 0, duration: 0 });\n }\n\n // Background word animation\n if (backgroundWordIndex !== -1 && line.backgroundText) {\n const word = line.backgroundText[backgroundWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n }\n\n private handleLineClick(line: LyricsLine) {\n // Reset all syllables to prevent highlighting conflicts during seek\n if (this.lyricsContainer) {\n const allLines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n allLines.forEach(lineEl => {\n AmLyrics.resetSyllables(lineEl as HTMLElement);\n // Remove scroll-animate class and properties to stop any scroll animations\n lineEl.classList.remove('scroll-animate');\n (lineEl as HTMLElement).style.removeProperty('--scroll-delta');\n (lineEl as HTMLElement).style.removeProperty('--lyrics-line-delay');\n });\n // Ensure container state is clean\n this.lyricsContainer.classList.remove('wheel-scrolling');\n }\n\n // Cancel any ongoing scroll animations\n if (this.scrollAnimationState) {\n this.scrollAnimationState.isAnimating = false;\n this.scrollAnimationState.pendingUpdate = null;\n }\n\n // Clear scroll animation timeouts\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n // Also clear user scroll timeout to prevent stale scrollToActiveLine\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n this.isUserScrolling = false;\n\n // Reset active line tracking to prevent scroll fighting\n this.currentPrimaryActiveLine = null;\n this.lastPrimaryActiveLine = null;\n this.activeLineIds.clear();\n this.animatingLines = [];\n\n // Find the clicked line element and scroll to it with forceScroll (like YouLyPlus)\n // Timestamps are already in milliseconds — match the data-start-time attribute directly\n const clickedLineElement = this.lyricsContainer?.querySelector(\n `.lyrics-line[data-start-time=\"${line.text[0]?.timestamp || 0}\"]`,\n ) as HTMLElement | null;\n\n if (clickedLineElement && this.lyricsContainer) {\n // Update active line reference to the clicked line\n this.currentPrimaryActiveLine = clickedLineElement;\n\n // Reset currentScrollOffset to actual scroll position to prevent stale delta\n this.currentScrollOffset = -this.lyricsContainer.scrollTop;\n\n // Set click-seek cooldown to prevent updated() scroll from fighting\n this.isClickSeeking = true;\n if (this.clickSeekTimeout) clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = setTimeout(() => {\n this.isClickSeeking = false;\n }, 800);\n\n this.scrollToActiveLineYouLy(clickedLineElement, true);\n }\n\n const event = new CustomEvent('line-click', {\n detail: {\n timestamp: line.timestamp,\n },\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private static getBackgroundTextPlacement(\n line: LyricsLine,\n ): 'before' | 'after' {\n if (\n !line.backgroundText ||\n line.backgroundText.length === 0 ||\n line.text.length === 0\n ) {\n return 'after'; // Default to after if no comparison is possible\n }\n\n // Compare the start times of the first syllables\n const mainTextStartTime = line.text[0].timestamp;\n const backgroundTextStartTime = line.backgroundText[0].timestamp;\n\n return backgroundTextStartTime < mainTextStartTime ? 'before' : 'after';\n }\n\n private scrollToActiveLine() {\n if (!this.lyricsContainer || this.activeLineIndices.length === 0) {\n return;\n }\n\n // Scroll to the first active line\n const firstActiveLineIndex = Math.min(...this.activeLineIndices);\n const activeLineElement = this.lyricsContainer.querySelector(\n `.lyrics-line:nth-child(${firstActiveLineIndex + 1})`,\n ) as HTMLElement;\n\n if (activeLineElement) {\n const containerHeight = this.lyricsContainer.clientHeight;\n const lineTop = activeLineElement.offsetTop;\n const lineHeight = activeLineElement.clientHeight;\n\n // Check if the line has background text placed before the main text\n const hasBackgroundBefore = activeLineElement.querySelector(\n '.background-text.before',\n );\n\n // Calculate the offset to center the main text content, accounting for background text placement\n let offsetAdjustment = 0;\n if (hasBackgroundBefore) {\n const backgroundElement = hasBackgroundBefore as HTMLElement;\n offsetAdjustment = backgroundElement.clientHeight / 2; // Adjust to focus on main content\n }\n\n const top =\n lineTop - containerHeight / 2 + lineHeight / 2 - offsetAdjustment;\n\n // Use requestAnimationFrame for smoother iOS performance\n requestAnimationFrame(() => {\n this.isProgrammaticScroll = true;\n this.lyricsContainer?.scrollTo({ top, behavior: 'smooth' });\n // Reset the flag after a short delay to allow the scroll to complete\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n });\n }\n }\n\n private scrollToInstrumental(insertBeforeIndex: number) {\n if (!this.lyricsContainer) return;\n\n // Find the gap element by ID instead of nth-child\n const gapTarget = this.lyricsContainer.querySelector(\n `#gap-${insertBeforeIndex}`,\n ) as HTMLElement | null;\n\n if (gapTarget) {\n // Use same scroll position as lyrics (scroll-padding-top from top), not center\n // This matches YouLyPlus behavior where gaps don't scroll to a different position\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - gapTarget.offsetTop;\n\n this.isProgrammaticScroll = true;\n this.animateScrollYouLy(targetTranslateY, false);\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 250);\n }\n }\n\n // === YouLyPlus-style Animation Methods ===\n\n /**\n * Get the scroll padding top value from CSS variable\n */\n private getScrollPaddingTop(): number {\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n if (paddingTopValue.includes('%')) {\n return (\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100)\n );\n }\n return parseFloat(paddingTopValue) || 0;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n */\n private animateScrollYouLy(newTranslateY: number, forceScroll = false): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n\n if (!this.scrollAnimationState) {\n this.scrollAnimationState = {\n isAnimating: false,\n pendingUpdate: null,\n };\n this.animatingLines = [];\n }\n\n const animState = this.scrollAnimationState;\n\n if (animState.isAnimating && !forceScroll) {\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n const { animatingLines } = this;\n\n const targetTop = Math.max(0, -newTranslateY);\n const appliedTranslateY = -targetTop;\n const prevOffset = -parent.scrollTop;\n const delta = prevOffset - appliedTranslateY;\n this.currentScrollOffset = appliedTranslateY;\n\n // Skip animation if already at the target position (e.g., first lines at top)\n if (Math.abs(parent.scrollTop - targetTop) < 1 && Math.abs(delta) < 1) {\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n if (forceScroll) {\n // Clean up any lingering scroll animations before smooth scroll\n for (const line of animatingLines) {\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n line.style.removeProperty('--scroll-duration');\n }\n animatingLines.length = 0;\n parent.scrollTo({ top: targetTop, behavior: 'smooth' });\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n // --- Step 1: Remove scroll-animate from ALL previously animating lines ---\n for (const line of animatingLines) {\n line.classList.remove('scroll-animate');\n }\n animatingLines.length = 0;\n\n // Get lines for staggered animation\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n const lineArray = Array.from(lineElements) as HTMLElement[];\n\n const referenceLine =\n this.currentPrimaryActiveLine ||\n this.lastPrimaryActiveLine ||\n lineArray[0];\n\n if (!referenceLine) return;\n\n const referenceIndex = lineArray.indexOf(referenceLine);\n if (referenceIndex === -1) return;\n\n const delayIncrement = SCROLL_DELAY_INCREMENT_MS;\n const lookBehind = 10;\n const lookAhead = 15;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookBehind);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n let delayCounter = 0;\n\n // --- Step 2: Set CSS custom properties on target lines ---\n const newAnimatingLines: HTMLElement[] = [];\n\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n if (i >= referenceIndex) delayCounter += 1;\n const delay =\n i >= referenceIndex ? (delayCounter - 1) * delayIncrement : 0;\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty(\n '--scroll-duration',\n `${SCROLL_ANIMATION_DURATION_MS}ms`,\n );\n\n newAnimatingLines.push(line);\n\n const lineDuration = SCROLL_ANIMATION_DURATION_MS + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n\n // --- Step 3: Force reflow so the browser sees the class removal ---\n // This guarantees the animation restarts reliably, unlike the\n // CSS-variable-toggle approach which doesn't restart in all browsers.\n parent.getBoundingClientRect(); // force synchronous reflow\n\n // --- Step 4: Re-add scroll-animate class to start fresh animations ---\n for (const line of newAnimatingLines) {\n line.classList.add('scroll-animate');\n animatingLines.push(line);\n }\n\n animState.isAnimating = true;\n const BASE_DURATION = SCROLL_ANIMATION_DURATION_MS;\n\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false);\n }\n }, BASE_DURATION);\n\n this.scrollAnimationTimeout = setTimeout(() => {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n line.style.removeProperty('--scroll-duration');\n }\n animatingLines.length = 0;\n this.scrollAnimationTimeout = undefined;\n }, maxAnimationDuration + 50);\n\n parent.scrollTo({ top: targetTop, behavior: 'instant' });\n }\n\n /**\n * Update position classes for YouLyPlus-style opacity/blur gradients\n */\n private updatePositionClasses(lineToScroll: HTMLElement): void {\n if (!this.lyricsContainer) return;\n\n const positionClasses = [\n 'lyrics-activest',\n 'post-active-line',\n 'next-active-line',\n 'prev-1',\n 'prev-2',\n 'prev-3',\n 'prev-4',\n 'next-1',\n 'next-2',\n 'next-3',\n 'next-4',\n ];\n\n // Remove old position classes\n this.lyricsContainer\n .querySelectorAll(`.${positionClasses.join(', .')}`)\n .forEach(el => el.classList.remove(...positionClasses));\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n\n const lineElements = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n\n for (\n let i = Math.max(0, scrollLineIndex - 4);\n i <= Math.min(lineElements.length - 1, scrollLineIndex + 4);\n i += 1\n ) {\n const position = i - scrollLineIndex;\n if (position !== 0) {\n const element = lineElements[i];\n if (position === -1) element.classList.add('post-active-line');\n else if (position === 1) element.classList.add('next-active-line');\n else if (position < 0)\n element.classList.add(`prev-${Math.abs(position)}`);\n else element.classList.add(`next-${position}`);\n }\n }\n }\n\n /**\n * Scroll to active line with YouLyPlus-style animation\n */\n private scrollToActiveLineYouLy(\n activeLine: HTMLElement,\n forceScroll = false,\n ): void {\n if (!activeLine || !this.lyricsContainer) return;\n\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - activeLine.offsetTop;\n\n const scrollContainerTop = this.lyricsContainer.getBoundingClientRect().top;\n\n // Skip if already at target position\n if (\n !forceScroll &&\n Math.abs(\n activeLine.getBoundingClientRect().top -\n scrollContainerTop -\n paddingTop,\n ) < 1\n ) {\n return;\n }\n\n // Skip scroll if near the bottom of content (prevents footer jitter)\n if (!forceScroll) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n if (atBottom) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.isUserScrolling = false;\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, SCROLL_ANIMATION_DURATION_MS + 160);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(syllable: HTMLElement): void {\n if (syllable.classList.contains('highlight')) return;\n\n const { classList } = syllable;\n const isRTL = classList.contains('rtl-text');\n const charSpans = Array.from(\n syllable.querySelectorAll('span.char'),\n ) as HTMLElement[];\n const wordElement = syllable.parentElement?.parentElement; // syllable-wrap -> word\n const allWordCharSpans = wordElement\n ? (Array.from(wordElement.querySelectorAll('span.char')) as HTMLElement[])\n : [];\n const isGrowable = wordElement?.classList.contains('growable');\n const isFirstSyllable =\n syllable.getAttribute('data-syllable-index') === '0';\n const isFirstInContainer = isFirstSyllable; // Simplified\n const isGap = syllable.closest('.lyrics-gap') !== null;\n\n // Get duration from data attribute\n const syllableDurationMs =\n parseFloat(syllable.getAttribute('data-duration') || '0') || 300;\n const wordDurationMs =\n parseFloat(\n syllable.getAttribute('data-word-duration') ||\n syllable.getAttribute('data-duration') ||\n '0',\n ) || syllableDurationMs;\n\n // Use a Map to collect animations like YouLyPlus\n const charAnimationsMap = new Map<HTMLElement, string>();\n const styleUpdates: Array<{\n element: HTMLElement;\n property: string;\n value: string;\n }> = [];\n\n // Step 1 & 2: Apply animations\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n // Glow AND wipe applied to ALL characters simultaneously from the first syllable\n // This prevents CSS animation restarts because the `animation` property is set once.\n\n const firstSyllableStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n\n allWordCharSpans.forEach((span, charIndexInWord) => {\n const horizontalOffset = parseFloat(\n span.dataset.horizontalOffset || '0',\n );\n\n const maxScale = span.dataset.maxScale || '1.1';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n const animationParts: string[] = [];\n\n const parentSyllable = span.closest('.lyrics-syllable');\n if (parentSyllable) {\n const parentDuration = parseFloat(\n parentSyllable.getAttribute('data-duration') || '0',\n );\n const parentStartTime = parseFloat(\n parentSyllable.getAttribute('data-start-time') || '0',\n );\n\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const relativeStartOffset = Math.max(\n 0,\n parentStartTime - firstSyllableStartTime,\n );\n const wipeDelay = relativeStartOffset + parentDuration * startPct;\n const wipeDuration = parentDuration * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndexInWord === 0;\n let charWipeAnimation = 'wipe';\n if (useStartAnimation)\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n else charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n\n // Blend word and syllable durations to let the gradient flow smoothly\n // while still responding to syllable pacing (no strict exactness, just natural flow)\n const growDelay = wipeDelay;\n const growDurationMs = Math.max(\n 600,\n wordDurationMs * 0.8 + parentDuration * 1.5,\n );\n\n animationParts.push(\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n }\n\n charAnimationsMap.set(span, animationParts.join(', '));\n\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${horizontalOffset}`,\n });\n styleUpdates.push({\n element: span,\n property: '--max-scale',\n value: maxScale,\n });\n styleUpdates.push({\n element: span,\n property: '--shadow-intensity',\n value: shadowIntensity,\n });\n styleUpdates.push({\n element: span,\n property: '--translate-y-peak',\n value: `${translateYPeak}`,\n });\n });\n } else if (isGrowable && !isFirstSyllable && charSpans.length > 0) {\n // For subsequent syllables of a growable word:\n // If they already have `grow-dynamic`, it means the first syllable correctly took care of BOTH grow and wipe!\n // Otherwise, they scrubbed directly into this syllable, so let's at least do the wipe.\n charSpans.forEach(span => {\n const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n if (existingAnimation.includes('grow-dynamic')) return;\n\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n\n if (wipeDuration > 0) {\n charAnimationsMap.set(\n span,\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n });\n } else if (charSpans.length > 0) {\n // Per-character wipe for non-growable words (matching YouLyPlus)\n charSpans.forEach((span, charIndex) => {\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndex === 0;\n let charWipeAnimation = 'wipe';\n if (useStartAnimation) {\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n if (wipeDuration > 0) {\n charAnimationsMap.set(\n span,\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n });\n } else {\n // Syllable-level wipe for regular (non-growable) words without chars\n const wipeRatio = parseFloat(\n syllable.getAttribute('data-wipe-ratio') || '1',\n );\n const visualDuration = syllableDurationMs * wipeRatio;\n\n let wipeAnimation = 'wipe';\n if (isFirstInContainer) {\n wipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n wipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n if (syllable.classList.contains('line-synced')) return;\n\n const currentWipeAnimation = isGap ? 'fade-gap' : wipeAnimation;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = `${currentWipeAnimation} ${visualDuration}ms ${isGap ? 'ease-out' : 'linear'} forwards`;\n }\n\n // --- WRITE PHASE ---\n classList.remove('pre-highlight');\n classList.add('highlight');\n\n for (const [span, animationString] of charAnimationsMap.entries()) {\n span.style.animation = animationString;\n }\n\n // Apply style updates\n for (const update of styleUpdates) {\n update.element.style.setProperty(update.property, update.value);\n }\n }\n\n /**\n * Reset syllable animation state\n */\n private static resetSyllable(syllable: HTMLElement): void {\n if (!syllable) return;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n // Force background to secondary and disable transition to prevent lingering white\n // eslint-disable-next-line no-param-reassign\n syllable.style.transition = 'none';\n // eslint-disable-next-line no-param-reassign\n syllable.style.backgroundColor = 'var(--lyplus-text-secondary)';\n\n // Reset character animations — disable transition so finished chars don't slowly fade\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.animation = '';\n el.style.transition = 'none';\n el.style.backgroundColor = 'var(--lyplus-text-secondary)';\n });\n\n // Immediately remove all state classes\n syllable.classList.remove(\n 'highlight',\n 'finished',\n 'pre-highlight',\n 'cleanup',\n );\n\n // In next frame, clear inline styles so CSS transitions can resume for future use\n requestAnimationFrame(() => {\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n });\n });\n }\n\n /**\n * Reset all syllables in a line\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n Array.from(line.getElementsByClassName('lyrics-syllable')).forEach(\n syllable => AmLyrics.resetSyllable(syllable as HTMLElement),\n );\n }\n\n /**\n * Update syllables based on current time\n * Uses DOM caching and pre-highlight reset for smooth transitions\n */\n private static updateSyllablesForLine(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n // DOM cache: avoid querySelectorAll on every frame\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = syllables;\n }\n\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n const startTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n const endTime = parseFloat(syllable.getAttribute('data-end-time') || '0');\n\n if (startTime) {\n const { classList } = syllable;\n const hasHighlight = classList.contains('highlight');\n const hasFinished = classList.contains('finished');\n const hasPreHighlight = classList.contains('pre-highlight');\n const hasActiveState = hasHighlight || hasFinished || hasPreHighlight;\n\n // Early exit check\n if (!(currentTimeMs < startTime - 1000 && !hasActiveState)) {\n let preHighlightReset = false;\n\n // Pre-highlight reset logic\n if (hasPreHighlight && i > 0) {\n const prevSyllable = syllables[i - 1];\n if (!prevSyllable.classList.contains('highlight')) {\n classList.remove('pre-highlight');\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n syllable.style.animation = '';\n preHighlightReset = true;\n }\n }\n\n if (!preHighlightReset) {\n if (currentTimeMs >= startTime && currentTimeMs <= endTime) {\n // Currently active\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n if (hasFinished) {\n classList.remove('finished');\n }\n } else if (currentTimeMs > endTime) {\n // Finished\n if (!hasFinished) {\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n classList.add('finished');\n }\n } else if (hasHighlight || hasFinished) {\n // Not yet started\n AmLyrics.resetSyllable(syllable);\n }\n }\n }\n }\n }\n }\n\n private animateProgress() {\n const now = performance.now();\n let running = false;\n\n if (!this.lyrics || this.activeLineIndices.length === 0) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n return;\n }\n\n // Process each active line\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordAnimation = this.mainWordAnimations.get(lineIndex);\n\n // Main text animation\n if (mainWordAnimation && mainWordAnimation.duration > 0) {\n const elapsed = now - mainWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(1, elapsed / mainWordAnimation.duration);\n this.mainWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentMainWordIndex =\n this.activeMainWordIndices.get(lineIndex) ?? -1;\n const nextWordIndex = currentMainWordIndex + 1;\n if (\n currentMainWordIndex !== -1 &&\n nextWordIndex < line.text.length\n ) {\n const currentWord = line.text[currentMainWordIndex];\n const nextWord = line.text[nextWordIndex];\n\n this.activeMainWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.mainWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.mainWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n\n // Background text animation\n const backgroundWordAnimation =\n this.backgroundWordAnimations.get(lineIndex);\n if (backgroundWordAnimation && backgroundWordAnimation.duration > 0) {\n const elapsed = now - backgroundWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(\n 1,\n elapsed / backgroundWordAnimation.duration,\n );\n this.backgroundWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentBackgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n if (\n line.backgroundText &&\n currentBackgroundWordIndex !== -1 &&\n currentBackgroundWordIndex < line.backgroundText.length - 1\n ) {\n const nextWordIndex = currentBackgroundWordIndex + 1;\n const currentWord =\n line.backgroundText[currentBackgroundWordIndex];\n const nextWord = line.backgroundText[nextWordIndex];\n\n this.activeBackgroundWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.backgroundWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n }\n\n if (running) {\n this.animationFrameId = requestAnimationFrame(this._boundAnimateProgress);\n } else if (this.animationFrameId) {\n // Stop animation if no words are running\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n\n private generateLRC(): string {\n if (!this.lyrics) return '';\n let lrc = '';\n\n // Add metadata if available\n if (this.songTitle) lrc += `[ti:${this.songTitle}]\\n`;\n if (this.songArtist) lrc += `[ar:${this.songArtist}]\\n`;\n if (this.songAlbum) lrc += `[al:${this.songAlbum}]\\n`;\n if (this.lyricsSource) lrc += `[re:${this.lyricsSource}]\\n`;\n\n for (const line of this.lyrics) {\n if (line.text && line.text.length > 0) {\n const timestamp = AmLyrics.formatTimestampLRC(line.timestamp);\n // Construct line text from syllables\n const lineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n lrc += `[${timestamp}]${lineText}\\n`;\n }\n }\n\n return lrc;\n }\n\n private generateTTML(): string {\n if (!this.lyrics) return '';\n\n // Basic TTML structure\n let ttml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n ttml +=\n '<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:itunes=\"http://music.apple.com/lyrics\">\\n';\n ttml += ' <body>\\n';\n\n let currentPart: string | undefined;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const part = line.songPart;\n\n // If part changed (or first line), start new div\n if (part !== currentPart || i === 0) {\n if (i > 0) {\n ttml += ' </div>\\n';\n }\n currentPart = part;\n if (currentPart) {\n ttml += ` <div itunes:song-part=\"${currentPart}\">\\n`;\n } else {\n ttml += ' <div>\\n';\n }\n }\n\n // For TTML, we can represent syllables as spans if word-synced\n const begin = AmLyrics.formatTimestampTTML(line.timestamp);\n const end = AmLyrics.formatTimestampTTML(line.endtime);\n\n ttml += ` <p begin=\"${begin}\" end=\"${end}\">\\n`;\n\n for (const word of line.text) {\n const wBegin = AmLyrics.formatTimestampTTML(word.timestamp);\n const wEnd = AmLyrics.formatTimestampTTML(word.endtime);\n // Escape special characters in text\n const text = word.text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n ttml += ` <span begin=\"${wBegin}\" end=\"${wEnd}\">${text}</span>\\n`;\n }\n\n ttml += ' </p>\\n';\n }\n\n if (this.lyrics.length > 0) {\n ttml += ' </div>\\n';\n }\n\n ttml += ' </body>\\n';\n ttml += '</tt>';\n\n return ttml;\n }\n\n private static formatTimestampLRC(ms: number): string {\n const totalSeconds = ms / 1000;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const hundredths = Math.floor((ms % 1000) / 10);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${pad(minutes)}:${pad(seconds)}.${pad(hundredths)}`;\n }\n\n private static formatTimestampTTML(ms: number): string {\n // TTML standard format: HH:MM:SS.mmm\n const totalSeconds = ms / 1000;\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const milliseconds = Math.floor(ms % 1000);\n\n const pad = (n: number, width = 2) => n.toString().padStart(width, '0');\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.${pad(milliseconds, 3)}`;\n }\n\n private downloadLyrics() {\n if (!this.lyrics || this.lyrics.length === 0) return;\n\n // Determine format: TTML if ANY line is word-synced, else LRC\n const isWordSynced = this.lyrics.some(l => l.isWordSynced !== false);\n\n let content = '';\n let extension = this.downloadFormat;\n if (extension === 'auto') {\n extension = isWordSynced ? 'ttml' : 'lrc';\n }\n let mimeType = '';\n\n if (extension === 'ttml') {\n content = this.generateTTML();\n mimeType = 'application/xml';\n } else {\n content = this.generateLRC();\n mimeType = 'text/plain';\n }\n\n if (!content) return;\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n\n const filename = this.songTitle\n ? `${this.songTitle}${this.songArtist ? ` - ${this.songArtist}` : ''}.${extension}`\n : `lyrics.${extension}`;\n\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n render() {\n if (this.fontFamily) {\n this.style.fontFamily = this.fontFamily;\n }\n\n // Set both old internal CSS variables (for backward compatibility)\n // and new public CSS variables (which take precedence)\n this.style.setProperty(\n '--hover-background-color',\n this.hoverBackgroundColor,\n );\n this.style.setProperty('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const isUnsynced =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics.every(l => l.timestamp === 0 && l.endtime === 0)\n : false;\n\n const renderContent = () => {\n if (this.isLoading) {\n // Render stylized skeleton lines\n return html`\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n `;\n }\n if (!this.lyrics || this.lyrics.length === 0) {\n return html`<div class=\"no-lyrics\">No lyrics found.</div>`;\n }\n\n // Build a lookup map of ALL gaps so they are always in the DOM\n const allGaps = this.findAllInstrumentalGaps();\n const gapByIndex = new Map(\n allGaps.map(g => [g.insertBeforeIndex, g] as const),\n );\n\n return this.lyrics.map((line, lineIndex) => {\n const lineId = `lyrics-line-${lineIndex}`;\n\n // Calculate line timing\n const lineStartTime = line.text[0]?.timestamp || 0;\n const lineEndTime = line.text[line.text.length - 1]?.endtime || 0;\n\n // Always render background vocals in the DOM so the syllable cache\n // includes them and the wipe effect applies correctly.\n const hasBackground =\n line.backgroundText && line.backgroundText.length > 0;\n\n // Create background vocals container (with romanization support)\n const backgroundVocalElement = hasBackground\n ? html`<p class=\"background-vocal-container\">\n ${line.backgroundText!.map((syllable, syllableIndex) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n\n const bgRomanizedText =\n this.showRomanization &&\n syllable.romanizedText &&\n syllable.romanizedText.trim() !== syllable.text.trim()\n ? html`<span\n class=\"lyrics-syllable transliteration ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n return html`<span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"${syllableIndex}\"\n >${syllable.text}</span\n >\n ${bgRomanizedText}\n </span>\n </span>`;\n })}\n </p>`\n : '';\n\n // Background vocals share the same line.translation and line.romanizedText\n // as the main vocal, so we intentionally do NOT render a separate\n // translation/romanization block for background — it would just duplicate\n // the main line's text.\n\n // Group syllables by word: when part=true, append to previous word group\n const wordGroups: Syllable[][] = [];\n for (const syllable of line.text) {\n if (syllable.part && wordGroups.length > 0) {\n // Continuation of previous word\n wordGroups[wordGroups.length - 1].push(syllable);\n } else {\n // New word\n wordGroups.push([syllable]);\n }\n }\n\n // Pre-compute isGrowable per \"visual word\": adjacent groups whose text\n // doesn't end with whitespace form one visual word (e.g. \"a\"+\"live\" = \"alive\").\n // We evaluate growable on the combined text/duration, then propagate\n // the result to each individual group so it renders through the\n // single-syllable path (which supports char-level glow).\n const groupGrowable: boolean[] = new Array(wordGroups.length).fill(\n false,\n );\n const groupGlowing: boolean[] = new Array(wordGroups.length).fill(\n false,\n );\n // Visual word info for growable char-level glow:\n // Each group stores the combined visual word's text, duration, and\n // the char offset of this group within the visual word.\n const vwFullText: string[] = new Array(wordGroups.length).fill('');\n const vwFullDuration: number[] = new Array(wordGroups.length).fill(0);\n const vwCharOffset: number[] = new Array(wordGroups.length).fill(0);\n const vwStartMs: number[] = new Array(wordGroups.length).fill(0);\n const vwEndMs: number[] = new Array(wordGroups.length).fill(0);\n {\n let vwStart = 0;\n while (vwStart < wordGroups.length) {\n let vwEnd = vwStart;\n while (vwEnd < wordGroups.length - 1) {\n const grp = wordGroups[vwEnd];\n const lastText = grp[grp.length - 1].text;\n if (/\\s$/.test(lastText)) break;\n vwEnd += 1;\n }\n\n // Compute combined properties for this visual word\n const combinedText = wordGroups\n .slice(vwStart, vwEnd + 1)\n .flatMap(g => g.map(s => s.text))\n .join('')\n .trim();\n const combinedStart = wordGroups[vwStart][0].timestamp;\n const lastGrp = wordGroups[vwEnd];\n const combinedEnd = lastGrp[lastGrp.length - 1].endtime;\n const combinedDuration = combinedEnd - combinedStart;\n\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n combinedText,\n );\n const isRTL =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u0590-\\u05FF]/.test(\n combinedText,\n );\n const hasHyphen = combinedText.includes('-');\n\n const wordLen = combinedText.length;\n let isGrowableVW =\n !isCJK && !isRTL && !hasHyphen && wordLen > 0 && wordLen <= 12;\n if (isGrowableVW) {\n if (wordLen < 3) {\n isGrowableVW =\n combinedDuration >= 1110 && combinedDuration >= wordLen * 550;\n } else {\n isGrowableVW =\n combinedDuration >= 900 && combinedDuration >= wordLen * 300;\n }\n }\n\n // Glow requirement (more strict)\n const isGlowingVW =\n isGrowableVW &&\n combinedDuration >= 1200 &&\n combinedDuration >= combinedText.length * 300;\n\n let charOff = 0;\n for (let gi = vwStart; gi <= vwEnd; gi += 1) {\n groupGrowable[gi] = isGrowableVW;\n groupGlowing[gi] = isGlowingVW;\n vwFullText[gi] = combinedText;\n vwFullDuration[gi] = combinedDuration;\n vwCharOffset[gi] = charOff;\n vwStartMs[gi] = combinedStart;\n vwEndMs[gi] = combinedEnd;\n const grpText = wordGroups[gi].map(s => s.text).join('');\n charOff += grpText.replace(/\\s/g, '').length;\n }\n\n vwStart = vwEnd + 1;\n }\n }\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p class=\"main-vocal-container\">\n ${wordGroups.map((group, groupIdx) => {\n const isGrowable = groupGrowable[groupIdx];\n const isGlowing = groupGlowing[groupIdx];\n const groupLineSynced = group.some(s => s.lineSynced);\n\n const wordText = isGrowable ? vwFullText[groupIdx] : '';\n const wordDuration = isGrowable ? vwFullDuration[groupIdx] : 0;\n const wordNumChars = wordText.length;\n const groupCharOffset = isGrowable ? vwCharOffset[groupIdx] : 0;\n\n let sylCharAccumulator = 0;\n\n return html`<span\n class=\"lyrics-word ${isGrowable ? 'growable' : ''} ${isGlowing\n ? 'glowing'\n : ''} ${group.length > 1 ? 'allow-break' : ''}\"\n >\n ${group.map((syllable, sylIdx) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n const text = syllable.text || '';\n\n const romanizedText =\n this.showRomanization &&\n syllable.romanizedText &&\n syllable.romanizedText.trim() !== syllable.text.trim()\n ? html`<span\n class=\"lyrics-syllable transliteration ${groupLineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n let syllableContent: any = text;\n\n if (isGrowable) {\n let charIndexInsideSyllable = 0;\n const numCharsInSyllable =\n text.replace(/\\s/g, '').length || 1;\n\n syllableContent = html`${text.split('').map(char => {\n if (char === ' ') return ' ';\n\n const charIndexInsideWord =\n groupCharOffset + sylCharAccumulator;\n const charStartPercentVal =\n charIndexInsideSyllable / numCharsInSyllable;\n\n sylCharAccumulator += 1;\n charIndexInsideSyllable += 1;\n\n const minDuration = 400;\n const maxDuration = 3000;\n const easingPower = 3;\n const progress = Math.min(\n 1,\n Math.max(\n 0,\n (wordDuration - minDuration) /\n (maxDuration - minDuration),\n ),\n );\n const easedProgress = progress ** easingPower;\n\n const isLongWord = wordNumChars > 5;\n const isShortDuration = wordDuration < 1200;\n let maxDecayRate = 0;\n if (isLongWord || isShortDuration) {\n let decayStrength = 0;\n if (isLongWord)\n decayStrength +=\n Math.min((wordNumChars - 5) / 5, 1.0) * 0.4;\n if (isShortDuration && wordNumChars > 3)\n decayStrength +=\n Math.max(0, 1.0 - (wordDuration - 800) / 400) * 0.3;\n else if (isShortDuration && wordNumChars <= 3)\n decayStrength +=\n Math.max(0, 1.0 - (wordDuration - 800) / 400) * 0.1;\n maxDecayRate = Math.min(decayStrength, 0.7);\n }\n\n const positionInWord =\n wordNumChars > 1\n ? charIndexInsideWord / (wordNumChars - 1)\n : 0;\n const decayFactor = 1.0 - positionInWord * maxDecayRate;\n const charProgress = easedProgress * decayFactor;\n\n const baseGrowth = wordNumChars <= 3 ? 0.05 : 0.04;\n const charMaxScale = 1.0 + baseGrowth + charProgress * 0.08;\n const glowDurFactor = Math.min(1.1, wordDuration / 1500);\n let glowLenFactor = 1.0;\n if (wordNumChars <= 3) {\n glowLenFactor = 0.85;\n } else if (wordNumChars >= 6) {\n glowLenFactor = 1.1;\n }\n const glowIntensityScale = glowDurFactor * glowLenFactor;\n const charShadowIntensity = isGlowing\n ? (0.35 + charProgress * 0.45) * glowIntensityScale\n : 0;\n const normalizedGrowth = (charMaxScale - 1.0) / 0.1;\n const effectiveDuration =\n (wordDuration + durationMs * 2) / 3;\n const peakMultiplier = Math.min(\n 1,\n Math.max(0.3, effectiveDuration / 2000),\n );\n const charTranslateYPeak =\n -normalizedGrowth * (2 * peakMultiplier); // Further dampened lift peak\n\n const position = (charIndexInsideWord + 0.5) / wordNumChars;\n const horizontalOffset =\n (position - 0.5) * 2 * ((charMaxScale - 1.0) * 25);\n\n return html`<span\n class=\"char\"\n data-char-index=\"${charIndexInsideWord}\"\n data-syllable-char-index=\"${charIndexInsideWord}\"\n data-wipe-start=\"${charStartPercentVal.toFixed(4)}\"\n data-wipe-duration=\"${(1 / numCharsInSyllable).toFixed(\n 4,\n )}\"\n data-horizontal-offset=\"${horizontalOffset.toFixed(2)}\"\n data-max-scale=\"${charMaxScale.toFixed(3)}\"\n data-shadow-intensity=\"${charShadowIntensity.toFixed(3)}\"\n data-translate-y-peak=\"${charTranslateYPeak.toFixed(3)}\"\n >${char}</span\n >`;\n })}`;\n }\n\n return html`<span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${groupLineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-word-duration=\"${wordDuration}\"\n data-syllable-index=\"${sylIdx}\"\n data-wipe-ratio=\"1\"\n >${syllableContent}</span\n >\n ${romanizedText}\n </span>`;\n })}\n </span>`;\n })}\n </p>`;\n\n // Translation container (if enabled)\n // Hide translation if it matches the original line text\n const fullLineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n const translationElement =\n this.showTranslation &&\n line.translation &&\n line.translation.trim() !== fullLineText\n ? html`<div class=\"lyrics-translation-container\">\n ${line.translation}\n </div>`\n : '';\n\n // Line-synced romanization (fallback if no word-level romanization)\n // Hide if the romanized text matches the original line text\n const lineRomanizationElement =\n this.showRomanization &&\n line.romanizedText &&\n !line.text.some(s => s.romanizedText) &&\n line.romanizedText.trim() !== fullLineText\n ? html`<div class=\"lyrics-romanization-container\">\n ${line.romanizedText}\n </div>`\n : '';\n\n // Check for instrumental gap before this line\n let maybeInstrumentalBlock: unknown = null;\n const gapForLine = gapByIndex.get(lineIndex);\n if (gapForLine) {\n const gapDuration = gapForLine.gapEnd - gapForLine.gapStart;\n // Calculate dot timing for fill-up animation (3 dots)\n const dotDuration = gapDuration / 3;\n const gapLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n\n // Gap starts without 'active' — _onTimeChanged toggles it imperatively\n maybeInstrumentalBlock = html`<div\n id=\"gap-${lineIndex}\"\n class=\"lyrics-line lyrics-gap\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n style=\"--gap-pulse-duration: ${GAP_PULSE_DURATION_MS}ms; --gap-loop-delay: -${gapLoopDelay}ms; --gap-exit-duration: ${GAP_EXIT_LEAD_MS}ms; --gap-exit-scale: ${GAP_MIN_SCALE};\"\n >\n <div class=\"lyrics-line-container\">\n <p class=\"main-vocal-container\">\n <span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"0\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"1\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"2\"\n ></span>\n </span>\n </span>\n </p>\n </div>\n </div>`;\n }\n\n return html`\n ${maybeInstrumentalBlock}\n <div\n id=\"${lineId}\"\n class=\"lyrics-line ${line.alignment === 'end'\n ? 'singer-right'\n : 'singer-left'}\"\n data-start-time=\"${lineStartTime}\"\n data-end-time=\"${lineEndTime}\"\n @click=${() => this.handleLineClick(line)}\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.handleLineClick(line);\n }\n }}\n >\n <div class=\"lyrics-line-container\">\n ${mainVocalElement} ${backgroundVocalElement}\n ${translationElement} ${lineRomanizationElement}\n </div>\n </div>\n `;\n });\n };\n\n return html`\n <div\n class=\"lyrics-container ${isUnsynced\n ? 'is-unsynced'\n : 'blur-inactive-enabled'} ${this.isUserScrolling\n ? 'user-scrolling'\n : ''}\"\n >\n ${!this.isLoading && this.lyrics && this.lyrics.length > 0\n ? html`\n <div class=\"lyrics-header\">\n <div class=\"header-controls\">\n <button\n class=\"download-button ${this.showRomanization\n ? 'active'\n : ''}\"\n @click=${this.toggleRomanization}\n title=\"Toggle Romanization\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-speech-icon lucide-speech\"\n >\n <path\n d=\"M8.8 20v-4.1l1.9.2a2.3 2.3 0 0 0 2.164-2.1V8.3A5.37 5.37 0 0 0 2 8.25c0 2.8.656 3.054 1 4.55a5.77 5.77 0 0 1 .029 2.758L2 20\"\n />\n <path d=\"M19.8 17.8a7.5 7.5 0 0 0 .003-10.603\" />\n <path d=\"M17 15a3.5 3.5 0 0 0-.025-4.975\" />\n </svg>\n </button>\n <button\n class=\"download-button ${this.showTranslation\n ? 'active'\n : ''}\"\n @click=${this.toggleTranslation}\n title=\"Toggle Translation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-languages-icon lucide-languages\"\n >\n <path d=\"m5 8 6 6\" />\n <path d=\"m4 14 6-6 2-3\" />\n <path d=\"M2 5h12\" />\n <path d=\"M7 2h1\" />\n <path d=\"m22 22-5-10-5 10\" />\n <path d=\"M14 18h6\" />\n </svg>\n </button>\n </div>\n <div class=\"download-controls\">\n <select\n class=\"format-select\"\n @change=${(e: Event) => {\n this.downloadFormat = (e.target as HTMLSelectElement)\n .value as 'lrc' | 'ttml';\n }}\n .value=${this.downloadFormat}\n @click=${(e: Event) => e.stopPropagation()}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"lrc\">LRC</option>\n <option value=\"ttml\">TTML</option>\n </select>\n <button\n class=\"download-button\"\n @click=${this.downloadLyrics}\n title=\"Download Lyrics\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-download-icon lucide-download\"\n >\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </svg>\n </button>\n </div>\n </div>\n `\n : ''}\n ${renderContent()}\n ${!this.isLoading\n ? html`\n <footer class=\"lyrics-footer\">\n <div class=\"footer-content\">\n <span\n class=\"source-info\"\n style=\"display: flex; align-items: center; gap: 8px;\"\n >\n Source: ${sourceLabel}\n ${(this.availableSources &&\n this.availableSources.length > 1) ||\n !this.hasFetchedAllProviders\n ? html`\n <button\n class=\"download-button\"\n title=\"Switch Lyrics Source\"\n style=\"font-family: inherit; font-size: 11px; padding: 2px 6px; border-radius: 4px; border: 1px solid rgba(255, 255, 255, 0.2); background: transparent; cursor: pointer; color: #aaa; display: inline-flex; align-items: center;\"\n @click=${this.switchSource}\n ?disabled=${this.isFetchingAlternatives}\n >\n <svg\n style=\"margin-right: 4px; ${this\n .isFetchingAlternatives\n ? 'animation: spin 1s linear infinite;'\n : ''}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"\n >\n ${this.isFetchingAlternatives\n ? svg`<path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n ></path>`\n : svg`<path d=\"m3 16 4 4 4-4\"></path\n ><path d=\"M7 20V4\"></path\n ><path d=\"m21 8-4-4-4 4\"></path\n ><path d=\"M17 4v16\"></path>`}\n </svg>\n ${this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch'}\n </button>\n `\n : ''}\n </span>\n <span class=\"version-info\">\n v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Star me on GitHub</a\n >\n </span>\n </div>\n </footer>\n `\n : ''}\n </div>\n `;\n }\n}\n","import { AmLyrics } from './AmLyrics.js';\n\nwindow.customElements.define('am-lyrics', AmLyrics);\n"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","LitElement","html","svg","css","property","state","query"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
1
+ {"version":3,"file":"am-lyrics.js","sources":["../../node_modules/tslib/tslib.es6.js","../../node_modules/@lit/reactive-element/css-tag.js","../../node_modules/@lit/reactive-element/reactive-element.js","../../node_modules/lit-html/lit-html.js","../../node_modules/lit-element/lit-element.js","../../node_modules/@lit/reactive-element/decorators/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../node_modules/@lit/reactive-element/decorators/base.js","../../node_modules/@lit/reactive-element/decorators/query.js","../../../src/GoogleService.ts","../../../src/AmLyrics.ts","../../../src/am-lyrics.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * Config for GoogleService\n */\nconst CONFIG = {\n GOOGLE: {\n MAX_RETRIES: 3,\n RETRY_DELAY_MS: 1000,\n FETCH_TIMEOUT_MS: 6000,\n },\n};\n\ninterface RomanizableLine {\n text?: { text: string; romanizedText?: string }[] | string;\n romanizedText?: string;\n isWordSynced?: boolean;\n}\n\n/**\n * Service for translating and romanizing text using Google Translate (unofficial API)\n */\nexport class GoogleService {\n private static delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n }\n\n private static fetchWithTimeout(\n url: string,\n timeoutMs = CONFIG.GOOGLE.FETCH_TIMEOUT_MS,\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n return fetch(url, { signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n }\n\n private static isPurelyLatinScript(text: string): boolean {\n // Basic check for Latin script characters plus common punctuation and numbers\n // eslint-disable-next-line no-control-regex\n return /^[\\u0000-\\u007F\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]*$/.test(\n text,\n );\n }\n\n static async translate(\n textOrArray: string | string[],\n targetLang: string,\n ): Promise<string | string[]> {\n if (\n !textOrArray ||\n (Array.isArray(textOrArray) && textOrArray.length === 0)\n ) {\n return Array.isArray(textOrArray) ? [] : '';\n }\n\n const isArray = Array.isArray(textOrArray);\n const texts = isArray ? (textOrArray as string[]) : [textOrArray as string];\n\n // Check for empty strings to preserve indices\n const nonEmptyIndices: number[] = [];\n const textsToTranslate: string[] = [];\n\n texts.forEach((t, i) => {\n if (t && t.trim()) {\n nonEmptyIndices.push(i);\n textsToTranslate.push(t);\n }\n });\n\n if (textsToTranslate.length === 0) {\n return isArray ? texts : texts[0];\n }\n\n // Batching logic: Google Translate URL limit is roughly 2000 chars.\n // We'll be conservative with 1500 chars per batch.\n const BATCH_SIZE_CHARS = 1500;\n const translatedResults: string[] = new Array(textsToTranslate.length).fill(\n '',\n );\n\n let currentBatch: string[] = [];\n let currentBatchIndices: number[] = [];\n let currentBatchLength = 0;\n\n const processBatch = async (batch: string[], indices: number[]) => {\n if (batch.length === 0) return;\n const joinedText = batch.join('\\n');\n\n let attempt = 0;\n let success = false;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${targetLang}&dt=t&q=${encodeURIComponent(joinedText)}`;\n // eslint-disable-next-line no-await-in-loop\n const response = await GoogleService.fetchWithTimeout(url);\n if (!response.ok) throw new Error(`Status ${response.status}`);\n // eslint-disable-next-line no-await-in-loop\n const data = await response.json();\n\n // data[0] contains segments.\n // With batching/newlines, Google sometimes returns one large segment with newlines,\n // or multiple segments. We need to reconstruct the full text first.\n\n const fullTranslation =\n data?.[0]?.map((seg: any) => seg?.[0]).join('') || '';\n\n // Split by newline to get individual lines back\n const lines = fullTranslation.split('\\n');\n\n // Edge case: Google might strip trailing newlines or add extra.\n // If we sent N lines, we expect N lines back approx.\n // However, empty lines in input were filtered out before sending.\n // So 'lines' should match 'batch'.\n\n // If mismatch, try to align? Or just take what we have.\n // If lines.length < batch.length, we might have lost some.\n // If lines.length > batch.length, maybe some line wrap?\n\n // We'll trust the split for now but ensure we don't overflow.\n\n indices.forEach((originalIdx, i) => {\n // Safe access\n if (i < lines.length) {\n translatedResults[originalIdx] = lines[i];\n } else {\n // Fallback if response is shorter\n translatedResults[originalIdx] = batch[i];\n }\n });\n\n success = true;\n } catch (e) {\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n // eslint-disable-next-line no-await-in-loop\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n );\n } else {\n // Fail: fill with original\n indices.forEach((originalIdx, i) => {\n translatedResults[originalIdx] = batch[i];\n });\n }\n }\n }\n };\n\n for (let i = 0; i < textsToTranslate.length; i += 1) {\n const text = textsToTranslate[i];\n if (currentBatchLength + text.length > BATCH_SIZE_CHARS) {\n // eslint-disable-next-line no-await-in-loop\n await processBatch(currentBatch, currentBatchIndices);\n currentBatch = [];\n currentBatchIndices = [];\n currentBatchLength = 0;\n }\n currentBatch.push(text);\n currentBatchIndices.push(i);\n currentBatchLength += text.length;\n }\n\n if (currentBatch.length > 0) {\n await processBatch(currentBatch, currentBatchIndices);\n }\n\n // Reconstruct final array\n const finalArray = [...texts];\n nonEmptyIndices.forEach((realIdx, mappedIdx) => {\n finalArray[realIdx] = translatedResults[mappedIdx];\n });\n\n return isArray ? finalArray : finalArray[0];\n }\n\n static async romanize<T extends RomanizableLine>(\n originalLyrics: T[] | { data?: T[]; content?: T[] },\n ): Promise<T[]> {\n // Determine if we should treat as word-synced (has syllabus) or line-synced\n const lines: T[] = Array.isArray(originalLyrics)\n ? originalLyrics\n : (originalLyrics as { data?: T[]; content?: T[] }).data ||\n (originalLyrics as { data?: T[]; content?: T[] }).content ||\n [];\n\n if (!lines || lines.length === 0)\n return Array.isArray(originalLyrics) ? originalLyrics : [];\n\n // Check if word synced\n const isWordSynced = lines.some(\n (l: RomanizableLine) =>\n l.isWordSynced !== false && Array.isArray(l.text) && l.text.length > 1,\n );\n\n if (isWordSynced) {\n return this.romanizeWordSynced(lines);\n }\n\n return this.romanizeLineSynced(lines);\n }\n\n static async romanizeWordSynced<T extends RomanizableLine>(\n lines: T[],\n ): Promise<T[]> {\n return Promise.all(\n lines.map(async (line: T) => {\n if (\n !line.text ||\n !Array.isArray(line.text) ||\n line.text.length === 0 ||\n line.romanizedText // Skip if already romanized\n )\n return line;\n\n // Get the entire line text to romanize together for context-aware pronunciation\n const fullText = line.text\n .map((s: { text: string }) => s.text)\n .join('');\n\n // romanizeTexts expects an array of strings, so we pass an array of one\n const [romanizedFullLine] = await this.romanizeTexts([fullText]);\n\n const newSyllabus = line.text.map(\n (s: { text: string; romanizedText?: string }) => ({\n ...s,\n romanizedText: s.romanizedText, // Keep any existing syllabus romanization if provided by API natively\n }),\n );\n\n return {\n ...line,\n text: newSyllabus,\n romanizedText: romanizedFullLine || '',\n };\n }),\n );\n }\n\n static async romanizeLineSynced<T extends RomanizableLine>(\n lines: T[],\n ): Promise<T[]> {\n const linesToRomanize = lines.map((line: T) => {\n // If already romanized, skip\n if (line.romanizedText) {\n return '';\n }\n // If it's line-synced, it usually has 1 syllable with the full text.\n if (Array.isArray(line.text) && line.text.length > 0) {\n return line.text.map((s: { text: string }) => s.text).join('');\n }\n return '';\n });\n\n const romanizedLines = await this.romanizeTexts(linesToRomanize);\n\n return lines.map((line: T, index: number) => ({\n ...line,\n romanizedText: romanizedLines[index] || '',\n }));\n }\n\n static async romanizeTexts(texts: string[]): Promise<string[]> {\n const contextText = texts.join(' ');\n\n if (GoogleService.isPurelyLatinScript(contextText)) {\n return texts;\n }\n\n const romanizedTexts: string[] = [];\n\n /* eslint-disable no-await-in-loop */\n for (const text of texts) {\n if (!text || GoogleService.isPurelyLatinScript(text)) {\n romanizedTexts.push(text);\n } else {\n let attempt = 0;\n let success = false;\n let lastError = null;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const romanizeUrl = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=rm&q=${encodeURIComponent(\n text,\n )}`;\n const response = await GoogleService.fetchWithTimeout(romanizeUrl);\n const data = await response.json();\n\n // Response format is [[[\"...\",\"...\",\"...\",\"romanization\"]],...]\n // or [null, ...] for English/Latin input where no romanization is needed\n const romanized = data?.[0]?.[0]?.[3] || text;\n\n romanizedTexts.push(romanized);\n success = true;\n } catch (error) {\n lastError = error;\n // eslint-disable-next-line no-console\n console.warn(\n `GoogleService: Error romanizing text \"${text}\" (attempt ${\n attempt + 1\n }/${CONFIG.GOOGLE.MAX_RETRIES}):`,\n error,\n );\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n ); // Exponential backoff\n }\n }\n }\n\n if (!success) {\n // eslint-disable-next-line no-console\n console.error(\n `GoogleService: Failed to romanize text \"${text}\" after ${CONFIG.GOOGLE.MAX_RETRIES} attempts. Last error:`,\n lastError,\n );\n romanizedTexts.push(text); // Fallback to original text\n }\n }\n }\n /* eslint-enable no-await-in-loop */\n\n return romanizedTexts;\n }\n}\n","import { css, html, LitElement, svg } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { GoogleService } from './GoogleService.js';\n\nconst VERSION = '1.2.3';\nconst INSTRUMENTAL_THRESHOLD_MS = 7000; // Show dots for gaps >= 7s\nconst FETCH_TIMEOUT_MS = 8000; // Timeout for all lyrics fetch requests\nconst SEEK_THRESHOLD_MS = 500;\nconst PRE_SCROLL_LEAD_MS = 500;\nconst SCROLL_ANIMATION_DURATION_MS = 280;\nconst SCROLL_DELAY_INCREMENT_MS = 24;\nconst GAP_PULSE_DURATION_MS = 4000;\nconst GAP_PULSE_CYCLE_MS = GAP_PULSE_DURATION_MS * 2;\nconst GAP_EXIT_LEAD_MS = 360;\nconst GAP_MIN_SCALE = 0.85;\n\n/**\n * Fetch with an automatic timeout via AbortSignal.\n * Rejects if the request takes longer than `timeoutMs`.\n */\nfunction fetchWithTimeout(\n url: string,\n options: Parameters<typeof fetch>[1] = {},\n timeoutMs = FETCH_TIMEOUT_MS,\n): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return fetch(url, { ...options, signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n}\n\nconst KPOE_SERVERS = [\n 'https://lyricsplus.binimum.org',\n 'https://lyricsplus.atomix.one',\n 'https://lyricsplus-seven.vercel.app',\n 'https://lyricsplus.prjktla.workers.dev',\n 'https://lyrics-plus-backend.vercel.app',\n];\nconst DEFAULT_KPOE_SOURCE_ORDER =\n 'apple,lyricsplus,musixmatch,spotify,qq,deezer,musixmatch-word';\n\nconst TIDAL_SERVERS = [\n 'https://arran.monochrome.tf',\n 'https://api.monochrome.tf/',\n 'https://triton.squid.wtf',\n 'https://wolf.qqdl.site',\n 'https://maus.qqdl.site',\n 'https://vogel.qqdl.site',\n 'https://katze.qqdl.site',\n 'https://hund.qqdl.site',\n 'https://tidal.kinoplus.online',\n 'https://hifi-one.spotisaver.net',\n 'https://hifi-two.spotisaver.net',\n];\nconst GENIUS_WORKER_URL = 'https://fetch-genius.samidy.workers.dev/';\n\ninterface Syllable {\n text: string;\n part: boolean;\n timestamp: number;\n endtime: number;\n romanizedText?: string;\n lineSynced?: boolean; // New flag for line-synced lyrics\n}\n\ninterface LyricsLine {\n text: Syllable[];\n background: boolean;\n backgroundText: Syllable[];\n oppositeTurn: boolean;\n timestamp: number;\n endtime: number;\n isWordSynced?: boolean;\n alignment?: 'start' | 'end';\n songPart?: string;\n romanizedText?: string;\n translation?: string;\n}\n\ninterface SongMetadata {\n title: string;\n artist: string;\n album?: string;\n durationMs?: number;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n id?: {\n appleMusic?: string;\n [key: string]: unknown;\n };\n isrc?: string;\n}\n\ninterface ParsedQueryMetadata {\n title?: string;\n artist?: string;\n album?: string;\n}\n\ninterface YouLyPlusLyricsResult {\n lines: LyricsLine[];\n source: string;\n}\n\ninterface ResolvedMetadata {\n metadata?: SongMetadata;\n appleId?: string;\n appleSong?: any;\n catalogIsrc?: string;\n}\n\nexport class AmLyrics extends LitElement {\n static styles = css`\n /* ==========================================================================\n YOULYPLUS-INSPIRED STYLING - Design Tokens & Variables\n ========================================================================== */\n :host {\n --lyplus-lyrics-palette: var(\n --am-lyrics-highlight-color,\n var(--highlight-color, #ffffff)\n );\n --lyplus-text-primary: var(--lyplus-lyrics-palette);\n /* Use color-mix with the text color rather than just opacity so it adapts */\n --lyplus-text-secondary: color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent 45%\n );\n\n --lyplus-padding-base: 1em;\n --lyplus-padding-line: 10px;\n --lyplus-padding-gap: 0.3em;\n --lyplus-border-radius-base: 0.6em;\n --lyplus-gap-dot-size: 0.4em;\n --lyplus-gap-dot-margin: 0.08em;\n\n --lyplus-font-size-base: 32px;\n --lyplus-font-size-base-grow: 24.5;\n --lyplus-font-size-subtext: 0.6em;\n\n --lyplus-blur-amount: 0.07em;\n --lyplus-blur-amount-near: 0.035em;\n --lyplus-fade-gap-timing-function: ease-out;\n\n --lyrics-scroll-padding-top: 25%;\n\n display: block;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,\n Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n background: transparent;\n height: 100%;\n overflow: hidden;\n font-weight: bold;\n color: var(--lyplus-text-primary);\n }\n\n /* ==========================================================================\n CONTAINER & SCROLL BEHAVIOR\n ========================================================================== */\n .lyrics-container {\n padding: 20px;\n padding-top: 80px;\n border-radius: 8px;\n background-color: transparent;\n width: 100%;\n height: 100%;\n max-height: 100vh;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n scrollbar-width: none;\n transform: translateZ(0);\n }\n\n .lyrics-container::-webkit-scrollbar {\n display: none;\n }\n\n /* Disable transitions during touch-scrolling for 1:1 feedback */\n .lyrics-container.touch-scrolling .lyrics-line,\n .lyrics-container.touch-scrolling .lyrics-plus-metadata {\n transition: none !important;\n }\n\n /* Apply smooth gliding transition for mouse-wheel scrolling */\n .lyrics-container.wheel-scrolling .lyrics-line {\n transition: transform 0.3s ease-out !important;\n }\n\n .lyrics-line.scroll-animate {\n transition: none !important; /* Prevent conflict with scroll animation */\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 280ms);\n animation-timing-function: cubic-bezier(0.41, 0, 0.12, 0.99);\n animation-fill-mode: both;\n animation-delay: var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-container.user-scrolling .lyrics-line {\n --lyrics-line-delay: 0ms !important;\n transition-delay: 0ms !important;\n }\n\n /* ==========================================================================\n LYRICS LINE BASE STYLES\n ========================================================================== */\n .lyrics-line {\n padding: var(--lyplus-padding-line);\n opacity: 0.8;\n color: var(--lyplus-text-secondary);\n font-size: var(--lyplus-font-size-base);\n cursor: pointer;\n transform-origin: left;\n transform: translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n will-change: transform, filter, opacity;\n content-visibility: auto;\n text-rendering: optimizeLegibility;\n overflow-wrap: break-word;\n mix-blend-mode: lighten;\n border-radius: var(--lyplus-border-radius-base);\n }\n\n .lyrics-line:not(.scroll-animate) {\n animation: none;\n }\n\n /* --- Line Container & Vocal Containers --- */\n .lyrics-line-container {\n overflow-wrap: break-word;\n transform-origin: left;\n transform: scale3d(0.93, 0.93, 0.95);\n transition:\n transform 0.7s ease,\n background-color 0.7s,\n color 0.7s;\n }\n\n .lyrics-line.active .lyrics-line-container,\n .lyrics-line.pre-active .lyrics-line-container {\n transform: scale3d(1.001, 1.001, 1);\n will-change: transform;\n transition:\n transform 0.5s ease,\n background-color 0.18s,\n color 0.18s;\n }\n\n .main-vocal-container {\n transform-origin: 5% 50%;\n margin: 0;\n }\n\n .background-vocal-container {\n max-height: 0;\n padding-top: 0.2em;\n overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n transition:\n max-height 350ms cubic-bezier(0.33, 1, 0.68, 1),\n opacity 300ms ease-out,\n padding 350ms cubic-bezier(0.33, 1, 0.68, 1);\n margin: 0;\n }\n\n .lyrics-line.active .background-vocal-container,\n .lyrics-line.pre-active .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n transition:\n max-height 350ms cubic-bezier(0.22, 1, 0.36, 1),\n opacity 300ms ease-out,\n padding 350ms cubic-bezier(0.22, 1, 0.36, 1);\n will-change: max-height, opacity, padding;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n will-change: transform, opacity;\n }\n\n .lyrics-line.pre-active {\n opacity: 1;\n will-change: transform, opacity;\n }\n\n .lyrics-line.singer-right {\n text-align: end;\n }\n\n .lyrics-line.singer-right .lyrics-line-container,\n .lyrics-line.singer-right .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text {\n direction: rtl;\n }\n\n /* --- Unsynced (Plain Text) Lyrics Overrides --- */\n .lyrics-container.is-unsynced .lyrics-line {\n opacity: 1 !important;\n color: var(--lyplus-text-primary) !important;\n filter: none !important;\n transform: none !important;\n cursor: default;\n }\n\n .lyrics-container.is-unsynced .lyrics-line-container {\n transform: none !important;\n background-color: transparent !important;\n }\n\n .lyrics-container.is-unsynced .lyrics-syllable {\n color: var(--lyplus-text-primary) !important;\n background-color: transparent !important;\n -webkit-background-clip: unset !important;\n background-clip: unset !important;\n -webkit-text-fill-color: unset !important;\n text-fill-color: unset !important;\n text-shadow: none !important;\n filter: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .lyrics-line:hover {\n background: var(--hover-background-color, rgba(255, 255, 255, 0.13));\n }\n .lyrics-container.is-unsynced .lyrics-line:hover {\n background: transparent !important;\n }\n }\n\n /* --- Blur Effect for Inactive Lines --- */\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line:not(.active):not(.pre-active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.post-active-line:not(.lyrics-gap):not(.active):not(\n .pre-active\n ),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.next-active-line:not(.lyrics-gap):not(.active):not(\n .pre-active\n ),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap):not(\n .pre-active\n ) {\n filter: blur(var(--lyplus-blur-amount-near));\n }\n\n /* Unblur all lines when user is scrolling */\n .lyrics-container.user-scrolling .lyrics-line {\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n /* Unblur early for pre-active lines */\n .lyrics-container.blur-inactive-enabled .lyrics-line.pre-active {\n filter: blur(0px) !important;\n opacity: 1;\n }\n\n /* ==========================================================================\n WORD & SYLLABLE STYLES\n ========================================================================== */\n .lyrics-word:not(.allow-break) {\n display: inline-block;\n vertical-align: baseline;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap:has(.lyrics-syllable.transliteration) {\n display: inline-flex;\n flex-direction: column;\n align-items: start;\n }\n\n .lyrics-syllable {\n display: inline-block;\n vertical-align: baseline;\n color: transparent;\n background-color: var(--lyplus-text-secondary);\n white-space: pre-wrap;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n /* --- Syllable States --- */\n .lyrics-syllable.finished {\n background-color: var(--lyplus-text-primary);\n transition: transform 1s ease !important;\n }\n\n .lyrics-syllable.finished:has(.char) {\n background-color: transparent;\n }\n\n .lyrics-line:not(.active) .lyrics-syllable.finished {\n transition: color 0.18s;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transform: translateY(0.001%) translateZ(1px);\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n will-change: transform, background;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.highlight:not(:has(.char)),\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight:not(:has(.char)) {\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.rtl-text {\n direction: rtl;\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 100%,\n transparent 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n right;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight,\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%) translateZ(1px);\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.finished {\n background-image: none;\n }\n\n .lyrics-syllable.pre-highlight {\n animation-name: pre-wipe-universal;\n animation-duration: var(--pre-wipe-duration);\n animation-delay: var(--pre-wipe-delay);\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n }\n\n .lyrics-syllable.pre-highlight.rtl-text {\n animation-name: pre-wipe-universal-rtl;\n }\n\n .lyrics-syllable.transliteration {\n font-size: var(--lyplus-font-size-subtext);\n white-space: pre-wrap;\n pointer-events: none;\n user-select: none;\n }\n\n /* Syllable with chars: make syllable transparent, chars handle color */\n .lyrics-line .lyrics-syllable:has(span.char):not(.finished) {\n background-color: transparent;\n color: transparent;\n }\n\n .lyrics-syllable span.char {\n display: inline-block;\n background-color: var(--lyplus-text-secondary);\n white-space: break-spaces;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n .lyrics-syllable.finished span.char {\n transition: color 0.18s;\n background-color: var(--lyplus-text-primary);\n }\n\n /* Active char spans: structural only, wipe animation sets gradient */\n .lyrics-line.active .lyrics-syllable span.char {\n background-clip: text;\n -webkit-background-clip: text;\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n transform-origin: 50% 80%;\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n transition:\n transform 0.7s ease,\n color 0.18s;\n will-change: background, transform;\n }\n\n .lyrics-line.active .lyrics-syllable span.char.highlight {\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 0%,\n #0000 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n calc(100% + 0.25em) 0%;\n }\n\n .lyrics-line.active .lyrics-syllable.pre-highlight span.char {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n -0.25em 0%;\n }\n\n /* ==========================================================================\n INSTRUMENTAL GAP STYLES\n ========================================================================== */\n .lyrics-gap {\n max-height: 0;\n padding: 0 var(--lyplus-padding-gap);\n overflow: hidden;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transform-origin: top;\n transition:\n padding 220ms cubic-bezier(0.33, 1, 0.68, 1),\n max-height 220ms cubic-bezier(0.33, 1, 0.68, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms) var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n max-height: 1.6em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 220ms cubic-bezier(0.22, 1, 0.36, 1),\n max-height 220ms cubic-bezier(0.22, 1, 0.36, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\n will-change: max-height, opacity, padding;\n }\n\n /* Exiting state: quickly collapse width and height so dots don't distort page, or remove max-height transition */\n .lyrics-gap.gap-exiting {\n max-height: 0;\n padding: 0 var(--lyplus-padding-gap);\n opacity: 0;\n overflow: visible;\n transition:\n padding var(--gap-exit-duration, 360ms) cubic-bezier(0.33, 1, 0.68, 1),\n max-height var(--gap-exit-duration, 360ms)\n cubic-bezier(0.33, 1, 0.68, 1),\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n\n /* Jump animation plays during exit */\n .lyrics-gap.gap-exiting .main-vocal-container {\n animation: gap-ended var(--gap-exit-duration, 360ms)\n cubic-bezier(0.33, 1, 0.68, 1) forwards;\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting)\n .main-vocal-container\n .lyrics-word {\n animation-play-state: paused;\n }\n\n .lyrics-gap.active .main-vocal-container .lyrics-word {\n animation: gap-loop var(--gap-pulse-duration, 4000ms) ease-in-out infinite\n alternate;\n animation-delay: var(--gap-loop-delay, 0ms);\n will-change: transform;\n }\n\n .lyrics-gap .lyrics-syllable {\n display: inline-block;\n width: var(--lyplus-gap-dot-size);\n height: var(--lyplus-gap-dot-size);\n background-color: var(--lyplus-text-primary);\n border-radius: 50%;\n margin: 0 var(--lyplus-gap-dot-margin);\n }\n\n /* Line-synced lyrics should fade in instantly/quickly instead of wiping */\n .lyrics-syllable.line-synced {\n background: transparent !important;\n color: var(--lyplus-text-secondary) !important;\n }\n\n .lyrics-line.active .lyrics-syllable.line-synced {\n animation: fade-in-line 0.2s ease-out forwards !important;\n color: var(--lyplus-text-primary) !important;\n }\n\n .lyrics-line.pre-active .lyrics-syllable.line-synced {\n animation: fade-in-line 0.14s ease-out forwards !important;\n color: var(--lyplus-text-primary) !important;\n }\n\n .lyrics-line.active .lyrics-syllable.line-synced span.char,\n .lyrics-line.pre-active .lyrics-syllable.line-synced span.char {\n background-image: none !important;\n background-color: var(--lyplus-text-primary) !important;\n transition: background-color 120ms ease-out !important;\n }\n\n @keyframes fade-in-line {\n from {\n opacity: 0.5;\n color: var(--lyplus-text-secondary);\n }\n to {\n opacity: 1;\n color: var(--lyplus-lyrics-palette);\n }\n }\n\n .lyrics-gap .lyrics-syllable {\n background-color: var(--lyplus-text-secondary);\n background-clip: unset;\n }\n\n .lyrics-gap.active .lyrics-syllable.highlight,\n .lyrics-gap.active .lyrics-syllable.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable,\n .lyrics-gap:not(.active).post-active-line .lyrics-syllable,\n .lyrics-gap:not(.active).lyrics-activest .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\n }\n\n .lyrics-gap.active .lyrics-syllable.finished {\n animation: none !important;\n }\n\n /* ==========================================================================\n METADATA & FOOTER STYLES\n ========================================================================== */\n .lyrics-plus-metadata {\n display: block;\n position: relative;\n box-sizing: border-box;\n font-weight: normal;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.6s cubic-bezier(0.23, 1, 0.32, 1)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n }\n\n .lyrics-plus-empty {\n display: block;\n height: 100vh;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n }\n\n .lyrics-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n text-align: left;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.5);\n padding: 10px 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n margin-top: 10px;\n font-weight: normal;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n }\n\n .lyrics-footer a:hover {\n text-decoration: underline;\n }\n\n .footer-content {\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: 8px;\n }\n\n .footer-controls {\n display: flex;\n align-items: center;\n }\n\n /* ==========================================================================\n HEADER & CONTROLS\n ========================================================================== */\n .lyrics-header {\n display: flex;\n padding: 10px 0;\n margin-bottom: 10px;\n gap: 10px;\n justify-content: space-between;\n align-items: center;\n }\n\n .lyrics-header .download-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #aaa;\n padding: 0;\n margin-left: 10px;\n vertical-align: middle;\n display: inline-flex;\n align-items: center;\n font-family: inherit;\n }\n\n .lyrics-header .download-button:hover {\n color: rgba(255, 255, 255, 0.9);\n }\n\n .header-controls {\n display: flex;\n gap: 8px;\n }\n\n .download-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .control-button {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.6);\n cursor: pointer;\n transition: all 0.2s;\n font-weight: normal;\n }\n\n .control-button:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .control-button.active {\n background-color: var(--lyplus-text-primary);\n border-color: var(--lyplus-text-primary);\n color: #000;\n }\n\n .format-select {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8em;\n margin-left: 10px;\n padding: 2px 5px;\n cursor: pointer;\n font-weight: normal;\n font-family: inherit;\n }\n\n .format-select:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .format-select option {\n background: #1a1a1a;\n color: #fff;\n }\n\n /* ==========================================================================\n TRANSLATION & ROMANIZATION\n ========================================================================== */\n .lyrics-translation-container,\n .lyrics-romanization-container {\n padding-top: 0.2em;\n opacity: 0.8;\n font-size: var(--lyplus-font-size-subtext);\n overflow-wrap: break-word;\n pointer-events: none;\n user-select: none;\n transition:\n opacity 0.3s ease,\n color 0.3s;\n font-weight: normal;\n }\n\n .lyrics-romanization-container {\n direction: ltr !important;\n }\n\n .lyrics-romanization-container.rtl-text {\n direction: rtl !important;\n }\n\n .lyrics-romanization-container .lyrics-syllable {\n white-space: pre-wrap;\n }\n\n .lyrics-translation-container {\n opacity: 0.5;\n }\n\n .main-line-wrapper.small {\n font-size: 0.5em;\n opacity: 0.8;\n display: block;\n margin-bottom: 0px;\n }\n\n .translation-line {\n font-size: 1em;\n font-weight: bold;\n display: block;\n margin-top: 0px;\n line-height: 1.1;\n }\n\n .romanized-line {\n font-size: 0.5em;\n color: rgba(255, 255, 255, 0.5);\n display: block;\n margin-top: 2px;\n font-weight: normal;\n }\n\n /* ==========================================================================\n SKELETON LOADING\n ========================================================================== */\n @keyframes skeleton-loading {\n 0% {\n background-color: rgba(255, 255, 255, 0.1);\n }\n 100% {\n background-color: rgba(255, 255, 255, 0.2);\n }\n }\n\n .skeleton-line {\n height: 2.5em;\n margin: 20px 0;\n border-radius: 8px;\n animation: skeleton-loading 1s linear infinite alternate;\n opacity: 0.7;\n width: 60%;\n }\n\n .skeleton-line:nth-child(even) {\n width: 80%;\n }\n .skeleton-line:nth-child(3n) {\n width: 50%;\n }\n .skeleton-line:nth-child(5n) {\n width: 70%;\n }\n\n .no-lyrics {\n color: rgba(255, 255, 255, 0.5);\n font-size: 1.2em;\n text-align: center;\n padding: 2em;\n font-weight: normal;\n }\n\n /* ==========================================================================\n KEYFRAME ANIMATIONS\n ========================================================================== */\n\n /* Wipe animation for syllables */\n @keyframes wipe {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes start-wipe {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes wipe-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n calc(100% + 0.36em);\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes start-wipe-rtl {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n calc(100% + 0.5em);\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-universal {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.75em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n }\n\n @keyframes pre-wipe-universal-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n right;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-char {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n }\n\n /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: scale(1.12);\n }\n to {\n transform: scale(var(--gap-exit-scale, 0.85));\n }\n }\n\n @keyframes gap-ended {\n 0% {\n transform: translateY(-25%) scale(var(--gap-exit-scale, 0.85))\n translateZ(0);\n }\n 35% {\n transform: translateY(-5%) scale(1.08) translateZ(0);\n }\n 100% {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n }\n\n @keyframes fade-gap {\n from {\n background-color: var(--lyplus-text-secondary);\n }\n to {\n background-color: var(--lyplus-text-primary);\n }\n }\n\n /* Scroll animation — class is removed and re-added (with a forced\n reflow in between) to reliably restart the animation each time */\n @keyframes lyrics-scroll {\n from {\n transform: translateY(var(--scroll-delta)) translateZ(1px);\n }\n to {\n transform: translateY(0) translateZ(1px);\n }\n }\n\n /* Character grow animation - exact copy from YouLyPlus */\n @keyframes grow-dynamic {\n 0% {\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n 25%,\n 30% {\n transform: matrix3d(\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n calc(\n var(--char-offset-x, 0) *\n calc(var(--lyplus-font-size-base-grow) / 25)\n ),\n var(--translate-y-peak, -2),\n 0,\n 1\n );\n filter: drop-shadow(\n 0 0 0.1em\n color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent calc((1 - var(--shadow-intensity, 1)) * 100%)\n )\n );\n }\n 100% {\n transform: translateY(-3.5%) translateZ(1px);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n }\n\n @keyframes grow-static {\n 0%,\n 100% {\n transform: scale3d(1.01, 1.01, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%);\n }\n 30%,\n 40% {\n transform: scale3d(1.1, 1.1, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0.3em\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 50%);\n }\n }\n\n /* Fade in animation */\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 0.7;\n transform: translateY(0);\n }\n }\n\n /* Legacy support */\n .opposite-turn {\n text-align: right;\n }\n\n .singer-right {\n text-align: right;\n justify-content: flex-end;\n }\n\n .singer-left {\n text-align: left;\n justify-content: flex-start;\n }\n\n /* Legacy progress-text for backward compatibility */\n .progress-text {\n position: relative;\n display: inline-block;\n background: linear-gradient(\n to right,\n var(--lyplus-text-primary) 0%,\n var(--lyplus-text-primary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) 100%\n );\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--lyplus-text-secondary);\n transform: translate3d(0, 0, 0);\n will-change: background-size;\n }\n\n .progress-text::before {\n display: none;\n }\n\n .active-line {\n font-weight: bold;\n }\n\n .background-text {\n display: block;\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n font-style: normal;\n margin: 0;\n flex-shrink: 0;\n line-height: 1.1;\n }\n\n .background-text.before {\n order: -1;\n }\n\n .background-text.after {\n order: 1;\n }\n\n .instrumental-line {\n display: inline-flex;\n align-items: baseline;\n gap: 8px;\n color: var(--lyplus-text-secondary);\n font-size: 0.9em;\n padding: 4px 10px;\n animation: fadeInUp 220ms ease;\n font-weight: normal;\n }\n\n .instrumental-duration {\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n }\n `;\n\n @property({ type: String })\n query?: string;\n\n @property({ type: String })\n musicId?: string;\n\n @property({ type: String })\n isrc?: string;\n\n @property({ type: String, attribute: 'song-title' })\n songTitle?: string;\n\n @state()\n private downloadFormat: 'auto' | 'lrc' | 'ttml' = 'auto';\n\n @property({ type: String, attribute: 'song-artist' })\n songArtist?: string;\n\n @property({ type: String, attribute: 'song-album' })\n songAlbum?: string;\n\n @property({ type: Number, attribute: 'song-duration' })\n songDurationMs?: number;\n\n @property({ type: String, attribute: 'highlight-color' })\n highlightColor = '#ffffff';\n\n @property({ type: String, attribute: 'hover-background-color' })\n hoverBackgroundColor = 'rgba(255, 255, 255, 0.13)';\n\n @property({ type: String, attribute: 'font-family' })\n fontFamily?: string;\n\n @property({ type: Boolean })\n autoScroll = true;\n\n @property({ type: Boolean })\n interpolate = true;\n\n @state()\n private showRomanization = false;\n\n @state()\n private showTranslation = false;\n\n private async toggleRomanization() {\n this.showRomanization = !this.showRomanization;\n await this.applyRomanization();\n }\n\n private async applyRomanization() {\n if (this.showRomanization && this.lyrics) {\n const needsRomanization = this.lyrics.some(\n l =>\n !l.romanizedText && (!l.text || !l.text.some(s => s.romanizedText)),\n );\n\n if (needsRomanization) {\n this.isLoading = true;\n try {\n const romanizedLines = await GoogleService.romanize(this.lyrics);\n this.lyrics = romanizedLines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Romanization failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n private async toggleTranslation() {\n this.showTranslation = !this.showTranslation;\n await this.applyTranslation();\n }\n\n private async applyTranslation() {\n if (this.showTranslation && this.lyrics) {\n const needsTranslation = this.lyrics.some(l => !l.translation);\n if (needsTranslation) {\n this.isLoading = true;\n try {\n // Prepare batch: extract text from all lines\n const textToTranslate = this.lyrics.map(line => {\n if (line.translation) return '';\n return line.text.map(s => s.text).join('');\n });\n\n // If all are empty, skip\n if (textToTranslate.every(t => !t)) {\n this.isLoading = false;\n return;\n }\n\n const result = await GoogleService.translate(textToTranslate, 'en');\n const translations = Array.isArray(result) ? result : [result];\n\n const newLyrics = this.lyrics.map((line, index) => {\n if (line.translation) return line;\n return {\n ...line,\n translation: translations[index] || undefined,\n };\n });\n\n this.lyrics = newLyrics;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Translation failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n @property({ type: Number })\n duration?: number;\n\n private _currentTime = 0;\n\n @property({ type: Number, attribute: 'currenttime', hasChanged: () => false })\n set currentTime(value: number) {\n const oldValue = this._currentTime;\n this._currentTime = value;\n if (oldValue !== value && this.lyrics) {\n this._onTimeChanged(oldValue, value);\n }\n }\n\n get currentTime(): number {\n return this._currentTime;\n }\n\n @state()\n private isLoading = false;\n\n @state()\n private lyrics?: LyricsLine[];\n\n private activeLineIndices: number[] = [];\n\n private activeMainWordIndices: Map<number, number> = new Map();\n\n private activeBackgroundWordIndices: Map<number, number> = new Map();\n\n private mainWordProgress: Map<number, number> = new Map();\n\n private backgroundWordProgress: Map<number, number> = new Map();\n\n @state()\n private lyricsSource: string | null = null;\n\n @state()\n private availableSources: { lines: LyricsLine[]; source: string }[] = [];\n\n @state()\n private currentSourceIndex = 0;\n\n @state()\n private isFetchingAlternatives = false;\n\n @state()\n private hasFetchedAllProviders = false;\n\n private animationFrameId?: number;\n\n private mainWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n private backgroundWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n @query('.lyrics-container')\n private lyricsContainer?: HTMLElement;\n\n private lastInstrumentalIndex: number | null = null;\n\n private userScrollTimeoutId?: number;\n\n @state()\n private isUserScrolling = false;\n\n private isProgrammaticScroll = false;\n\n private isClickSeeking = false;\n\n private clickSeekTimeout?: ReturnType<typeof setTimeout>;\n\n // Cached DOM elements for animation updates\n private cachedLyricsLines: HTMLElement[] = [];\n\n // Active line tracking\n private activeLineIds: Set<string> = new Set();\n\n private currentPrimaryActiveLine: HTMLElement | null = null;\n\n private lastPrimaryActiveLine: HTMLElement | null = null;\n\n // Scroll animation state\n private scrollAnimationState: {\n isAnimating: boolean;\n pendingUpdate: number | null;\n } | null = null;\n\n private currentScrollOffset = 0;\n\n private animatingLines: HTMLElement[] = [];\n\n private scrollUnlockTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n // AbortController for cancelling in-flight lyrics fetches\n private fetchAbortController?: AbortController;\n\n // Syllable animation tracking\n private lastActiveIndex = 0;\n\n private visibleLineIds: Set<string> = new Set();\n\n // Bound handler references for proper event listener removal\n private _boundHandleUserScroll = this.handleUserScroll.bind(this);\n\n private _boundAnimateProgress = this.animateProgress.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n this.fetchLyrics();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n if (this.clickSeekTimeout) {\n clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n // Cancel any in-flight fetch requests\n this.fetchAbortController?.abort();\n this.fetchAbortController = undefined;\n // Remove scroll event listeners\n if (this.lyricsContainer) {\n this.lyricsContainer.removeEventListener(\n 'wheel',\n this._boundHandleUserScroll,\n );\n this.lyricsContainer.removeEventListener(\n 'touchmove',\n this._boundHandleUserScroll,\n );\n }\n }\n\n private async fetchLyrics() {\n // Cancel any in-flight fetch to prevent stale results from racing\n this.fetchAbortController?.abort();\n const controller = new AbortController();\n this.fetchAbortController = controller;\n\n this.isLoading = true;\n this.lyrics = undefined;\n this.lyricsSource = null;\n this.availableSources = [];\n this.currentSourceIndex = 0;\n this.isFetchingAlternatives = false;\n this.hasFetchedAllProviders = false;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n // If a newer fetch was triggered while we awaited, bail out\n if (controller.signal.aborted) return;\n\n const isMusicIdOnlyRequest =\n Boolean(this.musicId) &&\n !this.songTitle &&\n !this.songArtist &&\n !this.query &&\n !this.isrc;\n\n const collectedSources: { lines: LyricsLine[]; source: string }[] = [];\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const title = resolvedMetadata.metadata.title?.trim() || '';\n const artist = resolvedMetadata.metadata.artist?.trim() || '';\n\n const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n );\n\n if (youLyResults && youLyResults.length > 0) {\n collectedSources.push(...youLyResults);\n }\n }\n\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const tidalResult = await AmLyrics.fetchLyricsFromTidal(\n resolvedMetadata.metadata,\n resolvedMetadata.catalogIsrc,\n );\n if (tidalResult && tidalResult.lines.length > 0) {\n collectedSources.push({\n lines: tidalResult.lines,\n source: 'Tidal',\n });\n }\n }\n\n // Fallback: LRCLIB\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(\n resolvedMetadata.metadata,\n );\n if (lrclibResult && lrclibResult.lines.length > 0) {\n collectedSources.push({\n lines: lrclibResult.lines,\n source: 'LRCLIB',\n });\n }\n }\n\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n const geniusResult = await AmLyrics.fetchLyricsFromGenius(\n resolvedMetadata.metadata,\n );\n if (geniusResult && geniusResult.lines.length > 0) {\n collectedSources.push({\n lines: geniusResult.lines,\n source: 'Genius',\n });\n }\n }\n\n this.hasFetchedAllProviders =\n collectedSources.length === 0 ||\n collectedSources.some(\n s =>\n s.source === 'LRCLIB' ||\n s.source === 'Tidal' ||\n s.source === 'Genius',\n );\n\n if (collectedSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources(collectedSources);\n\n this.currentSourceIndex = 0;\n this.lyrics = this.availableSources[0].lines;\n this.lyricsSource = this.availableSources[0].source;\n await this.onLyricsLoaded();\n return;\n }\n\n this.lyrics = undefined;\n this.lyricsSource = null;\n } finally {\n // Only update loading state if this fetch wasn't superseded\n if (!controller.signal.aborted) {\n this.isLoading = false;\n }\n }\n }\n\n private async onLyricsLoaded() {\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n\n if (this.lyricsContainer) {\n this.isProgrammaticScroll = true;\n this.lyricsContainer.scrollTop = 0;\n window.setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n }\n\n await this.autoProcessLyrics();\n }\n\n private async autoProcessLyrics() {\n if (this.showRomanization) {\n await this.applyRomanization();\n }\n if (this.showTranslation) {\n await this.applyTranslation();\n }\n }\n\n private static getRankForCollected(\n sourceLabel: string,\n parsedLines: any[],\n ): number {\n const lower = sourceLabel.toLowerCase();\n const hasWordSync = parsedLines.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n const isUnsynced =\n parsedLines.length > 0 &&\n parsedLines.every(\n (line: any) => line.timestamp === 0 && line.endtime === 0,\n );\n const isQQ = lower.includes('qq') || lower.includes('lyricsplus');\n\n if (lower.includes('apple') && hasWordSync) return 1;\n if (isQQ && hasWordSync) return 2;\n if (lower.includes('musixmatch') && hasWordSync) return 3;\n if (lower.includes('tidal') && hasWordSync) return 4;\n if (lower.includes('lrclib') && hasWordSync) return 5;\n if (hasWordSync) return 6;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 7;\n if (isQQ && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 9;\n if (lower.includes('tidal') && !hasWordSync && !isUnsynced) return 10;\n if (lower.includes('lrclib') && !hasWordSync && !isUnsynced) return 11;\n if (!hasWordSync && !isUnsynced) return 12;\n\n if (lower.includes('apple') && isUnsynced) return 13;\n if (isQQ && isUnsynced) return 14;\n if (lower.includes('musixmatch') && isUnsynced) return 15;\n if (lower.includes('tidal') && isUnsynced) return 16;\n if (lower.includes('lrclib') && isUnsynced) return 17;\n if (lower.includes('genius')) return 18;\n\n return 20;\n }\n\n private static mergeAndSortSources(\n collectedSources: { lines: LyricsLine[]; source: string }[],\n ): { lines: LyricsLine[]; source: string }[] {\n const uniqueSourcesMap = new Map<\n string,\n { lines: LyricsLine[]; source: string }\n >();\n\n for (const source of collectedSources) {\n const normalizedSource = source.source\n .toLowerCase()\n .includes('lyricsplus')\n ? 'QQ'\n : source.source;\n\n if (!uniqueSourcesMap.has(normalizedSource)) {\n uniqueSourcesMap.set(normalizedSource, {\n ...source,\n source: normalizedSource,\n });\n }\n }\n\n return Array.from(uniqueSourcesMap.values()).sort(\n (a, b) =>\n AmLyrics.getRankForCollected(a.source, a.lines) -\n AmLyrics.getRankForCollected(b.source, b.lines),\n );\n }\n\n private async switchSource() {\n if (this.isFetchingAlternatives) return;\n\n if (!this.hasFetchedAllProviders) {\n this.isFetchingAlternatives = true;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n if (resolvedMetadata?.metadata) {\n const newSources: { lines: LyricsLine[]; source: string }[] = [];\n\n // Try Tidal if not fetched\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('tidal'),\n )\n ) {\n const tidalResult = await AmLyrics.fetchLyricsFromTidal(\n resolvedMetadata.metadata,\n resolvedMetadata.catalogIsrc,\n );\n if (tidalResult && tidalResult.lines.length > 0) {\n newSources.push({ lines: tidalResult.lines, source: 'Tidal' });\n }\n }\n\n // Try LRCLIB if not fetched\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('lrclib'),\n )\n ) {\n const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(\n resolvedMetadata.metadata,\n );\n if (lrclibResult && lrclibResult.lines.length > 0) {\n newSources.push({ lines: lrclibResult.lines, source: 'LRCLIB' });\n }\n }\n\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('genius'),\n )\n ) {\n const geniusResult = await AmLyrics.fetchLyricsFromGenius(\n resolvedMetadata.metadata,\n );\n if (geniusResult && geniusResult.lines.length > 0) {\n newSources.push({ lines: geniusResult.lines, source: 'Genius' });\n }\n }\n\n if (newSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources([\n ...this.availableSources,\n ...newSources,\n ]);\n // Re-sync current index since sorting might shift elements\n this.currentSourceIndex = this.availableSources.findIndex(\n s => s.source === this.lyricsSource,\n );\n if (this.currentSourceIndex === -1) this.currentSourceIndex = 0;\n }\n }\n } finally {\n this.hasFetchedAllProviders = true;\n this.isFetchingAlternatives = false;\n }\n }\n\n if (this.availableSources.length > 1) {\n this.currentSourceIndex =\n (this.currentSourceIndex + 1) % this.availableSources.length;\n this.lyrics = this.availableSources[this.currentSourceIndex].lines;\n this.lyricsSource = this.availableSources[this.currentSourceIndex].source;\n await this.onLyricsLoaded();\n }\n }\n\n private async resolveSongMetadata(): Promise<ResolvedMetadata> {\n const metadata: SongMetadata = {\n title: this.songTitle?.trim() ?? '',\n artist: this.songArtist?.trim() ?? '',\n album: this.songAlbum?.trim() || undefined,\n durationMs: undefined,\n };\n\n if (typeof this.songDurationMs === 'number' && this.songDurationMs > 0) {\n metadata.durationMs = this.songDurationMs;\n } else if (typeof this.duration === 'number' && this.duration > 0) {\n metadata.durationMs = this.duration;\n }\n\n const appleSong: any = null;\n let appleId = this.musicId;\n let catalogIsrc: string | undefined = this.isrc;\n\n if (\n this.query &&\n (!metadata.title || !metadata.artist || !metadata.album)\n ) {\n const parsed = AmLyrics.parseQueryMetadata(this.query);\n if (parsed) {\n if (!metadata.title && parsed.title) {\n metadata.title = parsed.title;\n }\n if (!metadata.artist && parsed.artist) {\n metadata.artist = parsed.artist;\n }\n if (!metadata.album && parsed.album) {\n metadata.album = parsed.album;\n }\n }\n }\n\n let catalogResult: SongCatalogResult | null = null;\n\n if (this.query && (!metadata.title || !metadata.artist)) {\n catalogResult = await AmLyrics.searchLyricsPlusCatalog(this.query);\n\n if (catalogResult) {\n if (!metadata.title && catalogResult.title) {\n metadata.title = catalogResult.title;\n }\n if (!metadata.artist && catalogResult.artist) {\n metadata.artist = catalogResult.artist;\n }\n if (!metadata.album && catalogResult.album) {\n metadata.album = catalogResult.album;\n }\n if (\n metadata.durationMs == null &&\n typeof catalogResult.durationMs === 'number' &&\n catalogResult.durationMs > 0\n ) {\n metadata.durationMs = catalogResult.durationMs;\n }\n\n if (!appleId && catalogResult.id?.appleMusic) {\n appleId = catalogResult.id.appleMusic;\n }\n\n if (!catalogIsrc && catalogResult.isrc) {\n catalogIsrc = catalogResult.isrc;\n }\n }\n }\n\n const trimmedTitle = metadata.title?.trim() ?? '';\n const trimmedArtist = metadata.artist?.trim() ?? '';\n const trimmedAlbum = metadata.album?.trim();\n const sanitizedDuration =\n typeof metadata.durationMs === 'number' &&\n Number.isFinite(metadata.durationMs) &&\n metadata.durationMs > 0\n ? Math.round(metadata.durationMs)\n : undefined;\n\n const finalMetadata =\n trimmedTitle && trimmedArtist\n ? {\n title: trimmedTitle,\n artist: trimmedArtist,\n album: trimmedAlbum || undefined,\n durationMs: sanitizedDuration,\n }\n : undefined;\n\n return {\n metadata: finalMetadata,\n appleId,\n appleSong,\n catalogIsrc,\n };\n }\n\n private static parseQueryMetadata(\n rawQuery: string,\n ): ParsedQueryMetadata | null {\n const trimmed = rawQuery?.trim();\n if (!trimmed) return null;\n\n const result: ParsedQueryMetadata = {};\n\n const hyphenSplit = trimmed.split(/\\s[-–—]\\s/);\n if (hyphenSplit.length >= 2) {\n const [rawTitle, ...rest] = hyphenSplit;\n const rawArtist = rest.join(' - ');\n const titleCandidate = rawTitle.trim();\n const artistCandidate = rawArtist.trim();\n if (titleCandidate && artistCandidate) {\n result.title = titleCandidate;\n result.artist = artistCandidate;\n return result;\n }\n }\n\n const bySplit = trimmed.split(/\\s+[bB]y\\s+/);\n if (bySplit.length === 2) {\n const [maybeTitle, maybeArtist] = bySplit.map(part => part.trim());\n if (maybeTitle && maybeArtist) {\n result.title = maybeTitle;\n result.artist = maybeArtist;\n return result;\n }\n }\n\n return null;\n }\n\n private static async searchLyricsPlusCatalog(\n searchTerm: string,\n ): Promise<SongCatalogResult | null> {\n const trimmedQuery = searchTerm?.trim();\n if (!trimmedQuery) return null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v1/songlist/search?q=${encodeURIComponent(\n trimmedQuery,\n )}`;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n const payload = await response.json();\n let results: SongCatalogResult[] = [];\n\n const typedPayload = payload as {\n results?: SongCatalogResult[];\n } | null;\n\n if (Array.isArray(typedPayload?.results)) {\n results = typedPayload.results as SongCatalogResult[];\n } else if (Array.isArray(payload)) {\n results = payload as SongCatalogResult[];\n }\n\n if (results.length > 0) {\n const primary = results.find(\n (item: SongCatalogResult) => item?.id && item.id.appleMusic,\n );\n return (primary ?? results[0]) as SongCatalogResult;\n }\n }\n } catch (error) {\n // Ignore and try next server\n }\n }\n\n return null;\n }\n\n private static async fetchLyricsFromYouLyPlus(\n title: string,\n artist: string,\n isrc?: string,\n metadata: { durationMs?: number; album?: string } = {},\n ): Promise<YouLyPlusLyricsResult[]> {\n if ((!title || !artist) && !isrc) return [];\n\n const params = new URLSearchParams();\n if (title) params.append('title', title);\n if (artist) params.append('artist', artist);\n if (isrc) params.append('isrc', isrc);\n\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n if (!DEFAULT_KPOE_SOURCE_ORDER.includes('apple')) {\n params.append('source', DEFAULT_KPOE_SOURCE_ORDER);\n }\n\n const getRank = (sourceLabel: string, parsedLines: any[]): number => {\n const lower = sourceLabel.toLowerCase();\n const hasWordSync = parsedLines.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n\n const isUnsynced =\n parsedLines.length > 0 &&\n parsedLines.every(\n (line: any) => line.timestamp === 0 && line.endtime === 0,\n );\n\n const isQQ = lower.includes('qq') || lower.includes('lyricsplus');\n\n if (lower.includes('apple') && hasWordSync) return 1;\n if (isQQ && hasWordSync) return 2;\n if (lower.includes('musixmatch') && hasWordSync) return 3;\n if (hasWordSync) return 4;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 5;\n if (isQQ && !hasWordSync && !isUnsynced) return 6;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 7;\n if (!hasWordSync && !isUnsynced) return 8;\n\n if (lower.includes('apple') && isUnsynced) return 9;\n if (isQQ && isUnsynced) return 10;\n if (lower.includes('musixmatch') && isUnsynced) return 11;\n\n return 20;\n };\n\n const allResults: YouLyPlusLyricsResult[] = [];\n\n // Try BiniLyrics cache API first\n try {\n let cacheData: any = null;\n\n // First attempt: Prefer ISRC search if available\n if (isrc) {\n try {\n const isrcUrl = `https://lyrics-api.binimum.org/?isrc=${encodeURIComponent(isrc)}`;\n const isrcRes = await fetchWithTimeout(isrcUrl);\n if (isrcRes.ok) {\n const data = await isrcRes.json();\n if (data.results && data.results.length > 0) {\n cacheData = data;\n }\n }\n } catch (isrcErr) {\n // Fall through to title/artist search\n }\n }\n\n // Second attempt: Fallback to title and artist search if ISRC search failed or was not available\n if (!cacheData && title && artist) {\n const cacheParams = new URLSearchParams({\n track: title,\n artist,\n });\n if (metadata.album) {\n cacheParams.append('album', metadata.album);\n }\n if (metadata.durationMs && metadata.durationMs > 0) {\n cacheParams.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n const cacheUrl = `https://lyrics-api.binimum.org/?${cacheParams.toString()}`;\n const cacheRes = await fetchWithTimeout(cacheUrl);\n if (cacheRes.ok) {\n cacheData = await cacheRes.json();\n }\n }\n\n if (cacheData && cacheData.results && cacheData.results.length > 0) {\n const result = cacheData.results[0];\n if (result.timing_type === 'word' && result.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const lines = AmLyrics.parseTTML(ttmlText);\n if (lines && lines.length > 0) {\n allResults.push({ lines, source: 'BiniLyrics' });\n return allResults;\n }\n }\n } else {\n // Not word type, try fetching any word synced lyrics from lyricsplus\n const fallbackParams = new URLSearchParams(params);\n const fallbackUrl = `https://lyricsplus.binimum.org/v2/lyrics/get?${fallbackParams.toString()}`;\n try {\n const fallbackRes = await fetchWithTimeout(fallbackUrl);\n if (fallbackRes.ok) {\n const payload = await fallbackRes.json();\n const lines = AmLyrics.convertKPoeLyrics(payload);\n const hasWordSync = lines?.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n if (lines && lines.length > 0 && hasWordSync) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n allResults.push({ lines, source: sourceLabel });\n return allResults;\n }\n }\n } catch (fallbackError) {\n // Ignore fallback fetch error\n }\n\n // If fallback fails or has no word sync, fall back to bini lyrics\n if (result.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const lines = AmLyrics.parseTTML(ttmlText);\n if (lines && lines.length > 0) {\n allResults.push({\n lines,\n source: 'BiniLyrics',\n });\n return allResults;\n }\n }\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Cache API failed', e);\n }\n\n // Shuffle servers so we pick a random one first, with all others as fallback\n // Try up to 3 servers to improve reliability when some have CORS or connectivity issues\n const shuffledServers = [...KPOE_SERVERS]\n .sort(() => Math.random() - 0.5)\n .slice(0, 3);\n\n for (const base of shuffledServers) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v2/lyrics/get?${params.toString()}`;\n\n let payload: any = null;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n payload = await response.json();\n }\n } catch {\n payload = null;\n }\n\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n if (lines && lines.length > 0) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n\n const rank = getRank(sourceLabel, lines);\n const result = { lines, source: sourceLabel };\n\n allResults.push(result);\n\n // If source is Apple synced, we have the best so we can just immediately break the sweep\n if (rank === 1) {\n break;\n }\n }\n }\n }\n\n // If we haven't found a completely synced result (rank 1 or 2) among the servers,\n // force an explicit query against lyricsplus.binimum.org looking for word lyrics\n const hasHighRankResult = allResults.some(\n r => getRank(r.source, r.lines) <= 2,\n );\n\n if (!hasHighRankResult) {\n try {\n const fallbackParams = new URLSearchParams(params);\n const url = `https://lyricsplus.binimum.org/v2/lyrics/get?${fallbackParams.toString()}`;\n const response = await fetchWithTimeout(url);\n if (response.ok) {\n const payload = await response.json();\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n const hasWordSync = lines?.some(\n (line: any) =>\n line.text && Array.isArray(line.text) && line.text.length > 1,\n );\n if (lines && lines.length > 0 && hasWordSync) {\n allResults.push({ lines, source: sourceLabel });\n }\n }\n }\n } catch (error) {\n // Explicit fallback failed, ignore\n }\n }\n\n return allResults;\n }\n\n /**\n * Parse LRC subtitle format into LyricsLine[].\n * Handles \"[mm:ss.xx] text\" lines.\n */\n private static parseLrcSubtitles(lrc: string): LyricsLine[] {\n if (!lrc || typeof lrc !== 'string') return [];\n\n const lines: LyricsLine[] = [];\n const rawLines = lrc.split('\\n');\n const parsed: { timestamp: number; text: string }[] = [];\n\n for (const raw of rawLines) {\n const match = raw.match(/^\\[(\\d{1,3}):(\\d{2})\\.(\\d{2,3})\\]\\s?(.*)$/);\n if (!match) {\n // Skip non-timestamped lines (headers like [ti:], [ar:], etc.)\n // eslint-disable-next-line no-continue\n continue;\n }\n const minutes = parseInt(match[1], 10);\n const seconds = parseInt(match[2], 10);\n let centiseconds = parseInt(match[3], 10);\n // Handle both mm:ss.xx (centiseconds) and mm:ss.xxx (milliseconds)\n if (match[3].length === 3) {\n centiseconds = Math.round(centiseconds / 10);\n }\n const timestamp = (minutes * 60 + seconds) * 1000 + centiseconds * 10;\n const text = match[4] || '';\n parsed.push({ timestamp, text });\n }\n\n for (let i = 0; i < parsed.length; i += 1) {\n const { timestamp, text } = parsed[i];\n // Endtime is the start of the next line, or timestamp + 5s for the last line\n const endtime =\n i + 1 < parsed.length ? parsed[i + 1].timestamp : timestamp + 5000;\n\n // Skip empty lines (instrumental gaps)\n if (!text.trim()) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const syllable: Syllable = {\n text,\n part: false,\n timestamp,\n endtime,\n lineSynced: true,\n };\n\n lines.push({\n text: [syllable],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp,\n endtime,\n isWordSynced: false,\n });\n }\n\n return lines;\n }\n\n /**\n * Fetch lyrics from Tidal API.\n * Picks 2 random servers, tries search + lyrics on each.\n */\n private static async fetchLyricsFromTidal(\n metadata: SongMetadata,\n isrc?: string,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n // Pick 3 random unique servers for better reliability\n const shuffled = [...TIDAL_SERVERS].sort(() => Math.random() - 0.5);\n const serversToTry = shuffled.slice(0, 3);\n\n for (const base of serversToTry) {\n try {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n\n // Step 1: Search for the track\n const searchQuery = `${title} ${artist}`;\n const searchParams = new URLSearchParams({ s: searchQuery });\n // eslint-disable-next-line no-await-in-loop\n const searchResponse = await fetchWithTimeout(\n `${normalizedBase}/search/?${searchParams.toString()}`,\n );\n\n if (!searchResponse.ok) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // eslint-disable-next-line no-await-in-loop\n const searchData = await searchResponse.json();\n const items = searchData?.data?.items;\n\n if (!Array.isArray(items) || items.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Find best match: prefer ISRC match, then first result\n let bestTrack = items[0];\n if (isrc) {\n const isrcMatch = items.find(\n (item: any) =>\n item.isrc && item.isrc.toLowerCase() === isrc.toLowerCase(),\n );\n if (isrcMatch) {\n bestTrack = isrcMatch;\n }\n }\n\n const trackId = bestTrack?.id;\n if (!trackId) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Step 2: Fetch lyrics\n // eslint-disable-next-line no-await-in-loop\n const lyricsResponse = await fetchWithTimeout(\n `${normalizedBase}/lyrics/?id=${trackId}`,\n );\n\n if (!lyricsResponse.ok) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // eslint-disable-next-line no-await-in-loop\n const lyricsData = await lyricsResponse.json();\n const subtitles = lyricsData?.lyrics?.subtitles;\n\n if (subtitles && typeof subtitles === 'string') {\n const lines = AmLyrics.parseLrcSubtitles(subtitles);\n if (lines.length > 0) {\n const provider = lyricsData?.lyrics?.lyricsProvider || 'Tidal';\n return {\n lines,\n source: `Tidal (${provider})`,\n };\n }\n }\n } catch {\n // Try next server\n }\n }\n\n return null;\n }\n\n /**\n * Fetch lyrics from LRCLIB.\n * Uses search endpoint, prefers synced lyrics.\n */\n private static async fetchLyricsFromLrclib(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n try {\n const searchQuery = `${artist} ${title}`;\n const params = new URLSearchParams({ q: searchQuery });\n const response = await fetchWithTimeout(\n `https://lrclib.net/api/search?${params.toString()}`,\n {\n headers: {\n 'User-Agent': `apple-music-web-components/${VERSION}`,\n },\n },\n );\n\n if (!response.ok) return null;\n\n const results = await response.json();\n if (!Array.isArray(results) || results.length === 0) return null;\n\n // Prefer results with synced lyrics\n const withSynced = results.find(\n (r: any) => r.syncedLyrics && typeof r.syncedLyrics === 'string',\n );\n const bestMatch = withSynced || results[0];\n\n // Try synced lyrics first\n if (bestMatch.syncedLyrics) {\n const lines = AmLyrics.parseLrcSubtitles(bestMatch.syncedLyrics);\n if (lines.length > 0) {\n return { lines, source: 'LRCLIB' };\n }\n }\n\n // Fall back to plain lyrics (unsynced)\n if (bestMatch.plainLyrics && typeof bestMatch.plainLyrics === 'string') {\n const plainLines = bestMatch.plainLyrics\n .split('\\n')\n .filter((l: string) => l.trim());\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [\n {\n text,\n part: false,\n timestamp: 0,\n endtime: 0,\n },\n ],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'LRCLIB (unsynced)' };\n }\n }\n } catch {\n // LRCLIB fetch failed\n }\n\n return null;\n }\n\n private static async fetchLyricsFromGenius(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) return null;\n\n try {\n const params = new URLSearchParams({ title, artist });\n const response = await fetchWithTimeout(\n `${GENIUS_WORKER_URL}?${params.toString()}`,\n );\n\n if (!response.ok) return null;\n const data = await response.json();\n\n if (data.lyrics) {\n const plainLines = data.lyrics\n .split('\\n')\n .map((l: string) => l.trim())\n .filter((l: string) => l && !l.startsWith('['));\n\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [\n {\n text,\n part: false,\n timestamp: 0,\n endtime: 0,\n },\n ],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'Genius' };\n }\n }\n } catch {\n // Genius fetch failed, will fall through to return null\n }\n\n return null;\n }\n\n private static calculateLineAlignments(\n lineSingers: (string | undefined)[],\n agentTypes: Record<string, string>,\n ): ('start' | 'end' | undefined)[] {\n const lineSideAssignments = new Array(lineSingers.length).fill(undefined);\n let currentSideIsLeft = true;\n let lastPersonSingerId: string | null = null;\n let rightCount = 0;\n let totalCount = 0;\n\n lineSingers.forEach((singerId, index) => {\n let sideClass: 'start' | 'end' | undefined;\n\n if (singerId) {\n let type = agentTypes[singerId];\n if (!type) {\n if (singerId === 'v1000') {\n type = 'group';\n } else if (singerId === 'v2000') {\n type = 'other';\n } else {\n type = 'person';\n }\n }\n\n if (type === 'group') {\n sideClass = 'start';\n } else {\n if (lastPersonSingerId === null) {\n if (type === 'other') {\n currentSideIsLeft = false;\n } else {\n currentSideIsLeft = true;\n }\n } else if (singerId !== lastPersonSingerId) {\n currentSideIsLeft = !currentSideIsLeft;\n }\n\n sideClass = currentSideIsLeft ? 'start' : 'end';\n lastPersonSingerId = singerId;\n }\n }\n\n if (sideClass) {\n totalCount += 1;\n if (sideClass === 'end') rightCount += 1;\n }\n\n lineSideAssignments[index] = sideClass;\n });\n\n if (totalCount > 0 && Math.round((rightCount / totalCount) * 100) >= 85) {\n const flip = (s: 'start' | 'end' | undefined) => {\n if (s === 'start') return 'end';\n if (s === 'end') return 'start';\n return s;\n };\n\n for (let i = 0; i < lineSideAssignments.length; i += 1) {\n lineSideAssignments[i] = flip(lineSideAssignments[i]);\n }\n }\n\n return lineSideAssignments;\n }\n\n private static parseTTML(ttmlString: string): LyricsLine[] | null {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(ttmlString, 'text/xml');\n\n const translations: Record<string, string> = {};\n const transliterations: Record<string, any> = {};\n const agentMap: Record<string, string> = {};\n\n const agents = doc.getElementsByTagName('ttm:agent');\n for (let i = 0; i < agents.length; i += 1) {\n const agent = agents[i];\n const id = agent.getAttribute('xml:id');\n const type = agent.getAttribute('type');\n if (id && type) {\n agentMap[id] = type;\n }\n }\n\n const translationNodes = doc.getElementsByTagName('translation');\n for (let i = 0; i < translationNodes.length; i += 1) {\n const texts = translationNodes[i].getElementsByTagName('text');\n for (let j = 0; j < texts.length; j += 1) {\n const textNode = texts[j];\n const key = textNode.getAttribute('for');\n if (key && textNode.textContent) {\n translations[key] = textNode.textContent;\n }\n }\n }\n\n const timeToMs = (timeStr: string | null): number => {\n if (!timeStr) return 0;\n const parts = timeStr.split(':');\n let seconds = 0;\n if (parts.length === 2) {\n seconds = parseInt(parts[0], 10) * 60 + parseFloat(parts[1]);\n } else if (parts.length === 3) {\n seconds =\n parseInt(parts[0], 10) * 3600 +\n parseInt(parts[1], 10) * 60 +\n parseFloat(parts[2]);\n } else {\n seconds = parseFloat(parts[0]);\n }\n return Math.round(seconds * 1000);\n };\n\n const transliterationNodes = doc.getElementsByTagName('transliteration');\n for (let i = 0; i < transliterationNodes.length; i += 1) {\n const texts = transliterationNodes[i].getElementsByTagName('text');\n for (let j = 0; j < texts.length; j += 1) {\n const textNode = texts[j];\n const key = textNode.getAttribute('for');\n if (!key) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const spans = Array.from(\n textNode.getElementsByTagName('span'),\n ).filter(span => span.getAttribute('begin'));\n\n if (spans.length > 0) {\n const syllabus: any[] = [];\n let fullText = '';\n for (let k = 0; k < spans.length; k += 1) {\n const span = spans[k];\n const begin = span.getAttribute('begin');\n const end = span.getAttribute('end');\n let spanText = span.textContent || '';\n const nextNode = span.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !spanText.endsWith(' ')\n ) {\n spanText += ' ';\n }\n if (spanText.trim() === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n syllabus.push({\n time: timeToMs(begin),\n duration: timeToMs(end) - timeToMs(begin),\n text: spanText,\n });\n fullText += spanText;\n }\n transliterations[key] = { text: fullText.trim(), syllabus };\n } else if (textNode.textContent) {\n transliterations[key] = {\n text: textNode.textContent.trim().replace(/\\s+/g, ' '),\n };\n }\n }\n }\n\n const lines: LyricsLine[] = [];\n const pNodes = doc.getElementsByTagName('p');\n\n const lineSingers: (string | undefined)[] = [];\n for (let i = 0; i < pNodes.length; i += 1) {\n lineSingers.push(pNodes[i].getAttribute('ttm:agent') || undefined);\n }\n const alignments = AmLyrics.calculateLineAlignments(\n lineSingers,\n agentMap,\n );\n\n for (let i = 0; i < pNodes.length; i += 1) {\n const p = pNodes[i];\n const key = p.getAttribute('itunes:key');\n const beginMs = timeToMs(p.getAttribute('begin'));\n const endMs = timeToMs(p.getAttribute('end'));\n\n let songPart: string | undefined;\n if (p.parentNode && (p.parentNode as Element).tagName === 'div') {\n songPart =\n (p.parentNode as Element).getAttribute('itunes:songPart') ||\n undefined;\n }\n\n const mainSyllables: Syllable[] = [];\n const bgSyllables: Syllable[] = [];\n\n const spans = p.getElementsByTagName('span');\n if (spans.length > 0) {\n for (let j = 0; j < spans.length; j += 1) {\n const span = spans[j];\n\n if (span.getAttribute('ttm:role') === 'x-bg') {\n const bgInnerSpans = span.getElementsByTagName('span');\n for (let k = 0; k < bgInnerSpans.length; k += 1) {\n const bgSpan = bgInnerSpans[k];\n let bgText = bgSpan.textContent || '';\n const nextNode = bgSpan.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !bgText.endsWith(' ')\n ) {\n bgText += ' ';\n }\n bgSyllables.push({\n text: bgText,\n timestamp: timeToMs(bgSpan.getAttribute('begin')),\n endtime: timeToMs(bgSpan.getAttribute('end')),\n part: false,\n });\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n span.parentNode &&\n (span.parentNode as Element).getAttribute?.('ttm:role') === 'x-bg'\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n let text = span.textContent || '';\n const nextNode = span.nextSibling;\n if (\n nextNode &&\n nextNode.nodeType === 3 &&\n /^\\s/.test(nextNode.textContent || '') &&\n !text.endsWith(' ')\n ) {\n text += ' ';\n }\n mainSyllables.push({\n text,\n timestamp: timeToMs(span.getAttribute('begin')),\n endtime: timeToMs(span.getAttribute('end')),\n part: false,\n });\n }\n } else {\n mainSyllables.push({\n text: p.textContent?.trim() || '',\n timestamp: beginMs,\n endtime: endMs,\n part: false,\n lineSynced: true,\n });\n }\n\n const alignment = alignments[i];\n\n // Distribute line-level transliteration to individual syllables\n // so that per-syllable animated romanisation works (like KPoe lyrics)\n const lineTransliterationItem = key ? transliterations[key] : undefined;\n if (\n lineTransliterationItem &&\n mainSyllables.length > 1 &&\n spans.length > 0\n ) {\n if (\n lineTransliterationItem.syllabus &&\n lineTransliterationItem.syllabus.length === mainSyllables.length\n ) {\n mainSyllables.forEach((syl, mapIdx) => {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = lineTransliterationItem.syllabus[mapIdx].text;\n });\n } else {\n const lineTransliteration = lineTransliterationItem.text;\n const romanWords = lineTransliteration.split(/\\s+/).filter(Boolean);\n\n const syllableGroups: number[][] = [];\n for (let si = 0; si < mainSyllables.length; si += 1) {\n if (mainSyllables[si].part && syllableGroups.length > 0) {\n syllableGroups[syllableGroups.length - 1].push(si);\n } else {\n syllableGroups.push([si]);\n }\n }\n\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n mainSyllables.map(s => s.text).join(''),\n );\n\n if (romanWords.length === syllableGroups.length) {\n syllableGroups.forEach((group, gi) => {\n // eslint-disable-next-line no-param-reassign\n mainSyllables[group[0]].romanizedText = romanWords[gi];\n });\n } else if (romanWords.length === mainSyllables.length) {\n mainSyllables.forEach((syl, mapIdx) => {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = romanWords[mapIdx];\n });\n } else if (isCJK) {\n let romanIdx = 0;\n for (const group of syllableGroups) {\n const syl = mainSyllables[group[0]];\n const sylText = group\n .map(gIndex => mainSyllables[gIndex].text)\n .join('');\n const validChars =\n sylText.match(\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7afA-Za-z0-9]/g,\n ) || [];\n const needed = validChars.length;\n if (needed > 0 && romanIdx < romanWords.length) {\n // eslint-disable-next-line no-param-reassign\n syl.romanizedText = romanWords\n .slice(romanIdx, romanIdx + needed)\n .join(' ');\n romanIdx += needed;\n }\n }\n }\n }\n }\n\n lines.push({\n text: mainSyllables,\n background: bgSyllables.length > 0,\n backgroundText: bgSyllables,\n timestamp: beginMs,\n endtime: endMs,\n isWordSynced: spans.length > 0,\n alignment,\n songPart,\n translation: key ? translations[key] : undefined,\n romanizedText: lineTransliterationItem?.text,\n oppositeTurn: alignment === 'end',\n });\n }\n\n return lines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to parse TTML', e);\n return null;\n }\n }\n\n private static convertKPoeLyrics(payload: any): LyricsLine[] | null {\n if (!payload) {\n return null;\n }\n\n let rawLyrics: any[] | null = null;\n if (Array.isArray(payload?.lyrics)) {\n rawLyrics = payload.lyrics;\n } else if (Array.isArray(payload?.data?.lyrics)) {\n rawLyrics = payload.data.lyrics;\n } else if (Array.isArray(payload?.data)) {\n rawLyrics = payload.data;\n }\n\n if (!rawLyrics || rawLyrics.length === 0) {\n return null;\n }\n\n const sanitizedEntries = rawLyrics.filter((item: any) => Boolean(item));\n const lines: LyricsLine[] = [];\n\n // If type is 'Line', we revert to line-by-line highlighting by skipping syllabus parsing\n const isLineType = payload.type === 'Line' || payload.type === 'line';\n\n // Convert metadata.agents to type map\n const agentTypes: Record<string, string> = {};\n if (payload.metadata?.agents) {\n Object.entries(payload.metadata.agents).forEach(\n ([key, agent]: [string, any]) => {\n const mappedKey = agent.alias || key;\n agentTypes[mappedKey] = agent.type;\n },\n );\n }\n\n const lineSingers = sanitizedEntries.map(\n (entry: any) => entry.element?.singer,\n );\n const alignments = AmLyrics.calculateLineAlignments(\n lineSingers,\n agentTypes,\n );\n\n for (let i = 0; i < sanitizedEntries.length; i += 1) {\n const entry = sanitizedEntries[i];\n const start = AmLyrics.toMilliseconds(entry.time);\n const duration = AmLyrics.toMilliseconds(entry.duration);\n\n const alignment = alignments[i];\n const lineText = typeof entry.text === 'string' ? entry.text : '';\n const lineStart = AmLyrics.toMilliseconds(entry.time);\n const lineDuration = AmLyrics.toMilliseconds(entry.duration);\n const explicitEnd = AmLyrics.toMilliseconds(entry.endTime);\n const lineEnd = explicitEnd || lineStart + (lineDuration || 0);\n\n let syllabus = [];\n if (Array.isArray(entry.syllabus)) {\n syllabus = entry.syllabus.filter((s: any) => Boolean(s));\n } else if (Array.isArray(entry.words)) {\n syllabus = entry.words.filter((s: any) => Boolean(s));\n }\n\n const mainSyllables: Syllable[] = [];\n const backgroundSyllables: Syllable[] = [];\n\n if (!isLineType && syllabus.length > 0) {\n for (const syl of syllabus) {\n const sylStart = AmLyrics.toMilliseconds(syl.time, lineStart);\n const sylDuration = AmLyrics.toMilliseconds(syl.duration);\n\n // If there's only 1 syllable and duration is 0, it's likely a line-synced fallback.\n // Otherwise, it's an instantaneous boundary (like a space or comma) and should not span the line.\n const sylEnd =\n sylDuration === 0 && syllabus.length === 1\n ? lineEnd\n : sylStart + sylDuration;\n\n const syllable: Syllable = {\n text: typeof syl.text === 'string' ? syl.text : '',\n part: Boolean(syl.part),\n timestamp: sylStart,\n endtime: sylEnd,\n };\n\n if (syl.isBackground) {\n backgroundSyllables.push(syllable);\n } else {\n mainSyllables.push(syllable);\n }\n }\n }\n\n if (mainSyllables.length === 0 && lineText) {\n mainSyllables.push({\n text: lineText,\n part: false,\n timestamp: lineStart,\n endtime: lineEnd || lineStart,\n lineSynced: isLineType, // Mark as line-synced\n });\n }\n\n const hasWordSync =\n mainSyllables.length > 0 || backgroundSyllables.length > 0;\n\n const { transliteration } = entry;\n let romanizedTextFromPayload: string | undefined;\n\n if (transliteration) {\n romanizedTextFromPayload = transliteration.text;\n // If syllabus data matches, map it to main syllables\n if (\n Array.isArray(transliteration.syllabus) &&\n transliteration.syllabus.length === mainSyllables.length\n ) {\n transliteration.syllabus.forEach((s: any, idx: number) => {\n mainSyllables[idx].romanizedText = s.text;\n });\n }\n }\n\n // Extract translation from KPoe API if available\n const translationText = entry.translation?.text;\n\n const lineResult: LyricsLine = {\n text: mainSyllables,\n background: backgroundSyllables.length > 0,\n backgroundText: backgroundSyllables,\n oppositeTurn:\n alignment === 'end' ||\n (Array.isArray(entry.element)\n ? entry.element.includes('opposite') ||\n entry.element.includes('right')\n : false),\n timestamp: lineStart,\n endtime: start + duration,\n isWordSynced: isLineType ? false : hasWordSync,\n alignment,\n songPart: entry.element?.songPart,\n romanizedText: romanizedTextFromPayload,\n translation: translationText,\n };\n\n lines.push(lineResult);\n }\n\n return lines;\n }\n\n private static toMilliseconds(value: unknown, fallback = 0): number {\n const num = Number(value);\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n return fallback;\n }\n\n if (!Number.isInteger(num)) {\n return Math.round(num * 1000);\n }\n\n return Math.max(0, Math.round(num));\n }\n\n firstUpdated() {\n // Set up scroll event listener for user scroll detection\n // Use wheel/touchmove which are guaranteed to be user initiated,\n // unlike 'scroll' which fires for both user and programmatic/inertia\n if (this.lyricsContainer) {\n this.lyricsContainer.addEventListener(\n 'wheel',\n this._boundHandleUserScroll,\n { passive: true },\n );\n this.lyricsContainer.addEventListener(\n 'touchmove',\n this._boundHandleUserScroll,\n { passive: true },\n );\n }\n }\n\n /**\n * Handle currentTime changes imperatively, bypassing Lit's render cycle.\n * This prevents the template from re-rendering on every frame, which would\n * reset imperative animation classes (highlight, finished, etc.) set by\n * updateSyllablesForLine.\n */\n private _onTimeChanged(oldTime: number, newTime: number): void {\n const timeDiff = Math.abs(newTime - oldTime);\n const isSeek = timeDiff > SEEK_THRESHOLD_MS;\n\n const newActiveLines = this.findActiveLineIndices(newTime);\n const oldActiveLines = this.activeLineIndices;\n\n // Reset animation if active lines change or if we skip time.\n const linesChanged = !AmLyrics.arraysEqual(newActiveLines, oldActiveLines);\n\n if (linesChanged || isSeek) {\n // Imperatively manage 'active' class so that scroll-animate and other\n // imperative classes are never clobbered.\n if (this.lyricsContainer) {\n // Remove 'active' from lines that are no longer active\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n lineElement.classList.remove('active');\n AmLyrics.resetSyllables(lineElement);\n }\n }\n }\n // Add 'active' to newly active lines\n for (const lineIndex of newActiveLines) {\n if (!oldActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n lineElement.classList.add('active');\n lineElement.classList.remove('pre-active'); // Cleanup pre-active when fully active\n }\n }\n }\n\n if (newActiveLines.length > 0) {\n this.clearPreActiveClasses();\n }\n }\n\n this.startAnimationFromTime(newTime);\n\n // Trigger scroll imperatively (was previously in updated() via @state)\n this._handleActiveLineScroll(oldActiveLines, isSeek);\n }\n\n // YouLyPlus-style syllable animation updates\n if (this.lyricsContainer) {\n // Update syllables in active lines\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n const activeGaps =\n this.lyricsContainer.querySelectorAll('.lyrics-gap.active');\n activeGaps.forEach(gapLine => {\n AmLyrics.updateSyllablesForLine(gapLine as HTMLElement, newTime);\n });\n\n // Imperatively manage gap active state (template doesn't re-render on time changes)\n const allGaps = this.lyricsContainer.querySelectorAll('.lyrics-gap');\n allGaps.forEach(gap => {\n const gapStartTime = parseFloat(\n gap.getAttribute('data-start-time') || '0',\n );\n const gapEndTime = parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive = newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n // Start exit animation early so it completes before the next lyric\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && !isActive && !isExiting) {\n // Entering gap: remove any leftover exit state, add active\n gap.classList.remove('gap-exiting');\n gap.classList.add('active');\n // Mark dots whose time has already passed as finished, and\n // trigger highlight on the dot currently in its time window\n // so the first dot always lights up even on late load.\n const dotSyllables = gap.querySelectorAll('.lyrics-syllable');\n dotSyllables.forEach(dot => {\n const dotStart = parseFloat(\n dot.getAttribute('data-start-time') || '0',\n );\n const dotEnd = parseFloat(dot.getAttribute('data-end-time') || '0');\n if (newTime > dotEnd) {\n dot.classList.add('finished');\n // Also ensure the highlight + animation fired so CSS state is correct\n if (!dot.classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(dot as HTMLElement);\n }\n } else if (newTime >= dotStart && newTime <= dotEnd) {\n // Currently within this dot's window — trigger its highlight\n AmLyrics.updateSyllableAnimation(dot as HTMLElement);\n }\n });\n } else if (shouldStartExiting) {\n // Exiting gap: keep visible while dots animate out\n gap.classList.add('gap-exiting');\n gap.classList.remove('active');\n // After exit animation completes, remove gap-exiting to collapse\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (isActive && !shouldBeActive) {\n // NEW: Immediate cleanup if we seeked out of valid range\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n // NEW: Cleanup exiting state if we seeked backwards before exit window\n gap.classList.remove('gap-exiting');\n }\n });\n\n // Track instrumental gap state\n const currentGap = this.findInstrumentalGapAt(newTime);\n if (currentGap) {\n this.lastInstrumentalIndex = currentGap.insertBeforeIndex;\n } else if (this.lastInstrumentalIndex !== null) {\n this.lastInstrumentalIndex = null;\n }\n\n // Pre-scroll: scroll to upcoming line ~0.5s before it starts\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n this.lyrics\n ) {\n // Condition: ONLY pre-scroll if no other lyric is currently playing.\n // If a lyric is playing, we must wait for it to finish (handled by updated()).\n if (this.activeLineIndices.length === 0) {\n let preActiveLineIndex: number | null = null;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const timeUntilStart = line.timestamp - newTime;\n\n const nextLineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement;\n\n if (timeUntilStart > 0 && timeUntilStart <= PRE_SCROLL_LEAD_MS) {\n // Time to pre-scroll and pre-activate!\n if (nextLineEl) {\n // Apply unblur & zoom effect ahead of lyric start\n preActiveLineIndex = i;\n nextLineEl.classList.add('pre-active');\n this.clearPreActiveClasses(i);\n this.focusLine(nextLineEl);\n }\n break;\n }\n }\n\n this.clearPreActiveClasses(preActiveLineIndex);\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n // Recalculate timing data for accurate animations whenever lyrics change\n this._updateCharTimingData();\n\n // Apply 'active' classes imperatively after lyrics first render,\n // since the template no longer binds the 'active' class (to avoid\n // clobbering imperative scroll-animate classes on re-render).\n if (this.lyricsContainer && this.lyrics) {\n const activeLines = this.findActiveLineIndices(this.currentTime);\n for (const lineIndex of activeLines) {\n const lineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineEl) lineEl.classList.add('active');\n }\n }\n }\n\n // Handle duration reset (-1 stops playback and resets currentTime to 0)\n if (changedProperties.has('duration') && this.duration === -1) {\n this.currentTime = 0;\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.isUserScrolling = false;\n\n // Cancel any running animations\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n // Clear user scroll timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n // Scroll to top\n if (this.lyricsContainer) {\n this.lyricsContainer.scrollTop = 0;\n }\n\n return; // Exit early, don't process other changes\n }\n\n if (\n (changedProperties.has('query') ||\n changedProperties.has('musicId') ||\n changedProperties.has('isrc') ||\n changedProperties.has('songTitle') ||\n changedProperties.has('songArtist') ||\n changedProperties.has('songAlbum') ||\n changedProperties.has('songDurationMs')) &&\n !changedProperties.has('currentTime')\n ) {\n this.fetchLyrics();\n }\n\n if (changedProperties.has('currentTime') && this.lyrics) {\n // currentTime changes are now handled by the custom setter (_onTimeChanged)\n // This block intentionally left empty — only here for backwards compat with\n // any subclasses that might check changedProperties\n }\n }\n\n /**\n * Handle scrolling when active line indices change.\n * Called imperatively from _onTimeChanged instead of from updated().\n */\n private _handleActiveLineScroll(\n _oldActiveIndices: number[],\n forceScroll = false,\n ): void {\n if (this.activeLineIndices.length === 0 || !this.lyricsContainer) {\n return;\n }\n\n const targetLineIndex = this.getPrimaryActiveLineIndex(\n this.activeLineIndices,\n );\n if (targetLineIndex === null) return;\n\n const targetLine = this.lyricsContainer.querySelector(\n `#lyrics-line-${targetLineIndex}`,\n ) as HTMLElement;\n\n if (targetLine) {\n this.focusLine(targetLine, forceScroll);\n }\n }\n\n private _textWidthCanvas: HTMLCanvasElement | undefined;\n\n private _textWidthCtx: CanvasRenderingContext2D | null | undefined;\n\n private _getTextWidth(text: string, font: string): number {\n if (!this._textWidthCanvas) {\n this._textWidthCanvas = document.createElement('canvas');\n this._textWidthCtx = this._textWidthCanvas.getContext('2d', {\n willReadFrequently: true,\n });\n }\n if (this._textWidthCtx) {\n this._textWidthCtx.font = font;\n return this._textWidthCtx.measureText(text).width;\n }\n return 0;\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n // Get the computed font from the first syllable to ensure accuracy\n const referenceSyllable = this.shadowRoot.querySelector('.lyrics-syllable');\n if (!referenceSyllable) return;\n\n const computedStyle = getComputedStyle(referenceSyllable);\n const { font } = computedStyle; // Full font string\n const fontSize = parseFloat(computedStyle.fontSize);\n\n const growableWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable',\n );\n if (!growableWords) return;\n\n growableWords.forEach((wordSpan: any) => {\n const syllableWraps = wordSpan.querySelectorAll('.lyrics-syllable-wrap');\n\n // Flatten syllables\n const syllables: HTMLElement[] = [];\n syllableWraps.forEach((wrap: HTMLElement) => {\n const syl = wrap.querySelector('.lyrics-syllable');\n if (syl) syllables.push(syl as HTMLElement);\n });\n\n syllables.forEach(sylSpan => {\n const charSpans = sylSpan.querySelectorAll('.char');\n if (charSpans.length === 0) return;\n\n // Logic from YouLyPlus renderCharWipes:\n // Use textContent from spans to ensure we measure what is rendered\n const chars = Array.from(charSpans).map(span => span.textContent || '');\n const charWidths = chars.map(c => this._getTextWidth(c, font));\n const totalSyllableWidth = charWidths.reduce((a, b) => a + b, 0);\n\n const duration = parseFloat(sylSpan.dataset.duration || '0');\n const velocityPxPerMs =\n duration > 0 ? totalSyllableWidth / duration : 0;\n\n // Gradient width in pixels = 0.375 * fontSize\n // This matches YouLyPlus visual gradient size\n const gradientWidthPx = 0.375 * fontSize;\n const gradientDurationMs =\n velocityPxPerMs > 0 ? gradientWidthPx / velocityPxPerMs : 100;\n\n let cumulativeCharWidth = 0;\n\n charSpans.forEach((spanArg: any, i: number) => {\n const charWidth = charWidths[i];\n const span = spanArg;\n\n if (totalSyllableWidth > 0) {\n const startPercent = cumulativeCharWidth / totalSyllableWidth;\n const durationPercent = charWidth / totalSyllableWidth;\n\n span.dataset.wipeStart = startPercent.toFixed(4);\n span.dataset.wipeDuration = durationPercent.toFixed(4);\n\n // The critical missing piece:\n span.dataset.preWipeArrival = (duration * startPercent).toFixed(2);\n span.dataset.preWipeDuration = gradientDurationMs.toFixed(2);\n }\n\n cumulativeCharWidth += charWidth;\n });\n });\n });\n }\n\n private static arraysEqual(a: number[], b: number[]): boolean {\n return a.length === b.length && a.every((val, i) => val === b[i]);\n }\n\n private static getLineIndexFromElement(\n lineElement: HTMLElement | null,\n ): number | null {\n if (!lineElement) return null;\n const match = lineElement.id.match(/^lyrics-line-(\\d+)$/);\n return match ? parseInt(match[1], 10) : null;\n }\n\n private static getGapLoopDelay(gapDuration: number): number {\n const desiredPhase = GAP_PULSE_DURATION_MS;\n const targetTime = gapDuration - GAP_EXIT_LEAD_MS;\n const normalizedTarget =\n ((targetTime % GAP_PULSE_CYCLE_MS) + GAP_PULSE_CYCLE_MS) %\n GAP_PULSE_CYCLE_MS;\n\n return (\n (((desiredPhase - normalizedTarget) % GAP_PULSE_CYCLE_MS) +\n GAP_PULSE_CYCLE_MS) %\n GAP_PULSE_CYCLE_MS\n );\n }\n\n private clearPreActiveClasses(exceptLineIndex: number | null = null): void {\n if (!this.lyricsContainer) return;\n\n this.lyricsContainer\n .querySelectorAll('.lyrics-line.pre-active')\n .forEach(element => {\n const lineElement = element as HTMLElement;\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex !== exceptLineIndex) {\n lineElement.classList.remove('pre-active');\n }\n });\n }\n\n private getPrimaryActiveLineIndex(activeIndices: number[]): number | null {\n if (activeIndices.length === 0) return null;\n\n const groupStart = activeIndices[0];\n const groupEnd = activeIndices[activeIndices.length - 1];\n let candidateIndex = Math.max(groupStart, groupEnd - 2);\n\n const currentPrimaryIndex = AmLyrics.getLineIndexFromElement(\n this.currentPrimaryActiveLine,\n );\n if (\n currentPrimaryIndex !== null &&\n activeIndices.includes(currentPrimaryIndex) &&\n candidateIndex < currentPrimaryIndex\n ) {\n candidateIndex = currentPrimaryIndex;\n }\n\n return candidateIndex;\n }\n\n private focusLine(lineElement: HTMLElement, forceScroll = false): void {\n const primaryChanged = lineElement !== this.currentPrimaryActiveLine;\n\n if (primaryChanged) {\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = lineElement;\n }\n\n this.updatePositionClasses(lineElement);\n\n if (\n (forceScroll || primaryChanged) &&\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.scrollToActiveLineYouLy(lineElement, forceScroll);\n }\n }\n\n private handleUserScroll() {\n // Ignore programmatic scrolls and click-seek scrolls\n if (this.isProgrammaticScroll || this.isClickSeeking) {\n return;\n }\n\n // Mark that user is currently scrolling\n this.isUserScrolling = true;\n this.lyricsContainer?.classList.add('user-scrolling');\n\n // Clear any existing timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n\n // Set timeout to re-enable auto-scroll after 2 seconds of no scrolling\n this.userScrollTimeoutId = window.setTimeout(() => {\n this.isUserScrolling = false;\n this.userScrollTimeoutId = undefined;\n\n // Optionally scroll back to current active line when re-enabling auto-scroll\n if (this.activeLineIndices.length > 0) {\n this.scrollToActiveLine();\n }\n }, 2000);\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics) return [];\n const activeLines: number[] = [];\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n let effectiveEndTime = line.endtime;\n\n // Extend the \"active\" highlight window to abut the next line,\n // leaving a 500ms gap for breathing/scrolling\n if (i < this.lyrics.length - 1) {\n const nextLineStart = this.lyrics[i + 1].timestamp;\n const gapDuration = nextLineStart - line.endtime;\n\n // If the gap is large enough to trigger the breathing dots,\n // DO NOT extend the highlight. The text should dim when the dots appear.\n if (gapDuration < INSTRUMENTAL_THRESHOLD_MS) {\n if (effectiveEndTime < nextLineStart) {\n effectiveEndTime = Math.max(effectiveEndTime, nextLineStart - 500);\n }\n }\n }\n\n if (time >= line.timestamp && time <= effectiveEndTime) {\n activeLines.push(i);\n }\n }\n return activeLines;\n }\n\n private findInstrumentalGapAt(\n time: number,\n ): { insertBeforeIndex: number; gapStart: number; gapEnd: number } | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // Start-of-song gap: from 0 to first line timestamp\n const first = this.lyrics[0];\n if (time >= 0 && time < first.timestamp) {\n const gapStart = 0;\n const gapEnd = first.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: 0, gapStart, gapEnd };\n }\n return null;\n }\n\n // Find consecutive pair (i, i+1) that bounds the current time\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (time > gapStart && time < gapEnd) {\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: i + 1, gapStart, gapEnd };\n }\n return null;\n }\n }\n\n return null;\n }\n\n /**\n * Find ALL instrumental gaps in the song, regardless of current time.\n * Used by the template to always render gap elements in the DOM.\n */\n private findAllInstrumentalGaps(): Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const gaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Start-of-song gap\n const first = this.lyrics[0];\n if (first.timestamp >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: 0, gapStart: 0, gapEnd: first.timestamp });\n }\n\n // Inter-line gaps\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: i + 1, gapStart, gapEnd });\n }\n }\n\n return gaps;\n }\n\n private startAnimationFromTime(time: number) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(time);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n\n if (activeLineIndices.length === 0) {\n return;\n }\n\n // Set up animations for each active line\n for (const lineIndex of activeLineIndices) {\n const line = this.lyrics[lineIndex];\n\n // Find main word based on the reset time\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (time >= line.text[i].timestamp && time <= line.text[i].endtime) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIndex, mainWordIdx);\n\n // Find background word based on the reset time\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n time >= line.backgroundText[i].timestamp &&\n time <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIndex, backWordIdx);\n }\n\n // With the state correctly set, configure the animation parameters\n this.setupAnimations();\n\n // Start the animation loop\n if (this.interpolate) {\n this.animateProgress();\n }\n }\n\n private updateActiveLineAndWords() {\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(this.currentTime);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n\n for (const lineIdx of activeLineIndices) {\n const line = this.lyrics[lineIdx];\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (\n this.currentTime >= line.text[i].timestamp &&\n this.currentTime <= line.text[i].endtime\n ) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIdx, mainWordIdx);\n\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n this.currentTime >= line.backgroundText[i].timestamp &&\n this.currentTime <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIdx, backWordIdx);\n }\n }\n\n private setupAnimations() {\n if (this.activeLineIndices.length === 0 || !this.lyrics) {\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n return;\n }\n\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordIndex = this.activeMainWordIndices.get(lineIndex) ?? -1;\n const backgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n\n // Main word animation\n if (mainWordIndex !== -1) {\n const word = line.text[mainWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.mainWordAnimations.set(lineIndex, { startTime: 0, duration: 0 });\n }\n\n // Background word animation\n if (backgroundWordIndex !== -1 && line.backgroundText) {\n const word = line.backgroundText[backgroundWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n }\n\n private handleLineClick(line: LyricsLine) {\n // Reset all syllables to prevent highlighting conflicts during seek\n if (this.lyricsContainer) {\n const allLines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n allLines.forEach(lineEl => {\n AmLyrics.resetSyllables(lineEl as HTMLElement);\n // Remove scroll-animate class and properties to stop any scroll animations\n lineEl.classList.remove('scroll-animate');\n (lineEl as HTMLElement).style.removeProperty('--scroll-delta');\n (lineEl as HTMLElement).style.removeProperty('--lyrics-line-delay');\n });\n // Ensure container state is clean\n this.lyricsContainer.classList.remove('wheel-scrolling');\n }\n\n // Cancel any ongoing scroll animations\n if (this.scrollAnimationState) {\n this.scrollAnimationState.isAnimating = false;\n this.scrollAnimationState.pendingUpdate = null;\n }\n\n // Clear scroll animation timeouts\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n // Also clear user scroll timeout to prevent stale scrollToActiveLine\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n this.isUserScrolling = false;\n\n // Reset active line tracking to prevent scroll fighting\n this.currentPrimaryActiveLine = null;\n this.lastPrimaryActiveLine = null;\n this.activeLineIds.clear();\n this.animatingLines = [];\n\n // Find the clicked line element and scroll to it with forceScroll (like YouLyPlus)\n // Timestamps are already in milliseconds — match the data-start-time attribute directly\n const clickedLineElement = this.lyricsContainer?.querySelector(\n `.lyrics-line[data-start-time=\"${line.text[0]?.timestamp || 0}\"]`,\n ) as HTMLElement | null;\n\n if (clickedLineElement && this.lyricsContainer) {\n // Update active line reference to the clicked line\n this.currentPrimaryActiveLine = clickedLineElement;\n\n // Reset currentScrollOffset to actual scroll position to prevent stale delta\n this.currentScrollOffset = -this.lyricsContainer.scrollTop;\n\n // Set click-seek cooldown to prevent updated() scroll from fighting\n this.isClickSeeking = true;\n if (this.clickSeekTimeout) clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = setTimeout(() => {\n this.isClickSeeking = false;\n }, 800);\n\n this.scrollToActiveLineYouLy(clickedLineElement, true);\n }\n\n const event = new CustomEvent('line-click', {\n detail: {\n timestamp: line.timestamp,\n },\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private static getBackgroundTextPlacement(\n line: LyricsLine,\n ): 'before' | 'after' {\n if (\n !line.backgroundText ||\n line.backgroundText.length === 0 ||\n line.text.length === 0\n ) {\n return 'after'; // Default to after if no comparison is possible\n }\n\n // Compare the start times of the first syllables\n const mainTextStartTime = line.text[0].timestamp;\n const backgroundTextStartTime = line.backgroundText[0].timestamp;\n\n return backgroundTextStartTime < mainTextStartTime ? 'before' : 'after';\n }\n\n private scrollToActiveLine() {\n if (!this.lyricsContainer || this.activeLineIndices.length === 0) {\n return;\n }\n\n // Scroll to the first active line\n const firstActiveLineIndex = Math.min(...this.activeLineIndices);\n const activeLineElement = this.lyricsContainer.querySelector(\n `.lyrics-line:nth-child(${firstActiveLineIndex + 1})`,\n ) as HTMLElement;\n\n if (activeLineElement) {\n const containerHeight = this.lyricsContainer.clientHeight;\n const lineTop = activeLineElement.offsetTop;\n const lineHeight = activeLineElement.clientHeight;\n\n // Check if the line has background text placed before the main text\n const hasBackgroundBefore = activeLineElement.querySelector(\n '.background-text.before',\n );\n\n // Calculate the offset to center the main text content, accounting for background text placement\n let offsetAdjustment = 0;\n if (hasBackgroundBefore) {\n const backgroundElement = hasBackgroundBefore as HTMLElement;\n offsetAdjustment = backgroundElement.clientHeight / 2; // Adjust to focus on main content\n }\n\n const top =\n lineTop - containerHeight / 2 + lineHeight / 2 - offsetAdjustment;\n\n // Use requestAnimationFrame for smoother iOS performance\n requestAnimationFrame(() => {\n this.isProgrammaticScroll = true;\n this.lyricsContainer?.scrollTo({ top, behavior: 'smooth' });\n // Reset the flag after a short delay to allow the scroll to complete\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n });\n }\n }\n\n private scrollToInstrumental(insertBeforeIndex: number) {\n if (!this.lyricsContainer) return;\n\n // Find the gap element by ID instead of nth-child\n const gapTarget = this.lyricsContainer.querySelector(\n `#gap-${insertBeforeIndex}`,\n ) as HTMLElement | null;\n\n if (gapTarget) {\n // Use same scroll position as lyrics (scroll-padding-top from top), not center\n // This matches YouLyPlus behavior where gaps don't scroll to a different position\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - gapTarget.offsetTop;\n\n this.isProgrammaticScroll = true;\n this.animateScrollYouLy(targetTranslateY, false);\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 250);\n }\n }\n\n // === YouLyPlus-style Animation Methods ===\n\n /**\n * Get the scroll padding top value from CSS variable\n */\n private getScrollPaddingTop(): number {\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n if (paddingTopValue.includes('%')) {\n return (\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100)\n );\n }\n return parseFloat(paddingTopValue) || 0;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n */\n private animateScrollYouLy(newTranslateY: number, forceScroll = false): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n\n if (!this.scrollAnimationState) {\n this.scrollAnimationState = {\n isAnimating: false,\n pendingUpdate: null,\n };\n this.animatingLines = [];\n }\n\n const animState = this.scrollAnimationState;\n\n if (animState.isAnimating && !forceScroll) {\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n const { animatingLines } = this;\n\n const targetTop = Math.max(0, -newTranslateY);\n const appliedTranslateY = -targetTop;\n const prevOffset = -parent.scrollTop;\n const delta = prevOffset - appliedTranslateY;\n this.currentScrollOffset = appliedTranslateY;\n\n // Skip animation if already at the target position (e.g., first lines at top)\n if (Math.abs(parent.scrollTop - targetTop) < 1 && Math.abs(delta) < 1) {\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n if (forceScroll) {\n // Clean up any lingering scroll animations before smooth scroll\n for (const line of animatingLines) {\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n line.style.removeProperty('--scroll-duration');\n }\n animatingLines.length = 0;\n parent.scrollTo({ top: targetTop, behavior: 'smooth' });\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n // --- Step 1: Remove scroll-animate from ALL previously animating lines ---\n for (const line of animatingLines) {\n line.classList.remove('scroll-animate');\n }\n animatingLines.length = 0;\n\n // Get lines for staggered animation\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n const lineArray = Array.from(lineElements) as HTMLElement[];\n\n const referenceLine =\n this.currentPrimaryActiveLine ||\n this.lastPrimaryActiveLine ||\n lineArray[0];\n\n if (!referenceLine) return;\n\n const referenceIndex = lineArray.indexOf(referenceLine);\n if (referenceIndex === -1) return;\n\n const delayIncrement = SCROLL_DELAY_INCREMENT_MS;\n const lookBehind = 10;\n const lookAhead = 15;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookBehind);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n let delayCounter = 0;\n\n // --- Step 2: Set CSS custom properties on target lines ---\n const newAnimatingLines: HTMLElement[] = [];\n\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n if (i >= referenceIndex) delayCounter += 1;\n const delay =\n i >= referenceIndex ? (delayCounter - 1) * delayIncrement : 0;\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty(\n '--scroll-duration',\n `${SCROLL_ANIMATION_DURATION_MS}ms`,\n );\n\n newAnimatingLines.push(line);\n\n const lineDuration = SCROLL_ANIMATION_DURATION_MS + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n\n // --- Step 3: Force reflow so the browser sees the class removal ---\n // This guarantees the animation restarts reliably, unlike the\n // CSS-variable-toggle approach which doesn't restart in all browsers.\n parent.getBoundingClientRect(); // force synchronous reflow\n\n // --- Step 4: Re-add scroll-animate class to start fresh animations ---\n for (const line of newAnimatingLines) {\n line.classList.add('scroll-animate');\n animatingLines.push(line);\n }\n\n animState.isAnimating = true;\n const BASE_DURATION = SCROLL_ANIMATION_DURATION_MS;\n\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false);\n }\n }, BASE_DURATION);\n\n this.scrollAnimationTimeout = setTimeout(() => {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n line.style.removeProperty('--scroll-duration');\n }\n animatingLines.length = 0;\n this.scrollAnimationTimeout = undefined;\n }, maxAnimationDuration + 50);\n\n parent.scrollTo({ top: targetTop, behavior: 'instant' });\n }\n\n /**\n * Update position classes for YouLyPlus-style opacity/blur gradients\n */\n private updatePositionClasses(lineToScroll: HTMLElement): void {\n if (!this.lyricsContainer) return;\n\n const positionClasses = [\n 'lyrics-activest',\n 'post-active-line',\n 'next-active-line',\n 'prev-1',\n 'prev-2',\n 'prev-3',\n 'prev-4',\n 'next-1',\n 'next-2',\n 'next-3',\n 'next-4',\n ];\n\n // Remove old position classes\n this.lyricsContainer\n .querySelectorAll(`.${positionClasses.join(', .')}`)\n .forEach(el => el.classList.remove(...positionClasses));\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n\n const lineElements = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n\n for (\n let i = Math.max(0, scrollLineIndex - 4);\n i <= Math.min(lineElements.length - 1, scrollLineIndex + 4);\n i += 1\n ) {\n const position = i - scrollLineIndex;\n if (position !== 0) {\n const element = lineElements[i];\n if (position === -1) element.classList.add('post-active-line');\n else if (position === 1) element.classList.add('next-active-line');\n else if (position < 0)\n element.classList.add(`prev-${Math.abs(position)}`);\n else element.classList.add(`next-${position}`);\n }\n }\n }\n\n /**\n * Scroll to active line with YouLyPlus-style animation\n */\n private scrollToActiveLineYouLy(\n activeLine: HTMLElement,\n forceScroll = false,\n ): void {\n if (!activeLine || !this.lyricsContainer) return;\n\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - activeLine.offsetTop;\n\n const scrollContainerTop = this.lyricsContainer.getBoundingClientRect().top;\n\n // Skip if already at target position\n if (\n !forceScroll &&\n Math.abs(\n activeLine.getBoundingClientRect().top -\n scrollContainerTop -\n paddingTop,\n ) < 1\n ) {\n return;\n }\n\n // Skip scroll if near the bottom of content (prevents footer jitter)\n if (!forceScroll) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n if (atBottom) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.isUserScrolling = false;\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, SCROLL_ANIMATION_DURATION_MS + 160);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(syllable: HTMLElement): void {\n if (syllable.classList.contains('highlight')) return;\n\n const { classList } = syllable;\n const isRTL = classList.contains('rtl-text');\n const charSpans = Array.from(\n syllable.querySelectorAll('span.char'),\n ) as HTMLElement[];\n const wordElement = syllable.parentElement?.parentElement; // syllable-wrap -> word\n const allWordCharSpans = wordElement\n ? (Array.from(wordElement.querySelectorAll('span.char')) as HTMLElement[])\n : [];\n const isGrowable = wordElement?.classList.contains('growable');\n const isFirstSyllable =\n syllable.getAttribute('data-syllable-index') === '0';\n const isFirstInContainer = isFirstSyllable; // Simplified\n const isGap = syllable.closest('.lyrics-gap') !== null;\n\n // Get duration from data attribute\n const syllableDurationMs =\n parseFloat(syllable.getAttribute('data-duration') || '0') || 300;\n const wordDurationMs =\n parseFloat(\n syllable.getAttribute('data-word-duration') ||\n syllable.getAttribute('data-duration') ||\n '0',\n ) || syllableDurationMs;\n\n // Use a Map to collect animations like YouLyPlus\n const charAnimationsMap = new Map<HTMLElement, string>();\n const styleUpdates: Array<{\n element: HTMLElement;\n property: string;\n value: string;\n }> = [];\n\n // Step 1 & 2: Apply animations\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n // Glow AND wipe applied to ALL characters simultaneously from the first syllable\n // This prevents CSS animation restarts because the `animation` property is set once.\n\n const firstSyllableStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n\n allWordCharSpans.forEach((span, charIndexInWord) => {\n const horizontalOffset = parseFloat(\n span.dataset.horizontalOffset || '0',\n );\n\n const maxScale = span.dataset.maxScale || '1.1';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n const animationParts: string[] = [];\n\n const parentSyllable = span.closest('.lyrics-syllable');\n if (parentSyllable) {\n const parentDuration = parseFloat(\n parentSyllable.getAttribute('data-duration') || '0',\n );\n const parentStartTime = parseFloat(\n parentSyllable.getAttribute('data-start-time') || '0',\n );\n\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const relativeStartOffset = Math.max(\n 0,\n parentStartTime - firstSyllableStartTime,\n );\n const wipeDelay = relativeStartOffset + parentDuration * startPct;\n const wipeDuration = parentDuration * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndexInWord === 0;\n let charWipeAnimation = 'wipe';\n if (useStartAnimation)\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n else charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n\n // Blend word and syllable durations to let the gradient flow smoothly\n // while still responding to syllable pacing (no strict exactness, just natural flow)\n const growDelay = wipeDelay;\n const growDurationMs = Math.max(\n 600,\n wordDurationMs * 0.8 + parentDuration * 1.5,\n );\n\n animationParts.push(\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n }\n\n charAnimationsMap.set(span, animationParts.join(', '));\n\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${horizontalOffset}`,\n });\n styleUpdates.push({\n element: span,\n property: '--max-scale',\n value: maxScale,\n });\n styleUpdates.push({\n element: span,\n property: '--shadow-intensity',\n value: shadowIntensity,\n });\n styleUpdates.push({\n element: span,\n property: '--translate-y-peak',\n value: `${translateYPeak}`,\n });\n });\n } else if (isGrowable && !isFirstSyllable && charSpans.length > 0) {\n // For subsequent syllables of a growable word:\n // If they already have `grow-dynamic`, it means the first syllable correctly took care of BOTH grow and wipe!\n // Otherwise, they scrubbed directly into this syllable, so let's at least do the wipe.\n charSpans.forEach(span => {\n const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n if (existingAnimation.includes('grow-dynamic')) return;\n\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n\n if (wipeDuration > 0) {\n charAnimationsMap.set(\n span,\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n });\n } else if (charSpans.length > 0) {\n // Per-character wipe for non-growable words (matching YouLyPlus)\n charSpans.forEach((span, charIndex) => {\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndex === 0;\n let charWipeAnimation = 'wipe';\n if (useStartAnimation) {\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n if (wipeDuration > 0) {\n charAnimationsMap.set(\n span,\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n });\n } else {\n // Syllable-level wipe for regular (non-growable) words without chars\n const wipeRatio = parseFloat(\n syllable.getAttribute('data-wipe-ratio') || '1',\n );\n const visualDuration = syllableDurationMs * wipeRatio;\n\n let wipeAnimation = 'wipe';\n if (isFirstInContainer) {\n wipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n wipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n if (syllable.classList.contains('line-synced')) return;\n\n const currentWipeAnimation = isGap ? 'fade-gap' : wipeAnimation;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = `${currentWipeAnimation} ${visualDuration}ms ${isGap ? 'ease-out' : 'linear'} forwards`;\n }\n\n // --- WRITE PHASE ---\n classList.remove('pre-highlight');\n classList.add('highlight');\n\n for (const [span, animationString] of charAnimationsMap.entries()) {\n span.style.animation = animationString;\n }\n\n // Apply style updates\n for (const update of styleUpdates) {\n update.element.style.setProperty(update.property, update.value);\n }\n }\n\n /**\n * Reset syllable animation state\n */\n private static resetSyllable(syllable: HTMLElement): void {\n if (!syllable) return;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n // Force background to secondary and disable transition to prevent lingering white\n // eslint-disable-next-line no-param-reassign\n syllable.style.transition = 'none';\n // eslint-disable-next-line no-param-reassign\n syllable.style.backgroundColor = 'var(--lyplus-text-secondary)';\n\n // Reset character animations — disable transition so finished chars don't slowly fade\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.animation = '';\n el.style.transition = 'none';\n el.style.backgroundColor = 'var(--lyplus-text-secondary)';\n });\n\n // Immediately remove all state classes\n syllable.classList.remove(\n 'highlight',\n 'finished',\n 'pre-highlight',\n 'cleanup',\n );\n\n // In next frame, clear inline styles so CSS transitions can resume for future use\n requestAnimationFrame(() => {\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n });\n });\n }\n\n /**\n * Reset all syllables in a line\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n Array.from(line.getElementsByClassName('lyrics-syllable')).forEach(\n syllable => AmLyrics.resetSyllable(syllable as HTMLElement),\n );\n }\n\n /**\n * Update syllables based on current time\n * Uses DOM caching and pre-highlight reset for smooth transitions\n */\n private static updateSyllablesForLine(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n // DOM cache: avoid querySelectorAll on every frame\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = syllables;\n }\n\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n const startTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n const endTime = parseFloat(syllable.getAttribute('data-end-time') || '0');\n\n if (startTime) {\n const { classList } = syllable;\n const hasHighlight = classList.contains('highlight');\n const hasFinished = classList.contains('finished');\n const hasPreHighlight = classList.contains('pre-highlight');\n const hasActiveState = hasHighlight || hasFinished || hasPreHighlight;\n\n // Early exit check\n if (!(currentTimeMs < startTime - 1000 && !hasActiveState)) {\n let preHighlightReset = false;\n\n // Pre-highlight reset logic\n if (hasPreHighlight && i > 0) {\n const prevSyllable = syllables[i - 1];\n if (!prevSyllable.classList.contains('highlight')) {\n classList.remove('pre-highlight');\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n syllable.style.animation = '';\n preHighlightReset = true;\n }\n }\n\n if (!preHighlightReset) {\n if (currentTimeMs >= startTime && currentTimeMs <= endTime) {\n // Currently active\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n if (hasFinished) {\n classList.remove('finished');\n }\n } else if (currentTimeMs > endTime) {\n // Finished\n if (!hasFinished) {\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n classList.add('finished');\n }\n } else if (hasHighlight || hasFinished) {\n // Not yet started\n AmLyrics.resetSyllable(syllable);\n }\n }\n }\n }\n }\n }\n\n private animateProgress() {\n const now = performance.now();\n let running = false;\n\n if (!this.lyrics || this.activeLineIndices.length === 0) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n return;\n }\n\n // Process each active line\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordAnimation = this.mainWordAnimations.get(lineIndex);\n\n // Main text animation\n if (mainWordAnimation && mainWordAnimation.duration > 0) {\n const elapsed = now - mainWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(1, elapsed / mainWordAnimation.duration);\n this.mainWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentMainWordIndex =\n this.activeMainWordIndices.get(lineIndex) ?? -1;\n const nextWordIndex = currentMainWordIndex + 1;\n if (\n currentMainWordIndex !== -1 &&\n nextWordIndex < line.text.length\n ) {\n const currentWord = line.text[currentMainWordIndex];\n const nextWord = line.text[nextWordIndex];\n\n this.activeMainWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.mainWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.mainWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n\n // Background text animation\n const backgroundWordAnimation =\n this.backgroundWordAnimations.get(lineIndex);\n if (backgroundWordAnimation && backgroundWordAnimation.duration > 0) {\n const elapsed = now - backgroundWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(\n 1,\n elapsed / backgroundWordAnimation.duration,\n );\n this.backgroundWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentBackgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n if (\n line.backgroundText &&\n currentBackgroundWordIndex !== -1 &&\n currentBackgroundWordIndex < line.backgroundText.length - 1\n ) {\n const nextWordIndex = currentBackgroundWordIndex + 1;\n const currentWord =\n line.backgroundText[currentBackgroundWordIndex];\n const nextWord = line.backgroundText[nextWordIndex];\n\n this.activeBackgroundWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.backgroundWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n }\n\n if (running) {\n this.animationFrameId = requestAnimationFrame(this._boundAnimateProgress);\n } else if (this.animationFrameId) {\n // Stop animation if no words are running\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n\n private generateLRC(): string {\n if (!this.lyrics) return '';\n let lrc = '';\n\n // Add metadata if available\n if (this.songTitle) lrc += `[ti:${this.songTitle}]\\n`;\n if (this.songArtist) lrc += `[ar:${this.songArtist}]\\n`;\n if (this.songAlbum) lrc += `[al:${this.songAlbum}]\\n`;\n if (this.lyricsSource) lrc += `[re:${this.lyricsSource}]\\n`;\n\n for (const line of this.lyrics) {\n if (line.text && line.text.length > 0) {\n const timestamp = AmLyrics.formatTimestampLRC(line.timestamp);\n // Construct line text from syllables\n const lineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n lrc += `[${timestamp}]${lineText}\\n`;\n }\n }\n\n return lrc;\n }\n\n private generateTTML(): string {\n if (!this.lyrics) return '';\n\n // Basic TTML structure\n let ttml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n ttml +=\n '<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:itunes=\"http://music.apple.com/lyrics\">\\n';\n ttml += ' <body>\\n';\n\n let currentPart: string | undefined;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const part = line.songPart;\n\n // If part changed (or first line), start new div\n if (part !== currentPart || i === 0) {\n if (i > 0) {\n ttml += ' </div>\\n';\n }\n currentPart = part;\n if (currentPart) {\n ttml += ` <div itunes:song-part=\"${currentPart}\">\\n`;\n } else {\n ttml += ' <div>\\n';\n }\n }\n\n // For TTML, we can represent syllables as spans if word-synced\n const begin = AmLyrics.formatTimestampTTML(line.timestamp);\n const end = AmLyrics.formatTimestampTTML(line.endtime);\n\n ttml += ` <p begin=\"${begin}\" end=\"${end}\">\\n`;\n\n for (const word of line.text) {\n const wBegin = AmLyrics.formatTimestampTTML(word.timestamp);\n const wEnd = AmLyrics.formatTimestampTTML(word.endtime);\n // Escape special characters in text\n const text = word.text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n ttml += ` <span begin=\"${wBegin}\" end=\"${wEnd}\">${text}</span>\\n`;\n }\n\n ttml += ' </p>\\n';\n }\n\n if (this.lyrics.length > 0) {\n ttml += ' </div>\\n';\n }\n\n ttml += ' </body>\\n';\n ttml += '</tt>';\n\n return ttml;\n }\n\n private static formatTimestampLRC(ms: number): string {\n const totalSeconds = ms / 1000;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const hundredths = Math.floor((ms % 1000) / 10);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${pad(minutes)}:${pad(seconds)}.${pad(hundredths)}`;\n }\n\n private static formatTimestampTTML(ms: number): string {\n // TTML standard format: HH:MM:SS.mmm\n const totalSeconds = ms / 1000;\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const milliseconds = Math.floor(ms % 1000);\n\n const pad = (n: number, width = 2) => n.toString().padStart(width, '0');\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.${pad(milliseconds, 3)}`;\n }\n\n private downloadLyrics() {\n if (!this.lyrics || this.lyrics.length === 0) return;\n\n // Determine format: TTML if ANY line is word-synced, else LRC\n const isWordSynced = this.lyrics.some(l => l.isWordSynced !== false);\n\n let content = '';\n let extension = this.downloadFormat;\n if (extension === 'auto') {\n extension = isWordSynced ? 'ttml' : 'lrc';\n }\n let mimeType = '';\n\n if (extension === 'ttml') {\n content = this.generateTTML();\n mimeType = 'application/xml';\n } else {\n content = this.generateLRC();\n mimeType = 'text/plain';\n }\n\n if (!content) return;\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n\n const filename = this.songTitle\n ? `${this.songTitle}${this.songArtist ? ` - ${this.songArtist}` : ''}.${extension}`\n : `lyrics.${extension}`;\n\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n render() {\n if (this.fontFamily) {\n this.style.fontFamily = this.fontFamily;\n }\n\n // Set both old internal CSS variables (for backward compatibility)\n // and new public CSS variables (which take precedence)\n this.style.setProperty(\n '--hover-background-color',\n this.hoverBackgroundColor,\n );\n this.style.setProperty('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const isUnsynced =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics.every(l => l.timestamp === 0 && l.endtime === 0)\n : false;\n\n const renderContent = () => {\n if (this.isLoading) {\n // Render stylized skeleton lines\n return html`\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n `;\n }\n if (!this.lyrics || this.lyrics.length === 0) {\n return html`<div class=\"no-lyrics\">No lyrics found.</div>`;\n }\n\n // Build a lookup map of ALL gaps so they are always in the DOM\n const allGaps = this.findAllInstrumentalGaps();\n const gapByIndex = new Map(\n allGaps.map(g => [g.insertBeforeIndex, g] as const),\n );\n\n return this.lyrics.map((line, lineIndex) => {\n const lineId = `lyrics-line-${lineIndex}`;\n\n // Calculate line timing\n const lineStartTime = line.text[0]?.timestamp || 0;\n const lineEndTime = line.text[line.text.length - 1]?.endtime || 0;\n\n // Always render background vocals in the DOM so the syllable cache\n // includes them and the wipe effect applies correctly.\n const hasBackground =\n line.backgroundText && line.backgroundText.length > 0;\n\n // Create background vocals container (with romanization support)\n const backgroundVocalElement = hasBackground\n ? html`<p class=\"background-vocal-container\">\n ${line.backgroundText!.map((syllable, syllableIndex) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n\n const bgRomanizedText =\n this.showRomanization &&\n syllable.romanizedText &&\n syllable.romanizedText.trim() !== syllable.text.trim()\n ? html`<span\n class=\"lyrics-syllable transliteration ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n return html`<span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"${syllableIndex}\"\n >${syllable.text}</span\n >\n ${bgRomanizedText}\n </span>\n </span>`;\n })}\n </p>`\n : '';\n\n // Background vocals share the same line.translation and line.romanizedText\n // as the main vocal, so we intentionally do NOT render a separate\n // translation/romanization block for background — it would just duplicate\n // the main line's text.\n\n // Group syllables by word: when part=true, append to previous word group\n const wordGroups: Syllable[][] = [];\n for (const syllable of line.text) {\n if (syllable.part && wordGroups.length > 0) {\n // Continuation of previous word\n wordGroups[wordGroups.length - 1].push(syllable);\n } else {\n // New word\n wordGroups.push([syllable]);\n }\n }\n\n // Pre-compute isGrowable per \"visual word\": adjacent groups whose text\n // doesn't end with whitespace form one visual word (e.g. \"a\"+\"live\" = \"alive\").\n // We evaluate growable on the combined text/duration, then propagate\n // the result to each individual group so it renders through the\n // single-syllable path (which supports char-level glow).\n const groupGrowable: boolean[] = new Array(wordGroups.length).fill(\n false,\n );\n const groupGlowing: boolean[] = new Array(wordGroups.length).fill(\n false,\n );\n // Visual word info for growable char-level glow:\n // Each group stores the combined visual word's text, duration, and\n // the char offset of this group within the visual word.\n const vwFullText: string[] = new Array(wordGroups.length).fill('');\n const vwFullDuration: number[] = new Array(wordGroups.length).fill(0);\n const vwCharOffset: number[] = new Array(wordGroups.length).fill(0);\n const vwStartMs: number[] = new Array(wordGroups.length).fill(0);\n const vwEndMs: number[] = new Array(wordGroups.length).fill(0);\n {\n let vwStart = 0;\n while (vwStart < wordGroups.length) {\n let vwEnd = vwStart;\n while (vwEnd < wordGroups.length - 1) {\n const grp = wordGroups[vwEnd];\n const lastText = grp[grp.length - 1].text;\n if (/\\s$/.test(lastText)) break;\n vwEnd += 1;\n }\n\n // Compute combined properties for this visual word\n const combinedText = wordGroups\n .slice(vwStart, vwEnd + 1)\n .flatMap(g => g.map(s => s.text))\n .join('')\n .trim();\n const combinedStart = wordGroups[vwStart][0].timestamp;\n const lastGrp = wordGroups[vwEnd];\n const combinedEnd = lastGrp[lastGrp.length - 1].endtime;\n const combinedDuration = combinedEnd - combinedStart;\n\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n combinedText,\n );\n const isRTL =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u0590-\\u05FF]/.test(\n combinedText,\n );\n const hasHyphen = combinedText.includes('-');\n\n const wordLen = combinedText.length;\n let isGrowableVW =\n !isCJK && !isRTL && !hasHyphen && wordLen > 0 && wordLen <= 12;\n if (isGrowableVW) {\n if (wordLen < 3) {\n isGrowableVW =\n combinedDuration >= 1110 && combinedDuration >= wordLen * 550;\n } else {\n isGrowableVW =\n combinedDuration >= 900 && combinedDuration >= wordLen * 300;\n }\n }\n\n // Glow requirement (more strict)\n const isGlowingVW =\n isGrowableVW &&\n combinedDuration >= 1200 &&\n combinedDuration >= combinedText.length * 300;\n\n let charOff = 0;\n for (let gi = vwStart; gi <= vwEnd; gi += 1) {\n groupGrowable[gi] = isGrowableVW;\n groupGlowing[gi] = isGlowingVW;\n vwFullText[gi] = combinedText;\n vwFullDuration[gi] = combinedDuration;\n vwCharOffset[gi] = charOff;\n vwStartMs[gi] = combinedStart;\n vwEndMs[gi] = combinedEnd;\n const grpText = wordGroups[gi].map(s => s.text).join('');\n charOff += grpText.replace(/\\s/g, '').length;\n }\n\n vwStart = vwEnd + 1;\n }\n }\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p class=\"main-vocal-container\">\n ${wordGroups.map((group, groupIdx) => {\n const isGrowable = groupGrowable[groupIdx];\n const isGlowing = groupGlowing[groupIdx];\n const groupLineSynced = group.some(s => s.lineSynced);\n\n const wordText = isGrowable ? vwFullText[groupIdx] : '';\n const wordDuration = isGrowable ? vwFullDuration[groupIdx] : 0;\n const wordNumChars = wordText.length;\n const groupCharOffset = isGrowable ? vwCharOffset[groupIdx] : 0;\n\n let sylCharAccumulator = 0;\n\n return html`<span\n class=\"lyrics-word ${isGrowable ? 'growable' : ''} ${isGlowing\n ? 'glowing'\n : ''} ${group.length > 1 ? 'allow-break' : ''}\"\n >\n ${group.map((syllable, sylIdx) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n const text = syllable.text || '';\n\n const romanizedText =\n this.showRomanization &&\n syllable.romanizedText &&\n syllable.romanizedText.trim() !== syllable.text.trim()\n ? html`<span\n class=\"lyrics-syllable transliteration ${groupLineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n let syllableContent: any = text;\n\n if (isGrowable) {\n let charIndexInsideSyllable = 0;\n const numCharsInSyllable =\n text.replace(/\\s/g, '').length || 1;\n\n syllableContent = html`${text.split('').map(char => {\n if (char === ' ') return ' ';\n\n const charIndexInsideWord =\n groupCharOffset + sylCharAccumulator;\n const charStartPercentVal =\n charIndexInsideSyllable / numCharsInSyllable;\n\n sylCharAccumulator += 1;\n charIndexInsideSyllable += 1;\n\n const minDuration = 400;\n const maxDuration = 3000;\n const easingPower = 3;\n const progress = Math.min(\n 1,\n Math.max(\n 0,\n (wordDuration - minDuration) /\n (maxDuration - minDuration),\n ),\n );\n const easedProgress = progress ** easingPower;\n\n const isLongWord = wordNumChars > 5;\n const isShortDuration = wordDuration < 1200;\n let maxDecayRate = 0;\n if (isLongWord || isShortDuration) {\n let decayStrength = 0;\n if (isLongWord)\n decayStrength +=\n Math.min((wordNumChars - 5) / 5, 1.0) * 0.4;\n if (isShortDuration && wordNumChars > 3)\n decayStrength +=\n Math.max(0, 1.0 - (wordDuration - 800) / 400) * 0.3;\n else if (isShortDuration && wordNumChars <= 3)\n decayStrength +=\n Math.max(0, 1.0 - (wordDuration - 800) / 400) * 0.1;\n maxDecayRate = Math.min(decayStrength, 0.7);\n }\n\n const positionInWord =\n wordNumChars > 1\n ? charIndexInsideWord / (wordNumChars - 1)\n : 0;\n const decayFactor = 1.0 - positionInWord * maxDecayRate;\n const charProgress = easedProgress * decayFactor;\n\n const baseGrowth = wordNumChars <= 3 ? 0.05 : 0.04;\n const charMaxScale = 1.0 + baseGrowth + charProgress * 0.08;\n const glowDurFactor = Math.min(1.1, wordDuration / 1500);\n let glowLenFactor = 1.0;\n if (wordNumChars <= 3) {\n glowLenFactor = 0.85;\n } else if (wordNumChars >= 6) {\n glowLenFactor = 1.1;\n }\n const glowIntensityScale = glowDurFactor * glowLenFactor;\n const charShadowIntensity = isGlowing\n ? (0.35 + charProgress * 0.45) * glowIntensityScale\n : 0;\n const normalizedGrowth = (charMaxScale - 1.0) / 0.1;\n const effectiveDuration =\n (wordDuration + durationMs * 2) / 3;\n const peakMultiplier = Math.min(\n 1,\n Math.max(0.3, effectiveDuration / 2000),\n );\n const charTranslateYPeak =\n -normalizedGrowth * (2 * peakMultiplier); // Further dampened lift peak\n\n const position = (charIndexInsideWord + 0.5) / wordNumChars;\n const horizontalOffset =\n (position - 0.5) * 2 * ((charMaxScale - 1.0) * 25);\n\n return html`<span\n class=\"char\"\n data-char-index=\"${charIndexInsideWord}\"\n data-syllable-char-index=\"${charIndexInsideWord}\"\n data-wipe-start=\"${charStartPercentVal.toFixed(4)}\"\n data-wipe-duration=\"${(1 / numCharsInSyllable).toFixed(\n 4,\n )}\"\n data-horizontal-offset=\"${horizontalOffset.toFixed(2)}\"\n data-max-scale=\"${charMaxScale.toFixed(3)}\"\n data-shadow-intensity=\"${charShadowIntensity.toFixed(3)}\"\n data-translate-y-peak=\"${charTranslateYPeak.toFixed(3)}\"\n >${char}</span\n >`;\n })}`;\n }\n\n return html`<span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${groupLineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-word-duration=\"${wordDuration}\"\n data-syllable-index=\"${sylIdx}\"\n data-wipe-ratio=\"1\"\n >${syllableContent}</span\n >\n ${romanizedText}\n </span>`;\n })}\n </span>`;\n })}\n </p>`;\n\n // Translation container (if enabled)\n // Hide translation if it matches the original line text\n const fullLineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n const translationElement =\n this.showTranslation &&\n line.translation &&\n line.translation.trim() !== fullLineText\n ? html`<div class=\"lyrics-translation-container\">\n ${line.translation}\n </div>`\n : '';\n\n // Line-synced romanization (fallback if no word-level romanization)\n // Hide if the romanized text matches the original line text\n const lineRomanizationElement =\n this.showRomanization &&\n line.romanizedText &&\n !line.text.some(s => s.romanizedText) &&\n line.romanizedText.trim() !== fullLineText\n ? html`<div class=\"lyrics-romanization-container\">\n ${line.romanizedText}\n </div>`\n : '';\n\n // Check for instrumental gap before this line\n let maybeInstrumentalBlock: unknown = null;\n const gapForLine = gapByIndex.get(lineIndex);\n if (gapForLine) {\n const gapDuration = gapForLine.gapEnd - gapForLine.gapStart;\n // Calculate dot timing for fill-up animation (3 dots)\n const dotDuration = gapDuration / 3;\n const gapLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n\n // Gap starts without 'active' — _onTimeChanged toggles it imperatively\n maybeInstrumentalBlock = html`<div\n id=\"gap-${lineIndex}\"\n class=\"lyrics-line lyrics-gap\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n style=\"--gap-pulse-duration: ${GAP_PULSE_DURATION_MS}ms; --gap-loop-delay: -${gapLoopDelay}ms; --gap-exit-duration: ${GAP_EXIT_LEAD_MS}ms; --gap-exit-scale: ${GAP_MIN_SCALE};\"\n >\n <div class=\"lyrics-line-container\">\n <p class=\"main-vocal-container\">\n <span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"0\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"1\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"2\"\n ></span>\n </span>\n </span>\n </p>\n </div>\n </div>`;\n }\n\n return html`\n ${maybeInstrumentalBlock}\n <div\n id=\"${lineId}\"\n class=\"lyrics-line ${line.alignment === 'end'\n ? 'singer-right'\n : 'singer-left'}\"\n data-start-time=\"${lineStartTime}\"\n data-end-time=\"${lineEndTime}\"\n @click=${() => this.handleLineClick(line)}\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.handleLineClick(line);\n }\n }}\n >\n <div class=\"lyrics-line-container\">\n ${mainVocalElement} ${backgroundVocalElement}\n ${translationElement} ${lineRomanizationElement}\n </div>\n </div>\n `;\n });\n };\n\n return html`\n <div\n class=\"lyrics-container ${isUnsynced\n ? 'is-unsynced'\n : 'blur-inactive-enabled'} ${this.isUserScrolling\n ? 'user-scrolling'\n : ''}\"\n >\n ${!this.isLoading && this.lyrics && this.lyrics.length > 0\n ? html`\n <div class=\"lyrics-header\">\n <div class=\"header-controls\">\n <button\n class=\"download-button ${this.showRomanization\n ? 'active'\n : ''}\"\n @click=${this.toggleRomanization}\n title=\"Toggle Romanization\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-speech-icon lucide-speech\"\n >\n <path\n d=\"M8.8 20v-4.1l1.9.2a2.3 2.3 0 0 0 2.164-2.1V8.3A5.37 5.37 0 0 0 2 8.25c0 2.8.656 3.054 1 4.55a5.77 5.77 0 0 1 .029 2.758L2 20\"\n />\n <path d=\"M19.8 17.8a7.5 7.5 0 0 0 .003-10.603\" />\n <path d=\"M17 15a3.5 3.5 0 0 0-.025-4.975\" />\n </svg>\n </button>\n <button\n class=\"download-button ${this.showTranslation\n ? 'active'\n : ''}\"\n @click=${this.toggleTranslation}\n title=\"Toggle Translation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-languages-icon lucide-languages\"\n >\n <path d=\"m5 8 6 6\" />\n <path d=\"m4 14 6-6 2-3\" />\n <path d=\"M2 5h12\" />\n <path d=\"M7 2h1\" />\n <path d=\"m22 22-5-10-5 10\" />\n <path d=\"M14 18h6\" />\n </svg>\n </button>\n </div>\n <div class=\"download-controls\">\n <select\n class=\"format-select\"\n @change=${(e: Event) => {\n this.downloadFormat = (e.target as HTMLSelectElement)\n .value as 'lrc' | 'ttml';\n }}\n .value=${this.downloadFormat}\n @click=${(e: Event) => e.stopPropagation()}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"lrc\">LRC</option>\n <option value=\"ttml\">TTML</option>\n </select>\n <button\n class=\"download-button\"\n @click=${this.downloadLyrics}\n title=\"Download Lyrics\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-download-icon lucide-download\"\n >\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </svg>\n </button>\n </div>\n </div>\n `\n : ''}\n ${renderContent()}\n ${!this.isLoading\n ? html`\n <footer class=\"lyrics-footer\">\n <div class=\"footer-content\">\n <span\n class=\"source-info\"\n style=\"display: flex; align-items: center; gap: 8px;\"\n >\n Source: ${sourceLabel}\n ${(this.availableSources &&\n this.availableSources.length > 1) ||\n !this.hasFetchedAllProviders\n ? html`\n <button\n class=\"download-button\"\n title=\"Switch Lyrics Source\"\n style=\"font-family: inherit; font-size: 11px; padding: 2px 6px; border-radius: 4px; border: 1px solid rgba(255, 255, 255, 0.2); background: transparent; cursor: pointer; color: #aaa; display: inline-flex; align-items: center;\"\n @click=${this.switchSource}\n ?disabled=${this.isFetchingAlternatives}\n >\n <svg\n style=\"margin-right: 4px; ${this\n .isFetchingAlternatives\n ? 'animation: spin 1s linear infinite;'\n : ''}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"\n >\n ${this.isFetchingAlternatives\n ? svg`<path\n d=\"M21 12a9 9 0 1 1-6.219-8.56\"\n ></path>`\n : svg`<path d=\"m3 16 4 4 4-4\"></path\n ><path d=\"M7 20V4\"></path\n ><path d=\"m21 8-4-4-4 4\"></path\n ><path d=\"M17 4v16\"></path>`}\n </svg>\n ${this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch'}\n </button>\n `\n : ''}\n </span>\n <span class=\"version-info\">\n v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Star me on GitHub</a\n >\n </span>\n </div>\n </footer>\n `\n : ''}\n </div>\n `;\n }\n}\n","import { AmLyrics } from './AmLyrics.js';\n\nwindow.customElements.define('am-lyrics', AmLyrics);\n"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","LitElement","html","svg","css","property","state","query"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}