@namewta/speculo 0.8.6 → 0.8.8

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 (98) hide show
  1. package/dist/src/structured.js +8 -4
  2. package/dist/src/structured.js.map +1 -1
  3. package/package.json +1 -1
  4. package/template/canonical/canonical-specdev-goal-plan.md +67 -20
  5. package/template/canonical/canonical-specdev-grill-with-docs.md +17 -9
  6. package/template/canonical/canonical-specdev-orchestrate-implementation.md +2784 -0
  7. package/template/canonical/canonical-specdev-spec.md +19 -9
  8. package/template/canonical/canonical-specdev-tickets.md +58 -16
  9. package/template/canonical/canonical-specdev-wayfinder.md +11 -11
  10. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +1 -1
  11. package/template/workflows/specdev/I-implement/I-implement.md +10 -5
  12. package/template/workflows/specdev/I-implement/execution-preflight.md +2 -0
  13. package/template/workflows/specdev/I-init-setup/I-init-setup.md +1 -1
  14. package/template/workflows/specdev/I-init-setup/config-template.json +2 -2
  15. package/template/workflows/specdev/O-orchestrate-implementation/O-orchestrate-implementation.md +129 -0
  16. package/template/workflows/specdev/O-orchestrate-implementation/conflict-and-drift.md +18 -0
  17. package/template/workflows/specdev/O-orchestrate-implementation/execution-loop.md +30 -0
  18. package/template/workflows/specdev/O-orchestrate-implementation/implementation-evidence-template.md +39 -0
  19. package/template/workflows/specdev/O-orchestrate-implementation/implementation-map-template.md +50 -0
  20. package/template/workflows/specdev/O-orchestrate-implementation/implementation-plan-template.md +61 -0
  21. package/template/workflows/specdev/O-orchestrate-implementation/input-readiness.md +25 -0
  22. package/template/workflows/specdev/O-orchestrate-implementation/super-dag.md +27 -0
  23. package/template/workflows/specdev/P-goal-plan/planning-modes.md +1 -1
  24. package/template/workflows/specdev/P-prototype/P-prototype.md +30 -26
  25. package/template/workflows/specdev/P-prototype/design-library/INDEX.md +43 -0
  26. package/template/workflows/specdev/P-prototype/design-library/color-and-theme.md +65 -0
  27. package/template/workflows/specdev/P-prototype/design-library/foundations.md +66 -0
  28. package/template/workflows/specdev/P-prototype/design-library/interaction-patterns.md +61 -0
  29. package/template/workflows/specdev/P-prototype/design-library/product-pattern-index.md +73 -0
  30. package/template/workflows/specdev/P-prototype/design-library/research-provenance.md +54 -0
  31. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/METHODOLOGY.md +90 -0
  32. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/README.md +31 -0
  33. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/data/extended-projects.json +241 -0
  34. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/data/projects.json +253 -0
  35. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/reference/USAGE.md +40 -0
  36. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/reference/design-tokens.css +145 -0
  37. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/report/OPEN_SOURCE_UI_RESEARCH_2026.md +519 -0
  38. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/PROJECT_TEMPLATE.md +29 -0
  39. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/README.md +9 -0
  40. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/claude-code-modern-clients.md +407 -0
  41. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/creative-ai-communication.md +574 -0
  42. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/data-dev-tools.md +432 -0
  43. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/personal-multiplatform-apps.md +185 -0
  44. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/research/productivity-collaboration.md +398 -0
  45. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/01-dense-ide.html +68 -0
  46. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/02-monochrome-console.html +18 -0
  47. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/03-soft-personal-ai.html +17 -0
  48. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/04-responsive-web.html +14 -0
  49. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/05-mobile-supervisor.html +16 -0
  50. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/06-cross-platform-workspace.html +17 -0
  51. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/07-local-first-content.html +9 -0
  52. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/08-media-first.html +17 -0
  53. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/README.md +49 -0
  54. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/assets/ATTRIBUTION.md +9 -0
  55. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/assets/landscape.jpg +0 -0
  56. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/assets/lucide.js +20494 -0
  57. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/assets/mountain.jpg +0 -0
  58. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/assets/workspace.jpg +0 -0
  59. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/index.html +70 -0
  60. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/package-lock.json +78 -0
  61. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/package.json +12 -0
  62. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/screenshots/index-desktop.png +0 -0
  63. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/scripts/gallery.js +134 -0
  64. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/styles/base.css +795 -0
  65. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/styles/pages.css +533 -0
  66. package/template/workflows/specdev/P-prototype/design-library/research-snapshot/ui-gallery/tests/gallery.spec.js +56 -0
  67. package/template/workflows/specdev/P-prototype/design-library/responsive-and-platforms.md +53 -0
  68. package/template/workflows/specdev/P-prototype/design-library/style-index.md +32 -0
  69. package/template/workflows/specdev/P-prototype/design-package.schema.json +70 -0
  70. package/template/workflows/specdev/P-prototype/design-system-template.md +366 -0
  71. package/template/workflows/specdev/P-prototype/detect-existing-style.md +53 -0
  72. package/template/workflows/specdev/P-prototype/generate-design-package.md +50 -0
  73. package/template/workflows/specdev/P-prototype/style-selection-protocol.md +41 -0
  74. package/template/workflows/specdev/P-prototype/tools/materialize-prototype.mjs +126 -0
  75. package/template/workflows/specdev/P-prototype/tools/validate-design-package.mjs +155 -0
  76. package/template/workflows/specdev/README.md +28 -15
  77. package/template/workflows/specdev/T-triage/T-triage.md +1 -1
  78. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +2 -2
  79. package/template/workflows/specdev/W-wayfinder/local-tracker-contract.md +3 -4
  80. package/template/workflows/specdev/common/README.md +6 -3
  81. package/template/workflows/specdev/common/rules/artifact-contract.md +9 -3
  82. package/template/workflows/specdev/common/rules/change-completion.md +3 -0
  83. package/template/workflows/specdev/common/rules/deviation-control.md +2 -0
  84. package/template/workflows/specdev/common/rules/evidence-and-verification.md +2 -0
  85. package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +27 -0
  86. package/template/workflows/specdev/common/rules/path-ownership.md +3 -1
  87. package/template/workflows/specdev/common/schemas/config.schema.json +4 -4
  88. package/template/workflows/specdev/common/schemas/implementation-map.schema.json +40 -0
  89. package/template/workflows/specdev/common/schemas/implementation-plan.schema.json +44 -0
  90. package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +4 -4
  91. package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +1 -3
  92. package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +5 -3
  93. package/template/workflows/specdev/common/tools/README.md +2 -2
  94. package/template/workflows/specdev/common/tools/validate-specdev.mjs +572 -30
  95. package/template/workflows/specdev/P-prototype/logic-prototype.md +0 -24
  96. package/template/workflows/specdev/P-prototype/prototype-record-template.md +0 -46
  97. package/template/workflows/specdev/P-prototype/ui-prototype.md +0 -21
  98. package/template/workflows/specdev/common/schemas/prototype-record.schema.json +0 -24
