@inpageedit/core 0.12.0 → 0.13.0-alpha.0

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.
Files changed (143) hide show
  1. package/LICENSE +20 -20
  2. package/dist/BasePlugin-Bf2UuIHF.js +64 -0
  3. package/dist/BasePlugin-Bf2UuIHF.js.map +1 -0
  4. package/dist/IconQuickEdit-CMCQncyj.js.map +1 -1
  5. package/dist/InputBox-nQKtiWtZ.js +30 -0
  6. package/dist/InputBox-nQKtiWtZ.js.map +1 -0
  7. package/dist/PluginPrefSync-Dn1Xsiqz.js +341 -0
  8. package/dist/PluginPrefSync-Dn1Xsiqz.js.map +1 -0
  9. package/dist/PluginStoreApp-CpOLArL7.js +452 -0
  10. package/dist/PluginStoreApp-CpOLArL7.js.map +1 -0
  11. package/dist/Preferences-DS4-CFWe.js.map +1 -1
  12. package/dist/WatchlistAction-BbNAyryN.js +5 -0
  13. package/dist/WatchlistAction-BbNAyryN.js.map +1 -0
  14. package/dist/components/index.js +6 -7
  15. package/dist/components/index.js.map +1 -1
  16. package/dist/endpoints-DgyuoRZd.js +1507 -0
  17. package/dist/endpoints-DgyuoRZd.js.map +1 -0
  18. package/dist/{index-B5DtUqkK.js → index-2RfILgXm.js} +11 -11
  19. package/dist/{index-B5DtUqkK.js.map → index-2RfILgXm.js.map} +1 -1
  20. package/dist/{index-hSl8LzNb.js → index-BCdABp0e.js} +24 -24
  21. package/dist/index-BCdABp0e.js.map +1 -0
  22. package/dist/{index-Ckozkp6W.js → index-BJ7_Q1mB.js} +8 -7
  23. package/dist/{index-Ckozkp6W.js.map → index-BJ7_Q1mB.js.map} +1 -1
  24. package/dist/{index-CJFePavo.js → index-BNh95-x2.js} +37 -49
  25. package/dist/index-BNh95-x2.js.map +1 -0
  26. package/dist/{index-CYc6LH26.js → index-BQ-cHWkJ.js} +15 -16
  27. package/dist/{index-CYc6LH26.js.map → index-BQ-cHWkJ.js.map} +1 -1
  28. package/dist/index-BwdWyHLe.js +362 -0
  29. package/dist/index-BwdWyHLe.js.map +1 -0
  30. package/dist/{index-D4uwfUZL.js → index-CCRMmnwk.js} +10 -9
  31. package/dist/index-CCRMmnwk.js.map +1 -0
  32. package/dist/index-CG38LlAh.js.map +1 -1
  33. package/dist/index-CM_6yF2v.js.map +1 -1
  34. package/dist/{index-CZXxH2-9.js → index-CnIpUF9x.js} +4 -4
  35. package/dist/{index-CZXxH2-9.js.map → index-CnIpUF9x.js.map} +1 -1
  36. package/dist/{index-CPoUaSMw.js → index-CyG7_IYz.js} +14 -13
  37. package/dist/index-CyG7_IYz.js.map +1 -0
  38. package/dist/index-DD5CVCfD.js.map +1 -1
  39. package/dist/index-DdTiZqwt.js +3744 -0
  40. package/dist/index-DdTiZqwt.js.map +1 -0
  41. package/dist/{index-Bv7Dw5eO.js → index-eSlbrNqF.js} +6 -6
  42. package/dist/{index-Bv7Dw5eO.js.map → index-eSlbrNqF.js.map} +1 -1
  43. package/dist/index.d.ts +1723 -31
  44. package/dist/index.js +73 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  47. package/dist/models/index.js +486 -0
  48. package/dist/models/index.js.map +1 -0
  49. package/dist/noop-ClDc6zv4.js.map +1 -1
  50. package/dist/plugins/index.js +23 -0
  51. package/dist/plugins/index.js.map +1 -0
  52. package/dist/services/index.js +16 -0
  53. package/dist/services/index.js.map +1 -0
  54. package/dist/style.css +1 -1
  55. package/dist/{vueHooks-D0uVqbO-.js → vueHooks-l04s8cIl.js} +1112 -1080
  56. package/dist/{vueHooks-D0uVqbO-.js.map → vueHooks-l04s8cIl.js.map} +1 -1
  57. package/lib/index.umd.js +15 -11
  58. package/lib/index.umd.js.map +1 -1
  59. package/lib/style.css +1 -1
  60. package/package.json +22 -25
  61. package/dist/CheckBox-Bc79KBEB.js +0 -13
  62. package/dist/CheckBox-Bc79KBEB.js.map +0 -1
  63. package/dist/InPageEdit.d.ts +0 -42
  64. package/dist/InputBox-DZAdyZ4B.js +0 -22
  65. package/dist/InputBox-DZAdyZ4B.js.map +0 -1
  66. package/dist/PluginPrefSync-BPQkNtX8.js +0 -292
  67. package/dist/PluginPrefSync-BPQkNtX8.js.map +0 -1
  68. package/dist/PluginStoreApp-Cxspe6t8.js +0 -158
  69. package/dist/PluginStoreApp-Cxspe6t8.js.map +0 -1
  70. package/dist/__test__/utils/constants.d.ts +0 -3
  71. package/dist/components/ActionButton.d.ts +0 -6
  72. package/dist/components/CheckBox.d.ts +0 -10
  73. package/dist/components/Icon/IconEdit.d.ts +0 -2
  74. package/dist/components/Icon/IconQuickEdit.d.ts +0 -2
  75. package/dist/components/InputBox.d.ts +0 -11
  76. package/dist/components/MBox/index.d.ts +0 -14
  77. package/dist/components/MwUserLinks.d.ts +0 -6
  78. package/dist/components/ProgressBar/index.d.ts +0 -7
  79. package/dist/components/RadioBox.d.ts +0 -10
  80. package/dist/components/TabView/index.d.ts +0 -19
  81. package/dist/components/TwinSwapInput/index.d.ts +0 -19
  82. package/dist/components/index.d.ts +0 -8
  83. package/dist/components/utils.d.ts +0 -4
  84. package/dist/constants/endpoints.d.ts +0 -8
  85. package/dist/decorators/Preferences.d.ts +0 -35
  86. package/dist/index-BXaiDKnr.js +0 -5828
  87. package/dist/index-BXaiDKnr.js.map +0 -1
  88. package/dist/index-CB7TltEb.js +0 -297
  89. package/dist/index-CB7TltEb.js.map +0 -1
  90. package/dist/index-CJFePavo.js.map +0 -1
  91. package/dist/index-CPoUaSMw.js.map +0 -1
  92. package/dist/index-D4uwfUZL.js.map +0 -1
  93. package/dist/index-DEav9Ptt.js +0 -365
  94. package/dist/index-DEav9Ptt.js.map +0 -1
  95. package/dist/index-hSl8LzNb.js.map +0 -1
  96. package/dist/models/MemoryStorage.d.ts +0 -10
  97. package/dist/models/WikiPage/index.d.ts +0 -72
  98. package/dist/models/WikiPage/types/PageInfo.d.ts +0 -58
  99. package/dist/models/WikiPage/types/PageParseData.d.ts +0 -17
  100. package/dist/models/WikiPage/types/WatchlistAction.d.ts +0 -6
  101. package/dist/models/WikiTitle/index.d.ts +0 -89
  102. package/dist/models/WikiTitle/index.spec.d.ts +0 -1
  103. package/dist/plugins/BasePlugin.d.ts +0 -25
  104. package/dist/plugins/_debug/index.d.ts +0 -8
  105. package/dist/plugins/analytics/index.d.ts +0 -41
  106. package/dist/plugins/in-article-links/index.d.ts +0 -44
  107. package/dist/plugins/plugin-store/index.d.ts +0 -59
  108. package/dist/plugins/plugin-store/schema.d.ts +0 -41
  109. package/dist/plugins/preferences-ui/PluginPrefSync.d.ts +0 -28
  110. package/dist/plugins/preferences-ui/index.d.ts +0 -48
  111. package/dist/plugins/quick-delete/index.d.ts +0 -55
  112. package/dist/plugins/quick-diff/components/DiffTable.d.ts +0 -23
  113. package/dist/plugins/quick-diff/index.d.ts +0 -85
  114. package/dist/plugins/quick-edit/index.d.ts +0 -79
  115. package/dist/plugins/quick-move/index.d.ts +0 -47
  116. package/dist/plugins/quick-preview/index.d.ts +0 -37
  117. package/dist/plugins/quick-redirect/index.d.ts +0 -48
  118. package/dist/plugins/toolbox/index.d.ts +0 -65
  119. package/dist/polyfills/Promise.withResolvers.d.ts +0 -5
  120. package/dist/polyfills/index.d.ts +0 -0
  121. package/dist/services/ApiService.d.ts +0 -14
  122. package/dist/services/CurrentPageService.d.ts +0 -28
  123. package/dist/services/ModalService.d.ts +0 -27
  124. package/dist/services/PreferencesService.d.ts +0 -94
  125. package/dist/services/ResourceLoaderService.d.ts +0 -17
  126. package/dist/services/WikiMetadataService.d.ts +0 -108
  127. package/dist/services/WikiPageService.d.ts +0 -20
  128. package/dist/services/WikiTitleService.d.ts +0 -70
  129. package/dist/services/storage/index.d.ts +0 -40
  130. package/dist/services/storage/managers/IDBStorageManager.d.ts +0 -28
  131. package/dist/services/storage/managers/LocalStorageManager.d.ts +0 -27
  132. package/dist/types/WikiMetadata.d.ts +0 -131
  133. package/dist/utils/computeable.d.ts +0 -2
  134. package/dist/utils/defineAsyncPlugin.d.ts +0 -2
  135. package/dist/utils/interpolate.d.ts +0 -20
  136. package/dist/utils/interpolate.spec.d.ts +0 -1
  137. package/dist/utils/makeCallable.d.ts +0 -3
  138. package/dist/utils/noop.d.ts +0 -1
  139. package/dist/utils/sleep.d.ts +0 -1
  140. package/dist/utils/string.d.ts +0 -7
  141. package/dist/utils/url.d.ts +0 -24
  142. package/dist/utils/vueHooks.d.ts +0 -6
  143. package/dist/utils/vueReactivity.d.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/models/MemoryStorage.ts","../../src/models/WikiPage/index.ts","../../src/models/WikiTitle/index.ts"],"sourcesContent":["export class MemoryStorage implements Storage {\n private values: Record<string, string> = {}\n get length(): number {\n return Object.keys(this.values).length\n }\n clear(): void {\n this.values = {}\n }\n getItem(key: string): string | null {\n return this.values[key] ?? null\n }\n setItem(key: string, value: string): void {\n this.values[key] = typeof value === 'string' ? value : String(value)\n }\n removeItem(key: string): void {\n delete this.values[key]\n }\n key(index: number): string | null {\n const keys = Object.keys(this.values)\n return keys[index] ?? null\n }\n}\nexport const useMemoryStorage = () => {\n // handle storage.foo = 'bar' case\n return new Proxy(new MemoryStorage(), {\n set(target, prop, value) {\n if (typeof prop === 'string') {\n target.setItem(prop, value)\n }\n return true\n },\n get(target, prop) {\n if (typeof prop === 'string' && !(prop in target)) {\n return target.getItem(prop)\n }\n return Reflect.get(target, prop)\n },\n })\n}\n","import type { PageInfo } from './types/PageInfo'\nimport { PageParseData } from './types/PageParseData'\nimport { WatchlistAction } from './types/WatchlistAction'\nimport { MediaWikiApi, MwApiParams, MwApiResponse, FexiosFinalContext } from 'wiki-saikou/browser'\n\nexport interface WikiPageEditPayload {\n text?: string\n prependtext?: string\n appendtext?: string\n summary?: string\n watchlist?: WatchlistAction\n section?: number | 'new' | undefined\n}\n\nexport interface IWikiPage {\n pageInfo: PageInfo\n parse(params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{ parse: PageParseData }>>>\n preview(\n text: string,\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ parse: PageParseData }>>>\n edit(\n payload: WikiPageEditPayload,\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ success: boolean }>>>\n createOnly(\n payload: { text: string } & Pick<WikiPageEditPayload, 'summary' | 'watchlist'>,\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ success: boolean }>>>\n delete(\n reason?: string,\n params?: MwApiParams\n ): Promise<\n FexiosFinalContext<\n MwApiResponse<{\n delete: {\n title: string\n reason: string\n logid: boolean\n }\n }>\n >\n >\n moveTo(\n title: string,\n reason?: string,\n params?: Partial<\n MwApiParams & {\n movetalk: boolean\n movesubpages: boolean\n }\n >\n ): Promise<FexiosFinalContext<MwApiResponse<{ success: boolean }>>>\n userCan(action: keyof PageInfo['actions']): boolean\n userCanEdit(): boolean\n reloadSelfInfo(): Promise<this>\n // sugar getters (instance level)\n readonly pageid: PageInfo['pageid']\n readonly title: PageInfo['title']\n readonly ns: PageInfo['ns']\n readonly contentmodel: PageInfo['contentmodel']\n readonly fullurl: PageInfo['fullurl']\n readonly canonicalurl: PageInfo['canonicalurl']\n readonly editurl: PageInfo['editurl']\n readonly revisions: NonNullable<PageInfo['revisions']>\n readonly lastrevid: PageInfo['lastrevid']\n readonly templates: NonNullable<PageInfo['templates']>\n readonly images: NonNullable<PageInfo['images']>\n}\n\nexport interface WikiPageConstructor {\n // Constructor\n new (pageInfo: Partial<PageInfo>, loaded?: boolean): IWikiPage\n // Static members\n newFromApi(payload: MwApiParams): Promise<IWikiPage>\n newBlankPage(init?: Partial<PageInfo>): IWikiPage\n /**\n * Create a new WikiPage instance from any kind of identifier\n * priority: revid > pageid > title\n */\n newFromAnyKind(payload: {\n title?: string\n pageid?: number\n revid?: number\n }): Promise<IWikiPage | null>\n newBatchFromApi(\n params: MwApiParams & {\n titles?: string[]\n pageids?: number[]\n revids?: number[]\n }\n ): Promise<IWikiPage[]>\n}\n\nexport function createWikiPageModel(api: MediaWikiApi): WikiPageConstructor {\n class WikiPage implements IWikiPage {\n private static readonly api = api\n readonly api = api\n public pageInfo: PageInfo\n static readonly DEFAULT_QUERY_PARAMS: MwApiParams = {\n action: 'query',\n prop: 'info|templates|transcludedin|images|pageimages|revisions',\n inprop: 'protection|url|varianttitles',\n intestactions: 'edit|move|delete',\n tllimit: 'max',\n tilimit: 'max',\n imlimit: 'max',\n piprop: 'thumbnail|name|original',\n pithumbsize: '200',\n pilimit: 'max',\n rvprop: 'ids|timestamp|flags|comment|user|content',\n rvslots: 'main',\n }\n static readonly DEFAULT_PAGE_INFO: PageInfo = {\n pageid: 0,\n ns: 0,\n title: '',\n contentmodel: 'wikitext',\n pagelanguage: '',\n pagelanguagehtmlcode: '',\n pagelanguagedir: 'ltr',\n touched: new Date().toISOString(),\n lastrevid: 0,\n length: 0,\n protection: [],\n restrictiontypes: [],\n fullurl: '',\n canonicalurl: '',\n editurl: '',\n varianttitles: {},\n actions: {\n edit: true,\n move: false,\n delete: false,\n },\n revisions: [],\n templates: [],\n images: [],\n }\n\n constructor(\n pageInfo: Partial<PageInfo>,\n public _loaded = true\n ) {\n // Handle modern MW content model slots\n pageInfo.revisions?.forEach((rev) => {\n // @ts-ignore\n if (typeof rev?.slots?.main === 'object') {\n Object.assign(rev, (rev as any).slots.main)\n }\n })\n this.pageInfo = {\n ...WikiPage.DEFAULT_PAGE_INFO,\n ...pageInfo,\n }\n }\n\n // Utils\n static async newFromApi(payload: MwApiParams) {\n const { data } = await this.api.get<{\n query: {\n pages: PageInfo[]\n }\n }>({\n ...WikiPage.DEFAULT_QUERY_PARAMS,\n ...payload,\n })\n const info = data?.query?.pages?.[0]\n if (!info || !info.title) {\n throw new Error('Invalid page info', { cause: data })\n }\n return new WikiPage(info, true)\n }\n static newBlankPage(init: Partial<PageInfo> = {}) {\n return new WikiPage(init, false)\n }\n static async newFromAnyKind(payload: { title?: string; pageId?: number; revisionId?: number }) {\n const { title, pageId, revisionId } = payload || {}\n if (revisionId) {\n return this.newFromApi({ revids: parseInt(revisionId.toString(), 10) })\n } else if (pageId) {\n return this.newFromApi({ pageids: parseInt(pageId.toString(), 10) })\n } else if (title) {\n return this.newFromApi({ titles: title.toString() })\n }\n return null\n }\n static async newBatchFromApi(\n params: MwApiParams & {\n titles?: string[]\n pageids?: number[]\n revids?: number[]\n }\n ) {\n const { titles, pageids, revids, ...rest } = params || {}\n const { data } = await this.api.post<{\n query: {\n pages: PageInfo[]\n }\n }>({\n ...WikiPage.DEFAULT_QUERY_PARAMS,\n titles: titles?.join('|') ?? undefined,\n pageids: pageids?.join('|') ?? undefined,\n revids: revids?.join('|') ?? undefined,\n ...rest,\n })\n return data?.query?.pages?.map((page) => new WikiPage(page, true)) || []\n }\n\n // Page actions\n async parse(params?: MwApiParams) {\n return this.api.post({\n action: 'parse',\n page: this.pageInfo.title,\n prop: 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle|iwlinks|properties|parsewarnings',\n ...params,\n })\n }\n async preview(text: string, params?: MwApiParams) {\n return this.parse({\n action: 'parse',\n page: undefined,\n title: this.title,\n text,\n pst: 1,\n preview: 1,\n disableeditsection: 1,\n disablelimitreport: 1,\n ...params,\n })\n }\n async edit(payload: WikiPageEditPayload, params?: MwApiParams) {\n const {\n text,\n prependtext,\n appendtext,\n summary = '',\n watchlist = WatchlistAction.preferences,\n section,\n } = payload\n return this.api.postWithEditToken({\n action: 'edit',\n title: this.title,\n starttimestamp: this.pageInfo.touched,\n basetimestamp: this.revisions[0]?.timestamp,\n text,\n prependtext,\n appendtext,\n summary,\n watchlist,\n section,\n ...params,\n })\n }\n async createOnly(\n payload: { text: string; summary?: string; watchlist?: WatchlistAction },\n params?: MwApiParams\n ) {\n return this.edit(payload, { createonly: 1, ...params })\n }\n async delete(reason?: string, params?: MwApiParams & { deletetalk?: boolean }) {\n return this.api.postWithEditToken<{\n delete: {\n title: string\n reason: string\n logid: boolean\n }\n }>({\n action: 'delete',\n title: this.pageInfo.title || undefined,\n pageid: this.pageInfo.pageid || undefined,\n reason,\n deletetalk: params?.deletetalk,\n ...params,\n })\n }\n async moveTo(\n title: string,\n reason?: string,\n params?: Partial<\n MwApiParams & {\n movetalk: boolean\n movesubpages: boolean\n }\n >\n ) {\n return this.api.postWithEditToken({\n action: 'move',\n from: this.pageInfo.title,\n to: title,\n reason,\n movetalk: 1,\n movesubpages: 1,\n ...params,\n })\n }\n\n // === utilities ===\n\n userCan(action: keyof PageInfo['actions']) {\n const val = this.pageInfo?.actions?.[action]\n return !!val\n }\n userCanEdit() {\n return this.userCan('edit')\n }\n async reloadSelfInfo() {\n const page = await WikiPage.newFromApi({\n pageids: this.pageInfo.pageid,\n titles: this.pageInfo.title,\n })\n const revisions = (this.pageInfo.revisions || [])\n .concat(page.revisions || [])\n .sort((a, b) => a.revid - b.revid)\n .reduce(\n (acc, cur) => {\n if (!acc.find((rev) => rev.revid === cur.revid)) acc.push(cur)\n return acc\n },\n [] as Required<PageInfo>['revisions']\n )\n this.pageInfo = page.pageInfo\n this.pageInfo.revisions = revisions\n this._loaded = true\n return this\n }\n\n // === sugar getters ===\n get pageid() {\n return this.pageInfo.pageid\n }\n get title() {\n return this.pageInfo.title\n }\n get ns() {\n return this.pageInfo.ns\n }\n get contentmodel() {\n return this.pageInfo.contentmodel\n }\n get fullurl() {\n return this.pageInfo.fullurl\n }\n get canonicalurl() {\n return this.pageInfo.canonicalurl\n }\n get editurl() {\n return this.pageInfo.editurl\n }\n get revisions() {\n return this.pageInfo.revisions || []\n }\n get lastrevid() {\n return this.pageInfo.lastrevid\n }\n get templates() {\n return this.pageInfo.templates || []\n }\n get images() {\n return this.pageInfo.images || []\n }\n }\n\n return WikiPage as WikiPageConstructor\n}\n\n// re-export types\nexport * from './types/PageInfo'\nexport * from './types/PageParseData'\nexport * from './types/WatchlistAction'\n","import { WikiSiteInfo } from '@/types/WikiMetadata'\n\n// 使用 WeakMap 避免内存泄漏\nconst caches = new WeakMap<WikiSiteInfo, WikiTitleConstructor>()\n\n// 命名空间查找索引\ninterface NamespaceIndex {\n byName: Map<string, number>\n byCanonical: Map<string, number>\n byAlias: Map<string, number>\n byNormalized: Map<string, number> // 标准化索引:全小写+下划线格式\n}\n\n// 特殊页面别名索引\ninterface SpecialPageIndex {\n byRealName: Map<string, string> // realname -> realname\n byAlias: Map<string, string> // alias -> realname\n byNormalized: Map<string, string> // normalized -> realname\n}\n\nexport interface IWikiTitle {\n /**\n * Get db key without namespace prefix\n * e.g. \"template:hello world\" -> \"Hello_world\"\n */\n getMainDBKey(): string\n\n /**\n * Get page name without namespace prefix\n * e.g. \"template:hello world\" -> \"Hello world\"\n */\n getMainText(): string\n\n /**\n * Get db key with namespace prefix\n * e.g. \"template:hello world\" -> \"Template:Hello_world\"\n */\n getPrefixedDBKey(): string\n\n /**\n * Get page name with namespace prefix\n * e.g. \"template:hello world\" -> \"Template:Hello world\"\n */\n getPrefixedText(): string\n\n // Shortcuts\n toText: () => string\n toString: () => string\n\n /**\n * Get namespace ID\n * e.g. \"template:hello world\" -> 10\n */\n getNamespaceId(): number\n\n /**\n * Get namespace text\n * e.g. \"template:hello world\" -> \"Template\"\n */\n getNamespaceText(): string\n\n /**\n * Get namespace db key\n * e.g. \"template talk:hello world\" -> \"Template_talk\"\n */\n getNamespaceDBKey(): string\n\n /**\n * Get subject page\n * If current page is subject page, return itself\n * e.g. \"template talk:hello world\" -> new WikiTitle(\"Template:Hello world\")\n */\n getSubjectPage(): IWikiTitle\n\n /**\n * Get talk page\n * If current page is talk page, return itself\n * If current page cannot have talk page, return null\n * e.g. \"template:hello world\" -> new WikiTitle(\"Template talk:Hello world\")\n */\n getTalkPage(): IWikiTitle | null\n\n /**\n * Get URL of the page\n * e.g. \"template:hello world\" -> \"https://example.com/wiki/Template:Hello_world\"\n */\n getURL(params?: Record<string, string> | URLSearchParams): URL\n\n /**\n * Reset current title with given title string\n */\n setTitle(title: string): IWikiTitle\n\n /**\n * Set main title, keep current ns, update dbkey\n */\n setMainText(mainTitle: string): IWikiTitle\n\n /**\n * Set namespace by text\n */\n setNamespaceText(namespaceText: string): IWikiTitle\n\n /**\n * Set namespace by ID\n */\n setNamespaceId(namespaceId: number): IWikiTitle\n\n /**\n * Check if the title is equal to another title\n */\n equals(other: IWikiTitle | string): boolean\n\n /**\n * Check if the title is specific special page\n * e.g. \"Special:Diff\" is \"差异\" or \"diff\" -> true\n */\n isSpecial(alia: string): boolean\n\n newTitle(title: string, namespace?: number): IWikiTitle\n}\n\nexport interface WikiTitleConstructor {\n new (title: string, namespace?: number): IWikiTitle\n create(title: string, namespace?: number): IWikiTitle\n}\n\n// 工具函数\nconst titleUtils = {\n toDBKey: (text: string): string => text.replace(/ /g, '_'),\n toNormalText: (text: string): string => text.replace(/_/g, ' '),\n ensureCase: (text: string, caseType: string): string => {\n if (caseType === 'first-letter') {\n return text.charAt(0).toUpperCase() + text.slice(1)\n } else {\n return text\n }\n },\n}\n\n// 特殊页面工具函数\nconst specialPageUtils = {\n /**\n * 标准化特殊页面名称:转换为全小写\n */\n normalizeSpecialPageName: (name: string): string => {\n return name.toLowerCase()\n },\n\n /**\n * 构建特殊页面别名索引\n */\n buildSpecialPageIndex: (metadata: WikiSiteInfo): SpecialPageIndex => {\n const byRealName = new Map<string, string>()\n const byAlias = new Map<string, string>()\n const byNormalized = new Map<string, string>()\n\n for (const specialPage of metadata.specialpagealiases) {\n const realName = specialPage.realname\n byRealName.set(realName, realName)\n\n // 添加标准化索引\n const normalizedRealName = specialPageUtils.normalizeSpecialPageName(realName)\n byNormalized.set(normalizedRealName, realName)\n\n // 处理别名\n for (const alias of specialPage.aliases) {\n byAlias.set(alias, realName)\n\n // 添加标准化的别名索引\n const normalizedAlias = specialPageUtils.normalizeSpecialPageName(alias)\n byNormalized.set(normalizedAlias, realName)\n }\n }\n\n return { byRealName, byAlias, byNormalized }\n },\n\n /**\n * 查找特殊页面的真实名称\n */\n findSpecialPageRealName: (name: string, index: SpecialPageIndex): string | null => {\n // 提取主部分(忽略子页面)\n const mainPart = name.split('/')[0]\n\n // 首先尝试原始输入(精确匹配)\n let result = index.byRealName.get(mainPart) ?? index.byAlias.get(mainPart)\n if (result !== undefined) {\n return result\n }\n\n // 标准化输入并查找\n const normalized = specialPageUtils.normalizeSpecialPageName(mainPart)\n return index.byNormalized.get(normalized) ?? null\n },\n}\n\n// 命名空间工具函数\nconst namespaceUtils = {\n /**\n * 标准化命名空间文本:转换为全小写+下划线格式\n */\n normalizeNamespaceText: (text: string): string => {\n return text\n .replace(/[_\\s]+/g, '_') // 将空格和下划线统一为下划线\n .toLowerCase()\n .replace(/^_+|_+$/g, '') // 移除首尾下划线\n },\n\n buildIndex: (metadata: WikiSiteInfo): NamespaceIndex => {\n const byName = new Map<string, number>()\n const byCanonical = new Map<string, number>()\n const byAlias = new Map<string, number>()\n const byNormalized = new Map<string, number>()\n\n // 构建命名空间索引\n for (const [id, ns] of Object.entries(metadata.namespaces)) {\n const nsId = parseInt(id)\n byName.set(ns.name, nsId)\n byCanonical.set(ns.canonical ?? '', nsId)\n\n // 添加标准化索引\n const normalizedName = namespaceUtils.normalizeNamespaceText(ns.name)\n const normalizedCanonical = namespaceUtils.normalizeNamespaceText(ns.canonical ?? '')\n byNormalized.set(normalizedName, nsId)\n byNormalized.set(normalizedCanonical, nsId)\n }\n\n // 构建别名索引\n for (const alias of metadata.namespacealiases) {\n byAlias.set(alias.alias, alias.id)\n\n // 添加标准化的别名索引\n const normalizedAlias = namespaceUtils.normalizeNamespaceText(alias.alias)\n byNormalized.set(normalizedAlias, alias.id)\n }\n\n return { byName, byCanonical, byAlias, byNormalized }\n },\n\n findNamespaceId: (namespaceText: string, index: NamespaceIndex): number | null => {\n // 首先尝试原始输入(精确匹配)\n let result =\n index.byName.get(namespaceText) ??\n index.byCanonical.get(namespaceText) ??\n index.byAlias.get(namespaceText)\n if (result !== undefined) {\n return result\n }\n\n // 标准化输入并查找\n const normalized = namespaceUtils.normalizeNamespaceText(namespaceText)\n return index.byNormalized.get(normalized) ?? null\n },\n\n isTalkPage: (ns: number): boolean => ns % 2 === 1 && ns > 0,\n\n getDefaultNamespaceInfo: (ns: number) => ({\n id: ns,\n name: '',\n canonical: '',\n case: 'first-letter' as const,\n content: false,\n nonincludable: false,\n subpages: false,\n }),\n}\n\nexport function createWikiTitleModel(metadata: WikiSiteInfo): WikiTitleConstructor {\n const exists = caches.get(metadata)\n if (exists) {\n return exists\n }\n\n // 预建命名空间索引\n const namespaceIndex = namespaceUtils.buildIndex(metadata)\n // 预建特殊页面索引\n const specialPageIndex = specialPageUtils.buildSpecialPageIndex(metadata)\n\n class WikiTitle implements IWikiTitle {\n static readonly _meta = metadata\n static readonly _namespaceIndex = namespaceIndex\n static readonly _specialPageIndex = specialPageIndex\n\n /** 缓存的 main title,不包含命名空间前缀,大小写和空格状态不确定 */\n #title: string\n /** 缓存的 namespace ID */\n #ns: number\n\n constructor(title: string, namespace?: number) {\n this.#title = title || ''\n this.#ns = namespace ?? 0\n\n // 只有在没有显式命名空间参数时才解析标题中的命名空间前缀\n if (namespace === void 0) {\n this.fixNSByTitle()\n } else {\n // 如果显式传入了命名空间,移除标题中的命名空间前缀\n this.stripNamespaceFromTitle()\n }\n\n if (this.getMainText() === '') {\n throw new Error('Invalid title')\n }\n }\n\n static create(title: string, namespace?: number): WikiTitle {\n return new WikiTitle(title, namespace)\n }\n newTitle = WikiTitle.create.bind(WikiTitle)\n\n private fixNSByTitle(): void {\n const colonIndex = this.#title.indexOf(':')\n if (colonIndex === -1) {\n return // 没有命名空间前缀\n }\n\n if (colonIndex === 0) {\n // 只有冒号,将冒号后的部分作为标题\n this.#title = this.#title.substring(1)\n return\n }\n\n const potentialNamespace = this.#title.substring(0, colonIndex)\n const mainTitle = this.#title.substring(colonIndex + 1)\n\n // 查找匹配的命名空间\n const namespaceId = namespaceUtils.findNamespaceId(\n potentialNamespace,\n WikiTitle._namespaceIndex\n )\n if (namespaceId !== null) {\n this.#title = mainTitle\n this.#ns = namespaceId\n }\n }\n\n private stripNamespaceFromTitle(): void {\n const colonIndex = this.#title.indexOf(':')\n if (colonIndex === -1) {\n return // 没有命名空间前缀,不需要处理\n }\n\n if (colonIndex === 0) {\n // 只有冒号,将冒号后的部分作为标题\n this.#title = this.#title.substring(1)\n return\n }\n\n const potentialNamespace = this.#title.substring(0, colonIndex)\n const mainTitle = this.#title.substring(colonIndex + 1)\n\n // 查找匹配的命名空间,如果找到则移除前缀\n const namespaceId = namespaceUtils.findNamespaceId(\n potentialNamespace,\n WikiTitle._namespaceIndex\n )\n if (namespaceId !== null) {\n // 移除命名空间前缀,只保留主标题\n this.#title = mainTitle\n }\n }\n\n private getNamespaceInfo() {\n return (\n WikiTitle._meta.namespaces[this.#ns] ?? namespaceUtils.getDefaultNamespaceInfo(this.#ns)\n )\n }\n\n getMainDBKey(): string {\n const nsInfo = this.getNamespaceInfo()\n\n // 如果是特殊页面,将主部分替换为真实名称,保留子页面部分\n if (this.#ns === -1) {\n const realName = specialPageUtils.findSpecialPageRealName(\n this.#title,\n WikiTitle._specialPageIndex\n )\n if (realName) {\n // 构建包含子页面的完整标题\n const subPage = this.#title.includes('/')\n ? this.#title.substring(this.#title.indexOf('/'))\n : ''\n const fullTitle = realName + subPage\n return titleUtils.ensureCase(titleUtils.toDBKey(fullTitle), nsInfo.case)\n }\n }\n\n return titleUtils.ensureCase(titleUtils.toDBKey(this.#title), nsInfo.case)\n }\n\n getMainText(): string {\n const nsInfo = this.getNamespaceInfo()\n\n // 如果是特殊页面,将主部分替换为真实名称,保留子页面部分\n if (this.#ns === -1) {\n const realName = specialPageUtils.findSpecialPageRealName(\n this.#title,\n WikiTitle._specialPageIndex\n )\n if (realName) {\n // 构建包含子页面的完整标题\n const subPage = this.#title.includes('/')\n ? this.#title.substring(this.#title.indexOf('/'))\n : ''\n const fullTitle = realName + subPage\n return titleUtils.ensureCase(titleUtils.toNormalText(fullTitle), nsInfo.case)\n }\n }\n\n return titleUtils.ensureCase(titleUtils.toNormalText(this.#title), nsInfo.case)\n }\n\n private getMainRootText(): string {\n return this.getMainText().split('/')[0]\n }\n\n getPrefixedDBKey(): string {\n if (this.#ns === 0) {\n return this.getMainDBKey()\n }\n return `${this.getNamespaceDBKey()}:${this.getMainDBKey()}`\n }\n\n getPrefixedText(): string {\n if (this.#ns === 0) {\n return this.getMainText()\n }\n return `${this.getNamespaceText()}:${this.getMainText()}`\n }\n\n // aliases\n toText = this.getPrefixedText.bind(this)\n toString = this.getPrefixedDBKey.bind(this)\n\n getNamespaceId(): number {\n return this.#ns\n }\n\n getNamespaceText(): string {\n return this.getNamespaceInfo().name ?? ''\n }\n getNamespaceDBKey(): string {\n const nsInfo = this.getNamespaceInfo()\n return titleUtils.ensureCase(titleUtils.toDBKey(this.getNamespaceText()), nsInfo.case)\n }\n\n getSubjectPage(): IWikiTitle {\n if (namespaceUtils.isTalkPage(this.#ns)) {\n const subjectNs = this.#ns - 1\n return new WikiTitle(this.#title, subjectNs)\n }\n return this\n }\n\n getTalkPage(): IWikiTitle | null {\n if (namespaceUtils.isTalkPage(this.#ns)) {\n return this\n }\n\n // 特殊页面和媒体页面没有讨论页\n if (this.#ns < 0) {\n return null\n }\n\n const talkNs = this.#ns + 1\n const talkNsInfo = WikiTitle._meta.namespaces[talkNs.toString()]\n if (!talkNsInfo) {\n return null\n }\n\n return new WikiTitle(this.#title, talkNs)\n }\n\n getURL(params?: Record<string, string> | URLSearchParams): URL {\n const articlePath = WikiTitle._meta.general.articlepath\n const prefixedDbKey = this.getPrefixedDBKey()\n\n // 替换 $1 占位符为页面标题,冒号不进行编码\n const path = articlePath.replace('$1', prefixedDbKey)\n const url = new URL(path, location.origin)\n\n if (params) {\n const searchParams =\n params instanceof URLSearchParams ? params : new URLSearchParams(params)\n\n searchParams.forEach((value, key) => {\n url.searchParams.set(key, value)\n })\n }\n\n return url\n }\n\n /**\n * 设置标题,重置当前实例的 dbkey 和 ns\n * @param title 新的标题字符串\n */\n setTitle(title: string): this {\n this.#title = title\n this.#ns = 0\n this.fixNSByTitle()\n return this\n }\n\n setMainText(text: string): this {\n this.#title = text\n return this\n }\n\n setNamespaceText(namespaceText: string): this {\n const namespaceId = namespaceUtils.findNamespaceId(namespaceText, WikiTitle._namespaceIndex)\n if (namespaceId !== null) {\n this.#ns = namespaceId\n }\n return this\n }\n\n setNamespaceId(namespaceId: number): this {\n this.#ns = namespaceId\n return this\n }\n\n equals(other: IWikiTitle | string): boolean {\n if (typeof other === 'string') {\n other = new WikiTitle(other)\n }\n return this.getPrefixedDBKey() === other.getPrefixedDBKey()\n }\n\n isSpecial(alia: string): boolean {\n // 如果不是特殊页面命名空间,直接返回 false\n if (this.#ns !== -1) {\n return false\n }\n const targetTitle = new WikiTitle(alia, -1)\n return this.getMainRootText() === targetTitle.getMainRootText()\n }\n\n toJSON(): Record<string, any> {\n return {\n ns: this.#ns,\n text: this.getMainText(),\n title: this.getPrefixedText(),\n url: this.getURL().toString(),\n isSpecial: this.#ns < 0,\n }\n }\n }\n\n caches.set(metadata, WikiTitle)\n return WikiTitle\n}\n"],"names":["MemoryStorage","key","value","index","useMemoryStorage","target","prop","createWikiPageModel","api","WikiPage","pageInfo","_loaded","rev","payload","data","info","init","title","pageId","revisionId","params","titles","pageids","revids","rest","page","text","prependtext","appendtext","summary","watchlist","WatchlistAction","section","reason","action","revisions","b","acc","cur","caches","titleUtils","caseType","specialPageUtils","name","metadata","byRealName","byAlias","byNormalized","specialPage","realName","normalizedRealName","alias","normalizedAlias","mainPart","result","normalized","namespaceUtils","byName","byCanonical","id","ns","nsId","normalizedName","normalizedCanonical","namespaceText","createWikiTitleModel","exists","namespaceIndex","specialPageIndex","WikiTitle","namespace","#title","#ns","colonIndex","potentialNamespace","mainTitle","namespaceId","nsInfo","subPage","fullTitle","subjectNs","talkNs","articlePath","prefixedDbKey","path","url","other","alia","targetTitle"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"noop-ClDc6zv4.js","sources":["../src/utils/noop.ts"],"sourcesContent":["export const noop = () => {}\r\n"],"names":["noop"],"mappings":"AAAO,MAAMA,IAAO,MAAM;AAAC;"}
1
+ {"version":3,"file":"noop-ClDc6zv4.js","sources":["../src/utils/noop.ts"],"sourcesContent":["export const noop = () => {}\n"],"names":["noop"],"mappings":"AAAO,MAAMA,IAAO,MAAM;AAAC;"}
@@ -0,0 +1,23 @@
1
+ import { PluginAnalytics as i } from "../index-BQ-cHWkJ.js";
2
+ import { PluginInArticleLinks as u } from "../index-BJ7_Q1mB.js";
3
+ import { PluginPluginStore as t } from "../index-BwdWyHLe.js";
4
+ import { PluginPreferencesUI as f } from "../index-BCdABp0e.js";
5
+ import { PluginQuickDiff as g } from "../index-CCRMmnwk.js";
6
+ import { PluginQuickEdit as m } from "../index-CyG7_IYz.js";
7
+ import { PluginQuickMove as c } from "../index-2RfILgXm.js";
8
+ import { PluginQuickPreview as Q } from "../index-BNh95-x2.js";
9
+ import { PluginQuickRedirect as d } from "../index-CnIpUF9x.js";
10
+ import { PluginToolbox as A } from "../index-eSlbrNqF.js";
11
+ export {
12
+ i as PluginAnalytics,
13
+ u as PluginInArticleLinks,
14
+ t as PluginPluginStore,
15
+ f as PluginPreferencesUI,
16
+ g as PluginQuickDiff,
17
+ m as PluginQuickEdit,
18
+ c as PluginQuickMove,
19
+ Q as PluginQuickPreview,
20
+ d as PluginQuickRedirect,
21
+ A as PluginToolbox
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,16 @@
1
+ import { A as r, C as i, b as s, N as c, P as o, M as v, c as S, R as t, a as d, W as P, d as M, e as l } from "../index-DdTiZqwt.js";
2
+ export {
3
+ r as ApiService,
4
+ i as CurrentPageService,
5
+ s as CustomIPEModal,
6
+ c as IPEModal,
7
+ o as IPEModalEvent,
8
+ v as ModalService,
9
+ S as PreferencesService,
10
+ t as ResourceLoaderService,
11
+ d as StorageService,
12
+ P as WikiMetadataService,
13
+ M as WikiPageService,
14
+ l as WikiTitleService
15
+ };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";._ipe_progress_so6hn_1{position:relative;display:inline-block;width:100%;overflow:hidden;border:1px solid #c5c5c5;border-radius:100vmax;background-color:#fff;height:1em;--progress: 0%}._ipe_progress_so6hn_1[data-indeterminate=true]:before,._ipe_progress_so6hn_1[data-indeterminate=true]:after{content:"";position:absolute;top:0;bottom:0;left:0;background-color:#36c}._ipe_progress_so6hn_1[data-indeterminate=true]:before{animation:_progress-indeterminate-long_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=true]:after{animation:_progress-indeterminate-short_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=false]:before{content:"";position:absolute;top:0;bottom:0;left:0;width:var(--progress);background-color:#36c;transition:width .3s ease-in-out}@keyframes _progress-indeterminate-long_so6hn_1{0%{left:0;width:0}50%{left:30%;width:70%}75%{left:100%;width:0}}@keyframes _progress-indeterminate-short_so6hn_1{0%{left:0;width:0}50%{left:0;width:0}75%{left:0;width:25%}to{left:110%;width:0}}._mbox_5x43w_1{--border-color: #dfdfdf;--title-color: #efefef;--content-color: #ffffff;border-radius:.5rem;border:1px solid var(--title-color);border-left:6px solid var(--border-color);overflow:hidden;margin-bottom:1rem;position:relative}._mbox_5x43w_1 ._title_5x43w_12{background-color:var(--title-color);padding:.5rem 1rem;font-weight:700;font-size:1rem;line-height:1.2}._mbox_5x43w_1 ._content_5x43w_19{background-color:var(--content-color);padding:.5rem 1rem;font-size:1rem;line-height:1.5;max-height:14em;overflow:auto}._mbox_5x43w_1 ._close_5x43w_27{position:absolute;top:.5rem;right:.5rem;font-size:1.25rem;line-height:1rem;color:var(--border-color);cursor:pointer;user-select:none}._mbox_5x43w_1 ._close_5x43w_27:hover{filter:brightness(1.2)}._mbox_5x43w_1 ._close_5x43w_27:active{filter:brightness(.8)}._mbox_5x43w_1.mbox-type-note,._mbox_5x43w_1.mbox-type-info{--border-color: #1f6feb;--title-color: #AFD1FE;--content-color: #f3f9ff}._mbox_5x43w_1.mbox-type-tip,._mbox_5x43w_1.mbox-type-success{--border-color: #238636;--title-color: #E0F1E3;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-important,._mbox_5x43w_1.mbox-type-done{--border-color: #8957e5;--title-color: #DDCBFC;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-warning{--border-color: #9e6a03;--title-color: #E4CC9D;--content-color: #fff9db}._mbox_5x43w_1.mbox-type-caution,._mbox_5x43w_1.mbox-type-error{--border-color: #da3633;--title-color: #FCB9B6;--content-color: #f9f9f9}._twinSwapInput_1gdgl_9{display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:"input-left swap-button input-right";gap:1rem;align-items:end}@media(max-width:768px){._twinSwapInput_1gdgl_9{grid-template-columns:1fr;grid-template-areas:"input-left" "swap-button" "input-right";gap:.75rem}}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23{display:flex;flex-direction:column}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputLeft_1gdgl_27{grid-area:input-left}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputRight_1gdgl_30{grid-area:input-right}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 label{display:block;margin-bottom:.5em;font-weight:500;font-size:.875rem}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input{width:100%}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46{grid-area:swap-button;display:flex;align-items:center;justify-content:center}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{position:relative;display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;width:2rem;height:2rem;border:none;background:#efefef;cursor:pointer;transition:all .2s ease}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:hover{background:#e0e0e0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:active{background:#d0d0d0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button svg{transition:all .2s ease;width:1.25rem;height:1.25rem}@media(max-width:768px){._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{transform:rotate(90deg)}}._tabview_zlbug_1{font-size:14px}._tabview_zlbug_1 ._labels_container_zlbug_4{font-size:16px;list-style:none;margin:0;white-space:nowrap;overflow-x:auto}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4{flex:auto;padding:0;margin:0;display:inline-block;text-align:center;text-transform:uppercase}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:not(:first-child){margin-left:.5em}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4 a{display:inline-block;padding:.25em .5em;text-decoration:none;color:#08d;cursor:pointer}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:hover a{box-shadow:0 -2px #0088dd40 inset}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4._active_zlbug_32 a{box-shadow:0 -2px #08d inset}._tabview_zlbug_1 ._contents_container_zlbug_35{margin-top:1em}:root{--ipe-modal-z: 1000;--ipe-modal-backdrop-bg: rgba(0, 0, 0, .5);--ipe-modal-bg: #ffffff;--ipe-modal-secondary-bg: #eaecf0;--ipe-modal-text: #111827;--ipe-modal-text--rgb: 17, 24, 39;--ipe-modal-muted: #6b7280;--ipe-modal-accent: #3b82f6;--ipe-modal-accent--rgb: 59, 130, 246;--ipe-modal-success: #10b981;--ipe-modal-info: #3b82f6;--ipe-modal-warning: #f59e0b;--ipe-modal-danger: #ef4444;--ipe-modal-danger--rgb: 239, 68, 68;--ipe-modal-border-color: #eaecf0;--ipe-modal-divider-color: #e5e7eb;--ipe-modal-radius: 8px;--ipe-modal-button-radius: 6px;--ipe-modal-shadow: 0 0 40px rgba(127, 127, 127, .5);--ipe-modal-spacing: 12px;--ipe-modal-viewport-gap-y: 20px;--ipe-modal-window-max-w: 96vw;--ipe-modal-anim: none;--ipe-modal-safe-area-top: env(safe-area-inset-top);--ipe-modal-safe-area-bottom: env(safe-area-inset-bottom);--ipe-modal-vh: 100vh}@supports (height: 100dvh){:root{--ipe-modal-vh: 100dvh}}:root{--ipe-modal-window-max-h: calc( var(--ipe-modal-vh) - var(--ipe-modal-safe-area-top) - var(--ipe-modal-safe-area-bottom) - (var(--ipe-modal-viewport-gap-y) * 2) )}body.ipe-modal-no-scroll{overflow:hidden!important;touch-action:none;-webkit-overflow-scrolling:auto}.ipe-modal-backdrop{position:fixed;inset:0;z-index:var(--ipe-modal-z);background:transparent;transition:background .18s ease;pointer-events:none}.ipe-modal-backdrop.is-open{background:var(--ipe-modal-backdrop-bg);pointer-events:auto}.ipe-modal-modal{position:fixed;inset:0;z-index:calc(var(--ipe-modal-z) + 1);outline:none;display:grid;align-items:start;justify-items:center;overflow:auto;opacity:0;transform:translateY(8px) scale(.98);transition:opacity .18s ease,transform .22s ease;pointer-events:none}.ipe-modal-modal.is-open{opacity:1;transform:none}.ipe-modal-modal.is-centered{display:grid;align-items:center}.ipe-modal-modal.is-fullscreen .ipe-modal-modal__window{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.ipe-modal-modal.no-backdrop{position:absolute;inset:auto;display:block;padding:0;overflow:visible}.ipe-modal-modal.is-dragging{transition:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__window{animation:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__header{cursor:grabbing!important}.ipe-modal-modal__window{position:relative;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);border-radius:var(--ipe-modal-radius);box-shadow:var(--ipe-modal-shadow);max-width:var(--ipe-modal-window-max-w);width:min(92vw,var(--ipe-modal-window-max-w));overflow:hidden;display:block;animation:var(--ipe-modal-anim, none) .22s ease-in-out both;pointer-events:auto;overscroll-behavior:contain;margin-top:var(--ipe-modal-viewport-gap-y, 20px);margin-bottom:var(--ipe-modal-viewport-gap-y, 20px)}.size--dialog{max-width:420px}.size--small{max-width:520px}.size--smallToMedium{max-width:640px}.size--medium{max-width:max(64%,860px)}.size--mediumToLarge{max-width:max(72%,1080px)}.size--large{max-width:max(80%,1200px)}.size--full{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.size--auto{max-width:var(--ipe-modal-window-max-w)}.ipe-modal-modal__window.is-fixed-height{height:min(var(--ipe-modal-window-max-h),80vh)}.ipe-modal-modal__header{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-bottom:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__title{font-size:1.125rem;font-weight:700;line-height:1;margin:0}.ipe-modal-modal__icons{display:inline-flex;gap:6px}.ipe-modal-modal__icon{width:28px;height:28px;border-radius:8px;border:0;background:transparent}.ipe-modal-modal__close{margin-left:6px;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:var(--ipe-modal-button-radius);background:transparent;font-size:22px;line-height:1;color:var(--ipe-modal-muted);cursor:pointer}.ipe-modal-modal__close:hover{background:#0000000f;color:var(--ipe-modal-text)}.ipe-modal-modal__content{padding:var(--ipe-modal-spacing);max-height:85dvh;overflow:auto;-webkit-overflow-scrolling:touch}.ipe-modal-modal__footer{background:var(--ipe-modal-secondary-bg);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-top:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__buttons{display:inline-flex;gap:8px}.ipe-modal-toast-container{position:fixed;z-index:2000;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.ipe-modal-toast-container.top{top:16px}.ipe-modal-toast-container.bottom{bottom:16px;flex-direction:column-reverse}.ipe-modal-toast-container.right{right:16px}.ipe-modal-toast-container.left{left:16px}.ipe-modal-modal__window.plugin--toast{--type-color: var(--ipe-modal-bg);--text-color: var(--ipe-modal-text);width:300px;border-radius:calc(var(--ipe-modal-radius) * .75);margin-top:0;margin-bottom:0;border:0;border-left:calc(var(--ipe-modal-radius) * .75) solid var(--type-color)}.ipe-modal-modal__window.plugin--toast.type-default{--type-color: var(--ipe-modal-secondary-bg)}.ipe-modal-modal__window.plugin--toast.type-info{--type-color: var(--ipe-modal-info);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-success{--type-color: var(--ipe-modal-success);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-warning{--type-color: var(--ipe-modal-warning);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-error{--type-color: var(--ipe-modal-danger);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header{padding:.5em;background-color:var(--type-color);color:var(--text-color);border-bottom:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title{display:flex;align-items:center}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title .ipe-modal-notify-icon{margin-right:.5em;width:20px;height:20px}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__close{width:20px;height:20px;font-size:16px;color:var(--ipe-modal-muted)}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__content{padding:1em .5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__footer{padding:.5em;background-color:transparent;border-top:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-btn{padding:.25em .75em!important}.ipe-modal-btn{--accent-color: #fff;--text-color: var(--ipe-modal-text);--active-color: rgba(0, 0, 0, .1);appearance:none;border:1px solid rgba(0,0,0,.14);background:var(--accent-color);color:var(--text-color);padding:8px 12px;border-radius:var(--ipe-modal-button-radius);cursor:pointer;font:inherit;transition:all .2s;line-height:1}.ipe-modal-btn:hover{background:#0000000a}.ipe-modal-btn:disabled{opacity:.6;cursor:not-allowed}.ipe-modal-btn:active{background:#0000000f;box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn:focus{box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn.is-primary{--accent-color: var(--ipe-modal-accent);--text-color: #fff;--active-color: rgba(var(--ipe-modal-accent--rgb), .5);border-color:var(--accent-color);background:var(--accent-color)}.ipe-modal-btn.is-danger{--accent-color: var(--ipe-modal-danger);--text-color: #fff;--active-color: rgba(var(--ipe-modal-danger--rgb), .2);border-color:var(--accent-color);background:var(--accent-color);color:var(--text-color)}.ipe-modal-btn.is-ghost,.ipe-modal-btn.is-text{background:transparent}.ipe-modal-btn.is-text{border:0;color:var(--ipe-modal-text)}.ipe-modal-btn.is-ghost.is-primary,.ipe-modal-btn.is-text.is-primary{color:var(--ipe-modal-accent)}.ipe-modal-btn.is-ghost.is-danger,.ipe-modal-btn.is-text.is-danger{color:var(--ipe-modal-danger)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{padding:0;background-color:transparent}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer .ipe-modal-btn,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer .ipe-modal-btn{flex:1;border:0;margin:0;padding:1rem;border-radius:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer .ipe-modal-btn:not(:first-child),.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer .ipe-modal-btn:not(:first-child){border-left:1px solid rgba(0,0,0,.06)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--left,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--left{display:none}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--right,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--right{flex:1;width:100%;display:flex;gap:0}@keyframes ipe-modal-fade-in{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@keyframes ipe-modal-fade-out{0%{transform:scale(1);opacity:1}to{transform:scale(.85);opacity:0}}.theme-ipe{--color-primary: #36c;--color-primary-hover: #447ff5;--color-primary-active: #2a4b8d;--color-promary--rgb: 51, 102, 204;--color-white: #fff;--color-text-dark: #222;--color-text-medium: #252525;--color-text-hover: #454545;--color-bg-light: #f8f9fa;--color-bg-lighter: #fafafa;--color-bg-lightest: #f8f8f8;--color-bg-gray: #f4f4f4;--color-border-gray: #c8ccd1;--color-border-light: #efefef;--color-border-input: #ccc;--color-border-dark: #72777d;--color-border-disabled: #d6d6d6;--color-danger: #d33;--color-danger-hover: #ff4242;--color-danger-active: #d00;--color-danger--rgb: 211, 51, 51;--color-disabled-bg: #c8ccd1;--color-disabled-dark: #a0a0a0;--font-size-button: 14px;--font-size-label: 1rem;--font-weight-label: 700;--border-width: 1px;--border-width-radio-checked: 6px;--border-radius-button: 6px;--border-radius-input: 4px;--padding-button-y: .5em;--padding-button-x: 1em;--padding-button-dialog: 1em;--padding-input-y: .25em;--padding-input-x: .35em;--size-checkbox: 1.2em;--size-radio: 1.4em;--margin-checkbox-top: .15em;--margin-checkbox-right: .375em;--textarea-height: 50vh;--textarea-min-height: 20em;--textarea-background: var(--color-bg-lighter);--line-height-input: 1.5em;--line-height-checkbox: 1.2em;--transition-fast: .1s;--transition-medium: .12s;--transition-slow: .2s;--ipe-modal-accent: var(--color-primary);--ipe-modal-danger: var(--color-danger);--ipe-modal-button-radius: var(--border-radius-button);font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.theme-ipe textarea[name=text]{width:100%;height:var(--textarea-height);min-height:var(--textarea-min-height);background:var(--textarea-background);resize:vertical;border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);padding:var(--padding-input-y) var(--padding-input-x);outline:none}.theme-ipe textarea[name=text]:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe textarea[name=text]:disabled{background-color:var(--color-disabled-bg);color:var(--color-white);cursor:not-allowed}.theme-ipe .ipe-quickEdit__textarea--monospace{font-family:monospace}.theme-ipe .ipe-quickEdit__textarea--sans-serif{font-family:sans-serif}.theme-ipe .ipe-quickEdit__textarea--serif{font-family:serif}.theme-ipe .ipe-input-box label{display:block;font-size:.875rem;margin-bottom:.5em;font-weight:500}.theme-ipe .ipe-input-box input[type=text],.theme-ipe .ipe-input-box input[type=number],.theme-ipe .ipe-input-box input[type=email],.theme-ipe .ipe-input-box input[type=password],.theme-ipe .ipe-input-box input[type=url],.theme-ipe .ipe-input-box input[type=tel],.theme-ipe .ipe-input-box input[type=search]{width:100%}.theme-ipe input{padding:var(--padding-input-y) var(--padding-input-x);border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);outline:none}.theme-ipe input:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe label input[type=checkbox]+span,.theme-ipe label input[type=radio]+span{user-select:none;line-height:var(--line-height-checkbox)}.theme-ipe label input[type=checkbox]+span:before,.theme-ipe label input[type=radio]+span:before{content:" ";display:inline-block;width:var(--size-checkbox);height:var(--size-checkbox);margin-top:var(--margin-checkbox-top);margin-right:var(--margin-checkbox-right);border-radius:var(--border-radius-input);background-color:var(--color-bg-lightest);border:var(--border-width) solid var(--color-border-dark);cursor:pointer;transition:all var(--transition-medium)}.theme-ipe label input[type=radio]+span:before{border-radius:50%;box-sizing:border-box;vertical-align:text-bottom;width:var(--size-radio);height:var(--size-radio)}.theme-ipe label input[type=checkbox]:checked+span:before{content:" ";background-color:var(--color-primary);background-image:url(data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kOyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxnIGlkPSJjaGVja21hcmsiPjxwYXRoIGQ9Ik0xMy43NDkyKzMuNDkwOTVMNS44NjMxMisxMS42MzM3TDIuMjUwNzcrNy45NjA4MkwxLjQ4NzYrOC43NTc3OEw1Ljg2MzEyKzEzLjE5M0wxNC41MTI0KzQuMjg3OUwxMy43NDkyKzMuNDkwOTVaIiBvcGFjaXR5PSIxIiBmaWxsPSIjZmZmZmZmIi8+PC9nPjwvc3ZnPg==);background-repeat:no-repeat}.theme-ipe label input[type=radio]:checked+span:before{border-color:var(--color-primary);border-width:var(--border-width-radio-checked)}.theme-ipe label input[type=checkbox]:checked+span:hover:before{background-color:var(--color-primary-hover)}.theme-ipe label input[type=radio]:checked+span:hover:before{border-color:var(--color-primary-hover)}.theme-ipe label input[type=checkbox]:active+span:before,.theme-ipe label input[type=checkbox]:focus+span:before{box-shadow:0 0 0 2px rgba(var(--color-promary--rgb),.5);border-color:var(--color-primary)}.theme-ipe label input[type=checkbox],.theme-ipe label input[type=radio]{position:absolute;clip:rect(0,0,0,0)}.theme-ipe .cm-panel label input[type=checkbox],.theme-ipe .cm-panel label input[type=radio]{position:initial;clip:initial}.theme-ipe label input[type=checkbox]:disabled+span:before{border-color:var(--color-border-disabled)}.theme-ipe label input[type=radio]:disabled+span:before{background-color:var(--color-disabled-bg);border-color:var(--color-disabled-bg)}.theme-ipe label input[type=checkbox]:disabled:checked+span:before{background-color:var(--color-disabled-dark)}.theme-ipe label input[type=radio]:disabled:checked+span:before{background-color:var(--color-white)}.theme-ipe .ipe-radio-box span,.theme-ipe .ipe-checkbox span{vertical-align:middle}.theme-ipe svg.icon{height:1em;height:1lh;width:auto;vertical-align:middle}.theme-ipe .ipe-action-button{color:var(--text-color)}.theme-ipe-prose{color:var(--color-text-dark);line-height:1.6}.theme-ipe-prose h1,.theme-ipe-prose h2,.theme-ipe-prose h3,.theme-ipe-prose h4,.theme-ipe-prose h5,.theme-ipe-prose h6{color:var(--color-text-dark);line-height:1.25;margin-top:1em;margin-bottom:.75em;scroll-margin-top:2rem;position:relative;padding:0;padding-left:1rem}.theme-ipe-prose h1:before,.theme-ipe-prose h2:before,.theme-ipe-prose h3:before,.theme-ipe-prose h4:before,.theme-ipe-prose h5:before,.theme-ipe-prose h6:before{content:"";display:block;position:absolute;top:50%;left:0;transform:translateY(-50%);border-radius:1em}.theme-ipe-prose h1.plain,.theme-ipe-prose h2.plain,.theme-ipe-prose h3.plain,.theme-ipe-prose h4.plain,.theme-ipe-prose h5.plain,.theme-ipe-prose h6.plain{padding-left:0}.theme-ipe-prose h1.plain:before,.theme-ipe-prose h2.plain:before,.theme-ipe-prose h3.plain:before,.theme-ipe-prose h4.plain:before,.theme-ipe-prose h5.plain:before,.theme-ipe-prose h6.plain:before{display:none}.theme-ipe-prose h1{font-size:2rem;font-weight:700;letter-spacing:-.025em;margin-top:0}.theme-ipe-prose h2{font-size:1.6rem;font-weight:700;letter-spacing:-.025em}.theme-ipe-prose h2:before{width:.3rem;height:80%;background-color:var(--color-primary)}.theme-ipe-prose h3{font-size:1.3rem;font-weight:600}.theme-ipe-prose h3:before{width:.25rem;height:70%;margin-left:.05rem;background-color:rgba(var(--color-promary--rgb),.85)}.theme-ipe-prose h4{font-size:1.2rem;font-weight:600}.theme-ipe-prose h4:before{width:.2rem;height:60%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.7)}.theme-ipe-prose h5{font-size:1.125rem;font-weight:500}.theme-ipe-prose h5:before{width:.15rem;height:50%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.55)}.theme-ipe-prose h6{font-size:1rem;font-weight:500;color:var(--color-text-hover)}.theme-ipe-prose h6:before{width:.15rem;height:40%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.4)}.theme-ipe-prose p{margin-top:0;margin-bottom:1.25em}.theme-ipe-prose strong{font-weight:700;color:var(--color-text-dark)}.theme-ipe-prose em{font-style:italic}.theme-ipe-prose a:not(.ipe-modal-btn){color:var(--color-primary);text-decoration:none;font-weight:500;border-bottom:1px solid transparent;transition:all var(--transition-fast)}.theme-ipe-prose a:not(.ipe-modal-btn):hover{color:var(--color-primary-hover);border-bottom-color:var(--color-primary-hover)}.theme-ipe-prose a:not(.ipe-modal-btn):active{color:var(--color-primary-active)}.theme-ipe-prose a:not(.ipe-modal-btn) code{color:inherit}.theme-ipe-prose ul,.theme-ipe-prose ol{margin-top:1em;margin-bottom:1em;padding-left:1.625em}.theme-ipe-prose ul{list-style-type:disc}.theme-ipe-prose ol{list-style-type:decimal}.theme-ipe-prose li{margin-top:.5em;margin-bottom:.5em}.theme-ipe-prose li::marker{color:var(--color-text-hover)}.theme-ipe-prose ul ul,.theme-ipe-prose ul ol,.theme-ipe-prose ol ul,.theme-ipe-prose ol ol{margin-top:.5em;margin-bottom:.5em}.theme-ipe-prose blockquote{margin:1.5em 0;padding:1em 1.5em;border-left:4px solid var(--color-primary);background-color:var(--color-bg-lighter);border-radius:0 var(--border-radius-input) var(--border-radius-input) 0;font-style:italic;color:var(--color-text-medium)}.theme-ipe-prose blockquote p:last-child{margin-bottom:0}.theme-ipe-prose blockquote cite{display:block;margin-top:1em;font-size:.875em;font-style:normal;color:var(--color-text-hover)}.theme-ipe-prose blockquote cite:before{content:"— "}.theme-ipe-prose code{font-family:Consolas,Monaco,Courier New,monospace;font-size:.875em;background-color:var(--color-bg-lighter);padding:.2em .4em;border-radius:4px;border:1px solid var(--color-border-light);color:var(--color-text-dark);font-weight:400}.theme-ipe-prose pre{margin:1.5em 0;padding:1.25em 1.5em;background-color:var(--color-bg-lightest);border:1px solid var(--color-border-light);border-radius:var(--border-radius-input);overflow-x:auto;line-height:1.7}.theme-ipe-prose pre code{background-color:transparent;padding:0;border:none;border-radius:0;font-size:.875rem}.theme-ipe-prose hr{margin:1em 0;border:0;border-top:2px solid var(--color-border-light)}.theme-ipe-prose table{width:100%;margin:1.5em 0;border-collapse:collapse;font-size:.875em;line-height:1.5}.theme-ipe-prose thead{border-bottom:2px solid var(--color-border-gray)}.theme-ipe-prose th{padding:.75em 1em;text-align:left;font-weight:600;color:var(--color-text-dark);background-color:var(--color-bg-light)}.theme-ipe-prose td{padding:.75em 1em;border-bottom:1px solid var(--color-border-light)}.theme-ipe-prose tbody tr:hover{background-color:var(--color-bg-lighter)}.theme-ipe-prose img{max-width:100%;height:auto;border-radius:var(--border-radius-input);margin:1.5em 0}.theme-ipe-prose figure{margin:1.5em 0}.theme-ipe-prose figure img{margin:0}.theme-ipe-prose figure figcaption{margin-top:.75em;text-align:center;font-size:.875em;color:var(--color-text-hover);font-style:italic}.theme-ipe-prose kbd{font-family:inherit;font-size:.875em;padding:.2em .5em;border:1px solid var(--color-border-gray);border-radius:4px;background-color:var(--color-bg-light);box-shadow:0 1px 0 var(--color-border-gray),0 2px 0 var(--color-border-light);display:inline-block;line-height:1;white-space:nowrap}.theme-ipe-prose mark{background-color:#fff3cd;padding:.1em .3em;border-radius:2px;color:inherit}.theme-ipe-prose del{text-decoration:line-through;color:var(--color-text-hover)}.theme-ipe-prose ins{text-decoration:none;border-bottom:1px solid var(--color-primary);background-color:rgba(var(--color-promary--rgb),.1)}.theme-ipe-prose abbr{text-decoration:underline dotted;cursor:help}.theme-ipe-prose details{margin:1em 0;padding:1em;border:1px solid var(--color-border-light);border-radius:var(--border-radius-input);background-color:var(--color-bg-lighter)}.theme-ipe-prose details summary{cursor:pointer;font-weight:600;color:var(--color-primary);user-select:none;margin:-1em;padding:1em;transition:background-color var(--transition-fast)}.theme-ipe-prose details summary:hover{background-color:var(--color-bg-light)}.theme-ipe-prose details[open] summary{margin-bottom:.75em;border-bottom:1px solid var(--color-border-light)}@media(max-width:640px){.theme-ipe-prose{font-size:.875rem}.theme-ipe-prose h1{font-size:1.875rem}.theme-ipe-prose h2{font-size:1.5rem}.theme-ipe-prose h3{font-size:1.25rem}}svg.ipe-icon{height:1em;height:1lh;width:auto;vertical-align:middle}@media(min-width:768px){.skin-moeskin #ipe-edit-toolbox{bottom:5rem}}body.skin-fandomdesktop #ipe-edit-toolbox{bottom:3em}.tabbar .tabbar-tabs[data-v-7f07706b]{--border-color: #efefef;--tab-color: #666;--active-color: #3366bb;display:flex;gap:.5em;border-bottom:1px solid #efefef;margin-bottom:1em;white-space:nowrap;overflow-x:auto}.tabbar .tabbar-tabs .tab[data-v-7f07706b]{padding:.5em 1em;cursor:pointer;user-select:none;color:var(--tab-color);display:inline-block;transition:color .3s ease,box-shadow .3s ease}.tabbar .tabbar-tabs .tab.active[data-v-7f07706b]{color:var(--active-color);box-shadow:inset 0 -.15em 0 0 var(--active-color)}schema-form[data-v-7f07706b]{margin-bottom:.5em;--schema-radius: 6px}#preferences-ui-app .schema-form-item.field{border:0}.theme-ipe.diff-type-table .diff-title{line-height:1.5}.theme-ipe.diff-type-table .mw-diff-title--navigation{text-align:center;color:#666}#ipe-edit-toolbox{font-size:16px;position:fixed;right:2em;bottom:2em;user-select:none;z-index:42}@media print{#ipe-edit-toolbox{display:none}}#ipe-edit-toolbox .ipe-toolbox-btn{color:#fff;background:#bebebe;height:1.5em;width:1.5em;font-size:1.5em;line-height:1;border:0;border-radius:50%;box-shadow:0 0 8px #7f7f7f80;text-shadow:0 0 2px #4c4c4c;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}#ipe-edit-toolbox .ipe-toolbox-btn svg,#ipe-edit-toolbox .ipe-toolbox-btn img{line-height:1;width:1em;height:1em;vertical-align:middle}#ipe-edit-toolbox .ipe-toolbox-btn:disabled{cursor:not-allowed;filter:grayscale(50%) opacity(.75)}#ipe-edit-toolbox #toolbox-toggler{position:absolute;right:0;bottom:0;width:2em;height:2em;background:#3f51b5;font-size:1.5em;line-height:1;margin:0;transition:transform .3s cubic-bezier(.68,-.55,.27,1.55);transform:rotate(0)}#ipe-edit-toolbox.is-persistent #toolbox-toggler{transform:rotate(45deg)}#ipe-edit-toolbox .btn-group.group1 .btn-tip-group{transform:translate3d(0,100%,0)}#ipe-edit-toolbox .btn-group.group2 .btn-tip-group{transform:translate3d(100%,0,0)}#ipe-edit-toolbox .btn-group .btn-tip-group{transition-timing-function:cubic-bezier(.68,-.55,.27,1.55);transition-duration:.3s;transition-delay:var(--transition-delay, 0s);opacity:0}#ipe-edit-toolbox.is-persistent .btn-group .btn-tip-group,#ipe-edit-toolbox.is-hovered .btn-group .btn-tip-group{transform:translateZ(0);opacity:1}#ipe-edit-toolbox:not(.is-persistent):not(.is-hovered) .btn-group .btn-tip-group{transition-delay:calc(var(--max-transition-delay) - var(--transition-delay))}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{transform:scaleZ(1)}#ipe-edit-toolbox .ipe-toolbox-btn#toolbox-toggler.click{box-shadow:0 0 4px gray,0 0 10px #444 inset}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-edit-btn{background:#2196f3}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-move-btn{background:#00bcd4}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-redirect-btn{background:#009688}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-delete-btn{background:#e91e63}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__preferences-btn{background:#ffc107}#ipe-edit-toolbox .btn-group{position:absolute;display:flex;gap:.5em;list-style:none;margin:0;pointer-events:none}#ipe-edit-toolbox .btn-group.group1{bottom:3.5em;right:.375em;flex-direction:column}#ipe-edit-toolbox .btn-group.group2{bottom:.25em;right:3.375em}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{visibility:visible;pointer-events:auto}#ipe-edit-toolbox .btn-tip-group .btn-tip{position:absolute;text-align:center;font-size:12px;white-space:nowrap;left:50%;bottom:calc(100% + .5em);transform:translate(-50%);background:#fff;color:#252525;padding:.2em .5em;box-shadow:0 0 .5em #7f7f7f80;border-radius:.5em;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out,bottom .2s ease-in-out}#ipe-edit-toolbox .btn-tip-group:hover .btn-tip{opacity:1;bottom:calc(100% + 1em)}#ipe-edit-toolbox .btn-tip-group .btn-tip:after{content:"";display:block;border:5px solid transparent;border-radius:2px;border-right-color:#fff;border-bottom-color:#fff;position:absolute;bottom:-8px;left:50%;transform:rotate(45deg) translate(-50%)}#ipe-plugin-store-app[data-v-6fcc9e77]{padding:var(--ipe-modal-spacing);font-size:.875rem;color:var(--ipe-modal-text)}.sotre-header[data-v-6fcc9e77]{margin-bottom:1.25rem;display:flex;align-items:center;gap:var(--ipe-modal-spacing)}.sotre-header h2[data-v-6fcc9e77]{margin:0;font-size:1.125rem;font-weight:600;color:var(--ipe-modal-text)}.sotre-header .store-search-wrapper[data-v-6fcc9e77]{flex:1;position:relative}.sotre-header .store-search-wrapper .store-search-input[data-v-6fcc9e77]{width:100%;height:2.5rem;padding:0 .875rem 0 2.5rem;border:1.5px solid var(--ipe-modal-border-color);border-radius:var(--ipe-modal-button-radius);font-size:.875rem;outline:none;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);transition:all .2s ease;line-height:1.5}.sotre-header .store-search-wrapper .store-search-input[data-v-6fcc9e77]:focus{border-color:var(--ipe-modal-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ipe-modal-accent) 10%,transparent)}.sotre-header .store-search-wrapper .store-search-input[data-v-6fcc9e77]::placeholder{color:var(--ipe-modal-muted)}.sotre-header .store-search-wrapper .store-search-icon[data-v-6fcc9e77]{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);pointer-events:none;opacity:.5}.sotre-header .store-refresh-btn[data-v-6fcc9e77]{height:2.5rem;padding:0 1rem;border:1.5px solid var(--ipe-modal-border-color);border-radius:var(--ipe-modal-button-radius);background:var(--ipe-modal-bg);color:var(--ipe-modal-text);cursor:pointer;font-size:.875rem;font-weight:500;white-space:nowrap;transition:all .2s ease;display:flex;align-items:center;gap:.375rem}.sotre-header .store-refresh-btn[data-v-6fcc9e77]:hover:not(:disabled){background:var(--ipe-modal-secondary-bg);border-color:var(--ipe-modal-accent);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--ipe-modal-text) 10%,transparent)}.sotre-header .store-refresh-btn[data-v-6fcc9e77]:active:not(:disabled){transform:translateY(0)}.sotre-header .store-refresh-btn[data-v-6fcc9e77]:disabled{opacity:.6;cursor:not-allowed}.store-loading[data-v-6fcc9e77]{padding:10rem 1.25rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.75rem}.store-loading .loading-spinner[data-v-6fcc9e77]{width:2rem;height:2rem;border:3px solid var(--ipe-modal-border-color);border-top-color:var(--ipe-modal-accent);border-radius:50%;animation:spin-6fcc9e77 .8s linear infinite}.store-loading .loading-text[data-v-6fcc9e77]{color:var(--ipe-modal-muted);font-size:.875rem}@keyframes spin-6fcc9e77{to{transform:rotate(360deg)}}.store-plugins[data-v-6fcc9e77]{display:flex;flex-direction:column;gap:.75rem}.plugin-item[data-v-6fcc9e77]{display:flex;align-items:center;gap:1rem;padding:.875rem;border:1.5px solid var(--ipe-modal-border-color);border-radius:calc(var(--ipe-modal-button-radius) + 2px);background:var(--ipe-modal-secondary-bg);position:relative;transition:all .2s ease}.plugin-item[data-v-6fcc9e77]:hover{background:var(--ipe-modal-divider-color);border-color:color-mix(in srgb,var(--ipe-modal-accent) 30%,var(--ipe-modal-border-color));box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-text) 5%,transparent)}.plugin-item.installed[data-v-6fcc9e77]{background:color-mix(in srgb,var(--ipe-modal-success) 5%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-success) 50%,var(--ipe-modal-border-color))}.plugin-item.installed[data-v-6fcc9e77]:hover{background:color-mix(in srgb,var(--ipe-modal-success) 8%,var(--ipe-modal-secondary-bg));border-color:var(--ipe-modal-success);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-success) 15%,transparent)}.plugin-item .plugin-info[data-v-6fcc9e77]{flex:1;min-width:0}.plugin-item .plugin-info .plugin-header[data-v-6fcc9e77]{display:flex;align-items:center;gap:.5rem;margin-bottom:.25rem}.plugin-item .plugin-info .plugin-header .name[data-v-6fcc9e77]{font-weight:600;font-size:1rem;color:var(--ipe-modal-text);line-height:1.2}.plugin-item .plugin-info .plugin-header .status-badge[data-v-6fcc9e77]{font-size:.6875rem;color:var(--ipe-modal-success);font-weight:600;background:color-mix(in srgb,var(--ipe-modal-success) 15%,transparent);padding:.125rem .375rem;border-radius:calc(var(--ipe-modal-button-radius) - 2px);line-height:1}.plugin-item .plugin-info .plugin-id[data-v-6fcc9e77]{font-size:.75rem;color:var(--ipe-modal-muted);font-family:monospace;margin-bottom:.375rem;background:color-mix(in srgb,var(--ipe-modal-muted) 5%,transparent);padding:.125rem .375rem;border-radius:3px;display:inline-block;margin-left:.375rem}.plugin-item .plugin-info .registry-tag[data-v-6fcc9e77]{font-size:.6875rem;color:var(--ipe-modal-accent);font-family:monospace;margin-bottom:.375rem;background:color-mix(in srgb,var(--ipe-modal-accent) 10%,transparent);padding:.125rem .375rem;border-radius:3px;display:inline-block;border:1px solid color-mix(in srgb,var(--ipe-modal-accent) 20%,transparent)}.plugin-item .plugin-info .plugin-desc[data-v-6fcc9e77]{font-size:.8125rem;color:var(--ipe-modal-muted);margin-bottom:.375rem;line-height:1.5}.plugin-item .plugin-info .plugin-meta[data-v-6fcc9e77]{font-size:.75rem;color:var(--ipe-modal-muted);display:flex;gap:1rem}.plugin-item .plugin-info .plugin-meta .version[data-v-6fcc9e77]{font-family:monospace;font-weight:500}.plugin-item .plugin-info .plugin-meta .author[data-v-6fcc9e77]{display:flex;align-items:center;gap:.25rem}.plugin-item button[data-v-6fcc9e77]{padding:.5rem 1.25rem;border:1.5px solid var(--ipe-modal-accent);border-radius:var(--ipe-modal-button-radius);background:var(--ipe-modal-bg);color:var(--ipe-modal-accent);cursor:pointer;font-size:.8125rem;font-weight:500;white-space:nowrap;transition:all .2s ease}.plugin-item button[data-v-6fcc9e77]:hover{background:var(--ipe-modal-accent);color:var(--ipe-modal-bg);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--ipe-modal-accent) 25%,transparent)}.plugin-item button[data-v-6fcc9e77]:active{transform:translateY(0)}.plugin-item button.active[data-v-6fcc9e77]{border-color:var(--ipe-modal-danger);color:var(--ipe-modal-danger)}.plugin-item button.active[data-v-6fcc9e77]:hover{background:var(--ipe-modal-danger);color:var(--ipe-modal-bg);box-shadow:0 2px 6px color-mix(in srgb,var(--ipe-modal-danger) 25%,transparent)}.plugin-empty[data-v-6fcc9e77]{padding:3rem 1.25rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.75rem}.plugin-empty .plugin-empty-icon[data-v-6fcc9e77]{font-size:3rem;opacity:.3}.plugin-empty .plugin-empty-text[data-v-6fcc9e77]{color:var(--ipe-modal-muted);font-size:.9375rem}
1
+ @charset "UTF-8";._ipe_progress_so6hn_1{position:relative;display:inline-block;width:100%;overflow:hidden;border:1px solid #c5c5c5;border-radius:100vmax;background-color:#fff;height:1em;--progress: 0%}._ipe_progress_so6hn_1[data-indeterminate=true]:before,._ipe_progress_so6hn_1[data-indeterminate=true]:after{content:"";position:absolute;top:0;bottom:0;left:0;background-color:#36c}._ipe_progress_so6hn_1[data-indeterminate=true]:before{animation:_progress-indeterminate-long_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=true]:after{animation:_progress-indeterminate-short_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=false]:before{content:"";position:absolute;top:0;bottom:0;left:0;width:var(--progress);background-color:#36c;transition:width .3s ease-in-out}@keyframes _progress-indeterminate-long_so6hn_1{0%{left:0;width:0}50%{left:30%;width:70%}75%{left:100%;width:0}}@keyframes _progress-indeterminate-short_so6hn_1{0%{left:0;width:0}50%{left:0;width:0}75%{left:0;width:25%}to{left:110%;width:0}}.tabbar .tabbar-tabs[data-v-7f07706b]{--border-color: #efefef;--tab-color: #666;--active-color: #3366bb;display:flex;gap:.5em;border-bottom:1px solid #efefef;margin-bottom:1em;white-space:nowrap;overflow-x:auto}.tabbar .tabbar-tabs .tab[data-v-7f07706b]{padding:.5em 1em;cursor:pointer;user-select:none;color:var(--tab-color);display:inline-block;transition:color .3s ease,box-shadow .3s ease}.tabbar .tabbar-tabs .tab.active[data-v-7f07706b]{color:var(--active-color);box-shadow:inset 0 -.15em 0 0 var(--active-color)}schema-form[data-v-7f07706b]{margin-bottom:.5em;--schema-radius: 6px}#preferences-ui-app .schema-form-item.field{border:0}._mbox_5x43w_1{--border-color: #dfdfdf;--title-color: #efefef;--content-color: #ffffff;border-radius:.5rem;border:1px solid var(--title-color);border-left:6px solid var(--border-color);overflow:hidden;margin-bottom:1rem;position:relative}._mbox_5x43w_1 ._title_5x43w_12{background-color:var(--title-color);padding:.5rem 1rem;font-weight:700;font-size:1rem;line-height:1.2}._mbox_5x43w_1 ._content_5x43w_19{background-color:var(--content-color);padding:.5rem 1rem;font-size:1rem;line-height:1.5;max-height:14em;overflow:auto}._mbox_5x43w_1 ._close_5x43w_27{position:absolute;top:.5rem;right:.5rem;font-size:1.25rem;line-height:1rem;color:var(--border-color);cursor:pointer;user-select:none}._mbox_5x43w_1 ._close_5x43w_27:hover{filter:brightness(1.2)}._mbox_5x43w_1 ._close_5x43w_27:active{filter:brightness(.8)}._mbox_5x43w_1.mbox-type-note,._mbox_5x43w_1.mbox-type-info{--border-color: #1f6feb;--title-color: #AFD1FE;--content-color: #f3f9ff}._mbox_5x43w_1.mbox-type-tip,._mbox_5x43w_1.mbox-type-success{--border-color: #238636;--title-color: #E0F1E3;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-important,._mbox_5x43w_1.mbox-type-done{--border-color: #8957e5;--title-color: #DDCBFC;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-warning{--border-color: #9e6a03;--title-color: #E4CC9D;--content-color: #fff9db}._mbox_5x43w_1.mbox-type-caution,._mbox_5x43w_1.mbox-type-error{--border-color: #da3633;--title-color: #FCB9B6;--content-color: #f9f9f9}.theme-ipe.diff-type-table .diff-title{line-height:1.5}.theme-ipe.diff-type-table .mw-diff-title--navigation{text-align:center;color:#666}._twinSwapInput_1gdgl_9{display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:"input-left swap-button input-right";gap:1rem;align-items:end}@media(max-width:768px){._twinSwapInput_1gdgl_9{grid-template-columns:1fr;grid-template-areas:"input-left" "swap-button" "input-right";gap:.75rem}}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23{display:flex;flex-direction:column}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputLeft_1gdgl_27{grid-area:input-left}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputRight_1gdgl_30{grid-area:input-right}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 label{display:block;margin-bottom:.5em;font-weight:500;font-size:.875rem}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input{width:100%}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46{grid-area:swap-button;display:flex;align-items:center;justify-content:center}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{position:relative;display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;width:2rem;height:2rem;border:none;background:#efefef;cursor:pointer;transition:all .2s ease}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:hover{background:#e0e0e0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:active{background:#d0d0d0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button svg{transition:all .2s ease;width:1.25rem;height:1.25rem}@media(max-width:768px){._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{transform:rotate(90deg)}}#ipe-edit-toolbox{font-size:16px;position:fixed;right:2em;bottom:2em;user-select:none;z-index:42}@media print{#ipe-edit-toolbox{display:none}}#ipe-edit-toolbox .ipe-toolbox-btn{color:#fff;background:#bebebe;height:1.5em;width:1.5em;font-size:1.5em;line-height:1;border:0;border-radius:50%;box-shadow:0 0 8px #7f7f7f80;text-shadow:0 0 2px #4c4c4c;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}#ipe-edit-toolbox .ipe-toolbox-btn svg,#ipe-edit-toolbox .ipe-toolbox-btn img{line-height:1;width:1em;height:1em;vertical-align:middle}#ipe-edit-toolbox .ipe-toolbox-btn:disabled{cursor:not-allowed;filter:grayscale(50%) opacity(.75)}#ipe-edit-toolbox #toolbox-toggler{position:absolute;right:0;bottom:0;width:2em;height:2em;background:#3f51b5;font-size:1.5em;line-height:1;margin:0;transition:transform .3s cubic-bezier(.68,-.55,.27,1.55);transform:rotate(0)}#ipe-edit-toolbox.is-persistent #toolbox-toggler{transform:rotate(45deg)}#ipe-edit-toolbox .btn-group.group1 .btn-tip-group{transform:translate3d(0,100%,0)}#ipe-edit-toolbox .btn-group.group2 .btn-tip-group{transform:translate3d(100%,0,0)}#ipe-edit-toolbox .btn-group .btn-tip-group{transition-timing-function:cubic-bezier(.68,-.55,.27,1.55);transition-duration:.3s;transition-delay:var(--transition-delay, 0s);opacity:0}#ipe-edit-toolbox.is-persistent .btn-group .btn-tip-group,#ipe-edit-toolbox.is-hovered .btn-group .btn-tip-group{transform:translateZ(0);opacity:1}#ipe-edit-toolbox:not(.is-persistent):not(.is-hovered) .btn-group .btn-tip-group{transition-delay:calc(var(--max-transition-delay) - var(--transition-delay))}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{transform:scaleZ(1)}#ipe-edit-toolbox .ipe-toolbox-btn#toolbox-toggler.click{box-shadow:0 0 4px gray,0 0 10px #444 inset}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-edit-btn{background:#2196f3}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-move-btn{background:#00bcd4}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-redirect-btn{background:#009688}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-delete-btn{background:#e91e63}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__preferences-btn{background:#ffc107}#ipe-edit-toolbox .btn-group{position:absolute;display:flex;gap:.5em;list-style:none;margin:0;pointer-events:none}#ipe-edit-toolbox .btn-group.group1{bottom:3.5em;right:.375em;flex-direction:column}#ipe-edit-toolbox .btn-group.group2{bottom:.25em;right:3.375em}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{visibility:visible;pointer-events:auto}#ipe-edit-toolbox .btn-tip-group .btn-tip{position:absolute;text-align:center;font-size:12px;white-space:nowrap;left:50%;bottom:calc(100% + .5em);transform:translate(-50%);background:#fff;color:#252525;padding:.2em .5em;box-shadow:0 0 .5em #7f7f7f80;border-radius:.5em;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out,bottom .2s ease-in-out}#ipe-edit-toolbox .btn-tip-group:hover .btn-tip{opacity:1;bottom:calc(100% + 1em)}#ipe-edit-toolbox .btn-tip-group .btn-tip:after{content:"";display:block;border:5px solid transparent;border-radius:2px;border-right-color:#fff;border-bottom-color:#fff;position:absolute;bottom:-8px;left:50%;transform:rotate(45deg) translate(-50%)}:root{--ipe-modal-z: 1000;--ipe-modal-backdrop-bg: rgba(0, 0, 0, .5);--ipe-modal-bg: #ffffff;--ipe-modal-secondary-bg: #eaecf0;--ipe-modal-text: #111827;--ipe-modal-text--rgb: 17, 24, 39;--ipe-modal-muted: #6b7280;--ipe-modal-accent: #3b82f6;--ipe-modal-accent--rgb: 59, 130, 246;--ipe-modal-success: #10b981;--ipe-modal-info: #3b82f6;--ipe-modal-warning: #f59e0b;--ipe-modal-danger: #ef4444;--ipe-modal-danger--rgb: 239, 68, 68;--ipe-modal-border-color: #eaecf0;--ipe-modal-divider-color: #e5e7eb;--ipe-modal-radius: 8px;--ipe-modal-button-radius: 6px;--ipe-modal-shadow: 0 0 40px rgba(127, 127, 127, .5);--ipe-modal-spacing: 12px;--ipe-modal-viewport-gap-y: 20px;--ipe-modal-window-max-w: 96vw;--ipe-modal-anim: none;--ipe-modal-safe-area-top: env(safe-area-inset-top);--ipe-modal-safe-area-bottom: env(safe-area-inset-bottom);--ipe-modal-vh: 100vh}@supports (height: 100dvh){:root{--ipe-modal-vh: 100dvh}}:root{--ipe-modal-window-max-h: calc( var(--ipe-modal-vh) - var(--ipe-modal-safe-area-top) - var(--ipe-modal-safe-area-bottom) - (var(--ipe-modal-viewport-gap-y) * 2) )}body.ipe-modal-no-scroll{overflow:hidden!important;touch-action:none;-webkit-overflow-scrolling:auto}.ipe-modal-backdrop{position:fixed;inset:0;z-index:var(--ipe-modal-z);background:transparent;transition:background .18s ease;pointer-events:none}.ipe-modal-backdrop.is-open{background:var(--ipe-modal-backdrop-bg);pointer-events:auto}.ipe-modal-modal{position:fixed;inset:0;z-index:calc(var(--ipe-modal-z) + 1);outline:none;display:grid;align-items:start;justify-items:center;overflow:auto;opacity:0;transform:translateY(8px) scale(.98);transition:opacity .18s ease,transform .22s ease;pointer-events:none}.ipe-modal-modal.is-open{opacity:1;transform:none}.ipe-modal-modal.is-centered{display:grid;align-items:center}.ipe-modal-modal.is-fullscreen .ipe-modal-modal__window{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.ipe-modal-modal.no-backdrop{position:absolute;inset:auto;display:block;padding:0;overflow:visible}.ipe-modal-modal.is-dragging{transition:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__window{animation:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__header{cursor:grabbing!important}.ipe-modal-modal__window{position:relative;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);border-radius:var(--ipe-modal-radius);box-shadow:var(--ipe-modal-shadow);max-width:var(--ipe-modal-window-max-w);width:min(92vw,var(--ipe-modal-window-max-w));overflow:hidden;display:block;animation:var(--ipe-modal-anim, none) .22s ease-in-out both;pointer-events:auto;overscroll-behavior:contain;margin-top:var(--ipe-modal-viewport-gap-y, 20px);margin-bottom:var(--ipe-modal-viewport-gap-y, 20px)}.size--dialog{max-width:420px}.size--small{max-width:520px}.size--smallToMedium{max-width:640px}.size--medium{max-width:max(64%,860px)}.size--mediumToLarge{max-width:max(72%,1080px)}.size--large{max-width:max(80%,1200px)}.size--full{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.size--auto{max-width:var(--ipe-modal-window-max-w)}.ipe-modal-modal__window.is-fixed-height{height:min(var(--ipe-modal-window-max-h),80vh)}.ipe-modal-modal__header{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-bottom:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__title{font-size:1.125rem;font-weight:700;line-height:1;margin:0}.ipe-modal-modal__icons{display:inline-flex;gap:6px}.ipe-modal-modal__icon{width:28px;height:28px;border-radius:8px;border:0;background:transparent}.ipe-modal-modal__close{margin-left:6px;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:var(--ipe-modal-button-radius);background:transparent;font-size:22px;line-height:1;color:var(--ipe-modal-muted);cursor:pointer}.ipe-modal-modal__close:hover{background:#0000000f;color:var(--ipe-modal-text)}.ipe-modal-modal__content{padding:var(--ipe-modal-spacing);max-height:85dvh;overflow:auto;-webkit-overflow-scrolling:touch}.ipe-modal-modal__footer{background:var(--ipe-modal-secondary-bg);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-top:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__buttons{display:inline-flex;gap:8px}.ipe-modal-toast-container{position:fixed;z-index:2000;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.ipe-modal-toast-container.top{top:16px}.ipe-modal-toast-container.bottom{bottom:16px;flex-direction:column-reverse}.ipe-modal-toast-container.right{right:16px}.ipe-modal-toast-container.left{left:16px}.ipe-modal-modal__window.plugin--toast{--type-color: var(--ipe-modal-bg);--text-color: var(--ipe-modal-text);width:300px;border-radius:calc(var(--ipe-modal-radius) * .75);margin-top:0;margin-bottom:0;border:0;border-left:calc(var(--ipe-modal-radius) * .75) solid var(--type-color)}.ipe-modal-modal__window.plugin--toast.type-default{--type-color: var(--ipe-modal-secondary-bg)}.ipe-modal-modal__window.plugin--toast.type-info{--type-color: var(--ipe-modal-info);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-success{--type-color: var(--ipe-modal-success);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-warning{--type-color: var(--ipe-modal-warning);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-error{--type-color: var(--ipe-modal-danger);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header{padding:.5em;background-color:var(--type-color);color:var(--text-color);border-bottom:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title{display:flex;align-items:center}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title .ipe-modal-notify-icon{margin-right:.5em;width:20px;height:20px}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__close{width:20px;height:20px;font-size:16px;color:var(--ipe-modal-muted)}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__content{padding:1em .5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__footer{padding:.5em;background-color:transparent;border-top:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-btn{padding:.25em .75em!important}.ipe-modal-btn{--accent-color: #fff;--text-color: var(--ipe-modal-text);--active-color: rgba(0, 0, 0, .1);appearance:none;border:1px solid rgba(0,0,0,.14);background:var(--accent-color);color:var(--text-color);padding:8px 12px;border-radius:var(--ipe-modal-button-radius);cursor:pointer;font:inherit;transition:all .2s;line-height:1}.ipe-modal-btn:hover{background:#0000000a}.ipe-modal-btn:disabled{opacity:.6;cursor:not-allowed}.ipe-modal-btn:active{background:#0000000f;box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn:focus{box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn.is-primary{--accent-color: var(--ipe-modal-accent);--text-color: #fff;--active-color: rgba(var(--ipe-modal-accent--rgb), .5);border-color:var(--accent-color);background:var(--accent-color)}.ipe-modal-btn.is-danger{--accent-color: var(--ipe-modal-danger);--text-color: #fff;--active-color: rgba(var(--ipe-modal-danger--rgb), .2);border-color:var(--accent-color);background:var(--accent-color);color:var(--text-color)}.ipe-modal-btn.is-ghost,.ipe-modal-btn.is-text{background:transparent}.ipe-modal-btn.is-text{border:0;color:var(--ipe-modal-text)}.ipe-modal-btn.is-ghost.is-primary,.ipe-modal-btn.is-text.is-primary{color:var(--ipe-modal-accent)}.ipe-modal-btn.is-ghost.is-danger,.ipe-modal-btn.is-text.is-danger{color:var(--ipe-modal-danger)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{padding:0;background-color:transparent}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer .ipe-modal-btn,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer .ipe-modal-btn{flex:1;border:0;margin:0;padding:1rem;border-radius:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer .ipe-modal-btn:not(:first-child),.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer .ipe-modal-btn:not(:first-child){border-left:1px solid rgba(0,0,0,.06)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--left,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--left{display:none}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--right,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--right{flex:1;width:100%;display:flex;gap:0}@keyframes ipe-modal-fade-in{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@keyframes ipe-modal-fade-out{0%{transform:scale(1);opacity:1}to{transform:scale(.85);opacity:0}}.theme-ipe{--color-primary: #36c;--color-primary-hover: #447ff5;--color-primary-active: #2a4b8d;--color-promary--rgb: 51, 102, 204;--color-white: #fff;--color-text-dark: #222;--color-text-medium: #252525;--color-text-hover: #454545;--color-bg-light: #f8f9fa;--color-bg-lighter: #fafafa;--color-bg-lightest: #f8f8f8;--color-bg-gray: #f4f4f4;--color-border-gray: #c8ccd1;--color-border-light: #efefef;--color-border-input: #ccc;--color-border-dark: #72777d;--color-border-disabled: #d6d6d6;--color-danger: #d33;--color-danger-hover: #ff4242;--color-danger-active: #d00;--color-danger--rgb: 211, 51, 51;--color-disabled-bg: #c8ccd1;--color-disabled-dark: #a0a0a0;--font-size-button: 14px;--font-size-label: 1rem;--font-weight-label: 700;--border-width: 1px;--border-width-radio-checked: 6px;--border-radius-button: 6px;--border-radius-input: 4px;--padding-button-y: .5em;--padding-button-x: 1em;--padding-button-dialog: 1em;--padding-input-y: .25em;--padding-input-x: .35em;--size-checkbox: 1.2em;--size-radio: 1.4em;--margin-checkbox-top: .15em;--margin-checkbox-right: .375em;--textarea-height: 50vh;--textarea-min-height: 20em;--textarea-background: var(--color-bg-lighter);--line-height-input: 1.5em;--line-height-checkbox: 1.2em;--transition-fast: .1s;--transition-medium: .12s;--transition-slow: .2s;--ipe-modal-accent: var(--color-primary);--ipe-modal-danger: var(--color-danger);--ipe-modal-button-radius: var(--border-radius-button);font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.theme-ipe textarea{width:100%;background:var(--textarea-background);resize:vertical;border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);padding:var(--padding-input-y) var(--padding-input-x);outline:none}.theme-ipe textarea[name=text]{height:var(--textarea-height);min-height:var(--textarea-min-height)}.theme-ipe textarea:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe textarea:disabled{background-color:var(--color-disabled-bg);color:var(--color-white);cursor:not-allowed}.theme-ipe .ipe-quickEdit__textarea--monospace{font-family:monospace}.theme-ipe .ipe-quickEdit__textarea--sans-serif{font-family:sans-serif}.theme-ipe .ipe-quickEdit__textarea--serif{font-family:serif}.theme-ipe .ipe-input-box label{display:block;font-size:.875rem;margin-bottom:.5em;font-weight:500}.theme-ipe .ipe-input-box input[type=text],.theme-ipe .ipe-input-box input[type=number],.theme-ipe .ipe-input-box input[type=email],.theme-ipe .ipe-input-box input[type=password],.theme-ipe .ipe-input-box input[type=url],.theme-ipe .ipe-input-box input[type=tel],.theme-ipe .ipe-input-box input[type=search]{width:100%}.theme-ipe input{padding:var(--padding-input-y) var(--padding-input-x);border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);outline:none}.theme-ipe input:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe label input[type=checkbox]+span,.theme-ipe label input[type=radio]+span{user-select:none;line-height:var(--line-height-checkbox)}.theme-ipe label input[type=checkbox]+span:before,.theme-ipe label input[type=radio]+span:before{content:" ";display:inline-block;width:var(--size-checkbox);height:var(--size-checkbox);margin-top:var(--margin-checkbox-top);margin-right:var(--margin-checkbox-right);border-radius:var(--border-radius-input);background-color:var(--color-bg-lightest);border:var(--border-width) solid var(--color-border-dark);cursor:pointer;transition:all var(--transition-medium)}.theme-ipe label input[type=radio]+span:before{border-radius:50%;box-sizing:border-box;vertical-align:text-bottom;width:var(--size-radio);height:var(--size-radio)}.theme-ipe label input[type=checkbox]:checked+span:before{content:" ";background-color:var(--color-primary);background-image:url(data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kOyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxnIGlkPSJjaGVja21hcmsiPjxwYXRoIGQ9Ik0xMy43NDkyKzMuNDkwOTVMNS44NjMxMisxMS42MzM3TDIuMjUwNzcrNy45NjA4MkwxLjQ4NzYrOC43NTc3OEw1Ljg2MzEyKzEzLjE5M0wxNC41MTI0KzQuMjg3OUwxMy43NDkyKzMuNDkwOTVaIiBvcGFjaXR5PSIxIiBmaWxsPSIjZmZmZmZmIi8+PC9nPjwvc3ZnPg==);background-repeat:no-repeat}.theme-ipe label input[type=radio]:checked+span:before{border-color:var(--color-primary);border-width:var(--border-width-radio-checked)}.theme-ipe label input[type=checkbox]:checked+span:hover:before{background-color:var(--color-primary-hover)}.theme-ipe label input[type=radio]:checked+span:hover:before{border-color:var(--color-primary-hover)}.theme-ipe label input[type=checkbox]:active+span:before,.theme-ipe label input[type=checkbox]:focus+span:before{box-shadow:0 0 0 2px rgba(var(--color-promary--rgb),.5);border-color:var(--color-primary)}.theme-ipe label input[type=checkbox],.theme-ipe label input[type=radio]{position:absolute;clip:rect(0,0,0,0)}.theme-ipe .cm-panel label input[type=checkbox],.theme-ipe .cm-panel label input[type=radio]{position:initial;clip:initial}.theme-ipe label input[type=checkbox]:disabled+span:before{border-color:var(--color-border-disabled)}.theme-ipe label input[type=radio]:disabled+span:before{background-color:var(--color-disabled-bg);border-color:var(--color-disabled-bg)}.theme-ipe label input[type=checkbox]:disabled:checked+span:before{background-color:var(--color-disabled-dark)}.theme-ipe label input[type=radio]:disabled:checked+span:before{background-color:var(--color-white)}.theme-ipe .ipe-radio-box span,.theme-ipe .ipe-checkbox span{vertical-align:middle}.theme-ipe svg.icon{height:1em;height:1lh;width:auto;vertical-align:middle}.theme-ipe .ipe-action-button{color:var(--text-color)}.theme-ipe-prose{color:var(--color-text-dark);line-height:1.6}.theme-ipe-prose h1,.theme-ipe-prose h2,.theme-ipe-prose h3,.theme-ipe-prose h4,.theme-ipe-prose h5,.theme-ipe-prose h6{color:var(--color-text-dark);line-height:1.25;margin-top:1em;margin-bottom:.75em;scroll-margin-top:2rem;position:relative;padding:0;padding-left:1rem}.theme-ipe-prose h1:before,.theme-ipe-prose h2:before,.theme-ipe-prose h3:before,.theme-ipe-prose h4:before,.theme-ipe-prose h5:before,.theme-ipe-prose h6:before{content:"";display:block;position:absolute;top:50%;left:0;transform:translateY(-50%);border-radius:1em}.theme-ipe-prose h1.plain,.theme-ipe-prose h2.plain,.theme-ipe-prose h3.plain,.theme-ipe-prose h4.plain,.theme-ipe-prose h5.plain,.theme-ipe-prose h6.plain{padding-left:0}.theme-ipe-prose h1.plain:before,.theme-ipe-prose h2.plain:before,.theme-ipe-prose h3.plain:before,.theme-ipe-prose h4.plain:before,.theme-ipe-prose h5.plain:before,.theme-ipe-prose h6.plain:before{display:none}.theme-ipe-prose h1{font-size:2rem;font-weight:700;letter-spacing:-.025em;margin-top:0}.theme-ipe-prose h2{font-size:1.6rem;font-weight:700;letter-spacing:-.025em}.theme-ipe-prose h2:before{width:.3rem;height:80%;background-color:var(--color-primary)}.theme-ipe-prose h3{font-size:1.3rem;font-weight:600}.theme-ipe-prose h3:before{width:.25rem;height:70%;margin-left:.05rem;background-color:rgba(var(--color-promary--rgb),.85)}.theme-ipe-prose h4{font-size:1.2rem;font-weight:600}.theme-ipe-prose h4:before{width:.2rem;height:60%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.7)}.theme-ipe-prose h5{font-size:1.125rem;font-weight:500}.theme-ipe-prose h5:before{width:.15rem;height:50%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.55)}.theme-ipe-prose h6{font-size:1rem;font-weight:500;color:var(--color-text-hover)}.theme-ipe-prose h6:before{width:.15rem;height:40%;margin-left:.1rem;background-color:rgba(var(--color-promary--rgb),.4)}.theme-ipe-prose p{margin-top:0;margin-bottom:1.25em}.theme-ipe-prose strong{font-weight:700;color:var(--color-text-dark)}.theme-ipe-prose em{font-style:italic}.theme-ipe-prose a:not(.ipe-modal-btn){color:var(--color-primary);text-decoration:none;font-weight:500;border-bottom:1px solid transparent;transition:all var(--transition-fast)}.theme-ipe-prose a:not(.ipe-modal-btn):hover{color:var(--color-primary-hover);border-bottom-color:var(--color-primary-hover)}.theme-ipe-prose a:not(.ipe-modal-btn):active{color:var(--color-primary-active)}.theme-ipe-prose a:not(.ipe-modal-btn) code{color:inherit}.theme-ipe-prose ul,.theme-ipe-prose ol{margin-top:1em;margin-bottom:1em;padding-left:1.625em}.theme-ipe-prose ul{list-style-type:disc}.theme-ipe-prose ol{list-style-type:decimal}.theme-ipe-prose li{margin-top:.5em;margin-bottom:.5em}.theme-ipe-prose li::marker{color:var(--color-text-hover)}.theme-ipe-prose ul ul,.theme-ipe-prose ul ol,.theme-ipe-prose ol ul,.theme-ipe-prose ol ol{margin-top:.5em;margin-bottom:.5em}.theme-ipe-prose blockquote{margin:1.5em 0;padding:1em 1.5em;border-left:4px solid var(--color-primary);background-color:var(--color-bg-lighter);border-radius:0 var(--border-radius-input) var(--border-radius-input) 0;font-style:italic;color:var(--color-text-medium)}.theme-ipe-prose blockquote p:last-child{margin-bottom:0}.theme-ipe-prose blockquote cite{display:block;margin-top:1em;font-size:.875em;font-style:normal;color:var(--color-text-hover)}.theme-ipe-prose blockquote cite:before{content:"— "}.theme-ipe-prose code{font-family:Consolas,Monaco,Courier New,monospace;font-size:.875em;background-color:var(--color-bg-lighter);padding:.2em .4em;border-radius:4px;border:1px solid var(--color-border-light);color:var(--color-text-dark);font-weight:400}.theme-ipe-prose pre{margin:1.5em 0;padding:1.25em 1.5em;background-color:var(--color-bg-lightest);border:1px solid var(--color-border-light);border-radius:var(--border-radius-input);overflow-x:auto;line-height:1.7}.theme-ipe-prose pre code{background-color:transparent;padding:0;border:none;border-radius:0;font-size:.875rem}.theme-ipe-prose hr{margin:1em 0;border:0;border-top:2px solid var(--color-border-light)}.theme-ipe-prose table{width:100%;margin:1.5em 0;border-collapse:collapse;font-size:.875em;line-height:1.5}.theme-ipe-prose thead{border-bottom:2px solid var(--color-border-gray)}.theme-ipe-prose th{padding:.75em 1em;text-align:left;font-weight:600;color:var(--color-text-dark);background-color:var(--color-bg-light)}.theme-ipe-prose td{padding:.75em 1em;border-bottom:1px solid var(--color-border-light)}.theme-ipe-prose tbody tr:hover{background-color:var(--color-bg-lighter)}.theme-ipe-prose img{max-width:100%;height:auto;border-radius:var(--border-radius-input);margin:1.5em 0}.theme-ipe-prose figure{margin:1.5em 0}.theme-ipe-prose figure img{margin:0}.theme-ipe-prose figure figcaption{margin-top:.75em;text-align:center;font-size:.875em;color:var(--color-text-hover);font-style:italic}.theme-ipe-prose kbd{font-family:inherit;font-size:.875em;padding:.2em .5em;border:1px solid var(--color-border-gray);border-radius:4px;background-color:var(--color-bg-light);box-shadow:0 1px 0 var(--color-border-gray),0 2px 0 var(--color-border-light);display:inline-block;line-height:1;white-space:nowrap}.theme-ipe-prose mark{background-color:#fff3cd;padding:.1em .3em;border-radius:2px;color:inherit}.theme-ipe-prose del{text-decoration:line-through;color:var(--color-text-hover)}.theme-ipe-prose ins{text-decoration:none;border-bottom:1px solid var(--color-primary);background-color:rgba(var(--color-promary--rgb),.1)}.theme-ipe-prose abbr{text-decoration:underline dotted;cursor:help}.theme-ipe-prose details{margin:1em 0;padding:1em;border:1px solid var(--color-border-light);border-radius:var(--border-radius-input);background-color:var(--color-bg-lighter)}.theme-ipe-prose details summary{cursor:pointer;font-weight:600;color:var(--color-primary);user-select:none;margin:-1em;padding:1em;transition:background-color var(--transition-fast)}.theme-ipe-prose details summary:hover{background-color:var(--color-bg-light)}.theme-ipe-prose details[open] summary{margin-bottom:.75em;border-bottom:1px solid var(--color-border-light)}@media(max-width:640px){.theme-ipe-prose{font-size:.875rem}.theme-ipe-prose h1{font-size:1.875rem}.theme-ipe-prose h2{font-size:1.5rem}.theme-ipe-prose h3{font-size:1.25rem}}svg.ipe-icon{height:1em;height:1lh;width:auto;vertical-align:middle}@media(min-width:768px){.skin-moeskin #ipe-edit-toolbox{bottom:5rem}}body.skin-fandomdesktop #ipe-edit-toolbox{bottom:3em}._tabview_zlbug_1{font-size:14px}._tabview_zlbug_1 ._labels_container_zlbug_4{font-size:16px;list-style:none;margin:0;white-space:nowrap;overflow-x:auto}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4{flex:auto;padding:0;margin:0;display:inline-block;text-align:center;text-transform:uppercase}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:not(:first-child){margin-left:.5em}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4 a{display:inline-block;padding:.25em .5em;text-decoration:none;color:#08d;cursor:pointer}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:hover a{box-shadow:0 -2px #0088dd40 inset}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4._active_zlbug_32 a{box-shadow:0 -2px #08d inset}._tabview_zlbug_1 ._contents_container_zlbug_35{margin-top:1em}.ipeps-header[data-v-132e6dc8]{margin-bottom:1.5rem;display:flex;align-items:center;gap:.875rem}.ipeps-header-title[data-v-132e6dc8]{font-weight:600;font-size:1.125rem;color:var(--ipe-modal-text);letter-spacing:-.01em}.ipeps-input-wrapper[data-v-132e6dc8]{flex:1;position:relative}.ipeps-input-icon[data-v-132e6dc8]{position:absolute;left:.875rem;top:50%;transform:translateY(-50%);pointer-events:none;opacity:.4;font-size:.875rem;transition:all .25s cubic-bezier(.4,0,.2,1)}.ipeps-input[data-v-132e6dc8]{width:100%;line-height:1.5;padding:.625rem .875rem;border:1px solid var(--ipe-modal-border-color);border-radius:6px;font-size:.875rem;outline:none;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);transition:all .25s cubic-bezier(.4,0,.2,1)}.ipeps-input.with-icon[data-v-132e6dc8]{padding-left:2.25rem}.ipeps-input[data-v-132e6dc8]::placeholder{color:var(--ipe-modal-muted);opacity:.6}.ipeps-input[data-v-132e6dc8]:hover:not(:disabled){border-color:color-mix(in srgb,var(--ipe-modal-accent) 30%,var(--ipe-modal-border-color))}.ipeps-input[data-v-132e6dc8]:focus{border-color:var(--ipe-modal-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ipe-modal-accent) 8%,transparent)}.ipeps-input:focus+.ipeps-input-icon[data-v-132e6dc8]{opacity:.6}.ipeps-input[data-v-132e6dc8]:disabled{opacity:.5;cursor:not-allowed}.ipeps-button[data-v-132e6dc8]{padding:.625rem 1rem;line-height:1.5;border:1px solid var(--ipe-modal-border-color);border-radius:6px;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);cursor:pointer;font-size:.875rem;font-weight:500;white-space:nowrap;transition:all .25s cubic-bezier(.4,0,.2,1);display:inline-flex;align-items:center;justify-content:center;gap:.375rem;box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 3%,transparent)}.ipeps-button[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-secondary-bg);border-color:color-mix(in srgb,var(--ipe-modal-accent) 40%,var(--ipe-modal-border-color));box-shadow:0 2px 4px color-mix(in srgb,var(--ipe-modal-text) 6%,transparent)}.ipeps-button[data-v-132e6dc8]:active:not(:disabled){box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 4%,transparent)}.ipeps-button[data-v-132e6dc8]:disabled{opacity:.5;cursor:not-allowed}.ipeps-button.is-primary[data-v-132e6dc8]{border-color:var(--ipe-modal-accent);color:var(--ipe-modal-accent);background:color-mix(in srgb,var(--ipe-modal-accent) 5%,var(--ipe-modal-bg))}.ipeps-button.is-primary[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-accent);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-accent) 20%,transparent)}.ipeps-button.is-accent[data-v-132e6dc8]{border-color:var(--ipe-modal-accent);color:var(--ipe-modal-accent);background:color-mix(in srgb,var(--ipe-modal-accent) 5%,var(--ipe-modal-bg))}.ipeps-button.is-accent[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-accent);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-accent) 20%,transparent)}.ipeps-button.is-danger[data-v-132e6dc8]{border-color:var(--ipe-modal-danger);color:var(--ipe-modal-danger);background:color-mix(in srgb,var(--ipe-modal-danger) 5%,var(--ipe-modal-bg))}.ipeps-button.is-danger[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-danger);color:var(--ipe-modal-bg);border-color:var(--ipe-modal-danger);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-danger) 20%,transparent)}.ipeps-button.is-ghost[data-v-132e6dc8]{background:transparent;box-shadow:none}.ipeps-button.is-ghost[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-secondary-bg);box-shadow:0 1px 3px color-mix(in srgb,var(--ipe-modal-text) 4%,transparent)}.ipeps-button.is-active[data-v-132e6dc8]{border-color:var(--ipe-modal-danger);color:var(--ipe-modal-danger);background:color-mix(in srgb,var(--ipe-modal-danger) 5%,var(--ipe-modal-bg))}.ipeps-button.is-active[data-v-132e6dc8]:hover:not(:disabled){background:var(--ipe-modal-danger);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-danger) 20%,transparent)}.ipeps-button.refreshing[data-v-132e6dc8]{animation:pulse-132e6dc8 1.5s cubic-bezier(.4,0,.6,1) infinite}.ipeps-loading[data-v-132e6dc8],.ipeps-empty[data-v-132e6dc8]{text-align:center;display:flex;flex-direction:column;align-items:center;gap:1rem}.ipeps-loading[data-v-132e6dc8]{padding:6rem 1.25rem}.ipeps-loading .loading-spinner[data-v-132e6dc8]{width:2.5rem;height:2.5rem;border:2px solid color-mix(in srgb,var(--ipe-modal-border-color) 30%,transparent);border-top-color:var(--ipe-modal-accent);border-radius:50%;animation:spin-132e6dc8 .8s linear infinite}.ipeps-loading .loading-text[data-v-132e6dc8]{color:var(--ipe-modal-muted);font-size:.875rem;font-weight:500}.ipeps-empty[data-v-132e6dc8]{padding:4rem 1.25rem}.ipeps-empty .plugin-empty-icon[data-v-132e6dc8],.ipeps-empty .icon[data-v-132e6dc8]{font-size:3rem;opacity:.25;filter:grayscale(.3)}.ipeps-empty .plugin-empty-text[data-v-132e6dc8],.ipeps-empty .text[data-v-132e6dc8]{color:var(--ipe-modal-muted);font-size:.9375rem;font-weight:500}.ipeps-empty .description[data-v-132e6dc8]{margin-top:.5rem;color:var(--ipe-modal-muted);font-size:.8125rem;opacity:.8}@keyframes spin-132e6dc8{to{transform:rotate(360deg)}}@keyframes pulse-132e6dc8{0%,to{opacity:1}50%{opacity:.6}}.ipeps-list[data-v-132e6dc8]{display:flex;flex-direction:column;gap:.875rem}.ipeps-item[data-v-132e6dc8]{display:flex;align-items:center;gap:1rem;padding:1rem;border:1px solid var(--ipe-modal-border-color);border-radius:8px;background:var(--ipe-modal-secondary-bg);transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 2%,transparent)}.ipeps-item[data-v-132e6dc8]:hover{background:color-mix(in srgb,var(--ipe-modal-accent) 3%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-accent) 35%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-text) 6%,transparent)}.ipeps-item.installed[data-v-132e6dc8]{background:color-mix(in srgb,var(--ipe-modal-success) 4%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-success) 30%,var(--ipe-modal-border-color))}.ipeps-item.installed[data-v-132e6dc8]:hover{background:color-mix(in srgb,var(--ipe-modal-success) 6%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-success) 60%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-success) 10%,transparent)}.ipeps-item.broken[data-v-132e6dc8]{background:color-mix(in srgb,var(--ipe-modal-warning) 4%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-warning) 35%,var(--ipe-modal-border-color));border-style:dashed}.ipeps-item.broken[data-v-132e6dc8]:hover{background:color-mix(in srgb,var(--ipe-modal-warning) 6%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-warning) 70%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-warning) 12%,transparent)}.ipeps-item .item-name[data-v-132e6dc8]{font-weight:600;font-size:.9375rem;color:var(--ipe-modal-text);line-height:1.4;letter-spacing:-.01em}.ipeps-item .item-desc[data-v-132e6dc8]{font-size:.8125rem;color:var(--ipe-modal-muted);line-height:1.5}.ipeps-item .item-meta[data-v-132e6dc8]{font-size:.75rem;color:var(--ipe-modal-muted);line-height:1.5}.ipeps-tags[data-v-132e6dc8]{display:flex;flex-wrap:wrap;gap:.375rem}.ipeps-tag[data-v-132e6dc8]{font-size:.6875rem;font-family:monospace;margin-bottom:.375rem;padding:.1875rem .5rem;border-radius:4px;display:inline-block;border:1px solid color-mix(in srgb,var(--ipe-modal-border-color) 70%,transparent);background:color-mix(in srgb,var(--ipe-modal-text) 2%,var(--ipe-modal-bg));color:var(--ipe-modal-muted);transition:all .15s cubic-bezier(.4,0,.2,1);line-height:1.4}.ipeps-tag[data-v-132e6dc8]:hover{border-color:var(--ipe-modal-border-color);background:color-mix(in srgb,var(--ipe-modal-text) 4%,var(--ipe-modal-bg))}.ipeps-badge[data-v-132e6dc8]{font-size:.6875rem;font-weight:600;padding:.1875rem .5rem;border-radius:4px;line-height:1.4}.ipeps-badge.is-installed[data-v-132e6dc8]{color:var(--ipe-modal-success);background:color-mix(in srgb,var(--ipe-modal-success) 12%,transparent);border:1px solid color-mix(in srgb,var(--ipe-modal-success) 20%,transparent)}.ipeps-badge.is-broken[data-v-132e6dc8]{color:var(--ipe-modal-warning);background:color-mix(in srgb,var(--ipe-modal-warning) 12%,transparent);border:1px solid color-mix(in srgb,var(--ipe-modal-warning) 25%,transparent)}.ipeps-actions[data-v-132e6dc8]{display:flex;gap:.5rem;align-items:center}.registry-info[data-v-132e6dc8]{flex:1;min-width:0}.registry-info .homepage[data-v-132e6dc8]{margin-top:.25rem}.registry-info .homepage a[data-v-132e6dc8]{color:var(--ipe-modal-accent);text-decoration:none;font-size:.8125rem;transition:all .2s ease}.registry-info .homepage a[data-v-132e6dc8]:hover{color:color-mix(in srgb,var(--ipe-modal-accent) 80%,var(--ipe-modal-text));text-decoration:underline}.registry-info .url[data-v-132e6dc8]{font-family:monospace;font-size:.75rem;color:var(--ipe-modal-muted);margin-top:.125rem;word-break:break-all}.ipeps-header[data-v-d61d6310]{margin-bottom:1.5rem;display:flex;align-items:center;gap:.875rem}.ipeps-header-title[data-v-d61d6310]{font-weight:600;font-size:1.125rem;color:var(--ipe-modal-text);letter-spacing:-.01em}.ipeps-input-wrapper[data-v-d61d6310]{flex:1;position:relative}.ipeps-input-icon[data-v-d61d6310]{position:absolute;left:.875rem;top:50%;transform:translateY(-50%);pointer-events:none;opacity:.4;font-size:.875rem;transition:all .25s cubic-bezier(.4,0,.2,1)}.ipeps-input[data-v-d61d6310]{width:100%;line-height:1.5;padding:.625rem .875rem;border:1px solid var(--ipe-modal-border-color);border-radius:6px;font-size:.875rem;outline:none;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);transition:all .25s cubic-bezier(.4,0,.2,1)}.ipeps-input.with-icon[data-v-d61d6310]{padding-left:2.25rem}.ipeps-input[data-v-d61d6310]::placeholder{color:var(--ipe-modal-muted);opacity:.6}.ipeps-input[data-v-d61d6310]:hover:not(:disabled){border-color:color-mix(in srgb,var(--ipe-modal-accent) 30%,var(--ipe-modal-border-color))}.ipeps-input[data-v-d61d6310]:focus{border-color:var(--ipe-modal-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ipe-modal-accent) 8%,transparent)}.ipeps-input:focus+.ipeps-input-icon[data-v-d61d6310]{opacity:.6}.ipeps-input[data-v-d61d6310]:disabled{opacity:.5;cursor:not-allowed}.ipeps-button[data-v-d61d6310]{padding:.625rem 1rem;line-height:1.5;border:1px solid var(--ipe-modal-border-color);border-radius:6px;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);cursor:pointer;font-size:.875rem;font-weight:500;white-space:nowrap;transition:all .25s cubic-bezier(.4,0,.2,1);display:inline-flex;align-items:center;justify-content:center;gap:.375rem;box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 3%,transparent)}.ipeps-button[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-secondary-bg);border-color:color-mix(in srgb,var(--ipe-modal-accent) 40%,var(--ipe-modal-border-color));box-shadow:0 2px 4px color-mix(in srgb,var(--ipe-modal-text) 6%,transparent)}.ipeps-button[data-v-d61d6310]:active:not(:disabled){box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 4%,transparent)}.ipeps-button[data-v-d61d6310]:disabled{opacity:.5;cursor:not-allowed}.ipeps-button.is-primary[data-v-d61d6310]{border-color:var(--ipe-modal-accent);color:var(--ipe-modal-accent);background:color-mix(in srgb,var(--ipe-modal-accent) 5%,var(--ipe-modal-bg))}.ipeps-button.is-primary[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-accent);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-accent) 20%,transparent)}.ipeps-button.is-accent[data-v-d61d6310]{border-color:var(--ipe-modal-accent);color:var(--ipe-modal-accent);background:color-mix(in srgb,var(--ipe-modal-accent) 5%,var(--ipe-modal-bg))}.ipeps-button.is-accent[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-accent);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-accent) 20%,transparent)}.ipeps-button.is-danger[data-v-d61d6310]{border-color:var(--ipe-modal-danger);color:var(--ipe-modal-danger);background:color-mix(in srgb,var(--ipe-modal-danger) 5%,var(--ipe-modal-bg))}.ipeps-button.is-danger[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-danger);color:var(--ipe-modal-bg);border-color:var(--ipe-modal-danger);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-danger) 20%,transparent)}.ipeps-button.is-ghost[data-v-d61d6310]{background:transparent;box-shadow:none}.ipeps-button.is-ghost[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-secondary-bg);box-shadow:0 1px 3px color-mix(in srgb,var(--ipe-modal-text) 4%,transparent)}.ipeps-button.is-active[data-v-d61d6310]{border-color:var(--ipe-modal-danger);color:var(--ipe-modal-danger);background:color-mix(in srgb,var(--ipe-modal-danger) 5%,var(--ipe-modal-bg))}.ipeps-button.is-active[data-v-d61d6310]:hover:not(:disabled){background:var(--ipe-modal-danger);color:var(--ipe-modal-bg);box-shadow:0 2px 8px color-mix(in srgb,var(--ipe-modal-danger) 20%,transparent)}.ipeps-button.refreshing[data-v-d61d6310]{animation:pulse-d61d6310 1.5s cubic-bezier(.4,0,.6,1) infinite}.ipeps-loading[data-v-d61d6310],.ipeps-empty[data-v-d61d6310]{text-align:center;display:flex;flex-direction:column;align-items:center;gap:1rem}.ipeps-loading[data-v-d61d6310]{padding:6rem 1.25rem}.ipeps-loading .loading-spinner[data-v-d61d6310]{width:2.5rem;height:2.5rem;border:2px solid color-mix(in srgb,var(--ipe-modal-border-color) 30%,transparent);border-top-color:var(--ipe-modal-accent);border-radius:50%;animation:spin-d61d6310 .8s linear infinite}.ipeps-loading .loading-text[data-v-d61d6310]{color:var(--ipe-modal-muted);font-size:.875rem;font-weight:500}.ipeps-empty[data-v-d61d6310]{padding:4rem 1.25rem}.ipeps-empty .plugin-empty-icon[data-v-d61d6310],.ipeps-empty .icon[data-v-d61d6310]{font-size:3rem;opacity:.25;filter:grayscale(.3)}.ipeps-empty .plugin-empty-text[data-v-d61d6310],.ipeps-empty .text[data-v-d61d6310]{color:var(--ipe-modal-muted);font-size:.9375rem;font-weight:500}.ipeps-empty .description[data-v-d61d6310]{margin-top:.5rem;color:var(--ipe-modal-muted);font-size:.8125rem;opacity:.8}@keyframes spin-d61d6310{to{transform:rotate(360deg)}}@keyframes pulse-d61d6310{0%,to{opacity:1}50%{opacity:.6}}.ipeps-list[data-v-d61d6310]{display:flex;flex-direction:column;gap:.875rem}.ipeps-item[data-v-d61d6310]{display:flex;align-items:center;gap:1rem;padding:1rem;border:1px solid var(--ipe-modal-border-color);border-radius:8px;background:var(--ipe-modal-secondary-bg);transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 2px color-mix(in srgb,var(--ipe-modal-text) 2%,transparent)}.ipeps-item[data-v-d61d6310]:hover{background:color-mix(in srgb,var(--ipe-modal-accent) 3%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-accent) 35%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-text) 6%,transparent)}.ipeps-item.installed[data-v-d61d6310]{background:color-mix(in srgb,var(--ipe-modal-success) 4%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-success) 30%,var(--ipe-modal-border-color))}.ipeps-item.installed[data-v-d61d6310]:hover{background:color-mix(in srgb,var(--ipe-modal-success) 6%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-success) 60%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-success) 10%,transparent)}.ipeps-item.broken[data-v-d61d6310]{background:color-mix(in srgb,var(--ipe-modal-warning) 4%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-warning) 35%,var(--ipe-modal-border-color));border-style:dashed}.ipeps-item.broken[data-v-d61d6310]:hover{background:color-mix(in srgb,var(--ipe-modal-warning) 6%,var(--ipe-modal-secondary-bg));border-color:color-mix(in srgb,var(--ipe-modal-warning) 70%,var(--ipe-modal-border-color));box-shadow:0 4px 12px color-mix(in srgb,var(--ipe-modal-warning) 12%,transparent)}.ipeps-item .item-name[data-v-d61d6310]{font-weight:600;font-size:.9375rem;color:var(--ipe-modal-text);line-height:1.4;letter-spacing:-.01em}.ipeps-item .item-desc[data-v-d61d6310]{font-size:.8125rem;color:var(--ipe-modal-muted);line-height:1.5}.ipeps-item .item-meta[data-v-d61d6310]{font-size:.75rem;color:var(--ipe-modal-muted);line-height:1.5}.ipeps-tags[data-v-d61d6310]{display:flex;flex-wrap:wrap;gap:.375rem}.ipeps-tag[data-v-d61d6310]{font-size:.6875rem;font-family:monospace;margin-bottom:.375rem;padding:.1875rem .5rem;border-radius:4px;display:inline-block;border:1px solid color-mix(in srgb,var(--ipe-modal-border-color) 70%,transparent);background:color-mix(in srgb,var(--ipe-modal-text) 2%,var(--ipe-modal-bg));color:var(--ipe-modal-muted);transition:all .15s cubic-bezier(.4,0,.2,1);line-height:1.4}.ipeps-tag[data-v-d61d6310]:hover{border-color:var(--ipe-modal-border-color);background:color-mix(in srgb,var(--ipe-modal-text) 4%,var(--ipe-modal-bg))}.ipeps-badge[data-v-d61d6310]{font-size:.6875rem;font-weight:600;padding:.1875rem .5rem;border-radius:4px;line-height:1.4}.ipeps-badge.is-installed[data-v-d61d6310]{color:var(--ipe-modal-success);background:color-mix(in srgb,var(--ipe-modal-success) 12%,transparent);border:1px solid color-mix(in srgb,var(--ipe-modal-success) 20%,transparent)}.ipeps-badge.is-broken[data-v-d61d6310]{color:var(--ipe-modal-warning);background:color-mix(in srgb,var(--ipe-modal-warning) 12%,transparent);border:1px solid color-mix(in srgb,var(--ipe-modal-warning) 25%,transparent)}.ipeps-actions[data-v-d61d6310]{display:flex;gap:.5rem;align-items:center}.plugin-info[data-v-d61d6310]{flex:1;min-width:0}.plugin-header[data-v-d61d6310]{display:flex;align-items:center;gap:.5rem;margin-bottom:.375rem}.registry-tag[data-v-d61d6310]{color:var(--ipe-modal-accent);background:color-mix(in srgb,var(--ipe-modal-accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--ipe-modal-accent) 18%,transparent);text-decoration:none;transition:all .2s ease}.registry-tag[data-v-d61d6310]:hover{background:color-mix(in srgb,var(--ipe-modal-accent) 12%,transparent);border-color:color-mix(in srgb,var(--ipe-modal-accent) 30%,transparent)}.registry-tag.broken[data-v-d61d6310]{text-decoration:line-through;opacity:.65;cursor:not-allowed}.plugin-id.broken[data-v-d61d6310]{opacity:.65;text-decoration:line-through}.plugin-desc[data-v-d61d6310]{font-size:.8125rem;color:var(--ipe-modal-muted);margin-bottom:.5rem;line-height:1.6}.plugin-desc.broken-desc[data-v-d61d6310]{color:color-mix(in srgb,var(--ipe-modal-warning) 80%,var(--ipe-modal-text));font-style:italic}.plugin-meta[data-v-d61d6310]{font-size:.75rem;color:var(--ipe-modal-muted);display:flex;gap:1rem;align-items:center}.plugin-meta .version[data-v-d61d6310]{font-family:monospace;font-weight:500;color:color-mix(in srgb,var(--ipe-modal-text) 80%,var(--ipe-modal-muted))}.plugin-meta .author[data-v-d61d6310],.plugin-meta .license[data-v-d61d6310]{display:flex;align-items:center;gap:.25rem}#ipe-plugin-store-app[data-v-1b3d0d80]{color:var(--ipe-modal-text);font-size:.875rem}.divider-wrapper[data-v-1b3d0d80]{margin:2rem 0}.divider-wrapper .divider[data-v-1b3d0d80]{border:none;height:1px;background:linear-gradient(to right,transparent,color-mix(in srgb,var(--ipe-modal-border-color) 40%,transparent) 10%,color-mix(in srgb,var(--ipe-modal-border-color) 60%,transparent) 50%,color-mix(in srgb,var(--ipe-modal-border-color) 40%,transparent) 90%,transparent)}