@xiaobuyu/nodesign 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +140 -0
  3. package/bin/nodesign.js +176 -0
  4. package/package.json +104 -0
  5. package/server/api/README.md +45 -0
  6. package/server/api/_guard.js +75 -0
  7. package/server/api/admin.js +187 -0
  8. package/server/api/assets/docx-page.js +103 -0
  9. package/server/api/assets/helpers.js +22 -0
  10. package/server/api/assets/notes.js +144 -0
  11. package/server/api/assets.js +896 -0
  12. package/server/api/board.js +57 -0
  13. package/server/api/browse.js +138 -0
  14. package/server/api/canvas.js +444 -0
  15. package/server/api/chatai.js +324 -0
  16. package/server/api/exports/build-standalone.js +980 -0
  17. package/server/api/exports/cards.js +118 -0
  18. package/server/api/exports/docx-pdf.js +46 -0
  19. package/server/api/exports/export-page.js +142 -0
  20. package/server/api/exports/handoff.js +147 -0
  21. package/server/api/exports.js +690 -0
  22. package/server/api/instruction.js +75 -0
  23. package/server/api/local.js +115 -0
  24. package/server/api/me.js +116 -0
  25. package/server/api/memory.js +185 -0
  26. package/server/api/pending-changes.js +366 -0
  27. package/server/api/plugins.js +164 -0
  28. package/server/api/projects.js +220 -0
  29. package/server/api/publish.js +64 -0
  30. package/server/api/recent.js +73 -0
  31. package/server/api/sessions.js +589 -0
  32. package/server/api/skills.js +77 -0
  33. package/server/api/standalone-fit.js +168 -0
  34. package/server/api/turn-compose.js +180 -0
  35. package/server/api/turn-inflight.js +44 -0
  36. package/server/api/turn.js +669 -0
  37. package/server/auth/README.md +17 -0
  38. package/server/auth/middleware.js +138 -0
  39. package/server/auth/origin-guard.js +71 -0
  40. package/server/auth/session.js +108 -0
  41. package/server/auth/tier.js +113 -0
  42. package/server/auth/users-store.js +348 -0
  43. package/server/edit/README.md +29 -0
  44. package/server/engine/README.md +113 -0
  45. package/server/engine/agent/agent-shared.js +550 -0
  46. package/server/engine/agent/auto-mode-default-hard-deny.txt +4 -0
  47. package/server/engine/agent/auto-mode-rules.js +78 -0
  48. package/server/engine/agent/context.js +418 -0
  49. package/server/engine/agent/events.js +464 -0
  50. package/server/engine/agent/hooks/canvas-validate.js +199 -0
  51. package/server/engine/agent/hooks/failure.js +120 -0
  52. package/server/engine/agent/hooks/file-events.js +75 -0
  53. package/server/engine/agent/hooks/lifecycle.js +233 -0
  54. package/server/engine/agent/hooks/post-canvas-focus.js +80 -0
  55. package/server/engine/agent/hooks/post-guidance.js +206 -0
  56. package/server/engine/agent/hooks/post-subagent-report.js +104 -0
  57. package/server/engine/agent/hooks/post-trim.js +58 -0
  58. package/server/engine/agent/hooks/pre-board-neighborhood.js +34 -0
  59. package/server/engine/agent/hooks/pre-defaults.js +84 -0
  60. package/server/engine/agent/hooks/pre-injectors.js +277 -0
  61. package/server/engine/agent/hooks/pre-performance-log-guard.js +78 -0
  62. package/server/engine/agent/hooks/pre-starter-files.js +61 -0
  63. package/server/engine/agent/hooks/pre-workspace-scope-guard.js +78 -0
  64. package/server/engine/agent/hooks/site-validate.js +94 -0
  65. package/server/engine/agent/hooks/tool-prompts.js +31 -0
  66. package/server/engine/agent/hooks/turn-state-memory.js +56 -0
  67. package/server/engine/agent/hooks/user-prompt-submit.js +215 -0
  68. package/server/engine/agent/hooks.js +354 -0
  69. package/server/engine/agent/init-contract.js +69 -0
  70. package/server/engine/agent/isolation.js +159 -0
  71. package/server/engine/agent/model-context.js +359 -0
  72. package/server/engine/agent/model-table.js +292 -0
  73. package/server/engine/agent/plugin-loader.js +266 -0
  74. package/server/engine/agent/prompts/nodesign-prelude.md +336 -0
  75. package/server/engine/agent/prompts/tools/ask-user-question-protocol.md +71 -0
  76. package/server/engine/agent/prompts/tools/direct-edit-protocol.md +98 -0
  77. package/server/engine/agent/prompts/tools/generate-image-cookbook.gemini-gateway.md +583 -0
  78. package/server/engine/agent/prompts/tools/generate-image-cookbook.md +483 -0
  79. package/server/engine/agent/prompts/tools/hybrid-reference.md +100 -0
  80. package/server/engine/agent/prompts/tools/paint-still-cookbook.md +270 -0
  81. package/server/engine/agent/prompts/tools/roll-film-cookbook.md +70 -0
  82. package/server/engine/agent/prompts/tools/site-reference.md +106 -0
  83. package/server/engine/agent/prompts/tools/tweaks-syntax.md +125 -0
  84. package/server/engine/agent/prompts/tools/vision-checker-dispatch.md +48 -0
  85. package/server/engine/agent/session-loop.js +1024 -0
  86. package/server/engine/agent/session-model.js +164 -0
  87. package/server/engine/agent/skill.js +204 -0
  88. package/server/engine/agent/system-prompts.js +86 -0
  89. package/server/engine/agent/task-events.js +78 -0
  90. package/server/engine/agents/ds-extractor.md +132 -0
  91. package/server/engine/agents/explorer.md +190 -0
  92. package/server/engine/agents/index.js +230 -0
  93. package/server/engine/agents/schemas/design-system.json +156 -0
  94. package/server/engine/agents/schemas/tweak-schema.json +113 -0
  95. package/server/engine/agents/tweak-proposer.md +127 -0
  96. package/server/engine/agents/vision-checker.md +254 -0
  97. package/server/engine/browse/capture.js +422 -0
  98. package/server/engine/browse/card.js +137 -0
  99. package/server/engine/browse/handover.js +59 -0
  100. package/server/engine/browse/page-digest.js +119 -0
  101. package/server/engine/browse/refs.js +196 -0
  102. package/server/engine/browse/registry.js +307 -0
  103. package/server/engine/browse/screencast.js +170 -0
  104. package/server/engine/browse/state.js +121 -0
  105. package/server/engine/chatai/chat-log.js +79 -0
  106. package/server/engine/chatai/index.js +193 -0
  107. package/server/engine/chatai/openai-compat.js +152 -0
  108. package/server/engine/chatai/orchestrate.js +309 -0
  109. package/server/engine/chatai/perform.js +40 -0
  110. package/server/engine/chatai/summarize.js +79 -0
  111. package/server/engine/mcp/capability-gate.js +52 -0
  112. package/server/engine/mcp/index.js +339 -0
  113. package/server/engine/mcp/param-sanitizer.js +142 -0
  114. package/server/engine/mcp/tools/arrange-on-board.js +124 -0
  115. package/server/engine/mcp/tools/artifact-session.js +278 -0
  116. package/server/engine/mcp/tools/browse-computer.js +421 -0
  117. package/server/engine/mcp/tools/browse-find-batch.js +183 -0
  118. package/server/engine/mcp/tools/browse-screenshot.js +157 -0
  119. package/server/engine/mcp/tools/browse.js +480 -0
  120. package/server/engine/mcp/tools/build-docx.js +101 -0
  121. package/server/engine/mcp/tools/clear-pending-changes.js +99 -0
  122. package/server/engine/mcp/tools/create-on-board.js +155 -0
  123. package/server/engine/mcp/tools/crystallize-skill.js +168 -0
  124. package/server/engine/mcp/tools/deliver-files.js +0 -0
  125. package/server/engine/mcp/tools/explain-style.js +237 -0
  126. package/server/engine/mcp/tools/export-handoff.js +133 -0
  127. package/server/engine/mcp/tools/expose-tweaks.js +149 -0
  128. package/server/engine/mcp/tools/generate-image.js +842 -0
  129. package/server/engine/mcp/tools/get-computed-styles.js +164 -0
  130. package/server/engine/mcp/tools/get-pending-changes.js +205 -0
  131. package/server/engine/mcp/tools/h3box-ssh.js +84 -0
  132. package/server/engine/mcp/tools/helpers/acquire-page.js +82 -0
  133. package/server/engine/mcp/tools/helpers/motion-lab.js +554 -0
  134. package/server/engine/mcp/tools/helpers/motion-scroll.js +112 -0
  135. package/server/engine/mcp/tools/helpers/perception-page.js +215 -0
  136. package/server/engine/mcp/tools/helpers/reference-download.js +103 -0
  137. package/server/engine/mcp/tools/helpers/rembg-bridge.py +80 -0
  138. package/server/engine/mcp/tools/helpers/rembg.js +273 -0
  139. package/server/engine/mcp/tools/helpers/shot-pipeline.js +280 -0
  140. package/server/engine/mcp/tools/highlight.js +68 -0
  141. package/server/engine/mcp/tools/list-pages.js +222 -0
  142. package/server/engine/mcp/tools/lookup-tags.js +59 -0
  143. package/server/engine/mcp/tools/navigate-to-page.js +60 -0
  144. package/server/engine/mcp/tools/organize-board.js +64 -0
  145. package/server/engine/mcp/tools/paint-still.js +434 -0
  146. package/server/engine/mcp/tools/pin-to-board.js +130 -0
  147. package/server/engine/mcp/tools/preview-deck.js +130 -0
  148. package/server/engine/mcp/tools/profile-scroll.js +305 -0
  149. package/server/engine/mcp/tools/publish-site.js +102 -0
  150. package/server/engine/mcp/tools/query-elements.js +195 -0
  151. package/server/engine/mcp/tools/read-board.js +103 -0
  152. package/server/engine/mcp/tools/read-document.js +93 -0
  153. package/server/engine/mcp/tools/read-page.js +264 -0
  154. package/server/engine/mcp/tools/read-tavern-json.js +143 -0
  155. package/server/engine/mcp/tools/record-decision.js +140 -0
  156. package/server/engine/mcp/tools/relate-on-board.js +110 -0
  157. package/server/engine/mcp/tools/remove-background.js +391 -0
  158. package/server/engine/mcp/tools/report-issue.js +115 -0
  159. package/server/engine/mcp/tools/roll-film.js +266 -0
  160. package/server/engine/mcp/tools/screenshot-docx.js +138 -0
  161. package/server/engine/mcp/tools/screenshot-url.js +195 -0
  162. package/server/engine/mcp/tools/screenshot.js +583 -0
  163. package/server/engine/mcp/tools/tier-gate.js +96 -0
  164. package/server/engine/mcp/tools/trace-motion.js +215 -0
  165. package/server/engine/mcp/tools/web-search.js +548 -0
  166. package/server/engine/motion/inventory.js +349 -0
  167. package/server/engine/perception/session.js +235 -0
  168. package/server/engine/plugins/nodesign/.claude-plugin/plugin.json +5 -0
  169. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +192 -0
  170. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/canvas.template.html +667 -0
  171. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/hybrid-grid.md +22 -0
  172. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/image-led-cover.md +25 -0
  173. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/portrait.md +23 -0
  174. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/quote-backdrop.md +21 -0
  175. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/section-divider.md +23 -0
  176. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/text-led.md +21 -0
  177. package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +162 -0
  178. package/server/engine/plugins/nodesign/skills/docx-craft/references/token-schema.md +407 -0
  179. package/server/engine/plugins/nodesign/skills/docx-craft//346/226/207/346/241/243.template.json +80 -0
  180. package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +228 -0
  181. package/server/engine/plugins/nodesign/skills/rp-craft/patterns//346/274/224/345/207/272/351/241/265-/346/234/200/345/260/217/345/256/236/347/216/260.html +78 -0
  182. package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +268 -0
  183. package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +323 -0
  184. package/server/engine/plugins/nodesign/skills/site-craft/patterns/build-lane.md +134 -0
  185. package/server/engine/plugins/nodesign/skills/site-craft/patterns/cutout-collage.md +61 -0
  186. package/server/engine/plugins/nodesign/skills/site-craft/patterns/mock-app.md +163 -0
  187. package/server/engine/plugins/nodesign/skills/site-craft/patterns/page-transitions.md +86 -0
  188. package/server/engine/runs/active-runs.js +698 -0
  189. package/server/engine/runs/live-turn.js +252 -0
  190. package/server/engine/runs/store.js +364 -0
  191. package/server/engine/runs/turn-relay.js +217 -0
  192. package/server/engine/runtime/workspace.js +164 -0
  193. package/server/index.js +235 -0
  194. package/server/lib/artifact-file-path.js +80 -0
  195. package/server/lib/artifact-target.js +284 -0
  196. package/server/lib/asset-refs.js +239 -0
  197. package/server/lib/async-queue.js +104 -0
  198. package/server/lib/auto-relations.js +130 -0
  199. package/server/lib/binding-types.js +60 -0
  200. package/server/lib/board-kind-sizes.js +62 -0
  201. package/server/lib/board-relations.js +133 -0
  202. package/server/lib/browse-proxy.js +180 -0
  203. package/server/lib/canvas-id.js +36 -0
  204. package/server/lib/cover.js +227 -0
  205. package/server/lib/danbooru-tags.js +291 -0
  206. package/server/lib/doc-extract.js +156 -0
  207. package/server/lib/docx/build-from-source.js +260 -0
  208. package/server/lib/docx/build.js +490 -0
  209. package/server/lib/docx/dump-styles.js +287 -0
  210. package/server/lib/docx/fonts/nodesign-cjk.conf +164 -0
  211. package/server/lib/docx/merge-runs.js +129 -0
  212. package/server/lib/docx/numbering.js +218 -0
  213. package/server/lib/docx/order.js +152 -0
  214. package/server/lib/docx/rawzip.js +172 -0
  215. package/server/lib/docx/render.js +92 -0
  216. package/server/lib/docx/text-lint.js +225 -0
  217. package/server/lib/docx/tokens.js +335 -0
  218. package/server/lib/docx/units.js +29 -0
  219. package/server/lib/docx/xml.js +291 -0
  220. package/server/lib/docx-pages.js +187 -0
  221. package/server/lib/export-collect.js +289 -0
  222. package/server/lib/export-package.js +210 -0
  223. package/server/lib/html-srcset.js +145 -0
  224. package/server/lib/image-variant.js +460 -0
  225. package/server/lib/ingress/forward-openai-chat.js +305 -0
  226. package/server/lib/ingress/openai-chat.js +491 -0
  227. package/server/lib/ingress/session-notice.js +66 -0
  228. package/server/lib/ingress/session-routes.js +68 -0
  229. package/server/lib/ingress/slot-probe.js +130 -0
  230. package/server/lib/ingress/upstream-billing.js +52 -0
  231. package/server/lib/ingress/upstream-fail-streak.js +72 -0
  232. package/server/lib/ingress/upstream-truncation.js +48 -0
  233. package/server/lib/issues-store.js +182 -0
  234. package/server/lib/kinds/deck.js +72 -0
  235. package/server/lib/kinds/docx.js +283 -0
  236. package/server/lib/kinds/file-kinds.js +113 -0
  237. package/server/lib/kinds/index.js +202 -0
  238. package/server/lib/kinds/site.js +161 -0
  239. package/server/lib/model-ingress.js +543 -0
  240. package/server/lib/moderation.js +255 -0
  241. package/server/lib/notice-store.js +103 -0
  242. package/server/lib/plugin-install.js +104 -0
  243. package/server/lib/plugin-validator.js +721 -0
  244. package/server/lib/publish-store.js +115 -0
  245. package/server/lib/quick-summary.js +52 -0
  246. package/server/lib/quota.js +270 -0
  247. package/server/lib/rate-window.js +29 -0
  248. package/server/lib/reference-assets.js +92 -0
  249. package/server/lib/region-shot.js +135 -0
  250. package/server/lib/safe-path.js +73 -0
  251. package/server/lib/sdk-session.js +33 -0
  252. package/server/lib/showcase-store.js +92 -0
  253. package/server/lib/site-publish.js +465 -0
  254. package/server/lib/ssrf-guard.js +432 -0
  255. package/server/lib/task-scan.js +158 -0
  256. package/server/lib/tavern-json.js +154 -0
  257. package/server/lib/video-variant.js +237 -0
  258. package/server/lib/workspace-path.js +33 -0
  259. package/server/ops/fix-sdk-musl.mjs +40 -0
  260. package/server/ops/install-macos-fonts.sh +114 -0
  261. package/server/ops/macos-fonts.conf +336 -0
  262. package/server/ops/sandbox-shim/bwrap +57 -0
  263. package/server/projects/assets-summary.js +119 -0
  264. package/server/projects/auto-name.js +53 -0
  265. package/server/projects/board-store.js +640 -0
  266. package/server/projects/move-entry.js +103 -0
  267. package/server/projects/store.js +270 -0
  268. package/server/projects/ui-config.js +54 -0
  269. package/server/projects/workspace-templates.js +53 -0
  270. package/server/projects/workspace.js +1025 -0
  271. package/server/runtime/capabilities.js +153 -0
  272. package/server/runtime/local-config.js +177 -0
  273. package/server/runtime/local-env.js +88 -0
  274. package/server/runtime/platform.js +342 -0
  275. package/server/runtime/profile.js +72 -0
  276. package/server/services/rembg-launcher.js +313 -0
  277. package/server/services/rembg-service.py +334 -0
  278. package/server/shared/README.md +25 -0
  279. package/server/shared/deck.js +54 -0
  280. package/server/shared/time.js +49 -0
  281. package/server/style-pipeline/README.md +53 -0
  282. package/server/ws/broker.js +36 -0
  283. package/server/ws/browse-channel.js +177 -0
  284. package/server/ws/index.js +386 -0
  285. package/web/README.md +89 -0
  286. package/web/dist/assets/BrowserWindow-Dc7J7CYc.js +11 -0
  287. package/web/dist/assets/DeckWindow-4G0xX7P3.js +16 -0
  288. package/web/dist/assets/DocxWindow-BXQsoPkh.js +16 -0
  289. package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  290. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  291. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  292. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  293. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  294. package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  295. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  296. package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  297. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  298. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  299. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  300. package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  301. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  302. package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  303. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  304. package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  305. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  306. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  307. package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  308. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  309. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  310. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  311. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  312. package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  313. package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  314. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  315. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  316. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  317. package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  318. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  319. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  320. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  321. package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  322. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  323. package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  324. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  325. package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  326. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  327. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  328. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  329. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  330. package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  331. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  332. package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  333. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  334. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  335. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  336. package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  337. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  338. package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  339. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  340. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  341. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  342. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  343. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  344. package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  345. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  346. package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  347. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  348. package/web/dist/assets/SiteWindow-D6eS-2gM.js +18 -0
  349. package/web/dist/assets/again-D8tfgKKO.webp +0 -0
  350. package/web/dist/assets/caveat-nd-CP6HlsNg.woff2 +0 -0
  351. package/web/dist/assets/clock-xJhvfYpS.webp +0 -0
  352. package/web/dist/assets/film-cut-BBKMwH7q.webp +0 -0
  353. package/web/dist/assets/film-still-BZ_DL9Tt.webp +0 -0
  354. package/web/dist/assets/index-C0KUf6Wd.css +1 -0
  355. package/web/dist/assets/index-Cbl3ATvp.js +2125 -0
  356. package/web/dist/assets/ink-desk-BRbxeDsR.webp +0 -0
  357. package/web/dist/assets/ink-night-Bz4BT3XH.webp +0 -0
  358. package/web/dist/assets/ink-portrait-C0DM4V8Q.webp +0 -0
  359. package/web/dist/assets/longcang-regular-C0uvTuKa.woff2 +0 -0
  360. package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
  361. package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
  362. package/web/dist/assets/pending-edit-apply-DTjo2geW.js +31 -0
  363. package/web/dist/assets/question-8H4HSqxh.webp +0 -0
  364. package/web/dist/assets/reject-BaPJqElj.webp +0 -0
  365. package/web/dist/assets/rotate-cw-LMT3x1Zj.js +11 -0
  366. package/web/dist/assets/rp-portrait-CbrGpew2.webp +0 -0
  367. package/web/dist/assets/rp-street-C4jVKjxx.webp +0 -0
  368. package/web/dist/assets/square-dashed-mouse-pointer-CBoAkfhi.js +11 -0
  369. package/web/dist/assets/tangle-DIxHVNuT.webp +0 -0
  370. package/web/dist/assets/thisone-BylZKglV.webp +0 -0
  371. package/web/dist/assets/thumb-DO1wfK1I.webp +0 -0
  372. package/web/dist/index.html +18 -0
