@k2b/cloud 0.6.0-rc.0

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 (540) hide show
  1. package/README.md +98 -0
  2. package/package.json +128 -0
  3. package/public/logo.svg +1 -0
  4. package/scripts/app-favicon.test.ts +49 -0
  5. package/scripts/app-favicon.ts +51 -0
  6. package/scripts/build.ts +205 -0
  7. package/scripts/preload.ts +164 -0
  8. package/scripts/sync-recovery-smoke.ts +200 -0
  9. package/src/_internal/app-favicon.ts +2 -0
  10. package/src/_internal/app-presentation.ts +61 -0
  11. package/src/_internal/app-workspace-state.ts +24 -0
  12. package/src/_internal/bounded-json.ts +47 -0
  13. package/src/_internal/build-metadata.ts +9 -0
  14. package/src/_internal/capabilities.ts +1118 -0
  15. package/src/_internal/define-app.ts +801 -0
  16. package/src/_internal/heartbeat.ts +167 -0
  17. package/src/_internal/help-catalog.ts +241 -0
  18. package/src/_internal/help.ts +95 -0
  19. package/src/_internal/nats-connection.ts +34 -0
  20. package/src/_internal/page-responses.ts +40 -0
  21. package/src/_internal/process-sync.ts +117 -0
  22. package/src/_internal/readiness.ts +3 -0
  23. package/src/_internal/registry-validation.ts +136 -0
  24. package/src/_internal/registry-watch.ts +52 -0
  25. package/src/_internal/registry.ts +338 -0
  26. package/src/_internal/runtime-compatibility.ts +64 -0
  27. package/src/_internal/runtime-context.ts +84 -0
  28. package/src/_internal/runtime-watcher.ts +78 -0
  29. package/src/_internal/static-assets.ts +86 -0
  30. package/src/_internal/status-preserving-ssr.ts +49 -0
  31. package/src/access/PermissionEditor.tsx +486 -0
  32. package/src/access/ResourceApiKeys.tsx +271 -0
  33. package/src/access/messages.ts +121 -0
  34. package/src/access/ui.ts +16 -0
  35. package/src/account/Avatar.tsx +28 -0
  36. package/src/account/EntitySearch.tsx +363 -0
  37. package/src/account/avatar-upload-dialog.tsx +197 -0
  38. package/src/account/avatar-upload.ts +149 -0
  39. package/src/account/ui.ts +3 -0
  40. package/src/ai/admin.ts +47 -0
  41. package/src/ai/approval-routes.ts +130 -0
  42. package/src/ai/approvals.ts +139 -0
  43. package/src/ai/assistant-models.ts +61 -0
  44. package/src/ai/attachments.ts +40 -0
  45. package/src/ai/browser.ts +92 -0
  46. package/src/ai/capabilities.ts +714 -0
  47. package/src/ai/capability-execution.ts +151 -0
  48. package/src/ai/chat/blocks.render.test.tsx +1108 -0
  49. package/src/ai/chat/blocks.tsx +730 -0
  50. package/src/ai/chat/builtin-tools.tsx +428 -0
  51. package/src/ai/chat/capability-table.tsx +87 -0
  52. package/src/ai/chat/composer-adapter.ts +169 -0
  53. package/src/ai/chat/file-tools.tsx +81 -0
  54. package/src/ai/chat/message-actions.tsx +370 -0
  55. package/src/ai/chat/message-utils.ts +479 -0
  56. package/src/ai/chat/messages.ts +43 -0
  57. package/src/ai/chat/presentation.tsx +395 -0
  58. package/src/ai/chat/primitives.tsx +3 -0
  59. package/src/ai/chat/tool-disclosure.tsx +41 -0
  60. package/src/ai/chat/turn-navigator-utils.ts +28 -0
  61. package/src/ai/chat/turn-navigator.tsx +164 -0
  62. package/src/ai/chat/user-message.tsx +149 -0
  63. package/src/ai/chat/visual-tools.tsx +435 -0
  64. package/src/ai/chat/web-tools.tsx +202 -0
  65. package/src/ai/chat-task-contracts.ts +113 -0
  66. package/src/ai/chat-tasks.ts +952 -0
  67. package/src/ai/client/controller.ts +1211 -0
  68. package/src/ai/client/file-source.ts +95 -0
  69. package/src/ai/client/live-connection.ts +140 -0
  70. package/src/ai/client/projection.ts +178 -0
  71. package/src/ai/client/transport.ts +111 -0
  72. package/src/ai/compaction.ts +182 -0
  73. package/src/ai/credentials.ts +124 -0
  74. package/src/ai/default-tool-contracts.ts +108 -0
  75. package/src/ai/default-tools.ts +127 -0
  76. package/src/ai/enrich.ts +280 -0
  77. package/src/ai/executor.ts +1624 -0
  78. package/src/ai/fetch-file-tool.ts +313 -0
  79. package/src/ai/file-context.ts +92 -0
  80. package/src/ai/file-media-type.ts +28 -0
  81. package/src/ai/file-mount.ts +16 -0
  82. package/src/ai/file-tools.ts +566 -0
  83. package/src/ai/files-store.ts +390 -0
  84. package/src/ai/firecrawl-tools.ts +305 -0
  85. package/src/ai/grids-skill.ts +126 -0
  86. package/src/ai/http.ts +265 -0
  87. package/src/ai/index.ts +337 -0
  88. package/src/ai/kit-skill.ts +22 -0
  89. package/src/ai/limits.ts +5 -0
  90. package/src/ai/live-events.ts +289 -0
  91. package/src/ai/live-messages.ts +45 -0
  92. package/src/ai/live-outbox.ts +102 -0
  93. package/src/ai/live-routes.ts +412 -0
  94. package/src/ai/live.ts +2 -0
  95. package/src/ai/maintenance.ts +302 -0
  96. package/src/ai/markdown-pdf-tool.ts +95 -0
  97. package/src/ai/memories.ts +605 -0
  98. package/src/ai/memory-learning-runs.ts +222 -0
  99. package/src/ai/memory-learning.ts +619 -0
  100. package/src/ai/memory-tool.ts +120 -0
  101. package/src/ai/memory-workflow-evidence.ts +158 -0
  102. package/src/ai/migrate.ts +2082 -0
  103. package/src/ai/model-access-migrate.ts +30 -0
  104. package/src/ai/model-access.ts +191 -0
  105. package/src/ai/personal-agent.ts +6 -0
  106. package/src/ai/prefs.ts +72 -0
  107. package/src/ai/project-tool.ts +94 -0
  108. package/src/ai/projects-routes.ts +277 -0
  109. package/src/ai/projects.ts +902 -0
  110. package/src/ai/protocol.ts +279 -0
  111. package/src/ai/provider.ts +73 -0
  112. package/src/ai/public-projection.ts +25 -0
  113. package/src/ai/resource-markers.ts +31 -0
  114. package/src/ai/resource-refs.ts +70 -0
  115. package/src/ai/routes.ts +1131 -0
  116. package/src/ai/runtime-tools.ts +39 -0
  117. package/src/ai/runtime.ts +544 -0
  118. package/src/ai/settings.ts +529 -0
  119. package/src/ai/short-id.ts +45 -0
  120. package/src/ai/skill-catalog.ts +73 -0
  121. package/src/ai/skill-format.ts +145 -0
  122. package/src/ai/skill-seeds.ts +430 -0
  123. package/src/ai/skill-tool.ts +81 -0
  124. package/src/ai/skills-routes.ts +143 -0
  125. package/src/ai/skills.ts +934 -0
  126. package/src/ai/solid.ts +27 -0
  127. package/src/ai/store.ts +3113 -0
  128. package/src/ai/stream.ts +308 -0
  129. package/src/ai/structured-runs.ts +66 -0
  130. package/src/ai/structured.ts +186 -0
  131. package/src/ai/system-prompt.ts +170 -0
  132. package/src/ai/task-prompt.ts +22 -0
  133. package/src/ai/timeline.ts +148 -0
  134. package/src/ai/tool-audit.ts +177 -0
  135. package/src/ai/tool-result-budget.ts +16 -0
  136. package/src/ai/tools.ts +155 -0
  137. package/src/ai/types.ts +967 -0
  138. package/src/ai/ui.tsx +39 -0
  139. package/src/ai/usage-migrate.ts +81 -0
  140. package/src/ai/usage.ts +315 -0
  141. package/src/ai/validate.ts +54 -0
  142. package/src/ai/vision-tool.ts +79 -0
  143. package/src/api/accounts-entities.ts +174 -0
  144. package/src/api/admin-ai-projects.ts +74 -0
  145. package/src/api/admin-ai-skills.ts +76 -0
  146. package/src/api/admin-ai-usage.ts +42 -0
  147. package/src/api/admin-core-settings.ts +508 -0
  148. package/src/api/admin-identity.ts +148 -0
  149. package/src/api/admin-lifecycle.ts +206 -0
  150. package/src/api/admin-linux-identities.ts +66 -0
  151. package/src/api/announcements.ts +131 -0
  152. package/src/api/app-approval.ts +129 -0
  153. package/src/api/apps.ts +51 -0
  154. package/src/api/auth/schemas.ts +54 -0
  155. package/src/api/auth.ts +370 -0
  156. package/src/api/capabilities.ts +658 -0
  157. package/src/api/help-messages.ts +19 -0
  158. package/src/api/help.ts +78 -0
  159. package/src/api/index.ts +108 -0
  160. package/src/api/mcp.ts +744 -0
  161. package/src/api/me-rail.ts +45 -0
  162. package/src/api/me.ts +753 -0
  163. package/src/api/search/schemas.ts +79 -0
  164. package/src/api/search.bench.ts +185 -0
  165. package/src/api/search.ts +407 -0
  166. package/src/api/sync-ops.ts +79 -0
  167. package/src/api/widgets.ts +143 -0
  168. package/src/browser/CloudResourceSearch.behavior.test.tsx +74 -0
  169. package/src/browser/CloudResourceSearch.tsx +791 -0
  170. package/src/browser/app-approval-vault.ts +305 -0
  171. package/src/browser/app-approval.ts +234 -0
  172. package/src/browser/live-websocket.ts +268 -0
  173. package/src/browser/locale-preference.ts +25 -0
  174. package/src/browser/notification-target.ts +27 -0
  175. package/src/browser/notification-timeout.ts +14 -0
  176. package/src/browser/notifications.ts +181 -0
  177. package/src/browser/resource-clipboard.ts +70 -0
  178. package/src/browser/resource-picker.tsx +39 -0
  179. package/src/browser/resource-search-messages.ts +55 -0
  180. package/src/browser/resource-search.ts +27 -0
  181. package/src/capabilities/client.ts +149 -0
  182. package/src/capabilities/response.ts +39 -0
  183. package/src/capabilities/server.ts +215 -0
  184. package/src/capabilities/signals.ts +4 -0
  185. package/src/capabilities/testing.ts +12 -0
  186. package/src/capabilities/types.ts +32 -0
  187. package/src/cli/access.ts +499 -0
  188. package/src/cli/account.ts +382 -0
  189. package/src/cli/admin/account-administration.ts +45 -0
  190. package/src/cli/admin/account-categories.ts +49 -0
  191. package/src/cli/admin/ai-usage.ts +118 -0
  192. package/src/cli/admin/app-sign-in.ts +49 -0
  193. package/src/cli/admin/data.ts +343 -0
  194. package/src/cli/admin/documentation.ts +34 -0
  195. package/src/cli/admin/gateway.ts +155 -0
  196. package/src/cli/admin/index.ts +61 -0
  197. package/src/cli/admin/instance.ts +250 -0
  198. package/src/cli/admin/jobs.ts +223 -0
  199. package/src/cli/admin/legal.ts +122 -0
  200. package/src/cli/admin/linux.ts +53 -0
  201. package/src/cli/admin/logs.ts +324 -0
  202. package/src/cli/admin/metrics.ts +142 -0
  203. package/src/cli/admin/nats.ts +167 -0
  204. package/src/cli/admin/notifications.ts +516 -0
  205. package/src/cli/admin/shared.ts +113 -0
  206. package/src/cli/admin/sync.ts +188 -0
  207. package/src/cli/admin/telemetry.ts +314 -0
  208. package/src/cli/admin/webhooks.ts +222 -0
  209. package/src/cli/admin/workflows.ts +367 -0
  210. package/src/cli/apps.ts +40 -0
  211. package/src/cli/capabilities.ts +239 -0
  212. package/src/cli/commands.ts +604 -0
  213. package/src/cli/index.ts +61 -0
  214. package/src/cli/locale.ts +31 -0
  215. package/src/cli/output.ts +58 -0
  216. package/src/clients/core.ts +20 -0
  217. package/src/config/env.ts +54 -0
  218. package/src/config/index.ts +6 -0
  219. package/src/contracts/account-categories.ts +62 -0
  220. package/src/contracts/announcements.ts +121 -0
  221. package/src/contracts/app-approval.ts +197 -0
  222. package/src/contracts/app.ts +162 -0
  223. package/src/contracts/capabilities.ts +484 -0
  224. package/src/contracts/index.ts +14 -0
  225. package/src/contracts/notification-live.ts +66 -0
  226. package/src/contracts/notification-types.ts +235 -0
  227. package/src/contracts/posix.ts +69 -0
  228. package/src/contracts/profile.ts +85 -0
  229. package/src/contracts/rail-preferences.ts +53 -0
  230. package/src/contracts/registry.ts +110 -0
  231. package/src/contracts/resource-clipboard.ts +33 -0
  232. package/src/contracts/settings-types.ts +98 -0
  233. package/src/contracts/shared.ts +408 -0
  234. package/src/contracts/user-notifications.ts +101 -0
  235. package/src/contracts/widgets.ts +183 -0
  236. package/src/desktop/index.ts +704 -0
  237. package/src/desktop/solid.tsx +938 -0
  238. package/src/index.ts +58 -0
  239. package/src/server/actor.ts +41 -0
  240. package/src/server/api/index.ts +2 -0
  241. package/src/server/api/respond.ts +96 -0
  242. package/src/server/api-client.ts +54 -0
  243. package/src/server/app-context.ts +39 -0
  244. package/src/server/help.ts +187 -0
  245. package/src/server/index.ts +89 -0
  246. package/src/server/locale.ts +55 -0
  247. package/src/server/middleware/auth.ts +386 -0
  248. package/src/server/middleware/index.ts +28 -0
  249. package/src/server/middleware/invocation.ts +55 -0
  250. package/src/server/middleware/middleware.ts +65 -0
  251. package/src/server/middleware/openapi.ts +126 -0
  252. package/src/server/middleware/rate-limit.ts +125 -0
  253. package/src/server/middleware/request-logger.ts +41 -0
  254. package/src/server/middleware/route-template.ts +46 -0
  255. package/src/server/middleware/runtime.ts +22 -0
  256. package/src/server/middleware/settings.ts +55 -0
  257. package/src/server/middleware/validator.ts +49 -0
  258. package/src/server/middleware/workload.ts +22 -0
  259. package/src/server/ratelimit.ts +151 -0
  260. package/src/server/request-cookies.ts +18 -0
  261. package/src/server/services/access.ts +644 -0
  262. package/src/server/services/freeipa/client.ts +137 -0
  263. package/src/server/services/freeipa/index.ts +9 -0
  264. package/src/server/services/freeipa/session.ts +123 -0
  265. package/src/server/services/freeipa/test-certificates.ts +44 -0
  266. package/src/server/services/freeipa/tls.ts +44 -0
  267. package/src/server/services/freeipa/transport.ts +116 -0
  268. package/src/server/services/freeipa/util.ts +59 -0
  269. package/src/server/services/geo.ts +198 -0
  270. package/src/server/services/index.ts +48 -0
  271. package/src/server/services/pagination.ts +22 -0
  272. package/src/server/services/services.ts +13 -0
  273. package/src/server/time.ts +33 -0
  274. package/src/services/account-category-policy.ts +51 -0
  275. package/src/services/account-lifecycle/audit.ts +41 -0
  276. package/src/services/account-lifecycle/index.ts +940 -0
  277. package/src/services/account-lifecycle/ipa-backfill.ts +152 -0
  278. package/src/services/account-lifecycle/notification-sender.ts +13 -0
  279. package/src/services/account-lifecycle/scheduler.ts +506 -0
  280. package/src/services/account-model.ts +22 -0
  281. package/src/services/accounts/app.ts +1671 -0
  282. package/src/services/accounts/authz.ts +44 -0
  283. package/src/services/accounts/avatar.ts +120 -0
  284. package/src/services/accounts/base-group.ts +11 -0
  285. package/src/services/accounts/base-user.ts +46 -0
  286. package/src/services/accounts/duplicate-emails.ts +82 -0
  287. package/src/services/accounts/entities.ts +622 -0
  288. package/src/services/accounts/group-sql.ts +106 -0
  289. package/src/services/accounts/groups.ts +272 -0
  290. package/src/services/accounts/index.ts +14 -0
  291. package/src/services/accounts/ipa-data.ts +66 -0
  292. package/src/services/accounts/lifecycle.ts +2 -0
  293. package/src/services/accounts/local-groups.ts +499 -0
  294. package/src/services/accounts/model.ts +129 -0
  295. package/src/services/accounts/notification-sender.ts +31 -0
  296. package/src/services/accounts/posix.ts +386 -0
  297. package/src/services/accounts/request-policy.ts +11 -0
  298. package/src/services/accounts/switching.ts +126 -0
  299. package/src/services/accounts/users.ts +745 -0
  300. package/src/services/announcements/index.ts +224 -0
  301. package/src/services/app-approval.ts +498 -0
  302. package/src/services/audit/index.ts +438 -0
  303. package/src/services/auth-flows/index.ts +15 -0
  304. package/src/services/auth-flows/ipa.ts +197 -0
  305. package/src/services/auth-flows/magic-link.ts +185 -0
  306. package/src/services/auth-flows/notification-sender.ts +10 -0
  307. package/src/services/auth-flows/password-reset.ts +268 -0
  308. package/src/services/auth-flows/proxy-return.ts +49 -0
  309. package/src/services/document-extraction.ts +148 -0
  310. package/src/services/freeipa-config.ts +179 -0
  311. package/src/services/gateway.ts +186 -0
  312. package/src/services/identity/constants.ts +18 -0
  313. package/src/services/identity/index.ts +52 -0
  314. package/src/services/identity/invocation-actor.ts +120 -0
  315. package/src/services/identity/invocation-authority.ts +53 -0
  316. package/src/services/identity/invocation-operations.ts +15 -0
  317. package/src/services/identity/invocation-token.ts +276 -0
  318. package/src/services/identity/key-config.ts +41 -0
  319. package/src/services/identity/key-ring.ts +530 -0
  320. package/src/services/identity/metrics.ts +29 -0
  321. package/src/services/identity/routes.ts +18 -0
  322. package/src/services/identity/runtime-config.ts +88 -0
  323. package/src/services/identity/session-token.ts +152 -0
  324. package/src/services/identity/signer-refresh.ts +44 -0
  325. package/src/services/identity/workload-auth.ts +64 -0
  326. package/src/services/index.ts +187 -0
  327. package/src/services/ipa/auth.ts +216 -0
  328. package/src/services/ipa/connection.ts +57 -0
  329. package/src/services/ipa/effective-groups.ts +70 -0
  330. package/src/services/ipa/groups.ts +722 -0
  331. package/src/services/ipa/guard.ts +17 -0
  332. package/src/services/ipa/index.ts +17 -0
  333. package/src/services/ipa/posix.ts +19 -0
  334. package/src/services/ipa/profile.ts +132 -0
  335. package/src/services/ipa/runtime.ts +28 -0
  336. package/src/services/ipa/search.ts +154 -0
  337. package/src/services/ipa/service-account.ts +15 -0
  338. package/src/services/ipa/sync-planning.ts +100 -0
  339. package/src/services/ipa/sync.ts +862 -0
  340. package/src/services/ipa/users.ts +806 -0
  341. package/src/services/legal-consent.ts +76 -0
  342. package/src/services/logging/index.ts +477 -0
  343. package/src/services/logging/redaction.ts +20 -0
  344. package/src/services/logging/trace.ts +1231 -0
  345. package/src/services/mandates/index.ts +855 -0
  346. package/src/services/mandates/policy.ts +85 -0
  347. package/src/services/network-security.ts +31 -0
  348. package/src/services/notifications/batches.ts +722 -0
  349. package/src/services/notifications/browser.ts +252 -0
  350. package/src/services/notifications/catalog.ts +113 -0
  351. package/src/services/notifications/channels.ts +104 -0
  352. package/src/services/notifications/dispatcher.ts +139 -0
  353. package/src/services/notifications/email.ts +118 -0
  354. package/src/services/notifications/index.ts +633 -0
  355. package/src/services/notifications/live.ts +50 -0
  356. package/src/services/notifications/observability.ts +407 -0
  357. package/src/services/notifications/platform.ts +421 -0
  358. package/src/services/notifications/runtime.ts +120 -0
  359. package/src/services/notifications/user.ts +248 -0
  360. package/src/services/notifications/web-push-transport.ts +135 -0
  361. package/src/services/oauth-tokens.ts +209 -0
  362. package/src/services/outbox.ts +187 -0
  363. package/src/services/pdf/gotenberg.ts +290 -0
  364. package/src/services/pdf/index.ts +43 -0
  365. package/src/services/pdf/markdown.ts +209 -0
  366. package/src/services/pdf/template-preview.ts +122 -0
  367. package/src/services/postgres.ts +76 -0
  368. package/src/services/providers/index.ts +27 -0
  369. package/src/services/providers/local/auth.ts +51 -0
  370. package/src/services/providers/local/index.ts +4 -0
  371. package/src/services/providers/local/users.ts +263 -0
  372. package/src/services/rail-preferences.ts +27 -0
  373. package/src/services/runtime-lifecycle.ts +191 -0
  374. package/src/services/secrets.ts +10 -0
  375. package/src/services/service-account-credentials.ts +891 -0
  376. package/src/services/service-accounts.ts +184 -0
  377. package/src/services/session/index.ts +236 -0
  378. package/src/services/session/test-fixture.ts +18 -0
  379. package/src/services/session/user.ts +144 -0
  380. package/src/services/settings/api.ts +61 -0
  381. package/src/services/settings/app.ts +86 -0
  382. package/src/services/settings/core-settings.ts +796 -0
  383. package/src/services/settings/crypto.ts +69 -0
  384. package/src/services/settings/defaults.ts +374 -0
  385. package/src/services/settings/index.ts +215 -0
  386. package/src/services/settings/namespace.ts +9 -0
  387. package/src/services/settings/snapshot.ts +49 -0
  388. package/src/services/settings/store.ts +241 -0
  389. package/src/services/settings/templates.ts +4 -0
  390. package/src/services/sync-ops.ts +403 -0
  391. package/src/services/topic-cursor.ts +22 -0
  392. package/src/services/weather/forecast.ts +323 -0
  393. package/src/services/weather/geo.ts +119 -0
  394. package/src/services/weather/index.ts +67 -0
  395. package/src/services/weather/location.ts +24 -0
  396. package/src/services/weather/locations.ts +133 -0
  397. package/src/services/weather/migrate.ts +45 -0
  398. package/src/services/weather/settings.ts +66 -0
  399. package/src/services/weather/short-id.ts +57 -0
  400. package/src/services/weather/types.ts +61 -0
  401. package/src/services/weather/ui.ts +50 -0
  402. package/src/services/webauthn.ts +385 -0
  403. package/src/shared/account-action-notice.ts +70 -0
  404. package/src/shared/account-display.ts +15 -0
  405. package/src/shared/account-session.ts +15 -0
  406. package/src/shared/ai-platform-prompt.ts +134 -0
  407. package/src/shared/ai-usage.ts +49 -0
  408. package/src/shared/app-presentation.ts +48 -0
  409. package/src/shared/app-url.ts +12 -0
  410. package/src/shared/branding.ts +14 -0
  411. package/src/shared/capability-messages.ts +70 -0
  412. package/src/shared/email-html.ts +54 -0
  413. package/src/shared/format.ts +91 -0
  414. package/src/shared/help.ts +68 -0
  415. package/src/shared/icons.ts +400 -0
  416. package/src/shared/index.ts +54 -0
  417. package/src/shared/locale.ts +48 -0
  418. package/src/shared/login-method.ts +44 -0
  419. package/src/shared/markdown/client.ts +130 -0
  420. package/src/shared/markdown/extensions/code.ts +105 -0
  421. package/src/shared/markdown/extensions/guided-help.ts +100 -0
  422. package/src/shared/markdown/extensions/images.ts +79 -0
  423. package/src/shared/markdown/extensions/info-blocks.ts +97 -0
  424. package/src/shared/markdown/extensions/katex.ts +120 -0
  425. package/src/shared/markdown/extensions/links.ts +43 -0
  426. package/src/shared/markdown/extensions/mark.ts +48 -0
  427. package/src/shared/markdown/extensions/sub-sup.ts +60 -0
  428. package/src/shared/markdown/extensions/tables.ts +109 -0
  429. package/src/shared/markdown/extensions/task-list.ts +53 -0
  430. package/src/shared/markdown/formula.ts +1187 -0
  431. package/src/shared/markdown/index.ts +193 -0
  432. package/src/shared/markdown/shared.ts +36 -0
  433. package/src/shared/mock-cover.ts +130 -0
  434. package/src/shared/network-address.ts +106 -0
  435. package/src/shared/redirect.ts +56 -0
  436. package/src/shared/template-rendering.ts +140 -0
  437. package/src/shared/theme.ts +68 -0
  438. package/src/shared/time.ts +13 -0
  439. package/src/ssr/AdminLayout.tsx +53 -0
  440. package/src/ssr/AdminSidebar.tsx +50 -0
  441. package/src/ssr/AppLaunchpad.island.tsx +236 -0
  442. package/src/ssr/AppWorkspaceController.island.tsx +21 -0
  443. package/src/ssr/BrowserNotifications.island.tsx +135 -0
  444. package/src/ssr/GlobalAnnouncements.island.tsx +142 -0
  445. package/src/ssr/GlobalSearchDialog.behavior.test.tsx +96 -0
  446. package/src/ssr/GlobalSearchDialog.tsx +35 -0
  447. package/src/ssr/GlobalSearchHelpDialog.tsx +104 -0
  448. package/src/ssr/GlobalSearchTrigger.island.tsx +55 -0
  449. package/src/ssr/HotkeysHelpRail.island.tsx +55 -0
  450. package/src/ssr/Layout.render.test.tsx +148 -0
  451. package/src/ssr/Layout.tsx +292 -0
  452. package/src/ssr/LayoutBreadcrumbs.island.tsx +44 -0
  453. package/src/ssr/LayoutFooter.tsx +22 -0
  454. package/src/ssr/LayoutHeader.tsx +81 -0
  455. package/src/ssr/LayoutHelp.tsx +869 -0
  456. package/src/ssr/LayoutPreferences.island.tsx +36 -0
  457. package/src/ssr/LayoutRail.tsx +58 -0
  458. package/src/ssr/MinimalLayout.tsx +46 -0
  459. package/src/ssr/PageError.tsx +29 -0
  460. package/src/ssr/ProfilePreferences.island.tsx +92 -0
  461. package/src/ssr/RailApps.island.tsx +61 -0
  462. package/src/ssr/RailEditor.tsx +293 -0
  463. package/src/ssr/RegisteredHelpDocuments.island.tsx +3 -0
  464. package/src/ssr/TimezoneCookie.island.tsx +23 -0
  465. package/src/ssr/admin-active-link.ts +47 -0
  466. package/src/ssr/admin-navigation.ts +78 -0
  467. package/src/ssr/app-appearance.ts +23 -0
  468. package/src/ssr/app-navigation.ts +41 -0
  469. package/src/ssr/help-messages.ts +104 -0
  470. package/src/ssr/index.ts +14 -0
  471. package/src/ssr/islands/SearchBar.island.tsx +80 -0
  472. package/src/ssr/islands/index.ts +16 -0
  473. package/src/ssr/layout-context.ts +17 -0
  474. package/src/ssr/layout-help-markdown.ts +9 -0
  475. package/src/ssr/layout-help-navigation.ts +24 -0
  476. package/src/ssr/layout-help-url.ts +5 -0
  477. package/src/ssr/layout-runtime.ts +22 -0
  478. package/src/ssr/page-error-messages.ts +25 -0
  479. package/src/ssr/platform-messages.ts +135 -0
  480. package/src/ssr/preference-controller.ts +44 -0
  481. package/src/ssr/profile-preferences-messages.ts +29 -0
  482. package/src/ssr/rail-context.ts +21 -0
  483. package/src/ssr/rail-messages.ts +66 -0
  484. package/src/ssr/rail-navigation.ts +60 -0
  485. package/src/ssr/runtime.ts +31 -0
  486. package/src/ssr/url-filter.ts +127 -0
  487. package/src/styles/base-popover.css +36 -0
  488. package/src/styles/effects.css +851 -0
  489. package/src/styles/global.css +268 -0
  490. package/src/styles/input.css +58 -0
  491. package/src/styles/tokens.css +230 -0
  492. package/src/styles/utilities-buttons.css +405 -0
  493. package/src/styles/utilities-data.css +33 -0
  494. package/src/styles/utilities-feedback.css +232 -0
  495. package/src/styles/utilities-layout.css +603 -0
  496. package/src/styles/utilities-markdown-editor.css +525 -0
  497. package/src/styles/utilities-markdown-table.css +234 -0
  498. package/src/styles/utilities-navigation.css +1054 -0
  499. package/src/types/ambient.d.ts +24 -0
  500. package/src/workflows/ai/index.ts +17 -0
  501. package/src/workflows/ai/runtime.ts +286 -0
  502. package/src/workflows/ai/store.ts +314 -0
  503. package/src/workflows/ai/types.ts +111 -0
  504. package/src/workflows/ai-actions.ts +269 -0
  505. package/src/workflows/authoring.ts +88 -0
  506. package/src/workflows/builtins.ts +193 -0
  507. package/src/workflows/contracts.ts +280 -0
  508. package/src/workflows/definition.ts +334 -0
  509. package/src/workflows/editor.ts +113 -0
  510. package/src/workflows/index.ts +71 -0
  511. package/src/workflows/language/binder.ts +45 -0
  512. package/src/workflows/language/canonical.ts +29 -0
  513. package/src/workflows/language/compiler.ts +396 -0
  514. package/src/workflows/language/expressions.ts +34 -0
  515. package/src/workflows/language/index.ts +20 -0
  516. package/src/workflows/language/references.ts +55 -0
  517. package/src/workflows/language/schema.ts +134 -0
  518. package/src/workflows/language/strict-yaml.ts +131 -0
  519. package/src/workflows/manifest.ts +24 -0
  520. package/src/workflows/module.ts +12 -0
  521. package/src/workflows/runtime/coordinator.ts +115 -0
  522. package/src/workflows/runtime/executor.ts +1003 -0
  523. package/src/workflows/runtime/index.ts +60 -0
  524. package/src/workflows/runtime/instant.ts +8 -0
  525. package/src/workflows/runtime/ports.ts +213 -0
  526. package/src/workflows/runtime/schedule.ts +203 -0
  527. package/src/workflows/runtime/trigger.ts +37 -0
  528. package/src/workflows/runtime/wake.ts +13 -0
  529. package/src/workflows/store/actions.ts +438 -0
  530. package/src/workflows/store/budget.ts +145 -0
  531. package/src/workflows/store/definitions.ts +345 -0
  532. package/src/workflows/store/events.ts +383 -0
  533. package/src/workflows/store/index.ts +107 -0
  534. package/src/workflows/store/observability.ts +594 -0
  535. package/src/workflows/store/runs.ts +975 -0
  536. package/src/workflows/store/transaction.ts +23 -0
  537. package/src/workflows/store/worker.ts +439 -0
  538. package/src/workflows/testing/conformance.ts +72 -0
  539. package/src/workflows/testing/index.ts +11 -0
  540. package/src/workflows/testing/process-fixtures.ts +275 -0
