sensorium-mcp 3.1.3-board.4 → 3.1.4

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 (152) hide show
  1. package/dist/config/misc-settings.d.ts +0 -14
  2. package/dist/config/misc-settings.d.ts.map +1 -1
  3. package/dist/config/misc-settings.js +0 -53
  4. package/dist/config/misc-settings.js.map +1 -1
  5. package/dist/dashboard/routes/settings.d.ts +0 -2
  6. package/dist/dashboard/routes/settings.d.ts.map +1 -1
  7. package/dist/dashboard/routes/settings.js +1 -24
  8. package/dist/dashboard/routes/settings.js.map +1 -1
  9. package/dist/dashboard/routes/types.d.ts +0 -6
  10. package/dist/dashboard/routes/types.d.ts.map +1 -1
  11. package/dist/dashboard/routes/types.js.map +1 -1
  12. package/dist/dashboard/routes.d.ts.map +1 -1
  13. package/dist/dashboard/routes.js +1 -42
  14. package/dist/dashboard/routes.js.map +1 -1
  15. package/dist/dashboard/spa.html +11 -11
  16. package/dist/data/memory/schema.d.ts.map +1 -1
  17. package/dist/data/memory/schema.js +0 -4
  18. package/dist/data/memory/schema.js.map +1 -1
  19. package/dist/index.js +2 -84
  20. package/dist/index.js.map +1 -1
  21. package/dist/server/http-server.d.ts +1 -3
  22. package/dist/server/http-server.d.ts.map +1 -1
  23. package/dist/server/http-server.js +2 -6
  24. package/dist/server/http-server.js.map +1 -1
  25. package/dist/services/broker-client.d.ts +0 -30
  26. package/dist/services/broker-client.d.ts.map +1 -1
  27. package/dist/services/broker-client.js +0 -23
  28. package/dist/services/broker-client.js.map +1 -1
  29. package/dist/services/spawn-common.d.ts.map +1 -1
  30. package/dist/services/spawn-common.js +1 -3
  31. package/dist/services/spawn-common.js.map +1 -1
  32. package/dist/services/worker-cleanup.service.d.ts +1 -6
  33. package/dist/services/worker-cleanup.service.d.ts.map +1 -1
  34. package/dist/services/worker-cleanup.service.js +10 -123
  35. package/dist/services/worker-cleanup.service.js.map +1 -1
  36. package/dist/tools/delegate-tool.d.ts.map +1 -1
  37. package/dist/tools/delegate-tool.js +0 -32
  38. package/dist/tools/delegate-tool.js.map +1 -1
  39. package/dist/tools/wait/message-delivery.d.ts.map +1 -1
  40. package/dist/tools/wait/message-delivery.js +0 -13
  41. package/dist/tools/wait/message-delivery.js.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/board/api/api.js +0 -61
  44. package/dist/board/api/client.js +0 -96
  45. package/dist/board/components/BottomNav.js +0 -32
  46. package/dist/board/components/Card.js +0 -44
  47. package/dist/board/components/CommentComposer.js +0 -26
  48. package/dist/board/components/CommentList.js +0 -39
  49. package/dist/board/components/Dropdown.js +0 -66
  50. package/dist/board/components/Lane.js +0 -40
  51. package/dist/board/components/PriorityChip.js +0 -17
  52. package/dist/board/components/ProfileSummary.js +0 -39
  53. package/dist/board/components/StateBanner.js +0 -22
  54. package/dist/board/components/StatusChip.js +0 -21
  55. package/dist/board/components/TokenEntry.js +0 -42
  56. package/dist/board/config.js +0 -56
  57. package/dist/board/index.html +0 -18
  58. package/dist/board/main.js +0 -37
  59. package/dist/board/mock/api.mock.js +0 -193
  60. package/dist/board/mock/fixtures.js +0 -164
  61. package/dist/board/schema/policy.js +0 -192
  62. package/dist/board/state/auth.js +0 -55
  63. package/dist/board/state/useBoard.js +0 -149
  64. package/dist/board/state/useBuilder.js +0 -98
  65. package/dist/board/state/useCard.js +0 -67
  66. package/dist/board/styles/board.css +0 -1760
  67. package/dist/board/styles/tokens.css +0 -71
  68. package/dist/board/vendor/vue.esm-browser.js +0 -9
  69. package/dist/board/views/App.js +0 -65
  70. package/dist/board/views/BoardView.js +0 -84
  71. package/dist/board/views/BuilderView.js +0 -303
  72. package/dist/board/views/CardView.js +0 -245
  73. package/dist/board/views/SettingsView.js +0 -145
  74. package/dist/dashboard/board-static.d.ts +0 -23
  75. package/dist/dashboard/board-static.d.ts.map +0 -1
  76. package/dist/dashboard/board-static.js +0 -131
  77. package/dist/dashboard/board-static.js.map +0 -1
  78. package/dist/dashboard/routes/board.d.ts +0 -73
  79. package/dist/dashboard/routes/board.d.ts.map +0 -1
  80. package/dist/dashboard/routes/board.js +0 -623
  81. package/dist/dashboard/routes/board.js.map +0 -1
  82. package/dist/data/board/board-schema.d.ts +0 -22
  83. package/dist/data/board/board-schema.d.ts.map +0 -1
  84. package/dist/data/board/board-schema.js +0 -103
  85. package/dist/data/board/board-schema.js.map +0 -1
  86. package/dist/data/board/board-types.d.ts +0 -117
  87. package/dist/data/board/board-types.d.ts.map +0 -1
  88. package/dist/data/board/board-types.js +0 -9
  89. package/dist/data/board/board-types.js.map +0 -1
  90. package/dist/data/board/card.repository.d.ts +0 -64
  91. package/dist/data/board/card.repository.d.ts.map +0 -1
  92. package/dist/data/board/card.repository.js +0 -272
  93. package/dist/data/board/card.repository.js.map +0 -1
  94. package/dist/data/board/comment.repository.d.ts +0 -12
  95. package/dist/data/board/comment.repository.d.ts.map +0 -1
  96. package/dist/data/board/comment.repository.js +0 -31
  97. package/dist/data/board/comment.repository.js.map +0 -1
  98. package/dist/data/board/lane.repository.d.ts +0 -18
  99. package/dist/data/board/lane.repository.d.ts.map +0 -1
  100. package/dist/data/board/lane.repository.js +0 -44
  101. package/dist/data/board/lane.repository.js.map +0 -1
  102. package/dist/data/board/profile-defaults.d.ts +0 -19
  103. package/dist/data/board/profile-defaults.d.ts.map +0 -1
  104. package/dist/data/board/profile-defaults.js +0 -118
  105. package/dist/data/board/profile-defaults.js.map +0 -1
  106. package/dist/services/board/board-signals.d.ts +0 -25
  107. package/dist/services/board/board-signals.d.ts.map +0 -1
  108. package/dist/services/board/board-signals.js +0 -83
  109. package/dist/services/board/board-signals.js.map +0 -1
  110. package/dist/services/board/card-briefing.d.ts +0 -17
  111. package/dist/services/board/card-briefing.d.ts.map +0 -1
  112. package/dist/services/board/card-briefing.js +0 -86
  113. package/dist/services/board/card-briefing.js.map +0 -1
  114. package/dist/services/board/orchestrator.service.d.ts +0 -55
  115. package/dist/services/board/orchestrator.service.d.ts.map +0 -1
  116. package/dist/services/board/orchestrator.service.js +0 -198
  117. package/dist/services/board/orchestrator.service.js.map +0 -1
  118. package/dist/services/board/release-worker.d.ts +0 -32
  119. package/dist/services/board/release-worker.d.ts.map +0 -1
  120. package/dist/services/board/release-worker.js +0 -49
  121. package/dist/services/board/release-worker.js.map +0 -1
  122. package/dist/services/board/report-capture.d.ts +0 -48
  123. package/dist/services/board/report-capture.d.ts.map +0 -1
  124. package/dist/services/board/report-capture.js +0 -172
  125. package/dist/services/board/report-capture.js.map +0 -1
  126. package/dist/services/board/worker-spawn.d.ts +0 -30
  127. package/dist/services/board/worker-spawn.d.ts.map +0 -1
  128. package/dist/services/board/worker-spawn.js +0 -90
  129. package/dist/services/board/worker-spawn.js.map +0 -1
  130. package/dist/services/passive-notice.service.d.ts +0 -39
  131. package/dist/services/passive-notice.service.d.ts.map +0 -1
  132. package/dist/services/passive-notice.service.js +0 -274
  133. package/dist/services/passive-notice.service.js.map +0 -1
  134. package/dist/services/usage/usage-inbox-notifier.d.ts +0 -50
  135. package/dist/services/usage/usage-inbox-notifier.d.ts.map +0 -1
  136. package/dist/services/usage/usage-inbox-notifier.js +0 -118
  137. package/dist/services/usage/usage-inbox-notifier.js.map +0 -1
  138. package/dist/services/usage/usage-poller.service.d.ts +0 -41
  139. package/dist/services/usage/usage-poller.service.d.ts.map +0 -1
  140. package/dist/services/usage/usage-poller.service.js +0 -66
  141. package/dist/services/usage/usage-poller.service.js.map +0 -1
  142. package/dist/services/usage/usage-snapshot-provider.d.ts +0 -29
  143. package/dist/services/usage/usage-snapshot-provider.d.ts.map +0 -1
  144. package/dist/services/usage/usage-snapshot-provider.js +0 -59
  145. package/dist/services/usage/usage-snapshot-provider.js.map +0 -1
  146. package/dist/services/usage/usage-types.d.ts +0 -23
  147. package/dist/services/usage/usage-types.d.ts.map +0 -1
  148. package/dist/services/usage/usage-types.js +0 -14
  149. package/dist/services/usage/usage-types.js.map +0 -1
  150. package/templates/atomic-build-spec.default.md +0 -57
  151. package/templates/buildless-vue-preview.default.md +0 -47
  152. package/templates/phased-build.default.md +0 -59
