@k2b/cloud 0.6.0-rc.0 → 0.7.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 (315) hide show
  1. package/README.md +2 -2
  2. package/package.json +30 -17
  3. package/scripts/browser-performance.ts +14 -0
  4. package/scripts/build-pdf-renderer.ts +39 -0
  5. package/scripts/build.ts +15 -35
  6. package/scripts/preload.ts +9 -12
  7. package/scripts/sync-recovery-smoke.ts +2 -1
  8. package/src/_internal/app-presentation.ts +14 -2
  9. package/src/_internal/capabilities.ts +108 -7
  10. package/src/_internal/capability-streams.ts +81 -0
  11. package/src/_internal/define-app.ts +62 -36
  12. package/src/_internal/heartbeat.ts +4 -0
  13. package/src/_internal/help-catalog.ts +27 -172
  14. package/src/_internal/help.ts +13 -76
  15. package/src/_internal/page-responses.ts +2 -0
  16. package/src/_internal/postgres-application-name.ts +30 -0
  17. package/src/_internal/process-identity.ts +15 -0
  18. package/src/_internal/process-sync.ts +1 -1
  19. package/src/_internal/registry-validation.ts +29 -25
  20. package/src/_internal/registry.ts +2 -53
  21. package/src/_internal/runtime-context.ts +5 -16
  22. package/src/_internal/server-timing.ts +13 -0
  23. package/src/_internal/status-preserving-ssr.ts +18 -6
  24. package/src/_internal/web-vitals-asset.ts +10 -0
  25. package/src/access/PermissionEditor.tsx +14 -153
  26. package/src/access/PrincipalPicker.tsx +104 -0
  27. package/src/access/ui.ts +2 -0
  28. package/src/ai/admin.ts +14 -13
  29. package/src/ai/assistant-models.ts +12 -1
  30. package/src/ai/audio-format.ts +34 -0
  31. package/src/ai/audio-tool.ts +90 -0
  32. package/src/ai/browser-code-contracts.ts +79 -0
  33. package/src/ai/browser.ts +2 -0
  34. package/src/ai/capabilities.ts +55 -36
  35. package/src/ai/capability-execution.ts +47 -12
  36. package/src/ai/chat/blocks.tsx +157 -95
  37. package/src/ai/chat/capability-result.ts +15 -0
  38. package/src/ai/chat/capability-table.tsx +2 -10
  39. package/src/ai/chat/composer-adapter.ts +48 -3
  40. package/src/ai/chat/message-actions.tsx +8 -7
  41. package/src/ai/chat/message-utils.ts +12 -1
  42. package/src/ai/chat/messages.ts +2 -0
  43. package/src/ai/chat/presentation.tsx +19 -48
  44. package/src/ai/chat/primitives.tsx +43 -1
  45. package/src/ai/chat/tool-disclosure.tsx +17 -2
  46. package/src/ai/chat/tool-groups.ts +52 -0
  47. package/src/ai/chat-quotas.ts +25 -0
  48. package/src/ai/chat-task-contracts.ts +9 -1
  49. package/src/ai/chat-tasks.ts +276 -43
  50. package/src/ai/client/controller.ts +110 -33
  51. package/src/ai/client/file-source.ts +12 -6
  52. package/src/ai/client/live-connection.ts +1 -0
  53. package/src/ai/client/projection.ts +22 -11
  54. package/src/ai/client/transport.ts +4 -0
  55. package/src/ai/code-capability-routes.ts +110 -0
  56. package/src/ai/code-capability-transport.ts +38 -0
  57. package/src/ai/code-mode-skill.ts +114 -0
  58. package/src/ai/code-runtime-tools.ts +166 -0
  59. package/src/ai/code-source-contracts.ts +202 -0
  60. package/src/ai/code-source-tools.ts +145 -0
  61. package/src/ai/compaction.ts +27 -6
  62. package/src/ai/data-analysis-skill.ts +10 -0
  63. package/src/ai/default-tools.ts +25 -2
  64. package/src/ai/dictation-runtime.ts +171 -0
  65. package/src/ai/dictations.ts +188 -0
  66. package/src/ai/draft-content.ts +34 -0
  67. package/src/ai/enrich.ts +6 -0
  68. package/src/ai/executor.ts +191 -31
  69. package/src/ai/file-content-version.ts +22 -0
  70. package/src/ai/file-context.ts +2 -1
  71. package/src/ai/file-media-type.ts +12 -0
  72. package/src/ai/file-reference-contracts.ts +15 -0
  73. package/src/ai/file-tools.ts +2 -1
  74. package/src/ai/files-store.ts +174 -71
  75. package/src/ai/fixtures/vision-encrypted.pdf +0 -0
  76. package/src/ai/grids-skill.ts +40 -10
  77. package/src/ai/http.ts +15 -8
  78. package/src/ai/index.ts +26 -2
  79. package/src/ai/inference-calls.ts +198 -0
  80. package/src/ai/live-events.ts +5 -1
  81. package/src/ai/memory-learning.ts +60 -28
  82. package/src/ai/message-queue.ts +167 -0
  83. package/src/ai/migrate.ts +187 -11
  84. package/src/ai/model-pricing.ts +43 -0
  85. package/src/ai/pdf-render-worker.ts +74 -0
  86. package/src/ai/pdf-render.fixture.ts +28 -0
  87. package/src/ai/pdf-render.ts +77 -0
  88. package/src/ai/projects-routes.ts +3 -3
  89. package/src/ai/projects.ts +20 -6
  90. package/src/ai/protocol.ts +3 -0
  91. package/src/ai/provider.ts +1 -8
  92. package/src/ai/quota-provider.ts +191 -0
  93. package/src/ai/quota-report.ts +152 -0
  94. package/src/ai/quotas-migrate.ts +45 -0
  95. package/src/ai/quotas.ts +168 -0
  96. package/src/ai/routes.ts +215 -11
  97. package/src/ai/run-timeout.ts +10 -0
  98. package/src/ai/runtime-tools.ts +3 -0
  99. package/src/ai/runtime.ts +55 -16
  100. package/src/ai/settings.ts +36 -8
  101. package/src/ai/short-id.ts +2 -2
  102. package/src/ai/skill-catalog.ts +0 -10
  103. package/src/ai/skill-search.ts +47 -0
  104. package/src/ai/skill-seeds.ts +105 -20
  105. package/src/ai/skill-tool.ts +16 -5
  106. package/src/ai/skills-routes.ts +32 -4
  107. package/src/ai/skills.ts +324 -155
  108. package/src/ai/store.ts +373 -191
  109. package/src/ai/stream.ts +5 -0
  110. package/src/ai/structured-runs.ts +4 -3
  111. package/src/ai/structured.ts +8 -1
  112. package/src/ai/system-prompt.ts +12 -2
  113. package/src/ai/timeline.ts +2 -5
  114. package/src/ai/todo-contracts.ts +20 -0
  115. package/src/ai/todo-tool.ts +16 -0
  116. package/src/ai/tool-audit.ts +30 -40
  117. package/src/ai/tools.ts +6 -0
  118. package/src/ai/transcription.ts +202 -0
  119. package/src/ai/turn-timing.ts +114 -0
  120. package/src/ai/types.ts +58 -10
  121. package/src/ai/ui.tsx +2 -0
  122. package/src/ai/usage.ts +118 -118
  123. package/src/ai/vision-tool.ts +39 -10
  124. package/src/api/admin-ai-projects.ts +2 -2
  125. package/src/api/admin-ai-quotas.ts +74 -0
  126. package/src/api/admin-ai-skills.ts +48 -5
  127. package/src/api/admin-ai-usage.ts +2 -2
  128. package/src/api/admin-core-settings.ts +25 -0
  129. package/src/api/admin-identity.ts +91 -51
  130. package/src/api/admin-rail.ts +58 -0
  131. package/src/api/announcements.ts +14 -0
  132. package/src/api/capabilities.ts +292 -43
  133. package/src/api/capability-streams.ts +262 -0
  134. package/src/api/help.ts +8 -44
  135. package/src/api/index.ts +6 -0
  136. package/src/api/mcp.ts +44 -26
  137. package/src/api/me-web-vitals.ts +35 -0
  138. package/src/api/me.ts +2 -0
  139. package/src/api/search/schemas.ts +26 -15
  140. package/src/api/search.bench.ts +1 -1
  141. package/src/api/search.ts +54 -17
  142. package/src/browser/CloudResourceSearch.tsx +640 -702
  143. package/src/browser/app-approval-vault.ts +19 -7
  144. package/src/browser/command-bridge.ts +109 -0
  145. package/src/browser/command-shortcuts.ts +76 -0
  146. package/src/browser/commands.ts +66 -0
  147. package/src/browser/navigation-search.ts +48 -0
  148. package/src/browser/notifications.ts +1 -1
  149. package/src/browser/resource-picker.tsx +5 -18
  150. package/src/browser/resource-search-dialog.ts +9 -0
  151. package/src/browser/resource-search-input.ts +46 -0
  152. package/src/browser/resource-search-messages.ts +76 -40
  153. package/src/browser/resource-search.ts +7 -0
  154. package/src/browser/search-bridge.ts +102 -0
  155. package/src/browser/search-commands.ts +59 -0
  156. package/src/browser/search.ts +13 -0
  157. package/src/browser/spotlight-position.ts +208 -0
  158. package/src/browser/testing.ts +5 -0
  159. package/src/browser/web-vitals.ts +25 -0
  160. package/src/capabilities/claims.ts +179 -0
  161. package/src/capabilities/client.ts +34 -0
  162. package/src/capabilities/command-link.ts +16 -0
  163. package/src/capabilities/executions.ts +298 -0
  164. package/src/capabilities/migrate.ts +81 -0
  165. package/src/capabilities/server.ts +114 -34
  166. package/src/capabilities/stream-body.ts +16 -0
  167. package/src/capabilities/streams.ts +28 -0
  168. package/src/cli/admin/ai-quotas.ts +161 -0
  169. package/src/cli/admin/ai-skills.ts +64 -0
  170. package/src/cli/admin/ai-usage.ts +53 -30
  171. package/src/cli/admin/app-credentials.ts +79 -0
  172. package/src/cli/admin/data.ts +17 -0
  173. package/src/cli/admin/index.ts +9 -0
  174. package/src/cli/capabilities.ts +29 -0
  175. package/src/cli/capability-streams.ts +25 -0
  176. package/src/cli/index.ts +3 -2
  177. package/src/config/env.ts +11 -8
  178. package/src/contracts/app.ts +23 -3
  179. package/src/contracts/capabilities.ts +68 -5
  180. package/src/contracts/capability-streams.ts +46 -0
  181. package/src/contracts/commands.ts +49 -0
  182. package/src/contracts/index.ts +6 -1
  183. package/src/contracts/rail-admin.ts +38 -0
  184. package/src/contracts/rail-preferences.ts +16 -0
  185. package/src/contracts/registry.ts +3 -27
  186. package/src/contracts/settings-types.ts +1 -1
  187. package/src/contracts/shared.ts +9 -5
  188. package/src/contracts/web-vitals.ts +27 -0
  189. package/src/desktop/solid.tsx +3 -3
  190. package/src/index.ts +0 -4
  191. package/src/server/index.ts +3 -0
  192. package/src/server/middleware/auth.ts +3 -2
  193. package/src/server/middleware/route-template.ts +9 -3
  194. package/src/server/middleware/runtime.ts +2 -1
  195. package/src/server/middleware/settings.ts +17 -11
  196. package/src/server/services/access-revision.ts +10 -0
  197. package/src/server/services/access.ts +1 -1
  198. package/src/server/services/index.ts +1 -0
  199. package/src/services/account-category-policy.ts +9 -0
  200. package/src/services/account-lifecycle/audit.ts +1 -1
  201. package/src/services/accounts/app.ts +12 -2
  202. package/src/services/accounts/email-write.ts +23 -0
  203. package/src/services/accounts/groups.ts +15 -4
  204. package/src/services/accounts/identities.ts +249 -0
  205. package/src/services/accounts/identity-reconciliation.ts +87 -0
  206. package/src/services/accounts/ipa-data.ts +2 -2
  207. package/src/services/accounts/local-groups.ts +2 -2
  208. package/src/services/accounts/posix.ts +45 -29
  209. package/src/services/accounts/users.ts +2 -2
  210. package/src/services/announcements/index.ts +69 -8
  211. package/src/services/audit/index.ts +1 -1
  212. package/src/services/cache-fill.ts +35 -0
  213. package/src/services/help/index.ts +109 -0
  214. package/src/services/help/maintenance.ts +25 -0
  215. package/src/services/help/store.ts +180 -0
  216. package/src/services/help/types.ts +46 -0
  217. package/src/services/identity/invocation-actor.ts +2 -2
  218. package/src/services/identity/key-config.ts +2 -1
  219. package/src/services/identity/key-ring.ts +1 -1
  220. package/src/services/index.ts +15 -0
  221. package/src/services/ipa/users.ts +268 -221
  222. package/src/services/legal-consent.ts +1 -1
  223. package/src/services/logging/index.ts +15 -13
  224. package/src/services/logging/trace.ts +2 -1
  225. package/src/services/logging/web-vitals.ts +81 -0
  226. package/src/services/mandates/index.ts +18 -4
  227. package/src/services/mandates/policy.ts +65 -2
  228. package/src/services/notifications/batches.ts +124 -57
  229. package/src/services/notifications/browser.ts +12 -0
  230. package/src/services/notifications/index.ts +0 -2
  231. package/src/services/notifications/platform.ts +0 -4
  232. package/src/services/oauth-tokens.ts +3 -3
  233. package/src/services/pdf/gotenberg.ts +107 -84
  234. package/src/services/pdf/index.ts +3 -0
  235. package/src/services/providers/local/users.ts +25 -16
  236. package/src/services/public-http.ts +101 -0
  237. package/src/services/rail-shortcuts.ts +95 -0
  238. package/src/services/rail-snapshot.ts +53 -0
  239. package/src/services/request-cache-redis.ts +28 -0
  240. package/src/services/session/index.ts +15 -2
  241. package/src/services/session/user.ts +62 -37
  242. package/src/services/settings/core-settings.ts +21 -28
  243. package/src/services/settings/defaults.ts +5 -0
  244. package/src/services/settings/store.ts +58 -84
  245. package/src/shared/ai-costs.ts +42 -0
  246. package/src/shared/ai-platform-prompt.ts +1 -1
  247. package/src/shared/ai-quotas.ts +136 -0
  248. package/src/shared/ai-usage.ts +6 -16
  249. package/src/shared/app-presentation.ts +21 -15
  250. package/src/shared/capability-messages.ts +14 -0
  251. package/src/shared/help.ts +6 -42
  252. package/src/shared/index.ts +6 -0
  253. package/src/ssr/AdminLayout.tsx +7 -5
  254. package/src/ssr/AdminSidebar.tsx +29 -15
  255. package/src/ssr/AppLaunchpad.island.tsx +24 -137
  256. package/src/ssr/AppLaunchpadPanel.tsx +181 -0
  257. package/src/ssr/BrowserPushRegistration.island.tsx +12 -0
  258. package/src/ssr/GlobalSearchDialog.tsx +167 -20
  259. package/src/ssr/GlobalSearchTrigger.island.tsx +33 -22
  260. package/src/ssr/Layout.tsx +17 -6
  261. package/src/ssr/LayoutBreadcrumbs.island.tsx +3 -5
  262. package/src/ssr/LayoutFooter.tsx +1 -1
  263. package/src/ssr/LayoutHeader.tsx +46 -14
  264. package/src/ssr/LayoutHelp.tsx +23 -22
  265. package/src/ssr/{HotkeysHelpRail.island.tsx → LayoutHelpTrigger.island.tsx} +18 -12
  266. package/src/ssr/LayoutRail.tsx +17 -9
  267. package/src/ssr/MobileNavigation.tsx +71 -0
  268. package/src/ssr/MobileProfileActions.tsx +49 -0
  269. package/src/ssr/ProfilePreferences.island.tsx +3 -36
  270. package/src/ssr/RailApps.island.tsx +2 -2
  271. package/src/ssr/RailEditor.tsx +17 -2
  272. package/src/ssr/WorkspaceNavigation.island.tsx +7 -0
  273. package/src/ssr/WorkspaceNavigationProvider.tsx +16 -0
  274. package/src/ssr/admin-navigation.ts +7 -1
  275. package/src/ssr/help.ts +29 -0
  276. package/src/ssr/islands/SearchBar.tsx +67 -0
  277. package/src/ssr/islands/index.ts +3 -1
  278. package/src/ssr/layout-context.ts +2 -2
  279. package/src/ssr/layout-help-search.ts +15 -0
  280. package/src/ssr/mobile-menu-history.ts +70 -0
  281. package/src/ssr/platform-messages.ts +16 -8
  282. package/src/ssr/profile-actions.ts +42 -0
  283. package/src/ssr/rail-context.ts +8 -4
  284. package/src/ssr/rail-messages.ts +2 -0
  285. package/src/ssr/rail-navigation.ts +3 -3
  286. package/src/ssr/workspace-navigation.ts +75 -0
  287. package/src/styles/effects.css +6 -6
  288. package/src/styles/global.css +54 -0
  289. package/src/styles/input.css +43 -41
  290. package/src/styles/resource-search.css +505 -0
  291. package/src/styles/utilities-feedback.css +13 -0
  292. package/src/styles/utilities-layout.css +1 -5
  293. package/src/styles/utilities-navigation.css +3 -39
  294. package/src/types/ambient.d.ts +5 -0
  295. package/src/workflows/ai/runtime.ts +5 -1
  296. package/src/workflows/ai/store.ts +2 -0
  297. package/src/workflows/ai-actions.ts +16 -13
  298. package/src/workflows/definition.ts +10 -5
  299. package/src/workflows/store/actions.ts +44 -20
  300. package/src/workflows/store/index.ts +2 -0
  301. package/src/workflows/store/runs.ts +36 -0
  302. package/src/workflows/store/worker-pool.ts +55 -0
  303. package/src/workflows/store/worker-runtime.ts +90 -0
  304. package/scripts/app-favicon.test.ts +0 -49
  305. package/src/ai/chat/blocks.render.test.tsx +0 -1108
  306. package/src/ai/kit-skill.ts +0 -22
  307. package/src/ai/usage-migrate.ts +0 -81
  308. package/src/browser/CloudResourceSearch.behavior.test.tsx +0 -74
  309. package/src/browser/notification-target.ts +0 -27
  310. package/src/contracts/notification-live.ts +0 -66
  311. package/src/services/notifications/live.ts +0 -50
  312. package/src/ssr/BrowserNotifications.island.tsx +0 -135
  313. package/src/ssr/GlobalSearchDialog.behavior.test.tsx +0 -96
  314. package/src/ssr/Layout.render.test.tsx +0 -148
  315. package/src/ssr/islands/SearchBar.island.tsx +0 -80
