@qijenchen/design-system 0.1.0-beta.146 → 0.1.0-beta.147

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 (257) hide show
  1. package/dist/components/Accordion/accordion.d.ts.map +1 -1
  2. package/dist/components/Accordion/accordion.js +4 -1
  3. package/dist/components/Accordion/accordion.js.map +1 -1
  4. package/dist/components/AccountMenu/account-menu.d.ts.map +1 -1
  5. package/dist/components/AccountMenu/account-menu.js.map +1 -1
  6. package/dist/components/AgentPanel/agent-panel-fab.d.ts +7 -1
  7. package/dist/components/AgentPanel/agent-panel-fab.d.ts.map +1 -1
  8. package/dist/components/AgentPanel/agent-panel-fab.js +13 -9
  9. package/dist/components/AgentPanel/agent-panel-fab.js.map +1 -1
  10. package/dist/components/AgentPanel/agent-panel-logo.d.ts +3 -3
  11. package/dist/components/AgentPanel/agent-panel-logo.js.map +1 -1
  12. package/dist/components/AgentPanel/agent-panel.d.ts.map +1 -1
  13. package/dist/components/AgentPanel/agent-panel.js +6 -1
  14. package/dist/components/AgentPanel/agent-panel.js.map +1 -1
  15. package/dist/components/Breadcrumb/breadcrumb.d.ts +3 -1
  16. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  17. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  18. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  19. package/dist/components/BulkActionBar/bulk-action-bar.js +27 -2
  20. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  21. package/dist/components/Button/button.d.ts.map +1 -1
  22. package/dist/components/Button/button.js +56 -9
  23. package/dist/components/Button/button.js.map +1 -1
  24. package/dist/components/Calendar/calendar.d.ts +8 -3
  25. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  26. package/dist/components/Calendar/calendar.js +22 -8
  27. package/dist/components/Calendar/calendar.js.map +1 -1
  28. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  29. package/dist/components/Carousel/carousel.js +2 -0
  30. package/dist/components/Carousel/carousel.js.map +1 -1
  31. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  32. package/dist/components/Combobox/combobox.js +10 -4
  33. package/dist/components/Combobox/combobox.js.map +1 -1
  34. package/dist/components/Command/command.d.ts.map +1 -1
  35. package/dist/components/Command/command.js +9 -5
  36. package/dist/components/Command/command.js.map +1 -1
  37. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  38. package/dist/components/DataTable/cell-registry.js +2 -1
  39. package/dist/components/DataTable/cell-registry.js.map +1 -1
  40. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -1
  41. package/dist/components/DataTable/data-table-column-visibility-panel.js +24 -24
  42. package/dist/components/DataTable/data-table-column-visibility-panel.js.map +1 -1
  43. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -1
  44. package/dist/components/DataTable/data-table-sort-manager.js +20 -20
  45. package/dist/components/DataTable/data-table-sort-manager.js.map +1 -1
  46. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  47. package/dist/components/DataTable/data-table.js +104 -40
  48. package/dist/components/DataTable/data-table.js.map +1 -1
  49. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  50. package/dist/components/Dialog/dialog.js +55 -43
  51. package/dist/components/Dialog/dialog.js.map +1 -1
  52. package/dist/components/Field/field-context.d.ts +4 -0
  53. package/dist/components/Field/field-context.d.ts.map +1 -1
  54. package/dist/components/Field/field-context.js +1 -2
  55. package/dist/components/Field/field-context.js.map +1 -1
  56. package/dist/components/Field/field-edit-keys.d.ts +8 -0
  57. package/dist/components/Field/field-edit-keys.d.ts.map +1 -1
  58. package/dist/components/Field/field-edit-keys.js +3 -0
  59. package/dist/components/Field/field-edit-keys.js.map +1 -1
  60. package/dist/components/Field/field.d.ts.map +1 -1
  61. package/dist/components/Field/field.js +1 -0
  62. package/dist/components/Field/field.js.map +1 -1
  63. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  64. package/dist/components/FileViewer/file-viewer.js +5 -2
  65. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  66. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  67. package/dist/components/LinkInput/link-input.js +1 -0
  68. package/dist/components/LinkInput/link-input.js.map +1 -1
  69. package/dist/components/Notice/notice.js +1 -1
  70. package/dist/components/Notice/notice.js.map +1 -1
  71. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  72. package/dist/components/NumberInput/number-input.js +1 -0
  73. package/dist/components/NumberInput/number-input.js.map +1 -1
  74. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  75. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  76. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -1
  77. package/dist/components/ProfileCard/profile-card.js.map +1 -1
  78. package/dist/components/Rating/rating.d.ts.map +1 -1
  79. package/dist/components/Rating/rating.js +6 -3
  80. package/dist/components/Rating/rating.js.map +1 -1
  81. package/dist/components/Select/select.d.ts.map +1 -1
  82. package/dist/components/Select/select.js +13 -7
  83. package/dist/components/Select/select.js.map +1 -1
  84. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -1
  85. package/dist/components/SelectionControl/selection-item.js +1 -0
  86. package/dist/components/SelectionControl/selection-item.js.map +1 -1
  87. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  88. package/dist/components/Sidebar/sidebar.js +6 -1
  89. package/dist/components/Sidebar/sidebar.js.map +1 -1
  90. package/dist/components/Steps/steps.d.ts.map +1 -1
  91. package/dist/components/Steps/steps.js +13 -3
  92. package/dist/components/Steps/steps.js.map +1 -1
  93. package/dist/components/Tag/tag.d.ts.map +1 -1
  94. package/dist/components/Tag/tag.js +2 -1
  95. package/dist/components/Tag/tag.js.map +1 -1
  96. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  97. package/dist/components/Textarea/textarea.js +4 -0
  98. package/dist/components/Textarea/textarea.js.map +1 -1
  99. package/dist/components/TimePicker/time-columns.d.ts.map +1 -1
  100. package/dist/components/TimePicker/time-columns.js +3 -3
  101. package/dist/components/TimePicker/time-columns.js.map +1 -1
  102. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  103. package/dist/components/TreeView/tree-view.js +54 -10
  104. package/dist/components/TreeView/tree-view.js.map +1 -1
  105. package/dist/hooks/use-overflow-items.d.ts.map +1 -1
  106. package/dist/hooks/use-overflow-items.js +2 -0
  107. package/dist/hooks/use-overflow-items.js.map +1 -1
  108. package/dist/hooks/use-truncated.d.ts.map +1 -1
  109. package/dist/hooks/use-truncated.js.map +1 -1
  110. package/dist/index.js +3 -1
  111. package/dist/lib/drag-announcements.d.ts +32 -0
  112. package/dist/lib/drag-announcements.d.ts.map +1 -1
  113. package/dist/lib/drag-announcements.js +39 -1
  114. package/dist/lib/drag-announcements.js.map +1 -1
  115. package/dist/lib/overlay-coexistence.js +1 -1
  116. package/dist/lib/roving-list-keyboard.d.ts +15 -0
  117. package/dist/lib/roving-list-keyboard.d.ts.map +1 -1
  118. package/dist/lib/roving-list-keyboard.js +6 -0
  119. package/dist/lib/roving-list-keyboard.js.map +1 -1
  120. package/dist/lib/utils.js +1 -1
  121. package/dist/lib/utils.js.map +1 -1
  122. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -1
  123. package/dist/patterns/horizontal-overflow/horizontal-overflow.js +25 -0
  124. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -1
  125. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -1
  126. package/ds-canonical/fork/codex/agents/skills/performance-audit/SKILL.md +1 -1
  127. package/ds-canonical/fork/consumer/lock.json +11 -11
  128. package/ds-canonical/fork/consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob +47 -9
  129. package/ds-canonical/fork/consumer/managed-files/5af0a46760af338d51fd0f7950675f8e97f7d2f09386b8818fcd7a58e6654e75.blob +71 -1
  130. package/ds-canonical/fork/consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob +45 -6
  131. package/ds-canonical/fork/consumer/managed-files/ab072e7f2eca51f0e18a5e18c4b333260ee5d219a12cc6df5bb2d683f0b2734d.blob +27 -1
  132. package/ds-canonical/fork/governance.lock +9 -9
  133. package/ds-canonical/fork/manifest.json +10 -10
  134. package/ds-canonical/fork/providers/claude/skills/performance-audit/SKILL.md +1 -1
  135. package/ds-canonical/fork/providers/codex/skills/performance-audit/SKILL.md +1 -1
  136. package/ds-canonical/fork/skills/performance-audit/SKILL.md +1 -1
  137. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +29 -8
  138. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +16 -6
  139. package/ds-canonical/references/focus-canonical.md +1 -1
  140. package/ds-canonical/references/governance-audit-coverage.md +1 -1
  141. package/ds-canonical/references/hit-area-canonical.md +4 -2
  142. package/ds-canonical/references/keyboard-model-canonical.md +4 -4
  143. package/ds-canonical/rules/meta-patterns.md +1 -1
  144. package/ds-canonical/rules/self-verify.md +4 -4
  145. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +27 -0
  146. package/ds-canonical/skills/performance-audit/SKILL.md +1 -1
  147. package/ds-story-manifest.json +11 -5
  148. package/llms-full.txt +2 -2
  149. package/llms.txt +2 -2
  150. package/package.json +3 -1
  151. package/src/components/Accordion/accordion.tsx +4 -1
  152. package/src/components/AccountMenu/account-menu.spec.md +1 -2
  153. package/src/components/AccountMenu/account-menu.tsx +0 -1
  154. package/src/components/AgentPanel/agent-decision-card.spec.md +88 -0
  155. package/src/components/AgentPanel/agent-panel-fab.spec.md +151 -0
  156. package/src/components/AgentPanel/agent-panel-fab.tsx +41 -17
  157. package/src/components/AgentPanel/agent-panel-logo.spec.md +87 -0
  158. package/src/components/AgentPanel/agent-panel-logo.tsx +3 -3
  159. package/src/components/AgentPanel/agent-panel.principles.stories.tsx +1 -1
  160. package/src/components/AgentPanel/agent-panel.spec.md +24 -284
  161. package/src/components/AgentPanel/agent-panel.stories.tsx +112 -7
  162. package/src/components/AgentPanel/agent-panel.tsx +9 -4
  163. package/src/components/Breadcrumb/breadcrumb.tsx +3 -1
  164. package/src/components/BulkActionBar/bulk-action-bar.spec.md +1 -0
  165. package/src/components/BulkActionBar/bulk-action-bar.stories.tsx +53 -0
  166. package/src/components/BulkActionBar/bulk-action-bar.tsx +32 -2
  167. package/src/components/Button/button.anatomy.stories.tsx +60 -31
  168. package/src/components/Button/button.spec.md +6 -4
  169. package/src/components/Button/button.tsx +52 -8
  170. package/src/components/Calendar/calendar.anatomy.stories.tsx +10 -7
  171. package/src/components/Calendar/calendar.principles.stories.tsx +8 -3
  172. package/src/components/Calendar/calendar.spec.md +12 -10
  173. package/src/components/Calendar/calendar.stories.tsx +76 -0
  174. package/src/components/Calendar/calendar.tsx +39 -14
  175. package/src/components/Carousel/carousel.spec.md +1 -1
  176. package/src/components/Carousel/carousel.tsx +5 -0
  177. package/src/components/Chip/chip.spec.md +1 -0
  178. package/src/components/Combobox/combobox.anatomy.stories.tsx +2 -1
  179. package/src/components/Combobox/combobox.tsx +19 -5
  180. package/src/components/Command/command.tsx +9 -5
  181. package/src/components/DataTable/cell-registry.tsx +3 -0
  182. package/src/components/DataTable/data-table-column-visibility-panel.tsx +5 -6
  183. package/src/components/DataTable/data-table-known-defects.spec.md +72 -0
  184. package/src/components/DataTable/data-table-scroll-performance.spec.md +295 -0
  185. package/src/components/DataTable/data-table-sort-manager.tsx +5 -6
  186. package/src/components/DataTable/data-table.spec.md +9 -341
  187. package/src/components/DataTable/data-table.stories.tsx +1 -1
  188. package/src/components/DataTable/data-table.tsx +152 -51
  189. package/src/components/DatePicker/date-picker.spec.md +1 -1
  190. package/src/components/Dialog/dialog.spec.md +5 -1
  191. package/src/components/Dialog/dialog.stories.tsx +9 -4
  192. package/src/components/Dialog/dialog.tsx +80 -47
  193. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +7 -0
  194. package/src/components/Empty/empty.spec.md +1 -2
  195. package/src/components/Field/field-context.ts +5 -2
  196. package/src/components/Field/field-controls.spec.md +3 -0
  197. package/src/components/Field/field-edit-keys.ts +12 -0
  198. package/src/components/Field/field.spec.md +1 -1
  199. package/src/components/Field/field.tsx +3 -0
  200. package/src/components/FileViewer/file-viewer.tsx +5 -2
  201. package/src/components/LinkInput/link-input.tsx +3 -0
  202. package/src/components/Notice/notice.tsx +1 -1
  203. package/src/components/NumberInput/number-input.tsx +3 -0
  204. package/src/components/Pagination/pagination.spec.md +1 -0
  205. package/src/components/PeoplePicker/people-picker.tsx +0 -3
  206. package/src/components/Popover/popover.spec.md +2 -0
  207. package/src/components/ProfileCard/profile-card.tsx +0 -3
  208. package/src/components/Rating/rating.anatomy.stories.tsx +1 -1
  209. package/src/components/Rating/rating.spec.md +3 -3
  210. package/src/components/Rating/rating.tsx +7 -3
  211. package/src/components/ScrollArea/scroll-area.spec.md +2 -0
  212. package/src/components/Select/select.spec.md +1 -1
  213. package/src/components/Select/select.tsx +11 -4
  214. package/src/components/SelectMenu/select-menu.spec.md +4 -0
  215. package/src/components/SelectionControl/selection-item.tsx +3 -1
  216. package/src/components/Sidebar/sidebar.spec.md +3 -2
  217. package/src/components/Sidebar/sidebar.stories.tsx +79 -0
  218. package/src/components/Sidebar/sidebar.tsx +10 -2
  219. package/src/components/Skeleton/skeleton.spec.md +1 -1
  220. package/src/components/Slider/slider.spec.md +1 -0
  221. package/src/components/Steps/steps-state-visuals.spec.md +157 -0
  222. package/src/components/Steps/steps.spec.md +13 -144
  223. package/src/components/Steps/steps.tsx +29 -5
  224. package/src/components/Tag/tag.spec.md +9 -10
  225. package/src/components/Tag/tag.tsx +2 -2
  226. package/src/components/Textarea/textarea.tsx +4 -0
  227. package/src/components/TimePicker/time-columns.tsx +4 -3
  228. package/src/components/TimePicker/time-picker.spec.md +1 -1
  229. package/src/components/Tooltip/tooltip.spec.md +1 -0
  230. package/src/components/TreeView/tree-view.spec.md +4 -1
  231. package/src/components/TreeView/tree-view.stories.tsx +87 -3
  232. package/src/components/TreeView/tree-view.tsx +88 -12
  233. package/src/hooks/use-overflow-items.ts +4 -0
  234. package/src/hooks/use-truncated.ts +3 -2
  235. package/src/lib/drag-announcements.ts +78 -0
  236. package/src/lib/roving-list-keyboard.ts +20 -0
  237. package/src/lib/utils.ts +1 -1
  238. package/src/patterns/action-bar/action-bar.spec.md +2 -0
  239. package/src/patterns/element-anatomy/inline-action.spec.md +2 -2
  240. package/src/patterns/element-anatomy/item-anatomy.spec.md +5 -3
  241. package/src/patterns/element-anatomy/truncated-text.spec.md +1 -0
  242. package/src/patterns/header-canonical/header-canonical.spec.md +2 -1
  243. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +2 -0
  244. package/src/patterns/horizontal-overflow/horizontal-overflow.stories.tsx +36 -0
  245. package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +28 -0
  246. package/src/patterns/overlay-surface/overlay-chrome-sizing.spec.md +180 -0
  247. package/src/patterns/overlay-surface/overlay-surface.spec.md +5 -160
  248. package/src/patterns/overlay-surface/overlay-surface.tsx +1 -1
  249. package/src/patterns/resize-handle/resize-handle.spec.md +2 -2
  250. package/src/tokens/color/color.spec.md +14 -6
  251. package/src/tokens/color/semantic.css +13 -0
  252. package/src/tokens/layoutSpace/layoutSpace.spec.md +2 -0
  253. package/src/tokens/motion/motion.spec.md +5 -0
  254. package/src/tokens/orphan-tokens.spec.md +1 -1
  255. package/src/tokens/uiSize/uiSize.spec.md +1 -1
  256. package/dist/node_modules/aria-hidden/dist/es2015/index.js +0 -147
  257. package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-panel-logo.js","sources":["../../../src/components/AgentPanel/agent-panel-logo.tsx"],"sourcesContent":["/**\n * AgentLogo — 智慧代理標誌與狀態動畫(AgentPanel 家族附屬資產)。\n *\n * ── 消費的 SSOT ──\n * - 造型:user 提供之黃金比例莫比烏斯 SVG 定稿(內橢圓長短軸比 φ=1.618、軸角 121.717°;\n * agent-panel.spec.md「AgentLogo」節)。漸層停駐色=**自家色階逐階取值**(primitives.css light\n * 段 blue-2..7 / indigo-5 / purple-3..8;品牌色不隨主題,color.spec.md「品牌」段);每個常數行尾\n * `// = --color-xxx-N` 是 scripts/agent-logo-brand-scale-invariant.mjs 的機械綁定,禁刪\n * (2026-09-02 user:「所有顏色都要根據我們的設計語言調整」→ 由自訂 oklch 改為自家色階)。\n * - 狀態動畫:agent-panel.spec.md「AgentLogo」節(靜止/招喚/思考;一息 3s 家族;\n * 2026-09-02 拍板:待機一律靜止,併入 still,無獨立呼吸態)。呼吸包絡=吸 35% / 呼至 85% /\n * 85–100% 靜止空拍(靜息 I:E ≈ 1:2 + 呼氣末停頓;spec「AgentLogo」節引用來源)。\n * - 思考態轉速:靜止 → 0.25s 加速(=半圈,exit 曲線,位移 126° = ω·T·(1−x1),交接速度連續)→ 720°/s\n * 等速(0.5s/圈 = 一息/6;數值住所是 SPIN_TURNS_PER_BREATH,不是註解宣稱)持續到離開思考 → 減速段用\n * exit 曲線的時間鏡像 (0,0,0.7,1),位移取最小 ≥252° 且落回正位 0°(mod 360)的角度,\n * 時長 = Δ/(ω·0.7) ∈ [0.50, 1.21]s,停定後才淡入下一狀態。\n * - 轉心/波源/縮放中心一律用 LOGO_CX/LOGO_CY(外輪廓圓心),**不是** viewBox 中心 627,627。\n * - 緩動:--motion-easing-swell / --motion-easing-settle / --motion-easing-exit\n * (tokens/motion/motion.css)。SMIL keySplines 不能吃 CSS var,以下常數為 token 值的逐字鏡像,\n * 改 token 必同步此處。\n * - 狀態切換:新狀態 0.15s 淡入(--motion-duration-overlay;agent-panel.css `.agent-logo-enter`)。\n * - 減動作:互動觸發必可停(WCAG 2.3.3);常駐 loop 全停 → 一律回靜止\n * (agent-panel.spec.md「轉場與減動作」)。\n */\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport './agent-panel.css'\n\n/** 一息秒數 —— 家族節拍的唯一數值住所(`BREATH_DUR` 與思考轉速都由它推出)。 */\nconst BREATH_S = 3\n/**\n * 一息 3 秒(標誌狀態動畫家族共用節拍;文字微光 2s 另計 — spec「動畫總表」)。\n * @internal AgentPanel 家族內部共用(SMIL 實作常數,不進 npm front door)。\n */\nexport const BREATH_DUR = `${BREATH_S}s`\n/**\n * = var(--motion-easing-swell) 的 SMIL 鏡像(吸氣 / 所有「起」)。\n * @internal\n */\nexport const SWELL = '0.4 0.14 0.3 1'\n/**\n * = var(--motion-easing-settle) 的 SMIL 鏡像(呼氣 / 所有「收」)。\n * @internal\n */\nexport const SETTLE = '0.2 0 0.38 0.9'\n/** = var(--motion-easing-exit) 的 SMIL 鏡像(加速起步)。 */\nconst EXIT = '0.3 0 1 1'\n/** 減速 = exit 曲線的時間鏡像(起始斜率 1/0.7,速度連續);Material/Carbon 減速原則。 */\nconst DECEL = '0 0 0.7 1'\n/**\n * 思考態等速轉速。**數值住所只有這個「一息切幾圈」**,ω 由它推出 —— 舊版把 480 寫死、把「= 一息/4」\n * 只寫在註解裡,程式碼零綁定:改一息轉速不動、改轉速註解就過期(2026-09-04 改為真綁定)。\n *\n * 取 6 圈(0.5s/圈 = 720°/s)的依據全是第一手出貨值(單層等速旋轉,逐檔讀原始碼;URL 見\n * spec「AgentLogo」節):出貨最快是 Chakra v2 的 0.45s,往下 Carbon 690ms、Bootstrap .75s、\n * Radix Themes 800ms、Primer / Chakra v3 1s、Ant 1.2s、Fluent / VS Code 1.5s、Material 3 ≈1.568s\n * (`$linear-rotate-duration = $arc-duration × 360 / 306`;1.333s 是弧長形變的 `$arc-duration`,不是轉速)。\n * 0.5s 落在「最快檔 0.45–0.69s」之內,不是自創的更快值;唯一更快的出貨值 0.45s 只多 11% 速度,\n * 卻讓一息 = N 圈斷掉(3 / 0.45 = 6.67),不取。\n *\n * 閃爍:造型無 C2 對稱(洞心繞轉軸轉 180° 不落回自身)→ 整圈才重複一次 = 2.0 Hz,低於 WCAG 2.3.1\n * 的 3 次/秒;且 24px 全圖僅 576 px²,遠低於其面積門檻 341×256 = 87,296 px²。\n * 加速段 = 半圈時間(ω·T = 180 恆成立),位移 = ω·T·(1−x1) = 126° 不隨轉速漂。\n */\nconst SPIN_TURNS_PER_BREATH = 6\nconst SPIN_PERIOD_S = BREATH_S / SPIN_TURNS_PER_BREATH\nconst SPIN_OMEGA = 360 / SPIN_PERIOD_S\nconst SPIN_ACCEL_S = SPIN_PERIOD_S / 2\n// 收到 1e-6:`ω·T·0.7` 在 IEEE754 下是 125.99999999999999,直接進 SVG 屬性會變成一長串小數\n// (`values=\"0;125.99999999999999\"`),對畫面無感但讓 DOM 快照與人眼檢查都變難讀。\nconst SPIN_MID = Math.round(SPIN_OMEGA * SPIN_ACCEL_S * 0.7 * 1e6) / 1e6\n/** 減速最小位移 = ω·P·0.7 = 252°(ω·P ≡ 360,故不隨轉速漂);實際取最小 ≥252 且落回 0°(mod 360)的角度。 */\nconst SPIN_DECEL_MIN = 360 * 0.7\nconst FRAME_S = 1 / 60\n/** 靜止空拍(值不變,曲線無意義,填線性)。 */\nconst HOLD = '0 0 1 1'\n/**\n * 呼吸包絡:0 靜 → 35% 吸頂 → 85% 回落到底 → 100% 靜止空拍(本體 / 疊層 / 洞形變共用)。\n * @internal\n */\nexport const BREATH_KEYTIMES = '0;.35;.85;1'\n/**\n * 呼吸包絡對應的 keySplines。\n * @internal\n */\nexport const BREATH_SPLINES = `${SWELL};${SETTLE};${HOLD}`\n/**\n * 呼出去的波:0–35% 貼邊聚亮(吸)→ 35–90% 離體擴散(呼,比本體多 0.15s 餘韻)→ 90–100% 靜。\n * @internal\n */\nexport const RIPPLE_KEYTIMES = '0;.35;.9;1'\n/**\n * 招喚波對應的 keySplines。\n * @internal\n */\nexport const RIPPLE_SPLINES = `${SWELL};${SETTLE};${HOLD}`\n\n/**\n * 品牌資產代表色(兩緞帶家族;FAB 環與光圈消費同一組 → repo 內唯一數值來源)。\n * 全部取自 primitives.css light 色階(品牌色不隨主題);行尾綁定供 invariant 腳本比對,禁刪。\n * @internal AgentPanel 家族內部共用。\n */\nexport const AGENT_BRAND = {\n blue: 'oklch(0.72 0.17 258)', // = --color-blue-4\n purple: 'oklch(0.71 0.15 294)', // = --color-purple-4\n} as const\n\n/* ── 幾何(user 定稿 SVG 逐字;viewBox 0 0 1254 1254) ── */\n/**\n * 造型的外輪廓圓心 —— **不是 viewBox 中心(627,627)**。\n *\n * 墨色區 = 圓盤(r=505.300)減去內橢圓;圓盤圓心由外弧端點反解(SVG 1.1 §F.6.5)得\n * (634.671, 604.106),與 viewBox 中心差 **24.145 單位 = 外半徑的 4.78%**。三重確認:端點反解 /\n * 展平後聯集 bbox [129.4,98.8,1140.0,1109.4](寬高皆 1010.6 = 2R,中心 634.7,604.1)/\n * 旗標排除法(只有此解讓紫弧掃 168.84° ≤ 180°,符合 large-arc-flag=0)。\n *\n * **所有旋轉 / 縮放 / 波源都必須用它**,繞 viewBox 中心會出兩個看得見的瑕疵:\n * (a) 思考態外緣每圈在 9.209↔10.133px 之間進出 —— 24px 下峰對峰 **0.924px** 的偏心晃動,\n * 讀起來像動畫沒對正,不是轉速;(b) 招喚態遮罩(r=512)本想留 6.7 單位的等寬餘量,偏心後\n * 一側超出本體 17.4、對側多切 30.8,光暈起點與本體邊緣之間出現不對稱死環。\n * 轉心選項比較(2026-09-04 覆算):外輪廓圓心對現況是 Pareto 支配 —— 外緣晃動 24.145 → **0**,\n * 洞的公轉半徑 65.051 → 43.487(仍是主要運動載體);移到洞心則外緣晃動暴增到 43.487,更糟。\n */\nconst LOGO_CX = 634.671\nconst LOGO_CY = 604.106\n/** `LOGO_CX LOGO_CY` 的 SVG 座標對字串(rotate / translate 的中心參數)。 */\nconst LOGO_CENTER = `${LOGO_CX} ${LOGO_CY}`\nconst D_PURPLE =\n 'M 635.006,98.806 A 505.300,505.300 0 0 1 732.146,1099.915 C 566.063,1098.281 425.041,927.384 417.637,778.287 A 349.828,216.206 121.717474 1 0 885.536,308.027 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\nconst D_BLUE =\n 'M 635.006,98.806 A 505.300,505.300 0 1 0 732.146,1099.915 C 566.063,1098.281 425.041,927.384 417.637,778.287 A 349.828,216.206 121.717474 0 1 885.536,308.027 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\n/** 負空間呼吸(思考態):洞由橢圓變正圓的形變終點(弧端點重參數化,指令結構與原路徑同構)。 */\nconst D_PURPLE_ROUND =\n 'M 635.006,98.806 A 505.300,505.300 0 0 1 732.146,1099.915 C 566.063,1098.281 425.041,927.384 419.706,711.508 A 283.017,283.017 121.717474 1 0 862.379,370.696 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\nconst D_BLUE_ROUND =\n 'M 635.006,98.806 A 505.300,505.300 0 1 0 732.146,1099.915 C 566.063,1098.281 425.041,927.384 419.706,711.508 A 283.017,283.017 121.717474 0 1 862.379,370.696 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\n\ntype Stop = readonly [number, string, number?]\n/* 完整版(>24):五停駐雙緞帶 + 底面陰影 + 提亮(原稿逐層保留)。\n * 藍 blue-3→7、紫 purple-3→7:明度各跨 .37(原稿 .38)、彩度峰值在第 4 停駐(base-6);\n * 色相固定 258 / 294(自家色階 h 恆定,兩緞帶相距 36°);尾端停在 -7 而非 -8:dark\n * `--surface-raised`(L≈.24)上 blue-8(L .33)會糊進底面,-7(L .44)ΔL .20 仍可辨。 */\nconst BLUE_SURFACE: readonly Stop[] = [\n [0, 'oklch(0.81 0.10 258)'], // = --color-blue-3\n [0.28, 'oklch(0.72 0.17 258)'], // = --color-blue-4\n [0.58, 'oklch(0.63 0.20 258)'], // = --color-blue-5\n [0.82, 'oklch(0.54 0.22 258)'], // = --color-blue-6\n [1, 'oklch(0.44 0.20 258)'], // = --color-blue-7\n]\nconst PURPLE_SURFACE: readonly Stop[] = [\n [0, 'oklch(0.80 0.09 294)'], // = --color-purple-3\n [0.3, 'oklch(0.71 0.15 294)'], // = --color-purple-4\n [0.58, 'oklch(0.62 0.18 294)'], // = --color-purple-5\n [0.82, 'oklch(0.52 0.20 294)'], // = --color-purple-6\n [1, 'oklch(0.43 0.19 294)'], // = --color-purple-7\n]\nconst PURPLE_UNDERSIDE: readonly Stop[] = [\n [0, 'oklch(0.32 0.16 294)', 0.82], // = --color-purple-8\n [0.34, 'oklch(0.32 0.16 294)', 0.47], // = --color-purple-8\n [0.74, 'oklch(0.32 0.16 294)', 0], // = --color-purple-8\n]\nconst BLUE_LIFT: readonly Stop[] = [\n [0, 'oklch(0.89 0.05 258)', 0.3], // = --color-blue-2\n [0.48, 'oklch(0.89 0.05 258)', 0.1], // = --color-blue-2\n [1, 'oklch(0.89 0.05 258)', 0], // = --color-blue-2\n]\n/* 招喚漣漪:雙色放射盤(內藍→靛過渡→紫→邊緣透明;中段取 indigo,自家藍紫之間唯一色相)。 */\nconst WAVE_STOPS: readonly Stop[] = [\n [0, 'oklch(0.63 0.20 258)', 0.5], // = --color-blue-5\n [0.55, 'oklch(0.62 0.23 265)', 0.44], // = --color-indigo-5\n [0.8, 'oklch(0.62 0.18 294)', 0.34], // = --color-purple-5\n [1, 'oklch(0.62 0.18 294)', 0], // = --color-purple-5\n]\n\n/** 狀態:still 靜止(=待機)/ attract 招喚 / think 思考(=回覆中)。 */\nexport type AgentLogoState = 'still' | 'attract' | 'think'\n\nexport interface AgentLogoProps extends React.SVGAttributes<SVGSVGElement> {\n /** 動態狀態;預設 still(靜止)。 */\n state?: AgentLogoState\n /** 邊長 px;預設 24。所有尺寸同一造型(2026-09-02 user 拍板:形狀規則,不設簡化檔)。 */\n size?: number\n /**\n * 招喚態漣漪;預設 true。AgentFab 置 false(按鈕內放不下漣漪,由邊框光圈代位 —\n * spec「FAB」節),本體蓄勢(脹 1.07+吸氣微亮)不變。\n */\n ripple?: boolean\n /** 無障礙名稱;裝飾用途可省略(將標 aria-hidden)。 */\n label?: string\n}\n\n/**\n * 常駐 loop 遵 prefers-reduced-motion 全停(嚴於 WCAG 2.3.3 條文)。\n * @internal AgentPanel 家族內部共用(AgentFab 光圈同一策略)。\n */\nexport function usePrefersReducedMotion() {\n const [reduced, setReduced] = React.useState(false)\n React.useEffect(() => {\n const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n setReduced(query.matches)\n const onChange = (event: MediaQueryListEvent) => setReduced(event.matches)\n query.addEventListener('change', onChange)\n return () => query.removeEventListener('change', onChange)\n }, [])\n return reduced\n}\n\n/**\n * SMIL `begin=\"0s\"` 以文件時間軸為基準:狀態切換時才掛上的動畫會被視為早已開始\n * (加速段直接凍在終點、呼吸從半途起跑)。改 `begin=\"indefinite\"` + 掛載當下 beginElement():\n * 每次進入狀態都從靜止起跑第一口氣;同一 commit 內掛上的多個動畫(標誌本體 / FAB 光圈)\n * 拿到同一個文件時間 → 同相。\n * @internal AgentPanel 家族內部共用。\n */\nexport function useBeginAnimationsOnMount(ref: React.RefObject<SVGSVGElement | null>, key: string) {\n React.useLayoutEffect(() => {\n const root = ref.current\n if (!root) return\n // 只起跑「還沒起跑過」的動畫元素:狀態切換(think → think-exit)時同一顆呼吸疊層若被重新 beginElement,\n // 亮度會從當下值跳回 0 = 斷層(2026-09-02 user 抓「圓回橢圓時有斷層」根因之一);新掛的元素(keyed)照常起跑。\n root.querySelectorAll<SVGAnimateElement>('[data-begin-on-mount]').forEach((el) => {\n if (el.dataset.begun === '1') return\n if (typeof el.beginElement === 'function') {\n el.beginElement()\n el.dataset.begun = '1'\n }\n })\n }, [ref, key])\n}\n\nfunction GradientStops({ stops }: { stops: readonly Stop[] }) {\n return (\n <>\n {stops.map(([offset, color, opacity]) => (\n <stop\n key={offset}\n offset={offset}\n stopColor={color}\n {...(opacity !== undefined ? { stopOpacity: opacity } : {})}\n />\n ))}\n </>\n )\n}\n\n/**\n * 兩段旋轉:啟動加速 = 半圈時間(exit 曲線,位移 126° 使交接速度 = 等速 連續)→ 等速 SPIN_PERIOD_S/圈\n * (= 一息 / SPIN_TURNS_PER_BREATH,linear=轉圈慣例)。加速段 begin=indefinite 由掛載觸發;等速段以 syncbase\n * `<id>.end` 銜接,保證每次進入都從 0° 起步。離開思考另有減速段(見 AgentLogo think-exit)。\n */\nfunction SpinPair({\n id,\n attributeName,\n from,\n mid,\n end,\n}: {\n id: string\n attributeName: 'transform' | 'gradientTransform'\n from: string\n mid: string\n end: string\n}) {\n return (\n <>\n <animateTransform\n id={id}\n attributeName={attributeName}\n type=\"rotate\"\n values={`${from};${mid}`}\n dur={`${SPIN_ACCEL_S}s`}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={EXIT}\n />\n <animateTransform\n attributeName={attributeName}\n type=\"rotate\"\n values={`${mid};${end}`}\n dur={`${SPIN_PERIOD_S}s`}\n begin={`${id}.end`}\n repeatCount=\"indefinite\"\n />\n </>\n )\n}\n\n/** 離開思考:從離開瞬間的角度續轉 Δ 到停(exit 鏡像曲線),fill=freeze;掛載後由 AgentLogo 觸發 beginElement。 */\nfunction SpinDecel({\n attributeName,\n from,\n to,\n dur,\n center,\n}: {\n attributeName: 'transform' | 'gradientTransform'\n from: number\n to: number\n dur: number\n center?: string\n}) {\n const suffix = center ? ` ${center}` : ''\n return (\n <animateTransform\n attributeName={attributeName}\n type=\"rotate\"\n from={`${from}${suffix}`}\n to={`${to}${suffix}`}\n dur={`${dur}s`}\n begin=\"indefinite\"\n data-begin-on-exit=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={DECEL}\n />\n )\n}\n\n/** 思考態:色場定錨於畫布 — 漸層以本體旋轉的同構逆轉實現「幾何流過色場」。 */\nfunction GradientCounterSpin({ id }: { id: string }) {\n return (\n <SpinPair id={id} attributeName=\"gradientTransform\" from={`0 ${LOGO_CENTER}`} mid={`-${SPIN_MID} ${LOGO_CENTER}`} end={`-${SPIN_MID + 360} ${LOGO_CENTER}`} />\n )\n}\n\n/**\n * 負空間形變與轉速耦合(2026-09-02 由「6s 呼吸圓化」改為速度耦合:形狀說速度、亮度說呼吸):\n * spinup = 起步加速段 橢圓 → 正圓(同 exit 曲線、同 SPIN_ACCEL_S,轉到最快時洞正好圓);\n * spindown = 減速段 正圓 → 橢圓(同 DECEL 曲線、同減速時長,停定 0° 時洞正好回定稿形)。\n * 等速期間 fill=freeze 持圓;每次進入狀態由 beginElement 起跑(useBeginAnimationsOnMount)。\n */\n/**\n * 負空間形變的段落規格(內部實作型別:只被同檔 HoleMorph / LogoBody / InhaleOverlay 消費)。\n * @internal\n */\nexport interface HoleMorphSpec {\n phase: 'spinup' | 'spindown'\n /** 秒數字串(spinup 固定 SPIN_ACCEL_S;spindown = 減速段時長)。 */\n dur: string\n}\n\nfunction HoleMorph({ rest, round, spec }: { rest: string; round: string; spec: HoleMorphSpec }) {\n const up = spec.phase === 'spinup'\n return (\n <animate\n key={spec.phase}\n attributeName=\"d\"\n from={up ? rest : round}\n to={up ? round : rest}\n dur={spec.dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={up ? EXIT : DECEL}\n />\n )\n}\n\ninterface BodyProps {\n ids: Record<'blue' | 'purple' | 'under' | 'lift', string>\n morph?: HoleMorphSpec\n}\n\n/** 本體雙緞帶 4 層(面 + 底面陰影 + 面 + 提亮),所有尺寸同一造型;morph 有值時掛負空間形變(耦合轉速)。 */\nfunction LogoBody({ ids, morph }: BodyProps) {\n const purpleMorph = morph ? <HoleMorph rest={D_PURPLE} round={D_PURPLE_ROUND} spec={morph} /> : null\n const blueMorph = morph ? <HoleMorph rest={D_BLUE} round={D_BLUE_ROUND} spec={morph} /> : null\n // 基底 d = 該段起點形:spindown 段基底必為正圓,否則新掛的 animate 起跑前那一影格會先畫定稿橢圓再跳回正圓\n // (一影格斷層;2026-09-02 user 抓「圓回橢圓不連貫」根因之二)。\n const dPurple = morph?.phase === 'spindown' ? D_PURPLE_ROUND : D_PURPLE\n const dBlue = morph?.phase === 'spindown' ? D_BLUE_ROUND : D_BLUE\n return (\n <>\n <path d={dPurple} fill={`url(#${ids.purple})`}>{purpleMorph}</path>\n <path d={dPurple} fill={`url(#${ids.under})`}>{purpleMorph}</path>\n <path d={dBlue} fill={`url(#${ids.blue})`}>{blueMorph}</path>\n <path d={dBlue} fill={`url(#${ids.lift})`}>{blueMorph}</path>\n </>\n )\n}\n\n/**\n * 吸氣微亮:白色疊層 0→14%→0(吸氣亮、呼氣暗;Apple Watch Breathe「脹=吸氣」同向)。\n * 招喚與思考同一套語言、同一條呼吸包絡(思考態的亮度自成 2 息一輪;圓化已改為耦合轉速)。亮度包絡取代透明度包絡:\n * 本體不透明度恆 1(白面上變淡=像停用;spec「禁止事項」)。\n */\nfunction InhaleOverlay({ morph, dur }: { morph?: HoleMorphSpec; dur: string }) {\n const purpleMorph = morph ? <HoleMorph rest={D_PURPLE} round={D_PURPLE_ROUND} spec={morph} /> : null\n const blueMorph = morph ? <HoleMorph rest={D_BLUE} round={D_BLUE_ROUND} spec={morph} /> : null\n // 減速段外包一層 1→0 的淡出(乘上呼吸包絡):不論呼吸走到哪一拍,停定那一刻亮度必回到基準\n // (有始有終;呼吸元素本身不重啟、不跳)。\n const rampOut = morph?.phase === 'spindown' ? (\n <animate\n key=\"ramp\"\n attributeName=\"opacity\"\n from=\"1\"\n to=\"0\"\n dur={morph.dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={DECEL}\n />\n ) : null\n return (\n <g opacity=\"1\" pointerEvents=\"none\">\n {rampOut}\n <g opacity=\"0\" pointerEvents=\"none\">\n <animate\n attributeName=\"opacity\"\n values=\"0;.14;0;0\"\n keyTimes={BREATH_KEYTIMES}\n dur={dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={BREATH_SPLINES}\n />\n <path d={morph?.phase === 'spindown' ? D_BLUE_ROUND : D_BLUE} fill=\"#fff\">{blueMorph}</path>\n <path d={morph?.phase === 'spindown' ? D_PURPLE_ROUND : D_PURPLE} fill=\"#fff\">{purpleMorph}</path>\n </g>\n </g>\n )\n}\n\nconst AgentLogo = React.forwardRef<SVGSVGElement, AgentLogoProps>(\n (\n {\n state = 'still',\n size = 24,\n ripple = true,\n label,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const uid = React.useId().replace(/[^a-zA-Z0-9]/g, '')\n const reduced = usePrefersReducedMotion()\n /** 減動作:常駐 loop 全停,一律回靜止。 */\n const effectiveState: AgentLogoState = reduced ? 'still' : state\n const innerRef = React.useRef<SVGSVGElement | null>(null)\n React.useImperativeHandle(ref, () => innerRef.current as SVGSVGElement)\n /**\n * 畫面狀態(visual)由 layout effect 驅動,而非直接吃 prop:離開思考時先讀活動畫的角度,\n * 掛減速段轉到停(落回 0°),endEvent 後才切到新狀態淡入 —— 使用者看不到中間 render。\n */\n const [visual, setVisual] = React.useState<AgentLogoState | 'think-exit'>(effectiveState)\n const [exit, setExit] = React.useState<{ angle: number; delta: number; dur: number } | null>(null)\n const latestState = React.useRef(effectiveState)\n latestState.current = effectiveState\n const spinRef = React.useRef<SVGGElement | null>(null)\n /** 進入思考的牆鐘時間:判斷「加速段是否已完成」用牆鐘,不用 SMIL 時間軸(背景分頁會凍在 0)。 */\n const thinkEnteredAt = React.useRef(0)\n React.useLayoutEffect(() => {\n if (visual === 'think') thinkEnteredAt.current = performance.now()\n }, [visual])\n React.useLayoutEffect(() => {\n if (visual === effectiveState) return\n // 減速進行中:由減速段的 endEvent / timer 收尾(latestState),這裡不得搶先切換。\n if (visual === 'think-exit') return\n const leavingThink = visual === 'think' && effectiveState !== 'think'\n if (!leavingThink || reduced) {\n setExit(null)\n setVisual(effectiveState)\n return\n }\n const svg = innerRef.current\n const g = spinRef.current\n const accel = svg?.querySelector<SVGAnimateElement>('g > animateTransform[fill=\"freeze\"]') ?? null\n const start = (angle: number) => {\n // 最小 ≥252° 且落回 0°(mod 360):停定後與 still 態正位無縫接軌。\n const normalized = ((angle % 360) + 360) % 360\n let delta = (360 - normalized) % 360\n while (delta < SPIN_DECEL_MIN) delta += 360\n setExit({ angle: normalized, delta, dur: delta / (SPIN_OMEGA * 0.7) })\n setVisual('think-exit')\n }\n const elapsed = (performance.now() - thinkEnteredAt.current) / 1000\n if (elapsed < FRAME_S || !svg) {\n // 連一格都沒畫 → 直接切。\n setVisual(effectiveState)\n return\n }\n if (elapsed < SPIN_ACCEL_S && accel) {\n // 加速未完 → 等加速段結束再減速(角度已知 = SPIN_MID,免讀 DOM);endEvent 沒來(分頁凍結)→ 牆鐘補位。\n let started = false\n const onEnd = () => {\n if (started) return\n started = true\n start(SPIN_MID)\n }\n accel.addEventListener('endEvent', onEnd, { once: true })\n const timer = window.setTimeout(onEnd, (SPIN_ACCEL_S - elapsed) * 1000 + 50)\n return () => {\n accel.removeEventListener('endEvent', onEnd)\n window.clearTimeout(timer)\n }\n }\n const m = g?.getCTM() ?? null\n start(m ? (Math.atan2(m.b, m.a) * 180) / Math.PI : 0)\n }, [effectiveState, visual, reduced])\n React.useLayoutEffect(() => {\n if (!exit) return\n const svg = innerRef.current\n if (!svg) return\n const animations = [...svg.querySelectorAll<SVGAnimateElement>('[data-begin-on-exit]')]\n animations.forEach((el) => el.beginElement())\n let done = false\n const finish = () => {\n if (done) return\n done = true\n setExit(null)\n setVisual(latestState.current)\n }\n const primary = animations[0]\n primary?.addEventListener('endEvent', finish, { once: true })\n const timer = window.setTimeout(finish, exit.dur * 1000 + 50)\n return () => {\n primary?.removeEventListener('endEvent', finish)\n window.clearTimeout(timer)\n }\n }, [exit])\n const isExit = visual === 'think-exit'\n /** think→think-exit 不換 key:洞形變 / 疊層節點不重掛、不重新 beginElement。 */\n const visualKey = isExit ? 'think' : visual\n // 起跑鍵含 exit 段:減速時新掛的洞形變(圓→橢圓)與亮度淡出是 begin=indefinite,沒人 beginElement 就永不起跑\n // → 整段減速洞持圓、停定瞬間跳回橢圓(2026-09-03 deploy-preview 逐格實測:7 個 animate 全 unresolved,\n // 就是 user 看到的「圓回橢圓斷層」);已起跑的呼吸疊層由 data-begun 守衛不重啟。\n useBeginAnimationsOnMount(innerRef, `${visualKey}:${ripple}:${isExit ? 'exit' : 'run'}`)\n // 有始有終:still ↔ think 的交接瞬間兩邊長得一模一樣(定稿形、0°、無疊層),直接換、不淡入;\n // 淡入只留給形態真的不同的交接(招喚 ↔ 其他)。2026-09-02 user 抓「最後沒有流暢回到起點」:\n // 減速停定後再淡入 0.15s = 停定那一刻整顆先變透明再回來,就是那個斷層。\n // 只在 key 真的換的那一次決定要不要淡入;同 key 的後續 render(think → think-exit)沿用同一決定,\n // 否則 className 被重新加上會讓 CSS animation 重跑 = 減速起點閃一下。\n const enterRef = React.useRef<{ key: string; seamless: boolean }>({ key: visualKey, seamless: false })\n if (enterRef.current.key !== visualKey) {\n const prev = enterRef.current.key\n enterRef.current = {\n key: visualKey,\n seamless: (prev === 'still' && visualKey === 'think') || (prev === 'think' && visualKey === 'still'),\n }\n }\n const seamless = enterRef.current.seamless\n const ids = {\n blue: `${uid}bs`,\n purple: `${uid}ps`,\n under: `${uid}pu`,\n lift: `${uid}bl`,\n wave: `${uid}wg`,\n mask: `${uid}wm`,\n spinBlue: `${uid}sb`,\n spinPurple: `${uid}sp`,\n spinBody: `${uid}sr`,\n }\n const isThink = visual === 'think' || isExit\n const isAttract = visual === 'attract'\n\n const defs = (\n <defs>\n {/* 減速段基底 gradientTransform 必等於當下角度:SpinPair 卸載、SpinDecel 起跑前那一影格若基底是 0°,\n 色場會先跳回 0° 再接減速 = 色彩斷層(2026-09-03 user 抓「色彩沒有流暢回復」根因)。 */}\n <linearGradient\n id={ids.blue}\n gradientUnits=\"userSpaceOnUse\"\n x1=\"390\"\n y1=\"1055\"\n x2=\"770\"\n y2=\"110\"\n gradientTransform={isExit && exit ? `rotate(${-exit.angle} ${LOGO_CENTER})` : undefined}\n >\n <GradientStops stops={BLUE_SURFACE} />\n {isThink && !isExit && <GradientCounterSpin id={ids.spinBlue} />}\n {isExit && exit && (\n <SpinDecel attributeName=\"gradientTransform\" from={-exit.angle} to={-(exit.angle + exit.delta)} dur={exit.dur} center={LOGO_CENTER} />\n )}\n </linearGradient>\n <linearGradient\n id={ids.purple}\n gradientUnits=\"userSpaceOnUse\"\n x1=\"990\"\n y1=\"145\"\n x2=\"650\"\n y2=\"1090\"\n gradientTransform={isExit && exit ? `rotate(${-exit.angle} ${LOGO_CENTER})` : undefined}\n >\n <GradientStops stops={PURPLE_SURFACE} />\n {isThink && !isExit && <GradientCounterSpin id={ids.spinPurple} />}\n {isExit && exit && (\n <SpinDecel attributeName=\"gradientTransform\" from={-exit.angle} to={-(exit.angle + exit.delta)} dur={exit.dur} center={LOGO_CENTER} />\n )}\n </linearGradient>\n <radialGradient\n id={ids.under}\n gradientUnits=\"userSpaceOnUse\"\n cx=\"490\"\n cy=\"815\"\n r=\"520\"\n >\n <GradientStops stops={PURPLE_UNDERSIDE} />\n </radialGradient>\n <radialGradient\n id={ids.lift}\n gradientUnits=\"userSpaceOnUse\"\n cx=\"350\"\n cy=\"930\"\n r=\"510\"\n >\n <GradientStops stops={BLUE_LIFT} />\n </radialGradient>\n {isAttract && ripple && (\n <>\n <radialGradient id={ids.wave}>\n <GradientStops stops={WAVE_STOPS} />\n </radialGradient>\n <mask id={ids.mask} maskUnits=\"userSpaceOnUse\" x=\"-600\" y=\"-600\" width=\"2454\" height=\"2454\">\n <rect x=\"-600\" y=\"-600\" width=\"2454\" height=\"2454\" fill=\"#fff\" />\n <circle cx={LOGO_CX} cy={LOGO_CY} r=\"512\" fill=\"#000\" />\n </mask>\n </>\n )}\n </defs>\n )\n\n // 洞形變耦合轉速:思考起步 spinup(= SPIN_ACCEL_S)、離開思考 spindown(= 減速時長);靜止/招喚不掛。\n const holeMorph: HoleMorphSpec | undefined = isThink\n ? isExit && exit\n ? { phase: 'spindown', dur: `${exit.dur}s` }\n : { phase: 'spinup', dur: `${SPIN_ACCEL_S}s` }\n : undefined\n const body = <LogoBody ids={ids} morph={holeMorph} />\n\n let content: React.ReactNode\n if (isThink) {\n // 平移座標系內旋轉不得帶圓心(帶了=轉心位移兩倍遠)。結束無減速檔:SMIL loop 無終點,\n // 由狀態切換的 0.15s 淡入承接(spec「AgentLogo」節)。\n content = (\n <g transform={`translate(${LOGO_CENTER})`}>\n <g ref={spinRef} transform={isExit && exit ? `rotate(${exit.angle})` : undefined}>\n {isExit && exit ? (\n <SpinDecel key=\"decel\" attributeName=\"transform\" from={exit.angle} to={exit.angle + exit.delta} dur={exit.dur} />\n ) : (\n <SpinPair key=\"spin\" id={ids.spinBody} attributeName=\"transform\" from=\"0\" mid={String(SPIN_MID)} end={String(SPIN_MID + 360)} />\n )}\n <g transform={`translate(${-LOGO_CX} ${-LOGO_CY})`}>\n {body}\n <InhaleOverlay morph={holeMorph} dur={`${BREATH_S * 2}s`} />\n </g>\n </g>\n </g>\n )\n } else if (isAttract) {\n // 招喚:蓄勢(本體脹 1.07 + 吸氣微亮,波貼邊聚亮)→ 35% 呼氣起點波離體 → 85% 本體到底\n // → 90% 餘暈散盡 → 靜止空拍。\n content = (\n <>\n {ripple && (\n <g mask={`url(#${ids.mask})`}>\n <circle cx={LOGO_CX} cy={LOGO_CY} r=\"560\" fill={`url(#${ids.wave})`} opacity=\"0\">\n <animate\n attributeName=\"r\"\n values=\"560;560;830;830\"\n keyTimes={RIPPLE_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={`${HOLD};${SETTLE};${HOLD}`}\n />\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0;0\"\n keyTimes={RIPPLE_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={RIPPLE_SPLINES}\n />\n </circle>\n </g>\n )}\n <g transform={`translate(${LOGO_CENTER})`}>\n <g>\n <animateTransform\n attributeName=\"transform\"\n type=\"scale\"\n values=\"1;1.07;1;1\"\n keyTimes={BREATH_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={BREATH_SPLINES}\n />\n <g transform={`translate(${-LOGO_CX} ${-LOGO_CY})`}>\n {body}\n <InhaleOverlay dur={BREATH_DUR} />\n </g>\n </g>\n </g>\n </>\n )\n } else {\n content = body\n }\n\n return (\n <svg\n ref={innerRef}\n width={size}\n height={size}\n viewBox=\"0 0 1254 1254\"\n className={cn('shrink-0', className)}\n // 招喚波以透明度收尾,溢出視窗屬設計(波暈散出標誌框外)。\n style={{ overflow: isAttract && ripple ? 'visible' : undefined, ...style }}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n data-state={visualKey}\n data-phase={isExit ? 'exit' : undefined}\n {...props}\n >\n {defs}\n {/* 狀態切換:key 重建 + 0.15s 淡入(僅 opacity,不碰 transform 屬性),禁跳切;think→exit 同 key 不重掛。 */}\n <g key={visualKey} className={seamless ? undefined : 'agent-logo-enter'}>\n {content}\n </g>\n </svg>\n )\n },\n)\nAgentLogo.displayName = 'AgentLogo'\n\nexport { AgentLogo }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-panel-logo.js","sources":["../../../src/components/AgentPanel/agent-panel-logo.tsx"],"sourcesContent":["/**\n * AgentLogo — 智慧代理標誌與狀態動畫(AgentPanel 家族附屬資產)。\n *\n * ── 消費的 SSOT ──\n * - 造型:user 提供之黃金比例莫比烏斯 SVG 定稿(內橢圓長短軸比 φ=1.618、軸角 121.717°;\n * agent-panel-logo.spec.md「AgentLogo」節)。漸層停駐色=**自家色階逐階取值**(primitives.css light\n * 段 blue-2..7 / indigo-5 / purple-3..8;品牌色不隨主題,color.spec.md「品牌」段);每個常數行尾\n * `// = --color-xxx-N` 是 scripts/agent-logo-brand-scale-invariant.mjs 的機械綁定,禁刪\n * (2026-09-02 user:「所有顏色都要根據我們的設計語言調整」→ 由自訂 oklch 改為自家色階)。\n * - 狀態動畫:agent-panel-logo.spec.md「AgentLogo」節(靜止/招喚/思考;一息 3s 家族;\n * 2026-09-02 拍板:待機一律靜止,併入 still,無獨立呼吸態)。呼吸包絡=吸 35% / 呼至 85% /\n * 85–100% 靜止空拍(靜息 I:E ≈ 1:2 + 呼氣末停頓;spec「AgentLogo」節引用來源)。\n * - 思考態轉速:靜止 → 0.25s 加速(=半圈,exit 曲線,位移 126° = ω·T·(1−x1),交接速度連續)→ 720°/s\n * 等速(0.5s/圈 = 一息/6;數值住所是 SPIN_TURNS_PER_BREATH,不是註解宣稱)持續到離開思考 → 減速段用\n * exit 曲線的時間鏡像 (0,0,0.7,1),位移取最小 ≥252° 且落回正位 0°(mod 360)的角度,\n * 時長 = Δ/(ω·0.7) ∈ [0.50, 1.21]s,停定後才淡入下一狀態。\n * - 轉心/波源/縮放中心一律用 LOGO_CX/LOGO_CY(外輪廓圓心),**不是** viewBox 中心 627,627。\n * - 緩動:--motion-easing-swell / --motion-easing-settle / --motion-easing-exit\n * (tokens/motion/motion.css)。SMIL keySplines 不能吃 CSS var,以下常數為 token 值的逐字鏡像,\n * 改 token 必同步此處。\n * - 狀態切換:新狀態 0.15s 淡入(--motion-duration-overlay;agent-panel.css `.agent-logo-enter`)。\n * - 減動作:互動觸發必可停(WCAG 2.3.3);常駐 loop 全停 → 一律回靜止\n * (agent-panel-logo.spec.md「轉場與減動作」)。\n */\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport './agent-panel.css'\n\n/** 一息秒數 —— 家族節拍的唯一數值住所(`BREATH_DUR` 與思考轉速都由它推出)。 */\nconst BREATH_S = 3\n/**\n * 一息 3 秒(標誌狀態動畫家族共用節拍;文字微光 2s 另計 — spec「動畫總表」)。\n * @internal AgentPanel 家族內部共用(SMIL 實作常數,不進 npm front door)。\n */\nexport const BREATH_DUR = `${BREATH_S}s`\n/**\n * = var(--motion-easing-swell) 的 SMIL 鏡像(吸氣 / 所有「起」)。\n * @internal\n */\nexport const SWELL = '0.4 0.14 0.3 1'\n/**\n * = var(--motion-easing-settle) 的 SMIL 鏡像(呼氣 / 所有「收」)。\n * @internal\n */\nexport const SETTLE = '0.2 0 0.38 0.9'\n/** = var(--motion-easing-exit) 的 SMIL 鏡像(加速起步)。 */\nconst EXIT = '0.3 0 1 1'\n/** 減速 = exit 曲線的時間鏡像(起始斜率 1/0.7,速度連續);Material/Carbon 減速原則。 */\nconst DECEL = '0 0 0.7 1'\n/**\n * 思考態等速轉速。**數值住所只有這個「一息切幾圈」**,ω 由它推出 —— 舊版把 480 寫死、把「= 一息/4」\n * 只寫在註解裡,程式碼零綁定:改一息轉速不動、改轉速註解就過期(2026-09-04 改為真綁定)。\n *\n * 取 6 圈(0.5s/圈 = 720°/s)的依據全是第一手出貨值(單層等速旋轉,逐檔讀原始碼;URL 見\n * spec「AgentLogo」節):出貨最快是 Chakra v2 的 0.45s,往下 Carbon 690ms、Bootstrap .75s、\n * Radix Themes 800ms、Primer / Chakra v3 1s、Ant 1.2s、Fluent / VS Code 1.5s、Material 3 ≈1.568s\n * (`$linear-rotate-duration = $arc-duration × 360 / 306`;1.333s 是弧長形變的 `$arc-duration`,不是轉速)。\n * 0.5s 落在「最快檔 0.45–0.69s」之內,不是自創的更快值;唯一更快的出貨值 0.45s 只多 11% 速度,\n * 卻讓一息 = N 圈斷掉(3 / 0.45 = 6.67),不取。\n *\n * 閃爍:造型無 C2 對稱(洞心繞轉軸轉 180° 不落回自身)→ 整圈才重複一次 = 2.0 Hz,低於 WCAG 2.3.1\n * 的 3 次/秒;且 24px 全圖僅 576 px²,遠低於其面積門檻 341×256 = 87,296 px²。\n * 加速段 = 半圈時間(ω·T = 180 恆成立),位移 = ω·T·(1−x1) = 126° 不隨轉速漂。\n */\nconst SPIN_TURNS_PER_BREATH = 6\nconst SPIN_PERIOD_S = BREATH_S / SPIN_TURNS_PER_BREATH\nconst SPIN_OMEGA = 360 / SPIN_PERIOD_S\nconst SPIN_ACCEL_S = SPIN_PERIOD_S / 2\n// 收到 1e-6:`ω·T·0.7` 在 IEEE754 下是 125.99999999999999,直接進 SVG 屬性會變成一長串小數\n// (`values=\"0;125.99999999999999\"`),對畫面無感但讓 DOM 快照與人眼檢查都變難讀。\nconst SPIN_MID = Math.round(SPIN_OMEGA * SPIN_ACCEL_S * 0.7 * 1e6) / 1e6\n/** 減速最小位移 = ω·P·0.7 = 252°(ω·P ≡ 360,故不隨轉速漂);實際取最小 ≥252 且落回 0°(mod 360)的角度。 */\nconst SPIN_DECEL_MIN = 360 * 0.7\nconst FRAME_S = 1 / 60\n/** 靜止空拍(值不變,曲線無意義,填線性)。 */\nconst HOLD = '0 0 1 1'\n/**\n * 呼吸包絡:0 靜 → 35% 吸頂 → 85% 回落到底 → 100% 靜止空拍(本體 / 疊層 / 洞形變共用)。\n * @internal\n */\nexport const BREATH_KEYTIMES = '0;.35;.85;1'\n/**\n * 呼吸包絡對應的 keySplines。\n * @internal\n */\nexport const BREATH_SPLINES = `${SWELL};${SETTLE};${HOLD}`\n/**\n * 呼出去的波:0–35% 貼邊聚亮(吸)→ 35–90% 離體擴散(呼,比本體多 0.15s 餘韻)→ 90–100% 靜。\n * @internal\n */\nexport const RIPPLE_KEYTIMES = '0;.35;.9;1'\n/**\n * 招喚波對應的 keySplines。\n * @internal\n */\nexport const RIPPLE_SPLINES = `${SWELL};${SETTLE};${HOLD}`\n\n/**\n * 品牌資產代表色(兩緞帶家族;FAB 環與光圈消費同一組 → repo 內唯一數值來源)。\n * 全部取自 primitives.css light 色階(品牌色不隨主題);行尾綁定供 invariant 腳本比對,禁刪。\n * @internal AgentPanel 家族內部共用。\n */\nexport const AGENT_BRAND = {\n blue: 'oklch(0.72 0.17 258)', // = --color-blue-4\n purple: 'oklch(0.71 0.15 294)', // = --color-purple-4\n} as const\n\n/* ── 幾何(user 定稿 SVG 逐字;viewBox 0 0 1254 1254) ── */\n/**\n * 造型的外輪廓圓心 —— **不是 viewBox 中心(627,627)**。\n *\n * 墨色區 = 圓盤(r=505.300)減去內橢圓;圓盤圓心由外弧端點反解(SVG 1.1 §F.6.5)得\n * (634.671, 604.106),與 viewBox 中心差 **24.145 單位 = 外半徑的 4.78%**。三重確認:端點反解 /\n * 展平後聯集 bbox [129.4,98.8,1140.0,1109.4](寬高皆 1010.6 = 2R,中心 634.7,604.1)/\n * 旗標排除法(只有此解讓紫弧掃 168.84° ≤ 180°,符合 large-arc-flag=0)。\n *\n * **所有旋轉 / 縮放 / 波源都必須用它**,繞 viewBox 中心會出兩個看得見的瑕疵:\n * (a) 思考態外緣每圈在 9.209↔10.133px 之間進出 —— 24px 下峰對峰 **0.924px** 的偏心晃動,\n * 讀起來像動畫沒對正,不是轉速;(b) 招喚態遮罩(r=512)本想留 6.7 單位的等寬餘量,偏心後\n * 一側超出本體 17.4、對側多切 30.8,光暈起點與本體邊緣之間出現不對稱死環。\n * 轉心選項比較(2026-09-04 覆算):外輪廓圓心對現況是 Pareto 支配 —— 外緣晃動 24.145 → **0**,\n * 洞的公轉半徑 65.051 → 43.487(仍是主要運動載體);移到洞心則外緣晃動暴增到 43.487,更糟。\n */\nconst LOGO_CX = 634.671\nconst LOGO_CY = 604.106\n/** `LOGO_CX LOGO_CY` 的 SVG 座標對字串(rotate / translate 的中心參數)。 */\nconst LOGO_CENTER = `${LOGO_CX} ${LOGO_CY}`\nconst D_PURPLE =\n 'M 635.006,98.806 A 505.300,505.300 0 0 1 732.146,1099.915 C 566.063,1098.281 425.041,927.384 417.637,778.287 A 349.828,216.206 121.717474 1 0 885.536,308.027 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\nconst D_BLUE =\n 'M 635.006,98.806 A 505.300,505.300 0 1 0 732.146,1099.915 C 566.063,1098.281 425.041,927.384 417.637,778.287 A 349.828,216.206 121.717474 0 1 885.536,308.027 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\n/** 負空間呼吸(思考態):洞由橢圓變正圓的形變終點(弧端點重參數化,指令結構與原路徑同構)。 */\nconst D_PURPLE_ROUND =\n 'M 635.006,98.806 A 505.300,505.300 0 0 1 732.146,1099.915 C 566.063,1098.281 425.041,927.384 419.706,711.508 A 283.017,283.017 121.717474 1 0 862.379,370.696 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\nconst D_BLUE_ROUND =\n 'M 635.006,98.806 A 505.300,505.300 0 1 0 732.146,1099.915 C 566.063,1098.281 425.041,927.384 419.706,711.508 A 283.017,283.017 121.717474 0 1 862.379,370.696 C 847.485,198.771 746.887,109.003 635.006,98.806 Z'\n\ntype Stop = readonly [number, string, number?]\n/* 完整版(>24):五停駐雙緞帶 + 底面陰影 + 提亮(原稿逐層保留)。\n * 藍 blue-3→7、紫 purple-3→7:明度各跨 .37(原稿 .38)、彩度峰值在第 4 停駐(base-6);\n * 色相固定 258 / 294(自家色階 h 恆定,兩緞帶相距 36°);尾端停在 -7 而非 -8:dark\n * `--surface-raised`(L≈.24)上 blue-8(L .33)會糊進底面,-7(L .44)ΔL .20 仍可辨。 */\nconst BLUE_SURFACE: readonly Stop[] = [\n [0, 'oklch(0.81 0.10 258)'], // = --color-blue-3\n [0.28, 'oklch(0.72 0.17 258)'], // = --color-blue-4\n [0.58, 'oklch(0.63 0.20 258)'], // = --color-blue-5\n [0.82, 'oklch(0.54 0.22 258)'], // = --color-blue-6\n [1, 'oklch(0.44 0.20 258)'], // = --color-blue-7\n]\nconst PURPLE_SURFACE: readonly Stop[] = [\n [0, 'oklch(0.80 0.09 294)'], // = --color-purple-3\n [0.3, 'oklch(0.71 0.15 294)'], // = --color-purple-4\n [0.58, 'oklch(0.62 0.18 294)'], // = --color-purple-5\n [0.82, 'oklch(0.52 0.20 294)'], // = --color-purple-6\n [1, 'oklch(0.43 0.19 294)'], // = --color-purple-7\n]\nconst PURPLE_UNDERSIDE: readonly Stop[] = [\n [0, 'oklch(0.32 0.16 294)', 0.82], // = --color-purple-8\n [0.34, 'oklch(0.32 0.16 294)', 0.47], // = --color-purple-8\n [0.74, 'oklch(0.32 0.16 294)', 0], // = --color-purple-8\n]\nconst BLUE_LIFT: readonly Stop[] = [\n [0, 'oklch(0.89 0.05 258)', 0.3], // = --color-blue-2\n [0.48, 'oklch(0.89 0.05 258)', 0.1], // = --color-blue-2\n [1, 'oklch(0.89 0.05 258)', 0], // = --color-blue-2\n]\n/* 招喚漣漪:雙色放射盤(內藍→靛過渡→紫→邊緣透明;中段取 indigo,自家藍紫之間唯一色相)。 */\nconst WAVE_STOPS: readonly Stop[] = [\n [0, 'oklch(0.63 0.20 258)', 0.5], // = --color-blue-5\n [0.55, 'oklch(0.62 0.23 265)', 0.44], // = --color-indigo-5\n [0.8, 'oklch(0.62 0.18 294)', 0.34], // = --color-purple-5\n [1, 'oklch(0.62 0.18 294)', 0], // = --color-purple-5\n]\n\n/** 狀態:still 靜止(=待機)/ attract 招喚 / think 思考(=回覆中)。 */\nexport type AgentLogoState = 'still' | 'attract' | 'think'\n\nexport interface AgentLogoProps extends React.SVGAttributes<SVGSVGElement> {\n /** 動態狀態;預設 still(靜止)。 */\n state?: AgentLogoState\n /** 邊長 px;預設 24。所有尺寸同一造型(2026-09-02 user 拍板:形狀規則,不設簡化檔)。 */\n size?: number\n /**\n * 招喚態漣漪;預設 true。AgentFab 置 false(按鈕內放不下漣漪,由邊框光圈代位 —\n * spec「FAB」節),本體蓄勢(脹 1.07+吸氣微亮)不變。\n */\n ripple?: boolean\n /** 無障礙名稱;裝飾用途可省略(將標 aria-hidden)。 */\n label?: string\n}\n\n/**\n * 常駐 loop 遵 prefers-reduced-motion 全停(嚴於 WCAG 2.3.3 條文)。\n * @internal AgentPanel 家族內部共用(AgentFab 光圈同一策略)。\n */\nexport function usePrefersReducedMotion() {\n const [reduced, setReduced] = React.useState(false)\n React.useEffect(() => {\n const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n setReduced(query.matches)\n const onChange = (event: MediaQueryListEvent) => setReduced(event.matches)\n query.addEventListener('change', onChange)\n return () => query.removeEventListener('change', onChange)\n }, [])\n return reduced\n}\n\n/**\n * SMIL `begin=\"0s\"` 以文件時間軸為基準:狀態切換時才掛上的動畫會被視為早已開始\n * (加速段直接凍在終點、呼吸從半途起跑)。改 `begin=\"indefinite\"` + 掛載當下 beginElement():\n * 每次進入狀態都從靜止起跑第一口氣;同一 commit 內掛上的多個動畫(標誌本體 / FAB 光圈)\n * 拿到同一個文件時間 → 同相。\n * @internal AgentPanel 家族內部共用。\n */\nexport function useBeginAnimationsOnMount(ref: React.RefObject<SVGSVGElement | null>, key: string) {\n React.useLayoutEffect(() => {\n const root = ref.current\n if (!root) return\n // 只起跑「還沒起跑過」的動畫元素:狀態切換(think → think-exit)時同一顆呼吸疊層若被重新 beginElement,\n // 亮度會從當下值跳回 0 = 斷層(2026-09-02 user 抓「圓回橢圓時有斷層」根因之一);新掛的元素(keyed)照常起跑。\n root.querySelectorAll<SVGAnimateElement>('[data-begin-on-mount]').forEach((el) => {\n if (el.dataset.begun === '1') return\n if (typeof el.beginElement === 'function') {\n el.beginElement()\n el.dataset.begun = '1'\n }\n })\n }, [ref, key])\n}\n\nfunction GradientStops({ stops }: { stops: readonly Stop[] }) {\n return (\n <>\n {stops.map(([offset, color, opacity]) => (\n <stop\n key={offset}\n offset={offset}\n stopColor={color}\n {...(opacity !== undefined ? { stopOpacity: opacity } : {})}\n />\n ))}\n </>\n )\n}\n\n/**\n * 兩段旋轉:啟動加速 = 半圈時間(exit 曲線,位移 126° 使交接速度 = 等速 連續)→ 等速 SPIN_PERIOD_S/圈\n * (= 一息 / SPIN_TURNS_PER_BREATH,linear=轉圈慣例)。加速段 begin=indefinite 由掛載觸發;等速段以 syncbase\n * `<id>.end` 銜接,保證每次進入都從 0° 起步。離開思考另有減速段(見 AgentLogo think-exit)。\n */\nfunction SpinPair({\n id,\n attributeName,\n from,\n mid,\n end,\n}: {\n id: string\n attributeName: 'transform' | 'gradientTransform'\n from: string\n mid: string\n end: string\n}) {\n return (\n <>\n <animateTransform\n id={id}\n attributeName={attributeName}\n type=\"rotate\"\n values={`${from};${mid}`}\n dur={`${SPIN_ACCEL_S}s`}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={EXIT}\n />\n <animateTransform\n attributeName={attributeName}\n type=\"rotate\"\n values={`${mid};${end}`}\n dur={`${SPIN_PERIOD_S}s`}\n begin={`${id}.end`}\n repeatCount=\"indefinite\"\n />\n </>\n )\n}\n\n/** 離開思考:從離開瞬間的角度續轉 Δ 到停(exit 鏡像曲線),fill=freeze;掛載後由 AgentLogo 觸發 beginElement。 */\nfunction SpinDecel({\n attributeName,\n from,\n to,\n dur,\n center,\n}: {\n attributeName: 'transform' | 'gradientTransform'\n from: number\n to: number\n dur: number\n center?: string\n}) {\n const suffix = center ? ` ${center}` : ''\n return (\n <animateTransform\n attributeName={attributeName}\n type=\"rotate\"\n from={`${from}${suffix}`}\n to={`${to}${suffix}`}\n dur={`${dur}s`}\n begin=\"indefinite\"\n data-begin-on-exit=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={DECEL}\n />\n )\n}\n\n/** 思考態:色場定錨於畫布 — 漸層以本體旋轉的同構逆轉實現「幾何流過色場」。 */\nfunction GradientCounterSpin({ id }: { id: string }) {\n return (\n <SpinPair id={id} attributeName=\"gradientTransform\" from={`0 ${LOGO_CENTER}`} mid={`-${SPIN_MID} ${LOGO_CENTER}`} end={`-${SPIN_MID + 360} ${LOGO_CENTER}`} />\n )\n}\n\n/**\n * 負空間形變與轉速耦合(2026-09-02 由「6s 呼吸圓化」改為速度耦合:形狀說速度、亮度說呼吸):\n * spinup = 起步加速段 橢圓 → 正圓(同 exit 曲線、同 SPIN_ACCEL_S,轉到最快時洞正好圓);\n * spindown = 減速段 正圓 → 橢圓(同 DECEL 曲線、同減速時長,停定 0° 時洞正好回定稿形)。\n * 等速期間 fill=freeze 持圓;每次進入狀態由 beginElement 起跑(useBeginAnimationsOnMount)。\n */\n/**\n * 負空間形變的段落規格(內部實作型別:只被同檔 HoleMorph / LogoBody / InhaleOverlay 消費)。\n * @internal\n */\nexport interface HoleMorphSpec {\n phase: 'spinup' | 'spindown'\n /** 秒數字串(spinup 固定 SPIN_ACCEL_S;spindown = 減速段時長)。 */\n dur: string\n}\n\nfunction HoleMorph({ rest, round, spec }: { rest: string; round: string; spec: HoleMorphSpec }) {\n const up = spec.phase === 'spinup'\n return (\n <animate\n key={spec.phase}\n attributeName=\"d\"\n from={up ? rest : round}\n to={up ? round : rest}\n dur={spec.dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={up ? EXIT : DECEL}\n />\n )\n}\n\ninterface BodyProps {\n ids: Record<'blue' | 'purple' | 'under' | 'lift', string>\n morph?: HoleMorphSpec\n}\n\n/** 本體雙緞帶 4 層(面 + 底面陰影 + 面 + 提亮),所有尺寸同一造型;morph 有值時掛負空間形變(耦合轉速)。 */\nfunction LogoBody({ ids, morph }: BodyProps) {\n const purpleMorph = morph ? <HoleMorph rest={D_PURPLE} round={D_PURPLE_ROUND} spec={morph} /> : null\n const blueMorph = morph ? <HoleMorph rest={D_BLUE} round={D_BLUE_ROUND} spec={morph} /> : null\n // 基底 d = 該段起點形:spindown 段基底必為正圓,否則新掛的 animate 起跑前那一影格會先畫定稿橢圓再跳回正圓\n // (一影格斷層;2026-09-02 user 抓「圓回橢圓不連貫」根因之二)。\n const dPurple = morph?.phase === 'spindown' ? D_PURPLE_ROUND : D_PURPLE\n const dBlue = morph?.phase === 'spindown' ? D_BLUE_ROUND : D_BLUE\n return (\n <>\n <path d={dPurple} fill={`url(#${ids.purple})`}>{purpleMorph}</path>\n <path d={dPurple} fill={`url(#${ids.under})`}>{purpleMorph}</path>\n <path d={dBlue} fill={`url(#${ids.blue})`}>{blueMorph}</path>\n <path d={dBlue} fill={`url(#${ids.lift})`}>{blueMorph}</path>\n </>\n )\n}\n\n/**\n * 吸氣微亮:白色疊層 0→14%→0(吸氣亮、呼氣暗;Apple Watch Breathe「脹=吸氣」同向)。\n * 招喚與思考同一套語言、同一條呼吸包絡(思考態的亮度自成 2 息一輪;圓化已改為耦合轉速)。亮度包絡取代透明度包絡:\n * 本體不透明度恆 1(白面上變淡=像停用;spec「禁止事項」)。\n */\nfunction InhaleOverlay({ morph, dur }: { morph?: HoleMorphSpec; dur: string }) {\n const purpleMorph = morph ? <HoleMorph rest={D_PURPLE} round={D_PURPLE_ROUND} spec={morph} /> : null\n const blueMorph = morph ? <HoleMorph rest={D_BLUE} round={D_BLUE_ROUND} spec={morph} /> : null\n // 減速段外包一層 1→0 的淡出(乘上呼吸包絡):不論呼吸走到哪一拍,停定那一刻亮度必回到基準\n // (有始有終;呼吸元素本身不重啟、不跳)。\n const rampOut = morph?.phase === 'spindown' ? (\n <animate\n key=\"ramp\"\n attributeName=\"opacity\"\n from=\"1\"\n to=\"0\"\n dur={morph.dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n fill=\"freeze\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines={DECEL}\n />\n ) : null\n return (\n <g opacity=\"1\" pointerEvents=\"none\">\n {rampOut}\n <g opacity=\"0\" pointerEvents=\"none\">\n <animate\n attributeName=\"opacity\"\n values=\"0;.14;0;0\"\n keyTimes={BREATH_KEYTIMES}\n dur={dur}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={BREATH_SPLINES}\n />\n <path d={morph?.phase === 'spindown' ? D_BLUE_ROUND : D_BLUE} fill=\"#fff\">{blueMorph}</path>\n <path d={morph?.phase === 'spindown' ? D_PURPLE_ROUND : D_PURPLE} fill=\"#fff\">{purpleMorph}</path>\n </g>\n </g>\n )\n}\n\nconst AgentLogo = React.forwardRef<SVGSVGElement, AgentLogoProps>(\n (\n {\n state = 'still',\n size = 24,\n ripple = true,\n label,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const uid = React.useId().replace(/[^a-zA-Z0-9]/g, '')\n const reduced = usePrefersReducedMotion()\n /** 減動作:常駐 loop 全停,一律回靜止。 */\n const effectiveState: AgentLogoState = reduced ? 'still' : state\n const innerRef = React.useRef<SVGSVGElement | null>(null)\n React.useImperativeHandle(ref, () => innerRef.current as SVGSVGElement)\n /**\n * 畫面狀態(visual)由 layout effect 驅動,而非直接吃 prop:離開思考時先讀活動畫的角度,\n * 掛減速段轉到停(落回 0°),endEvent 後才切到新狀態淡入 —— 使用者看不到中間 render。\n */\n const [visual, setVisual] = React.useState<AgentLogoState | 'think-exit'>(effectiveState)\n const [exit, setExit] = React.useState<{ angle: number; delta: number; dur: number } | null>(null)\n const latestState = React.useRef(effectiveState)\n latestState.current = effectiveState\n const spinRef = React.useRef<SVGGElement | null>(null)\n /** 進入思考的牆鐘時間:判斷「加速段是否已完成」用牆鐘,不用 SMIL 時間軸(背景分頁會凍在 0)。 */\n const thinkEnteredAt = React.useRef(0)\n React.useLayoutEffect(() => {\n if (visual === 'think') thinkEnteredAt.current = performance.now()\n }, [visual])\n React.useLayoutEffect(() => {\n if (visual === effectiveState) return\n // 減速進行中:由減速段的 endEvent / timer 收尾(latestState),這裡不得搶先切換。\n if (visual === 'think-exit') return\n const leavingThink = visual === 'think' && effectiveState !== 'think'\n if (!leavingThink || reduced) {\n setExit(null)\n setVisual(effectiveState)\n return\n }\n const svg = innerRef.current\n const g = spinRef.current\n const accel = svg?.querySelector<SVGAnimateElement>('g > animateTransform[fill=\"freeze\"]') ?? null\n const start = (angle: number) => {\n // 最小 ≥252° 且落回 0°(mod 360):停定後與 still 態正位無縫接軌。\n const normalized = ((angle % 360) + 360) % 360\n let delta = (360 - normalized) % 360\n while (delta < SPIN_DECEL_MIN) delta += 360\n setExit({ angle: normalized, delta, dur: delta / (SPIN_OMEGA * 0.7) })\n setVisual('think-exit')\n }\n const elapsed = (performance.now() - thinkEnteredAt.current) / 1000\n if (elapsed < FRAME_S || !svg) {\n // 連一格都沒畫 → 直接切。\n setVisual(effectiveState)\n return\n }\n if (elapsed < SPIN_ACCEL_S && accel) {\n // 加速未完 → 等加速段結束再減速(角度已知 = SPIN_MID,免讀 DOM);endEvent 沒來(分頁凍結)→ 牆鐘補位。\n let started = false\n const onEnd = () => {\n if (started) return\n started = true\n start(SPIN_MID)\n }\n accel.addEventListener('endEvent', onEnd, { once: true })\n const timer = window.setTimeout(onEnd, (SPIN_ACCEL_S - elapsed) * 1000 + 50)\n return () => {\n accel.removeEventListener('endEvent', onEnd)\n window.clearTimeout(timer)\n }\n }\n const m = g?.getCTM() ?? null\n start(m ? (Math.atan2(m.b, m.a) * 180) / Math.PI : 0)\n }, [effectiveState, visual, reduced])\n React.useLayoutEffect(() => {\n if (!exit) return\n const svg = innerRef.current\n if (!svg) return\n const animations = [...svg.querySelectorAll<SVGAnimateElement>('[data-begin-on-exit]')]\n animations.forEach((el) => el.beginElement())\n let done = false\n const finish = () => {\n if (done) return\n done = true\n setExit(null)\n setVisual(latestState.current)\n }\n const primary = animations[0]\n primary?.addEventListener('endEvent', finish, { once: true })\n const timer = window.setTimeout(finish, exit.dur * 1000 + 50)\n return () => {\n primary?.removeEventListener('endEvent', finish)\n window.clearTimeout(timer)\n }\n }, [exit])\n const isExit = visual === 'think-exit'\n /** think→think-exit 不換 key:洞形變 / 疊層節點不重掛、不重新 beginElement。 */\n const visualKey = isExit ? 'think' : visual\n // 起跑鍵含 exit 段:減速時新掛的洞形變(圓→橢圓)與亮度淡出是 begin=indefinite,沒人 beginElement 就永不起跑\n // → 整段減速洞持圓、停定瞬間跳回橢圓(2026-09-03 deploy-preview 逐格實測:7 個 animate 全 unresolved,\n // 就是 user 看到的「圓回橢圓斷層」);已起跑的呼吸疊層由 data-begun 守衛不重啟。\n useBeginAnimationsOnMount(innerRef, `${visualKey}:${ripple}:${isExit ? 'exit' : 'run'}`)\n // 有始有終:still ↔ think 的交接瞬間兩邊長得一模一樣(定稿形、0°、無疊層),直接換、不淡入;\n // 淡入只留給形態真的不同的交接(招喚 ↔ 其他)。2026-09-02 user 抓「最後沒有流暢回到起點」:\n // 減速停定後再淡入 0.15s = 停定那一刻整顆先變透明再回來,就是那個斷層。\n // 只在 key 真的換的那一次決定要不要淡入;同 key 的後續 render(think → think-exit)沿用同一決定,\n // 否則 className 被重新加上會讓 CSS animation 重跑 = 減速起點閃一下。\n const enterRef = React.useRef<{ key: string; seamless: boolean }>({ key: visualKey, seamless: false })\n if (enterRef.current.key !== visualKey) {\n const prev = enterRef.current.key\n enterRef.current = {\n key: visualKey,\n seamless: (prev === 'still' && visualKey === 'think') || (prev === 'think' && visualKey === 'still'),\n }\n }\n const seamless = enterRef.current.seamless\n const ids = {\n blue: `${uid}bs`,\n purple: `${uid}ps`,\n under: `${uid}pu`,\n lift: `${uid}bl`,\n wave: `${uid}wg`,\n mask: `${uid}wm`,\n spinBlue: `${uid}sb`,\n spinPurple: `${uid}sp`,\n spinBody: `${uid}sr`,\n }\n const isThink = visual === 'think' || isExit\n const isAttract = visual === 'attract'\n\n const defs = (\n <defs>\n {/* 減速段基底 gradientTransform 必等於當下角度:SpinPair 卸載、SpinDecel 起跑前那一影格若基底是 0°,\n 色場會先跳回 0° 再接減速 = 色彩斷層(2026-09-03 user 抓「色彩沒有流暢回復」根因)。 */}\n <linearGradient\n id={ids.blue}\n gradientUnits=\"userSpaceOnUse\"\n x1=\"390\"\n y1=\"1055\"\n x2=\"770\"\n y2=\"110\"\n gradientTransform={isExit && exit ? `rotate(${-exit.angle} ${LOGO_CENTER})` : undefined}\n >\n <GradientStops stops={BLUE_SURFACE} />\n {isThink && !isExit && <GradientCounterSpin id={ids.spinBlue} />}\n {isExit && exit && (\n <SpinDecel attributeName=\"gradientTransform\" from={-exit.angle} to={-(exit.angle + exit.delta)} dur={exit.dur} center={LOGO_CENTER} />\n )}\n </linearGradient>\n <linearGradient\n id={ids.purple}\n gradientUnits=\"userSpaceOnUse\"\n x1=\"990\"\n y1=\"145\"\n x2=\"650\"\n y2=\"1090\"\n gradientTransform={isExit && exit ? `rotate(${-exit.angle} ${LOGO_CENTER})` : undefined}\n >\n <GradientStops stops={PURPLE_SURFACE} />\n {isThink && !isExit && <GradientCounterSpin id={ids.spinPurple} />}\n {isExit && exit && (\n <SpinDecel attributeName=\"gradientTransform\" from={-exit.angle} to={-(exit.angle + exit.delta)} dur={exit.dur} center={LOGO_CENTER} />\n )}\n </linearGradient>\n <radialGradient\n id={ids.under}\n gradientUnits=\"userSpaceOnUse\"\n cx=\"490\"\n cy=\"815\"\n r=\"520\"\n >\n <GradientStops stops={PURPLE_UNDERSIDE} />\n </radialGradient>\n <radialGradient\n id={ids.lift}\n gradientUnits=\"userSpaceOnUse\"\n cx=\"350\"\n cy=\"930\"\n r=\"510\"\n >\n <GradientStops stops={BLUE_LIFT} />\n </radialGradient>\n {isAttract && ripple && (\n <>\n <radialGradient id={ids.wave}>\n <GradientStops stops={WAVE_STOPS} />\n </radialGradient>\n <mask id={ids.mask} maskUnits=\"userSpaceOnUse\" x=\"-600\" y=\"-600\" width=\"2454\" height=\"2454\">\n <rect x=\"-600\" y=\"-600\" width=\"2454\" height=\"2454\" fill=\"#fff\" />\n <circle cx={LOGO_CX} cy={LOGO_CY} r=\"512\" fill=\"#000\" />\n </mask>\n </>\n )}\n </defs>\n )\n\n // 洞形變耦合轉速:思考起步 spinup(= SPIN_ACCEL_S)、離開思考 spindown(= 減速時長);靜止/招喚不掛。\n const holeMorph: HoleMorphSpec | undefined = isThink\n ? isExit && exit\n ? { phase: 'spindown', dur: `${exit.dur}s` }\n : { phase: 'spinup', dur: `${SPIN_ACCEL_S}s` }\n : undefined\n const body = <LogoBody ids={ids} morph={holeMorph} />\n\n let content: React.ReactNode\n if (isThink) {\n // 平移座標系內旋轉不得帶圓心(帶了=轉心位移兩倍遠)。結束無減速檔:SMIL loop 無終點,\n // 由狀態切換的 0.15s 淡入承接(spec「AgentLogo」節)。\n content = (\n <g transform={`translate(${LOGO_CENTER})`}>\n <g ref={spinRef} transform={isExit && exit ? `rotate(${exit.angle})` : undefined}>\n {isExit && exit ? (\n <SpinDecel key=\"decel\" attributeName=\"transform\" from={exit.angle} to={exit.angle + exit.delta} dur={exit.dur} />\n ) : (\n <SpinPair key=\"spin\" id={ids.spinBody} attributeName=\"transform\" from=\"0\" mid={String(SPIN_MID)} end={String(SPIN_MID + 360)} />\n )}\n <g transform={`translate(${-LOGO_CX} ${-LOGO_CY})`}>\n {body}\n <InhaleOverlay morph={holeMorph} dur={`${BREATH_S * 2}s`} />\n </g>\n </g>\n </g>\n )\n } else if (isAttract) {\n // 招喚:蓄勢(本體脹 1.07 + 吸氣微亮,波貼邊聚亮)→ 35% 呼氣起點波離體 → 85% 本體到底\n // → 90% 餘暈散盡 → 靜止空拍。\n content = (\n <>\n {ripple && (\n <g mask={`url(#${ids.mask})`}>\n <circle cx={LOGO_CX} cy={LOGO_CY} r=\"560\" fill={`url(#${ids.wave})`} opacity=\"0\">\n <animate\n attributeName=\"r\"\n values=\"560;560;830;830\"\n keyTimes={RIPPLE_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={`${HOLD};${SETTLE};${HOLD}`}\n />\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0;0\"\n keyTimes={RIPPLE_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={RIPPLE_SPLINES}\n />\n </circle>\n </g>\n )}\n <g transform={`translate(${LOGO_CENTER})`}>\n <g>\n <animateTransform\n attributeName=\"transform\"\n type=\"scale\"\n values=\"1;1.07;1;1\"\n keyTimes={BREATH_KEYTIMES}\n dur={BREATH_DUR}\n begin=\"indefinite\"\n data-begin-on-mount=\"\"\n repeatCount=\"indefinite\"\n calcMode=\"spline\"\n keySplines={BREATH_SPLINES}\n />\n <g transform={`translate(${-LOGO_CX} ${-LOGO_CY})`}>\n {body}\n <InhaleOverlay dur={BREATH_DUR} />\n </g>\n </g>\n </g>\n </>\n )\n } else {\n content = body\n }\n\n return (\n <svg\n ref={innerRef}\n width={size}\n height={size}\n viewBox=\"0 0 1254 1254\"\n className={cn('shrink-0', className)}\n // 招喚波以透明度收尾,溢出視窗屬設計(波暈散出標誌框外)。\n style={{ overflow: isAttract && ripple ? 'visible' : undefined, ...style }}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n data-state={visualKey}\n data-phase={isExit ? 'exit' : undefined}\n {...props}\n >\n {defs}\n {/* 狀態切換:key 重建 + 0.15s 淡入(僅 opacity,不碰 transform 屬性),禁跳切;think→exit 同 key 不重掛。 */}\n <g key={visualKey} className={seamless ? undefined : 'agent-logo-enter'}>\n {content}\n </g>\n </svg>\n )\n },\n)\nAgentLogo.displayName = 'AgentLogo'\n\nexport { AgentLogo }\n"],"names":[],"mappings":";;;;AA6BA,MAAM,WAAW;AAKV,MAAM,aAAa,GAAG,QAAQ;AAK9B,MAAM,QAAQ;AAKd,MAAM,SAAS;AAEtB,MAAM,OAAO;AAEb,MAAM,QAAQ;AAgBd,MAAM,wBAAwB;AAC9B,MAAM,gBAAgB,WAAW;AACjC,MAAM,aAAa,MAAM;AACzB,MAAM,eAAe,gBAAgB;AAGrC,MAAM,WAAW,KAAK,MAAM,aAAa,eAAe,MAAM,GAAG,IAAI;AAErE,MAAM,iBAAiB,MAAM;AAC7B,MAAM,UAAU,IAAI;AAEpB,MAAM,OAAO;AAKN,MAAM,kBAAkB;AAKxB,MAAM,iBAAiB,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI;AAKjD,MAAM,kBAAkB;AAKxB,MAAM,iBAAiB,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI;AAOjD,MAAM,cAAc;AAAA,EACzB,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AACV;AAkBA,MAAM,UAAU;AAChB,MAAM,UAAU;AAEhB,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO;AACzC,MAAM,WACJ;AACF,MAAM,SACJ;AAEF,MAAM,iBACJ;AACF,MAAM,eACJ;AAOF,MAAM,eAAgC;AAAA,EACpC,CAAC,GAAG,sBAAsB;AAAA;AAAA,EAC1B,CAAC,MAAM,sBAAsB;AAAA;AAAA,EAC7B,CAAC,MAAM,sBAAsB;AAAA;AAAA,EAC7B,CAAC,MAAM,sBAAsB;AAAA;AAAA,EAC7B,CAAC,GAAG,sBAAsB;AAAA;AAC5B;AACA,MAAM,iBAAkC;AAAA,EACtC,CAAC,GAAG,sBAAsB;AAAA;AAAA,EAC1B,CAAC,KAAK,sBAAsB;AAAA;AAAA,EAC5B,CAAC,MAAM,sBAAsB;AAAA;AAAA,EAC7B,CAAC,MAAM,sBAAsB;AAAA;AAAA,EAC7B,CAAC,GAAG,sBAAsB;AAAA;AAC5B;AACA,MAAM,mBAAoC;AAAA,EACxC,CAAC,GAAG,wBAAwB,IAAI;AAAA;AAAA,EAChC,CAAC,MAAM,wBAAwB,IAAI;AAAA;AAAA,EACnC,CAAC,MAAM,wBAAwB,CAAC;AAAA;AAClC;AACA,MAAM,YAA6B;AAAA,EACjC,CAAC,GAAG,wBAAwB,GAAG;AAAA;AAAA,EAC/B,CAAC,MAAM,wBAAwB,GAAG;AAAA;AAAA,EAClC,CAAC,GAAG,wBAAwB,CAAC;AAAA;AAC/B;AAEA,MAAM,aAA8B;AAAA,EAClC,CAAC,GAAG,wBAAwB,GAAG;AAAA;AAAA,EAC/B,CAAC,MAAM,wBAAwB,IAAI;AAAA;AAAA,EACnC,CAAC,KAAK,wBAAwB,IAAI;AAAA;AAAA,EAClC,CAAC,GAAG,wBAAwB,CAAC;AAAA;AAC/B;AAuBO,SAAS,0BAA0B;AACxC,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAS,KAAK;AAClD,QAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,OAAO,WAAW,kCAAkC;AAClE,eAAW,MAAM,OAAO;AACxB,UAAM,WAAW,CAAC,UAA+B,WAAW,MAAM,OAAO;AACzE,UAAM,iBAAiB,UAAU,QAAQ;AACzC,WAAO,MAAM,MAAM,oBAAoB,UAAU,QAAQ;AAAA,EAC3D,GAAG,CAAA,CAAE;AACL,SAAO;AACT;AASO,SAAS,0BAA0B,KAA4C,KAAa;AACjG,QAAM,gBAAgB,MAAM;AAC1B,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,KAAM;AAGX,SAAK,iBAAoC,uBAAuB,EAAE,QAAQ,CAAC,OAAO;AAChF,UAAI,GAAG,QAAQ,UAAU,IAAK;AAC9B,UAAI,OAAO,GAAG,iBAAiB,YAAY;AACzC,WAAG,aAAA;AACH,WAAG,QAAQ,QAAQ;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,KAAK,GAAG,CAAC;AACf;AAEA,SAAS,cAAc,EAAE,SAAqC;AAC5D,SACE,oBAAA,UAAA,EACG,gBAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,OAAO,MACjC;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC;AAAA,MACA,WAAW;AAAA,MACV,GAAI,YAAY,SAAY,EAAE,aAAa,QAAA,IAAY,CAAA;AAAA,IAAC;AAAA,IAHpD;AAAA,EAAA,CAKR,GACH;AAEJ;AAOA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,GAAG,IAAI,IAAI,GAAG;AAAA,QACtB,KAAK,GAAG,YAAY;AAAA,QACpB,OAAM;AAAA,QACN,uBAAoB;AAAA,QACpB,MAAK;AAAA,QACL,UAAS;AAAA,QACT,UAAS;AAAA,QACT,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAEd;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,GAAG,GAAG,IAAI,GAAG;AAAA,QACrB,KAAK,GAAG,aAAa;AAAA,QACrB,OAAO,GAAG,EAAE;AAAA,QACZ,aAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EACd,GACF;AAEJ;AAGA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,SAAS,SAAS,IAAI,MAAM,KAAK;AACvC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,MAAM,GAAG,IAAI,GAAG,MAAM;AAAA,MACtB,IAAI,GAAG,EAAE,GAAG,MAAM;AAAA,MAClB,KAAK,GAAG,GAAG;AAAA,MACX,OAAM;AAAA,MACN,sBAAmB;AAAA,MACnB,MAAK;AAAA,MACL,UAAS;AAAA,MACT,UAAS;AAAA,MACT,YAAY;AAAA,IAAA;AAAA,EAAA;AAGlB;AAGA,SAAS,oBAAoB,EAAE,MAAsB;AACnD,SACE,oBAAC,YAAS,IAAQ,eAAc,qBAAoB,MAAM,KAAK,WAAW,IAAI,KAAK,IAAI,QAAQ,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,GAAG,IAAI,WAAW,GAAA,CAAI;AAEhK;AAkBA,SAAS,UAAU,EAAE,MAAM,OAAO,QAA8D;AAC9F,QAAM,KAAK,KAAK,UAAU;AAC1B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,eAAc;AAAA,MACd,MAAM,KAAK,OAAO;AAAA,MAClB,IAAI,KAAK,QAAQ;AAAA,MACjB,KAAK,KAAK;AAAA,MACV,OAAM;AAAA,MACN,uBAAoB;AAAA,MACpB,MAAK;AAAA,MACL,UAAS;AAAA,MACT,UAAS;AAAA,MACT,YAAY,KAAK,OAAO;AAAA,IAAA;AAAA,IAVnB,KAAK;AAAA,EAAA;AAahB;AAQA,SAAS,SAAS,EAAE,KAAK,SAAoB;AAC3C,QAAM,cAAc,QAAQ,oBAAC,WAAA,EAAU,MAAM,UAAU,OAAO,gBAAgB,MAAM,MAAA,CAAO,IAAK;AAChG,QAAM,YAAY,QAAQ,oBAAC,WAAA,EAAU,MAAM,QAAQ,OAAO,cAAc,MAAM,MAAA,CAAO,IAAK;AAG1F,QAAM,WAAU,+BAAO,WAAU,aAAa,iBAAiB;AAC/D,QAAM,SAAQ,+BAAO,WAAU,aAAa,eAAe;AAC3D,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,GAAG,SAAS,MAAM,QAAQ,IAAI,MAAM,KAAM,UAAA,YAAA,CAAY;AAAA,IAC5D,oBAAC,UAAK,GAAG,SAAS,MAAM,QAAQ,IAAI,KAAK,KAAM,UAAA,YAAA,CAAY;AAAA,IAC3D,oBAAC,UAAK,GAAG,OAAO,MAAM,QAAQ,IAAI,IAAI,KAAM,UAAA,UAAA,CAAU;AAAA,IACtD,oBAAC,UAAK,GAAG,OAAO,MAAM,QAAQ,IAAI,IAAI,KAAM,UAAA,UAAA,CAAU;AAAA,EAAA,GACxD;AAEJ;AAOA,SAAS,cAAc,EAAE,OAAO,OAA+C;AAC7E,QAAM,cAAc,QAAQ,oBAAC,WAAA,EAAU,MAAM,UAAU,OAAO,gBAAgB,MAAM,MAAA,CAAO,IAAK;AAChG,QAAM,YAAY,QAAQ,oBAAC,WAAA,EAAU,MAAM,QAAQ,OAAO,cAAc,MAAM,MAAA,CAAO,IAAK;AAG1F,QAAM,WAAU,+BAAO,WAAU,aAC/B;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,eAAc;AAAA,MACd,MAAK;AAAA,MACL,IAAG;AAAA,MACH,KAAK,MAAM;AAAA,MACX,OAAM;AAAA,MACN,uBAAoB;AAAA,MACpB,MAAK;AAAA,MACL,UAAS;AAAA,MACT,UAAS;AAAA,MACT,YAAY;AAAA,IAAA;AAAA,IAVR;AAAA,EAAA,IAYJ;AACJ,SACE,qBAAC,KAAA,EAAE,SAAQ,KAAI,eAAc,QAC1B,UAAA;AAAA,IAAA;AAAA,IACH,qBAAC,KAAA,EAAE,SAAQ,KAAI,eAAc,QAC3B,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,QAAO;AAAA,UACP,UAAU;AAAA,UACV;AAAA,UACA,OAAM;AAAA,UACN,uBAAoB;AAAA,UACpB,aAAY;AAAA,UACZ,UAAS;AAAA,UACT,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAEd,oBAAC,QAAA,EAAK,IAAG,+BAAO,WAAU,aAAa,eAAe,QAAQ,MAAK,QAAQ,UAAA,UAAA,CAAU;AAAA,MACrF,oBAAC,QAAA,EAAK,IAAG,+BAAO,WAAU,aAAa,iBAAiB,UAAU,MAAK,QAAQ,UAAA,YAAA,CAAY;AAAA,IAAA,EAAA,CAC7F;AAAA,EAAA,GACA;AAEJ;AAEA,MAAM,YAAY,MAAM;AAAA,EACtB,CACE;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,MAAM,MAAM,MAAA,EAAQ,QAAQ,iBAAiB,EAAE;AACrD,UAAM,UAAU,wBAAA;AAEhB,UAAM,iBAAiC,UAAU,UAAU;AAC3D,UAAM,WAAW,MAAM,OAA6B,IAAI;AACxD,UAAM,oBAAoB,KAAK,MAAM,SAAS,OAAwB;AAKtE,UAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAwC,cAAc;AACxF,UAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAA+D,IAAI;AACjG,UAAM,cAAc,MAAM,OAAO,cAAc;AAC/C,gBAAY,UAAU;AACtB,UAAM,UAAU,MAAM,OAA2B,IAAI;AAErD,UAAM,iBAAiB,MAAM,OAAO,CAAC;AACrC,UAAM,gBAAgB,MAAM;AAC1B,UAAI,WAAW,QAAS,gBAAe,UAAU,YAAY,IAAA;AAAA,IAC/D,GAAG,CAAC,MAAM,CAAC;AACX,UAAM,gBAAgB,MAAM;AAC1B,UAAI,WAAW,eAAgB;AAE/B,UAAI,WAAW,aAAc;AAC7B,YAAM,eAAe,WAAW,WAAW,mBAAmB;AAC9D,UAAI,CAAC,gBAAgB,SAAS;AAC5B,gBAAQ,IAAI;AACZ,kBAAU,cAAc;AACxB;AAAA,MACF;AACA,YAAM,MAAM,SAAS;AACrB,YAAM,IAAI,QAAQ;AAClB,YAAM,SAAQ,2BAAK,cAAiC,2CAA0C;AAC9F,YAAM,QAAQ,CAAC,UAAkB;AAE/B,cAAM,cAAe,QAAQ,MAAO,OAAO;AAC3C,YAAI,SAAS,MAAM,cAAc;AACjC,eAAO,QAAQ,eAAgB,UAAS;AACxC,gBAAQ,EAAE,OAAO,YAAY,OAAO,KAAK,SAAS,aAAa,MAAM;AACrE,kBAAU,YAAY;AAAA,MACxB;AACA,YAAM,WAAW,YAAY,IAAA,IAAQ,eAAe,WAAW;AAC/D,UAAI,UAAU,WAAW,CAAC,KAAK;AAE7B,kBAAU,cAAc;AACxB;AAAA,MACF;AACA,UAAI,UAAU,gBAAgB,OAAO;AAEnC,YAAI,UAAU;AACd,cAAM,QAAQ,MAAM;AAClB,cAAI,QAAS;AACb,oBAAU;AACV,gBAAM,QAAQ;AAAA,QAChB;AACA,cAAM,iBAAiB,YAAY,OAAO,EAAE,MAAM,MAAM;AACxD,cAAM,QAAQ,OAAO,WAAW,QAAQ,eAAe,WAAW,MAAO,EAAE;AAC3E,eAAO,MAAM;AACX,gBAAM,oBAAoB,YAAY,KAAK;AAC3C,iBAAO,aAAa,KAAK;AAAA,QAC3B;AAAA,MACF;AACA,YAAM,KAAI,uBAAG,aAAY;AACzB,YAAM,IAAK,KAAK,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,MAAO,KAAK,KAAK,CAAC;AAAA,IACtD,GAAG,CAAC,gBAAgB,QAAQ,OAAO,CAAC;AACpC,UAAM,gBAAgB,MAAM;AAC1B,UAAI,CAAC,KAAM;AACX,YAAM,MAAM,SAAS;AACrB,UAAI,CAAC,IAAK;AACV,YAAM,aAAa,CAAC,GAAG,IAAI,iBAAoC,sBAAsB,CAAC;AACtF,iBAAW,QAAQ,CAAC,OAAO,GAAG,cAAc;AAC5C,UAAI,OAAO;AACX,YAAM,SAAS,MAAM;AACnB,YAAI,KAAM;AACV,eAAO;AACP,gBAAQ,IAAI;AACZ,kBAAU,YAAY,OAAO;AAAA,MAC/B;AACA,YAAM,UAAU,WAAW,CAAC;AAC5B,yCAAS,iBAAiB,YAAY,QAAQ,EAAE,MAAM;AACtD,YAAM,QAAQ,OAAO,WAAW,QAAQ,KAAK,MAAM,MAAO,EAAE;AAC5D,aAAO,MAAM;AACX,2CAAS,oBAAoB,YAAY;AACzC,eAAO,aAAa,KAAK;AAAA,MAC3B;AAAA,IACF,GAAG,CAAC,IAAI,CAAC;AACT,UAAM,SAAS,WAAW;AAE1B,UAAM,YAAY,SAAS,UAAU;AAIrC,8BAA0B,UAAU,GAAG,SAAS,IAAI,MAAM,IAAI,SAAS,SAAS,KAAK,EAAE;AAMvF,UAAM,WAAW,MAAM,OAA2C,EAAE,KAAK,WAAW,UAAU,OAAO;AACrG,QAAI,SAAS,QAAQ,QAAQ,WAAW;AACtC,YAAM,OAAO,SAAS,QAAQ;AAC9B,eAAS,UAAU;AAAA,QACjB,KAAK;AAAA,QACL,UAAW,SAAS,WAAW,cAAc,WAAa,SAAS,WAAW,cAAc;AAAA,MAAA;AAAA,IAEhG;AACA,UAAM,WAAW,SAAS,QAAQ;AAClC,UAAM,MAAM;AAAA,MACV,MAAM,GAAG,GAAG;AAAA,MACZ,QAAQ,GAAG,GAAG;AAAA,MACd,OAAO,GAAG,GAAG;AAAA,MACb,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,UAAU,GAAG,GAAG;AAAA,MAChB,YAAY,GAAG,GAAG;AAAA,MAClB,UAAU,GAAG,GAAG;AAAA,IAAA;AAElB,UAAM,UAAU,WAAW,WAAW;AACtC,UAAM,YAAY,WAAW;AAE7B,UAAM,4BACH,QAAA,EAGC,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,IAAI;AAAA,UACR,eAAc;AAAA,UACd,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,mBAAmB,UAAU,OAAO,UAAU,CAAC,KAAK,KAAK,IAAI,WAAW,MAAM;AAAA,UAE9E,UAAA;AAAA,YAAA,oBAAC,eAAA,EAAc,OAAO,aAAA,CAAc;AAAA,YACnC,WAAW,CAAC,8BAAW,qBAAA,EAAoB,IAAI,IAAI,UAAU;AAAA,YAC7D,UAAU,QACT,oBAAC,WAAA,EAAU,eAAc,qBAAoB,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,YAAA,CAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGxI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,IAAI;AAAA,UACR,eAAc;AAAA,UACd,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,mBAAmB,UAAU,OAAO,UAAU,CAAC,KAAK,KAAK,IAAI,WAAW,MAAM;AAAA,UAE9E,UAAA;AAAA,YAAA,oBAAC,eAAA,EAAc,OAAO,eAAA,CAAgB;AAAA,YACrC,WAAW,CAAC,8BAAW,qBAAA,EAAoB,IAAI,IAAI,YAAY;AAAA,YAC/D,UAAU,QACT,oBAAC,WAAA,EAAU,eAAc,qBAAoB,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,YAAA,CAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGpI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,IAAI;AAAA,UACR,eAAc;AAAA,UACd,IAAG;AAAA,UACH,IAAG;AAAA,UACH,GAAE;AAAA,UAEF,UAAA,oBAAC,eAAA,EAAc,OAAO,iBAAA,CAAkB;AAAA,QAAA;AAAA,MAAA;AAAA,MAE1C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,IAAI;AAAA,UACR,eAAc;AAAA,UACd,IAAG;AAAA,UACH,IAAG;AAAA,UACH,GAAE;AAAA,UAEF,UAAA,oBAAC,eAAA,EAAc,OAAO,UAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,MAEtC,aAAa,UACZ,qBAAA,UAAA,EACE,UAAA;AAAA,QAAA,oBAAC,kBAAA,EAAe,IAAI,IAAI,MACtB,8BAAC,eAAA,EAAc,OAAO,YAAY,EAAA,CACpC;AAAA,QACA,qBAAC,QAAA,EAAK,IAAI,IAAI,MAAM,WAAU,kBAAiB,GAAE,QAAO,GAAE,QAAO,OAAM,QAAO,QAAO,QACnF,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,GAAE,QAAO,GAAE,QAAO,OAAM,QAAO,QAAO,QAAO,MAAK,OAAA,CAAO;AAAA,UAC/D,oBAAC,YAAO,IAAI,SAAS,IAAI,SAAS,GAAE,OAAM,MAAK,OAAA,CAAO;AAAA,QAAA,EAAA,CACxD;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAIF,UAAM,YAAuC,UACzC,UAAU,OACR,EAAE,OAAO,YAAY,KAAK,GAAG,KAAK,GAAG,IAAA,IACrC,EAAE,OAAO,UAAU,KAAK,GAAG,YAAY,QACzC;AACJ,UAAM,OAAO,oBAAC,UAAA,EAAS,KAAU,OAAO,WAAW;AAEnD,QAAI;AACJ,QAAI,SAAS;AAGX,oCACG,KAAA,EAAE,WAAW,aAAa,WAAW,KACpC,UAAA,qBAAC,KAAA,EAAE,KAAK,SAAS,WAAW,UAAU,OAAO,UAAU,KAAK,KAAK,MAAM,QACpE,UAAA;AAAA,QAAA,UAAU,OACT,oBAAC,WAAA,EAAsB,eAAc,aAAY,MAAM,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK,OAAO,KAAK,KAAK,OAA3F,OAAgG,IAE/G,oBAAC,UAAA,EAAoB,IAAI,IAAI,UAAU,eAAc,aAAY,MAAK,KAAI,KAAK,OAAO,QAAQ,GAAG,KAAK,OAAO,WAAW,GAAG,KAA7G,MAAgH;AAAA,QAEhI,qBAAC,OAAE,WAAW,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,KAC5C,UAAA;AAAA,UAAA;AAAA,UACD,oBAAC,iBAAc,OAAO,WAAW,KAAK,GAAG,WAAW,CAAC,IAAA,CAAK;AAAA,QAAA,EAAA,CAC5D;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAEJ,WAAW,WAAW;AAGpB,gBACE,qBAAA,UAAA,EACG,UAAA;AAAA,QAAA,UACC,oBAAC,OAAE,MAAM,QAAQ,IAAI,IAAI,KACvB,+BAAC,UAAA,EAAO,IAAI,SAAS,IAAI,SAAS,GAAE,OAAM,MAAM,QAAQ,IAAI,IAAI,KAAK,SAAQ,KAC3E,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAc;AAAA,cACd,QAAO;AAAA,cACP,UAAU;AAAA,cACV,KAAK;AAAA,cACL,OAAM;AAAA,cACN,uBAAoB;AAAA,cACpB,aAAY;AAAA,cACZ,UAAS;AAAA,cACT,YAAY,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAc;AAAA,cACd,QAAO;AAAA,cACP,UAAU;AAAA,cACV,KAAK;AAAA,cACL,OAAM;AAAA,cACN,uBAAoB;AAAA,cACpB,aAAY;AAAA,cACZ,UAAS;AAAA,cACT,YAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,EAAA,CACF,EAAA,CACF;AAAA,4BAED,KAAA,EAAE,WAAW,aAAa,WAAW,KACpC,+BAAC,KAAA,EACC,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAc;AAAA,cACd,MAAK;AAAA,cACL,QAAO;AAAA,cACP,UAAU;AAAA,cACV,KAAK;AAAA,cACL,OAAM;AAAA,cACN,uBAAoB;AAAA,cACpB,aAAY;AAAA,cACZ,UAAS;AAAA,cACT,YAAY;AAAA,YAAA;AAAA,UAAA;AAAA,UAEd,qBAAC,OAAE,WAAW,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,KAC5C,UAAA;AAAA,YAAA;AAAA,YACD,oBAAC,eAAA,EAAc,KAAK,WAAA,CAAY;AAAA,UAAA,EAAA,CAClC;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,MAAA,GACF;AAAA,IAEJ,OAAO;AACL,gBAAU;AAAA,IACZ;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAQ;AAAA,QACR,WAAW,GAAG,YAAY,SAAS;AAAA,QAEnC,OAAO,EAAE,UAAU,aAAa,SAAS,YAAY,QAAW,GAAG,MAAA;AAAA,QACnE,MAAM,QAAQ,QAAQ;AAAA,QACtB,cAAY;AAAA,QACZ,eAAa,QAAQ,SAAY;AAAA,QACjC,cAAY;AAAA,QACZ,cAAY,SAAS,SAAS;AAAA,QAC7B,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA;AAAA,8BAEA,KAAA,EAAkB,WAAW,WAAW,SAAY,oBAClD,qBADK,SAER;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACA,UAAU,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-panel.d.ts","sourceRoot":"","sources":["../../../src/components/AgentPanel/agent-panel.tsx"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA6E9B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,mBAAmB,CAAA;AAM1B,yEAAyE;AACzE,QAAA,MAAM,mBAAmB,MAAM,CAAA;AAC/B,QAAA,MAAM,eAAe,MAAM,CAAA;AAC3B,QAAA,MAAM,eAAe,MAAM,CAAA;AAiC3B;;;GAGG;AACH,eAAO,MAAM,sCAAsC,QAAqC,CAAA;AAExF,6GAA6G;AAC7G,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,SAAS,CAAA;AAMvD,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC3E,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gDAAgD;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,EAAE,CAAA;IACpC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C;;;;;;;;;;;;;;OAcG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,QAAA,MAAM,UAAU,wFAoPf,CAAA;AAOD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACxD,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,iCAAiC;IACjC,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAA;IAC1C,uBAAuB;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,4BAA4B;IAC5B,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,gDAAgD;IAChD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AA8FD,QAAA,MAAM,gBAAgB,2FAiNrB,CAAA;AAoED,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;AAKzE,QAAA,MAAM,iBAAiB,+FA8EtB,CAAA;AAOD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC7E,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACvB,wCAAwC;IACxC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;IAC/B,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAA;IACzD,oCAAoC;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,QAAA,MAAM,YAAY,0FA4CjB,CAAA;AAOD,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC9D,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AAED,QAAA,MAAM,aAAa,2FAwDlB,CAAA;AAOD,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC7E;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAGhB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,QAAA,MAAM,YAAY,0FA4BjB,CAAA;AAOD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,kCAAkC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACrC,gCAAgC;IAChC,kBAAkB,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,IAAI,CAAA;IAC/D,2BAA2B;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA4CD,QAAA,MAAM,gBAAgB,8FA+FrB,CAAA;AAOD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,6CAA6C;IAC7C,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,qCAAqC;IACrC,SAAS,EAAE,qBAAqB,EAAE,CAAA;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IACpD,mDAAmD;IACnD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;CACnD;AAyDD,QAAA,MAAM,iBAAiB,+FAwNtB,CAAA;AAOD,MAAM,WAAW,yBAA0B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrF,yBAAyB;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrD;AAED,QAAA,MAAM,oBAAoB,kGAkBzB,CAAA;AAGD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,IAAI,yBAAyB,EAChD,eAAe,IAAI,qBAAqB,EACxC,eAAe,IAAI,qBAAqB,GACzC,CAAA"}