@@ -1,1760 +0,0 @@
1
- /**
2
- * Board layout + components — ✅ EDITABLE. Dispatch design: mobile-first dark
3
- * shell, soft floating cards, pill chips, mono micro-labels, pulse dots.
4
- */
5
-
6
- * {
7
- box-sizing: border-box;
8
- }
9
- html,
10
- body {
11
- margin: 0;
12
- padding: 0;
13
- }
14
- body {
15
- font-family: var(--font);
16
- font-size: var(--fs-md);
17
- color: var(--c-text);
18
- background: var(--c-bg);
19
- -webkit-text-size-adjust: 100%;
20
- -webkit-font-smoothing: antialiased;
21
- }
22
- a {
23
- color: var(--c-primary);
24
- text-decoration: none;
25
- }
26
- a:hover {
27
- color: oklch(86% 0.11 165);
28
- }
29
-
30
- @keyframes pulse {
31
- 0%,
32
- 100% {
33
- opacity: 1;
34
- transform: scale(1);
35
- }
36
- 50% {
37
- opacity: 0.4;
38
- transform: scale(0.75);
39
- }
40
- }
41
- @keyframes rise {
42
- from {
43
- opacity: 0;
44
- transform: translateY(10px);
45
- }
46
- to {
47
- opacity: 1;
48
- transform: none;
49
- }
50
- }
51
-
52
- .dot {
53
- width: 7px;
54
- height: 7px;
55
- border-radius: 50%;
56
- background: currentColor;
57
- display: inline-block;
58
- flex: none;
59
- }
60
- .dot--pulse {
61
- animation: pulse 1.6s infinite;
62
- }
63
- .mono-label {
64
- font-family: var(--font-mono);
65
- font-size: var(--fs-xs);
66
- letter-spacing: 0.08em;
67
- text-transform: uppercase;
68
- color: var(--c-text-muted);
69
- }
70
-
71
- /* ── App shell ─────────────────────────────────────────────── */
72
- .app {
73
- min-height: 100dvh;
74
- display: flex;
75
- flex-direction: column;
76
- max-width: 430px;
77
- margin: 0 auto;
78
- }
79
- .app-bar {
80
- min-height: var(--bar-h);
81
- display: flex;
82
- align-items: center;
83
- justify-content: space-between;
84
- gap: var(--sp-3);
85
- padding: var(--sp-4) var(--sp-4) var(--sp-2);
86
- background: transparent;
87
- position: sticky;
88
- top: 0;
89
- z-index: 10;
90
- background: var(--c-bg);
91
- }
92
- .app-bar__brand {
93
- display: flex;
94
- align-items: center;
95
- gap: var(--sp-2);
96
- border: 0;
97
- background: none;
98
- color: var(--c-text);
99
- cursor: pointer;
100
- padding: 0;
101
- text-align: left;
102
- }
103
- .app-bar__dot {
104
- width: 10px;
105
- height: 10px;
106
- border-radius: 50%;
107
- background: var(--c-primary);
108
- display: inline-block;
109
- flex: none;
110
- animation: pulse 2s infinite;
111
- }
112
- .app-bar__titles {
113
- display: flex;
114
- flex-direction: column;
115
- gap: 1px;
116
- }
117
- .app-bar__name {
118
- font-weight: 700;
119
- font-size: 20px;
120
- letter-spacing: -0.02em;
121
- line-height: 1.1;
122
- }
123
- .app-bar__right {
124
- display: flex;
125
- align-items: center;
126
- gap: var(--sp-2);
127
- }
128
- .app-bar__working {
129
- border: 1px solid oklch(78% 0.14 165 / 0.3);
130
- padding: 6px 12px;
131
- box-shadow: var(--shadow-1);
132
- }
133
- .app-bar__sub {
134
- font-family: var(--font-mono);
135
- font-size: 10px;
136
- letter-spacing: 0.08em;
137
- color: var(--c-text-muted);
138
- }
139
- .app-main {
140
- flex: 1;
141
- padding: var(--sp-2) var(--sp-4) 0;
142
- padding-bottom: calc(var(--nav-h) + var(--sp-6) + env(safe-area-inset-bottom, 0px));
143
- overflow-x: hidden;
144
- animation: rise 0.28s ease;
145
- }
146
-
147
- /* ── Bottom nav ────────────────────────────────────────────── */
148
- .bottom-nav {
149
- position: fixed;
150
- left: 50%;
151
- transform: translateX(-50%);
152
- width: 100%;
153
- max-width: 430px;
154
- bottom: 0;
155
- height: calc(var(--nav-h) + env(safe-area-inset-bottom, 0px));
156
- padding-bottom: env(safe-area-inset-bottom, 0px);
157
- display: flex;
158
- background: color-mix(in oklab, var(--c-surface) 92%, transparent);
159
- backdrop-filter: blur(12px);
160
- border-top: 1px solid var(--c-border);
161
- z-index: 20;
162
- }
163
- .bottom-nav__item {
164
- flex: 1;
165
- border: 0;
166
- background: none;
167
- color: var(--c-text-muted);
168
- display: flex;
169
- flex-direction: column;
170
- align-items: center;
171
- justify-content: center;
172
- gap: 3px;
173
- cursor: pointer;
174
- font-family: var(--font);
175
- font-size: var(--fs-xs);
176
- font-weight: 600;
177
- min-height: 44px;
178
- }
179
- .bottom-nav__item.is-active {
180
- color: var(--c-primary);
181
- }
182
- .bottom-nav__icon {
183
- font-size: 19px;
184
- line-height: 1;
185
- }
186
-
187
- /* ── Board ─────────────────────────────────────────────────── */
188
- .board__toolbar {
189
- display: flex;
190
- align-items: center;
191
- gap: var(--sp-2);
192
- margin-bottom: var(--sp-4);
193
- flex-wrap: wrap;
194
- }
195
- .board__new {
196
- margin-left: auto;
197
- }
198
- @media (max-width: 719px) {
199
- .board__new {
200
- flex: 1;
201
- }
202
- }
203
- .board__columns {
204
- display: flex;
205
- gap: 14px;
206
- overflow-x: auto;
207
- scroll-snap-type: x mandatory;
208
- -webkit-overflow-scrolling: touch;
209
- padding: 2px 2px var(--sp-4);
210
- scrollbar-width: none;
211
- align-items: flex-start;
212
- }
213
- .board__columns::-webkit-scrollbar {
214
- display: none;
215
- }
216
- .lane {
217
- scroll-snap-align: center;
218
- scroll-snap-stop: always;
219
- flex: 0 0 100%;
220
- max-width: none;
221
- display: flex;
222
- flex-direction: column;
223
- gap: var(--sp-3);
224
- background: none;
225
- border: 0;
226
- }
227
- .lane__head {
228
- display: flex;
229
- align-items: center;
230
- gap: 6px;
231
- padding: 2px var(--sp-1);
232
- min-height: 28px;
233
- }
234
- .lane__dot {
235
- width: 8px;
236
- height: 8px;
237
- border-radius: 50%;
238
- background: var(--c-status-backlog);
239
- flex: none;
240
- }
241
- .lane--in_progress .lane__dot {
242
- background: var(--c-status-in_progress);
243
- }
244
- .lane--decision_needed .lane__dot {
245
- background: var(--c-status-decision_needed);
246
- }
247
- .lane--blocked .lane__dot {
248
- background: var(--c-status-blocked);
249
- }
250
- .lane--done .lane__dot {
251
- background: var(--c-status-done);
252
- }
253
- .lane__title {
254
- font-size: 13px;
255
- font-weight: 600;
256
- margin: 0;
257
- white-space: nowrap;
258
- overflow: hidden;
259
- text-overflow: ellipsis;
260
- min-width: 0;
261
- }
262
- .lane__count {
263
- font-family: var(--font-mono);
264
- font-size: var(--fs-xs);
265
- color: var(--c-text-muted);
266
- background: var(--c-surface);
267
- border-radius: 999px;
268
- padding: 2px 8px;
269
- }
270
- .lane__body {
271
- display: flex;
272
- flex-direction: column;
273
- gap: var(--sp-3);
274
- }
275
- .lane__empty {
276
- border: 1px dashed var(--c-border-strong);
277
- border-radius: 18px;
278
- padding: 22px;
279
- text-align: center;
280
- font-size: var(--fs-sm);
281
- color: var(--c-text-faint);
282
- margin: 0;
283
- }
284
-
285
- /* ── Card ──────────────────────────────────────────────────── */
286
- .card {
287
- background: var(--c-surface);
288
- border: 1px solid var(--c-border);
289
- border-radius: 18px;
290
- padding: var(--sp-4);
291
- box-shadow: var(--shadow-2);
292
- cursor: pointer;
293
- display: flex;
294
- flex-direction: column;
295
- gap: 10px;
296
- transition: border-color 0.15s, transform 0.15s;
297
- }
298
- .card .card__foot {
299
- margin-top: auto;
300
- }
301
- .card:hover {
302
- border-color: oklch(78% 0.14 165 / 0.35);
303
- transform: translateY(-1px);
304
- }
305
- .card:active {
306
- transform: scale(0.98);
307
- }
308
- .card:focus-visible {
309
- outline: 2px solid var(--c-primary);
310
- outline-offset: 2px;
311
- }
312
- .card__top {
313
- display: flex;
314
- align-items: center;
315
- justify-content: space-between;
316
- gap: var(--sp-2);
317
- }
318
- .card__lane {
319
- font-family: var(--font-mono);
320
- font-size: 10px;
321
- letter-spacing: 0.04em;
322
- color: var(--c-text-faint);
323
- margin-left: auto;
324
- }
325
- .card__title {
326
- margin: 0;
327
- font-size: var(--fs-md);
328
- font-weight: 600;
329
- line-height: 1.35;
330
- }
331
- .card__desc {
332
- margin: 0;
333
- font-size: var(--fs-sm);
334
- color: var(--c-text-muted);
335
- line-height: 1.5;
336
- display: -webkit-box;
337
- -webkit-line-clamp: 2;
338
- -webkit-box-orient: vertical;
339
- overflow: hidden;
340
- }
341
- .card__foot {
342
- display: flex;
343
- gap: var(--sp-2);
344
- flex-wrap: wrap;
345
- align-items: center;
346
- }
347
- .card__top {
348
- display: none;
349
- }
350
-
351
- /* ── Chips ─────────────────────────────────────────────────── */
352
- .chips {
353
- display: flex;
354
- gap: var(--sp-2);
355
- flex-wrap: wrap;
356
- align-items: center;
357
- }
358
- .chip {
359
- display: inline-flex;
360
- align-items: center;
361
- gap: 6px;
362
- font-family: var(--font-mono);
363
- font-size: var(--fs-xs);
364
- font-weight: 500;
365
- padding: 4px 10px;
366
- border-radius: 999px;
367
- background: var(--c-surface-2);
368
- color: var(--c-text-muted);
369
- white-space: nowrap;
370
- }
371
- .chip--muted {
372
- background: oklch(74% 0.02 280 / 0.12);
373
- color: oklch(74% 0.02 280);
374
- }
375
- .chip--live {
376
- background: oklch(78% 0.14 165 / 0.13);
377
- color: var(--c-live);
378
- }
379
- .chip--warn {
380
- background: oklch(80% 0.13 75 / 0.13);
381
- color: var(--c-warn);
382
- }
383
- .chip--status-backlog {
384
- background: oklch(74% 0.02 280 / 0.12);
385
- color: oklch(74% 0.02 280);
386
- }
387
- .chip--status-in_progress {
388
- background: oklch(78% 0.14 165 / 0.13);
389
- color: var(--c-status-in_progress);
390
- }
391
- .chip--status-decision_needed {
392
- background: oklch(75% 0.13 300 / 0.13);
393
- color: var(--c-status-decision_needed);
394
- }
395
- .chip--status-blocked {
396
- background: oklch(80% 0.13 75 / 0.13);
397
- color: var(--c-status-blocked);
398
- }
399
- .chip--status-done {
400
- background: oklch(64% 0.06 165 / 0.1);
401
- color: var(--c-status-done);
402
- }
403
- .chip--prio-0 {
404
- background: oklch(64% 0.02 280 / 0.12);
405
- color: var(--c-prio-0);
406
- }
407
- .chip--prio-1 {
408
- background: oklch(80% 0.12 200 / 0.13);
409
- color: var(--c-prio-1);
410
- }
411
- .chip--prio-2 {
412
- background: oklch(80% 0.13 75 / 0.13);
413
- color: var(--c-prio-2);
414
- }
415
- .chip--prio-3 {
416
- background: oklch(78% 0.14 25 / 0.13);
417
- color: var(--c-prio-3);
418
- }
419
-
420
- .badge {
421
- font-family: var(--font-mono);
422
- font-size: var(--fs-xs);
423
- font-weight: 500;
424
- padding: 6px 12px;
425
- border-radius: 999px;
426
- text-transform: uppercase;
427
- letter-spacing: 0.06em;
428
- border: 1px solid var(--c-border);
429
- background: var(--c-surface);
430
- box-shadow: var(--shadow-1);
431
- }
432
- .badge--mode-preview {
433
- color: var(--c-warn);
434
- border-color: oklch(80% 0.13 75 / 0.35);
435
- }
436
- .badge--mode-production {
437
- color: var(--c-live);
438
- border-color: oklch(78% 0.14 165 / 0.35);
439
- }
440
-
441
- /* ── Card detail ───────────────────────────────────────────── */
442
- .card-detail {
443
- display: flex;
444
- flex-direction: column;
445
- gap: var(--sp-4);
446
- }
447
- .card-detail__nav {
448
- display: flex;
449
- align-items: center;
450
- gap: var(--sp-3);
451
- }
452
- .card-detail__id {
453
- font-family: var(--font-mono);
454
- font-size: var(--fs-xs);
455
- letter-spacing: 0.08em;
456
- color: var(--c-text-muted);
457
- }
458
- .card-detail__head {
459
- display: flex;
460
- flex-direction: column;
461
- gap: var(--sp-3);
462
- }
463
- .card-detail__title {
464
- font-size: var(--fs-xl);
465
- font-weight: 700;
466
- margin: 0;
467
- line-height: 1.3;
468
- letter-spacing: -0.01em;
469
- }
470
- .section {
471
- background: var(--c-surface);
472
- border: 1px solid var(--c-border);
473
- border-radius: var(--r-lg);
474
- padding: 18px;
475
- box-shadow: var(--shadow-2);
476
- margin: 0;
477
- display: flex;
478
- flex-direction: column;
479
- gap: var(--sp-2);
480
- }
481
- .section--plain {
482
- background: none;
483
- border: 0;
484
- box-shadow: none;
485
- padding: 0 var(--sp-1);
486
- }
487
- .section__label {
488
- font-family: var(--font-mono);
489
- font-size: 12px;
490
- font-weight: 700;
491
- text-transform: uppercase;
492
- letter-spacing: 0.1em;
493
- color: var(--c-text);
494
- margin: 0;
495
- padding-bottom: var(--sp-2);
496
- border-bottom: 1px solid var(--c-border-strong);
497
- }
498
- .prose {
499
- margin: 0;
500
- font-size: var(--fs-sm);
501
- line-height: 1.6;
502
- color: var(--c-text-soft);
503
- white-space: pre-wrap;
504
- }
505
- .profile {
506
- display: flex;
507
- gap: var(--sp-2);
508
- flex-wrap: wrap;
509
- }
510
- .profile__empty {
511
- color: var(--c-text-muted);
512
- font-size: var(--fs-sm);
513
- }
514
-
515
- /* ── Comments (activity feed) ──────────────────────────────── */
516
- .comments {
517
- list-style: none;
518
- padding: 0;
519
- margin: 0 0 var(--sp-3);
520
- display: flex;
521
- flex-direction: column;
522
- gap: var(--sp-3);
523
- }
524
- .comment {
525
- display: flex;
526
- gap: var(--sp-3);
527
- background: none;
528
- border: 0;
529
- padding: 0;
530
- }
531
- .comment__avatar {
532
- flex: none;
533
- width: 34px;
534
- height: 34px;
535
- border-radius: 12px;
536
- display: flex;
537
- align-items: center;
538
- justify-content: center;
539
- font-size: 14px;
540
- border: 1px solid oklch(100% 0 0 / 0.08);
541
- background: oklch(74% 0.02 280 / 0.12);
542
- }
543
- .comment--worker .comment__avatar {
544
- background: oklch(78% 0.14 165 / 0.15);
545
- }
546
- .comment--operator .comment__avatar {
547
- background: oklch(75% 0.13 300 / 0.15);
548
- }
549
- .comment--board .comment__avatar {
550
- background: oklch(80% 0.12 200 / 0.15);
551
- }
552
- .comment__bubble {
553
- flex: 1;
554
- display: flex;
555
- flex-direction: column;
556
- gap: 3px;
557
- background: var(--c-surface);
558
- border: 1px solid oklch(100% 0 0 / 0.06);
559
- border-radius: 14px;
560
- padding: 11px 14px;
561
- box-shadow: var(--shadow-1);
562
- }
563
- .comment__meta {
564
- display: flex;
565
- gap: var(--sp-2);
566
- align-items: baseline;
567
- }
568
- .comment__author {
569
- font-weight: 600;
570
- font-size: 12px;
571
- text-transform: capitalize;
572
- color: var(--c-text-soft);
573
- }
574
- .comment--worker .comment__author {
575
- color: var(--c-primary);
576
- }
577
- .comment--operator .comment__author {
578
- color: oklch(80% 0.1 300);
579
- }
580
- .comment--board .comment__author {
581
- color: var(--c-info);
582
- }
583
- .comment__time {
584
- font-family: var(--font-mono);
585
- font-size: 10px;
586
- color: var(--c-text-faint);
587
- }
588
- .comment__body {
589
- margin: 0;
590
- font-size: var(--fs-sm);
591
- line-height: 1.5;
592
- color: var(--c-text-soft);
593
- white-space: pre-wrap;
594
- }
595
- .comment--empty {
596
- color: var(--c-text-muted);
597
- font-size: var(--fs-sm);
598
- justify-content: center;
599
- padding: var(--sp-3) 0;
600
- }
601
- .composer {
602
- display: flex;
603
- flex-direction: column;
604
- gap: var(--sp-2);
605
- }
606
- .composer .btn {
607
- align-self: flex-end;
608
- }
609
-
610
- /* ── Forms ─────────────────────────────────────────────────── */
611
- .form {
612
- display: flex;
613
- flex-direction: column;
614
- gap: var(--sp-4);
615
- }
616
- .form__row {
617
- display: flex;
618
- gap: var(--sp-3);
619
- }
620
- .form__row .field {
621
- flex: 1;
622
- }
623
- .field {
624
- display: flex;
625
- flex-direction: column;
626
- gap: 7px;
627
- }
628
- .field--inline {
629
- min-width: 120px;
630
- }
631
- .field--check {
632
- flex-direction: row;
633
- align-items: center;
634
- gap: var(--sp-2);
635
- min-height: 44px;
636
- padding: 0 var(--sp-3);
637
- border: 1px solid var(--c-border);
638
- border-radius: 999px;
639
- background: var(--c-surface);
640
- cursor: pointer;
641
- }
642
- .field--check input {
643
- accent-color: var(--c-primary);
644
- width: 16px;
645
- height: 16px;
646
- }
647
- .field__label {
648
- font-size: var(--fs-sm);
649
- color: var(--c-text);
650
- font-weight: 600;
651
- padding: 0 var(--sp-1);
652
- }
653
- .field--check .field__label,
654
- .field--inline .field__label {
655
- padding: 0;
656
- }
657
- .field--inline .field__label {
658
- font-family: var(--font-mono);
659
- font-size: var(--fs-xs);
660
- font-weight: 500;
661
- letter-spacing: 0.08em;
662
- text-transform: uppercase;
663
- color: var(--c-text-muted);
664
- }
665
- .field__hint {
666
- font-weight: 400;
667
- color: var(--c-text-muted);
668
- }
669
- .input {
670
- width: 100%;
671
- font: inherit;
672
- font-size: var(--fs-md);
673
- color: var(--c-text);
674
- background: var(--c-surface);
675
- border: 1px solid var(--c-border-strong);
676
- border-radius: var(--r-md);
677
- padding: 13px 16px;
678
- min-height: 50px;
679
- box-shadow: var(--shadow-1);
680
- }
681
- .input::placeholder {
682
- color: var(--c-text-faint);
683
- }
684
- .input:focus {
685
- outline: 2px solid oklch(78% 0.14 165 / 0.5);
686
- outline-offset: 0;
687
- border-color: oklch(78% 0.14 165 / 0.5);
688
- }
689
- .input--area {
690
- resize: vertical;
691
- min-height: 80px;
692
- line-height: 1.55;
693
- font-size: var(--fs-sm);
694
- }
695
- select.input {
696
- appearance: none;
697
- background-image: linear-gradient(45deg, transparent 50%, var(--c-text-muted) 50%),
698
- linear-gradient(135deg, var(--c-text-muted) 50%, transparent 50%);
699
- background-position: calc(100% - 20px) 50%, calc(100% - 15px) 50%;
700
- background-size: 5px 5px;
701
- background-repeat: no-repeat;
702
- padding-right: 38px;
703
- }
704
- .input--sm {
705
- min-height: 44px;
706
- padding: 10px 14px;
707
- flex: 1;
708
- font-size: var(--fs-sm);
709
- }
710
-
711
- /* ── Custom dropdown ──────────────────────────────── */
712
- .dropdown {
713
- position: relative;
714
- width: 100%;
715
- }
716
- .dropdown__btn {
717
- width: 100%;
718
- display: flex;
719
- align-items: center;
720
- justify-content: space-between;
721
- gap: var(--sp-2);
722
- font: inherit;
723
- font-size: var(--fs-md);
724
- color: var(--c-text);
725
- background: var(--c-surface);
726
- border: 1px solid var(--c-border-strong);
727
- border-radius: var(--r-md);
728
- padding: 13px 16px;
729
- min-height: 50px;
730
- box-shadow: var(--shadow-1);
731
- cursor: pointer;
732
- text-align: left;
733
- }
734
- .dropdown__btn.is-open,
735
- .dropdown__btn:focus-visible {
736
- outline: 2px solid oklch(78% 0.14 165 / 0.5);
737
- outline-offset: 0;
738
- border-color: oklch(78% 0.14 165 / 0.5);
739
- }
740
- .dropdown__value {
741
- overflow: hidden;
742
- text-overflow: ellipsis;
743
- white-space: nowrap;
744
- }
745
- .dropdown__value.is-placeholder {
746
- color: var(--c-text-faint);
747
- }
748
- .dropdown__chevron {
749
- color: var(--c-text-muted);
750
- font-size: 12px;
751
- flex: none;
752
- transition: transform 0.15s;
753
- }
754
- .dropdown__btn.is-open .dropdown__chevron {
755
- transform: rotate(180deg);
756
- }
757
- .dropdown__menu {
758
- position: absolute;
759
- top: calc(100% + 6px);
760
- left: 0;
761
- right: 0;
762
- z-index: 40;
763
- margin: 0;
764
- padding: 6px;
765
- list-style: none;
766
- background: var(--c-surface-deep);
767
- border: 1px solid var(--c-border-strong);
768
- border-radius: var(--r-md);
769
- box-shadow: var(--shadow-2);
770
- max-height: 280px;
771
- overflow-y: auto;
772
- overflow-x: hidden;
773
- scrollbar-width: none;
774
- animation: rise 0.16s ease;
775
- }
776
- .dropdown__menu::-webkit-scrollbar {
777
- display: none;
778
- }
779
- .dropdown__opt {
780
- width: 100%;
781
- display: flex;
782
- align-items: center;
783
- justify-content: space-between;
784
- gap: var(--sp-2);
785
- border: 0;
786
- background: none;
787
- color: var(--c-text-soft);
788
- font: inherit;
789
- font-size: var(--fs-sm);
790
- font-weight: 500;
791
- padding: 11px 12px;
792
- border-radius: 10px;
793
- cursor: pointer;
794
- text-align: left;
795
- min-height: 44px;
796
- }
797
- .dropdown__opt:hover {
798
- background: oklch(78% 0.14 165 / 0.1);
799
- color: var(--c-text);
800
- }
801
- .dropdown__opt.is-selected {
802
- color: var(--c-primary);
803
- background: oklch(78% 0.14 165 / 0.13);
804
- }
805
- .dropdown__check {
806
- font-size: 12px;
807
- flex: none;
808
- }
809
- .dropdown--sm {
810
- width: auto;
811
- min-width: 150px;
812
- }
813
- .dropdown--sm .dropdown__btn {
814
- min-height: 44px;
815
- padding: 10px 14px;
816
- font-size: var(--fs-sm);
817
- border-radius: 999px;
818
- }
819
-
820
- /* ── Icon buttons + lane management (settings) ─────────── */
821
- .iconbtn {
822
- flex: none;
823
- width: 32px;
824
- height: 32px;
825
- border-radius: 9px;
826
- border: 0;
827
- background: transparent;
828
- color: var(--c-text-faint);
829
- cursor: pointer;
830
- display: inline-flex;
831
- align-items: center;
832
- justify-content: center;
833
- line-height: 1;
834
- }
835
- .iconbtn:hover {
836
- color: var(--c-text);
837
- background: oklch(100% 0 0 / 0.06);
838
- }
839
- .iconbtn--danger:hover {
840
- color: var(--c-danger);
841
- background: oklch(78% 0.14 25 / 0.12);
842
- }
843
- .iconbtn:disabled {
844
- opacity: 0.35;
845
- cursor: default;
846
- }
847
- .iconbtn:disabled:hover {
848
- color: var(--c-text-faint);
849
- background: transparent;
850
- }
851
- .lane-add {
852
- display: flex;
853
- gap: var(--sp-2);
854
- margin-top: var(--sp-2);
855
- }
856
- .lane-add .input {
857
- flex: 1;
858
- min-height: 48px;
859
- }
860
-
861
- /* Segmented option buttons (priority) */
862
- .seg {
863
- display: grid;
864
- grid-template-columns: repeat(4, 1fr);
865
- gap: var(--sp-2);
866
- }
867
- .seg__btn {
868
- min-height: 44px;
869
- border-radius: 14px;
870
- font-family: var(--font);
871
- font-size: var(--fs-sm);
872
- font-weight: 600;
873
- cursor: pointer;
874
- border: 1px solid var(--c-border-strong);
875
- background: var(--c-surface);
876
- color: var(--c-text-soft);
877
- }
878
- .seg__btn:active {
879
- transform: scale(0.96);
880
- }
881
- .seg__btn.is-selected {
882
- border-color: oklch(78% 0.14 165 / 0.55);
883
- background: oklch(78% 0.14 165 / 0.13);
884
- color: var(--c-primary);
885
- }
886
- .seg__btn.is-active-0 {
887
- border-color: var(--c-prio-0);
888
- background: oklch(64% 0.02 280 / 0.12);
889
- color: var(--c-prio-0);
890
- }
891
- .seg__btn.is-active-1 {
892
- border-color: var(--c-prio-1);
893
- background: oklch(80% 0.12 200 / 0.13);
894
- color: var(--c-prio-1);
895
- }
896
- .seg__btn.is-active-2 {
897
- border-color: var(--c-prio-2);
898
- background: oklch(80% 0.13 75 / 0.13);
899
- color: var(--c-prio-2);
900
- }
901
- .seg__btn.is-active-3 {
902
- border-color: var(--c-prio-3);
903
- background: oklch(78% 0.14 25 / 0.13);
904
- color: var(--c-prio-3);
905
- }
906
-
907
- /* ── Buttons ───────────────────────────────────────────────── */
908
- .actions {
909
- display: flex;
910
- gap: var(--sp-2);
911
- flex-wrap: wrap;
912
- align-items: center;
913
- }
914
- .btn {
915
- font-family: var(--font);
916
- font-size: var(--fs-sm);
917
- font-weight: 600;
918
- padding: 12px 18px;
919
- border-radius: var(--r-md);
920
- border: 1px solid var(--c-border-strong);
921
- background: var(--c-surface);
922
- color: var(--c-text);
923
- cursor: pointer;
924
- min-height: 48px;
925
- transition: transform 0.12s;
926
- white-space: nowrap;
927
- }
928
- .btn:hover {
929
- border-color: oklch(78% 0.14 165 / 0.35);
930
- }
931
- .btn:active {
932
- transform: scale(0.97);
933
- }
934
- .btn:disabled {
935
- opacity: 0.5;
936
- cursor: default;
937
- }
938
- .btn--sm {
939
- padding: 6px 12px;
940
- min-height: 36px;
941
- border-radius: var(--r-sm);
942
- }
943
- .btn--primary {
944
- background: var(--c-primary);
945
- color: var(--c-primary-ink);
946
- border-color: var(--c-primary);
947
- font-weight: 700;
948
- box-shadow: var(--shadow-accent);
949
- }
950
- .btn--primary:hover {
951
- transform: translateY(-1px);
952
- }
953
- .btn--ghost {
954
- background: transparent;
955
- border-color: transparent;
956
- box-shadow: none;
957
- color: var(--c-text-soft);
958
- }
959
- .btn--ghost:hover {
960
- border-color: var(--c-border-strong);
961
- }
962
- .btn--danger {
963
- color: var(--c-danger);
964
- border-color: oklch(78% 0.14 25 / 0.35);
965
- }
966
- .btn--primary.btn--danger {
967
- background: var(--c-danger);
968
- color: #fff;
969
- }
970
- .btn--back {
971
- width: 44px;
972
- height: 44px;
973
- min-height: 44px;
974
- padding: 0;
975
- border-radius: 14px;
976
- font-size: 18px;
977
- box-shadow: var(--shadow-1);
978
- }
979
-
980
- /* Card actions — quiet footer row, not a boxed section */
981
- .card-detail__actions {
982
- display: flex;
983
- gap: var(--sp-2);
984
- flex-wrap: wrap;
985
- align-items: center;
986
- padding: var(--sp-2) var(--sp-1) 0;
987
- border-top: 1px solid var(--c-border);
988
- }
989
- .card-detail__actions .btn {
990
- background: transparent;
991
- border-color: transparent;
992
- box-shadow: none;
993
- color: var(--c-text-soft);
994
- min-height: 44px;
995
- padding: 10px 14px;
996
- }
997
- .card-detail__actions .btn:hover {
998
- border-color: var(--c-border-strong);
999
- background: var(--c-surface);
1000
- }
1001
- .card-detail__actions .btn--danger {
1002
- color: var(--c-danger);
1003
- }
1004
- .card-detail__actions .card-detail__actions-spacer {
1005
- flex: 1;
1006
- }
1007
-
1008
- /* ── Notices ───────────────────────────────────────────────── */
1009
- .notice {
1010
- border-radius: var(--r-lg);
1011
- padding: var(--sp-4) 18px;
1012
- font-size: var(--fs-sm);
1013
- line-height: 1.55;
1014
- display: flex;
1015
- align-items: center;
1016
- gap: var(--sp-3);
1017
- justify-content: space-between;
1018
- border: 1px solid transparent;
1019
- }
1020
- .notice--info {
1021
- background: var(--c-surface);
1022
- border-color: var(--c-border);
1023
- color: var(--c-text-muted);
1024
- }
1025
- .notice--warn {
1026
- background: oklch(80% 0.13 75 / 0.09);
1027
- border-color: oklch(80% 0.13 75 / 0.4);
1028
- color: var(--c-warn);
1029
- box-shadow: 0 14px 36px oklch(80% 0.13 75 / 0.1);
1030
- }
1031
- .notice--error {
1032
- background: oklch(78% 0.14 25 / 0.09);
1033
- border-color: oklch(78% 0.14 25 / 0.4);
1034
- color: var(--c-danger);
1035
- }
1036
-
1037
- /* ── Lists (settings) ──────────────────────────────────────── */
1038
- .list {
1039
- list-style: none;
1040
- padding: 0;
1041
- margin: 0;
1042
- display: flex;
1043
- flex-direction: column;
1044
- gap: var(--sp-2);
1045
- }
1046
- .list__row {
1047
- display: flex;
1048
- align-items: center;
1049
- gap: var(--sp-2);
1050
- background: var(--c-surface);
1051
- border: 1px solid var(--c-border);
1052
- border-radius: var(--r-md);
1053
- padding: var(--sp-3) var(--sp-4);
1054
- box-shadow: var(--shadow-1);
1055
- }
1056
- .list__main {
1057
- flex: 1;
1058
- font-weight: 600;
1059
- font-size: var(--fs-sm);
1060
- min-width: 0;
1061
- white-space: nowrap;
1062
- overflow: hidden;
1063
- text-overflow: ellipsis;
1064
- }
1065
- .list__row--empty {
1066
- color: var(--c-text-muted);
1067
- justify-content: center;
1068
- box-shadow: none;
1069
- border-style: dashed;
1070
- background: none;
1071
- }
1072
-
1073
- /* ── Token gate ────────────────────────────────────────────── */
1074
- .token-gate {
1075
- min-height: 70dvh;
1076
- display: flex;
1077
- align-items: center;
1078
- justify-content: center;
1079
- }
1080
- .token-gate__card {
1081
- background: var(--c-surface);
1082
- border: 1px solid var(--c-border);
1083
- border-radius: var(--r-lg);
1084
- padding: var(--sp-6) var(--sp-5);
1085
- max-width: 360px;
1086
- width: 100%;
1087
- text-align: center;
1088
- box-shadow: var(--shadow-2);
1089
- animation: rise 0.28s ease;
1090
- }
1091
- .token-gate__logo {
1092
- margin-bottom: var(--sp-3);
1093
- }
1094
- .token-gate__logo .app-bar__dot {
1095
- width: 14px;
1096
- height: 14px;
1097
- }
1098
- .token-gate__title {
1099
- margin: 0 0 var(--sp-1);
1100
- font-size: var(--fs-xl);
1101
- font-weight: 700;
1102
- letter-spacing: -0.02em;
1103
- }
1104
- .token-gate__sub {
1105
- color: var(--c-text-muted);
1106
- margin: 0 0 var(--sp-4);
1107
- font-size: var(--fs-sm);
1108
- }
1109
- .token-gate__btn {
1110
- width: 100%;
1111
- margin-top: var(--sp-3);
1112
- }
1113
- .token-gate__hint {
1114
- color: var(--c-text-faint);
1115
- font-size: var(--fs-xs);
1116
- margin: var(--sp-3) 0 0;
1117
- }
1118
-
1119
- /* ── Builder / Settings headers ────────────────────────────── */
1120
- .builder,
1121
- .settings {
1122
- display: flex;
1123
- flex-direction: column;
1124
- gap: var(--sp-4);
1125
- }
1126
- .builder__head,
1127
- .settings__head {
1128
- display: flex;
1129
- flex-direction: column;
1130
- gap: 2px;
1131
- padding: 0 var(--sp-1);
1132
- }
1133
- .builder__title,
1134
- .settings__title {
1135
- font-size: var(--fs-xl);
1136
- font-weight: 700;
1137
- letter-spacing: -0.01em;
1138
- margin: 0;
1139
- }
1140
- .builder__hint,
1141
- .settings__note {
1142
- color: var(--c-text-muted);
1143
- font-size: var(--fs-sm);
1144
- margin: 0;
1145
- }
1146
- .settings__saved {
1147
- color: var(--c-live);
1148
- font-size: var(--fs-sm);
1149
- font-weight: 600;
1150
- }
1151
-
1152
- /* ── Worker status strip ──────────────────────────────── */
1153
- .worker-strip {
1154
- display: flex;
1155
- align-items: center;
1156
- gap: var(--sp-3);
1157
- flex-wrap: wrap;
1158
- background: var(--c-surface);
1159
- border: 1px solid var(--c-border);
1160
- border-radius: 999px;
1161
- padding: 10px 16px;
1162
- box-shadow: var(--shadow-1);
1163
- font-family: var(--font-mono);
1164
- font-size: var(--fs-xs);
1165
- color: var(--c-text-muted);
1166
- }
1167
- .worker-strip__state {
1168
- display: inline-flex;
1169
- align-items: center;
1170
- gap: 6px;
1171
- font-weight: 500;
1172
- text-transform: uppercase;
1173
- letter-spacing: 0.06em;
1174
- }
1175
- .worker-strip--running .worker-strip__state {
1176
- color: var(--c-live);
1177
- }
1178
- .worker-strip--paused .worker-strip__state {
1179
- color: var(--c-decision);
1180
- }
1181
- .worker-strip--finished .worker-strip__state {
1182
- color: var(--c-status-done);
1183
- }
1184
- .worker-strip--idle .worker-strip__state {
1185
- color: var(--c-warn);
1186
- }
1187
-
1188
- /* ── Decision block ──────────────────────────────────── */
1189
- .decision {
1190
- border: 1px solid oklch(75% 0.13 300 / 0.4);
1191
- background: oklch(75% 0.13 300 / 0.09);
1192
- border-radius: var(--r-lg);
1193
- padding: 18px;
1194
- display: flex;
1195
- flex-direction: column;
1196
- gap: var(--sp-3);
1197
- box-shadow: 0 14px 36px oklch(75% 0.13 300 / 0.12);
1198
- }
1199
- .decision__head {
1200
- display: flex;
1201
- align-items: center;
1202
- gap: var(--sp-2);
1203
- color: var(--c-decision);
1204
- }
1205
- .decision__label {
1206
- font-family: var(--font-mono);
1207
- font-size: var(--fs-xs);
1208
- letter-spacing: 0.08em;
1209
- color: oklch(80% 0.11 300);
1210
- }
1211
- .decision__question {
1212
- margin: 0;
1213
- font-size: var(--fs-md);
1214
- line-height: 1.55;
1215
- }
1216
- .decision__options {
1217
- display: flex;
1218
- flex-direction: column;
1219
- gap: var(--sp-2);
1220
- }
1221
- .decision__option {
1222
- min-height: 48px;
1223
- border-radius: 14px;
1224
- border: 1px solid oklch(75% 0.13 300 / 0.45);
1225
- background: oklch(24% 0.03 295);
1226
- color: var(--c-text);
1227
- font-family: var(--font);
1228
- font-size: var(--fs-sm);
1229
- font-weight: 600;
1230
- cursor: pointer;
1231
- padding: 12px 16px;
1232
- text-align: left;
1233
- }
1234
- .decision__option:hover {
1235
- background: oklch(75% 0.13 300 / 0.2);
1236
- }
1237
- .decision__option:active {
1238
- transform: scale(0.98);
1239
- }
1240
- .decision__option:disabled {
1241
- opacity: 0.45;
1242
- cursor: default;
1243
- }
1244
- .decision__sent {
1245
- margin: 0;
1246
- font-size: var(--fs-sm);
1247
- font-weight: 600;
1248
- color: var(--c-live);
1249
- }
1250
- .decision__own {
1251
- display: flex;
1252
- gap: var(--sp-2);
1253
- align-items: stretch;
1254
- }
1255
- .decision__own .input {
1256
- flex: 1;
1257
- min-height: 48px;
1258
- border-color: oklch(75% 0.13 300 / 0.45);
1259
- background: oklch(24% 0.03 295);
1260
- box-shadow: none;
1261
- }
1262
- .decision__own .input:focus {
1263
- outline-color: oklch(75% 0.13 300 / 0.5);
1264
- border-color: oklch(75% 0.13 300 / 0.6);
1265
- }
1266
- .decision__own-send {
1267
- min-width: 72px;
1268
- border-radius: 14px;
1269
- border: 1px solid oklch(75% 0.13 300 / 0.55);
1270
- background: oklch(75% 0.13 300 / 0.16);
1271
- color: oklch(84% 0.1 300);
1272
- font-family: var(--font);
1273
- font-size: var(--fs-sm);
1274
- font-weight: 700;
1275
- cursor: pointer;
1276
- }
1277
- .decision__own-send:active {
1278
- transform: scale(0.96);
1279
- }
1280
- .decision__own-send:disabled {
1281
- opacity: 0.45;
1282
- cursor: default;
1283
- }
1284
-
1285
- /* ── Agent log panel ────────────────────────────────── */
1286
- .log {
1287
- background: var(--c-surface-deep);
1288
- border: 1px solid oklch(100% 0 0 / 0.09);
1289
- border-radius: var(--r-lg);
1290
- overflow: hidden;
1291
- box-shadow: var(--shadow-2);
1292
- }
1293
- .log__toggle {
1294
- width: 100%;
1295
- display: flex;
1296
- align-items: center;
1297
- justify-content: space-between;
1298
- background: transparent;
1299
- border: 0;
1300
- color: inherit;
1301
- padding: 14px 17px;
1302
- cursor: pointer;
1303
- min-height: 48px;
1304
- font-family: inherit;
1305
- }
1306
- .log__title {
1307
- display: flex;
1308
- align-items: center;
1309
- gap: var(--sp-2);
1310
- }
1311
- .log__status {
1312
- display: inline-flex;
1313
- align-items: center;
1314
- gap: 5px;
1315
- font-family: var(--font-mono);
1316
- font-size: 10px;
1317
- letter-spacing: 0.06em;
1318
- color: var(--c-text-faint);
1319
- }
1320
- .log__status--live {
1321
- color: var(--c-live);
1322
- }
1323
- .log__status--paused {
1324
- color: var(--c-decision);
1325
- }
1326
- .log__status--halted {
1327
- color: var(--c-warn);
1328
- }
1329
- .log__chevron {
1330
- color: var(--c-text-muted);
1331
- font-size: 12px;
1332
- }
1333
- .log__body {
1334
- padding: 0 17px 15px;
1335
- display: flex;
1336
- flex-direction: column;
1337
- gap: 6px;
1338
- max-height: 220px;
1339
- overflow-y: auto;
1340
- }
1341
- .log__line {
1342
- margin: 0;
1343
- font-family: var(--font-mono);
1344
- font-size: 11.5px;
1345
- line-height: 1.5;
1346
- color: oklch(76% 0.015 280);
1347
- white-space: pre-wrap;
1348
- }
1349
- .log__line--cmd {
1350
- color: oklch(80% 0.1 300);
1351
- }
1352
- .log__line--ok {
1353
- color: var(--c-live);
1354
- }
1355
- .log__line--warn {
1356
- color: var(--c-warn);
1357
- }
1358
- .log__line--err {
1359
- color: var(--c-danger);
1360
- }
1361
- .log__line--cursor {
1362
- color: var(--c-live);
1363
- animation: pulse 1s infinite;
1364
- }
1365
-
1366
- /* ── Builder wizard ─────────────────────────────────── */
1367
- .builder__headrow {
1368
- display: flex;
1369
- align-items: center;
1370
- justify-content: space-between;
1371
- gap: var(--sp-3);
1372
- }
1373
- .builder__dots {
1374
- display: flex;
1375
- gap: 5px;
1376
- }
1377
- .builder__dotstep {
1378
- width: 22px;
1379
- height: 5px;
1380
- border-radius: 99px;
1381
- background: oklch(32% 0.02 280);
1382
- }
1383
- .builder__dotstep.is-on {
1384
- background: var(--c-primary);
1385
- }
1386
- .presets {
1387
- display: flex;
1388
- flex-direction: column;
1389
- gap: var(--sp-2);
1390
- }
1391
- .presets__label {
1392
- margin: 0;
1393
- padding: 0 var(--sp-1);
1394
- }
1395
- .presets__row {
1396
- display: flex;
1397
- gap: var(--sp-2);
1398
- overflow-x: auto;
1399
- scrollbar-width: none;
1400
- padding: 2px;
1401
- }
1402
- .presets__chip {
1403
- flex: none;
1404
- min-height: 44px;
1405
- padding: 10px 16px;
1406
- border-radius: 14px;
1407
- font-family: var(--font);
1408
- font-size: var(--fs-sm);
1409
- font-weight: 600;
1410
- cursor: pointer;
1411
- border: 1px solid var(--c-border-strong);
1412
- background: var(--c-surface);
1413
- color: var(--c-text-soft);
1414
- box-shadow: var(--shadow-1);
1415
- white-space: nowrap;
1416
- }
1417
- .presets__chip:active {
1418
- transform: scale(0.96);
1419
- }
1420
- .presets__chip.is-active {
1421
- border-color: oklch(78% 0.14 165 / 0.55);
1422
- background: oklch(78% 0.14 165 / 0.13);
1423
- color: var(--c-primary);
1424
- }
1425
- .skillchips {
1426
- display: flex;
1427
- flex-wrap: wrap;
1428
- gap: var(--sp-2);
1429
- }
1430
- .skillchips__chip {
1431
- min-height: 44px;
1432
- padding: 10px 15px;
1433
- border-radius: 999px;
1434
- font-family: var(--font);
1435
- font-size: var(--fs-sm);
1436
- font-weight: 600;
1437
- cursor: pointer;
1438
- border: 1px solid var(--c-border-strong);
1439
- background: var(--c-surface);
1440
- color: var(--c-text-soft);
1441
- white-space: nowrap;
1442
- }
1443
- .skillchips__chip:active {
1444
- transform: scale(0.95);
1445
- }
1446
- .skillchips__chip.is-on {
1447
- border-color: oklch(78% 0.14 165 / 0.55);
1448
- background: oklch(78% 0.14 165 / 0.13);
1449
- color: var(--c-primary);
1450
- }
1451
- .switchlist {
1452
- display: flex;
1453
- flex-direction: column;
1454
- gap: var(--sp-2);
1455
- }
1456
- .switchrow {
1457
- display: flex;
1458
- align-items: center;
1459
- gap: var(--sp-3);
1460
- min-height: 60px;
1461
- border-radius: var(--r-md);
1462
- border: 1px solid var(--c-border);
1463
- background: var(--c-surface);
1464
- padding: var(--sp-3) var(--sp-4);
1465
- cursor: pointer;
1466
- text-align: left;
1467
- box-shadow: var(--shadow-1);
1468
- font-family: inherit;
1469
- }
1470
- .switchrow:active {
1471
- transform: scale(0.99);
1472
- }
1473
- .switchrow__text {
1474
- flex: 1;
1475
- display: flex;
1476
- flex-direction: column;
1477
- gap: 2px;
1478
- }
1479
- .switchrow__label {
1480
- font-size: var(--fs-sm);
1481
- font-weight: 600;
1482
- color: var(--c-text);
1483
- }
1484
- .switchrow__desc {
1485
- font-size: 12px;
1486
- color: var(--c-text-muted);
1487
- line-height: 1.4;
1488
- }
1489
- .switch {
1490
- flex: none;
1491
- width: 48px;
1492
- height: 28px;
1493
- border-radius: 999px;
1494
- background: oklch(32% 0.02 280);
1495
- position: relative;
1496
- transition: background 0.2s;
1497
- }
1498
- .switch.is-on {
1499
- background: var(--c-primary);
1500
- }
1501
- .switch__knob {
1502
- position: absolute;
1503
- top: 3px;
1504
- left: 3px;
1505
- width: 22px;
1506
- height: 22px;
1507
- border-radius: 50%;
1508
- background: oklch(96% 0 0);
1509
- transition: left 0.2s;
1510
- box-shadow: 0 2px 6px oklch(0% 0 0 / 0.4);
1511
- }
1512
- .switch.is-on .switch__knob {
1513
- left: 23px;
1514
- }
1515
- .phases {
1516
- display: flex;
1517
- flex-direction: column;
1518
- gap: var(--sp-2);
1519
- }
1520
- .phases__row {
1521
- display: flex;
1522
- align-items: center;
1523
- gap: var(--sp-3);
1524
- border: 1px solid var(--c-border);
1525
- background: var(--c-surface);
1526
- border-radius: var(--r-md);
1527
- padding: var(--sp-3) 14px;
1528
- box-shadow: var(--shadow-1);
1529
- }
1530
- .phases__num {
1531
- flex: none;
1532
- width: 26px;
1533
- height: 26px;
1534
- border-radius: 9px;
1535
- background: oklch(78% 0.14 165 / 0.14);
1536
- color: var(--c-primary);
1537
- display: flex;
1538
- align-items: center;
1539
- justify-content: center;
1540
- font-family: var(--font-mono);
1541
- font-size: 12px;
1542
- }
1543
- .phases__name {
1544
- flex: 1;
1545
- font-size: var(--fs-sm);
1546
- font-weight: 500;
1547
- }
1548
- .phases__review {
1549
- border: 1px solid var(--c-border-strong);
1550
- background: transparent;
1551
- color: var(--c-text-faint);
1552
- border-radius: 999px;
1553
- padding: 7px 11px;
1554
- font-family: var(--font-mono);
1555
- font-size: 10px;
1556
- cursor: pointer;
1557
- letter-spacing: 0.04em;
1558
- white-space: nowrap;
1559
- }
1560
- .phases__review:active {
1561
- transform: scale(0.94);
1562
- }
1563
- .phases__review.is-on {
1564
- color: var(--c-primary);
1565
- border-color: oklch(78% 0.14 165 / 0.5);
1566
- background: oklch(78% 0.14 165 / 0.12);
1567
- }
1568
- .phases__remove {
1569
- border: 0;
1570
- background: transparent;
1571
- color: var(--c-text-faint);
1572
- font-size: 16px;
1573
- cursor: pointer;
1574
- padding: 6px;
1575
- }
1576
- .phases__remove:hover {
1577
- color: var(--c-danger);
1578
- }
1579
- .phases__add {
1580
- display: flex;
1581
- gap: var(--sp-2);
1582
- }
1583
- .phases__add .input {
1584
- flex: 1;
1585
- min-height: 48px;
1586
- }
1587
- .phases__addbtn {
1588
- min-width: 64px;
1589
- border-color: oklch(78% 0.14 165 / 0.4);
1590
- background: oklch(78% 0.14 165 / 0.12);
1591
- color: var(--c-primary);
1592
- font-weight: 700;
1593
- }
1594
- .preview {
1595
- border: 1px solid oklch(78% 0.14 165 / 0.25);
1596
- background: oklch(78% 0.14 165 / 0.05);
1597
- border-radius: 18px;
1598
- overflow: hidden;
1599
- box-shadow: var(--shadow-1);
1600
- }
1601
- .preview__toggle {
1602
- width: 100%;
1603
- display: flex;
1604
- align-items: center;
1605
- justify-content: space-between;
1606
- background: transparent;
1607
- border: 0;
1608
- color: inherit;
1609
- padding: 15px 17px;
1610
- cursor: pointer;
1611
- min-height: 50px;
1612
- font-family: inherit;
1613
- }
1614
- .preview__title {
1615
- display: flex;
1616
- align-items: center;
1617
- gap: var(--sp-2);
1618
- }
1619
- .preview__label {
1620
- font-family: var(--font-mono);
1621
- font-size: var(--fs-xs);
1622
- letter-spacing: 0.08em;
1623
- color: var(--c-primary);
1624
- }
1625
- .preview__meta {
1626
- font-family: var(--font-mono);
1627
- font-size: 10px;
1628
- color: var(--c-text-muted);
1629
- }
1630
- .preview__chevron {
1631
- color: var(--c-primary);
1632
- font-size: 13px;
1633
- }
1634
- .preview__body {
1635
- padding: 2px 17px 16px;
1636
- display: flex;
1637
- flex-direction: column;
1638
- gap: 7px;
1639
- }
1640
- .preview__line {
1641
- display: flex;
1642
- gap: var(--sp-3);
1643
- font-family: var(--font-mono);
1644
- font-size: 12px;
1645
- line-height: 1.5;
1646
- }
1647
- .preview__key {
1648
- flex: none;
1649
- width: 74px;
1650
- color: var(--c-text-muted);
1651
- }
1652
- .preview__val {
1653
- color: oklch(86% 0.05 165);
1654
- min-width: 0;
1655
- overflow-wrap: anywhere;
1656
- }
1657
- .builder__actions {
1658
- flex-wrap: nowrap;
1659
- }
1660
- .builder__cta {
1661
- flex: 1;
1662
- }
1663
-
1664
- /* ── Wider screens ─────────────────────────────────────────── */
1665
- @media (min-width: 720px) {
1666
- .app {
1667
- max-width: 1200px;
1668
- }
1669
- .app-bar {
1670
- padding: var(--sp-4) var(--sp-5) var(--sp-2);
1671
- }
1672
- .app-main {
1673
- padding: var(--sp-2) var(--sp-5) 0;
1674
- padding-bottom: var(--sp-6);
1675
- width: 100%;
1676
- }
1677
-
1678
- /* Nav becomes a slim top-right rail instead of a thumb bar */
1679
- .bottom-nav {
1680
- position: static;
1681
- transform: none;
1682
- max-width: none;
1683
- width: auto;
1684
- height: auto;
1685
- padding: 0;
1686
- border: 0;
1687
- background: none;
1688
- backdrop-filter: none;
1689
- order: -1;
1690
- }
1691
- .app-bar {
1692
- gap: var(--sp-4);
1693
- }
1694
- .app-bar .badge {
1695
- margin-left: 0;
1696
- }
1697
- /* bottom-nav rendered after main; float it into the app bar visually */
1698
- .bottom-nav {
1699
- position: fixed;
1700
- top: 14px;
1701
- right: max(16px, calc(50vw - 584px));
1702
- left: auto;
1703
- bottom: auto;
1704
- display: flex;
1705
- gap: var(--sp-1);
1706
- background: var(--c-surface);
1707
- border: 1px solid var(--c-border);
1708
- border-radius: 999px;
1709
- padding: 4px;
1710
- box-shadow: var(--shadow-1);
1711
- z-index: 30;
1712
- }
1713
- .bottom-nav__item {
1714
- flex: none;
1715
- flex-direction: row;
1716
- gap: var(--sp-2);
1717
- padding: 8px 16px;
1718
- border-radius: 999px;
1719
- min-height: 40px;
1720
- }
1721
- .bottom-nav__item.is-active {
1722
- background: oklch(78% 0.14 165 / 0.13);
1723
- }
1724
- .bottom-nav__icon {
1725
- font-size: 15px;
1726
- }
1727
-
1728
- /* Board: all five columns visible, no swipe */
1729
- .board__columns {
1730
- overflow-x: visible;
1731
- scroll-snap-type: none;
1732
- flex-wrap: nowrap;
1733
- }
1734
- .lane {
1735
- flex: 1 1 0;
1736
- min-width: 0;
1737
- max-width: none;
1738
- }
1739
-
1740
- /* Detail / builder / settings: comfortable reading column */
1741
- .card-detail,
1742
- .builder,
1743
- .settings {
1744
- max-width: 720px;
1745
- margin: 0 auto;
1746
- width: 100%;
1747
- }
1748
- .token-gate__card {
1749
- max-width: 400px;
1750
- }
1751
- }
1752
-
1753
- @media (min-width: 1024px) {
1754
- .card__title {
1755
- font-size: var(--fs-md);
1756
- }
1757
- .card-detail__title {
1758
- font-size: 26px;
1759
- }
1760
- }