@@ -14,45 +14,47 @@ button[disabled],
14
14
  -webkit-appearance: none;
15
15
  }
16
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;
17
+ /* Native checkbox defaults must not override controls owned by UI components. */
18
+ @layer base {
19
+ input[type="checkbox"] {
20
+ @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;
21
+ border-color: var(--ui-check-border);
22
+ background: var(--ui-check-surface);
23
+ box-shadow: var(--ui-check-shadow);
24
+ }
25
+
26
+ input[type="checkbox"]::before {
27
+ content: "\ea5e";
28
+ font-family: "tabler-icons";
29
+ @apply text-transparent text-xs leading-none transition-colors duration-200;
30
+ }
31
+
32
+ input[type="checkbox"]:checked {
33
+ @apply bg-blue-500 border-blue-500;
34
+ box-shadow: inset 0 1px 0 0 rgb(255 255 255 / 0.35);
35
+ }
36
+
37
+ input[type="checkbox"]:checked::before {
38
+ @apply text-white;
39
+ }
40
+
41
+ input[type="checkbox"]:hover {
42
+ transform: var(--ui-check-hover-transform);
43
+ }
44
+
45
+ input[type="checkbox"]:focus {
46
+ @apply outline-none;
47
+ }
48
+
49
+ input[type="checkbox"]:focus-visible {
50
+ @apply focus-ui;
51
+ }
52
+
53
+ input[type="checkbox"]:disabled {
54
+ @apply opacity-50 cursor-not-allowed;
55
+ }
56
+
57
+ input[type="checkbox"]:disabled:hover {
58
+ transform: none;
59
+ }
58
60
  }