@@ -0,0 +1,268 @@
1
+ @import "tailwindcss";
2
+ @import "@k2b/ui/styles.css";
3
+ @plugin "@tailwindcss/typography";
4
+
5
+ /* global.css carries the Cloud shell, integration surfaces, and shared app
6
+ utilities. Portable UI primitives live in @k2b/ui. This stylesheet is
7
+ served to every container via the gateway; per-app classes belong in each
8
+ app's own app.css and must not be scanned here. */
9
+ @source "../**/*.{ts,tsx}";
10
+
11
+ @custom-variant dark (&:where(.dark, .dark *));
12
+ @custom-variant light (html:not(.dark) &);
13
+
14
+ /* IBM Plex font-face rules are emitted as `/public/fonts.css` during the core
15
+ build. Keeping them out of global.css avoids Bun inlining the font binaries
16
+ as base64 into the render-blocking stylesheet. */
17
+ /* Tabler icon font rules are emitted as `/public/tabler-icons.css` during the
18
+ core build and preloaded by the shared HTML template to reduce icon flicker
19
+ without changing icon layout semantics. */
20
+
21
+ @import "./tokens.css";
22
+ @import "./utilities-buttons.css";
23
+ @import "./utilities-layout.css";
24
+ @import "./utilities-navigation.css";
25
+ @import "./utilities-feedback.css";
26
+ @import "./utilities-data.css";
27
+ @import "./utilities-markdown-table.css";
28
+ @import "./utilities-markdown-editor.css";
29
+ @import "./base-popover.css";
30
+ @import "./effects.css";
31
+ @import "./input.css";
32
+
33
+ @theme {
34
+ --color-dark: rgb(9 9 11);
35
+ --color-selection-bg: rgb(147 197 253 / 0.45);
36
+ --color-selection-fg: rgb(15 23 42);
37
+
38
+ /* Type system — IBM Plex family.
39
+ - Sans: default body / UI text (readable, neutral, slight personality)
40
+ - Mono: code, IDs, technical values (matches sans proportions)
41
+ - Condensed: badges, tags, dense labels where Sans is too wide
42
+
43
+ Tailwind 4 derives `font-sans` / `font-mono` / `font-condensed`
44
+ utilities from these tokens. CSS consumers can also reference them
45
+ via `var(--font-sans)` etc. (e.g. CodeMirror theme overrides). */
46
+ --font-sans: "IBM Plex Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
47
+ --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
48
+ --font-condensed: "IBM Plex Sans Condensed", "IBM Plex Sans", system-ui, sans-serif;
49
+ }
50
+
51
+ .cloud-app-canvas {
52
+ padding: var(--ui-space-shell);
53
+ background: linear-gradient(
54
+ var(--app-canvas-angle, 135deg),
55
+ color-mix(in srgb, var(--app-canvas-from, var(--color-zinc-50)) var(--app-canvas-strength, 0%), var(--color-zinc-50)),
56
+ color-mix(
57
+ in srgb,
58
+ var(--app-canvas-via, var(--app-canvas-from, var(--color-zinc-50))) var(--app-canvas-strength, 0%),
59
+ var(--color-zinc-50)
60
+ )
61
+ 50%,
62
+ color-mix(in srgb, var(--app-canvas-to, var(--color-zinc-50)) var(--app-canvas-strength, 0%), var(--color-zinc-50))
63
+ );
64
+ }
65
+
66
+ .cloud-app-canvas > :is(.layout-rail, .layout-shell-content) {
67
+ gap: var(--ui-space-shell);
68
+ }
69
+
70
+ /* The authenticated rail is part of the canvas. Keeping it transparent also
71
+ covers shell-only routes such as 404 pages that have no app workspace. */
72
+ .cloud-app-canvas > .layout-rail {
73
+ width: calc(2.5rem + var(--ui-space-shell));
74
+ margin-inline-start: calc(-1 * var(--ui-space-shell));
75
+ background-color: transparent !important;
76
+ background-image: none !important;
77
+ }
78
+
79
+ .dark .cloud-app-canvas {
80
+ background: linear-gradient(
81
+ var(--app-canvas-angle, 135deg),
82
+ color-mix(in srgb, var(--app-canvas-from, var(--ui-canvas)) var(--app-canvas-dark-strength, 0%), var(--ui-canvas)),
83
+ color-mix(in srgb, var(--app-canvas-via-dark, var(--ui-canvas)) var(--app-canvas-dark-strength, 0%), var(--ui-canvas)) 50%,
84
+ color-mix(in srgb, var(--app-canvas-to, var(--ui-canvas)) var(--app-canvas-dark-strength, 0%), var(--ui-canvas))
85
+ );
86
+ }
87
+
88
+ :root {
89
+ color-scheme: light;
90
+ }
91
+
92
+ * {
93
+ font-variant-ligatures: contextual;
94
+ font-family: var(--font-sans);
95
+ scrollbar-width: thin;
96
+ scrollbar-color: rgb(161 161 170 / 0.4) transparent;
97
+ }
98
+
99
+ .dark * {
100
+ scrollbar-color: rgb(82 82 91 / 0.5) transparent;
101
+ }
102
+
103
+ /* stdlib charts: make the SVG fill its wrapping element.
104
+ stdlib emits `<svg viewBox="0 0 W H">` without `width`/`height`
105
+ attributes, which would otherwise fall back to the browser's
106
+ replaced-element default (300×150) and either overflow tiny
107
+ containers or sit dwarfed inside wider ones. `display: block`
108
+ stops the inline-baseline gap; `width/height: 100%` lets the
109
+ container's CSS box drive the SVG size, and the `<Chart>`
110
+ wrapper passes the measured pixel dimensions back to stdlib so
111
+ the viewBox matches — no aspect distortion, no letterboxing. */
112
+ .stdlib-chart {
113
+ display: block;
114
+ width: 100%;
115
+ height: 100%;
116
+ }
117
+
118
+ :root .stdlib-chart {
119
+ --stdlib-chart-c1: #14b8a6;
120
+ --stdlib-chart-c2: #f97316;
121
+ --stdlib-chart-c3: #8b5cf6;
122
+ --stdlib-chart-c4: #ec4899;
123
+ --stdlib-chart-c5: #22c55e;
124
+ --stdlib-chart-c6: #eab308;
125
+ --stdlib-chart-c7: #06b6d4;
126
+ --stdlib-chart-c8: #ef4444;
127
+ }
128
+
129
+ /* stdlib charts — dark-mode overrides.
130
+
131
+ stdlib's embedded <style> hardcodes a light-mode `color: #1f2937`
132
+ on .stdlib-chart and `stroke: white` on slice/point/outlier
133
+ separators. The hardcoded color leaves axis labels / tick text
134
+ unreadable on a dark background, and white slice strokes look
135
+ harsh against zinc-950. We override BOTH from outside the SVG
136
+ with higher specificity (parent `.dark` selector beats the
137
+ embedded one-class rule).
138
+
139
+ Why specificity matters: stdlib's <style> lives INSIDE the SVG,
140
+ so its rules are part of the document. Both rule sets have one
141
+ class selector each (`.stdlib-chart`), and the embedded one is
142
+ parsed AFTER global.css — without raising specificity here, the
143
+ embedded rule would win and dark mode would stay broken. The
144
+ `.dark` parent on `<html>` (set by the platform's theme toggle)
145
+ bumps these rules to two classes, beating stdlib's one-class
146
+ embedded defaults cleanly. */
147
+ .dark .stdlib-chart {
148
+ color: rgb(228 228 231); /* zinc-200 — readable on zinc-950 */
149
+ }
150
+ .dark .stdlib-chart .stdlib-chart-slice,
151
+ .dark .stdlib-chart .stdlib-chart-point,
152
+ .dark .stdlib-chart .stdlib-chart-box-outlier {
153
+ /* zinc-950 to match the dark page background, so slice / point
154
+ separators read as "gaps between segments" rather than visible
155
+ white lines against a dark surface. */
156
+ stroke: rgb(9 9 11);
157
+ }
158
+
159
+ /* stdlib charts — scientific data-viz refinement.
160
+
161
+ stdlib already renders the structure (gridlines, axes, ticks, flat
162
+ fills); the only thing missing for a precise "measurement" look is
163
+ the typography. Numeric axis ticks + bar values read as monospaced,
164
+ tabular figures so columns of numbers line up the way they do in a
165
+ plotting tool. Two-class selectors (`.stdlib-chart .stdlib-chart-…`)
166
+ beat stdlib's one-class embedded <style> the same way the dark-mode
167
+ overrides above do. font-family is otherwise unset by stdlib, so the
168
+ chart would inherit the app sans — we pin the numeric labels to the
169
+ platform mono stack (IBM Plex Mono via `/public/fonts.css`). */
170
+ .stdlib-chart .stdlib-chart-tick-label,
171
+ .stdlib-chart .stdlib-chart-bar-value,
172
+ .stdlib-chart .stdlib-chart-axis-label {
173
+ font-family: var(--font-mono);
174
+ font-variant-numeric: tabular-nums;
175
+ }
176
+
177
+ .stdlib-chart a {
178
+ cursor: pointer;
179
+ }
180
+
181
+ .stdlib-chart a:hover .stdlib-chart-state-region,
182
+ .stdlib-chart a:focus .stdlib-chart-state-region {
183
+ opacity: 0.8;
184
+ outline: none;
185
+ }
186
+
187
+ *::-webkit-scrollbar {
188
+ width: 0.5rem;
189
+ height: 0.5rem;
190
+ }
191
+
192
+ *::-webkit-scrollbar-track {
193
+ background: transparent;
194
+ border-radius: 9999px;
195
+ }
196
+
197
+ *::-webkit-scrollbar-thumb {
198
+ background: rgb(161 161 170 / 0.35);
199
+ border-radius: 9999px;
200
+ border: 1px solid transparent;
201
+ background-clip: padding-box;
202
+ }
203
+
204
+ *::-webkit-scrollbar-thumb:hover {
205
+ background: rgb(161 161 170 / 0.55);
206
+ }
207
+
208
+ .dark *::-webkit-scrollbar-thumb {
209
+ background: rgb(82 82 91 / 0.5);
210
+ }
211
+
212
+ .dark *::-webkit-scrollbar-thumb:hover {
213
+ background: rgb(82 82 91 / 0.7);
214
+ }
215
+
216
+ *::-webkit-scrollbar-corner {
217
+ background: transparent;
218
+ }
219
+
220
+ .multi-select-pill-strip {
221
+ scrollbar-width: thin;
222
+ }
223
+
224
+ body {
225
+ /* Explicit values — avoids @apply layer ordering issues with multiple CSS files */
226
+ background-color: rgb(250 250 250); /* zinc-50 */
227
+ color: rgb(24 24 27); /* zinc-900 */
228
+ }
229
+
230
+ .dark body {
231
+ background-color: rgb(9 9 11); /* zinc-950 */
232
+ color: rgb(244 244 245); /* zinc-100 */
233
+ }
234
+
235
+ .dark {
236
+ color-scheme: dark;
237
+ --color-selection-bg: rgb(59 130 246 / 0.5);
238
+ --color-selection-fg: rgb(239 246 255);
239
+ }
240
+
241
+ @view-transition {
242
+ navigation: auto;
243
+ }
244
+
245
+ ::selection {
246
+ background-color: var(--color-selection-bg);
247
+ color: var(--color-selection-fg);
248
+ }
249
+
250
+ ::-moz-selection {
251
+ background-color: var(--color-selection-bg);
252
+ color: var(--color-selection-fg);
253
+ }
254
+
255
+ /* SSR island wrappers should not break flex layout */
256
+ solid-client,
257
+ solid-island {
258
+ display: contents;
259
+ }
260
+
261
+ @media (prefers-reduced-motion: reduce) {
262
+ *,
263
+ *::before,
264
+ *::after {
265
+ scroll-behavior: auto !important;
266
+ transition-duration: 0.01ms !important;
267
+ }
268
+ }
@@ -0,0 +1,58 @@
1
+ /* Global Button Styling */
2
+ button,
3
+ [role="button"] {
4
+ cursor: pointer;
5
+ }
6
+
7
+ button[disabled],
8
+ [role="button"][disabled] {
9
+ cursor: not-allowed;
10
+ opacity: 0.5;
11
+ }
12
+
13
+ [type="search"]::-webkit-search-cancel-button {
14
+ -webkit-appearance: none;
15
+ }
16
+
17
+ /* Global Checkbox Styling */
18
+ input[type="checkbox"] {
19
+ @apply appearance-none w-4 h-4 border cursor-pointer transition-all duration-200 inline-flex items-center justify-center m-0 align-middle rounded;
20
+ border-color: var(--ui-check-border);
21
+ background: var(--ui-check-surface);
22
+ box-shadow: var(--ui-check-shadow);
23
+ }
24
+
25
+ input[type="checkbox"]::before {
26
+ content: "\ea5e";
27
+ font-family: "tabler-icons";
28
+ @apply text-transparent text-xs leading-none transition-colors duration-200;
29
+ }
30
+
31
+ input[type="checkbox"]:checked {
32
+ @apply bg-blue-500 border-blue-500;
33
+ box-shadow: inset 0 1px 0 0 rgb(255 255 255 / 0.35);
34
+ }
35
+
36
+ input[type="checkbox"]:checked::before {
37
+ @apply text-white;
38
+ }
39
+
40
+ input[type="checkbox"]:hover {
41
+ transform: var(--ui-check-hover-transform);
42
+ }
43
+
44
+ input[type="checkbox"]:focus {
45
+ @apply outline-none;
46
+ }
47
+
48
+ input[type="checkbox"]:focus-visible {
49
+ @apply focus-ui;
50
+ }
51
+
52
+ input[type="checkbox"]:disabled {
53
+ @apply opacity-50 cursor-not-allowed;
54
+ }
55
+
56
+ input[type="checkbox"]:disabled:hover {
57
+ transform: none;
58
+ }
@@ -0,0 +1,230 @@
1
+ /* Theme tokens and core text utilities */
2
+ :root {
3
+ /* Semantic UI roles. This is the single owner of production values; apps
4
+ and primitives consume roles instead of redefining visual foundations. */
5
+ --ui-canvas: var(--color-zinc-50);
6
+ --ui-surface: rgb(255 255 255 / 0.96);
7
+ --ui-surface-subtle: rgb(248 248 248 / 0.96);
8
+ --ui-surface-muted: rgb(243 244 243 / 0.96);
9
+ --ui-surface-raised: rgb(255 255 255 / 0.99);
10
+ --ui-border: rgb(218 220 219 / 0.68);
11
+ --ui-border-strong: rgb(207 210 208 / 0.9);
12
+ --ui-hover: rgb(239 240 239 / 0.9);
13
+ --ui-active: rgb(229 231 230 / 0.94);
14
+ --ui-selected: color-mix(in srgb, var(--color-blue-500) 7%, var(--ui-surface));
15
+ --ui-app-accent-text: color-mix(in srgb, var(--app-accent, var(--color-blue-500)) 78%, black);
16
+ --ui-app-accent-border: var(--app-accent, var(--color-blue-500));
17
+ --ui-focus: inset 0 0 0 2px color-mix(in srgb, var(--color-blue-500) 45%, transparent);
18
+ --ui-action-primary-surface: var(--color-zinc-900);
19
+ --ui-action-primary-hover: var(--color-black);
20
+ --ui-action-primary-active: var(--color-zinc-800);
21
+ --ui-action-primary-text: var(--color-white);
22
+ --ui-action-primary-border: transparent;
23
+ --ui-action-primary-hover-border: transparent;
24
+ --ui-field: var(--ui-surface-muted);
25
+ --ui-field-border: transparent;
26
+ --ui-field-hover: var(--ui-hover);
27
+ --ui-field-hover-border: var(--ui-border);
28
+ --ui-field-focus: var(--ui-surface);
29
+ --ui-field-focus-border: transparent;
30
+ --ui-divider: var(--ui-border);
31
+ --ui-control-recess: none;
32
+ /* A transparent no-op shadow keeps composite box-shadow lists valid. */
33
+ --ui-control-bevel: 0 0 0 transparent;
34
+ --ui-control-press: inset 0 1px 2px rgb(22 38 29 / 0.12);
35
+ --ui-check-surface: var(--ui-field);
36
+ --ui-check-border: var(--ui-border-strong);
37
+ --ui-check-shadow: none;
38
+ --ui-check-hover-transform: none;
39
+ --ui-data-header: var(--ui-surface-subtle);
40
+ --ui-data-divider: var(--ui-border);
41
+ --ui-data-row-divider: color-mix(in srgb, var(--ui-border) 72%, transparent);
42
+ --ui-data-row-hover: rgb(9 9 11 / 0.025);
43
+ --ui-data-row-selected: var(--ui-selected);
44
+ --ui-data-column-hover: rgb(9 9 11 / 0.012);
45
+ --ui-dialog-surface: var(--ui-surface-raised);
46
+ --ui-dialog-border: var(--ui-border-strong);
47
+ --ui-dialog-section: var(--ui-surface-subtle);
48
+ --ui-dialog-section-border: transparent;
49
+ --ui-dialog-section-icon: var(--ui-surface-muted);
50
+ --ui-dialog-radius: var(--ui-radius-frame);
51
+ /* Fallback for browsers without dynamic viewport units. The @supports
52
+ override below also accounts for notches and mobile browser chrome. */
53
+ --ui-dialog-available-height: calc(100vh - 1.5rem);
54
+ --ui-dialog-available-width: calc(100vw - 1.5rem);
55
+ --ui-context-menu-surface: var(--ui-surface-raised);
56
+ --ui-context-menu-radius: var(--ui-radius-surface);
57
+ --ui-context-menu-shadow: var(--ui-shadow-float);
58
+ --ui-dropdown-menu-surface: rgb(246 247 246 / 0.94);
59
+ --ui-dropdown-menu-radius: var(--ui-radius-surface);
60
+ --ui-dropdown-menu-shadow: var(--ui-shadow-float);
61
+ --ui-menu-hover: var(--ui-hover);
62
+ --ui-state-icon-surface: var(--ui-surface-muted);
63
+ --ui-state-icon-border: var(--ui-border);
64
+ --ui-state-error-icon-surface: color-mix(in srgb, var(--color-red-500) 8%, var(--ui-surface));
65
+ --ui-state-error-icon-border: color-mix(in srgb, var(--color-red-500) 18%, var(--ui-border));
66
+ --ui-progress-track: var(--ui-surface-muted);
67
+ --ui-progress-track-shadow: none;
68
+ --ui-progress-primary: var(--color-blue-500);
69
+ --ui-progress-success: var(--color-green-500);
70
+ --ui-progress-danger: var(--color-red-500);
71
+ --ui-tooltip-surface: var(--color-zinc-900);
72
+ --ui-tooltip-border: var(--color-zinc-800);
73
+ --ui-tooltip-text: var(--color-white);
74
+ --ui-tooltip-radius: var(--ui-radius-control);
75
+ --ui-tooltip-shadow: var(--ui-shadow-float);
76
+ --ui-segment-surface: var(--ui-surface-muted);
77
+ --ui-segment-border: transparent;
78
+ --ui-segment-shadow: none;
79
+ --ui-segment-divider: var(--ui-border);
80
+ --ui-segment-hover: var(--ui-hover);
81
+ --ui-segment-inactive-text: var(--color-zinc-600);
82
+ --ui-segment-hover-text: var(--color-zinc-900);
83
+ --ui-segment-active-surface: var(--ui-surface-raised);
84
+ --ui-segment-active-text: var(--color-zinc-900);
85
+ --ui-segment-active-shadow: 0 0 0 1px var(--ui-border);
86
+ --ui-segment-item-radius: var(--ui-radius-control);
87
+ --ui-segment-active-radius: var(--ui-radius-control);
88
+ --ui-pagination-hover: var(--ui-hover);
89
+ --ui-pagination-current-surface: var(--ui-selected);
90
+ --ui-pagination-current-border: transparent;
91
+ --ui-pagination-current-text: var(--color-blue-700);
92
+ --ui-radius-frame: 0.875rem;
93
+ --ui-radius-surface: 0.75rem;
94
+ --ui-radius-control: 0.5rem;
95
+ --ui-control-sm: 2rem;
96
+ --ui-control-md: 2.375rem;
97
+ --ui-input-padding-x: 0.5rem;
98
+ --ui-input-padding-y: 0.375rem;
99
+ --ui-space-shell: 0.5rem;
100
+ --ui-space-section: 0.75rem;
101
+ --ui-space-control: 0.375rem;
102
+ --ui-shadow-surface: none;
103
+ /* Mail is under active parallel development. Remove this one compatibility
104
+ alias when MailOverview migrates to --ui-shadow-surface. */
105
+ --theme-shadow-elevated: var(--ui-shadow-surface);
106
+ --ui-shadow-frame:
107
+ 0 -3px 10px -8px rgb(15 23 19 / 0.16), 0 0 16px -9px rgb(15 23 19 / 0.16), 0 14px 36px -32px rgb(15 23 19 / 0.22),
108
+ 0 1px 5px rgb(15 23 19 / 0.04);
109
+ --ui-shadow-float: 0 18px 46px -18px rgb(0 0 0 / 0.22), 0 5px 16px rgb(0 0 0 / 0.08);
110
+ --ui-shadow-hover: 0 12px 28px -24px rgb(22 38 29 / 0.28), 0 3px 12px rgb(22 38 29 / 0.06);
111
+ --ui-shadow-workspace-edge: -3px 0 6px -5px rgb(0 0 0 / 0.1), 3px 0 6px -5px rgb(0 0 0 / 0.1);
112
+ --ui-paper-highlighted: var(--ui-surface-subtle);
113
+ }
114
+
115
+ @supports (height: 100dvh) and (width: 100dvw) {
116
+ :root {
117
+ --ui-dialog-available-height: calc(
118
+ 100dvh -
119
+ max(0.75rem, env(safe-area-inset-top, 0px)) -
120
+ max(0.75rem, env(safe-area-inset-bottom, 0px))
121
+ );
122
+ --ui-dialog-available-width: calc(
123
+ 100dvw -
124
+ max(0.75rem, env(safe-area-inset-left, 0px)) -
125
+ max(0.75rem, env(safe-area-inset-right, 0px))
126
+ );
127
+ }
128
+ }
129
+
130
+ .dark {
131
+ /* Mirror the portable UI ink hierarchy through Cloud-owned roles. Keeping
132
+ the two namespaces explicit preserves their package ownership boundary. */
133
+ --ui-canvas: #090d12;
134
+ --ui-surface: #11151b;
135
+ --ui-surface-subtle: color-mix(in srgb, var(--ui-surface) 68%, var(--ui-surface-muted));
136
+ --ui-surface-muted: #20242a;
137
+ --ui-surface-raised: #181d24;
138
+ --ui-border: #29313a;
139
+ --ui-border-strong: #3a4552;
140
+ --ui-hover: #252c35;
141
+ --ui-active: color-mix(in srgb, var(--ui-hover) 72%, var(--ui-border-strong));
142
+ --ui-selected: color-mix(in srgb, var(--color-blue-400) 12%, var(--ui-surface));
143
+ --ui-app-accent-text: color-mix(in srgb, var(--app-accent, var(--color-blue-400)) 58%, white);
144
+ --ui-app-accent-border: color-mix(in srgb, var(--app-accent, var(--color-blue-400)) 58%, white);
145
+ --ui-focus: inset 0 0 0 2px color-mix(in srgb, var(--color-blue-400) 55%, transparent);
146
+ --ui-action-primary-surface: var(--color-zinc-100);
147
+ --ui-action-primary-hover: var(--color-white);
148
+ --ui-action-primary-active: var(--color-zinc-200);
149
+ --ui-action-primary-text: var(--color-zinc-950);
150
+ --ui-action-primary-border: transparent;
151
+ --ui-action-primary-hover-border: transparent;
152
+ --ui-field: var(--ui-surface-muted);
153
+ --ui-field-border: transparent;
154
+ --ui-field-hover: var(--ui-hover);
155
+ --ui-field-hover-border: var(--ui-border);
156
+ --ui-field-focus: var(--ui-surface);
157
+ --ui-field-focus-border: transparent;
158
+ --ui-divider: var(--ui-border);
159
+ --ui-control-recess: none;
160
+ --ui-control-press: inset 0 1px 3px rgb(0 0 0 / 0.48);
161
+ --ui-check-surface: var(--ui-field);
162
+ --ui-check-border: var(--ui-border-strong);
163
+ --ui-check-shadow: none;
164
+ --ui-check-hover-transform: none;
165
+ --ui-data-row-hover: rgb(255 255 255 / 0.045);
166
+ --ui-data-column-hover: rgb(255 255 255 / 0.018);
167
+ --ui-dropdown-menu-surface: var(--ui-surface-raised);
168
+ --ui-progress-primary: var(--color-blue-400);
169
+ --ui-progress-success: var(--color-green-400);
170
+ --ui-progress-danger: var(--color-red-400);
171
+ --ui-tooltip-surface: var(--ui-surface-muted);
172
+ --ui-tooltip-border: var(--ui-border-strong);
173
+ --ui-tooltip-text: var(--color-zinc-100);
174
+ --ui-segment-inactive-text: var(--color-zinc-400);
175
+ --ui-segment-hover-text: var(--color-zinc-200);
176
+ --ui-segment-active-text: var(--color-zinc-100);
177
+ --ui-pagination-current-text: var(--color-blue-200);
178
+ --ui-shadow-surface: none;
179
+ --ui-shadow-frame:
180
+ inset 0 0 0 1px var(--ui-border), 0 -3px 10px -8px rgb(0 0 0 / 0.32), 0 0 16px -9px rgb(0 0 0 / 0.56),
181
+ 0 16px 40px -30px rgb(0 0 0 / 0.48), 0 1px 7px rgb(0 0 0 / 0.14);
182
+ --ui-shadow-float: 0 22px 54px -18px rgb(0 0 0 / 0.72), 0 6px 18px rgb(0 0 0 / 0.3);
183
+ --ui-shadow-hover: 0 14px 32px -24px rgb(0 0 0 / 0.8), 0 3px 12px rgb(0 0 0 / 0.22);
184
+ --ui-shadow-workspace-edge: -3px 0 6px -5px rgb(0 0 0 / 0.28), 3px 0 6px -5px rgb(0 0 0 / 0.28);
185
+ }
186
+
187
+ /* App appearance is applied on the canvas rather than :root. Recompute the
188
+ derived accent roles here so an app never inherits the platform fallback. */
189
+ .cloud-app-canvas,
190
+ .app-accent-scope {
191
+ --ui-app-accent-text: color-mix(in srgb, var(--app-accent, var(--color-blue-500)) 78%, black);
192
+ --ui-app-accent-border: var(--app-accent, var(--color-blue-500));
193
+ /* Portable UI components consume their own optional hook; Cloud alone maps
194
+ it to the active app appearance. */
195
+ --k2b-app-workspace-active: var(--ui-app-accent-text);
196
+ --k2b-detail-panel-accent: var(--ui-app-accent-text);
197
+ }
198
+
199
+ .dark :is(.cloud-app-canvas, .app-accent-scope) {
200
+ --ui-app-accent-text: color-mix(in srgb, var(--app-accent, var(--color-blue-400)) 58%, white);
201
+ --ui-app-accent-border: color-mix(in srgb, var(--app-accent, var(--color-blue-400)) 58%, white);
202
+ --k2b-app-workspace-active: var(--ui-app-accent-text);
203
+ --k2b-detail-panel-accent: var(--ui-app-accent-text);
204
+ }
205
+
206
+ @utility slider-track-colors {
207
+ --slider-fill: var(--color-blue-500);
208
+ --slider-track: var(--ui-field);
209
+ }
210
+
211
+ .dark .slider-track-colors,
212
+ .dark.slider-track-colors {
213
+ --slider-fill: var(--color-blue-400);
214
+ }
215
+
216
+ @utility text-primary {
217
+ @apply text-zinc-900 dark:text-zinc-100;
218
+ }
219
+
220
+ @utility text-secondary {
221
+ @apply text-zinc-700 dark:text-zinc-300;
222
+ }
223
+
224
+ @utility text-dimmed {
225
+ @apply text-zinc-500 dark:text-zinc-500;
226
+ }
227
+
228
+ @utility text-label {
229
+ @apply text-sm font-medium text-zinc-700 dark:text-zinc-300;
230
+ }