botmux 3.11.0 → 3.12.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 (343) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +18 -0
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +154 -2
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/cli/coco.js +3 -3
  7. package/dist/adapters/cli/coco.js.map +1 -1
  8. package/dist/adapters/cli/codex.js +2 -2
  9. package/dist/adapters/cli/codex.js.map +1 -1
  10. package/dist/adapters/cli/kimi.d.ts.map +1 -1
  11. package/dist/adapters/cli/kimi.js +22 -8
  12. package/dist/adapters/cli/kimi.js.map +1 -1
  13. package/dist/adapters/cli/pi.d.ts.map +1 -1
  14. package/dist/adapters/cli/pi.js +3 -1
  15. package/dist/adapters/cli/pi.js.map +1 -1
  16. package/dist/bot-registry.d.ts.map +1 -1
  17. package/dist/bot-registry.js +4 -1
  18. package/dist/bot-registry.js.map +1 -1
  19. package/dist/cli/dashboard-command.d.ts +23 -0
  20. package/dist/cli/dashboard-command.d.ts.map +1 -0
  21. package/dist/cli/dashboard-command.js +61 -0
  22. package/dist/cli/dashboard-command.js.map +1 -0
  23. package/dist/cli/dashboard-endpoint.d.ts +3 -3
  24. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  25. package/dist/cli/dashboard-endpoint.js +1 -1
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +101 -49
  28. package/dist/cli.js.map +1 -1
  29. package/dist/codex-rpc-engine.d.ts +33 -3
  30. package/dist/codex-rpc-engine.d.ts.map +1 -1
  31. package/dist/codex-rpc-engine.js +182 -20
  32. package/dist/codex-rpc-engine.js.map +1 -1
  33. package/dist/codex-rpc-lifecycle.d.ts +42 -7
  34. package/dist/codex-rpc-lifecycle.d.ts.map +1 -1
  35. package/dist/codex-rpc-lifecycle.js +73 -7
  36. package/dist/codex-rpc-lifecycle.js.map +1 -1
  37. package/dist/config.d.ts +1 -1
  38. package/dist/config.js +1 -1
  39. package/dist/core/command-handler.d.ts +3 -2
  40. package/dist/core/command-handler.d.ts.map +1 -1
  41. package/dist/core/command-handler.js +19 -4
  42. package/dist/core/command-handler.js.map +1 -1
  43. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  44. package/dist/core/dashboard-ipc-server.js +16 -11
  45. package/dist/core/dashboard-ipc-server.js.map +1 -1
  46. package/dist/core/dashboard-rows.d.ts +17 -1
  47. package/dist/core/dashboard-rows.d.ts.map +1 -1
  48. package/dist/core/dashboard-rows.js +13 -1
  49. package/dist/core/dashboard-rows.js.map +1 -1
  50. package/dist/core/dispatch.d.ts +9 -10
  51. package/dist/core/dispatch.d.ts.map +1 -1
  52. package/dist/core/dispatch.js +17 -10
  53. package/dist/core/dispatch.js.map +1 -1
  54. package/dist/core/maintenance.d.ts.map +1 -1
  55. package/dist/core/maintenance.js +5 -0
  56. package/dist/core/maintenance.js.map +1 -1
  57. package/dist/core/role-resolver.d.ts +5 -2
  58. package/dist/core/role-resolver.d.ts.map +1 -1
  59. package/dist/core/role-resolver.js +55 -23
  60. package/dist/core/role-resolver.js.map +1 -1
  61. package/dist/core/session-manager.d.ts +2 -0
  62. package/dist/core/session-manager.d.ts.map +1 -1
  63. package/dist/core/session-manager.js +20 -18
  64. package/dist/core/session-manager.js.map +1 -1
  65. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  66. package/dist/core/skills/cli-admin-command.js +142 -3
  67. package/dist/core/skills/cli-admin-command.js.map +1 -1
  68. package/dist/core/skills/frontmatter.d.ts.map +1 -1
  69. package/dist/core/skills/frontmatter.js +44 -7
  70. package/dist/core/skills/frontmatter.js.map +1 -1
  71. package/dist/core/skills/im-command.d.ts +6 -0
  72. package/dist/core/skills/im-command.d.ts.map +1 -1
  73. package/dist/core/skills/im-command.js +34 -7
  74. package/dist/core/skills/im-command.js.map +1 -1
  75. package/dist/core/skills/install-command.d.ts +4 -0
  76. package/dist/core/skills/install-command.d.ts.map +1 -0
  77. package/dist/core/skills/install-command.js +89 -0
  78. package/dist/core/skills/install-command.js.map +1 -0
  79. package/dist/core/skills/package.d.ts.map +1 -1
  80. package/dist/core/skills/package.js +10 -3
  81. package/dist/core/skills/package.js.map +1 -1
  82. package/dist/core/skills/policy.d.ts +5 -1
  83. package/dist/core/skills/policy.d.ts.map +1 -1
  84. package/dist/core/skills/policy.js +66 -3
  85. package/dist/core/skills/policy.js.map +1 -1
  86. package/dist/core/skills/references.d.ts +9 -1
  87. package/dist/core/skills/references.d.ts.map +1 -1
  88. package/dist/core/skills/references.js +35 -2
  89. package/dist/core/skills/references.js.map +1 -1
  90. package/dist/core/skills/registry-paths.d.ts +1 -0
  91. package/dist/core/skills/registry-paths.d.ts.map +1 -1
  92. package/dist/core/skills/registry-paths.js +3 -0
  93. package/dist/core/skills/registry-paths.js.map +1 -1
  94. package/dist/core/skills/session-resolver.d.ts +2 -1
  95. package/dist/core/skills/session-resolver.d.ts.map +1 -1
  96. package/dist/core/skills/session-resolver.js +1 -0
  97. package/dist/core/skills/session-resolver.js.map +1 -1
  98. package/dist/core/skills/session-runtime.d.ts.map +1 -1
  99. package/dist/core/skills/session-runtime.js +2 -0
  100. package/dist/core/skills/session-runtime.js.map +1 -1
  101. package/dist/core/skills/sources.d.ts +23 -0
  102. package/dist/core/skills/sources.d.ts.map +1 -1
  103. package/dist/core/skills/sources.js +128 -12
  104. package/dist/core/skills/sources.js.map +1 -1
  105. package/dist/core/skills/types.d.ts +22 -1
  106. package/dist/core/skills/types.d.ts.map +1 -1
  107. package/dist/core/terminal-write-auth.d.ts +4 -4
  108. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  109. package/dist/core/terminal-write-auth.js +18 -6
  110. package/dist/core/terminal-write-auth.js.map +1 -1
  111. package/dist/core/types.d.ts +2 -0
  112. package/dist/core/types.d.ts.map +1 -1
  113. package/dist/core/types.js.map +1 -1
  114. package/dist/core/worker-pool.d.ts.map +1 -1
  115. package/dist/core/worker-pool.js +52 -1
  116. package/dist/core/worker-pool.js.map +1 -1
  117. package/dist/daemon.d.ts +1 -0
  118. package/dist/daemon.d.ts.map +1 -1
  119. package/dist/daemon.js +101 -12
  120. package/dist/daemon.js.map +1 -1
  121. package/dist/dashboard/auth.d.ts +21 -11
  122. package/dist/dashboard/auth.d.ts.map +1 -1
  123. package/dist/dashboard/auth.js +39 -25
  124. package/dist/dashboard/auth.js.map +1 -1
  125. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  126. package/dist/dashboard/bot-onboarding.js +2 -114
  127. package/dist/dashboard/bot-onboarding.js.map +1 -1
  128. package/dist/dashboard/bot-payload.d.ts +0 -1
  129. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  130. package/dist/dashboard/bot-payload.js +0 -1
  131. package/dist/dashboard/bot-payload.js.map +1 -1
  132. package/dist/dashboard/connector-api.d.ts.map +1 -1
  133. package/dist/dashboard/connector-api.js +66 -6
  134. package/dist/dashboard/connector-api.js.map +1 -1
  135. package/dist/dashboard/dashboard-summary-endpoint.d.ts +39 -0
  136. package/dist/dashboard/dashboard-summary-endpoint.d.ts.map +1 -0
  137. package/dist/dashboard/dashboard-summary-endpoint.js +50 -0
  138. package/dist/dashboard/dashboard-summary-endpoint.js.map +1 -0
  139. package/dist/dashboard/dashboard-summary.d.ts +62 -0
  140. package/dist/dashboard/dashboard-summary.d.ts.map +1 -0
  141. package/dist/dashboard/dashboard-summary.js +106 -0
  142. package/dist/dashboard/dashboard-summary.js.map +1 -0
  143. package/dist/dashboard/public-redact.d.ts.map +1 -1
  144. package/dist/dashboard/public-redact.js +3 -0
  145. package/dist/dashboard/public-redact.js.map +1 -1
  146. package/dist/dashboard/skill-install-request.js +10 -11
  147. package/dist/dashboard/skill-install-request.js.map +1 -1
  148. package/dist/dashboard/skill-pack-response.d.ts +15 -0
  149. package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
  150. package/dist/dashboard/skill-pack-response.js +32 -0
  151. package/dist/dashboard/skill-pack-response.js.map +1 -0
  152. package/dist/dashboard/web/connectors-page.d.ts +69 -0
  153. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  154. package/dist/dashboard/web/connectors-page.js +47 -7
  155. package/dist/dashboard/web/connectors-page.js.map +1 -1
  156. package/dist/dashboard/web/feed-group-picker.d.ts +13 -0
  157. package/dist/dashboard/web/feed-group-picker.d.ts.map +1 -0
  158. package/dist/dashboard/web/feed-group-picker.js +45 -0
  159. package/dist/dashboard/web/feed-group-picker.js.map +1 -0
  160. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  161. package/dist/dashboard/web/groups-page.js +2 -5
  162. package/dist/dashboard/web/groups-page.js.map +1 -1
  163. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  164. package/dist/dashboard/web/i18n.js +309 -40
  165. package/dist/dashboard/web/i18n.js.map +1 -1
  166. package/dist/dashboard/web/preferences.d.ts +4 -2
  167. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  168. package/dist/dashboard/web/preferences.js +14 -6
  169. package/dist/dashboard/web/preferences.js.map +1 -1
  170. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  171. package/dist/dashboard/web/roles-page.js +36 -4
  172. package/dist/dashboard/web/roles-page.js.map +1 -1
  173. package/dist/dashboard/web/roles.d.ts +3 -1
  174. package/dist/dashboard/web/roles.d.ts.map +1 -1
  175. package/dist/dashboard/web/roles.js +10 -2
  176. package/dist/dashboard/web/roles.js.map +1 -1
  177. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  178. package/dist/dashboard/web/schedules-page.js +8 -2
  179. package/dist/dashboard/web/schedules-page.js.map +1 -1
  180. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  181. package/dist/dashboard/web/sessions-page.js +101 -5
  182. package/dist/dashboard/web/sessions-page.js.map +1 -1
  183. package/dist/dashboard/web/sessions.d.ts +3 -1
  184. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  185. package/dist/dashboard/web/sessions.js +13 -6
  186. package/dist/dashboard/web/sessions.js.map +1 -1
  187. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
  188. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
  189. package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
  190. package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
  191. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
  192. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
  193. package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
  194. package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
  195. package/dist/dashboard/web/skills/shared.d.ts +86 -0
  196. package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
  197. package/dist/dashboard/web/skills/shared.js +178 -0
  198. package/dist/dashboard/web/skills/shared.js.map +1 -0
  199. package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
  200. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
  201. package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
  202. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
  203. package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
  204. package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
  205. package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
  206. package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
  207. package/dist/dashboard/web/skills/types.d.ts +95 -0
  208. package/dist/dashboard/web/skills/types.d.ts.map +1 -0
  209. package/dist/dashboard/web/skills/types.js +2 -0
  210. package/dist/dashboard/web/skills/types.js.map +1 -0
  211. package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
  212. package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
  213. package/dist/dashboard/web/skills/use-skills-data.js +86 -0
  214. package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
  215. package/dist/dashboard/web/skills-page.d.ts +34 -31
  216. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  217. package/dist/dashboard/web/skills-page.js +321 -176
  218. package/dist/dashboard/web/skills-page.js.map +1 -1
  219. package/dist/dashboard/webhook-routes.d.ts +18 -0
  220. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  221. package/dist/dashboard/webhook-routes.js +35 -1
  222. package/dist/dashboard/webhook-routes.js.map +1 -1
  223. package/dist/dashboard-web/app.js +1 -1
  224. package/dist/dashboard-web/chunks/{bot-defaults-page-GED4FEMS.js → bot-defaults-page-HL655CNR.js} +1 -1
  225. package/dist/dashboard-web/chunks/{chunk-HK7NIBJG.js → chunk-5PAYQ3KT.js} +1 -1
  226. package/dist/dashboard-web/chunks/{chunk-KRHWZEXU.js → chunk-5ZL7NLR5.js} +1 -1
  227. package/dist/dashboard-web/chunks/chunk-6ALR252E.js +1 -0
  228. package/dist/dashboard-web/chunks/{chunk-VBXJOJFH.js → chunk-BFUTTYVK.js} +1 -1
  229. package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
  230. package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
  231. package/dist/dashboard-web/chunks/groups-page-SDZMJ7UV.js +8 -0
  232. package/dist/dashboard-web/chunks/{insights-page-54UBPPOC.js → insights-page-ZZ3JEJ6L.js} +1 -1
  233. package/dist/dashboard-web/chunks/{monitor-room-PORHVKRH.js → monitor-room-ROJ5GZ4N.js} +1 -1
  234. package/dist/dashboard-web/chunks/{monitoring-page-XGA7AXNL.js → monitoring-page-IATV7KJF.js} +1 -1
  235. package/dist/dashboard-web/chunks/{office-page-AO3AFG45.js → office-page-TYO5OIIT.js} +1 -1
  236. package/dist/dashboard-web/chunks/{overview-page-F5BUTYR6.js → overview-page-VJUULZF2.js} +1 -1
  237. package/dist/dashboard-web/chunks/roles-page-7RJJKZGK.js +1 -0
  238. package/dist/dashboard-web/chunks/schedules-page-JTEJ5IXW.js +1 -0
  239. package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
  240. package/dist/dashboard-web/chunks/{settings-page-OJAZLZQT.js → settings-page-7CTTFBRS.js} +1 -1
  241. package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
  242. package/dist/dashboard-web/chunks/{team-federation-page-ZJVAP7HW.js → team-federation-page-6YYIMJG3.js} +1 -1
  243. package/dist/dashboard-web/chunks/{v3-page-GYWTRGO2.js → v3-page-ZGKBSBK3.js} +1 -1
  244. package/dist/dashboard-web/chunks/{whiteboards-page-MSDAG6P7.js → whiteboards-page-AACJF6DB.js} +1 -1
  245. package/dist/dashboard-web/style.css +1952 -377
  246. package/dist/dashboard.js +316 -47
  247. package/dist/dashboard.js.map +1 -1
  248. package/dist/desktop/main/ipc.js +1 -1
  249. package/dist/desktop/main/runtime-service.js +2 -2
  250. package/dist/desktop/main/runtime-service.js.map +1 -1
  251. package/dist/desktop/shared/types.d.ts +1 -1
  252. package/dist/i18n/en.d.ts.map +1 -1
  253. package/dist/i18n/en.js +5 -1
  254. package/dist/i18n/en.js.map +1 -1
  255. package/dist/i18n/zh.d.ts.map +1 -1
  256. package/dist/i18n/zh.js +5 -1
  257. package/dist/i18n/zh.js.map +1 -1
  258. package/dist/index-daemon.js +6 -1
  259. package/dist/index-daemon.js.map +1 -1
  260. package/dist/services/adopt-input-sequence.d.ts +52 -0
  261. package/dist/services/adopt-input-sequence.d.ts.map +1 -0
  262. package/dist/services/adopt-input-sequence.js +50 -0
  263. package/dist/services/adopt-input-sequence.js.map +1 -0
  264. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  265. package/dist/services/bridge-fallback-gate.js +34 -11
  266. package/dist/services/bridge-fallback-gate.js.map +1 -1
  267. package/dist/services/codex-bridge-queue.d.ts +103 -7
  268. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  269. package/dist/services/codex-bridge-queue.js +291 -17
  270. package/dist/services/codex-bridge-queue.js.map +1 -1
  271. package/dist/services/codex-transcript.d.ts +4 -3
  272. package/dist/services/codex-transcript.d.ts.map +1 -1
  273. package/dist/services/codex-transcript.js.map +1 -1
  274. package/dist/services/connector-store.d.ts +14 -1
  275. package/dist/services/connector-store.d.ts.map +1 -1
  276. package/dist/services/connector-store.js.map +1 -1
  277. package/dist/services/connector-topic-template.d.ts +7 -0
  278. package/dist/services/connector-topic-template.d.ts.map +1 -0
  279. package/dist/services/connector-topic-template.js +210 -0
  280. package/dist/services/connector-topic-template.js.map +1 -0
  281. package/dist/services/project-scanner.d.ts +33 -0
  282. package/dist/services/project-scanner.d.ts.map +1 -1
  283. package/dist/services/project-scanner.js +40 -1
  284. package/dist/services/project-scanner.js.map +1 -1
  285. package/dist/services/skill-pack-store.d.ts +50 -0
  286. package/dist/services/skill-pack-store.d.ts.map +1 -0
  287. package/dist/services/skill-pack-store.js +270 -0
  288. package/dist/services/skill-pack-store.js.map +1 -0
  289. package/dist/services/skill-registry-store.d.ts +8 -0
  290. package/dist/services/skill-registry-store.d.ts.map +1 -1
  291. package/dist/services/skill-registry-store.js +100 -68
  292. package/dist/services/skill-registry-store.js.map +1 -1
  293. package/dist/services/structured-bridge-clis.d.ts +8 -1
  294. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  295. package/dist/services/structured-bridge-clis.js +13 -0
  296. package/dist/services/structured-bridge-clis.js.map +1 -1
  297. package/dist/services/submit-confirmation.d.ts +50 -0
  298. package/dist/services/submit-confirmation.d.ts.map +1 -1
  299. package/dist/services/submit-confirmation.js +82 -0
  300. package/dist/services/submit-confirmation.js.map +1 -1
  301. package/dist/services/todo-state.d.ts +74 -0
  302. package/dist/services/todo-state.d.ts.map +1 -0
  303. package/dist/services/todo-state.js +351 -0
  304. package/dist/services/todo-state.js.map +1 -0
  305. package/dist/setup/agent-preset.d.ts.map +1 -1
  306. package/dist/setup/agent-preset.js +2 -0
  307. package/dist/setup/agent-preset.js.map +1 -1
  308. package/dist/setup/owner-identity.d.ts +47 -0
  309. package/dist/setup/owner-identity.d.ts.map +1 -0
  310. package/dist/setup/owner-identity.js +196 -0
  311. package/dist/setup/owner-identity.js.map +1 -0
  312. package/dist/setup/register-app.d.ts +4 -3
  313. package/dist/setup/register-app.d.ts.map +1 -1
  314. package/dist/setup/register-app.js.map +1 -1
  315. package/dist/setup/setup-args.d.ts +1 -1
  316. package/dist/setup/setup-args.d.ts.map +1 -1
  317. package/dist/setup/setup-args.js +7 -3
  318. package/dist/setup/setup-args.js.map +1 -1
  319. package/dist/types.d.ts +11 -0
  320. package/dist/types.d.ts.map +1 -1
  321. package/dist/utils/async-serial-queue.d.ts +9 -0
  322. package/dist/utils/async-serial-queue.d.ts.map +1 -0
  323. package/dist/utils/async-serial-queue.js +13 -0
  324. package/dist/utils/async-serial-queue.js.map +1 -0
  325. package/dist/utils/child-env.d.ts +25 -0
  326. package/dist/utils/child-env.d.ts.map +1 -1
  327. package/dist/utils/child-env.js +47 -0
  328. package/dist/utils/child-env.js.map +1 -1
  329. package/dist/utils/runtime-screen-status.d.ts +52 -0
  330. package/dist/utils/runtime-screen-status.d.ts.map +1 -0
  331. package/dist/utils/runtime-screen-status.js +60 -0
  332. package/dist/utils/runtime-screen-status.js.map +1 -0
  333. package/dist/worker.js +1697 -468
  334. package/dist/worker.js.map +1 -1
  335. package/dist/workflows/definition.d.ts +44 -44
  336. package/package.json +1 -1
  337. package/dist/dashboard-web/chunks/chunk-6J5LS5AU.js +0 -51
  338. package/dist/dashboard-web/chunks/connectors-page-EELM66G3.js +0 -1
  339. package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +0 -8
  340. package/dist/dashboard-web/chunks/roles-page-M5GIASJU.js +0 -1
  341. package/dist/dashboard-web/chunks/schedules-page-O232WQRR.js +0 -1
  342. package/dist/dashboard-web/chunks/sessions-page-YFRPSTIL.js +0 -6
  343. package/dist/dashboard-web/chunks/skills-page-EFZQPWV4.js +0 -4
