aimeat 1.26.0 → 1.27.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 (307) hide show
  1. package/README.md +7 -0
  2. package/dist/.env.example +19 -0
  3. package/dist/locales/en.json +507 -288
  4. package/dist/locales/fi.json +476 -257
  5. package/dist/public/css/components/app-sandbox.css +62 -0
  6. package/dist/public/css/views/app-grant.css +83 -0
  7. package/dist/public/css/views/inbox.css +30 -0
  8. package/dist/public/css/views/landing.css +16 -2
  9. package/dist/public/css/views/living.css +187 -0
  10. package/dist/public/css/views/notebook.css +89 -0
  11. package/dist/public/css/views/profile.css +42 -85
  12. package/dist/public/js/app-sandbox.js +42 -0
  13. package/dist/public/js/services/generator-prompts-base.js +40 -3
  14. package/dist/public/js/services/living.js +506 -0
  15. package/dist/public/js/services/notebook-plan.js +211 -0
  16. package/dist/public/js/services/notebook.js +149 -0
  17. package/dist/public/js/services/organisms.js +10 -2
  18. package/dist/public/js/services/tracked-responses.js +79 -0
  19. package/dist/public/js/utils.js +15 -0
  20. package/dist/public/spa.html +20 -1
  21. package/dist/public/types/aimeat-globals.d.ts +4 -0
  22. package/dist/public/views/app-grant.js +210 -0
  23. package/dist/public/views/business.js +8 -1
  24. package/dist/public/views/how-it-works.js +5 -1
  25. package/dist/public/views/landing-node-totals.js +71 -0
  26. package/dist/public/views/landing.js +88 -79
  27. package/dist/public/views/profile/access-tab.js +75 -0
  28. package/dist/public/views/profile/agents-tab.js +3 -2
  29. package/dist/public/views/profile/apps-tab.js +17 -0
  30. package/dist/public/views/profile/inbox-tab.js +204 -7
  31. package/dist/public/views/profile/landing-page.js +255 -163
  32. package/dist/public/views/profile/living-tab.js +480 -0
  33. package/dist/public/views/profile/notebook-card.js +489 -0
  34. package/dist/public/views/profile/notebook-helpers.js +48 -0
  35. package/dist/public/views/profile/notebook-tab.js +40 -260
  36. package/dist/public/views/profile.js +2 -0
  37. package/dist/scripts/reassign-apps.d.ts +2 -0
  38. package/dist/scripts/reassign-apps.d.ts.map +1 -0
  39. package/dist/scripts/reassign-apps.js +99 -0
  40. package/dist/scripts/reassign-apps.js.map +1 -0
  41. package/dist/scripts/screenshot-worker.d.ts +2 -0
  42. package/dist/scripts/screenshot-worker.d.ts.map +1 -0
  43. package/dist/scripts/screenshot-worker.js +14 -0
  44. package/dist/scripts/screenshot-worker.js.map +1 -0
  45. package/dist/src/auth/jwt.d.ts +2 -0
  46. package/dist/src/auth/jwt.d.ts.map +1 -1
  47. package/dist/src/auth/jwt.js +2 -0
  48. package/dist/src/auth/jwt.js.map +1 -1
  49. package/dist/src/auth/middleware.d.ts.map +1 -1
  50. package/dist/src/auth/middleware.js +6 -2
  51. package/dist/src/auth/middleware.js.map +1 -1
  52. package/dist/src/cli/init-wizard.d.ts +7 -3
  53. package/dist/src/cli/init-wizard.d.ts.map +1 -1
  54. package/dist/src/cli/init-wizard.js +50 -5
  55. package/dist/src/cli/init-wizard.js.map +1 -1
  56. package/dist/src/cli/screenshot-worker.d.ts +2 -0
  57. package/dist/src/cli/screenshot-worker.d.ts.map +1 -0
  58. package/dist/src/cli/screenshot-worker.js +156 -0
  59. package/dist/src/cli/screenshot-worker.js.map +1 -0
  60. package/dist/src/config.d.ts +23 -0
  61. package/dist/src/config.d.ts.map +1 -1
  62. package/dist/src/config.js +28 -0
  63. package/dist/src/config.js.map +1 -1
  64. package/dist/src/generated/api-types.d.ts +2756 -1285
  65. package/dist/src/generated/api-types.d.ts.map +1 -1
  66. package/dist/src/generated/prisma-postgres/edge.js +21 -3
  67. package/dist/src/generated/prisma-postgres/index-browser.js +18 -0
  68. package/dist/src/generated/prisma-postgres/index.d.ts +1648 -155
  69. package/dist/src/generated/prisma-postgres/index.js +21 -3
  70. package/dist/src/generated/prisma-postgres/package.json +1 -1
  71. package/dist/src/generated/prisma-postgres/schema.prisma +21 -0
  72. package/dist/src/generated/prisma-postgres/wasm.js +21 -3
  73. package/dist/src/index.js +8 -0
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/mcp/apps.d.ts +2 -0
  76. package/dist/src/mcp/apps.d.ts.map +1 -1
  77. package/dist/src/mcp/apps.js +32 -2
  78. package/dist/src/mcp/apps.js.map +1 -1
  79. package/dist/src/mcp/extensions.d.ts +1 -0
  80. package/dist/src/mcp/extensions.d.ts.map +1 -1
  81. package/dist/src/mcp/extensions.js +10 -1
  82. package/dist/src/mcp/extensions.js.map +1 -1
  83. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  84. package/dist/src/mcp/workspaces.js +4 -1
  85. package/dist/src/mcp/workspaces.js.map +1 -1
  86. package/dist/src/middleware/rate-limit.d.ts +10 -0
  87. package/dist/src/middleware/rate-limit.d.ts.map +1 -1
  88. package/dist/src/middleware/rate-limit.js +24 -4
  89. package/dist/src/middleware/rate-limit.js.map +1 -1
  90. package/dist/src/middleware/subdomain.d.ts +15 -3
  91. package/dist/src/middleware/subdomain.d.ts.map +1 -1
  92. package/dist/src/middleware/subdomain.js +35 -12
  93. package/dist/src/middleware/subdomain.js.map +1 -1
  94. package/dist/src/routes/admin.js +4 -2
  95. package/dist/src/routes/admin.js.map +1 -1
  96. package/dist/src/routes/agent-webhook.d.ts.map +1 -1
  97. package/dist/src/routes/agent-webhook.js +3 -2
  98. package/dist/src/routes/agent-webhook.js.map +1 -1
  99. package/dist/src/routes/app-grants.d.ts +35 -0
  100. package/dist/src/routes/app-grants.d.ts.map +1 -0
  101. package/dist/src/routes/app-grants.js +370 -0
  102. package/dist/src/routes/app-grants.js.map +1 -0
  103. package/dist/src/routes/apps.d.ts +18 -0
  104. package/dist/src/routes/apps.d.ts.map +1 -1
  105. package/dist/src/routes/apps.js +232 -13
  106. package/dist/src/routes/apps.js.map +1 -1
  107. package/dist/src/routes/extensions.d.ts +2 -0
  108. package/dist/src/routes/extensions.d.ts.map +1 -1
  109. package/dist/src/routes/extensions.js +18 -9
  110. package/dist/src/routes/extensions.js.map +1 -1
  111. package/dist/src/routes/foundry.d.ts.map +1 -1
  112. package/dist/src/routes/foundry.js +13 -1
  113. package/dist/src/routes/foundry.js.map +1 -1
  114. package/dist/src/routes/generator.d.ts.map +1 -1
  115. package/dist/src/routes/generator.js +13 -1
  116. package/dist/src/routes/generator.js.map +1 -1
  117. package/dist/src/routes/ghii.d.ts.map +1 -1
  118. package/dist/src/routes/ghii.js +20 -10
  119. package/dist/src/routes/ghii.js.map +1 -1
  120. package/dist/src/routes/librarian.d.ts.map +1 -1
  121. package/dist/src/routes/librarian.js +64 -2
  122. package/dist/src/routes/librarian.js.map +1 -1
  123. package/dist/src/routes/libs.d.ts +15 -0
  124. package/dist/src/routes/libs.d.ts.map +1 -1
  125. package/dist/src/routes/libs.js +301 -2
  126. package/dist/src/routes/libs.js.map +1 -1
  127. package/dist/src/routes/living.d.ts +18 -0
  128. package/dist/src/routes/living.d.ts.map +1 -0
  129. package/dist/src/routes/living.js +63 -0
  130. package/dist/src/routes/living.js.map +1 -0
  131. package/dist/src/routes/memory.d.ts.map +1 -1
  132. package/dist/src/routes/memory.js +4 -1
  133. package/dist/src/routes/memory.js.map +1 -1
  134. package/dist/src/routes/messages.d.ts +2 -0
  135. package/dist/src/routes/messages.d.ts.map +1 -1
  136. package/dist/src/routes/messages.js +16 -87
  137. package/dist/src/routes/messages.js.map +1 -1
  138. package/dist/src/routes/oauth-login.d.ts +22 -0
  139. package/dist/src/routes/oauth-login.d.ts.map +1 -0
  140. package/dist/src/routes/oauth-login.js +219 -0
  141. package/dist/src/routes/oauth-login.js.map +1 -0
  142. package/dist/src/routes/organisms.d.ts.map +1 -1
  143. package/dist/src/routes/organisms.js +4 -1
  144. package/dist/src/routes/organisms.js.map +1 -1
  145. package/dist/src/routes/portal.d.ts +3 -0
  146. package/dist/src/routes/portal.d.ts.map +1 -1
  147. package/dist/src/routes/portal.js +20 -12
  148. package/dist/src/routes/portal.js.map +1 -1
  149. package/dist/src/routes/public-stats.d.ts +3 -0
  150. package/dist/src/routes/public-stats.d.ts.map +1 -1
  151. package/dist/src/routes/public-stats.js +48 -0
  152. package/dist/src/routes/public-stats.js.map +1 -1
  153. package/dist/src/routes/storage-files.js +10 -10
  154. package/dist/src/routes/storage-files.js.map +1 -1
  155. package/dist/src/routes/subdomains.d.ts +33 -0
  156. package/dist/src/routes/subdomains.d.ts.map +1 -1
  157. package/dist/src/routes/subdomains.js +182 -9
  158. package/dist/src/routes/subdomains.js.map +1 -1
  159. package/dist/src/routes/tracked-responses.d.ts +27 -0
  160. package/dist/src/routes/tracked-responses.d.ts.map +1 -0
  161. package/dist/src/routes/tracked-responses.js +160 -0
  162. package/dist/src/routes/tracked-responses.js.map +1 -0
  163. package/dist/src/routes/upload.js +8 -0
  164. package/dist/src/routes/upload.js.map +1 -1
  165. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  166. package/dist/src/server-bootstrap/routes-loader.js +33 -0
  167. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  168. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  169. package/dist/src/server-bootstrap/service-init.js +4 -0
  170. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  171. package/dist/src/server-bootstrap/static-files.d.ts +8 -0
  172. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  173. package/dist/src/server-bootstrap/static-files.js +52 -3
  174. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  175. package/dist/src/server.d.ts.map +1 -1
  176. package/dist/src/server.js +5 -0
  177. package/dist/src/server.js.map +1 -1
  178. package/dist/src/services/core-jobs.d.ts.map +1 -1
  179. package/dist/src/services/core-jobs.js +5 -0
  180. package/dist/src/services/core-jobs.js.map +1 -1
  181. package/dist/src/services/event-bus.d.ts +10 -0
  182. package/dist/src/services/event-bus.d.ts.map +1 -1
  183. package/dist/src/services/event-bus.js +9 -0
  184. package/dist/src/services/event-bus.js.map +1 -1
  185. package/dist/src/services/generator-prompts/resolvers.d.ts +2 -0
  186. package/dist/src/services/generator-prompts/resolvers.d.ts.map +1 -1
  187. package/dist/src/services/generator-prompts/resolvers.js +22 -3
  188. package/dist/src/services/generator-prompts/resolvers.js.map +1 -1
  189. package/dist/src/services/hooks.js +2 -2
  190. package/dist/src/services/hooks.js.map +1 -1
  191. package/dist/src/services/job-seeding.d.ts.map +1 -1
  192. package/dist/src/services/job-seeding.js +2 -0
  193. package/dist/src/services/job-seeding.js.map +1 -1
  194. package/dist/src/services/living-author-prompt.d.ts +14 -0
  195. package/dist/src/services/living-author-prompt.d.ts.map +1 -0
  196. package/dist/src/services/living-author-prompt.js +47 -0
  197. package/dist/src/services/living-author-prompt.js.map +1 -0
  198. package/dist/src/services/living-author.d.ts +55 -0
  199. package/dist/src/services/living-author.d.ts.map +1 -0
  200. package/dist/src/services/living-author.js +91 -0
  201. package/dist/src/services/living-author.js.map +1 -0
  202. package/dist/src/services/living-pulse.d.ts +29 -0
  203. package/dist/src/services/living-pulse.d.ts.map +1 -0
  204. package/dist/src/services/living-pulse.js +363 -0
  205. package/dist/src/services/living-pulse.js.map +1 -0
  206. package/dist/src/services/message-send.d.ts +24 -0
  207. package/dist/src/services/message-send.d.ts.map +1 -0
  208. package/dist/src/services/message-send.js +114 -0
  209. package/dist/src/services/message-send.js.map +1 -0
  210. package/dist/src/services/notebook-ai.d.ts +36 -0
  211. package/dist/src/services/notebook-ai.d.ts.map +1 -0
  212. package/dist/src/services/notebook-ai.js +51 -0
  213. package/dist/src/services/notebook-ai.js.map +1 -0
  214. package/dist/src/services/notebook-classify.d.ts +32 -5
  215. package/dist/src/services/notebook-classify.d.ts.map +1 -1
  216. package/dist/src/services/notebook-classify.js +59 -43
  217. package/dist/src/services/notebook-classify.js.map +1 -1
  218. package/dist/src/services/notebook-distribute-prompt.d.ts +16 -0
  219. package/dist/src/services/notebook-distribute-prompt.d.ts.map +1 -0
  220. package/dist/src/services/notebook-distribute-prompt.js +40 -0
  221. package/dist/src/services/notebook-distribute-prompt.js.map +1 -0
  222. package/dist/src/services/notebook-plan-prompt.d.ts +19 -0
  223. package/dist/src/services/notebook-plan-prompt.d.ts.map +1 -0
  224. package/dist/src/services/notebook-plan-prompt.js +54 -0
  225. package/dist/src/services/notebook-plan-prompt.js.map +1 -0
  226. package/dist/src/services/notebook-plan.d.ts +70 -0
  227. package/dist/src/services/notebook-plan.d.ts.map +1 -0
  228. package/dist/src/services/notebook-plan.js +118 -0
  229. package/dist/src/services/notebook-plan.js.map +1 -0
  230. package/dist/src/services/oidc-client.d.ts +3 -0
  231. package/dist/src/services/oidc-client.d.ts.map +1 -1
  232. package/dist/src/services/oidc-client.js +17 -2
  233. package/dist/src/services/oidc-client.js.map +1 -1
  234. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  235. package/dist/src/services/prompt-defaults.js +30 -0
  236. package/dist/src/services/prompt-defaults.js.map +1 -1
  237. package/dist/src/services/quota.d.ts +14 -1
  238. package/dist/src/services/quota.d.ts.map +1 -1
  239. package/dist/src/services/quota.js +28 -1
  240. package/dist/src/services/quota.js.map +1 -1
  241. package/dist/src/services/scheduler.d.ts +5 -0
  242. package/dist/src/services/scheduler.d.ts.map +1 -1
  243. package/dist/src/services/scheduler.js +4 -0
  244. package/dist/src/services/scheduler.js.map +1 -1
  245. package/dist/src/services/screenshot-capture.d.ts +28 -0
  246. package/dist/src/services/screenshot-capture.d.ts.map +1 -0
  247. package/dist/src/services/screenshot-capture.js +154 -0
  248. package/dist/src/services/screenshot-capture.js.map +1 -0
  249. package/dist/src/services/track-registry.d.ts +29 -0
  250. package/dist/src/services/track-registry.d.ts.map +1 -0
  251. package/dist/src/services/track-registry.js +61 -0
  252. package/dist/src/services/track-registry.js.map +1 -0
  253. package/dist/src/services/tracked-response.d.ts +98 -0
  254. package/dist/src/services/tracked-response.d.ts.map +1 -0
  255. package/dist/src/services/tracked-response.js +304 -0
  256. package/dist/src/services/tracked-response.js.map +1 -0
  257. package/dist/src/services/webhook-dispatcher.d.ts.map +1 -1
  258. package/dist/src/services/webhook-dispatcher.js +3 -2
  259. package/dist/src/services/webhook-dispatcher.js.map +1 -1
  260. package/dist/src/storage/interface.d.ts +19 -2
  261. package/dist/src/storage/interface.d.ts.map +1 -1
  262. package/dist/src/storage/interface.js.map +1 -1
  263. package/dist/src/storage/providers/mongodb/index.d.ts +16 -1
  264. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  265. package/dist/src/storage/providers/mongodb/index.js +123 -0
  266. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  267. package/dist/src/storage/providers/sqlite/index.d.ts +10 -1
  268. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  269. package/dist/src/storage/providers/sqlite/index.js +119 -6
  270. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  271. package/dist/src/storage/providers/sqlite/repos/identity.d.ts +1 -0
  272. package/dist/src/storage/providers/sqlite/repos/identity.d.ts.map +1 -1
  273. package/dist/src/storage/providers/sqlite/repos/identity.js +10 -4
  274. package/dist/src/storage/providers/sqlite/repos/identity.js.map +1 -1
  275. package/dist/src/storage/providers/sqlite/schema.d.ts +16 -3
  276. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  277. package/dist/src/storage/providers/sqlite/schema.js +31 -4
  278. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  279. package/dist/src/storage/repositories/app-grant.repository.d.ts +22 -0
  280. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -0
  281. package/dist/src/storage/repositories/app-grant.repository.js +2 -0
  282. package/dist/src/storage/repositories/app-grant.repository.js.map +1 -0
  283. package/dist/src/storage/repositories/app.repository.d.ts +9 -0
  284. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
  285. package/dist/src/storage/repositories/identity.repository.d.ts +1 -0
  286. package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -1
  287. package/dist/src/storage/repositories/index.d.ts +1 -0
  288. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  289. package/dist/src/utils/env-config.d.ts +5 -2
  290. package/dist/src/utils/env-config.d.ts.map +1 -1
  291. package/dist/src/utils/env-config.js +63 -2
  292. package/dist/src/utils/env-config.js.map +1 -1
  293. package/dist/src/utils/env-validator.d.ts +6 -3
  294. package/dist/src/utils/env-validator.d.ts.map +1 -1
  295. package/dist/src/utils/env-validator.js +14 -3
  296. package/dist/src/utils/env-validator.js.map +1 -1
  297. package/dist/src/utils/url-validator.d.ts +15 -0
  298. package/dist/src/utils/url-validator.d.ts.map +1 -1
  299. package/dist/src/utils/url-validator.js +120 -30
  300. package/dist/src/utils/url-validator.js.map +1 -1
  301. package/dist/static/app-catalog.html +505 -30
  302. package/dist/static/app-login.js +67 -0
  303. package/dist/static/app-silent.html +14 -0
  304. package/dist/static/app-silent.js +32 -0
  305. package/package.json +3 -1
  306. package/prisma/schema.postgres.prisma +39 -18
  307. package/prisma/schema.prisma +21 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @file public/css/components/app-sandbox.css