@@ -0,0 +1,505 @@
1
+ /* Cloud-owned search composition; controls and scroll fades come from @k2b/ui. */
2
+ .cloud-search-dialog {
3
+ /* Anchor to the expanded footprint, not the changing content height. */
4
+ --search-expanded-height: 34rem;
5
+ --search-top: max(0.75rem, env(safe-area-inset-top, 0px), calc((100dvh - var(--search-expanded-height)) / 2));
6
+ --search-max-height: calc(var(--ui-dialog-available-height) - var(--search-top));
7
+ position: fixed;
8
+ inset: var(--search-top) auto auto 50%;
9
+ transform: translateX(-50%);
10
+ margin: 0;
11
+ padding: 0;
12
+ width: min(56rem, var(--ui-dialog-available-width));
13
+ max-width: none;
14
+ max-height: var(--search-max-height);
15
+ overflow: hidden;
16
+ border: 1px solid var(--ui-border);
17
+ border-radius: var(--ui-radius-frame);
18
+ background: var(--ui-dialog-surface);
19
+ color: var(--k2b-text);
20
+ box-shadow: var(--ui-shadow-float);
21
+ }
22
+ .cloud-search-dialog::backdrop {
23
+ background: rgb(0 0 0 / 0.35);
24
+ backdrop-filter: blur(5px);
25
+ }
26
+ .cloud-search-dialog__content {
27
+ min-height: 0;
28
+ max-height: inherit;
29
+ }
30
+ .cloud-resource-search {
31
+ --search-body-height: max(0px, min(26rem, calc(var(--search-max-height) - 12rem)));
32
+ position: relative;
33
+ display: grid;
34
+ grid-template-columns: minmax(0, 1fr);
35
+ grid-template-rows: auto auto minmax(0, 1fr) auto;
36
+ padding: 0.5rem;
37
+ min-height: 0;
38
+ max-height: var(--search-max-height);
39
+ }
40
+ .cloud-resource-search__title {
41
+ grid-area: 1 / 1;
42
+ padding: 0.875rem 1.125rem 0;
43
+ color: var(--k2b-text-muted);
44
+ font-size: 0.75rem;
45
+ }
46
+ .cloud-resource-search .cloud-resource-search__close {
47
+ position: absolute;
48
+ right: 0.875rem;
49
+ top: 1.125rem;
50
+ z-index: 1;
51
+ }
52
+ .cloud-resource-search__input {
53
+ grid-area: 2 / 1;
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 0.75rem;
57
+ min-width: 0;
58
+ padding: 1rem 3rem 1rem 1.125rem;
59
+ }
60
+ .cloud-resource-search__input > i {
61
+ flex: none;
62
+ width: 1.25rem;
63
+ font-size: 1.25rem;
64
+ color: var(--k2b-text-muted);
65
+ }
66
+ .cloud-resource-search__field {
67
+ display: flex;
68
+ flex: 1;
69
+ min-width: 0;
70
+ flex-wrap: wrap;
71
+ align-items: center;
72
+ gap: 0.375rem;
73
+ }
74
+ .cloud-resource-search__field input {
75
+ flex: 1;
76
+ min-width: 5rem;
77
+ width: 100%;
78
+ height: 2rem;
79
+ padding: 0;
80
+ border: 0;
81
+ background: transparent;
82
+ color: inherit;
83
+ box-shadow: none;
84
+ outline: none;
85
+ font-size: 1.25rem;
86
+ font-weight: 400;
87
+ letter-spacing: -0.025em;
88
+ }
89
+ .cloud-resource-search__field input::placeholder {
90
+ color: var(--k2b-text-muted);
91
+ opacity: 1;
92
+ }
93
+ .cloud-resource-search__tag {
94
+ display: inline-flex;
95
+ align-items: center;
96
+ gap: 0.375rem;
97
+ border-radius: 0.375rem;
98
+ padding: 0.25rem 0.375rem;
99
+ background: var(--k2b-selected);
100
+ color: var(--color-blue-600);
101
+ font-size: 0.75rem;
102
+ cursor: pointer;
103
+ }
104
+ .dark .cloud-resource-search__tag {
105
+ color: var(--color-blue-300);
106
+ }
107
+ .cloud-resource-search__tag.is-unknown {
108
+ color: var(--color-amber-600);
109
+ }
110
+ .cloud-resource-search__body {
111
+ grid-area: 3 / 1;
112
+ max-height: var(--search-body-height);
113
+ overscroll-behavior: contain;
114
+ }
115
+ .cloud-resource-search.has-results .cloud-resource-search__body {
116
+ height: var(--search-body-height);
117
+ }
118
+ .cloud-resource-search__idle {
119
+ padding: 0.375rem 1.125rem 1.5rem;
120
+ color: var(--k2b-text-muted);
121
+ font-size: 0.8125rem;
122
+ }
123
+ .cloud-resource-search__quick {
124
+ display: flex;
125
+ flex-wrap: wrap;
126
+ align-items: center;
127
+ gap: 0.5rem;
128
+ margin-top: 1rem;
129
+ min-height: 1.75rem;
130
+ }
131
+ .cloud-resource-search__quick > button {
132
+ min-width: 0;
133
+ }
134
+ .cloud-resource-search__quick > button:last-child {
135
+ flex-shrink: 0;
136
+ }
137
+ .cloud-resource-search__quick .k2b-button__label {
138
+ display: block;
139
+ overflow: hidden;
140
+ text-overflow: ellipsis;
141
+ pointer-events: none;
142
+ }
143
+ .cloud-resource-search__tag-skeleton {
144
+ flex: 0 1 3.5rem;
145
+ height: 1.75rem;
146
+ border-radius: var(--k2b-radius-control);
147
+ background: var(--k2b-surface-muted);
148
+ }
149
+ .cloud-resource-search__count {
150
+ padding: 0 1.125rem 0.5rem;
151
+ color: var(--k2b-text-muted);
152
+ font-size: 0.6875rem;
153
+ }
154
+ .cloud-resource-search__results {
155
+ padding: 0 0.375rem 1rem;
156
+ }
157
+ .cloud-resource-search__group {
158
+ padding: 0.875rem 0.75rem 0.375rem;
159
+ color: var(--k2b-text-muted);
160
+ font-size: 0.6875rem;
161
+ font-weight: 500;
162
+ }
163
+ .cloud-resource-search__group:first-child {
164
+ padding-top: 0.25rem;
165
+ }
166
+ .cloud-resource-search__result {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 0.6875rem;
170
+ width: 100%;
171
+ min-height: 3.5rem;
172
+ margin-bottom: 0.125rem;
173
+ padding: 0.625rem 0.75rem;
174
+ border-radius: 0.5rem;
175
+ text-align: left;
176
+ cursor: pointer;
177
+ }
178
+ .cloud-resource-search__result > i {
179
+ flex: none;
180
+ width: 1.25rem;
181
+ color: var(--k2b-text-muted);
182
+ font-size: 1rem;
183
+ }
184
+ .cloud-resource-search__result:hover {
185
+ background: var(--k2b-hover);
186
+ }
187
+ .cloud-resource-search__result.is-active,
188
+ .cloud-resource-search__result.is-selected {
189
+ background: var(--k2b-selected);
190
+ }
191
+ .cloud-resource-search__result-copy {
192
+ display: flex;
193
+ flex: 1;
194
+ min-width: 0;
195
+ flex-direction: column;
196
+ gap: 0.1875rem;
197
+ }
198
+ .cloud-resource-search__result-copy > span {
199
+ overflow: hidden;
200
+ text-overflow: ellipsis;
201
+ white-space: nowrap;
202
+ font-size: 0.875rem;
203
+ font-weight: 400;
204
+ }
205
+ .cloud-resource-search__result-copy small {
206
+ overflow: hidden;
207
+ text-overflow: ellipsis;
208
+ white-space: nowrap;
209
+ color: var(--k2b-text-muted);
210
+ font-size: 0.6875rem;
211
+ }
212
+ .cloud-resource-search__hint {
213
+ padding: 0.5rem 1.125rem 1.5rem;
214
+ color: var(--k2b-text-muted);
215
+ font-size: 0.8125rem;
216
+ }
217
+ .cloud-resource-search__tag-heading {
218
+ display: flex;
219
+ align-items: center;
220
+ justify-content: space-between;
221
+ gap: 0.75rem;
222
+ padding: 0 1.125rem 0.5rem;
223
+ color: var(--k2b-text-muted);
224
+ font-size: 0.6875rem;
225
+ }
226
+ .cloud-resource-search__tags {
227
+ padding: 0 0.375rem 1rem;
228
+ }
229
+ .cloud-resource-search__tag-option {
230
+ display: flex;
231
+ align-items: center;
232
+ gap: 0.75rem;
233
+ width: 100%;
234
+ padding: 0.6875rem 0.75rem;
235
+ border-radius: 0.5rem;
236
+ text-align: left;
237
+ cursor: pointer;
238
+ }
239
+ .cloud-resource-search__tag-option:hover,
240
+ .cloud-resource-search__tag-option.is-active {
241
+ background: var(--k2b-selected);
242
+ }
243
+ .cloud-resource-search__tag-option > i {
244
+ flex: none;
245
+ color: var(--k2b-text-muted);
246
+ }
247
+ .cloud-resource-search__tag-option > span {
248
+ display: flex;
249
+ flex: 1;
250
+ min-width: 0;
251
+ flex-direction: column;
252
+ gap: 0.125rem;
253
+ }
254
+ .cloud-resource-search__tag-option strong {
255
+ font-size: 0.8125rem;
256
+ font-weight: 500;
257
+ }
258
+ .cloud-resource-search__tag-option small {
259
+ color: var(--k2b-text-muted);
260
+ font-size: 0.6875rem;
261
+ }
262
+ .cloud-resource-search__tag-option code {
263
+ max-width: 35%;
264
+ overflow-wrap: anywhere;
265
+ color: var(--k2b-text-muted);
266
+ font-size: 0.6875rem;
267
+ }
268
+ .cloud-resource-search__footer {
269
+ grid-area: 4 / 1;
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 0.75rem;
273
+ padding: 0.625rem 1.125rem 0.5rem;
274
+ }
275
+ .cloud-resource-search__keys {
276
+ display: flex;
277
+ flex: 1;
278
+ gap: 0.875rem;
279
+ color: var(--k2b-text-muted);
280
+ font-size: 0.625rem;
281
+ }
282
+ .cloud-resource-search__selection {
283
+ flex: 1;
284
+ min-width: 0;
285
+ overflow: hidden;
286
+ text-overflow: ellipsis;
287
+ white-space: nowrap;
288
+ color: var(--k2b-text-muted);
289
+ font-size: 0.6875rem;
290
+ }
291
+ .cloud-resource-search__preview {
292
+ display: none;
293
+ min-width: 0;
294
+ padding: 1.25rem;
295
+ border-radius: 0.6875rem;
296
+ background: var(--ui-surface-muted);
297
+ }
298
+ .cloud-resource-search__preview-app {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 0.5rem;
302
+ margin-bottom: 1.75rem;
303
+ padding-right: 2rem;
304
+ color: var(--k2b-text-muted);
305
+ font-size: 0.75rem;
306
+ }
307
+ .cloud-resource-search__preview h2 {
308
+ margin: 0;
309
+ overflow-wrap: anywhere;
310
+ font-size: 1.1875rem;
311
+ font-weight: 500;
312
+ letter-spacing: -0.025em;
313
+ line-height: 1.45;
314
+ }
315
+ .cloud-resource-search__preview dl {
316
+ display: grid;
317
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1.7fr);
318
+ gap: 0.75rem 0.5rem;
319
+ margin: 1.75rem 0 0;
320
+ font-size: 0.75rem;
321
+ }
322
+ .cloud-resource-search__preview dt {
323
+ color: var(--k2b-text-muted);
324
+ overflow-wrap: anywhere;
325
+ }
326
+ .cloud-resource-search__preview dd {
327
+ margin: 0;
328
+ overflow-wrap: anywhere;
329
+ }
330
+ .cloud-resource-search__preview p {
331
+ margin-top: 1.75rem;
332
+ color: var(--k2b-text-muted);
333
+ font-size: 0.8125rem;
334
+ line-height: 1.85;
335
+ overflow-wrap: anywhere;
336
+ }
337
+ .cloud-resource-search__image {
338
+ width: 100%;
339
+ max-height: 12rem;
340
+ object-fit: contain;
341
+ margin-top: 1.25rem;
342
+ border-radius: 0.5rem;
343
+ }
344
+ .cloud-resource-search .cloud-resource-search__back {
345
+ display: none;
346
+ }
347
+ .cloud-resource-search :is(.cloud-resource-search__result, .cloud-resource-search__tag-option, .cloud-resource-search__tag):focus-visible {
348
+ outline: 2px solid var(--color-blue-500);
349
+ outline-offset: -2px;
350
+ }
351
+ @media (min-width: 48rem) {
352
+ .cloud-resource-search {
353
+ grid-template-columns: minmax(0, 1fr) 19rem;
354
+ gap: 0 0.625rem;
355
+ }
356
+ .cloud-resource-search__input {
357
+ padding-right: 1rem;
358
+ }
359
+ .cloud-resource-search__preview {
360
+ display: block;
361
+ grid-column: 2;
362
+ grid-row: 1 / 5;
363
+ }
364
+ .cloud-resource-search .cloud-resource-search__details {
365
+ display: none;
366
+ }
367
+ }
368
+ @media (max-width: 47.999rem) {
369
+ .cloud-search-dialog {
370
+ --search-expanded-height: 36rem;
371
+ }
372
+ .cloud-resource-search {
373
+ --search-body-height: max(0px, min(28rem, calc(var(--search-max-height) - 12rem)));
374
+ }
375
+ .cloud-resource-search__input {
376
+ padding-left: 0.625rem;
377
+ gap: 0.5625rem;
378
+ }
379
+ .cloud-resource-search__field input {
380
+ font-size: 1.125rem;
381
+ }
382
+ .cloud-resource-search__result {
383
+ padding-inline: 0.625rem;
384
+ }
385
+ .cloud-resource-search__results {
386
+ padding-inline: 0;
387
+ }
388
+ .cloud-resource-search__hint,
389
+ .cloud-resource-search__idle,
390
+ .cloud-resource-search__footer,
391
+ .cloud-resource-search__count,
392
+ .cloud-resource-search__tag-heading {
393
+ padding-inline: 0.625rem;
394
+ }
395
+ .cloud-resource-search.shows-details .cloud-resource-search__body {
396
+ display: none;
397
+ }
398
+ .cloud-resource-search.shows-details .cloud-resource-search__preview {
399
+ display: block;
400
+ grid-area: 3 / 1;
401
+ max-height: var(--search-body-height);
402
+ }
403
+ .cloud-resource-search.shows-details .cloud-resource-search__back {
404
+ display: inline-flex;
405
+ margin-bottom: 1rem;
406
+ }
407
+ .cloud-resource-search.shows-details .cloud-resource-search__details {
408
+ display: none;
409
+ }
410
+ }
411
+
412
+ /* Border grips belong only to desktop Spotlight, never the resource picker. */
413
+ .cloud-search-dialog:has(.cloud-global-search) {
414
+ overflow: visible;
415
+ }
416
+ .cloud-global-search {
417
+ border-radius: inherit;
418
+ }
419
+ .cloud-global-search > .cloud-resource-search {
420
+ z-index: 1;
421
+ background: var(--ui-dialog-surface);
422
+ border-radius: var(--ui-radius-frame);
423
+ overflow: hidden;
424
+ }
425
+ .cloud-search-dialog[data-modeless="true"] {
426
+ --search-max-height: calc(100dvh - 1.5rem);
427
+ z-index: 100;
428
+ }
429
+ .cloud-global-search [data-search-grip] {
430
+ display: none;
431
+ }
432
+ .cloud-global-search[data-movable="true"] [data-search-grip] {
433
+ display: block;
434
+ position: absolute;
435
+ z-index: 2;
436
+ cursor: grab;
437
+ touch-action: none;
438
+ }
439
+ .cloud-global-search[data-dragging="true"] [data-search-grip] {
440
+ cursor: grabbing;
441
+ }
442
+ .cloud-global-search [data-search-grip="top"] {
443
+ top: -8px;
444
+ left: -8px;
445
+ right: -8px;
446
+ height: 16px;
447
+ }
448
+ .cloud-global-search [data-search-grip="bottom"] {
449
+ bottom: -8px;
450
+ left: -8px;
451
+ right: -8px;
452
+ height: 16px;
453
+ }
454
+ .cloud-global-search [data-search-grip="left"] {
455
+ left: -8px;
456
+ top: 8px;
457
+ bottom: 8px;
458
+ width: 16px;
459
+ }
460
+ .cloud-global-search [data-search-grip="right"] {
461
+ right: -8px;
462
+ top: 8px;
463
+ bottom: 8px;
464
+ width: 16px;
465
+ }
466
+
467
+ .cloud-global-search__home {
468
+ display: none;
469
+ position: absolute;
470
+ pointer-events: none;
471
+ z-index: 0;
472
+ place-items: center;
473
+ background: color-mix(in srgb, var(--ui-dialog-surface) 82%, transparent);
474
+ backdrop-filter: blur(8px);
475
+ border-radius: var(--ui-radius-frame);
476
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-border) 35%, transparent);
477
+ color: var(--k2b-text-muted);
478
+ transition:
479
+ background-color 120ms ease,
480
+ color 120ms ease;
481
+ }
482
+ .cloud-global-search__home > div {
483
+ display: grid;
484
+ justify-items: center;
485
+ gap: 0.5rem;
486
+ font-size: 0.8125rem;
487
+ }
488
+ .cloud-global-search__home i {
489
+ font-size: 1.75rem;
490
+ }
491
+ .cloud-global-search__home[data-ready="true"] {
492
+ /* Keep the release cue visible when the dragged search overlaps its target. */
493
+ z-index: 3;
494
+ background: color-mix(in srgb, var(--k2b-focus-ring) 12%, var(--ui-dialog-surface) 88%);
495
+ color: var(--k2b-focus-ring);
496
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--k2b-focus-ring) 45%, transparent);
497
+ }
498
+ .cloud-global-search[data-dragging="true"] .cloud-global-search__home {
499
+ display: grid;
500
+ }
501
+ @media (prefers-reduced-motion: reduce) {
502
+ .cloud-global-search__home {
503
+ transition: none;
504
+ }
505
+ }
@@ -230,3 +230,16 @@
230
230
  background: var(--ui-surface-raised);
