(() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __commonJS = (cb, mod) => function __require() {
    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  };
  var __copyProps = (to, from, except, desc) => {
    if (from && typeof from === "object" || typeof from === "function") {
      for (let key of __getOwnPropNames(from))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
    }
    return to;
  };
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
    mod
  ));

  // src/shared/version.js
  var require_version = __commonJS({
    "src/shared/version.js"(exports, module) {
      (function attachBuildIdentity(root, factory) {
        const api = factory();
        if (typeof module === "object" && module.exports) module.exports = api;
        root.TfaBuildIdentity = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createBuildIdentity() {
        "use strict";
        const EXTENSION_VERSION = "1.25.34";
        const injectedFingerprint = true ? "ad6e691b8aca11ed33afdee80003f6267e631e774c668aa45122b2917e7c7890" : "";
        const fingerprint = injectedFingerprint || `source:${EXTENSION_VERSION}`;
        return Object.freeze({ version: EXTENSION_VERSION, fingerprint });
      });
    }
  });

  // src/shared/i18n.js
  var require_i18n = __commonJS({
    "src/shared/i18n.js"(exports, module) {
      (function attachI18n(root, factory) {
        const api = factory();
        if (typeof module === "object" && module.exports) module.exports = api;
        root.TfaI18n = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createI18nModule() {
        "use strict";
        const LANGUAGE_STORAGE_KEY = "tfa_language";
        const MESSAGES = Object.freeze({
          zh: Object.freeze({
            "layout.split": "\u53CC\u680F\u603B\u89C8",
            "layout.browser": "\u771F\u5B9E\u9875\u7B7E",
            "layout.tasks": "\u4EFB\u52A1\u603B\u89C8",
            "pane.browser": "\u5F53\u524D\u6D4F\u89C8\u5668\u9875\u7B7E",
            "pane.tasks": "\u4EFB\u52A1\u5212\u5206\u603B\u89C8",
            "search.placeholder": "\u641C\u7D22\u6807\u9898\u3001\u7F51\u7AD9\u6216\u7F51\u5740",
            "filter.allWindows": "\u5168\u90E8\u7A97\u53E3",
            "filter.allDomains": "\u5168\u90E8\u9886\u57DF",
            "filter.allStatuses": "\u5168\u90E8\u72B6\u6001",
            "filter.all": "\u5168\u90E8",
            "locale.id": "zh-CN",
            "task.new": "\u65B0\u589E\u4EFB\u52A1",
            "task.inbox": "\u4E34\u65F6\u533A",
            "inbox.ignorePage": "\u5FFD\u7565\u6B64\u9875\u9762",
            "inbox.markShared": "\u6807\u8BB0\u4E3A\u5171\u4EAB\u5DE5\u5177 / \u591A\u4EFB\u52A1\u9875",
            "inbox.excludeSite": "\u4E0D\u8BB0\u5F55\u6B64\u7AD9\u70B9",
            "inbox.sharedBadge": "\u5171\u4EAB\u5DE5\u5177 / \u591A\u4EFB\u52A1\u9875",
            "toast.inboxPreferenceFailed": "\u4E34\u65F6\u533A\u8BBE\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "empty.tabs": "\u6CA1\u6709\u5339\u914D\u7684\u9875\u7B7E",
            "empty.tasks": "\u8FD8\u6CA1\u6709\u4EFB\u52A1",
            "workbench.layoutLabel": "\u4E3B\u89C6\u56FE\u5207\u6362",
            "workbench.layout.split": "\u53CC\u680F\u603B\u89C8",
            "workbench.layout.browser": "\u771F\u5B9E\u9875\u7B7E",
            "workbench.layout.tasks": "\u4EFB\u52A1\u603B\u89C8",
            "workbench.layout.recycle": "\u56DE\u6536\u7AD9",
            "workbench.searchPlaceholder": "\u641C\u7D22\u9875\u7B7E\u3001\u7F51\u5740\u6216\u4EFB\u52A1",
            "workbench.searchHint": "\u4EFB\u52A1\u6574\u7406\u4E0D\u4F1A\u91CD\u6392\u771F\u5B9E\u9875\u7B7E",
            "workbench.browserTitle": "\u5F53\u524D\u6D4F\u89C8\u5668\u9875\u7B7E",
            "workbench.taskTitle": "\u4EFB\u52A1\u5212\u5206\u603B\u89C8",
            "workbench.inboxTitle": "\u5F85\u5212\u5206\u7684\u9875\u7B7E",
            "workbench.inboxCandidates": "{count} \u4E2A\u5019\u9009",
            "workbench.inboxExpand": "\u5C55\u5F00\u5168\u90E8\u9875\u7B7E",
            "workbench.inboxCollapse": "\u6536\u8D77\u4E3A\u4E00\u884C",
            "inbox.observation.observing.label": "\u89C2\u5BDF\u4E2D",
            "inbox.observation.observing.reason": "\u7B49\u5F85\u66F4\u591A\u6D4F\u89C8\u884C\u4E3A",
            "inbox.observation.temporary_query.label": "\u4E34\u65F6\u67E5\u8BE2",
            "inbox.observation.temporary_query.reason": "\u53EF\u80FD\u662F\u4E00\u6B21\u77ED\u65F6\u67E5\u8BE2",
            "inbox.observation.possible_misclick.label": "\u7591\u4F3C\u8BEF\u70B9",
            "inbox.observation.possible_misclick.reason": "\u505C\u7559\u5F88\u77ED\uFF0C\u6682\u4E0D\u5F52\u7C7B",
            "inbox.observation.redirect_or_ad.label": "\u5E7F\u544A\u8DF3\u8F6C",
            "inbox.observation.redirect_or_ad.reason": "\u7591\u4F3C\u8DF3\u8F6C\u6216\u5E7F\u544A\u9875\u9762",
            "inbox.observation.intent_drift.label": "\u5A31\u4E50\u504F\u822A",
            "inbox.observation.intent_drift.reason": "\u53EF\u80FD\u504F\u79BB\u5F53\u524D\u6D4F\u89C8\u610F\u56FE",
            "workbench.statusFilter": "\u72B6\u6001\u7B5B\u9009",
            "workbench.domainFilter": "\u9886\u57DF\u7B5B\u9009",
            "workbench.taskSort": "\u4EFB\u52A1\u6392\u5E8F",
            "workbench.taskSort.manual": "\u624B\u52A8\u6392\u5E8F",
            "workbench.taskSort.recent": "\u6700\u8FD1\u66F4\u65B0",
            "workbench.taskSort.title": "\u540D\u79F0\u6392\u5E8F",
            "task.view.label": "\u4EFB\u52A1\u89C6\u56FE",
            "task.view.cards": "\u5361\u7247",
            "task.view.aggregate": "\u805A\u5408\u56FE",
            "task.view.fishbone": "\u9C7C\u9AA8\u56FE",
            "task.view.experimentalBadge": "\u5B9E\u9A8C\u89C6\u56FE",
            "task.view.experimentalHint": "\u57FA\u4E8E\u5F53\u524D\u771F\u5B9E\u4EFB\u52A1\u5173\u7CFB\u7684\u53EA\u8BFB\u57FA\u7840\u5C55\u793A\uFF0C\u5B8C\u6574\u5E03\u5C40\u4E0E\u6DF1\u5EA6\u4EA4\u4E92\u540E\u7EED\u5B8C\u5584\u3002",
            "task.view.empty": "\u6682\u65E0\u53EF\u89C6\u5316\u7684\u4EFB\u52A1\u6570\u636E",
            "task.view.emptyHint": "\u65B0\u5EFA\u6216\u5173\u8054\u4EFB\u52A1\u540E\uFF0C\u53EF\u8FD4\u56DE\u6B64\u89C6\u56FE\u67E5\u770B\u3002",
            "task.view.pageCount": "{count} \u4E2A\u5173\u8054\u9875\u9762",
            "task.view.noPages": "\u6682\u65E0\u5173\u8054\u9875\u9762",
            "task.view.aggregateAria": "\u4EFB\u52A1\u805A\u5408\u56FE",
            "task.view.fishboneAria": "\u4EFB\u52A1\u9C7C\u9AA8\u56FE",
            "workbench.allWindows": "\u5168\u90E8\u7A97\u53E3",
            "workbench.allStatuses": "\u5168\u90E8\u72B6\u6001",
            "workbench.allDomains": "\u5168\u90E8\u9886\u57DF",
            "workbench.window": "\u7A97\u53E3 {number}",
            "workbench.tabCount": "{count} \u4E2A\u9875\u7B7E",
            "workbench.untitledTabGroup": "\u672A\u547D\u540D\u6807\u7B7E\u7EC4",
            "workbench.ungroupedTabs": "\u672A\u5206\u7EC4\u9875\u7B7E",
            "workbench.collapseTabGroup": "\u6536\u8D77\u6807\u7B7E\u7EC4",
            "workbench.expandTabGroup": "\u5C55\u5F00\u6807\u7B7E\u7EC4",
            "workbench.tabGroupMore": "\u6807\u7B7E\u7EC4\u64CD\u4F5C",
            "workbench.activateGroupFirst": "\u5207\u6362\u5230\u9996\u4E2A\u9875\u7B7E",
            "workbench.editTabGroup": "\u4FEE\u6539\u540D\u79F0\u548C\u989C\u8272",
            "workbench.ungroupTabs": "\u79FB\u51FA\u6807\u7B7E\u7EC4",
            "workbench.closeTabGroup": "\u5173\u95ED\u6574\u4E2A\u6807\u7B7E\u7EC4",
            "workbench.ungroupTabGroup": "\u89E3\u7EC4",
            "workbench.closeAllTabGroup": "\u5168\u90E8\u5173\u95ED",
            "workbench.groupByDomain": "\u6309\u57DF\u540D\u5206\u7EC4",
            "workbench.ungroupAll": "\u5168\u90E8\u89E3\u7EC4",
            "privacy.title": "\u9690\u79C1\u4E0E\u6570\u636E",
            "privacy.description": "\u67E5\u770B\u672C\u5730\u884C\u4E3A\u8BB0\u5F55\u5E76\u7BA1\u7406\u4FDD\u7559\u6570\u636E",
            "settings.languageTitle": "\u754C\u9762\u8BED\u8A00",
            "settings.languageHint": "\u9ED8\u8BA4\u8DDF\u968F\u6D4F\u89C8\u5668\uFF0C\u4E5F\u53EF\u4EE5\u53EA\u4E3A TabFlow \u624B\u52A8\u5207\u6362\u3002",
            "settings.languageSystem": "\u8DDF\u968F\u6D4F\u89C8\u5668",
            "settings.languageChinese": "\u4E2D\u6587",
            "settings.languageEnglish": "English",
            "settings.languageSaveFailed": "\u8BED\u8A00\u8BBE\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "settings.title": "\u8BBE\u7F6E",
            "settings.navigation": "\u8BBE\u7F6E\u5BFC\u822A",
            "settings.activationTitle": "\u6C38\u4E45\u6FC0\u6D3B",
            "settings.activationDescription": "\u6FC0\u6D3B\u589E\u503C\u6743\u76CA\uFF0C\u514D\u8D39\u6838\u5FC3\u529F\u80FD\u59CB\u7EC8\u53EF\u7528",
            "settings.dockTitle": "\u7F51\u9875\u62D3\u5C55\u575E",
            "settings.dockDescription": "\u7BA1\u7406\u56FA\u5B9A\u7F51\u7AD9\u3001\u5916\u89C2\u4E0E\u4EA4\u4E92",
            "settings.close": "\u5173\u95ED\u8BBE\u7F6E",
            "privacy.localBehavior": "\u672C\u5730\u884C\u4E3A\u8BB0\u5F55",
            "privacy.localBehaviorHint": "\u53EA\u5728\u672C\u673A\u8BB0\u5F55\u6253\u5F00\u3001\u5207\u6362\u3001\u8DF3\u8F6C\u3001\u5173\u95ED\u7B49\u5FC5\u8981\u9875\u7B7E\u884C\u4E3A\uFF0C\u6700\u957F\u4FDD\u7559 30 \u5929\u3002\u6570\u636E\u4E0D\u4F1A\u4E0A\u4F20\uFF0C\u4E5F\u4E0D\u4F1A\u81EA\u52A8\u6539\u53D8\u4EFB\u52A1\u5173\u7CFB\u6216\u771F\u5B9E\u9875\u7B7E\u987A\u5E8F\u3002",
            "privacy.behaviorClearHint": "\u6E05\u9664\u884C\u4E3A\u8F68\u8FF9\u4E0D\u4F1A\u5220\u9664\u4EFB\u52A1\u3001\u4EFB\u52A1\u5173\u7CFB\u3001\u9875\u9762\u8D44\u6599\u6216\u5F53\u524D\u9875\u7B7E\u5B9E\u4F8B\u3002",
            "privacy.dataControls": "\u6570\u636E\u7BA1\u7406",
            "privacy.exportHint": "\u5B89\u5168\u5BFC\u51FA\u5305\u542B\u4EFB\u52A1\u3001\u9875\u9762\u3001\u4EFB\u52A1\u5173\u7CFB\u3001\u65B0\u9875\u5E38\u7528\u7F51\u7AD9\u548C\u7F51\u9875\u62D3\u5C55\u575E\uFF1B\u4E0D\u5305\u542B API \u5BC6\u94A5\u3001\u6FC0\u6D3B\u4FE1\u606F\u3001\u622A\u56FE\u3001Cookie\u3001\u884C\u4E3A\u539F\u59CB\u4E0A\u4E0B\u6587\u6216\u5B8C\u6574\u7F51\u5740\u53C2\u6570\u3002",
            "privacy.export": "\u5B89\u5168\u5BFC\u51FA",
            "privacy.clearBehavior": "\u6E05\u9664\u884C\u4E3A\u8F68\u8FF9",
            "privacy.clearAi": "\u6E05\u9664 AI \u6570\u636E",
            "privacy.clearAll": "\u6E05\u9664\u5168\u90E8\u672C\u5730\u6570\u636E",
            "privacy.clearing": "\u6B63\u5728\u6E05\u9664\u2026",
            "privacy.clearAiConfirm": "\u786E\u5B9A\u6E05\u9664\u672C\u673A AI \u8BBE\u7F6E\u3001API \u5BC6\u94A5\u548C\u8FD0\u884C\u72B6\u6001\u5417\uFF1F\u4EFB\u52A1\u548C\u4EFB\u52A1\u5173\u7CFB\u4E0D\u4F1A\u88AB\u5220\u9664\u3002",
            "privacy.clearBehaviorConfirm": "\u786E\u5B9A\u6E05\u9664\u672C\u673A\u6700\u8FD1 30 \u5929\u7684\u884C\u4E3A\u8F68\u8FF9\u5417\uFF1F\u4EFB\u52A1\u3001\u4EFB\u52A1\u5173\u7CFB\u3001\u9875\u9762\u8D44\u6599\u548C\u5F53\u524D\u9875\u7B7E\u4E0D\u4F1A\u88AB\u5220\u9664\u3002",
            "privacy.clearBehaviorSuccess": "\u5DF2\u6E05\u9664 {count} \u6761\u884C\u4E3A\u8BB0\u5F55\uFF1B\u4EFB\u52A1\u3001\u4EFB\u52A1\u5173\u7CFB\u548C\u5F53\u524D\u9875\u7B7E\u4FDD\u6301\u4E0D\u53D8\u3002",
            "privacy.clearBehaviorFailed": "\u6E05\u9664\u884C\u4E3A\u8F68\u8FF9\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "privacy.clearAllConfirm": "\u786E\u5B9A\u6E05\u9664\u5168\u90E8 TabFlow \u672C\u5730\u6570\u636E\u5417\uFF1F\u6B64\u64CD\u4F5C\u4F1A\u5220\u9664\u4EFB\u52A1\u3001\u4EFB\u52A1\u5173\u7CFB\u3001\u884C\u4E3A\u8BB0\u5F55\u548C AI \u5BC6\u94A5\uFF0C\u4E14\u65E0\u6CD5\u64A4\u9500\u3002",
            "privacy.clearAiSuccess": "\u5DF2\u6E05\u9664\u672C\u673A AI \u6570\u636E\uFF1B\u4EFB\u52A1\u548C\u4EFB\u52A1\u5173\u7CFB\u4FDD\u6301\u4E0D\u53D8\u3002",
            "privacy.clearAllSuccess": "\u5DF2\u6E05\u9664\u5168\u90E8 TabFlow \u672C\u5730\u6570\u636E\u3002",
            "privacy.exportSuccess": "\u5B89\u5168\u6570\u636E\u5DF2\u5BFC\u51FA\u3002",
            "privacy.actionFailed": "\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "privacy.exportFailed": "\u5BFC\u51FA\u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "privacy.backup.title": "\u5907\u4EFD\u4E0E\u6062\u590D",
            "privacy.backup.hint": "\u9009\u62E9 TabFlow JSON \u5907\u4EFD\u540E\u4F1A\u5148\u663E\u793A\u5B89\u5168\u6458\u8981\uFF1B\u786E\u8BA4\u524D\u4E0D\u4F1A\u8986\u76D6\u4EFB\u4F55\u6570\u636E\u3002\u6587\u4EF6\u6700\u5927 5 MiB\u3002",
            "privacy.backup.reinstallWarning": "\u5347\u7EA7\u6216\u91CD\u65B0\u52A0\u8F7D\u4F1A\u4FDD\u7559\u672C\u5730\u6570\u636E\uFF1B\u5378\u8F7D\u6269\u5C55\u901A\u5E38\u4F1A\u5220\u9664\u672C\u5730\u6570\u636E\u3002\u5378\u8F7D\u524D\u8BF7\u5148\u5BFC\u51FA\u5B89\u5168\u5907\u4EFD\uFF0C\u91CD\u88C5\u540E\u518D\u4ECE\u5907\u4EFD\u6062\u590D\u3002",
            "privacy.backup.choose": "\u4ECE\u5907\u4EFD\u6062\u590D",
            "privacy.backup.reading": "\u6B63\u5728\u6821\u9A8C\u2026",
            "privacy.backup.previewTitle": "\u6062\u590D\u5185\u5BB9\u9884\u89C8",
            "privacy.backup.legacy": "\u65E7\u7248\u5907\u4EFD\uFF1A\u53EA\u4F1A\u8986\u76D6\u4EFB\u52A1\u3001\u9875\u9762\u548C\u4EFB\u52A1\u5173\u7CFB\uFF0C\u4E0D\u4F1A\u8986\u76D6\u65B0\u9875\u5E38\u7528\u7F51\u7AD9\u6216\u7F51\u9875\u62D3\u5C55\u575E\u3002",
            "privacy.backup.section.tasks": "\u4EFB\u52A1\u6570\u636E",
            "privacy.backup.section.newtab": "\u65B0\u9875\u5E38\u7528\u7F51\u7AD9",
            "privacy.backup.section.dock": "\u7F51\u9875\u62D3\u5C55\u575E",
            "privacy.backup.section.none": "\u65E0\u53EF\u6062\u590D\u6570\u636E",
            "privacy.backup.willOverwrite": "\u5C06\u8986\u76D6\uFF1A{sections}",
            "privacy.backup.count.tasks": "\u4EFB\u52A1",
            "privacy.backup.count.pages": "\u9875\u9762",
            "privacy.backup.count.relations": "\u4EFB\u52A1\u5173\u7CFB",
            "privacy.backup.count.categories": "\u65B0\u9875\u5206\u7C7B",
            "privacy.backup.count.sites": "\u5E38\u7528\u7F51\u7AD9",
            "privacy.backup.count.dockSites": "\u62D3\u5C55\u575E\u7F51\u7AD9",
            "privacy.backup.overwriteWarning": "\u6062\u590D\u4F1A\u8986\u76D6\u4E0A\u8FF0\u672C\u5730\u6570\u636E\uFF1B\u4E0D\u4F1A\u6062\u590D API \u5BC6\u94A5\u3001\u6FC0\u6D3B\u4FE1\u606F\u3001\u6D4F\u89C8\u8BB0\u5F55\u6216\u5F53\u524D\u771F\u5B9E\u9875\u7B7E\u3002",
            "privacy.backup.cancel": "\u53D6\u6D88",
            "privacy.backup.confirm": "\u8986\u76D6\u5E76\u6062\u590D",
            "privacy.backup.importing": "\u6B63\u5728\u6062\u590D\u2026",
            "privacy.backup.importSuccess": "\u6062\u590D\u5B8C\u6210\uFF0C\u4EFB\u52A1\u3001\u65B0\u9875\u548C\u7F51\u9875\u62D3\u5C55\u575E\u5DF2\u540C\u6B65\u3002",
            "privacy.backup.error.tooLarge": "\u5907\u4EFD\u6587\u4EF6\u4E0D\u80FD\u8D85\u8FC7 5 MiB\u3002",
            "privacy.backup.error.invalidJson": "\u6240\u9009\u6587\u4EF6\u4E0D\u662F\u6709\u6548\u7684 JSON \u5907\u4EFD\u3002",
            "privacy.backup.error.invalidFormat": "\u6240\u9009\u6587\u4EF6\u4E0D\u662F\u53D7\u652F\u6301\u7684 TabFlow \u5907\u4EFD\u3002",
            "privacy.backup.error.unsupportedVersion": "\u8BE5\u5907\u4EFD\u7248\u672C\u6682\u4E0D\u53D7\u652F\u6301\uFF0C\u8BF7\u5347\u7EA7 TabFlow \u540E\u91CD\u8BD5\u3002",
            "privacy.backup.error.sensitiveData": "\u4E3A\u4FDD\u62A4\u9690\u79C1\uFF0C\u8BE5\u6587\u4EF6\u5305\u542B\u4E0D\u5141\u8BB8\u6062\u590D\u7684\u654F\u611F\u6570\u636E\u3002",
            "privacy.backup.error.unknownField": "\u5907\u4EFD\u5305\u542B\u5F53\u524D\u7248\u672C\u4E0D\u652F\u6301\u7684\u6570\u636E\u5B57\u6BB5\u3002",
            "privacy.backup.error.invalidContent": "\u5907\u4EFD\u5185\u5BB9\u635F\u574F\u6216\u4E0D\u7B26\u5408\u5F53\u524D\u683C\u5F0F\u3002",
            "privacy.backup.error.duplicate": "\u5907\u4EFD\u4E2D\u5B58\u5728\u91CD\u590D\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u5B89\u5168\u6062\u590D\u3002",
            "privacy.backup.error.brokenReference": "\u5907\u4EFD\u4E2D\u7684\u4EFB\u52A1\u5173\u7CFB\u5F15\u7528\u7F3A\u5931\uFF0C\u65E0\u6CD5\u5B89\u5168\u6062\u590D\u3002",
            "privacy.backup.error.primaryConflict": "\u5907\u4EFD\u4E2D\u540C\u4E00\u9875\u9762\u5B58\u5728\u591A\u4E2A\u4E3B\u8981\u4EFB\u52A1\uFF0C\u65E0\u6CD5\u5B89\u5168\u6062\u590D\u3002",
            "privacy.backup.error.sectionUnavailable": "\u5F53\u524D\u7248\u672C\u65E0\u6CD5\u6062\u590D\u8BE5\u6587\u4EF6\u5305\u542B\u7684\u90E8\u5206\u6570\u636E\uFF1B\u5C1A\u672A\u8FDB\u884C\u4EFB\u4F55\u66F4\u6539\u3002",
            "privacy.backup.error.confirmationRequired": "\u8BF7\u5148\u660E\u786E\u786E\u8BA4\u8986\u76D6\u672C\u5730\u6570\u636E\u3002",
            "privacy.backup.error.rolledBack": "\u6062\u590D\u5931\u8D25\uFF0C\u539F\u6709\u6570\u636E\u5DF2\u6062\u590D\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "privacy.backup.error.partialRollback": "\u6062\u590D\u5931\u8D25\uFF0C\u90E8\u5206\u539F\u6709\u6570\u636E\u53EF\u80FD\u672A\u80FD\u8FD8\u539F\u3002\u8BF7\u505C\u6B62\u7F16\u8F91\u3001\u4FDD\u7559\u5907\u4EFD\u5E76\u91CD\u65B0\u52A0\u8F7D\u540E\u6838\u5BF9\u3002",
            "privacy.backup.error.inProgress": "\u53E6\u4E00\u9879\u6062\u590D\u6B63\u5728\u8FDB\u884C\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210\u540E\u91CD\u8BD5\u3002",
            "privacy.backup.error.previewRequired": "\u6062\u590D\u9884\u89C8\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u5907\u4EFD\u6587\u4EF6\u5E76\u518D\u6B21\u786E\u8BA4\u3002",
            "privacy.backup.error.reconcileFailed": "\u6570\u636E\u5DF2\u5199\u5165\uFF0C\u4F46\u5F53\u524D\u9875\u7B7E\u72B6\u6001\u540C\u6B65\u5931\u8D25\u3002\u8BF7\u91CD\u65B0\u52A0\u8F7D\u6269\u5C55\u540E\u6838\u5BF9\u3002",
            "privacy.backup.error.unavailable": "\u5907\u4EFD\u6062\u590D\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "privacy.backup.error.failed": "\u6062\u590D\u5907\u4EFD\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "privacy.backup.error.readFailed": "\u65E0\u6CD5\u8BFB\u53D6\u6240\u9009\u6587\u4EF6\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002",
            "workbench.taskPages": "{count} \u4E2A\u76F8\u5173\u9875\u9762",
            "workbench.globalCount": "{tabs} \u4E2A\u9875\u7B7E \xB7 {tasks} \u4E2A\u4EFB\u52A1",
            "workbench.localReady": "\u672C\u5730\u5DE5\u4F5C\u53F0\u5DF2\u5C31\u7EEA",
            "workbench.footerHint": "\u70B9\u51FB\u9875\u7B7E\u5207\u6362 \xB7 \u641C\u7D22\u540C\u6B65\u8FC7\u6EE4\u4E24\u680F",
            "workbench.unknownPage": "\u672A\u77E5\u9875\u9762",
            "workbench.sessionDwell": "\u505C\u7559 {time}",
            "workbench.pageOpenNow": "\u6D4F\u89C8\u5668\u4E2D\u5DF2\u6253\u5F00",
            "workbench.pageHistory": "\u5386\u53F2\u9875\u9762\uFF0C\u70B9\u51FB\u91CD\u65B0\u6253\u5F00",
            "workbench.previewImageAlt": "\u9875\u9762\u9884\u89C8",
            "workbench.previewLoading": "\u6B63\u5728\u52A0\u8F7D\u5B89\u5168\u9884\u89C8\u2026",
            "workbench.previewUnavailable": "\u6682\u65E0\u53EF\u7528\u9884\u89C8",
            "workbench.previewRestricted": "\u6D4F\u89C8\u5668\u9650\u5236\u9875\u9762\u65E0\u6CD5\u751F\u6210\u9884\u89C8",
            "workbench.previewActivateRequired": "\u5207\u6362\u5230\u6B64\u9875\u7B7E\u5E76\u7B49\u5F85\u52A0\u8F7D\u540E\uFF0C\u5C06\u81EA\u52A8\u751F\u6210\u9884\u89C8",
            "workbench.previewWaitingForLoad": "\u9875\u9762\u52A0\u8F7D\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u751F\u6210\u9884\u89C8",
            "workbench.openNow": "\u5F53\u524D\u5DF2\u6253\u5F00",
            "workbench.previewSwitchHint": "\u70B9\u51FB\u5361\u7247\u5207\u6362",
            "workbench.columns": "\u5217\u6570",
            "workbench.columnsAria": "\u6BCF\u884C\u9875\u7B7E\u6570\u91CF",
            "workbench.columnsValue": "{count} \u5217",
            "workbench.noTabs": "\u6CA1\u6709\u5339\u914D\u7684\u9875\u7B7E",
            "workbench.noTabsHint": "\u6362\u4E00\u4E2A\u5173\u952E\u8BCD\u6216\u7A97\u53E3\u8BD5\u8BD5",
            "workbench.noTasks": "\u6CA1\u6709\u5339\u914D\u7684\u4EFB\u52A1",
            "workbench.noTasksHint": "\u8C03\u6574\u641C\u7D22\u3001\u9886\u57DF\u6216\u72B6\u6001\u7B5B\u9009",
            "workbench.emptyTask": "\u4EFB\u52A1\u4E2D\u8FD8\u6CA1\u6709\u9875\u9762",
            "workbench.emptyTaskHint": "\u540E\u7EED\u53EF\u4ECE\u771F\u5B9E\u9875\u7B7E\u62D6\u5165",
            "workbench.recycleTitle": "\u56DE\u6536\u7AD9",
            "workbench.resizePanes": "\u8C03\u6574\u53CC\u680F\u5BBD\u5EA6",
            "workbench.collapseBrowserPane": "\u6536\u8D77\u771F\u5B9E\u9875\u7B7E\u680F",
            "workbench.collapseTaskPane": "\u6536\u8D77\u4EFB\u52A1\u603B\u89C8\u680F",
            "workbench.restoreSplitPane": "\u6062\u590D\u53CC\u680F\u603B\u89C8",
            "workbench.recycleHint": "\u6309\u5173\u95ED\u65F6\u95F4\u6392\u5217\uFF0C\u53EF\u6062\u590D\u9875\u7B7E\u3001\u9875\u7B7E\u7EC4\u548C\u4EFB\u52A1",
            "recycle.restoreAll": "\u6062\u590D\u5168\u90E8",
            "recycle.recently": "\u521A\u521A",
            "recycle.minutesAgo": "{count} \u5206\u949F\u524D",
            "recycle.today": "\u4ECA\u5929",
            "recycle.group": "\u9875\u7B7E\u7EC4",
            "recycle.task": "\u4EFB\u52A1\u7EC4",
            "recycle.closedTab": "\u5DF2\u5173\u95ED\u9875\u7B7E",
            "recycle.restore": "\u6062\u590D",
            "recycle.delete": "\u5220\u9664",
            "recycle.deletePermanently": "\u6C38\u4E45\u5220\u9664",
            "workbench.recycleRestoreAll": "\u6062\u590D\u5168\u90E8",
            "workbench.recycleEmpty": "\u56DE\u6536\u7AD9\u4E3A\u7A7A",
            "workbench.recycleEmptyHint": "\u5173\u95ED\u7684\u9875\u7B7E\u3001\u9875\u7B7E\u7EC4\u548C\u89E3\u6563\u7684\u4EFB\u52A1\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC",
            "workbench.recycleTask": "\u4EFB\u52A1\u7EC4",
            "workbench.recycleTab": "\u9875\u7B7E",
            "workbench.recycleGroup": "\u9875\u7B7E\u7EC4",
            "workbench.recycleRestore": "\u6062\u590D",
            "workbench.recycleDelete": "\u6C38\u4E45\u5220\u9664",
            "common.close": "\u5173\u95ED",
            "common.theme": "\u5207\u6362\u76AE\u80A4",
            "common.settings": "\u8BBE\u7F6E",
            "theme.title": "\u4E3B\u9898\u5916\u89C2",
            "theme.system": "\u8DDF\u968F\u7CFB\u7EDF",
            "theme.light": "\u6D45\u8272",
            "theme.dark": "\u6DF1\u8272",
            "theme.changed": "\u5DF2\u5207\u6362\u4E3A{theme}",
            "overlay.sticky": "\u5DF2\u56FA\u5B9A",
            "overlay.title": "\u9875\u7B7E\u5DE5\u4F5C\u53F0",
            "overlay.subtitle": "\u641C\u7D22\u3001\u6574\u7406\u3001\u5206\u7EC4\u3001\u6062\u590D\u4E0E\u9884\u89C8\u90FD\u96C6\u4E2D\u5728\u8FD9\u91CC",
            "overlay.membership": "\u4F1A\u5458\u72B6\u6001",
            "overlay.activated": "\u5DF2\u6C38\u4E45\u6FC0\u6D3B",
            "overlay.close": "\u5173\u95ED\u6D6E\u5C42 (Esc)",
            "overlay.searchPlaceholder": "\u641C\u7D22\u9875\u7B7E\u6807\u9898\u3001\u57DF\u540D\u6216\u7F51\u5740",
            "overlay.selectedNone": "\u5DF2\u9009 0",
            "overlay.action.newTitle": "\u65B0\u5EFA\u9875\u7B7E\uFF08\u70ED\u95E8\u4E66\u7B7E\uFF09",
            "overlay.action.new": "\u65B0\u5EFA",
            "overlay.action.groupDomainsTitle": "\u6309\u4E3B\u57DF\u540D\u4E00\u952E\u5206\u7EC4\u6240\u6709\u9875\u7B7E",
            "overlay.action.groupDomains": "\u57DF\u540D\u5206\u7EC4",
            "overlay.action.ungroupAllTitle": "\u89E3\u6563\u6240\u6709\u5206\u7EC4",
            "overlay.action.ungroupAll": "\u89E3\u7EC4",
            "overlay.action.recycleTitle": "\u67E5\u770B\u56DE\u6536\u7AD9",
            "overlay.action.recycle": "\u56DE\u6536\u7AD9",
            "overlay.action.undoTitle": "\u5173\u95ED\u56DE\u64A4\uFF08\u6062\u590D\u6700\u8FD1\u4E00\u4E2A\uFF09",
            "overlay.action.undo": "\u56DE\u64A4",
            "overlay.footer.escapeClose": "\u5173\u95ED",
            "overlay.footer.holdOpen": "\u6309\u4F4F\u5FEB\u6377\u952E\u5524\u8D77",
            "overlay.footer.stickyBefore": "\u8D85\u8FC7",
            "overlay.footer.stickyAfter": "\u79D2\u677E\u5F00\u4FDD\u6301",
            "overlay.footer.holdDuration": "\u6309\u4F4F\u65F6\u957F",
            "overlay.footer.hints": "\u70B9\u51FB\u5207\u6362 \xB7 \u60AC\u505C\u9884\u89C8 \xB7 \u62D6\u52A8\u6392\u5E8F \xB7 \u53F3\u952E\u591A\u9009",
            "overlay.layout.aria": "\u9875\u7B7E\u5E03\u5C40\u8BBE\u7F6E",
            "overlay.layout.perRow": "\u6BCF\u884C",
            "overlay.layout.perRowAria": "\u6BCF\u884C\u9875\u7B7E\u6570\u91CF",
            "overlay.layout.columns": "{count}\u5217",
            "overlay.layout.viewAria": "\u9875\u7B7E\u89C6\u56FE",
            "overlay.layout.hover": "\u60AC\u6D6E",
            "overlay.layout.card": "\u5361\u7247",
            "overlay.layout.hoverPreview": "\u60AC\u505C\u9884\u89C8",
            "overlay.selection.groupTitle": "\u5C06\u9009\u4E2D\u9875\u7B7E\u5F52\u5165\u65B0\u5206\u7EC4",
            "overlay.selection.group": "\u5206\u7EC4\u9009\u4E2D",
            "overlay.selection.closeTitle": "\u6279\u91CF\u5173\u95ED\u9009\u4E2D",
            "overlay.selection.close": "\u6279\u91CF\u5173\u95ED",
            "overlay.selection.clearTitle": "\u53D6\u6D88\u9009\u62E9",
            "overlay.selection.clear": "\u53D6\u6D88",
            "overlay.loading": "\u52A0\u8F7D\u4E2D\u2026",
            "overlay.count.recycle": "\u56DE\u6536\u7AD9 {count} \u9879",
            "overlay.count.tabs": "{count} \u4E2A\u6807\u7B7E",
            "overlay.count.windows": "{count} \u4E2A\u7A97\u53E3",
            "overlay.count.selected": "\u5DF2\u9009 {selected} / {total}",
            "dock.label": "\u7F51\u9875\u62D3\u5C55\u575E",
            "dock.expand": "\u5C55\u5F00\u7F51\u9875\u62D3\u5C55\u575E",
            "dock.addSite": "\u65B0\u589E\u7F51\u7AD9",
            "dock.search": "\u7F51\u9875\u641C\u7D22",
            "dock.settings": "\u7F51\u9875\u62D3\u5C55\u575E\u8BBE\u7F6E",
            "dock.settingsShort": "\u62D3\u5C55\u575E\u8BBE\u7F6E",
            "dock.settings.empty": "\u6682\u65E0\u56FA\u5B9A\u7F51\u7AD9",
            "dock.settings.fixedSites": "\u56FA\u5B9A\u7F51\u7AD9",
            "dock.settings.iconSize": "\u56FE\u6807\u5927\u5C0F",
            "dock.settings.magnification": "\u60AC\u505C\u653E\u5927",
            "dock.settings.influenceRadius": "\u5F71\u54CD\u8303\u56F4",
            "dock.settings.response": "\u54CD\u5E94\u901F\u5EA6",
            "dock.settings.damping": "\u963B\u5C3C",
            "dock.settings.hideDelay": "\u9690\u85CF\u5EF6\u8FDF",
            "dock.settings.tileSize": "\u56FE\u6807\u5E95\u677F\u5927\u5C0F",
            "dock.settings.trayPadding": "\u6258\u76D8\u7559\u767D",
            "dock.settings.tileOpacity": "\u5E95\u677F\u4E0D\u900F\u660E\u5EA6",
            "dock.settings.tileColor": "\u56FE\u6807\u5E95\u677F\u989C\u8272",
            "dock.settings.enabled": "\u542F\u7528\u7F51\u9875\u62D3\u5C55\u575E",
            "dock.settings.enabledHint": "\u5728\u6240\u6709\u7F51\u9875\u5E95\u90E8\u663E\u793A\u5E38\u7528\u7F51\u7AD9",
            "dock.settings.autoHide": "\u81EA\u52A8\u9690\u85CF",
            "dock.settings.autoHideHint": "\u9F20\u6807\u79BB\u5F00\u540E\u81EA\u52A8\u6536\u8D77\u62D3\u5C55\u575E",
            "dock.settings.appearance": "\u5916\u89C2",
            "dock.settings.motion": "\u52A8\u6548",
            "dock.settings.preview": "\u9884\u89C8",
            "dock.settings.previewAria": "\u7F51\u9875\u62D3\u5C55\u575E\u9884\u89C8",
            "dock.settings.reset": "\u6062\u590D\u9ED8\u8BA4",
            "dock.settings.siteName": "\u7F51\u7AD9\u540D\u79F0",
            "dock.settings.siteUrl": "\u7F51\u7AD9\u5730\u5740",
            "dock.settings.addSite": "\u6DFB\u52A0\u7F51\u7AD9",
            "dock.settings.drag": "\u62D6\u52A8\u6392\u5E8F",
            "dock.settings.save": "\u4FDD\u5B58",
            "dock.settings.delete": "\u5220\u9664",
            "dock.settings.platformNote": "\u63D0\u793A\uFF1A\u90E8\u5206\u7F51\u7AD9\u4F1A\u9650\u5236\u8BFB\u53D6\u56FE\u6807\uFF0CTabFlow \u4F1A\u81EA\u52A8\u4F7F\u7528\u5B89\u5168\u66FF\u4EE3\u56FE\u6807\u3002",
            "dock.settings.saveHint": "\u4FEE\u6539\u4F1A\u5B9E\u65F6\u9884\u89C8\uFF0C\u70B9\u51FB\u5B8C\u6210\u540E\u5173\u95ED\u8BBE\u7F6E\u3002",
            "dock.settings.done": "\u5B8C\u6210",
            "dock.settings.updated": "\u7F51\u7AD9\u5DF2\u66F4\u65B0",
            "dock.settings.added": "\u7F51\u7AD9\u5DF2\u6DFB\u52A0",
            "dock.settings.saveFailed": "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.settings.addFailed": "\u6DFB\u52A0\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.settings.saveDirtyFirst": "\u8BF7\u5148\u4FDD\u5B58\u5F53\u524D\u7F16\u8F91\u9879",
            "dock.recent": "\u6700\u8FD1\u5173\u95ED",
            "dock.recentSites": "\u6700\u8FD1\u5173\u95ED\u7684\u7F51\u7AD9",
            "dock.recentLoading": "\u6B63\u5728\u8BFB\u53D6\u6700\u8FD1\u5173\u95ED\u2026",
            "dock.recentEmpty": "\u6682\u65E0\u53EF\u6062\u590D\u7684\u7F51\u7AD9",
            "dock.recentUnavailable": "\u6700\u8FD1\u5173\u95ED\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6",
            "dock.recentRestoreAria": "\u6062\u590D {title}",
            "dock.recentRestoreFailed": "\u6062\u590D\u7F51\u7AD9\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.recentSyncFailed": "\u7F51\u7AD9\u5DF2\u6253\u5F00\uFF0C\u4F46\u6700\u8FD1\u5173\u95ED\u5217\u8868\u540C\u6B65\u5931\u8D25",
            "dock.recentRestored": "\u5DF2\u6062\u590D\u7F51\u7AD9",
            "dock.menu.background": "\u5728\u540E\u53F0\u65B0\u9875\u6253\u5F00",
            "dock.menu.edit": "\u7F16\u8F91",
            "dock.menu.delete": "\u5220\u9664",
            "dock.openBackgroundFailed": "\u540E\u53F0\u6253\u5F00\u7F51\u9875\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.openFailed": "\u6253\u5F00\u7F51\u9875\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.deleteFailed": "\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.deleted": "\u7F51\u9875\u5DF2\u5220\u9664",
            "dock.orderSaved": "\u7F51\u9875\u987A\u5E8F\u5DF2\u4FDD\u5B58",
            "dock.orderSaveFailed": "\u6392\u5E8F\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.pinFailed": "\u56FA\u5B9A\u72B6\u6001\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.pinned": "\u5DF2\u56FA\u5B9A\u5230\u7F51\u9875\u62D3\u5C55\u575E",
            "dock.unpinned": "\u5DF2\u53D6\u6D88\u56FA\u5B9A",
            "dock.extensionUpdated": "\u6269\u5C55\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u540E\u91CD\u8BD5",
            "dock.duplicate": "\u8BE5\u7F51\u7AD9\u5DF2\u7ECF\u5728\u7F51\u9875\u62D3\u5C55\u575E\u4E2D",
            "activation.locale": "zh-CN",
            "activation.localRecord": "\u672C\u673A\u8BB0\u5F55",
            "activation.loadFailed": "\u8BFB\u53D6\u6FC0\u6D3B\u72B6\u6001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "activation.purchaseGuide": "\u95F2\u9C7C\u8D2D\u4E70\u5F15\u5BFC\u56FE",
            "activation.purchaseActiveHint": "\u6FC0\u6D3B\u540E\u9ED8\u8BA4\u6298\u53E0\uFF0C\u4ECD\u53EF\u91CD\u65B0\u5C55\u5F00",
            "activation.purchaseHint": "\u626B\u7801\u8D2D\u4E70\u6C38\u4E45\u6FC0\u6D3B\u7801",
            "activation.expandImage": "\u5C55\u5F00\u56FE\u7247",
            "activation.purchaseAria": "\u8D2D\u4E70\u6FC0\u6D3B\u7801",
            "activation.zoomAria": "\u653E\u5927\u67E5\u770B\u95F2\u9C7C\u8D2D\u4E70\u5F15\u5BFC\u56FE",
            "activation.imageAlt": "\u95F2\u9C7C\u5E97\u94FA\u8D2D\u4E70\u5F15\u5BFC\u53CA\u4E8C\u7EF4\u7801",
            "activation.purchaseEyebrow": "\u8D2D\u4E70\u6307\u5F15",
            "activation.noCode": "\u8FD8\u6CA1\u6709\u6FC0\u6D3B\u7801\uFF1F",
            "activation.purchaseCopy": "\u4FDD\u5B58\u6216\u653E\u5927\u56FE\u7247\u540E\uFF0C\u4F7F\u7528\u95F2\u9C7C\u626B\u4E00\u626B\u8FDB\u5165\u5E97\u94FA\u8D2D\u4E70\u3002\u8D2D\u4E70\u5B8C\u6210\u540E\u4F1A\u6536\u5230\u6C38\u4E45\u6FC0\u6D3B\u7801\u3002",
            "activation.zoom": "\u653E\u5927\u67E5\u770B",
            "activation.collapseImage": "\u6536\u8D77\u56FE\u7247",
            "activation.memberStatus": "\u4F1A\u5458\u72B6\u6001",
            "activation.active": "\u5DF2\u6C38\u4E45\u6FC0\u6D3B",
            "activation.unlocked": "\u589E\u503C\u529F\u80FD\u5DF2\u89E3\u9501",
            "activation.used": "\u8BE5\u6FC0\u6D3B\u7801\u5DF2\u4F7F\u7528\u5E76\u4F5C\u5E9F",
            "activation.activatedAt": "\u6FC0\u6D3B\u65F6\u95F4\uFF1A{time}",
            "activation.deactivate": "\u6CE8\u9500\u6FC0\u6D3B",
            "activation.invalid": "\u6FC0\u6D3B\u7801\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u540E\u91CD\u65B0\u8F93\u5165",
            "activation.eyebrow": "\u6C38\u4E45\u6FC0\u6D3B",
            "activation.inputTitle": "\u8F93\u5165\u8D2D\u4E70\u540E\u6536\u5230\u7684\u6FC0\u6D3B\u7801",
            "activation.copy": "\u65E0\u9700\u767B\u5F55\uFF0C\u8054\u7F51\u540E\u5373\u53EF\u9A8C\u8BC1\u3002\u672C\u673A\u5C06\u6C38\u4E45\u4FDD\u5B58\u6FC0\u6D3B\u72B6\u6001\uFF0C\u91CD\u88C5\u540E\u53EF\u518D\u6B21\u8F93\u5165\u539F\u6FC0\u6D3B\u7801\u6062\u590D\u3002",
            "activation.code": "\u6FC0\u6D3B\u7801",
            "activation.verifying": "\u6B63\u5728\u9A8C\u8BC1\u2026",
            "activation.submit": "\u9A8C\u8BC1\u5E76\u6FC0\u6D3B",
            "activation.progress": "\u6B63\u5728\u8FDE\u63A5\u5E76\u9A8C\u8BC1\u6FC0\u6D3B\u7801\uFF0C\u8BF7\u7A0D\u5019",
            "activation.offline": "\u7F51\u7EDC\u4E0D\u53EF\u7528\uFF0C\u8BF7\u8FDE\u63A5\u7F51\u7EDC\u540E\u91CD\u8BD5",
            "activation.failed": "\u6FC0\u6D3B\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "activation.previewAria": "\u8D2D\u4E70\u5F15\u5BFC\u56FE\u7247\u9884\u89C8",
            "activation.previewClose": "\u5173\u95ED\u8D2D\u4E70\u5F15\u5BFC\u56FE\u7247",
            "activation.deactivateClose": "\u5173\u95ED\u6CE8\u9500\u786E\u8BA4",
            "activation.deactivateTitle": "\u786E\u8BA4\u6CE8\u9500\u6FC0\u6D3B\uFF1F",
            "activation.deactivateCopy": "\u6CE8\u9500\u540E\u4F1A\u5458\u6807\u8BC6\u53CA\u5168\u90E8\u589E\u503C\u6743\u76CA\u5C06\u7ACB\u5373\u5931\u6548\u3002\u4F60\u53EF\u4EE5\u7A0D\u540E\u4F7F\u7528\u540C\u4E00\u6FC0\u6D3B\u7801\u91CD\u65B0\u6FC0\u6D3B\u3002",
            "activation.cancel": "\u53D6\u6D88",
            "activation.confirmDeactivate": "\u786E\u8BA4\u6CE8\u9500",
            "activation.deactivating": "\u6B63\u5728\u6CE8\u9500\u2026",
            "activation.deactivated": "\u5DF2\u6CE8\u9500\u6FC0\u6D3B",
            "activation.deactivateFailed": "\u6CE8\u9500\u6FC0\u6D3B\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.add.catalogQuick": "\u5FEB\u6377\u9009\u62E9\u5E38\u7528\u7F51\u7AD9",
            "dock.add.siteCount": "{count} \u4E2A",
            "dock.add.catalogSearchPlaceholder": "\u641C\u7D22\u7F51\u7AD9\u6216\u5206\u7C7B",
            "dock.add.catalogCategories": "\u5E38\u7528\u7F51\u7AD9\u5206\u7C7B",
            "dock.add.editTitle": "\u7F16\u8F91\u7F51\u7AD9",
            "dock.add.addTitle": "\u65B0\u589E\u7F51\u7AD9",
            "dock.add.editDescription": "\u4FEE\u6539\u7F51\u7AD9\u6807\u9898\u3001\u7F51\u5740\u548C\u56FE\u6807",
            "dock.add.addDescription": "\u4FDD\u5B58\u5F53\u524D\u9875\u9762\uFF0C\u6216\u6DFB\u52A0\u4EFB\u610F\u5E38\u7528\u7F51\u7AD9",
            "dock.add.close": "\u5173\u95ED\u65B0\u589E\u7F51\u7AD9\u5F39\u7A97",
            "dock.add.modeLabel": "\u65B0\u589E\u65B9\u5F0F",
            "dock.add.mode.current": "\u4FDD\u5B58\u5F53\u524D\u7F51\u9875",
            "dock.add.mode.custom": "\u81EA\u5B9A\u4E49\u65B0\u589E",
            "dock.add.mode.catalog": "\u9009\u62E9\u5E38\u7528\u7F51\u7AD9",
            "dock.add.mode.bookmarks": "\u4ECE\u4E66\u7B7E\u5BFC\u5165",
            "dock.add.bookmarksHeading": "\u9009\u62E9 Chrome \u4E66\u7B7E",
            "dock.add.bookmarkCount": "{count} \u4E2A",
            "dock.add.bookmarkSelected": "\u5DF2\u9009 {count} \u4E2A",
            "dock.add.bookmarkSearchPlaceholder": "\u641C\u7D22\u6807\u9898\u3001\u7F51\u5740\u6216\u6587\u4EF6\u5939",
            "dock.add.bookmarksLoading": "\u6B63\u5728\u8BFB\u53D6 Chrome \u4E66\u7B7E\u2026",
            "dock.add.bookmarksList": "Chrome \u4E66\u7B7E\u5217\u8868",
            "dock.add.bookmarksNoMatch": "\u6CA1\u6709\u5339\u914D\u7684\u4E66\u7B7E",
            "dock.add.bookmarksEmpty": "\u6682\u65E0\u53EF\u5BFC\u5165\u7684\u7F51\u9875\u4E66\u7B7E",
            "dock.add.bookmarksLoadFailed": "\u8BFB\u53D6\u4E66\u7B7E\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.add.previewAria": "\u56FE\u6807\u5B9E\u65F6\u9884\u89C8",
            "dock.add.previewCaption": "\u5B9E\u65F6\u9884\u89C8",
            "dock.add.previewTitle": "\u7F51\u7AD9\u6807\u9898",
            "dock.add.previewHint": "\u81EA\u52A8\u56FE\u6807\u4E0D\u53EF\u7528\u65F6\uFF0C\u4F1A\u4F9D\u6B21\u964D\u7EA7\u5230\u6B21\u6E05\u56FE\u6807\u4E0E\u6587\u5B57\u3002",
            "dock.add.cancel": "\u53D6\u6D88",
            "dock.add.save": "\u4FDD\u5B58\u5230\u62D3\u5C55\u575E",
            "dock.add.import": "\u5BFC\u5165\u5230\u62D3\u5C55\u575E",
            "dock.add.saving": "\u6B63\u5728\u4FDD\u5B58\u2026",
            "dock.add.currentPage": "\u5F53\u524D\u7F51\u9875",
            "dock.add.untitledBookmark": "\u672A\u547D\u540D\u4E66\u7B7E",
            "dock.add.otherBookmarks": "\u5176\u4ED6\u4E66\u7B7E",
            "dock.add.selectBookmark": "\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u4E66\u7B7E",
            "dock.add.allDuplicates": "\u6240\u9009\u7684 {count} \u4E2A\u7F51\u7AD9\u5747\u5DF2\u5728\u7F51\u9875\u62D3\u5C55\u575E\u4E2D",
            "dock.add.importFailed": "\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.add.importPartial": "\u5DF2\u5BFC\u5165 {count} \u4E2A\uFF0C\u968F\u540E\u5931\u8D25\uFF1A{reason}",
            "dock.add.imported": "\u5DF2\u5BFC\u5165 {count} \u4E2A\u4E66\u7B7E{suffix}",
            "dock.add.skipped": "\uFF0C\u8DF3\u8FC7 {count} \u4E2A\u5DF2\u56FA\u5B9A\u7F51\u7AD9",
            "dock.add.titleRequired": "\u8BF7\u8F93\u5165\u7F51\u7AD9\u6807\u9898",
            "dock.add.urlInvalid": "\u7F51\u9875\u7F51\u5740\u65E0\u6548",
            "dock.add.textIconInvalid": "\u6587\u5B57\u56FE\u6807\u4EC5\u652F\u6301 1\uFF5E10 \u4E2A\u4E2D\u82F1\u6587\u5B57\u6BCD",
            "dock.add.saveFailed": "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
            "dock.add.saveFailedWithReason": "\u4FDD\u5B58\u5931\u8D25\uFF1A{reason}",
            "dock.add.imageRequired": "\u8BF7\u5148\u9009\u62E9\u4E00\u5F20\u672C\u5730\u56FE\u7247",
            "dock.add.updated": "\u7F51\u9875\u5DF2\u66F4\u65B0",
            "dock.add.added": "\u7F51\u9875\u5DF2\u6DFB\u52A0",
            "dock.add.imageReadingFailed": "\u8BFB\u53D6\u56FE\u7247\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.add.imageUnrecognized": "\u65E0\u6CD5\u8BC6\u522B\u8FD9\u5F20\u56FE\u7247",
            "dock.add.imageTypeInvalid": "\u4EC5\u652F\u6301 PNG\u3001JPEG\u3001WebP \u6216 SVG \u56FE\u7247",
            "dock.add.imageTooLarge": "\u56FE\u7247\u4E0D\u80FD\u8D85\u8FC7 512KB",
            "dock.add.imageSizeInvalid": "\u56FE\u7247\u5C3A\u5BF8\u65E0\u6548",
            "dock.add.imageUnavailable": "\u5F53\u524D\u9875\u9762\u65E0\u6CD5\u5904\u7406\u56FE\u7247",
            "dock.add.imageCompressedTooLarge": "\u56FE\u7247\u538B\u7F29\u540E\u4ECD\u7136\u8FC7\u5927\uFF0C\u8BF7\u6362\u4E00\u5F20\u66F4\u7B80\u6D01\u7684\u56FE\u7247",
            "dock.add.imageProcessing": "\u6B63\u5728\u5904\u7406\u56FE\u7247\u2026",
            "dock.add.imageUploadHint": "PNG / JPEG / WebP / SVG\uFF0C\u4E0D\u8D85\u8FC7 512KB",
            "dock.add.imageProcessFailed": "\u56FE\u7247\u5904\u7406\u5931\u8D25",
            "dock.search.engineAria": "\u4F7F\u7528 {engine} \u641C\u7D22",
            "dock.search.source.common": "\u5E38\u7528",
            "dock.search.source.fixed": "\u56FA\u5B9A",
            "dock.search.source.tab": "\u9875\u7B7E",
            "dock.search.source.bookmark": "\u4E66\u7B7E",
            "dock.search.source.history": "\u5386\u53F2",
            "dock.search.source.web": "\u7F51\u9875",
            "dock.search.source.unknown": "\u5176\u4ED6",
            "dock.search.recents": "\u6700\u8FD1\u641C\u7D22",
            "dock.search.resultCount": "{count} \u6761",
            "dock.search.noRecents": "\u6682\u65E0\u6700\u8FD1\u641C\u7D22\uFF0C\u8F93\u5165\u5173\u952E\u8BCD\u5F00\u59CB\u641C\u7D22",
            "dock.search.results": "\u76F8\u5173\u7ED3\u679C",
            "dock.search.sources": "\u9875\u7B7E \xB7 \u4E66\u7B7E \xB7 \u6D4F\u89C8\u5386\u53F2",
            "dock.search.emptyPermission": "\u672A\u627E\u5230\u5339\u914D\u7684\u53EF\u7528\u7ED3\u679C\uFF1B\u6388\u6743\u540E\u5C06\u81EA\u52A8\u8865\u5145\u5BF9\u5E94\u7ED3\u679C\u3002",
            "dock.search.empty": "\u6CA1\u6709\u5339\u914D\u7ED3\u679C\uFF1B\u6309 Enter \u4F7F\u7528\u5F53\u524D\u641C\u7D22\u5F15\u64CE\u641C\u7D22",
            "dock.search.openPageFailed": "\u6253\u5F00\u641C\u7D22\u9875\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.search.openResultFailed": "\u6253\u5F00\u641C\u7D22\u7ED3\u679C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "dock.search.title": "\u7F51\u9875\u641C\u7D22",
            "dock.search.description": "\u5FEB\u901F\u641C\u7D22\u5F53\u524D\u9875\u7B7E\u3001\u4E66\u7B7E\u4E0E\u6D4F\u89C8\u5386\u53F2",
            "dock.search.close": "\u5173\u95ED\u7F51\u9875\u641C\u7D22",
            "dock.search.placeholder": "\u641C\u7D22\u7F51\u9875\u3001\u9875\u7B7E\u6216\u4E66\u7B7E",
            "dock.search.clear": "\u6E05\u7A7A\u641C\u7D22\u5185\u5BB9",
            "dock.search.chooseEngine": "\u9009\u62E9\u641C\u7D22\u5F15\u64CE",
            "siteEditor.category": "\u5206\u7C7B",
            "siteEditor.title": "\u7F51\u7AD9\u6807\u9898",
            "siteEditor.url": "\u7F51\u9875\u5730\u5740",
            "siteEditor.icon": "\u7F51\u7AD9\u56FE\u6807",
            "siteEditor.iconSource": "\u56FE\u6807\u6765\u6E90",
            "siteEditor.iconAuto": "\u81EA\u52A8\u83B7\u53D6",
            "siteEditor.iconText": "\u6587\u5B57\u56FE\u6807",
            "siteEditor.iconUpload": "\u672C\u5730\u4E0A\u4F20",
            "siteEditor.iconTextLabel": "\u56FE\u6807\u6587\u5B57",
            "siteEditor.iconTextPlaceholder": "\u6700\u591A 10 \u4E2A\u5B57\u7B26",
            "siteEditor.iconColor": "\u6587\u5B57\u56FE\u6807\u989C\u8272",
            "siteEditor.uploadChoose": "\u9009\u62E9\u672C\u5730\u56FE\u7247",
            "siteEditor.uploadHint": "PNG / JPEG / WebP / SVG\uFF0C\u4E0D\u8D85\u8FC7 512 KB",
            "tabList.untitled": "\uFF08\u65E0\u6807\u9898\uFF09",
            "tabList.unnamedGroup": "\u672A\u547D\u540D\u5206\u7EC4",
            "tabList.dockUnpin": "\u4ECE\u7F51\u9875\u62D3\u5C55\u575E\u53D6\u6D88\u56FA\u5B9A",
            "tabList.dockPin": "\u56FA\u5B9A\u5230\u7F51\u9875\u62D3\u5C55\u575E",
            "tabList.previewAlt": "{title} \u9884\u89C8",
            "tabList.previewLoading": "\u6B63\u5728\u52A0\u8F7D\u9884\u89C8\u2026",
            "tabList.pinned": "\u56FA\u5B9A",
            "tabList.close": "\u5173\u95ED\u9875\u7B7E",
            "tabList.switch": "\u5207\u6362",
            "tabList.duplicate": "\u590D\u5236",
            "tabList.select": "\u9009\u62E9",
            "tabList.unselect": "\u53D6\u6D88\u9009\u62E9",
            "tabList.unpin": "\u53D6\u6D88\u56FA\u5B9A",
            "tabList.pin": "\u56FA\u5B9A",
            "tabList.removeGroup": "\u79FB\u51FA\u5206\u7EC4",
            "tabList.addGroup": "\u52A0\u5165\u5206\u7EC4",
            "tabList.currentWindow": "\u5F53\u524D\u7A97\u53E3",
            "tabList.active": "\u5F53\u524D\u6807\u7B7E",
            "tabList.window": "\u7A97\u53E3 {number}{state}",
            "tabList.window.minimized": " [\u6700\u5C0F\u5316]",
            "tabList.window.maximized": " [\u6700\u5927\u5316]",
            "tabList.window.fullscreen": " [\u5168\u5C4F]",
            "tabList.editGroup": "\u70B9\u51FB\u7F16\u8F91\u5206\u7EC4",
            "tabList.edit": "\u7F16\u8F91",
            "tabList.dissolveGroup": "\u89E3\u6563\u5206\u7EC4",
            "tabList.group": "\u5206\u7EC4",
            "tabList.tab": "\u9875\u7B7E",
            "tabList.tabCount": "{count} \u4E2A\u9875\u7B7E",
            "tabList.restore": "\u6062\u590D",
            "tabList.delete": "\u5220\u9664",
            "tabList.groupNamePlaceholder": "\u5206\u7EC4\u540D\u79F0\uFF08\u53EF\u9009\uFF09",
            "tabList.cancel": "\u53D6\u6D88",
            "tabList.searchEmpty": '\u672A\u627E\u5230\u4E0E "{query}" \u76F8\u5173\u7684\u6807\u7B7E',
            "tabList.searchHint": "\u8BD5\u8BD5\u641C\u7D22\u57DF\u540D\u3001\u9875\u9762\u6807\u9898\u6216\u5206\u7EC4\u540D\u79F0",
            "tabList.empty": "\u6682\u65F6\u8FD8\u6CA1\u6709\u53EF\u7BA1\u7406\u7684\u9875\u7B7E",
            "tabList.emptyHint": "\u6253\u5F00\u66F4\u591A\u9875\u9762\uFF0C\u6216\u7A0D\u540E\u518D\u8BD5",
            "tabList.pinnedSection": "\u5DF2\u56FA\u5B9A ({count})",
            "tabList.ungroupedSection": "\u672A\u5206\u7EC4 ({count})",
            "tabList.expandMore": "\u5C55\u5F00\u5176\u4F59 {count} \u4E2A\u6807\u7B7E",
            "tabList.collapse": "\u6536\u8D77",
            "tabList.recycle": "\u56DE\u6536\u7AD9 ({count})",
            "tabList.clear": "\u6E05\u7A7A",
            "tabList.back": "\u8FD4\u56DE\u9875\u7B7E",
            "tabList.recycleEmpty": "\u56DE\u6536\u7AD9\u4E3A\u7A7A",
            "tabList.recycleHint": "\u5173\u95ED\u7684\u9875\u7B7E\u548C\u5206\u7EC4\u4F1A\u6682\u5B58\u5728\u8FD9\u91CC\uFF0C\u53EF\u968F\u65F6\u6062\u590D",
            "tabList.selected": "\u5DF2\u9009 {count}",
            "permission.bookmarks.required": "\u9700\u8981\u4E66\u7B7E\u6743\u9650\u624D\u80FD\u4ECE\u4E66\u7B7E\u5BFC\u5165\uFF1B\u53EF\u7A0D\u540E\u91CD\u8BD5\u3002",
            "permission.bookmarks.allow": "\u5141\u8BB8\u8BFB\u53D6\u4E66\u7B7E",
            "permission.bookmarks.denied": "\u672A\u83B7\u5F97\u4E66\u7B7E\u6743\u9650\uFF1B\u672A\u5BFC\u5165\u4EFB\u4F55\u4E66\u7B7E\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5\u3002",
            "permission.bookmarks.unsupported": "\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u6309\u9700\u7533\u8BF7\u4E66\u7B7E\u6743\u9650\u3002",
            "permission.history.required": "\u9700\u8981\u5386\u53F2\u8BB0\u5F55\u6743\u9650\u624D\u80FD\u663E\u793A\u5386\u53F2\u7ED3\u679C\uFF1B\u5F53\u524D\u9875\u7B7E\u641C\u7D22\u4ECD\u53EF\u7528\u3002",
            "permission.history.allow": "\u5141\u8BB8\u8BFB\u53D6\u6D4F\u89C8\u5668\u5386\u53F2",
            "permission.history.denied": "\u672A\u83B7\u5F97\u5386\u53F2\u8BB0\u5F55\u6743\u9650\uFF1B\u4ECD\u53EF\u641C\u7D22\u5F53\u524D\u9875\u7B7E\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5\u3002",
            "permission.history.unsupported": "\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u6309\u9700\u7533\u8BF7\u5386\u53F2\u8BB0\u5F55\u6743\u9650\u3002",
            "ai.settings.nav": "AI \u667A\u80FD\u6574\u7406",
            "ai.adjustment.summary": "\u672C\u8F6E AI \u8C03\u6574 {count} \u9879",
            "ai.adjustment.view": "\u67E5\u770B",
            "ai.adjustment.hide": "\u6536\u8D77",
            "ai.adjustment.undo": "\u64A4\u9500",
            "ai.adjustment.undoing": "\u6B63\u5728\u64A4\u9500",
            "ai.adjustment.undone": "\u5DF2\u64A4\u9500",
            "ai.adjustment.close": "\u5173\u95ED\u8BE6\u60C5",
            "ai.adjustment.panelTitle": "AI \u8C03\u6574\u8BE6\u60C5",
            "ai.adjustment.before": "\u8C03\u6574\u524D",
            "ai.adjustment.after": "\u8C03\u6574\u540E",
            "ai.adjustment.reason": "\u539F\u56E0",
            "ai.adjustment.create_ai_task": "\u521B\u5EFA\u4EFB\u52A1",
            "ai.adjustment.rename_ai_task": "\u4EFB\u52A1\u6539\u540D",
            "ai.adjustment.assign_ai_relation": "\u9875\u9762\u5F52\u7C7B",
            "ai.adjustment.reorder_ai_tasks": "\u4EFB\u52A1\u6392\u5E8F",
            "ai.adjustment.conflict": "\u65E0\u6CD5\u64A4\u9500\uFF1A\u4F60\u5DF2\u5728 AI \u8C03\u6574\u540E\u624B\u52A8\u4FEE\u6539\u76F8\u5173\u5185\u5BB9\u3002",
            "ai.adjustment.failed": "\u64A4\u9500\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "ai.adjustment.empty": "\u6CA1\u6709\u53EF\u663E\u793A\u7684 AI \u8C03\u6574\u3002",
            "ai.settings.title": "AI \u667A\u80FD\u6574\u7406",
            "ai.settings.description": "\u914D\u7F6E\u865A\u62DF\u4EFB\u52A1\u6574\u7406\u3001\u6A21\u578B\u6E20\u9053\u548C\u672C\u673A\u5BC6\u94A5",
            "ai.settings.scopeTitle": "AI \u53EA\u6574\u7406\u865A\u62DF\u4EFB\u52A1",
            "ai.settings.scope": "AI \u53EF\u4EE5\u81EA\u52A8\u4FEE\u6539\u53F3\u4FA7\u865A\u62DF\u4EFB\u52A1\u5173\u7CFB\u548C AI \u7BA1\u7406\u7684\u4EFB\u52A1\uFF0C\u4F46\u7EDD\u4E0D\u6253\u5F00\u3001\u5173\u95ED\u3001\u79FB\u52A8\u3001\u5206\u7EC4\u6216\u91CD\u6392\u771F\u5B9E\u9875\u7B7E\u3002",
            "ai.settings.enabled": "\u542F\u7528 AI \u667A\u80FD\u6574\u7406",
            "ai.settings.enabledHint": "\u5173\u95ED\u65F6\u4E0D\u4F1A\u4EA7\u751F\u4E91\u7AEF\u8BF7\u6C42\uFF0C\u672C\u5730\u5EFA\u8BAE\u4ECD\u53EF\u4F7F\u7528",
            "ai.settings.autoOrganize": "\u5141\u8BB8\u9AD8\u7F6E\u4FE1\u7ED3\u679C\u81EA\u52A8\u6574\u7406",
            "ai.settings.autoOrganizeHint": "\u53EA\u5904\u7406\u901A\u8FC7\u672C\u5730\u5B89\u5168\u95E8\u69DB\u7684\u9AD8\u7F6E\u4FE1\u865A\u62DF\u4EFB\u52A1\u53D8\u5316",
            "ai.settings.channelTitle": "\u6A21\u578B\u6E20\u9053",
            "ai.settings.channelHint": "OpenAI \u517C\u5BB9\u63A5\u53E3\uFF1B\u5730\u5740\u548C\u6A21\u578B\u53EF\u4EE5\u4FEE\u6539",
            "ai.settings.provider": "OpenAI \u517C\u5BB9",
            "ai.settings.baseUrl": "API \u5730\u5740",
            "ai.settings.model": "\u6A21\u578B",
            "ai.settings.apiKey": "API Key",
            "ai.settings.keyPreserved": "\u5DF2\u4FDD\u5B58\u5BC6\u94A5\uFF1B\u7559\u7A7A\u5C06\u7EE7\u7EED\u4F7F\u7528",
            "ai.settings.keyPlaceholder": "\u8F93\u5165 API Key",
            "ai.settings.showKey": "\u663E\u793A\u5BC6\u94A5",
            "ai.settings.hideKey": "\u9690\u85CF\u5BC6\u94A5",
            "ai.settings.clearKey": "\u6E05\u9664\u5BC6\u94A5",
            "ai.settings.localKey": "\u5BC6\u94A5\u4EC5\u4FDD\u5B58\u5728\u672C\u673A\uFF0C\u4E0D\u540C\u6B65\u3001\u4E0D\u5BFC\u51FA\uFF0C\u4E5F\u4E0D\u4F1A\u51FA\u73B0\u5728\u65E5\u5FD7\u6216\u63D0\u793A\u6D88\u606F\u4E2D\u3002",
            "ai.settings.previewTitle": "\u67E5\u770B\u53D1\u9001\u5B57\u6BB5\u9884\u89C8",
            "ai.settings.previewHint": "\u5F00\u542F AI \u540E\uFF0C\u4EC5\u53D1\u9001\u672C\u5730\u7B5B\u9009\u51FA\u7684\u6700\u5C0F\u5019\u9009\u4FE1\u606F\u3002",
            "ai.settings.previewPage": "\u5F53\u524D\u9875\u9762",
            "ai.settings.previewPageFields": "\u8131\u654F\u6807\u9898\u3001\u6CE8\u518C\u57DF\u540D\u3001\u8DEF\u5F84\u7C7B\u578B",
            "ai.settings.previewTasks": "\u5019\u9009\u4EFB\u52A1",
            "ai.settings.previewTaskFields": "\u4EFB\u52A1\u540D\u79F0\u3001\u9886\u57DF\u3001\u5C11\u91CF\u8131\u654F\u6838\u5FC3\u9875\u6807\u9898",
            "ai.settings.previewSignals": "\u672C\u5730\u4FE1\u53F7",
            "ai.settings.previewSignalFields": "\u805A\u5408\u540E\u7684\u8BC1\u636E\u4EE3\u7801\u3001\u98CE\u9669\u4EE3\u7801\u548C\u6B21\u6570",
            "ai.settings.previewNever": "\u4E0D\u4F1A\u53D1\u9001\u5B8C\u6574 URL\u3001\u67E5\u8BE2\u53C2\u6570\u3001\u9875\u9762\u6B63\u6587\u3001\u8F93\u5165\u5185\u5BB9\u3001Cookie\u3001\u622A\u56FE\u3001\u539F\u59CB\u884C\u4E3A\u8F68\u8FF9\u6216 API Key\u3002",
            "ai.settings.actionHint": "\u4FEE\u6539\u540E\u5148\u6D4B\u8BD5\u8FDE\u63A5\uFF0C\u518D\u4FDD\u5B58\u8BBE\u7F6E",
            "ai.settings.testConnection": "\u6D4B\u8BD5\u8FDE\u63A5",
            "ai.settings.save": "\u4FDD\u5B58 AI \u8BBE\u7F6E",
            "ai.settings.loading": "\u6B63\u5728\u8BFB\u53D6\u672C\u673A\u8BBE\u7F6E\u2026",
            "ai.settings.saving": "\u6B63\u5728\u4FDD\u5B58\u672C\u673A\u8BBE\u7F6E\u2026",
            "ai.settings.testing": "\u6B63\u5728\u6D4B\u8BD5\u8FDE\u63A5\u2026",
            "ai.settings.saved": "AI \u8BBE\u7F6E\u5DF2\u4FDD\u5B58\u5728\u672C\u673A\u3002",
            "ai.settings.savedPermissionPending": "\u8BBE\u7F6E\u5DF2\u4FDD\u5B58\uFF1B\u8BE5\u5730\u5740\u6743\u9650\u5C1A\u672A\u6388\u6743\uFF0C\u8FDE\u63A5\u6D4B\u8BD5\u524D\u53EF\u518D\u6B21\u5141\u8BB8\u3002",
            "ai.settings.testSuccess": "\u8FDE\u63A5\u6210\u529F\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5F53\u524D\u6E20\u9053\u3002",
            "ai.settings.keyWillClear": "\u4FDD\u5B58\u540E\u5C06\u6E05\u9664\u672C\u673A\u5BC6\u94A5\u3002",
            "ai.settings.error.permission": "\u6CA1\u6709\u83B7\u5F97\u8BE5\u5730\u5740\u7684\u8BBF\u95EE\u6743\u9650\uFF1B\u53EF\u7A0D\u540E\u91CD\u8BD5\u3002",
            "ai.settings.error.unauthorized": "\u5BC6\u94A5\u88AB\u6E20\u9053\u62D2\u7EDD\uFF0C\u8BF7\u68C0\u67E5\u6216\u66F4\u6362\u5BC6\u94A5\u3002",
            "ai.settings.error.paymentRequired": "\u6E20\u9053\u4F59\u989D\u6216\u914D\u989D\u4E0D\u8DB3\uFF0C\u8BF7\u68C0\u67E5\u6E20\u9053\u8D26\u6237\u3002",
            "ai.settings.error.forbidden": "\u6E20\u9053\u62D2\u7EDD\u8BBF\u95EE\u5F53\u524D\u63A5\u53E3\u6216\u6A21\u578B\uFF0C\u8BF7\u68C0\u67E5\u8D26\u6237\u548C\u6A21\u578B\u6743\u9650\u3002",
            "ai.settings.error.quotaOrAccess": "\u6E20\u9053\u4F59\u989D\u4E0D\u8DB3\u6216\u6A21\u578B\u6743\u9650\u672A\u5F00\u901A\uFF0C\u8BF7\u68C0\u67E5\u6E20\u9053\u8D26\u6237\u3002",
            "ai.settings.error.upstreamReason": "\u6E20\u9053\u539F\u56E0\uFF1A",
            "ai.settings.error.badRequest": "\u6E20\u9053\u4E0D\u63A5\u53D7\u5F53\u524D\u6A21\u578B\u6216\u8BF7\u6C42\u53C2\u6570\uFF0C\u8BF7\u6838\u5BF9\u6A21\u578B\u540D\u79F0\u3002",
            "ai.settings.error.notFound": "API \u5730\u5740\u6216\u6A21\u578B\u63A5\u53E3\u4E0D\u53EF\u7528\uFF0C\u8BF7\u68C0\u67E5\u5730\u5740\u548C\u6A21\u578B\u540D\u79F0\u3002",
            "ai.settings.error.rateLimit": "\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "ai.settings.error.server": "\u6E20\u9053\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
            "ai.settings.error.timeout": "\u8FDE\u63A5\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u5730\u5740\u6216\u7F51\u7EDC\u3002",
            "ai.settings.error.network": "\u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5730\u5740\u548C\u7F51\u7EDC\u3002",
            "ai.settings.error.baseUrl": "API \u5730\u5740\u5FC5\u987B\u662F\u6709\u6548\u7684 HTTPS \u5730\u5740\u3002",
            "ai.settings.error.invalidSettings": "AI \u6E20\u9053\u8BBE\u7F6E\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u5730\u5740\u3001\u6A21\u578B\u548C\u5BC6\u94A5\u3002",
            "ai.settings.error.invalidResponse": "\u6E20\u9053\u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BFB\u53D6\u6216\u4E0D\u7B26\u5408\u63A5\u53E3\u683C\u5F0F\u7684\u54CD\u5E94\u3002",
            "ai.settings.error.provider": "\u6E20\u9053\u62D2\u7EDD\u4E86\u8BF7\u6C42\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u53EF\u8BC6\u522B\u7684\u9519\u8BEF\u7C7B\u578B\u3002",
            "ai.settings.error.keyRequired": "\u8BF7\u586B\u5199 API Key\uFF0C\u6216\u4FDD\u7559\u5DF2\u4FDD\u5B58\u7684\u5BC6\u94A5\u3002",
            "ai.settings.error.model": "\u8BF7\u586B\u5199\u6A21\u578B\u540D\u79F0\u3002",
            "ai.settings.error.load": "\u8BFB\u53D6 AI \u8BBE\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "ai.settings.error.save": "\u4FDD\u5B58 AI \u8BBE\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
            "ai.settings.error.test": "\u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002",
            "task.newPrompt": "\u8F93\u5165\u4EFB\u52A1\u540D\u79F0",
            "task.renameHint": "\u70B9\u51FB\u53EF\u4FEE\u6539\u6807\u9898",
            "task.renameAria": "\u4FEE\u6539\u4EFB\u52A1\u6807\u9898\uFF1A{title}",
            "task.expandPages": "\u5C55\u5F00\u5168\u90E8\u9875\u7B7E",
            "task.collapsePages": "\u6536\u8D77\u4E3A\u4E00\u884C",
            "task.undoLastChange": "\u64A4\u9500\u4E0A\u4E00\u6B21\u4EFB\u52A1\u4FEE\u6539",
            "task.dragToReorder": "\u62D6\u52A8\u8C03\u6574\u4EFB\u52A1\u987A\u5E8F",
            "task.dragDisabledByFilter": "\u5207\u6362\u4E3A\u624B\u52A8\u6392\u5E8F\u5E76\u6E05\u9664\u7B5B\u9009\u540E\u53EF\u62D6\u52A8",
            "task.moveUp": "\u4E0A\u79FB\u4EFB\u52A1",
            "task.moveDown": "\u4E0B\u79FB\u4EFB\u52A1",
            "task.openAll": "\u6253\u5F00\u5168\u90E8",
            "task.closeAll": "\u5173\u95ED\u5168\u90E8",
            "task.more": "\u66F4\u591A",
            "task.dissolve": "\u89E3\u6563\u4EFB\u52A1",
            "task.removePage": "\u79FB\u51FA\u4EFB\u52A1",
            "task.source.manual": "\u624B\u52A8\u5206\u7C7B",
            "task.source.smart": "\u667A\u80FD\u5206\u7C7B",
            "suggestion.source.local": "\u672C\u5730\u5EFA\u8BAE",
            "suggestion.source.ai": "AI \u5EFA\u8BAE",
            "suggestion.confidence.high": "\u628A\u63E1\u8F83\u9AD8",
            "suggestion.confidence.medium": "\u628A\u63E1\u4E2D\u7B49",
            "suggestion.reason.opener_link": "\u7531\u8BE5\u4EFB\u52A1\u4E2D\u7684\u9875\u9762\u6253\u5F00",
            "suggestion.reason.stable_object": "\u4E0E\u8BE5\u4EFB\u52A1\u4F7F\u7528\u540C\u4E00\u5DE5\u4F5C\u5BF9\u8C61",
            "suggestion.reason.qualified_return": "\u66FE\u591A\u6B21\u5728\u8BE5\u9875\u9762\u4E0E\u4EFB\u52A1\u9875\u9762\u95F4\u5207\u6362",
            "suggestion.reason.task_snapshot_restore": "\u4E0E\u8BE5\u4EFB\u52A1\u73B0\u573A\u4E00\u540C\u6062\u590D",
            "suggestion.reason.native_group_restore": "\u4E0E\u8BE5\u4EFB\u52A1\u9875\u9762\u4ECE\u540C\u4E00\u6807\u7B7E\u7EC4\u6062\u590D",
            "suggestion.reason.title_overlap": "\u9875\u9762\u6807\u9898\u4E0E\u8BE5\u4EFB\u52A1\u76F8\u5173",
            "suggestion.reason.same_native_group": "\u4E0E\u8BE5\u4EFB\u52A1\u9875\u9762\u4F4D\u4E8E\u540C\u4E00\u6807\u7B7E\u7EC4",
            "suggestion.reason.same_window": "\u4E0E\u8BE5\u4EFB\u52A1\u9875\u9762\u4F4D\u4E8E\u540C\u4E00\u7A97\u53E3",
            "suggestion.reason.same_domain": "\u4E0E\u8BE5\u4EFB\u52A1\u9875\u9762\u6765\u81EA\u540C\u4E00\u7F51\u7AD9",
            "suggestion.reason.risk_suppressed": "\u5B58\u5728\u4E0D\u786E\u5B9A\u56E0\u7D20\uFF0C\u5DF2\u964D\u4F4E\u628A\u63E1",
            "suggestion.reason.ambiguous": "\u53E6\u6709\u76F8\u8FD1\u5019\u9009\uFF0C\u8BF7\u9009\u62E9",
            "suggestion.action.addToTask": "\u52A0\u5165\u4EFB\u52A1",
            "suggestion.action.alsoLink": "\u540C\u65F6\u5173\u8054",
            "suggestion.action.reject": "\u62D2\u7EDD",
            "suggestion.action.undo": "\u64A4\u9500",
            "suggestion.batch.enter": "\u6279\u91CF\u5904\u7406",
            "suggestion.batch.select": "\u9009\u62E9\u6B64\u5EFA\u8BAE",
            "suggestion.batch.selectAll": "\u5168\u9009\u5F53\u524D\u5EFA\u8BAE",
            "suggestion.batch.count": "\u5DF2\u9009 {count} \u6761",
            "suggestion.batch.accept": "\u6279\u91CF\u52A0\u5165\u4EFB\u52A1",
            "suggestion.batch.reject": "\u6279\u91CF\u62D2\u7EDD",
            "suggestion.batch.cancel": "\u53D6\u6D88\u6279\u91CF\u5904\u7406",
            "suggestion.batch.running": "\u6B63\u5728\u5904\u7406 {count} \u6761\u5EFA\u8BAE",
            "suggestion.batch.limit": "\u4E00\u6B21\u6700\u591A\u9009\u62E9 {count} \u6761\u5EFA\u8BAE",
            "suggestion.label.addToTask": "\u5EFA\u8BAE\u52A0\u5165\u300C{task}\u300D",
            "suggestion.label.chooseTask": "\u9009\u62E9\u6700\u7B26\u5408\u5F53\u524D\u610F\u56FE\u7684\u4EFB\u52A1",
            "suggestion.label.choosePrimary": "\u9009\u62E9\u8FD9\u4E2A\u9875\u9762\u7684\u4E3B\u8981\u4EFB\u52A1",
            "suggestion.label.multiAssociate": "\u53EF\u7EE7\u7EED\u540C\u65F6\u5173\u8054\u4EE5\u4E0B\u4EFB\u52A1",
            "suggestion.label.relatedPage": "\u9875\u9762\u201C{page}\u201D\u8FD8\u6709\u5173\u8054\u4EFB\u52A1\u5019\u9009",
            "suggestion.notice.rejected": "\u5DF2\u62D2\u7EDD\u5EFA\u8BAE",
            "suggestion.notice.accepted": "\u5DF2\u52A0\u5165\u4EFB\u52A1",
            "suggestion.state.loading": "\u6B63\u5728\u5206\u6790",
            "suggestion.aria.chooseTask": "\u9009\u62E9\u4EFB\u52A1\uFF1A{task}",
            "suggestion.aria.undoAccepted": "\u64A4\u9500\u667A\u80FD\u5F52\u7C7B\uFF1A{task}",
            "suggestion.error.expired": "\u5EFA\u8BAE\u5DF2\u8FC7\u671F",
            "suggestion.error.conflict": "\u64CD\u4F5C\u51B2\u7A81",
            "suggestion.error.failed": "\u5EFA\u8BAE\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "suggestion.why": "\u4E3A\u4EC0\u4E48\u8FD9\u6837\u5206",
            "toast.suggestionAccepted": "\u5DF2\u52A0\u5165\u4EFB\u52A1",
            "toast.suggestionRejected": "\u5DF2\u62D2\u7EDD\u5EFA\u8BAE",
            "toast.suggestionUndone": "\u5DF2\u64A4\u9500\u5EFA\u8BAE\u64CD\u4F5C",
            "toast.suggestionBatchSuccess": "\u5DF2\u6210\u529F\u5904\u7406 {count} \u6761\u5EFA\u8BAE",
            "toast.suggestionBatchPartial": "\u6210\u529F {succeeded} \u6761\uFF0C\u5931\u8D25 {failed} \u6761",
            "task.pageMoveUp": "\u4E0A\u79FB\u9875\u9762",
            "task.pageMoveDown": "\u4E0B\u79FB\u9875\u9762",
            "task.chooseNewPrimary": "\u9009\u62E9\u65B0\u7684\u4E3B\u8981\u4EFB\u52A1",
            "task.relation.primary": "\u4E3B\u8981\u4EFB\u52A1",
            "task.relation.primaryHint": "\u6B64\u9875\u9762\u7684\u4E3B\u8981\u4EFB\u52A1",
            "task.relation.assign": "\u52A0\u5165\u4EFB\u52A1\u2026",
            "task.relation.move": "\u79FB\u52A8\u5230\u4EFB\u52A1\u2026",
            "task.relation.share": "\u540C\u65F6\u5173\u8054\u4EFB\u52A1\u2026",
            "task.relation.makePrimary": "\u8BBE\u4E3A\u4E3B\u8981\u4EFB\u52A1",
            "task.relation.assignHint": "\u9009\u62E9\u9875\u9762\u7684\u4E3B\u8981\u4EFB\u52A1\u3002",
            "task.relation.moveHint": "\u76EE\u6807\u5C06\u6210\u4E3A\u4E3B\u8981\u4EFB\u52A1\uFF1B\u5F53\u524D\u4EFB\u52A1\u5173\u7CFB\u4F1A\u79FB\u9664\uFF0C\u771F\u5B9E\u9875\u7B7E\u4E0D\u53D7\u5F71\u54CD\u3002",
            "task.relation.shareHint": "\u4FDD\u7559\u5F53\u524D\u4E3B\u8981\u4EFB\u52A1\uFF0C\u5E76\u65B0\u589E\u4E00\u4E2A\u5173\u8054\u4EFB\u52A1\u3002",
            "task.relation.dropChoice": "\u9009\u62E9\u5982\u4F55\u52A0\u5165\u201C{task}\u201D",
            "task.relation.moveHere": "\u79FB\u52A8\u5230\u6B64\u4EFB\u52A1",
            "task.relation.shareHere": "\u540C\u65F6\u5173\u8054\u6B64\u4EFB\u52A1",
            "common.back": "\u8FD4\u56DE",
            "task.confirmDissolve": "\u786E\u5B9A\u89E3\u6563\u8FD9\u4E2A\u4EFB\u52A1\u5417\uFF1F\u771F\u5B9E\u9875\u7B7E\u4E0D\u4F1A\u5173\u95ED\uFF0C\u4EFB\u52A1\u7EC4\u53EF\u4EE5\u4ECE\u56DE\u6536\u7AD9\u6062\u590D\u3002",
            "task.confirmDeleteTrash": "\u786E\u5B9A\u6C38\u4E45\u5220\u9664\u8FD9\u4E2A\u56DE\u6536\u9879\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
            "toast.taskAssigned": "\u5DF2\u624B\u52A8\u52A0\u5165\u4EFB\u52A1",
            "toast.taskRelationMoved": "\u5DF2\u79FB\u52A8\u4EFB\u52A1\u5173\u7CFB\uFF0C\u771F\u5B9E\u9875\u7B7E\u672A\u79FB\u52A8",
            "toast.taskRelationShared": "\u5DF2\u540C\u65F6\u5173\u8054\u4EFB\u52A1",
            "toast.taskPrimaryChanged": "\u4E3B\u8981\u4EFB\u52A1\u5DF2\u66F4\u65B0",
            "toast.taskRemoved": "\u5DF2\u4ECE\u4EFB\u52A1\u79FB\u51FA\uFF0C\u771F\u5B9E\u9875\u7B7E\u4E0D\u4F1A\u5173\u95ED",
            "toast.taskStatusChanged": "\u4EFB\u52A1\u72B6\u6001\u5DF2\u66F4\u65B0",
            "toast.taskDomainChanged": "\u4EFB\u52A1\u9886\u57DF\u5DF2\u66F4\u65B0",
            "toast.taskReordered": "\u4EFB\u52A1\u987A\u5E8F\u5DF2\u66F4\u65B0",
            "toast.taskPagesReordered": "\u4EFB\u52A1\u9875\u9762\u987A\u5E8F\u5DF2\u66F4\u65B0",
            "toast.taskCreated": "\u4EFB\u52A1\u5DF2\u521B\u5EFA",
            "toast.taskRenamed": "\u4EFB\u52A1\u5DF2\u66F4\u65B0",
            "toast.taskMissing": "\u8FD9\u4E2A\u4EFB\u52A1\u5DF2\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5173\u95ED\u5F39\u7A97\u540E\u91CD\u8BD5",
            "toast.taskDissolved": "\u4EFB\u52A1\u5DF2\u89E3\u6563\uFF0C\u53EF\u4ECE\u56DE\u6536\u7AD9\u6062\u590D\uFF1B\u771F\u5B9E\u9875\u7B7E\u4E0D\u4F1A\u5173\u95ED",
            "toast.taskRestored": "\u4EFB\u52A1\u7EC4\u5DF2\u6062\u590D",
            "toast.trashRestored": "\u56DE\u6536\u9879\u5DF2\u6062\u590D",
            "toast.trashRestoreAll": "\u56DE\u6536\u7AD9\u5185\u5BB9\u5DF2\u6062\u590D",
            "toast.trashDeleted": "\u56DE\u6536\u9879\u5DF2\u6C38\u4E45\u5220\u9664",
            "toast.trashLoadFailed": "\u56DE\u6536\u7AD9\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "toast.trashActionFailed": "\u56DE\u6536\u7AD9\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "toast.taskOpened": "\u5DF2\u6253\u5F00\u4EFB\u52A1\u9875\u9762",
            "toast.taskAlreadyOpen": "\u4EFB\u52A1\u9875\u9762\u5747\u5DF2\u6253\u5F00",
            "toast.taskNoOpenTabs": "\u5F53\u524D\u6CA1\u6709\u53EF\u5173\u95ED\u7684\u4EFB\u52A1\u9875\u7B7E",
            "toast.taskTabsClosed": "\u5DF2\u5173\u95ED\u4EFB\u52A1\u4E2D\u7684\u771F\u5B9E\u9875\u7B7E",
            "toast.taskChangeFailed": "\u4EFB\u52A1\u4FEE\u6539\u5931\u8D25",
            "toast.taskChangeUndone": "\u5DF2\u64A4\u9500\u4E0A\u4E00\u6B21\u4EFB\u52A1\u4FEE\u6539",
            "toast.taskOperationPending": "\u64CD\u4F5C\u7ED3\u679C\u5C1A\u672A\u5B8C\u5168\u540C\u6B65\uFF0C\u8BF7\u7A0D\u540E\u91CD\u65B0\u6253\u5F00\u6D6E\u5C42\u68C0\u67E5",
            "toast.taskTrashCleanupPending": "\u4EFB\u52A1\u5DF2\u6062\u590D\uFF0C\u4F46\u56DE\u6536\u8BB0\u5F55\u4ECD\u5728\u6E05\u7406",
            "toast.tabPinned": "\u5DF2\u56FA\u5B9A\u8BE5\u9875\u7B7E",
            "toast.tabUnpinned": "\u5DF2\u53D6\u6D88\u56FA\u5B9A",
            "toast.tabCommandFailed": "\u9875\u7B7E\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "toast.tabNotOpen": "\u8FD9\u4E2A\u4EFB\u52A1\u9875\u9762\u5F53\u524D\u672A\u6253\u5F00",
            "toast.taskOpenFailed": "\u6253\u5F00\u4EFB\u52A1\u9875\u9762\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "toast.taskCloseFailed": "\u5173\u95ED\u4EFB\u52A1\u9875\u7B7E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            "toast.layoutSyncFailed": "\u5E03\u5C40\u8BBE\u7F6E\u6682\u65F6\u65E0\u6CD5\u540C\u6B65",
            "tab.activate": "\u5207\u6362\u5230 {title}",
            "tab.close": "\u5173\u95ED\u9875\u7B7E",
            "tab.pinned": "\u5DF2\u56FA\u5B9A",
            "tab.dockFixed": "\u5DF2\u56FA\u5B9A\u5230\u62D3\u5C55\u575E",
            "tab.more": "\u66F4\u591A\u64CD\u4F5C",
            "tab.removeFromDock": "\u4ECE\u7F51\u9875\u62D3\u5C55\u575E\u53D6\u6D88\u56FA\u5B9A",
            "tab.addToDock": "\u56FA\u5B9A\u5230\u7F51\u9875\u62D3\u5C55\u575E",
            "task.untitled": "\u672A\u547D\u540D\u4EFB\u52A1",
            "task.status.active": "\u8FDB\u884C\u4E2D",
            "task.status.paused": "\u5DF2\u6682\u505C",
            "task.status.done": "\u5DF2\u5B8C\u6210",
            "task.status.pending": "\u5F85\u5212\u5206",
            "domain.work": "\u5DE5\u4F5C",
            "domain.study": "\u5B66\u4E60",
            "domain.life": "\u751F\u6D3B",
            "domain.interest": "\u5174\u8DA3",
            "domain.admin": "\u4E8B\u52A1",
            "domain.other": "\u5176\u4ED6",
            "guidance.eyebrow": "\u4E3B\u52A8\u63D0\u9192",
            "guidance.close": "\u5173\u95ED\u63D0\u9192",
            "guidance.muteToday": "\u4ECA\u65E5\u4E0D\u518D\u63D0\u9192",
            "guidance.openWorkbench": "\u6309\u4F4FAlt\u952E\u6216\u70B9\u51FB\u6253\u5F00",
            "guidance.frequent.title": "\u9875\u7B7E\u5207\u5F97\u6709\u70B9\u5FEB\uFF1F\u7528 TabFlow \u4E00\u773C\u627E\u5230\u3002",
            "guidance.frequent.message": "\u7528 TabFlow \u4E00\u773C\u627E\u5230\u6B63\u5728\u5207\u6362\u7684\u9875\u9762\u3002",
            "guidance.frequent.action": "\u6309\u4F4FAlt\u952E\u6216\u70B9\u51FB\u6253\u5F00",
            "guidance.startup.title": "\u7EE7\u7EED\u4E0A\u6B21\u7684\u6D4F\u89C8\u73B0\u573A\uFF0CTabFlow \u5DF2\u5C31\u7EEA\u3002",
            "guidance.startup.message": "\u7EE7\u7EED\u4E0A\u6B21\u7684\u6D4F\u89C8\u73B0\u573A\uFF0CTabFlow \u5DF2\u5C31\u7EEA\u3002",
            "guidance.startup.action": "\u6309\u4F4FAlt\u952E\u6216\u70B9\u51FB\u6253\u5F00",
            "guidance.20.title": "\u9875\u7B7E\u591A\u8D77\u6765\u4E86\uFF0C\u7528\u4EFB\u52A1\u89C6\u56FE\u4F1A\u66F4\u6E05\u695A\u3002",
            "guidance.20.message": "\u9875\u7B7E\u591A\u8D77\u6765\u4E86\uFF0C\u7528\u4EFB\u52A1\u89C6\u56FE\u4F1A\u66F4\u6E05\u695A\u3002",
            "guidance.20.action": "\u6309\u4F4FAlt\u952E\u6216\u70B9\u51FB\u6253\u5F00",
            "guidance.30.title": "\u9875\u7B7E\u680F\u6709\u70B9\u6324\uFF0CTabFlow \u5E2E\u4F60\u5FEB\u901F\u5B9A\u4F4D\u3002",
            "guidance.30.message": "\u9875\u7B7E\u680F\u6709\u70B9\u6324\uFF0CTabFlow \u5E2E\u4F60\u5FEB\u901F\u5B9A\u4F4D\u3002",
            "guidance.30.action": "\u6309\u4F4FAlt\u952E\u6216\u70B9\u51FB\u6253\u5F00",
            taskDialogCreateTitle: "\u65B0\u589E\u4EFB\u52A1",
            taskDialogRenameTitle: "\u4FEE\u6539\u4EFB\u52A1",
            taskDialogTitleLabel: "\u4EFB\u52A1\u540D\u79F0",
            taskDialogTitlePlaceholder: "\u8F93\u5165\u4EFB\u52A1\u540D\u79F0",
            taskDialogDomainLabel: "\u9009\u62E9\u9886\u57DF",
            taskDialogCreate: "\u521B\u5EFA\u4EFB\u52A1",
            taskDialogSave: "\u4FDD\u5B58\u4FEE\u6539",
            taskDialogSaving: "\u4FDD\u5B58\u4E2D\u2026",
            taskDialogRequired: "\u8BF7\u8F93\u5165\u4EFB\u52A1\u540D\u79F0",
            taskDialogSubmitFailed: "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
            taskDomain_work: "\u5DE5\u4F5C",
            taskDomain_study: "\u5B66\u4E60",
            taskDomain_life: "\u751F\u6D3B",
            taskDomain_interest: "\u5174\u8DA3",
            taskDomain_admin: "\u4E8B\u52A1",
            taskDomain_other: "\u5176\u4ED6",
            commonCancel: "\u53D6\u6D88"
          }),
          en: Object.freeze({
            "layout.split": "Split overview",
            "layout.browser": "Browser tabs",
            "layout.tasks": "Task overview",
            "pane.browser": "Current browser tabs",
            "pane.tasks": "Task overview",
            "search.placeholder": "Search title, site, or URL",
            "filter.allWindows": "All windows",
            "filter.allDomains": "All domains",
            "filter.allStatuses": "All statuses",
            "filter.all": "All",
            "locale.id": "en-US",
            "task.new": "New task",
            "task.inbox": "Inbox",
            "inbox.ignorePage": "Ignore this page",
            "inbox.markShared": "Mark as shared / multi-task",
            "inbox.excludeSite": "Do not record this site",
            "inbox.sharedBadge": "Shared / multi-task",
            "toast.inboxPreferenceFailed": "Could not save the inbox preference. Please try again.",
            "empty.tabs": "No matching tabs",
            "empty.tasks": "No tasks yet",
            "workbench.layoutLabel": "Main view",
            "workbench.layout.split": "Split overview",
            "workbench.layout.browser": "Browser tabs",
            "workbench.layout.tasks": "Task overview",
            "workbench.layout.recycle": "Recycle bin",
            "workbench.searchPlaceholder": "Search tabs, URLs, or tasks",
            "workbench.searchHint": "Task organization never reorders real tabs",
            "workbench.browserTitle": "Current browser tabs",
            "workbench.taskTitle": "Task overview",
            "workbench.inboxTitle": "Unassigned tabs",
            "workbench.inboxCandidates": "{count} candidates",
            "workbench.inboxExpand": "Show all tabs",
            "workbench.inboxCollapse": "Collapse to one row",
            "inbox.observation.observing.label": "Observing",
            "inbox.observation.observing.reason": "Waiting for more browsing activity",
            "inbox.observation.temporary_query.label": "Quick lookup",
            "inbox.observation.temporary_query.reason": "May be a short one-off lookup",
            "inbox.observation.possible_misclick.label": "Possible misclick",
            "inbox.observation.possible_misclick.reason": "Very short visit; not classified yet",
            "inbox.observation.redirect_or_ad.label": "Ad redirect",
            "inbox.observation.redirect_or_ad.reason": "May be a redirect or advertising page",
            "inbox.observation.intent_drift.label": "Intent drift",
            "inbox.observation.intent_drift.reason": "May have drifted from the current intent",
            "workbench.statusFilter": "Filter by status",
            "workbench.domainFilter": "Filter by domain",
            "workbench.taskSort": "Sort tasks",
            "workbench.taskSort.manual": "Manual order",
            "workbench.taskSort.recent": "Recently updated",
            "workbench.taskSort.title": "Name",
            "task.view.label": "Task view",
            "task.view.cards": "Cards",
            "task.view.aggregate": "Aggregate",
            "task.view.fishbone": "Fishbone",
            "task.view.experimentalBadge": "Experimental",
            "task.view.experimentalHint": "Read-only basic view based on current task relations. Full layout and interactions will be improved later.",
            "task.view.empty": "No task data to visualize",
            "task.view.emptyHint": "Create or match tasks, then return to this view.",
            "task.view.pageCount": "{count} related pages",
            "task.view.noPages": "No related pages",
            "task.view.aggregateAria": "Task aggregation view",
            "task.view.fishboneAria": "Task fishbone view",
            "workbench.allWindows": "All windows",
            "workbench.allStatuses": "All statuses",
            "workbench.allDomains": "All domains",
            "workbench.window": "Window {number}",
            "workbench.tabCount": "{count} tabs",
            "workbench.untitledTabGroup": "Untitled tab group",
            "workbench.ungroupedTabs": "Ungrouped tabs",
            "workbench.collapseTabGroup": "Collapse tab group",
            "workbench.expandTabGroup": "Expand tab group",
            "workbench.tabGroupMore": "Tab group actions",
            "workbench.activateGroupFirst": "Switch to first tab",
            "workbench.editTabGroup": "Edit name and color",
            "workbench.ungroupTabs": "Remove from group",
            "workbench.closeTabGroup": "Close tab group",
            "workbench.ungroupTabGroup": "Ungroup",
            "workbench.closeAllTabGroup": "Close all",
            "workbench.groupByDomain": "Group by domain",
            "workbench.ungroupAll": "Ungroup all",
            "privacy.title": "Privacy & data",
            "privacy.description": "Review local activity records and manage retained data",
            "settings.languageTitle": "Interface language",
            "settings.languageHint": "Follow the browser by default, or choose a language just for TabFlow.",
            "settings.languageSystem": "Follow browser",
            "settings.languageChinese": "\u4E2D\u6587",
            "settings.languageEnglish": "English",
            "settings.languageSaveFailed": "Could not save the language setting. Try again.",
            "settings.title": "Settings",
            "settings.navigation": "Settings navigation",
            "settings.activationTitle": "Permanent activation",
            "settings.activationDescription": "Unlock premium features while the core experience stays free",
            "settings.dockTitle": "Web Dock",
            "settings.dockDescription": "Manage pinned sites, appearance, and interactions",
            "settings.close": "Close settings",
            "privacy.localBehavior": "Local activity records",
            "privacy.localBehaviorHint": "Necessary tab activity stays on this device for up to 30 days and never changes tasks or real tab order automatically.",
            "privacy.behaviorClearHint": "Clearing activity history does not delete tasks, task relationships, page records, or current tab instances.",
            "privacy.dataControls": "Data controls",
            "privacy.exportHint": "Safe export includes tasks, pages, relationships, New Tab sites, and the Web Dock. It excludes API keys, activation data, screenshots, cookies, raw activity context, and full URL parameters.",
            "privacy.export": "Safe export",
            "privacy.clearBehavior": "Clear activity history",
            "privacy.clearAi": "Clear AI data",
            "privacy.clearAll": "Clear all local data",
            "privacy.clearing": "Clearing\u2026",
            "privacy.clearAiConfirm": "Clear local AI settings, API key, and runtime state? Tasks and task relationships will be kept.",
            "privacy.clearBehaviorConfirm": "Clear up to 30 days of local activity history? Tasks, relationships, page records, and current tabs will be kept.",
            "privacy.clearBehaviorSuccess": "Cleared {count} activity records. Tasks, relationships, and current tabs were kept.",
            "privacy.clearBehaviorFailed": "Could not clear activity history. Please try again.",
            "privacy.clearAllConfirm": "Clear all local TabFlow data? This deletes tasks, relationships, activity history, and the AI key and cannot be undone.",
            "privacy.clearAiSuccess": "Local AI data cleared. Tasks and task relationships were kept.",
            "privacy.clearAllSuccess": "All local TabFlow data cleared.",
            "privacy.exportSuccess": "Safe data exported.",
            "privacy.actionFailed": "Action failed. Please try again.",
            "privacy.exportFailed": "Could not export the file. Please try again.",
            "privacy.backup.title": "Backup & restore",
            "privacy.backup.hint": "Choose a TabFlow JSON backup to review a safe summary first. Nothing is overwritten before confirmation. Maximum 5 MiB.",
            "privacy.backup.reinstallWarning": "Upgrades and extension reloads preserve local data, but uninstalling normally deletes it. Export a safe backup before uninstalling, then restore it after reinstalling.",
            "privacy.backup.choose": "Restore from backup",
            "privacy.backup.reading": "Checking\u2026",
            "privacy.backup.previewTitle": "Restore preview",
            "privacy.backup.legacy": "Legacy backup: only tasks, pages, and relationships will be replaced. New Tab sites and the Web Dock stay unchanged.",
            "privacy.backup.section.tasks": "task data",
            "privacy.backup.section.newtab": "New Tab sites",
            "privacy.backup.section.dock": "Web Dock",
            "privacy.backup.section.none": "nothing restorable",
            "privacy.backup.willOverwrite": "Will replace: {sections}",
            "privacy.backup.count.tasks": "Tasks",
            "privacy.backup.count.pages": "Pages",
            "privacy.backup.count.relations": "Relationships",
            "privacy.backup.count.categories": "New Tab categories",
            "privacy.backup.count.sites": "Saved sites",
            "privacy.backup.count.dockSites": "Web Dock sites",
            "privacy.backup.overwriteWarning": "Restore replaces the local data above. It never restores API keys, activation data, browser history, or current real tabs.",
            "privacy.backup.cancel": "Cancel",
            "privacy.backup.confirm": "Replace and restore",
            "privacy.backup.importing": "Restoring\u2026",
            "privacy.backup.importSuccess": "Restore complete. Tasks, New Tab sites, and the Web Dock are synchronized.",
            "privacy.backup.error.tooLarge": "The backup file must be 5 MiB or smaller.",
            "privacy.backup.error.invalidJson": "The selected file is not valid JSON.",
            "privacy.backup.error.invalidFormat": "The selected file is not a supported TabFlow backup.",
            "privacy.backup.error.unsupportedVersion": "This backup version is not supported yet. Update TabFlow and try again.",
            "privacy.backup.error.sensitiveData": "For privacy, this file contains sensitive data that cannot be restored.",
            "privacy.backup.error.unknownField": "The backup contains fields this version does not support.",
            "privacy.backup.error.invalidContent": "The backup is damaged or does not match the current format.",
            "privacy.backup.error.duplicate": "The backup contains duplicate records and cannot be restored safely.",
            "privacy.backup.error.brokenReference": "A task relationship points to missing data.",
            "privacy.backup.error.primaryConflict": "A page has more than one primary task in this backup.",
            "privacy.backup.error.sectionUnavailable": "This version cannot restore one of the included sections. No changes were made.",
            "privacy.backup.error.confirmationRequired": "Confirm that local data may be replaced first.",
            "privacy.backup.error.rolledBack": "Restore failed and the previous data was restored. Try again later.",
            "privacy.backup.error.partialRollback": "Restore failed and some previous data may not have been restored. Stop editing, keep the backup, reload, and verify the data.",
            "privacy.backup.error.inProgress": "Another restore is in progress. Wait for it to finish and try again.",
            "privacy.backup.error.previewRequired": "The restore preview expired. Select the backup file again and reconfirm.",
            "privacy.backup.error.reconcileFailed": "Data was written, but current-tab synchronization failed. Reload the extension and verify the data.",
            "privacy.backup.error.unavailable": "Backup and restore is temporarily unavailable. Try again later.",
            "privacy.backup.error.failed": "Could not restore the backup. Try again later.",
            "privacy.backup.error.readFailed": "Could not read the selected file. Choose it again.",
            "workbench.taskPages": "{count} related pages",
            "workbench.globalCount": "{tabs} tabs \xB7 {tasks} tasks",
            "workbench.localReady": "Local workspace ready",
            "workbench.footerHint": "Click a tab to switch \xB7 Search filters both panes",
            "workbench.unknownPage": "Unknown page",
            "workbench.sessionDwell": "Dwell {time}",
            "workbench.pageOpenNow": "Open in browser",
            "workbench.pageHistory": "History page; click to reopen",
            "workbench.previewImageAlt": "Page preview",
            "workbench.previewLoading": "Loading secure preview\u2026",
            "workbench.previewUnavailable": "Preview unavailable",
            "workbench.previewRestricted": "Browser-restricted pages cannot be previewed",
            "workbench.previewActivateRequired": "Switch to this tab and wait for it to load to generate a preview",
            "workbench.previewWaitingForLoad": "A preview will be generated after the page finishes loading",
            "workbench.openNow": "Open now",
            "workbench.previewSwitchHint": "Click card to switch",
            "workbench.columns": "Columns",
            "workbench.columnsAria": "Tabs per row",
            "workbench.columnsValue": "{count} columns",
            "workbench.noTabs": "No matching tabs",
            "workbench.noTabsHint": "Try another keyword or window",
            "workbench.noTasks": "No matching tasks",
            "workbench.noTasksHint": "Adjust search, domain, or status",
            "workbench.emptyTask": "No pages in this task yet",
            "workbench.emptyTaskHint": "You can add tabs in a later step",
            "workbench.recycleTitle": "Recycle bin",
            "workbench.resizePanes": "Resize panes",
            "workbench.collapseBrowserPane": "Collapse browser tabs pane",
            "workbench.collapseTaskPane": "Collapse task pane",
            "workbench.restoreSplitPane": "Restore split overview",
            "workbench.recycleHint": "Sorted by closing time; restore tabs, tab groups, or tasks",
            "recycle.restoreAll": "Restore all",
            "recycle.recently": "Just now",
            "recycle.minutesAgo": "{count} min ago",
            "recycle.today": "Today",
            "recycle.group": "Tab group",
            "recycle.task": "Task group",
            "recycle.closedTab": "Closed tab",
            "recycle.restore": "Restore",
            "recycle.delete": "Delete",
            "recycle.deletePermanently": "Delete permanently",
            "workbench.recycleRestoreAll": "Restore all",
            "workbench.recycleEmpty": "Recycle bin is empty",
            "workbench.recycleEmptyHint": "Closed tabs, tab groups, and dissolved tasks appear here",
            "workbench.recycleTask": "Task group",
            "workbench.recycleTab": "Tab",
            "workbench.recycleGroup": "Tab group",
            "workbench.recycleRestore": "Restore",
            "workbench.recycleDelete": "Delete permanently",
            "common.close": "Close",
            "common.theme": "Toggle theme",
            "common.settings": "Settings",
            "theme.title": "Theme",
            "theme.system": "Use system",
            "theme.light": "Light",
            "theme.dark": "Dark",
            "theme.changed": "Theme changed to {theme}",
            "overlay.sticky": "Pinned open",
            "overlay.title": "Tab workspace",
            "overlay.subtitle": "Search, organize, group, restore, and preview in one place",
            "overlay.membership": "Membership status",
            "overlay.activated": "Permanently activated",
            "overlay.close": "Close overlay (Esc)",
            "overlay.searchPlaceholder": "Search tab title, domain, or URL",
            "overlay.selectedNone": "0 selected",
            "overlay.action.newTitle": "Open a new tab from popular bookmarks",
            "overlay.action.new": "New",
            "overlay.action.groupDomainsTitle": "Group all tabs by primary domain",
            "overlay.action.groupDomains": "Group domains",
            "overlay.action.ungroupAllTitle": "Remove every tab group",
            "overlay.action.ungroupAll": "Ungroup",
            "overlay.action.recycleTitle": "View recycle bin",
            "overlay.action.recycle": "Recycle bin",
            "overlay.action.undoTitle": "Undo close and restore the latest item",
            "overlay.action.undo": "Undo",
            "overlay.footer.escapeClose": "Close",
            "overlay.footer.holdOpen": "Hold the shortcut to open",
            "overlay.footer.stickyBefore": "Hold longer than",
            "overlay.footer.stickyAfter": "seconds and release to keep open",
            "overlay.footer.holdDuration": "Hold duration",
            "overlay.footer.hints": "Click to switch \xB7 Hover to preview \xB7 Drag to reorder \xB7 Right-click to select",
            "overlay.layout.aria": "Tab layout settings",
            "overlay.layout.perRow": "Per row",
            "overlay.layout.perRowAria": "Tabs per row",
            "overlay.layout.columns": "{count} columns",
            "overlay.layout.viewAria": "Tab view",
            "overlay.layout.hover": "Compact",
            "overlay.layout.card": "Cards",
            "overlay.layout.hoverPreview": "Hover preview",
            "overlay.selection.groupTitle": "Put selected tabs in a new group",
            "overlay.selection.group": "Group selected",
            "overlay.selection.closeTitle": "Close selected tabs",
            "overlay.selection.close": "Close selected",
            "overlay.selection.clearTitle": "Clear selection",
            "overlay.selection.clear": "Cancel",
            "overlay.loading": "Loading\u2026",
            "overlay.count.recycle": "Recycle bin \xB7 {count} items",
            "overlay.count.tabs": "{count} tabs",
            "overlay.count.windows": "{count} windows",
            "overlay.count.selected": "{selected} selected / {total}",
            "dock.label": "Web Dock",
            "dock.expand": "Expand Web Dock",
            "dock.addSite": "Add site",
            "dock.search": "Web search",
            "dock.settings": "Web Dock settings",
            "dock.settingsShort": "Dock settings",
            "dock.settings.empty": "No pinned sites yet",
            "dock.settings.fixedSites": "Pinned sites",
            "dock.settings.iconSize": "Icon size",
            "dock.settings.magnification": "Hover magnification",
            "dock.settings.influenceRadius": "Influence radius",
            "dock.settings.response": "Response",
            "dock.settings.damping": "Damping",
            "dock.settings.hideDelay": "Hide delay",
            "dock.settings.tileSize": "Icon tile size",
            "dock.settings.trayPadding": "Tray padding",
            "dock.settings.tileOpacity": "Tile opacity",
            "dock.settings.tileColor": "Icon tile color",
            "dock.settings.enabled": "Enable Web Dock",
            "dock.settings.enabledHint": "Show favorite sites at the bottom of every webpage",
            "dock.settings.autoHide": "Auto-hide",
            "dock.settings.autoHideHint": "Collapse the Dock after the pointer leaves",
            "dock.settings.appearance": "Appearance",
            "dock.settings.motion": "Motion",
            "dock.settings.preview": "Preview",
            "dock.settings.previewAria": "Web Dock preview",
            "dock.settings.reset": "Reset defaults",
            "dock.settings.siteName": "Site name",
            "dock.settings.siteUrl": "Site address",
            "dock.settings.addSite": "Add site",
            "dock.settings.drag": "Drag to reorder",
            "dock.settings.save": "Save",
            "dock.settings.delete": "Delete",
            "dock.settings.platformNote": "Note: Some sites restrict icon access. TabFlow automatically uses a safe fallback.",
            "dock.settings.saveHint": "Changes preview live. Select Done to close settings.",
            "dock.settings.done": "Done",
            "dock.settings.updated": "Site updated",
            "dock.settings.added": "Site added",
            "dock.settings.saveFailed": "Could not save. Try again.",
            "dock.settings.addFailed": "Could not add the site. Try again.",
            "dock.settings.saveDirtyFirst": "Save the current edit first",
            "dock.recent": "Recently closed",
            "dock.recentSites": "Recently closed sites",
            "dock.recentLoading": "Loading recently closed sites\u2026",
            "dock.recentEmpty": "No sites available to restore",
            "dock.recentUnavailable": "Recently closed sites are temporarily unavailable",
            "dock.recentRestoreAria": "Restore {title}",
            "dock.recentRestoreFailed": "Could not restore the site. Try again.",
            "dock.recentSyncFailed": "The site opened, but the recently closed list could not sync.",
            "dock.recentRestored": "Site restored",
            "dock.menu.background": "Open in new background tab",
            "dock.menu.edit": "Edit",
            "dock.menu.delete": "Delete",
            "dock.openBackgroundFailed": "Could not open the site in the background. Try again.",
            "dock.openFailed": "Could not open the site. Try again.",
            "dock.deleteFailed": "Could not delete the site. Try again.",
            "dock.deleted": "Site deleted",
            "dock.orderSaved": "Site order saved",
            "dock.orderSaveFailed": "Could not save the order. Try again.",
            "dock.pinFailed": "Could not update the pinned state. Try again.",
            "dock.pinned": "Pinned to Web Dock",
            "dock.unpinned": "Unpinned",
            "dock.extensionUpdated": "The extension was updated. Refresh this page and try again.",
            "dock.duplicate": "This site is already in Web Dock",
            "activation.locale": "en-US",
            "activation.localRecord": "Local record",
            "activation.loadFailed": "Could not load activation status. Try again.",
            "activation.purchaseGuide": "Xianyu purchase guide",
            "activation.purchaseActiveHint": "Collapsed after activation; you can expand it anytime",
            "activation.purchaseHint": "Scan to purchase a permanent activation code",
            "activation.expandImage": "Show image",
            "activation.purchaseAria": "Purchase an activation code",
            "activation.zoomAria": "Enlarge the Xianyu purchase guide",
            "activation.imageAlt": "Xianyu shop purchase guide and QR code",
            "activation.purchaseEyebrow": "Purchase guide",
            "activation.noCode": "Need an activation code?",
            "activation.purchaseCopy": "Save or enlarge the image, then scan it with Xianyu to open the shop. You will receive a permanent activation code after purchase.",
            "activation.zoom": "Enlarge",
            "activation.collapseImage": "Hide image",
            "activation.memberStatus": "Membership status",
            "activation.active": "Permanently activated",
            "activation.unlocked": "Premium features are unlocked",
            "activation.used": "This activation code has been used and retired",
            "activation.activatedAt": "Activated: {time}",
            "activation.deactivate": "Deactivate",
            "activation.invalid": "The activation code is invalid. Check it and try again.",
            "activation.eyebrow": "Permanent activation",
            "activation.inputTitle": "Enter the activation code received after purchase",
            "activation.copy": "No account is required. Verification runs online and activation is saved permanently on this device. Re-enter the same code after reinstalling to restore access.",
            "activation.code": "Activation code",
            "activation.verifying": "Verifying\u2026",
            "activation.submit": "Verify and activate",
            "activation.progress": "Connecting and verifying your activation code",
            "activation.offline": "You are offline. Connect to the internet and try again.",
            "activation.failed": "Activation failed. Try again later.",
            "activation.previewAria": "Purchase guide image preview",
            "activation.previewClose": "Close purchase guide image",
            "activation.deactivateClose": "Close deactivation confirmation",
            "activation.deactivateTitle": "Deactivate this device?",
            "activation.deactivateCopy": "Your membership badge and premium benefits will stop immediately. You can reactivate later with the same code.",
            "activation.cancel": "Cancel",
            "activation.confirmDeactivate": "Deactivate",
            "activation.deactivating": "Deactivating\u2026",
            "activation.deactivated": "Activation removed",
            "activation.deactivateFailed": "Could not deactivate. Try again later.",
            "dock.add.catalogQuick": "Choose a common site",
            "dock.add.siteCount": "{count} sites",
            "dock.add.catalogSearchPlaceholder": "Search sites or categories",
            "dock.add.catalogCategories": "Common site categories",
            "dock.add.editTitle": "Edit site",
            "dock.add.addTitle": "Add site",
            "dock.add.editDescription": "Update the site title, address, and icon",
            "dock.add.addDescription": "Save this page or add any commonly used site",
            "dock.add.close": "Close add-site dialog",
            "dock.add.modeLabel": "Add method",
            "dock.add.mode.current": "Save current page",
            "dock.add.mode.custom": "Add manually",
            "dock.add.mode.catalog": "Choose common site",
            "dock.add.mode.bookmarks": "Import bookmarks",
            "dock.add.bookmarksHeading": "Choose Chrome bookmarks",
            "dock.add.bookmarkCount": "{count} bookmarks",
            "dock.add.bookmarkSelected": "{count} selected",
            "dock.add.bookmarkSearchPlaceholder": "Search title, address, or folder",
            "dock.add.bookmarksLoading": "Loading Chrome bookmarks\u2026",
            "dock.add.bookmarksList": "Chrome bookmark list",
            "dock.add.bookmarksNoMatch": "No matching bookmarks",
            "dock.add.bookmarksEmpty": "No web bookmarks available to import",
            "dock.add.bookmarksLoadFailed": "Could not load bookmarks. Try again.",
            "dock.add.previewAria": "Live icon preview",
            "dock.add.previewCaption": "Live preview",
            "dock.add.previewTitle": "Site title",
            "dock.add.previewHint": "If the best automatic icon is unavailable, TabFlow falls back to another icon and then text.",
            "dock.add.cancel": "Cancel",
            "dock.add.save": "Save to Dock",
            "dock.add.import": "Import to Dock",
            "dock.add.saving": "Saving\u2026",
            "dock.add.currentPage": "Current page",
            "dock.add.untitledBookmark": "Untitled bookmark",
            "dock.add.otherBookmarks": "Other bookmarks",
            "dock.add.selectBookmark": "Select at least one bookmark",
            "dock.add.allDuplicates": "All {count} selected sites are already in Web Dock",
            "dock.add.importFailed": "Import failed. Try again.",
            "dock.add.importPartial": "Imported {count}, then failed: {reason}",
            "dock.add.imported": "Imported {count} bookmarks{suffix}",
            "dock.add.skipped": "; skipped {count} already-pinned sites",
            "dock.add.titleRequired": "Enter a site title",
            "dock.add.urlInvalid": "Enter a valid web address",
            "dock.add.textIconInvalid": "A text icon must contain 1\u201310 letters",
            "dock.add.saveFailed": "Could not save the site. Try again.",
            "dock.add.saveFailedWithReason": "Could not save: {reason}",
            "dock.add.imageRequired": "Choose a local image first",
            "dock.add.updated": "Site updated",
            "dock.add.added": "Site added",
            "dock.add.imageReadingFailed": "Could not read the image. Try again.",
            "dock.add.imageUnrecognized": "This image could not be recognized",
            "dock.add.imageTypeInvalid": "Use a PNG, JPEG, WebP, or SVG image",
            "dock.add.imageTooLarge": "The image must be no larger than 512 KB",
            "dock.add.imageSizeInvalid": "The image dimensions are invalid",
            "dock.add.imageUnavailable": "This page cannot process the image",
            "dock.add.imageCompressedTooLarge": "The compressed image is still too large. Choose a simpler image.",
            "dock.add.imageProcessing": "Processing image\u2026",
            "dock.add.imageUploadHint": "PNG / JPEG / WebP / SVG, up to 512 KB",
            "dock.add.imageProcessFailed": "Could not process the image",
            "dock.search.engineAria": "Search with {engine}",
            "dock.search.source.common": "Favorite",
            "dock.search.source.fixed": "Pinned",
            "dock.search.source.tab": "Tab",
            "dock.search.source.bookmark": "Bookmark",
            "dock.search.source.history": "History",
            "dock.search.source.web": "Web",
            "dock.search.source.unknown": "Other",
            "dock.search.recents": "Recent searches",
            "dock.search.resultCount": "{count} items",
            "dock.search.noRecents": "No recent searches. Type a query to begin.",
            "dock.search.results": "Related results",
            "dock.search.sources": "Tabs \xB7 Bookmarks \xB7 History",
            "dock.search.emptyPermission": "No available matches. Allow access to include more results.",
            "dock.search.empty": "No matches. Press Enter to search with the selected engine.",
            "dock.search.openPageFailed": "Could not open the search page. Try again.",
            "dock.search.openResultFailed": "Could not open the search result. Try again.",
            "dock.search.title": "Web search",
            "dock.search.description": "Quickly search current tabs, bookmarks, and browsing history",
            "dock.search.close": "Close web search",
            "dock.search.placeholder": "Search web pages, tabs, or bookmarks",
            "dock.search.clear": "Clear search",
            "dock.search.chooseEngine": "Choose search engine",
            "siteEditor.category": "Category",
            "siteEditor.title": "Site title",
            "siteEditor.url": "Web address",
            "siteEditor.icon": "Site icon",
            "siteEditor.iconSource": "Icon source",
            "siteEditor.iconAuto": "Fetch automatically",
            "siteEditor.iconText": "Text icon",
            "siteEditor.iconUpload": "Local upload",
            "siteEditor.iconTextLabel": "Icon text",
            "siteEditor.iconTextPlaceholder": "Up to 10 letters",
            "siteEditor.iconColor": "Text icon color",
            "siteEditor.uploadChoose": "Choose a local image",
            "siteEditor.uploadHint": "PNG / JPEG / WebP / SVG, up to 512 KB",
            "tabList.untitled": "(Untitled)",
            "tabList.unnamedGroup": "Untitled group",
            "tabList.dockUnpin": "Unpin from Web Dock",
            "tabList.dockPin": "Pin to Web Dock",
            "tabList.previewAlt": "{title} preview",
            "tabList.previewLoading": "Loading preview\u2026",
            "tabList.pinned": "Pinned",
            "tabList.close": "Close tab",
            "tabList.switch": "Switch",
            "tabList.duplicate": "Duplicate",
            "tabList.select": "Select",
            "tabList.unselect": "Unselect",
            "tabList.unpin": "Unpin",
            "tabList.pin": "Pin",
            "tabList.removeGroup": "Remove from group",
            "tabList.addGroup": "Add to group",
            "tabList.currentWindow": "Current window",
            "tabList.active": "Current tab",
            "tabList.window": "Window {number}{state}",
            "tabList.window.minimized": " [minimized]",
            "tabList.window.maximized": " [maximized]",
            "tabList.window.fullscreen": " [full screen]",
            "tabList.editGroup": "Edit group",
            "tabList.edit": "Edit",
            "tabList.dissolveGroup": "Dissolve group",
            "tabList.group": "Group",
            "tabList.tab": "Tab",
            "tabList.tabCount": "{count} tabs",
            "tabList.restore": "Restore",
            "tabList.delete": "Delete",
            "tabList.groupNamePlaceholder": "Group name (optional)",
            "tabList.cancel": "Cancel",
            "tabList.searchEmpty": "No tabs match \u201C{query}\u201D",
            "tabList.searchHint": "Try a domain, page title, or group name",
            "tabList.empty": "No manageable tabs yet",
            "tabList.emptyHint": "Open more pages or try again later",
            "tabList.pinnedSection": "Pinned ({count})",
            "tabList.ungroupedSection": "Ungrouped ({count})",
            "tabList.expandMore": "Show {count} more tabs",
            "tabList.collapse": "Collapse",
            "tabList.recycle": "Recycle bin ({count})",
            "tabList.clear": "Clear",
            "tabList.back": "Back to tabs",
            "tabList.recycleEmpty": "Recycle bin is empty",
            "tabList.recycleHint": "Closed tabs and groups stay here until restored or deleted",
            "tabList.selected": "{count} selected",
            "permission.bookmarks.required": "Bookmark access is required to import bookmarks. You can try again later.",
            "permission.bookmarks.allow": "Allow bookmarks",
            "permission.bookmarks.denied": "Bookmark access was not granted. Nothing was imported, and you can try again later.",
            "permission.bookmarks.unsupported": "This browser does not support requesting bookmark access on demand.",
            "permission.history.required": "History access is required to show history results. Current-tab search still works.",
            "permission.history.allow": "Allow browser history",
            "permission.history.denied": "History access was not granted. Current-tab search still works, and you can try again later.",
            "permission.history.unsupported": "This browser does not support requesting history access on demand.",
            "ai.settings.nav": "AI organization",
            "ai.adjustment.summary": "AI adjusted {count} items",
            "ai.adjustment.view": "View",
            "ai.adjustment.hide": "Hide",
            "ai.adjustment.undo": "Undo",
            "ai.adjustment.undoing": "Undoing",
            "ai.adjustment.undone": "Undone",
            "ai.adjustment.close": "Close details",
            "ai.adjustment.panelTitle": "AI adjustment details",
            "ai.adjustment.before": "Before",
            "ai.adjustment.after": "After",
            "ai.adjustment.reason": "Why",
            "ai.adjustment.create_ai_task": "Created task",
            "ai.adjustment.rename_ai_task": "Renamed task",
            "ai.adjustment.assign_ai_relation": "Assigned page",
            "ai.adjustment.reorder_ai_tasks": "Reordered tasks",
            "ai.adjustment.conflict": "Cannot undo because you changed related items after the AI adjustment.",
            "ai.adjustment.failed": "Undo failed. Please try again.",
            "ai.adjustment.empty": "No AI adjustments to show.",
            "ai.settings.title": "AI organization",
            "ai.settings.description": "Configure virtual task organization, model access, and your local key",
            "ai.settings.scopeTitle": "AI only organizes virtual tasks",
            "ai.settings.scope": "AI may update virtual task relationships and AI-managed tasks, but it never opens, closes, moves, groups, or reorders real tabs.",
            "ai.settings.enabled": "Enable AI organization",
            "ai.settings.enabledHint": "When off, no cloud requests are made and local suggestions still work",
            "ai.settings.autoOrganize": "Auto-apply high-confidence changes",
            "ai.settings.autoOrganizeHint": "Only virtual task changes that pass local safety checks are applied",
            "ai.settings.channelTitle": "Model provider",
            "ai.settings.channelHint": "OpenAI-compatible API; the address and model are editable",
            "ai.settings.provider": "OpenAI compatible",
            "ai.settings.baseUrl": "API address",
            "ai.settings.model": "Model",
            "ai.settings.apiKey": "API Key",
            "ai.settings.keyPreserved": "A key is saved; leave blank to keep using it",
            "ai.settings.keyPlaceholder": "Enter API Key",
            "ai.settings.showKey": "Show key",
            "ai.settings.hideKey": "Hide key",
            "ai.settings.clearKey": "Clear key",
            "ai.settings.localKey": "The key stays on this device. It is not synced, exported, logged, or shown in notifications.",
            "ai.settings.previewTitle": "Preview fields sent to AI",
            "ai.settings.previewHint": "Only a locally filtered, minimal candidate set is sent when AI is enabled.",
            "ai.settings.previewPage": "Current page",
            "ai.settings.previewPageFields": "Redacted title, registered domain, and path type",
            "ai.settings.previewTasks": "Candidate tasks",
            "ai.settings.previewTaskFields": "Task name, domain, and a few redacted core-page titles",
            "ai.settings.previewSignals": "Local signals",
            "ai.settings.previewSignalFields": "Aggregated evidence codes, risk codes, and counts",
            "ai.settings.previewNever": "Full URLs, query parameters, page content, typed input, cookies, screenshots, raw behavior events, and the API Key are never sent.",
            "ai.settings.actionHint": "Test the connection before saving changes",
            "ai.settings.testConnection": "Test connection",
            "ai.settings.save": "Save AI settings",
            "ai.settings.loading": "Loading local settings\u2026",
            "ai.settings.saving": "Saving local settings\u2026",
            "ai.settings.testing": "Testing connection\u2026",
            "ai.settings.saved": "AI settings saved on this device.",
            "ai.settings.savedPermissionPending": "Settings saved; allow access to this address before testing the connection.",
            "ai.settings.testSuccess": "Connection successful. This provider is ready.",
            "ai.settings.keyWillClear": "The local key will be cleared when you save.",
            "ai.settings.error.permission": "Access to this address was not granted. You can try again later.",
            "ai.settings.error.unauthorized": "The provider rejected this key. Check or replace the key.",
            "ai.settings.error.paymentRequired": "The provider account has insufficient credit or quota.",
            "ai.settings.error.forbidden": "The provider denied access to this endpoint or model. Check account and model access.",
            "ai.settings.error.quotaOrAccess": "The provider account needs credit or access to this model.",
            "ai.settings.error.upstreamReason": "Provider reason: ",
            "ai.settings.error.badRequest": "The provider rejected the model or request parameters. Check the model name.",
            "ai.settings.error.notFound": "The API address or model endpoint is unavailable. Check the address and model name.",
            "ai.settings.error.rateLimit": "Too many requests. Try again later.",
            "ai.settings.error.server": "The provider is temporarily unavailable. Try again later.",
            "ai.settings.error.timeout": "Connection timed out. Check the address or network.",
            "ai.settings.error.network": "Could not connect. Check the address and network.",
            "ai.settings.error.baseUrl": "The API address must be a valid HTTPS address.",
            "ai.settings.error.invalidSettings": "The AI provider settings are invalid. Check the address, model, and key.",
            "ai.settings.error.invalidResponse": "The provider returned an unreadable response or one that does not match the expected API format.",
            "ai.settings.error.provider": "The provider rejected the request without a recognizable error type.",
            "ai.settings.error.keyRequired": "Enter an API Key or keep the saved key.",
            "ai.settings.error.model": "Enter a model name.",
            "ai.settings.error.load": "Could not load AI settings. Try again.",
            "ai.settings.error.save": "Could not save AI settings. Try again.",
            "ai.settings.error.test": "Connection test failed. Check the settings and try again.",
            "task.newPrompt": "Enter a task name",
            "task.renameHint": "Click to edit title",
            "task.renameAria": "Edit task title: {title}",
            "task.expandPages": "Show all tabs",
            "task.collapsePages": "Collapse to one row",
            "task.undoLastChange": "Undo last task change",
            "task.dragToReorder": "Drag to reorder tasks",
            "task.dragDisabledByFilter": "Use manual order and clear filters to drag",
            "task.moveUp": "Move task up",
            "task.moveDown": "Move task down",
            "task.openAll": "Open all",
            "task.closeAll": "Close all",
            "task.more": "More",
            "task.dissolve": "Dissolve task",
            "task.removePage": "Remove from task",
            "task.source.manual": "Manual classification",
            "task.source.smart": "Smart classification",
            "suggestion.source.local": "Local suggestion",
            "suggestion.source.ai": "AI suggestion",
            "suggestion.confidence.high": "High confidence",
            "suggestion.confidence.medium": "Medium confidence",
            "suggestion.reason.opener_link": "Opened from a page in this task",
            "suggestion.reason.stable_object": "Uses the same work item as this task",
            "suggestion.reason.qualified_return": "Frequently switched between this page and the task",
            "suggestion.reason.task_snapshot_restore": "Restored with this task",
            "suggestion.reason.native_group_restore": "Restored with task pages from the same tab group",
            "suggestion.reason.title_overlap": "Title matches this task",
            "suggestion.reason.same_native_group": "In the same tab group as task pages",
            "suggestion.reason.same_window": "In the same window as task pages",
            "suggestion.reason.same_domain": "Uses the same site as task pages",
            "suggestion.reason.risk_suppressed": "Confidence lowered due to uncertainty",
            "suggestion.reason.ambiguous": "Other close matches are available",
            "suggestion.action.addToTask": "Add to task",
            "suggestion.action.alsoLink": "Also link",
            "suggestion.action.reject": "Reject",
            "suggestion.action.undo": "Undo",
            "suggestion.batch.enter": "Batch process",
            "suggestion.batch.select": "Select this suggestion",
            "suggestion.batch.selectAll": "Select current suggestions",
            "suggestion.batch.count": "{count} selected",
            "suggestion.batch.accept": "Add selected to tasks",
            "suggestion.batch.reject": "Reject selected",
            "suggestion.batch.cancel": "Cancel batch processing",
            "suggestion.batch.running": "Processing {count} suggestions",
            "suggestion.batch.limit": "Select up to {count} suggestions at once",
            "suggestion.label.addToTask": "Add to \u201C{task}\u201D",
            "suggestion.label.chooseTask": "Choose the task that best matches your intent",
            "suggestion.label.choosePrimary": "Choose the primary task for this page",
            "suggestion.label.multiAssociate": "This page may also belong to these tasks",
            "suggestion.label.relatedPage": "\u201C{page}\u201D has additional task candidates",
            "suggestion.notice.rejected": "Suggestion rejected",
            "suggestion.notice.accepted": "Added to task",
            "suggestion.state.loading": "Analyzing",
            "suggestion.aria.chooseTask": "Choose task: {task}",
            "suggestion.aria.undoAccepted": "Undo smart classification: {task}",
            "suggestion.error.expired": "Suggestion expired",
            "suggestion.error.conflict": "Something changed. Try again.",
            "suggestion.error.failed": "Suggestion action failed. Try again.",
            "suggestion.why": "Why this suggestion",
            "toast.suggestionAccepted": "Added to task",
            "toast.suggestionRejected": "Suggestion rejected",
            "toast.suggestionUndone": "Suggestion action undone",
            "toast.suggestionBatchSuccess": "Processed {count} suggestions",
            "toast.suggestionBatchPartial": "{succeeded} succeeded, {failed} failed",
            "task.pageMoveUp": "Move page up",
            "task.pageMoveDown": "Move page down",
            "task.chooseNewPrimary": "Choose a new primary task",
            "task.relation.primary": "Primary task",
            "task.relation.primaryHint": "The primary task for this page",
            "task.relation.assign": "Add to task\u2026",
            "task.relation.move": "Move to task\u2026",
            "task.relation.share": "Also link to task\u2026",
            "task.relation.makePrimary": "Make primary task",
            "task.relation.assignHint": "Choose the primary task for this page.",
            "task.relation.moveHint": "The target becomes primary and the current task link is removed. The real tab stays where it is.",
            "task.relation.shareHint": "Keep the current primary task and add another task link.",
            "task.relation.dropChoice": "Choose how to add to \u201C{task}\u201D",
            "task.relation.moveHere": "Move to this task",
            "task.relation.shareHere": "Also link to this task",
            "common.back": "Back",
            "task.confirmDissolve": "Dissolve this task? Real tabs will stay open, and the task group can be restored from the recycle bin.",
            "task.confirmDeleteTrash": "Delete this recycled item permanently? This cannot be undone.",
            "toast.taskAssigned": "Added to task manually",
            "toast.taskRelationMoved": "Task link moved; the real tab stayed in place",
            "toast.taskRelationShared": "Page linked to another task",
            "toast.taskPrimaryChanged": "Primary task updated",
            "toast.taskRemoved": "Removed from task without closing the real tab",
            "toast.taskStatusChanged": "Task status updated",
            "toast.taskDomainChanged": "Task domain updated",
            "toast.taskReordered": "Task order updated",
            "toast.taskPagesReordered": "Task page order updated",
            "toast.taskCreated": "Task created",
            "toast.taskRenamed": "Task updated",
            "toast.taskMissing": "This task no longer exists. Close the dialog and try again.",
            "toast.taskDissolved": "Task dissolved and recoverable; real tabs remain open",
            "toast.taskRestored": "Task group restored",
            "toast.trashRestored": "Recycled item restored",
            "toast.trashRestoreAll": "Recycle bin restored",
            "toast.trashDeleted": "Recycled item permanently deleted",
            "toast.trashLoadFailed": "Could not load the recycle bin. Please try again.",
            "toast.trashActionFailed": "Recycle bin action failed. Please try again.",
            "toast.taskOpened": "Task pages opened",
            "toast.taskAlreadyOpen": "All task pages are already open",
            "toast.taskNoOpenTabs": "No open task tabs to close",
            "toast.taskTabsClosed": "Open task tabs closed",
            "toast.taskChangeFailed": "Task update failed",
            "toast.taskChangeUndone": "Last task change undone",
            "toast.taskOperationPending": "The operation is still syncing. Reopen the panel shortly to verify.",
            "toast.taskTrashCleanupPending": "The task was restored, but its trash record is still being cleaned up.",
            "toast.tabPinned": "Tab pinned",
            "toast.tabUnpinned": "Tab unpinned",
            "toast.tabCommandFailed": "Tab action failed. Please try again.",
            "toast.tabNotOpen": "This task page is not currently open",
            "toast.taskOpenFailed": "Could not open task pages. Please try again.",
            "toast.taskCloseFailed": "Could not close task tabs. Please try again.",
            "toast.layoutSyncFailed": "Layout settings could not be synchronized",
            "tab.activate": "Switch to {title}",
            "tab.close": "Close tab",
            "tab.pinned": "Pinned",
            "tab.dockFixed": "Pinned to Web Dock",
            "tab.more": "More actions",
            "tab.removeFromDock": "Unpin from Web Dock",
            "tab.addToDock": "Pin to Web Dock",
            "task.untitled": "Untitled task",
            "task.status.active": "Active",
            "task.status.paused": "Paused",
            "task.status.done": "Done",
            "task.status.pending": "Inbox",
            "domain.work": "Work",
            "domain.study": "Study",
            "domain.life": "Life",
            "domain.interest": "Interests",
            "domain.admin": "Admin",
            "domain.other": "Other",
            "guidance.eyebrow": "Proactive reminder",
            "guidance.close": "Dismiss reminder",
            "guidance.muteToday": "Not again today",
            "guidance.openWorkbench": "Hold Alt or click to open",
            "guidance.frequent.title": "Switching fast? Find the right tab at a glance.",
            "guidance.frequent.message": "Find the pages you are switching between at a glance.",
            "guidance.frequent.action": "Hold Alt or click to open",
            "guidance.startup.title": "Pick up where you left off. TabFlow is ready.",
            "guidance.startup.message": "Pick up where you left off. TabFlow is ready.",
            "guidance.startup.action": "Hold Alt or click to open",
            "guidance.20.title": "More tabs open? A task view keeps them clear.",
            "guidance.20.message": "More tabs open? A task view keeps them clear.",
            "guidance.20.action": "Hold Alt or click to open",
            "guidance.30.title": "Tab bar getting crowded? TabFlow finds pages fast.",
            "guidance.30.message": "Tab bar getting crowded? TabFlow finds pages fast.",
            "guidance.30.action": "Hold Alt or click to open",
            taskDialogCreateTitle: "New task",
            taskDialogRenameTitle: "Edit task",
            taskDialogTitleLabel: "Task name",
            taskDialogTitlePlaceholder: "Enter a task name",
            taskDialogDomainLabel: "Choose a domain",
            taskDialogCreate: "Create task",
            taskDialogSave: "Save changes",
            taskDialogSaving: "Saving\u2026",
            taskDialogRequired: "Enter a task name",
            taskDialogSubmitFailed: "Could not save. Try again.",
            taskDomain_work: "Work",
            taskDomain_study: "Study",
            taskDomain_life: "Life",
            taskDomain_interest: "Interests",
            taskDomain_admin: "Admin",
            taskDomain_other: "Other",
            commonCancel: "Cancel"
          })
        });
        function normalizeLanguage(value) {
          const language = String(value || "").trim().toLowerCase();
          return language.startsWith("zh") ? "zh" : "en";
        }
        function resolveLanguage({ manual, browserLanguage, navigatorLanguage } = {}) {
          if (manual === "zh" || manual === "zh-CN") return "zh";
          if (manual === "en") return "en";
          return normalizeLanguage(browserLanguage || navigatorLanguage || "en");
        }
        function createTranslator(language, messages = MESSAGES) {
          const locale = normalizeLanguage(language);
          return function translate(key, fallback = key) {
            const safeFallback = typeof fallback === "string" ? fallback : key;
            return messages[locale]?.[key] ?? messages.en?.[key] ?? safeFallback;
          };
        }
        return Object.freeze({ LANGUAGE_STORAGE_KEY, MESSAGES, normalizeLanguage, resolveLanguage, createTranslator });
      });
    }
  });

  // src/shared/active-trigger-logic.js
  var require_active_trigger_logic = __commonJS({
    "src/shared/active-trigger-logic.js"(exports, module) {
      (function attachActiveTriggerLogic(root, factory) {
        const api = factory();
        if (typeof module === "object" && module.exports) module.exports = api;
        root.TfaActiveTriggerLogic = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createActiveTriggerLogic() {
        "use strict";
        const PROMPT_STORAGE_KEY = "tfa_active_guidance_prompt";
        const STATE_STORAGE_KEY = "tfa_active_trigger_state";
        const DISMISS_MESSAGE = "ACTIVE_GUIDANCE_DISMISS";
        const MUTE_TODAY_MESSAGE = "ACTIVE_GUIDANCE_MUTE_TODAY";
        const CLAIM_MESSAGE = "ACTIVE_GUIDANCE_CLAIM";
        const CONFIRM_MESSAGE = "ACTIVE_GUIDANCE_CONFIRM";
        const RELEASE_MESSAGE = "ACTIVE_GUIDANCE_RELEASE";
        const TEST_PROMPT_MESSAGE = "ACTIVE_GUIDANCE_TEST_PROMPT";
        const TEST_WINDOW_MESSAGE = "ACTIVE_GUIDANCE_TEST_WINDOW";
        const SWITCH_WINDOW_MS = 5e3;
        const SWITCH_THRESHOLD = 4;
        const SWITCH_COOLDOWN_MS = 5 * 6e4;
        const OVERLOAD_COOLDOWN_MS = 2 * 60 * 6e4;
        const DAILY_GUIDANCE_LIMIT = 2;
        const LOCAL_WORK_WINDOWS = Object.freeze([
          Object.freeze({ startMinute: 8 * 60, endMinute: 12 * 60 }),
          Object.freeze({ startMinute: 13 * 60, endMinute: 19 * 60 })
        ]);
        const PROMPT_PRIORITY = Object.freeze({
          "frequent-switch": 10,
          startup: 20,
          "overload-20": 30,
          "overload-30": 40
        });
        const PROMPT_TTL_MS = Object.freeze({
          "frequent-switch": 10 * 6e4,
          startup: 12 * 60 * 6e4,
          "overload-20": 24 * 60 * 6e4,
          "overload-30": 24 * 60 * 6e4
        });
        function finiteNonNegative(value, fallback = 0) {
          const number = Number(value);
          return Number.isFinite(number) && number >= 0 ? number : fallback;
        }
        function normalizeState(value, fallbackTabCount = null) {
          const source = value && typeof value === "object" ? value : {};
          const windowTabCounts = {};
          if (source.windowTabCounts && typeof source.windowTabCounts === "object" && !Array.isArray(source.windowTabCounts)) {
            for (const [windowId, countValue] of Object.entries(source.windowTabCounts)) {
              const count = Number(countValue);
              if (/^\d+$/.test(windowId) && Number.isInteger(count) && count >= 0) windowTabCounts[windowId] = count;
            }
          }
          const storedCount = source.previousTabCount === null || source.previousTabCount === void 0 ? NaN : Number(source.previousTabCount);
          const fallbackCount = Number(fallbackTabCount);
          return {
            version: 4,
            previousTabCount: Number.isInteger(storedCount) && storedCount >= 0 ? storedCount : Number.isInteger(fallbackCount) && fallbackCount >= 0 ? fallbackCount : null,
            windowTabCounts,
            windowSessionId: typeof source.windowSessionId === "string" ? source.windowSessionId : "",
            lastFrequentPromptAt: finiteNonNegative(source.lastFrequentPromptAt),
            lastAlertAt20: finiteNonNegative(source.lastAlertAt20),
            lastAlertAt30: finiteNonNegative(source.lastAlertAt30),
            lastFrequentPromptId: typeof source.lastFrequentPromptId === "string" ? source.lastFrequentPromptId : "",
            lastAlertPromptId20: typeof source.lastAlertPromptId20 === "string" ? source.lastAlertPromptId20 : "",
            lastAlertPromptId30: typeof source.lastAlertPromptId30 === "string" ? source.lastAlertPromptId30 : "",
            guidanceDay: typeof source.guidanceDay === "string" ? source.guidanceDay : "",
            guidanceCount: Math.min(
              DAILY_GUIDANCE_LIMIT,
              Math.floor(finiteNonNegative(source.guidanceCount))
            ),
            guidancePromptIds: Array.isArray(source.guidancePromptIds) ? [...new Set(source.guidancePromptIds.filter((id) => typeof id === "string" && id).slice(-DAILY_GUIDANCE_LIMIT))] : [],
            mutedGuidanceDay: typeof source.mutedGuidanceDay === "string" ? source.mutedGuidanceDay : typeof source.mutedOverloadDay === "string" ? source.mutedOverloadDay : "",
            // Retained for one schema generation so pre-V2 readers do not lose a mute.
            mutedOverloadDay: typeof source.mutedOverloadDay === "string" ? source.mutedOverloadDay : typeof source.mutedGuidanceDay === "string" ? source.mutedGuidanceDay : ""
          };
        }
        function localDateParts(timestamp, localTimeOptions = {}) {
          const date = new Date(finiteNonNegative(timestamp, Date.now()));
          const offsetValue = localTimeOptions?.utcOffsetMinutes;
          const offset = typeof offsetValue === "number" ? offsetValue : Number.NaN;
          if (Number.isFinite(offset) && offset >= -24 * 60 && offset <= 24 * 60) {
            const shifted = new Date(date.getTime() + offset * 6e4);
            return {
              year: shifted.getUTCFullYear(),
              month: shifted.getUTCMonth() + 1,
              day: shifted.getUTCDate(),
              hour: shifted.getUTCHours(),
              minute: shifted.getUTCMinutes()
            };
          }
          return {
            year: date.getFullYear(),
            month: date.getMonth() + 1,
            day: date.getDate(),
            hour: date.getHours(),
            minute: date.getMinutes()
          };
        }
        function localDayKey(timestamp, localTimeOptions) {
          const parts = localDateParts(timestamp, localTimeOptions);
          const year = parts.year;
          const month = String(parts.month).padStart(2, "0");
          const day = String(parts.day).padStart(2, "0");
          return `${year}-${month}-${day}`;
        }
        function isWithinLocalWorkHours(timestamp, localTimeOptions) {
          const parts = localDateParts(timestamp, localTimeOptions);
          const minute = parts.hour * 60 + parts.minute;
          return LOCAL_WORK_WINDOWS.some((window2) => minute >= window2.startMinute && minute < window2.endMinute);
        }
        function guidanceCountForDay(state, timestamp, localTimeOptions) {
          const normalized = normalizeState(state);
          return normalized.guidanceDay === localDayKey(timestamp, localTimeOptions) ? normalized.guidanceCount : 0;
        }
        function canShowAutomatedPrompt(state, timestamp, localTimeOptions) {
          const normalized = normalizeState(state);
          const now = finiteNonNegative(timestamp, Date.now());
          return !isMutedToday(normalized, now, localTimeOptions) && isWithinLocalWorkHours(now, localTimeOptions) && guidanceCountForDay(normalized, now, localTimeOptions) < DAILY_GUIDANCE_LIMIT;
        }
        function markAutomatedPromptShown(state, timestamp, promptId = "", localTimeOptions) {
          const normalized = normalizeState(state);
          const now = finiteNonNegative(timestamp, Date.now());
          const day = localDayKey(now, localTimeOptions);
          const count = normalized.guidanceDay === day ? normalized.guidanceCount : 0;
          const ids = normalized.guidanceDay === day ? normalized.guidancePromptIds : [];
          const id = typeof promptId === "string" ? promptId : "";
          if (id && ids.includes(id)) return normalized;
          return {
            ...normalized,
            guidanceDay: day,
            guidanceCount: Math.min(DAILY_GUIDANCE_LIMIT, count + 1),
            guidancePromptIds: id ? [...ids, id].slice(-DAILY_GUIDANCE_LIMIT) : ids
          };
        }
        function rollbackAutomatedPromptShown(state, timestamp, promptId, localTimeOptions) {
          const normalized = normalizeState(state);
          const id = typeof promptId === "string" ? promptId : "";
          const day = localDayKey(timestamp, localTimeOptions);
          if (!id || normalized.guidanceDay !== day || !normalized.guidancePromptIds.includes(id)) return normalized;
          return {
            ...normalized,
            guidanceCount: Math.max(0, normalized.guidanceCount - 1),
            guidancePromptIds: normalized.guidancePromptIds.filter((value) => value !== id)
          };
        }
        function recordActivation(timestamps, timestamp) {
          const now = finiteNonNegative(timestamp, Date.now());
          const recent = (Array.isArray(timestamps) ? timestamps : []).map((value) => finiteNonNegative(value, -1)).filter((value) => value >= 0 && value >= now - SWITCH_WINDOW_MS && value <= now);
          recent.push(now);
          return { timestamps: recent, shouldPrompt: recent.length > SWITCH_THRESHOLD };
        }
        function crossedOverloadThreshold(previousCount, currentCount) {
          if (previousCount === null || previousCount === void 0 || previousCount === "") return null;
          const previous = Number(previousCount);
          const current = Number(currentCount);
          if (!Number.isInteger(previous) || previous < 0 || !Number.isInteger(current) || current < 0) return null;
          if (previous === 29 && current === 30) return 30;
          if (previous === 19 && current === 20) return 20;
          return null;
        }
        function currentOverloadThreshold(tabCount) {
          const count = Number(tabCount);
          if (!Number.isInteger(count) || count < 20) return null;
          return count >= 30 ? 30 : 20;
        }
        function canShowFrequentPrompt(state, timestamp, localTimeOptions) {
          const normalized = normalizeState(state);
          const now = finiteNonNegative(timestamp, Date.now());
          if (!canShowAutomatedPrompt(normalized, now, localTimeOptions)) return false;
          return !normalized.lastFrequentPromptAt || now - normalized.lastFrequentPromptAt >= SWITCH_COOLDOWN_MS;
        }
        function canShowOverloadPrompt(state, threshold, timestamp, localTimeOptions) {
          const normalized = normalizeState(state);
          const now = finiteNonNegative(timestamp, Date.now());
          if (!canShowAutomatedPrompt(normalized, now, localTimeOptions)) return false;
          const lastAlertAt = threshold === 30 ? normalized.lastAlertAt30 : normalized.lastAlertAt20;
          return !lastAlertAt || now - lastAlertAt >= OVERLOAD_COOLDOWN_MS;
        }
        function markFrequentPrompt(state, timestamp, promptId = "") {
          return {
            ...normalizeState(state),
            lastFrequentPromptAt: finiteNonNegative(timestamp, Date.now()),
            lastFrequentPromptId: typeof promptId === "string" ? promptId : ""
          };
        }
        function markOverloadPrompt(state, threshold, timestamp, promptId = "") {
          const next = normalizeState(state);
          const field = threshold === 30 ? "lastAlertAt30" : "lastAlertAt20";
          const idField = threshold === 30 ? "lastAlertPromptId30" : "lastAlertPromptId20";
          next[field] = finiteNonNegative(timestamp, Date.now());
          next[idField] = typeof promptId === "string" ? promptId : "";
          return next;
        }
        function rollbackPromptCooldown(state, prompt, rollback = {}) {
          const normalized = normalizeState(state);
          const id = typeof prompt?.id === "string" ? prompt.id : "";
          if (!id) return normalized;
          if (prompt.type === "frequent-switch" && normalized.lastFrequentPromptId === id) {
            normalized.lastFrequentPromptAt = finiteNonNegative(rollback.lastFrequentPromptAt);
            normalized.lastFrequentPromptId = typeof rollback.lastFrequentPromptId === "string" ? rollback.lastFrequentPromptId : "";
          }
          if (prompt.type === "overload-20" && normalized.lastAlertPromptId20 === id) {
            normalized.lastAlertAt20 = finiteNonNegative(rollback.lastAlertAt20);
            normalized.lastAlertPromptId20 = typeof rollback.lastAlertPromptId20 === "string" ? rollback.lastAlertPromptId20 : "";
          }
          if (prompt.type === "overload-30" && normalized.lastAlertPromptId30 === id) {
            normalized.lastAlertAt30 = finiteNonNegative(rollback.lastAlertAt30);
            normalized.lastAlertPromptId30 = typeof rollback.lastAlertPromptId30 === "string" ? rollback.lastAlertPromptId30 : "";
          }
          return normalized;
        }
        function isMutedToday(state, timestamp, localTimeOptions) {
          const normalized = normalizeState(state);
          return normalized.mutedGuidanceDay === localDayKey(timestamp, localTimeOptions);
        }
        function muteToday(state, timestamp, localTimeOptions) {
          const day = localDayKey(timestamp, localTimeOptions);
          return { ...normalizeState(state), mutedGuidanceDay: day, mutedOverloadDay: day };
        }
        function muteOverloadToday(state, timestamp, localTimeOptions) {
          return muteToday(state, timestamp, localTimeOptions);
        }
        function createPrompt(type, timestamp, options = {}) {
          const now = finiteNonNegative(timestamp, Date.now());
          const normalizedType = type === "overload" ? Number(options.threshold) >= 30 ? "overload-30" : "overload-20" : type;
          const priority = PROMPT_PRIORITY[normalizedType];
          if (!priority) return null;
          return Object.freeze({
            id: `${normalizedType}:${now}`,
            type: normalizedType,
            threshold: normalizedType.startsWith("overload-") ? Number(normalizedType.slice(-2)) : null,
            priority,
            createdAt: now,
            expiresAt: now + PROMPT_TTL_MS[normalizedType],
            allowMute: true,
            automated: options.automated !== false,
            claim: null
          });
        }
        function normalizePrompt(value, timestamp = Date.now()) {
          if (!value || typeof value !== "object" || !PROMPT_PRIORITY[value.type]) return null;
          const createdAt = finiteNonNegative(value.createdAt, 0);
          const expiresAt = finiteNonNegative(value.expiresAt, 0);
          if (!createdAt || !expiresAt || expiresAt <= finiteNonNegative(timestamp, Date.now())) return null;
          const claimTabId = Number(value.claim?.tabId);
          const claimedAt = finiteNonNegative(value.claim?.claimedAt);
          const documentId = typeof value.claim?.documentId === "string" && value.claim.documentId ? value.claim.documentId : "";
          const sourceUrl = typeof value.claim?.sourceUrl === "string" && value.claim.sourceUrl ? value.claim.sourceUrl : "";
          const rollback = value.claim?.rollback && typeof value.claim.rollback === "object" ? { ...value.claim.rollback } : null;
          const claim = Number.isInteger(claimTabId) && claimTabId >= 0 && claimedAt > 0 ? {
            tabId: claimTabId,
            claimedAt,
            counted: value.claim?.counted === true,
            visible: value.claim?.visible === true,
            ...documentId ? { documentId } : {},
            ...sourceUrl ? { sourceUrl } : {},
            ...rollback ? { rollback } : {}
          } : null;
          return {
            id: typeof value.id === "string" && value.id ? value.id : `${value.type}:${createdAt}`,
            type: value.type,
            threshold: value.type.startsWith("overload-") ? Number(value.type.slice(-2)) : null,
            priority: PROMPT_PRIORITY[value.type],
            createdAt,
            expiresAt,
            allowMute: true,
            // Production prompts from the previous schema did not persist this flag.
            // Only an explicit false denotes a manual/debug prompt that bypasses gates.
            automated: value.automated !== false,
            claim
          };
        }
        function shouldReplacePrompt(current, next, timestamp = Date.now()) {
          const currentPrompt = normalizePrompt(current, timestamp);
          const nextPrompt = normalizePrompt(next, timestamp);
          if (!nextPrompt) return false;
          if (!currentPrompt) return true;
          return nextPrompt.priority > currentPrompt.priority;
        }
        return Object.freeze({
          PROMPT_STORAGE_KEY,
          STATE_STORAGE_KEY,
          DISMISS_MESSAGE,
          MUTE_TODAY_MESSAGE,
          CLAIM_MESSAGE,
          CONFIRM_MESSAGE,
          RELEASE_MESSAGE,
          TEST_PROMPT_MESSAGE,
          TEST_WINDOW_MESSAGE,
          SWITCH_WINDOW_MS,
          SWITCH_THRESHOLD,
          SWITCH_COOLDOWN_MS,
          OVERLOAD_COOLDOWN_MS,
          DAILY_GUIDANCE_LIMIT,
          LOCAL_WORK_WINDOWS,
          PROMPT_PRIORITY,
          PROMPT_TTL_MS,
          normalizeState,
          localDateParts,
          localDayKey,
          recordActivation,
          isWithinLocalWorkHours,
          guidanceCountForDay,
          canShowAutomatedPrompt,
          markAutomatedPromptShown,
          rollbackAutomatedPromptShown,
          crossedOverloadThreshold,
          currentOverloadThreshold,
          canShowFrequentPrompt,
          canShowOverloadPrompt,
          markFrequentPrompt,
          markOverloadPrompt,
          rollbackPromptCooldown,
          isMutedToday,
          muteToday,
          muteOverloadToday,
          createPrompt,
          normalizePrompt,
          shouldReplacePrompt
        });
      });
    }
  });

  // src/content/active-guidance-runtime.js
  var require_active_guidance_runtime = __commonJS({
    "src/content/active-guidance-runtime.js"(exports, module) {
      (function attachActiveGuidanceRuntime(rootScope, factory) {
        const api = factory(rootScope);
        if (typeof module === "object" && module.exports) module.exports = api;
        rootScope.TfaActiveGuidanceRuntime = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createActiveGuidanceRuntimeModule(rootScope) {
        "use strict";
        const HOST_ID = "tfa-active-guidance-host";
        const ACTIVE_GUIDANCE_SHORTCUT_EVENT = "tfa:active-guidance-shortcut";
        const LIGHT_THEMES = /* @__PURE__ */ new Set(["snow", "paper", "pro", "light"]);
        const DARK_THEMES = /* @__PURE__ */ new Set(["noir", "ocean", "space", "crypto", "dark"]);
        const escapeHtml = (value) => String(value ?? "").replace(/[&<>"']/g, (char) => ({
          "&": "&amp;",
          "<": "&lt;",
          ">": "&gt;",
          '"': "&quot;",
          "'": "&#39;"
        })[char]);
        function createActiveGuidanceRuntime(options = {}) {
          const chromeApi = options.chrome || rootScope.chrome;
          const documentRef = options.document || rootScope.document;
          const windowRef = options.window || rootScope.window;
          const logic = options.logic || rootScope.TfaActiveTriggerLogic;
          const i18n = options.i18n || rootScope.TfaI18n;
          const now = typeof options.now === "function" ? options.now : () => Date.now();
          const openTimeoutMs = Math.max(10, Number(options.openTimeoutMs) || 3e3);
          const revealPollMs = Math.max(10, Number(options.revealPollMs) || 25);
          const setTimer = windowRef?.setTimeout?.bind(windowRef) || setTimeout;
          const clearTimer = windowRef?.clearTimeout?.bind(windowRef) || clearTimeout;
          if (!chromeApi?.storage?.local || !chromeApi?.storage?.sync || !documentRef || !logic || !i18n) {
            throw new Error("guidance runtime dependencies unavailable");
          }
          let prompt = null;
          let host = null;
          let shadowRoot = null;
          let theme = "dark";
          let themePreference = "system";
          let started = false;
          let destroyed = false;
          let opening = false;
          let listenersAttached = false;
          let openAttempt = 0;
          let openTimer = null;
          let cancelOpenWait = null;
          let activeOpenAttempt = null;
          const consumedPromptIds = /* @__PURE__ */ new Set();
          const dockTransitionRestores = /* @__PURE__ */ new Set();
          let lifecycleEpoch = 0, promptRevision = 0, themeRevision = 0, languageRevision = 0;
          let renderedPromptId = "";
          let translator = i18n.createTranslator("zh");
          const colorScheme = windowRef?.matchMedia?.("(prefers-color-scheme: dark)") || null;
          const normalizeTheme = (value) => {
            const normalized = String(value || "").toLowerCase();
            if (LIGHT_THEMES.has(normalized)) return "light";
            if (DARK_THEMES.has(normalized)) return "dark";
            return "system";
          };
          const selectedTheme = (value) => {
            const preference = normalizeTheme(value);
            return preference === "system" ? colorScheme?.matches ? "dark" : "light" : preference;
          };
          const onColorSchemeChange = () => {
            if (themePreference !== "system" || destroyed) return;
            theme = selectedTheme(themePreference);
            render();
          };
          const onShortcut = (event) => {
            if (!prompt || opening) return;
            if (event?.detail && typeof event.detail === "object") event.detail.handled = true;
            void openWorkbench();
            event.preventDefault?.();
          };
          function promptSuffix(value) {
            if (value?.type === "overload-30") return "30";
            if (value?.type === "overload-20") return "20";
            if (value?.type === "startup") return "startup";
            return "frequent";
          }
          function copyFor(value) {
            const suffix = promptSuffix(value);
            return {
              sentence: translator(`guidance.${suffix}.title`),
              action: translator("guidance.openWorkbench"),
              mute: translator("guidance.muteToday")
            };
          }
          function clearHost() {
            host?.remove?.();
            host = null;
            shadowRoot = null;
            renderedPromptId = "";
          }
          function hideDockDuringOpen() {
            const saved = [];
            const suppressed = /* @__PURE__ */ new Set();
            const observedRoots = /* @__PURE__ */ new Map();
            const MutationObserverConstructor = options.MutationObserver || windowRef?.MutationObserver;
            let restored = false;
            const observe = (root) => {
              if (!root || typeof MutationObserverConstructor !== "function" || observedRoots.has(root)) return;
              const observer = new MutationObserverConstructor(() => suppress());
              try {
                observer.observe(root, { childList: true, subtree: true });
                observedRoots.set(root, observer);
              } catch (_error) {
                observer.disconnect?.();
              }
            };
            function suppress() {
              if (restored) return false;
              observe(documentRef.documentElement);
              for (const candidateHost of documentRef.querySelectorAll?.('[data-tfa-host="true"]') || []) {
                const candidateRoot = candidateHost?.shadowRoot;
                observe(candidateRoot);
                const matches = candidateRoot?.querySelectorAll?.(".web-dock-shell") || [];
                for (const dock of matches) {
                  if (!dock?.style || suppressed.has(dock)) continue;
                  suppressed.add(dock);
                  saved.push([
                    dock,
                    dock.style.getPropertyValue?.("visibility") || "",
                    dock.style.getPropertyPriority?.("visibility") || ""
                  ]);
                  dock.style.setProperty?.("visibility", "hidden", "important");
                }
              }
              return true;
            }
            suppress();
            const restore = () => {
              if (restored) return false;
              restored = true;
              for (const observer of observedRoots.values()) observer.disconnect?.();
              observedRoots.clear();
              for (const [dock, value, priority] of saved) {
                if (!dock?.style) continue;
                if (value) dock.style.setProperty?.("visibility", value, priority);
                else dock.style.removeProperty?.("visibility");
              }
              dockTransitionRestores.delete(restore);
              return true;
            };
            restore.suppress = suppress;
            dockTransitionRestores.add(restore);
            return restore;
          }
          function ensureHost() {
            if (host?.isConnected && shadowRoot) return;
            documentRef.getElementById?.(HOST_ID)?.remove?.();
            host = documentRef.createElement("div");
            host.id = HOST_ID;
            host.style.cssText = "all:initial;position:fixed;inset:0;z-index:2147483646;pointer-events:none;";
            shadowRoot = host.attachShadow({ mode: "open" });
            documentRef.documentElement.appendChild(host);
          }
          function render() {
            prompt = logic.normalizePrompt(prompt, now());
            if (destroyed || !prompt) {
              clearHost();
              return false;
            }
            ensureHost();
            host.setAttribute("data-theme", theme);
            const copy = copyFor(prompt);
            const suffix = promptSuffix(prompt);
            if (renderedPromptId === prompt.id && shadowRoot.querySelector?.(".card")) {
              const card = shadowRoot.querySelector(".card");
              card?.setAttribute?.("data-kind", suffix);
              shadowRoot.querySelector(".visual")?.setAttribute?.("data-kind", suffix);
              card?.setAttribute?.("aria-label", copy.sentence);
              const sentence = shadowRoot.querySelector(".sentence");
              const action = shadowRoot.querySelector(".action");
              const mute = shadowRoot.querySelector(".mute");
              const close = shadowRoot.querySelector(".close");
              if (sentence) sentence.textContent = copy.sentence;
              if (action) action.textContent = copy.action;
              if (mute) mute.textContent = copy.mute;
              close?.setAttribute?.("aria-label", translator("guidance.close"));
              return true;
            }
            shadowRoot.innerHTML = `<style>
        :host{--surface:#11151d;--soft:#1c2130;--line:#2d3442;--text:#f5f6fa;--muted:#a7adba;--accent:#8471ef;--accent-hover:#927ff7;--shadow:rgba(0,0,0,.36);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}
        :host([data-theme="light"]){--surface:#fff;--soft:#f2f0fc;--line:#dfe2ea;--text:#20232c;--muted:#676d79;--accent:#705ed9;--accent-hover:#7c68e7;--shadow:rgba(42,46,67,.18)}
        *{box-sizing:border-box}
        .card{position:fixed;top:50%;right:18px;display:grid;grid-template-columns:40px minmax(0,1fr);align-items:center;gap:13px;width:min(410px,calc(100vw - 24px));min-height:108px;padding:15px 42px 14px 15px;border:1px solid var(--line);border-radius:15px;background:var(--surface);box-shadow:0 18px 52px var(--shadow);color:var(--text);pointer-events:auto;transform:translateY(-50%);animation:guidance-in .18s ease-out}
        .visual{display:grid;place-items:center;width:40px;height:40px;border-radius:10px;background:var(--soft)}
        .logo{width:30px;height:30px;color:var(--accent)}
        .content{min-width:0}
        .sentence{margin:0;font-size:13.5px;font-weight:700;line-height:1.45}
        .actions{display:flex;align-items:center;gap:7px;margin-top:10px}
        button{min-height:32px;padding:0 11px;border-radius:8px;font:650 11px/1.2 inherit;white-space:nowrap;cursor:pointer}
        .action{border:1px solid var(--accent);color:#fff;background:var(--accent)}
        .action:hover{background:var(--accent-hover)}
        .mute{border:1px solid transparent;color:var(--muted);background:transparent}
        .mute:hover{color:var(--text);background:var(--soft)}
        .close{position:absolute;right:9px;top:9px;width:29px;min-height:29px;padding:0;border:0;border-radius:8px;color:var(--muted);background:transparent;font-size:19px;font-weight:400}
        .close:hover{color:var(--text);background:var(--soft)}
        button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
        @keyframes guidance-in{from{opacity:0;transform:translateY(calc(-50% + 8px)) scale(.98)}}
        @media(max-width:520px){.card{top:auto;right:12px;bottom:12px;transform:none}.actions{flex-wrap:wrap}.action,.mute{padding-inline:9px}}
        @media(prefers-reduced-motion:reduce){.card{animation:none}}
      </style>
      <aside class="card" data-kind="${escapeHtml(suffix)}" role="dialog" aria-label="${escapeHtml(copy.sentence)}">
        <button class="close" type="button" aria-label="${escapeHtml(translator("guidance.close"))}">\xD7</button>
        <div class="visual" data-kind="${escapeHtml(suffix)}" aria-hidden="true">
          <svg class="logo" viewBox="0 0 30 30" fill="none">
            <rect x="5" y="5" width="20" height="6" rx="2" fill="currentColor" opacity=".72"/>
            <rect x="4" y="12" width="20" height="6" rx="2" fill="currentColor" opacity=".88"/>
            <rect x="3" y="19" width="20" height="6" rx="2" fill="currentColor"/>
          </svg>
        </div>
        <div class="content">
          <p class="sentence">${escapeHtml(copy.sentence)}</p>
          <div class="actions">
            <button class="action" type="button">${escapeHtml(copy.action)}</button>
            <button class="mute" type="button">${escapeHtml(copy.mute)}</button>
          </div>
        </div>
      </aside>`;
            shadowRoot.querySelector(".mute")?.addEventListener("click", muteToday);
            shadowRoot.querySelector(".action")?.addEventListener("click", openWorkbench);
            shadowRoot.querySelector(".close")?.addEventListener("click", dismiss);
            renderedPromptId = prompt.id;
            return true;
          }
          async function send(type, promptId) {
            try {
              return await chromeApi.runtime.sendMessage({ type, promptId });
            } catch (_error) {
              return { ok: false };
            }
          }
          function restoreExactPrompt(current) {
            if (!destroyed && !prompt && current && !consumedPromptIds.has(current.id)) {
              prompt = current;
              render();
            }
          }
          function defaultWorkbenchRevealed() {
            for (const candidateHost of documentRef.querySelectorAll?.('[data-tfa-host="true"]') || []) {
              const overlay = candidateHost?.shadowRoot?.querySelector?.("#overlay.show");
              if (overlay && overlay.hidden !== true && overlay.getAttribute?.("aria-hidden") !== "true") return true;
            }
            return false;
          }
          function workbenchRevealed() {
            try {
              return (typeof options.isWorkbenchRevealed === "function" ? options.isWorkbenchRevealed() : defaultWorkbenchRevealed()) === true;
            } catch (_error) {
              return false;
            }
          }
          function stopRevealPoll(attempt) {
            if (attempt?.revealTimer != null) clearTimer(attempt.revealTimer);
            if (attempt) attempt.revealTimer = null;
          }
          function stopDockReleasePoll(attempt) {
            if (attempt?.dockReleaseTimer != null) clearTimer(attempt.dockReleaseTimer);
            if (attempt) attempt.dockReleaseTimer = null;
          }
          function releaseDockWhenCovered(attempt) {
            const poll = () => {
              if (destroyed) {
                stopDockReleasePoll(attempt);
                attempt.restoreDock?.();
                return;
              }
              attempt.restoreDock?.suppress?.();
              if (workbenchRevealed()) {
                stopDockReleasePoll(attempt);
                attempt.restoreDock?.();
                return;
              }
              attempt.dockReleaseTimer = setTimer(poll, revealPollMs);
              attempt.dockReleaseTimer?.unref?.();
            };
            poll();
          }
          function markWorkbenchCommitted(attempt) {
            if (!attempt || attempt.committed) return Boolean(attempt?.committed);
            attempt.committed = true;
            consumedPromptIds.add(attempt.id);
            if (prompt?.id === attempt.id) {
              prompt = null;
              render();
            }
            stopRevealPoll(attempt);
            return true;
          }
          function startRevealPoll(attempt) {
            const poll = () => {
              if (destroyed || !attempt.pending) {
                stopRevealPoll(attempt);
                return;
              }
              attempt.restoreDock?.suppress?.();
              if (workbenchRevealed()) {
                dismissCommittedPrompt(attempt);
                return;
              }
              attempt.revealTimer = setTimer(poll, revealPollMs);
            };
            poll();
          }
          function dismissCommittedPrompt(attempt) {
            markWorkbenchCommitted(attempt);
            releaseDockWhenCovered(attempt);
            if (!attempt.dismissRequested) {
              attempt.dismissRequested = true;
              void send(logic.DISMISS_MESSAGE, attempt.id);
            }
            return true;
          }
          async function consumePrompt(type, current) {
            if (!current) return false;
            if (prompt?.id === current.id) {
              prompt = null;
              render();
            }
            const result = await send(type, current.id);
            if (result?.ok === true) {
              consumedPromptIds.add(current.id);
              return true;
            }
            restoreExactPrompt(current);
            return false;
          }
          async function dismiss() {
            return consumePrompt(logic.DISMISS_MESSAGE, prompt);
          }
          async function muteToday() {
            return consumePrompt(logic.MUTE_TODAY_MESSAGE, prompt);
          }
          async function openWorkbench() {
            const current = prompt;
            if (!current || opening) return false;
            const attempt = {
              number: ++openAttempt,
              id: current.id,
              current,
              pending: true,
              timedOut: false,
              committed: false,
              dismissRequested: false,
              revealTimer: null,
              dockReleaseTimer: null,
              restoreDock: hideDockDuringOpen()
            };
            activeOpenAttempt = attempt;
            opening = true;
            prompt = null;
            render();
            startRevealPoll(attempt);
            let workResult;
            try {
              workResult = options.openWorkbench?.(current);
            } catch (_error) {
              workResult = false;
            }
            const work = Promise.resolve(workResult).then((value) => value !== false && value != null, () => false);
            const timeout = new Promise((resolve) => {
              cancelOpenWait = () => resolve({ source: "cancel", opened: false });
              openTimer = setTimer(() => resolve({ source: "timeout", opened: false }), openTimeoutMs);
            });
            const outcome = await Promise.race([
              work.then((opened) => ({ source: "work", opened })),
              timeout
            ]);
            if (openTimer !== null) clearTimer(openTimer);
            openTimer = null;
            cancelOpenWait = null;
            if (destroyed || attempt.number !== openAttempt) return false;
            if (workbenchRevealed()) markWorkbenchCommitted(attempt);
            if (attempt.committed || outcome.opened) {
              attempt.pending = false;
              stopRevealPoll(attempt);
              attempt.restoreDock?.();
              if (activeOpenAttempt === attempt) activeOpenAttempt = null;
              opening = false;
              return dismissCommittedPrompt(attempt);
            }
            if (outcome.source === "timeout") {
              attempt.timedOut = true;
              opening = false;
              void work.then(async (opened) => {
                if (destroyed || !attempt.pending) return;
                if (workbenchRevealed() || opened) {
                  dismissCommittedPrompt(attempt);
                } else {
                  attempt.restoreDock?.();
                  restoreExactPrompt(attempt.current);
                }
                attempt.pending = false;
                stopRevealPoll(attempt);
                if (activeOpenAttempt === attempt) activeOpenAttempt = null;
              });
              return false;
            }
            attempt.pending = false;
            if (activeOpenAttempt === attempt) activeOpenAttempt = null;
            opening = false;
            attempt.restoreDock?.();
            restoreExactPrompt(attempt.current);
            return false;
          }
          function onStorage(changes, area) {
            if (area === "local" && changes?.[logic.PROMPT_STORAGE_KEY]) {
              promptRevision += 1;
              updatePrompt(changes[logic.PROMPT_STORAGE_KEY].newValue);
            }
            if (area === "sync" && changes?.tfa_theme) {
              themeRevision += 1;
              themePreference = normalizeTheme(changes.tfa_theme.newValue);
              theme = selectedTheme(themePreference);
              render();
            }
            if (area === "sync" && changes?.[i18n.LANGUAGE_STORAGE_KEY]) {
              languageRevision += 1;
              translator = i18n.createTranslator(i18n.resolveLanguage({
                manual: changes[i18n.LANGUAGE_STORAGE_KEY].newValue,
                browserLanguage: chromeApi.i18n?.getUILanguage?.(),
                navigatorLanguage: windowRef?.navigator?.language
              }));
              render();
            }
          }
          function updatePrompt(value) {
            if (destroyed) return false;
            if (!started) return start(value);
            const nextPrompt = logic.normalizePrompt(value, now());
            if (nextPrompt && consumedPromptIds.has(nextPrompt.id)) {
              prompt = null;
              return render();
            }
            if (nextPrompt && activeOpenAttempt?.pending && nextPrompt.id === activeOpenAttempt.id) {
              activeOpenAttempt.current = nextPrompt;
              if (!activeOpenAttempt.timedOut) {
                prompt = null;
                render();
              }
              return false;
            }
            prompt = nextPrompt;
            return render();
          }
          function attachListeners() {
            if (listenersAttached) return;
            listenersAttached = true;
            chromeApi.storage.onChanged.addListener(onStorage);
            colorScheme?.addEventListener?.("change", onColorSchemeChange);
            if (!colorScheme?.addEventListener) colorScheme?.addListener?.(onColorSchemeChange);
            windowRef?.addEventListener?.(ACTIVE_GUIDANCE_SHORTCUT_EVENT, onShortcut);
          }
          function detachListeners() {
            if (!listenersAttached) return;
            listenersAttached = false;
            chromeApi.storage.onChanged.removeListener(onStorage);
            colorScheme?.removeEventListener?.("change", onColorSchemeChange);
            if (!colorScheme?.removeEventListener) colorScheme?.removeListener?.(onColorSchemeChange);
            windowRef?.removeEventListener?.(ACTIVE_GUIDANCE_SHORTCUT_EVENT, onShortcut);
          }
          async function start(initialPrompt) {
            if (started || destroyed) return false;
            started = true;
            const epoch = ++lifecycleEpoch, promptAtStart = promptRevision, themeAtStart = themeRevision, languageAtStart = languageRevision;
            attachListeners();
            let local;
            let sync;
            try {
              [local, sync] = await Promise.all([
                initialPrompt ? Promise.resolve({ [logic.PROMPT_STORAGE_KEY]: initialPrompt }) : chromeApi.storage.local.get(logic.PROMPT_STORAGE_KEY),
                chromeApi.storage.sync.get(["tfa_theme", i18n.LANGUAGE_STORAGE_KEY])
              ]);
            } catch (_error) {
              if (!destroyed && epoch === lifecycleEpoch) {
                detachListeners();
                started = false;
              }
              return false;
            }
            if (destroyed || epoch !== lifecycleEpoch) return false;
            if (themeAtStart === themeRevision) {
              themePreference = normalizeTheme(sync?.tfa_theme);
              theme = selectedTheme(themePreference);
            }
            if (languageAtStart === languageRevision) translator = i18n.createTranslator(i18n.resolveLanguage({
              manual: sync?.[i18n.LANGUAGE_STORAGE_KEY],
              browserLanguage: chromeApi.i18n?.getUILanguage?.(),
              navigatorLanguage: windowRef?.navigator?.language
            }));
            if (promptAtStart === promptRevision) {
              prompt = logic.normalizePrompt(local?.[logic.PROMPT_STORAGE_KEY], now());
              return render();
            }
            render();
            return true;
          }
          function destroy() {
            if (destroyed) return false;
            destroyed = true;
            lifecycleEpoch += 1;
            promptRevision += 1;
            themeRevision += 1;
            languageRevision += 1;
            openAttempt += 1;
            opening = false;
            if (activeOpenAttempt) {
              activeOpenAttempt.pending = false;
              stopRevealPoll(activeOpenAttempt);
              stopDockReleasePoll(activeOpenAttempt);
              activeOpenAttempt.restoreDock?.();
            }
            for (const restoreDock of [...dockTransitionRestores]) restoreDock();
            activeOpenAttempt = null;
            cancelOpenWait?.();
            if (openTimer !== null) clearTimer(openTimer);
            openTimer = null;
            cancelOpenWait = null;
            detachListeners();
            clearHost();
            prompt = null;
            return true;
          }
          return Object.freeze({
            start,
            updatePrompt,
            destroy,
            dismiss,
            muteToday,
            openWorkbench,
            inspect: () => ({
              started,
              destroyed,
              opening,
              theme,
              themePreference,
              prompt,
              visible: Boolean(host?.isConnected)
            })
          });
        }
        return Object.freeze({ HOST_ID, ACTIVE_GUIDANCE_SHORTCUT_EVENT, createActiveGuidanceRuntime });
      });
    }
  });

  // src/content/guidance-feature-initializer.js
  var require_guidance_feature_initializer = __commonJS({
    "src/content/guidance-feature-initializer.js"(exports, module) {
      (function attachGuidanceFeatureInitializer(root, factory) {
        const api = factory();
        if (typeof module === "object" && module.exports) module.exports = api;
        root.TfaGuidanceFeatureInitializer = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createGuidanceFeatureInitializerModule() {
        "use strict";
        function createGuidanceFeatureInitializer(options = {}) {
          const runtime = options.runtime?.createActiveGuidanceRuntime?.({
            chrome: options.chrome,
            document: options.document,
            window: options.window,
            logic: options.logic,
            i18n: options.i18n,
            openWorkbench: () => options.requestFeature?.("workspace", { type: "active-guidance-open", source: "guidance" })
          });
          if (!runtime) throw new Error("guidance initializer dependencies unavailable");
          let started = false;
          return Object.freeze({
            async start(intent = {}) {
              if (!started) {
                started = true;
                return runtime.start(intent?.prompt);
              }
              return runtime.updatePrompt(intent?.prompt);
            },
            destroy() {
              started = false;
              return runtime.destroy();
            },
            inspect: () => runtime.inspect()
          });
        }
        return Object.freeze({ createGuidanceFeatureInitializer });
      });
    }
  });

  // src/content/content-feature-registration.js
  var require_content_feature_registration = __commonJS({
    "src/content/content-feature-registration.js"(exports, module) {
      (function attachContentFeatureRegistration(root, factory) {
        const api = factory(root);
        if (typeof module === "object" && module.exports) module.exports = api;
        root.TfaContentFeatureRegistration = api;
      })(typeof globalThis === "object" ? globalThis : exports, function createContentFeatureRegistrationModule(root) {
        "use strict";
        function registerFeature(name, options = {}) {
          const identity = options.identity || root.TfaBuildIdentity || {};
          const host = options.host || root.__TFA_FEATURE_HOST__;
          const initializers = options.initializers || root.TfaContentFeatureInitializers;
          const initializer = initializers?.[name];
          if (!host?.registerFeature || !initializer?.start || !initializer?.destroy) return false;
          return host.registerFeature({
            name,
            fingerprint: String(identity.fingerprint || `legacy:${identity.version || "unknown"}`),
            start: (intent) => initializer.start(intent),
            destroy: () => initializer.destroy()
          });
        }
        return Object.freeze({ registerFeature });
      });
    }
  });

  // src/content/guidance-entry.js
  var require_guidance_entry = __commonJS({
    "src/content/guidance-entry.js"() {
      var import_version = __toESM(require_version());
      var import_i18n = __toESM(require_i18n());
      var import_active_trigger_logic = __toESM(require_active_trigger_logic());
      var import_active_guidance_runtime = __toESM(require_active_guidance_runtime());
      var import_guidance_feature_initializer = __toESM(require_guidance_feature_initializer());
      var import_content_feature_registration = __toESM(require_content_feature_registration());
      var owner = globalThis.__TFA_OWNER__;
      if (owner?.featureHost === true && owner.surfaceMode !== "newtab") {
        const initializers = globalThis.TfaContentFeatureInitializers || (globalThis.TfaContentFeatureInitializers = {});
        initializers.guidance = globalThis.TfaGuidanceFeatureInitializer.createGuidanceFeatureInitializer({
          window,
          document,
          chrome,
          runtime: globalThis.TfaActiveGuidanceRuntime,
          logic: globalThis.TfaActiveTriggerLogic,
          i18n: globalThis.TfaI18n,
          requestFeature: (name, intent) => globalThis.__TFA_FEATURE_HOST__.requestFeature(name, intent)
        });
        globalThis.TfaContentFeatureRegistration.registerFeature("guidance");
      }
    }
  });
  require_guidance_entry();
})();