@@ -0,0 +1,16 @@
1
+ import{c as K,r as n,j as e,R as N,C as c,G as g,k as Q,F as k,e as W,a2 as tt,A as ct,X as dt,b as q,aq as ut,a7 as _,Q as ht,a0 as G,ar as pt,a3 as Z,x as ft,as as xt,s as gt,Y as yt,Z as bt,at as vt}from"./index-Cbl3ATvp.js";import{S as wt,E as kt}from"./square-dashed-mouse-pointer-CBoAkfhi.js";/**
2
+ * @license lucide-react v0.468.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const mt=K("FileJson",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]]);/**
7
+ * @license lucide-react v0.468.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const St=K("FileType2",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M2 13v-1h6v1",key:"1dh9dg"}],["path",{d:"M5 12v6",key:"150t9c"}],["path",{d:"M4 18h2",key:"1xrofg"}]]);/**
12
+ * @license lucide-react v0.468.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const jt=K("Scan",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}]]),J=8,Y=280;function Mt({active:y,imgRef:h,onSubmit:m,onExit:b}){const[s,S]=n.useState(null),[r,U]=n.useState(null),[O,v]=n.useState(""),[P,u]=n.useState(!1),w=n.useCallback(()=>{S(null),U(null),v("")},[]);if(n.useEffect(()=>{y||w()},[y,w]),n.useEffect(()=>{if(!y)return;const t=a=>{a.key==="Escape"&&(a.stopPropagation(),r||s?w():b==null||b())};return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[y,r,s,w,b]),!y)return null;const f=t=>{const a=t.currentTarget.getBoundingClientRect();return{x:Math.min(Math.max(0,t.clientX-a.left),a.width),y:Math.min(Math.max(0,t.clientY-a.top),a.height)}},z=(t,a)=>({x:Math.min(t.x,a.x),y:Math.min(t.y,a.y),w:Math.abs(t.x-a.x),h:Math.abs(t.y-a.y)}),R=t=>{var l,C;if(t.button!==0||r)return;t.preventDefault(),t.stopPropagation(),(C=(l=t.currentTarget).setPointerCapture)==null||C.call(l,t.pointerId);const a=f(t);S({from:a,to:a})},L=t=>{if(!s)return;t.stopPropagation();const a=f(t);S(l=>l&&{...l,to:a})},H=()=>{if(!s)return;const t=z(s.from,s.to);S(null),!(t.w<J||t.h<J)&&U({box:t})},T=async()=>{if(!r||P)return;const t=h==null?void 0:h.current;if(!t||!t.naturalWidth||!t.clientWidth)return;const a=t.naturalWidth/t.clientWidth,l=r.box;u(!0);try{await(m==null?void 0:m({region:{x:Math.round(l.x*a),y:Math.round(l.y*a),w:Math.round(l.w*a),h:Math.round(l.h*a)},viewport:{width:t.naturalWidth,height:t.naturalHeight},text:O.trim()})),w(),b==null||b()}finally{u(!1)}},j=s?z(s.from,s.to):null,M=(r==null?void 0:r.box)||j;let p=0,$=0;if(r&&(h!=null&&h.current)){const t=r.box,a=h.current.clientHeight,l=h.current.clientWidth;p=t.y+t.h+10,p+170>a&&(p=Math.max(8,t.y-170-10)),$=Math.min(Math.max(8,t.x),Math.max(8,l-Y-8))}return e.jsxs("div",{onPointerDown:R,onPointerMove:L,onPointerUp:H,onPointerCancel:()=>S(null),style:{position:"absolute",inset:0,cursor:r?"default":"crosshair",background:r?"transparent":"rgba(32,26,14,0.10)",touchAction:"none",borderRadius:2},children:[M&&e.jsx("div",{style:{position:"absolute",left:M.x,top:M.y,width:M.w,height:M.h,border:`2px solid ${c.btn}`,borderRadius:N.sm,background:"rgba(255,255,255,0.06)",boxShadow:"0 0 0 9999px rgba(32,26,14,0.18)",pointerEvents:"none"}}),r&&e.jsxs("div",{onPointerDown:t=>t.stopPropagation(),style:{position:"absolute",left:$,top:p,width:Y,background:c.bgWhite,borderRadius:N.lg,boxShadow:Q.far,padding:g.md,display:"flex",flexDirection:"column",gap:g.sm},children:[e.jsx("textarea",{value:O,autoFocus:!0,onChange:t=>v(t.target.value),onKeyDown:t=>{t.key==="Enter"&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),T())},placeholder:"这一块想说什么…(可以不写,框本身就是话)",style:{width:"100%",boxSizing:"border-box",minHeight:56,resize:"vertical",fontFamily:W,fontSize:k.sm,color:c.text,lineHeight:1.6,border:`1px solid ${c.borderLt}`,borderRadius:N.md,padding:g.sm,outline:"none",background:c.bg}}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:g.sm},children:[e.jsxs("button",{onClick:T,disabled:P,style:{display:"inline-flex",alignItems:"center",gap:g.xs,padding:`5px ${g.lg}px`,borderRadius:N.pill,border:"none",background:c.btn,color:c.btnText,fontFamily:W,fontSize:k.sm,fontWeight:600,cursor:P?"default":"pointer",opacity:P?.7:1},children:[P?e.jsxs(e.Fragment,{children:[e.jsx(tt,{size:12,style:{animation:"spin 1s linear infinite"}})," 发送中…"]}):e.jsxs(e.Fragment,{children:[e.jsx(ct,{size:12})," 发给 agent"]}),e.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"})]}),e.jsxs("button",{onClick:w,style:{display:"inline-flex",alignItems:"center",gap:g.xs,padding:`5px ${g.md}px`,borderRadius:N.pill,border:`1px solid ${c.borderLt}`,background:"transparent",color:c.sub,fontFamily:W,fontSize:k.xs,cursor:"pointer"},children:[e.jsx(dt,{size:11})," 重画"]}),e.jsx("span",{style:{marginLeft:"auto",fontFamily:q,fontSize:k.xxs,color:c.dim},children:"⌘↵"})]})]})]})}const Pt=24;function Ct({projectId:y,file:h,title:m,sourceFile:b=null,members:s=null,exports:S,onExport:r,onClose:U,onToolbarGroups:O,onRegionComment:v=null,fileVersions:P=null}){const[u,w]=n.useState(1),[f,z]=n.useState(null),[R,L]=n.useState(!0),[H,T]=n.useState(null),[j,M]=n.useState("height"),[p,$]=n.useState("preview"),[t,a]=n.useState(!1),[l,C]=n.useState(null),[et,nt]=n.useState(null),at=n.useRef(null),B=n.useRef(null),[d,V]=n.useState(h);n.useEffect(()=>{V(h)},[h]);const A=(s==null?void 0:s.find(i=>i.file===d))||null,F=A?A.sourceFile:b,I=ut(P,d),X=n.useMemo(()=>_.docxPageUrl(y,d,u,{v:I}),[y,d,u,I]);n.useEffect(()=>{w(1),z(null),C(null)},[d]),n.useEffect(()=>{let i=!1,o=null;return L(!0),T(null),fetch(X).then(async x=>{if(!x.ok){const lt=await x.json().catch(()=>({}));throw new Error(lt.error||`渲染失败(${x.status})`)}const E=Number(x.headers.get("X-Docx-Pages")),rt=await x.blob();i||(E>0&&z(E),o=URL.createObjectURL(rt),nt(o),L(!1))}).catch(x=>{i||(T(x.message),L(!1))}),()=>{i=!0,o&&URL.revokeObjectURL(o)}},[X]),n.useEffect(()=>{p!=="source"||!F||l!=null||fetch(_.artifactFileUrl(y,F)).then(i=>i.text()).then(C).catch(()=>C("(读不到源文件)"))},[p,F,y,l]);const D=n.useCallback(i=>{w(o=>Math.min(Math.max(1,o+i),f||o+i))},[f]);n.useEffect(()=>{const i=o=>{var x,E;((x=o.target)==null?void 0:x.tagName)==="INPUT"||((E=o.target)==null?void 0:E.tagName)==="TEXTAREA"||((o.key==="ArrowRight"||o.key==="PageDown")&&(o.preventDefault(),D(1)),(o.key==="ArrowLeft"||o.key==="PageUp")&&(o.preventDefault(),D(-1)))};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[D]);const it=n.useMemo(()=>[s&&s.length>1?{id:"member",value:d,node:e.jsx("select",{value:d,onChange:i=>V(i.target.value),title:"这个文件夹里的文档(多版本并排放,选一份看)",style:{maxWidth:180,height:24,padding:"0 4px",border:`1px solid ${G.hair}`,borderRadius:pt.radius,background:"transparent",color:G.text,fontFamily:W,fontSize:k.xs,cursor:"pointer"},children:s.map(i=>e.jsx("option",{value:i.file,style:{background:c.bgWhite,color:c.text},children:i.title||i.file},i.file))})}:null,{id:"pager",value:`${u}/${f??""}`,node:e.jsxs(e.Fragment,{children:[e.jsx(Z,{dataId:"prev",icon:ft,title:"上一页(← / PageUp)",disabled:u<=1,onClick:()=>D(-1)}),e.jsx("span",{style:{...xt,fontFamily:q,fontVariantNumeric:"tabular-nums",padding:`0 ${g.xs}px`,minWidth:40,textAlign:"center",whiteSpace:"nowrap",userSelect:"none"},children:f?`${u} / ${f}`:u}),e.jsx(Z,{dataId:"next",icon:gt,title:"下一页(→ / PageDown)",disabled:!!f&&u>=f,onClick:()=>D(1)})]})},v&&p==="preview"?{id:"regionmode",items:[{id:"region",icon:wt,label:"圈选",title:"在页面上框一块发给 agent",active:t,onClick:()=>a(i=>!i)}]}:null,{id:"fit",items:[{id:"fitH",icon:ht,title:"整页(铺满高度)",active:j==="height",onClick:()=>M("height")},{id:"fitW",icon:jt,title:"铺满宽度(看细节)",active:j==="width",onClick:()=>M("width")}]},{id:"tab",items:[{id:"preview",icon:kt,title:"看页面",active:p==="preview",onClick:()=>$("preview")},{id:"pdf",icon:St,title:"连续阅读(浏览器 PDF 视图,可搜索选字)",active:p==="pdf",onClick:()=>$("pdf")},...F?[{id:"source",icon:mt,title:`看源码(${F})—— 改这份再 build,别改 .docx`,active:p==="source",onClick:()=>$("source")}]:[]]},yt({kind:"docx",exports:S,onExport:r?i=>r(i,d):null})].filter(Boolean),[u,f,j,p,F,S,r,D,s,d,v,t]),ot=n.useCallback(async({region:i,viewport:o,text:x})=>{await(v==null?void 0:v({region:i,viewport:o,elements:[],container:null,text:x,path:d,docxPage:u}))},[v,d,u]),st=j==="height"?{height:"100%",width:"auto",maxWidth:"100%"}:{width:"100%",height:"auto"};return e.jsx(bt,{kind:"docx",title:A!=null&&A.title?`${m||h} · ${A.title}`:m||h,subtitle:f?`${f} 页`:null,onClose:U,groups:it,onToolbarGroups:O,banner:F?null:e.jsxs("span",{children:["这是一份",e.jsx("b",{children:"外来文档"}),"(没有 token 源)。现在能看、能导出,",e.jsx("b",{children:"改它要等编辑道上线"}),"—— 想现在就要一个改过的版本,让 agent 基于它的内容重做一份。"]}),contentStyle:{background:vt.paper},children:p==="pdf"?e.jsx("iframe",{title:`${m||d} PDF`,src:_.docxPdfUrl(y,d,{v:I}),style:{width:"100%",height:"100%",border:0,display:"block"}},`${d}?v=${I}`):p==="source"?e.jsx("pre",{style:{margin:0,padding:g.lg,height:"100%",overflow:"auto",fontFamily:q,fontSize:k.sm,lineHeight:1.6,color:c.text,background:c.bgWhite,whiteSpace:"pre-wrap"},children:l??"读取中…"}):e.jsx("div",{ref:at,style:{height:"100%",width:"100%",overflow:"auto",display:"flex",alignItems:j==="height"?"center":"flex-start",justifyContent:"center",padding:Pt,boxSizing:"border-box"},children:H?e.jsxs("div",{style:{fontFamily:W,fontSize:k.sm,color:c.text2,textAlign:"center",maxWidth:420,lineHeight:1.7},children:[H,e.jsx("div",{style:{marginTop:g.sm,color:c.sub,fontSize:k.xs},children:"渲染链路的问题跟文档本身无关。文档还在,导出照常能用。"})]}):e.jsxs("div",{style:{position:"relative",height:j==="height"?"100%":"auto",maxWidth:"100%"},children:[e.jsx("img",{ref:B,alt:`${m||d} 第 ${u} 页`,src:et||void 0,style:{...st,display:"block",background:"#fff",boxShadow:Q.mid,borderRadius:2}}),e.jsx(Mt,{active:t&&!R,imgRef:B,onSubmit:ot,onExit:()=>a(!1)},`${d}#${u}`),R&&e.jsxs("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(255,255,255,0.65)",gap:g.sm,fontFamily:W,fontSize:k.sm,color:c.text2,borderRadius:2},children:[e.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"}),e.jsx(tt,{size:14,style:{animation:"spin 1s linear infinite"}}),"加载中"]})]})})})}export{Ct as default};
@@ -0,0 +1,18 @@
1
+ import{c as De,j as c,_ as Et,v as we,u as Rt,r,$ as Oe,a0 as Ie,a1 as Tt,a2 as $t,a3 as I,a4 as Je,G as T,R as se,b as Ot,a5 as et,a6 as Dt,d as At,a7 as ae,a8 as tt,a9 as jt,aa as Pt,ab as be,ac as Mt,ad as Xe,ae as Ze,af as Ft,M as Nt,ag as zt,ah as Ye,Y as Lt,Z as Wt,ai as Bt,C as B,F as ye,e as ve,k as Ut}from"./index-Cbl3ATvp.js";import{c as _t,b as Ht,a as Gt,d as Kt,E as Vt,C as qt,I as It,G as Jt,p as Xt,D as Zt,P as Yt,R as Qt,e as er}from"./pending-edit-apply-DTjo2geW.js";import{E as tr,S as rr}from"./square-dashed-mouse-pointer-CBoAkfhi.js";import{A as nr,R as sr}from"./rotate-cw-LMT3x1Zj.js";/**
2
+ * @license lucide-react v0.468.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const ar=De("CloudOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);/**
7
+ * @license lucide-react v0.468.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const lr=De("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/**
12
+ * @license lucide-react v0.468.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const cr=De("Tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]);function ir({tab:i,collageWarn:a,built:f}){return i!=="edit"&&i!=="drag"?null:c.jsxs(Et,{children:[i==="edit"?c.jsx("span",{children:"双击文字直接改(Enter 保存 / Esc 还原),单击元素弹评论卡 —— 改动和评论都会带给 agent"}):c.jsxs("span",{children:["拖动元素调整布局,摆好后",c.jsx("b",{children:"点「保存」写进文件"}),"(保存前可撤销)· 按 P 切自由摆放 · Alt 拖 = 复制 · 自由模式方向键微调",a&&c.jsxs("span",{style:{color:"#a4600f"},children:[" ","· 这页是拼贴式版面(大量绝对定位):绝对定位碎片拖动自动改坐标;其余元素拖动改的是结构,画面可能不变 —— 精修位置更推荐直接吩咐 agent 改 CSS"]})]}),f&&c.jsx("span",{style:{color:"#a4600f"},children:"· 构建型站点:这里改的是构建产物,agent 会把改动同步回源再重新构建"})]})}function or(i,a){if(typeof i!="string"||!i.trim()||!Array.isArray(a)||a.length===0)return null;let f;try{f=new DOMParser().parseFromString(i,"text/html")}catch{return null}if(!(f!=null&&f.body))return null;for(const h of a)if(!ur(f,h))return null;const d=i.match(/^\s*<!doctype[^>]*>/i);return`${d?d[0].trim():"<!doctype html>"}
17
+ ${f.documentElement.outerHTML}`}function ur(i,a){if(!a||!a.anchor)return!1;const f=we(a.anchor,i.body);if(!f)return!1;if(a.type==="text")return typeof a.newText!="string"?!1:(f.textContent=a.newText,!0);if(a.type==="style"){if(!a.styles||typeof a.styles!="object")return!1;a.parentNeedsRelative&&f.parentElement&&(f.parentElement.style.position="relative");for(const[d,h]of Object.entries(a.styles))try{f.style[d]=h}catch{}return!0}if(a.type==="move"||a.type==="duplicate"){const d=a.container?we(a.container,i.body):null;if(!d||d===f||f.contains(d))return!1;let h=null;if(a.before&&(h=we(a.before,i.body),!h||h.parentNode!==d))return!1;const g=a.type==="duplicate"?f.cloneNode(!0):f;if(a.type==="duplicate")try{g.removeAttribute("data-anchor")}catch{}return h?d.insertBefore(g,h):d.appendChild(g),!0}return!1}function fr({projectId:i,task:a,root:f=null}){const d=Rt(p=>p.showToast),[h,g]=r.useState(null),[D,U]=r.useState(!1),[w,_]=r.useState(!1),[le,E]=r.useState(null),S=r.useRef(null);r.useEffect(()=>{let p=!0;return Oe.get(i,a).then(H=>{p&&(g(H.site),U(!0))}).catch(()=>{p&&U(!0)}),()=>{p=!1}},[i,a]),r.useEffect(()=>()=>clearTimeout(S.current),[]);const A=p=>{E(p),clearTimeout(S.current),S.current=setTimeout(()=>E(null),3500)},$=async()=>{E(null),_(!0);try{const{site:p,warning:H}=await Oe.publish(i,a,f);g(p),d(`已上线:${p.url}(新站点子域名生效可能要等一两分钟)${H?` · ${H}`:""}`,"success")}catch(p){d(p.message||"发布失败","error")}_(!1)},ce=async()=>{E(null),_(!0);try{await Oe.unpublish(i,a),g(null),d("已下线,公网地址即刻失效","success")}catch(p){d(p.message||"下线失败","error")}_(!1)},ie=()=>{var p;(p=navigator.clipboard)==null||p.writeText(h.url).then(()=>d("地址已复制","success")).catch(()=>d(h.url,"info"))};return D?w?c.jsxs("span",{style:{...Qe,color:Ie.textDim},children:[c.jsx($t,{size:11,style:{animation:"spin 1s linear infinite"}}),c.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"}),h?"更新中…":"上线中…"]}):h?c.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:T.xxs},children:[c.jsxs("a",{href:h.url,target:"_blank",rel:"noreferrer",title:h.url,style:{...Qe,textDecoration:"none",color:Ie.text,background:"rgba(120,190,120,0.16)",maxWidth:190},children:[c.jsx("span",{style:{width:6,height:6,borderRadius:se.round,background:"#6FBF6F",flexShrink:0}}),c.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:Ot},children:h.url.replace(/^https:\/\//,"")}),c.jsx(et,{size:10,style:{flexShrink:0}})]}),c.jsx(I,{title:"复制地址",icon:Dt,onClick:ie}),c.jsx(I,{title:"把当前版本重新发布(地址不变)",icon:At,onClick:$}),le==="unpublish"?c.jsx(I,{label:"确认下线?",danger:!0,onClick:ce}):c.jsx(I,{title:"下线(公网地址失效)",icon:ar,danger:!0,onClick:()=>A("unpublish")})]}):le==="publish"?c.jsx(I,{icon:Je,label:"确认发到公网?",active:!0,onClick:$}):c.jsx(I,{icon:Je,label:"上线",title:"发布到 Cloudflare Pages,任何人可访问",onClick:()=>A("publish")}):null}const Qe=Tt;function dr(i,a){const[f,d]=r.useState(!1),[h,g]=r.useState(!1);return r.useEffect(()=>{let D=!0;return fetch(ae.artifactFileUrl(i,tt(a||"","编排.yaml")),{method:"HEAD"}).then(U=>{D&&d(U.ok)}).catch(()=>{D&&d(!1)}),()=>{D=!1}},[i,a]),{hasOrch:f,item:f&&{id:"orchestrate",icon:jt,title:"编排设置 —— 这场演出的上下文怎么拼",onClick:()=>g(!0)},overlay:h?c.jsx(Pt,{projectId:i,dir:a||"",onClose:()=>g(!1)}):null}}function xr({projectId:i,task:a,base:f,entry:d="index.html",title:h,pages:g=[],fileVersions:D=null,built:U=!1,onAddComment:w=null,onResolveComment:_=null,onDeleteComment:le=null,onDomEdit:E=null,onRegionComment:S=null,onIframeReady:A=null,isStreaming:$=!1,comments:ce=[],artifactExports:ie=null,onExport:p=null,onToolbarGroups:H=null,onClose:J}){var qe;const[Se,rt]=r.useState(be[0].id),[o,oe]=r.useState("preview"),[j,G]=r.useState(null),[x,ke]=r.useState(d),[X,Ce]=r.useState([]),[nt,Ae]=r.useState(""),[je,st]=r.useState(0),[Z,at]=r.useState({width:0,height:0}),[Pe,lt]=r.useState(null),[O,ct]=r.useState(0),[it,ot]=r.useState(!1),[ut,Ee]=r.useState(!1),[P,ft]=r.useState(!1),[ue,dt]=r.useState(null),[ht,Re]=r.useState(!1),Me=r.useRef(null),k=r.useRef(null),Te=be.find(e=>e.id===Se)||be[0],Fe=f||a||"",C=tt(Fe,x),Ne=Mt(D,Fe,x),ze=`${ae.artifactFileUrl(i,C)}?v=${Ne}-${je}`,Le=!!E,We=!!E,M=r.useRef(C);M.current=C;const fe=r.useRef(o);fe.current=o,r.useEffect(()=>{ke(d),Ce([])},[a,d]);const Be=r.useMemo(()=>ce.filter(e=>e.path===C),[ce,C]),K=r.useRef(null),V=r.useRef(null),de=r.useRef(Promise.resolve()),F=r.useRef(E);F.current=E;const he=r.useCallback(async e=>{var l;let t=null,n=!1;try{const u=await fetch(ae.artifactFileUrl(i,e.path));u.ok&&(t=or(await u.text(),e.ops))}catch{}if(!t){n=!0;try{if(e.doc){const u=e.doc.body,m=(u==null?void 0:u.style.userSelect)||"";u&&(u.style.userSelect=""),t=`<!doctype html>
18
+ `+e.doc.documentElement.outerHTML,u&&(u.style.userSelect=m),t=t.replace(/ style=""/g,"")}}catch{t=null}}if(!t)return;const s=n?e.records.map(u=>({...u,serializedFrom:"runtime-dom"})):e.records;await((l=F.current)==null?void 0:l.call(F,{path:e.path,html:t,summary:e.summary,records:s,persist:!0}))},[i]),pe=r.useCallback(()=>{V.current&&(clearTimeout(V.current),V.current=null);const e=K.current;e&&(K.current=null,de.current=de.current.then(()=>he(e)).catch(()=>{}))},[he]),ge=e=>(e==null?void 0:e.dataId)||(e==null?void 0:e.path)||"",v=r.useRef([]),[Ue,me]=r.useState(0),Y=r.useCallback(e=>{const t=v.current,n=t[t.length-1];n&&n.op.type==="style"&&e.op.type==="style"&&ge(n.op.anchor)===ge(e.op.anchor)?(n.op=e.op,n.record=e.record):t.push(e),me(t.length)},[]),Q=r.useCallback(()=>{var s;const e=v.current;if(e.length===0)return;v.current=[],me(0);let t=null;try{t=(s=k.current)==null?void 0:s.contentDocument}catch{t=null}const n={path:M.current,doc:t,ops:e.map(l=>l.op),records:e.map(l=>l.record),summary:`${e.length} 处布局调整`};de.current=de.current.then(()=>he(n)).catch(()=>{})},[he]),pt=r.useCallback(()=>{var t;const e=v.current.pop();if(e)try{(t=e.revert)==null||t.call(e)}catch{}me(v.current.length)},[]),gt=r.useCallback(()=>{var t,n;const e=v.current;v.current=[];for(let s=e.length-1;s>=0;s--)try{(n=(t=e[s]).revert)==null||n.call(t)}catch{}me(0)},[]),_e=r.useCallback((e,t,n)=>{var m;let s=null;try{s=(m=k.current)==null?void 0:m.contentDocument}catch{s=null}if(!s)return;const l=K.current&&K.current.path===M.current?K.current:{path:M.current,ops:[],records:[]};l.doc=s,l.summary=e;const u=l.ops[l.ops.length-1];u&&u.type==="style"&&t.type==="style"&&ge(u.anchor)===ge(t.anchor)?(l.ops[l.ops.length-1]=t,l.records[l.records.length-1]=n):(l.ops.push(t),l.records.push(n)),K.current=l,V.current&&clearTimeout(V.current),V.current=setTimeout(pe,600)},[pe]),b=r.useCallback(()=>{Q(),pe()},[Q,pe]);r.useEffect(()=>()=>b(),[b]),r.useEffect(()=>{b()},[ze,b]),r.useEffect(()=>{o!=="drag"&&Q()},[o,Q]);const ee=r.useCallback((e,t)=>{var n;(n=F.current)==null||n.call(F,{path:M.current,html:null,summary:e,records:[{...t,reactMount:!0}],persist:!1})},[]),N=e=>{if(!(e!=null&&e.tagName))return"元素";const t=e.tagName.toLowerCase(),n=typeof e.className=="string"&&e.className.trim()?`.${e.className.trim().split(/\s+/)[0]}`:"";return`<${t}${n}>`},mt=r.useCallback((e,t)=>{var l,u,m,L,q,re,W;if(!e)return;if(e.reactMount){ee("移动元素(React 区)",{kind:t.duplicate?"pending-duplicate":"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext});return}if(t.duplicate){const ne=(l=t.sourceEl)==null?void 0:l.cloneNode(!0);if(!ne||!t.targetContainer)return;try{ne.removeAttribute("data-anchor")}catch{}t.beforeEl&&t.beforeEl.parentNode===t.targetContainer?t.targetContainer.insertBefore(ne,t.beforeEl):t.targetContainer.appendChild(ne),Y({op:{type:"duplicate",anchor:e.sourceAnchor,container:(u=e.move)==null?void 0:u.container,before:(m=e.move)==null?void 0:m.before},record:{kind:"applied-duplicate",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:()=>{try{ne.remove()}catch{}},label:`复制 ${N(t.sourceEl)} 到 ${N(t.targetContainer)}`});return}let n;try{n=(L=k.current)==null?void 0:L.contentDocument}catch{n=null}const s=_t({iframeDoc:n,sourceEl:t.sourceEl,targetContainer:t.targetContainer,beforeEl:t.beforeEl});s.applied==="dom"?Y({op:{type:"move",anchor:e.sourceAnchor,container:(q=e.move)==null?void 0:q.container,before:(re=e.move)==null?void 0:re.before},record:{kind:"applied-move",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:s.revert,label:((W=e.move)==null?void 0:W.intent)==="child-of"?`${N(t.sourceEl)} 移入 ${N(t.targetContainer)} 内部`:`${N(t.sourceEl)} 移到 ${N(t.targetContainer)} 里的新位置`}):ee("移动元素(React 区)",{kind:"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext})},[Y,ee]),xt=r.useCallback((e,t)=>{var l,u;if(!e)return;const n=Ht({sourceEl:t.sourceEl,parentEl:t.parentEl,styleDelta:e.styleDelta,runtimeLocks:e.runtimeLocks,parentNeedsRelative:e.parentNeedsRelative}),s={anchor:e.sourceAnchor,styleDelta:e.styleDelta,aiContext:{...e.aiContext,parentAnchor:e.parentAnchor,parentNeedsRelative:e.parentNeedsRelative}};n.applied==="dom"?Y({op:{type:"style",anchor:e.sourceAnchor,styles:{...e.styleDelta,...e.runtimeLocks||{}},parentNeedsRelative:e.parentNeedsRelative},record:{kind:"applied-style",applied:!0,...s},revert:n.revert,label:`${N(t.sourceEl)} 改坐标 (${((l=e.styleDelta)==null?void 0:l.left)??"?"}, ${((u=e.styleDelta)==null?void 0:u.top)??"?"})`}):ee("调整位置(React 区)",{kind:"pending-style",...s})},[Y,ee]),R=dr(i,f),bt=r.useCallback(e=>{var l;if(!e||typeof e.newText!="string")return;let t;try{t=(l=k.current)==null?void 0:l.contentDocument}catch{t=null}const n=t!=null&&t.body?we(e.anchor,t.body):null,s=R.hasOrch;_e(`改字「${e.newText.trim().slice(0,12)}」`,{type:"text",anchor:e.anchor,newText:e.newText},{kind:"edit",anchor:s?Ze(e.anchor):e.anchor,diff:{oldText:s?`〔文${(e.oldText||"").length}字〕`:e.oldText,newText:e.newText},aiContext:n?Xe(n,{redactText:s}):null})},[_e,R.hasOrch]),yt=r.useCallback(async(e,t)=>{const n=t&&t.trim();if(!n)return;const s=ue;await(w==null?void 0:w({anchor:R.hasOrch?Ze(e):e,aiContext:s&&s.isConnected?Xe(s,{redactText:R.hasOrch}):null,path:M.current,text:n}))},[ue,w,R.hasOrch]);r.useEffect(()=>{$&&o==="drag"&&(b(),oe("preview"))},[$,o,b]),r.useEffect(()=>{var e;if(o==="drag")try{const t=(e=k.current)==null?void 0:e.contentDocument,n=t==null?void 0:t.defaultView;if(!(t!=null&&t.body)||!n){Ee(!1);return}let s=0;const l=t.body.querySelectorAll("*"),u=Math.min(l.length,800);for(let m=0;m<u;m++){const L=n.getComputedStyle(l[m]).position;(L==="absolute"||L==="fixed")&&s++}Ee(s>=6)}catch{Ee(!1)}},[o,O]),r.useEffect(()=>{if(o!=="edit"&&o!=="drag")return;const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{t=null}if(!(t!=null&&t.body))return;const n=s=>{var l,u;(u=(l=s.target)==null?void 0:l.closest)!=null&&u.call(l,"a[href]")&&s.preventDefault()};return t.addEventListener("click",n,!0),()=>{try{t.removeEventListener("click",n,!0)}catch{}}},[o,O]),r.useEffect(()=>{if(o!=="edit")return;const e=k.current;if(e)return Gt(e,{onTextEdit:t=>bt(t),onSelect:({anchor:t})=>G(t?{anchor:t}:null)}),()=>{try{Kt(e)}catch{}G(null)}},[o,O]);const vt=r.useCallback(e=>{w==null||w({...e,path:M.current})},[w]);r.useEffect(()=>{const e=Me.current;if(!e)return;const t=()=>{const s=e.getBoundingClientRect();at(l=>l.width===s.width&&l.height===s.height?l:{width:s.width,height:s.height})};t();let n=null;try{n=new ResizeObserver(t),n.observe(e)}catch{}return window.addEventListener("resize",t),()=>{n==null||n.disconnect(),window.removeEventListener("resize",t)}},[o]);const y=Z.width>0?Math.min(1,(Z.width-32)/Te.w):1;r.useEffect(()=>{if(o!=="code")return;let e=!1;return fetch(ae.artifactFileUrl(i,C)).then(t=>t.text()).then(t=>{e||Ae(t)}).catch(()=>{e||Ae("<!-- 读不到源码 -->")}),()=>{e=!0}},[o,i,C,je,Ne]);const xe=r.useCallback(e=>{b(),Ce(t=>[...t,x]),ke(e)},[x,b]),te=r.useCallback(()=>{b(),Ce(e=>e.length===0?e:(ke(e[e.length-1]),e.slice(0,-1)))},[b]),He=r.useRef(X),Ge=r.useRef(te),Ke=r.useRef(j),Ve=r.useRef(P);r.useEffect(()=>{He.current=X,Ge.current=te,Ke.current=j,Ve.current=P},[X,te,j,P]),r.useEffect(()=>{const e=t=>{if(t.key!=="Escape")return;const n=t.target;if(!(n&&(n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable))&&!Ve.current){if(t.stopPropagation(),Ke.current){G(null);return}He.current.length>0?Ge.current():J==null||J()}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[J]);const wt=r.useCallback(()=>{const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{return}if(!t)return;A==null||A(e),lt(t),ct(s=>s+1);const n=x.includes("/")?x.slice(0,x.lastIndexOf("/")+1):"";for(const s of t.querySelectorAll("a[href]")){const l=s.getAttribute("href")||"";/^(?:[a-z][a-z0-9+\-.]*:|\/\/|#)/i.test(l)||s.addEventListener("click",u=>{if(fe.current==="edit"||fe.current==="drag")return;const m=l.split("#")[0].split("?")[0];if(!m)return;const L=(n+m).split("/"),q=[];for(const W of L)W==="."||W===""||(W===".."?q.pop():q.push(W));const re=q.join("/");/\.html?$/i.test(re)&&(u.preventDefault(),xe(re))})}},[x,xe,A]),$e=r.useMemo(()=>g.length?g:[d],[g,d]),St={monitor:Ye,tablet:cr,smartphone:lr},kt=e=>{G(null),Re(!1),oe(e)},Ct=r.useMemo(()=>[{id:"mode",type:"mode",value:o,onChange:kt,items:[{id:"preview",icon:tr,label:"预览",title:"照常浏览,站内链接可点"},Le&&{id:"edit",icon:Ft,label:"编辑",title:"双击文字直接改 · 单击元素弹评论卡"},We&&{id:"drag",icon:Nt,label:"拖拽",disabled:$,title:$?"agent 正在工作,拖拽暂不可用":"拖动元素调布局"},S&&{id:"region",icon:rr,label:"圈选",title:"框一块地方说事 —— 框住谁、当时长什么样、你想说什么,一起交给 agent"},{id:"code",icon:zt,label:"源码",title:"看这一页的 HTML"}].filter(Boolean)},$e.length>1&&{id:"pages",type:"mode",value:x,onChange:e=>{e!==x&&xe(e)},items:$e.map(e=>({id:e,label:e.replace(/\.html?$/i,""),title:e}))},o!=="code"&&{id:"viewport",type:"mode",value:Se,onChange:rt,items:be.map(e=>({id:e.id,icon:St[e.icon]||Ye,title:`${e.label} · 按 ${e.w}px 真实宽度渲染`}))},Lt({kind:"site",exports:ie,onExport:p}),{id:"publish",node:c.jsx(fr,{projectId:i,task:a,root:f||"."})},{id:"actions",items:[R.item,X.length>0&&{id:"back",icon:nr,title:"站内后退",onClick:te},{id:"reload",icon:sr,title:"刷新",onClick:()=>{b(),st(e=>e+1)}},{id:"open",icon:et,title:"在新标签页打开这一页",onClick:()=>window.open(ae.artifactFileUrl(i,C),"_blank","noopener")}].filter(Boolean)}].filter(Boolean),[o,Le,We,$,$e,x,Se,X.length,te,xe,b,i,C,S,a,ie,p,R.item]),z=k;return c.jsx(Wt,{kind:"site",title:h||a,subtitle:x,onClose:J,escToClose:!1,groups:Ct,onToolbarGroups:H,banner:c.jsx(ir,{tab:o,collageWarn:ut,built:U}),children:c.jsxs("div",{"data-site-window":a,style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",position:"relative"},children:[R.overlay,o!=="code"?c.jsxs("div",{ref:Me,style:{flex:1,minHeight:0,overflow:"auto",position:"relative",display:"flex",justifyContent:"center",background:"#f4f2ee",padding:T.md},children:[c.jsx("div",{style:{width:Te.w*y,height:Math.max(0,Z.height-T.md*2),flexShrink:0},children:c.jsx(Bt,{src:ze,title:`site-${a}-${x}`,frameRef:k,onActive:wt,style:{width:Te.w,height:y>0?Math.max(0,(Z.height-T.md*2)/y):"100%",border:0,background:B.bgWhite,boxShadow:o==="edit"?`0 0 0 2px ${B.btn}, 0 2px 18px rgba(0,0,0,0.08)`:o==="drag"?"0 0 0 2px #3a7afe, 0 2px 18px rgba(0,0,0,0.08)":"0 2px 18px rgba(0,0,0,0.08)",display:"block",transform:y<1?`scale(${y})`:"none",transformOrigin:"top left"}})}),o==="edit"&&j&&c.jsx(Vt,{selectedAnchor:j.anchor,iframeRef:z,zoom:y},`ring-${O}`),c.jsx(qt,{comments:Be,iframeRef:z,zoom:y,onSelectAnchor:e=>{fe.current!=="edit"&&oe("edit"),G({anchor:e})}},`markers-${O}`),o==="edit"&&j&&Pe&&c.jsx(It,{selectedAnchor:j.anchor,redactText:R.hasOrch,iframeDoc:Pe,iframeRef:z,iframeRect:Z,zoom:y,comments:Be,onClose:()=>G(null),onAddComment:vt,onResolveComment:_,onDeleteComment:le}),c.jsx(Jt,{active:o==="drag"&&!P,iframeRef:z,zoom:y,pickDragSource:Xt,isDragging:P},`grab-${O}`),c.jsx(Zt,{active:o==="drag",iframeRef:z,zoom:y,freeMode:it,onFreeModeChange:ot,onDraggingChange:ft,onSelectionChange:e=>{dt(e),e&&Re(!0)},onCommitMove:mt,onCommitFreePosition:xt},`drag-${O}`),c.jsx(Yt,{active:o==="drag"&&ht&&!P&&!!ue,iframeRef:z,zoom:y,sourceEl:ue,hasPendingEditId:!0,onSubmit:yt,onDismiss:()=>Re(!1)}),c.jsx(Qt,{active:o==="region"&&!!S,iframeRef:z,zoom:y,onSubmit:e=>S==null?void 0:S({...e,path:C}),onExit:()=>oe("preview")},`region-${O}`),o==="drag"&&Ue>0&&!P&&c.jsxs("div",{style:{position:"absolute",bottom:16,left:"50%",transform:"translateX(-50%)",display:"flex",alignItems:"center",gap:T.sm,padding:`7px ${T.md}px`,borderRadius:se.pill,background:B.text,color:B.bgWhite,fontFamily:ve,fontSize:ye.sm,boxShadow:"0 8px 24px rgba(0,0,0,0.3)",zIndex:60},children:[c.jsxs("span",{style:{opacity:.85},children:[Ue," 处调整未保存",(qe=v.current[v.current.length-1])!=null&&qe.label?` · ${v.current[v.current.length-1].label}`:""]}),c.jsx("button",{onClick:Q,style:{padding:`3px ${T.lg}px`,borderRadius:se.pill,border:"none",cursor:"pointer",background:B.bgWhite,color:B.text,fontSize:ye.xs,boxShadow:Ut.far,fontFamily:ve,fontWeight:600},children:"保存"}),c.jsx("button",{onClick:pt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"1px solid rgba(255,255,255,0.4)",background:"transparent",color:B.bgWhite,fontSize:ye.xs,fontFamily:ve},children:"撤销一步"}),c.jsx("button",{onClick:gt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"none",background:"transparent",color:"rgba(255,255,255,0.65)",fontSize:ye.xs,fontFamily:ve},children:"全部放弃"})]})]}):c.jsx("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:c.jsx(er,{value:nt,readOnly:!0,onChange:()=>{}})})]})})}export{xr as default};
@@ -0,0 +1 @@
1
+ @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.47"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}@font-face{font-family:LXGW WenKai ND;src:url(/assets/lxgw-nd-regular-CpMw9Ehg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:LXGW WenKai ND;src:url(/assets/lxgw-nd-bold-DbRfiTgo.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Long Cang ND;src:url(/assets/longcang-regular-C0uvTuKa.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Caveat ND;src:url(/assets/caveat-nd-CP6HlsNg.woff2) format("woff2");font-weight:400 700;font-style:normal;font-display:swap}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;background:#f9f8f6;color:#3a2a18;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer;border:none;background:transparent;padding:0}a{color:inherit;text-decoration:none}.nd-composer textarea{caret-color:#a8362b}.nd-composer:focus-within{box-shadow:-2px 3px 4px #5d4a2c2e,-6px 13px 26px #5d4a2c38!important}::selection{background:#a8362b33}iframe{border:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#0000001f;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#0003}.nd-shimmer{background:linear-gradient(90deg,#4a4540,#4a4540 40%,#d97706,#4a4540 60%,#4a4540);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:nd-shimmer-sweep 2.4s linear infinite}@keyframes nd-shimmer-sweep{0%{background-position:200% 0}to{background-position:-200% 0}}.katex-display{margin:8px 0;overflow-x:auto;overflow-y:hidden;padding:2px 0}.katex-error{color:#b0554f;font-family:SF Mono,Cascadia Code,Menlo,monospace;font-size:11px}[data-board-pane]{user-select:none;-webkit-user-select:none}[data-board-pane] input,[data-board-pane] textarea,[data-board-pane] [contenteditable=true]{user-select:text;-webkit-user-select:text}