@@ -2579,7 +2579,7 @@ button.primary {
2579
2579
  animation: board-led-pulse 1.6s ease-in-out infinite;
2580
2580
  }
2581
2581
 
2582
- .session-board-starting {
2582
+ .session-board-todo {
2583
2583
  --col-signal: var(--warning);
2584
2584
  }
2585
2585
 
@@ -2920,6 +2920,163 @@ button.primary {
2920
2920
  margin-left: 0;
2921
2921
  }
2922
2922
 
2923
+ /* 任务态徽标:告诉人「这张卡为什么在待办列」——机器空闲但还有未完成 TODO。
2924
+ 琥珀色区别于运行态 status(灰/蓝/绿),hasInProgress 时加脉冲圆点。 */
2925
+ /* 待办徽标:柔和描边 + 透明底(信息态,不喧宾夺主)。色调用偏红的橙红,
2926
+ 比原来的黄橙更有"该处理"的提示感,又不像红色报错。 */
2927
+ .session-todo-badge {
2928
+ display: inline-flex;
2929
+ align-items: center;
2930
+ gap: 5px;
2931
+ padding: 2px 8px;
2932
+ border-radius: var(--radius-full);
2933
+ font-family: var(--mono);
2934
+ font-weight: 700;
2935
+ font-size: 11px;
2936
+ line-height: 1.3;
2937
+ letter-spacing: 0.02em;
2938
+ white-space: nowrap;
2939
+ color: #c2410c;
2940
+ background: color-mix(in srgb, #ea580c 12%, transparent);
2941
+ border: 1px solid color-mix(in srgb, #ea580c 36%, transparent);
2942
+ position: relative;
2943
+ cursor: help;
2944
+ }
2945
+
2946
+ .session-todo-badge.pinned {
2947
+ color: #c2410c;
2948
+ background: color-mix(in srgb, #ea580c 22%, transparent);
2949
+ border-color: color-mix(in srgb, #ea580c 55%, transparent);
2950
+ cursor: pointer;
2951
+ }
2952
+
2953
+ .session-todo-dot {
2954
+ width: 6px;
2955
+ height: 6px;
2956
+ border-radius: 50%;
2957
+ background: #ea580c;
2958
+ animation: todo-pulse 1.6s ease-in-out infinite;
2959
+ }
2960
+
2961
+ @keyframes todo-pulse {
2962
+ 0%, 100% { opacity: 1; }
2963
+ 50% { opacity: 0.3; }
2964
+ }
2965
+
2966
+ /* 悬浮浮层:列出每条 TODO 的状态字形 + 文字。portal 到 body、fixed 定位(卡片/列
2967
+ 都是 overflow:hidden,绝对定位会被裁)。JS 控制挂载,位置由行内 left/top 给。
2968
+ 两态:hover 悬浮预览(移开即关);pinned 点击固定(不自动消失,文字可选中复制)。 */
2969
+ .session-todo-pop {
2970
+ position: fixed;
2971
+ z-index: 2000;
2972
+ display: flex;
2973
+ flex-direction: column;
2974
+ gap: 6px;
2975
+ min-width: 220px;
2976
+ max-width: 360px;
2977
+ padding: 10px 12px;
2978
+ border-radius: var(--radius-md, 8px);
2979
+ background: var(--surface-raised, #1b1f2a);
2980
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.12));
2981
+ box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);
2982
+ color: var(--fg, #18202a);
2983
+ font-family: var(--sans, inherit);
2984
+ font-weight: 400;
2985
+ letter-spacing: 0;
2986
+ white-space: normal;
2987
+ animation: todo-pop-in 0.12s ease;
2988
+ user-select: none;
2989
+ }
2990
+
2991
+ /* 固定态:文字可选中复制,边框更实以区分「已锁定」。 */
2992
+ .session-todo-pop.pinned {
2993
+ user-select: text;
2994
+ border-color: color-mix(in srgb, var(--warning, #f5a623) 45%, var(--border, rgba(255, 255, 255, 0.12)));
2995
+ }
2996
+
2997
+ @keyframes todo-pop-in {
2998
+ from { opacity: 0; transform: translateY(-4px); }
2999
+ to { opacity: 1; transform: translateY(0); }
3000
+ }
3001
+
3002
+ .session-todo-pop-head {
3003
+ display: flex;
3004
+ align-items: center;
3005
+ justify-content: space-between;
3006
+ gap: 8px;
3007
+ font-size: 11px;
3008
+ font-weight: 700;
3009
+ color: var(--muted, #9aa3b2);
3010
+ padding-bottom: 4px;
3011
+ border-bottom: 1px solid var(--border, rgba(255, 255, 255, 0.1));
3012
+ }
3013
+
3014
+ .session-todo-pop-title {
3015
+ flex: 1 1 auto;
3016
+ min-width: 0;
3017
+ }
3018
+
3019
+ .session-todo-pop-hint {
3020
+ flex: none;
3021
+ font-weight: 500;
3022
+ font-size: 10px;
3023
+ opacity: 0.7;
3024
+ }
3025
+
3026
+ .session-todo-pop-copy {
3027
+ flex: none;
3028
+ cursor: pointer;
3029
+ font-family: var(--sans, inherit);
3030
+ font-size: 11px;
3031
+ font-weight: 600;
3032
+ color: var(--warning, #f5a623);
3033
+ background: color-mix(in srgb, var(--warning, #f5a623) 14%, transparent);
3034
+ border: 1px solid color-mix(in srgb, var(--warning, #f5a623) 40%, transparent);
3035
+ border-radius: var(--radius-sm, 5px);
3036
+ padding: 2px 8px;
3037
+ line-height: 1.4;
3038
+ transition: background 0.1s ease;
3039
+ }
3040
+
3041
+ .session-todo-pop-copy:hover {
3042
+ background: color-mix(in srgb, var(--warning, #f5a623) 24%, transparent);
3043
+ }
3044
+
3045
+ .session-todo-pop-list {
3046
+ display: flex;
3047
+ flex-direction: column;
3048
+ gap: 4px;
3049
+ max-height: 320px;
3050
+ overflow-y: auto;
3051
+ }
3052
+
3053
+ .session-todo-pop-item {
3054
+ display: flex;
3055
+ align-items: flex-start;
3056
+ gap: 6px;
3057
+ font-size: 12px;
3058
+ line-height: 1.4;
3059
+ }
3060
+
3061
+ .session-todo-pop-glyph {
3062
+ flex: none;
3063
+ width: 14px;
3064
+ text-align: center;
3065
+ font-family: var(--mono);
3066
+ font-weight: 700;
3067
+ }
3068
+
3069
+ /* 完成项最浅(灰+删除线),未完成项更深、进行中最深加粗——让「还没做的」在视觉上更突出。
3070
+ 注意用 --fg / --faint(本主题真实存在的 token);早前误用未定义的 --text/--text-secondary,
3071
+ 会回退到近白色 #e6e8ee,在浅色模式下几乎看不清。 */
3072
+ .session-todo-pop-item.st-completed { color: var(--faint, #7b8798); }
3073
+ .session-todo-pop-item.st-completed .session-todo-pop-text { text-decoration: line-through; }
3074
+ .session-todo-pop-item.st-completed .session-todo-pop-glyph { color: var(--success, #15803d); }
3075
+ .session-todo-pop-item.st-in-progress { color: var(--fg, #18202a); font-weight: 700; }
3076
+ .session-todo-pop-item.st-in-progress .session-todo-pop-glyph { color: var(--warning, #b7791f); }
3077
+ .session-todo-pop-item.st-pending { color: var(--fg, #18202a); }
3078
+ .session-todo-pop-item.st-pending .session-todo-pop-glyph { color: var(--muted, #627084); }
3079
+
2923
3080
  .session-signal {
2924
3081
  display: inline-flex;
2925
3082
  align-items: center;
@@ -10096,7 +10253,7 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10096
10253
  .session-board-count { border-radius: var(--radius-full); font-family: inherit; }
10097
10254
  .session-board-needs-you { --col-signal: var(--warning); }
10098
10255
  .session-board-needs-you { background: color-mix(in srgb, var(--warning) 4%, var(--surface)); }
10099
- .session-board-starting { --col-signal: var(--info); }
10256
+ .session-board-todo { --col-signal: var(--info); }
10100
10257
  .session-board-working { --col-signal: var(--accent); }
10101
10258
  .session-board-idle { --col-signal: var(--success); }
10102
10259
  :root[data-theme="dark"] .session-board-needs-you {
@@ -10871,6 +11028,11 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10871
11028
  position: relative;
10872
11029
  }
10873
11030
 
11031
+ .skills-install-anchor {
11032
+ min-width: 0;
11033
+ scroll-margin-top: 18px;
11034
+ }
11035
+
10874
11036
  .skills-install-title {
10875
11037
  position: relative;
10876
11038
  display: inline-flex;
@@ -10883,6 +11045,34 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10883
11045
  margin: 0;
10884
11046
  }
10885
11047
 
11048
+ .skills-inline-target {
11049
+ display: flex;
11050
+ align-items: center;
11051
+ justify-content: space-between;
11052
+ gap: 12px;
11053
+ margin: 0 0 12px;
11054
+ padding: 9px 11px;
11055
+ border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border-soft));
11056
+ border-left: 3px solid var(--accent);
11057
+ border-radius: var(--radius-lg);
11058
+ background: color-mix(in srgb, var(--accent) 7%, var(--surface));
11059
+ color: var(--fg);
11060
+ font-size: 12px;
11061
+ font-weight: 700;
11062
+ }
11063
+
11064
+ .skills-inline-target button {
11065
+ flex: none;
11066
+ min-height: 28px;
11067
+ padding: 0 10px;
11068
+ border: 1px solid var(--border-soft);
11069
+ border-radius: var(--radius-full);
11070
+ background: var(--surface);
11071
+ color: var(--muted);
11072
+ font-size: 11px;
11073
+ font-weight: 700;
11074
+ }
11075
+
10886
11076
  .skills-card-head {
10887
11077
  display: flex;
10888
11078
  align-items: flex-end;
@@ -11006,19 +11196,12 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
11006
11196
  line-height: 1.35;
11007
11197
  }
11008
11198
 
11009
- .skills-source-help {
11010
- display: grid;
11011
- gap: 7px;
11012
- min-width: 0;
11013
- }
11014
-
11015
- .skills-source-help > span {
11016
- display: block;
11017
- }
11018
-
11019
- .skills-source-help strong {
11020
- color: var(--fg);
11021
- font-weight: 750;
11199
+ .skills-install-field-wide > small {
11200
+ margin-top: -3px;
11201
+ color: var(--faint);
11202
+ font-size: 10.5px;
11203
+ font-weight: 600;
11204
+ line-height: 1.35;
11022
11205
  }
11023
11206
 
11024
11207
  .skills-install-grid input,
@@ -11041,12 +11224,71 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
11041
11224
 
11042
11225
  .skills-install-bottom-row {
11043
11226
  display: grid;
11044
- grid-template-columns: minmax(0, 1fr);
11227
+ grid-template-columns: minmax(260px, .9fr) minmax(320px, 1.1fr);
11045
11228
  gap: 10px;
11046
11229
  align-items: center;
11047
11230
  min-width: 0;
11048
11231
  }
11049
11232
 
11233
+ .skills-install-bottom-row > .skills-local-discovery-panel {
11234
+ grid-column: auto;
11235
+ }
11236
+
11237
+ .skills-scan-strategy {
11238
+ display: grid;
11239
+ gap: 4px;
11240
+ min-height: var(--button-height);
11241
+ padding: 8px 10px;
11242
+ border: 1px solid var(--border-soft);
11243
+ border-radius: var(--radius-lg);
11244
+ background: color-mix(in srgb, var(--surface-muted) 55%, transparent);
11245
+ }
11246
+
11247
+ .skills-scan-toggle {
11248
+ display: flex !important;
11249
+ align-items: flex-start;
11250
+ gap: 9px !important;
11251
+ color: var(--fg) !important;
11252
+ cursor: pointer;
11253
+ }
11254
+
11255
+ .skills-install-grid .skills-scan-toggle > input[type="checkbox"] {
11256
+ width: 16px !important;
11257
+ min-width: 16px !important;
11258
+ max-width: 16px !important;
11259
+ height: 16px !important;
11260
+ min-height: 16px !important;
11261
+ max-height: 16px !important;
11262
+ margin: 1px 0 0 !important;
11263
+ padding: 0 !important;
11264
+ border-radius: 4px !important;
11265
+ accent-color: var(--accent);
11266
+ }
11267
+
11268
+ .skills-scan-toggle > span {
11269
+ display: grid;
11270
+ gap: 2px;
11271
+ min-width: 0;
11272
+ }
11273
+
11274
+ .skills-scan-toggle strong {
11275
+ color: var(--fg);
11276
+ font-size: 11.5px;
11277
+ }
11278
+
11279
+ .skills-scan-toggle small,
11280
+ .skills-scan-strategy > p {
11281
+ margin: 0;
11282
+ color: var(--muted);
11283
+ font-size: 10.5px;
11284
+ line-height: 1.35;
11285
+ }
11286
+
11287
+ .skills-scan-strategy > p {
11288
+ padding-left: 25px;
11289
+ color: var(--faint);
11290
+ }
11291
+
11050
11292
  .skills-advanced-options {
11051
11293
  display: grid;
11052
11294
  gap: 0;
@@ -13640,6 +13882,16 @@ tbody tr[data-chat]:hover {
13640
13882
  white-space: nowrap;
13641
13883
  }
13642
13884
 
13885
+ .schedule-chip-strip span.schedule-chat-chip {
13886
+ display: inline-block;
13887
+ max-width: min(320px, 100%);
13888
+ overflow: hidden;
13889
+ text-overflow: ellipsis;
13890
+ white-space: nowrap;
13891
+ line-height: 22px;
13892
+ text-align: left;
13893
+ }
13894
+
13643
13895
  .schedule-chip-strip span.schedule-error-chip {
13644
13896
  border-color: color-mix(in srgb, var(--danger) 35%, var(--border-soft));
13645
13897
  background: color-mix(in srgb, var(--danger) 10%, var(--surface));
@@ -16694,7 +16946,7 @@ form.dashboard-toolbar > input[type="text"]:focus {
16694
16946
  display: grid;
16695
16947
  grid-column: 1 / -1;
16696
16948
  grid-row: 3;
16697
- grid-template-columns: minmax(0, 1fr);
16949
+ grid-template-columns: minmax(260px, .9fr) minmax(320px, 1.1fr);
16698
16950
  gap: 10px;
16699
16951
  align-items: center;
16700
16952
  min-width: 0;
@@ -16729,6 +16981,67 @@ form.dashboard-toolbar > input[type="text"]:focus {
16729
16981
  margin: 8px 0 0;
16730
16982
  }
16731
16983
 
16984
+ .skills-source-feedback {
16985
+ display: grid;
16986
+ gap: 2px;
16987
+ margin-top: 7px;
16988
+ padding: 7px 9px;
16989
+ border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border-soft));
16990
+ border-radius: var(--radius-md);
16991
+ background: color-mix(in srgb, var(--accent) 7%, var(--surface));
16992
+ }
16993
+
16994
+ .skills-source-feedback strong {
16995
+ color: var(--accent-strong);
16996
+ font-size: 11px;
16997
+ }
16998
+
16999
+ .skills-source-feedback span {
17000
+ color: var(--muted);
17001
+ font-size: 11px;
17002
+ line-height: 1.45;
17003
+ }
17004
+
17005
+ .skills-source-feedback.is-unknown {
17006
+ border-color: color-mix(in srgb, var(--warning) 35%, var(--border-soft));
17007
+ background: color-mix(in srgb, var(--warning) 8%, var(--surface));
17008
+ }
17009
+
17010
+ .skills-source-feedback.is-unknown strong {
17011
+ color: var(--warning);
17012
+ }
17013
+
17014
+ .skills-install-diagnostic {
17015
+ display: grid;
17016
+ gap: 3px;
17017
+ margin-top: 8px;
17018
+ padding: 9px 11px;
17019
+ border: 1px solid color-mix(in srgb, var(--warning) 34%, var(--border-soft));
17020
+ border-radius: var(--radius-md);
17021
+ background: color-mix(in srgb, var(--warning) 8%, var(--surface));
17022
+ }
17023
+
17024
+ .skills-install-diagnostic strong {
17025
+ color: var(--warning);
17026
+ font-size: 12px;
17027
+ }
17028
+
17029
+ .skills-install-diagnostic span {
17030
+ color: var(--fg-muted);
17031
+ font-size: 11px;
17032
+ line-height: 1.5;
17033
+ }
17034
+
17035
+ @media (max-width: 980px) {
17036
+ .skills-page .skills-install-panel .skills-install-bottom-row {
17037
+ grid-template-columns: minmax(0, 1fr);
17038
+ }
17039
+
17040
+ .skills-inline-target {
17041
+ align-items: flex-start;
17042
+ }
17043
+ }
17044
+
16732
17045
  .skills-defaults-panel .bd-section-title {
16733
17046
  margin: 0;
16734
17047
  }
@@ -17937,7 +18250,7 @@ form.dashboard-toolbar > input[type="text"]:focus {
17937
18250
 
17938
18251
  .connector-topic-message-options {
17939
18252
  display: grid;
17940
- grid-template-columns: repeat(3, minmax(0, 1fr));
18253
+ grid-template-columns: repeat(4, minmax(0, 1fr));
17941
18254
  gap: 8px;
17942
18255
  }
17943
18256
 
@@ -17977,6 +18290,13 @@ form.dashboard-toolbar > input[type="text"]:focus {
17977
18290
  font-weight: 600;
17978
18291
  }
17979
18292
  .connector-topic-message-input > small span { color: var(--faint); font-variant-numeric: tabular-nums; }
18293
+ .connector-topic-message-extractors {
18294
+ min-height: 148px;
18295
+ resize: vertical;
18296
+ font-family: var(--font-mono);
18297
+ font-size: 11.5px;
18298
+ line-height: 1.5;
18299
+ }
17980
18300
 
17981
18301
  .connector-topic-message-preview {
17982
18302
  margin: 0;
@@ -25575,452 +25895,1707 @@ button.ui-refresh-button.is-loading .ui-action-icon {
25575
25895
  overflow-wrap: anywhere;
25576
25896
  }
25577
25897
 
25578
- @media (max-width: 620px) {
25579
- .skills-installed-block > .sect-head {
25580
- align-items: center;
25581
- flex-wrap: nowrap;
25582
- }
25583
-
25584
- .skills-installed-block > .sect-head .sect-head-hint {
25585
- display: none;
25586
- }
25587
-
25588
- .skills-installed-header-actions {
25589
- margin-left: auto;
25590
- }
25898
+ /* Skill Pack grid */
25899
+ .skills-pack-grid {
25900
+ display: grid;
25901
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
25902
+ gap: 14px;
25903
+ }
25591
25904
 
25592
- .skills-library-toolbar {
25593
- grid-template-columns: minmax(0, 1fr) auto;
25594
- }
25595
-
25596
- .skills-installed-search {
25597
- grid-column: 1 / -1;
25598
- }
25599
-
25600
- .skills-select-all-results {
25601
- grid-column: 1 / -1;
25602
- justify-content: center;
25603
- min-height: 44px;
25604
- }
25905
+ .skills-pack-create-tile {
25906
+ display: flex;
25907
+ flex-direction: column;
25908
+ align-items: center;
25909
+ justify-content: center;
25910
+ gap: 8px;
25911
+ min-height: 140px;
25912
+ border: 2px dashed var(--border);
25913
+ border-radius: 12px;
25914
+ background: transparent;
25915
+ color: var(--muted, #999);
25916
+ cursor: pointer;
25917
+ transition: all 0.15s ease;
25918
+ font-size: 14px;
25919
+ }
25920
+ .skills-pack-create-tile:hover {
25921
+ border-color: var(--accent);
25922
+ color: var(--accent);
25923
+ background: var(--accent-soft);
25924
+ }
25925
+ .skills-pack-create-plus {
25926
+ font-size: 28px;
25927
+ line-height: 1;
25928
+ font-weight: 300;
25929
+ }
25605
25930
 
25606
- .skills-filter-count {
25607
- justify-self: start;
25608
- }
25931
+ .skills-pack-card {
25932
+ display: flex;
25933
+ flex-direction: column;
25934
+ gap: 10px;
25935
+ padding: 16px;
25936
+ border: 1px solid var(--border, #333);
25937
+ border-radius: 12px;
25938
+ background: var(--surface-raised);
25939
+ transition: border-color 0.15s ease;
25940
+ }
25941
+ .skills-pack-card:hover {
25942
+ border-color: var(--accent);
25943
+ }
25609
25944
 
25610
- .skills-library-toolbar > .skills-pager {
25611
- justify-self: end;
25612
- }
25945
+ .skills-pack-card-head {
25946
+ display: flex;
25947
+ align-items: flex-start;
25948
+ justify-content: space-between;
25949
+ gap: 8px;
25950
+ }
25951
+ .skills-pack-title {
25952
+ display: flex;
25953
+ flex-direction: column;
25954
+ gap: 2px;
25955
+ min-width: 0;
25956
+ }
25957
+ .skills-pack-title strong {
25958
+ font-size: 15px;
25959
+ white-space: nowrap;
25960
+ overflow: hidden;
25961
+ text-overflow: ellipsis;
25962
+ }
25963
+ .skills-pack-id {
25964
+ font-size: 11px;
25965
+ color: var(--muted);
25966
+ background: var(--surface-muted);
25967
+ padding: 1px 6px;
25968
+ border-radius: 4px;
25969
+ align-self: flex-start;
25970
+ }
25613
25971
 
25614
- .skills-installed-panel {
25615
- padding: 14px;
25616
- }
25972
+ .skills-pack-health {
25973
+ flex-shrink: 0;
25974
+ width: 22px;
25975
+ height: 22px;
25976
+ border-radius: 50%;
25977
+ display: flex;
25978
+ align-items: center;
25979
+ justify-content: center;
25980
+ font-size: 13px;
25981
+ font-weight: 700;
25982
+ }
25983
+ .skills-pack-health-complete {
25984
+ background: rgba(46, 204, 113, 0.15);
25985
+ color: #2ecc71;
25986
+ }
25987
+ .skills-pack-health-missing {
25988
+ background: rgba(231, 76, 60, 0.15);
25989
+ color: #e74c3c;
25990
+ }
25991
+ .skills-pack-health-unassigned {
25992
+ background: rgba(241, 196, 15, 0.15);
25993
+ color: #f1c40f;
25994
+ }
25617
25995
 
25618
- .skills-bulk-action-bar {
25619
- width: calc(100% - 20px);
25620
- min-height: 68px;
25621
- bottom: calc(10px + env(safe-area-inset-bottom));
25622
- margin-top: 8px;
25623
- padding: 10px 10px 10px 14px;
25624
- }
25996
+ .skills-pack-desc {
25997
+ font-size: 13px;
25998
+ color: var(--muted, #aaa);
25999
+ margin: 0;
26000
+ display: -webkit-box;
26001
+ -webkit-line-clamp: 2;
26002
+ -webkit-box-orient: vertical;
26003
+ overflow: hidden;
26004
+ }
25625
26005
 
25626
- .skills-bulk-action-bar button {
25627
- min-height: 44px;
25628
- }
26006
+ .skills-pack-meta {
26007
+ display: flex;
26008
+ gap: 14px;
26009
+ font-size: 12px;
26010
+ color: var(--muted, #999);
26011
+ }
26012
+ .skills-pack-meta-item strong {
26013
+ color: var(--fg);
26014
+ font-size: 14px;
26015
+ margin-right: 2px;
26016
+ }
25629
26017
 
25630
- .skills-remove-dialog > article {
25631
- padding: 18px;
25632
- }
26018
+ .skills-pack-tags {
26019
+ display: flex;
26020
+ flex-wrap: wrap;
26021
+ gap: 4px;
26022
+ }
26023
+ .skills-pack-tag {
26024
+ font-size: 11px;
26025
+ padding: 1px 8px;
26026
+ border-radius: 10px;
26027
+ background: var(--surface-muted);
26028
+ color: var(--muted, #aaa);
25633
26029
  }
25634
26030
 
25635
- @media (prefers-reduced-motion: reduce) {
25636
- .skills-installed-card {
25637
- transition: opacity 100ms linear;
25638
- }
26031
+ .skills-pack-refs {
26032
+ display: flex;
26033
+ flex-wrap: wrap;
26034
+ gap: 4px;
26035
+ }
26036
+ .skills-pack-ref-chip {
26037
+ font-size: 11px;
26038
+ padding: 1px 8px;
26039
+ border-radius: 10px;
26040
+ background: var(--accent-soft);
26041
+ color: var(--accent);
26042
+ }
25639
26043
 
25640
- .skills-removing-label::before {
25641
- animation: none;
25642
- }
26044
+ .skills-pack-missing {
26045
+ font-size: 12px;
26046
+ color: #e74c3c;
26047
+ background: rgba(231, 76, 60, 0.08);
26048
+ padding: 6px 10px;
26049
+ border-radius: 6px;
25643
26050
  }
25644
26051
 
25645
- /* Mobile dashboard shell ----------------------------------------------------
25646
- The desktop shell deliberately owns the viewport and delegates scrolling to
25647
- main/panel containers. Once the sidebar becomes a top tab rail, keep that
25648
- rail constrained to the viewport (otherwise its max-content width removes
25649
- the horizontal scroll range), and let tall control pages participate in the
25650
- main mobile scroll instead of being squeezed into desktop-sized grid rows. */
25651
- @media (max-width: 980px) {
25652
- .chrome-body {
25653
- gap: 0;
25654
- }
26052
+ .skills-pack-actions {
26053
+ display: flex;
26054
+ gap: 8px;
26055
+ margin-top: auto;
26056
+ padding-top: 4px;
26057
+ }
26058
+ .skills-pack-actions .bd-button.small {
26059
+ flex: 1;
26060
+ padding: 6px 10px;
26061
+ font-size: 12px;
26062
+ }
25655
26063
 
25656
- .sidebar {
25657
- box-sizing: border-box;
25658
- width: 100%;
25659
- min-width: 0;
25660
- max-width: 100%;
26064
+ /* Bot assignment drag-and-drop */
26065
+ .skills-bot-assign-layout {
26066
+ display: grid;
26067
+ grid-template-columns: 240px 1fr;
26068
+ gap: 16px;
26069
+ align-items: start;
26070
+ }
26071
+ @media (max-width: 860px) {
26072
+ .skills-bot-assign-layout {
26073
+ grid-template-columns: 1fr;
25661
26074
  }
26075
+ }
25662
26076
 
25663
- .sidebar-nav {
25664
- width: 100%;
25665
- min-width: 0;
25666
- max-width: 100%;
25667
- overscroll-behavior-x: contain;
25668
- touch-action: pan-x;
25669
- -webkit-overflow-scrolling: touch;
25670
- }
26077
+ .skills-bot-palette {
26078
+ position: sticky;
26079
+ top: 12px;
26080
+ padding: 14px;
26081
+ border: 1px solid var(--border, #333);
26082
+ border-radius: 12px;
26083
+ background: var(--surface-raised);
26084
+ max-height: 70vh;
26085
+ overflow-y: auto;
26086
+ }
26087
+ .skills-bot-palette-hint {
26088
+ font-size: 12px;
26089
+ color: var(--muted, #999);
26090
+ margin: 0 0 12px;
26091
+ line-height: 1.4;
26092
+ }
26093
+ .skills-bot-palette-group {
26094
+ margin-bottom: 14px;
26095
+ }
26096
+ .skills-bot-palette-group:last-child {
26097
+ margin-bottom: 0;
26098
+ }
26099
+ .skills-bot-palette-label {
26100
+ display: block;
26101
+ font-size: 11px;
26102
+ text-transform: uppercase;
26103
+ letter-spacing: 0.5px;
26104
+ color: var(--muted, #888);
26105
+ margin-bottom: 6px;
26106
+ }
26107
+ .skills-bot-palette-items {
26108
+ display: flex;
26109
+ flex-wrap: wrap;
26110
+ gap: 6px;
25671
26111
  }
25672
26112
 
25673
- @media (max-width: 720px) {
25674
- main:has(.sessions-page),
25675
- main:has(.groups-page) {
25676
- overflow-x: hidden;
25677
- overflow-y: auto;
25678
- overscroll-behavior-y: contain;
25679
- -webkit-overflow-scrolling: touch;
25680
- }
26113
+ .skills-draggable-chip {
26114
+ cursor: grab;
26115
+ user-select: none;
26116
+ transition: transform 0.1s ease, opacity 0.1s ease;
26117
+ }
26118
+ .skills-draggable-chip:hover {
26119
+ transform: translateY(-1px);
26120
+ }
26121
+ .skills-draggable-chip:active {
26122
+ cursor: grabbing;
26123
+ opacity: 0.7;
26124
+ }
25681
26125
 
25682
- main:has(.sessions-page) .sessions-page {
25683
- height: auto;
25684
- min-height: 100%;
25685
- grid-template-rows: none;
25686
- overflow: visible;
25687
- }
26126
+ .skills-bot-row.drag-over {
26127
+ background: var(--accent-soft);
26128
+ box-shadow: inset 0 0 0 2px var(--accent);
26129
+ }
26130
+ .skills-bot-row.drag-over td {
26131
+ border-color: var(--accent);
26132
+ }
25688
26133
 
25689
- main:has(.sessions-page) .sessions-page:not(:has(#bulk-bar:not([hidden]))) {
25690
- grid-template-rows: none;
25691
- }
26134
+ .skills-unassign-dropzone {
26135
+ display: grid;
26136
+ grid-template-columns: auto minmax(0, 1fr);
26137
+ gap: 9px;
26138
+ align-items: center;
26139
+ margin: -2px 0 14px;
26140
+ padding: 10px 11px;
26141
+ border: 1px dashed color-mix(in srgb, var(--danger) 58%, var(--border-soft));
26142
+ border-radius: var(--radius-md);
26143
+ background: color-mix(in srgb, var(--danger) 7%, var(--surface-raised));
26144
+ color: var(--danger);
26145
+ transition: border-color 120ms ease, background 120ms ease, box-shadow 120ms ease, transform 120ms ease;
26146
+ }
26147
+ .skills-unassign-dropzone.is-active {
26148
+ border-color: var(--danger);
26149
+ background: color-mix(in srgb, var(--danger) 14%, var(--surface-raised));
26150
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 32%, transparent);
26151
+ transform: translateY(-1px);
26152
+ }
26153
+ .skills-unassign-dropzone > span:last-child {
26154
+ display: grid;
26155
+ gap: 1px;
26156
+ min-width: 0;
26157
+ }
26158
+ .skills-unassign-dropzone strong {
26159
+ color: var(--danger);
26160
+ font-size: 12px;
26161
+ }
26162
+ .skills-unassign-dropzone small {
26163
+ color: var(--muted);
26164
+ font-size: 10.5px;
26165
+ line-height: 1.35;
26166
+ }
26167
+ .skills-unassign-icon {
26168
+ display: inline-flex;
26169
+ align-items: center;
26170
+ justify-content: center;
26171
+ width: 24px;
26172
+ height: 24px;
26173
+ border-radius: var(--radius-full);
26174
+ background: color-mix(in srgb, var(--danger) 12%, transparent);
26175
+ font-size: 15px;
26176
+ font-weight: 800;
26177
+ }
25692
26178
 
25693
- main:has(.sessions-page) .sessions-heading-main,
25694
- main:has(.sessions-page) .sessions-view-controls {
26179
+ .skills-assigned-draggable {
26180
+ display: inline-flex;
26181
+ max-width: 100%;
26182
+ margin: 1px 3px 1px 0;
26183
+ border-radius: var(--radius-full);
26184
+ cursor: grab;
26185
+ user-select: none;
26186
+ vertical-align: middle;
26187
+ transition: box-shadow 120ms ease, opacity 120ms ease, transform 120ms ease;
26188
+ }
26189
+ .skills-assigned-draggable:hover {
26190
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 24%, transparent);
26191
+ transform: translateY(-1px);
26192
+ }
26193
+ .skills-assigned-draggable:active,
26194
+ .skills-assigned-draggable > button:active {
26195
+ cursor: grabbing;
26196
+ }
26197
+ .skills-assigned-draggable.is-dragging {
26198
+ opacity: 0.45;
26199
+ }
26200
+ .skills-assigned-draggable > button {
26201
+ cursor: grab;
26202
+ }
26203
+
26204
+ .skills-bot-row-actions {
26205
+ display: flex;
26206
+ align-items: center;
26207
+ justify-content: flex-end;
26208
+ gap: 8px;
26209
+ min-width: max-content;
26210
+ }
26211
+ .skills-duplicate-feedback {
26212
+ max-width: 180px;
26213
+ color: var(--accent);
26214
+ font-size: 11px;
26215
+ font-weight: 600;
26216
+ line-height: 1.25;
26217
+ text-align: right;
26218
+ }
26219
+
26220
+ @media (prefers-reduced-motion: reduce) {
26221
+ .skills-unassign-dropzone,
26222
+ .skills-assigned-draggable {
26223
+ transition: none !important;
26224
+ transform: none !important;
26225
+ }
26226
+ }
26227
+
26228
+ /* Skill pack editor: truncate descriptions, make list scrollable */
26229
+ .skills-pack-skill-list {
26230
+ max-height: 320px;
26231
+ overflow-y: auto;
26232
+ display: flex;
26233
+ flex-direction: column;
26234
+ gap: 4px;
26235
+ }
26236
+ .skills-pack-skill-item {
26237
+ display: grid;
26238
+ grid-template-columns: auto 1fr;
26239
+ gap: 2px 8px;
26240
+ align-items: start;
26241
+ padding: 6px 8px;
26242
+ border-radius: 6px;
26243
+ transition: background 0.1s;
26244
+ }
26245
+ .skills-pack-skill-item:hover {
26246
+ background: var(--accent-soft);
26247
+ }
26248
+ .skills-pack-skill-item input {
26249
+ margin-top: 3px;
26250
+ }
26251
+ .skills-pack-skill-name {
26252
+ font-weight: 600;
26253
+ font-size: 13px;
26254
+ }
26255
+ .skills-pack-skill-desc {
26256
+ grid-column: 2;
26257
+ font-size: 11px;
26258
+ color: var(--muted, #999);
26259
+ display: -webkit-box;
26260
+ -webkit-line-clamp: 1;
26261
+ -webkit-box-orient: vertical;
26262
+ overflow: hidden;
26263
+ line-height: 1.3;
26264
+ }
26265
+
26266
+ /* Skill library cards: truncate description for even grid */
26267
+ .skills-installed-card .skill-desc,
26268
+ .skills-library-card p {
26269
+ display: -webkit-box;
26270
+ -webkit-line-clamp: 3;
26271
+ -webkit-box-orient: vertical;
26272
+ overflow: hidden;
26273
+ }
26274
+
26275
+ /* Skill / Pack chips */
26276
+ .skills-pack-chip,
26277
+ .skills-skill-chip {
26278
+ display: inline-block;
26279
+ padding: 2px 10px;
26280
+ border-radius: 12px;
26281
+ font-size: 12px;
26282
+ line-height: 1.6;
26283
+ background: var(--surface-muted);
26284
+ color: var(--fg);
26285
+ white-space: nowrap;
26286
+ overflow: hidden;
26287
+ text-overflow: ellipsis;
26288
+ max-width: 160px;
26289
+ }
26290
+ .skills-pack-chip {
26291
+ background: var(--accent-soft);
26292
+ color: var(--accent);
26293
+ }
26294
+
26295
+ /* Draggable chips in palette */
26296
+ .skills-draggable-chip {
26297
+ padding: 4px 12px;
26298
+ font-size: 12px;
26299
+ border: 1px solid var(--border);
26300
+ background: var(--surface-raised);
26301
+ cursor: grab;
26302
+ }
26303
+ .skills-draggable-chip.skills-pack-chip {
26304
+ border-color: rgba(108, 140, 255, 0.3);
26305
+ }
26306
+ .skills-draggable-chip:hover {
26307
+ border-color: var(--accent);
26308
+ background: var(--accent-soft);
26309
+ }
26310
+
26311
+ /* Bot palette: drag hint, search, tag filters */
26312
+ .skills-bot-palette-hint {
26313
+ display: flex;
26314
+ align-items: center;
26315
+ gap: 8px;
26316
+ padding: 10px 12px;
26317
+ background: rgba(108, 140, 255, 0.08);
26318
+ border: 1px solid rgba(108, 140, 255, 0.2);
26319
+ border-radius: 8px;
26320
+ font-size: 12px;
26321
+ color: var(--fg);
26322
+ margin: 0 0 14px;
26323
+ line-height: 1.4;
26324
+ }
26325
+ .skills-drag-icon {
26326
+ font-size: 18px;
26327
+ color: var(--accent);
26328
+ flex-shrink: 0;
26329
+ }
26330
+
26331
+ .skills-bot-palette-search {
26332
+ width: 100%;
26333
+ padding: 6px 10px;
26334
+ margin-bottom: 8px;
26335
+ border: 1px solid var(--border);
26336
+ border-radius: 6px;
26337
+ background: var(--surface-muted);
26338
+ color: var(--fg);
26339
+ font-size: 12px;
26340
+ }
26341
+ .skills-bot-palette-search:focus {
26342
+ outline: none;
26343
+ border-color: var(--accent);
26344
+ }
26345
+
26346
+ .skills-bot-palette-tags {
26347
+ display: flex;
26348
+ flex-wrap: wrap;
26349
+ gap: 4px;
26350
+ margin-bottom: 8px;
26351
+ }
26352
+ .skills-tag-filter {
26353
+ padding: 2px 8px;
26354
+ border-radius: 10px;
26355
+ font-size: 11px;
26356
+ border: 1px solid var(--border);
26357
+ background: transparent;
26358
+ color: var(--muted, #999);
26359
+ cursor: pointer;
26360
+ transition: all 0.1s;
26361
+ }
26362
+ .skills-tag-filter:hover {
26363
+ border-color: var(--accent);
26364
+ color: var(--fg);
26365
+ }
26366
+ .skills-tag-filter.active {
26367
+ background: var(--accent);
26368
+ color: #fff;
26369
+ border-color: var(--accent);
26370
+ }
26371
+
26372
+ /* Skill pack editor: search + select all */
26373
+ .skills-pack-include-head {
26374
+ display: flex;
26375
+ align-items: center;
26376
+ justify-content: space-between;
26377
+ gap: 12px;
26378
+ margin-bottom: 8px;
26379
+ }
26380
+ .skills-pack-include-head label {
26381
+ font-weight: 600;
26382
+ white-space: nowrap;
26383
+ }
26384
+ .skills-pack-skill-search {
26385
+ flex: 1;
26386
+ max-width: 240px;
26387
+ padding: 5px 10px;
26388
+ border: 1px solid var(--border);
26389
+ border-radius: 6px;
26390
+ background: var(--surface-muted);
26391
+ color: var(--fg);
26392
+ font-size: 12px;
26393
+ }
26394
+ .skills-pack-skill-search:focus {
26395
+ outline: none;
26396
+ border-color: var(--accent);
26397
+ }
26398
+ .skills-pack-select-all {
26399
+ display: inline-flex;
26400
+ align-items: center;
26401
+ gap: 6px;
26402
+ font-size: 12px;
26403
+ color: var(--muted, #999);
26404
+ cursor: pointer;
26405
+ margin-bottom: 8px;
26406
+ }
26407
+
26408
+ /* Wider dialog for pack editor */
26409
+ .skills-pack-editor {
26410
+ width: min(560px, 92vw);
26411
+ }
26412
+
26413
+ @media (max-width: 620px) {
26414
+ .skills-installed-block > .sect-head {
26415
+ align-items: center;
26416
+ flex-wrap: nowrap;
26417
+ }
26418
+
26419
+ .skills-installed-block > .sect-head .sect-head-hint {
26420
+ display: none;
26421
+ }
26422
+
26423
+ .skills-installed-header-actions {
26424
+ margin-left: auto;
26425
+ }
26426
+
26427
+ .skills-library-toolbar {
26428
+ grid-template-columns: minmax(0, 1fr) auto;
26429
+ }
26430
+
26431
+ .skills-installed-search {
26432
+ grid-column: 1 / -1;
26433
+ }
26434
+
26435
+ .skills-select-all-results {
26436
+ grid-column: 1 / -1;
26437
+ justify-content: center;
26438
+ min-height: 44px;
26439
+ }
26440
+
26441
+ .skills-filter-count {
26442
+ justify-self: start;
26443
+ }
26444
+
26445
+ .skills-library-toolbar > .skills-pager {
26446
+ justify-self: end;
26447
+ }
26448
+
26449
+ .skills-installed-panel {
26450
+ padding: 14px;
26451
+ }
26452
+
26453
+ .skills-bulk-action-bar {
26454
+ width: calc(100% - 20px);
26455
+ min-height: 68px;
26456
+ bottom: calc(10px + env(safe-area-inset-bottom));
26457
+ margin-top: 8px;
26458
+ padding: 10px 10px 10px 14px;
26459
+ }
26460
+
26461
+ .skills-bulk-action-bar button {
26462
+ min-height: 44px;
26463
+ }
26464
+
26465
+ .skills-remove-dialog > article {
26466
+ padding: 18px;
26467
+ }
26468
+ }
26469
+
26470
+ @media (prefers-reduced-motion: reduce) {
26471
+ .skills-installed-card {
26472
+ transition: opacity 100ms linear;
26473
+ }
26474
+
26475
+ .skills-removing-label::before {
26476
+ animation: none;
26477
+ }
26478
+ }
26479
+
26480
+ /* Mobile dashboard shell ----------------------------------------------------
26481
+ The desktop shell deliberately owns the viewport and delegates scrolling to
26482
+ main/panel containers. Once the sidebar becomes a top tab rail, keep that
26483
+ rail constrained to the viewport (otherwise its max-content width removes
26484
+ the horizontal scroll range), and let tall control pages participate in the
26485
+ main mobile scroll instead of being squeezed into desktop-sized grid rows. */
26486
+ @media (max-width: 980px) {
26487
+ .chrome-body {
26488
+ gap: 0;
26489
+ }
26490
+
26491
+ .sidebar {
26492
+ box-sizing: border-box;
25695
26493
  width: 100%;
25696
26494
  min-width: 0;
26495
+ max-width: 100%;
25697
26496
  }
25698
26497
 
25699
- main:has(.sessions-page) .sessions-view-toggle {
25700
- display: grid;
25701
- grid-template-columns: repeat(4, minmax(0, 1fr));
26498
+ .sidebar-nav {
25702
26499
  width: 100%;
25703
26500
  min-width: 0;
25704
26501
  max-width: 100%;
25705
- }
26502
+ overscroll-behavior-x: contain;
26503
+ touch-action: pan-x;
26504
+ -webkit-overflow-scrolling: touch;
26505
+ }
26506
+ }
26507
+
26508
+ @media (max-width: 720px) {
26509
+ main:has(.sessions-page),
26510
+ main:has(.groups-page) {
26511
+ overflow-x: hidden;
26512
+ overflow-y: auto;
26513
+ overscroll-behavior-y: contain;
26514
+ -webkit-overflow-scrolling: touch;
26515
+ }
26516
+
26517
+ main:has(.sessions-page) .sessions-page {
26518
+ height: auto;
26519
+ min-height: 100%;
26520
+ grid-template-rows: none;
26521
+ overflow: visible;
26522
+ }
26523
+
26524
+ main:has(.sessions-page) .sessions-page:not(:has(#bulk-bar:not([hidden]))) {
26525
+ grid-template-rows: none;
26526
+ }
26527
+
26528
+ main:has(.sessions-page) .sessions-heading-main,
26529
+ main:has(.sessions-page) .sessions-view-controls {
26530
+ width: 100%;
26531
+ min-width: 0;
26532
+ }
26533
+
26534
+ main:has(.sessions-page) .sessions-view-toggle {
26535
+ display: grid;
26536
+ grid-template-columns: repeat(4, minmax(0, 1fr));
26537
+ width: 100%;
26538
+ min-width: 0;
26539
+ max-width: 100%;
26540
+ }
26541
+
26542
+ main:has(.sessions-page) .sessions-view-toggle button {
26543
+ width: auto;
26544
+ min-width: 0;
26545
+ padding-right: 6px;
26546
+ padding-left: 6px;
26547
+ white-space: nowrap;
26548
+ }
26549
+
26550
+ main:has(.sessions-page) .bulk-bar {
26551
+ top: -16px;
26552
+ display: grid;
26553
+ grid-template-columns: repeat(2, minmax(0, 1fr));
26554
+ align-items: center;
26555
+ box-shadow: 0 0 0 16px var(--bulk-bar-bg), var(--shadow);
26556
+ }
26557
+
26558
+ main:has(.sessions-page) .bulk-bar[hidden] {
26559
+ display: none;
26560
+ }
26561
+
26562
+ main:has(.sessions-page) .bulk-bar #bulk-count {
26563
+ grid-column: 1 / -1;
26564
+ margin-right: 0;
26565
+ }
26566
+
26567
+ main:has(.sessions-page) .bulk-bar button {
26568
+ width: 100%;
26569
+ min-width: 0;
26570
+ padding-right: 8px;
26571
+ padding-left: 8px;
26572
+ white-space: nowrap;
26573
+ }
26574
+
26575
+ main:has(.sessions-page) .sessions-view-stage,
26576
+ main:has(.sessions-page) .sessions-view-stage[data-view="table"] {
26577
+ min-height: 0;
26578
+ overflow: visible;
26579
+ }
26580
+
26581
+ main:has(.sessions-page) .sessions-board {
26582
+ height: auto;
26583
+ min-height: 0;
26584
+ overflow: visible;
26585
+ }
26586
+
26587
+ main:has(.sessions-page) .sessions-topic-view {
26588
+ height: auto;
26589
+ overflow: visible;
26590
+ padding-right: 0;
26591
+ padding-left: 0;
26592
+ }
26593
+
26594
+ main:has(.sessions-page) .session-topic-group > header {
26595
+ grid-template-columns: auto minmax(0, 1fr);
26596
+ }
26597
+
26598
+ main:has(.sessions-page) .session-topic-summary {
26599
+ grid-column: 1 / -1;
26600
+ justify-content: flex-start;
26601
+ }
26602
+
26603
+ main:has(.sessions-page) .session-topic-members {
26604
+ grid-template-columns: 1fr;
26605
+ }
26606
+
26607
+ main:has(.sessions-page) .session-board-column {
26608
+ height: min(70dvh, 640px);
26609
+ min-height: 320px;
26610
+ }
26611
+
26612
+ main:has(.sessions-page) .sessions-kanban {
26613
+ height: auto;
26614
+ overflow: visible;
26615
+ }
26616
+
26617
+ main:has(.sessions-page) .kanban-column {
26618
+ height: min(70dvh, 640px);
26619
+ min-height: 320px;
26620
+ }
26621
+
26622
+ main:has(.groups-page) .groups-page {
26623
+ height: auto;
26624
+ min-height: 100%;
26625
+ grid-template-rows: none;
26626
+ overflow: visible;
26627
+ }
26628
+
26629
+ main:has(.groups-page) .groups-page:has(> .hint-warn) {
26630
+ grid-template-rows: none;
26631
+ }
26632
+
26633
+ main:has(.groups-page) .groups-matrix-section {
26634
+ height: min(70dvh, 640px);
26635
+ min-height: 320px;
26636
+ }
26637
+ }
26638
+
26639
+ /* ── Schedule create/edit form modal ─────────────────────────────────────── */
26640
+ .schedule-form-overlay {
26641
+ position: fixed;
26642
+ inset: 0;
26643
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
26644
+ backdrop-filter: blur(3px);
26645
+ display: flex;
26646
+ align-items: center;
26647
+ justify-content: center;
26648
+ z-index: 1000;
26649
+ padding: 24px;
26650
+ }
26651
+
26652
+ .schedule-form-dialog {
26653
+ background: var(--surface);
26654
+ border: 1px solid var(--border-soft);
26655
+ border-radius: 12px;
26656
+ box-shadow: 0 16px 48px color-mix(in srgb, #000 28%, transparent);
26657
+ width: min(560px, 100%);
26658
+ max-height: 90dvh;
26659
+ overflow-y: auto;
26660
+ padding: 24px;
26661
+ }
26662
+
26663
+ .schedule-form-dialog h2 {
26664
+ margin: 0 0 16px;
26665
+ font-size: 18px;
26666
+ }
26667
+
26668
+ .schedule-form {
26669
+ display: flex;
26670
+ flex-direction: column;
26671
+ gap: 14px;
26672
+ }
26673
+
26674
+ .schedule-form-field {
26675
+ display: flex;
26676
+ flex-direction: column;
26677
+ gap: 4px;
26678
+ }
26679
+
26680
+ .schedule-form-label {
26681
+ font-size: 13px;
26682
+ font-weight: 600;
26683
+ color: var(--text);
26684
+ }
26685
+
26686
+ .schedule-form-field input[type="text"],
26687
+ .schedule-form-field textarea {
26688
+ width: 100%;
26689
+ padding: 8px 10px;
26690
+ border: 1px solid var(--border-soft);
26691
+ border-radius: 6px;
26692
+ background: var(--surface);
26693
+ color: var(--text);
26694
+ font-size: 13px;
26695
+ font-family: inherit;
26696
+ }
26697
+
26698
+ .schedule-form-field textarea {
26699
+ resize: vertical;
26700
+ min-height: 80px;
26701
+ }
26702
+
26703
+ .schedule-form-help {
26704
+ font-size: 11px;
26705
+ color: var(--muted);
26706
+ }
26707
+
26708
+ .schedule-form-help-with-count {
26709
+ display: flex;
26710
+ justify-content: space-between;
26711
+ gap: 12px;
26712
+ }
26713
+
26714
+ .schedule-form-help-with-count span {
26715
+ flex: none;
26716
+ }
26717
+
26718
+ .schedule-form-radio-group {
26719
+ display: flex;
26720
+ gap: 16px;
26721
+ flex-wrap: wrap;
26722
+ }
26723
+
26724
+ .schedule-form-radio-group label {
26725
+ display: inline-flex;
26726
+ align-items: center;
26727
+ gap: 6px;
26728
+ font-size: 13px;
26729
+ cursor: pointer;
26730
+ }
26731
+
26732
+ .schedule-form-placement {
26733
+ display: flex;
26734
+ flex-direction: column;
26735
+ gap: 3px;
26736
+ padding: 9px 10px;
26737
+ border: 1px solid var(--border-soft);
26738
+ border-radius: 6px;
26739
+ background: color-mix(in srgb, var(--surface-muted) 46%, transparent);
26740
+ }
26741
+
26742
+ .schedule-form-placement strong {
26743
+ color: var(--text);
26744
+ font-size: 13px;
26745
+ font-weight: 600;
26746
+ }
26747
+
26748
+ .schedule-form-toggle {
26749
+ flex-direction: row !important;
26750
+ align-items: flex-start;
26751
+ gap: 8px;
26752
+ }
26753
+
26754
+ .schedule-form-toggle > span {
26755
+ display: flex;
26756
+ flex-direction: column;
26757
+ gap: 2px;
26758
+ }
26759
+
26760
+ .schedule-form-error {
26761
+ color: var(--danger);
26762
+ font-size: 12px;
26763
+ margin: 0;
26764
+ }
26765
+
26766
+ .schedule-form-actions {
26767
+ display: flex;
26768
+ justify-content: flex-end;
26769
+ gap: 10px;
26770
+ margin-top: 8px;
26771
+ }
26772
+
26773
+ .schedule-form-cancel,
26774
+ .schedule-form-submit {
26775
+ padding: 8px 16px;
26776
+ border-radius: 6px;
26777
+ font-size: 13px;
26778
+ cursor: pointer;
26779
+ border: 1px solid var(--border-soft);
26780
+ }
26781
+
26782
+ .schedule-form-cancel {
26783
+ background: transparent;
26784
+ color: var(--text);
26785
+ }
26786
+
26787
+ .schedule-form-submit {
26788
+ background: var(--accent);
26789
+ color: #fff;
26790
+ border-color: var(--accent);
26791
+ }
26792
+
26793
+ .schedule-form-submit:disabled {
26794
+ opacity: 0.5;
26795
+ cursor: not-allowed;
26796
+ }
26797
+
26798
+ .schedule-edit-button,
26799
+ .schedule-delete-button {
26800
+ min-width: 56px !important;
26801
+ }
26802
+
26803
+ .schedule-delete-button {
26804
+ color: var(--danger) !important;
26805
+ border-color: color-mix(in srgb, var(--danger) 48%, var(--border-soft)) !important;
26806
+ }
26807
+
26808
+ /* --- Skills page: cross-link chips, issue strip, focus highlights --- */
26809
+ /* Chips rendered as <button> for click-through navigation: strip default button chrome */
26810
+ button.skills-pack-chip,
26811
+ button.skills-skill-chip,
26812
+ button.skills-pack-ref-chip,
26813
+ .skills-usage-chip,
26814
+ .skills-missing-skill-chip {
26815
+ border: none;
26816
+ font-family: inherit;
26817
+ cursor: pointer;
26818
+ }
26819
+ button.skills-pack-chip:hover:not(:disabled),
26820
+ button.skills-skill-chip:hover:not(:disabled),
26821
+ button.skills-pack-ref-chip:hover:not(:disabled),
26822
+ .skills-usage-chip:hover:not(:disabled) {
26823
+ filter: brightness(1.2);
26824
+ text-decoration: underline;
26825
+ }
26826
+ button.skills-pack-chip:disabled,
26827
+ button.skills-skill-chip:disabled,
26828
+ button.skills-pack-ref-chip:disabled,
26829
+ .skills-usage-chip:disabled {
26830
+ cursor: default;
26831
+ opacity: 0.7;
26832
+ text-decoration: none;
26833
+ }
26834
+ .skills-chip-missing {
26835
+ background: var(--danger-soft);
26836
+ color: var(--danger);
26837
+ }
26838
+
26839
+ .skills-usage-chips {
26840
+ display: inline-flex;
26841
+ gap: 6px;
26842
+ margin-top: 4px;
26843
+ }
26844
+ .skills-usage-chip {
26845
+ font-size: 11px;
26846
+ padding: 1px 8px;
26847
+ border-radius: 10px;
26848
+ background: var(--surface-muted);
26849
+ color: var(--muted);
26850
+ }
26851
+
26852
+ .skills-missing-skill-chip {
26853
+ font-size: 11px;
26854
+ padding: 1px 8px;
26855
+ margin: 0 2px;
26856
+ border-radius: 10px;
26857
+ background: var(--danger-soft);
26858
+ color: var(--danger);
26859
+ }
26860
+ .skills-missing-skill-chip:hover:not(:disabled) {
26861
+ background: var(--danger-soft);
26862
+ text-decoration: underline;
26863
+ }
26864
+
26865
+ .skills-issue-strip {
26866
+ display: inline-flex;
26867
+ gap: 8px;
26868
+ align-items: center;
26869
+ flex-wrap: wrap;
26870
+ }
26871
+ .skills-issue-badge {
26872
+ font-size: 12px;
26873
+ padding: 3px 10px;
26874
+ border-radius: 12px;
26875
+ border: none;
26876
+ font-family: inherit;
26877
+ white-space: nowrap;
26878
+ }
26879
+ button.skills-issue-badge {
26880
+ cursor: pointer;
26881
+ }
26882
+ button.skills-issue-badge:hover {
26883
+ filter: brightness(1.2);
26884
+ text-decoration: underline;
26885
+ }
26886
+ .skills-issue-warn {
26887
+ background: var(--warning-soft);
26888
+ color: var(--warning);
26889
+ }
26890
+ .skills-issue-info {
26891
+ background: var(--accent-soft);
26892
+ color: var(--accent);
26893
+ }
26894
+ .skills-issue-ok {
26895
+ background: var(--success-soft);
26896
+ color: var(--success);
26897
+ }
26898
+
26899
+ .skills-bot-row-focus {
26900
+ background: var(--accent-soft);
26901
+ outline: 1px solid rgba(108, 140, 255, 0.35);
26902
+ }
26903
+
26904
+ .skills-wizard-target-hint {
26905
+ font-size: 12px;
26906
+ padding: 4px 10px;
26907
+ border-radius: 8px;
26908
+ background: var(--accent-soft);
26909
+ color: var(--accent);
26910
+ }
26911
+
26912
+ /* Review round: pack card highlight + library name-filter chip */
26913
+ .skills-pack-card-focus {
26914
+ outline: 1px solid rgba(108, 140, 255, 0.5);
26915
+ background: var(--accent-soft);
26916
+ }
26917
+ .skills-library-filter-chip {
26918
+ font-size: 12px;
26919
+ padding: 2px 10px;
26920
+ border: none;
26921
+ border-radius: 12px;
26922
+ font-family: inherit;
26923
+ cursor: pointer;
26924
+ background: var(--accent-soft);
26925
+ color: var(--accent);
26926
+ white-space: nowrap;
26927
+ }
26928
+ .skills-library-filter-chip:hover {
26929
+ filter: brightness(1.2);
26930
+ text-decoration: underline;
26931
+ }
26932
+
26933
+ /* Unknown pack-health state (pack API never loaded) */
26934
+ .skills-health-unknown {
26935
+ background: var(--surface-muted);
26936
+ color: var(--muted);
26937
+ }
26938
+
26939
+ /* Neutral chip for unresolvable pack refs (pack data not loaded) */
26940
+ .skills-chip-unknown {
26941
+ background: var(--surface-muted);
26942
+ color: var(--muted);
26943
+ }
26944
+
26945
+ /* Actionable rows for referenced-but-not-installed skills under a filter */
26946
+ .skills-missing-list {
26947
+ display: flex;
26948
+ flex-direction: column;
26949
+ gap: 6px;
26950
+ padding: 10px 12px;
26951
+ margin-bottom: 10px;
26952
+ border: 1px dashed var(--border);
26953
+ border-radius: 8px;
26954
+ }
26955
+ .skills-missing-row {
26956
+ display: flex;
26957
+ align-items: center;
26958
+ gap: 10px;
26959
+ }
26960
+ .skills-missing-row-name {
26961
+ font-weight: 600;
26962
+ }
26963
+ .skills-missing-row button {
26964
+ margin-left: auto;
26965
+ font-size: 12px;
26966
+ padding: 2px 10px;
26967
+ }
26968
+
26969
+ /* --- Skills dialogs (install wizard / pack editor / post-install) ---------
26970
+ These class names shipped with the pack redesign but never had any CSS, so
26971
+ the dialogs rendered as raw UA-styled markup. Styled here against the real
26972
+ design tokens so they match the rest of the dashboard in both themes. */
26973
+ .bd-dialog {
26974
+ border: 1px solid var(--border-soft);
26975
+ border-radius: var(--radius-lg);
26976
+ background: var(--surface-raised);
26977
+ color: var(--fg);
26978
+ padding: 0;
26979
+ max-width: min(560px, calc(100vw - 32px));
26980
+ width: 100%;
26981
+ box-shadow: var(--modal-shadow);
26982
+ }
26983
+ .bd-dialog::backdrop {
26984
+ background: var(--modal-backdrop);
26985
+ }
26986
+ .bd-dialog > form {
26987
+ display: flex;
26988
+ flex-direction: column;
26989
+ gap: 14px;
26990
+ padding: 20px 22px;
26991
+ margin: 0;
26992
+ }
26993
+ .bd-dialog h3 {
26994
+ margin: 0;
26995
+ font-size: 16px;
26996
+ font-weight: 650;
26997
+ }
26998
+ .bd-dialog label {
26999
+ display: block;
27000
+ font-size: 13px;
27001
+ color: var(--muted);
27002
+ margin-bottom: 6px;
27003
+ }
27004
+ .bd-dialog input[type="text"],
27005
+ .bd-dialog input:not([type]),
27006
+ .bd-dialog textarea {
27007
+ width: 100%;
27008
+ box-sizing: border-box;
27009
+ padding: 8px 11px;
27010
+ border: 1px solid var(--border);
27011
+ border-radius: var(--radius-sm);
27012
+ background: var(--surface);
27013
+ color: var(--fg);
27014
+ font: inherit;
27015
+ }
27016
+ .bd-dialog input:focus-visible,
27017
+ .bd-dialog textarea:focus-visible {
27018
+ outline: 2px solid var(--accent);
27019
+ outline-offset: 1px;
27020
+ }
27021
+ .bd-dialog input:disabled {
27022
+ background: var(--surface-muted);
27023
+ color: var(--muted);
27024
+ }
27025
+
27026
+ /* Wizard step rail: was rendering as run-together text "1.选择来源2.填写详情" */
27027
+ .skills-wizard-steps {
27028
+ display: flex;
27029
+ gap: 8px;
27030
+ align-items: center;
27031
+ flex-wrap: wrap;
27032
+ font-size: 12px;
27033
+ color: var(--muted);
27034
+ }
27035
+ .skills-wizard-steps span {
27036
+ padding: 3px 10px;
27037
+ border-radius: var(--radius-full);
27038
+ background: var(--surface-muted);
27039
+ border: 1px solid var(--border-soft);
27040
+ white-space: nowrap;
27041
+ }
27042
+ .skills-wizard-steps span.active {
27043
+ background: var(--accent-soft);
27044
+ border-color: var(--accent);
27045
+ color: var(--accent);
27046
+ font-weight: 600;
27047
+ }
27048
+ .skills-wizard-source-hint small,
27049
+ .skills-wizard-summary {
27050
+ display: block;
27051
+ font-size: 12px;
27052
+ color: var(--muted);
27053
+ line-height: 1.6;
27054
+ }
27055
+ .skills-wizard-summary p {
27056
+ margin: 2px 0;
27057
+ }
27058
+
27059
+ .skills-dialog-actions {
27060
+ display: flex;
27061
+ justify-content: flex-end;
27062
+ gap: 8px;
27063
+ padding-top: 4px;
27064
+ border-top: 1px solid var(--border-soft);
27065
+ margin-top: 2px;
27066
+ }
27067
+ .skills-dialog-actions button,
27068
+ .bd-button {
27069
+ height: var(--button-compact-height);
27070
+ padding: 0 var(--button-padding-x);
27071
+ border: 1px solid var(--border);
27072
+ border-radius: var(--radius-full);
27073
+ background: var(--surface);
27074
+ color: var(--fg);
27075
+ font: inherit;
27076
+ cursor: pointer;
27077
+ }
27078
+ .skills-dialog-actions button:hover:not(:disabled),
27079
+ .bd-button:hover:not(:disabled) {
27080
+ border-color: var(--accent);
27081
+ background: var(--accent-soft);
27082
+ }
27083
+ .skills-dialog-actions button.primary,
27084
+ .bd-button.primary {
27085
+ background: var(--accent);
27086
+ border-color: var(--accent);
27087
+ color: var(--on-accent);
27088
+ }
27089
+ .skills-dialog-actions button.primary:hover:not(:disabled),
27090
+ .bd-button.primary:hover:not(:disabled) {
27091
+ background: var(--accent-strong);
27092
+ border-color: var(--accent-strong);
27093
+ }
27094
+ .skills-dialog-actions button.danger,
27095
+ .bd-button.danger {
27096
+ color: var(--danger);
27097
+ border-color: var(--danger);
27098
+ background: var(--danger-soft);
27099
+ }
27100
+ .skills-dialog-actions button:disabled,
27101
+ .bd-button:disabled {
27102
+ opacity: 0.55;
27103
+ cursor: not-allowed;
27104
+ }
27105
+ .bd-button.small {
27106
+ height: 28px;
27107
+ padding: 0 12px;
27108
+ font-size: 12px;
27109
+ }
27110
+
27111
+ /* Candidate / member pick lists inside dialogs */
27112
+ .skills-pack-skill-list {
27113
+ display: flex;
27114
+ flex-direction: column;
27115
+ gap: 2px;
27116
+ max-height: 260px;
27117
+ overflow: auto;
27118
+ padding: 6px;
27119
+ border: 1px solid var(--border-soft);
27120
+ border-radius: var(--radius-sm);
27121
+ background: var(--surface);
27122
+ }
27123
+ .skills-pack-skill-item {
27124
+ display: flex;
27125
+ align-items: baseline;
27126
+ gap: 8px;
27127
+ padding: 6px 8px;
27128
+ border-radius: var(--radius-sm);
27129
+ margin-bottom: 0;
27130
+ color: var(--fg);
27131
+ cursor: pointer;
27132
+ }
27133
+ .skills-pack-skill-item:hover {
27134
+ background: var(--accent-soft);
27135
+ }
27136
+ .skills-pack-skill-name {
27137
+ font-weight: 600;
27138
+ }
27139
+ .skills-pack-skill-desc {
27140
+ color: var(--muted);
27141
+ overflow: hidden;
27142
+ text-overflow: ellipsis;
27143
+ white-space: nowrap;
27144
+ }
27145
+ .skills-pack-include-head {
27146
+ display: flex;
27147
+ align-items: center;
27148
+ gap: 10px;
27149
+ justify-content: space-between;
27150
+ }
27151
+ .skills-pack-skill-search {
27152
+ max-width: 220px;
27153
+ }
27154
+ .skills-pack-select-all {
27155
+ display: flex;
27156
+ align-items: center;
27157
+ gap: 6px;
27158
+ font-size: 12px;
27159
+ color: var(--muted);
27160
+ margin: 6px 0;
27161
+ }
27162
+ .skills-resolved-preview {
27163
+ max-height: 180px;
27164
+ overflow: auto;
27165
+ font-size: 12px;
27166
+ border: 1px solid var(--border-soft);
27167
+ border-radius: var(--radius-sm);
27168
+ padding: 8px 10px;
27169
+ background: var(--surface-muted);
27170
+ }
27171
+ .skills-resolved-item {
27172
+ display: flex;
27173
+ justify-content: space-between;
27174
+ gap: 10px;
27175
+ padding: 2px 0;
27176
+ }
27177
+ .skills-install-selection-head {
27178
+ display: flex;
27179
+ justify-content: space-between;
27180
+ align-items: center;
27181
+ gap: 10px;
27182
+ margin-bottom: 6px;
27183
+ }
27184
+
27185
+ /* Empty states (pack grid / unavailable) */
27186
+ .skills-empty-state {
27187
+ display: flex;
27188
+ flex-direction: column;
27189
+ align-items: center;
27190
+ gap: 10px;
27191
+ padding: 28px 16px;
27192
+ color: var(--muted);
27193
+ text-align: center;
27194
+ }
27195
+ .feed-group-auth-overlay {
27196
+ position: fixed;
27197
+ inset: 0;
27198
+ z-index: 10000;
27199
+ display: grid;
27200
+ place-items: center;
27201
+ padding: 20px;
27202
+ background: rgb(15 23 42 / 62%);
27203
+ }
25706
27204
 
25707
- main:has(.sessions-page) .sessions-view-toggle button {
25708
- width: auto;
25709
- min-width: 0;
25710
- padding-right: 6px;
25711
- padding-left: 6px;
25712
- white-space: nowrap;
25713
- }
27205
+ .feed-group-auth-card {
27206
+ width: min(520px, 100%);
27207
+ padding: 24px;
27208
+ border: 1px solid var(--border);
27209
+ border-radius: 14px;
27210
+ background: var(--panel, #fff);
27211
+ color: #111827;
27212
+ box-shadow: 0 24px 70px rgb(0 0 0 / 28%);
27213
+ }
25714
27214
 
25715
- main:has(.sessions-page) .bulk-bar {
25716
- top: -16px;
25717
- display: grid;
25718
- grid-template-columns: repeat(2, minmax(0, 1fr));
25719
- align-items: center;
25720
- box-shadow: 0 0 0 16px var(--bulk-bar-bg), var(--shadow);
25721
- }
27215
+ .feed-group-auth-card h3 { margin-top: 0; }
27216
+ .feed-group-auth-card p,
27217
+ .feed-group-auth-card label,
27218
+ .feed-group-auth-card label span { color: #111827; }
27219
+ .feed-group-auth-card label { display: grid; gap: 8px; margin-top: 18px; }
27220
+ .feed-group-auth-card input { width: 100%; box-sizing: border-box; color: #111827; background: #fff; }
27221
+ .feed-group-auth-card input::placeholder { color: #4b5563; opacity: 1; }
27222
+ .feed-group-auth-card .actions { margin-top: 20px; justify-content: flex-end; }
27223
+ .feed-group-auth-open {
27224
+ display: inline-flex;
27225
+ align-items: center;
27226
+ justify-content: center;
27227
+ min-height: 42px;
27228
+ margin-top: 4px;
27229
+ padding: 0 20px;
27230
+ border: 1px solid #2563eb;
27231
+ border-radius: 8px;
27232
+ color: #fff;
27233
+ background: #2563eb;
27234
+ font-weight: 700;
27235
+ cursor: pointer;
27236
+ }
25722
27237
 
25723
- main:has(.sessions-page) .bulk-bar[hidden] {
25724
- display: none;
25725
- }
27238
+ .feed-group-auth-open:hover { background: #1d4ed8; }
25726
27239
 
25727
- main:has(.sessions-page) .bulk-bar #bulk-count {
25728
- grid-column: 1 / -1;
25729
- margin-right: 0;
25730
- }
27240
+ .cs-advanced-fields .cs-feed-group {
27241
+ min-width: 0;
27242
+ margin: 0;
27243
+ padding: 0;
27244
+ border: 0;
27245
+ }
25731
27246
 
25732
- main:has(.sessions-page) .bulk-bar button {
25733
- width: 100%;
25734
- min-width: 0;
25735
- padding-right: 8px;
25736
- padding-left: 8px;
25737
- white-space: nowrap;
25738
- }
27247
+ .cs-advanced-fields .cs-feed-group > legend {
27248
+ padding: 0;
27249
+ }
25739
27250
 
25740
- main:has(.sessions-page) .sessions-view-stage,
25741
- main:has(.sessions-page) .sessions-view-stage[data-view="table"] {
25742
- min-height: 0;
25743
- overflow: visible;
25744
- }
27251
+ .feed-group-picker {
27252
+ position: relative;
27253
+ width: 100%;
27254
+ }
25745
27255
 
25746
- main:has(.sessions-page) .sessions-board {
25747
- height: auto;
25748
- min-height: 0;
25749
- overflow: visible;
25750
- }
27256
+ .feed-group-picker > summary {
27257
+ box-sizing: border-box;
27258
+ display: flex;
27259
+ align-items: center;
27260
+ min-height: var(--button-height);
27261
+ padding: 0 42px 0 var(--button-padding-x);
27262
+ border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--border-soft));
27263
+ border-radius: var(--radius-full);
27264
+ background: var(--surface);
27265
+ color: var(--fg);
27266
+ cursor: pointer;
27267
+ list-style: none;
27268
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--border-soft));
27269
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 10%, transparent);
27270
+ }
25751
27271
 
25752
- main:has(.sessions-page) .sessions-topic-view {
25753
- height: auto;
25754
- overflow: visible;
25755
- padding-right: 0;
25756
- padding-left: 0;
25757
- }
27272
+ .feed-group-picker > summary::-webkit-details-marker { display: none; }
25758
27273
 
25759
- main:has(.sessions-page) .session-topic-group > header {
25760
- grid-template-columns: auto minmax(0, 1fr);
25761
- }
27274
+ .feed-group-picker > summary > span,
27275
+ .feed-group-picker-pop > button {
27276
+ min-width: 0;
27277
+ overflow: hidden;
27278
+ text-overflow: ellipsis;
27279
+ white-space: nowrap;
27280
+ }
25762
27281
 
25763
- main:has(.sessions-page) .session-topic-summary {
25764
- grid-column: 1 / -1;
25765
- justify-content: flex-start;
25766
- }
27282
+ .feed-group-picker > summary::after {
27283
+ content: "";
27284
+ position: absolute;
27285
+ right: 18px;
27286
+ width: 8px;
27287
+ height: 8px;
27288
+ border-style: solid;
27289
+ border-width: 0 2px 2px 0;
27290
+ border-color: var(--accent-strong);
27291
+ transform: translateY(-2px) rotate(45deg);
27292
+ }
25767
27293
 
25768
- main:has(.sessions-page) .session-topic-members {
25769
- grid-template-columns: 1fr;
25770
- }
27294
+ .feed-group-picker[open] > summary::after { transform: translateY(2px) rotate(225deg); }
27295
+ .feed-group-picker.is-disabled > summary { cursor: not-allowed; opacity: .58; }
25771
27296
 
25772
- main:has(.sessions-page) .session-board-column {
25773
- height: min(70dvh, 640px);
25774
- min-height: 320px;
25775
- }
27297
+ .feed-group-picker-pop {
27298
+ position: absolute;
27299
+ z-index: 120;
27300
+ left: 0;
27301
+ right: 0;
27302
+ top: calc(100% + 6px);
27303
+ display: grid;
27304
+ max-height: min(420px, calc(100vh - 180px));
27305
+ overflow-y: auto;
27306
+ padding: 8px;
27307
+ border: 1px solid var(--border-soft);
27308
+ border-radius: 14px;
27309
+ background: var(--surface-elevated, var(--surface));
27310
+ box-shadow: 0 16px 40px rgb(0 0 0 / 28%);
27311
+ }
25776
27312
 
25777
- main:has(.sessions-page) .sessions-kanban {
25778
- height: auto;
25779
- overflow: visible;
25780
- }
27313
+ .feed-group-picker-new {
27314
+ position: sticky;
27315
+ z-index: 1;
27316
+ top: 0;
27317
+ display: grid;
27318
+ gap: 6px;
27319
+ padding: 4px 4px 10px;
27320
+ border-bottom: 1px solid var(--border-soft);
27321
+ background: var(--surface-elevated, var(--surface));
27322
+ }
25781
27323
 
25782
- main:has(.sessions-page) .kanban-column {
25783
- height: min(70dvh, 640px);
25784
- min-height: 320px;
25785
- }
27324
+ .feed-group-picker-new > span { color: var(--muted); font-size: 12px; font-weight: 700; }
27325
+ .feed-group-picker-new > input {
27326
+ box-sizing: border-box;
27327
+ width: 100%;
27328
+ min-height: 38px;
27329
+ padding: 0 12px;
27330
+ border: 1px solid var(--border-soft);
27331
+ border-radius: 9px;
27332
+ background: var(--surface);
27333
+ color: var(--fg);
27334
+ }
25786
27335
 
25787
- main:has(.groups-page) .groups-page {
25788
- height: auto;
25789
- min-height: 100%;
25790
- grid-template-rows: none;
25791
- overflow: visible;
25792
- }
27336
+ .feed-group-picker-pop > button {
27337
+ min-height: 38px;
27338
+ padding: 0 12px;
27339
+ border: 0;
27340
+ border-radius: 8px;
27341
+ background: transparent;
27342
+ color: var(--fg);
27343
+ text-align: left;
27344
+ cursor: pointer;
27345
+ }
25793
27346
 
25794
- main:has(.groups-page) .groups-page:has(> .hint-warn) {
25795
- grid-template-rows: none;
25796
- }
27347
+ .feed-group-picker-pop > button:hover,
27348
+ .feed-group-picker-pop > button[aria-current="true"] {
27349
+ background: var(--accent-soft);
27350
+ color: var(--accent-strong);
27351
+ }
25797
27352
 
25798
- main:has(.groups-page) .groups-matrix-section {
25799
- height: min(70dvh, 640px);
25800
- min-height: 320px;
25801
- }
27353
+ /* --- 安装 Skill 表单:主输入优先,高级项折叠 ------------------------------
27354
+ 旧布局用两列 grid,左列堆 4 个区块、右列只有「仓库内路径」,主按钮被挤到
27355
+ 右列中部,视觉上与任何字段都不相关。改为单列:来源输入是主角,路径/Ref/
27356
+ 扫描深度收进折叠区,操作按钮回到表单底部。 */
27357
+ .skills-install-panel .skills-install-grid {
27358
+ display: flex;
27359
+ flex-direction: column;
27360
+ gap: 14px;
27361
+ }
27362
+ .skills-install-panel .skills-source-label {
27363
+ display: flex;
27364
+ flex-direction: column;
27365
+ gap: 8px;
27366
+ }
27367
+ .skills-install-panel .skills-source-control input {
27368
+ width: 100%;
27369
+ box-sizing: border-box;
25802
27370
  }
25803
27371
 
25804
- /* ── Schedule create/edit form modal ─────────────────────────────────────── */
25805
- .schedule-form-overlay {
25806
- position: fixed;
25807
- inset: 0;
25808
- background: color-mix(in srgb, var(--bg) 72%, transparent);
25809
- backdrop-filter: blur(3px);
27372
+ /* 来源说明:默认收起,保留主输入的留白;点击问号后再展开完整格式。 */
27373
+ .skills-source-heading {
27374
+ position: relative;
25810
27375
  display: flex;
25811
27376
  align-items: center;
27377
+ gap: 6px;
27378
+ min-height: 18px;
27379
+ font-size: 12px;
27380
+ color: var(--muted);
27381
+ }
27382
+ .skills-source-heading > label {
27383
+ font-weight: 700;
27384
+ }
27385
+ .skills-source-help-trigger {
27386
+ display: inline-flex;
27387
+ align-items: center;
25812
27388
  justify-content: center;
25813
- z-index: 1000;
25814
- padding: 24px;
27389
+ width: 16px;
27390
+ height: 16px;
27391
+ min-height: 16px;
27392
+ padding: 0;
27393
+ border: 1px solid var(--border-soft);
27394
+ border-radius: var(--radius-full);
27395
+ background: color-mix(in srgb, var(--muted) 7%, transparent);
27396
+ color: var(--muted);
27397
+ cursor: pointer;
27398
+ font-size: 10px;
27399
+ font-weight: 800;
27400
+ line-height: 1;
25815
27401
  }
25816
-
25817
- .schedule-form-dialog {
25818
- background: var(--surface);
27402
+ .skills-source-help-trigger:hover,
27403
+ .skills-source-help-trigger:focus-visible,
27404
+ .skills-source-help-trigger[aria-expanded="true"] {
27405
+ border-color: color-mix(in srgb, var(--accent) 55%, var(--border-soft));
27406
+ background: color-mix(in srgb, var(--accent) 10%, var(--surface));
27407
+ color: var(--accent);
27408
+ outline: none;
27409
+ }
27410
+ .skills-source-help-trigger:focus-visible {
27411
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
27412
+ }
27413
+ .skills-source-help-popover {
27414
+ position: absolute;
27415
+ left: 0;
27416
+ top: calc(100% + 8px);
27417
+ z-index: 1500;
27418
+ box-sizing: border-box;
27419
+ width: min(580px, calc(100vw - 72px));
27420
+ padding: 16px 18px 16px 24px;
25819
27421
  border: 1px solid var(--border-soft);
25820
- border-radius: 12px;
25821
- box-shadow: 0 16px 48px color-mix(in srgb, #000 28%, transparent);
25822
- width: min(560px, 100%);
25823
- max-height: 90dvh;
25824
- overflow-y: auto;
25825
- padding: 24px;
27422
+ border-radius: var(--radius-xl);
27423
+ background: var(--surface-raised);
27424
+ box-shadow: var(--modal-shadow);
27425
+ color: var(--fg);
27426
+ font-size: 12px;
27427
+ font-weight: 500;
27428
+ line-height: 1.5;
25826
27429
  }
25827
-
25828
- .schedule-form-dialog h2 {
25829
- margin: 0 0 16px;
25830
- font-size: 18px;
27430
+ .skills-source-help-popover::before {
27431
+ content: "";
27432
+ position: absolute;
27433
+ left: 10px;
27434
+ top: 16px;
27435
+ bottom: 16px;
27436
+ width: 3px;
27437
+ border-radius: var(--radius-full);
27438
+ background: var(--accent);
25831
27439
  }
25832
-
25833
- .schedule-form {
27440
+ .skills-source-help-head {
25834
27441
  display: flex;
25835
- flex-direction: column;
25836
- gap: 14px;
27442
+ align-items: flex-start;
27443
+ justify-content: space-between;
27444
+ gap: 16px;
27445
+ padding-bottom: 12px;
27446
+ border-bottom: 1px solid var(--border-soft);
25837
27447
  }
25838
-
25839
- .schedule-form-field {
25840
- display: flex;
25841
- flex-direction: column;
25842
- gap: 4px;
27448
+ .skills-source-help-head > div {
27449
+ display: grid;
27450
+ gap: 2px;
25843
27451
  }
25844
-
25845
- .schedule-form-label {
27452
+ .skills-source-help-head strong {
27453
+ color: var(--fg);
25846
27454
  font-size: 13px;
25847
- font-weight: 600;
25848
- color: var(--text);
25849
27455
  }
25850
-
25851
- .schedule-form-field input[type="text"],
25852
- .schedule-form-field textarea {
25853
- width: 100%;
25854
- padding: 8px 10px;
25855
- border: 1px solid var(--border-soft);
25856
- border-radius: 6px;
25857
- background: var(--surface);
25858
- color: var(--text);
25859
- font-size: 13px;
25860
- font-family: inherit;
27456
+ .skills-source-help-head span {
27457
+ color: var(--muted);
25861
27458
  }
25862
-
25863
- .schedule-form-field textarea {
25864
- resize: vertical;
25865
- min-height: 80px;
27459
+ .skills-source-help-close {
27460
+ display: inline-flex;
27461
+ align-items: center;
27462
+ justify-content: center;
27463
+ width: 24px;
27464
+ height: 24px;
27465
+ min-height: 24px;
27466
+ flex: none;
27467
+ padding: 0;
27468
+ border: 0;
27469
+ border-radius: var(--radius-full);
27470
+ background: transparent;
27471
+ color: var(--muted);
27472
+ cursor: pointer;
27473
+ font-size: 18px;
27474
+ line-height: 1;
25866
27475
  }
25867
-
25868
- .schedule-form-help {
25869
- font-size: 11px;
25870
- color: var(--text-dim);
27476
+ .skills-source-help-close:hover,
27477
+ .skills-source-help-close:focus-visible {
27478
+ background: var(--surface-muted);
27479
+ color: var(--fg);
27480
+ outline: none;
25871
27481
  }
25872
-
25873
- .schedule-form-help-with-count {
25874
- display: flex;
25875
- justify-content: space-between;
27482
+ .skills-source-help-list {
27483
+ display: grid;
25876
27484
  gap: 12px;
27485
+ padding-top: 12px;
25877
27486
  }
25878
-
25879
- .schedule-form-help-with-count span {
25880
- flex: none;
27487
+ .skills-source-help-list section {
27488
+ display: grid;
27489
+ gap: 3px;
25881
27490
  }
25882
-
25883
- .schedule-form-radio-group {
25884
- display: flex;
25885
- gap: 16px;
25886
- flex-wrap: wrap;
27491
+ .skills-source-help-list section > strong {
27492
+ color: var(--fg);
27493
+ font-size: 12.5px;
27494
+ }
27495
+ .skills-source-help-list section > span {
27496
+ color: var(--muted);
27497
+ }
27498
+ .skills-source-help-list code {
27499
+ display: block;
27500
+ width: fit-content;
27501
+ max-width: 100%;
27502
+ margin-top: 2px;
27503
+ padding: 4px 7px;
27504
+ border: 1px solid var(--border-soft);
27505
+ border-radius: var(--radius-sm);
27506
+ background: var(--surface-muted);
27507
+ color: var(--fg);
27508
+ font-size: 11px;
27509
+ font-weight: 600;
27510
+ line-height: 1.45;
27511
+ overflow-wrap: anywhere;
27512
+ white-space: normal;
25887
27513
  }
25888
27514
 
25889
- .schedule-form-radio-group label {
25890
- display: inline-flex;
25891
- align-items: center;
25892
- gap: 6px;
25893
- font-size: 13px;
27515
+ /* 高级选项折叠区 */
27516
+ .skills-install-advanced {
27517
+ border: 1px solid var(--border-soft);
27518
+ border-radius: var(--radius-sm);
27519
+ background: var(--surface-muted);
27520
+ }
27521
+ .skills-install-advanced > summary {
25894
27522
  cursor: pointer;
27523
+ padding: 8px 12px;
27524
+ font-size: 13px;
27525
+ color: var(--muted);
27526
+ list-style-position: inside;
25895
27527
  }
25896
-
25897
- .schedule-form-placement {
27528
+ .skills-install-advanced[open] > summary {
27529
+ border-bottom: 1px solid var(--border-soft);
27530
+ color: var(--fg);
27531
+ }
27532
+ .skills-install-advanced-body {
27533
+ display: grid;
27534
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
27535
+ gap: 12px;
27536
+ padding: 12px;
27537
+ }
27538
+ .skills-install-advanced-body .skills-install-field {
25898
27539
  display: flex;
25899
27540
  flex-direction: column;
25900
- gap: 3px;
25901
- padding: 9px 10px;
25902
- border: 1px solid var(--border-soft);
25903
- border-radius: 6px;
25904
- background: color-mix(in srgb, var(--surface-muted) 46%, transparent);
25905
- }
25906
-
25907
- .schedule-form-placement strong {
25908
- color: var(--text);
27541
+ gap: 4px;
25909
27542
  font-size: 13px;
25910
- font-weight: 600;
25911
27543
  }
25912
-
25913
- .schedule-form-toggle {
25914
- flex-direction: row !important;
27544
+ .skills-install-advanced-body .skills-install-field input {
27545
+ width: 100%;
27546
+ box-sizing: border-box;
27547
+ padding: 7px 10px;
27548
+ border: 1px solid var(--border);
27549
+ border-radius: var(--radius-sm);
27550
+ background: var(--surface);
27551
+ color: var(--fg);
27552
+ font: inherit;
27553
+ }
27554
+ .skills-install-advanced-body small {
27555
+ color: var(--muted);
27556
+ font-size: 11.5px;
27557
+ }
27558
+ .skills-scan-toggle {
27559
+ display: flex;
25915
27560
  align-items: flex-start;
25916
27561
  gap: 8px;
27562
+ font-size: 13px;
25917
27563
  }
25918
-
25919
- .schedule-form-toggle > span {
27564
+ .skills-scan-toggle > span {
25920
27565
  display: flex;
25921
27566
  flex-direction: column;
25922
27567
  gap: 2px;
25923
27568
  }
25924
27569
 
25925
- .schedule-form-error {
25926
- color: var(--danger, #e5484d);
25927
- font-size: 12px;
25928
- margin: 0;
25929
- }
25930
-
25931
- .schedule-form-actions {
27570
+ /* 操作行:次要入口在左,主操作在右下 */
27571
+ .skills-install-panel .skills-install-actions {
25932
27572
  display: flex;
25933
- justify-content: flex-end;
27573
+ align-items: center;
27574
+ justify-content: space-between;
25934
27575
  gap: 10px;
25935
- margin-top: 8px;
27576
+ padding-top: 2px;
25936
27577
  }
25937
-
25938
- .schedule-form-cancel,
25939
- .schedule-form-submit {
25940
- padding: 8px 16px;
25941
- border-radius: 6px;
27578
+ .skills-local-discovery-link {
27579
+ border: none;
27580
+ background: none;
27581
+ padding: 0;
27582
+ font: inherit;
25942
27583
  font-size: 13px;
27584
+ color: var(--accent);
25943
27585
  cursor: pointer;
25944
- border: 1px solid var(--border-soft);
25945
- }
25946
-
25947
- .schedule-form-cancel {
25948
- background: transparent;
25949
- color: var(--text);
27586
+ text-decoration: underline;
25950
27587
  }
25951
-
25952
- .schedule-form-submit {
27588
+ .skills-install-panel .skills-install-actions .primary {
27589
+ height: var(--button-compact-height);
27590
+ padding: 0 var(--button-padding-x);
27591
+ border: 1px solid var(--accent);
27592
+ border-radius: var(--radius-full);
25953
27593
  background: var(--accent);
25954
- color: #fff;
25955
- border-color: var(--accent);
25956
- }
25957
-
25958
- .schedule-form-submit:disabled {
25959
- opacity: 0.5;
25960
- cursor: not-allowed;
25961
- }
25962
-
25963
- .schedule-edit-button,
25964
- .schedule-delete-button {
25965
- min-width: 56px !important;
25966
- }
25967
-
25968
- .schedule-delete-button {
25969
- color: var(--danger, #e5484d) !important;
25970
- border-color: color-mix(in srgb, var(--danger, #e5484d) 48%, var(--border-soft)) !important;
25971
- }
25972
- .feed-group-auth-overlay {
25973
- position: fixed;
25974
- inset: 0;
25975
- z-index: 10000;
25976
- display: grid;
25977
- place-items: center;
25978
- padding: 20px;
25979
- background: rgb(15 23 42 / 62%);
25980
- }
25981
-
25982
- .feed-group-auth-card {
25983
- width: min(520px, 100%);
25984
- padding: 24px;
25985
- border: 1px solid var(--border);
25986
- border-radius: 14px;
25987
- background: var(--panel, #fff);
25988
- color: #111827;
25989
- box-shadow: 0 24px 70px rgb(0 0 0 / 28%);
25990
- }
25991
-
25992
- .feed-group-auth-card h3 { margin-top: 0; }
25993
- .feed-group-auth-card p,
25994
- .feed-group-auth-card label,
25995
- .feed-group-auth-card label span { color: #111827; }
25996
- .feed-group-auth-card label { display: grid; gap: 8px; margin-top: 18px; }
25997
- .feed-group-auth-card input { width: 100%; box-sizing: border-box; color: #111827; background: #fff; }
25998
- .feed-group-auth-card input::placeholder { color: #4b5563; opacity: 1; }
25999
- .feed-group-auth-card .actions { margin-top: 20px; justify-content: flex-end; }
26000
- .feed-group-auth-open {
26001
- display: inline-flex;
26002
- align-items: center;
26003
- justify-content: center;
26004
- min-height: 42px;
26005
- margin-top: 4px;
26006
- padding: 0 20px;
26007
- border: 1px solid #2563eb;
26008
- border-radius: 8px;
26009
- color: #fff;
26010
- background: #2563eb;
26011
- font-weight: 700;
27594
+ color: var(--on-accent);
27595
+ font: inherit;
26012
27596
  cursor: pointer;
26013
27597
  }
26014
-
26015
- .feed-group-auth-open:hover { background: #1d4ed8; }
26016
-
26017
- .cs-advanced-fields .cs-feed-group {
26018
- min-width: 0;
26019
- margin: 0;
26020
- padding: 0;
26021
- border: 0;
26022
- }
26023
-
26024
- .cs-advanced-fields .cs-feed-group > legend {
26025
- padding: 0;
27598
+ .skills-install-panel .skills-install-actions .primary:disabled {
27599
+ opacity: 0.55;
27600
+ cursor: not-allowed;
26026
27601
  }