javascript:(()%20%3D%3E%20%7B%0A%20%20%22use%20strict%22%3B%0A%20%20%2F%2F%20%3D%3D%3D%3D%3D%20bookmarklet%20%E6%A8%A1%E5%BC%8F%EF%BC%88%E7%94%B1%20build-bookmarklet.js%20%E6%B3%A8%E5%85%A5%EF%BC%89%20%3D%3D%3D%3D%3D%0A%20%20const%20BOOKMARKLET_HOSTS%20%3D%20%5B%0A%20%20%20%20%22login.microsoftonline.com%22%2C%0A%20%20%20%20%22outlook.live.com%22%2C%0A%20%20%20%20%22parks2.bandainamco-am.co.jp%22%2C%0A%20%20%5D%3B%0A%0A%20%20const%20showToast%20%3D%20(msg)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!document.body)%20return%3B%0A%20%20%20%20let%20el%20%3D%20document.getElementById(%22codex-msmail-toast%22)%3B%0A%20%20%20%20if%20(!el)%20%7B%0A%20%20%20%20%20%20el%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20%20%20el.id%20%3D%20%22codex-msmail-toast%22%3B%0A%20%20%20%20%20%20el.style.cssText%20%3D%0A%20%20%20%20%20%20%20%20%22position%3Afixed%3Btop%3Amax(12px%2C%20env(safe-area-inset-top))%3Bleft%3A50%25%3B%22%20%2B%0A%20%20%20%20%20%20%20%20%22transform%3AtranslateX(-50%25)%3Bz-index%3A2147483646%3Bbackground%3Argba(32%2C25%2C21%2C.92)%3B%22%20%2B%0A%20%20%20%20%20%20%20%20%22color%3A%23fff%3Bpadding%3A10px%2016px%3Bborder-radius%3A999px%3B%22%20%2B%0A%20%20%20%20%20%20%20%20%22font%3A13px%20-apple-system%2CBlinkMacSystemFont%2C'PingFang%20SC'%2Csans-serif%3B%22%20%2B%0A%20%20%20%20%20%20%20%20%22max-width%3A90vw%3Btext-align%3Acenter%3Bpointer-events%3Anone%3Bopacity%3A0%3B%22%20%2B%0A%20%20%20%20%20%20%20%20%22transition%3Aopacity%20.3s%3B%22%3B%0A%20%20%20%20%20%20document.body.appendChild(el)%3B%0A%20%20%20%20%7D%0A%20%20%20%20el.textContent%20%3D%20msg%3B%0A%20%20%20%20el.style.opacity%20%3D%20%221%22%3B%0A%20%20%20%20clearTimeout(window.__codexToastTimer)%3B%0A%20%20%20%20window.__codexToastTimer%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20el.style.opacity%20%3D%20%220%22%3B%0A%20%20%20%20%7D%2C%202500)%3B%0A%20%20%7D%3B%0A%0A%20%20if%20(!BOOKMARKLET_HOSTS.includes(location.hostname))%20%7B%0A%20%20%20%20showToast(%22%E2%9A%A0%EF%B8%8F%20%E8%AF%B7%E5%85%88%E5%9C%A8%E6%94%AF%E6%8C%81%E7%9A%84%E7%BD%91%E7%AB%99%E4%BD%BF%E7%94%A8%EF%BC%9AMicrosoft%20%E7%99%BB%E5%BD%95%20%2F%20Outlook%20%2F%20Bandai%20Parks%22)%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20%E5%B7%B2%E5%8A%A0%E8%BD%BD%E8%BF%87%EF%BC%88%E5%86%8D%E6%AC%A1%E7%82%B9%E5%87%BB%E4%B9%A6%E7%AD%BE%EF%BC%89%EF%BC%9A%E5%8F%AA%E9%87%8D%E6%96%B0%E5%BA%94%E7%94%A8%EF%BC%8C%E4%B8%8D%E9%87%8D%E5%A4%8D%E5%88%9D%E5%A7%8B%E5%8C%96%0A%20%20if%20(window.__codexNameReplacerLoaded)%20%7B%0A%20%20%20%20if%20(typeof%20window.__codexNameReplacerReapply%20%3D%3D%3D%20%22function%22)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20window.__codexNameReplacerReapply()%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20window.__codexNameReplacerLoaded%20%3D%20true%3B%0A%20%20window.__codexNameReplacerReapply%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(isReplacementActive())%20%7B%0A%20%20%20%20%20%20applyReplacements()%3B%0A%20%20%20%20%20%20showToast(%22%E2%9C%85%20%E5%B7%B2%E5%BA%94%E7%94%A8%E6%9B%BF%E6%8D%A2%22)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20showPanel()%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%0A%20%20const%20STORAGE_KEY%20%3D%20%22codex.fixedSite.nameReplacer.config.v1%22%3B%0A%20%20const%20SUPPORTED_HOSTS%20%3D%20%5B%0A%20%20%20%20%22login.microsoftonline.com%22%2C%0A%20%20%20%20%22outlook.live.com%22%2C%0A%20%20%20%20%22parks2.bandainamco-am.co.jp%22%2C%0A%20%20%5D%3B%0A%20%20const%20PANEL_ID%20%3D%20%22codex-msmail-name-panel%22%3B%0A%20%20const%20STYLE_ID%20%3D%20%22codex-msmail-name-style%22%3B%0A%20%20const%20SESSION_DURATION_MS%20%3D%204%20*%2060%20*%2060%20*%201000%3B%0A%20%20const%20PANEL_HOLD_MS%20%3D%202000%3B%0A%20%20const%20PANEL_HOLD_ZONE_PX%20%3D%20100%3B%0A%20%20const%20TRIPLE_CLICK_WINDOW_MS%20%3D%20500%3B%0A%20%20const%20TRIPLE_CLICK_MAX_SPREAD%20%3D%2040%3B%0A%20%20const%20FAST_SCAN_WINDOW_MS%20%3D%204000%3B%0A%20%20const%20FAST_SCAN_INTERVAL_MS%20%3D%20120%3B%0A%20%20const%20DEFAULT_RULES%20%3D%20%5B%0A%20%20%20%20%7B%20enabled%3A%20true%2C%20original%3A%20%22%22%2C%20replacement%3A%20%22%22%2C%20mode%3A%20%22normal%22%20%7D%2C%0A%20%20%20%20%7B%20enabled%3A%20true%2C%20original%3A%20%22%22%2C%20replacement%3A%20%22%22%2C%20mode%3A%20%22normal%22%20%7D%2C%0A%20%20%5D%3B%0A%0A%20%20let%20originalTextMap%20%3D%20new%20WeakMap()%3B%0A%20%20let%20originalValueMap%20%3D%20new%20WeakMap()%3B%0A%20%20const%20touchedTextNodes%20%3D%20new%20Set()%3B%0A%20%20const%20touchedElements%20%3D%20new%20Set()%3B%0A%20%20let%20observer%20%3D%20null%3B%0A%20%20let%20applying%20%3D%20false%3B%0A%20%20let%20statusUpdater%20%3D%20null%3B%0A%20%20let%20holdTimer%20%3D%20null%3B%0A%20%20let%20topHoldStartY%20%3D%200%3B%0A%20%20let%20threeFingerHold%20%3D%20false%3B%0A%20%20let%20tripleClickTimes%20%3D%20%5B%5D%3B%0A%20%20let%20fastScanInterval%20%3D%20null%3B%0A%20%20let%20fastScanStopTimer%20%3D%20null%3B%0A%0A%20%20const%20defaultConfig%20%3D%20%7B%0A%20%20%20%20enabled%3A%20false%2C%0A%20%20%20%20fontAdjust%3A%20false%2C%0A%20%20%20%20replaceValues%3A%20false%2C%0A%20%20%20%20panelVisible%3A%20false%2C%0A%20%20%20%20bodyCollapsed%3A%20false%2C%0A%20%20%20%20sessionStartedAt%3A%20null%2C%0A%20%20%20%20rules%3A%20DEFAULT_RULES%2C%0A%20%20%7D%3B%0A%0A%20%20const%20cloneRules%20%3D%20(rules)%20%3D%3E%0A%20%20%20%20(Array.isArray(rules)%20%3F%20rules%20%3A%20DEFAULT_RULES).map((rule)%20%3D%3E%20(%7B%0A%20%20%20%20%20%20enabled%3A%20rule.enabled%20!%3D%3D%20false%2C%0A%20%20%20%20%20%20original%3A%20String(rule.original%20%7C%7C%20%22%22)%2C%0A%20%20%20%20%20%20replacement%3A%20String(rule.replacement%20%7C%7C%20%22%22)%2C%0A%20%20%20%20%20%20mode%3A%20rule.mode%20%3D%3D%3D%20%22regex%22%20%3F%20%22regex%22%20%3A%20%22normal%22%2C%0A%20%20%20%20%7D))%3B%0A%0A%20%20const%20readStoredConfig%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(typeof%20GM_getValue%20%3D%3D%3D%20%22function%22)%20%7B%0A%20%20%20%20%20%20return%20GM_getValue(STORAGE_KEY%2C%20%22%7B%7D%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20localStorage.getItem(STORAGE_KEY)%20%7C%7C%20%22%7B%7D%22%3B%0A%20%20%7D%3B%0A%0A%20%20const%20writeStoredConfig%20%3D%20(value)%20%3D%3E%20%7B%0A%20%20%20%20if%20(typeof%20GM_setValue%20%3D%3D%3D%20%22function%22)%20%7B%0A%20%20%20%20%20%20GM_setValue(STORAGE_KEY%2C%20value)%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20localStorage.setItem(STORAGE_KEY%2C%20value)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20loadConfig%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20const%20saved%20%3D%20JSON.parse(readStoredConfig())%3B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20...defaultConfig%2C%0A%20%20%20%20%20%20%20%20...saved%2C%0A%20%20%20%20%20%20%20%20panelVisible%3A%20false%2C%0A%20%20%20%20%20%20%20%20sessionStartedAt%3A%0A%20%20%20%20%20%20%20%20%20%20typeof%20saved.sessionStartedAt%20%3D%3D%3D%20%22number%22%20%26%26%20saved.sessionStartedAt%20%3E%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F%20saved.sessionStartedAt%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20null%2C%0A%20%20%20%20%20%20%20%20rules%3A%20cloneRules(saved.rules)%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%20catch%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20...defaultConfig%2C%0A%20%20%20%20%20%20%20%20rules%3A%20cloneRules(defaultConfig.rules)%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20let%20config%20%3D%20loadConfig()%3B%0A%20%20config.panelVisible%20%3D%20false%3B%0A%0A%20%20const%20saveConfig%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20writeStoredConfig(%0A%20%20%20%20%20%20JSON.stringify(%7B%0A%20%20%20%20%20%20%20%20...config%2C%0A%20%20%20%20%20%20%20%20rules%3A%20cloneRules(config.rules)%2C%0A%20%20%20%20%20%20%7D)%0A%20%20%20%20)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20normalize%20%3D%20(value)%20%3D%3E%20value.replace(%2F%5Cs%2B%2Fg%2C%20%22%20%22).trim()%3B%0A%0A%20%20const%20siteAuthorized%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20return%20SUPPORTED_HOSTS.includes(location.hostname)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20isOutlookPage%20%3D%20()%20%3D%3E%20location.hostname%20%3D%3D%3D%20%22outlook.live.com%22%3B%0A%0A%20%20const%20shouldSkipNode%20%3D%20(node)%20%3D%3E%20%7B%0A%20%20%20%20const%20element%20%3D%0A%20%20%20%20%20%20node%20instanceof%20Element%20%3F%20node%20%3A%20node%3F.parentElement%20instanceof%20Element%20%3F%20node.parentElement%20%3A%20null%3B%0A%0A%20%20%20%20if%20(!element)%20return%20false%3B%0A%20%20%20%20if%20(element.closest(%60%23%24%7BPANEL_ID%7D%60))%20return%20true%3B%0A%20%20%20%20if%20(%5B%22SCRIPT%22%2C%20%22STYLE%22%2C%20%22NOSCRIPT%22%5D.includes(element.tagName))%20return%20true%3B%0A%20%20%20%20return%20Boolean(element.closest('iframe%2C%20%5Bcontenteditable%3D%22true%22%5D'))%3B%0A%20%20%7D%3B%0A%0A%20%20const%20getReplacementRoots%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(!document.body)%20return%20%5B%5D%3B%0A%20%20%20%20return%20%5Bdocument.body%5D%3B%0A%20%20%7D%3B%0A%0A%20%20const%20hasValidSession%20%3D%20()%20%3D%3E%20typeof%20config.sessionStartedAt%20%3D%3D%3D%20%22number%22%20%26%26%20config.sessionStartedAt%20%3E%200%3B%0A%0A%20%20const%20getSessionExpiresAt%20%3D%20()%20%3D%3E%0A%20%20%20%20hasValidSession()%20%3F%20config.sessionStartedAt%20%2B%20SESSION_DURATION_MS%20%3A%200%3B%0A%0A%20%20const%20getRemainingMs%20%3D%20()%20%3D%3E%0A%20%20%20%20hasValidSession()%20%3F%20Math.max(0%2C%20getSessionExpiresAt()%20-%20Date.now())%20%3A%200%3B%0A%0A%20%20const%20formatRemaining%20%3D%20(ms)%20%3D%3E%20%7B%0A%20%20%20%20const%20totalSeconds%20%3D%20Math.ceil(ms%20%2F%201000)%3B%0A%20%20%20%20const%20minutes%20%3D%20Math.floor(totalSeconds%20%2F%2060)%3B%0A%20%20%20%20const%20seconds%20%3D%20totalSeconds%20%25%2060%3B%0A%20%20%20%20return%20%60%24%7BString(minutes).padStart(2%2C%20%220%22)%7D%3A%24%7BString(seconds).padStart(2%2C%20%220%22)%7D%60%3B%0A%20%20%7D%3B%0A%0A%20%20const%20hasExpired%20%3D%20()%20%3D%3E%20hasValidSession()%20%26%26%20getRemainingMs()%20%3C%3D%200%3B%0A%0A%20%20const%20isReplacementActive%20%3D%20()%20%3D%3E%0A%20%20%20%20config.enabled%20%26%26%20siteAuthorized()%20%26%26%20hasValidSession()%20%26%26%20!hasExpired()%3B%0A%0A%20%20const%20replaceByRule%20%3D%20(input%2C%20rule)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!rule.enabled%20%7C%7C%20!rule.original%20%7C%7C%20!rule.replacement)%20%7B%0A%20%20%20%20%20%20return%20input%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(rule.mode%20%3D%3D%3D%20%22regex%22)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20return%20input.replace(new%20RegExp(rule.original%2C%20%22g%22)%2C%20rule.replacement)%3B%0A%20%20%20%20%20%20%7D%20catch%20%7B%0A%20%20%20%20%20%20%20%20return%20input%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20input.split(rule.original).join(rule.replacement)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20replaceText%20%3D%20(text)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!isReplacementActive())%20return%20text%3B%0A%20%20%20%20return%20config.rules.reduce((next%2C%20rule)%20%3D%3E%20replaceByRule(next%2C%20rule)%2C%20text)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20rememberOriginalText%20%3D%20(node%2C%20value)%20%3D%3E%20%7B%0A%20%20%20%20touchedTextNodes.add(node)%3B%0A%20%20%20%20if%20(!originalTextMap.has(node))%20%7B%0A%20%20%20%20%20%20originalTextMap.set(node%2C%20value)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20rememberOriginalValue%20%3D%20(element%2C%20key%2C%20value)%20%3D%3E%20%7B%0A%20%20%20%20touchedElements.add(element)%3B%0A%20%20%20%20let%20item%20%3D%20originalValueMap.get(element)%3B%0A%20%20%20%20if%20(!item)%20%7B%0A%20%20%20%20%20%20item%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20originalValueMap.set(element%2C%20item)%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(!(key%20in%20item))%20%7B%0A%20%20%20%20%20%20item%5Bkey%5D%20%3D%20value%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20restoreTouchedContent%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20touchedTextNodes.forEach((node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(node.isConnected)%20%7B%0A%20%20%20%20%20%20%20%20restoreNode(node)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20touchedElements.forEach((element)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(element.isConnected)%20%7B%0A%20%20%20%20%20%20%20%20restoreElement(element)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20touchedTextNodes.clear()%3B%0A%20%20%20%20touchedElements.clear()%3B%0A%20%20%20%20originalTextMap%20%3D%20new%20WeakMap()%3B%0A%20%20%20%20originalValueMap%20%3D%20new%20WeakMap()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20restoreNode%20%3D%20(node)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!originalTextMap.has(node))%20return%3B%0A%0A%20%20%20%20const%20original%20%3D%20originalTextMap.get(node)%3B%0A%20%20%20%20if%20(node.nodeValue%20!%3D%3D%20original)%20%7B%0A%20%20%20%20%20%20node.nodeValue%20%3D%20original%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20restoreElement%20%3D%20(element)%20%3D%3E%20%7B%0A%20%20%20%20const%20item%20%3D%20originalValueMap.get(element)%3B%0A%20%20%20%20if%20(!item)%20return%3B%0A%0A%20%20%20%20if%20(%22value%22%20in%20item%20%26%26%20typeof%20element.value%20%3D%3D%3D%20%22string%22%20%26%26%20element.value%20!%3D%3D%20item.value)%20%7B%0A%20%20%20%20%20%20element.value%20%3D%20item.value%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(%0A%20%20%20%20%20%20%22placeholder%22%20in%20item%20%26%26%0A%20%20%20%20%20%20typeof%20element.placeholder%20%3D%3D%3D%20%22string%22%20%26%26%0A%20%20%20%20%20%20element.placeholder%20!%3D%3D%20item.placeholder%0A%20%20%20%20)%20%7B%0A%20%20%20%20%20%20element.placeholder%20%3D%20item.placeholder%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20updateTextNode%20%3D%20(node)%20%3D%3E%20%7B%0A%20%20%20%20const%20current%20%3D%20node.nodeValue%3B%0A%20%20%20%20if%20(!current%20%7C%7C%20!normalize(current))%20return%3B%0A%0A%20%20%20%20if%20(!isReplacementActive())%20return%3B%0A%0A%20%20%20%20rememberOriginalText(node%2C%20current)%3B%0A%20%20%20%20const%20base%20%3D%20originalTextMap.get(node)%20%7C%7C%20current%3B%0A%20%20%20%20const%20next%20%3D%20replaceText(base)%3B%0A%20%20%20%20if%20(next%20!%3D%3D%20current)%20%7B%0A%20%20%20%20%20%20node.nodeValue%20%3D%20next%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20updateElementValue%20%3D%20(element)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!(element%20instanceof%20HTMLInputElement%20%7C%7C%20element%20instanceof%20HTMLTextAreaElement))%20%7B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(shouldSkipNode(element))%20return%3B%0A%0A%20%20%20%20if%20(!isReplacementActive())%20return%3B%0A%0A%20%20%20%20if%20(typeof%20element.placeholder%20%3D%3D%3D%20%22string%22)%20%7B%0A%20%20%20%20%20%20rememberOriginalValue(element%2C%20%22placeholder%22%2C%20element.placeholder)%3B%0A%20%20%20%20%20%20const%20nextPlaceholder%20%3D%20replaceText(%0A%20%20%20%20%20%20%20%20originalValueMap.get(element)%3F.placeholder%20%7C%7C%20element.placeholder%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20if%20(nextPlaceholder%20!%3D%3D%20element.placeholder)%20%7B%0A%20%20%20%20%20%20%20%20element.placeholder%20%3D%20nextPlaceholder%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%E5%8F%AF%E9%80%89%EF%BC%9A%E5%90%8C%E6%97%B6%E6%9B%BF%E6%8D%A2%E8%BE%93%E5%85%A5%E6%A1%86%20value%EF%BC%88%E7%94%9F%E6%97%A5%2F%E9%82%AE%E7%AE%B1%E7%AD%89%E8%A1%A8%E5%8D%95%E5%80%BC%EF%BC%9Bpassword%20%E6%B0%B8%E4%B8%8D%E5%A4%84%E7%90%86%EF%BC%89%0A%20%20%20%20if%20(config.replaceValues%20%26%26%20typeof%20element.value%20%3D%3D%3D%20%22string%22%20%26%26%20element.type%20!%3D%3D%20%22password%22)%20%7B%0A%20%20%20%20%20%20rememberOriginalValue(element%2C%20%22value%22%2C%20element.value)%3B%0A%20%20%20%20%20%20const%20baseValue%20%3D%20originalValueMap.get(element)%3F.value%20%3F%3F%20element.value%3B%0A%20%20%20%20%20%20const%20nextValue%20%3D%20replaceText(baseValue)%3B%0A%20%20%20%20%20%20if%20(nextValue%20!%3D%3D%20element.value)%20%7B%0A%20%20%20%20%20%20%20%20element.value%20%3D%20nextValue%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20walkAndReplace%20%3D%20(root)%20%3D%3E%20%7B%0A%20%20%20%20if%20(!root)%20return%3B%0A%0A%20%20%20%20const%20walker%20%3D%20document.createTreeWalker(%0A%20%20%20%20%20%20root%2C%0A%20%20%20%20%20%20NodeFilter.SHOW_TEXT%2C%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20acceptNode(node)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!node.parentElement)%20return%20NodeFilter.FILTER_REJECT%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(shouldSkipNode(node))%20return%20NodeFilter.FILTER_REJECT%3B%0A%20%20%20%20%20%20%20%20%20%20return%20NodeFilter.FILTER_ACCEPT%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%0A%20%20%20%20)%3B%0A%0A%20%20%20%20let%20textNode%20%3D%20walker.nextNode()%3B%0A%20%20%20%20while%20(textNode)%20%7B%0A%20%20%20%20%20%20updateTextNode(textNode)%3B%0A%20%20%20%20%20%20textNode%20%3D%20walker.nextNode()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(root%20instanceof%20Element)%20%7B%0A%20%20%20%20%20%20updateElementValue(root)%3B%0A%20%20%20%20%20%20root.querySelectorAll(%22input%2C%20textarea%22).forEach(updateElementValue)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20applyFontAdjust%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20active%20%3D%20Boolean(config.fontAdjust%20%26%26%20isReplacementActive())%3B%0A%20%20%20%20document.documentElement.classList.toggle(%22codex-msmail-font-adjust%22%2C%20active)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20updateStatusText%20%3D%20(message)%20%3D%3E%20%7B%0A%20%20%20%20const%20statusNode%20%3D%20document.querySelector(%60%23%24%7BPANEL_ID%7D%20%5Bdata-role%3D%22status%22%5D%60)%3B%0A%20%20%20%20if%20(!statusNode)%20return%3B%0A%0A%20%20%20%20if%20(message)%20%7B%0A%20%20%20%20%20%20statusNode.textContent%20%3D%20message%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(!config.enabled)%20%7B%0A%20%20%20%20%20%20statusNode.textContent%20%3D%20%22%E6%9B%BF%E6%8D%A2%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD%EF%BC%8C%E9%A1%B5%E9%9D%A2%E6%AD%A3%E5%B8%B8%E6%98%BE%E7%A4%BA%E3%80%82%22%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(!hasValidSession())%20%7B%0A%20%20%20%20%20%20statusNode.textContent%20%3D%20%22%E5%B0%9A%E6%9C%AA%E5%BC%80%E5%A7%8B%E8%AE%A1%E6%97%B6%EF%BC%8C%E7%82%B9%E5%87%BB%E4%BF%9D%E5%AD%98%E5%B9%B6%E5%BA%94%E7%94%A8%E5%90%8E%E5%BC%80%E5%A7%8B%204%20%E5%B0%8F%E6%97%B6%E5%80%92%E8%AE%A1%E6%97%B6%E3%80%82%22%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(hasExpired())%20%7B%0A%20%20%20%20%20%20statusNode.textContent%20%3D%20%22%E5%B7%B2%E8%B6%85%E8%BF%87%204%20%E5%B0%8F%E6%97%B6%EF%BC%8C%E6%9B%BF%E6%8D%A2%E5%8A%9F%E8%83%BD%E8%87%AA%E5%8A%A8%E5%A4%B1%E6%95%88%E3%80%82%22%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20statusNode.textContent%20%3D%20%60%E6%9B%BF%E6%8D%A2%E5%8A%9F%E8%83%BD%E5%BC%80%E5%90%AF%E4%B8%AD%EF%BC%8C%E5%89%A9%E4%BD%99%E6%97%B6%E9%97%B4%3A%20%24%7BformatRemaining(getRemainingMs())%7D%60%3B%0A%20%20%7D%3B%0A%0A%20%20const%20syncStatusLoop%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(statusUpdater)%20%7B%0A%20%20%20%20%20%20clearInterval(statusUpdater)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20statusUpdater%20%3D%20window.setInterval(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(config.enabled%20%26%26%20hasExpired())%20%7B%0A%20%20%20%20%20%20%20%20disableReplacement(%22%E5%B7%B2%E8%B6%85%E8%BF%87%204%20%E5%B0%8F%E6%97%B6%EF%BC%8C%E6%9B%BF%E6%8D%A2%E5%8A%9F%E8%83%BD%E8%87%AA%E5%8A%A8%E5%A4%B1%E6%95%88%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20updateStatusText()%3B%0A%20%20%20%20%7D%2C%201000)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20applyReplacements%20%3D%20(statusMessage%20%3D%20%22%22)%20%3D%3E%20%7B%0A%20%20%20%20if%20(applying)%20return%3B%0A%20%20%20%20applying%20%3D%20true%3B%0A%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20applyFontAdjust()%3B%0A%20%20%20%20%20%20if%20(isReplacementActive())%20%7B%0A%20%20%20%20%20%20%20%20getReplacementRoots().forEach(walkAndReplace)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20updateStatusText(statusMessage)%3B%0A%20%20%20%20%7D%20finally%20%7B%0A%20%20%20%20%20%20applying%20%3D%20false%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20stopFastScanLoop%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(fastScanInterval)%20%7B%0A%20%20%20%20%20%20clearInterval(fastScanInterval)%3B%0A%20%20%20%20%20%20fastScanInterval%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(fastScanStopTimer)%20%7B%0A%20%20%20%20%20%20clearTimeout(fastScanStopTimer)%3B%0A%20%20%20%20%20%20fastScanStopTimer%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20startFastScanLoop%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20stopFastScanLoop()%3B%0A%0A%20%20%20%20const%20tick%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(document.body)%20%7B%0A%20%20%20%20%20%20%20%20applyReplacements()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20tick()%3B%0A%20%20%20%20fastScanInterval%20%3D%20window.setInterval(tick%2C%20FAST_SCAN_INTERVAL_MS)%3B%0A%20%20%20%20fastScanStopTimer%20%3D%20window.setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20stopFastScanLoop()%3B%0A%20%20%20%20%7D%2C%20FAST_SCAN_WINDOW_MS)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20startObserver%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(observer)%20observer.disconnect()%3B%0A%0A%20%20%20%20observer%20%3D%20new%20MutationObserver((mutations)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(applying)%20return%3B%0A%0A%20%20%20%20%20%20for%20(const%20mutation%20of%20mutations)%20%7B%0A%20%20%20%20%20%20%20%20if%20(mutation.type%20%3D%3D%3D%20%22characterData%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20updateTextNode(mutation.target)%3B%0A%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20mutation.addedNodes.forEach((node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(node.nodeType%20%3D%3D%3D%20Node.TEXT_NODE)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20updateTextNode(node)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(node.nodeType%20%3D%3D%3D%20Node.ELEMENT_NODE)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20walkAndReplace(node)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20observer.observe(document.documentElement%2C%20%7B%0A%20%20%20%20%20%20childList%3A%20true%2C%0A%20%20%20%20%20%20subtree%3A%20true%2C%0A%20%20%20%20%20%20characterData%3A%20true%2C%0A%20%20%20%20%7D)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20ensureStyles%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(document.getElementById(STYLE_ID))%20return%3B%0A%0A%20%20%20%20const%20style%20%3D%20document.createElement(%22style%22)%3B%0A%20%20%20%20style.id%20%3D%20STYLE_ID%3B%0A%20%20%20%20style.textContent%20%3D%20%60%0A%20%20%20%20%20%20.codex-msmail-font-adjust%20body%2C%0A%20%20%20%20%20%20.codex-msmail-font-adjust%20input%2C%0A%20%20%20%20%20%20.codex-msmail-font-adjust%20button%2C%0A%20%20%20%20%20%20.codex-msmail-font-adjust%20textarea%2C%0A%20%20%20%20%20%20.codex-msmail-font-adjust%20select%20%7B%0A%20%20%20%20%20%20%20%20letter-spacing%3A%200.02em%20!important%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20%7B%0A%20%20%20%20%20%20%20%20position%3A%20fixed%3B%0A%20%20%20%20%20%20%20%20top%3A%20max(12px%2C%20env(safe-area-inset-top))%3B%0A%20%20%20%20%20%20%20%20left%3A%2012px%3B%0A%20%20%20%20%20%20%20%20right%3A%2012px%3B%0A%20%20%20%20%20%20%20%20z-index%3A%202147483647%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(247%2C%20244%2C%20237%2C%200.98)%3B%0A%20%20%20%20%20%20%20%20color%3A%20%232e2a26%3B%0A%20%20%20%20%20%20%20%20border%3A%201px%20solid%20rgba(60%2C%2049%2C%2038%2C%200.16)%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%2010px%3B%0A%20%20%20%20%20%20%20%20box-shadow%3A%200%2018px%2040px%20rgba(27%2C%2022%2C%2018%2C%200.18)%3B%0A%20%20%20%20%20%20%20%20padding%3A%2012px%3B%0A%20%20%20%20%20%20%20%20font%3A%2013px%2F1.35%20-apple-system%2C%20BlinkMacSystemFont%2C%20%22PingFang%20SC%22%2C%20%22Hiragino%20Sans%20GB%22%2C%20sans-serif%3B%0A%20%20%20%20%20%20%20%20backdrop-filter%3A%20blur(10px)%3B%0A%20%20%20%20%20%20%20%20-webkit-backdrop-filter%3A%20blur(10px)%3B%0A%20%20%20%20%20%20%20%20max-height%3A%20calc(100vh%20-%20max(24px%2C%20env(safe-area-inset-top))%20-%20max(24px%2C%20env(safe-area-inset-bottom)))%3B%0A%20%20%20%20%20%20%20%20overflow%3A%20hidden%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%5Bhidden%5D%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20none%20!important%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-collapsed%20.codex-body%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-header%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20flex%3B%0A%20%20%20%20%20%20%20%20align-items%3A%20flex-start%3B%0A%20%20%20%20%20%20%20%20justify-content%3A%20space-between%3B%0A%20%20%20%20%20%20%20%20gap%3A%2010px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-header-main%20%7B%0A%20%20%20%20%20%20%20%20min-width%3A%200%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-title%20%7B%0A%20%20%20%20%20%20%20%20font-size%3A%2018px%3B%0A%20%20%20%20%20%20%20%20font-weight%3A%20700%3B%0A%20%20%20%20%20%20%20%20border%3A%200%3B%0A%20%20%20%20%20%20%20%20background%3A%20transparent%3B%0A%20%20%20%20%20%20%20%20color%3A%20%232e2a26%3B%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0A%20%20%20%20%20%20%20%20text-align%3A%20left%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-close%20%7B%0A%20%20%20%20%20%20%20%20border%3A%200%3B%0A%20%20%20%20%20%20%20%20background%3A%20transparent%3B%0A%20%20%20%20%20%20%20%20color%3A%20%234b433b%3B%0A%20%20%20%20%20%20%20%20font-size%3A%2014px%3B%0A%20%20%20%20%20%20%20%20padding%3A%202px%204px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-meta%20%7B%0A%20%20%20%20%20%20%20%20margin-top%3A%204px%3B%0A%20%20%20%20%20%20%20%20color%3A%20%236d6256%3B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%202px%3B%0A%20%20%20%20%20%20%20%20word-break%3A%20break-all%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-body%20%7B%0A%20%20%20%20%20%20%20%20margin-top%3A%2012px%3B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%2010px%3B%0A%20%20%20%20%20%20%20%20max-height%3A%20calc(100vh%20-%20180px)%3B%0A%20%20%20%20%20%20%20%20overflow-y%3A%20auto%3B%0A%20%20%20%20%20%20%20%20overflow-x%3A%20hidden%3B%0A%20%20%20%20%20%20%20%20padding-right%3A%202px%3B%0A%20%20%20%20%20%20%20%20-webkit-overflow-scrolling%3A%20touch%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20button%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20input%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20textarea%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20select%20%7B%0A%20%20%20%20%20%20%20%20font%3A%20inherit%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-action-row%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20flex%3B%0A%20%20%20%20%20%20%20%20gap%3A%208px%3B%0A%20%20%20%20%20%20%20%20flex-wrap%3A%20wrap%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-btn%20%7B%0A%20%20%20%20%20%20%20%20border%3A%200%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%20999px%3B%0A%20%20%20%20%20%20%20%20padding%3A%208px%2012px%3B%0A%20%20%20%20%20%20%20%20background%3A%20%23ddd4c7%3B%0A%20%20%20%20%20%20%20%20color%3A%20%23352f29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-btn.primary%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20%23c6b091%3B%0A%20%20%20%20%20%20%20%20color%3A%20%23201915%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-input%20%7B%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20box-sizing%3A%20border-box%3B%0A%20%20%20%20%20%20%20%20border%3A%201px%20solid%20%23d5c8b8%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%208px%3B%0A%20%20%20%20%20%20%20%20padding%3A%209px%2010px%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(255%2C%20255%2C%20255%2C%200.9)%3B%0A%20%20%20%20%20%20%20%20color%3A%20%232f2924%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-check-row%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20flex%3B%0A%20%20%20%20%20%20%20%20gap%3A%2012px%3B%0A%20%20%20%20%20%20%20%20flex-wrap%3A%20wrap%3B%0A%20%20%20%20%20%20%20%20color%3A%20%23433b34%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-check%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20inline-flex%3B%0A%20%20%20%20%20%20%20%20align-items%3A%20center%3B%0A%20%20%20%20%20%20%20%20gap%3A%206px%3B%0A%20%20%20%20%20%20%20%20padding%3A%206px%2010px%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%20999px%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(255%2C%20255%2C%20255%2C%200.68)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-table%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%208px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rules-scroll%20%7B%0A%20%20%20%20%20%20%20%20overflow-x%3A%20auto%3B%0A%20%20%20%20%20%20%20%20overflow-y%3A%20visible%3B%0A%20%20%20%20%20%20%20%20-webkit-overflow-scrolling%3A%20touch%3B%0A%20%20%20%20%20%20%20%20padding-bottom%3A%204px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-guide%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%206px%3B%0A%20%20%20%20%20%20%20%20padding%3A%2010px%2012px%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%208px%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(255%2C%20255%2C%20255%2C%200.62)%3B%0A%20%20%20%20%20%20%20%20color%3A%20%235c5248%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-guide-strong%20%7B%0A%20%20%20%20%20%20%20%20font-weight%3A%20700%3B%0A%20%20%20%20%20%20%20%20color%3A%20%232f2924%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-table-head%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20grid-template-columns%3A%20minmax(0%2C%201fr)%20minmax(0%2C%201fr)%2058px%3B%0A%20%20%20%20%20%20%20%20gap%3A%208px%3B%0A%20%20%20%20%20%20%20%20align-items%3A%20center%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-table-head%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20grid-template-columns%3A%20minmax(0%2C%201fr)%20minmax(0%2C%201fr)%20112px%2058px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-col-mode%2C%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-mode-block%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-col-mode%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-mode-block%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%204px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-table-head%20%7B%0A%20%20%20%20%20%20%20%20color%3A%20%235d5348%3B%0A%20%20%20%20%20%20%20%20font-weight%3A%20600%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(255%2C%20255%2C%20255%2C%200.48)%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%2014px%3B%0A%20%20%20%20%20%20%20%20padding%3A%2012px%3B%0A%20%20%20%20%20%20%20%20border%3A%201px%20solid%20rgba(190%2C%20176%2C%20157%2C%200.5)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-field-block%20%7B%0A%20%20%20%20%20%20%20%20display%3A%20grid%3B%0A%20%20%20%20%20%20%20%20gap%3A%204px%3B%0A%20%20%20%20%20%20%20%20min-width%3A%200%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-field-label%20%7B%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0A%20%20%20%20%20%20%20%20font-weight%3A%20700%3B%0A%20%20%20%20%20%20%20%20letter-spacing%3A%200.01em%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-field-label.original%20%7B%0A%20%20%20%20%20%20%20%20color%3A%20%238a5a26%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-field-label.replacement%20%7B%0A%20%20%20%20%20%20%20%20color%3A%20%231f6b45%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20.codex-input.original%20%7B%0A%20%20%20%20%20%20%20%20border-color%3A%20%23d9bf9a%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(255%2C%20248%2C%20240%2C%200.95)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20.codex-input.replacement%20%7B%0A%20%20%20%20%20%20%20%20border-color%3A%20%239fc7ae%3B%0A%20%20%20%20%20%20%20%20background%3A%20rgba(244%2C%20255%2C%20248%2C%200.95)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-small-btn%20%7B%0A%20%20%20%20%20%20%20%20border%3A%200%3B%0A%20%20%20%20%20%20%20%20border-radius%3A%208px%3B%0A%20%20%20%20%20%20%20%20background%3A%20%23e4d9cb%3B%0A%20%20%20%20%20%20%20%20color%3A%20%23443b32%3B%0A%20%20%20%20%20%20%20%20padding%3A%2011px%208px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-status%20%7B%0A%20%20%20%20%20%20%20%20color%3A%20%2375685a%3B%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-mode-label%20%7B%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0A%20%20%20%20%20%20%20%20font-weight%3A%20700%3B%0A%20%20%20%20%20%20%20%20color%3A%20%23555048%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%40media%20(max-width%3A%20520px)%20%7B%0A%20%20%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-table-head%2C%0A%20%20%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20%20%20grid-template-columns%3A%20minmax(0%2C%201fr)%20minmax(0%2C%201fr)%2058px%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-table-head%2C%0A%20%20%20%20%20%20%20%20%23%24%7BPANEL_ID%7D.is-advanced%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20%20%20grid-template-columns%3A%20minmax(0%2C%201fr)%20minmax(0%2C%201fr)%20104px%2052px%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%23%24%7BPANEL_ID%7D%20.codex-rule-row%20%7B%0A%20%20%20%20%20%20%20%20%20%20gap%3A%2010px%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%60%3B%0A%0A%20%20%20%20document.head.appendChild(style)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20escapeHtml%20%3D%20(value)%20%3D%3E%0A%20%20%20%20value%0A%20%20%20%20%20%20.replace(%2F%26%2Fg%2C%20%22%26amp%3B%22)%0A%20%20%20%20%20%20.replace(%2F%3C%2Fg%2C%20%22%26lt%3B%22)%0A%20%20%20%20%20%20.replace(%2F%3E%2Fg%2C%20%22%26gt%3B%22)%0A%20%20%20%20%20%20.replace(%2F%22%2Fg%2C%20%22%26quot%3B%22)%3B%0A%0A%20%20const%20buildMetaText%20%3D%20()%20%3D%3E%20%5B%0A%20%20%20%20%60%E5%BD%93%E5%89%8D%E7%BD%91%E7%AB%99%3A%20%24%7Blocation.hostname%7D%60%2C%0A%20%20%5D%3B%0A%0A%20%20%2F%2F%20%E4%BB%8E%E4%BC%9A%E5%91%98%E9%A1%B5%E9%9D%A2%20HTML%20%E4%B8%AD%E6%8F%90%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%E5%AD%97%E6%AE%B5%EF%BC%88%E9%80%9A%E7%94%A8%E8%A7%A3%E6%9E%90%E5%99%A8%EF%BC%89%0A%20%20const%20extractMemberInfo%20%3D%20(html)%20%3D%3E%20%7B%0A%20%20%20%20const%20doc%20%3D%20new%20DOMParser().parseFromString(html%2C%20%22text%2Fhtml%22)%3B%0A%20%20%20%20const%20fields%20%3D%20%5B%5D%3B%0A%20%20%20%20const%20push%20%3D%20(label%2C%20value)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20v%20%3D%20String(value%20%7C%7C%20%22%22).replace(%2F%5Cs%2B%2Fg%2C%20%22%20%22).trim()%3B%0A%20%20%20%20%20%20if%20(v%20%26%26%20v.length%20%3C%3D%2080%20%26%26%20!fields.some((f)%20%3D%3E%20f.value%20%3D%3D%3D%20v))%20%7B%0A%20%20%20%20%20%20%20%20fields.push(%7B%20label%3A%20String(label%20%7C%7C%20%22%22).replace(%2F%5Cs%2B%2Fg%2C%20%22%20%22).trim()%2C%20value%3A%20v%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20%2F%2F%201)%20dl%20%3E%20dt%20%2B%20dd%20%E7%BB%93%E6%9E%84%0A%20%20%20%20doc.querySelectorAll(%22dl%22).forEach((dl)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20dt%20%3D%20dl.querySelector(%22dt%22)%3B%0A%20%20%20%20%20%20const%20dd%20%3D%20dl.querySelector(%22dd%22)%3B%0A%20%20%20%20%20%20if%20(dt%20%26%26%20dd)%20push(dt.textContent%2C%20dd.textContent)%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%2F%2F%202)%20table%20%E4%B8%AD%20th%20%2B%20td%20%E7%BB%93%E6%9E%84%0A%20%20%20%20doc.querySelectorAll(%22tr%22).forEach((tr)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20th%20%3D%20tr.querySelector(%22th%22)%3B%0A%20%20%20%20%20%20const%20td%20%3D%20tr.querySelector(%22td%22)%3B%0A%20%20%20%20%20%20if%20(th%20%26%26%20td)%20push(th.textContent%2C%20td.textContent)%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%2F%2F%203)%20%E8%BE%93%E5%85%A5%E6%A1%86%20value%EF%BC%88%E6%96%87%E6%9C%AC%E7%B1%BB%EF%BC%89%0A%20%20%20%20doc.querySelectorAll(%22input%22).forEach((inp)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20t%20%3D%20(inp.type%20%7C%7C%20%22text%22).toLowerCase()%3B%0A%20%20%20%20%20%20if%20(%5B%22text%22%2C%20%22email%22%2C%20%22tel%22%2C%20%22search%22%5D.includes(t)%20%26%26%20inp.value)%20%7B%0A%20%20%20%20%20%20%20%20const%20label%20%3D%20inp.getAttribute(%22aria-label%22)%20%7C%7C%20inp.getAttribute(%22title%22)%20%7C%7C%20inp.name%20%7C%7C%20%22%E5%85%A5%E5%8A%9B%E5%80%A4%22%3B%0A%20%20%20%20%20%20%20%20push(label%2C%20inp.value)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%2F%2F%204)%20%E5%B8%B8%E8%A7%81%E6%97%A5%E6%96%87%E4%BC%9A%E5%91%98%E5%AD%97%E6%AE%B5%E5%90%8D%EF%BC%9A%E6%89%BE%E5%88%B0%E6%A0%87%E7%AD%BE%E5%85%83%E7%B4%A0%EF%BC%8C%E5%8F%96%E5%85%B6%E7%9B%B8%E9%82%BB%E5%80%BC%0A%20%20%20%20const%20knownLabels%20%3D%20%5B%22%E4%BC%9A%E5%93%A1%E7%95%AA%E5%8F%B7%22%2C%20%22%E4%BC%9A%E5%93%A1No%22%2C%20%22%E4%BC%9A%E5%93%A1ID%22%2C%20%22%E6%B0%8F%E5%90%8D%22%2C%20%22%E3%81%8A%E5%90%8D%E5%89%8D%22%2C%20%22%E3%83%95%E3%83%AA%E3%82%AC%E3%83%8A%22%2C%20%22%E3%83%8B%E3%83%83%E3%82%AF%E3%83%8D%E3%83%BC%E3%83%A0%22%2C%20%22%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%22%2C%20%22%E9%9B%BB%E8%A9%B1%E7%95%AA%E5%8F%B7%22%2C%20%22%E7%94%9F%E5%B9%B4%E6%9C%88%E6%97%A5%22%2C%20%22%E6%80%A7%E5%88%A5%22%2C%20%22%E4%BD%8F%E6%89%80%22%5D%3B%0A%20%20%20%20const%20labelCandidates%20%3D%20doc.querySelectorAll(%22div%2C%20span%2C%20p%2C%20label%2C%20th%2C%20dt%22)%3B%0A%20%20%20%20knownLabels.forEach((lb)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20el%20%3D%20Array.from(labelCandidates).find((e)%20%3D%3E%20e.textContent.replace(%2F%5Cs%2B%2Fg%2C%20%22%22).trim()%20%3D%3D%3D%20lb)%3B%0A%20%20%20%20%20%20if%20(!el)%20return%3B%0A%20%20%20%20%20%20const%20sibling%20%3D%20el.nextElementSibling%3B%0A%20%20%20%20%20%20if%20(sibling)%20push(lb%2C%20sibling.textContent)%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%2F%2F%205)%20%E9%A1%B5%E9%9D%A2%E5%86%85%E5%B5%8C%E8%84%9A%E6%9C%AC%E5%8F%98%E9%87%8F%20member_data%EF%BC%88%E4%BC%9A%E5%93%A1%E7%95%AA%E5%8F%B7%20%2F%20%E7%94%9F%E5%B9%B4%E6%9C%88%E6%97%A5%20%2F%20%E6%80%A7%E5%88%A5%EF%BC%89%0A%20%20%20%20const%20memberDataMatch%20%3D%20html.match(%2Fvar%5Cs%2Bmember_data%5Cs*%3D%5Cs*(%5C%7B%5B%5Cs%5CS%5D*%3F%5C%7D)(%3F%3A%5Cs*%3B)%3F%5Cs*(%3F%3A%3C%5C%2Fscript%3E%7C%24)%2Fi)%3B%0A%20%20%20%20if%20(memberDataMatch)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20const%20data%20%3D%20JSON.parse(memberDataMatch%5B1%5D)%3B%0A%20%20%20%20%20%20%20%20if%20(data.member_id)%20push(%22%E4%BC%9A%E5%93%A1%E7%95%AA%E5%8F%B7%22%2C%20data.member_id)%3B%0A%20%20%20%20%20%20%20%20if%20(data.birth)%20push(%22%E7%94%9F%E5%B9%B4%E6%9C%88%E6%97%A5%22%2C%20data.birth)%3B%0A%20%20%20%20%20%20%20%20if%20(data.sex)%20push(%22%E6%80%A7%E5%88%A5%22%2C%20data.sex)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%BF%BD%E7%95%A5%E8%A7%A3%E6%9E%90%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%206)%20%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%88%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%9AN%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%8C%E5%80%BC%E5%89%8D%E5%90%8E%E5%8F%AF%E8%83%BD%E5%A4%B9%E7%9D%80%E6%A0%87%E7%AD%BE%EF%BC%89%0A%20%20%20%20const%20pointMatch%20%3D%20html.match(%2F%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%5B%EF%BC%9A%3A%5D%5B%5E0-9%5D*(%5B%5Cd%2C%5D%2B)%5B%5E0-9%5D*%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%2F)%3B%0A%20%20%20%20if%20(pointMatch)%20push(%22%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%22%2C%20pointMatch%5B1%5D)%3B%0A%0A%20%20%20%20%2F%2F%207)%20%E9%A1%B5%E9%9D%A2%E6%A0%87%E9%A2%98%20h1%E3%80%8CXXX%20%E3%81%95%E3%82%93%E3%81%AE%E3%83%9E%E3%82%A4%E3%83%9A%E3%83%BC%E3%82%B8%E3%80%8D%E2%86%92%20%E6%98%B5%E7%A7%B0%0A%20%20%20%20const%20titleMatch%20%3D%20html.match(%2F%3Ch1%5B%5E%3E%5D*%3E(%5B%5E%3C%5D*%3F)%5Cs*%E3%81%95%E3%82%93%E3%81%AE%E3%83%9E%E3%82%A4%E3%83%9A%E3%83%BC%E3%82%B8%3C%5C%2Fh1%3E%2F)%3B%0A%20%20%20%20if%20(titleMatch%20%26%26%20titleMatch%5B1%5D)%20push(%22%E3%83%8B%E3%83%83%E3%82%AF%E3%83%8D%E3%83%BC%E3%83%A0(%E9%A1%B5%E9%9D%A2%E6%A0%87%E9%A2%98)%22%2C%20titleMatch%5B1%5D)%3B%0A%0A%20%20%20%20return%20fields%3B%0A%20%20%7D%3B%0A%0A%20%20const%20createRuleRowHtml%20%3D%20(rule%2C%20index)%20%3D%3E%20%60%0A%20%20%20%20%3Cdiv%20class%3D%22codex-rule-row%22%20data-index%3D%22%24%7Bindex%7D%22%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-field-block%22%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-field-label%20original%22%3E%E7%BD%91%E9%A1%B5%E5%BD%93%E5%89%8D%E6%98%BE%E7%A4%BA%E7%9A%84%E5%8E%9F%E6%96%87%E5%AD%97%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cinput%20class%3D%22codex-input%20original%22%20type%3D%22text%22%20value%3D%22%24%7BescapeHtml(rule.original)%7D%22%20data-rule-field%3D%22original%22%20placeholder%3D%22%E4%BE%8B%E5%A6%82%3A%20user%40example.com%20%2F%20%E6%98%BE%E7%A4%BA%E5%90%8D%E7%A7%B0%22%3E%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-field-block%22%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-field-label%20replacement%22%3E%E4%BD%A0%E6%83%B3%E6%98%BE%E7%A4%BA%E7%9A%84%E6%96%B0%E6%96%87%E5%AD%97%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cinput%20class%3D%22codex-input%20replacement%22%20type%3D%22text%22%20value%3D%22%24%7BescapeHtml(rule.replacement)%7D%22%20data-rule-field%3D%22replacement%22%20placeholder%3D%22%E4%BE%8B%E5%A6%82%3A%20alias%40example.com%20%2F%20%E6%96%B0%E5%90%8D%E7%A7%B0%22%3E%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-mode-block%22%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-mode-label%22%3E%E6%A8%A1%E5%BC%8F%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cselect%20class%3D%22codex-input%22%20data-rule-field%3D%22mode%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Coption%20value%3D%22normal%22%20%24%7Brule.mode%20%3D%3D%3D%20%22normal%22%20%3F%20%22selected%22%20%3A%20%22%22%7D%3E%E6%99%AE%E9%80%9A%3C%2Foption%3E%0A%20%20%20%20%20%20%20%20%20%20%3Coption%20value%3D%22regex%22%20%24%7Brule.mode%20%3D%3D%3D%20%22regex%22%20%3F%20%22selected%22%20%3A%20%22%22%7D%3E%E6%AD%A3%E5%88%99%3C%2Foption%3E%0A%20%20%20%20%20%20%20%20%3C%2Fselect%3E%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-small-btn%22%20data-action%3D%22remove-rule%22%3E%E5%88%A0%E9%99%A4%3C%2Fbutton%3E%0A%20%20%20%20%3C%2Fdiv%3E%0A%20%20%60%3B%0A%0A%20%20const%20getPanel%20%3D%20()%20%3D%3E%20document.getElementById(PANEL_ID)%3B%0A%0A%20%20const%20syncPanelVisibility%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20panel%20%3D%20getPanel()%3B%0A%20%20%20%20if%20(!panel)%20return%3B%0A%20%20%20%20panel.hidden%20%3D%20!config.panelVisible%3B%0A%20%20%20%20panel.classList.toggle(%22is-collapsed%22%2C%20Boolean(config.bodyCollapsed))%3B%0A%20%20%7D%3B%0A%0A%20%20const%20showPanel%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20config.panelVisible%20%3D%20true%3B%0A%20%20%20%20saveConfig()%3B%0A%20%20%20%20syncPanelVisibility()%3B%0A%20%20%20%20updateStatusText(%22%E8%AE%BE%E7%BD%AE%E9%9D%A2%E6%9D%BF%E5%B7%B2%E6%89%93%E5%BC%80%E3%80%82%22)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20hidePanel%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20config.panelVisible%20%3D%20false%3B%0A%20%20%20%20saveConfig()%3B%0A%20%20%20%20syncPanelVisibility()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20togglePanelBody%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20config.bodyCollapsed%20%3D%20!config.bodyCollapsed%3B%0A%20%20%20%20saveConfig()%3B%0A%20%20%20%20syncPanelVisibility()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20startSessionNow%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20config.sessionStartedAt%20%3D%20Date.now()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20disableReplacement%20%3D%20(message%20%3D%20%22%E6%9B%BF%E6%8D%A2%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD%EF%BC%8C%E9%A1%B5%E9%9D%A2%E6%AD%A3%E5%B8%B8%E6%98%BE%E7%A4%BA%E3%80%82%22)%20%3D%3E%20%7B%0A%20%20%20%20config.enabled%20%3D%20false%3B%0A%20%20%20%20config.sessionStartedAt%20%3D%20null%3B%0A%20%20%20%20saveConfig()%3B%0A%20%20%20%20hidePanel()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20clearHoldTimer%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(holdTimer)%20%7B%0A%20%20%20%20%20%20clearTimeout(holdTimer)%3B%0A%20%20%20%20%20%20holdTimer%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20threeFingerHold%20%3D%20false%3B%0A%20%20%7D%3B%0A%0A%20%20const%20clearSelection%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20sel%20%3D%20window.getSelection%20%26%26%20window.getSelection()%3B%0A%20%20%20%20if%20(sel%20%26%26%20typeof%20sel.removeAllRanges%20%3D%3D%3D%20%22function%22)%20%7B%0A%20%20%20%20%20%20sel.removeAllRanges()%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20recordTripleClick%20%3D%20(clientY)%20%3D%3E%20%7B%0A%20%20%20%20if%20(config.panelVisible)%20return%3B%0A%20%20%20%20if%20(clientY%20%3E%20PANEL_HOLD_ZONE_PX)%20return%3B%0A%0A%20%20%20%20const%20now%20%3D%20Date.now()%3B%0A%20%20%20%20tripleClickTimes%20%3D%20tripleClickTimes.filter(%0A%20%20%20%20%20%20(t)%20%3D%3E%20now%20-%20t.time%20%3C%3D%20TRIPLE_CLICK_WINDOW_MS%0A%20%20%20%20)%3B%0A%20%20%20%20tripleClickTimes.push(%7B%20time%3A%20now%2C%20y%3A%20clientY%20%7D)%3B%0A%0A%20%20%20%20if%20(tripleClickTimes.length%20%3C%203)%20return%3B%0A%0A%20%20%20%20const%20ys%20%3D%20tripleClickTimes.map((t)%20%3D%3E%20t.y)%3B%0A%20%20%20%20const%20spread%20%3D%20Math.max(...ys)%20-%20Math.min(...ys)%3B%0A%20%20%20%20tripleClickTimes%20%3D%20%5B%5D%3B%0A%0A%20%20%20%20if%20(spread%20%3C%3D%20TRIPLE_CLICK_MAX_SPREAD)%20%7B%0A%20%20%20%20%20%20showPanel()%3B%0A%20%20%20%20%20%20setTimeout(clearSelection%2C%200)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20const%20startTopHoldDetector%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20beginHold%20%3D%20(clientY%2C%20isThreeFinger%20%3D%20false)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(config.panelVisible)%20return%3B%0A%20%20%20%20%20%20if%20(!isThreeFinger%20%26%26%20clientY%20%3E%20PANEL_HOLD_ZONE_PX)%20return%3B%0A%0A%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20topHoldStartY%20%3D%20clientY%3B%0A%20%20%20%20%20%20threeFingerHold%20%3D%20isThreeFinger%3B%0A%20%20%20%20%20%20holdTimer%20%3D%20window.setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20holdTimer%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20threeFingerHold%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20showPanel()%3B%0A%20%20%20%20%20%20%7D%2C%20PANEL_HOLD_MS)%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20moveHold%20%3D%20(clientY%2C%20touchesLength%20%3D%201)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(!holdTimer)%20return%3B%0A%20%20%20%20%20%20if%20(threeFingerHold%20%26%26%20touchesLength%20!%3D%3D%203)%20%7B%0A%20%20%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20Math.abs(clientY%20-%20topHoldStartY)%20%3E%2014%20%7C%7C%0A%20%20%20%20%20%20%20%20(!threeFingerHold%20%26%26%20clientY%20%3E%20PANEL_HOLD_ZONE_PX%20%2B%2020)%0A%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20document.addEventListener(%0A%20%20%20%20%20%20%22touchstart%22%2C%0A%20%20%20%20%20%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(event.touches.length%20%3D%3D%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20beginHold(event.touches%5B0%5D.clientY%2C%20false)%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(event.touches.length%20%3D%3D%3D%203)%20%7B%0A%20%20%20%20%20%20%20%20%20%20beginHold(event.touches%5B0%5D.clientY%2C%20true)%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7B%20passive%3A%20true%20%7D%0A%20%20%20%20)%3B%0A%0A%20%20%20%20document.addEventListener(%0A%20%20%20%20%20%20%22touchmove%22%2C%0A%20%20%20%20%20%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(event.touches.length%20%3C%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20moveHold(event.touches%5B0%5D.clientY%2C%20event.touches.length)%3B%0A%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7B%20passive%3A%20true%20%7D%0A%20%20%20%20)%3B%0A%0A%20%20%20%20document.addEventListener(%22touchend%22%2C%20clearHoldTimer%2C%20%7B%20passive%3A%20true%20%7D)%3B%0A%20%20%20%20document.addEventListener(%22touchcancel%22%2C%20clearHoldTimer%2C%20%7B%20passive%3A%20true%20%7D)%3B%0A%0A%20%20%20%20document.addEventListener(%22mousedown%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20beginHold(event.clientY)%3B%0A%20%20%20%20%20%20%2F%2F%20%E9%A1%B6%E9%83%A8%E5%8C%BA%E5%9F%9F%E5%86%85%E3%80%81%E4%B8%94%E5%B7%B2%E6%9C%89%E8%BF%91%E6%9C%9F%E7%82%B9%E5%87%BB%EF%BC%88%E6%AD%A3%E5%9C%A8%E5%BD%A2%E6%88%90%E4%B8%89%E5%87%BB%E7%9A%84%E5%90%8E%E7%BB%AD%E7%82%B9%E5%87%BB%EF%BC%89%E2%86%92%20%E9%98%BB%E6%AD%A2%E6%B5%8F%E8%A7%88%E5%99%A8%E9%80%89%E4%B8%AD%E6%96%87%E6%9C%AC%0A%20%20%20%20%20%20const%20isInZone%20%3D%20event.clientY%20%3C%3D%20PANEL_HOLD_ZONE_PX%3B%0A%20%20%20%20%20%20const%20lastTap%20%3D%0A%20%20%20%20%20%20%20%20tripleClickTimes.length%20%3E%200%0A%20%20%20%20%20%20%20%20%20%20%3F%20tripleClickTimes%5BtripleClickTimes.length%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%3A%20null%3B%0A%20%20%20%20%20%20const%20isChainTap%20%3D%0A%20%20%20%20%20%20%20%20lastTap%20!%3D%3D%20null%20%26%26%0A%20%20%20%20%20%20%20%20Date.now()%20-%20lastTap.time%20%3C%3D%20TRIPLE_CLICK_WINDOW_MS%3B%0A%20%20%20%20%20%20if%20(isInZone%20%26%26%20isChainTap%20%26%26%20event.defaultPrevented%20%3D%3D%3D%20false)%20%7B%0A%20%20%20%20%20%20%20%20event.preventDefault()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20document.addEventListener(%22mousemove%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20moveHold(event.clientY)%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20document.addEventListener(%22mouseup%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20clearHoldTimer()%3B%0A%20%20%20%20%20%20recordTripleClick(event.clientY)%3B%0A%20%20%20%20%7D)%3B%0A%20%20%20%20document.addEventListener(%22mouseleave%22%2C%20clearHoldTimer)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20buildPanel%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(document.getElementById(PANEL_ID))%20return%3B%0A%0A%20%20%20%20ensureStyles()%3B%0A%0A%20%20%20%20const%20panel%20%3D%20document.createElement(%22section%22)%3B%0A%20%20%20%20panel.id%20%3D%20PANEL_ID%3B%0A%0A%20%20%20%20panel.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-header%22%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-header-main%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-title%22%20data-action%3D%22toggle-body%22%3E%E5%9B%BA%E5%AE%9A%E7%BD%91%E7%AB%99%E6%98%BE%E7%A4%BA%E6%9B%BF%E6%8D%A2%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-meta%22%3E%24%7BbuildMetaText()%0A%20%20%20%20%20%20%20%20%20%20%20%20.map((line)%20%3D%3E%20%60%3Cdiv%3E%24%7BescapeHtml(line)%7D%3C%2Fdiv%3E%60)%0A%20%20%20%20%20%20%20%20%20%20%20%20.join(%22%22)%7D%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-close%22%20data-action%3D%22hide-panel%22%3E%E5%85%B3%E9%97%AD%3C%2Fbutton%3E%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-body%22%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-check-row%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clabel%20class%3D%22codex-check%22%3E%3Cinput%20type%3D%22checkbox%22%20data-field%3D%22enabled%22%3E%20%E5%90%AF%E7%94%A8%E6%9B%BF%E6%8D%A2%3C%2Flabel%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clabel%20class%3D%22codex-check%22%3E%3Cinput%20type%3D%22checkbox%22%20data-field%3D%22fontAdjust%22%3E%20%E5%90%AF%E7%94%A8%E5%AD%97%E4%BD%93%E5%BE%AE%E8%B0%83%3C%2Flabel%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clabel%20class%3D%22codex-check%22%3E%3Cinput%20type%3D%22checkbox%22%20data-field%3D%22replaceValues%22%3E%20%E5%90%8C%E6%97%B6%E6%9B%BF%E6%8D%A2%E8%BE%93%E5%85%A5%E6%A1%86%E5%86%85%E5%AE%B9%3C%2Flabel%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-action-row%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%22%20data-action%3D%22fetch-member%22%3E%E8%8E%B7%E5%8F%96%E4%BC%9A%E5%91%98%E4%BF%A1%E6%81%AF%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%22%20data-action%3D%22add-rule%22%3E%E6%B7%BB%E5%8A%A0%E8%A7%84%E5%88%99%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%20primary%22%20data-action%3D%22save%22%3E%E4%BF%9D%E5%AD%98%E5%B9%B6%E5%BA%94%E7%94%A8%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%22%20data-action%3D%22disable%22%3E%E5%85%B3%E9%97%AD%E5%8A%9F%E8%83%BD%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%22%20data-action%3D%22restart-hour%22%3E%E9%87%8D%E6%96%B0%E8%AE%A1%E6%97%B6%204%20%E5%B0%8F%E6%97%B6%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-status%22%20data-role%3D%22status%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-table%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-rule-guide%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-guide-strong%22%3E%E5%B7%A6%E8%BE%B9%E5%A1%AB%E7%BD%91%E9%A1%B5%E5%BD%93%E5%89%8D%E6%98%BE%E7%A4%BA%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E5%8F%B3%E8%BE%B9%E5%A1%AB%E4%BD%A0%E6%83%B3%E6%98%BE%E7%A4%BA%E7%9A%84%E6%96%B0%E5%86%85%E5%AE%B9%E3%80%82%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%E8%A7%84%E5%88%99%E4%BC%9A%E6%9B%BF%E6%8D%A2%E9%A1%B5%E9%9D%A2%E9%87%8C%E5%8C%B9%E9%85%8D%E5%88%B0%E7%9A%84%E5%8F%AF%E8%A7%81%E6%96%87%E5%AD%97%EF%BC%9B%E7%99%BB%E5%BD%95%E6%A1%86%E9%87%8C%E6%89%8B%E5%8A%A8%E8%BE%93%E5%85%A5%E7%9A%84%E5%86%85%E5%AE%B9%E4%B8%8D%E4%BC%9A%E8%A2%AB%E4%BF%AE%E6%94%B9%E3%80%82%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%E7%A4%BA%E4%BE%8B%3A%20%E5%8E%9F%E6%96%87%E5%AD%97%20user%40example.com%20-%3E%20%E6%96%B0%E6%96%87%E5%AD%97%20alias%40example.com%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22button%22%20class%3D%22codex-btn%20codex-advanced-toggle%22%20data-action%3D%22toggle-advanced%22%3E%E2%9A%99%20%E9%AB%98%E7%BA%A7%E6%9B%BF%E6%8D%A2%EF%BC%88%E6%AD%A3%E5%88%99%EF%BC%89%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-rules-scroll%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-table-head%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%E5%8E%9F%E6%96%87%E5%AD%97%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%E6%96%B0%E6%96%87%E5%AD%97%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-col-mode%22%3E%E6%A8%A1%E5%BC%8F%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22codex-rules%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%60%3B%0A%0A%20%20%20%20const%20rulesContainer%20%3D%20panel.querySelector(%22.codex-rules%22)%3B%0A%20%20%20%20const%20advancedToggleBtn%20%3D%20panel.querySelector('%5Bdata-action%3D%22toggle-advanced%22%5D')%3B%0A%0A%20%20%20%20const%20syncAdvancedMode%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20hasRegex%20%3D%20(config.rules%20%7C%7C%20%5B%5D).some((r)%20%3D%3E%20r.mode%20%3D%3D%3D%20%22regex%22)%3B%0A%20%20%20%20%20%20panel.classList.toggle(%22is-advanced%22%2C%20hasRegex)%3B%0A%20%20%20%20%20%20if%20(advancedToggleBtn)%20%7B%0A%20%20%20%20%20%20%20%20advancedToggleBtn.textContent%20%3D%20hasRegex%20%3F%20%22%E2%86%A9%20%E8%BF%94%E5%9B%9E%E7%AE%80%E5%8D%95%E6%9B%BF%E6%8D%A2%22%20%3A%20%22%E2%9A%99%20%E9%AB%98%E7%BA%A7%E6%9B%BF%E6%8D%A2%EF%BC%88%E6%AD%A3%E5%88%99%EF%BC%89%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20renderRules%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(!rulesContainer)%20return%3B%0A%20%20%20%20%20%20rulesContainer.innerHTML%20%3D%20config.rules.map((rule%2C%20index)%20%3D%3E%20createRuleRowHtml(rule%2C%20index)).join(%22%22)%3B%0A%20%20%20%20%20%20syncAdvancedMode()%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20syncFields%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20panel.querySelectorAll(%22%5Bdata-field%5D%22).forEach((input)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20field%20%3D%20input.getAttribute(%22data-field%22)%3B%0A%20%20%20%20%20%20%20%20if%20(!field)%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20(input%20instanceof%20HTMLInputElement%20%26%26%20input.type%20%3D%3D%3D%20%22checkbox%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20input.checked%20%3D%20Boolean(config%5Bfield%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(input%20instanceof%20HTMLInputElement)%20%7B%0A%20%20%20%20%20%20%20%20%20%20input.value%20%3D%20String(config%5Bfield%5D%20%7C%7C%20%22%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20readFields%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20panel.querySelectorAll(%22%5Bdata-field%5D%22).forEach((input)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20field%20%3D%20input.getAttribute(%22data-field%22)%3B%0A%20%20%20%20%20%20%20%20if%20(!field)%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20(input%20instanceof%20HTMLInputElement%20%26%26%20input.type%20%3D%3D%3D%20%22checkbox%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20config%5Bfield%5D%20%3D%20input.checked%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(input%20instanceof%20HTMLInputElement)%20%7B%0A%20%20%20%20%20%20%20%20%20%20config%5Bfield%5D%20%3D%20input.value.trim()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20readRules%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20nextRules%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20panel.querySelectorAll(%22.codex-rule-row%22).forEach((row)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20original%20%3D%20row.querySelector('%5Bdata-rule-field%3D%22original%22%5D')%3B%0A%20%20%20%20%20%20%20%20const%20replacement%20%3D%20row.querySelector('%5Bdata-rule-field%3D%22replacement%22%5D')%3B%0A%20%20%20%20%20%20%20%20const%20mode%20%3D%20row.querySelector('%5Bdata-rule-field%3D%22mode%22%5D')%3B%0A%0A%20%20%20%20%20%20%20%20nextRules.push(%7B%0A%20%20%20%20%20%20%20%20%20%20enabled%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20original%3A%20original%20instanceof%20HTMLInputElement%20%3F%20original.value.trim()%20%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20replacement%3A%20replacement%20instanceof%20HTMLInputElement%20%3F%20replacement.value.trim()%20%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20mode%3A%20mode%20instanceof%20HTMLSelectElement%20%26%26%20mode.value%20%3D%3D%3D%20%22regex%22%20%3F%20%22regex%22%20%3A%20%22normal%22%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20config.rules%20%3D%20nextRules.length%20%3F%20nextRules%20%3A%20cloneRules(DEFAULT_RULES)%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20const%20handleFetchMember%20%3D%20async%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(location.hostname%20!%3D%3D%20%22parks2.bandainamco-am.co.jp%22)%20%7B%0A%20%20%20%20%20%20%20%20updateStatusText(%22%E2%9A%A0%EF%B8%8F%20%E8%AF%B7%E5%85%88%E5%9C%A8%20Bandai%20Parks%20%E7%BD%91%E7%AB%99%EF%BC%88parks2.bandainamco-am.co.jp%EF%BC%89%E4%B8%8A%E4%BD%BF%E7%94%A8%E6%AD%A4%E5%8A%9F%E8%83%BD%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20updateStatusText(%22%E2%8F%B3%20%E6%AD%A3%E5%9C%A8%E8%8E%B7%E5%8F%96%E4%BC%9A%E5%91%98%E4%BF%A1%E6%81%AF%E2%80%A6%22)%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20const%20resp%20%3D%20await%20fetch(%22https%3A%2F%2Fparks2.bandainamco-am.co.jp%2Fmember_mypage.html%22%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20credentials%3A%20%22include%22%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20if%20(!resp.ok)%20throw%20new%20Error(%60HTTP%20%24%7Bresp.status%7D%60)%3B%0A%20%20%20%20%20%20%20%20const%20html%20%3D%20await%20resp.text()%3B%0A%20%20%20%20%20%20%20%20const%20fields%20%3D%20extractMemberInfo(html)%3B%0A%20%20%20%20%20%20%20%20if%20(!fields.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20updateStatusText(%22%E2%9A%A0%EF%B8%8F%20%E6%9C%AA%E8%8E%B7%E5%8F%96%E5%88%B0%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%EF%BC%88%E5%8F%AF%E8%83%BD%E6%9C%AA%E7%99%BB%E5%BD%95%E6%88%96%E9%A1%B5%E9%9D%A2%E7%BB%93%E6%9E%84%E5%8F%98%E5%8C%96%EF%BC%89%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20readRules()%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E6%B8%85%E6%8E%89%E7%A9%BA%E8%A1%8C%EF%BC%8C%E9%81%BF%E5%85%8D%E5%92%8C%E6%8A%93%E5%8F%96%E5%88%B0%E7%9A%84%E4%BF%A1%E6%81%AF%E6%B7%B7%E5%9C%A8%E4%B8%80%E8%B5%B7%0A%20%20%20%20%20%20%20%20config.rules%20%3D%20config.rules.filter((r)%20%3D%3E%20r.original.trim()%20!%3D%3D%20%22%22)%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E6%AF%8F%E4%B8%AA%E5%AD%97%E6%AE%B5%E5%80%BC%E4%BD%9C%E4%B8%BA%E4%B8%80%E6%9D%A1%E8%A7%84%E5%88%99%E7%9A%84%E3%80%8C%E5%8E%9F%E6%96%87%E5%AD%97%E3%80%8D%EF%BC%8C%E6%96%B0%E6%96%87%E5%AD%97%E7%95%99%E7%A9%BA%E7%94%B1%E7%94%A8%E6%88%B7%E5%A1%AB%E5%86%99%0A%20%20%20%20%20%20%20%20fields.forEach((f)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20config.rules.push(%7B%20enabled%3A%20true%2C%20original%3A%20f.value%2C%20replacement%3A%20%22%22%2C%20mode%3A%20%22normal%22%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20if%20(!config.rules.length)%20config.rules%20%3D%20cloneRules(DEFAULT_RULES)%3B%0A%20%20%20%20%20%20%20%20renderRules()%3B%0A%20%20%20%20%20%20%20%20updateStatusText(%60%E2%9C%85%20%E5%B7%B2%E8%8E%B7%E5%8F%96%20%24%7Bfields.length%7D%20%E9%A1%B9%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%AF%B7%E5%9C%A8%E3%80%8C%E6%96%B0%E6%96%87%E5%AD%97%E3%80%8D%E4%B8%AD%E5%A1%AB%E5%86%99%E8%A6%81%E6%98%BE%E7%A4%BA%E7%9A%84%E5%86%85%E5%AE%B9%E3%80%82%60)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20updateStatusText(%22%E2%9A%A0%EF%B8%8F%20%E8%8E%B7%E5%8F%96%E5%A4%B1%E8%B4%A5%3A%20%22%20%2B%20(e%20%26%26%20e.message%20%3F%20e.message%20%3A%20%22%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF%22))%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20panel.addEventListener(%22click%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20target%20%3D%20event.target%3B%0A%20%20%20%20%20%20if%20(!(target%20instanceof%20HTMLElement))%20return%3B%0A%0A%20%20%20%20%20%20const%20action%20%3D%20target.getAttribute(%22data-action%22)%3B%0A%20%20%20%20%20%20if%20(!action)%20return%3B%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22toggle-advanced%22)%20%7B%0A%20%20%20%20%20%20%20%20const%20isAdvanced%20%3D%20panel.classList.toggle(%22is-advanced%22)%3B%0A%20%20%20%20%20%20%20%20target.textContent%20%3D%20isAdvanced%20%3F%20%22%E2%86%A9%20%E8%BF%94%E5%9B%9E%E7%AE%80%E5%8D%95%E6%9B%BF%E6%8D%A2%22%20%3A%20%22%E2%9A%99%20%E9%AB%98%E7%BA%A7%E6%9B%BF%E6%8D%A2%EF%BC%88%E6%AD%A3%E5%88%99%EF%BC%89%22%3B%0A%20%20%20%20%20%20%20%20updateStatusText(isAdvanced%20%3F%20%22%E5%B7%B2%E5%BC%80%E5%90%AF%E9%AB%98%E7%BA%A7%E6%9B%BF%E6%8D%A2%EF%BC%8C%E6%94%AF%E6%8C%81%E6%AD%A3%E5%88%99%E5%8C%B9%E9%85%8D%E3%80%82%22%20%3A%20%22%E5%B7%B2%E5%85%B3%E9%97%AD%E9%AB%98%E7%BA%A7%E6%9B%BF%E6%8D%A2%EF%BC%8C%E4%BB%85%E6%99%AE%E9%80%9A%E5%8C%B9%E9%85%8D%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22toggle-body%22)%20%7B%0A%20%20%20%20%20%20%20%20togglePanelBody()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22hide-panel%22)%20%7B%0A%20%20%20%20%20%20%20%20hidePanel()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22fetch-member%22)%20%7B%0A%20%20%20%20%20%20%20%20handleFetchMember()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22add-rule%22)%20%7B%0A%20%20%20%20%20%20%20%20readRules()%3B%0A%20%20%20%20%20%20%20%20config.rules.push(%7B%20enabled%3A%20true%2C%20original%3A%20%22%22%2C%20replacement%3A%20%22%22%2C%20mode%3A%20%22normal%22%20%7D)%3B%0A%20%20%20%20%20%20%20%20renderRules()%3B%0A%20%20%20%20%20%20%20%20updateStatusText(%22%E5%B7%B2%E6%B7%BB%E5%8A%A0%E4%B8%80%E6%9D%A1%E8%A7%84%E5%88%99%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22remove-rule%22)%20%7B%0A%20%20%20%20%20%20%20%20const%20row%20%3D%20target.closest(%22.codex-rule-row%22)%3B%0A%20%20%20%20%20%20%20%20if%20(!row)%20return%3B%0A%20%20%20%20%20%20%20%20const%20index%20%3D%20Number(row.getAttribute(%22data-index%22))%3B%0A%20%20%20%20%20%20%20%20readRules()%3B%0A%20%20%20%20%20%20%20%20config.rules.splice(index%2C%201)%3B%0A%20%20%20%20%20%20%20%20if%20(!config.rules.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20config.rules%20%3D%20cloneRules(DEFAULT_RULES)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20renderRules()%3B%0A%20%20%20%20%20%20%20%20updateStatusText(%22%E8%A7%84%E5%88%99%E5%B7%B2%E5%88%A0%E9%99%A4%E3%80%82%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22save%22)%20%7B%0A%20%20%20%20%20%20%20%20readFields()%3B%0A%20%20%20%20%20%20%20%20readRules()%3B%0A%20%20%20%20%20%20%20%20config.enabled%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20startSessionNow()%3B%0A%20%20%20%20%20%20%20%20saveConfig()%3B%0A%20%20%20%20%20%20%20%20applyReplacements(%0A%20%20%20%20%20%20%20%20%20%20%60%E5%B7%B2%E5%BA%94%E7%94%A8%20%24%7Bconfig.rules.filter((rule)%20%3D%3E%20rule.enabled%20%26%26%20rule.original%20%26%26%20rule.replacement).length%7D%20%E6%9D%A1%E8%A7%84%E5%88%99%EF%BC%8C4%20%E5%B0%8F%E6%97%B6%E5%90%8E%E8%87%AA%E5%8A%A8%E5%A4%B1%E6%95%88%E3%80%82%60%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22disable%22)%20%7B%0A%20%20%20%20%20%20%20%20disableReplacement()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(action%20%3D%3D%3D%20%22restart-hour%22)%20%7B%0A%20%20%20%20%20%20%20%20readFields()%3B%0A%20%20%20%20%20%20%20%20readRules()%3B%0A%20%20%20%20%20%20%20%20config.enabled%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20startSessionNow()%3B%0A%20%20%20%20%20%20%20%20saveConfig()%3B%0A%20%20%20%20%20%20%20%20applyReplacements(%22%E5%B7%B2%E9%87%8D%E6%96%B0%E5%BC%80%E5%A7%8B%E8%AE%A1%E6%97%B6%EF%BC%8C4%20%E5%B0%8F%E6%97%B6%E5%90%8E%E8%87%AA%E5%8A%A8%E5%A4%B1%E6%95%88%E3%80%82%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20syncFields()%3B%0A%20%20%20%20renderRules()%3B%0A%20%20%20%20document.body.appendChild(panel)%3B%0A%20%20%20%20syncPanelVisibility()%3B%0A%20%20%20%20updateStatusText(%22%E9%95%BF%E6%8C%89%E9%A1%B6%E9%83%A8%202%20%E7%A7%92%EF%BC%8C%E6%88%96%E5%BF%AB%E9%80%9F%E4%B8%89%E5%87%BB%E9%A1%B6%E9%83%A8%E5%8C%BA%E5%9F%9F%E5%8F%AF%E5%86%8D%E6%AC%A1%E6%89%93%E5%BC%80%E8%AE%BE%E7%BD%AE%E9%9D%A2%E6%9D%BF%E3%80%82%22)%3B%0A%20%20%7D%3B%0A%0A%20%20const%20boot%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(config.enabled%20%26%26%20hasExpired())%20%7B%0A%20%20%20%20%20%20config.enabled%20%3D%20false%3B%0A%20%20%20%20%20%20config.sessionStartedAt%20%3D%20null%3B%0A%20%20%20%20%20%20saveConfig()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20config.panelVisible%20%3D%20false%3B%0A%0A%20%20%20%20startObserver()%3B%0A%20%20%20%20startTopHoldDetector()%3B%0A%20%20%20%20syncStatusLoop()%3B%0A%0A%20%20%20%20const%20mountUi%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(!document.body)%20%7B%0A%20%20%20%20%20%20%20%20requestAnimationFrame(mountUi)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20buildPanel()%3B%0A%20%20%20%20%20%20applyReplacements()%3B%0A%20%20%20%20%20%20startFastScanLoop()%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20mountUi()%3B%0A%0A%20%20%20%20document.addEventListener(%22readystatechange%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20applyReplacements()%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20window.addEventListener(%22load%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20applyReplacements()%3B%0A%20%20%20%20%20%20startFastScanLoop()%3B%0A%20%20%20%20%7D)%3B%0A%20%20%7D%3B%0A%0A%20%20boot()%3B%0A%0A%20%20if%20(isReplacementActive())%20%7B%0A%20%20%20%20applyReplacements()%3B%0A%20%20%20%20showToast(%22%E2%9C%85%20%E5%B7%B2%E5%BA%94%E7%94%A8%E6%9B%BF%E6%8D%A2%22)%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20showPanel()%3B%0A%20%20%7D%0A%7D)()%3B