@uimaxbai/am-lyrics 1.5.0 → 1.5.2
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.
- package/dist/src/AmLyrics.d.ts.map +1 -1
- package/dist/src/am-lyrics.js +78 -25
- package/dist/src/am-lyrics.js.map +1 -1
- package/dist/src/react.js +78 -25
- package/dist/src/react.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
- package/src/AmLyrics.ts +116 -29
|
@@ -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.5.0';\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 SCROLL_ANIMATION_DURATION_MS = 350;\nconst GAP_PULSE_DURATION_MS = 4000;\nconst GAP_PULSE_CYCLE_MS = GAP_PULSE_DURATION_MS * 2;\nconst GAP_EXIT_LEAD_MS = 600;\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-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 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 songwriters?: string;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n songwriters?: string;\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 songwriters?: 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 --char-rise-y: calc(-0.035 * var(--lyplus-font-size-base));\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 overflow-anchor: none;\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 filter: 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 filter: none !important;\n }\n\n .lyrics-line.scroll-animate {\n /* Preserve the graceful fade duration; the keyframe handles the\n transform, so we only need to keep opacity/filter transitions\n alive without !important overriding the base rule. */\n transition:\n opacity 0.7s ease,\n filter 0.7s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms);\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 400ms);\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 /* Graceful 0.7 s fade so the line stays mostly bright while the\n 0.4 s scroll animation runs, then settles into the inactive state. */\n transition:\n opacity 0.7s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.7s ease;\n content-visibility: auto;\n contain: layout style;\n text-rendering: optimizeLegibility;\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: translateZ(0);\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: translateZ(0);\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 overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n line-height: 1.15;\n color: color-mix(in srgb, var(--lyplus-text-secondary) 80%, transparent);\n /* Fast exit (0.25 s) so bg vocals collapse quickly and feel snappy.\n The scroll takes ~0.4 s; finishing the collapse first prevents\n the container from trailing behind the motion. */\n transition:\n max-height 250ms cubic-bezier(0.41, 0, 0.12, 0.99),\n opacity 250ms cubic-bezier(0.41, 0, 0.12, 0.99);\n margin: 0;\n pointer-events: none;\n }\n\n .background-vocal-wrap {\n display: block;\n padding-top: 0;\n padding-bottom: 0;\n transition: padding-top 250ms cubic-bezier(0.41, 0, 0.12, 0.99);\n }\n\n .lyrics-line.singer-right .background-vocal-container,\n .lyrics-line.rtl-text .background-vocal-container {\n margin-left: auto;\n margin-right: 0;\n }\n\n /* Background vocals expand only when .bg-expanded is present.\n This is separate from .active so bg vocals can collapse immediately\n while .active stays to keep text white until the scroll passes. */\n .lyrics-line.bg-expanded .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n /* Slower entry (0.6 s) so bg vocals expand smoothly. */\n transition:\n max-height 0.6s ease,\n opacity 0.6s ease;\n will-change: max-height, opacity;\n }\n\n .lyrics-line.bg-expanded .background-vocal-wrap {\n padding-top: 0.26em;\n transition: padding-top 0.6s ease;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n }\n\n .lyrics-line.pre-active {\n opacity: 1;\n }\n\n .lyrics-line.persist-highlight {\n filter: none !important;\n opacity: 1;\n }\n\n .lyrics-line.persist-highlight .lyrics-syllable.finished,\n .lyrics-line.persist-highlight .lyrics-syllable.finished span.char {\n transition: none !important;\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 text-align: right !important;\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text .lyrics-line-container,\n .lyrics-line.rtl-text .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text .lyrics-romanization-container,\n .lyrics-line.rtl-text .lyrics-translation-container {\n text-align: right;\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 filter: none !important;\n opacity: 1 !important;\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):not(\n .persist-highlight\n ) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n /* Viewport Virtualization: Strip expensive filters and animations from\n offscreen lines. IntersectionObserver toggles this class. */\n .lyrics-line.far-line {\n filter: none !important;\n will-change: auto !important;\n animation: none !important;\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 ):not(.persist-highlight),\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 ):not(.persist-highlight),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap):not(\n .pre-active\n ):not(.persist-highlight) {\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 transition: none !important;\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 white-space: nowrap;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-word.char-rise {\n display: inline-block;\n vertical-align: baseline;\n white-space: nowrap;\n }\n\n .lyrics-word.char-rise.allow-break {\n display: inline;\n white-space: normal;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap.has-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 /* Unified transition: transform keeps its 1s glow decay, while\n background-color and color fade at 0.7s so everything dims\n together when the line becomes inactive. */\n transition:\n transform 1s ease,\n background-color 0.7s ease,\n color 0.7s ease;\n }\n\n .lyrics-syllable.finished.has-chars {\n background-color: transparent;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.no-chars,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.no-chars {\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 0%;\n }\n\n /* Background vocals: muted gray wipe instead of white.\n Must match specificity of the main .active .highlight rule (0,3,1). */\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.highlight.no-chars,\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.no-chars,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.highlight.no-chars,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.no-chars {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n color-mix(in srgb, var(--lyplus-text-primary, #fff) 50%, #888888) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--lyplus-text-primary, #fff) 50%, #888888) 100%,\n #0000 100%\n );\n }\n\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.rtl-text,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.rtl-text {\n background-image:\n linear-gradient(\n -90deg,\n color-mix(in srgb, var(--lyplus-text-primary) 50%, #888888) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n color-mix(in srgb, var(--lyplus-text-primary) 50%, #888888) 100%,\n transparent 100%\n );\n }\n\n /* Non-growable words float up with a gentle curve */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight {\n transform: translateY(-3.5%);\n }\n\n .lyrics-line.persist-highlight:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.finished {\n transform: translateY(-3.5%);\n }\n\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%);\n }\n\n .lyrics-word.char-rise .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%);\n }\n\n .lyrics-line.persist-highlight\n .lyrics-word.growable\n .lyrics-syllable.finished\n .char,\n .lyrics-line.persist-highlight\n .lyrics-word.char-rise\n .lyrics-syllable.finished\n .char {\n transform: translateY(-3.5%);\n }\n\n /* Background vocal overrides — placed AFTER main rules so they win\n on equal specificity. */\n .background-vocal-container .lyrics-syllable {\n background-color: color-mix(\n in srgb,\n var(--lyplus-text-secondary) 50%,\n #888888\n );\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.finished,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.finished {\n background-color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n );\n }\n\n .background-vocal-container .lyrics-syllable.line-synced {\n color: color-mix(\n in srgb,\n var(--lyplus-text-secondary) 50%,\n #888888\n ) !important;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.line-synced,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.line-synced {\n color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n ) !important;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.line-synced.finished,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.line-synced.finished {\n color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n ) !important;\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-chars: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 backface-visibility: hidden;\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 background-color: var(--lyplus-text-primary);\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\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 transition:\n transform 0.7s ease,\n color 0.18s;\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: 1.6em;\n padding: var(--lyplus-padding-gap);\n overflow: visible;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transform-origin: top;\n content-visibility: visible !important;\n contain: none !important;\n transition:\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms) var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n opacity: 1;\n transition:\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\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 opacity: 1;\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1);\n transition: transform 400ms cubic-bezier(0.22, 1, 0.36, 1);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0);\n }\n\n /* Pulse — must come BEFORE .gap-exiting so exiting wins via specificity+order */\n .lyrics-gap.active .main-vocal-container {\n animation: gap-loop var(--gap-pulse-duration, 4000ms) ease-in-out infinite\n alternate;\n animation-delay: var(--gap-loop-delay, 0ms);\n }\n\n /* Jump animation plays during exit — disable transition so animation wins.\n Placed AFTER .active so it wins when both classes are present briefly. */\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 transition: none !important;\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.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable.finished,\n .lyrics-gap:not(.active):not(.gap-exiting).post-active-line\n .lyrics-syllable,\n .lyrics-gap:not(.active):not(.gap-exiting).lyrics-activest\n .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\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));\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));\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: calc(var(--lyplus-font-size-base) * 0.5);\n color: var(--lyplus-text-secondary);\n padding: 20px 0 50vh 0;\n margin-top: 10px;\n font-weight: 400;\n opacity: 0.8;\n transition:\n opacity 0.3s ease,\n transform 0.5s cubic-bezier(0.41, 0, 0.12, 0.99),\n filter 0.3s ease;\n transform-origin: left;\n }\n\n .lyrics-footer.lyrics-line {\n font-size: calc(var(--lyplus-font-size-base) * 0.5);\n padding: 20px var(--lyplus-padding-line) 50vh var(--lyplus-padding-line);\n margin-top: 0;\n }\n\n .lyrics-footer.active {\n opacity: 1;\n color: rgba(255, 255, 255, 0.5); /* Grey instead of primary */\n }\n\n .lyrics-footer.scroll-animate {\n transition: none !important;\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.blur-inactive-enabled:not(.not-focused)\n .lyrics-footer:not(.active) {\n filter: blur(var(--lyplus-blur-amount));\n opacity: 0.5;\n }\n\n .lyrics-container.user-scrolling .lyrics-footer {\n transition: none !important;\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: var(--lyplus-text-primary); /* Stand out using primary color */\n text-underline-offset: 2px;\n opacity: 0.8;\n transition: opacity 0.2s;\n }\n\n .lyrics-footer a:hover {\n opacity: 1;\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 text-align: right;\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.75em 0%,\n -0.375em 0%;\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) 0%;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right 0%;\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) 0%;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right 0%;\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 0%;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right 0%;\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.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 /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: translateY(-25%) scale(1.12);\n }\n to {\n transform: translateY(-25%) 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 }\n 35% {\n transform: translateY(-25%) scale(1.2);\n }\n 100% {\n transform: translateY(-25%) scale(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: translate3d(0, var(--scroll-delta), 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }\n\n /* Character grow animation — translate3d+scale3d for smooth transform,\n drop-shadow for glow */\n @keyframes grow-dynamic {\n 0% {\n transform: translate3d(0, 0, 0) scale3d(1, 1, 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: translate3d(\n var(--char-offset-x, 0px),\n var(--translate-y-peak, -2px),\n 0\n )\n scale3d(var(--matrix-scale, 1.1), var(--matrix-scale, 1.1), 1);\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 75%,\n 100% {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0)\n scale3d(1, 1, 1);\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 rise-char {\n 0% {\n transform: translate3d(0, 0, 0);\n }\n 65%,\n 100% {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\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: String, attribute: 'songwriters' })\n songwriters?: 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: 'font-family' })\n fontFamily: string | undefined;\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\n // If the new time is significantly smaller than the old time (e.g. song looped)\n if (value < oldValue && oldValue - value > 1000 && this.lyrics) {\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.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n\n // Stop all running animations and clear highlights immediately\n if (this.lyricsContainer) {\n const activeLines = this.lyricsContainer.querySelectorAll(\n '.lyrics-line.active, .lyrics-line.pre-active, .lyrics-line.bg-expanded',\n );\n activeLines.forEach(line => {\n line.classList.remove('active', 'pre-active', 'bg-expanded');\n AmLyrics.resetSyllables(line as HTMLElement);\n });\n\n const activeGaps = this.lyricsContainer.querySelectorAll(\n '.lyrics-gap.active, .lyrics-gap.gap-exiting',\n );\n activeGaps.forEach(gap =>\n gap.classList.remove('active', 'gap-exiting'),\n );\n\n // Reset gap cache since we manually messed with the elements\n this.gapElementCache.clear();\n }\n }\n\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: YouLyPlusLyricsResult[] = [];\n\n @state()\n private currentSourceIndex = 0;\n\n private isFetchingAlternatives = false;\n\n private hasFetchedAllProviders = false;\n\n private _updateFooter() {\n const footer = this.shadowRoot?.querySelector('.lyrics-footer');\n if (!footer) return;\n const switchBtn = footer.querySelector('.source-switch-btn');\n const svgEl = footer.querySelector('.source-switch-svg');\n const labelEl = footer.querySelector('.source-switch-label');\n if (switchBtn) {\n (switchBtn as HTMLButtonElement).disabled = this.isFetchingAlternatives;\n }\n if (svgEl) {\n svgEl.setAttribute(\n 'style',\n `margin-right: 4px; ${this.isFetchingAlternatives ? 'animation: spin 1s linear infinite;' : ''}`,\n );\n }\n if (labelEl) {\n labelEl.textContent = this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch';\n }\n }\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 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 // Cached line elements array for scroll/position queries\n private cachedLineArray: HTMLElement[] = [];\n\n // Cached line and gap element maps for fast lookup\n private lineElementCache = new Map<number, HTMLElement>();\n\n private gapElementCache = new Map<number, HTMLElement>();\n\n // Cached gap computation results\n private cachedAllGaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Cached isUnsynced flag\n private cachedIsUnsynced = false;\n\n // Cached pre-computed line data for render\n private cachedLineData: Array<{\n wordGroups: Syllable[][];\n groupGrowable: boolean[];\n groupGlowing: boolean[];\n groupCharRise: boolean[];\n vwFullText: string[];\n vwFullDuration: number[];\n vwCharOffset: number[];\n vwStartMs: number[];\n vwEndMs: number[];\n lineIsRTL: boolean;\n }> | null = null;\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 scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollUnlockTimeout?: 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 // IntersectionObserver for viewport virtualization\n private visibilityObserver?: IntersectionObserver;\n\n // Cached scroll padding top value\n private cachedScrollPaddingTop: number | null = null;\n\n // Cached element tracking to avoid repeated querySelectorAll calls\n private preActiveLineElements: HTMLElement[] = [];\n\n private positionedLineElements: HTMLElement[] = [];\n\n private activeGapLineElements: HTMLElement[] = [];\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.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = 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 this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = undefined;\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 this._updateFooter();\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: YouLyPlusLyricsResult[] = [];\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const title = resolvedMetadata.metadata.title?.trim() || '';\n const artist = resolvedMetadata.metadata.artist?.trim() || '';\n\n const biniResult = await AmLyrics.fetchLyricsFromBiniLyrics(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n );\n if (biniResult && biniResult.lines.length > 0) {\n collectedSources.push(biniResult);\n }\n\n if (collectedSources.length === 0) {\n const unisonResult = await AmLyrics.fetchLyricsFromUnison(\n resolvedMetadata.metadata,\n );\n if (unisonResult && unisonResult.lines.length > 0) {\n collectedSources.push(unisonResult);\n }\n }\n\n if (collectedSources.length === 0) {\n const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n true,\n );\n\n if (youLyResults && youLyResults.length > 0) {\n collectedSources.push(...youLyResults);\n }\n }\n }\n\n if (collectedSources.length === 0 && resolvedMetadata?.metadata) {\n // Fallback: LRCLIB\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 => s.source === 'LRCLIB' || s.source === 'Genius',\n );\n this._updateFooter();\n\n if (collectedSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources(collectedSources);\n\n this.currentSourceIndex = 0;\n const sourceResult = this.availableSources[0];\n this.lyrics = sourceResult.lines;\n this.lyricsSource = sourceResult.source;\n if (sourceResult.songwriters) {\n this.songwriters = sourceResult.songwriters;\n }\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 this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\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 (lower.includes('bini') && hasWordSync) return 2;\n if (lower.includes('unison') && hasWordSync) return 3;\n if (isQQ && hasWordSync) return 4;\n if (lower.includes('musixmatch') && hasWordSync) return 5;\n if (lower.includes('lrclib') && hasWordSync) return 6;\n if (hasWordSync) return 7;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('bini') && !hasWordSync && !isUnsynced) return 9;\n if (lower.includes('unison') && !hasWordSync && !isUnsynced) return 10;\n if (isQQ && !hasWordSync && !isUnsynced) return 11;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 12;\n if (lower.includes('lrclib') && !hasWordSync && !isUnsynced) return 13;\n if (!hasWordSync && !isUnsynced) return 14;\n\n if (lower.includes('apple') && isUnsynced) return 15;\n if (lower.includes('bini') && isUnsynced) return 16;\n if (lower.includes('unison') && isUnsynced) return 17;\n if (isQQ && isUnsynced) return 18;\n if (lower.includes('musixmatch') && isUnsynced) return 19;\n if (lower.includes('lrclib') && isUnsynced) return 20;\n if (lower.includes('genius')) return 21;\n\n return 30;\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 this._updateFooter();\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n if (resolvedMetadata?.metadata) {\n const newSources: YouLyPlusLyricsResult[] = [];\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 this._updateFooter();\n }\n }\n\n if (this.availableSources.length > 1) {\n this.currentSourceIndex =\n (this.currentSourceIndex + 1) % this.availableSources.length;\n const sourceResult = this.availableSources[this.currentSourceIndex];\n this.lyrics = sourceResult.lines;\n this.lyricsSource = sourceResult.source;\n if (sourceResult.songwriters) {\n this.songwriters = sourceResult.songwriters;\n }\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 songwriters: this.songwriters?.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 (!metadata.songwriters && catalogResult.songwriters) {\n metadata.songwriters = catalogResult.songwriters;\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 fetchLyricsFromBiniLyrics(\n title: string,\n artist: string,\n isrc?: string,\n metadata: { durationMs?: number; album?: string } = {},\n ): Promise<YouLyPlusLyricsResult | null> {\n if ((!title || !artist) && !isrc) return null;\n\n try {\n let cacheData: any = null;\n\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 {\n // Fall through to title/artist search\n }\n }\n\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.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const parseResult = AmLyrics.parseTTML(ttmlText);\n if (parseResult && parseResult.lines.length > 0) {\n return {\n lines: parseResult.lines,\n source: 'BiniLyrics',\n songwriters: parseResult.songwriters,\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 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 skipBiniCache = false,\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 (lower.includes('bini') && hasWordSync) return 2;\n if (lower.includes('unison') && hasWordSync) return 3;\n if (isQQ && hasWordSync) return 4;\n if (lower.includes('musixmatch') && hasWordSync) return 5;\n if (hasWordSync) return 6;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 7;\n if (lower.includes('bini') && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('unison') && !hasWordSync && !isUnsynced) return 9;\n if (isQQ && !hasWordSync && !isUnsynced) return 10;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced)\n return 11;\n if (!hasWordSync && !isUnsynced) return 12;\n\n if (lower.includes('apple') && isUnsynced) return 13;\n if (lower.includes('bini') && isUnsynced) return 14;\n if (lower.includes('unison') && isUnsynced) return 15;\n if (isQQ && isUnsynced) return 16;\n if (lower.includes('musixmatch') && isUnsynced) return 17;\n\n return 30;\n };\n\n const allResults: YouLyPlusLyricsResult[] = [];\n\n if (!skipBiniCache) {\n const biniResult = await AmLyrics.fetchLyricsFromBiniLyrics(\n title,\n artist,\n isrc,\n metadata,\n );\n if (biniResult) {\n allResults.push(biniResult);\n return allResults;\n }\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 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 async fetchLyricsFromUnison(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n if (!title || !artist) return null;\n\n const params = new URLSearchParams();\n params.append('song', title);\n params.append('artist', artist);\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n try {\n const response = await fetchWithTimeout(\n `https://unison.boidu.dev/lyrics?${params.toString()}`,\n );\n if (!response.ok) return null;\n\n const data = await response.json();\n if (!data.success || !data.data?.lyrics) return null;\n\n const lyricsData = data.data;\n const format = lyricsData.format || 'lrc';\n const syncType = lyricsData.syncType || 'linesync';\n const lyricsText = lyricsData.lyrics;\n\n if (format === 'ttml') {\n const parseResult = AmLyrics.parseTTML(lyricsText);\n if (parseResult && parseResult.lines.length > 0) {\n return {\n lines: parseResult.lines,\n source: 'Unison',\n songwriters: parseResult.songwriters,\n };\n }\n }\n\n if (format === 'lrc') {\n if (syncType === 'plain') {\n const plainLines = lyricsText\n .split('\\n')\n .map((l: string) => l.trim())\n .filter((l: string) => l);\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [{ text, part: false, timestamp: 0, endtime: 0 }],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'Unison (unsynced)' };\n }\n } else {\n const lines = AmLyrics.parseLrcSubtitles(lyricsText);\n if (lines.length > 0) {\n return { lines, source: 'Unison' };\n }\n }\n }\n } catch {\n // Unison fetch failed\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(\n ttmlString: string,\n ): { lines: LyricsLine[]; songwriters?: string } | 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 let songwriters: string | undefined;\n const songwritersNodes = doc.getElementsByTagName('songwriter');\n if (songwritersNodes.length > 0) {\n const names: string[] = [];\n for (let i = 0; i < songwritersNodes.length; i += 1) {\n if (songwritersNodes[i].textContent) {\n names.push(songwritersNodes[i].textContent!);\n }\n }\n if (names.length > 0) {\n songwriters = names.join(', ');\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: !/\\s$/.test(bgText),\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: !/\\s$/.test(text),\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, songwriters };\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 if (this.lyricsContainer) {\n // Remove .active and .bg-expanded immediately when a line drops.\n // All visual fading is handled by CSS transitions — no JS delays,\n // so overlapping lyrics never get stuck with multiple .active lines.\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n if (isSeek || this.isUserScrolling) {\n AmLyrics.unfinishSyllables(lineElement);\n } else {\n AmLyrics.finishSyllablesUpToTime(lineElement, newTime);\n }\n\n lineElement.classList.remove('active', 'bg-expanded');\n\n if (lineElement.classList.contains('pre-active')) {\n lineElement.classList.remove('pre-active');\n }\n const preIdx = this.preActiveLineElements.indexOf(lineElement);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n }\n }\n\n // Add 'active' and 'bg-expanded' to newly active lines\n for (const lineIndex of newActiveLines) {\n if (!oldActiveLines.includes(lineIndex)) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n lineElement.classList.add('active', 'bg-expanded');\n lineElement.classList.remove('pre-active');\n const preIdx = this.preActiveLineElements.indexOf(lineElement);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n }\n }\n\n // Remove pre-active from lines that are now active (they no longer\n // need the unblur preview class) and from lines that dropped.\n for (const lineElement of this.preActiveLineElements) {\n const idx = AmLyrics.getLineIndexFromElement(lineElement);\n if (\n idx === null ||\n (!newActiveLines.includes(idx) &&\n lineElement !== this.currentPrimaryActiveLine)\n ) {\n lineElement.classList.remove('pre-active');\n }\n }\n this.preActiveLineElements = this.preActiveLineElements.filter(el =>\n el.classList.contains('pre-active'),\n );\n }\n\n this.startAnimationFromTime(newTime);\n }\n\n // Predictive scroll: run on every tick so we scroll *before* the next\n // line starts, matching YouLyPlus behaviour.\n this._handleActiveLineScroll(oldActiveLines, isSeek);\n this.clearPastLineHighlights();\n\n if (this.lyricsContainer) {\n // Update syllables in active lines using cached elements\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n for (const gapLine of this.activeGapLineElements) {\n AmLyrics.updateSyllablesForLine(gapLine, newTime);\n }\n\n // Imperatively manage gap active state\n if (this.gapElementCache.size > 0) {\n for (const [, gap] of this.gapElementCache) {\n const gapStartTime =\n (gap as any)._cachedStartTime ??\n parseFloat(gap.getAttribute('data-start-time') || '0');\n const gapEndTime =\n (gap as any)._cachedEndTime ??\n parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive =\n newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && (!isActive || isSeek) && !isExiting) {\n gap.classList.remove('gap-exiting');\n if (isSeek && isActive) {\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth; // Force reflow\n }\n const gapDuration = gapEndTime - gapStartTime;\n const baseLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n const totalDelay = baseLoopDelay + (newTime - gapStartTime);\n (gap as HTMLElement).style.setProperty(\n '--gap-loop-delay',\n `-${totalDelay}ms`,\n );\n gap.classList.add('active');\n if (!this.activeGapLineElements.includes(gap as HTMLElement)) {\n this.activeGapLineElements.push(gap as HTMLElement);\n }\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(\n dot.getAttribute('data-end-time') || '0',\n );\n if (newTime > dotEnd) {\n dot.classList.add('finished');\n if (!dot.classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(\n dot as HTMLElement,\n newTime - dotStart,\n );\n }\n } else if (newTime >= dotStart && newTime <= dotEnd) {\n AmLyrics.updateSyllableAnimation(\n dot as HTMLElement,\n newTime - dotStart,\n );\n }\n });\n } else if (shouldStartExiting) {\n // Cancel gap-loop first, force reflow, then start gap-ended\n // so the browser sees a clean animation swap\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth;\n gap.classList.add('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (!shouldBeActive && (isActive || isExiting)) {\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n gap.classList.remove('gap-exiting');\n }\n }\n } else if (this.lyricsContainer) {\n // Fallback: no cache yet, use querySelectorAll\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(\n gap.getAttribute('data-end-time') || '0',\n );\n const shouldBeActive =\n newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && (!isActive || isSeek) && !isExiting) {\n gap.classList.remove('gap-exiting');\n if (isSeek && isActive) {\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth; // Force reflow\n }\n const gapDuration = gapEndTime - gapStartTime;\n const baseLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n const totalDelay = baseLoopDelay + (newTime - gapStartTime);\n (gap as HTMLElement).style.setProperty(\n '--gap-loop-delay',\n `-${totalDelay}ms`,\n );\n gap.classList.add('active');\n if (!this.activeGapLineElements.includes(gap as HTMLElement)) {\n this.activeGapLineElements.push(gap as HTMLElement);\n }\n } else if (shouldStartExiting) {\n // Cancel gap-loop first, force reflow, then start gap-ended\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth;\n gap.classList.add('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (!shouldBeActive && (isActive || isExiting)) {\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n gap.classList.remove('gap-exiting');\n }\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 // Check footer active state\n const lastLyric =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics[this.lyrics.length - 1]\n : null;\n const footer = this.lyricsContainer.querySelector(\n '.lyrics-footer',\n ) as HTMLElement;\n if (footer && lastLyric && lastLyric.endtime > 0) {\n const isFooterActive = newTime > lastLyric.endtime + 200; // Snappier 200ms buffer\n if (isFooterActive && !footer.classList.contains('active')) {\n footer.classList.add('active');\n // Clear pre-active from the last lyric so it doesn't stay\n // unblurred when the footer takes over.\n const lastLine = this.lyricsContainer.querySelector(\n '.lyrics-line:last-of-type',\n ) as HTMLElement;\n if (lastLine) {\n lastLine.classList.remove('pre-active');\n const preIdx = this.preActiveLineElements.indexOf(lastLine);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.focusLine(footer);\n }\n } else if (!isFooterActive && footer.classList.contains('active')) {\n footer.classList.remove('active');\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n this._invalidateCaches();\n this._ensureLineDataCache();\n this._updateCachedIsUnsynced();\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._getLineElement(lineIndex);\n if (lineEl) lineEl.classList.add('active', 'bg-expanded');\n }\n\n // Trigger a faux time-change so that updateSyllablesForLine fires\n // to setup inline syllable CSS wipe animations for whatever the current time is\n this._onTimeChanged(0, this.currentTime);\n\n // Ensure position classes are applied on initial render if not playing yet\n if (this.positionedLineElements.length === 0) {\n const firstLine = this.lyricsContainer.querySelector(\n '.lyrics-line',\n ) as HTMLElement;\n if (firstLine) this.updatePositionClasses(firstLine);\n }\n\n // Set up IntersectionObserver for viewport virtualization\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n const el = entry.target as HTMLElement;\n el.classList.toggle('far-line', !entry.isIntersecting);\n });\n },\n {\n root: this.lyricsContainer,\n rootMargin: '200px',\n threshold: 0,\n },\n );\n const lines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n lines.forEach(line => this.visibilityObserver!.observe(line));\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.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.setUserScrolling(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 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 // 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 * Uses predictive scroll like YouLyPlus: computes a scrollLookAheadMs based\n * on the gap to the next line, finds the primary line at predictiveTime,\n * and scrolls with a duration matching the lookahead.\n */\n private _handleActiveLineScroll(\n _oldActiveIndices: number[],\n forceScroll = false,\n ): void {\n if (!this.lyricsContainer || !this.lyrics || this.lyrics.length === 0) {\n return;\n }\n\n // If the footer is already active, it set up its own scroll.\n // Don't override it with a scroll back to the last lyric.\n const footer = this.lyricsContainer.querySelector('.lyrics-footer');\n if (footer?.classList.contains('active')) {\n return;\n }\n\n // 1. Compute scroll lookahead based on gap to next line (YouLyPlus style)\n let scrollLookAheadMs = 350;\n const currentAudioIndex = this.getLineIndexAtTime(\n this.currentTime,\n this.lastActiveIndex,\n );\n if (\n currentAudioIndex !== -1 &&\n currentAudioIndex + 1 < this.lyrics.length\n ) {\n const currentLine = this.lyrics[currentAudioIndex];\n const nextLine = this.lyrics[currentAudioIndex + 1];\n const gap = nextLine.timestamp - currentLine.endtime;\n scrollLookAheadMs = Math.min(500, Math.max(350, gap));\n }\n\n // 2. Find scroll target at predictive time\n const predictiveTime = this.currentTime + scrollLookAheadMs;\n const predictiveActiveIndices = this.findActiveLineIndices(predictiveTime);\n\n let targetLineIndex: number | null;\n if (predictiveActiveIndices.length > 0) {\n targetLineIndex = this.getPrimaryScrollLineIndex(\n predictiveActiveIndices,\n predictiveTime,\n );\n } else {\n // Fallback: closest line before predictiveTime\n targetLineIndex = this.getLineIndexAtTime(predictiveTime, 0);\n }\n\n if (targetLineIndex === null || targetLineIndex === -1) return;\n\n const targetLine = this._getLineElement(targetLineIndex);\n if (!targetLine) return;\n\n // Unblur the upcoming target line early (pre-active) so background\n // vocals start their max-height/opacity transition in sync with scroll.\n if (!targetLine.classList.contains('active')) {\n targetLine.classList.add('pre-active');\n if (!this.preActiveLineElements.includes(targetLine)) {\n this.preActiveLineElements.push(targetLine);\n }\n }\n\n const scrollDuration = scrollLookAheadMs;\n\n this.focusLine(targetLine, forceScroll, scrollDuration);\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 _rebuildDomCache() {\n if (!this.lyricsContainer) return;\n\n this.lineElementCache.clear();\n this.gapElementCache.clear();\n this.cachedLineArray = [];\n\n if (!this.lyrics) return;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const lineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement | null;\n if (lineEl) this.lineElementCache.set(i, lineEl);\n\n const gapEl = this.lyricsContainer.querySelector(\n `#gap-${i}`,\n ) as HTMLElement | null;\n if (gapEl) {\n // Cache numeric timing values to avoid parseFloat on every frame\n (gapEl as any)._cachedStartTime = parseFloat(\n gapEl.getAttribute('data-start-time') || '0',\n );\n (gapEl as any)._cachedEndTime = parseFloat(\n gapEl.getAttribute('data-end-time') || '0',\n );\n this.gapElementCache.set(i, gapEl);\n }\n }\n\n // Rebuild cached line array for scroll/position queries\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n this.cachedLineArray = Array.from(lineElements) as HTMLElement[];\n }\n\n private _getLineElement(index: number): HTMLElement | null {\n const cached = this.lineElementCache.get(index);\n if (cached) return cached;\n if (!this.lyricsContainer) return null;\n const el = this.lyricsContainer.querySelector(\n `#lyrics-line-${index}`,\n ) as HTMLElement | null;\n if (el) this.lineElementCache.set(index, el);\n return el;\n }\n\n private _getGapElement(index: number): HTMLElement | null {\n const cached = this.gapElementCache.get(index);\n if (cached) return cached;\n if (!this.lyricsContainer) return null;\n const el = this.lyricsContainer.querySelector(\n `#gap-${index}`,\n ) as HTMLElement | null;\n if (el) this.gapElementCache.set(index, el);\n return el;\n }\n\n private _invalidateCaches() {\n this.cachedAllGaps = [];\n this.cachedIsUnsynced = false;\n this.cachedLineData = null;\n this.lineElementCache.clear();\n this.gapElementCache.clear();\n this.cachedLineArray = [];\n this.cachedScrollPaddingTop = null;\n this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = undefined;\n }\n\n private _updateCachedIsUnsynced() {\n this.cachedIsUnsynced =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics.every(l => l.timestamp === 0 && l.endtime === 0)\n : false;\n }\n\n private _ensureLineDataCache() {\n if (this.cachedLineData || !this.lyrics) return;\n\n this.cachedLineData = this.lyrics.map(line => {\n const wordGroups: Syllable[][] = [];\n let currentGroupBuffer: Syllable[] = [];\n\n line.text.forEach((syllable, idx) => {\n currentGroupBuffer.push(syllable);\n const nextSyllable = line.text[idx + 1];\n\n const endsWithDelimiter =\n !nextSyllable ||\n syllable.part === false ||\n /\\s$/.test(syllable.text) ||\n (nextSyllable &&\n (syllable as any).isBackground !==\n (nextSyllable as any).isBackground);\n\n if (endsWithDelimiter) {\n wordGroups.push(currentGroupBuffer);\n currentGroupBuffer = [];\n }\n });\n\n if (currentGroupBuffer.length > 0) {\n wordGroups.push(currentGroupBuffer);\n }\n\n const groupGrowable: boolean[] = new Array(wordGroups.length).fill(false);\n const groupGlowing: boolean[] = new Array(wordGroups.length).fill(false);\n const groupCharRise: boolean[] = new Array(wordGroups.length).fill(false);\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 lineIsRTL = false;\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 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 if (isRTL) lineIsRTL = true;\n const hasHyphen = combinedText.includes('-');\n\n const wordLen = combinedText.length;\n let isGrowableVW =\n !isCJK && !isRTL && !hasHyphen && wordLen > 0 && wordLen <= 7;\n if (isGrowableVW) {\n if (wordLen < 3) {\n isGrowableVW =\n combinedDuration >= 1050 && combinedDuration >= wordLen * 525;\n } else {\n isGrowableVW =\n combinedDuration >= 850 && combinedDuration >= wordLen * 190;\n }\n }\n\n const isLineSynced =\n line.isWordSynced === false || line.text.some(s => s.lineSynced);\n const isGlowingVW = isGrowableVW && !isLineSynced;\n const isCharRiseVW =\n !isGrowableVW && !isLineSynced && !isCJK && !isRTL && wordLen >= 8;\n\n let charOff = 0;\n for (let gi = vwStart; gi <= vwEnd; gi += 1) {\n groupGrowable[gi] = isGrowableVW;\n groupGlowing[gi] = isGlowingVW;\n groupCharRise[gi] = isCharRiseVW;\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 return {\n wordGroups,\n groupGrowable,\n groupGlowing,\n groupCharRise,\n vwFullText,\n vwFullDuration,\n vwCharOffset,\n vwStartMs,\n vwEndMs,\n lineIsRTL,\n };\n });\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n this._rebuildDomCache();\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 charTimedWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable, .lyrics-word.char-rise',\n );\n if (!charTimedWords) return;\n\n charTimedWords.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 const keptLines: HTMLElement[] = [];\n for (const lineElement of this.preActiveLineElements) {\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex === exceptLineIndex) {\n keptLines.push(lineElement);\n } else {\n lineElement.classList.remove('pre-active');\n }\n }\n this.preActiveLineElements = keptLines;\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 ) {\n if (activeIndices.length <= 3) {\n candidateIndex = currentPrimaryIndex;\n } else if (candidateIndex < currentPrimaryIndex) {\n candidateIndex = currentPrimaryIndex;\n }\n }\n\n return candidateIndex;\n }\n\n private getPrimaryScrollLineIndex(\n _activeIndices: number[],\n time: number,\n ): number | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // YouLyPlus-style: primary is simply the line at predictive time.\n const primaryIndex = this.getLineIndexAtTime(time, this.lastActiveIndex);\n if (primaryIndex === -1) return null;\n\n // Guard: if new primary is ahead of current but they share the same\n // end time, keep current to prevent bounce during overlaps.\n const currentPrimaryIndex = AmLyrics.getLineIndexFromElement(\n this.currentPrimaryActiveLine,\n );\n if (\n currentPrimaryIndex !== null &&\n primaryIndex > currentPrimaryIndex &&\n this.lyrics[currentPrimaryIndex] &&\n this.lyrics[primaryIndex] &&\n this.lyrics[currentPrimaryIndex].endtime ===\n this.lyrics[primaryIndex].endtime\n ) {\n const activeCount = this.findActiveLineIndices(time).length;\n if (activeCount <= 3) {\n return currentPrimaryIndex;\n }\n }\n\n return primaryIndex;\n }\n\n private getOverlapClusterForActiveIndices(\n activeIndices: number[],\n time: number,\n ): {\n start: number;\n end: number;\n startedEnd: number;\n startedEndTime: number;\n } | null {\n if (!this.lyrics || activeIndices.length === 0) return null;\n\n let start = activeIndices[0];\n while (\n start > 0 &&\n this.lyrics[start - 1].endtime >= this.lyrics[start].timestamp\n ) {\n start -= 1;\n }\n\n let end = start;\n let clusterEndTime = this.lyrics[start].endtime;\n while (\n end + 1 < this.lyrics.length &&\n this.lyrics[end + 1].timestamp <= clusterEndTime\n ) {\n end += 1;\n clusterEndTime = Math.max(clusterEndTime, this.lyrics[end].endtime);\n }\n\n let startedEnd = start;\n let startedEndTime = this.lyrics[start].endtime;\n for (let i = start; i <= end; i += 1) {\n if (this.lyrics[i].timestamp <= time) {\n startedEnd = i;\n startedEndTime = Math.max(startedEndTime, this.lyrics[i].endtime);\n } else {\n break;\n }\n }\n\n return { start, end, startedEnd, startedEndTime };\n }\n\n private focusLine(\n lineElement: HTMLElement,\n forceScroll = false,\n scrollDuration: number | undefined = undefined,\n skipScroll = false,\n preservePrimary = false,\n ): void {\n const primaryChanged = lineElement !== this.currentPrimaryActiveLine;\n\n if (primaryChanged && !preservePrimary) {\n // .active is now managed solely by findActiveLineIndices (which uses\n // effectiveEndTimes). Lines stay active until their extended end,\n // so we no longer need to remove .active here.\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = lineElement;\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex !== null) {\n this.lastActiveIndex = lineIndex;\n }\n }\n\n // Only update blur/opacity position classes when the primary line\n // actually changes (or on force scroll). Running this every tick\n // causes visual churn and upward glitches.\n if (primaryChanged || forceScroll) {\n this.updatePositionClasses(lineElement);\n }\n\n if (\n !skipScroll &&\n (forceScroll || primaryChanged || preservePrimary) &&\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.scrollToActiveLineYouLy(lineElement, forceScroll, scrollDuration);\n }\n }\n\n private setUserScrolling(value: boolean) {\n this.isUserScrolling = value;\n if (value) {\n this.lyricsContainer?.classList.add('user-scrolling');\n } else {\n this.lyricsContainer?.classList.remove('user-scrolling');\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.setUserScrolling(true);\n\n this.clearPastLineHighlights();\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.setUserScrolling(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._handleActiveLineScroll([], false);\n }\n }, 2000);\n }\n\n private clearPastLineHighlights() {\n if (!this.lyricsContainer) return;\n\n const lineElements = this.cachedLineArray.length\n ? this.cachedLineArray\n : (Array.from(\n this.lyricsContainer.querySelectorAll(\n '.lyrics-line:not(.lyrics-gap)',\n ),\n ) as HTMLElement[]);\n const containerRect = this.lyricsContainer.getBoundingClientRect();\n const anchorY = containerRect.top + this.getScrollPaddingTop();\n\n for (let i = 0; i < lineElements.length; i += 1) {\n const lineElement = lineElements[i];\n const isActive = lineElement.classList.contains('active');\n const lineRect = lineElement.getBoundingClientRect();\n const hasScrolledPast = lineRect.bottom < anchorY - 2;\n if (!isActive && hasScrolledPast) {\n AmLyrics.unfinishSyllables(lineElement);\n }\n }\n }\n\n /**\n * Find the first (lowest-index) line whose raw time range contains `timeMs`.\n * Uses a stable forward scan so overlapping ranges always return the same\n * line, preventing primary-target jitter that causes scroll glitches.\n */\n private getLineIndexAtTime(timeMs: number, startHintIndex = 0): number {\n if (!this.lyrics || this.lyrics.length === 0) return -1;\n const len = this.lyrics.length;\n\n // 1. Check hint and immediate neighbours first (fast path)\n const hint = Math.max(0, Math.min(startHintIndex, len - 1));\n for (let i = hint; i < len; i += 1) {\n const line = this.lyrics[i];\n if (line.timestamp > timeMs) break;\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n }\n for (let i = hint - 1; i >= 0; i -= 1) {\n const line = this.lyrics[i];\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n if (line.endtime < timeMs) break;\n }\n\n // 2. Full forward scan — guaranteed deterministic for overlaps\n for (let i = 0; i < len; i += 1) {\n const line = this.lyrics[i];\n if (line.timestamp > timeMs) break;\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n }\n\n return -1;\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const activeLines: number[] = [];\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n\n if (line.timestamp > time) break;\n if (time >= line.timestamp && time < line.endtime) {\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.cachedAllGaps.length > 0) return this.cachedAllGaps;\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 this.cachedAllGaps = gaps;\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.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.setUserScrolling(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.clearPastLineHighlights();\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.cachedScrollPaddingTop !== null)\n return this.cachedScrollPaddingTop;\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n let result: number;\n if (paddingTopValue.includes('%')) {\n result =\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100);\n } else {\n result = parseFloat(paddingTopValue) || 0;\n }\n this.cachedScrollPaddingTop = result;\n return result;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n */\n private animateScrollYouLy(\n newTranslateY: number,\n forceScroll = false,\n scrollDuration: number | undefined = undefined,\n ): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n const targetTop = Math.max(0, -newTranslateY);\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 const pendingTop =\n animState.pendingUpdate === null\n ? null\n : Math.max(0, -animState.pendingUpdate);\n if (\n Math.abs(parent.scrollTop - targetTop) < 2 ||\n (pendingTop !== null && Math.abs(pendingTop - targetTop) < 2)\n ) {\n return;\n }\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n const { animatingLines } = this;\n\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 and custom properties from ALL\n // previously animating lines so stale deltas don't interfere. ---\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\n // Get lines for staggered animation — use cached array\n if (this.cachedLineArray.length === 0) {\n const lineElements =\n this.lyricsContainer.querySelectorAll('.lyrics-line');\n this.cachedLineArray = Array.from(lineElements) as HTMLElement[];\n }\n const lineArray = this.cachedLineArray;\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 duration = Math.min(\n 450,\n scrollDuration ?? SCROLL_ANIMATION_DURATION_MS,\n );\n const delayIncrement = duration * 0.1;\n const lookAhead = 20;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookAhead);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n const newAnimatingLines: HTMLElement[] = [];\n const scrollingDown = delta >= 0;\n\n if (scrollingDown) {\n let delayCounter = 0;\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n const delay = i >= referenceIndex ? delayCounter * delayIncrement : 0;\n\n if (i >= referenceIndex && !line.classList.contains('lyrics-gap')) {\n delayCounter += 1;\n }\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty('--scroll-duration', `${duration + 100}ms`);\n\n newAnimatingLines.push(line);\n\n const lineDuration = duration + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n } else {\n let delayCounter = 0;\n for (let i = end - 1; i >= start; i -= 1) {\n const line = lineArray[i];\n const delay = i <= referenceIndex ? delayCounter * delayIncrement : 0;\n\n if (i <= referenceIndex && !line.classList.contains('lyrics-gap')) {\n delayCounter += 1;\n }\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty('--scroll-duration', `${duration + 100}ms`);\n\n newAnimatingLines.push(line);\n\n const lineDuration = duration + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n }\n\n // --- Step 3: Force reflow so the browser sees the class removal ---\n // Use offsetHeight which is cheaper than getBoundingClientRect\n // eslint-disable-next-line no-void\n void parent.offsetHeight;\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\n // YouLyPlus-style early unlock: allow new scrolls to start after a\n // short base duration, even if CSS animations are still running.\n const BASE_DURATION = 400;\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false, scrollDuration);\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 from tracked elements\n for (const el of this.positionedLineElements) {\n el.classList.remove(...positionClasses);\n }\n this.positionedLineElements = [];\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n this.positionedLineElements.push(lineToScroll);\n\n if (this.cachedLineArray.length === 0) {\n this.cachedLineArray = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n }\n const lineElements = this.cachedLineArray;\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n if (scrollLineIndex === -1) return;\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 this.positionedLineElements.push(element);\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 scrollDuration: number | undefined = undefined,\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 and we aren't trying to scroll back up\n if (!forceScroll && !activeLine.classList.contains('lyrics-footer')) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n const targetTop = Math.max(0, -(paddingTop - activeLine.offsetTop));\n if (atBottom && targetTop > parent.scrollTop - 50) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.setUserScrolling(false);\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n this.clearPastLineHighlights();\n\n const duration = scrollDuration ?? SCROLL_ANIMATION_DURATION_MS;\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, duration + 160);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll, scrollDuration);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(\n syllable: HTMLElement,\n elapsedTimeMs = 0,\n ): 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 isCharRise = wordElement?.classList.contains('char-rise');\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: Grow Pass\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = wordDurationMs;\n const baseDelayPerChar = finalDuration * 0.09;\n const growDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const matrixScale = span.dataset.matrixScale || '1.1';\n const charOffsetX = span.dataset.charOffsetX || '0';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n const syllableCharIndex = parseFloat(\n span.dataset.syllableCharIndex || '0',\n );\n const growDelay = baseDelayPerChar * syllableCharIndex;\n\n charAnimationsMap.set(\n span,\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n styleUpdates.push({\n element: span,\n property: '--matrix-scale',\n value: matrixScale,\n });\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${charOffsetX}px`,\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}px`,\n });\n });\n }\n\n if (isCharRise && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = Math.max(wordDurationMs, syllableDurationMs);\n const baseDelayPerChar = finalDuration * 0.09;\n const riseDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const charIndex = parseFloat(span.dataset.syllableCharIndex || '0');\n const riseDelay = baseDelayPerChar * charIndex;\n charAnimationsMap.set(\n span,\n `rise-char ${riseDurationMs}ms ease-in-out ${riseDelay}ms forwards`,\n );\n });\n }\n\n // Step 2: Wipe Pass\n if (charSpans.length > 0) {\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 - elapsedTimeMs;\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 const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n\n const animationParts = [];\n\n if (\n existingAnimation &&\n (existingAnimation.includes('grow-dynamic') ||\n existingAnimation.includes('rise-char'))\n ) {\n animationParts.push(existingAnimation.split(',')[0].trim());\n }\n if (charIndex > 0) {\n const arrivalTime =\n (span.dataset.preWipeArrival\n ? parseFloat(span.dataset.preWipeArrival)\n : syllableDurationMs * startPct) - elapsedTimeMs;\n const constantDuration = parseFloat(\n span.dataset.preWipeDuration || '100',\n );\n const animDelay = arrivalTime - constantDuration;\n\n if (constantDuration > 0) {\n animationParts.push(\n `pre-wipe-char ${constantDuration}ms linear ${animDelay}ms forwards`,\n );\n }\n }\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n\n if (animationParts.length > 0) {\n charAnimationsMap.set(span, animationParts.join(', '));\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'} ${-elapsedTimeMs}ms 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.willChange = 'transform';\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 const charSpans = syllable.querySelectorAll('span.char');\n for (let i = 0; i < charSpans.length; i += 1) {\n const el = charSpans[i] 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\n /**\n * Reset all syllables in a line — batches deferred cleanup into a single rAF\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n line.classList.remove('persist-highlight');\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n const syllables = line.getElementsByClassName('lyrics-syllable');\n for (let i = 0; i < syllables.length; i += 1) {\n AmLyrics.resetSyllable(syllables[i] as HTMLElement);\n }\n // Batch deferred style cleanup into a single rAF for all syllables in the line\n requestAnimationFrame(() => {\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i] as HTMLElement;\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n const chars = syllable.querySelectorAll('span.char');\n for (let j = 0; j < chars.length; j += 1) {\n const el = chars[j] as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n el.style.removeProperty('will-change');\n }\n }\n });\n }\n\n /**\n * Gentle reset for normal playback: remove highlight/finished classes\n * without forcing inline styles. Lets CSS transition fade syllables\n * back to secondary colour smoothly.\n */\n private static unfinishSyllables(line: HTMLElement): void {\n if (!line) return;\n line.classList.remove('persist-highlight');\n const syllables = line.getElementsByClassName('lyrics-syllable');\n for (let i = 0; i < syllables.length; i += 1) {\n const s = syllables[i] as HTMLElement;\n s.classList.remove('highlight', 'finished', 'pre-highlight', 'cleanup');\n s.style.animation = '';\n s.style.removeProperty('--pre-wipe-duration');\n s.style.removeProperty('--pre-wipe-delay');\n s.style.removeProperty('background-color');\n s.style.removeProperty('transition');\n const chars = s.querySelectorAll('span.char');\n for (let j = 0; j < chars.length; j += 1) {\n const el = chars[j] as HTMLElement;\n el.style.animation = '';\n el.style.removeProperty('will-change');\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n el.style.removeProperty('filter');\n }\n }\n }\n\n private static finishSyllablesUpToTime(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n if (!line) return;\n let hasFinishedSyllable = false;\n\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n (syllable as any)._cachedStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n (syllable as any)._cachedEndTime = parseFloat(\n syllable.getAttribute('data-end-time') || '0',\n );\n }\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 = (syllable as any)._cachedStartTime;\n if (Number.isFinite(startTime) && currentTimeMs >= startTime) {\n const { classList } = syllable;\n if (!classList.contains('finished')) {\n if (!classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(\n syllable,\n Math.max(0, currentTimeMs - startTime),\n );\n }\n classList.add('finished');\n }\n hasFinishedSyllable = true;\n classList.remove('highlight');\n classList.remove('pre-highlight');\n classList.add('cleanup');\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n const chars = syllable.querySelectorAll('span.char');\n for (let ci = 0; ci < chars.length; ci += 1) {\n (chars[ci] as HTMLElement).style.animation = '';\n }\n }\n }\n\n if (hasFinishedSyllable) {\n line.classList.add('persist-highlight');\n } else {\n line.classList.remove('persist-highlight');\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 for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n (syllable as any)._cachedStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n (syllable as any)._cachedEndTime = parseFloat(\n syllable.getAttribute('data-end-time') || '0',\n );\n }\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 = (syllable as any)._cachedStartTime;\n const endTime = (syllable as any)._cachedEndTime;\n\n if (Number.isFinite(startTime) && Number.isFinite(endTime)) {\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(\n syllable,\n currentTimeMs - startTime,\n );\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(\n syllable,\n currentTimeMs - startTime,\n );\n }\n classList.add('finished');\n // Keep the completed wipe state until user scroll resets it.\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\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('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const isUnsynced = this.cachedIsUnsynced;\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 <span class=\"background-vocal-wrap\">\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 no-chars ${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\n class=\"lyrics-syllable-wrap${bgRomanizedText\n ? ' has-transliteration'\n : ''}\"\n ><span\n class=\"lyrics-syllable no-chars${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 data-wipe-ratio=\"1\"\n >${syllable.text}</span\n >${bgRomanizedText}</span\n ></span\n >`;\n })}\n </span>\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 const bgPlacement = hasBackground\n ? AmLyrics.getBackgroundTextPlacement(line)\n : 'after';\n\n const lineData = this.cachedLineData?.[lineIndex];\n const wordGroups = lineData?.wordGroups ?? [];\n const groupGrowable = lineData?.groupGrowable ?? [];\n const groupGlowing = lineData?.groupGlowing ?? [];\n const groupCharRise = lineData?.groupCharRise ?? [];\n const vwFullText = lineData?.vwFullText ?? [];\n const vwFullDuration = lineData?.vwFullDuration ?? [];\n const vwCharOffset = lineData?.vwCharOffset ?? [];\n const lineIsRTL = lineData?.lineIsRTL ?? false;\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p\n class=\"main-vocal-container ${lineIsRTL ? 'rtl-text' : ''}\"\n >\n ${wordGroups.map((group, groupIdx) => {\n const isGrowable = groupGrowable[groupIdx];\n const isGlowing = groupGlowing[groupIdx];\n const isCharRise = groupCharRise[groupIdx];\n const isAnimatedByChar = isGrowable || isCharRise;\n const groupLineSynced = group.some(s => s.lineSynced);\n\n const wordText = isAnimatedByChar ? vwFullText[groupIdx] : '';\n const wordDuration = isAnimatedByChar\n ? vwFullDuration[groupIdx]\n : 0;\n const wordNumChars = wordText.length;\n const groupCharOffset = isAnimatedByChar\n ? vwCharOffset[groupIdx]\n : 0;\n\n let sylCharAccumulator = 0;\n\n const groupText = group.map(s => s.text).join('');\n const shouldAllowBreak =\n groupText.trim().length >= 16 ||\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n groupText,\n );\n\n // Calculate dynamic rise duration based on the audio duration of the word\n const wordStartTimeMs = group[0].timestamp;\n const wordEndTimeMs = group[group.length - 1].endtime;\n const actualDurationMs = wordEndTimeMs - wordStartTimeMs;\n // Base float is 0.8s, plus a portion of the audio duration, capped between 1.0s and 2.5s\n const riseDuration = Math.max(\n 1.2,\n Math.min(2.5, 1.2 + (actualDurationMs / 1000) * 0.6),\n );\n\n return html`<span\n class=\"lyrics-word${isGrowable ? ' growable' : ''}${isCharRise\n ? ' char-rise'\n : ''}${isGlowing ? ' glowing' : ''}${shouldAllowBreak\n ? ' allow-break'\n : ''}\"\n style=\"--rise-duration: ${riseDuration}s\"\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 no-chars ${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 (isAnimatedByChar) {\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-matrix-scale=\"${(charMaxScale * 0.98).toFixed(3)}\"\n data-char-offset-x=\"${(horizontalOffset * 0.98).toFixed(\n 2,\n )}\"\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\n class=\"lyrics-syllable-wrap${romanizedText\n ? ' has-transliteration'\n : ''}\"\n ><span\n class=\"lyrics-syllable${groupLineSynced\n ? ' line-synced'\n : ''}${isAnimatedByChar ? ' has-chars' : ' no-chars'}\"\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 >${romanizedText}</span\n >`;\n })}</span\n >`;\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\n class=\"lyrics-romanization-container ${lineIsRTL\n ? 'rtl-text'\n : ''}\"\n >\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 <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></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></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></span\n ></span>\n </p>\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'} ${lineIsRTL ? 'rtl-text' : ''}\"\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 ${lineIsRTL ? 'rtl-text' : ''}\">\n ${bgPlacement === 'before' ? backgroundVocalElement : ''}\n ${mainVocalElement}\n ${bgPlacement === 'after' ? backgroundVocalElement : ''}\n ${lineRomanizationElement} ${translationElement}\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'}\"\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 lyrics-line\">\n <div class=\"footer-content\">\n <span\n class=\"source-info\"\n style=\"display: flex; align-items: center; gap: 8px;\"\n >\n <b style=\"font-weight: 750;\">Source</b> ${sourceLabel}\n ${(this.availableSources &&\n this.availableSources.length > 1) ||\n !this.hasFetchedAllProviders\n ? html`\n <button\n class=\"download-button source-switch-btn\"\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 class=\"source-switch-svg lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"\n style=\"margin-right: 4px;\"\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 >\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 <span class=\"source-switch-label\"\n >${this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch'}</span\n >\n </button>\n `\n : ''}\n </span>\n ${this.songwriters\n ? html`<span\n class=\"songwriters-info\"\n style=\"margin-top: 4px; font-weight: normal; font-size: 0.9em;\"\n >\n <b style=\"font-weight: 750;\">Songwriters</b> ${this\n .songwriters}\n </span>`\n : ''}\n <span class=\"version-info\" style=\"margin-top: 8px;\">\n <b style=\"font-weight: 750;\">am-lyrics</b> v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style=\"display: inline-flex; align-items: center; gap: 4px;\"\n >Star me on GitHub\n </a>\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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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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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.5.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 SCROLL_ANIMATION_DURATION_MS = 350;\nconst GAP_PULSE_DURATION_MS = 4000;\nconst GAP_PULSE_CYCLE_MS = GAP_PULSE_DURATION_MS * 2;\nconst GAP_EXIT_LEAD_MS = 600;\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-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 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 songwriters?: string;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n songwriters?: string;\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 songwriters?: 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 --char-rise-y: calc(-0.035 * var(--lyplus-font-size-base));\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 overflow-anchor: none;\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 filter: 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 filter: none !important;\n }\n\n .lyrics-line.scroll-animate {\n /* Preserve the graceful fade duration; the keyframe handles the\n transform, so we only need to keep opacity/filter transitions\n alive without !important overriding the base rule. */\n transition:\n opacity 0.7s ease,\n filter 0.7s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms);\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 400ms);\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 /* Graceful 0.7 s fade so the line stays mostly bright while the\n 0.4 s scroll animation runs, then settles into the inactive state. */\n transition:\n opacity 0.7s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.7s ease;\n content-visibility: auto;\n contain: layout style;\n text-rendering: optimizeLegibility;\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: translateZ(0);\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: translateZ(0);\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 overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n line-height: 1.15;\n color: color-mix(in srgb, var(--lyplus-text-secondary) 80%, transparent);\n /* Fast exit (0.25 s) so bg vocals collapse quickly and feel snappy.\n The scroll takes ~0.4 s; finishing the collapse first prevents\n the container from trailing behind the motion. */\n transition:\n max-height 250ms cubic-bezier(0.41, 0, 0.12, 0.99),\n opacity 250ms cubic-bezier(0.41, 0, 0.12, 0.99);\n margin: 0;\n pointer-events: none;\n }\n\n .background-vocal-wrap {\n display: block;\n padding-top: 0;\n padding-bottom: 0;\n transition: padding-top 250ms cubic-bezier(0.41, 0, 0.12, 0.99);\n }\n\n .lyrics-line.singer-right .background-vocal-container,\n .lyrics-line.rtl-text .background-vocal-container {\n margin-left: auto;\n margin-right: 0;\n }\n\n /* Background vocals expand only when .bg-expanded is present.\n This is separate from .active so bg vocals can collapse immediately\n while .active stays to keep text white until the scroll passes. */\n .lyrics-line.bg-expanded .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n /* Slower entry (0.6 s) so bg vocals expand smoothly. */\n transition:\n max-height 0.6s ease,\n opacity 0.6s ease;\n will-change: max-height, opacity;\n }\n\n .lyrics-line.bg-expanded .background-vocal-wrap {\n padding-top: 0.26em;\n transition: padding-top 0.6s ease;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n }\n\n .lyrics-line.pre-active {\n opacity: 1;\n }\n\n .lyrics-line.persist-highlight {\n filter: none !important;\n opacity: 1;\n }\n\n .lyrics-line.persist-highlight .lyrics-syllable.finished,\n .lyrics-line.persist-highlight .lyrics-syllable.finished span.char {\n transition: none !important;\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 text-align: right !important;\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text .lyrics-line-container,\n .lyrics-line.rtl-text .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text .lyrics-romanization-container,\n .lyrics-line.rtl-text .lyrics-translation-container {\n text-align: right;\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 filter: none !important;\n opacity: 1 !important;\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):not(\n .persist-highlight\n ) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n /* Viewport Virtualization: Strip expensive filters and animations from\n offscreen lines. IntersectionObserver toggles this class. */\n .lyrics-line.far-line {\n filter: none !important;\n will-change: auto !important;\n animation: none !important;\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 ):not(.persist-highlight),\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 ):not(.persist-highlight),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap):not(\n .pre-active\n ):not(.persist-highlight) {\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 transition: none !important;\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 white-space: nowrap;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-word.char-rise {\n display: inline-block;\n vertical-align: baseline;\n white-space: nowrap;\n }\n\n .lyrics-word.char-rise.allow-break {\n display: inline;\n white-space: normal;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap.has-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 /* Unified transition: transform keeps its 1s glow decay, while\n background-color and color fade at 0.7s so everything dims\n together when the line becomes inactive. */\n transition:\n transform 1s ease,\n background-color 0.7s ease,\n color 0.7s ease;\n }\n\n .lyrics-syllable.finished.has-chars {\n background-color: transparent;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.no-chars,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.no-chars {\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 0%;\n }\n\n /* Background vocals: muted gray wipe instead of white.\n Must match specificity of the main .active .highlight rule (0,3,1). */\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.highlight.no-chars,\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.no-chars,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.highlight.no-chars,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.no-chars {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n color-mix(in srgb, var(--lyplus-text-primary, #fff) 50%, #888888) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--lyplus-text-primary, #fff) 50%, #888888) 100%,\n #0000 100%\n );\n }\n\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.rtl-text,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.pre-highlight.rtl-text {\n background-image:\n linear-gradient(\n -90deg,\n color-mix(in srgb, var(--lyplus-text-primary) 50%, #888888) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n color-mix(in srgb, var(--lyplus-text-primary) 50%, #888888) 100%,\n transparent 100%\n );\n }\n\n /* Non-growable words float up with a gentle curve */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\n }\n\n .lyrics-line.persist-highlight:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.finished {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\n }\n\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\n }\n\n .lyrics-word.char-rise .lyrics-syllable.cleanup .char {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\n }\n\n .lyrics-line.persist-highlight\n .lyrics-word.growable\n .lyrics-syllable.finished\n .char,\n .lyrics-line.persist-highlight\n .lyrics-word.char-rise\n .lyrics-syllable.finished\n .char {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\n }\n\n /* Background vocal overrides — placed AFTER main rules so they win\n on equal specificity. */\n .background-vocal-container .lyrics-syllable {\n background-color: color-mix(\n in srgb,\n var(--lyplus-text-secondary) 50%,\n #888888\n );\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.finished,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.finished {\n background-color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n );\n }\n\n .background-vocal-container .lyrics-syllable.line-synced {\n color: color-mix(\n in srgb,\n var(--lyplus-text-secondary) 50%,\n #888888\n ) !important;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.line-synced,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.line-synced {\n color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n ) !important;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .background-vocal-container\n .lyrics-syllable.line-synced.finished,\n .lyrics-line.pre-active\n .background-vocal-container\n .lyrics-syllable.line-synced.finished {\n color: color-mix(\n in srgb,\n var(--lyplus-text-primary) 50%,\n #888888\n ) !important;\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-chars: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 backface-visibility: hidden;\n transform-origin: 50% 80%;\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 background-color: var(--lyplus-text-primary);\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\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 transition:\n transform 0.7s ease,\n color 0.18s;\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: 1.6em;\n padding: var(--lyplus-padding-gap);\n overflow: visible;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transform-origin: top;\n content-visibility: visible !important;\n contain: none !important;\n transition:\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms) var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n opacity: 1;\n transition:\n opacity 160ms ease-out,\n transform var(--scroll-duration, 280ms);\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 opacity: 1;\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1);\n transition: transform 400ms cubic-bezier(0.22, 1, 0.36, 1);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0);\n }\n\n /* Pulse — must come BEFORE .gap-exiting so exiting wins via specificity+order */\n .lyrics-gap.active .main-vocal-container {\n animation: gap-loop var(--gap-pulse-duration, 4000ms) ease-in-out infinite\n alternate;\n animation-delay: var(--gap-loop-delay, 0ms);\n }\n\n /* Jump animation plays during exit — disable transition so animation wins.\n Placed AFTER .active so it wins when both classes are present briefly. */\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 transition: none !important;\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.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable.finished,\n .lyrics-gap:not(.active):not(.gap-exiting).post-active-line\n .lyrics-syllable,\n .lyrics-gap:not(.active):not(.gap-exiting).lyrics-activest\n .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\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));\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));\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: calc(var(--lyplus-font-size-base) * 0.5);\n color: var(--lyplus-text-secondary);\n padding: 20px 0 50vh 0;\n margin-top: 10px;\n font-weight: 400;\n opacity: 0.8;\n transition:\n opacity 0.3s ease,\n transform 0.5s cubic-bezier(0.41, 0, 0.12, 0.99),\n filter 0.3s ease;\n transform-origin: left;\n }\n\n .lyrics-footer.lyrics-line {\n font-size: calc(var(--lyplus-font-size-base) * 0.5);\n padding: 20px var(--lyplus-padding-line) 50vh var(--lyplus-padding-line);\n margin-top: 0;\n }\n\n .lyrics-footer.active {\n opacity: 1;\n color: rgba(255, 255, 255, 0.5); /* Grey instead of primary */\n }\n\n .lyrics-footer.scroll-animate {\n transition: none !important;\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.blur-inactive-enabled:not(.not-focused)\n .lyrics-footer:not(.active) {\n filter: blur(var(--lyplus-blur-amount));\n opacity: 0.5;\n }\n\n .lyrics-container.user-scrolling .lyrics-footer {\n transition: none !important;\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: var(--lyplus-text-primary); /* Stand out using primary color */\n text-underline-offset: 2px;\n opacity: 0.8;\n transition: opacity 0.2s;\n }\n\n .lyrics-footer a:hover {\n opacity: 1;\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 text-align: right;\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.75em 0%,\n -0.375em 0%;\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) 0%;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right 0%;\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) 0%;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right 0%;\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 0%;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right 0%;\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.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 /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: translateY(-25%) scale(1.12);\n }\n to {\n transform: translateY(-25%) 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 }\n 35% {\n transform: translateY(-25%) scale(1.2);\n }\n 100% {\n transform: translateY(-25%) scale(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: translate3d(0, var(--scroll-delta), 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }\n\n /* Character grow animation — translate3d+scale3d for smooth transform,\n drop-shadow for glow */\n @keyframes grow-dynamic {\n 0% {\n transform: translate3d(0, 0, 0) scale3d(1, 1, 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: translate3d(\n var(--char-offset-x, 0px),\n var(--translate-y-peak, -2px),\n 0\n )\n scale3d(var(--matrix-scale, 1.1), var(--matrix-scale, 1.1), 1);\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 75%,\n 100% {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0)\n scale3d(1, 1, 1);\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 rise-char {\n 0% {\n transform: translate3d(0, 0, 0);\n }\n 65%,\n 100% {\n transform: translate3d(0, var(--char-rise-y, -1.12px), 0);\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: String, attribute: 'songwriters' })\n songwriters?: 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: 'font-family' })\n fontFamily: string | undefined;\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\n // If the new time is significantly smaller than the old time (e.g. song looped)\n if (value < oldValue && oldValue - value > 1000 && this.lyrics) {\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.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n\n // Stop all running animations and clear highlights immediately\n if (this.lyricsContainer) {\n const activeLines = this.lyricsContainer.querySelectorAll(\n '.lyrics-line.active, .lyrics-line.pre-active, .lyrics-line.bg-expanded',\n );\n activeLines.forEach(line => {\n line.classList.remove('active', 'pre-active', 'bg-expanded');\n AmLyrics.resetSyllables(line as HTMLElement);\n });\n\n const activeGaps = this.lyricsContainer.querySelectorAll(\n '.lyrics-gap.active, .lyrics-gap.gap-exiting',\n );\n activeGaps.forEach(gap =>\n gap.classList.remove('active', 'gap-exiting'),\n );\n\n // Reset gap cache since we manually messed with the elements\n this.gapElementCache.clear();\n }\n }\n\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: YouLyPlusLyricsResult[] = [];\n\n @state()\n private currentSourceIndex = 0;\n\n private isFetchingAlternatives = false;\n\n private hasFetchedAllProviders = false;\n\n private _updateFooter() {\n const footer = this.shadowRoot?.querySelector('.lyrics-footer');\n if (!footer) return;\n const switchBtn = footer.querySelector('.source-switch-btn');\n const svgEl = footer.querySelector('.source-switch-svg');\n const labelEl = footer.querySelector('.source-switch-label');\n if (switchBtn) {\n (switchBtn as HTMLButtonElement).disabled = this.isFetchingAlternatives;\n }\n if (svgEl) {\n svgEl.setAttribute(\n 'style',\n `margin-right: 4px; ${this.isFetchingAlternatives ? 'animation: spin 1s linear infinite;' : ''}`,\n );\n }\n if (labelEl) {\n labelEl.textContent = this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch';\n }\n }\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 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 // Cached line elements array for scroll/position queries\n private cachedLineArray: HTMLElement[] = [];\n\n // Cached line and gap element maps for fast lookup\n private lineElementCache = new Map<number, HTMLElement>();\n\n private gapElementCache = new Map<number, HTMLElement>();\n\n // Cached gap computation results\n private cachedAllGaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Cached isUnsynced flag\n private cachedIsUnsynced = false;\n\n // Cached pre-computed line data for render\n private cachedLineData: Array<{\n wordGroups: Syllable[][];\n groupGrowable: boolean[];\n groupGlowing: boolean[];\n groupCharRise: boolean[];\n vwFullText: string[];\n vwFullDuration: number[];\n vwCharOffset: number[];\n vwStartMs: number[];\n vwEndMs: number[];\n lineIsRTL: boolean;\n }> | null = null;\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 scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollUnlockTimeout?: 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 // IntersectionObserver for viewport virtualization\n private visibilityObserver?: IntersectionObserver;\n\n // Cached scroll padding top value\n private cachedScrollPaddingTop: number | null = null;\n\n // Cached element tracking to avoid repeated querySelectorAll calls\n private preActiveLineElements: HTMLElement[] = [];\n\n private positionedLineElements: HTMLElement[] = [];\n\n private activeGapLineElements: HTMLElement[] = [];\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.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = 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 this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = undefined;\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 this._updateFooter();\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: YouLyPlusLyricsResult[] = [];\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const title = resolvedMetadata.metadata.title?.trim() || '';\n const artist = resolvedMetadata.metadata.artist?.trim() || '';\n\n const biniResult = await AmLyrics.fetchLyricsFromBiniLyrics(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n );\n if (biniResult && biniResult.lines.length > 0) {\n collectedSources.push(biniResult);\n }\n\n const hasWordSync = (sources: YouLyPlusLyricsResult[]) =>\n sources.some(s =>\n s.lines.some(l => l.isWordSynced || (l.text && l.text.length > 1)),\n );\n\n if (collectedSources.length === 0 || !hasWordSync(collectedSources)) {\n const unisonResult = await AmLyrics.fetchLyricsFromUnison(\n resolvedMetadata.metadata,\n );\n if (unisonResult && unisonResult.lines.length > 0) {\n collectedSources.push(unisonResult);\n }\n }\n\n if (collectedSources.length === 0 || !hasWordSync(collectedSources)) {\n const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n true,\n );\n\n if (youLyResults && youLyResults.length > 0) {\n collectedSources.push(...youLyResults);\n }\n }\n }\n\n const hasLineSync = (sources: YouLyPlusLyricsResult[]) =>\n sources.some(s => s.lines.some(l => l.timestamp > 0 || l.endtime > 0));\n\n if (\n (collectedSources.length === 0 || !hasLineSync(collectedSources)) &&\n resolvedMetadata?.metadata\n ) {\n // Fallback: LRCLIB\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 => s.source === 'LRCLIB' || s.source === 'Genius',\n );\n this._updateFooter();\n\n if (collectedSources.length > 0) {\n this.availableSources = AmLyrics.mergeAndSortSources(collectedSources);\n\n this.currentSourceIndex = 0;\n const sourceResult = this.availableSources[0];\n this.lyrics = sourceResult.lines;\n this.lyricsSource = sourceResult.source;\n if (sourceResult.songwriters) {\n this.songwriters = sourceResult.songwriters;\n }\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 this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\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 (lower.includes('bini') && hasWordSync) return 2;\n if (lower.includes('unison') && hasWordSync) return 3;\n if (isQQ && hasWordSync) return 4;\n if (lower.includes('musixmatch') && hasWordSync) return 5;\n if (lower.includes('lrclib') && hasWordSync) return 6;\n if (hasWordSync) return 7;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('bini') && !hasWordSync && !isUnsynced) return 9;\n if (lower.includes('unison') && !hasWordSync && !isUnsynced) return 10;\n if (isQQ && !hasWordSync && !isUnsynced) return 11;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced) return 12;\n if (lower.includes('lrclib') && !hasWordSync && !isUnsynced) return 13;\n if (!hasWordSync && !isUnsynced) return 14;\n\n if (lower.includes('apple') && isUnsynced) return 15;\n if (lower.includes('bini') && isUnsynced) return 16;\n if (lower.includes('unison') && isUnsynced) return 17;\n if (isQQ && isUnsynced) return 18;\n if (lower.includes('musixmatch') && isUnsynced) return 19;\n if (lower.includes('lrclib') && isUnsynced) return 20;\n if (lower.includes('genius')) return 21;\n\n return 30;\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 this._updateFooter();\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n if (resolvedMetadata?.metadata) {\n const newSources: YouLyPlusLyricsResult[] = [];\n\n // Try Unison if not fetched\n if (\n !this.availableSources.some(s =>\n s.source.toLowerCase().includes('unison'),\n )\n ) {\n const unisonResult = await AmLyrics.fetchLyricsFromUnison(\n resolvedMetadata.metadata,\n );\n if (unisonResult && unisonResult.lines.length > 0) {\n newSources.push(unisonResult);\n }\n }\n\n // Try YouLyPlus (KPoe) if we don't have Apple or QQ\n if (\n !this.availableSources.some(\n s =>\n s.source.toLowerCase().includes('apple') ||\n s.source.toLowerCase().includes('qq'),\n )\n ) {\n const title = resolvedMetadata.metadata.title?.trim() || '';\n const artist = resolvedMetadata.metadata.artist?.trim() || '';\n const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(\n title,\n artist,\n resolvedMetadata.catalogIsrc,\n resolvedMetadata.metadata,\n true,\n );\n if (youLyResults && youLyResults.length > 0) {\n newSources.push(...youLyResults);\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 this._updateFooter();\n }\n }\n\n if (this.availableSources.length > 1) {\n this.currentSourceIndex =\n (this.currentSourceIndex + 1) % this.availableSources.length;\n const sourceResult = this.availableSources[this.currentSourceIndex];\n this.lyrics = sourceResult.lines;\n this.lyricsSource = sourceResult.source;\n if (sourceResult.songwriters) {\n this.songwriters = sourceResult.songwriters;\n }\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 songwriters: this.songwriters?.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 (!metadata.songwriters && catalogResult.songwriters) {\n metadata.songwriters = catalogResult.songwriters;\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 fetchLyricsFromBiniLyrics(\n title: string,\n artist: string,\n isrc?: string,\n metadata: { durationMs?: number; album?: string } = {},\n ): Promise<YouLyPlusLyricsResult | null> {\n if ((!title || !artist) && !isrc) return null;\n\n try {\n let cacheData: any = null;\n\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 {\n // Fall through to title/artist search\n }\n }\n\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.lyricsUrl) {\n const ttmlRes = await fetchWithTimeout(result.lyricsUrl);\n if (ttmlRes.ok) {\n const ttmlText = await ttmlRes.text();\n const parseResult = AmLyrics.parseTTML(ttmlText);\n if (parseResult && parseResult.lines.length > 0) {\n return {\n lines: parseResult.lines,\n source: 'BiniLyrics',\n songwriters: parseResult.songwriters,\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 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 skipBiniCache = false,\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 (lower.includes('bini') && hasWordSync) return 2;\n if (lower.includes('unison') && hasWordSync) return 3;\n if (isQQ && hasWordSync) return 4;\n if (lower.includes('musixmatch') && hasWordSync) return 5;\n if (hasWordSync) return 6;\n\n if (lower.includes('apple') && !hasWordSync && !isUnsynced) return 7;\n if (lower.includes('bini') && !hasWordSync && !isUnsynced) return 8;\n if (lower.includes('unison') && !hasWordSync && !isUnsynced) return 9;\n if (isQQ && !hasWordSync && !isUnsynced) return 10;\n if (lower.includes('musixmatch') && !hasWordSync && !isUnsynced)\n return 11;\n if (!hasWordSync && !isUnsynced) return 12;\n\n if (lower.includes('apple') && isUnsynced) return 13;\n if (lower.includes('bini') && isUnsynced) return 14;\n if (lower.includes('unison') && isUnsynced) return 15;\n if (isQQ && isUnsynced) return 16;\n if (lower.includes('musixmatch') && isUnsynced) return 17;\n\n return 30;\n };\n\n const allResults: YouLyPlusLyricsResult[] = [];\n\n if (!skipBiniCache) {\n const biniResult = await AmLyrics.fetchLyricsFromBiniLyrics(\n title,\n artist,\n isrc,\n metadata,\n );\n if (biniResult) {\n allResults.push(biniResult);\n return allResults;\n }\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 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 async fetchLyricsFromUnison(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n if (!title || !artist) return null;\n\n const params = new URLSearchParams();\n params.append('song', title);\n params.append('artist', artist);\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n try {\n const response = await fetchWithTimeout(\n `https://unison.boidu.dev/lyrics?${params.toString()}`,\n );\n if (!response.ok) return null;\n\n const data = await response.json();\n if (!data.success || !data.data?.lyrics) return null;\n\n const lyricsData = data.data;\n const format = lyricsData.format || 'lrc';\n const syncType = lyricsData.syncType || 'linesync';\n const lyricsText = lyricsData.lyrics;\n\n if (format === 'ttml') {\n const parseResult = AmLyrics.parseTTML(lyricsText);\n if (parseResult && parseResult.lines.length > 0) {\n return {\n lines: parseResult.lines,\n source: 'Unison',\n songwriters: parseResult.songwriters,\n };\n }\n }\n\n if (format === 'lrc') {\n if (syncType === 'plain') {\n const plainLines = lyricsText\n .split('\\n')\n .map((l: string) => l.trim())\n .filter((l: string) => l);\n if (plainLines.length > 0) {\n const lines: LyricsLine[] = plainLines.map(\n (text: string): LyricsLine => ({\n text: [{ text, part: false, timestamp: 0, endtime: 0 }],\n background: false,\n backgroundText: [],\n oppositeTurn: false,\n timestamp: 0,\n endtime: 0,\n isWordSynced: false,\n }),\n );\n return { lines, source: 'Unison (unsynced)' };\n }\n } else {\n const lines = AmLyrics.parseLrcSubtitles(lyricsText);\n if (lines.length > 0) {\n return { lines, source: 'Unison' };\n }\n }\n }\n } catch {\n // Unison fetch failed\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(\n ttmlString: string,\n ): { lines: LyricsLine[]; songwriters?: string } | 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 let songwriters: string | undefined;\n const songwritersNodes = doc.getElementsByTagName('songwriter');\n if (songwritersNodes.length > 0) {\n const names: string[] = [];\n for (let i = 0; i < songwritersNodes.length; i += 1) {\n if (songwritersNodes[i].textContent) {\n names.push(songwritersNodes[i].textContent!);\n }\n }\n if (names.length > 0) {\n songwriters = names.join(', ');\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: !/\\s$/.test(bgText),\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: !/\\s$/.test(text),\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, songwriters };\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 if (this.lyricsContainer) {\n // Remove .active and .bg-expanded immediately when a line drops.\n // All visual fading is handled by CSS transitions — no JS delays,\n // so overlapping lyrics never get stuck with multiple .active lines.\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n if (isSeek || this.isUserScrolling) {\n AmLyrics.unfinishSyllables(lineElement);\n } else {\n AmLyrics.finishSyllablesUpToTime(lineElement, newTime);\n }\n\n lineElement.classList.remove('active', 'bg-expanded');\n\n if (lineElement.classList.contains('pre-active')) {\n lineElement.classList.remove('pre-active');\n }\n const preIdx = this.preActiveLineElements.indexOf(lineElement);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n }\n }\n\n // Add 'active' and 'bg-expanded' to newly active lines\n for (const lineIndex of newActiveLines) {\n if (!oldActiveLines.includes(lineIndex)) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n lineElement.classList.add('active', 'bg-expanded');\n lineElement.classList.remove('pre-active');\n const preIdx = this.preActiveLineElements.indexOf(lineElement);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n }\n }\n\n // Remove pre-active from lines that are now active (they no longer\n // need the unblur preview class) and from lines that dropped.\n for (const lineElement of this.preActiveLineElements) {\n const idx = AmLyrics.getLineIndexFromElement(lineElement);\n if (\n idx === null ||\n (!newActiveLines.includes(idx) &&\n lineElement !== this.currentPrimaryActiveLine)\n ) {\n lineElement.classList.remove('pre-active');\n }\n }\n this.preActiveLineElements = this.preActiveLineElements.filter(el =>\n el.classList.contains('pre-active'),\n );\n }\n\n this.startAnimationFromTime(newTime);\n }\n\n // Predictive scroll: run on every tick so we scroll *before* the next\n // line starts, matching YouLyPlus behaviour.\n this._handleActiveLineScroll(oldActiveLines, isSeek);\n this.clearPastLineHighlights();\n\n if (this.lyricsContainer) {\n // Update syllables in active lines using cached elements\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this._getLineElement(lineIndex);\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n for (const gapLine of this.activeGapLineElements) {\n AmLyrics.updateSyllablesForLine(gapLine, newTime);\n }\n\n // Imperatively manage gap active state\n if (this.gapElementCache.size > 0) {\n for (const [, gap] of this.gapElementCache) {\n const gapStartTime =\n (gap as any)._cachedStartTime ??\n parseFloat(gap.getAttribute('data-start-time') || '0');\n const gapEndTime =\n (gap as any)._cachedEndTime ??\n parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive =\n newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && (!isActive || isSeek) && !isExiting) {\n gap.classList.remove('gap-exiting');\n if (isSeek && isActive) {\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth; // Force reflow\n }\n const gapDuration = gapEndTime - gapStartTime;\n const baseLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n const totalDelay = baseLoopDelay + (newTime - gapStartTime);\n (gap as HTMLElement).style.setProperty(\n '--gap-loop-delay',\n `-${totalDelay}ms`,\n );\n gap.classList.add('active');\n if (!this.activeGapLineElements.includes(gap as HTMLElement)) {\n this.activeGapLineElements.push(gap as HTMLElement);\n }\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(\n dot.getAttribute('data-end-time') || '0',\n );\n if (newTime > dotEnd) {\n dot.classList.add('finished');\n if (!dot.classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(\n dot as HTMLElement,\n newTime - dotStart,\n );\n }\n } else if (newTime >= dotStart && newTime <= dotEnd) {\n AmLyrics.updateSyllableAnimation(\n dot as HTMLElement,\n newTime - dotStart,\n );\n }\n });\n } else if (shouldStartExiting) {\n // Cancel gap-loop first, force reflow, then start gap-ended\n // so the browser sees a clean animation swap\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth;\n gap.classList.add('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (!shouldBeActive && (isActive || isExiting)) {\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n gap.classList.remove('gap-exiting');\n }\n }\n } else if (this.lyricsContainer) {\n // Fallback: no cache yet, use querySelectorAll\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(\n gap.getAttribute('data-end-time') || '0',\n );\n const shouldBeActive =\n newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n const exitLeadMs = GAP_EXIT_LEAD_MS;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && (!isActive || isSeek) && !isExiting) {\n gap.classList.remove('gap-exiting');\n if (isSeek && isActive) {\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth; // Force reflow\n }\n const gapDuration = gapEndTime - gapStartTime;\n const baseLoopDelay = AmLyrics.getGapLoopDelay(gapDuration);\n const totalDelay = baseLoopDelay + (newTime - gapStartTime);\n (gap as HTMLElement).style.setProperty(\n '--gap-loop-delay',\n `-${totalDelay}ms`,\n );\n gap.classList.add('active');\n if (!this.activeGapLineElements.includes(gap as HTMLElement)) {\n this.activeGapLineElements.push(gap as HTMLElement);\n }\n } else if (shouldStartExiting) {\n // Cancel gap-loop first, force reflow, then start gap-ended\n gap.classList.remove('active');\n // eslint-disable-next-line no-void\n void (gap as HTMLElement).offsetWidth;\n gap.classList.add('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, GAP_EXIT_LEAD_MS);\n } else if (!shouldBeActive && (isActive || isExiting)) {\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n const gapIdx = this.activeGapLineElements.indexOf(\n gap as HTMLElement,\n );\n if (gapIdx !== -1) this.activeGapLineElements.splice(gapIdx, 1);\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n gap.classList.remove('gap-exiting');\n }\n });\n }\n\n // Track instrumental gap state\n const currentGap = this.findInstrumentalGapAt(newTime);\n if (currentGap) {\n this.lastInstrumentalIndex = currentGap.insertBeforeIndex;\n // Un-highlight the previous line immediately when gap dots are playing\n if (currentGap.insertBeforeIndex > 0) {\n const prevLine = this._getLineElement(\n currentGap.insertBeforeIndex - 1,\n );\n if (\n prevLine &&\n prevLine.classList.contains('persist-highlight') &&\n !prevLine.classList.contains('active')\n ) {\n AmLyrics.unfinishSyllables(prevLine);\n }\n }\n } else if (this.lastInstrumentalIndex !== null) {\n this.lastInstrumentalIndex = null;\n }\n\n // Check footer active state\n const lastLyric =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics[this.lyrics.length - 1]\n : null;\n const footer = this.lyricsContainer.querySelector(\n '.lyrics-footer',\n ) as HTMLElement;\n if (footer && lastLyric && lastLyric.endtime > 0) {\n const isFooterActive = newTime > lastLyric.endtime + 200; // Snappier 200ms buffer\n if (isFooterActive && !footer.classList.contains('active')) {\n footer.classList.add('active');\n // Clear pre-active from the last lyric so it doesn't stay\n // unblurred when the footer takes over.\n const lastLine = this.lyricsContainer.querySelector(\n '.lyrics-line:last-of-type',\n ) as HTMLElement;\n if (lastLine) {\n lastLine.classList.remove('pre-active');\n const preIdx = this.preActiveLineElements.indexOf(lastLine);\n if (preIdx !== -1) this.preActiveLineElements.splice(preIdx, 1);\n }\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.focusLine(footer);\n }\n } else if (!isFooterActive && footer.classList.contains('active')) {\n footer.classList.remove('active');\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n this._invalidateCaches();\n this._ensureLineDataCache();\n this._updateCachedIsUnsynced();\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._getLineElement(lineIndex);\n if (lineEl) lineEl.classList.add('active', 'bg-expanded');\n }\n\n // Trigger a faux time-change so that updateSyllablesForLine fires\n // to setup inline syllable CSS wipe animations for whatever the current time is\n this._onTimeChanged(0, this.currentTime);\n\n // Ensure position classes are applied on initial render if not playing yet\n if (this.positionedLineElements.length === 0) {\n const firstLine = this.lyricsContainer.querySelector(\n '.lyrics-line',\n ) as HTMLElement;\n if (firstLine) this.updatePositionClasses(firstLine);\n }\n\n // Set up IntersectionObserver for viewport virtualization\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n const el = entry.target as HTMLElement;\n el.classList.toggle('far-line', !entry.isIntersecting);\n });\n },\n {\n root: this.lyricsContainer,\n rootMargin: '200px',\n threshold: 0,\n },\n );\n const lines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n lines.forEach(line => this.visibilityObserver!.observe(line));\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.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.setUserScrolling(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 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 // 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 * Uses predictive scroll like YouLyPlus: computes a scrollLookAheadMs based\n * on the gap to the next line, finds the primary line at predictiveTime,\n * and scrolls with a duration matching the lookahead.\n */\n private _handleActiveLineScroll(\n _oldActiveIndices: number[],\n forceScroll = false,\n ): void {\n if (!this.lyricsContainer || !this.lyrics || this.lyrics.length === 0) {\n return;\n }\n\n // If the footer is already active, it set up its own scroll.\n // Don't override it with a scroll back to the last lyric.\n const footer = this.lyricsContainer.querySelector('.lyrics-footer');\n if (footer?.classList.contains('active')) {\n return;\n }\n\n // 1. Compute scroll lookahead based on gap to next line (YouLyPlus style)\n let scrollLookAheadMs = 350;\n let currentAudioIndex = -1;\n for (let i = 0; i < this.lyrics.length; i += 1) {\n if (this.lyrics[i].timestamp > this.currentTime) {\n currentAudioIndex = i - 1;\n break;\n }\n }\n if (currentAudioIndex === -1 && this.lyrics.length > 0) {\n if (this.currentTime >= this.lyrics[this.lyrics.length - 1].timestamp) {\n currentAudioIndex = this.lyrics.length - 1;\n }\n }\n\n if (\n currentAudioIndex !== -1 &&\n currentAudioIndex + 1 < this.lyrics.length\n ) {\n const currentLine = this.lyrics[currentAudioIndex];\n const nextLine = this.lyrics[currentAudioIndex + 1];\n const gap = nextLine.timestamp - currentLine.endtime;\n scrollLookAheadMs = Math.min(500, Math.max(350, gap));\n }\n\n // 2. Find scroll target at predictive time\n const predictiveTime = this.currentTime + scrollLookAheadMs;\n const predictiveActiveIndices = this.findActiveLineIndices(predictiveTime);\n\n let targetElement: HTMLElement | null = null;\n\n if (predictiveActiveIndices.length > 0) {\n const targetLineIdx = this.getPrimaryScrollLineIndex(\n predictiveActiveIndices,\n predictiveTime,\n );\n if (targetLineIdx !== null && targetLineIdx !== -1) {\n targetElement = this._getLineElement(targetLineIdx);\n }\n }\n\n if (!targetElement) {\n // Fallback: closest line before predictiveTime\n const targetLineIdx = this.getLineIndexAtTime(predictiveTime, 0);\n if (targetLineIdx !== null && targetLineIdx !== -1) {\n targetElement = this._getLineElement(targetLineIdx);\n }\n }\n if (!targetElement) return;\n\n // Unblur the upcoming target line early (pre-active) so background\n // vocals start their max-height/opacity transition in sync with scroll.\n if (!targetElement.classList.contains('active')) {\n targetElement.classList.add('pre-active');\n if (!this.preActiveLineElements.includes(targetElement)) {\n this.preActiveLineElements.push(targetElement);\n }\n }\n\n const scrollDuration = scrollLookAheadMs;\n\n this.focusLine(targetElement, forceScroll, scrollDuration);\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 _rebuildDomCache() {\n if (!this.lyricsContainer) return;\n\n this.lineElementCache.clear();\n this.gapElementCache.clear();\n this.cachedLineArray = [];\n\n if (!this.lyrics) return;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const lineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement | null;\n if (lineEl) this.lineElementCache.set(i, lineEl);\n\n const gapEl = this.lyricsContainer.querySelector(\n `#gap-${i}`,\n ) as HTMLElement | null;\n if (gapEl) {\n // Cache numeric timing values to avoid parseFloat on every frame\n (gapEl as any)._cachedStartTime = parseFloat(\n gapEl.getAttribute('data-start-time') || '0',\n );\n (gapEl as any)._cachedEndTime = parseFloat(\n gapEl.getAttribute('data-end-time') || '0',\n );\n this.gapElementCache.set(i, gapEl);\n }\n }\n\n // Rebuild cached line array for scroll/position queries\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n this.cachedLineArray = Array.from(lineElements) as HTMLElement[];\n }\n\n private _getLineElement(index: number): HTMLElement | null {\n const cached = this.lineElementCache.get(index);\n if (cached) return cached;\n if (!this.lyricsContainer) return null;\n const el = this.lyricsContainer.querySelector(\n `#lyrics-line-${index}`,\n ) as HTMLElement | null;\n if (el) this.lineElementCache.set(index, el);\n return el;\n }\n\n private _getGapElement(index: number): HTMLElement | null {\n const cached = this.gapElementCache.get(index);\n if (cached) return cached;\n if (!this.lyricsContainer) return null;\n const el = this.lyricsContainer.querySelector(\n `#gap-${index}`,\n ) as HTMLElement | null;\n if (el) this.gapElementCache.set(index, el);\n return el;\n }\n\n private _invalidateCaches() {\n this.cachedAllGaps = [];\n this.cachedIsUnsynced = false;\n this.cachedLineData = null;\n this.lineElementCache.clear();\n this.gapElementCache.clear();\n this.cachedLineArray = [];\n this.cachedScrollPaddingTop = null;\n this.preActiveLineElements = [];\n this.positionedLineElements = [];\n this.activeGapLineElements = [];\n this.visibilityObserver?.disconnect();\n this.visibilityObserver = undefined;\n }\n\n private _updateCachedIsUnsynced() {\n this.cachedIsUnsynced =\n this.lyrics && this.lyrics.length > 0\n ? this.lyrics.every(l => l.timestamp === 0 && l.endtime === 0)\n : false;\n }\n\n private _ensureLineDataCache() {\n if (this.cachedLineData || !this.lyrics) return;\n\n this.cachedLineData = this.lyrics.map(line => {\n const wordGroups: Syllable[][] = [];\n let currentGroupBuffer: Syllable[] = [];\n\n line.text.forEach((syllable, idx) => {\n currentGroupBuffer.push(syllable);\n const nextSyllable = line.text[idx + 1];\n\n const endsWithDelimiter =\n !nextSyllable ||\n syllable.part === false ||\n /\\s$/.test(syllable.text) ||\n (nextSyllable &&\n (syllable as any).isBackground !==\n (nextSyllable as any).isBackground);\n\n if (endsWithDelimiter) {\n wordGroups.push(currentGroupBuffer);\n currentGroupBuffer = [];\n }\n });\n\n if (currentGroupBuffer.length > 0) {\n wordGroups.push(currentGroupBuffer);\n }\n\n const groupGrowable: boolean[] = new Array(wordGroups.length).fill(false);\n const groupGlowing: boolean[] = new Array(wordGroups.length).fill(false);\n const groupCharRise: boolean[] = new Array(wordGroups.length).fill(false);\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 lineIsRTL = false;\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 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 if (isRTL) lineIsRTL = true;\n const hasHyphen = combinedText.includes('-');\n\n const wordLen = combinedText.length;\n let isGrowableVW =\n !isCJK && !isRTL && !hasHyphen && wordLen > 0 && wordLen <= 7;\n if (isGrowableVW) {\n if (wordLen < 3) {\n isGrowableVW =\n combinedDuration >= 1050 && combinedDuration >= wordLen * 525;\n } else {\n isGrowableVW =\n combinedDuration >= 850 && combinedDuration >= wordLen * 190;\n }\n }\n\n const isLineSynced =\n line.isWordSynced === false || line.text.some(s => s.lineSynced);\n const isGlowingVW = isGrowableVW && !isLineSynced;\n const isCharRiseVW =\n !isGrowableVW && !isLineSynced && !isCJK && !isRTL && wordLen >= 8;\n\n let charOff = 0;\n for (let gi = vwStart; gi <= vwEnd; gi += 1) {\n groupGrowable[gi] = isGrowableVW;\n groupGlowing[gi] = isGlowingVW;\n groupCharRise[gi] = isCharRiseVW;\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 return {\n wordGroups,\n groupGrowable,\n groupGlowing,\n groupCharRise,\n vwFullText,\n vwFullDuration,\n vwCharOffset,\n vwStartMs,\n vwEndMs,\n lineIsRTL,\n };\n });\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n this._rebuildDomCache();\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 charTimedWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable, .lyrics-word.char-rise',\n );\n if (!charTimedWords) return;\n\n charTimedWords.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 const keptLines: HTMLElement[] = [];\n for (const lineElement of this.preActiveLineElements) {\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex === exceptLineIndex) {\n keptLines.push(lineElement);\n } else {\n lineElement.classList.remove('pre-active');\n }\n }\n this.preActiveLineElements = keptLines;\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 ) {\n if (activeIndices.length <= 3) {\n candidateIndex = currentPrimaryIndex;\n } else if (candidateIndex < currentPrimaryIndex) {\n candidateIndex = currentPrimaryIndex;\n }\n }\n\n return candidateIndex;\n }\n\n private getPrimaryScrollLineIndex(\n _activeIndices: number[],\n time: number,\n ): number | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // YouLyPlus-style: primary is simply the line at predictive time.\n const primaryIndex = this.getLineIndexAtTime(time, this.lastActiveIndex);\n if (primaryIndex === -1) return null;\n\n // Guard: if new primary is ahead of current but they share the same\n // end time, keep current to prevent bounce during overlaps.\n const currentPrimaryIndex = AmLyrics.getLineIndexFromElement(\n this.currentPrimaryActiveLine,\n );\n if (\n currentPrimaryIndex !== null &&\n primaryIndex > currentPrimaryIndex &&\n this.lyrics[currentPrimaryIndex] &&\n this.lyrics[primaryIndex] &&\n this.lyrics[currentPrimaryIndex].endtime ===\n this.lyrics[primaryIndex].endtime\n ) {\n const activeCount = this.findActiveLineIndices(time).length;\n if (activeCount <= 3) {\n return currentPrimaryIndex;\n }\n }\n\n return primaryIndex;\n }\n\n private getOverlapClusterForActiveIndices(\n activeIndices: number[],\n time: number,\n ): {\n start: number;\n end: number;\n startedEnd: number;\n startedEndTime: number;\n } | null {\n if (!this.lyrics || activeIndices.length === 0) return null;\n\n let start = activeIndices[0];\n while (\n start > 0 &&\n this.lyrics[start - 1].endtime >= this.lyrics[start].timestamp\n ) {\n start -= 1;\n }\n\n let end = start;\n let clusterEndTime = this.lyrics[start].endtime;\n while (\n end + 1 < this.lyrics.length &&\n this.lyrics[end + 1].timestamp <= clusterEndTime\n ) {\n end += 1;\n clusterEndTime = Math.max(clusterEndTime, this.lyrics[end].endtime);\n }\n\n let startedEnd = start;\n let startedEndTime = this.lyrics[start].endtime;\n for (let i = start; i <= end; i += 1) {\n if (this.lyrics[i].timestamp <= time) {\n startedEnd = i;\n startedEndTime = Math.max(startedEndTime, this.lyrics[i].endtime);\n } else {\n break;\n }\n }\n\n return { start, end, startedEnd, startedEndTime };\n }\n\n private focusLine(\n lineElement: HTMLElement,\n forceScroll = false,\n scrollDuration: number | undefined = undefined,\n skipScroll = false,\n preservePrimary = false,\n ): void {\n const primaryChanged = lineElement !== this.currentPrimaryActiveLine;\n\n if (primaryChanged && !preservePrimary) {\n // .active is now managed solely by findActiveLineIndices (which uses\n // effectiveEndTimes). Lines stay active until their extended end,\n // so we no longer need to remove .active here.\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = lineElement;\n const lineIndex = AmLyrics.getLineIndexFromElement(lineElement);\n if (lineIndex !== null) {\n this.lastActiveIndex = lineIndex;\n }\n }\n\n // Only update blur/opacity position classes when the primary line\n // actually changes (or on force scroll). Running this every tick\n // causes visual churn and upward glitches.\n if (primaryChanged || forceScroll) {\n this.updatePositionClasses(lineElement);\n }\n\n if (\n !skipScroll &&\n (forceScroll || primaryChanged || preservePrimary) &&\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking\n ) {\n this.scrollToActiveLineYouLy(lineElement, forceScroll, scrollDuration);\n }\n }\n\n private setUserScrolling(value: boolean) {\n this.isUserScrolling = value;\n if (value) {\n this.lyricsContainer?.classList.add('user-scrolling');\n } else {\n this.lyricsContainer?.classList.remove('user-scrolling');\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.setUserScrolling(true);\n\n this.clearPastLineHighlights();\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.setUserScrolling(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._handleActiveLineScroll([], false);\n }\n }, 2000);\n }\n\n private clearPastLineHighlights() {\n if (!this.lyricsContainer) return;\n\n const lineElements = this.cachedLineArray.length\n ? this.cachedLineArray\n : (Array.from(\n this.lyricsContainer.querySelectorAll(\n '.lyrics-line:not(.lyrics-gap)',\n ),\n ) as HTMLElement[]);\n const containerRect = this.lyricsContainer.getBoundingClientRect();\n const anchorY = containerRect.top + this.getScrollPaddingTop();\n\n for (let i = 0; i < lineElements.length; i += 1) {\n const lineElement = lineElements[i];\n const isActive = lineElement.classList.contains('active');\n const lineRect = lineElement.getBoundingClientRect();\n const hasScrolledPast = lineRect.bottom < anchorY - 2;\n if (!isActive && hasScrolledPast) {\n AmLyrics.unfinishSyllables(lineElement);\n }\n }\n }\n\n /**\n * Find the first (lowest-index) line whose raw time range contains `timeMs`.\n * Uses a stable forward scan so overlapping ranges always return the same\n * line, preventing primary-target jitter that causes scroll glitches.\n */\n private getLineIndexAtTime(timeMs: number, startHintIndex = 0): number {\n if (!this.lyrics || this.lyrics.length === 0) return -1;\n const len = this.lyrics.length;\n\n // 1. Check hint and immediate neighbours first (fast path)\n const hint = Math.max(0, Math.min(startHintIndex, len - 1));\n for (let i = hint; i < len; i += 1) {\n const line = this.lyrics[i];\n if (line.timestamp > timeMs) break;\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n }\n for (let i = hint - 1; i >= 0; i -= 1) {\n const line = this.lyrics[i];\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n if (line.endtime < timeMs) break;\n }\n\n // 2. Full forward scan — guaranteed deterministic for overlaps\n for (let i = 0; i < len; i += 1) {\n const line = this.lyrics[i];\n if (line.timestamp > timeMs) break;\n if (timeMs >= line.timestamp && timeMs < line.endtime) {\n return i;\n }\n }\n\n return -1;\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const activeLines: number[] = [];\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n\n if (line.timestamp > time) break;\n if (time >= line.timestamp && time < line.endtime) {\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.cachedAllGaps.length > 0) return this.cachedAllGaps;\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 this.cachedAllGaps = gaps;\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.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.setUserScrolling(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.clearPastLineHighlights();\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.cachedScrollPaddingTop !== null)\n return this.cachedScrollPaddingTop;\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n let result: number;\n if (paddingTopValue.includes('%')) {\n result =\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100);\n } else {\n result = parseFloat(paddingTopValue) || 0;\n }\n this.cachedScrollPaddingTop = result;\n return result;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n */\n private animateScrollYouLy(\n newTranslateY: number,\n forceScroll = false,\n scrollDuration: number | undefined = undefined,\n ): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n const targetTop = Math.max(0, -newTranslateY);\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 const pendingTop =\n animState.pendingUpdate === null\n ? null\n : Math.max(0, -animState.pendingUpdate);\n if (\n Math.abs(parent.scrollTop - targetTop) < 2 ||\n (pendingTop !== null && Math.abs(pendingTop - targetTop) < 2)\n ) {\n return;\n }\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n const { animatingLines } = this;\n\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 and custom properties from ALL\n // previously animating lines so stale deltas don't interfere. ---\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\n // Get lines for staggered animation — use cached array\n if (this.cachedLineArray.length === 0) {\n const lineElements =\n this.lyricsContainer.querySelectorAll('.lyrics-line');\n this.cachedLineArray = Array.from(lineElements) as HTMLElement[];\n }\n const lineArray = this.cachedLineArray;\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 duration = Math.min(\n 450,\n scrollDuration ?? SCROLL_ANIMATION_DURATION_MS,\n );\n const delayIncrement = duration * 0.1;\n const lookAhead = 20;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookAhead);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n const newAnimatingLines: HTMLElement[] = [];\n const scrollingDown = delta >= 0;\n\n if (scrollingDown) {\n let delayCounter = 0;\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n const delay = i >= referenceIndex ? delayCounter * delayIncrement : 0;\n\n if (i >= referenceIndex && !line.classList.contains('lyrics-gap')) {\n delayCounter += 1;\n }\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty('--scroll-duration', `${duration + 100}ms`);\n\n newAnimatingLines.push(line);\n\n const lineDuration = duration + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n } else {\n let delayCounter = 0;\n for (let i = end - 1; i >= start; i -= 1) {\n const line = lineArray[i];\n const delay = i <= referenceIndex ? delayCounter * delayIncrement : 0;\n\n if (i <= referenceIndex && !line.classList.contains('lyrics-gap')) {\n delayCounter += 1;\n }\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.style.setProperty('--scroll-duration', `${duration + 100}ms`);\n\n newAnimatingLines.push(line);\n\n const lineDuration = duration + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n }\n\n // --- Step 3: Force reflow so the browser sees the class removal ---\n // Use offsetHeight which is cheaper than getBoundingClientRect\n // eslint-disable-next-line no-void\n void parent.offsetHeight;\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\n // YouLyPlus-style early unlock: allow new scrolls to start after a\n // short base duration, even if CSS animations are still running.\n const BASE_DURATION = 400;\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false, scrollDuration);\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 from tracked elements\n for (const el of this.positionedLineElements) {\n el.classList.remove(...positionClasses);\n }\n this.positionedLineElements = [];\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n this.positionedLineElements.push(lineToScroll);\n\n if (this.cachedLineArray.length === 0) {\n this.cachedLineArray = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n }\n const lineElements = this.cachedLineArray;\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n if (scrollLineIndex === -1) return;\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 this.positionedLineElements.push(element);\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 scrollDuration: number | undefined = undefined,\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 and we aren't trying to scroll back up\n if (!forceScroll && !activeLine.classList.contains('lyrics-footer')) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n const targetTop = Math.max(0, -(paddingTop - activeLine.offsetTop));\n if (atBottom && targetTop > parent.scrollTop - 50) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.setUserScrolling(false);\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n this.clearPastLineHighlights();\n\n const duration = scrollDuration ?? SCROLL_ANIMATION_DURATION_MS;\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, duration + 160);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll, scrollDuration);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(\n syllable: HTMLElement,\n elapsedTimeMs = 0,\n ): 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 isCharRise = wordElement?.classList.contains('char-rise');\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: Grow Pass\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = wordDurationMs;\n const baseDelayPerChar = finalDuration * 0.09;\n const growDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const matrixScale = span.dataset.matrixScale || '1.1';\n const charOffsetX = span.dataset.charOffsetX || '0';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n const syllableCharIndex = parseFloat(\n span.dataset.syllableCharIndex || '0',\n );\n const growDelay = baseDelayPerChar * syllableCharIndex;\n\n charAnimationsMap.set(\n span,\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n styleUpdates.push({\n element: span,\n property: '--matrix-scale',\n value: matrixScale,\n });\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${charOffsetX}px`,\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}px`,\n });\n });\n }\n\n if (isCharRise && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = Math.max(wordDurationMs, syllableDurationMs);\n const baseDelayPerChar = finalDuration * 0.09;\n const riseDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const charIndex = parseFloat(span.dataset.syllableCharIndex || '0');\n const riseDelay = baseDelayPerChar * charIndex;\n charAnimationsMap.set(\n span,\n `rise-char ${riseDurationMs}ms ease-in-out ${riseDelay}ms forwards`,\n );\n });\n }\n\n // Step 2: Wipe Pass\n if (charSpans.length > 0) {\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 - elapsedTimeMs;\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 const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n\n const animationParts = [];\n\n if (\n existingAnimation &&\n (existingAnimation.includes('grow-dynamic') ||\n existingAnimation.includes('rise-char'))\n ) {\n animationParts.push(existingAnimation.split(',')[0].trim());\n }\n if (charIndex > 0) {\n const arrivalTime =\n (span.dataset.preWipeArrival\n ? parseFloat(span.dataset.preWipeArrival)\n : syllableDurationMs * startPct) - elapsedTimeMs;\n const constantDuration = parseFloat(\n span.dataset.preWipeDuration || '100',\n );\n const animDelay = arrivalTime - constantDuration;\n\n if (constantDuration > 0) {\n animationParts.push(\n `pre-wipe-char ${constantDuration}ms linear ${animDelay}ms forwards`,\n );\n }\n }\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n\n if (animationParts.length > 0) {\n charAnimationsMap.set(span, animationParts.join(', '));\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'} ${-elapsedTimeMs}ms 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.willChange = 'transform';\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 const charSpans = syllable.querySelectorAll('span.char');\n for (let i = 0; i < charSpans.length; i += 1) {\n const el = charSpans[i] 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\n /**\n * Reset all syllables in a line — batches deferred cleanup into a single rAF\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n line.classList.remove('persist-highlight');\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n const syllables = line.getElementsByClassName('lyrics-syllable');\n for (let i = 0; i < syllables.length; i += 1) {\n AmLyrics.resetSyllable(syllables[i] as HTMLElement);\n }\n // Batch deferred style cleanup into a single rAF for all syllables in the line\n requestAnimationFrame(() => {\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i] as HTMLElement;\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n const chars = syllable.querySelectorAll('span.char');\n for (let j = 0; j < chars.length; j += 1) {\n const el = chars[j] as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n el.style.removeProperty('will-change');\n }\n }\n });\n }\n\n /**\n * Gentle reset for normal playback: remove highlight/finished classes\n * without forcing inline styles. Lets CSS transition fade syllables\n * back to secondary colour smoothly.\n */\n private static unfinishSyllables(line: HTMLElement): void {\n if (!line) return;\n line.classList.remove('persist-highlight');\n const syllables = line.getElementsByClassName('lyrics-syllable');\n for (let i = 0; i < syllables.length; i += 1) {\n const s = syllables[i] as HTMLElement;\n s.classList.remove('highlight', 'finished', 'pre-highlight', 'cleanup');\n s.style.animation = '';\n s.style.removeProperty('--pre-wipe-duration');\n s.style.removeProperty('--pre-wipe-delay');\n s.style.removeProperty('background-color');\n s.style.removeProperty('transition');\n const chars = s.querySelectorAll('span.char');\n for (let j = 0; j < chars.length; j += 1) {\n const el = chars[j] as HTMLElement;\n el.style.animation = '';\n el.style.removeProperty('will-change');\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n el.style.removeProperty('filter');\n }\n }\n }\n\n private static finishSyllablesUpToTime(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n if (!line) return;\n let hasFinishedSyllable = false;\n\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n (syllable as any)._cachedStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n (syllable as any)._cachedEndTime = parseFloat(\n syllable.getAttribute('data-end-time') || '0',\n );\n }\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 = (syllable as any)._cachedStartTime;\n if (Number.isFinite(startTime) && currentTimeMs >= startTime) {\n const { classList } = syllable;\n if (!classList.contains('finished')) {\n if (!classList.contains('highlight')) {\n AmLyrics.updateSyllableAnimation(\n syllable,\n Math.max(0, currentTimeMs - startTime),\n );\n }\n classList.add('finished');\n }\n hasFinishedSyllable = true;\n classList.remove('highlight');\n classList.remove('pre-highlight');\n classList.add('cleanup');\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n const chars = syllable.querySelectorAll('span.char');\n for (let ci = 0; ci < chars.length; ci += 1) {\n const charEl = chars[ci] as HTMLElement;\n const currentAnim = charEl.style.animation || '';\n if (\n currentAnim.includes('grow-dynamic') ||\n currentAnim.includes('rise-char')\n ) {\n const parts = currentAnim.split(',').map(p => p.trim());\n const transformAnim = parts.find(\n p => p.includes('grow-dynamic') || p.includes('rise-char'),\n );\n charEl.style.animation = transformAnim || '';\n } else {\n charEl.style.animation = '';\n }\n }\n }\n }\n\n if (hasFinishedSyllable) {\n line.classList.add('persist-highlight');\n } else {\n line.classList.remove('persist-highlight');\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 for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n (syllable as any)._cachedStartTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n (syllable as any)._cachedEndTime = parseFloat(\n syllable.getAttribute('data-end-time') || '0',\n );\n }\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 = (syllable as any)._cachedStartTime;\n const endTime = (syllable as any)._cachedEndTime;\n\n if (Number.isFinite(startTime) && Number.isFinite(endTime)) {\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(\n syllable,\n currentTimeMs - startTime,\n );\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(\n syllable,\n currentTimeMs - startTime,\n );\n }\n classList.add('finished');\n // Keep the completed wipe state until user scroll resets it.\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\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('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const isUnsynced = this.cachedIsUnsynced;\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 <span class=\"background-vocal-wrap\">\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 no-chars ${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\n class=\"lyrics-syllable-wrap${bgRomanizedText\n ? ' has-transliteration'\n : ''}\"\n ><span\n class=\"lyrics-syllable no-chars${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 data-wipe-ratio=\"1\"\n >${syllable.text}</span\n >${bgRomanizedText}</span\n ></span\n >`;\n })}\n </span>\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 const bgPlacement = hasBackground\n ? AmLyrics.getBackgroundTextPlacement(line)\n : 'after';\n\n const lineData = this.cachedLineData?.[lineIndex];\n const wordGroups = lineData?.wordGroups ?? [];\n const groupGrowable = lineData?.groupGrowable ?? [];\n const groupGlowing = lineData?.groupGlowing ?? [];\n const groupCharRise = lineData?.groupCharRise ?? [];\n const vwFullText = lineData?.vwFullText ?? [];\n const vwFullDuration = lineData?.vwFullDuration ?? [];\n const vwCharOffset = lineData?.vwCharOffset ?? [];\n const lineIsRTL = lineData?.lineIsRTL ?? false;\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p\n class=\"main-vocal-container ${lineIsRTL ? 'rtl-text' : ''}\"\n >\n ${wordGroups.map((group, groupIdx) => {\n const isGrowable = groupGrowable[groupIdx];\n const isGlowing = groupGlowing[groupIdx];\n const isCharRise = groupCharRise[groupIdx];\n const isAnimatedByChar = isGrowable || isCharRise;\n const groupLineSynced = group.some(s => s.lineSynced);\n\n const wordText = isAnimatedByChar ? vwFullText[groupIdx] : '';\n const wordDuration = isAnimatedByChar\n ? vwFullDuration[groupIdx]\n : 0;\n const wordNumChars = wordText.length;\n const groupCharOffset = isAnimatedByChar\n ? vwCharOffset[groupIdx]\n : 0;\n\n let sylCharAccumulator = 0;\n\n const groupText = group.map(s => s.text).join('');\n const shouldAllowBreak =\n groupText.trim().length >= 16 ||\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n groupText,\n );\n\n // Calculate dynamic rise duration based on the audio duration of the word\n const wordStartTimeMs = group[0].timestamp;\n const wordEndTimeMs = group[group.length - 1].endtime;\n const actualDurationMs = wordEndTimeMs - wordStartTimeMs;\n // Base float is 0.8s, plus a portion of the audio duration, capped between 1.0s and 2.5s\n const riseDuration = Math.max(\n 1.2,\n Math.min(2.5, 1.2 + (actualDurationMs / 1000) * 0.6),\n );\n\n return html`<span\n class=\"lyrics-word${isGrowable ? ' growable' : ''}${isCharRise\n ? ' char-rise'\n : ''}${isGlowing ? ' glowing' : ''}${shouldAllowBreak\n ? ' allow-break'\n : ''}\"\n style=\"--rise-duration: ${riseDuration}s\"\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 no-chars ${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 (isAnimatedByChar) {\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-matrix-scale=\"${(charMaxScale * 0.98).toFixed(3)}\"\n data-char-offset-x=\"${(horizontalOffset * 0.98).toFixed(\n 2,\n )}\"\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\n class=\"lyrics-syllable-wrap${romanizedText\n ? ' has-transliteration'\n : ''}\"\n ><span\n class=\"lyrics-syllable${groupLineSynced\n ? ' line-synced'\n : ''}${isAnimatedByChar ? ' has-chars' : ' no-chars'}\"\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 >${romanizedText}</span\n >`;\n })}</span\n >`;\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\n class=\"lyrics-romanization-container ${lineIsRTL\n ? 'rtl-text'\n : ''}\"\n >\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 <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></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></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></span\n ></span>\n </p>\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'} ${lineIsRTL ? 'rtl-text' : ''}\"\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 ${lineIsRTL ? 'rtl-text' : ''}\">\n ${bgPlacement === 'before' ? backgroundVocalElement : ''}\n ${mainVocalElement}\n ${bgPlacement === 'after' ? backgroundVocalElement : ''}\n ${lineRomanizationElement} ${translationElement}\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'}\"\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 lyrics-line\">\n <div class=\"footer-content\">\n <span\n class=\"source-info\"\n style=\"display: flex; align-items: center; gap: 8px;\"\n >\n <b style=\"font-weight: 750;\">Source</b> ${sourceLabel}\n ${(this.availableSources &&\n this.availableSources.length > 1) ||\n !this.hasFetchedAllProviders\n ? html`\n <button\n class=\"download-button source-switch-btn\"\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 class=\"source-switch-svg lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"\n style=\"margin-right: 4px;\"\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 >\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 <span class=\"source-switch-label\"\n >${this.isFetchingAlternatives\n ? 'Switching...'\n : 'Switch'}</span\n >\n </button>\n `\n : ''}\n </span>\n ${this.songwriters\n ? html`<span\n class=\"songwriters-info\"\n style=\"margin-top: 4px; font-weight: normal; font-size: 0.9em;\"\n >\n <b style=\"font-weight: 750;\">Songwriters</b> ${this\n .songwriters}\n </span>`\n : ''}\n <span class=\"version-info\" style=\"margin-top: 8px;\">\n <b style=\"font-weight: 750;\">am-lyrics</b> v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style=\"display: inline-flex; align-items: center; gap: 4px;\"\n >Star me on GitHub\n </a>\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]}
|