231
231
  box-shadow: var(--ui-shadow-float) !important;
232
232
  }
233
+
234
+ /* Approval prose follows the surrounding review fields, not document typography. */
235
+ .k2b-ui .k2b-content-markdown.cloud-ai-approval-detail {
236
+ font-size: inherit;
237
+ line-height: 1.6667;
238
+ color: var(--k2b-text-muted);
239
+ }
240
+ .k2b-ui .cloud-ai-approval-detail strong {
241
+ color: var(--k2b-text);
242
+ font-size: inherit;
243
+ font-weight: 600;
244
+ }
245
+ .k2b-ui .cloud-ai-approval-detail p + p { margin-top: .75rem; }
@@ -144,10 +144,6 @@
144
144
  gap: 0;
145
145
  }
146
146
 
147
- .app-workspace:has(> .workspace-content) > .workspace-sidebar-mobile {
148
- grid-area: mobile;
149
- }
150
-
151
147
  .app-workspace:has(> .workspace-content) > .workspace-content {
152
148
  grid-area: content;
153
149
  }
@@ -238,7 +234,7 @@
238
234
  }
239
235
 
240
236
  /* Shared shell frame and overview composition. */
241
- @media (min-width: 768px) {
237
+ @media (min-width: 1024px) {
242
238
  .cloud-app-canvas .layout-header {
243
239
  padding: 0.375rem 0.75rem 0.375rem 1.125rem;
244
240
  border-color: transparent;
@@ -135,13 +135,9 @@
135
135
  @apply lg:hidden flex flex-col gap-3;
136
136
  }
137
137
 
138
- @utility sidebar-mobile-toggle {
139
- @apply sidebar-header cursor-pointer select-none list-none;
140
- }
141
138
 
142
- @utility sidebar-mobile-actions {
143
- @apply flex flex-wrap gap-2;
144
- }
139
+
140
+
145
141
 
146
142
  @utility sidebar-item-mobile {
147
143
  @apply btn-input btn-input-sm;
@@ -888,7 +884,7 @@
888
884
  }
889
885
  }
890
886
 
891
- @media (min-width: 768px) and (hover: hover) and (pointer: fine) {
887
+ @media (min-width: 1024px) and (hover: hover) and (pointer: fine) {
892
888
  .layout-profile-preferences__link,
893
889
  .layout-profile-preferences__panel {
894
890
  display: flex;
@@ -899,20 +895,6 @@
899
895
  }
900
896
  }
901
897
 
902
- /* Keep the 46px header for wider desktop viewports. Compact and 14-inch
903
- laptop widths stay rail-only, while viewports wider than 1536px retain the
904
- header. Because it becomes display:none, the shell flex gap adds no empty
905
- top row or double spacing. */
906
- @media (min-width: 768px) and (max-width: 96rem) {
907
- .cloud-app-canvas[data-layout-authenticated="true"] .layout-header {
908
- display: none;
909
- }
910
-
911
- .cloud-app-canvas[data-layout-authenticated="true"] .layout-profile-preferences[data-placement="rail"] {
912
- display: inline-flex;
913
- }
914
- }
915
-
916
898
  @media (prefers-reduced-motion: reduce) {
917
899
  .layout-profile-preferences__link,
918
900
  .layout-profile-preferences__dropdown-trigger,
@@ -960,24 +942,6 @@
960
942
  padding: 0 0.25rem;
961
943
  }
962
944
 
963
- .workspace-sidebar-mobile > details {
964
- overflow: hidden;
965
- border: 0;
966
- border-radius: 0;
967
- background: var(--ui-surface-subtle);
968
- box-shadow: none;
969
- }
970
-
971
- .workspace-sidebar-mobile .sidebar-mobile-toggle {
972
- min-height: 2.75rem;
973
- padding: 0.375rem 0.625rem;
974
- }
975
-
976
- .workspace-sidebar-mobile .sidebar-mobile-actions {
977
- gap: var(--ui-space-control);
978
- padding: 0 0.625rem 0.625rem;
979
- }
980
-
981
945
  .sidebar-header-icon {
982
946
  width: 1.4375rem;
983
947
  height: 1.4375rem;
@@ -7,6 +7,11 @@ declare module "*.md" {
7
7
  export default content;
8
8
  }
9
9
 
10
+ declare module "*.sql" {
11
+ const content: string;
12
+ export default content;
13
+ }
14
+
10
15
  declare module "*.sh" {
11
16
  const content: string;
12
17
  export default content;