dsh-data-domain-knowledge 0.1.1-alpha.5 → 0.1.1-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/pages.js +389 -271
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +19 -0
- package/lib/types/index.js.map +1 -1
- package/lib/types/runtime.d.ts +45 -0
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +148 -19
- package/lib/types/runtime.js.map +1 -1
- package/package.json +1 -1
- package/src/client/DocumentLineageView.tsx +144 -0
- package/src/client/ExtractionTasksPage.tsx +76 -50
- package/src/client/pages.css +19 -0
- package/src/index.ts +16 -0
- package/src/runtime.ts +139 -13
package/lib/pages.js
CHANGED
|
@@ -7285,7 +7285,7 @@
|
|
|
7285
7285
|
});
|
|
7286
7286
|
|
|
7287
7287
|
// src/client/pages.tsx
|
|
7288
|
-
var
|
|
7288
|
+
var import_react19 = __toESM(require_react(), 1);
|
|
7289
7289
|
var import_client = __toESM(require_client(), 1);
|
|
7290
7290
|
|
|
7291
7291
|
// data-domain-knowledge-css:/Users/fuzz/Documents/github/dsh-personal/packages/ui/lib/styles.css
|
|
@@ -7312,7 +7312,7 @@
|
|
|
7312
7312
|
}
|
|
7313
7313
|
|
|
7314
7314
|
// data-domain-knowledge-css:/Users/fuzz/Documents/github/dsh-personal/plugins/dsh-data-domain-knowledge/src/client/pages.css
|
|
7315
|
-
var css3 = "/*\n * \u901A\u7528\u6574\u9875\uFF08\u62BD\u53D6\u8BD5\u8DD1 / \u7F16\u8BD1\u94FE\u8DEF\uFF09\u7684\u9875\u9762\u6837\u5F0F\u3002\n *\n * \u5B83\u548C `doc-page.css` \u662F\u540C\u4E00\u79CD\u4E1C\u897F\uFF1A\u4E00\u4EFD**\u5355\u72EC\u7684\u6D4F\u89C8\u5668\u6587\u6863**\uFF0C\u6CA1\u6709 DSH \u5916\u58F3\u3001\u6CA1\u6709\u4FA7\u680F\n * \u90A3 380px \u7684\u5BBD\u5EA6\u9650\u5236\u3002\u6240\u4EE5\u8FD9\u91CC\u7684\u51B3\u5B9A\u56F4\u7ED5\u4E24\u4EF6\u4E8B\uFF1A\n *\n * 1. **\u4E00\u6761\u5E38\u9A7B\u7684\u7A84\u6761**\u56DE\u7B54\u300C\u6211\u5728\u54EA\u4E00\u9875\u3001\u770B\u7684\u662F\u54EA\u4E2A\u5E93\u300D\u2014\u2014 \u6574\u9875\u53EF\u4EE5\u6EDA\u5F88\u4E45\uFF0C\u6807\u9898\u6EDA\u8D70\u4E86\n * \u5C31\u53EA\u5269\u5185\u5BB9\uFF0C\u800C\u8FD9\u4E09\u9875\u90FD\u9700\u8981\u77E5\u9053\u81EA\u5DF1\u5728\u54EA\u3002\n * 2. **\u4E24\u6761\u5185\u5BB9\u5BBD\u5EA6**\uFF1A\u8BF4\u660E\u7C7B\uFF08\u7F16\u8BD1\u94FE\u8DEF\uFF09\u662F\u8BFB\u6392\u7248\uFF0C\u7EA6 860px \u5C31\u591F\uFF1B\u8BD5\u8DD1\u62A5\u544A\n * \u91CC\u6709\u4E00\u5F20\u77E9\u9635\uFF0C\u7ED9\u5B83 1180px\u3002\u5BBD\u5EA6\u662F**\u5185\u5BB9**\u7684\u5C5E\u6027\uFF0C\u6240\u4EE5\u6309\u9875\u7ED9\uFF0C\u4E0D\u6309\u58F3\u7ED9\u3002\n *\n * \u989C\u8272\u5168\u90E8\u8D70\u5171\u4EAB\u4EE4\u724C\uFF08`@tita-agent/ui/styles.css` \u5E26\u8FDB\u6765\u7684\u90A3\u4E00\u5957\uFF09\u3002\u63D2\u4EF6\u81EA\u5DF1\u7684\n * `styles.css` \u4E5F\u4E00\u8D77\u8FDB\u6765\uFF1A\u8FD9\u4E09\u9875\u6E32\u67D3\u7684\u662F\u9762\u677F\u91CC\u7684\u7EC4\u4EF6\uFF08Card / Button / \u77E9\u9635\u8868\uFF09\uFF0C\n * \u90A3\u4E9B\u7C7B\u540D\u4F4F\u5728\u90A3\u513F\u3002\n */\n\n:root { color-scheme: light; }\n\nhtml { -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0;\n background: var(--tita-canvas);\n color: var(--tita-ink);\n font-family: var(--tita-font);\n font-size: 13px;\n line-height: 1.65;\n}\n\n/* \u5E38\u9A7B\u7A84\u6761\u3002\u5B83**\u4E0D\u5438\u9876\u5230\u5E95**\uFF1A\u6EDA\u52A8\u6761\u4E00\u52A8\u5C31\u5728\u8FD9\u91CC\uFF0C\u56DE\u7B54\u300C\u8FD9\u662F\u54EA\u4E00\u9875\u300D\u3002 */\n.page-bar {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n border-bottom: 1px solid var(--tita-line);\n background: var(--tita-surface);\n padding: 13px 28px;\n}\n\n.page-bar h1 { margin: 0; font-size: 16px; font-weight: 720; letter-spacing: -0.02em; }\n.page-barMeta { color: var(--tita-ink-muted); font-size: 11.5px; }\n\n.page-main { padding: 28px 28px 120px; }\n\n/* \u5185\u5BB9\u5217\u3002\u5BBD\u5EA6\u6309\u9875\u7ED9\uFF1A\u8BF4\u660E 860\uFF0C\u8BD5\u8DD1\u62A5\u544A 1080\uFF0C\u67B6\u6784\u8BF4\u660E\u9875 1560\u3002 */\n.page-column { width: 100%; margin-inline: auto; }\n.page-column-help { max-width: 860px; }\n.page-column-trial { max-width: 1080px; }\n.page-column-tasks { max-width: 1220px; }\n/* \u67B6\u6784\u8BF4\u660E\u9875\u662F**\u4E00\u5757\u753B\u5E03**\uFF0C\u4E0D\u662F\u4E00\u680F\u6B63\u6587\uFF1A\u753B\u5E03\u8BBE\u8BA1\u5BBD 1172px\uFF0C\u518D\u52A0\u53F3\u5217 400px\uFF0C\n \u7A84\u4E8E 1560 \u5C31\u53EA\u80FD\u9760\u7F29\u5B57\u628A\u56FE\u585E\u8FDB\u6765\uFF08\u5B9E\u6D4B 0.55 \u500D\uFF0C\u5361\u7247\u4E0A\u7684\u5B57\u8BFB\u4E0D\u51FA\uFF09\u3002 */\n.page-column-guide { max-width: 1560px; }\n/* \u8FD9\u4E00\u9875\u7684\u8FB9\u6846\u8981\u8D34\u4F4F\u89C6\u53E3\u5E95\uFF0C\u6240\u4EE5\u628A\u7ED9\u300C\u8BFB\u6392\u7248\u300D\u90A3\u51E0\u9875\u7559\u7684 120px \u9875\u811A\u5185\u8FB9\u8DDD\u6536\u6210 40px \u2014\u2014\n \u7701\u4E0B\u7684 80px \u5168\u90E8\u6362\u6210\u753B\u5E03\u9AD8\u5EA6\u3002`:has` \u4E0D\u652F\u6301\u65F6\u8FD9\u6761\u88AB\u5FFD\u7565\uFF0C\u9000\u56DE 120px\uFF0C\u4E0D\u4F1A\u574F\u3002 */\n.page-main:has(> .page-column-guide) { padding-bottom: 40px; }\n\n/* \u5730\u5740\u4E0D\u5BF9\u3001\u6216\u8FD8\u6CA1\u8F7D\u5165\u65F6\u7684\u6574\u9875\u72B6\u6001\u3002\u4E0E `doc-page.css` \u7684 `.docPage-state` \u540C\u5F62\u3002 */\n.page-state {\n max-width: 720px;\n margin: 56px auto;\n border: 1px solid var(--tita-line);\n border-radius: 10px;\n background: var(--tita-surface);\n padding: 18px 20px;\n color: var(--tita-ink-muted);\n}\n.page-state h2 { margin: 0 0 6px; color: var(--tita-ink); font-size: 16px; font-weight: 680; }\n.page-state p { margin: 0 0 8px; line-height: 1.7; }\n.page-state code {\n border-radius: 4px;\n background: var(--tita-surface-muted);\n padding: 1px 5px;\n font-family: var(--tita-mono);\n font-size: 11.5px;\n}\n\n/* \u5185\u5BB9\u533A\u91CC\u7684\u4E00\u884C\u63D0\u793A\uFF1A\u8F7D\u5165\u4E2D\u3001\u6216\u300C\u5217\u8868\u6CA1\u53D6\u5230\u4F46\u7167\u6837\u80FD\u8DD1\u300D\u3002**\u4E0D\u662F** `.page-state` \u2014\u2014\n \u90A3\u4E00\u6761\u662F\u6574\u9875\u72B6\u6001\u7684\u5361\u7247\uFF08\u4E0A\u4E0B\u5404 56px \u5916\u8FB9\u8DDD\uFF09\uFF0C\u585E\u8FDB\u5185\u5BB9\u6D41\u91CC\u4F1A\u6491\u51FA\u4E00\u5927\u6BB5\u7A7A\u767D\u3002 */\n.page-notice {\n margin: 0 0 12px;\n border: 1px solid var(--tita-tone-amber-line);\n border-radius: 9px;\n background: var(--tita-tone-amber-tint);\n color: var(--tita-warning);\n padding: 8px 10px;\n font-size: 11.5px;\n}\n.page-loading { margin: 0; color: var(--tita-ink-muted); font-size: 12px; }\n\n/* ---------------------------------------------------------- \u77E5\u8BC6\u5904\u7406\n *\n * 2026-10-28 \u91CD\u6392\u3002\u4E0A\u4E00\u7248\u628A\u300C\u8F93\u5165\u8303\u56F4 / \u7ED3\u679C\u6458\u8981 / \u8F68\u8FF9 / \u539F\u59CB\u65E5\u5FD7\u300D\u5168\u5806\u5728\u4E3B\u680F\uFF0C\n * \u800C\u771F\u6B63\u8981\u5904\u7406\u7684\u5BF9\u8C61\uFF08\u6587\u6863\uFF09\u7F29\u5728\u53F3\u680F 260px \u7684\u5C0F\u5217\u8868\u91CC \u2014\u2014 \u4EBA\u627E\u4E0D\u5230\u300C\u54EA\u4E9B\u6587\u6863\u8FD8\u6CA1\u62BD\u300D\u3002\n *\n * \u8FD9\u4E00\u7248\u7684\u5C42\u7EA7\u6309\u95EE\u9898\u6392\uFF1A\n *\n * 1. **\u9875\u5934** \u2014\u2014 \u73B0\u5728\u4EC0\u4E48\u72B6\u6001 + \u89C6\u56FE\u5207\u6362 + \u4E09\u4E2A\u52A8\u4F5C\u3002\n * 2. **\u9636\u6BB5\u8F68** \u2014\u2014 \u4E94\u6BB5\u5404\u8D70\u5230\u54EA\u3002\u5B83\u662F\u8FD9\u4E00\u9875\u7684\u9AA8\u67B6\uFF0C\u6A2A\u8D2F\u6574\u9875\u3002\n * 3. **\u4E3B\u680F** \u2014\u2014 \u8FD9\u4E00\u6BB5\u7684\u5BF9\u8C61\uFF1A\u6587\u6863 / \u5206\u7EC4 / \u7D22\u5F15\u3002\u6BCF\u884C\u5148\u8BF4\u4ED6\u662F\u4EC0\u4E48\uFF0C\u518D\u8BF4\u62BD\u5230\u4E86\u591A\u5C11\u3002\n * 4. **\u4FA7\u680F** \u2014\u2014 \u8FC7\u7A0B\uFF1A\u9009\u4E2D\u90A3\u4E00\u4EFD\u7684\u8F68\u8FF9\uFF0C\u4EE5\u53CA\u8FD0\u884C\u8BB0\u5F55\u3002\u8F68\u8FF9\u662F\u65C1\u8BC1\uFF0C\u4E0D\u5360\u4E3B\u4F4D\u3002\n *\n * \u4E00\u6761\u7EAA\u5F8B\u6CA1\u53D8\uFF1A**\u4E00\u4E2A\u4E8B\u5B9E\u53EA\u51FA\u73B0\u4E00\u6B21**\u3002\u9636\u6BB5\u72B6\u6001\u53EA\u5728\u8F68\u4E0A\uFF0C\u5F85\u529E\u6570\u53EA\u5728\u540C\u4E00\u683C\u7B2C\u4E8C\u884C\uFF0C\n * \u6587\u6863\u72B6\u6001\u53EA\u5728\u884C\u5C3E\u90A3\u679A\u5FBD\u6807\u3002\n */\n.ktPage { display: grid; min-width: 0; gap: 14px; color: var(--tita-ink); }\n\n/* ---- \u9875\u5934 */\n.ktTop { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px 18px; }\n.ktTopLead { display: grid; min-width: 0; gap: 8px; }\n.ktTopActions { display: flex; flex: 0 0 auto; align-items: center; gap: 6px; }\n\n/* \u89C6\u56FE\u5207\u6362\uFF1A\u4E24\u4E2A\u8BCD\uFF0C\u4E00\u4E2A\u5E95\u3002\u5B83\u662F**\u540C\u4E00\u9875\u7684\u4E24\u79CD\u8BFB\u6CD5**\uFF0C\u4E0D\u662F\u7B2C\u4E8C\u6B65\u5BFC\u822A\uFF0C\n \u6240\u4EE5\u505A\u6210\u5C0F\u53F7\u5206\u6BB5\u63A7\u4EF6\uFF0C\u800C\u4E0D\u662F\u53C8\u4E00\u6761\u5E26\u4E0B\u5212\u7EBF\u7684\u9875\u7B7E\u3002 */\n.ktViews { display: inline-flex; width: fit-content; align-items: center; gap: 2px; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); padding: 2px; }\n.ktView { border: 0; border-radius: 6px; background: transparent; padding: 3px 11px; color: var(--tita-ink-muted); font: inherit; font-size: 11.5px; font-weight: 620; line-height: 1.5; cursor: pointer; }\n.ktView:hover { color: var(--tita-ink); }\n.ktView[aria-pressed=\"true\"] { background: var(--tita-surface); color: var(--tita-ink); box-shadow: 0 1px 2px rgb(16 24 40 / .08); }\n.ktView:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n\n\n/* Execution owns the primary reading order. Library freshness stays in object metadata. */\n.ktCurrent { display: grid; min-width: 0; gap: 13px; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-surface); padding: 18px 20px; }\n.ktCurrentScope { margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.ktCurrentWork { display: flex; min-width: 0; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 7px 18px; }\n.ktCurrentWork strong { min-width: 0; color: var(--tita-ink); font-size: 14px; line-height: 1.6; overflow-wrap: anywhere; }\n.ktCurrentWork > span { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; color: var(--tita-primary); font-size: 12px; }\n.ktCurrentCounts, .ktCurrentTiming { display: flex; flex-wrap: wrap; align-items: baseline; gap: 7px 20px; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.6; font-variant-numeric: tabular-nums; }\n.ktCurrentCounts strong { color: var(--tita-ink); font-weight: 650; }\n.ktCurrentTiming { gap: 5px 18px; font-size: 11px; }\n.ktCurrentTiming > span { display: inline-flex; align-items: center; gap: 5px; }\n.ktCurrentHint { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktCompletion { border-top: 1px solid var(--tita-line); padding-top: 12px; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.65; }\n.ktCompletion p { margin: 0; }\n.ktCompletion ul { display: grid; gap: 6px; margin: 10px 0; padding: 0; list-style: none; }\n.ktCompletion li { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 12px; }\n.ktCompletion li strong { color: var(--tita-ink); font-weight: 600; }\n.ktCompletion li span { overflow-wrap: anywhere; }\n.ktRailHeading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 5px 15px; }\n.ktRailHeading strong { color: var(--tita-ink); font-size: 12px; font-weight: 650; }\n.ktRailHeading > span { color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktActivity h3 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 650; }\n.ktActivityHint { margin: 5px 0 12px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktActivityList { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }\n.ktActivityList li { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 12px 0; }\n.ktActivityList li:last-child { border-bottom: 0; }\n.ktActivityList time { padding-top: 1px; color: var(--tita-ink-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n.ktActivityList p { margin: 0; color: var(--tita-ink); font-size: 11.5px; line-height: 1.65; overflow-wrap: anywhere; }\n.ktActivityList [data-warning] p { color: var(--tita-warning); }\n.ktWarnings { margin: 14px 0 6px; border: 1px solid color-mix(in srgb, var(--tita-warning) 30%, var(--tita-line)); border-radius: 8px; background: color-mix(in srgb, var(--tita-warning) 5%, var(--tita-surface)); padding: 10px; color: var(--tita-ink); font-size: 11px; line-height: 1.65; }\n.ktWarnings > strong { display: flex; align-items: center; gap: 6px; font-weight: 650; }\n.ktWarnings ul { margin: 8px 0 0; padding-left: 16px; overflow-wrap: anywhere; }\n.ktWarnings li + li { margin-top: 6px; }\n@media (max-width: 560px) {\n .ktCurrent { padding: 14px; }\n .ktCurrentCounts { gap: 5px 12px; }\n .ktCompletion li { grid-template-columns: minmax(0, 1fr); gap: 2px; }\n}\n\n.ktError, .ktNotice { display: flex; margin: 0; align-items: center; gap: 7px; border: 1px solid var(--tita-line); border-radius: 8px; padding: 8px 11px; font-size: 12px; line-height: 1.55; }\n.ktError { border-color: color-mix(in srgb, var(--tita-danger) 32%, var(--tita-surface)); background: color-mix(in srgb, var(--tita-danger) 8%, var(--tita-surface)); color: var(--tita-danger); }\n.ktNotice { border-color: var(--tita-tone-green-line); background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.ktError > span, .ktNotice > span { min-width: 0; flex: 1 1 auto; }\n.ktNoticeClose { margin-left: auto; color: inherit; }\n.ktEmpty { margin: 0; padding: 22px 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.6; }\n.ktHint { margin: 9px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktHintWarn { color: var(--tita-warning); }\n\n/* ---- \u9636\u6BB5\u8F68\uFF1A\u590D\u7528\u77E5\u8BC6\u5E93 SourceRaw \u2192 Knowledge \u7684\u4E24\u884C\u8282\u70B9\u6837\u5F0F */\n.ktWork { display: flex; min-width: 0; flex-direction: column; gap: 14px; }\n.ktPipelineSteps { width: 100%; }\n.ktPipelineStep { display: grid; width: 100%; min-width: 0; min-height: 70px; align-content: start; gap: 3px; padding: 7px 9px; }\n.ktPipelineStep[data-running] { border-color: var(--tita-primary); background: var(--tita-primary-soft); }\n.ktPipelineStep .tita-kbStepFacts { align-items: center; }\n.ktPipelineStep .tita-kbStepNote { display: inline-flex; flex: 0 0 auto; overflow: visible; }\n.ktPipelineStep .tita-uiBadge { font-size: 9px; }\n.ktPipelineProgress { width: 100%; height: 4px; }\n\n/* ---- \u4E24\u680F\uFF1A\u4E3B\u680F\u662F\u5BF9\u8C61\uFF0C\u4FA7\u680F\u662F\u8FC7\u7A0B */\n.ktBody { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(316px, 1fr); align-items: start; gap: 18px; }\n.ktMain { min-width: 0; }\n.ktStageTab { min-width: 0; }\n\n/* ---- \u9636\u6BB5\u5361\uFF1A\u5361\u5185**\u4E0D\u518D\u5957\u5361**\uFF0C\u5206\u8282\u7528\u53D1\u4E1D\u7EBF */\n.ktStage { min-width: 0; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.ktStageHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 15px 17px 0; }\n.ktStageIntro { min-width: 0; }\n.ktStageIntro h2 { margin: 0; color: var(--tita-ink); font-size: 15px; font-weight: 700; line-height: 1.35; letter-spacing: -.015em; }\n.ktStageIntro p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.55; }\n.ktStageActions { display: flex; flex: 0 0 auto; align-items: center; gap: 4px; }\n/* \u4E00\u884C\u5143\u4FE1\u606F\uFF1A\u8303\u56F4\u3001\u6A21\u578B\u3001\u4E0A\u6B21\u5904\u7406\u91CF\u3001\u6700\u8FD1\u65F6\u95F4\u3002\u5B83\u662F**\u8BFB\u6570**\uFF0C\u6240\u4EE5\u7B49\u5BBD\u6570\u5B57\u3001\u989C\u8272\u66F4\u8F7B\u3002 */\n.ktStageMeta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 3px 0; margin: 9px 0 0; padding: 0 17px 12px; border-bottom: 1px solid var(--tita-line); color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; font-variant-numeric: tabular-nums; }\n.ktStageMeta i { margin: 0 7px; font-style: normal; }\n\n/* ---- \u6587\u6863\u5217\u8868\n *\n * \u4E00\u884C\u4E09\u884C\u6587\u5B57\uFF1A\u6807\u9898 / \u5B83\u662F\u4EC0\u4E48 / \u62BD\u51FA\u4E86\u591A\u5C11\u3002\u5DE6\u4FA7\u65B9\u6846\u662F**\u4E0B\u4E00\u6B21\u8FD0\u884C\u7684\u8303\u56F4**\uFF0C\n * \u884C\u672C\u8EAB\u662F**\u770B\u8FD9\u4E00\u4EFD\u7684\u8F68\u8FF9** \u2014\u2014 \u4E24\u4E2A\u547D\u4E2D\u533A\u5404\u505A\u5404\u7684\u4E8B\uFF0C\u4E0D\u4E92\u76F8\u5192\u5145\u3002\n */\n.ktDocs { display: grid; margin: 0; padding: 0; list-style: none; }\n.ktDoc { display: flex; min-width: 0; align-items: flex-start; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 10px 17px 11px; transition: background-color 120ms ease-out; }\n.ktDoc:last-child { border-bottom: 0; }\n.ktDoc:hover { background: var(--tita-surface-muted); }\n.ktDoc[data-selected] { background: color-mix(in srgb, var(--tita-primary) 7%, var(--tita-surface)); }\n.ktDoc[data-selected] .ktDocTitle { color: var(--tita-primary); }\n.ktDocPick { flex: 0 0 auto; border: 0; border-radius: 5px; background: none; padding: 2px 0 0; color: inherit; cursor: pointer; }\n.ktDocPick:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 2px; }\n.ktDocPickBox { display: inline-flex; width: 15px; height: 15px; align-items: center; justify-content: center; border: 1px solid var(--tita-line-strong); border-radius: 4px; background: var(--tita-surface); color: var(--tita-primary); }\n.ktDocPick[aria-pressed=\"true\"] .ktDocPickBox { border-color: var(--tita-primary); background: var(--tita-primary-soft); }\n.ktDocMain { display: grid; min-width: 0; flex: 1 1 auto; gap: 2px; border: 0; border-radius: 6px; background: none; padding: 0; color: inherit; font: inherit; text-align: left; cursor: pointer; }\n.ktDocMain:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 3px; }\n.ktDocMainStatic { cursor: default; }\n.ktDocTitle { min-width: 0; color: var(--tita-ink); font-size: 12.5px; font-weight: 650; line-height: 1.5; overflow-wrap: anywhere; }\n.ktDocMeta { display: flex; flex-wrap: wrap; align-items: baseline; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; font-variant-numeric: tabular-nums; }\n.ktDocMeta i { margin: 0 5px; font-style: normal; }\n/* \u62BD\u5230\u4E86\u591A\u5C11\uFF1A\u8FD9\u4E00\u9875\u6700\u8981\u7D27\u7684\u4E00\u884C\u8BFB\u6570\u3002\u53EF\u4EE5\u6298\u4E24\u884C\uFF0C\u518D\u957F\u5C31\u622A\u65AD \u2014\u2014 \u5B8C\u6574\u6570\u5B57\u5728\u8F68\u8FF9\u5168\u6587\u91CC\u3002 */\n.ktDocFacts { display: -webkit-box; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.ktDocReason { color: var(--tita-warning); }\n.ktDocSide { display: flex; flex: 0 0 auto; align-items: center; padding-top: 1px; }\n\n/* ---- \u7269\u5316\u6CA1\u6709\u6587\u6863\u5217\u8868\uFF1B\u63D0\u70BC\u4E0E\u7D22\u5F15\u5404\u6709\u4E00\u5757\u8BF4\u660E\u3002 */\n.ktDerive, .ktIndex { display: grid; gap: 12px; padding: 15px 17px 17px; }\n.ktDerive h3 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 680; }\n.ktDerive p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n.ktDerive dl, .ktIndex dl { display: grid; gap: 8px; margin: 0; }\n.ktDerive dl > div, .ktIndex dl > div { display: grid; grid-template-columns: 76px minmax(0, 1fr); align-items: start; gap: 10px; }\n.ktDerive dt, .ktIndex dt { color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.6; }\n.ktDerive dd, .ktIndex dd { min-width: 0; margin: 0; color: var(--tita-ink); font-size: 11.5px; line-height: 1.6; overflow-wrap: anywhere; }\n.ktIndexState { display: flex; align-items: center; gap: 9px; }\n.ktIndexState p { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; }\n\n/* ---- \u8FD0\u884C\u8F93\u51FA\uFF08\u9ED8\u8BA4\u6536\u8D77\uFF09 */\n.ktOutput { border-top: 1px solid var(--tita-line); padding: 4px 17px 15px; }\n.ktOutputToggle { gap: 5px; padding-inline: 2px 6px; color: var(--tita-ink-muted); font-size: 11px; font-weight: 650; }\n.ktOutputToggle:hover { color: var(--tita-ink); }\n.ktOutputToggle > span { color: var(--tita-ink-faint); font-size: 10.5px; font-weight: 500; }\n.ktOutputToggle svg { transition: transform 140ms ease-out; }\n.ktOutputToggle[aria-expanded=\"true\"] svg { transform: rotate(180deg); }\n.ktOutputBody { display: grid; gap: 8px; margin-top: 6px; }\n.ktOutputBody > p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; }\n.ktPre { margin: 0; max-height: 320px; overflow: auto; border-radius: 8px; background: var(--tita-surface-muted); padding: 11px 13px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 11.5px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; tab-size: 2; }\n.ktReportsInline { display: flex; flex-wrap: wrap; gap: 14px; }\n.ktLink { display: inline-flex; height: auto; align-items: center; gap: 4px; padding-inline: 0; color: var(--tita-primary); font-size: 11px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px; }\n.ktLink:hover { background: transparent; color: var(--tita-primary); }\n\n/* ---- \u4FA7\u680F\uFF1A\u8F68\u8FF9 / \u8FD0\u884C\u8BB0\u5F55 */\n.ktSide { min-width: 0; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.ktSideTabs { min-width: 0; }\n.ktSideTabsList { display: flex; box-sizing: border-box; width: 100%; height: auto; align-items: center; justify-content: flex-start; gap: 2px; border-radius: 0; border-bottom: 1px solid var(--tita-line); background: transparent; padding: 7px 9px; }\n.ktSideTabsList button { border-radius: 6px; padding: 3px 9px; color: var(--tita-ink-muted); font-size: 11.5px; font-weight: 620; }\n.ktSideTabsList button[data-state=\"active\"] { background: var(--tita-surface-muted); color: var(--tita-ink); }\n.ktSideBadge { margin-left: 5px; color: var(--tita-ink-faint); font-size: 10px; font-variant-numeric: tabular-nums; }\n.ktSidePanel { min-width: 0; padding: 12px 15px 14px; }\n\n.ktTrailHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }\n.ktTrailHead h3 { margin: 0; color: var(--tita-ink); font-size: 12.5px; font-weight: 700; }\n.ktTrailHead p { margin: 2px 0 0; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; }\n.ktTrailCount { flex: 0 0 auto; color: var(--tita-ink-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n.ktTrailFilter { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 9px; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface-muted); padding: 3px 4px 3px 9px; }\n.ktTrailFilter > span { overflow: hidden; color: var(--tita-ink-muted); font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }\n.ktTrailList { display: grid; margin: 6px 0 0; padding: 0; list-style: none; }\n.ktTrailRow { display: grid; width: 100%; min-width: 0; gap: 3px; border: 0; border-bottom: 1px solid var(--tita-line); background: none; padding: 10px 2px; color: var(--tita-ink); font: inherit; text-align: left; cursor: pointer; }\n.ktTrailRow:last-child { border-bottom: 0; padding-bottom: 2px; }\n.ktTrailRow:hover .ktTrailRowTitle { color: var(--tita-primary); text-decoration: underline; text-underline-offset: 3px; }\n.ktTrailRow:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 2px; border-radius: 6px; }\n.ktTrailRowTitle { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 11.5px; font-weight: 620; line-height: 1.5; overflow-wrap: anywhere; }\n.ktTrailRowSummary { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; overflow-wrap: anywhere; }\n.ktTrailRowMeta { display: inline-flex; align-items: center; gap: 5px; color: var(--tita-ink-faint); font-size: 10px; font-variant-numeric: tabular-nums; }\n.ktSideEmpty { display: grid; gap: 4px; padding: 4px 0 8px; }\n.ktSideEmpty strong { color: var(--tita-ink); font-size: 12px; font-weight: 680; }\n.ktSideEmpty p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }\n.ktSideEmptyText { margin: 14px 0 4px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n\n.ktRunsNote { margin: 0 0 4px; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; }\n.ktRunRow { display: grid; gap: 5px; border-bottom: 1px solid var(--tita-line); padding: 11px 0; }\n.ktRunRow:last-of-type { border-bottom: 0; }\n.ktRunTitle { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 7px; }\n.ktRunTitle strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 680; }\n.ktRunSummary { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }\n.ktRunTime { margin: 0; color: var(--tita-ink-faint); font-size: 10px; line-height: 1.5; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.ktRunControls { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 1px; }\n.ktRunToggle { gap: 4px; padding-inline: 6px; color: var(--tita-ink-muted); font-size: 10.5px; }\n.ktRunToggle[aria-expanded=\"true\"] svg { transform: rotate(180deg); }\n.ktRunToggle svg { transition: transform 120ms ease-out; }\n.ktRunSteps { min-width: 0; }\n\n/* ---- \u7F16\u8BD1\u8BBE\u7F6E\n *\n * \u5DE6\u4FA7\u662F\u300C\u8FD9\u4E2A\u5E93\u7528\u4EC0\u4E48\u6A21\u578B\u3001\u5E26\u4EC0\u4E48\u63D0\u793A\u300D\uFF0C\u53F3\u4FA7\u662F\u5750\u6807\u5B9E\u4F53\u6CE8\u518C\u8868\u3002\n * \u5DE6\u7A84\u53F3\u5BBD\uFF1A\u6A21\u578B\u662F\u4E24\u679A\u5B57\u6BB5\uFF0C\u5B9E\u4F53\u662F\u4E00\u5F20\u4F1A\u957F\u7684\u540D\u5355\u3002\n */\n.ktSettings { display: grid; grid-template-columns: minmax(320px, 400px) minmax(0, 1fr); align-items: start; gap: 22px; }\n.ktSettingsCol { display: grid; min-width: 0; gap: 14px; }\n.ktSettingsWide { min-width: 0; }\n.ktSettingCard { min-width: 0; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 14px 15px 15px; }\n.ktSettingHead { display: grid; gap: 2px; margin-bottom: 11px; }\n.ktSettingHead h2 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 700; letter-spacing: -.01em; }\n.ktSettingActions { display: flex; justify-content: flex-end; gap: 6px; margin-top: 10px; }\n\n/* \u601D\u8003\u5F3A\u5EA6\uFF1A\u4E00\u6392\u5C0F\u6863\u4F4D\u3002\u5B83\u4E0D\u662F\u300C\u7B2C\u4E8C\u4E2A\u6A21\u578B\u5217\u8868\u300D\uFF0C\u6240\u4EE5\u7528\u5206\u6BB5\u6309\u94AE\uFF0C\u4E0D\u7528\u4E0B\u62C9\u3002 */\n.ktEffort { margin-top: 12px; border-top: 1px solid var(--tita-line); padding-top: 11px; }\n.ktEffortHead h3 { margin: 0; color: var(--tita-ink); font-size: 12px; font-weight: 680; }\n.ktEffortHead p { margin: 2px 0 8px; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.5; }\n.ktEffortOptions { display: flex; flex-wrap: wrap; gap: 5px; }\n.ktEffortOption { border: 1px solid var(--tita-line-strong); border-radius: 7px; background: var(--tita-surface); padding: 4px 9px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; line-height: 1.4; cursor: pointer; }\n.ktEffortOption:hover { border-color: var(--tita-primary); color: var(--tita-ink); }\n.ktEffortOption:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n.ktEffortOptionOn { border-color: var(--tita-primary); background: var(--tita-primary-soft); color: var(--tita-primary); font-weight: 620; }\n\n/* \u5750\u6807\u5B9E\u4F53\u5728\u5BBD\u5217\u91CC\uFF1A\u628A\u52A8\u4F5C\u9489\u5728**\u7B2C\u4E00\u884C\u53F3\u4FA7**\u3002\n * \u9ED8\u8BA4\u7684 flex-wrap \u4F1A\u628A\u300C\u786E\u8BA4 / \u7F16\u8F91\u300D\u63A8\u5230\u6700\u540E\u4E00\u884C \u2014\u2014 \u90A3\u4E00\u884C\u53EF\u80FD\u5DF2\u7ECF\u662F\n * \u5B9A\u4E49\u6587\u5B57\u7684\u4E0B\u4E00\u884C\uFF0C\u6309\u94AE\u4E8E\u662F\u60AC\u5728\u4E24\u884C\u4E4B\u95F4\u3002\u7528 order \u628A\u540D\u5B57\u4E0E\u52A8\u4F5C\u653E\u56DE\u540C\u4E00\u884C\uFF0C\n * \u5B9A\u4E49\u3001\u522B\u540D\u8FD9\u4E9B\u5360\u6EE1\u4E00\u884C\u7684\u5185\u5BB9\u81EA\u7136\u6362\u5230\u4E0B\u9762\u3002DOM \u987A\u5E8F\u4E0D\u52A8\uFF0CTab \u987A\u5E8F\u4ECD\u662F\u300C\u5148\u8BFB\uFF0C\u540E\u64CD\u4F5C\u300D\u3002 */\n.ktSettingsWide .tita-axisName { order: 0; }\n.ktSettingsWide .tita-axisActions { order: 1; }\n.ktSettingsWide .tita-axisAliases { order: 2; }\n.ktSettingsWide .tita-axisScope { order: 3; }\n\n/* \u5BBD\u5C4F\u65F6\u4FA7\u680F\u5438\u9876\uFF1A\u4E3B\u680F\u53EF\u80FD\u5F88\u957F\uFF0859 \u4E2A\u5206\u7EC4\u7684\u7269\u5316\u9636\u6BB5\uFF09\uFF0C\u8F68\u8FF9\u8981\u4E00\u76F4\u5728\u624B\u8FB9\uFF0C\n \u800C\u4E0D\u662F\u6EDA\u5230\u4E3B\u680F\u5E95\u90E8\u624D\u770B\u89C1\u3002\u7A84\u5C4F\u4E0D\u5438\u9876 \u2014\u2014 \u90A3\u65F6\u5B83\u662F\u4E3B\u680F\u4E0B\u9762\u7684\u4E00\u6574\u5757\u3002 */\n@media (min-width: 1121px) {\n .ktSide { position: sticky; top: 56px; display: flex; max-height: calc(100vh - 74px); flex-direction: column; }\n .ktSideTabs { display: flex; min-height: 0; flex-direction: column; }\n .ktSideTabsList { flex: 0 0 auto; }\n .ktSidePanel { min-height: 0; flex: 1 1 auto; overflow-y: auto; scrollbar-color: var(--tita-line-strong) transparent; scrollbar-width: thin; }\n}\n\n/* ---- \u7A84\u5C4F */\n@media (max-width: 1120px) {\n /* \u4E24\u680F\u5E76\u6392\u9700\u8981\u7EA6 1000px \u624D\u7AD9\u5F97\u4F4F\uFF1B\u518D\u7A84\u5C31\u628A\u4FA7\u680F\u843D\u5230\u4E0B\u9762\u3002 */\n .ktBody { grid-template-columns: minmax(0, 1fr); }\n .ktSettings { grid-template-columns: minmax(0, 1fr); }\n}\n\n@media (max-width: 760px) {\n .page-main { padding: 18px 16px 70px; }\n .page-bar { padding-inline: 16px; }\n .ktTop { align-items: flex-start; }\n .ktPipelineSteps { gap: 5px; }\n .ktPipelineSteps > .tita-kbStepArrow { display: none; }\n .ktPipelineSteps > .tita-kbStepGroup { flex-basis: calc(50% - 5px); }\n .ktPipelineStep { min-height: 68px; }\n .ktStageHead { flex-direction: column; }\n .ktStageActions { align-self: stretch; }\n .knStagePanelHead .ktStageActions { justify-content: flex-start; }\n .ktStageMeta { padding-inline: 15px; }\n .ktDoc { padding-inline: 15px; }\n .ktDocSide { align-self: flex-start; }\n}\n\n@media (max-width: 430px) {\n .ktPipelineStep { padding: 7px; }\n .ktDocMeta { font-size: 10px; }\n .ktDocFacts { font-size: 10.5px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ktPipelineStep, .ktRunToggle svg, .ktOutputToggle svg { transition: none; }\n}\n\n/* ---------------------------------------------------------- attribution event guide\n *\n * \u8FD9\u662F\u8BF4\u660E\u9875\uFF0C\u4E0D\u662F\u53E6\u4E00\u4E2A\u4E1A\u52A1\u9762\u677F\u3002\u7528\u4E00\u6761\u4E3B\u6D41\u7A0B\u548C\u51E0\u6761\u7EC6\u8FB9\u754C\u627F\u8F7D\u5185\u5BB9\uFF0C\u907F\u514D\u628A\u56DB\u4E2A\n * \u5BF9\u8C61\u505A\u6210\u4E00\u7EC4\u4E92\u76F8\u5D4C\u5957\u7684\u5361\u7247\u3002Event \u7684\u91CD\u70B9\u662F\u300C\u4E00\u6B21\u7ECF\u8FC7\u300D\uFF0C\u6240\u4EE5\u65F6\u95F4\u7EBF\u7684\u987A\u5E8F\u6BD4\u88C5\u9970\u6027\u7684\n * \u8282\u70B9\u6570\u91CF\u66F4\u91CD\u8981\u3002\n */\n.attributionGuide { display: grid; gap: 34px; }\n.attributionGuideIntro { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 16px; border-bottom: 1px solid var(--tita-line); padding: 4px 0 24px; }\n.attributionGuideMark { display: inline-flex; width: 40px; height: 40px; align-items: center; justify-content: center; border: 1px solid var(--tita-tone-green-line); border-radius: 12px; background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.attributionGuideIntroCopy { min-width: 0; }\n.attributionGuideEyebrow, .attributionGuideKicker { margin: 0; color: var(--tita-primary); font-size: 10px; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }\n.attributionGuideIntroCopy h2 { margin: 3px 0 7px; color: var(--tita-ink); font-size: 22px; font-weight: 750; letter-spacing: -.03em; line-height: 1.25; }\n.attributionGuideIntroCopy p:not(.attributionGuideEyebrow) { max-width: 64ch; margin: 0; color: var(--tita-ink-muted); font-size: 12.5px; line-height: 1.75; }\n.attributionGuideFormula { display: grid; gap: 4px; justify-items: end; padding-top: 4px; text-align: right; }\n.attributionGuideFormula span { color: var(--tita-ink-faint); font-size: 10.5px; }\n.attributionGuideFormula code, .attributionGuideCaseIntro code { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 11px; }\n.attributionGuideSection { display: grid; gap: 16px; }\n.attributionGuideSectionHead { display: grid; gap: 3px; }\n.attributionGuideSectionHead h3 { margin: 0; color: var(--tita-ink); font-size: 16px; font-weight: 730; letter-spacing: -.018em; line-height: 1.35; }\n.attributionGuideSectionHead p:last-child { max-width: 72ch; margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.7; }\n.attributionGuidePipeline { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1.25fr) auto minmax(0, 1fr); align-items: center; gap: 9px; border: 1px solid var(--tita-line); border-radius: 14px; background: var(--tita-surface); padding: 18px 16px; }\n.attributionGuideBranches { display: grid; gap: 10px; border: 1px dashed var(--tita-line-strong); border-radius: 12px; background: var(--tita-surface-muted); padding: 10px; }\n/* 1px \u53D1\u4E1D\u7EBF\uFF0C\u4E0D\u662F 3px \u8272\u6761\uFF1A\u8FD9\u4E00\u9875\u5176\u4F59\u7684\u5206\u9694\u5168\u662F\u53D1\u4E1D\u7EBF\uFF0C\u4E00\u6761 3px \u7684\u7AD6\u6761\u4F1A\u628A\u5B83\u8BFB\u6210\n \u53E6\u4E00\u4E2A\u4E1C\u897F\uFF08\u800C\u4E14\u90A3\u662F\u6A21\u677F\u7684\u8BB0\u53F7\uFF09\u3002\u6BB5\u4F4D\u8EAB\u4EFD\u8272\u4ECD\u7136\u5728\u4E0B\u9762\u90A3\u679A\u5C0F\u5FBD\u6807\u4E0A\uFF0C\u6CA1\u6709\u4E22\u3002 */\n.attributionGuideNode { display: grid; min-width: 0; gap: 3px; border-left: 1px solid var(--tita-line-strong); padding: 2px 0 2px 11px; }\n.attributionGuideNode-source { border-left-color: var(--tita-tone-blue); }\n.attributionGuideNode-event { border-left-color: var(--tita-tone-green); }\n.attributionGuideNode-knowledge { border-left-color: var(--tita-tone-violet); }\n.attributionGuideNode-card { border-left-color: var(--tita-tone-amber); }\n.attributionGuideNodeIcon { display: inline-flex; width: 26px; height: 26px; align-items: center; justify-content: center; border: 1px solid var(--tita-line); border-radius: 8px; color: var(--tita-ink-muted); }\n.attributionGuideNode-source .attributionGuideNodeIcon { background: var(--tita-tone-blue-tint); color: var(--tita-tone-blue); }\n.attributionGuideNode-event .attributionGuideNodeIcon { background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.attributionGuideNode-knowledge .attributionGuideNodeIcon { background: var(--tita-tone-violet-tint); color: var(--tita-tone-violet); }\n.attributionGuideNode-card .attributionGuideNodeIcon { background: var(--tita-tone-amber-tint); color: var(--tita-tone-amber); }\n.attributionGuideNode code { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 10px; }\n.attributionGuideNode strong { color: var(--tita-ink); font-size: 12px; font-weight: 720; }\n.attributionGuideNode span { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.5; }\n.attributionGuideConnector { display: grid; justify-items: center; gap: 3px; color: var(--tita-primary); }\n.attributionGuideConnector span { width: 70px; color: var(--tita-ink-faint); font-size: 9px; line-height: 1.35; text-align: center; }\n.attributionGuideRelations { display: flex; flex-wrap: wrap; gap: 8px 18px; border-top: 1px solid var(--tita-line); padding-top: 11px; color: var(--tita-ink-muted); font-size: 10.5px; }\n.attributionGuideRelations span { display: inline-flex; align-items: center; gap: 5px; }\n.attributionGuideRelations svg { color: var(--tita-primary); }\n/* \u5E95\u8272\u7559\u7740\uFF08\u5B83\u8BF4\u7684\u662F\u300C\u8FD9\u4E00\u5757\u662F\u6848\u4F8B\u300D\uFF09\uFF0C\u7AD6\u6761\u6536\u6210 1px\u3002 */\n.attributionGuideCaseIntro { display: flex; align-items: center; justify-content: space-between; gap: 14px; border-left: 1px solid var(--tita-tone-green); background: var(--tita-tone-green-tint); padding: 10px 13px; }\n.attributionGuideCaseIntro > div { display: grid; gap: 3px; }\n.attributionGuideLabel { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; }\n.attributionGuideCaseIntro p { margin: 0; color: var(--tita-ink-muted); font-size: 10.5px; }\n.attributionEventTrace { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }\n.attributionTraceStep { position: relative; display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 13px; min-height: 70px; }\n.attributionTraceStep:not(:last-child)::before { position: absolute; top: 25px; bottom: 0; left: 14px; width: 1px; background: var(--tita-line-strong); content: ''; }\n.attributionTraceMarker { position: relative; z-index: 1; display: flex; align-items: flex-start; justify-content: center; }\n.attributionTraceMarker span { display: inline-flex; width: 29px; height: 29px; align-items: center; justify-content: center; border: 1px solid var(--tita-line-strong); border-radius: 999px; background: var(--tita-surface); color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9px; font-weight: 750; }\n.attributionTraceStep-symptom .attributionTraceMarker span { border-color: var(--tita-tone-blue-line); color: var(--tita-tone-blue); }\n.attributionTraceStep-check .attributionTraceMarker span { border-color: var(--tita-tone-green-line); color: var(--tita-tone-green); }\n.attributionTraceStep-root .attributionTraceMarker span { border-color: var(--tita-tone-amber-line); color: var(--tita-tone-amber); }\n.attributionTraceBody { display: grid; gap: 2px; padding: 1px 0 18px; }\n.attributionTraceBody code { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 10px; }\n.attributionTraceBody strong { color: var(--tita-ink); font-size: 12.5px; font-weight: 700; }\n.attributionTraceBody p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.attributionGuideFields { display: grid; border-top: 1px solid var(--tita-line); }\n.attributionGuideField { display: grid; grid-template-columns: 100px minmax(190px, .9fr) minmax(0, 1.6fr); gap: 14px; align-items: baseline; border-bottom: 1px solid var(--tita-line); padding: 10px 0; }\n.attributionGuideField code { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10.5px; }\n.attributionGuideField strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; }\n.attributionGuideField span { color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; }\n.attributionGuideTable { width: 100%; border-collapse: collapse; background: var(--tita-surface); font-size: 11px; }\n.attributionGuideTable th, .attributionGuideTable td { border-bottom: 1px solid var(--tita-line); padding: 10px 11px; text-align: left; vertical-align: top; }\n.attributionGuideTable thead th { background: var(--tita-surface-muted); color: var(--tita-ink-faint); font-size: 10px; font-weight: 700; }\n.attributionGuideTable tbody th { color: var(--tita-ink); font-weight: 700; white-space: nowrap; }\n.attributionGuideTable tbody th svg { margin-right: 5px; vertical-align: -2px; color: var(--tita-primary); }\n.attributionGuideTable td { color: var(--tita-ink-muted); line-height: 1.55; }\n.attributionGuideClosing { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 13px; border-top: 1px solid var(--tita-line-strong); padding-top: 17px; }\n.attributionGuideClosingIcon { display: inline-flex; width: 32px; height: 32px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 9px; background: var(--tita-primary-soft); color: var(--tita-primary); }\n.attributionGuideClosing h3 { margin: 3px 0 6px; color: var(--tita-ink); font-size: 15px; font-weight: 720; }\n.attributionGuideClosing p { max-width: 72ch; margin: 0 0 8px; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.7; }\n.attributionGuideClosingRule { color: var(--tita-ink) !important; }\n\n/* --------------------------------------------------------------- tab guide\n *\n * \u67B6\u6784\u8BF4\u660E\u9875\uFF08`/knowledge/pages/help/overview`\uFF09\u3002\n *\n * \u7248\u5F0F\uFF1A**\u4E00\u6761\u94FE\u8DEF = \u753B\u5E03\u4E0A\u7684\u4E00\u6761\u5DE5\u5E8F\u5E26**\uFF0C\u53F3\u8FB9\u4E00\u5217\u662F\u5F53\u524D\u73AF\u8282\u7684\u8BF4\u660E\u3002\n * \u753B\u5E03\u7684\u6784\u56FE\u7EAA\u5F8B\u5199\u5728 `GuideArchitectureCanvas.tsx` \u7684\u6587\u4EF6\u5934 \u2014\u2014 \u8FD9\u91CC\u53EA\u7BA1\u957F\u76F8\u3002\n *\n * \u5C3A\u5BF8\u4E0A\u7684\u4E24\u6761\u786C\u89C4\u77E9\uFF0C\u6539\u7248\u65F6\u6700\u5BB9\u6613\u8E29\uFF1A\n * 1. **\u89C6\u53E3\u9AD8\u5EA6\u4E0D\u662F CSS \u5B9A\u7684**\uFF0C\u5B83\u7531\u7EC4\u4EF6\u6309\u7F29\u653E\u6BD4\u4F8B\u5199\u5728\u884C\u5185 style \u4E0A\uFF1B\u8FDB\u5165\u5168\u5C4F\u540E\u7531 CSS \u63A5\u7BA1\uFF0C\n * \u8BA9\u753B\u5E03\u586B\u6EE1\u89C6\u53E3\u3002\n * 2. **\u5361\u7247\u3001\u724C\u5B50\u3001\u5E26\u7684\u4F4D\u7F6E\u5168\u90E8\u7531 `arch/model.ts` \u7B97\u597D\u5199\u5728\u884C\u5185 style \u4E0A**\uFF0C\n * \u8FD9\u91CC\u4E0D\u8BB8\u51FA\u73B0\u7B2C\u4E8C\u5957\u5750\u6807\u3002\n */\n\n.tabGuide { display: grid; gap: 20px; }\n.tabGuideWorkbench { display: block; }\n/* \u5DE6\u5217\u53EA\u6709\u753B\u5E03\uFF0C\u4E0D\u5438\u9876\uFF1A\u6574\u56FE\u6700\u9AD8 1120px\uFF0C\u6BD4\u89C6\u53E3\u9AD8 \u2014\u2014 \u5438\u9876\u4F1A\u628A\u4E0B\u534A\u5F20\u56FE\u9489\u5728\u5C4F\u5E55\u5916\u3002 */\n.tabGuideCanvasColumn { display: grid; min-width: 0; gap: 14px; }\n\n/* ---------------------------------------------------------------- \u753B\u5E03 */\n\n.tabGuideCanvas { position: relative; display: flex; min-width: 0; min-height: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-canvas); box-shadow: 0 1px 2px rgb(16 24 40 / .04); container-type: inline-size; }\n\n/* \u6D6E\u5C42\uFF1A\u753B\u5E03\u4E0A\u53EA\u5269\u5DE6\u4E0A\u89D2\u8FD9\u4E00\u6392\u94FE\u8DEF Tab\u3002\u5B83\u4E0D\u5360\u753B\u5E03\u7684\u8BBE\u8BA1\u5C3A\u5BF8\u3002 */\n.tabGuideCanvasOverlay { position: absolute; z-index: 2; top: 10px; left: 10px; display: flex; align-items: flex-start; gap: 12px; pointer-events: none; }\n.tabGuideCanvasOverlay > * { pointer-events: auto; }\n\n.tabGuideChainTabs .tita-uiTabsList { display: inline-flex; max-width: 100%; overflow-x: auto; border: 1px solid var(--tita-line); border-radius: 9px; background: color-mix(in srgb, var(--tita-surface) 93%, transparent); padding: 2px; box-shadow: 0 1px 2px rgb(16 24 40 / .05); backdrop-filter: blur(6px); scrollbar-width: none; }\n.tabGuideChainTabs .tita-uiTabsList::-webkit-scrollbar { display: none; }\n.tabGuideChainTabs .tita-uiTabsTrigger { min-height: 30px; border: 0; border-radius: 7px; padding-inline: 13px; font-size: 12px; }\n.tabGuideChainTabs .tita-uiTabsTrigger[data-state='active'] { border-bottom-color: transparent; background: var(--tita-surface); box-shadow: 0 1px 2px rgb(15 23 42 / .12), inset 0 0 0 1px var(--tita-primary-shadow); }\n\n/* **\u56FA\u5B9A\u8FB9\u6846\u3002** \u9AD8\u5EA6\u7531\u8FD9\u91CC\u7ED9\uFF0C\u4E0D\u8DDF\u7F29\u653E\u8D70 \u2014\u2014 \u7F29\u653E\u53EA\u52A8\u6846\u91CC\u7684\u5185\u5BB9\u3002\n \u7B2C\u4E00\u7248\u628A\u9AD8\u5EA6\u5199\u6210\u300C\u677F\u9AD8 \xD7 \u6BD4\u4F8B\u300D\uFF0C\u4E8E\u662F\u634F\u5408\u65F6\u8FDE\u8FB9\u6846\u4E00\u8D77\u957F\u5927/\u7F29\u5C0F\uFF0C\u8BFB\u8D77\u6765\u50CF\u6574\u9875\u5728\u52A8\u3002\n\n \u9AD8\u5EA6\u53D6\u300C\u89C6\u53E3\u9AD8 - \u9876\u680F - \u5185\u8FB9\u8DDD - \u4E00\u884C\u8BFB\u6CD5\u300D\uFF0C\u4E0A\u4E0B\u9650\u515C\u4F4F\uFF1A\u592A\u77EE\u8BFB\u4E0D\u4E86\u56FE\uFF0C\u592A\u9AD8\u4F1A\u628A\n \u4E00\u884C\u8BFB\u6CD5\u6324\u51FA\u5C4F\u5E55\u3002\u6EDA\u52A8\u4EA4\u7ED9\u5BB9\u5668\u81EA\u5DF1\uFF08\u6EDA\u5230\u5934\u4F1A\u7EE7\u7EED\u6EDA\u9875\u9762\uFF09\uFF0C**\u4E0D\u8981 `overscroll-behavior: contain`**\n \u2014\u2014 \u90A3\u4F1A\u628A\u9875\u9762\u6EDA\u52A8\u9501\u5728\u753B\u5E03\u91CC\u3002 */\n.tabGuideCanvasViewport { position: relative; width: 100%; height: clamp(520px, calc(100vh - 124px), 1120px); overflow: auto; background: var(--tita-canvas); cursor: default; scrollbar-color: var(--tita-line-strong) transparent; touch-action: pan-x pan-y; }\n.tabGuideCanvasViewport[data-pannable='true'] { cursor: grab; }\n.tabGuideCanvasViewportPanning { cursor: grabbing !important; user-select: none; }\n\n/* \u677F\uFF1A\u8BBE\u8BA1\u5C3A\u5BF8 1172 \xD7 902\u3002\u7F29\u653E\u7531 `transform` \u627F\u62C5 \u2014\u2014 \u6BD4\u4F8B\u662F\u7EC4\u4EF6\u6309\u88C1\u526A\u533A\u7B97\u7684\uFF0C\n \u4E0D\u5199\u8FDB CSS\uFF0C\u907F\u514D\u4E24\u5904\u5404\u5199\u4E00\u4EFD\u3002 */\n.tabGuideCanvasFrame { position: absolute; overflow: hidden; }\n.tabGuideCanvasBoard { position: relative; transform-origin: top left; }\n\n/* \u8282\u70B9\u8BE6\u60C5\u662F\u753B\u5E03\u5185\u7684 Inspector\uFF1A\u53F3\u4FA7\u56FA\u5B9A\uFF0C\u5185\u5BB9\u72EC\u7ACB\u6EDA\u52A8\uFF0C\u4E0D\u6539\u53D8\u56FE\u7684\u8BBE\u8BA1\u5BBD\u5EA6\u3002 */\n.tabGuideInspector { position: absolute; z-index: 3; top: 58px; right: 12px; display: flex; width: min(380px, calc(100% - 24px)); max-height: calc(100% - 70px); flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: color-mix(in srgb, var(--tita-surface) 97%, transparent); box-shadow: 0 12px 28px rgb(16 24 40 / .13); backdrop-filter: blur(5px); }\n.tabGuideInspectorHeader { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 9px 10px 9px 13px; color: var(--tita-ink); }\n.tabGuideInspectorHeaderCopy { display: grid; gap: 2px; min-width: 0; }\n.tabGuideInspectorHeaderCopy span { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }\n.tabGuideInspectorHeaderCopy strong { color: var(--tita-ink); font-size: 12px; font-weight: 750; }\n.tabGuideInspectorBody { min-height: 0; overflow-y: auto; padding: 0 14px 18px; scrollbar-color: var(--tita-line-strong) transparent; }\n.tabGuideInspectorBody .tabGuideDetailColumn { gap: 0; }\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDetailGrid,\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n.tabGuideInspectorBody .tabGuideDetail { border: 0; border-radius: 0; background: transparent; padding: 15px 0 18px; box-shadow: none; }\n.tabGuideInspectorBody .tabGuideConceptRelation { border-right: 0; border-left: 0; border-radius: 0; margin-inline: -14px; padding-inline: 14px; }\n\n/* ---------------------------------------------------------------- \u5E26\u4E0E\u8FDE\u7EBF */\n\n.tabGuideBoardEdges { position: absolute; top: 0; left: 0; }\n/* \u5E26\u53EA\u662F**\u5E95\u7EB9**\uFF0C\u4E0D\u662F\u5361\u7247\uFF1A\u5B83\u7684\u4F5C\u7528\u662F\u8BA9\u4EBA\u4E00\u773C\u770B\u51FA\u300C\u8FD9\u51E0\u5F20\u5361\u662F\u4E00\u6761\u94FE\u8DEF\u4E0A\u7684\u300D\u3002\n \u6240\u4EE5\u5B83\u6BD4\u753B\u5E03\u5E95\u8272\u53EA\u6DF1\u4E00\u6863\uFF0C\u4E14\u4E0D\u518D\u94FA\u6EE1\u6574\u5C4F\uFF08\u88C1\u526A\u533A\u6709\u591A\u9AD8\uFF0C\u5B83\u5C31\u6709\u591A\u9AD8\uFF09\u3002 */\n.tabGuideBoardBand { fill: color-mix(in srgb, var(--tita-surface-muted) 62%, var(--tita-surface)); stroke: var(--tita-line); stroke-width: 1; }\n.tabGuideBoardLaneBadge { fill: var(--tita-surface); stroke: var(--tita-line-strong); stroke-width: 1; }\n.tabGuideBoardLaneBadge-interaction { fill: var(--tita-tone-blue-tint); stroke: var(--tita-tone-blue-line); }\n.tabGuideBoardLaneBadge-knowledge { fill: var(--tita-tone-violet-tint); stroke: var(--tita-tone-violet-line); }\n.tabGuideBoardLaneBadge-evolution { fill: var(--tita-tone-amber-tint); stroke: var(--tita-tone-amber-line); }\n.tabGuideBoardLaneLabel { fill: var(--tita-ink); font-family: var(--tita-font); font-size: 11.5px; font-weight: 720; }\n.tabGuideBoardLaneNote { fill: var(--tita-ink-muted); font-family: var(--tita-mono); font-size: 9.5px; }\n.tabGuideBoardEdge { fill: none; stroke-linecap: round; stroke-linejoin: round; transition: opacity 180ms ease; }\n/* \u8FB9\u6807\u7B7E\u538B\u5728\u901A\u9053\u4E0A\uFF1A\u767D\u5E95\u9760 `paint-order: stroke` \u63CF\u4E00\u5708\u753B\u5E03\u8272\uFF0C\u800C\u4E0D\u662F\u52A0\u4E00\u5757\u77E9\u5F62\n \u2014\u2014 \u77E9\u5F62\u4F1A\u76D6\u4F4F\u5E95\u4E0B\u90A3\u6761\u7EBF\u672C\u8EAB\u3002 */\n.tabGuideBoardEdgeLabel { fill: var(--tita-primary); font-family: var(--tita-font); font-size: 10px; font-weight: 700; text-anchor: middle; paint-order: stroke; stroke: var(--tita-canvas); stroke-width: 5px; stroke-linejoin: round; transition: opacity 180ms ease; }\n\n/* ---------------------------------------------------------------- \u73AF\u8282\u5361\u7247 */\n\n.tabGuideCard { position: absolute; display: flex; box-sizing: border-box; flex-direction: column; gap: 5px; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface); padding: 10px 11px 9px; color: var(--tita-ink); font-family: var(--tita-font); text-align: left; cursor: pointer; box-shadow: 0 1px 2px rgb(16 24 40 / .04); transition: background 180ms ease, border-color 140ms ease, box-shadow 140ms ease; }\n.tabGuideCard:hover { border-color: var(--tita-primary-line); box-shadow: 0 2px 8px rgb(16 24 40 / .09); }\n.tabGuideCard:focus-visible { outline: 2px solid var(--tita-primary); outline-offset: 1px; }\n.tabGuideCardSelected { border-color: var(--tita-primary); box-shadow: 0 0 0 3px var(--tita-primary-soft), 0 2px 8px rgb(16 24 40 / .09); }\n/* \u6B21\u7EA7\u73AF\u8282**\u4E0D\u9760\u900F\u660E\u5EA6**\uFF1A0.14 \u7684\u4E0D\u900F\u660E\u6587\u5B57\u662F\u8BFB\u4E0D\u4E86\u7684\u7070\uFF0C\u800C\u5B83\u4EEC\u5C31\u5728\u65C1\u8FB9\uFF0C\n \u4ECD\u7136\u662F\u8FD9\u5F20\u56FE\u7684\u4E00\u90E8\u5206\u3002\u6539\u6210\u300C\u65E0\u5E95 + \u65E0\u63CF\u8FB9 + \u7070\u5B57\u300D\uFF0C\u767D\u5E95 4.97:1\u3001\u7070\u5E26 4.93:1\u3002 */\n/* \u6B21\u7EA7\u5361\u7247\uFF1A\u4E22\u5E95\u3001\u4E22\u63CF\u8FB9\uFF0C**\u6574\u4F53\u518D\u538B\u4E00\u6863\u900F\u660E\u5EA6**\u3002\n \u53EA\u628A\u5B57\u6362\u6210\u7070\u8272\u662F\u4E0D\u591F\u7684 \u2014\u2014 \u8FB9\u4E0A\u90A3\u4E9B\u7EBF\u5DF2\u7ECF\u6DE1\u5230 0.1\uFF0C\u5B57\u8FD8\u7AD9\u5728\u540C\u4E00\u4E2A\u6DF1\u5EA6\u4E0A\uFF0C\n \u770B\u4E0A\u53BB\u50CF\u300C\u6CA1\u4EAE\u7684\u90A3\u4E9B\u53CD\u800C\u66F4\u6E05\u695A\u300D\u3002\u60AC\u505C\u6062\u590D\uFF0C\u56E0\u4E3A\u70B9\u5B83\u5C31\u662F\u8981\u5207\u8FC7\u53BB\u3002 */\n.tabGuideCardDim { border-color: transparent; background: transparent; box-shadow: none; opacity: .42; transition: opacity 180ms ease; }\n.tabGuideCardDim:hover, .tabGuideCardDim:focus-visible { opacity: 1; }\n.tabGuideCardDim .tabGuideCardTitle,\n.tabGuideCardDim .tabGuideCardSub,\n.tabGuideCardDim .tabGuideCardStep { color: var(--tita-ink-faint); }\n.tabGuideCardDim .tabGuideCardStep i { color: var(--tita-line-strong); }\n.tabGuideCardDim .tabGuideCardDot { background: var(--tita-line-strong) !important; }\n.tabGuideCardDim:hover { border-color: var(--tita-primary-line); background: var(--tita-surface); }\n.tabGuideCardDim:hover .tabGuideCardTitle { color: var(--tita-ink); }\n.tabGuideCardDim:hover .tabGuideCardSub,\n.tabGuideCardDim:hover .tabGuideCardStep { color: var(--tita-ink-muted); }\n\n.tabGuideCardHead { display: flex; min-width: 0; align-items: center; gap: 6px; }\n.tabGuideCardDot { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 999px; }\n.tabGuideCardTitle { overflow: hidden; min-width: 0; font-size: 12.5px; font-weight: 650; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }\n/* \u72B6\u6001\u8BCD\u5E26\u8272\uFF0C\u4E14**\u56DB\u6863\u5404\u6709\u81EA\u5DF1\u7684\u8272**\uFF1A\u8FD9\u5F20\u56FE\u662F\u5951\u7EA6\uFF0C\u505A\u6CA1\u505A\u51FA\u6765\u662F\u7B2C\u4E00\u4FE1\u606F\u3002 */\n\n.tabGuideCardSub { display: -webkit-box; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.4; -webkit-box-orient: vertical; }\n/* \u6B65\u9AA4\u8868\uFF1A**\u7F16\u53F7 + \u4E00\u6761**\u3002\u7F16\u53F7\u8BF4\u660E\u987A\u5E8F\uFF0C\u800C\u987A\u5E8F\u6B63\u662F\u94FE\u8DEF\u7684\u610F\u601D\u3002 */\n.tabGuideCardSteps { display: flex; min-height: 0; flex-direction: column; overflow: hidden; }\n.tabGuideCardStep { display: flex; align-items: baseline; gap: 6px; overflow: hidden; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 13.5px; white-space: nowrap; }\n.tabGuideCardStep > i { flex: 0 0 auto; width: 9px; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9px; font-style: normal; font-weight: 700; text-align: right; }\n.tabGuideCardStep[data-state='partial'] > i { color: var(--tita-tone-amber); }\n.tabGuideCardStep[data-state='todo'],\n.tabGuideCardStep[data-state='todo'] > i { color: var(--tita-ink-faint); }\n.tabGuideCardStepRest { color: var(--tita-ink-faint); font-style: italic; }\n\n/* ---------------------------------------------------------------- \u53F3\u5217 */\n\n.tabGuideDetailColumn { display: grid; min-width: 0; gap: 14px; }\n/* \u53F3\u5217\u53EA\u6709 340\u2013400px\uFF1A\u8BE6\u60C5\u91CC\u90A3\u4E24\u7EC4\u4E24\u680F\u7F51\u683C\u5728\u8FD9\u91CC\u4F1A\u88AB\u6324\u6210\u4E24\u6761\u7A84\u67F1\uFF0C\u4E00\u5F8B\u6539\u6210\u5355\u680F\u3002\n \u5BBD\u5EA6\u518D\u7A84\uFF08\u22641180px\uFF09\u65F6\u4E24\u680F\u5DE5\u4F5C\u53F0\u5DF2\u7ECF\u53E0\u8D77\u6765\uFF0C\u90A3\u65F6\u518D\u653E\u5F00\u6210\u4E24\u680F\u3002 */\n.tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n/* \u5BF9\u8C61\u5173\u7CFB\u56FE\u5728 400px \u7684\u53F3\u5217\u91CC\uFF1A\u4E09\u4E2A\u8282\u70B9 + \u4E24\u652F\u7BAD\u5934\u8981\u6324\u8FDB\u4E00\u884C\uFF0C\n \u5426\u5219\u300CDocument \u2192 Knowledge \u2192 WikiCard\u300D\u4F1A\u6298\u6210\u4E24\u884C\uFF0C\u94FE\u8DEF\u5C31\u8BFB\u65AD\u4E86\u3002 */\n.tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n\n/* \u73AF\u8282\u8F68\uFF1A\u8FD9\u6761\u94FE\u8DEF\u6709\u54EA\u51E0\u73AF\uFF0C\u70B9\u4E00\u4E0B\u5C31\u8D70\u8FC7\u53BB\u3002\u5B83\u56DE\u7B54\u753B\u5E03\u56DE\u7B54\u4E0D\u4E86\u7684\u90A3\u4E2A\u95EE\u9898 \u2014\u2014\n \u753B\u5E03\u4E0A\u4E00\u6761\u94FE\u8DEF\u662F\u7A7A\u95F4\u5173\u7CFB\uFF0C\u300C\u6211\u73B0\u5728\u8BFB\u7684\u662F\u7B2C\u51E0\u73AF\u300D\u662F\u987A\u5E8F\u5173\u7CFB\u3002 */\n.tabGuideChainRail { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 9px 12px; }\n.tabGuideChainRailHead { color: var(--tita-ink-faint); font-size: 10px; font-weight: 700; letter-spacing: .06em; }\n.tabGuideChainRail ol { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; margin: 0; padding: 0; list-style: none; }\n.tabGuideChainRail li { display: flex; align-items: center; }\n.tabGuideChainRail li + li::before { content: '\u203A'; margin-right: 3px; color: var(--tita-ink-faint); font-size: 11px; }\n.tabGuideChainRailStep { display: inline-flex; align-items: center; gap: 5px; border: 1px solid transparent; border-radius: 7px; background: transparent; padding: 3px 7px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; cursor: pointer; transition: background 140ms ease, color 140ms ease, border-color 140ms ease; }\n.tabGuideChainRailStep:hover { background: var(--tita-surface-muted); color: var(--tita-ink); }\n.tabGuideChainRailStep:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n.tabGuideChainRailStep[aria-pressed='true'] { border-color: var(--tita-primary-line); background: var(--tita-primary-soft); color: var(--tita-primary); font-weight: 650; }\n.tabGuideChainRailIndex { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; font-variant-numeric: tabular-nums; }\n.tabGuideChainRailStep[aria-pressed='true'] .tabGuideChainRailIndex { color: var(--tita-primary); }\n\n/* ---------------------------------------------------------------- \u8BE6\u60C5 */\n\n/* \u5BF9\u8C61\u5173\u7CFB\u56FE\u3002**\u5B83\u53EA\u51FA\u73B0\u5728 380px \u7684 Inspector \u91CC**\uFF0C\u6240\u4EE5\u7248\u9762\u6309\u7A84\u680F\u5B9A\uFF1A\n \u4E0A\u9762\u4E00\u6BB5\u8BDD\u3001\u4E0B\u9762\u4E24\u884C\u8282\u70B9\u3002\u4E09\u4E2A\u8282\u70B9\u6324\u4E00\u884C\u662F\u786C\u8981\u6C42 \u2014\u2014 \u6298\u6210\u4E24\u884C\u5C31\u628A\u94FE\u8DEF\u8BFB\u65AD\u4E86\u3002 */\n.tabGuideConceptRelation { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; border: 1px solid var(--tita-primary-line); border-radius: 12px; background: var(--tita-primary-soft); padding: 14px 15px; }\n.tabGuideConceptRelationIntro h3 { margin: 0; color: var(--tita-ink); font-size: 14px; font-weight: 760; line-height: 1.35; }\n.tabGuideConceptRelationIntro p:last-child { margin: 7px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }\n.tabGuideRelationFlow { min-width: 0; }\n.tabGuideRelationRow { display: flex; flex-wrap: nowrap; align-items: center; justify-content: flex-start; gap: 6px; }\n.tabGuideRelationNode { display: inline-flex; height: auto; min-width: 0; flex: 1 1 0; flex-direction: column; align-items: flex-start; gap: 1px; border-color: var(--tita-primary-line); padding: 6px 8px; }\n.tabGuideRelationNode span { color: currentColor; font-family: var(--tita-mono); font-size: 9.5px; font-weight: 760; }\n.tabGuideRelationNode small { color: var(--tita-ink-muted); font-size: 9px; font-weight: 500; line-height: 1.3; }\n.tabGuideRelationNode[aria-pressed=\"true\"] small { color: inherit; opacity: .78; }\n.tabGuideRelationArrow { width: 12px; flex: 0 0 auto; color: var(--tita-primary); }\n.tabGuideRelationBranch { display: flex; align-items: center; justify-content: flex-start; gap: 6px; margin: 5px 0; padding-left: 40px; color: var(--tita-primary); font-size: 9.5px; font-weight: 700; }\n.tabGuideRelationFootnote { margin: 9px 0 0; color: var(--tita-ink-faint); font-size: 10px; line-height: 1.5; text-align: left; }\n\n/* \u8BF4\u660E\u5361\uFF1A\u4E00\u5F20\u5361\u3001\u51E0\u6761\u53D1\u4E1D\u7EBF\uFF0C\u4E0D\u518D\u662F\u4E00\u645E\u5C0F\u65B9\u5757\u3002 */\n.tabGuideDetail { scroll-margin-top: 74px; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-surface); padding: 18px 20px 20px; box-shadow: 0 1px 2px rgb(16 24 40 / .04); }\n.tabGuideDetailHeader { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 12px; }\n.tabGuideDetailIcon { display: inline-flex; width: 36px; height: 36px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 10px; background: var(--tita-primary-soft); color: var(--tita-primary); }\n.tabGuideDetailIcon-knowledge { color: var(--tita-tone-violet); background: var(--tita-tone-violet-tint); border-color: var(--tita-tone-violet-line); }\n.tabGuideDetailIcon-attribution { color: var(--tita-tone-green); background: var(--tita-tone-green-tint); border-color: var(--tita-tone-green-line); }\n.tabGuideDetailIcon-memory { color: var(--tita-tone-amber); background: var(--tita-tone-amber-tint); border-color: var(--tita-tone-amber-line); }\n.tabGuideDetailIcon-eval { color: var(--tita-tone-blue); background: var(--tita-tone-blue-tint); border-color: var(--tita-tone-blue-line); }\n.tabGuideDetailHeader h2 { margin: 0; color: var(--tita-ink); font-size: 18px; font-weight: 740; letter-spacing: -.025em; line-height: 1.25; }\n.tabGuideDetailSubtitle { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.5; }\n/* \u94FE\u8DEF\u5F52\u5C5E\uFF1A\u4E00\u679A\u8EAB\u4EFD\u8272\u5706\u70B9 + \u94FE\u8DEF\u540D\u3002\u989C\u8272\u7531\u884C\u5185 style \u7ED9\uFF08\u94FE\u8DEF\u8EAB\u4EFD\u8272\u5728 model.ts \u91CC\uFF09\u3002 */\n.tabGuideDetailLane { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--tita-ink-faint); font-size: 10px; }\n.tabGuideDetailLane > i { width: 6px; height: 6px; border-radius: 999px; }\n.tabGuideDetailLaneConcept { color: var(--tita-ink-faint); }\n.tabGuideDefinitionLabel { margin: 0; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10px; font-weight: 760; letter-spacing: .06em; }\n.tabGuideSummary { margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.75; }\n.tabGuideDefinitionBlock { display: grid; gap: 7px; border-bottom: 1px solid var(--tita-line); padding: 15px 0 15px; }\n/* \u8F93\u5165 \u2192 \u8F93\u51FA\uFF1A\u5E76\u6392\u4E24\u683C\uFF0C\u4E2D\u95F4\u4E00\u652F\u7BAD\u5934\u3002\u7AD6\u7740\u5806\u4F1A\u628A\u8FD9\u6BB5\u62C9\u6210\u4E24\u884C\u534A\u9AD8\uFF0C\n \u800C\u5B83\u53EA\u662F\u300C\u51ED\u4EC0\u4E48\u80FD\u5DE5\u4F5C\u300D\u7684\u4E00\u53E5\u8BDD\u3002 */\n.tabGuideFacts { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 13px 0; }\n.tabGuideDetailColumn .tabGuideFacts { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); }\n.tabGuideFacts > div { display: grid; min-width: 0; gap: 3px; }\n.tabGuideFacts > svg { flex: 0 0 auto; color: var(--tita-ink-faint); }\n.tabGuideDetailColumn .tabGuideFacts > svg { transform: none; }\n.tabGuideFacts span { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 700; letter-spacing: .06em; }\n.tabGuideFacts strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; line-height: 1.5; }\n.tabGuideDetailGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }\n.tabGuideLogicSection { min-width: 0; border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }\n.tabGuideLogicSection h3 { margin: 0 0 10px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.tabGuideStatusNote { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.7; }\n/* \u6B65\u9AA4\u662F\u4E00\u6761\u65F6\u95F4\u7EBF\uFF1A\u56FE\u6807\u5217\u4E0B\u9762\u62C9\u4E00\u6761\u53D1\u4E1D\u7EBF\uFF0C\u628A\u300C\u5148\u540E\u300D\u753B\u51FA\u6765\u3002 */\n.tabGuideStepList { display: grid; gap: 11px; margin: 0; padding: 0; list-style: none; }\n.tabGuideStep { position: relative; display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 8px; align-items: start; color: var(--tita-tone-green); }\n.tabGuideStep:not(:last-child)::after { content: ''; position: absolute; top: 18px; bottom: -11px; left: 7px; width: 1px; background: var(--tita-line); }\n.tabGuideStep-partial { color: var(--tita-tone-amber); }\n.tabGuideStep-todo { color: var(--tita-ink-faint); }\n.tabGuideStep > span { display: grid; gap: 2px; }\n.tabGuideStep strong { color: var(--tita-ink); font-size: 11px; font-weight: 700; line-height: 1.45; }\n.tabGuideStep small { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; }\n.tabGuideSections { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }\n.tabGuideSection { border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }\n.tabGuideSectionWide { grid-column: 1 / -1; }\n.tabGuideSections > .tabGuideSection:last-child { border-bottom: 0; padding-bottom: 0; }\n.tabGuideSection h3 { margin: 0 0 8px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.tabGuideDefinitions { display: grid; margin: 0; }\n.tabGuideDefinitions > div { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 13px; align-items: baseline; border-bottom: 1px solid var(--tita-line); padding: 9px 0; }\n.tabGuideDefinitions > div:last-child { border-bottom: 0; padding-bottom: 0; }\n.tabGuideDefinitions dt { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 700; }\n.tabGuideDefinitions dd { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n/* \u957F\u63D0\u793A\u8BCD\u5148\u6298\u8D77\u6765\uFF1A380px \u7684\u680F\u91CC\u6574\u6BB5\u94FA\u5F00\u4F1A\u5360\u6389\u597D\u51E0\u5C4F\uFF0C\u800C\u5B83\u662F\u53C2\u8003\u6750\u6599\u4E0D\u662F\u6B63\u6587\u3002 */\n.tabGuidePromptDetails { border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); }\n.tabGuidePromptDetails > summary { cursor: pointer; padding: 9px 13px; color: var(--tita-primary); font-size: 11px; font-weight: 650; list-style: none; }\n.tabGuidePromptDetails > summary::-webkit-details-marker { display: none; }\n.tabGuidePromptDetails > summary::before { content: '\u25B8'; display: inline-block; width: 14px; color: var(--tita-ink-faint); }\n.tabGuidePromptDetails[open] > summary { border-bottom: 1px solid var(--tita-line); }\n.tabGuidePromptDetails[open] > summary::before { content: '\u25BE'; }\n.tabGuidePromptDetails > summary:hover { color: var(--tita-primary-hover); }\n.tabGuidePromptDetails > summary:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: -2px; }\n.tabGuidePromptDetails .tabGuidePrompt { border: 0; border-radius: 0; background: transparent; }\n\n.tabGuidePrompt { overflow-x: auto; margin: 0; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); padding: 13px 14px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; line-height: 1.7; white-space: pre-wrap; }\n.tabGuidePrompt + ul { margin-top: 9px; }\n.tabGuideSection ul { display: grid; gap: 6px; margin: 0; padding: 0 0 0 17px; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n.tabGuideSection li::marker { color: var(--tita-primary); }\n\n/* \u4E24\u680F\u653E\u4E0D\u4E0B\u65F6**\u53E0\u6210\u4E00\u680F**\uFF1A\u753B\u5E03\u62FF\u5230\u6574\u5E45\u5BBD\u5EA6\uFF0C\u8BF4\u660E\u843D\u5230\u5B83\u4E0B\u9762\u3002\n \u65AD\u70B9\u53D6 1520 \u800C\u4E0D\u662F 1180\uFF1A\u5DE6\u5217\u8981\u88C5\u4E0B 1172px \u5BBD\u7684\u6574\u56FE\uFF0C\u7A84\u4E8E 1520 \u65F6\u4E24\u680F\u4F1A\u8BA9\u56FE\u7F29\u5230\n \u300C\u4E00\u773C\u770B\u5168\u4F46\u8BFB\u4E0D\u51FA\u6B65\u9AA4\u300D\uFF0C\u90A3\u8FD8\u4E0D\u5982\u53E0\u8D77\u6765\u3002 */\n@media (max-width: 1520px) {\n .tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: 112px minmax(0, 1fr); gap: 13px; }\n}\n\n/* \u7A84\u5230\u653E\u4E0D\u4E0B\u300C\u56FE + \u53F3\u680F\u300D\u65F6\uFF0CInspector **\u843D\u5230\u753B\u5E03\u4E0B\u9762**\uFF0C\u4E0D\u518D\u6D6E\u5728\u56FE\u4E0A\u3002\n \u9608\u503C\u4E0E\u7EC4\u4EF6\u91CC\u7684 `BESIDE_MIN_WIDTH` \u662F\u540C\u4E00\u4E2A\u6570\uFF0C\u4E24\u5904\u5FC5\u987B\u4E00\u8D77\u6539\u3002 */\n@container (max-width: 1100px) {\n .tabGuideInspector { position: static; width: auto; max-height: none; margin: 0 14px 14px; box-shadow: none; }\n .tabGuideInspectorBody { overflow: visible; }\n}\n\n@media (max-width: 820px) {\n .tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n}\n\n@media (max-width: 820px) {\n .attributionGuideIntro { grid-template-columns: auto minmax(0, 1fr); }\n .attributionGuideFormula { grid-column: 2; justify-items: start; text-align: left; }\n .attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; }\n .attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }\n .attributionGuideField { grid-template-columns: 90px minmax(0, 1fr); gap: 5px 12px; }\n .attributionGuideField span { grid-column: 2; }\n}\n\n@media (max-width: 560px) {\n .attributionGuide { gap: 28px; }\n .attributionGuideIntro { grid-template-columns: 1fr; gap: 10px; }\n .attributionGuideFormula { grid-column: auto; }\n .attributionGuideIntroCopy h2 { font-size: 19px; }\n .attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; padding: 14px; }\n .attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }\n .attributionGuideConnector span { width: auto; }\n .attributionGuideRelations { display: grid; }\n .attributionGuideCaseIntro { display: grid; gap: 7px; }\n .attributionGuideTable { display: block; overflow-x: auto; white-space: nowrap; }\n .attributionGuideTable tbody td { min-width: 160px; white-space: normal; }\n}\n\n/* ---------------------------------------------------------------- trial page\n *\n * \u8BD5\u8DD1\u9875\u7684\u9996\u5C4F\u6309\u300C\u8F93\u5165 \u2192 \u7F16\u8BD1\u94FE \u2192 \u62A5\u544A\u300D\u7EC4\u7EC7\u3002\u8F93\u5165\u662F\u552F\u4E00\u9700\u8981\u64CD\u4F5C\u7684\u533A\u57DF\uFF0C\u56DB\u6BB5\u94FE\u8DEF\n * \u53EA\u5728\u6CA1\u6709\u62A5\u544A\u65F6\u4F5C\u4E3A\u9884\u89C8\u51FA\u73B0\uFF1B\u8DD1\u5B8C\u540E\u8BA9\u77E9\u9635\u6210\u4E3A\u7B2C\u4E00\u773C\u7684\u4EA7\u7269\u3002\u6574\u9875\u53EA\u4FDD\u7559\u4E00\u4E2A\u771F\u6B63\u7684\n * \u5BB9\u5668\u8FB9\u754C\uFF0C\u907F\u514D\u5728\u8BF4\u660E\u3001\u9009\u62E9\u5668\u548C\u7A7A\u6001\u4E4B\u95F4\u53E0\u51FA\u4E00\u7EC4\u4E92\u76F8\u7ADE\u4E89\u7684\u5361\u7247\u3002\n */\n.page-trialContent {\n gap: 18px;\n}\n\n.trialPageIntro {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: 14px;\n border-bottom: 1px solid var(--tita-line);\n padding: 2px 0 18px;\n}\n\n.trialPageIntroMark {\n display: inline-flex;\n width: 36px;\n height: 36px;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--tita-primary-line);\n border-radius: 10px;\n background: var(--tita-primary-soft);\n color: var(--tita-primary);\n}\n\n.trialPageIntroCopy { min-width: 0; }\n.trialPageIntroCopy h2 { margin: 0; color: var(--tita-ink); font-size: 20px; font-weight: 740; letter-spacing: -.025em; line-height: 1.25; }\n.trialPageIntroCopy p { max-width: 62ch; margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 12.5px; line-height: 1.7; }\n\n.trialPageBoundary {\n display: grid;\n justify-items: end;\n gap: 2px;\n padding-top: 2px;\n text-align: right;\n}\n\n.trialPageBoundary span { color: var(--tita-primary); font-size: 10.5px; font-weight: 700; }\n.trialPageBoundary strong { color: var(--tita-ink-muted); font-size: 10.5px; font-weight: 600; white-space: nowrap; }\n\n.trialSourcePanel {\n display: grid;\n gap: 16px;\n border: 1px solid var(--tita-line);\n border-radius: 12px;\n background: var(--tita-surface);\n padding: 18px 20px 15px;\n}\n\n.trialPanelHead { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }\n.trialPanelHead h3 { margin: 0; color: var(--tita-ink); font-size: 14px; font-weight: 720; letter-spacing: -.01em; }\n.trialPanelHead p { margin: 4px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; }\n.trialPanelMeta { flex: 0 0 auto; color: var(--tita-ink-faint); font-size: 10.5px; white-space: nowrap; }\n\n.trialSourceControls { display: flex; flex-wrap: wrap; align-items: end; gap: 10px; }\n.trialSourceSelect { display: grid; min-width: min(380px, 100%); flex: 1 1 320px; gap: 5px; }\n.trialControlLabel { color: var(--tita-ink-muted); font-size: 10.5px; font-weight: 650; }\n.trialDocumentSelect { width: 100%; max-width: 100%; }\n.trialSourceOr { align-self: center; color: var(--tita-ink-faint); font-size: 11px; }\n.trialUploadButton { min-height: 32px; }\n.trialSourceControls .tita-trialClear { margin-bottom: 2px; }\n.trialSourceNote { margin: 0; border-top: 1px solid var(--tita-line); padding-top: 11px; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.6; }\n\n.trialEmptyState {\n display: grid;\n grid-template-columns: minmax(210px, .8fr) minmax(0, 1.5fr);\n align-items: center;\n gap: 22px;\n border: 1px dashed var(--tita-line-strong);\n border-radius: 12px;\n background: var(--tita-surface-muted);\n padding: 18px 20px;\n}\n\n.trialEmptyCopy { min-width: 0; }\n.trialEmptyTitle { display: inline-flex; align-items: center; gap: 6px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.trialEmptyTitle svg { color: var(--tita-primary); }\n.trialEmptyCopy p { margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.7; }\n\n.trialStageRail { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; padding: 0; list-style: none; }\n.trialStageRail li { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: 7px; min-width: 0; padding-right: 15px; }\n.trialStageRail li:not(:last-child)::after { content: ''; position: absolute; top: 9px; left: 20px; right: 5px; height: 1px; background: var(--tita-line-strong); }\n.trialStageDot { position: relative; z-index: 1; display: inline-flex; width: 19px; height: 19px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 999px; background: var(--tita-surface); color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9.5px; font-weight: 700; }\n.trialStageRail li > span:last-child { display: grid; min-width: 0; gap: 2px; }\n.trialStageRail strong { color: var(--tita-ink); font-size: 10.5px; font-weight: 700; line-height: 1.4; }\n.trialStageRail small { color: var(--tita-ink-muted); font-size: 9.5px; line-height: 1.5; }\n\n.page-trialContent > .tita-trialLoading,\n.page-trialContent > .tita-trialError { margin-top: -4px; }\n.page-trialContent > .tita-trialSummary { margin-top: -2px; border-radius: 12px; padding: 13px 15px; }\n\n@media (max-width: 760px) {\n .page-main { padding-inline: 20px; }\n .page-bar { padding-inline: 20px; }\n .tabGuideDetail { padding-inline: 17px; }\n .trialPageIntro { grid-template-columns: auto minmax(0, 1fr); }\n .trialPageBoundary { grid-column: 2; justify-items: start; padding-top: 0; text-align: left; }\n .trialEmptyState { grid-template-columns: 1fr; gap: 16px; }\n}\n\n\n@media (max-width: 560px) {\n .page-main { padding: 20px 14px 90px; }\n .page-bar { padding: 11px 14px; }\n .tabGuideDetailHeader { grid-template-columns: auto minmax(0, 1fr); }\n .tabGuideDetailGrid { grid-template-columns: 1fr; }\n .tabGuideFacts { align-items: stretch; flex-direction: column; gap: 8px; }\n .tabGuideFacts > svg { display: none; }\n .tabGuideSections { grid-template-columns: 1fr; }\n .tabGuideSectionWide { grid-column: auto; }\n .tabGuideDefinitions > div { grid-template-columns: 82px minmax(0, 1fr); gap: 9px; }\n .trialPageIntroCopy h2 { font-size: 18px; }\n .trialSourcePanel { padding: 15px 14px 13px; }\n .trialPanelHead { align-items: start; }\n .trialPanelMeta { display: none; }\n .trialSourceControls { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; }\n .trialSourceSelect { min-width: 0; grid-column: 1 / -1; }\n .trialSourceOr { display: none; }\n .trialStageRail { grid-template-columns: 1fr 1fr; row-gap: 13px; }\n .trialStageRail li:nth-child(2)::after { display: none; }\n}\n\n/* The execution queue is internal. The public workspace navigates node versions. */\n.knVersionOverview { display: grid; gap: 8px; margin-top: 18px; border-top: 1px solid var(--tita-line); padding-block: 14px 12px; }\n.knVersionOverview > h2 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 680; }\n.knVersionOverviewList { overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.knVersionOverviewRow { display: grid; grid-template-columns: minmax(150px, .72fr) minmax(100px, .48fr) minmax(0, 1.6fr) auto; align-items: center; gap: 12px; border-bottom: 1px solid var(--tita-line); padding: 8px 12px; }\n.knVersionOverviewRow:last-child { border-bottom: 0; }\n.knVersionOverviewRow:hover, .knVersionOverviewRow[data-current] { background: var(--tita-surface-muted); }\n.knVersionOverviewNode { width: 100%; min-width: 0; height: auto; min-height: 36px; justify-content: flex-start; gap: 9px; padding-inline: 5px; text-align: left; }\n.knVersionOverviewNode > svg { flex: 0 0 auto; color: var(--tita-ink-muted); }\n.knVersionOverviewRow[data-current] .knVersionOverviewNode > svg { color: var(--tita-primary); }\n.knVersionOverviewNode > span { display: grid; min-width: 0; gap: 1px; }\n.knVersionOverviewNode strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 650; }\n.knVersionOverviewNode small, .knVersionOverviewStatus small { color: var(--tita-ink-muted); font-size: 10px; font-variant-numeric: tabular-nums; }\n.knVersionOverviewStatus { display: flex; min-width: 0; align-items: center; gap: 7px; }\n.knVersionOverviewStatus .tita-uiBadge { flex: 0 0 auto; }\n.knVersionOverviewSummary { min-width: 0; margin: 0; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }\n.knVersionOverviewActions { display: flex; min-width: 0; justify-content: flex-end; }\n.knVersionOverviewActions > div { justify-content: flex-end; }\n.knScope { margin-top: 12px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 0 14px 12px; }\n.knStagePanelHead { align-items: center; padding: 12px 0 10px; }\n.knStagePanelHead .ktStageActions { flex-wrap: wrap; justify-content: flex-end; }\n.knScopeSection { margin-top: 10px; border-top: 1px solid var(--tita-line); padding-top: 10px; }\n.knScopeSectionHead { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 6px 10px; color: var(--tita-ink-muted); font-size: 11px; }\n.knScopeSectionHead strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 650; }\n.knScopeSectionHead > span { margin-right: auto; }\n.knScopeItems { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; max-height: 180px; overflow: auto; padding-top: 12px; font-size: 12px; }\n.knScopeItems.knScopeSources { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: stretch; gap: 5px 8px; max-height: 210px; padding-top: 8px; }\n.knScopeItem { display: inline-flex; align-items: center; gap: 7px; min-width: 0; max-width: 100%; }\n.knScopeItem span { min-width: 0; flex: 1; overflow-wrap: anywhere; text-align: left; }\n.knScopeItem small { white-space: nowrap; color: var(--tita-ink-muted); }\n.knVersionLayout { display: grid; grid-template-columns: minmax(230px, .65fr) minmax(0, 2fr); gap: 24px; margin-top: 22px; }\n.knVersionList { min-width: 0; border-right: 1px solid var(--tita-line); padding-right: 18px; }\n.knVersionList h3, .knVersionDetail h3 { margin: 0 0 12px; font-size: 13px; font-weight: 650; }\n.knVersion { padding: 8px 0; border-bottom: 1px solid var(--tita-line); }\n.knVersion[data-selected] { background: var(--tita-surface-muted); }\n.knVersionButton { width: 100%; justify-content: start; height: auto; min-height: 34px; flex-wrap: wrap; }\n.knVersionDocs { display: grid; gap: 4px; margin-top: 8px; }\n.knVersionDoc { width: 100%; height: auto; min-height: 34px; justify-content: start; flex-wrap: wrap; text-align: left; }\n.knVersionDoc > span { min-width: 0; flex: 1; white-space: normal; overflow-wrap: anywhere; }\n.knVersionDoc[aria-pressed=\"true\"], .knVersionButton[aria-pressed=\"true\"] { color: var(--tita-primary); }\n.knVersionDetail { min-width: 0; }\n.knLogSection { margin-top: 16px; border-top: 1px solid var(--tita-line); padding-top: 14px; }\n.knLogSection > h3 { margin: 0 0 10px; color: var(--tita-ink); font-size: 13px; font-weight: 650; }\n.knLogEvents { display: grid; gap: 8px; margin: 18px 0 26px; padding: 0; list-style: none; }\n.knLogEvents li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; font-size: 12px; line-height: 1.6; overflow-wrap: anywhere; }\n.knLogEvents time, .knModelCallHead time { color: var(--tita-ink-muted); font-size: 11px; font-variant-numeric: tabular-nums; }\n.knModelCall { min-width: 0; padding-block: 16px; border-top: 1px solid var(--tita-line); }\n.knModelCallHead { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 12px; }\n.knPager { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-block: 12px; font-size: 12px; font-variant-numeric: tabular-nums; }\n.ktSettings { grid-template-columns: minmax(0, 1fr); }\n.ktSettingsCol { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; gap: 24px; }\n.ktFlatParameters { display: grid; gap: 16px; margin-top: 20px; }\n@media (max-width: 760px) {\n .knVersionLayout, .ktSettingsCol { grid-template-columns: minmax(0, 1fr); }\n .knVersionList { border-right: 0; padding-right: 0; }\n .knScopeItems { max-height: 150px; }\n}\n.ktSettingsCol .ktFlatParameters { margin-top: 0; }\n.ktSettingFull { grid-column: 1 / -1; }\n@media (max-width: 760px) {\n .knVersionOverviewRow { grid-template-columns: minmax(0, 1fr) auto; gap: 4px 10px; }\n .knVersionOverviewNode { grid-column: 1; }\n .knVersionOverviewStatus { grid-column: 2; justify-content: flex-end; }\n .knVersionOverviewSummary { grid-column: 1 / -1; padding-inline: 5px; white-space: normal; }\n .knVersionOverviewActions { grid-column: 1 / -1; justify-content: flex-start; padding-inline: 5px; }\n .knScopeItems.knScopeSources { grid-template-columns: minmax(0, 1fr); }\n .knStagePanelHead .ktStageActions { align-self: stretch; }\n}\n.knScopeItem[aria-pressed=\"true\"] { border-color: var(--tita-primary); color: var(--tita-primary); background: var(--tita-primary-soft); }\n.knScopeItem { white-space: normal; text-align: left; height: auto; min-height: 30px; }\n";
|
|
7315
|
+
var css3 = "/*\n * \u901A\u7528\u6574\u9875\uFF08\u62BD\u53D6\u8BD5\u8DD1 / \u7F16\u8BD1\u94FE\u8DEF\uFF09\u7684\u9875\u9762\u6837\u5F0F\u3002\n *\n * \u5B83\u548C `doc-page.css` \u662F\u540C\u4E00\u79CD\u4E1C\u897F\uFF1A\u4E00\u4EFD**\u5355\u72EC\u7684\u6D4F\u89C8\u5668\u6587\u6863**\uFF0C\u6CA1\u6709 DSH \u5916\u58F3\u3001\u6CA1\u6709\u4FA7\u680F\n * \u90A3 380px \u7684\u5BBD\u5EA6\u9650\u5236\u3002\u6240\u4EE5\u8FD9\u91CC\u7684\u51B3\u5B9A\u56F4\u7ED5\u4E24\u4EF6\u4E8B\uFF1A\n *\n * 1. **\u4E00\u6761\u5E38\u9A7B\u7684\u7A84\u6761**\u56DE\u7B54\u300C\u6211\u5728\u54EA\u4E00\u9875\u3001\u770B\u7684\u662F\u54EA\u4E2A\u5E93\u300D\u2014\u2014 \u6574\u9875\u53EF\u4EE5\u6EDA\u5F88\u4E45\uFF0C\u6807\u9898\u6EDA\u8D70\u4E86\n * \u5C31\u53EA\u5269\u5185\u5BB9\uFF0C\u800C\u8FD9\u4E09\u9875\u90FD\u9700\u8981\u77E5\u9053\u81EA\u5DF1\u5728\u54EA\u3002\n * 2. **\u4E24\u6761\u5185\u5BB9\u5BBD\u5EA6**\uFF1A\u8BF4\u660E\u7C7B\uFF08\u7F16\u8BD1\u94FE\u8DEF\uFF09\u662F\u8BFB\u6392\u7248\uFF0C\u7EA6 860px \u5C31\u591F\uFF1B\u8BD5\u8DD1\u62A5\u544A\n * \u91CC\u6709\u4E00\u5F20\u77E9\u9635\uFF0C\u7ED9\u5B83 1180px\u3002\u5BBD\u5EA6\u662F**\u5185\u5BB9**\u7684\u5C5E\u6027\uFF0C\u6240\u4EE5\u6309\u9875\u7ED9\uFF0C\u4E0D\u6309\u58F3\u7ED9\u3002\n *\n * \u989C\u8272\u5168\u90E8\u8D70\u5171\u4EAB\u4EE4\u724C\uFF08`@tita-agent/ui/styles.css` \u5E26\u8FDB\u6765\u7684\u90A3\u4E00\u5957\uFF09\u3002\u63D2\u4EF6\u81EA\u5DF1\u7684\n * `styles.css` \u4E5F\u4E00\u8D77\u8FDB\u6765\uFF1A\u8FD9\u4E09\u9875\u6E32\u67D3\u7684\u662F\u9762\u677F\u91CC\u7684\u7EC4\u4EF6\uFF08Card / Button / \u77E9\u9635\u8868\uFF09\uFF0C\n * \u90A3\u4E9B\u7C7B\u540D\u4F4F\u5728\u90A3\u513F\u3002\n */\n\n:root { color-scheme: light; }\n\nhtml { -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0;\n background: var(--tita-canvas);\n color: var(--tita-ink);\n font-family: var(--tita-font);\n font-size: 13px;\n line-height: 1.65;\n}\n\n/* \u5E38\u9A7B\u7A84\u6761\u3002\u5B83**\u4E0D\u5438\u9876\u5230\u5E95**\uFF1A\u6EDA\u52A8\u6761\u4E00\u52A8\u5C31\u5728\u8FD9\u91CC\uFF0C\u56DE\u7B54\u300C\u8FD9\u662F\u54EA\u4E00\u9875\u300D\u3002 */\n.page-bar {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n border-bottom: 1px solid var(--tita-line);\n background: var(--tita-surface);\n padding: 13px 28px;\n}\n\n.page-bar h1 { margin: 0; font-size: 16px; font-weight: 720; letter-spacing: -0.02em; }\n.page-barMeta { color: var(--tita-ink-muted); font-size: 11.5px; }\n\n.page-main { padding: 28px 28px 120px; }\n\n/* \u5185\u5BB9\u5217\u3002\u5BBD\u5EA6\u6309\u9875\u7ED9\uFF1A\u8BF4\u660E 860\uFF0C\u8BD5\u8DD1\u62A5\u544A 1080\uFF0C\u67B6\u6784\u8BF4\u660E\u9875 1560\u3002 */\n.page-column { width: 100%; margin-inline: auto; }\n.page-column-help { max-width: 860px; }\n.page-column-trial { max-width: 1080px; }\n.page-column-tasks { max-width: 1220px; }\n/* \u67B6\u6784\u8BF4\u660E\u9875\u662F**\u4E00\u5757\u753B\u5E03**\uFF0C\u4E0D\u662F\u4E00\u680F\u6B63\u6587\uFF1A\u753B\u5E03\u8BBE\u8BA1\u5BBD 1172px\uFF0C\u518D\u52A0\u53F3\u5217 400px\uFF0C\n \u7A84\u4E8E 1560 \u5C31\u53EA\u80FD\u9760\u7F29\u5B57\u628A\u56FE\u585E\u8FDB\u6765\uFF08\u5B9E\u6D4B 0.55 \u500D\uFF0C\u5361\u7247\u4E0A\u7684\u5B57\u8BFB\u4E0D\u51FA\uFF09\u3002 */\n.page-column-guide { max-width: 1560px; }\n/* \u8FD9\u4E00\u9875\u7684\u8FB9\u6846\u8981\u8D34\u4F4F\u89C6\u53E3\u5E95\uFF0C\u6240\u4EE5\u628A\u7ED9\u300C\u8BFB\u6392\u7248\u300D\u90A3\u51E0\u9875\u7559\u7684 120px \u9875\u811A\u5185\u8FB9\u8DDD\u6536\u6210 40px \u2014\u2014\n \u7701\u4E0B\u7684 80px \u5168\u90E8\u6362\u6210\u753B\u5E03\u9AD8\u5EA6\u3002`:has` \u4E0D\u652F\u6301\u65F6\u8FD9\u6761\u88AB\u5FFD\u7565\uFF0C\u9000\u56DE 120px\uFF0C\u4E0D\u4F1A\u574F\u3002 */\n.page-main:has(> .page-column-guide) { padding-bottom: 40px; }\n\n/* \u5730\u5740\u4E0D\u5BF9\u3001\u6216\u8FD8\u6CA1\u8F7D\u5165\u65F6\u7684\u6574\u9875\u72B6\u6001\u3002\u4E0E `doc-page.css` \u7684 `.docPage-state` \u540C\u5F62\u3002 */\n.page-state {\n max-width: 720px;\n margin: 56px auto;\n border: 1px solid var(--tita-line);\n border-radius: 10px;\n background: var(--tita-surface);\n padding: 18px 20px;\n color: var(--tita-ink-muted);\n}\n.page-state h2 { margin: 0 0 6px; color: var(--tita-ink); font-size: 16px; font-weight: 680; }\n.page-state p { margin: 0 0 8px; line-height: 1.7; }\n.page-state code {\n border-radius: 4px;\n background: var(--tita-surface-muted);\n padding: 1px 5px;\n font-family: var(--tita-mono);\n font-size: 11.5px;\n}\n\n/* \u5185\u5BB9\u533A\u91CC\u7684\u4E00\u884C\u63D0\u793A\uFF1A\u8F7D\u5165\u4E2D\u3001\u6216\u300C\u5217\u8868\u6CA1\u53D6\u5230\u4F46\u7167\u6837\u80FD\u8DD1\u300D\u3002**\u4E0D\u662F** `.page-state` \u2014\u2014\n \u90A3\u4E00\u6761\u662F\u6574\u9875\u72B6\u6001\u7684\u5361\u7247\uFF08\u4E0A\u4E0B\u5404 56px \u5916\u8FB9\u8DDD\uFF09\uFF0C\u585E\u8FDB\u5185\u5BB9\u6D41\u91CC\u4F1A\u6491\u51FA\u4E00\u5927\u6BB5\u7A7A\u767D\u3002 */\n.page-notice {\n margin: 0 0 12px;\n border: 1px solid var(--tita-tone-amber-line);\n border-radius: 9px;\n background: var(--tita-tone-amber-tint);\n color: var(--tita-warning);\n padding: 8px 10px;\n font-size: 11.5px;\n}\n.page-loading { margin: 0; color: var(--tita-ink-muted); font-size: 12px; }\n\n/* ---------------------------------------------------------- \u77E5\u8BC6\u5904\u7406\n *\n * 2026-10-28 \u91CD\u6392\u3002\u4E0A\u4E00\u7248\u628A\u300C\u8F93\u5165\u8303\u56F4 / \u7ED3\u679C\u6458\u8981 / \u8F68\u8FF9 / \u539F\u59CB\u65E5\u5FD7\u300D\u5168\u5806\u5728\u4E3B\u680F\uFF0C\n * \u800C\u771F\u6B63\u8981\u5904\u7406\u7684\u5BF9\u8C61\uFF08\u6587\u6863\uFF09\u7F29\u5728\u53F3\u680F 260px \u7684\u5C0F\u5217\u8868\u91CC \u2014\u2014 \u4EBA\u627E\u4E0D\u5230\u300C\u54EA\u4E9B\u6587\u6863\u8FD8\u6CA1\u62BD\u300D\u3002\n *\n * \u8FD9\u4E00\u7248\u7684\u5C42\u7EA7\u6309\u95EE\u9898\u6392\uFF1A\n *\n * 1. **\u9875\u5934** \u2014\u2014 \u73B0\u5728\u4EC0\u4E48\u72B6\u6001 + \u89C6\u56FE\u5207\u6362 + \u4E09\u4E2A\u52A8\u4F5C\u3002\n * 2. **\u9636\u6BB5\u8F68** \u2014\u2014 \u4E94\u6BB5\u5404\u8D70\u5230\u54EA\u3002\u5B83\u662F\u8FD9\u4E00\u9875\u7684\u9AA8\u67B6\uFF0C\u6A2A\u8D2F\u6574\u9875\u3002\n * 3. **\u4E3B\u680F** \u2014\u2014 \u8FD9\u4E00\u6BB5\u7684\u5BF9\u8C61\uFF1A\u6587\u6863 / \u5206\u7EC4 / \u7D22\u5F15\u3002\u6BCF\u884C\u5148\u8BF4\u4ED6\u662F\u4EC0\u4E48\uFF0C\u518D\u8BF4\u62BD\u5230\u4E86\u591A\u5C11\u3002\n * 4. **\u4FA7\u680F** \u2014\u2014 \u8FC7\u7A0B\uFF1A\u9009\u4E2D\u90A3\u4E00\u4EFD\u7684\u8F68\u8FF9\uFF0C\u4EE5\u53CA\u8FD0\u884C\u8BB0\u5F55\u3002\u8F68\u8FF9\u662F\u65C1\u8BC1\uFF0C\u4E0D\u5360\u4E3B\u4F4D\u3002\n *\n * \u4E00\u6761\u7EAA\u5F8B\u6CA1\u53D8\uFF1A**\u4E00\u4E2A\u4E8B\u5B9E\u53EA\u51FA\u73B0\u4E00\u6B21**\u3002\u9636\u6BB5\u72B6\u6001\u53EA\u5728\u8F68\u4E0A\uFF0C\u5F85\u529E\u6570\u53EA\u5728\u540C\u4E00\u683C\u7B2C\u4E8C\u884C\uFF0C\n * \u6587\u6863\u72B6\u6001\u53EA\u5728\u884C\u5C3E\u90A3\u679A\u5FBD\u6807\u3002\n */\n.ktPage { display: grid; min-width: 0; gap: 14px; color: var(--tita-ink); }\n\n/* ---- \u9875\u5934 */\n.ktTop { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px 18px; }\n.ktTopLead { display: grid; min-width: 0; gap: 8px; }\n.ktTopActions { display: flex; flex: 0 0 auto; align-items: center; gap: 6px; }\n\n/* \u89C6\u56FE\u5207\u6362\uFF1A\u4E24\u4E2A\u8BCD\uFF0C\u4E00\u4E2A\u5E95\u3002\u5B83\u662F**\u540C\u4E00\u9875\u7684\u4E24\u79CD\u8BFB\u6CD5**\uFF0C\u4E0D\u662F\u7B2C\u4E8C\u6B65\u5BFC\u822A\uFF0C\n \u6240\u4EE5\u505A\u6210\u5C0F\u53F7\u5206\u6BB5\u63A7\u4EF6\uFF0C\u800C\u4E0D\u662F\u53C8\u4E00\u6761\u5E26\u4E0B\u5212\u7EBF\u7684\u9875\u7B7E\u3002 */\n.ktViews { display: inline-flex; width: fit-content; align-items: center; gap: 2px; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); padding: 2px; }\n.ktView { border: 0; border-radius: 6px; background: transparent; padding: 3px 11px; color: var(--tita-ink-muted); font: inherit; font-size: 11.5px; font-weight: 620; line-height: 1.5; cursor: pointer; }\n.ktView:hover { color: var(--tita-ink); }\n.ktView[aria-pressed=\"true\"] { background: var(--tita-surface); color: var(--tita-ink); box-shadow: 0 1px 2px rgb(16 24 40 / .08); }\n.ktView:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n\n\n/* Execution owns the primary reading order. Library freshness stays in object metadata. */\n.ktCurrent { display: grid; min-width: 0; gap: 13px; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-surface); padding: 18px 20px; }\n.ktCurrentScope { margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.ktCurrentWork { display: flex; min-width: 0; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 7px 18px; }\n.ktCurrentWork strong { min-width: 0; color: var(--tita-ink); font-size: 14px; line-height: 1.6; overflow-wrap: anywhere; }\n.ktCurrentWork > span { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; color: var(--tita-primary); font-size: 12px; }\n.ktCurrentCounts, .ktCurrentTiming { display: flex; flex-wrap: wrap; align-items: baseline; gap: 7px 20px; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.6; font-variant-numeric: tabular-nums; }\n.ktCurrentCounts strong { color: var(--tita-ink); font-weight: 650; }\n.ktCurrentTiming { gap: 5px 18px; font-size: 11px; }\n.ktCurrentTiming > span { display: inline-flex; align-items: center; gap: 5px; }\n.ktCurrentHint { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktCompletion { border-top: 1px solid var(--tita-line); padding-top: 12px; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.65; }\n.ktCompletion p { margin: 0; }\n.ktCompletion ul { display: grid; gap: 6px; margin: 10px 0; padding: 0; list-style: none; }\n.ktCompletion li { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 12px; }\n.ktCompletion li strong { color: var(--tita-ink); font-weight: 600; }\n.ktCompletion li span { overflow-wrap: anywhere; }\n.ktRailHeading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 5px 15px; }\n.ktRailHeading strong { color: var(--tita-ink); font-size: 12px; font-weight: 650; }\n.ktRailHeading > span { color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktActivity h3 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 650; }\n.ktActivityHint { margin: 5px 0 12px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktActivityList { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }\n.ktActivityList li { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 12px 0; }\n.ktActivityList li:last-child { border-bottom: 0; }\n.ktActivityList time { padding-top: 1px; color: var(--tita-ink-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n.ktActivityList p { margin: 0; color: var(--tita-ink); font-size: 11.5px; line-height: 1.65; overflow-wrap: anywhere; }\n.ktActivityList [data-warning] p { color: var(--tita-warning); }\n.ktWarnings { margin: 14px 0 6px; border: 1px solid color-mix(in srgb, var(--tita-warning) 30%, var(--tita-line)); border-radius: 8px; background: color-mix(in srgb, var(--tita-warning) 5%, var(--tita-surface)); padding: 10px; color: var(--tita-ink); font-size: 11px; line-height: 1.65; }\n.ktWarnings > strong { display: flex; align-items: center; gap: 6px; font-weight: 650; }\n.ktWarnings ul { margin: 8px 0 0; padding-left: 16px; overflow-wrap: anywhere; }\n.ktWarnings li + li { margin-top: 6px; }\n@media (max-width: 560px) {\n .ktCurrent { padding: 14px; }\n .ktCurrentCounts { gap: 5px 12px; }\n .ktCompletion li { grid-template-columns: minmax(0, 1fr); gap: 2px; }\n}\n\n.ktError, .ktNotice { display: flex; margin: 0; align-items: center; gap: 7px; border: 1px solid var(--tita-line); border-radius: 8px; padding: 8px 11px; font-size: 12px; line-height: 1.55; }\n.ktError { border-color: color-mix(in srgb, var(--tita-danger) 32%, var(--tita-surface)); background: color-mix(in srgb, var(--tita-danger) 8%, var(--tita-surface)); color: var(--tita-danger); }\n.ktNotice { border-color: var(--tita-tone-green-line); background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.ktError > span, .ktNotice > span { min-width: 0; flex: 1 1 auto; }\n.ktNoticeClose { margin-left: auto; color: inherit; }\n.ktEmpty { margin: 0; padding: 22px 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.6; }\n.ktHint { margin: 9px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.ktHintWarn { color: var(--tita-warning); }\n\n/* ---- \u9636\u6BB5\u8F68\uFF1A\u590D\u7528\u77E5\u8BC6\u5E93 SourceRaw \u2192 Knowledge \u7684\u4E24\u884C\u8282\u70B9\u6837\u5F0F */\n.ktWork { display: flex; min-width: 0; flex-direction: column; gap: 14px; }\n.ktPipelineSteps { width: 100%; }\n.ktPipelineStep { display: grid; width: 100%; min-width: 0; min-height: 70px; align-content: start; gap: 3px; padding: 7px 9px; }\n.ktPipelineStep[data-running] { border-color: var(--tita-primary); background: var(--tita-primary-soft); }\n.ktPipelineStep .tita-kbStepFacts { align-items: center; }\n.ktPipelineStep .tita-kbStepNote { display: inline-flex; flex: 0 0 auto; overflow: visible; }\n.ktPipelineStep .tita-uiBadge { font-size: 9px; }\n.ktPipelineProgress { width: 100%; height: 4px; }\n\n/* ---- \u4E24\u680F\uFF1A\u4E3B\u680F\u662F\u5BF9\u8C61\uFF0C\u4FA7\u680F\u662F\u8FC7\u7A0B */\n.ktBody { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(316px, 1fr); align-items: start; gap: 18px; }\n.ktMain { min-width: 0; }\n.ktStageTab { min-width: 0; }\n\n/* ---- \u9636\u6BB5\u5361\uFF1A\u5361\u5185**\u4E0D\u518D\u5957\u5361**\uFF0C\u5206\u8282\u7528\u53D1\u4E1D\u7EBF */\n.ktStage { min-width: 0; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.ktStageHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 15px 17px 0; }\n.ktStageIntro { min-width: 0; }\n.ktStageIntro h2 { margin: 0; color: var(--tita-ink); font-size: 15px; font-weight: 700; line-height: 1.35; letter-spacing: -.015em; }\n.ktStageIntro p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.55; }\n.ktStageActions { display: flex; flex: 0 0 auto; align-items: center; gap: 4px; }\n/* \u4E00\u884C\u5143\u4FE1\u606F\uFF1A\u8303\u56F4\u3001\u6A21\u578B\u3001\u4E0A\u6B21\u5904\u7406\u91CF\u3001\u6700\u8FD1\u65F6\u95F4\u3002\u5B83\u662F**\u8BFB\u6570**\uFF0C\u6240\u4EE5\u7B49\u5BBD\u6570\u5B57\u3001\u989C\u8272\u66F4\u8F7B\u3002 */\n.ktStageMeta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 3px 0; margin: 9px 0 0; padding: 0 17px 12px; border-bottom: 1px solid var(--tita-line); color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; font-variant-numeric: tabular-nums; }\n.ktStageMeta i { margin: 0 7px; font-style: normal; }\n\n/* ---- \u6587\u6863\u5217\u8868\n *\n * \u4E00\u884C\u4E09\u884C\u6587\u5B57\uFF1A\u6807\u9898 / \u5B83\u662F\u4EC0\u4E48 / \u62BD\u51FA\u4E86\u591A\u5C11\u3002\u5DE6\u4FA7\u65B9\u6846\u662F**\u4E0B\u4E00\u6B21\u8FD0\u884C\u7684\u8303\u56F4**\uFF0C\n * \u884C\u672C\u8EAB\u662F**\u770B\u8FD9\u4E00\u4EFD\u7684\u8F68\u8FF9** \u2014\u2014 \u4E24\u4E2A\u547D\u4E2D\u533A\u5404\u505A\u5404\u7684\u4E8B\uFF0C\u4E0D\u4E92\u76F8\u5192\u5145\u3002\n */\n.ktDocs { display: grid; margin: 0; padding: 0; list-style: none; }\n.ktDoc { display: flex; min-width: 0; align-items: flex-start; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 10px 17px 11px; transition: background-color 120ms ease-out; }\n.ktDoc:last-child { border-bottom: 0; }\n.ktDoc:hover { background: var(--tita-surface-muted); }\n.ktDoc[data-selected] { background: color-mix(in srgb, var(--tita-primary) 7%, var(--tita-surface)); }\n.ktDoc[data-selected] .ktDocTitle { color: var(--tita-primary); }\n.ktDocPick { flex: 0 0 auto; border: 0; border-radius: 5px; background: none; padding: 2px 0 0; color: inherit; cursor: pointer; }\n.ktDocPick:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 2px; }\n.ktDocPickBox { display: inline-flex; width: 15px; height: 15px; align-items: center; justify-content: center; border: 1px solid var(--tita-line-strong); border-radius: 4px; background: var(--tita-surface); color: var(--tita-primary); }\n.ktDocPick[aria-pressed=\"true\"] .ktDocPickBox { border-color: var(--tita-primary); background: var(--tita-primary-soft); }\n.ktDocMain { display: grid; min-width: 0; flex: 1 1 auto; gap: 2px; border: 0; border-radius: 6px; background: none; padding: 0; color: inherit; font: inherit; text-align: left; cursor: pointer; }\n.ktDocMain:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 3px; }\n.ktDocMainStatic { cursor: default; }\n.ktDocTitle { min-width: 0; color: var(--tita-ink); font-size: 12.5px; font-weight: 650; line-height: 1.5; overflow-wrap: anywhere; }\n.ktDocMeta { display: flex; flex-wrap: wrap; align-items: baseline; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; font-variant-numeric: tabular-nums; }\n.ktDocMeta i { margin: 0 5px; font-style: normal; }\n/* \u62BD\u5230\u4E86\u591A\u5C11\uFF1A\u8FD9\u4E00\u9875\u6700\u8981\u7D27\u7684\u4E00\u884C\u8BFB\u6570\u3002\u53EF\u4EE5\u6298\u4E24\u884C\uFF0C\u518D\u957F\u5C31\u622A\u65AD \u2014\u2014 \u5B8C\u6574\u6570\u5B57\u5728\u8F68\u8FF9\u5168\u6587\u91CC\u3002 */\n.ktDocFacts { display: -webkit-box; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.ktDocReason { color: var(--tita-warning); }\n.ktDocSide { display: flex; flex: 0 0 auto; align-items: center; padding-top: 1px; }\n\n/* ---- \u7269\u5316\u6CA1\u6709\u6587\u6863\u5217\u8868\uFF1B\u63D0\u70BC\u4E0E\u7D22\u5F15\u5404\u6709\u4E00\u5757\u8BF4\u660E\u3002 */\n.ktDerive, .ktIndex { display: grid; gap: 12px; padding: 15px 17px 17px; }\n.ktDerive h3 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 680; }\n.ktDerive p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n.ktDerive dl, .ktIndex dl { display: grid; gap: 8px; margin: 0; }\n.ktDerive dl > div, .ktIndex dl > div { display: grid; grid-template-columns: 76px minmax(0, 1fr); align-items: start; gap: 10px; }\n.ktDerive dt, .ktIndex dt { color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.6; }\n.ktDerive dd, .ktIndex dd { min-width: 0; margin: 0; color: var(--tita-ink); font-size: 11.5px; line-height: 1.6; overflow-wrap: anywhere; }\n.ktIndexState { display: flex; align-items: center; gap: 9px; }\n.ktIndexState p { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; }\n\n/* ---- \u8FD0\u884C\u8F93\u51FA\uFF08\u9ED8\u8BA4\u6536\u8D77\uFF09 */\n.ktOutput { border-top: 1px solid var(--tita-line); padding: 4px 17px 15px; }\n.ktOutputToggle { gap: 5px; padding-inline: 2px 6px; color: var(--tita-ink-muted); font-size: 11px; font-weight: 650; }\n.ktOutputToggle:hover { color: var(--tita-ink); }\n.ktOutputToggle > span { color: var(--tita-ink-faint); font-size: 10.5px; font-weight: 500; }\n.ktOutputToggle svg { transition: transform 140ms ease-out; }\n.ktOutputToggle[aria-expanded=\"true\"] svg { transform: rotate(180deg); }\n.ktOutputBody { display: grid; gap: 8px; margin-top: 6px; }\n.ktOutputBody > p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; }\n.ktPre { margin: 0; max-height: 320px; overflow: auto; border-radius: 8px; background: var(--tita-surface-muted); padding: 11px 13px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 11.5px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; tab-size: 2; }\n.ktReportsInline { display: flex; flex-wrap: wrap; gap: 14px; }\n.ktLink { display: inline-flex; height: auto; align-items: center; gap: 4px; padding-inline: 0; color: var(--tita-primary); font-size: 11px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px; }\n.ktLink:hover { background: transparent; color: var(--tita-primary); }\n\n/* ---- \u4FA7\u680F\uFF1A\u8F68\u8FF9 / \u8FD0\u884C\u8BB0\u5F55 */\n.ktSide { min-width: 0; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.ktSideTabs { min-width: 0; }\n.ktSideTabsList { display: flex; box-sizing: border-box; width: 100%; height: auto; align-items: center; justify-content: flex-start; gap: 2px; border-radius: 0; border-bottom: 1px solid var(--tita-line); background: transparent; padding: 7px 9px; }\n.ktSideTabsList button { border-radius: 6px; padding: 3px 9px; color: var(--tita-ink-muted); font-size: 11.5px; font-weight: 620; }\n.ktSideTabsList button[data-state=\"active\"] { background: var(--tita-surface-muted); color: var(--tita-ink); }\n.ktSideBadge { margin-left: 5px; color: var(--tita-ink-faint); font-size: 10px; font-variant-numeric: tabular-nums; }\n.ktSidePanel { min-width: 0; padding: 12px 15px 14px; }\n\n.ktTrailHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }\n.ktTrailHead h3 { margin: 0; color: var(--tita-ink); font-size: 12.5px; font-weight: 700; }\n.ktTrailHead p { margin: 2px 0 0; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; }\n.ktTrailCount { flex: 0 0 auto; color: var(--tita-ink-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n.ktTrailFilter { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 9px; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface-muted); padding: 3px 4px 3px 9px; }\n.ktTrailFilter > span { overflow: hidden; color: var(--tita-ink-muted); font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }\n.ktTrailList { display: grid; margin: 6px 0 0; padding: 0; list-style: none; }\n.ktTrailRow { display: grid; width: 100%; min-width: 0; gap: 3px; border: 0; border-bottom: 1px solid var(--tita-line); background: none; padding: 10px 2px; color: var(--tita-ink); font: inherit; text-align: left; cursor: pointer; }\n.ktTrailRow:last-child { border-bottom: 0; padding-bottom: 2px; }\n.ktTrailRow:hover .ktTrailRowTitle { color: var(--tita-primary); text-decoration: underline; text-underline-offset: 3px; }\n.ktTrailRow:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 2px; border-radius: 6px; }\n.ktTrailRowTitle { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 11.5px; font-weight: 620; line-height: 1.5; overflow-wrap: anywhere; }\n.ktTrailRowSummary { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; overflow-wrap: anywhere; }\n.ktTrailRowMeta { display: inline-flex; align-items: center; gap: 5px; color: var(--tita-ink-faint); font-size: 10px; font-variant-numeric: tabular-nums; }\n.ktSideEmpty { display: grid; gap: 4px; padding: 4px 0 8px; }\n.ktSideEmpty strong { color: var(--tita-ink); font-size: 12px; font-weight: 680; }\n.ktSideEmpty p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }\n.ktSideEmptyText { margin: 14px 0 4px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n\n.ktRunsNote { margin: 0 0 4px; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; }\n.ktRunRow { display: grid; gap: 5px; border-bottom: 1px solid var(--tita-line); padding: 11px 0; }\n.ktRunRow:last-of-type { border-bottom: 0; }\n.ktRunTitle { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 7px; }\n.ktRunTitle strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 680; }\n.ktRunSummary { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }\n.ktRunTime { margin: 0; color: var(--tita-ink-faint); font-size: 10px; line-height: 1.5; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.ktRunControls { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 1px; }\n.ktRunToggle { gap: 4px; padding-inline: 6px; color: var(--tita-ink-muted); font-size: 10.5px; }\n.ktRunToggle[aria-expanded=\"true\"] svg { transform: rotate(180deg); }\n.ktRunToggle svg { transition: transform 120ms ease-out; }\n.ktRunSteps { min-width: 0; }\n\n/* ---- \u7F16\u8BD1\u8BBE\u7F6E\n *\n * \u5DE6\u4FA7\u662F\u300C\u8FD9\u4E2A\u5E93\u7528\u4EC0\u4E48\u6A21\u578B\u3001\u5E26\u4EC0\u4E48\u63D0\u793A\u300D\uFF0C\u53F3\u4FA7\u662F\u5750\u6807\u5B9E\u4F53\u6CE8\u518C\u8868\u3002\n * \u5DE6\u7A84\u53F3\u5BBD\uFF1A\u6A21\u578B\u662F\u4E24\u679A\u5B57\u6BB5\uFF0C\u5B9E\u4F53\u662F\u4E00\u5F20\u4F1A\u957F\u7684\u540D\u5355\u3002\n */\n.ktSettings { display: grid; grid-template-columns: minmax(320px, 400px) minmax(0, 1fr); align-items: start; gap: 22px; }\n.ktSettingsCol { display: grid; min-width: 0; gap: 14px; }\n.ktSettingsWide { min-width: 0; }\n.ktSettingCard { min-width: 0; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 14px 15px 15px; }\n.ktSettingHead { display: grid; gap: 2px; margin-bottom: 11px; }\n.ktSettingHead h2 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 700; letter-spacing: -.01em; }\n.ktSettingActions { display: flex; justify-content: flex-end; gap: 6px; margin-top: 10px; }\n\n/* \u601D\u8003\u5F3A\u5EA6\uFF1A\u4E00\u6392\u5C0F\u6863\u4F4D\u3002\u5B83\u4E0D\u662F\u300C\u7B2C\u4E8C\u4E2A\u6A21\u578B\u5217\u8868\u300D\uFF0C\u6240\u4EE5\u7528\u5206\u6BB5\u6309\u94AE\uFF0C\u4E0D\u7528\u4E0B\u62C9\u3002 */\n.ktEffort { margin-top: 12px; border-top: 1px solid var(--tita-line); padding-top: 11px; }\n.ktEffortHead h3 { margin: 0; color: var(--tita-ink); font-size: 12px; font-weight: 680; }\n.ktEffortHead p { margin: 2px 0 8px; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.5; }\n.ktEffortOptions { display: flex; flex-wrap: wrap; gap: 5px; }\n.ktEffortOption { border: 1px solid var(--tita-line-strong); border-radius: 7px; background: var(--tita-surface); padding: 4px 9px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; line-height: 1.4; cursor: pointer; }\n.ktEffortOption:hover { border-color: var(--tita-primary); color: var(--tita-ink); }\n.ktEffortOption:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n.ktEffortOptionOn { border-color: var(--tita-primary); background: var(--tita-primary-soft); color: var(--tita-primary); font-weight: 620; }\n\n/* \u5750\u6807\u5B9E\u4F53\u5728\u5BBD\u5217\u91CC\uFF1A\u628A\u52A8\u4F5C\u9489\u5728**\u7B2C\u4E00\u884C\u53F3\u4FA7**\u3002\n * \u9ED8\u8BA4\u7684 flex-wrap \u4F1A\u628A\u300C\u786E\u8BA4 / \u7F16\u8F91\u300D\u63A8\u5230\u6700\u540E\u4E00\u884C \u2014\u2014 \u90A3\u4E00\u884C\u53EF\u80FD\u5DF2\u7ECF\u662F\n * \u5B9A\u4E49\u6587\u5B57\u7684\u4E0B\u4E00\u884C\uFF0C\u6309\u94AE\u4E8E\u662F\u60AC\u5728\u4E24\u884C\u4E4B\u95F4\u3002\u7528 order \u628A\u540D\u5B57\u4E0E\u52A8\u4F5C\u653E\u56DE\u540C\u4E00\u884C\uFF0C\n * \u5B9A\u4E49\u3001\u522B\u540D\u8FD9\u4E9B\u5360\u6EE1\u4E00\u884C\u7684\u5185\u5BB9\u81EA\u7136\u6362\u5230\u4E0B\u9762\u3002DOM \u987A\u5E8F\u4E0D\u52A8\uFF0CTab \u987A\u5E8F\u4ECD\u662F\u300C\u5148\u8BFB\uFF0C\u540E\u64CD\u4F5C\u300D\u3002 */\n.ktSettingsWide .tita-axisName { order: 0; }\n.ktSettingsWide .tita-axisActions { order: 1; }\n.ktSettingsWide .tita-axisAliases { order: 2; }\n.ktSettingsWide .tita-axisScope { order: 3; }\n\n/* \u5BBD\u5C4F\u65F6\u4FA7\u680F\u5438\u9876\uFF1A\u4E3B\u680F\u53EF\u80FD\u5F88\u957F\uFF0859 \u4E2A\u5206\u7EC4\u7684\u7269\u5316\u9636\u6BB5\uFF09\uFF0C\u8F68\u8FF9\u8981\u4E00\u76F4\u5728\u624B\u8FB9\uFF0C\n \u800C\u4E0D\u662F\u6EDA\u5230\u4E3B\u680F\u5E95\u90E8\u624D\u770B\u89C1\u3002\u7A84\u5C4F\u4E0D\u5438\u9876 \u2014\u2014 \u90A3\u65F6\u5B83\u662F\u4E3B\u680F\u4E0B\u9762\u7684\u4E00\u6574\u5757\u3002 */\n@media (min-width: 1121px) {\n .ktSide { position: sticky; top: 56px; display: flex; max-height: calc(100vh - 74px); flex-direction: column; }\n .ktSideTabs { display: flex; min-height: 0; flex-direction: column; }\n .ktSideTabsList { flex: 0 0 auto; }\n .ktSidePanel { min-height: 0; flex: 1 1 auto; overflow-y: auto; scrollbar-color: var(--tita-line-strong) transparent; scrollbar-width: thin; }\n}\n\n/* ---- \u7A84\u5C4F */\n@media (max-width: 1120px) {\n /* \u4E24\u680F\u5E76\u6392\u9700\u8981\u7EA6 1000px \u624D\u7AD9\u5F97\u4F4F\uFF1B\u518D\u7A84\u5C31\u628A\u4FA7\u680F\u843D\u5230\u4E0B\u9762\u3002 */\n .ktBody { grid-template-columns: minmax(0, 1fr); }\n .ktSettings { grid-template-columns: minmax(0, 1fr); }\n}\n\n@media (max-width: 760px) {\n .page-main { padding: 18px 16px 70px; }\n .page-bar { padding-inline: 16px; }\n .ktTop { align-items: flex-start; }\n .ktPipelineSteps { gap: 5px; }\n .ktPipelineSteps > .tita-kbStepArrow { display: none; }\n .ktPipelineSteps > .tita-kbStepGroup { flex-basis: calc(50% - 5px); }\n .ktPipelineStep { min-height: 68px; }\n .ktStageHead { flex-direction: column; }\n .ktStageActions { align-self: stretch; }\n .knStagePanelHead .ktStageActions { justify-content: flex-start; }\n .ktStageMeta { padding-inline: 15px; }\n .ktDoc { padding-inline: 15px; }\n .ktDocSide { align-self: flex-start; }\n}\n\n@media (max-width: 430px) {\n .ktPipelineStep { padding: 7px; }\n .ktDocMeta { font-size: 10px; }\n .ktDocFacts { font-size: 10.5px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ktPipelineStep, .ktRunToggle svg, .ktOutputToggle svg { transition: none; }\n}\n\n/* ---------------------------------------------------------- attribution event guide\n *\n * \u8FD9\u662F\u8BF4\u660E\u9875\uFF0C\u4E0D\u662F\u53E6\u4E00\u4E2A\u4E1A\u52A1\u9762\u677F\u3002\u7528\u4E00\u6761\u4E3B\u6D41\u7A0B\u548C\u51E0\u6761\u7EC6\u8FB9\u754C\u627F\u8F7D\u5185\u5BB9\uFF0C\u907F\u514D\u628A\u56DB\u4E2A\n * \u5BF9\u8C61\u505A\u6210\u4E00\u7EC4\u4E92\u76F8\u5D4C\u5957\u7684\u5361\u7247\u3002Event \u7684\u91CD\u70B9\u662F\u300C\u4E00\u6B21\u7ECF\u8FC7\u300D\uFF0C\u6240\u4EE5\u65F6\u95F4\u7EBF\u7684\u987A\u5E8F\u6BD4\u88C5\u9970\u6027\u7684\n * \u8282\u70B9\u6570\u91CF\u66F4\u91CD\u8981\u3002\n */\n.attributionGuide { display: grid; gap: 34px; }\n.attributionGuideIntro { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 16px; border-bottom: 1px solid var(--tita-line); padding: 4px 0 24px; }\n.attributionGuideMark { display: inline-flex; width: 40px; height: 40px; align-items: center; justify-content: center; border: 1px solid var(--tita-tone-green-line); border-radius: 12px; background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.attributionGuideIntroCopy { min-width: 0; }\n.attributionGuideEyebrow, .attributionGuideKicker { margin: 0; color: var(--tita-primary); font-size: 10px; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }\n.attributionGuideIntroCopy h2 { margin: 3px 0 7px; color: var(--tita-ink); font-size: 22px; font-weight: 750; letter-spacing: -.03em; line-height: 1.25; }\n.attributionGuideIntroCopy p:not(.attributionGuideEyebrow) { max-width: 64ch; margin: 0; color: var(--tita-ink-muted); font-size: 12.5px; line-height: 1.75; }\n.attributionGuideFormula { display: grid; gap: 4px; justify-items: end; padding-top: 4px; text-align: right; }\n.attributionGuideFormula span { color: var(--tita-ink-faint); font-size: 10.5px; }\n.attributionGuideFormula code, .attributionGuideCaseIntro code { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 11px; }\n.attributionGuideSection { display: grid; gap: 16px; }\n.attributionGuideSectionHead { display: grid; gap: 3px; }\n.attributionGuideSectionHead h3 { margin: 0; color: var(--tita-ink); font-size: 16px; font-weight: 730; letter-spacing: -.018em; line-height: 1.35; }\n.attributionGuideSectionHead p:last-child { max-width: 72ch; margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.7; }\n.attributionGuidePipeline { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1.25fr) auto minmax(0, 1fr); align-items: center; gap: 9px; border: 1px solid var(--tita-line); border-radius: 14px; background: var(--tita-surface); padding: 18px 16px; }\n.attributionGuideBranches { display: grid; gap: 10px; border: 1px dashed var(--tita-line-strong); border-radius: 12px; background: var(--tita-surface-muted); padding: 10px; }\n/* 1px \u53D1\u4E1D\u7EBF\uFF0C\u4E0D\u662F 3px \u8272\u6761\uFF1A\u8FD9\u4E00\u9875\u5176\u4F59\u7684\u5206\u9694\u5168\u662F\u53D1\u4E1D\u7EBF\uFF0C\u4E00\u6761 3px \u7684\u7AD6\u6761\u4F1A\u628A\u5B83\u8BFB\u6210\n \u53E6\u4E00\u4E2A\u4E1C\u897F\uFF08\u800C\u4E14\u90A3\u662F\u6A21\u677F\u7684\u8BB0\u53F7\uFF09\u3002\u6BB5\u4F4D\u8EAB\u4EFD\u8272\u4ECD\u7136\u5728\u4E0B\u9762\u90A3\u679A\u5C0F\u5FBD\u6807\u4E0A\uFF0C\u6CA1\u6709\u4E22\u3002 */\n.attributionGuideNode { display: grid; min-width: 0; gap: 3px; border-left: 1px solid var(--tita-line-strong); padding: 2px 0 2px 11px; }\n.attributionGuideNode-source { border-left-color: var(--tita-tone-blue); }\n.attributionGuideNode-event { border-left-color: var(--tita-tone-green); }\n.attributionGuideNode-knowledge { border-left-color: var(--tita-tone-violet); }\n.attributionGuideNode-card { border-left-color: var(--tita-tone-amber); }\n.attributionGuideNodeIcon { display: inline-flex; width: 26px; height: 26px; align-items: center; justify-content: center; border: 1px solid var(--tita-line); border-radius: 8px; color: var(--tita-ink-muted); }\n.attributionGuideNode-source .attributionGuideNodeIcon { background: var(--tita-tone-blue-tint); color: var(--tita-tone-blue); }\n.attributionGuideNode-event .attributionGuideNodeIcon { background: var(--tita-tone-green-tint); color: var(--tita-tone-green); }\n.attributionGuideNode-knowledge .attributionGuideNodeIcon { background: var(--tita-tone-violet-tint); color: var(--tita-tone-violet); }\n.attributionGuideNode-card .attributionGuideNodeIcon { background: var(--tita-tone-amber-tint); color: var(--tita-tone-amber); }\n.attributionGuideNode code { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 10px; }\n.attributionGuideNode strong { color: var(--tita-ink); font-size: 12px; font-weight: 720; }\n.attributionGuideNode span { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.5; }\n.attributionGuideConnector { display: grid; justify-items: center; gap: 3px; color: var(--tita-primary); }\n.attributionGuideConnector span { width: 70px; color: var(--tita-ink-faint); font-size: 9px; line-height: 1.35; text-align: center; }\n.attributionGuideRelations { display: flex; flex-wrap: wrap; gap: 8px 18px; border-top: 1px solid var(--tita-line); padding-top: 11px; color: var(--tita-ink-muted); font-size: 10.5px; }\n.attributionGuideRelations span { display: inline-flex; align-items: center; gap: 5px; }\n.attributionGuideRelations svg { color: var(--tita-primary); }\n/* \u5E95\u8272\u7559\u7740\uFF08\u5B83\u8BF4\u7684\u662F\u300C\u8FD9\u4E00\u5757\u662F\u6848\u4F8B\u300D\uFF09\uFF0C\u7AD6\u6761\u6536\u6210 1px\u3002 */\n.attributionGuideCaseIntro { display: flex; align-items: center; justify-content: space-between; gap: 14px; border-left: 1px solid var(--tita-tone-green); background: var(--tita-tone-green-tint); padding: 10px 13px; }\n.attributionGuideCaseIntro > div { display: grid; gap: 3px; }\n.attributionGuideLabel { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; }\n.attributionGuideCaseIntro p { margin: 0; color: var(--tita-ink-muted); font-size: 10.5px; }\n.attributionEventTrace { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }\n.attributionTraceStep { position: relative; display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 13px; min-height: 70px; }\n.attributionTraceStep:not(:last-child)::before { position: absolute; top: 25px; bottom: 0; left: 14px; width: 1px; background: var(--tita-line-strong); content: ''; }\n.attributionTraceMarker { position: relative; z-index: 1; display: flex; align-items: flex-start; justify-content: center; }\n.attributionTraceMarker span { display: inline-flex; width: 29px; height: 29px; align-items: center; justify-content: center; border: 1px solid var(--tita-line-strong); border-radius: 999px; background: var(--tita-surface); color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9px; font-weight: 750; }\n.attributionTraceStep-symptom .attributionTraceMarker span { border-color: var(--tita-tone-blue-line); color: var(--tita-tone-blue); }\n.attributionTraceStep-check .attributionTraceMarker span { border-color: var(--tita-tone-green-line); color: var(--tita-tone-green); }\n.attributionTraceStep-root .attributionTraceMarker span { border-color: var(--tita-tone-amber-line); color: var(--tita-tone-amber); }\n.attributionTraceBody { display: grid; gap: 2px; padding: 1px 0 18px; }\n.attributionTraceBody code { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 10px; }\n.attributionTraceBody strong { color: var(--tita-ink); font-size: 12.5px; font-weight: 700; }\n.attributionTraceBody p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }\n.attributionGuideFields { display: grid; border-top: 1px solid var(--tita-line); }\n.attributionGuideField { display: grid; grid-template-columns: 100px minmax(190px, .9fr) minmax(0, 1.6fr); gap: 14px; align-items: baseline; border-bottom: 1px solid var(--tita-line); padding: 10px 0; }\n.attributionGuideField code { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10.5px; }\n.attributionGuideField strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; }\n.attributionGuideField span { color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; }\n.attributionGuideTable { width: 100%; border-collapse: collapse; background: var(--tita-surface); font-size: 11px; }\n.attributionGuideTable th, .attributionGuideTable td { border-bottom: 1px solid var(--tita-line); padding: 10px 11px; text-align: left; vertical-align: top; }\n.attributionGuideTable thead th { background: var(--tita-surface-muted); color: var(--tita-ink-faint); font-size: 10px; font-weight: 700; }\n.attributionGuideTable tbody th { color: var(--tita-ink); font-weight: 700; white-space: nowrap; }\n.attributionGuideTable tbody th svg { margin-right: 5px; vertical-align: -2px; color: var(--tita-primary); }\n.attributionGuideTable td { color: var(--tita-ink-muted); line-height: 1.55; }\n.attributionGuideClosing { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 13px; border-top: 1px solid var(--tita-line-strong); padding-top: 17px; }\n.attributionGuideClosingIcon { display: inline-flex; width: 32px; height: 32px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 9px; background: var(--tita-primary-soft); color: var(--tita-primary); }\n.attributionGuideClosing h3 { margin: 3px 0 6px; color: var(--tita-ink); font-size: 15px; font-weight: 720; }\n.attributionGuideClosing p { max-width: 72ch; margin: 0 0 8px; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.7; }\n.attributionGuideClosingRule { color: var(--tita-ink) !important; }\n\n/* --------------------------------------------------------------- tab guide\n *\n * \u67B6\u6784\u8BF4\u660E\u9875\uFF08`/knowledge/pages/help/overview`\uFF09\u3002\n *\n * \u7248\u5F0F\uFF1A**\u4E00\u6761\u94FE\u8DEF = \u753B\u5E03\u4E0A\u7684\u4E00\u6761\u5DE5\u5E8F\u5E26**\uFF0C\u53F3\u8FB9\u4E00\u5217\u662F\u5F53\u524D\u73AF\u8282\u7684\u8BF4\u660E\u3002\n * \u753B\u5E03\u7684\u6784\u56FE\u7EAA\u5F8B\u5199\u5728 `GuideArchitectureCanvas.tsx` \u7684\u6587\u4EF6\u5934 \u2014\u2014 \u8FD9\u91CC\u53EA\u7BA1\u957F\u76F8\u3002\n *\n * \u5C3A\u5BF8\u4E0A\u7684\u4E24\u6761\u786C\u89C4\u77E9\uFF0C\u6539\u7248\u65F6\u6700\u5BB9\u6613\u8E29\uFF1A\n * 1. **\u89C6\u53E3\u9AD8\u5EA6\u4E0D\u662F CSS \u5B9A\u7684**\uFF0C\u5B83\u7531\u7EC4\u4EF6\u6309\u7F29\u653E\u6BD4\u4F8B\u5199\u5728\u884C\u5185 style \u4E0A\uFF1B\u8FDB\u5165\u5168\u5C4F\u540E\u7531 CSS \u63A5\u7BA1\uFF0C\n * \u8BA9\u753B\u5E03\u586B\u6EE1\u89C6\u53E3\u3002\n * 2. **\u5361\u7247\u3001\u724C\u5B50\u3001\u5E26\u7684\u4F4D\u7F6E\u5168\u90E8\u7531 `arch/model.ts` \u7B97\u597D\u5199\u5728\u884C\u5185 style \u4E0A**\uFF0C\n * \u8FD9\u91CC\u4E0D\u8BB8\u51FA\u73B0\u7B2C\u4E8C\u5957\u5750\u6807\u3002\n */\n\n.tabGuide { display: grid; gap: 20px; }\n.tabGuideWorkbench { display: block; }\n/* \u5DE6\u5217\u53EA\u6709\u753B\u5E03\uFF0C\u4E0D\u5438\u9876\uFF1A\u6574\u56FE\u6700\u9AD8 1120px\uFF0C\u6BD4\u89C6\u53E3\u9AD8 \u2014\u2014 \u5438\u9876\u4F1A\u628A\u4E0B\u534A\u5F20\u56FE\u9489\u5728\u5C4F\u5E55\u5916\u3002 */\n.tabGuideCanvasColumn { display: grid; min-width: 0; gap: 14px; }\n\n/* ---------------------------------------------------------------- \u753B\u5E03 */\n\n.tabGuideCanvas { position: relative; display: flex; min-width: 0; min-height: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-canvas); box-shadow: 0 1px 2px rgb(16 24 40 / .04); container-type: inline-size; }\n\n/* \u6D6E\u5C42\uFF1A\u753B\u5E03\u4E0A\u53EA\u5269\u5DE6\u4E0A\u89D2\u8FD9\u4E00\u6392\u94FE\u8DEF Tab\u3002\u5B83\u4E0D\u5360\u753B\u5E03\u7684\u8BBE\u8BA1\u5C3A\u5BF8\u3002 */\n.tabGuideCanvasOverlay { position: absolute; z-index: 2; top: 10px; left: 10px; display: flex; align-items: flex-start; gap: 12px; pointer-events: none; }\n.tabGuideCanvasOverlay > * { pointer-events: auto; }\n\n.tabGuideChainTabs .tita-uiTabsList { display: inline-flex; max-width: 100%; overflow-x: auto; border: 1px solid var(--tita-line); border-radius: 9px; background: color-mix(in srgb, var(--tita-surface) 93%, transparent); padding: 2px; box-shadow: 0 1px 2px rgb(16 24 40 / .05); backdrop-filter: blur(6px); scrollbar-width: none; }\n.tabGuideChainTabs .tita-uiTabsList::-webkit-scrollbar { display: none; }\n.tabGuideChainTabs .tita-uiTabsTrigger { min-height: 30px; border: 0; border-radius: 7px; padding-inline: 13px; font-size: 12px; }\n.tabGuideChainTabs .tita-uiTabsTrigger[data-state='active'] { border-bottom-color: transparent; background: var(--tita-surface); box-shadow: 0 1px 2px rgb(15 23 42 / .12), inset 0 0 0 1px var(--tita-primary-shadow); }\n\n/* **\u56FA\u5B9A\u8FB9\u6846\u3002** \u9AD8\u5EA6\u7531\u8FD9\u91CC\u7ED9\uFF0C\u4E0D\u8DDF\u7F29\u653E\u8D70 \u2014\u2014 \u7F29\u653E\u53EA\u52A8\u6846\u91CC\u7684\u5185\u5BB9\u3002\n \u7B2C\u4E00\u7248\u628A\u9AD8\u5EA6\u5199\u6210\u300C\u677F\u9AD8 \xD7 \u6BD4\u4F8B\u300D\uFF0C\u4E8E\u662F\u634F\u5408\u65F6\u8FDE\u8FB9\u6846\u4E00\u8D77\u957F\u5927/\u7F29\u5C0F\uFF0C\u8BFB\u8D77\u6765\u50CF\u6574\u9875\u5728\u52A8\u3002\n\n \u9AD8\u5EA6\u53D6\u300C\u89C6\u53E3\u9AD8 - \u9876\u680F - \u5185\u8FB9\u8DDD - \u4E00\u884C\u8BFB\u6CD5\u300D\uFF0C\u4E0A\u4E0B\u9650\u515C\u4F4F\uFF1A\u592A\u77EE\u8BFB\u4E0D\u4E86\u56FE\uFF0C\u592A\u9AD8\u4F1A\u628A\n \u4E00\u884C\u8BFB\u6CD5\u6324\u51FA\u5C4F\u5E55\u3002\u6EDA\u52A8\u4EA4\u7ED9\u5BB9\u5668\u81EA\u5DF1\uFF08\u6EDA\u5230\u5934\u4F1A\u7EE7\u7EED\u6EDA\u9875\u9762\uFF09\uFF0C**\u4E0D\u8981 `overscroll-behavior: contain`**\n \u2014\u2014 \u90A3\u4F1A\u628A\u9875\u9762\u6EDA\u52A8\u9501\u5728\u753B\u5E03\u91CC\u3002 */\n.tabGuideCanvasViewport { position: relative; width: 100%; height: clamp(520px, calc(100vh - 124px), 1120px); overflow: auto; background: var(--tita-canvas); cursor: default; scrollbar-color: var(--tita-line-strong) transparent; touch-action: pan-x pan-y; }\n.tabGuideCanvasViewport[data-pannable='true'] { cursor: grab; }\n.tabGuideCanvasViewportPanning { cursor: grabbing !important; user-select: none; }\n\n/* \u677F\uFF1A\u8BBE\u8BA1\u5C3A\u5BF8 1172 \xD7 902\u3002\u7F29\u653E\u7531 `transform` \u627F\u62C5 \u2014\u2014 \u6BD4\u4F8B\u662F\u7EC4\u4EF6\u6309\u88C1\u526A\u533A\u7B97\u7684\uFF0C\n \u4E0D\u5199\u8FDB CSS\uFF0C\u907F\u514D\u4E24\u5904\u5404\u5199\u4E00\u4EFD\u3002 */\n.tabGuideCanvasFrame { position: absolute; overflow: hidden; }\n.tabGuideCanvasBoard { position: relative; transform-origin: top left; }\n\n/* \u8282\u70B9\u8BE6\u60C5\u662F\u753B\u5E03\u5185\u7684 Inspector\uFF1A\u53F3\u4FA7\u56FA\u5B9A\uFF0C\u5185\u5BB9\u72EC\u7ACB\u6EDA\u52A8\uFF0C\u4E0D\u6539\u53D8\u56FE\u7684\u8BBE\u8BA1\u5BBD\u5EA6\u3002 */\n.tabGuideInspector { position: absolute; z-index: 3; top: 58px; right: 12px; display: flex; width: min(380px, calc(100% - 24px)); max-height: calc(100% - 70px); flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: color-mix(in srgb, var(--tita-surface) 97%, transparent); box-shadow: 0 12px 28px rgb(16 24 40 / .13); backdrop-filter: blur(5px); }\n.tabGuideInspectorHeader { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 9px 10px 9px 13px; color: var(--tita-ink); }\n.tabGuideInspectorHeaderCopy { display: grid; gap: 2px; min-width: 0; }\n.tabGuideInspectorHeaderCopy span { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }\n.tabGuideInspectorHeaderCopy strong { color: var(--tita-ink); font-size: 12px; font-weight: 750; }\n.tabGuideInspectorBody { min-height: 0; overflow-y: auto; padding: 0 14px 18px; scrollbar-color: var(--tita-line-strong) transparent; }\n.tabGuideInspectorBody .tabGuideDetailColumn { gap: 0; }\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDetailGrid,\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n.tabGuideInspectorBody .tabGuideDetail { border: 0; border-radius: 0; background: transparent; padding: 15px 0 18px; box-shadow: none; }\n.tabGuideInspectorBody .tabGuideConceptRelation { border-right: 0; border-left: 0; border-radius: 0; margin-inline: -14px; padding-inline: 14px; }\n\n/* ---------------------------------------------------------------- \u5E26\u4E0E\u8FDE\u7EBF */\n\n.tabGuideBoardEdges { position: absolute; top: 0; left: 0; }\n/* \u5E26\u53EA\u662F**\u5E95\u7EB9**\uFF0C\u4E0D\u662F\u5361\u7247\uFF1A\u5B83\u7684\u4F5C\u7528\u662F\u8BA9\u4EBA\u4E00\u773C\u770B\u51FA\u300C\u8FD9\u51E0\u5F20\u5361\u662F\u4E00\u6761\u94FE\u8DEF\u4E0A\u7684\u300D\u3002\n \u6240\u4EE5\u5B83\u6BD4\u753B\u5E03\u5E95\u8272\u53EA\u6DF1\u4E00\u6863\uFF0C\u4E14\u4E0D\u518D\u94FA\u6EE1\u6574\u5C4F\uFF08\u88C1\u526A\u533A\u6709\u591A\u9AD8\uFF0C\u5B83\u5C31\u6709\u591A\u9AD8\uFF09\u3002 */\n.tabGuideBoardBand { fill: color-mix(in srgb, var(--tita-surface-muted) 62%, var(--tita-surface)); stroke: var(--tita-line); stroke-width: 1; }\n.tabGuideBoardLaneBadge { fill: var(--tita-surface); stroke: var(--tita-line-strong); stroke-width: 1; }\n.tabGuideBoardLaneBadge-interaction { fill: var(--tita-tone-blue-tint); stroke: var(--tita-tone-blue-line); }\n.tabGuideBoardLaneBadge-knowledge { fill: var(--tita-tone-violet-tint); stroke: var(--tita-tone-violet-line); }\n.tabGuideBoardLaneBadge-evolution { fill: var(--tita-tone-amber-tint); stroke: var(--tita-tone-amber-line); }\n.tabGuideBoardLaneLabel { fill: var(--tita-ink); font-family: var(--tita-font); font-size: 11.5px; font-weight: 720; }\n.tabGuideBoardLaneNote { fill: var(--tita-ink-muted); font-family: var(--tita-mono); font-size: 9.5px; }\n.tabGuideBoardEdge { fill: none; stroke-linecap: round; stroke-linejoin: round; transition: opacity 180ms ease; }\n/* \u8FB9\u6807\u7B7E\u538B\u5728\u901A\u9053\u4E0A\uFF1A\u767D\u5E95\u9760 `paint-order: stroke` \u63CF\u4E00\u5708\u753B\u5E03\u8272\uFF0C\u800C\u4E0D\u662F\u52A0\u4E00\u5757\u77E9\u5F62\n \u2014\u2014 \u77E9\u5F62\u4F1A\u76D6\u4F4F\u5E95\u4E0B\u90A3\u6761\u7EBF\u672C\u8EAB\u3002 */\n.tabGuideBoardEdgeLabel { fill: var(--tita-primary); font-family: var(--tita-font); font-size: 10px; font-weight: 700; text-anchor: middle; paint-order: stroke; stroke: var(--tita-canvas); stroke-width: 5px; stroke-linejoin: round; transition: opacity 180ms ease; }\n\n/* ---------------------------------------------------------------- \u73AF\u8282\u5361\u7247 */\n\n.tabGuideCard { position: absolute; display: flex; box-sizing: border-box; flex-direction: column; gap: 5px; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface); padding: 10px 11px 9px; color: var(--tita-ink); font-family: var(--tita-font); text-align: left; cursor: pointer; box-shadow: 0 1px 2px rgb(16 24 40 / .04); transition: background 180ms ease, border-color 140ms ease, box-shadow 140ms ease; }\n.tabGuideCard:hover { border-color: var(--tita-primary-line); box-shadow: 0 2px 8px rgb(16 24 40 / .09); }\n.tabGuideCard:focus-visible { outline: 2px solid var(--tita-primary); outline-offset: 1px; }\n.tabGuideCardSelected { border-color: var(--tita-primary); box-shadow: 0 0 0 3px var(--tita-primary-soft), 0 2px 8px rgb(16 24 40 / .09); }\n/* \u6B21\u7EA7\u73AF\u8282**\u4E0D\u9760\u900F\u660E\u5EA6**\uFF1A0.14 \u7684\u4E0D\u900F\u660E\u6587\u5B57\u662F\u8BFB\u4E0D\u4E86\u7684\u7070\uFF0C\u800C\u5B83\u4EEC\u5C31\u5728\u65C1\u8FB9\uFF0C\n \u4ECD\u7136\u662F\u8FD9\u5F20\u56FE\u7684\u4E00\u90E8\u5206\u3002\u6539\u6210\u300C\u65E0\u5E95 + \u65E0\u63CF\u8FB9 + \u7070\u5B57\u300D\uFF0C\u767D\u5E95 4.97:1\u3001\u7070\u5E26 4.93:1\u3002 */\n/* \u6B21\u7EA7\u5361\u7247\uFF1A\u4E22\u5E95\u3001\u4E22\u63CF\u8FB9\uFF0C**\u6574\u4F53\u518D\u538B\u4E00\u6863\u900F\u660E\u5EA6**\u3002\n \u53EA\u628A\u5B57\u6362\u6210\u7070\u8272\u662F\u4E0D\u591F\u7684 \u2014\u2014 \u8FB9\u4E0A\u90A3\u4E9B\u7EBF\u5DF2\u7ECF\u6DE1\u5230 0.1\uFF0C\u5B57\u8FD8\u7AD9\u5728\u540C\u4E00\u4E2A\u6DF1\u5EA6\u4E0A\uFF0C\n \u770B\u4E0A\u53BB\u50CF\u300C\u6CA1\u4EAE\u7684\u90A3\u4E9B\u53CD\u800C\u66F4\u6E05\u695A\u300D\u3002\u60AC\u505C\u6062\u590D\uFF0C\u56E0\u4E3A\u70B9\u5B83\u5C31\u662F\u8981\u5207\u8FC7\u53BB\u3002 */\n.tabGuideCardDim { border-color: transparent; background: transparent; box-shadow: none; opacity: .42; transition: opacity 180ms ease; }\n.tabGuideCardDim:hover, .tabGuideCardDim:focus-visible { opacity: 1; }\n.tabGuideCardDim .tabGuideCardTitle,\n.tabGuideCardDim .tabGuideCardSub,\n.tabGuideCardDim .tabGuideCardStep { color: var(--tita-ink-faint); }\n.tabGuideCardDim .tabGuideCardStep i { color: var(--tita-line-strong); }\n.tabGuideCardDim .tabGuideCardDot { background: var(--tita-line-strong) !important; }\n.tabGuideCardDim:hover { border-color: var(--tita-primary-line); background: var(--tita-surface); }\n.tabGuideCardDim:hover .tabGuideCardTitle { color: var(--tita-ink); }\n.tabGuideCardDim:hover .tabGuideCardSub,\n.tabGuideCardDim:hover .tabGuideCardStep { color: var(--tita-ink-muted); }\n\n.tabGuideCardHead { display: flex; min-width: 0; align-items: center; gap: 6px; }\n.tabGuideCardDot { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 999px; }\n.tabGuideCardTitle { overflow: hidden; min-width: 0; font-size: 12.5px; font-weight: 650; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }\n/* \u72B6\u6001\u8BCD\u5E26\u8272\uFF0C\u4E14**\u56DB\u6863\u5404\u6709\u81EA\u5DF1\u7684\u8272**\uFF1A\u8FD9\u5F20\u56FE\u662F\u5951\u7EA6\uFF0C\u505A\u6CA1\u505A\u51FA\u6765\u662F\u7B2C\u4E00\u4FE1\u606F\u3002 */\n\n.tabGuideCardSub { display: -webkit-box; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.4; -webkit-box-orient: vertical; }\n/* \u6B65\u9AA4\u8868\uFF1A**\u7F16\u53F7 + \u4E00\u6761**\u3002\u7F16\u53F7\u8BF4\u660E\u987A\u5E8F\uFF0C\u800C\u987A\u5E8F\u6B63\u662F\u94FE\u8DEF\u7684\u610F\u601D\u3002 */\n.tabGuideCardSteps { display: flex; min-height: 0; flex-direction: column; overflow: hidden; }\n.tabGuideCardStep { display: flex; align-items: baseline; gap: 6px; overflow: hidden; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 13.5px; white-space: nowrap; }\n.tabGuideCardStep > i { flex: 0 0 auto; width: 9px; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9px; font-style: normal; font-weight: 700; text-align: right; }\n.tabGuideCardStep[data-state='partial'] > i { color: var(--tita-tone-amber); }\n.tabGuideCardStep[data-state='todo'],\n.tabGuideCardStep[data-state='todo'] > i { color: var(--tita-ink-faint); }\n.tabGuideCardStepRest { color: var(--tita-ink-faint); font-style: italic; }\n\n/* ---------------------------------------------------------------- \u53F3\u5217 */\n\n.tabGuideDetailColumn { display: grid; min-width: 0; gap: 14px; }\n/* \u53F3\u5217\u53EA\u6709 340\u2013400px\uFF1A\u8BE6\u60C5\u91CC\u90A3\u4E24\u7EC4\u4E24\u680F\u7F51\u683C\u5728\u8FD9\u91CC\u4F1A\u88AB\u6324\u6210\u4E24\u6761\u7A84\u67F1\uFF0C\u4E00\u5F8B\u6539\u6210\u5355\u680F\u3002\n \u5BBD\u5EA6\u518D\u7A84\uFF08\u22641180px\uFF09\u65F6\u4E24\u680F\u5DE5\u4F5C\u53F0\u5DF2\u7ECF\u53E0\u8D77\u6765\uFF0C\u90A3\u65F6\u518D\u653E\u5F00\u6210\u4E24\u680F\u3002 */\n.tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n/* \u5BF9\u8C61\u5173\u7CFB\u56FE\u5728 400px \u7684\u53F3\u5217\u91CC\uFF1A\u4E09\u4E2A\u8282\u70B9 + \u4E24\u652F\u7BAD\u5934\u8981\u6324\u8FDB\u4E00\u884C\uFF0C\n \u5426\u5219\u300CDocument \u2192 Knowledge \u2192 WikiCard\u300D\u4F1A\u6298\u6210\u4E24\u884C\uFF0C\u94FE\u8DEF\u5C31\u8BFB\u65AD\u4E86\u3002 */\n.tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n\n/* \u73AF\u8282\u8F68\uFF1A\u8FD9\u6761\u94FE\u8DEF\u6709\u54EA\u51E0\u73AF\uFF0C\u70B9\u4E00\u4E0B\u5C31\u8D70\u8FC7\u53BB\u3002\u5B83\u56DE\u7B54\u753B\u5E03\u56DE\u7B54\u4E0D\u4E86\u7684\u90A3\u4E2A\u95EE\u9898 \u2014\u2014\n \u753B\u5E03\u4E0A\u4E00\u6761\u94FE\u8DEF\u662F\u7A7A\u95F4\u5173\u7CFB\uFF0C\u300C\u6211\u73B0\u5728\u8BFB\u7684\u662F\u7B2C\u51E0\u73AF\u300D\u662F\u987A\u5E8F\u5173\u7CFB\u3002 */\n.tabGuideChainRail { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 9px 12px; }\n.tabGuideChainRailHead { color: var(--tita-ink-faint); font-size: 10px; font-weight: 700; letter-spacing: .06em; }\n.tabGuideChainRail ol { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; margin: 0; padding: 0; list-style: none; }\n.tabGuideChainRail li { display: flex; align-items: center; }\n.tabGuideChainRail li + li::before { content: '\u203A'; margin-right: 3px; color: var(--tita-ink-faint); font-size: 11px; }\n.tabGuideChainRailStep { display: inline-flex; align-items: center; gap: 5px; border: 1px solid transparent; border-radius: 7px; background: transparent; padding: 3px 7px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; cursor: pointer; transition: background 140ms ease, color 140ms ease, border-color 140ms ease; }\n.tabGuideChainRailStep:hover { background: var(--tita-surface-muted); color: var(--tita-ink); }\n.tabGuideChainRailStep:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }\n.tabGuideChainRailStep[aria-pressed='true'] { border-color: var(--tita-primary-line); background: var(--tita-primary-soft); color: var(--tita-primary); font-weight: 650; }\n.tabGuideChainRailIndex { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; font-variant-numeric: tabular-nums; }\n.tabGuideChainRailStep[aria-pressed='true'] .tabGuideChainRailIndex { color: var(--tita-primary); }\n\n/* ---------------------------------------------------------------- \u8BE6\u60C5 */\n\n/* \u5BF9\u8C61\u5173\u7CFB\u56FE\u3002**\u5B83\u53EA\u51FA\u73B0\u5728 380px \u7684 Inspector \u91CC**\uFF0C\u6240\u4EE5\u7248\u9762\u6309\u7A84\u680F\u5B9A\uFF1A\n \u4E0A\u9762\u4E00\u6BB5\u8BDD\u3001\u4E0B\u9762\u4E24\u884C\u8282\u70B9\u3002\u4E09\u4E2A\u8282\u70B9\u6324\u4E00\u884C\u662F\u786C\u8981\u6C42 \u2014\u2014 \u6298\u6210\u4E24\u884C\u5C31\u628A\u94FE\u8DEF\u8BFB\u65AD\u4E86\u3002 */\n.tabGuideConceptRelation { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; border: 1px solid var(--tita-primary-line); border-radius: 12px; background: var(--tita-primary-soft); padding: 14px 15px; }\n.tabGuideConceptRelationIntro h3 { margin: 0; color: var(--tita-ink); font-size: 14px; font-weight: 760; line-height: 1.35; }\n.tabGuideConceptRelationIntro p:last-child { margin: 7px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }\n.tabGuideRelationFlow { min-width: 0; }\n.tabGuideRelationRow { display: flex; flex-wrap: nowrap; align-items: center; justify-content: flex-start; gap: 6px; }\n.tabGuideRelationNode { display: inline-flex; height: auto; min-width: 0; flex: 1 1 0; flex-direction: column; align-items: flex-start; gap: 1px; border-color: var(--tita-primary-line); padding: 6px 8px; }\n.tabGuideRelationNode span { color: currentColor; font-family: var(--tita-mono); font-size: 9.5px; font-weight: 760; }\n.tabGuideRelationNode small { color: var(--tita-ink-muted); font-size: 9px; font-weight: 500; line-height: 1.3; }\n.tabGuideRelationNode[aria-pressed=\"true\"] small { color: inherit; opacity: .78; }\n.tabGuideRelationArrow { width: 12px; flex: 0 0 auto; color: var(--tita-primary); }\n.tabGuideRelationBranch { display: flex; align-items: center; justify-content: flex-start; gap: 6px; margin: 5px 0; padding-left: 40px; color: var(--tita-primary); font-size: 9.5px; font-weight: 700; }\n.tabGuideRelationFootnote { margin: 9px 0 0; color: var(--tita-ink-faint); font-size: 10px; line-height: 1.5; text-align: left; }\n\n/* \u8BF4\u660E\u5361\uFF1A\u4E00\u5F20\u5361\u3001\u51E0\u6761\u53D1\u4E1D\u7EBF\uFF0C\u4E0D\u518D\u662F\u4E00\u645E\u5C0F\u65B9\u5757\u3002 */\n.tabGuideDetail { scroll-margin-top: 74px; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-surface); padding: 18px 20px 20px; box-shadow: 0 1px 2px rgb(16 24 40 / .04); }\n.tabGuideDetailHeader { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 12px; }\n.tabGuideDetailIcon { display: inline-flex; width: 36px; height: 36px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 10px; background: var(--tita-primary-soft); color: var(--tita-primary); }\n.tabGuideDetailIcon-knowledge { color: var(--tita-tone-violet); background: var(--tita-tone-violet-tint); border-color: var(--tita-tone-violet-line); }\n.tabGuideDetailIcon-attribution { color: var(--tita-tone-green); background: var(--tita-tone-green-tint); border-color: var(--tita-tone-green-line); }\n.tabGuideDetailIcon-memory { color: var(--tita-tone-amber); background: var(--tita-tone-amber-tint); border-color: var(--tita-tone-amber-line); }\n.tabGuideDetailIcon-eval { color: var(--tita-tone-blue); background: var(--tita-tone-blue-tint); border-color: var(--tita-tone-blue-line); }\n.tabGuideDetailHeader h2 { margin: 0; color: var(--tita-ink); font-size: 18px; font-weight: 740; letter-spacing: -.025em; line-height: 1.25; }\n.tabGuideDetailSubtitle { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.5; }\n/* \u94FE\u8DEF\u5F52\u5C5E\uFF1A\u4E00\u679A\u8EAB\u4EFD\u8272\u5706\u70B9 + \u94FE\u8DEF\u540D\u3002\u989C\u8272\u7531\u884C\u5185 style \u7ED9\uFF08\u94FE\u8DEF\u8EAB\u4EFD\u8272\u5728 model.ts \u91CC\uFF09\u3002 */\n.tabGuideDetailLane { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--tita-ink-faint); font-size: 10px; }\n.tabGuideDetailLane > i { width: 6px; height: 6px; border-radius: 999px; }\n.tabGuideDetailLaneConcept { color: var(--tita-ink-faint); }\n.tabGuideDefinitionLabel { margin: 0; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10px; font-weight: 760; letter-spacing: .06em; }\n.tabGuideSummary { margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.75; }\n.tabGuideDefinitionBlock { display: grid; gap: 7px; border-bottom: 1px solid var(--tita-line); padding: 15px 0 15px; }\n/* \u8F93\u5165 \u2192 \u8F93\u51FA\uFF1A\u5E76\u6392\u4E24\u683C\uFF0C\u4E2D\u95F4\u4E00\u652F\u7BAD\u5934\u3002\u7AD6\u7740\u5806\u4F1A\u628A\u8FD9\u6BB5\u62C9\u6210\u4E24\u884C\u534A\u9AD8\uFF0C\n \u800C\u5B83\u53EA\u662F\u300C\u51ED\u4EC0\u4E48\u80FD\u5DE5\u4F5C\u300D\u7684\u4E00\u53E5\u8BDD\u3002 */\n.tabGuideFacts { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 13px 0; }\n.tabGuideDetailColumn .tabGuideFacts { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); }\n.tabGuideFacts > div { display: grid; min-width: 0; gap: 3px; }\n.tabGuideFacts > svg { flex: 0 0 auto; color: var(--tita-ink-faint); }\n.tabGuideDetailColumn .tabGuideFacts > svg { transform: none; }\n.tabGuideFacts span { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 700; letter-spacing: .06em; }\n.tabGuideFacts strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; line-height: 1.5; }\n.tabGuideDetailGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }\n.tabGuideLogicSection { min-width: 0; border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }\n.tabGuideLogicSection h3 { margin: 0 0 10px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.tabGuideStatusNote { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.7; }\n/* \u6B65\u9AA4\u662F\u4E00\u6761\u65F6\u95F4\u7EBF\uFF1A\u56FE\u6807\u5217\u4E0B\u9762\u62C9\u4E00\u6761\u53D1\u4E1D\u7EBF\uFF0C\u628A\u300C\u5148\u540E\u300D\u753B\u51FA\u6765\u3002 */\n.tabGuideStepList { display: grid; gap: 11px; margin: 0; padding: 0; list-style: none; }\n.tabGuideStep { position: relative; display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 8px; align-items: start; color: var(--tita-tone-green); }\n.tabGuideStep:not(:last-child)::after { content: ''; position: absolute; top: 18px; bottom: -11px; left: 7px; width: 1px; background: var(--tita-line); }\n.tabGuideStep-partial { color: var(--tita-tone-amber); }\n.tabGuideStep-todo { color: var(--tita-ink-faint); }\n.tabGuideStep > span { display: grid; gap: 2px; }\n.tabGuideStep strong { color: var(--tita-ink); font-size: 11px; font-weight: 700; line-height: 1.45; }\n.tabGuideStep small { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; }\n.tabGuideSections { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }\n.tabGuideSection { border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }\n.tabGuideSectionWide { grid-column: 1 / -1; }\n.tabGuideSections > .tabGuideSection:last-child { border-bottom: 0; padding-bottom: 0; }\n.tabGuideSection h3 { margin: 0 0 8px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.tabGuideDefinitions { display: grid; margin: 0; }\n.tabGuideDefinitions > div { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 13px; align-items: baseline; border-bottom: 1px solid var(--tita-line); padding: 9px 0; }\n.tabGuideDefinitions > div:last-child { border-bottom: 0; padding-bottom: 0; }\n.tabGuideDefinitions dt { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 700; }\n.tabGuideDefinitions dd { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n/* \u957F\u63D0\u793A\u8BCD\u5148\u6298\u8D77\u6765\uFF1A380px \u7684\u680F\u91CC\u6574\u6BB5\u94FA\u5F00\u4F1A\u5360\u6389\u597D\u51E0\u5C4F\uFF0C\u800C\u5B83\u662F\u53C2\u8003\u6750\u6599\u4E0D\u662F\u6B63\u6587\u3002 */\n.tabGuidePromptDetails { border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); }\n.tabGuidePromptDetails > summary { cursor: pointer; padding: 9px 13px; color: var(--tita-primary); font-size: 11px; font-weight: 650; list-style: none; }\n.tabGuidePromptDetails > summary::-webkit-details-marker { display: none; }\n.tabGuidePromptDetails > summary::before { content: '\u25B8'; display: inline-block; width: 14px; color: var(--tita-ink-faint); }\n.tabGuidePromptDetails[open] > summary { border-bottom: 1px solid var(--tita-line); }\n.tabGuidePromptDetails[open] > summary::before { content: '\u25BE'; }\n.tabGuidePromptDetails > summary:hover { color: var(--tita-primary-hover); }\n.tabGuidePromptDetails > summary:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: -2px; }\n.tabGuidePromptDetails .tabGuidePrompt { border: 0; border-radius: 0; background: transparent; }\n\n.tabGuidePrompt { overflow-x: auto; margin: 0; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); padding: 13px 14px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; line-height: 1.7; white-space: pre-wrap; }\n.tabGuidePrompt + ul { margin-top: 9px; }\n.tabGuideSection ul { display: grid; gap: 6px; margin: 0; padding: 0 0 0 17px; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }\n.tabGuideSection li::marker { color: var(--tita-primary); }\n\n/* \u4E24\u680F\u653E\u4E0D\u4E0B\u65F6**\u53E0\u6210\u4E00\u680F**\uFF1A\u753B\u5E03\u62FF\u5230\u6574\u5E45\u5BBD\u5EA6\uFF0C\u8BF4\u660E\u843D\u5230\u5B83\u4E0B\u9762\u3002\n \u65AD\u70B9\u53D6 1520 \u800C\u4E0D\u662F 1180\uFF1A\u5DE6\u5217\u8981\u88C5\u4E0B 1172px \u5BBD\u7684\u6574\u56FE\uFF0C\u7A84\u4E8E 1520 \u65F6\u4E24\u680F\u4F1A\u8BA9\u56FE\u7F29\u5230\n \u300C\u4E00\u773C\u770B\u5168\u4F46\u8BFB\u4E0D\u51FA\u6B65\u9AA4\u300D\uFF0C\u90A3\u8FD8\u4E0D\u5982\u53E0\u8D77\u6765\u3002 */\n@media (max-width: 1520px) {\n .tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: 112px minmax(0, 1fr); gap: 13px; }\n}\n\n/* \u7A84\u5230\u653E\u4E0D\u4E0B\u300C\u56FE + \u53F3\u680F\u300D\u65F6\uFF0CInspector **\u843D\u5230\u753B\u5E03\u4E0B\u9762**\uFF0C\u4E0D\u518D\u6D6E\u5728\u56FE\u4E0A\u3002\n \u9608\u503C\u4E0E\u7EC4\u4EF6\u91CC\u7684 `BESIDE_MIN_WIDTH` \u662F\u540C\u4E00\u4E2A\u6570\uFF0C\u4E24\u5904\u5FC5\u987B\u4E00\u8D77\u6539\u3002 */\n@container (max-width: 1100px) {\n .tabGuideInspector { position: static; width: auto; max-height: none; margin: 0 14px 14px; box-shadow: none; }\n .tabGuideInspectorBody { overflow: visible; }\n}\n\n@media (max-width: 820px) {\n .tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }\n .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }\n}\n\n@media (max-width: 820px) {\n .attributionGuideIntro { grid-template-columns: auto minmax(0, 1fr); }\n .attributionGuideFormula { grid-column: 2; justify-items: start; text-align: left; }\n .attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; }\n .attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }\n .attributionGuideField { grid-template-columns: 90px minmax(0, 1fr); gap: 5px 12px; }\n .attributionGuideField span { grid-column: 2; }\n}\n\n@media (max-width: 560px) {\n .attributionGuide { gap: 28px; }\n .attributionGuideIntro { grid-template-columns: 1fr; gap: 10px; }\n .attributionGuideFormula { grid-column: auto; }\n .attributionGuideIntroCopy h2 { font-size: 19px; }\n .attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; padding: 14px; }\n .attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }\n .attributionGuideConnector span { width: auto; }\n .attributionGuideRelations { display: grid; }\n .attributionGuideCaseIntro { display: grid; gap: 7px; }\n .attributionGuideTable { display: block; overflow-x: auto; white-space: nowrap; }\n .attributionGuideTable tbody td { min-width: 160px; white-space: normal; }\n}\n\n/* ---------------------------------------------------------------- trial page\n *\n * \u8BD5\u8DD1\u9875\u7684\u9996\u5C4F\u6309\u300C\u8F93\u5165 \u2192 \u7F16\u8BD1\u94FE \u2192 \u62A5\u544A\u300D\u7EC4\u7EC7\u3002\u8F93\u5165\u662F\u552F\u4E00\u9700\u8981\u64CD\u4F5C\u7684\u533A\u57DF\uFF0C\u56DB\u6BB5\u94FE\u8DEF\n * \u53EA\u5728\u6CA1\u6709\u62A5\u544A\u65F6\u4F5C\u4E3A\u9884\u89C8\u51FA\u73B0\uFF1B\u8DD1\u5B8C\u540E\u8BA9\u77E9\u9635\u6210\u4E3A\u7B2C\u4E00\u773C\u7684\u4EA7\u7269\u3002\u6574\u9875\u53EA\u4FDD\u7559\u4E00\u4E2A\u771F\u6B63\u7684\n * \u5BB9\u5668\u8FB9\u754C\uFF0C\u907F\u514D\u5728\u8BF4\u660E\u3001\u9009\u62E9\u5668\u548C\u7A7A\u6001\u4E4B\u95F4\u53E0\u51FA\u4E00\u7EC4\u4E92\u76F8\u7ADE\u4E89\u7684\u5361\u7247\u3002\n */\n.page-trialContent {\n gap: 18px;\n}\n\n.trialPageIntro {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: 14px;\n border-bottom: 1px solid var(--tita-line);\n padding: 2px 0 18px;\n}\n\n.trialPageIntroMark {\n display: inline-flex;\n width: 36px;\n height: 36px;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--tita-primary-line);\n border-radius: 10px;\n background: var(--tita-primary-soft);\n color: var(--tita-primary);\n}\n\n.trialPageIntroCopy { min-width: 0; }\n.trialPageIntroCopy h2 { margin: 0; color: var(--tita-ink); font-size: 20px; font-weight: 740; letter-spacing: -.025em; line-height: 1.25; }\n.trialPageIntroCopy p { max-width: 62ch; margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 12.5px; line-height: 1.7; }\n\n.trialPageBoundary {\n display: grid;\n justify-items: end;\n gap: 2px;\n padding-top: 2px;\n text-align: right;\n}\n\n.trialPageBoundary span { color: var(--tita-primary); font-size: 10.5px; font-weight: 700; }\n.trialPageBoundary strong { color: var(--tita-ink-muted); font-size: 10.5px; font-weight: 600; white-space: nowrap; }\n\n.trialSourcePanel {\n display: grid;\n gap: 16px;\n border: 1px solid var(--tita-line);\n border-radius: 12px;\n background: var(--tita-surface);\n padding: 18px 20px 15px;\n}\n\n.trialPanelHead { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }\n.trialPanelHead h3 { margin: 0; color: var(--tita-ink); font-size: 14px; font-weight: 720; letter-spacing: -.01em; }\n.trialPanelHead p { margin: 4px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.6; }\n.trialPanelMeta { flex: 0 0 auto; color: var(--tita-ink-faint); font-size: 10.5px; white-space: nowrap; }\n\n.trialSourceControls { display: flex; flex-wrap: wrap; align-items: end; gap: 10px; }\n.trialSourceSelect { display: grid; min-width: min(380px, 100%); flex: 1 1 320px; gap: 5px; }\n.trialControlLabel { color: var(--tita-ink-muted); font-size: 10.5px; font-weight: 650; }\n.trialDocumentSelect { width: 100%; max-width: 100%; }\n.trialSourceOr { align-self: center; color: var(--tita-ink-faint); font-size: 11px; }\n.trialUploadButton { min-height: 32px; }\n.trialSourceControls .tita-trialClear { margin-bottom: 2px; }\n.trialSourceNote { margin: 0; border-top: 1px solid var(--tita-line); padding-top: 11px; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.6; }\n\n.trialEmptyState {\n display: grid;\n grid-template-columns: minmax(210px, .8fr) minmax(0, 1.5fr);\n align-items: center;\n gap: 22px;\n border: 1px dashed var(--tita-line-strong);\n border-radius: 12px;\n background: var(--tita-surface-muted);\n padding: 18px 20px;\n}\n\n.trialEmptyCopy { min-width: 0; }\n.trialEmptyTitle { display: inline-flex; align-items: center; gap: 6px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }\n.trialEmptyTitle svg { color: var(--tita-primary); }\n.trialEmptyCopy p { margin: 6px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.7; }\n\n.trialStageRail { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; padding: 0; list-style: none; }\n.trialStageRail li { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: 7px; min-width: 0; padding-right: 15px; }\n.trialStageRail li:not(:last-child)::after { content: ''; position: absolute; top: 9px; left: 20px; right: 5px; height: 1px; background: var(--tita-line-strong); }\n.trialStageDot { position: relative; z-index: 1; display: inline-flex; width: 19px; height: 19px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 999px; background: var(--tita-surface); color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9.5px; font-weight: 700; }\n.trialStageRail li > span:last-child { display: grid; min-width: 0; gap: 2px; }\n.trialStageRail strong { color: var(--tita-ink); font-size: 10.5px; font-weight: 700; line-height: 1.4; }\n.trialStageRail small { color: var(--tita-ink-muted); font-size: 9.5px; line-height: 1.5; }\n\n.page-trialContent > .tita-trialLoading,\n.page-trialContent > .tita-trialError { margin-top: -4px; }\n.page-trialContent > .tita-trialSummary { margin-top: -2px; border-radius: 12px; padding: 13px 15px; }\n\n@media (max-width: 760px) {\n .page-main { padding-inline: 20px; }\n .page-bar { padding-inline: 20px; }\n .tabGuideDetail { padding-inline: 17px; }\n .trialPageIntro { grid-template-columns: auto minmax(0, 1fr); }\n .trialPageBoundary { grid-column: 2; justify-items: start; padding-top: 0; text-align: left; }\n .trialEmptyState { grid-template-columns: 1fr; gap: 16px; }\n}\n\n\n@media (max-width: 560px) {\n .page-main { padding: 20px 14px 90px; }\n .page-bar { padding: 11px 14px; }\n .tabGuideDetailHeader { grid-template-columns: auto minmax(0, 1fr); }\n .tabGuideDetailGrid { grid-template-columns: 1fr; }\n .tabGuideFacts { align-items: stretch; flex-direction: column; gap: 8px; }\n .tabGuideFacts > svg { display: none; }\n .tabGuideSections { grid-template-columns: 1fr; }\n .tabGuideSectionWide { grid-column: auto; }\n .tabGuideDefinitions > div { grid-template-columns: 82px minmax(0, 1fr); gap: 9px; }\n .trialPageIntroCopy h2 { font-size: 18px; }\n .trialSourcePanel { padding: 15px 14px 13px; }\n .trialPanelHead { align-items: start; }\n .trialPanelMeta { display: none; }\n .trialSourceControls { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; }\n .trialSourceSelect { min-width: 0; grid-column: 1 / -1; }\n .trialSourceOr { display: none; }\n .trialStageRail { grid-template-columns: 1fr 1fr; row-gap: 13px; }\n .trialStageRail li:nth-child(2)::after { display: none; }\n}\n\n/* The execution queue is internal. The public workspace navigates node versions. */\n.knVersionOverview { display: grid; gap: 8px; margin-top: 18px; border-top: 1px solid var(--tita-line); padding-block: 14px 12px; }\n.knVersionOverview > h2 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 680; }\n.knVersionOverviewList { overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.knVersionOverviewRow { display: grid; grid-template-columns: minmax(150px, .72fr) minmax(100px, .48fr) minmax(0, 1.6fr) auto; align-items: center; gap: 12px; border-bottom: 1px solid var(--tita-line); padding: 8px 12px; }\n.knVersionOverviewRow:last-child { border-bottom: 0; }\n.knVersionOverviewRow:hover, .knVersionOverviewRow[data-current] { background: var(--tita-surface-muted); }\n.knVersionOverviewNode { width: 100%; min-width: 0; height: auto; min-height: 36px; justify-content: flex-start; gap: 9px; padding-inline: 5px; text-align: left; }\n.knVersionOverviewNode > svg { flex: 0 0 auto; color: var(--tita-ink-muted); }\n.knVersionOverviewRow[data-current] .knVersionOverviewNode > svg { color: var(--tita-primary); }\n.knVersionOverviewNode > span { display: grid; min-width: 0; gap: 1px; }\n.knVersionOverviewNode strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 650; }\n.knVersionOverviewNode small, .knVersionOverviewStatus small { color: var(--tita-ink-muted); font-size: 10px; font-variant-numeric: tabular-nums; }\n.knVersionOverviewStatus { display: flex; min-width: 0; align-items: center; gap: 7px; }\n.knVersionOverviewStatus .tita-uiBadge { flex: 0 0 auto; }\n.knVersionOverviewSummary { min-width: 0; margin: 0; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }\n.knVersionOverviewActions { display: flex; min-width: 0; justify-content: flex-end; }\n.knVersionOverviewActions > div { justify-content: flex-end; }\n.knScope { margin-top: 12px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 0 14px 12px; }\n.knStagePanelHead { align-items: center; padding: 12px 0 10px; }\n.knStagePanelHead .ktStageActions { flex-wrap: wrap; justify-content: flex-end; }\n.knScopeSection { margin-top: 10px; border-top: 1px solid var(--tita-line); padding-top: 10px; }\n.knScopeSectionHead { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 6px 10px; color: var(--tita-ink-muted); font-size: 11px; }\n.knScopeSectionHead strong { color: var(--tita-ink); font-size: 11.5px; font-weight: 650; }\n.knScopeSectionHead > span { margin-right: auto; }\n.knScopeItems { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; max-height: 180px; overflow: auto; padding-top: 12px; font-size: 12px; }\n.knScopeItems.knScopeSources { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: stretch; gap: 5px 8px; max-height: 210px; padding-top: 8px; }\n.knScopeItem { display: inline-flex; align-items: center; gap: 7px; min-width: 0; max-width: 100%; }\n.knScopeItem span { min-width: 0; flex: 1; overflow-wrap: anywhere; text-align: left; }\n.knScopeItem small { white-space: nowrap; color: var(--tita-ink-muted); }\n.knVersionLayout { display: grid; grid-template-columns: minmax(230px, .65fr) minmax(0, 2fr); gap: 24px; margin-top: 22px; }\n.knVersionList { min-width: 0; border-right: 1px solid var(--tita-line); padding-right: 18px; }\n.knVersionList h3, .knVersionDetail h3 { margin: 0 0 12px; font-size: 13px; font-weight: 650; }\n.knVersion { padding: 8px 0; border-bottom: 1px solid var(--tita-line); }\n.knVersion[data-selected] { background: var(--tita-surface-muted); }\n.knVersionButton { width: 100%; justify-content: start; height: auto; min-height: 34px; flex-wrap: wrap; }\n.knVersionDocs { display: grid; gap: 4px; margin-top: 8px; }\n.knVersionDoc { width: 100%; height: auto; min-height: 34px; justify-content: start; flex-wrap: wrap; text-align: left; }\n.knVersionDoc > span { min-width: 0; flex: 1; white-space: normal; overflow-wrap: anywhere; }\n.knVersionDoc[aria-pressed=\"true\"], .knVersionButton[aria-pressed=\"true\"] { color: var(--tita-primary); }\n.knVersionDetail { min-width: 0; }\n.knLogSection { margin-top: 16px; border-top: 1px solid var(--tita-line); padding-top: 14px; }\n.knLogSection > h3 { margin: 0 0 10px; color: var(--tita-ink); font-size: 13px; font-weight: 650; }\n.knLogEvents { display: grid; gap: 8px; margin: 18px 0 26px; padding: 0; list-style: none; }\n.knLogEvents li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; font-size: 12px; line-height: 1.6; overflow-wrap: anywhere; }\n.knLogEvents time, .knModelCallHead time { color: var(--tita-ink-muted); font-size: 11px; font-variant-numeric: tabular-nums; }\n.knModelCall { min-width: 0; padding-block: 16px; border-top: 1px solid var(--tita-line); }\n.knModelCallHead { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 12px; }\n.knPager { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-block: 12px; font-size: 12px; font-variant-numeric: tabular-nums; }\n.ktSettings { grid-template-columns: minmax(0, 1fr); }\n.ktSettingsCol { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; gap: 24px; }\n.ktFlatParameters { display: grid; gap: 16px; margin-top: 20px; }\n@media (max-width: 760px) {\n .knVersionLayout, .ktSettingsCol { grid-template-columns: minmax(0, 1fr); }\n .knVersionList { border-right: 0; padding-right: 0; }\n .knScopeItems { max-height: 150px; }\n}\n.ktSettingsCol .ktFlatParameters { margin-top: 0; }\n.ktSettingFull { grid-column: 1 / -1; }\n@media (max-width: 760px) {\n .knVersionOverviewRow { grid-template-columns: minmax(0, 1fr) auto; gap: 4px 10px; }\n .knVersionOverviewNode { grid-column: 1; }\n .knVersionOverviewStatus { grid-column: 2; justify-content: flex-end; }\n .knVersionOverviewSummary { grid-column: 1 / -1; padding-inline: 5px; white-space: normal; }\n .knVersionOverviewActions { grid-column: 1 / -1; justify-content: flex-start; padding-inline: 5px; }\n .knScopeItems.knScopeSources { grid-template-columns: minmax(0, 1fr); }\n .knStagePanelHead .ktStageActions { align-self: stretch; }\n}\n.knScopeItem[aria-pressed=\"true\"] { border-color: var(--tita-primary); color: var(--tita-primary); background: var(--tita-primary-soft); }\n.knScopeItem { white-space: normal; text-align: left; height: auto; min-height: 30px; }\n\n\n/* ---------------------------------------------------------------- \u6587\u6863\u94FE\u8DEF\uFF08\u6EAF\u6E90\uFF09 */\n.knLineage { display: grid; gap: 14px; margin-top: 12px; }\n.knLineageBar { display: flex; justify-content: flex-start; align-items: center; }\n.knLineagePicker { display: inline-flex; align-items: center; gap: 8px; color: var(--tita-ink-muted); font-size: 11px; }\n.knLineagePicker select { max-width: 320px; padding: 4px 8px; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface); color: var(--tita-ink); font-size: 12px; }\n.knLineageLayers { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }\n.knLineageLayer { min-width: 0; padding: 12px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }\n.knLineageLayer > header { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; font-size: 12px; }\n.knLineageLayer > header > svg { color: var(--tita-ink-muted); }\n.knLineageLayer > header > span { margin-left: auto; color: var(--tita-ink-muted); font-size: 11px; font-variant-numeric: tabular-nums; }\n.knLineageLayer ul { display: grid; gap: 8px; max-height: 460px; margin: 0; padding: 0; overflow: auto; list-style: none; }\n.knLineageLayer li { display: grid; gap: 3px; padding: 8px; border-radius: 8px; background: var(--tita-surface-muted); }\n.knLineageRow { display: flex; min-width: 0; align-items: baseline; gap: 8px; }\n.knLineageText { min-width: 0; flex: 1; font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; }\n.knLineageLayer small { color: var(--tita-ink-muted); font-size: 10.5px; }\n.knLineageActions { display: flex; justify-content: flex-end; }\n@media (max-width: 980px) { .knLineageLayers { grid-template-columns: minmax(0, 1fr); } }\n";
|
|
7316
7316
|
var tagId3 = "dsh-data-domain-knowledge//Users/fuzz/Documents/github/dsh-personal/plugins/dsh-data-domain-knowledge/src/client/pages.css";
|
|
7317
7317
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId3) + "]") === null) {
|
|
7318
7318
|
const tag = document.createElement("style");
|
|
@@ -7686,6 +7686,24 @@
|
|
|
7686
7686
|
["circle", { cx: "11", cy: "11", r: "2", key: "xmgehs" }]
|
|
7687
7687
|
]);
|
|
7688
7688
|
|
|
7689
|
+
// ../../node_modules/.pnpm/lucide-react@0.468.0_react@18.2.0/node_modules/lucide-react/dist/esm/icons/quote.js
|
|
7690
|
+
var Quote = createLucideIcon("Quote", [
|
|
7691
|
+
[
|
|
7692
|
+
"path",
|
|
7693
|
+
{
|
|
7694
|
+
d: "M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",
|
|
7695
|
+
key: "rib7q0"
|
|
7696
|
+
}
|
|
7697
|
+
],
|
|
7698
|
+
[
|
|
7699
|
+
"path",
|
|
7700
|
+
{
|
|
7701
|
+
d: "M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",
|
|
7702
|
+
key: "1ymkrd"
|
|
7703
|
+
}
|
|
7704
|
+
]
|
|
7705
|
+
]);
|
|
7706
|
+
|
|
7689
7707
|
// ../../node_modules/.pnpm/lucide-react@0.468.0_react@18.2.0/node_modules/lucide-react/dist/esm/icons/refresh-cw.js
|
|
7690
7708
|
var RefreshCw = createLucideIcon("RefreshCw", [
|
|
7691
7709
|
["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
|
|
@@ -22919,7 +22937,7 @@ ${report.prompt.user}`;
|
|
|
22919
22937
|
}
|
|
22920
22938
|
|
|
22921
22939
|
// src/client/ExtractionTasksPage.tsx
|
|
22922
|
-
var
|
|
22940
|
+
var import_react18 = __toESM(require_react(), 1);
|
|
22923
22941
|
|
|
22924
22942
|
// ../../packages/ui/lib/file-picker.js
|
|
22925
22943
|
var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
|
|
@@ -25595,6 +25613,9 @@ ${report.prompt.user}`;
|
|
|
25595
25613
|
] });
|
|
25596
25614
|
}
|
|
25597
25615
|
|
|
25616
|
+
// src/client/DocumentLineageView.tsx
|
|
25617
|
+
var import_react17 = __toESM(require_react(), 1);
|
|
25618
|
+
|
|
25598
25619
|
// src/client/format.ts
|
|
25599
25620
|
var pad2 = (value) => String(value).padStart(2, "0");
|
|
25600
25621
|
function formatDateTime(value) {
|
|
@@ -25604,8 +25625,160 @@ ${report.prompt.user}`;
|
|
|
25604
25625
|
return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())} ${pad2(date.getHours())}:${pad2(date.getMinutes())}`;
|
|
25605
25626
|
}
|
|
25606
25627
|
|
|
25607
|
-
// src/client/
|
|
25628
|
+
// src/client/DocumentLineageView.tsx
|
|
25608
25629
|
var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
|
|
25630
|
+
var KIND_LABEL2 = { fact: "Fact", procedure: "Procedure", case: "Case" };
|
|
25631
|
+
var AXIS_LABEL = { object: "\u5BF9\u8C61", action: "\u52A8\u4F5C", scene: "\u573A\u666F" };
|
|
25632
|
+
var STATUS_TONE = {
|
|
25633
|
+
active: "success",
|
|
25634
|
+
candidate: "blue",
|
|
25635
|
+
unreviewed: "neutral",
|
|
25636
|
+
disputed: "warning",
|
|
25637
|
+
deprecated: "warning"
|
|
25638
|
+
};
|
|
25639
|
+
function DocumentLineageView({ kb }) {
|
|
25640
|
+
const [documents, setDocuments] = (0, import_react17.useState)([]);
|
|
25641
|
+
const [docId, setDocId] = (0, import_react17.useState)("");
|
|
25642
|
+
const [lineage, setLineage] = (0, import_react17.useState)();
|
|
25643
|
+
const [loading, setLoading] = (0, import_react17.useState)(true);
|
|
25644
|
+
const [failure, setFailure] = (0, import_react17.useState)("");
|
|
25645
|
+
(0, import_react17.useEffect)(() => {
|
|
25646
|
+
let cancelled = false;
|
|
25647
|
+
setLoading(true);
|
|
25648
|
+
void requestJson(`/knowledge/documents?${new URLSearchParams({ kb, limit: "200", offset: "0" })}`).then((result) => {
|
|
25649
|
+
if (cancelled) return;
|
|
25650
|
+
const list = result.data?.documents ?? [];
|
|
25651
|
+
setDocuments(list);
|
|
25652
|
+
setDocId((current) => current || list[0]?.docId || "");
|
|
25653
|
+
}).catch((cause) => {
|
|
25654
|
+
if (!cancelled) setFailure(cause instanceof Error ? cause.message : String(cause));
|
|
25655
|
+
}).finally(() => {
|
|
25656
|
+
if (!cancelled) setLoading(false);
|
|
25657
|
+
});
|
|
25658
|
+
return () => {
|
|
25659
|
+
cancelled = true;
|
|
25660
|
+
};
|
|
25661
|
+
}, [kb]);
|
|
25662
|
+
(0, import_react17.useEffect)(() => {
|
|
25663
|
+
if (!docId) {
|
|
25664
|
+
setLineage(void 0);
|
|
25665
|
+
return;
|
|
25666
|
+
}
|
|
25667
|
+
let cancelled = false;
|
|
25668
|
+
setFailure("");
|
|
25669
|
+
void requestJson(`/knowledge/document-lineage?${new URLSearchParams({ kb, docId })}`).then((result) => {
|
|
25670
|
+
if (!cancelled) setLineage(result.data);
|
|
25671
|
+
}).catch((cause) => {
|
|
25672
|
+
if (!cancelled) setFailure(cause instanceof Error ? cause.message : String(cause));
|
|
25673
|
+
});
|
|
25674
|
+
return () => {
|
|
25675
|
+
cancelled = true;
|
|
25676
|
+
};
|
|
25677
|
+
}, [kb, docId]);
|
|
25678
|
+
const coordinate = (item) => {
|
|
25679
|
+
const parts = [item.coordinate.object, item.coordinate.action, item.coordinate.scene].filter(Boolean);
|
|
25680
|
+
return parts.length === 0 ? "\u672A\u5F52\u4E00" : parts.join(" \xB7 ");
|
|
25681
|
+
};
|
|
25682
|
+
const cardsOf = (0, import_react17.useMemo)(() => new Map((lineage?.cards ?? []).map((card) => [card.entityId, card])), [lineage]);
|
|
25683
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knLineage", children: [
|
|
25684
|
+
documents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "knLineageBar", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("label", { className: "knLineagePicker", children: [
|
|
25685
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: "\u6587\u6863" }),
|
|
25686
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("select", { value: docId, onChange: (event) => setDocId(event.target.value), "aria-label": "\u9009\u62E9\u6587\u6863", children: documents.map((item) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: item.docId, children: item.title }, item.docId)) })
|
|
25687
|
+
] }) }),
|
|
25688
|
+
failure && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", { className: "ktError", role: "alert", children: [
|
|
25689
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CircleAlert, { size: 13 }),
|
|
25690
|
+
failure
|
|
25691
|
+
] }),
|
|
25692
|
+
loading && documents.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u6587\u6863\u5217\u8868\u2026" }),
|
|
25693
|
+
!loading && documents.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktEmpty", children: "\u8FD8\u6CA1\u6709\u6765\u6E90\u6587\u6863\u3002\u5148\u5728 SourceRaw \u91CC\u5F55\u5165\u3002" }),
|
|
25694
|
+
lineage && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knLineageLayers", children: [
|
|
25695
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("section", { className: "knLineageLayer", "aria-label": "\u62BD\u53D6\u51FA\u7684 Knowledge", children: [
|
|
25696
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("header", { children: [
|
|
25697
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Quote, { size: 14 }),
|
|
25698
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: "Knowledge" }),
|
|
25699
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { children: [
|
|
25700
|
+
lineage.knowledge.length,
|
|
25701
|
+
" \u6761"
|
|
25702
|
+
] })
|
|
25703
|
+
] }),
|
|
25704
|
+
lineage.knowledge.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", children: "\u8FD9\u4EFD\u6587\u6863\u6CA1\u6709\u62BD\u51FA\u4EFB\u4F55 Knowledge \u2014\u2014 \u62BD\u53D6\u8FD9\u4E00\u5173\u6CA1\u8FC7\u3002\u53BB\u300C\u5904\u7406 \u2192 \u62BD\u53D6\u300D\u770B\u90A3\u6B21\u8FD0\u884C\u7684\u539F\u56E0\u3002" }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ul", { children: lineage.knowledge.map((item) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("li", { children: [
|
|
25705
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knLineageRow", children: [
|
|
25706
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { tone: "neutral", children: KIND_LABEL2[item.kind] ?? item.kind }),
|
|
25707
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "knLineageText", children: item.text }),
|
|
25708
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { tone: STATUS_TONE[item.status] ?? "neutral", children: item.status })
|
|
25709
|
+
] }),
|
|
25710
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("small", { className: item.coordinate.object || item.coordinate.action || item.coordinate.scene ? "" : "ktHintWarn", children: coordinate(item) })
|
|
25711
|
+
] }, item.id)) })
|
|
25712
|
+
] }),
|
|
25713
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("section", { className: "knLineageLayer", "aria-label": "\u5F52\u4E00\u540E\u7684\u5750\u6807", children: [
|
|
25714
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("header", { children: [
|
|
25715
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Share2, { size: 14 }),
|
|
25716
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: "\u5F52\u4E00\u540E\u7684\u5750\u6807" }),
|
|
25717
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { children: [
|
|
25718
|
+
lineage.axes.length,
|
|
25719
|
+
" \u4E2A\u8F74\u5B9E\u4F53"
|
|
25720
|
+
] })
|
|
25721
|
+
] }),
|
|
25722
|
+
lineage.axes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", children: "\u8FD8\u6CA1\u6709\u8F74\u5B9E\u4F53\uFF1AKnowledge \u7684\u5750\u6807\u662F\u7A7A\u7684\uFF0C\u5148\u8DD1\u300C\u5F52\u4E00\u5750\u6807\u300D\u3002" }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ul", { children: lineage.axes.map((axis) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("li", { children: [
|
|
25723
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knLineageRow", children: [
|
|
25724
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { tone: "neutral", children: AXIS_LABEL[axis.kind] ?? axis.kind }),
|
|
25725
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "knLineageText", children: axis.name })
|
|
25726
|
+
] }),
|
|
25727
|
+
axis.aliases.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25728
|
+
"\u522B\u540D\uFF1A",
|
|
25729
|
+
axis.aliases.join("\u3001")
|
|
25730
|
+
] })
|
|
25731
|
+
] }, axis.id)) })
|
|
25732
|
+
] }),
|
|
25733
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("section", { className: "knLineageLayer", "aria-label": "\u4EA7\u51FA\u7684 WikiCard", children: [
|
|
25734
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("header", { children: [
|
|
25735
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Layers, { size: 14 }),
|
|
25736
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: "WikiCard" }),
|
|
25737
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { children: [
|
|
25738
|
+
lineage.cards.length,
|
|
25739
|
+
" \u5F20"
|
|
25740
|
+
] })
|
|
25741
|
+
] }),
|
|
25742
|
+
lineage.cards.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", children: "\u8FD8\u6CA1\u6709\u5361\u7247\uFF1A\u7269\u5316\u8FD9\u4E00\u5173\u6CA1\u8FC7\uFF08\u5750\u6807\u6CA1\u5F52\u4E00\u3001\u6216\u5206\u7EC4\u88AB\u963B\u65AD\uFF09\u3002\u53BB\u300C\u5904\u7406 \u2192 \u7269\u5316\u300D\u770B\u5206\u7EC4\u72B6\u6001\u3002" }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ul", { children: lineage.cards.map((card) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knLineageRow", children: [
|
|
25743
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { tone: "neutral", children: card.wikiKind === "way" ? "Wiki Way" : card.wikiKind === "fact" ? "Wiki Fact" : card.entityType }),
|
|
25744
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "knLineageText", children: card.title }),
|
|
25745
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25746
|
+
card.knowledgeIds.length,
|
|
25747
|
+
" \u6761\u77E5\u8BC6"
|
|
25748
|
+
] })
|
|
25749
|
+
] }) }, card.entityId)) })
|
|
25750
|
+
] })
|
|
25751
|
+
] }),
|
|
25752
|
+
lineage && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", { className: "ktHint", children: [
|
|
25753
|
+
"\u6765\u6E90 v",
|
|
25754
|
+
lineage.source.version,
|
|
25755
|
+
" \xB7 \u66F4\u65B0\u4E8E ",
|
|
25756
|
+
formatDateTime(documents.find((item) => item.docId === docId)?.updatedAt ?? ""),
|
|
25757
|
+
cardsOf.size > 0 ? ` \xB7 \u6709 ${cardsOf.size} \u5F20\u5361\u7247\u5F15\u7528\u4E86\u8FD9\u4EFD\u6587\u6863\u7684\u77E5\u8BC6` : ""
|
|
25758
|
+
] }),
|
|
25759
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "knLineageActions", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { size: "sm", variant: "ghost", onClick: () => {
|
|
25760
|
+
setLineage(void 0);
|
|
25761
|
+
setDocId((current) => current);
|
|
25762
|
+
}, children: "\u91CD\u65B0\u8BFB\u53D6" }) })
|
|
25763
|
+
] });
|
|
25764
|
+
}
|
|
25765
|
+
|
|
25766
|
+
// src/client/ExtractionTasksPage.tsx
|
|
25767
|
+
var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
|
|
25768
|
+
var INPUT_TITLE = {
|
|
25769
|
+
extract: "\u672C\u6B65\u8F93\u5165\uFF1ASource Raw",
|
|
25770
|
+
normalize: "\u4E0A\u4E00\u6B65\u4EA7\u7269\uFF1A\u62BD\u53D6\u7ED3\u679C",
|
|
25771
|
+
derive: "\u4E0A\u4E00\u6B65\u4EA7\u7269\uFF1A\u5DF2\u5F52\u4E00\u7684\u6765\u6E90",
|
|
25772
|
+
materialize: "\u4E0A\u4E00\u6B65\u4EA7\u7269\uFF1A\u5F85\u7269\u5316\u5206\u7EC4",
|
|
25773
|
+
build: "\u4E0A\u4E00\u6B65\u4EA7\u7269\uFF1AWikiCard"
|
|
25774
|
+
};
|
|
25775
|
+
var INPUT_EMPTY = {
|
|
25776
|
+
extract: "\u8FD8\u6CA1\u6709\u6765\u6E90\u3002\u5148\u5728\u300C\u6765\u6E90\u300D\u91CC\u5F55\u5165\u6587\u6863\u3002",
|
|
25777
|
+
normalize: "\u8FD8\u6CA1\u6709\u9700\u8981\u5F52\u4E00\u7684\u62BD\u53D6\u7ED3\u679C\u3002",
|
|
25778
|
+
derive: "\u8FD8\u6CA1\u6709\u53EF\u63D0\u70BC\u7684\u6765\u6E90\u3002",
|
|
25779
|
+
materialize: "\u6CA1\u6709\u9700\u8981\u7269\u5316\u7684\u5206\u7EC4\u3002",
|
|
25780
|
+
build: "\u8FD8\u6CA1\u6709\u53EF\u5EFA\u7D22\u5F15\u7684\u5361\u7247\u3002"
|
|
25781
|
+
};
|
|
25609
25782
|
var LOG_LABEL = { extract: "\u62BD\u53D6\u65E5\u5FD7", normalize: "\u5F52\u4E00\u65E5\u5FD7", derive: "\u63D0\u70BC\u65E5\u5FD7", materialize: "\u7269\u5316\u65E5\u5FD7", build: "\u7D22\u5F15\u65E5\u5FD7" };
|
|
25610
25783
|
var STAGE_META = {
|
|
25611
25784
|
extract: { icon: FileText, verb: "\u62BD\u53D6" },
|
|
@@ -25619,36 +25792,51 @@ ${report.prompt.user}`;
|
|
|
25619
25792
|
var label = (value) => value.stale && !active(value) ? "\u5F85\u91CD\u8DD1" : PIPELINE_STATE_LABEL[value.state];
|
|
25620
25793
|
function ExtractionTasksPage({ kb }) {
|
|
25621
25794
|
const params = new URLSearchParams(typeof window === "undefined" ? "" : window.location.search);
|
|
25622
|
-
const [view, setView] = (0,
|
|
25623
|
-
|
|
25624
|
-
|
|
25625
|
-
|
|
25626
|
-
const [
|
|
25627
|
-
const [
|
|
25628
|
-
const [
|
|
25629
|
-
const [
|
|
25630
|
-
const [
|
|
25631
|
-
const [
|
|
25632
|
-
const [
|
|
25633
|
-
const [
|
|
25634
|
-
const [
|
|
25635
|
-
const [
|
|
25636
|
-
const [
|
|
25637
|
-
const [
|
|
25638
|
-
const [
|
|
25639
|
-
const [
|
|
25640
|
-
const [
|
|
25641
|
-
const [
|
|
25642
|
-
const [
|
|
25643
|
-
const [
|
|
25644
|
-
const [
|
|
25645
|
-
const [
|
|
25646
|
-
const [
|
|
25647
|
-
const
|
|
25795
|
+
const [view, setView] = (0, import_react18.useState)(() => {
|
|
25796
|
+
const wanted = params.get("view");
|
|
25797
|
+
return wanted === "settings" ? "settings" : wanted === "lineage" ? "lineage" : "run";
|
|
25798
|
+
});
|
|
25799
|
+
const [stage, setStage] = (0, import_react18.useState)("extract");
|
|
25800
|
+
const [status, setStatus] = (0, import_react18.useState)();
|
|
25801
|
+
const [heads, setHeads] = (0, import_react18.useState)([]);
|
|
25802
|
+
const [versions, setVersions] = (0, import_react18.useState)([]);
|
|
25803
|
+
const [selectedId, setSelectedId] = (0, import_react18.useState)("");
|
|
25804
|
+
const [selectedDoc, setSelectedDoc] = (0, import_react18.useState)("");
|
|
25805
|
+
const [sourceIds, setSourceIds] = (0, import_react18.useState)(params.get("source") ? [params.get("source")] : []);
|
|
25806
|
+
const [tasks, setTasks] = (0, import_react18.useState)([]);
|
|
25807
|
+
const [calls, setCalls] = (0, import_react18.useState)([]);
|
|
25808
|
+
const [events2, setEvents] = (0, import_react18.useState)([]);
|
|
25809
|
+
const [logAfter, setLogAfter] = (0, import_react18.useState)(0);
|
|
25810
|
+
const [logNext, setLogNext] = (0, import_react18.useState)(0);
|
|
25811
|
+
const [logMore, setLogMore] = (0, import_react18.useState)(false);
|
|
25812
|
+
const [callTotal, setCallTotal] = (0, import_react18.useState)(0);
|
|
25813
|
+
const [callPage, setCallPage] = (0, import_react18.useState)(0);
|
|
25814
|
+
const [versionPage, setVersionPage] = (0, import_react18.useState)(0);
|
|
25815
|
+
const [busy, setBusy] = (0, import_react18.useState)(false);
|
|
25816
|
+
const [notice, setNotice] = (0, import_react18.useState)(null);
|
|
25817
|
+
const [settingsKey, setSettingsKey] = (0, import_react18.useState)(0);
|
|
25818
|
+
const [loading, setLoading] = (0, import_react18.useState)(true);
|
|
25819
|
+
const [callsLoading, setCallsLoading] = (0, import_react18.useState)(false);
|
|
25820
|
+
const [callsError, setCallsError] = (0, import_react18.useState)("");
|
|
25821
|
+
const [selectedDetail, setSelectedDetail] = (0, import_react18.useState)();
|
|
25822
|
+
const sequence = (0, import_react18.useRef)(0);
|
|
25648
25823
|
const selected = versions.find((row) => row.id === selectedId) ?? (selectedDetail?.id === selectedId ? selectedDetail : void 0) ?? versions[0];
|
|
25824
|
+
const inputRows = stage === "materialize" ? (status?.groups ?? []).map((group) => ({
|
|
25825
|
+
id: group.key,
|
|
25826
|
+
title: group.title,
|
|
25827
|
+
meta: group.state === "blocked" ? "\u5750\u6807\u6216\u6765\u6E90\u5F85\u5F52\u4E00" : `${group.knowledgeCount} \u6761\u77E5\u8BC6`,
|
|
25828
|
+
needs: group.state === "new" || group.state === "changed",
|
|
25829
|
+
...group.state === "blocked" ? { blocked: true } : {}
|
|
25830
|
+
})) : (status?.sources ?? []).map((source) => ({
|
|
25831
|
+
id: source.id,
|
|
25832
|
+
title: source.title,
|
|
25833
|
+
meta: `v${source.version}`,
|
|
25834
|
+
needs: stage === "extract" ? source.state === "pending" || source.state === "outdated" : stage === "normalize" ? Boolean(source.extractionId) && source.state !== "normalized" : source.state === "normalized",
|
|
25835
|
+
...stage === "derive" ? { blocked: true } : {}
|
|
25836
|
+
}));
|
|
25649
25837
|
const head = heads.find((row) => row.stage === stage);
|
|
25650
25838
|
const HeadIcon = head ? STAGE_META[head.stage].icon : null;
|
|
25651
|
-
const refresh = (0,
|
|
25839
|
+
const refresh = (0, import_react18.useCallback)(async () => {
|
|
25652
25840
|
const seq = ++sequence.current;
|
|
25653
25841
|
try {
|
|
25654
25842
|
const [nextStatus, nextVersions, nextTasks] = await Promise.all([
|
|
@@ -25670,7 +25858,7 @@ ${report.prompt.user}`;
|
|
|
25670
25858
|
}
|
|
25671
25859
|
}
|
|
25672
25860
|
}, [kb, stage, versionPage]);
|
|
25673
|
-
(0,
|
|
25861
|
+
(0, import_react18.useEffect)(() => {
|
|
25674
25862
|
void refresh();
|
|
25675
25863
|
const timer = window.setInterval(() => {
|
|
25676
25864
|
void refresh();
|
|
@@ -25682,17 +25870,17 @@ ${report.prompt.user}`;
|
|
|
25682
25870
|
window.removeEventListener("focus", refresh);
|
|
25683
25871
|
};
|
|
25684
25872
|
}, [refresh]);
|
|
25685
|
-
(0,
|
|
25873
|
+
(0, import_react18.useEffect)(() => {
|
|
25686
25874
|
setCallPage(0);
|
|
25687
25875
|
setSelectedDoc("");
|
|
25688
25876
|
setCalls([]);
|
|
25689
25877
|
setEvents([]);
|
|
25690
25878
|
setLogAfter(0);
|
|
25691
25879
|
}, [selected?.id]);
|
|
25692
|
-
(0,
|
|
25880
|
+
(0, import_react18.useEffect)(() => {
|
|
25693
25881
|
setCalls([]);
|
|
25694
25882
|
}, [selectedDoc, callPage]);
|
|
25695
|
-
(0,
|
|
25883
|
+
(0, import_react18.useEffect)(() => {
|
|
25696
25884
|
if (!selected) return;
|
|
25697
25885
|
let cancelled = false;
|
|
25698
25886
|
const read = async () => {
|
|
@@ -25739,7 +25927,7 @@ ${report.prompt.user}`;
|
|
|
25739
25927
|
setBusy(true);
|
|
25740
25928
|
setNotice(null);
|
|
25741
25929
|
try {
|
|
25742
|
-
const result = await requestJson("/knowledge/pipeline", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ kb, stage: next, force, ...sourceIds.length ? { sourceIds } : {}
|
|
25930
|
+
const result = await requestJson("/knowledge/pipeline", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ kb, stage: next, force, ...sourceIds.length ? { sourceIds } : {} }) });
|
|
25743
25931
|
if (result.data?.task) {
|
|
25744
25932
|
const nextStage = next === "all" ? "extract" : next;
|
|
25745
25933
|
setStage(nextStage);
|
|
@@ -25770,265 +25958,187 @@ ${report.prompt.user}`;
|
|
|
25770
25958
|
if (!active(value)) return null;
|
|
25771
25959
|
const task = tasks.find((task2) => task2.id === value.taskId);
|
|
25772
25960
|
if (!task || task.currentStage && task.currentStage !== value.stage) return null;
|
|
25773
|
-
return /* @__PURE__ */ (0,
|
|
25774
|
-
/* @__PURE__ */ (0,
|
|
25961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-wrap gap-2", children: [
|
|
25962
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { size: "sm", variant: "outline", disabled: busy || task.state === "pausing" || task.state === "cancelling", onClick: () => {
|
|
25775
25963
|
void control(task.id, task.state === "paused" ? "resume" : "pause");
|
|
25776
25964
|
}, children: [
|
|
25777
|
-
task.state === "paused" ? /* @__PURE__ */ (0,
|
|
25965
|
+
task.state === "paused" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Play, { size: 12 }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Pause, { size: 12 }),
|
|
25778
25966
|
task.state === "paused" ? "\u7EE7\u7EED" : "\u6682\u505C"
|
|
25779
25967
|
] }),
|
|
25780
|
-
/* @__PURE__ */ (0,
|
|
25968
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { size: "sm", variant: "ghost", disabled: busy || task.state === "cancelling", onClick: () => {
|
|
25781
25969
|
void control(task.id, "cancel");
|
|
25782
25970
|
}, children: [
|
|
25783
|
-
/* @__PURE__ */ (0,
|
|
25971
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(X, { size: 12 }),
|
|
25784
25972
|
"\u505C\u6B62"
|
|
25785
25973
|
] })
|
|
25786
25974
|
] });
|
|
25787
25975
|
};
|
|
25788
|
-
if (!kb) return /* @__PURE__ */ (0,
|
|
25789
|
-
const toggleSource = (id) => setSourceIds((ids) => ids.includes(id) ? ids.filter((value) => value !== id) : [...ids, id]);
|
|
25976
|
+
if (!kb) return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { role: "alert", children: "\u7F3A\u5C11\u77E5\u8BC6\u5E93\uFF0C\u8BF7\u4ECE\u77E5\u8BC6\u5E93\u6253\u5F00\u77E5\u8BC6\u5904\u7406\u3002" });
|
|
25790
25977
|
const ownCalls = calls.filter((call) => !selectedDoc || call.objectId === selectedDoc || call.sourceIds?.includes(selectedDoc));
|
|
25791
25978
|
const ownEvents = events2.filter((event) => event.stage === stage && event.kind !== "output" && (!selectedDoc || event.sourceId === selectedDoc || selected?.items[event.sourceId ?? ""]?.sourceIds?.includes(selectedDoc) || !event.sourceId));
|
|
25792
|
-
return /* @__PURE__ */ (0,
|
|
25793
|
-
/* @__PURE__ */ (0,
|
|
25794
|
-
/* @__PURE__ */ (0,
|
|
25795
|
-
/* @__PURE__ */ (0,
|
|
25796
|
-
/* @__PURE__ */ (0,
|
|
25979
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ktPage", children: [
|
|
25980
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("header", { className: "ktTop", children: [
|
|
25981
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "ktTopLead", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ktViews", role: "group", "aria-label": "\u77E5\u8BC6\u5904\u7406\u89C6\u56FE", children: [
|
|
25982
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", "aria-pressed": view === "run", className: "ktView", onClick: () => setView("run"), children: "\u5904\u7406" }),
|
|
25983
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", "aria-pressed": view === "lineage", className: "ktView", onClick: () => setView("lineage"), children: "\u6587\u6863\u94FE\u8DEF" }),
|
|
25984
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", "aria-pressed": view === "settings", className: "ktView", onClick: () => setView("settings"), children: "\u7F16\u8BD1\u8BBE\u7F6E" })
|
|
25797
25985
|
] }) }),
|
|
25798
|
-
/* @__PURE__ */ (0,
|
|
25799
|
-
/* @__PURE__ */ (0,
|
|
25986
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ktTopActions", children: [
|
|
25987
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { size: "sm", variant: "ghost", onClick: () => {
|
|
25800
25988
|
void refresh();
|
|
25801
25989
|
setSettingsKey((key) => key + 1);
|
|
25802
25990
|
}, children: [
|
|
25803
|
-
/* @__PURE__ */ (0,
|
|
25991
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(RefreshCw, { size: 13 }),
|
|
25804
25992
|
"\u5237\u65B0"
|
|
25805
25993
|
] }),
|
|
25806
|
-
/* @__PURE__ */ (0,
|
|
25994
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
25807
25995
|
void openAppPath("/convert/").then((ok) => {
|
|
25808
25996
|
if (!ok) setNotice({ tone: "error", text: "\u65E0\u6CD5\u6253\u5F00\u89E3\u6790\u5185\u6838\u3002" });
|
|
25809
25997
|
});
|
|
25810
25998
|
}, children: [
|
|
25811
|
-
/* @__PURE__ */ (0,
|
|
25999
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(FileUp, { size: 13 }),
|
|
25812
26000
|
"\u89E3\u6790\u5185\u6838"
|
|
25813
26001
|
] })
|
|
25814
26002
|
] })
|
|
25815
26003
|
] }),
|
|
25816
|
-
notice && /* @__PURE__ */ (0,
|
|
25817
|
-
/* @__PURE__ */ (0,
|
|
25818
|
-
/* @__PURE__ */ (0,
|
|
26004
|
+
notice && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: notice.tone === "error" ? "ktError" : "ktNotice", role: notice.tone === "error" ? "alert" : "status", children: [
|
|
26005
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: notice.text }),
|
|
26006
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { size: "icon", variant: "ghost", "aria-label": "\u5173\u95ED\u63D0\u793A", onClick: () => setNotice(null), children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(X, { size: 13 }) })
|
|
25819
26007
|
] }),
|
|
25820
|
-
view === "settings" ? /* @__PURE__ */ (0,
|
|
25821
|
-
/* @__PURE__ */ (0,
|
|
25822
|
-
/* @__PURE__ */ (0,
|
|
26008
|
+
view === "lineage" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DocumentLineageView, { kb }) : view === "settings" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CompileSettingsView, { kb, onNotice: (tone2, text) => setNotice({ tone: tone2, text }) }, settingsKey) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
|
|
26009
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "ktRailHeading", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("strong", { children: "\u5904\u7406\u9636\u6BB5" }) }),
|
|
26010
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("nav", { "aria-label": "\u77E5\u8BC6\u5904\u7406\u9636\u6BB5", className: cn(styles.kbSteps, "ktPipelineSteps"), children: PIPELINE_STAGE_ORDER.map((id, index2) => {
|
|
25823
26011
|
const value = heads.find((row) => row.stage === id);
|
|
25824
26012
|
const Icon2 = STAGE_META[id].icon;
|
|
25825
26013
|
const percentage = value?.total ? value.done / value.total * 100 : value?.state === "succeeded" ? 100 : 0;
|
|
25826
|
-
return /* @__PURE__ */ (0,
|
|
25827
|
-
index2 > 0 && /* @__PURE__ */ (0,
|
|
25828
|
-
/* @__PURE__ */ (0,
|
|
25829
|
-
/* @__PURE__ */ (0,
|
|
25830
|
-
/* @__PURE__ */ (0,
|
|
25831
|
-
/* @__PURE__ */ (0,
|
|
26014
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react18.Fragment, { children: [
|
|
26015
|
+
index2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: styles.kbStepArrow, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ArrowRight, { size: 16 }) }),
|
|
26016
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: styles.kbStepGroup, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("button", { type: "button", className: cn(styles.kbStep, "ktPipelineStep", stage === id && styles.kbStepOn), "data-running": value && active(value) || void 0, "aria-current": stage === id ? "step" : void 0, onClick: () => chooseStage(id), children: [
|
|
26017
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: styles.kbStepTop, children: [
|
|
26018
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon2, { size: 13, "aria-hidden": "true" }),
|
|
26019
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("b", { children: PIPELINE_STAGE_LABEL[id] })
|
|
25832
26020
|
] }),
|
|
25833
|
-
/* @__PURE__ */ (0,
|
|
25834
|
-
/* @__PURE__ */ (0,
|
|
25835
|
-
/* @__PURE__ */ (0,
|
|
25836
|
-
/* @__PURE__ */ (0,
|
|
26021
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: styles.kbStepFacts, children: [
|
|
26022
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("em", { className: styles.kbStepVerb, children: STAGE_META[id].verb }),
|
|
26023
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: styles.kbStepValue, children: value ? `v${value.version} \xB7 ${value.done}/${value.total}` : "\u5C1A\u672A\u8FD0\u884C" }),
|
|
26024
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: styles.kbStepNote, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Badge, { tone: value ? tone(value) : "neutral", children: value ? label(value) : "\u5F85\u5F00\u59CB" }) })
|
|
25837
26025
|
] }),
|
|
25838
|
-
/* @__PURE__ */ (0,
|
|
26026
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Progress3, { className: "ktPipelineProgress", value: percentage, "aria-label": `${PIPELINE_STAGE_LABEL[id]}\u8FDB\u5EA6` })
|
|
25839
26027
|
] }) })
|
|
25840
26028
|
] }, id);
|
|
25841
26029
|
}) }),
|
|
25842
|
-
/* @__PURE__ */ (0,
|
|
25843
|
-
/* @__PURE__ */ (0,
|
|
25844
|
-
/* @__PURE__ */ (0,
|
|
25845
|
-
/* @__PURE__ */ (0,
|
|
25846
|
-
head && /* @__PURE__ */ (0,
|
|
26030
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("section", { className: "knScope knStagePanel", "aria-label": `${PIPELINE_STAGE_LABEL[stage]}\u8FD0\u884C\u8BBE\u7F6E`, children: [
|
|
26031
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("header", { className: "ktStageHead knStagePanelHead", children: [
|
|
26032
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "ktStageIntro", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h2", { children: PIPELINE_STAGE_LABEL[stage] }) }),
|
|
26033
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ktStageActions", children: [
|
|
26034
|
+
head && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Badge, { tone: tone(head), children: [
|
|
25847
26035
|
label(head),
|
|
25848
26036
|
" \xB7 v",
|
|
25849
26037
|
head.version
|
|
25850
26038
|
] }),
|
|
25851
|
-
/* @__PURE__ */ (0,
|
|
26039
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { size: "sm", disabled: busy || !status || !status.sources.length, onClick: () => {
|
|
25852
26040
|
void start(stage, true);
|
|
25853
26041
|
}, children: "\u8FD0\u884C\u65B0\u7248\u672C" })
|
|
25854
26042
|
] })
|
|
25855
26043
|
] }),
|
|
25856
|
-
head?.stale && /* @__PURE__ */ (0,
|
|
25857
|
-
stage !== "build" && /* @__PURE__ */ (0,
|
|
25858
|
-
/* @__PURE__ */ (0,
|
|
25859
|
-
/* @__PURE__ */ (0,
|
|
25860
|
-
/* @__PURE__ */ (0,
|
|
25861
|
-
sourceIds.length > 0 && /* @__PURE__ */ (0,
|
|
26044
|
+
head?.stale && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktHint ktHintWarn", role: "status", children: "\u4E0A\u6E38\u5DF2\u66F4\u65B0\u3002\u6B64\u8282\u70B9\u53CA\u540E\u7EED\u8282\u70B9\u9700\u8981\u91CD\u8DD1\uFF0C\u5386\u53F2\u7248\u672C\u7EE7\u7EED\u4FDD\u7559\u3002" }),
|
|
26045
|
+
stage !== "build" && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knScopeSection", children: [
|
|
26046
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knScopeSectionHead", children: [
|
|
26047
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("strong", { children: INPUT_TITLE[stage] }),
|
|
26048
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: inputRows.filter((row) => row.needs).length > 0 ? `${inputRows.filter((row) => row.needs).length} \u9879\u9700\u8981\u5904\u7406` : "\u65E0\u9700\u5904\u7406" }),
|
|
26049
|
+
sourceIds.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", size: "sm", onClick: () => setSourceIds([]), children: "\u53D6\u6D88\u5B9A\u4F4D\u8303\u56F4" })
|
|
25862
26050
|
] }),
|
|
25863
|
-
/* @__PURE__ */ (0,
|
|
25864
|
-
|
|
25865
|
-
/* @__PURE__ */ (0,
|
|
25866
|
-
/* @__PURE__ */ (0,
|
|
25867
|
-
|
|
25868
|
-
source.version
|
|
25869
|
-
] })
|
|
25870
|
-
] }, source.id)) })
|
|
25871
|
-
] }),
|
|
25872
|
-
stage === "materialize" && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knScopeSection", children: [
|
|
25873
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knScopeSectionHead", children: [
|
|
25874
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: "WikiCard \u5206\u7EC4" }),
|
|
25875
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: groupKeys.length ? `\u5DF2\u9009 ${groupKeys.length} \u4E2A` : "\u5168\u90E8\u7B26\u5408\u6587\u6863\u8303\u56F4\u7684\u5206\u7EC4" }),
|
|
25876
|
-
groupKeys.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { variant: "ghost", size: "sm", onClick: () => setGroupKeys([]), children: "\u6E05\u9664\u9009\u62E9" })
|
|
25877
|
-
] }),
|
|
25878
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "knScopeItems knScopeSources", role: "group", "aria-label": "\u7269\u5316\u5206\u7EC4\u8303\u56F4", children: status?.groups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Button, { variant: "outline", size: "sm", className: "knScopeItem", "aria-pressed": groupKeys.includes(group.key), disabled: group.state === "blocked", onClick: () => setGroupKeys((keys) => keys.includes(group.key) ? keys.filter((key) => key !== group.key) : [...keys, group.key]), children: [
|
|
25879
|
-
groupKeys.includes(group.key) && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Check, { size: 12 }),
|
|
25880
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: group.title }),
|
|
25881
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("small", { children: group.state === "blocked" ? "\u5F85\u5F52\u4E00" : `${group.knowledgeCount} \u6761\u77E5\u8BC6` })
|
|
25882
|
-
] }, group.key)) })
|
|
26051
|
+
inputRows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktHint", children: INPUT_EMPTY[stage] }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("ul", { className: "knScopeItems knScopeSources", "aria-label": INPUT_TITLE[stage], children: inputRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("li", { className: "knScopeItem", children: [
|
|
26052
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: row.title }),
|
|
26053
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("small", { children: row.meta }),
|
|
26054
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Badge, { tone: row.needs ? "warning" : row.blocked ? "neutral" : "success", children: row.needs ? "\u9700\u8981\u5904\u7406" : row.blocked ? "\u5F85\u5F52\u4E00" : "\u5DF2\u5B8C\u6210" })
|
|
26055
|
+
] }, row.id)) })
|
|
25883
26056
|
] })
|
|
25884
26057
|
] }),
|
|
25885
|
-
/* @__PURE__ */ (0,
|
|
25886
|
-
/* @__PURE__ */ (0,
|
|
25887
|
-
|
|
25888
|
-
"\
|
|
25889
|
-
|
|
25890
|
-
|
|
25891
|
-
!loading && !head && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", children: "\u6682\u65E0\u8282\u70B9\u7248\u672C\u3002" }),
|
|
25892
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "knVersionOverviewList", children: head && HeadIcon && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("article", { className: "knVersionOverviewRow", "data-current": true, children: [
|
|
25893
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Button, { variant: "ghost", size: "sm", className: "knVersionOverviewNode", "aria-current": "true", onClick: () => {
|
|
25894
|
-
chooseStage(head.stage);
|
|
25895
|
-
setSelectedId(head.id);
|
|
25896
|
-
}, children: [
|
|
25897
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(HeadIcon, { size: 14, "aria-hidden": "true" }),
|
|
25898
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { children: [
|
|
25899
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: PIPELINE_STAGE_LABEL[head.stage] }),
|
|
25900
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25901
|
-
"v",
|
|
25902
|
-
head.version,
|
|
25903
|
-
" \xB7 ",
|
|
25904
|
-
head.sources.length,
|
|
25905
|
-
" \u4EFD\u6587\u6863"
|
|
25906
|
-
] })
|
|
25907
|
-
] })
|
|
25908
|
-
] }),
|
|
25909
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knVersionOverviewStatus", children: [
|
|
25910
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { tone: tone(head), children: label(head) }),
|
|
25911
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25912
|
-
head.done,
|
|
25913
|
-
"/",
|
|
25914
|
-
head.total
|
|
25915
|
-
] })
|
|
25916
|
-
] }),
|
|
25917
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "knVersionOverviewSummary", children: head.summary || "\u2014" }),
|
|
25918
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "knVersionOverviewActions", children: controls(head) })
|
|
25919
|
-
] }, head.id) })
|
|
25920
|
-
] }),
|
|
25921
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knVersionLayout", children: [
|
|
25922
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("aside", { className: "knVersionList", "aria-label": "\u8282\u70B9\u7248\u672C\u4E0E\u6587\u6863", children: [
|
|
25923
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("h3", { children: [
|
|
25924
|
-
PIPELINE_STAGE_LABEL[stage],
|
|
25925
|
-
" \xB7 \u7248\u672C"
|
|
25926
|
-
] }),
|
|
25927
|
-
versions.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktEmpty", children: "\u6682\u65E0\u7248\u672C\u3002" }),
|
|
25928
|
-
versions.map((value) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("section", { className: "knVersion", "data-selected": selected?.id === value.id || void 0, children: [
|
|
25929
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Button, { className: "knVersionButton", variant: "ghost", onClick: () => {
|
|
25930
|
-
setSelectedId(value.id);
|
|
26058
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knVersionLayout", children: [
|
|
26059
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("aside", { className: "knVersionList", children: [
|
|
26060
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { children: "\u7248\u672C" }),
|
|
26061
|
+
versions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktHint", children: "\u8FD8\u6CA1\u6709\u8FD0\u884C\u8BB0\u5F55\u3002" }) : versions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knVersion", "data-selected": selected?.id === item.id || void 0, children: [
|
|
26062
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { variant: "ghost", size: "sm", className: "knVersionButton", onClick: () => {
|
|
26063
|
+
setSelectedId(item.id);
|
|
25931
26064
|
setSelectedDoc("");
|
|
25932
|
-
},
|
|
25933
|
-
/* @__PURE__ */ (0,
|
|
26065
|
+
}, children: [
|
|
26066
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { children: [
|
|
25934
26067
|
"v",
|
|
25935
|
-
|
|
26068
|
+
item.version,
|
|
26069
|
+
" \xB7 ",
|
|
26070
|
+
label(item)
|
|
25936
26071
|
] }),
|
|
25937
|
-
/* @__PURE__ */ (0,
|
|
25938
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25939
|
-
value.sources.length,
|
|
25940
|
-
" \u4EFD\u6587\u6863"
|
|
25941
|
-
] })
|
|
26072
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("small", { children: formatDateTime(item.createdAt) })
|
|
25942
26073
|
] }),
|
|
25943
|
-
/* @__PURE__ */ (0,
|
|
25944
|
-
|
|
25945
|
-
|
|
25946
|
-
|
|
25947
|
-
setLogAfter(0);
|
|
25948
|
-
setEvents([]);
|
|
25949
|
-
}, children: "\u6B64\u7248\u672C\u5168\u90E8\u65E5\u5FD7" }),
|
|
25950
|
-
value.sources.map((source) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Button, { variant: "ghost", size: "sm", className: "knVersionDoc", "aria-pressed": selectedDoc === source.id, onClick: () => {
|
|
25951
|
-
setSelectedDoc(source.id);
|
|
25952
|
-
setCallPage(0);
|
|
25953
|
-
setLogAfter(0);
|
|
25954
|
-
setEvents([]);
|
|
25955
|
-
}, children: [
|
|
25956
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(FileText, { size: 12 }),
|
|
25957
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: source.title }),
|
|
25958
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("small", { children: [
|
|
25959
|
-
source.version ? `\u539F\u6587 v${source.version}` : "\u539F\u6587\u7248\u672C\u672A\u8BB0\u5F55",
|
|
25960
|
-
value.items[source.id]?.state === "reused" ? " \xB7 \u590D\u7528" : value.items[source.id]?.state === "failed" ? " \xB7 \u5931\u8D25" : ""
|
|
25961
|
-
] })
|
|
25962
|
-
] }, source.id)),
|
|
25963
|
-
!value.sources.length && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "ktHint", children: value.startedAt ? "\u65E0\u6765\u6E90\u6587\u6863\u3002" : "\u5F00\u59CB\u6267\u884C\u65F6\u8BB0\u5F55\u6587\u6863\u5FEB\u7167\u3002" })
|
|
25964
|
-
] })
|
|
25965
|
-
] }, value.id)),
|
|
25966
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "knPager", children: [
|
|
25967
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { variant: "ghost", size: "sm", disabled: versionPage === 0, onClick: () => {
|
|
26074
|
+
(item.sources ?? []).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "knVersionDocs", children: item.sources.map((source) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", size: "sm", className: "knVersionDoc", "aria-pressed": selectedDoc === source.id, onClick: () => setSelectedDoc((current) => current === source.id ? "" : source.id), children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: source.title }) }, source.id)) })
|
|
26075
|
+
] }, item.id)),
|
|
26076
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knPager", children: [
|
|
26077
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", size: "sm", disabled: versionPage === 0, onClick: () => {
|
|
25968
26078
|
setVersionPage((page) => page - 1);
|
|
25969
26079
|
setSelectedId("");
|
|
25970
26080
|
}, children: "\u4E0A\u4E00\u9875" }),
|
|
25971
|
-
/* @__PURE__ */ (0,
|
|
25972
|
-
/* @__PURE__ */ (0,
|
|
26081
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: versionPage + 1 }),
|
|
26082
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "ghost", size: "sm", disabled: versions.length < 20, onClick: () => {
|
|
25973
26083
|
setVersionPage((page) => page + 1);
|
|
25974
26084
|
setSelectedId("");
|
|
25975
26085
|
}, children: "\u4E0B\u4E00\u9875" })
|
|
25976
26086
|
] })
|
|
25977
26087
|
] }),
|
|
25978
|
-
/* @__PURE__ */ (0,
|
|
25979
|
-
/* @__PURE__ */ (0,
|
|
25980
|
-
/* @__PURE__ */ (0,
|
|
25981
|
-
/* @__PURE__ */ (0,
|
|
25982
|
-
/* @__PURE__ */ (0,
|
|
25983
|
-
selected.legacy && /* @__PURE__ */ (0,
|
|
26088
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("section", { className: "knVersionDetail", "aria-label": "\u7248\u672C\u6587\u6863\u65E5\u5FD7", children: !selected ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktEmpty", children: "\u9009\u62E9\u7248\u672C\u67E5\u770B\u8BE6\u60C5\u3002" }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
|
|
26089
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("header", { className: "ktStageHead", children: [
|
|
26090
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ktStageIntro", children: [
|
|
26091
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h2", { children: selectedDoc ? selected.sources.find((source) => source.id === selectedDoc)?.title : `${PIPELINE_STAGE_LABEL[stage]} \xB7 v${selected.version}` }),
|
|
26092
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { children: selected.summary }),
|
|
26093
|
+
selected.legacy && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { children: "\u5386\u53F2\u8BB0\u5F55\uFF1A\u539F\u59CB\u6587\u6863\u7248\u672C\u53CA\u8F93\u5165\u4F9D\u8D56\u672A\u5B8C\u6574\u8BB0\u5F55\u3002\u5DF2\u6709\u8F68\u8FF9\u7EE7\u7EED\u4FDD\u7559\uFF1B\u91CD\u8DD1\u540E\u8BB0\u5F55\u5B8C\u6574\u4FE1\u606F\u3002" })
|
|
25984
26094
|
] }),
|
|
25985
26095
|
controls(selected)
|
|
25986
26096
|
] }),
|
|
25987
|
-
/* @__PURE__ */ (0,
|
|
26097
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("p", { className: "ktHint", children: [
|
|
25988
26098
|
formatDateTime(selected.startedAt ?? selected.createdAt),
|
|
25989
26099
|
selected.finishedAt ? ` \u81F3 ${formatDateTime(selected.finishedAt)}` : ""
|
|
25990
26100
|
] }),
|
|
25991
|
-
Object.entries(selected.dependencies).length > 0 && /* @__PURE__ */ (0,
|
|
26101
|
+
Object.entries(selected.dependencies).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("p", { className: "ktHint", children: [
|
|
25992
26102
|
"\u8F93\u5165\u7248\u672C\uFF1A",
|
|
25993
26103
|
Object.entries(selected.dependencies).map(([key, id]) => {
|
|
25994
26104
|
const version = selected.inputVersions?.[key];
|
|
25995
26105
|
return `${PIPELINE_STAGE_LABEL[key]} ${version ? `v${version}` : "\u5386\u53F2\u7248\u672C"}`;
|
|
25996
26106
|
}).join(" \xB7 ")
|
|
25997
26107
|
] }),
|
|
25998
|
-
/* @__PURE__ */ (0,
|
|
25999
|
-
/* @__PURE__ */ (0,
|
|
26000
|
-
callsError && /* @__PURE__ */ (0,
|
|
26108
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("section", { className: "knLogSection", "aria-label": LOG_LABEL[stage], children: [
|
|
26109
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { children: LOG_LABEL[stage] }),
|
|
26110
|
+
callsError && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("p", { className: "ktError", role: "alert", children: [
|
|
26001
26111
|
"\u6A21\u578B\u8BB0\u5F55\u8BFB\u53D6\u5931\u8D25\uFF1A",
|
|
26002
26112
|
callsError
|
|
26003
26113
|
] }),
|
|
26004
|
-
/* @__PURE__ */ (0,
|
|
26005
|
-
/* @__PURE__ */ (0,
|
|
26006
|
-
/* @__PURE__ */ (0,
|
|
26114
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("ol", { className: "knLogEvents", children: ownEvents.map((event) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("li", { children: [
|
|
26115
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("time", { children: formatDateTime(event.at) }),
|
|
26116
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: event.text })
|
|
26007
26117
|
] }, event.seq)) }),
|
|
26008
|
-
logMore && /* @__PURE__ */ (0,
|
|
26009
|
-
/* @__PURE__ */ (0,
|
|
26010
|
-
callsLoading && !calls.length && /* @__PURE__ */ (0,
|
|
26011
|
-
!callsLoading && !callsError && ownCalls.length === 0 && /* @__PURE__ */ (0,
|
|
26012
|
-
ownCalls.map((call, index2) => /* @__PURE__ */ (0,
|
|
26013
|
-
/* @__PURE__ */ (0,
|
|
26014
|
-
/* @__PURE__ */ (0,
|
|
26118
|
+
logMore && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { variant: "outline", size: "sm", onClick: () => setLogAfter(logNext), children: "\u52A0\u8F7D\u66F4\u591A\u9636\u6BB5\u65E5\u5FD7" }),
|
|
26119
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { children: "\u539F\u59CB\u6A21\u578B\u8F93\u5165\u4E0E\u8F93\u51FA" }),
|
|
26120
|
+
callsLoading && !calls.length && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktHint", role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u6A21\u578B\u8BF7\u6C42\u8BB0\u5F55\u2026" }),
|
|
26121
|
+
!callsLoading && !callsError && ownCalls.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "ktHint", children: stage === "build" ? "\u7D22\u5F15\u6784\u5EFA\u4E0D\u8C03\u7528\u6A21\u578B\u3002" : selected.reused ? "\u590D\u7528\u7ED3\u679C\uFF0C\u65E0\u65B0\u6A21\u578B\u8BF7\u6C42\u3002" : active(selected) ? "\u7B49\u5F85\u6A21\u578B\u8BF7\u6C42\u3002" : selected.legacy ? "\u5386\u53F2\u7248\u672C\u672A\u8BB0\u5F55\u6A21\u578B\u8BF7\u6C42\u3002" : "\u65E0\u6A21\u578B\u8BF7\u6C42\u3002" }),
|
|
26122
|
+
ownCalls.map((call, index2) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("article", { className: "knModelCall", children: [
|
|
26123
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knModelCallHead", children: [
|
|
26124
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("strong", { children: [
|
|
26015
26125
|
"\u8BF7\u6C42 ",
|
|
26016
26126
|
callPage * 10 + index2 + 1,
|
|
26017
26127
|
call.objectTitle ? ` \xB7 ${call.objectTitle}` : ""
|
|
26018
26128
|
] }),
|
|
26019
|
-
/* @__PURE__ */ (0,
|
|
26020
|
-
/* @__PURE__ */ (0,
|
|
26129
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Badge, { tone: call.state === "failed" ? "warning" : call.state === "running" ? "blue" : "success", children: call.state === "running" ? "\u8BF7\u6C42\u4E2D" : call.state === "failed" ? "\u5931\u8D25" : "\u5DF2\u8FD4\u56DE" }),
|
|
26130
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("time", { children: formatDateTime(call.at) })
|
|
26021
26131
|
] }),
|
|
26022
|
-
/* @__PURE__ */ (0,
|
|
26132
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(RequestResponse, { request: call.request, response: call.response, error: call.error, pending: call.state === "running" })
|
|
26023
26133
|
] }, call.id)),
|
|
26024
|
-
callTotal > 10 && /* @__PURE__ */ (0,
|
|
26025
|
-
/* @__PURE__ */ (0,
|
|
26026
|
-
/* @__PURE__ */ (0,
|
|
26134
|
+
callTotal > 10 && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "knPager", children: [
|
|
26135
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { size: "sm", variant: "outline", disabled: callPage === 0, onClick: () => setCallPage((page) => page - 1), children: "\u4E0A\u4E00\u9875\u8BF7\u6C42" }),
|
|
26136
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { children: [
|
|
26027
26137
|
callPage + 1,
|
|
26028
26138
|
" / ",
|
|
26029
26139
|
Math.ceil(callTotal / 10)
|
|
26030
26140
|
] }),
|
|
26031
|
-
/* @__PURE__ */ (0,
|
|
26141
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Button, { size: "sm", variant: "outline", disabled: (callPage + 1) * 10 >= callTotal, onClick: () => setCallPage((page) => page + 1), children: "\u4E0B\u4E00\u9875\u8BF7\u6C42" })
|
|
26032
26142
|
] })
|
|
26033
26143
|
] })
|
|
26034
26144
|
] }) })
|
|
@@ -26045,7 +26155,7 @@ ${report.prompt.user}`;
|
|
|
26045
26155
|
};
|
|
26046
26156
|
|
|
26047
26157
|
// src/client/pages.tsx
|
|
26048
|
-
var
|
|
26158
|
+
var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
|
|
26049
26159
|
var PREFIX = "/knowledge/pages/";
|
|
26050
26160
|
function routeOf(location) {
|
|
26051
26161
|
const path = location.pathname.startsWith(PREFIX) ? location.pathname.slice(PREFIX.length) : "";
|
|
@@ -26077,22 +26187,22 @@ ${report.prompt.user}`;
|
|
|
26077
26187
|
return payload.data;
|
|
26078
26188
|
}
|
|
26079
26189
|
function PageShell({ title, meta, column, children }) {
|
|
26080
|
-
return /* @__PURE__ */ (0,
|
|
26081
|
-
/* @__PURE__ */ (0,
|
|
26082
|
-
/* @__PURE__ */ (0,
|
|
26083
|
-
meta !== void 0 && meta !== "" && /* @__PURE__ */ (0,
|
|
26190
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
|
|
26191
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("header", { className: "page-bar", children: [
|
|
26192
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h1", { children: title }),
|
|
26193
|
+
meta !== void 0 && meta !== "" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "page-barMeta", children: meta })
|
|
26084
26194
|
] }),
|
|
26085
|
-
/* @__PURE__ */ (0,
|
|
26195
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("main", { className: "page-main", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: `page-column page-column-${column}`, children }) })
|
|
26086
26196
|
] });
|
|
26087
26197
|
}
|
|
26088
26198
|
function StatePage({ title, children }) {
|
|
26089
|
-
return /* @__PURE__ */ (0,
|
|
26199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title, column: "help", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "page-state", children }) });
|
|
26090
26200
|
}
|
|
26091
26201
|
function TrialPage({ kb }) {
|
|
26092
|
-
const [documents, setDocuments] = (0,
|
|
26093
|
-
const [kbName, setKbName] = (0,
|
|
26094
|
-
const [failure, setFailure] = (0,
|
|
26095
|
-
(0,
|
|
26202
|
+
const [documents, setDocuments] = (0, import_react19.useState)(null);
|
|
26203
|
+
const [kbName, setKbName] = (0, import_react19.useState)("");
|
|
26204
|
+
const [failure, setFailure] = (0, import_react19.useState)("");
|
|
26205
|
+
(0, import_react19.useEffect)(() => {
|
|
26096
26206
|
let cancelled = false;
|
|
26097
26207
|
void (async () => {
|
|
26098
26208
|
try {
|
|
@@ -26114,29 +26224,29 @@ ${report.prompt.user}`;
|
|
|
26114
26224
|
};
|
|
26115
26225
|
}, [kb]);
|
|
26116
26226
|
if (kb === "") {
|
|
26117
|
-
return /* @__PURE__ */ (0,
|
|
26118
|
-
/* @__PURE__ */ (0,
|
|
26119
|
-
/* @__PURE__ */ (0,
|
|
26227
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(StatePage, { title: "\u62BD\u53D6\u8BD5\u8DD1", children: [
|
|
26228
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h2", { children: "\u8FD9\u4E2A\u5730\u5740\u6CA1\u5E26\u77E5\u8BC6\u5E93" }),
|
|
26229
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", { children: [
|
|
26120
26230
|
"\u8BD5\u8DD1\u7684\u8F68\u8FF9\u8981\u843D\u5728\u8FD9\u4E2A\u5E93\u7684\u8BB0\u5FC6\u6BB5\u91CC\uFF0C\u6240\u4EE5\u5730\u5740\u5FC5\u987B\u5E26\u5E93 id\uFF1A",
|
|
26121
|
-
/* @__PURE__ */ (0,
|
|
26231
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/trial?kb=<\u77E5\u8BC6\u5E93 id>" }),
|
|
26122
26232
|
"\u3002"
|
|
26123
26233
|
] }),
|
|
26124
|
-
/* @__PURE__ */ (0,
|
|
26234
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { children: "\u5F53\u524D\u62BD\u53D6\u7531\u5BFC\u5165\u6216\u91CD\u65B0\u7F16\u8BD1\u81EA\u52A8\u89E6\u53D1\uFF0C\u8FDB\u5EA6\u8BF7\u5728 SourceRaw \u8BE6\u60C5\u7684\u300C\u62BD\u53D6\u8F68\u8FF9\u300D\u91CC\u67E5\u770B\u3002" })
|
|
26125
26235
|
] });
|
|
26126
26236
|
}
|
|
26127
|
-
return /* @__PURE__ */ (0,
|
|
26128
|
-
failure !== "" && /* @__PURE__ */ (0,
|
|
26237
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(PageShell, { title: "\u62BD\u53D6\u8BD5\u8DD1", meta: `${kbName !== "" ? kbName : kb} \xB7 \u4E0D\u8FDB\u53EC\u56DE\uFF0C\u8F68\u8FF9\u4E0E\u5019\u9009\u843D\u5E93`, column: "trial", children: [
|
|
26238
|
+
failure !== "" && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", { className: "page-notice", role: "alert", children: [
|
|
26129
26239
|
"\u8BFB\u4E0D\u5230\u8FD9\u4E2A\u5E93\u7684\u6587\u6863\u5217\u8868\uFF08",
|
|
26130
26240
|
failure,
|
|
26131
26241
|
"\uFF09\u2014\u2014 \u8FD8\u53EF\u4EE5\u5F53\u573A\u8BFB\u4E00\u4EFD\u672C\u5730 .md \u6765\u8DD1\u3002"
|
|
26132
26242
|
] }),
|
|
26133
|
-
documents === null ? /* @__PURE__ */ (0,
|
|
26243
|
+
documents === null ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "page-loading", role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u8FD9\u4E2A\u5E93\u7684\u6587\u6863\u2026" }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(WikiTrialRun, { kb, documents })
|
|
26134
26244
|
] });
|
|
26135
26245
|
}
|
|
26136
26246
|
function RunPage({ kb, runId }) {
|
|
26137
|
-
const [run, setRun] = (0,
|
|
26138
|
-
const [failure, setFailure] = (0,
|
|
26139
|
-
(0,
|
|
26247
|
+
const [run, setRun] = (0, import_react19.useState)(null);
|
|
26248
|
+
const [failure, setFailure] = (0, import_react19.useState)("");
|
|
26249
|
+
(0, import_react19.useEffect)(() => {
|
|
26140
26250
|
if (kb === "" || runId === "") return void 0;
|
|
26141
26251
|
let cancelled = false;
|
|
26142
26252
|
void requestExtractionRun({ kb, id: runId }).then((record) => {
|
|
@@ -26149,31 +26259,31 @@ ${report.prompt.user}`;
|
|
|
26149
26259
|
};
|
|
26150
26260
|
}, [kb, runId]);
|
|
26151
26261
|
if (kb === "" || runId === "") {
|
|
26152
|
-
return /* @__PURE__ */ (0,
|
|
26153
|
-
/* @__PURE__ */ (0,
|
|
26154
|
-
/* @__PURE__ */ (0,
|
|
26262
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(StatePage, { title: "\u62BD\u53D6\u8F68\u8FF9", children: [
|
|
26263
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h2", { children: "\u8FD9\u4E2A\u5730\u5740\u6CA1\u5E26\u9F50\u53C2\u6570" }),
|
|
26264
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", { children: [
|
|
26155
26265
|
"\u8F68\u8FF9\u6309\u300C\u54EA\u4E2A\u5E93\u7684\u54EA\u4E00\u6B21\u300D\u53D6\uFF0C\u6240\u4EE5\u5730\u5740\u8981\u5E26\u5E93 id \u4E0E\u8F68\u8FF9 id\uFF1A",
|
|
26156
|
-
/* @__PURE__ */ (0,
|
|
26266
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/run?kb=<\u77E5\u8BC6\u5E93 id>&run=<\u8F68\u8FF9 id>" }),
|
|
26157
26267
|
"\u3002"
|
|
26158
26268
|
] }),
|
|
26159
|
-
/* @__PURE__ */ (0,
|
|
26269
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { children: "\u5B83\u7531 SourceRaw \u8BE6\u60C5\u91CC\u7684\u300C\u62BD\u53D6\u8F68\u8FF9\u300D\u70B9\u51FA\u6765\uFF0C\u4E0D\u9700\u8981\u624B\u5199\u3002" })
|
|
26160
26270
|
] });
|
|
26161
26271
|
}
|
|
26162
26272
|
if (failure !== "") {
|
|
26163
|
-
return /* @__PURE__ */ (0,
|
|
26164
|
-
/* @__PURE__ */ (0,
|
|
26165
|
-
/* @__PURE__ */ (0,
|
|
26166
|
-
/* @__PURE__ */ (0,
|
|
26273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(StatePage, { title: "\u62BD\u53D6\u8F68\u8FF9", children: [
|
|
26274
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h2", { children: "\u8BFB\u4E0D\u5230\u8FD9\u6B21\u8F68\u8FF9" }),
|
|
26275
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { children: failure }),
|
|
26276
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", { children: [
|
|
26167
26277
|
"\u8F68\u8FF9\u5E93\u53EF\u80FD\u6CA1\u542F\u7528\uFF08\u5B83\u9700\u8981 Node 22.5+ \u7684 ",
|
|
26168
|
-
/* @__PURE__ */ (0,
|
|
26278
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "node:sqlite" }),
|
|
26169
26279
|
"\uFF09\uFF0C\u6216\u8005\u8FD9\u6761\u7F16\u53F7\u5DF2\u7ECF\u4E0D\u5728\u4E86\u3002"
|
|
26170
26280
|
] })
|
|
26171
26281
|
] });
|
|
26172
26282
|
}
|
|
26173
26283
|
if (run === null) {
|
|
26174
|
-
return /* @__PURE__ */ (0,
|
|
26284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title: "\u8F68\u8FF9", meta: "\u6B63\u5728\u8BFB\u53D6\u2026", column: "trial", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "page-loading", role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u8FD9\u6B21\u8FD0\u884C\u7684\u8F68\u8FF9\u2026" }) });
|
|
26175
26285
|
}
|
|
26176
|
-
return /* @__PURE__ */ (0,
|
|
26286
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
26177
26287
|
PageShell,
|
|
26178
26288
|
{
|
|
26179
26289
|
title: TRAJECTORY_STAGE_LABEL[run.stage],
|
|
@@ -26184,53 +26294,53 @@ ${report.prompt.user}`;
|
|
|
26184
26294
|
);
|
|
26185
26295
|
}
|
|
26186
26296
|
function trajectoryBody(stage, report) {
|
|
26187
|
-
if (stage === "normalize") return /* @__PURE__ */ (0,
|
|
26188
|
-
if (stage === "materialize") return /* @__PURE__ */ (0,
|
|
26189
|
-
return /* @__PURE__ */ (0,
|
|
26297
|
+
if (stage === "normalize") return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(NormalizeTrajectory, { report });
|
|
26298
|
+
if (stage === "materialize") return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(MaterializeTrajectory, { report });
|
|
26299
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TrialReport, { report });
|
|
26190
26300
|
}
|
|
26191
26301
|
function App() {
|
|
26192
26302
|
const route = routeOf(window.location);
|
|
26193
|
-
if (route.kind === "trial") return /* @__PURE__ */ (0,
|
|
26194
|
-
if (route.kind === "run") return /* @__PURE__ */ (0,
|
|
26303
|
+
if (route.kind === "trial") return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TrialPage, { kb: route.kb });
|
|
26304
|
+
if (route.kind === "run") return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(RunPage, { kb: route.kb, runId: route.run });
|
|
26195
26305
|
if (route.kind === "tasks") {
|
|
26196
|
-
return /* @__PURE__ */ (0,
|
|
26306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title: "\u77E5\u8BC6\u5904\u7406", meta: "\u4ECE\u6765\u6E90\u5230\u68C0\u7D22\u7D22\u5F15\uFF0C\u4E00\u6761\u53EF\u6838\u5BF9\u7684\u6D41\u6C34\u7EBF", column: "tasks", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ExtractionTasksPage, { kb: route.kb }) });
|
|
26197
26307
|
}
|
|
26198
26308
|
if (route.kind === "help") {
|
|
26199
26309
|
if (route.topic === "overview") {
|
|
26200
|
-
return /* @__PURE__ */ (0,
|
|
26310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title: "TitaAgent \u5B8C\u6574\u67B6\u6784", meta: "\u4ECE\u7406\u89E3\u8BF7\u6C42\u5230\u6301\u7EED\u6539\u8FDB\u7684\u4E09\u5C42\u95ED\u73AF", column: "guide", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TabGuidePage, { initialNode: route.node }) });
|
|
26201
26311
|
}
|
|
26202
26312
|
if (route.topic === "compile") {
|
|
26203
|
-
return /* @__PURE__ */ (0,
|
|
26313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title: "\u7F16\u8BD1\u548C\u53EC\u56DE\u94FE\u8DEF", meta: "\u4FE1\u606F\u7F16\u8BD1\u4E3A\u77E5\u8BC6\uFF0C\u7136\u540E\u624D\u503C\u5F97\u88AB\u53EC\u56DE\u4F7F\u7528", column: "help", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(WikiFlowPanel, {}) });
|
|
26204
26314
|
}
|
|
26205
|
-
return /* @__PURE__ */ (0,
|
|
26315
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PageShell, { title: "\u667A\u80FD\u5F52\u56E0\u7684 Event", meta: "\u628A\u4E00\u6B21\u6392\u67E5\u8BB0\u5F55\u6210\u53EF\u56DE\u653E\u3001\u53EF\u8FFD\u6EAF\u7684\u4E8B\u4EF6\u6D41", column: "help", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(AttributionEventGuide, {}) });
|
|
26206
26316
|
}
|
|
26207
|
-
return /* @__PURE__ */ (0,
|
|
26208
|
-
/* @__PURE__ */ (0,
|
|
26209
|
-
/* @__PURE__ */ (0,
|
|
26210
|
-
/* @__PURE__ */ (0,
|
|
26211
|
-
/* @__PURE__ */ (0,
|
|
26317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(StatePage, { title: "\u8FD9\u4E2A\u5730\u5740\u4E0D\u662F\u4E00\u4E2A\u6574\u9875", children: [
|
|
26318
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h2", { children: "\u8BA4\u4E0D\u51FA\u8FD9\u4E00\u9875" }),
|
|
26319
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { children: "\u6574\u9875\u7684\u5730\u5740\u53EA\u6709\u8FD9\u51E0\u79CD\uFF1A" }),
|
|
26320
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", { children: [
|
|
26321
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/trial?kb=<\u77E5\u8BC6\u5E93 id>" }),
|
|
26212
26322
|
" \xB7 \u62BD\u53D6\u8BD5\u8DD1",
|
|
26213
|
-
/* @__PURE__ */ (0,
|
|
26214
|
-
/* @__PURE__ */ (0,
|
|
26323
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("br", {}),
|
|
26324
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/run?kb=<\u77E5\u8BC6\u5E93 id>&run=<\u8F68\u8FF9 id>" }),
|
|
26215
26325
|
" \xB7 \u4E00\u6B21\u62BD\u53D6\u7684\u62A5\u544A",
|
|
26216
|
-
/* @__PURE__ */ (0,
|
|
26217
|
-
/* @__PURE__ */ (0,
|
|
26326
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("br", {}),
|
|
26327
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/tasks?kb=<\u77E5\u8BC6\u5E93 id>" }),
|
|
26218
26328
|
" \xB7 \u77E5\u8BC6\u5904\u7406\u4E0E\u8FD0\u884C\u8BB0\u5F55",
|
|
26219
|
-
/* @__PURE__ */ (0,
|
|
26220
|
-
/* @__PURE__ */ (0,
|
|
26329
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("br", {}),
|
|
26330
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/help/compile" }),
|
|
26221
26331
|
" \xB7 \u7F16\u8BD1\u548C\u53EC\u56DE\u94FE\u8DEF",
|
|
26222
|
-
/* @__PURE__ */ (0,
|
|
26223
|
-
/* @__PURE__ */ (0,
|
|
26332
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("br", {}),
|
|
26333
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/help/attribution" }),
|
|
26224
26334
|
" \xB7 \u667A\u80FD\u5F52\u56E0\u4E8B\u4EF6",
|
|
26225
|
-
/* @__PURE__ */ (0,
|
|
26226
|
-
/* @__PURE__ */ (0,
|
|
26335
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("br", {}),
|
|
26336
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: "/knowledge/pages/help/overview?node=knowledge" }),
|
|
26227
26337
|
" \xB7 \u4E94\u4E2A Tab \u7684\u65B9\u6848\u8BF4\u660E"
|
|
26228
26338
|
] }),
|
|
26229
|
-
/* @__PURE__ */ (0,
|
|
26339
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { children: "\u5B83\u4EEC\u90FD\u7531\u9762\u677F\u4E0A\u7684\u5165\u53E3\u6253\u5F00\uFF0C\u4E0D\u9700\u8981\u624B\u5199\u3002" })
|
|
26230
26340
|
] });
|
|
26231
26341
|
}
|
|
26232
26342
|
var container = document.getElementById("tita-page-root");
|
|
26233
|
-
if (container !== null) (0, import_client.createRoot)(container).render(/* @__PURE__ */ (0,
|
|
26343
|
+
if (container !== null) (0, import_client.createRoot)(container).render(/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react19.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(App, {}) }));
|
|
26234
26344
|
})();
|
|
26235
26345
|
/*! Bundled license information:
|
|
26236
26346
|
|
|
@@ -26582,6 +26692,14 @@ lucide-react/dist/esm/icons/pen-tool.js:
|
|
|
26582
26692
|
* See the LICENSE file in the root directory of this source tree.
|
|
26583
26693
|
*)
|
|
26584
26694
|
|
|
26695
|
+
lucide-react/dist/esm/icons/quote.js:
|
|
26696
|
+
(**
|
|
26697
|
+
* @license lucide-react v0.468.0 - ISC
|
|
26698
|
+
*
|
|
26699
|
+
* This source code is licensed under the ISC license.
|
|
26700
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
26701
|
+
*)
|
|
26702
|
+
|
|
26585
26703
|
lucide-react/dist/esm/icons/refresh-cw.js:
|
|
26586
26704
|
(**
|
|
26587
26705
|
* @license lucide-react v0.468.0 - ISC
|