1
+ {"version":3,"file":"agent-panel.d.ts","sourceRoot":"","sources":["../../../src/components/AgentPanel/agent-panel.tsx"],"names":[],"mappings":"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"}
@@ -165,7 +165,12 @@ const AgentPanel = React.forwardRef(
165
165
  "aria-label": "智慧代理",
166
166
  "data-agent-panel-mode": mode,
167
167
  className: cn(
168
- "relative flex h-full min-h-0 shrink-0 flex-col overflow-hidden bg-surface",
168
+ // 不再 `overflow-hidden`(2026-09-29,待辦總帳 OE1;DataTable 表頭格 2026-09-10 AD63 同一條):它會把左緣把手
169
+ // 跨到宿主那側的外側 3px 裁掉,7px 命中區只剩面板內的 4px 可點 —— resize-handle.spec.md「命中區」明寫
170
+ // 消費端容器不得用 overflow:hidden 裁到它、要壓 flex `min-width:auto` 改 `min-w-0`。橫向不裁;縱向改 `overflow-y-clip`
171
+ // (與 overflow-x:visible 並存不會被升成 auto、不成為捲動容器),讓貼底浮層的 slide-in 仍照舊被面板底緣裁住。
172
+ // 閘:`scripts/agent-panel-breakpoint.mjs`「OE1 把手外側」(左緣外 2px 必命中把手;對照組注入 overflow:hidden 必紅)。
173
+ "relative flex h-full min-h-0 min-w-0 shrink-0 flex-col overflow-y-clip bg-surface",
169
174
  // 2026-09-07 G3:容器窄到並排放不下(< 960;2026-09-09 由 1080 放寬)就翻成蓋板。
170
175
  // 2026-09-16 user 裁示:蓋板不再蓋滿 —— 上下右貼齊容器、左邊留 Dialog 同一顆 `--layout-space-viewport-inset`(48px),
171
176
  // 底下鋪遮罩讓人知道面板下面還有東西(遮罩見上方 showScrim)。「蓋滿」原是 v14 條 B 的字,同日改字(v14 來源總帳 2026-09-16)。