@@ -0,0 +1,795 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ :root {
6
+ color-scheme: light;
7
+ --bg: #f6f7f8;
8
+ --surface: #ffffff;
9
+ --surface-2: #f1f3f5;
10
+ --surface-3: #e7eaee;
11
+ --text: #17191c;
12
+ --text-2: #5e646d;
13
+ --text-3: #8b929c;
14
+ --border: #dfe3e8;
15
+ --accent: #2563eb;
16
+ --accent-soft: #eaf1ff;
17
+ --accent-fg: #ffffff;
18
+ --success: #27845a;
19
+ --warning: #b56a12;
20
+ --danger: #c43d4f;
21
+ --info: #2c6fcf;
22
+ --radius-sm: 4px;
23
+ --radius-md: 7px;
24
+ --radius-lg: 10px;
25
+ --shadow-float: 0 16px 40px rgba(20, 27, 38, 0.14);
26
+ --font-ui: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
27
+ --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
28
+ --sidebar: 248px;
29
+ --rail: 52px;
30
+ --right-panel: 342px;
31
+ --control-h: 34px;
32
+ --ui-size: 14px;
33
+ --meta-size: 12px;
34
+ --ease: 160ms cubic-bezier(0.4, 0, 0.2, 1);
35
+ }
36
+
37
+ html.dark {
38
+ color-scheme: dark;
39
+ --bg: #101214;
40
+ --surface: #16191c;
41
+ --surface-2: #1d2125;
42
+ --surface-3: #272c31;
43
+ --text: #f2f4f6;
44
+ --text-2: #a9b0b8;
45
+ --text-3: #757e88;
46
+ --border: #2a3036;
47
+ --accent-soft: color-mix(in srgb, var(--accent) 18%, transparent);
48
+ --shadow-float: 0 18px 46px rgba(0, 0, 0, 0.42);
49
+ }
50
+
51
+ html,
52
+ body {
53
+ width: 100%;
54
+ min-width: 320px;
55
+ height: 100%;
56
+ margin: 0;
57
+ }
58
+
59
+ body {
60
+ overflow: hidden;
61
+ background: var(--bg);
62
+ color: var(--text);
63
+ font-family: var(--font-ui);
64
+ font-size: var(--ui-size);
65
+ letter-spacing: 0;
66
+ -webkit-font-smoothing: antialiased;
67
+ }
68
+
69
+ button,
70
+ input,
71
+ textarea,
72
+ select {
73
+ color: inherit;
74
+ font: inherit;
75
+ letter-spacing: 0;
76
+ }
77
+
78
+ button,
79
+ a,
80
+ [role="button"] {
81
+ -webkit-tap-highlight-color: transparent;
82
+ }
83
+
84
+ button {
85
+ border: 0;
86
+ }
87
+
88
+ button:focus-visible,
89
+ a:focus-visible,
90
+ input:focus-visible,
91
+ textarea:focus-visible,
92
+ select:focus-visible {
93
+ outline: 2px solid var(--accent);
94
+ outline-offset: 2px;
95
+ }
96
+
97
+ a {
98
+ color: inherit;
99
+ text-decoration: none;
100
+ }
101
+
102
+ svg {
103
+ display: block;
104
+ width: 16px;
105
+ height: 16px;
106
+ stroke-width: 1.8;
107
+ }
108
+
109
+ .sr-only {
110
+ position: absolute;
111
+ width: 1px;
112
+ height: 1px;
113
+ padding: 0;
114
+ margin: -1px;
115
+ overflow: hidden;
116
+ clip: rect(0, 0, 0, 0);
117
+ white-space: nowrap;
118
+ border: 0;
119
+ }
120
+
121
+ .app-frame {
122
+ position: fixed;
123
+ inset: 0;
124
+ display: flex;
125
+ flex-direction: column;
126
+ min-width: 0;
127
+ min-height: 0;
128
+ background: var(--bg);
129
+ }
130
+
131
+ .utility-bar {
132
+ position: relative;
133
+ z-index: 40;
134
+ display: flex;
135
+ align-items: center;
136
+ min-height: 42px;
137
+ padding: 0 10px;
138
+ border-bottom: 1px solid var(--border);
139
+ background: color-mix(in srgb, var(--surface) 94%, transparent);
140
+ backdrop-filter: blur(16px);
141
+ }
142
+
143
+ .utility-brand {
144
+ display: flex;
145
+ min-width: 0;
146
+ align-items: center;
147
+ gap: 9px;
148
+ font-size: 13px;
149
+ font-weight: 650;
150
+ }
151
+
152
+ .utility-mark {
153
+ display: grid;
154
+ width: 25px;
155
+ height: 25px;
156
+ place-items: center;
157
+ border-radius: var(--radius-md);
158
+ background: var(--text);
159
+ color: var(--surface);
160
+ }
161
+
162
+ .utility-title {
163
+ overflow: hidden;
164
+ text-overflow: ellipsis;
165
+ white-space: nowrap;
166
+ }
167
+
168
+ .utility-kind {
169
+ margin-left: 6px;
170
+ color: var(--text-3);
171
+ font-size: 11px;
172
+ font-weight: 500;
173
+ }
174
+
175
+ .utility-actions {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 4px;
179
+ margin-left: auto;
180
+ }
181
+
182
+ .icon-btn,
183
+ .tool-btn {
184
+ display: inline-grid;
185
+ width: var(--control-h);
186
+ height: var(--control-h);
187
+ flex: 0 0 auto;
188
+ cursor: pointer;
189
+ place-items: center;
190
+ border-radius: var(--radius-md);
191
+ background: transparent;
192
+ color: var(--text-2);
193
+ transition: color var(--ease), background-color var(--ease), transform 80ms ease;
194
+ }
195
+
196
+ .icon-btn:hover,
197
+ .tool-btn:hover {
198
+ background: var(--surface-2);
199
+ color: var(--text);
200
+ }
201
+
202
+ .icon-btn:active,
203
+ .tool-btn:active,
204
+ .btn:active {
205
+ transform: scale(0.97);
206
+ }
207
+
208
+ .btn {
209
+ display: inline-flex;
210
+ min-height: var(--control-h);
211
+ align-items: center;
212
+ justify-content: center;
213
+ gap: 7px;
214
+ padding: 0 12px;
215
+ cursor: pointer;
216
+ border: 1px solid var(--border);
217
+ border-radius: var(--radius-md);
218
+ background: var(--surface);
219
+ color: var(--text);
220
+ font-size: 13px;
221
+ font-weight: 600;
222
+ transition: background-color var(--ease), border-color var(--ease), color var(--ease), transform 80ms ease;
223
+ }
224
+
225
+ .btn:hover {
226
+ border-color: color-mix(in srgb, var(--border) 60%, var(--text-3));
227
+ background: var(--surface-2);
228
+ }
229
+
230
+ .btn.primary {
231
+ border-color: var(--accent);
232
+ background: var(--accent);
233
+ color: var(--accent-fg);
234
+ }
235
+
236
+ .btn.primary:hover {
237
+ background: color-mix(in srgb, var(--accent) 88%, black);
238
+ }
239
+
240
+ .btn.ghost {
241
+ border-color: transparent;
242
+ background: transparent;
243
+ }
244
+
245
+ .btn.danger {
246
+ border-color: color-mix(in srgb, var(--danger) 40%, var(--border));
247
+ color: var(--danger);
248
+ }
249
+
250
+ .segmented {
251
+ display: inline-flex;
252
+ align-items: center;
253
+ gap: 2px;
254
+ padding: 2px;
255
+ border: 1px solid var(--border);
256
+ border-radius: var(--radius-md);
257
+ background: var(--surface-2);
258
+ }
259
+
260
+ .segmented button {
261
+ min-height: 26px;
262
+ padding: 0 9px;
263
+ cursor: pointer;
264
+ border-radius: calc(var(--radius-md) - 2px);
265
+ background: transparent;
266
+ color: var(--text-2);
267
+ font-size: 11px;
268
+ font-weight: 600;
269
+ }
270
+
271
+ .segmented button.active {
272
+ background: var(--surface);
273
+ color: var(--text);
274
+ box-shadow: 0 1px 3px rgba(20, 25, 32, 0.1);
275
+ }
276
+
277
+ .workspace {
278
+ display: flex;
279
+ min-width: 0;
280
+ min-height: 0;
281
+ flex: 1;
282
+ }
283
+
284
+ .panel {
285
+ min-width: 0;
286
+ min-height: 0;
287
+ background: var(--surface);
288
+ }
289
+
290
+ .panel-header {
291
+ display: flex;
292
+ min-height: 43px;
293
+ align-items: center;
294
+ gap: 8px;
295
+ padding: 0 12px;
296
+ border-bottom: 1px solid var(--border);
297
+ }
298
+
299
+ .panel-title {
300
+ min-width: 0;
301
+ overflow: hidden;
302
+ font-size: 13px;
303
+ font-weight: 650;
304
+ text-overflow: ellipsis;
305
+ white-space: nowrap;
306
+ }
307
+
308
+ .panel-meta {
309
+ color: var(--text-3);
310
+ font-size: var(--meta-size);
311
+ }
312
+
313
+ .panel-actions {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 2px;
317
+ margin-left: auto;
318
+ }
319
+
320
+ .scroll-area {
321
+ min-height: 0;
322
+ overflow: auto;
323
+ scrollbar-color: color-mix(in srgb, var(--text-3) 45%, transparent) transparent;
324
+ scrollbar-width: thin;
325
+ }
326
+
327
+ .sidebar {
328
+ width: var(--sidebar);
329
+ flex: 0 0 var(--sidebar);
330
+ border-right: 1px solid var(--border);
331
+ background: var(--surface-2);
332
+ }
333
+
334
+ .sidebar-section {
335
+ padding: 12px 8px 5px;
336
+ color: var(--text-3);
337
+ font-size: 10px;
338
+ font-weight: 700;
339
+ letter-spacing: 0.08em;
340
+ text-transform: uppercase;
341
+ }
342
+
343
+ .nav-list {
344
+ display: grid;
345
+ gap: 2px;
346
+ padding: 0 7px;
347
+ }
348
+
349
+ .nav-row {
350
+ display: flex;
351
+ min-width: 0;
352
+ min-height: 32px;
353
+ align-items: center;
354
+ gap: 8px;
355
+ padding: 0 8px;
356
+ cursor: pointer;
357
+ border-radius: var(--radius-md);
358
+ color: var(--text-2);
359
+ transition: background-color var(--ease), color var(--ease);
360
+ }
361
+
362
+ .nav-row:hover {
363
+ background: color-mix(in srgb, var(--surface-3) 75%, transparent);
364
+ color: var(--text);
365
+ }
366
+
367
+ .nav-row.active {
368
+ background: var(--surface);
369
+ color: var(--text);
370
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--border) 72%, transparent);
371
+ }
372
+
373
+ .nav-row span:not(.status-dot):not(.badge) {
374
+ min-width: 0;
375
+ overflow: hidden;
376
+ text-overflow: ellipsis;
377
+ white-space: nowrap;
378
+ }
379
+
380
+ .status-dot {
381
+ width: 7px;
382
+ height: 7px;
383
+ flex: 0 0 auto;
384
+ border-radius: 999px;
385
+ background: var(--text-3);
386
+ }
387
+
388
+ .status-dot.run { background: var(--info); box-shadow: 0 0 0 3px color-mix(in srgb, var(--info) 15%, transparent); }
389
+ .status-dot.ok { background: var(--success); }
390
+ .status-dot.wait { background: var(--warning); }
391
+ .status-dot.fail { background: var(--danger); }
392
+
393
+ .badge {
394
+ display: inline-flex;
395
+ min-height: 20px;
396
+ align-items: center;
397
+ gap: 5px;
398
+ padding: 0 7px;
399
+ border: 1px solid var(--border);
400
+ border-radius: 999px;
401
+ background: var(--surface);
402
+ color: var(--text-2);
403
+ font-size: 10px;
404
+ font-weight: 650;
405
+ white-space: nowrap;
406
+ }
407
+
408
+ .badge.success { border-color: color-mix(in srgb, var(--success) 30%, var(--border)); color: var(--success); }
409
+ .badge.warning { border-color: color-mix(in srgb, var(--warning) 32%, var(--border)); color: var(--warning); }
410
+ .badge.danger { border-color: color-mix(in srgb, var(--danger) 32%, var(--border)); color: var(--danger); }
411
+ .badge.info { border-color: color-mix(in srgb, var(--info) 30%, var(--border)); color: var(--info); }
412
+
413
+ .avatar {
414
+ display: grid;
415
+ width: 28px;
416
+ height: 28px;
417
+ flex: 0 0 auto;
418
+ place-items: center;
419
+ border-radius: 50%;
420
+ background: var(--surface-3);
421
+ color: var(--text-2);
422
+ font-size: 10px;
423
+ font-weight: 750;
424
+ }
425
+
426
+ .avatar.agent {
427
+ background: var(--accent-soft);
428
+ color: var(--accent);
429
+ }
430
+
431
+ .mono {
432
+ font-family: var(--font-mono);
433
+ }
434
+
435
+ .muted { color: var(--text-2); }
436
+ .quiet { color: var(--text-3); }
437
+
438
+ .tabs {
439
+ display: flex;
440
+ min-width: 0;
441
+ align-items: end;
442
+ gap: 2px;
443
+ overflow-x: auto;
444
+ }
445
+
446
+ .tab {
447
+ position: relative;
448
+ display: inline-flex;
449
+ min-height: 34px;
450
+ align-items: center;
451
+ gap: 6px;
452
+ padding: 0 10px;
453
+ cursor: pointer;
454
+ border-radius: var(--radius-sm) var(--radius-sm) 0 0;
455
+ background: transparent;
456
+ color: var(--text-2);
457
+ font-size: 12px;
458
+ white-space: nowrap;
459
+ }
460
+
461
+ .tab:hover,
462
+ .tab.active {
463
+ color: var(--text);
464
+ }
465
+
466
+ .tab.active::after {
467
+ position: absolute;
468
+ right: 8px;
469
+ bottom: -1px;
470
+ left: 8px;
471
+ height: 2px;
472
+ border-radius: 2px;
473
+ background: var(--accent);
474
+ content: "";
475
+ }
476
+
477
+ .tab-panel[hidden] {
478
+ display: none !important;
479
+ }
480
+
481
+ .code-block {
482
+ overflow: auto;
483
+ border: 1px solid var(--border);
484
+ border-radius: var(--radius-md);
485
+ background: color-mix(in srgb, var(--bg) 82%, black 18%);
486
+ color: #d7dce2;
487
+ font: 12px/1.65 var(--font-mono);
488
+ }
489
+
490
+ html:not(.dark) .code-block {
491
+ background: #171a1e;
492
+ }
493
+
494
+ .code-line {
495
+ display: flex;
496
+ min-width: max-content;
497
+ padding: 0 10px;
498
+ }
499
+
500
+ .code-line .ln {
501
+ width: 26px;
502
+ flex: 0 0 auto;
503
+ color: #666f7a;
504
+ user-select: none;
505
+ }
506
+
507
+ .tok-key { color: #d2a8ff; }
508
+ .tok-fn { color: #79c0ff; }
509
+ .tok-str { color: #a5d6ff; }
510
+ .tok-comment { color: #8b949e; }
511
+
512
+ .diff-line {
513
+ display: flex;
514
+ min-width: max-content;
515
+ min-height: 22px;
516
+ align-items: center;
517
+ padding: 0 10px;
518
+ font: 12px/22px var(--font-mono);
519
+ }
520
+
521
+ .diff-line.add { background: color-mix(in srgb, var(--success) 13%, transparent); color: color-mix(in srgb, var(--success) 82%, var(--text)); }
522
+ .diff-line.del { background: color-mix(in srgb, var(--danger) 13%, transparent); color: color-mix(in srgb, var(--danger) 82%, var(--text)); }
523
+ .diff-mark { width: 20px; flex: 0 0 auto; font-weight: 700; }
524
+
525
+ .message-list {
526
+ display: grid;
527
+ gap: 18px;
528
+ padding: 22px clamp(16px, 4vw, 54px) 170px;
529
+ }
530
+
531
+ .message {
532
+ display: flex;
533
+ max-width: 820px;
534
+ gap: 10px;
535
+ }
536
+
537
+ .message.user {
538
+ justify-self: end;
539
+ flex-direction: row-reverse;
540
+ }
541
+
542
+ .message-body {
543
+ min-width: 0;
544
+ color: var(--text);
545
+ font-size: 14px;
546
+ line-height: 1.62;
547
+ }
548
+
549
+ .message.user .message-body {
550
+ max-width: 620px;
551
+ padding: 9px 12px;
552
+ border-radius: var(--radius-lg);
553
+ background: var(--surface-2);
554
+ }
555
+
556
+ .message-name {
557
+ display: flex;
558
+ align-items: center;
559
+ gap: 8px;
560
+ margin-bottom: 5px;
561
+ font-size: 12px;
562
+ font-weight: 700;
563
+ }
564
+
565
+ .tool-event {
566
+ margin-top: 9px;
567
+ overflow: hidden;
568
+ border: 1px solid var(--border);
569
+ border-radius: var(--radius-md);
570
+ background: var(--surface);
571
+ }
572
+
573
+ .tool-event-head {
574
+ display: flex;
575
+ min-height: 34px;
576
+ align-items: center;
577
+ gap: 8px;
578
+ padding: 0 10px;
579
+ color: var(--text-2);
580
+ font-size: 12px;
581
+ font-weight: 600;
582
+ }
583
+
584
+ .tool-event-body {
585
+ padding: 9px 10px;
586
+ border-top: 1px solid var(--border);
587
+ background: var(--surface-2);
588
+ color: var(--text-2);
589
+ font: 11px/1.55 var(--font-mono);
590
+ }
591
+
592
+ .composer-wrap {
593
+ position: absolute;
594
+ right: 0;
595
+ bottom: 0;
596
+ left: 0;
597
+ z-index: 12;
598
+ padding: 20px clamp(16px, 4vw, 54px) 16px;
599
+ background: linear-gradient(to top, var(--surface) 68%, transparent);
600
+ }
601
+
602
+ .composer {
603
+ max-width: 850px;
604
+ margin: 0 auto;
605
+ overflow: hidden;
606
+ border: 1px solid var(--border);
607
+ border-radius: var(--radius-lg);
608
+ background: var(--surface);
609
+ box-shadow: 0 10px 30px rgba(20, 27, 38, 0.09);
610
+ }
611
+
612
+ .composer textarea {
613
+ display: block;
614
+ width: 100%;
615
+ min-height: 66px;
616
+ resize: none;
617
+ border: 0;
618
+ outline: 0;
619
+ padding: 13px 14px 7px;
620
+ background: transparent;
621
+ line-height: 1.5;
622
+ }
623
+
624
+ .composer-footer {
625
+ display: flex;
626
+ min-height: 42px;
627
+ align-items: center;
628
+ gap: 5px;
629
+ padding: 5px 7px;
630
+ }
631
+
632
+ .select-chip {
633
+ display: inline-flex;
634
+ min-height: 27px;
635
+ align-items: center;
636
+ gap: 5px;
637
+ padding: 0 8px;
638
+ border-radius: var(--radius-sm);
639
+ background: transparent;
640
+ color: var(--text-2);
641
+ font-size: 11px;
642
+ font-weight: 600;
643
+ }
644
+
645
+ .send-btn {
646
+ display: grid;
647
+ width: 30px;
648
+ height: 30px;
649
+ margin-left: auto;
650
+ cursor: pointer;
651
+ place-items: center;
652
+ border-radius: var(--radius-md);
653
+ background: var(--accent);
654
+ color: var(--accent-fg);
655
+ }
656
+
657
+ .token-drawer {
658
+ position: fixed;
659
+ z-index: 100;
660
+ top: 50px;
661
+ right: 10px;
662
+ bottom: 10px;
663
+ display: flex;
664
+ width: min(360px, calc(100vw - 20px));
665
+ flex-direction: column;
666
+ overflow: hidden;
667
+ border: 1px solid var(--border);
668
+ border-radius: var(--radius-lg);
669
+ background: var(--surface);
670
+ box-shadow: var(--shadow-float);
671
+ transform: translateX(calc(100% + 24px));
672
+ transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
673
+ }
674
+
675
+ .token-drawer.open {
676
+ transform: translateX(0);
677
+ }
678
+
679
+ .token-body {
680
+ display: grid;
681
+ gap: 16px;
682
+ padding: 14px;
683
+ overflow: auto;
684
+ }
685
+
686
+ .token-group h3 {
687
+ margin: 0 0 8px;
688
+ color: var(--text-3);
689
+ font-size: 10px;
690
+ letter-spacing: 0.08em;
691
+ text-transform: uppercase;
692
+ }
693
+
694
+ .swatches {
695
+ display: grid;
696
+ grid-template-columns: repeat(5, 1fr);
697
+ gap: 6px;
698
+ }
699
+
700
+ .swatch {
701
+ min-width: 0;
702
+ }
703
+
704
+ .swatch-color {
705
+ height: 38px;
706
+ border: 1px solid var(--border);
707
+ border-radius: var(--radius-sm);
708
+ background: var(--swatch);
709
+ }
710
+
711
+ .swatch label {
712
+ display: block;
713
+ margin-top: 4px;
714
+ overflow: hidden;
715
+ color: var(--text-3);
716
+ font: 9px/1.2 var(--font-mono);
717
+ text-overflow: ellipsis;
718
+ white-space: nowrap;
719
+ }
720
+
721
+ .token-table {
722
+ display: grid;
723
+ gap: 1px;
724
+ overflow: hidden;
725
+ border: 1px solid var(--border);
726
+ border-radius: var(--radius-md);
727
+ background: var(--border);
728
+ }
729
+
730
+ .token-row {
731
+ display: grid;
732
+ grid-template-columns: 1fr auto;
733
+ gap: 12px;
734
+ padding: 8px 9px;
735
+ background: var(--surface);
736
+ color: var(--text-2);
737
+ font-size: 11px;
738
+ }
739
+
740
+ .token-row code {
741
+ color: var(--text);
742
+ font-family: var(--font-mono);
743
+ }
744
+
745
+ .density-compact {
746
+ --control-h: 30px;
747
+ --ui-size: 13px;
748
+ --meta-size: 11px;
749
+ --sidebar: 226px;
750
+ }
751
+
752
+ .density-comfortable {
753
+ --control-h: 38px;
754
+ --ui-size: 15px;
755
+ --meta-size: 13px;
756
+ --sidebar: 270px;
757
+ }
758
+
759
+ .mobile-only { display: none !important; }
760
+
761
+ @media (max-width: 760px) {
762
+ .desktop-only { display: none !important; }
763
+ .mobile-only { display: flex !important; }
764
+ .utility-kind { display: none; }
765
+ .utility-bar { min-height: 48px; padding: 0 8px; }
766
+ .utility-title { font-size: 12px; }
767
+ .token-drawer { top: 56px; }
768
+ .sidebar.drawer {
769
+ position: absolute;
770
+ z-index: 30;
771
+ inset: 0 auto 0 0;
772
+ width: min(86vw, 330px);
773
+ transform: translateX(-102%);
774
+ transition: transform 200ms ease;
775
+ box-shadow: var(--shadow-float);
776
+ }
777
+ .sidebar.drawer.open { transform: translateX(0); }
778
+ .message-list { padding: 18px 13px 150px; }
779
+ .message { gap: 8px; }
780
+ .message-body { font-size: 15px; }
781
+ .composer-wrap { padding: 14px 10px calc(10px + env(safe-area-inset-bottom)); }
782
+ .composer { border-radius: 18px; }
783
+ .composer textarea { min-height: 56px; font-size: 15px; }
784
+ }
785
+
786
+ @media (prefers-reduced-motion: reduce) {
787
+ *,
788
+ *::before,
789
+ *::after {
790
+ scroll-behavior: auto !important;
791
+ animation-duration: 0.01ms !important;
792
+ animation-iteration-count: 1 !important;
793
+ transition-duration: 0.01ms !important;
794
+ }
795
+ }