3
+ * @description Full-screen overlay that hosts a sandboxed (opaque-origin) iframe for
4
+ * viewing user-published apps without granting them the apex origin (H-2). Paired with
5
+ * /js/app-sandbox.js (openAppSandboxed).
6
+ * @usage Linked from spa.html; classes applied by /js/app-sandbox.js.
7
+ * @version-history
8
+ * v1.0.0 — 2026-06-20 — Initial (H-2 app-origin isolation, Phase 0).
9
+ */
10
+
11
+ .app-sandbox-overlay {
12
+ position: fixed;
13
+ inset: 0;
14
+ z-index: 10000;
15
+ display: flex;
16
+ flex-direction: column;
17
+ background: var(--bg, #0e0e14);
18
+ }
19
+
20
+ .app-sandbox-toolbar {
21
+ display: flex;
22
+ align-items: center;
23
+ gap: 0.75rem;
24
+ padding: 0.5rem 0.75rem;
25
+ background: var(--surface, #1a1a26);
26
+ border-bottom: 1px solid var(--border, #2a2a3a);
27
+ flex: 0 0 auto;
28
+ }
29
+
30
+ .app-sandbox-title {
31
+ flex: 1 1 auto;
32
+ font-weight: 600;
33
+ font-size: 0.95rem;
34
+ color: var(--text, #e8e8f0);
35
+ white-space: nowrap;
36
+ overflow: hidden;
37
+ text-overflow: ellipsis;
38
+ }
39
+
40
+ .app-sandbox-close {
41
+ flex: 0 0 auto;
42
+ width: 2rem;
43
+ height: 2rem;
44
+ border: 1px solid var(--border, #2a2a3a);
45
+ border-radius: 6px;
46
+ background: var(--bg-dim, #14141c);
47
+ color: var(--text, #e8e8f0);
48
+ font-size: 1rem;
49
+ line-height: 1;
50
+ cursor: pointer;
51
+ }
52
+
53
+ .app-sandbox-close:hover {
54
+ border-color: var(--border-hover, #3a3a4a);
55
+ }
56
+
57
+ .app-sandbox-frame {
58
+ flex: 1 1 auto;
59
+ width: 100%;
60
+ border: 0;
61
+ background: #fff;
62
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @file public/css/views/app-grant.css
3
+ * @description Styles for the app-grant consent page (agr- prefix) — the trusted apex approval
4
+ * screen where an owner reviews a published app's requested scopes (H-2 Phase 3).
5
+ * @version-history
6
+ * v1.0.0 — 2026-06-20 — Initial (H-2 app-origin isolation, Phase 3).
7
+ */
8
+
9
+ .agr-wrap { max-width: 540px; margin: 3rem auto; padding: 0 1.25rem; }
10
+
11
+ .agr-card {
12
+ border: 1px solid var(--border);
13
+ border-radius: 14px;
14
+ background: var(--card);
15
+ padding: 1.75rem 1.6rem;
16
+ }
17
+
18
+ .agr-title { font-size: 1.4rem; font-weight: 800; margin: 0 0 1rem; color: var(--text); }
19
+
20
+ .agr-app {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 0.15rem;
24
+ padding: 0.8rem 1rem;
25
+ border: 1px solid var(--border);
26
+ border-radius: 10px;
27
+ background: var(--bg-dim);
28
+ margin-bottom: 1rem;
29
+ }
30
+ .agr-app-name { font-weight: 700; color: var(--text); }
31
+ .agr-app-origin { font-size: 0.82rem; color: var(--text-dim); font-family: var(--font-mono, monospace); }
32
+
33
+ .agr-muted { color: var(--text-dim); font-size: 0.92rem; margin: 0 0 1rem; }
34
+
35
+ .agr-scopes-label { font-weight: 700; font-size: 0.9rem; margin-bottom: 0.5rem; color: var(--text); }
36
+
37
+ .agr-scopes { list-style: none; margin: 0 0 0.75rem; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
38
+ .agr-scope {
39
+ display: flex;
40
+ flex-direction: row;
41
+ align-items: flex-start;
42
+ gap: 0.6rem;
43
+ padding: 0.6rem 0.8rem;
44
+ border: 1px solid var(--border);
45
+ border-radius: 8px;
46
+ background: var(--surface, var(--bg-dim));
47
+ }
48
+ .agr-scope-check { margin-top: 0.2rem; flex: 0 0 auto; accent-color: var(--accent); width: 1rem; height: 1rem; cursor: pointer; }
49
+ .agr-scope-text { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; }
50
+ .agr-scope-name { font-family: var(--font-mono, monospace); font-size: 0.82rem; color: var(--accent); }
51
+ .agr-scope-desc { font-size: 0.88rem; color: var(--text); }
52
+
53
+ /* "External app" badge */
54
+ .agr-badge {
55
+ display: inline-block;
56
+ font-size: 0.72rem;
57
+ font-weight: 700;
58
+ letter-spacing: 0.04em;
59
+ text-transform: uppercase;
60
+ color: var(--warn, #e8a44a);
61
+ background: var(--bg-dim);
62
+ border: 1px solid var(--border);
63
+ border-radius: 999px;
64
+ padding: 0.18rem 0.6rem;
65
+ margin-bottom: 0.6rem;
66
+ }
67
+
68
+ /* Advanced toggle (link-style button) */
69
+ .agr-advanced-toggle {
70
+ background: none;
71
+ border: none;
72
+ color: var(--accent);
73
+ font-size: 0.85rem;
74
+ font-weight: 600;
75
+ cursor: pointer;
76
+ padding: 0.25rem 0;
77
+ margin: 0 0 1rem;
78
+ }
79
+ .agr-advanced-toggle:hover { text-decoration: underline; }
80
+
81
+ .agr-actions { display: flex; gap: 0.75rem; justify-content: flex-end; }
82
+ .agr-btn { min-width: 8rem; text-align: center; }
83
+ .agr-next { font-size: 0.8rem; color: var(--text-dim); text-align: center; margin: 0.9rem 0 0; }
@@ -284,3 +284,33 @@
284
284
  .inbox-attach-btn:hover { border-color: var(--accent); }
285
285
  .inbox-file-chips { display: flex; flex-wrap: wrap; gap: 6px; }
286
286
  .inbox-file-chip { font-size: 12px; color: var(--text-dim); background: var(--card-bg-alt); padding: 3px 8px; border-radius: var(--radius-full); }
287
+
288
+ /* ── Tracked Responses: per-message actions, approval banner, track modal ── */
289
+ .inbox-bubble { position: relative; }
290
+ .inbox-bubble-actions {
291
+ position: absolute; top: 4px; right: 6px;
292
+ display: flex; gap: 2px; opacity: 0; transition: opacity .12s ease;
293
+ }
294
+ .inbox-row:hover .inbox-bubble-actions { opacity: 1; }
295
+ .inbox-bubble-act {
296
+ border: none; background: transparent; cursor: pointer;
297
+ font-size: 13px; line-height: 1; padding: 2px 3px; border-radius: var(--radius-xs);
298
+ color: var(--text-dim);
299
+ }
300
+ .inbox-bubble-act:hover { background: var(--card-bg-alt); color: var(--accent); }
301
+ .inbox-bubble-act--on { color: var(--accent); }
302
+
303
+ .inbox-track-banner {
304
+ display: flex; align-items: center; gap: 10px;
305
+ padding: 8px 12px; margin: 6px 0;
306
+ background: var(--accent-subtle); border: 1px solid var(--accent-border);
307
+ border-radius: var(--radius-sm); font-size: 13px;
308
+ }
309
+ .inbox-track-banner-txt { flex: 1; }
310
+
311
+ .inbox-track-form { display: flex; flex-direction: column; gap: 10px; }
312
+ .inbox-track-hint { color: var(--text-dim); font-size: 13px; margin: 0; }
313
+ .inbox-form-row { display: flex; flex-direction: column; gap: 4px; }
314
+ .inbox-form-label { font-size: 12px; color: var(--text-dim); }
315
+ .inbox-form-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
316
+ .inbox-track-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 6px; }
@@ -7,6 +7,8 @@
7
7
  * v1.1.0 — 2026-06-16 — Add public activity feed styles (pa- prefix).
8
8
  * v1.2.0 — 2026-06-16 — Add reward-first Hero v2 styles (ld-hero2-*): newspaper-framed
9
9
  * Sanomat teaser (designed masthead card; real screenshot when one exists), mobile-first, two CTAs.
10
+ * v1.3.0 — 2026-06-20 — Live wall: .ld-gallery is now a fixed 3-up grid (2-up tablet, 1-up phone)
11
+ * + .ld-wall-search filter box, for the real published-apps wall.
10
12
  */
11
13
  .ld { max-width: 980px; margin: 0 auto; padding: 2rem 1.25rem 3rem; color: var(--text); }
12
14
 
@@ -59,9 +61,13 @@
59
61
  .ld-loop-arrow { color: var(--text-dim); }
60
62
  .ld-section { margin: 2rem 0; }
61
63
  .ld-h2 { font-size: 1.3rem; margin: 0 0 1rem; }
62
- .ld-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .9rem; }
63
- .ld-app-card { display: block; border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: .9rem 1rem; text-decoration: none; color: var(--text); }
64
+ .ld-wall-search { width: 100%; max-width: 360px; margin: 0 0 1rem; padding: .55rem .8rem; border: 1px solid var(--border); border-radius: 8px; background: var(--card); color: var(--text); font-size: .9rem; }
65
+ .ld-gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: .9rem; }
66
+ @media (max-width: 900px) { .ld-gallery { grid-template-columns: repeat(2, 1fr); } }
67
+ @media (max-width: 560px) { .ld-gallery { grid-template-columns: 1fr; } }
68
+ .ld-app-card { display: block; border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: .9rem 1rem; text-decoration: none; color: var(--text); cursor: pointer; }
64
69
  .ld-app-card:hover { border-color: var(--accent); }
70
+ .ld-app-shot { display: block; width: 100%; aspect-ratio: 16 / 10; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); margin-bottom: .55rem; background: var(--bg-dim); }
65
71
  .ld-app-name { font-weight: 700; margin-bottom: .25rem; }
66
72
  .ld-app-desc { font-size: .82rem; color: var(--text-dim); margin-bottom: .4rem; }
67
73
  .ld-app-meta { font-size: .72rem; color: var(--muted); }
@@ -142,3 +148,11 @@
142
148
  .pa-detail-actor { margin: 0 0 .4rem; color: var(--muted); font-size: .78rem; }
143
149
  .pa-detail-link { color: var(--accent); font-weight: 700; text-decoration: none; font-size: .85rem; }
144
150
  .pa-detail-link:hover { text-decoration: underline; }
151
+
152
+ /* ── Node totals panel (nt- prefix) — cumulative counters replacing the activity feed ── */
153
+ .nt-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: .6rem; }
154
+ .nt-card { display: flex; flex-direction: column; align-items: center; gap: .15rem; padding: 1rem .75rem; border: 1px solid var(--border); border-radius: 12px; background: var(--card); text-align: center; }
155
+ .nt-icon { font-size: 1.4rem; line-height: 1; }
156
+ .nt-value { font-size: 1.6rem; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--text); }
157
+ .nt-label { font-size: .8rem; color: var(--text-dim); }
158
+ .nt-sub { font-size: .72rem; font-weight: 600; color: var(--accent); }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * @file living.css
3
+ * @description Styles for the profile Living Documents tab (pf-ld-* prefix): template cards, the
4
+ * template editor (slot rows), the deploy panel, and the deployed-instance viewer. Dark-theme only —
5
+ * all colors/spacing via theme.css variables. Reuses several pf-nb-* helpers from notebook.css.
6
+ * @version-history
7
+ * v1.0.0 — 2026-06-21 — Phase 0: template management + deploy + instance viewer.
8
+ * v1.1.0 — 2026-06-21 — Phase 1: AI-author panel + charter Readable/YAML views.
9
+ * v1.2.0 — 2026-06-21 — Phase 2: pulse status + change ledger.
10
+ * v1.3.0 — 2026-06-21 — Phase 3: status line + pause + cadence control.
11
+ * v1.4.0 — 2026-06-21 — Phase 4: automation controls (trust/triggers) + gated pending review.
12
+ * v1.5.0 — 2026-06-21 — Phase 5: per-section timeline + snapshot + aggregate chart.
13
+ */
14
+
15
+ .pf-ld-timeline {
16
+ display: flex;
17
+ align-items: center;
18
+ gap: var(--space-xs, 0.4rem);
19
+ margin-top: var(--space-xs, 0.4rem);
20
+ }
21
+ .pf-ld-aggregate {
22
+ margin-top: var(--space-xs, 0.4rem);
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: var(--space-xs, 0.4rem);
26
+ }
27
+ .pf-ld-chart {
28
+ display: block;
29
+ background: var(--bg-dim, var(--card));
30
+ border: 1px solid var(--border);
31
+ border-radius: var(--radius, 8px);
32
+ }
33
+ .pf-ld-chart rect { fill: var(--accent, var(--text)); }
34
+
35
+ .pf-ld-automation {
36
+ display: flex;
37
+ flex-wrap: wrap;
38
+ gap: var(--space-md, 1rem);
39
+ align-items: center;
40
+ }
41
+ .pf-ld-num { max-width: 5rem; display: inline-block; margin-left: 0.3rem; }
42
+ .pf-ld-pending {
43
+ border: 1px solid var(--accent, var(--border));
44
+ border-radius: var(--radius, 8px);
45
+ padding: var(--space-sm, 0.75rem);
46
+ margin-top: var(--space-xs, 0.4rem);
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: var(--space-xs, 0.4rem);
50
+ }
51
+ .pf-ld-pending-body { max-height: 16rem; }
52
+
53
+ .pf-ld-status {
54
+ display: flex;
55
+ align-items: center;
56
+ flex-wrap: wrap;
57
+ gap: var(--space-xs, 0.4rem);
58
+ }
59
+ .pf-ld-cadence {
60
+ background: var(--card);
61
+ color: var(--text);
62
+ border: 1px solid var(--border);
63
+ border-radius: var(--radius-sm, 4px);
64
+ padding: 0.1rem 0.3rem;
65
+ }
66
+
67
+ .pf-ld-phase {
68
+ color: var(--accent, var(--text));
69
+ font-style: italic;
70
+ }
71
+ .pf-ld-ledger {
72
+ list-style: none;
73
+ margin: var(--space-xs, 0.4rem) 0 0;
74
+ padding: 0;
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: 0.2rem;
78
+ }
79
+ .pf-ld-ledger li { color: var(--text-dim, var(--text)); }
80
+
81
+ .pf-ld-author {
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: var(--space-xs, 0.4rem);
85
+ margin: var(--space-sm, 0.75rem) 0;
86
+ }
87
+ .pf-ld-author textarea { width: 100%; resize: vertical; font-family: inherit; }
88
+ .pf-ld-author button { align-self: flex-start; }
89
+
90
+ .pf-ld-charter-views {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: var(--space-xs, 0.4rem);
94
+ margin-top: var(--space-xs, 0.4rem);
95
+ }
96
+ .pf-ld-cv-active { color: var(--text); font-weight: 600; }
97
+ .pf-ld-charter-box {
98
+ background: var(--bg-dim, var(--card));
99
+ border: 1px solid var(--border);
100
+ border-radius: var(--radius, 8px);
101
+ padding: var(--space-sm, 0.75rem) var(--space-md, 1rem);
102
+ margin-top: var(--space-xs, 0.4rem);
103
+ }
104
+ .pf-ld-yaml {
105
+ font-family: var(--font-mono, monospace);
106
+ font-size: 0.85em;
107
+ white-space: pre-wrap;
108
+ color: var(--text-dim, var(--text));
109
+ overflow-x: auto;
110
+ }
111
+
112
+ .pf-ld-list {
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: var(--space-sm, 0.75rem);
116
+ margin-top: var(--space-sm, 0.75rem);
117
+ }
118
+ .pf-ld-card {
119
+ background: var(--card);
120
+ border: 1px solid var(--border);
121
+ border-radius: var(--radius, 8px);
122
+ padding: var(--space-sm, 0.75rem) var(--space-md, 1rem);
123
+ display: flex;
124
+ flex-direction: column;
125
+ gap: var(--space-xs, 0.4rem);
126
+ }
127
+ .pf-ld-card-head {
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: space-between;
131
+ gap: var(--space-sm, 0.75rem);
132
+ }
133
+ .pf-ld-card-btns {
134
+ display: flex;
135
+ gap: var(--space-xs, 0.4rem);
136
+ flex-wrap: wrap;
137
+ }
138
+
139
+ .pf-ld-editor {
140
+ margin-top: var(--space-sm, 0.75rem);
141
+ padding: var(--space-md, 1rem);
142
+ background: var(--surface, var(--card));
143
+ border: 1px solid var(--border);
144
+ border-radius: var(--radius, 8px);
145
+ display: flex;
146
+ flex-direction: column;
147
+ gap: var(--space-xs, 0.4rem);
148
+ }
149
+ .pf-ld-slots {
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: var(--space-xs, 0.4rem);
153
+ }
154
+ .pf-ld-slot-row {
155
+ display: flex;
156
+ gap: var(--space-xs, 0.4rem);
157
+ align-items: center;
158
+ }
159
+ .pf-ld-slot-row .input-field { flex: 1; }
160
+ .pf-ld-slot-id { max-width: 9rem; font-family: var(--font-mono, monospace); }
161
+
162
+ .pf-ld-opened-head {
163
+ display: flex;
164
+ align-items: center;
165
+ justify-content: space-between;
166
+ gap: var(--space-sm, 0.75rem);
167
+ }
168
+ .pf-ld-preview {
169
+ margin: var(--space-sm, 0.75rem) 0;
170
+ max-height: 28rem;
171
+ }
172
+ .pf-ld-slot-edit {
173
+ border-top: 1px solid var(--border);
174
+ padding-top: var(--space-sm, 0.75rem);
175
+ margin-top: var(--space-sm, 0.75rem);
176
+ display: flex;
177
+ flex-direction: column;
178
+ gap: var(--space-xs, 0.4rem);
179
+ }
180
+ .pf-ld-slot-edit-head { display: flex; align-items: baseline; gap: var(--space-sm, 0.75rem); }
181
+ .pf-ld-slot-edit textarea { width: 100%; resize: vertical; font-family: inherit; }
182
+ .pf-ld-slot-sources {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: var(--space-sm, 0.75rem);
186
+ }
187
+ .pf-ld-slot-sources .input-field { flex: 1; }
@@ -4,6 +4,8 @@
4
4
  * and inbox notes. Dark-theme only — all colors/spacing via theme.css variables.
5
5
  * @version-history
6
6
  * v1.0.0 — 2026-06-19 — Initial: capture + librarian + inbox (slice A).
7
+ * v1.1.0 — 2026-06-21 — Enrich (plan) panel: plan steps, run controls, enriched preview.
8
+ * v1.2.0 — 2026-06-21 — Phase 3: trust-toggle settings strip + distribute (chunk) panel.
7
9
  */
8
10
 
9
11
  .pf-nb-capture {
@@ -193,3 +195,90 @@
193
195
  }
194
196
  .pf-nb-step.active { opacity: 1; color: var(--text); font-weight: 600; }
195
197
  .pf-nb-step.done { opacity: 0.85; color: var(--success, var(--text)); }
198
+
199
+ /* ── Enrich (plan) panel ── */
200
+ .pf-nb-enrich {
201
+ margin-top: var(--space-sm, 0.75rem);
202
+ padding: var(--space-md, 1rem);
203
+ background: var(--surface, var(--card));
204
+ border: 1px solid var(--border);
205
+ border-radius: var(--radius, 8px);
206
+ display: flex;
207
+ flex-direction: column;
208
+ gap: var(--space-sm, 0.75rem);
209
+ }
210
+ .pf-nb-enrich-summary { font-style: italic; }
211
+ .pf-nb-plan-steps {
212
+ list-style: none;
213
+ margin: 0;
214
+ padding: 0;
215
+ display: flex;
216
+ flex-direction: column;
217
+ gap: var(--space-sm, 0.75rem);
218
+ }
219
+ .pf-nb-plan-step {
220
+ background: var(--card);
221
+ border: 1px solid var(--border);
222
+ border-radius: var(--radius, 8px);
223
+ padding: var(--space-sm, 0.75rem) var(--space-md, 1rem);
224
+ display: flex;
225
+ flex-direction: column;
226
+ gap: var(--space-xs, 0.4rem);
227
+ }
228
+ .pf-nb-plan-step.done { opacity: 0.75; }
229
+ .pf-nb-plan-step.skipped { opacity: 0.5; }
230
+ .pf-nb-plan-step-head {
231
+ display: flex;
232
+ align-items: center;
233
+ gap: var(--space-xs, 0.4rem);
234
+ flex-wrap: wrap;
235
+ }
236
+ .pf-nb-plan-step-title { font-weight: 600; color: var(--text); }
237
+ .pf-nb-plan-tag { color: var(--success, var(--text)); font-size: 0.85em; }
238
+ .pf-nb-plan-why { font-style: italic; }
239
+ .pf-nb-plan-step-btns {
240
+ display: flex;
241
+ gap: var(--space-xs, 0.4rem);
242
+ margin-top: var(--space-xs, 0.4rem);
243
+ }
244
+ .pf-nb-enrich-preview {
245
+ border-top: 1px solid var(--border);
246
+ padding-top: var(--space-sm, 0.75rem);
247
+ }
248
+ .pf-nb-enrich-preview-body {
249
+ max-height: 24rem;
250
+ overflow: auto;
251
+ background: var(--bg-dim, var(--card));
252
+ border: 1px solid var(--border);
253
+ border-radius: var(--radius, 8px);
254
+ padding: var(--space-sm, 0.75rem) var(--space-md, 1rem);
255
+ }
256
+
257
+ /* ── Trust toggles (settings strip) ── */
258
+ .pf-nb-settings {
259
+ display: flex;
260
+ flex-wrap: wrap;
261
+ align-items: center;
262
+ gap: var(--space-sm, 0.75rem);
263
+ margin-top: var(--space-sm, 0.75rem);
264
+ }
265
+ .pf-nb-toggle {
266
+ display: inline-flex;
267
+ align-items: center;
268
+ gap: 0.3rem;
269
+ font-size: 0.85em;
270
+ color: var(--text-dim, var(--text));
271
+ cursor: pointer;
272
+ }
273
+
274
+ /* ── Distribute (chunk) panel ── */
275
+ .pf-nb-chunk-pick {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ gap: 0.4rem;
279
+ cursor: pointer;
280
+ }
281
+ .pf-nb-chunk-body {
282
+ max-height: 14rem;
283
+ margin-top: var(--space-xs, 0.4rem);
284
+ }
@@ -1591,83 +1591,45 @@
1591
1591
  }
1592
1592
  .pf .pf-fed-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--success, #22c55e); }
1593
1593
 
1594
- /* --- Hero Onboarding (new user) --- */
1595
- .pf .pf-hero-onboard {
1596
- background: var(--card, #fff); border-radius: 16px;
1597
- padding: 24px; box-shadow: 0 4px 12px rgba(0,0,0,.06);
1598
- }
1599
- .pf .pf-hero-ob-title { font-size: 1.2rem; font-weight: 700; margin-bottom: 4px; letter-spacing: -0.3px; }
1600
- .pf .pf-hero-ob-subtitle {
1601
- font-size: .85rem; color: var(--text-dim, #6B7280); margin-bottom: 20px;
1602
- max-width: 560px; line-height: 1.6;
1603
- }
1604
- .pf .pf-onboard-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }
1605
- .pf .pf-onboard-card {
1606
- padding: 16px; border-radius: 12px; border: 1.5px solid var(--border, #e5e5e0);
1607
- cursor: pointer; transition: all .2s; position: relative;
1608
- }
1609
- .pf .pf-onboard-card:hover { border-color: var(--accent, #E8564A); box-shadow: 0 4px 12px rgba(0,0,0,.06); transform: translateY(-1px); }
1610
- .pf .pf-onboard-card.highlight { border-color: var(--accent, #E8564A); background: var(--accent-soft, #FFF0EE); }
1611
- .pf .pf-onboard-card.highlight:hover { background: var(--accent-subtle); }
1612
- .pf .pf-onboard-icon { font-size: 24px; margin-bottom: 8px; display: block; }
1613
- .pf .pf-onboard-title { font-size: .93rem; font-weight: 600; margin-bottom: 4px; }
1614
- .pf .pf-onboard-desc { font-size: .81rem; color: var(--text-dim, #6B7280); line-height: 1.5; }
1615
- .pf .pf-onboard-tag {
1616
- position: absolute; top: 10px; right: 10px; font-size: .6rem; font-weight: 700;
1617
- text-transform: uppercase; letter-spacing: .5px; padding: 2px 8px; border-radius: 4px;
1618
- background: var(--accent, #E8564A); color: #fff;
1619
- }
1620
- .pf .pf-onboard-tag.pf-tag-later { background: var(--border, #e5e5e0); color: var(--text-dim, #6B7280); }
1621
-
1622
- /* --- Knowledge Callout (new user, after hero) --- */
1623
- .pf .pf-knowledge-callout {
1624
- background: var(--pf-callout-gradient);
1625
- border-radius: 12px; padding: 16px 20px;
1626
- display: flex; align-items: flex-start; gap: 14px;
1627
- border: 1px solid rgba(99,102,241,.15); cursor: pointer;
1628
- transition: all .2s;
1629
- }
1630
- .pf .pf-knowledge-callout:hover { border-color: #6366F1; box-shadow: 0 4px 12px rgba(0,0,0,.06); }
1631
- .pf .pf-knowledge-callout-icon { font-size: 28px; flex-shrink: 0; margin-top: 2px; }
1632
- .pf .pf-knowledge-callout-body { flex: 1; min-width: 0; }
1633
- .pf .pf-knowledge-callout-title { font-size: .93rem; font-weight: 600; margin-bottom: 4px; }
1634
- .pf .pf-knowledge-callout-desc { font-size: .81rem; color: var(--text-dim, #6B7280); line-height: 1.55; }
1635
- .pf .pf-ai-pills { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
1636
- .pf .pf-ai-pill {
1637
- font-size: .68rem; font-weight: 500; padding: 2px 10px; border-radius: 20px;
1638
- background: var(--card, #fff); color: var(--text-dim, #6B7280);
1639
- border: 1px solid var(--border, #e5e5e0);
1640
- }
1641
-
1642
- /* --- Knowledge Button (active user) --- */
1643
- .pf .pf-knowledge-btn {
1644
- display: flex; align-items: center; gap: 12px;
1645
- background: var(--pf-callout-gradient);
1646
- border: 1px solid rgba(99,102,241,.15);
1647
- border-radius: 12px; padding: 14px 20px;
1648
- cursor: pointer; transition: all .2s;
1649
- color: var(--text, #1a1a1a);
1650
- }
1651
- .pf .pf-knowledge-btn:hover { border-color: #6366F1; box-shadow: 0 4px 12px rgba(0,0,0,.06); transform: translateY(-1px); }
1652
- .pf .pf-kb-icon { font-size: 22px; flex-shrink: 0; }
1653
- .pf .pf-kb-text { flex: 1; min-width: 0; }
1654
- .pf .pf-kb-title { font-size: .87rem; font-weight: 600; }
1655
- .pf .pf-kb-desc { font-size: .75rem; color: var(--text-dim, #6B7280); }
1656
- .pf .pf-kb-arrow { font-size: 1rem; color: #6366F1; }
1657
-
1658
- /* --- Ghost App Tiles (new user) --- */
1659
- .pf .pf-ghost-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
1660
- .pf .pf-ghost-tile {
1661
- aspect-ratio: 1; border-radius: 12px;
1662
- display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
1663
- cursor: pointer; transition: all .15s;
1664
- border: 1.5px dashed var(--border, #e5e5e0); background: var(--card, #FAFAF8);
1665
- padding: 8px; opacity: .55;
1666
- }
1667
- .pf .pf-ghost-tile:hover { opacity: .85; border-color: var(--accent, #E8564A); }
1668
- .pf .pf-ghost-icon { font-size: 26px; filter: grayscale(50%); }
1669
- .pf .pf-ghost-name { font-size: .68rem; font-weight: 500; text-align: center; color: var(--text-dim, #9CA3AF); line-height: 1.3; }
1670
- .pf .pf-ghost-cta { font-size: .56rem; font-weight: 600; color: var(--accent, #E8564A); text-transform: uppercase; letter-spacing: .3px; margin-top: 2px; }
1594
+ /* --- Header actions + presence pill (ProfileCard header) --- */
1595
+ .pf .pf-lp-actions {
1596
+ margin-left: auto; display: flex; align-items: center; gap: 10px;
1597
+ align-self: flex-start; flex-wrap: wrap;
1598
+ }
1599
+ .pf .pf-presence-pill-btn {
1600
+ display: inline-flex; align-items: center; gap: 4px;
1601
+ border: 1px solid var(--border, #e5e5e0); background: var(--bg-dim, #FAFAF8);
1602
+ color: var(--text, #1a1a1a); border-radius: 999px; padding: 4px 10px 4px 8px;
1603
+ cursor: pointer; font: inherit; font-size: .8rem;
1604
+ transition: border-color .15s, background .15s;
1605
+ }
1606
+ .pf .pf-presence-pill-btn:hover { border-color: var(--accent, #E8564A); background: var(--surface, var(--card)); }
1607
+ .pf .pf-presence-pill-caret { font-size: .7rem; color: var(--text-dim, #9CA3AF); margin-left: 2px; }
1608
+
1609
+ /* --- Suggested next steps (home dashboard) --- */
1610
+ .pf .pf-next {
1611
+ background: var(--card, #fff); border-radius: 16px; padding: 18px 20px;
1612
+ box-shadow: 0 1px 3px rgba(0,0,0,.04); border: 1px solid var(--border-soft, #f0f0ec);
1613
+ }
1614
+ .pf .pf-next-title {
1615
+ font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .5px;
1616
+ color: var(--text-dim, #9CA3AF); margin-bottom: 12px;
1617
+ }
1618
+ .pf .pf-next-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }
1619
+ .pf .pf-next-card {
1620
+ display: flex; align-items: center; gap: 14px; width: 100%; text-align: left;
1621
+ padding: 14px 16px; border-radius: 12px; cursor: pointer; font: inherit;
1622
+ border: 1.5px solid var(--border, #e5e5e0); background: var(--card, #fff);
1623
+ color: var(--text, #1a1a1a); transition: all .18s;
1624
+ }
1625
+ .pf .pf-next-card:hover { border-color: var(--accent, #E8564A); box-shadow: 0 4px 12px rgba(0,0,0,.06); transform: translateY(-1px); }
1626
+ .pf .pf-next-card--primary { border-color: var(--accent, #E8564A); background: var(--accent-soft, #FFF0EE); }
1627
+ .pf .pf-next-card--primary:hover { background: var(--accent-subtle); }
1628
+ .pf .pf-next-ico { font-size: 22px; flex-shrink: 0; line-height: 1; }
1629
+ .pf .pf-next-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
1630
+ .pf .pf-next-card-title { font-size: .92rem; font-weight: 600; }
1631
+ .pf .pf-next-card-desc { font-size: .8rem; color: var(--text-dim, #6B7280); line-height: 1.45; }
1632
+ .pf .pf-next-arrow { font-size: 1.1rem; color: var(--accent, #E8564A); flex-shrink: 0; opacity: .7; }
1671
1633
 
1672
1634
  /* --- Cortex Extensions (new user) --- */
1673
1635
  .pf .pf-cortex-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }
@@ -2035,11 +1997,7 @@
2035
1997
  }
2036
1998
 
2037
1999
  /* ─── Responsive: tablet ─── */
2038
- @media (min-width: 480px) {
2039
- .pf .pf-ghost-grid { grid-template-columns: repeat(4, 1fr); }
2040
- }
2041
2000
  @media (min-width: 640px) {
2042
- .pf .pf-onboard-grid { grid-template-columns: 1fr 1fr; }
2043
2001
  .pf .pf-cortex-grid { grid-template-columns: 1fr 1fr; }
2044
2002
  }
2045
2003
  @media (min-width: 900px) {
@@ -2668,7 +2626,6 @@
2668
2626
  .pf-home-row-meta.pf-ok { color: var(--success-fg, var(--text)); }
2669
2627
  .pf-lp-stat-link { background: none; border: none; padding: 0.15rem 0.35rem; border-radius: 8px; cursor: pointer; font: inherit; color: inherit; }
2670
2628
  .pf-lp-stat-link:hover { background: var(--bg-surface); }
2671
- .pf-lp-profile-btn { margin-left: auto; align-self: flex-start; }
2672
2629
  .pf-promo-dismiss { float: right; background: none; border: none; cursor: pointer; color: var(--muted); font-size: 0.85rem; padding: 0 0.2rem; }
2673
2630
  .pf-promo-dismiss:hover { color: var(--text); }
2674
2631
  /* Edit profile / password dialogs */
@@ -2945,9 +2902,9 @@
2945
2902
  .pf-eco-tech-principal { display: inline-block; background: var(--card); border: 1px solid var(--border); border-radius: 6px; padding: .3rem .5rem; word-break: break-all; }
2946
2903
  .pf-eco-tech-access { margin: -.15rem 0 .4rem; }
2947
2904
 
2948
- /* ── Presence control (Koti home) — backed by PresenceControl in landing-page.js.
2949
- Self-contained card; previews the same <PresenceDot> shown next to people. ── */
2950
- .pf-presence-card { border: 1px solid var(--border); border-radius: 12px; background: var(--card); padding: 1rem 1.1rem; margin-bottom: 1rem; }
2905
+ /* ── Presence settings dialog — backed by PresenceDialog in landing-page.js, opened
2906
+ from the <PresencePill> in the ProfileCard header; previews the same <PresenceDot>
2907
+ shown next to people. ── */
2951
2908
  .pf-presence-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
2952
2909
  .pf-presence-head .section-desc { margin-bottom: .75rem; }
2953
2910
  .pf-presence-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: .5rem 0; }