@recallkit/web 0.1.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 (64) hide show
  1. package/next-env.d.ts +6 -0
  2. package/next.config.ts +13 -0
  3. package/package.json +40 -0
  4. package/public/logo.png +0 -0
  5. package/public/textures/bg-scene.png +0 -0
  6. package/src/app/api/_lib/guards.ts +35 -0
  7. package/src/app/api/_lib/limits.ts +6 -0
  8. package/src/app/api/_lib/responses.ts +9 -0
  9. package/src/app/api/commit/complete/route.ts +112 -0
  10. package/src/app/api/commit/preview/route.ts +71 -0
  11. package/src/app/api/commit/route.ts +16 -0
  12. package/src/app/api/memory-cache/route.ts +50 -0
  13. package/src/app/api/pending/[id]/delete/route.ts +21 -0
  14. package/src/app/api/pending/[id]/route.ts +47 -0
  15. package/src/app/api/pending/route.ts +41 -0
  16. package/src/app/api/security.ts +25 -0
  17. package/src/app/api/status/route.ts +35 -0
  18. package/src/app/dashboard/page.tsx +57 -0
  19. package/src/app/drafts/page.tsx +5 -0
  20. package/src/app/globals.css +10 -0
  21. package/src/app/icon.png +0 -0
  22. package/src/app/layout.tsx +43 -0
  23. package/src/app/page.tsx +132 -0
  24. package/src/app/settings/page.tsx +76 -0
  25. package/src/components/ArrowRightIcon.tsx +25 -0
  26. package/src/components/CommitPreview.tsx +156 -0
  27. package/src/components/CopyValue.tsx +49 -0
  28. package/src/components/MemoryInbox.tsx +74 -0
  29. package/src/components/RetrievedMemories.tsx +36 -0
  30. package/src/components/TopNav.tsx +39 -0
  31. package/src/components/WalletConnectButton.tsx +68 -0
  32. package/src/components/inbox/EmptyInbox.tsx +20 -0
  33. package/src/components/inbox/InboxStats.tsx +41 -0
  34. package/src/components/inbox/MemoryCandidateList.tsx +90 -0
  35. package/src/components/inbox/MemoryCandidateRow.tsx +195 -0
  36. package/src/components/memory-cache/CachedMemoryList.tsx +47 -0
  37. package/src/components/memory-cache/EmptyCache.tsx +13 -0
  38. package/src/hooks/useCommitFlow.ts +55 -0
  39. package/src/hooks/useMemoryCache.ts +44 -0
  40. package/src/hooks/usePendingMemories.ts +137 -0
  41. package/src/hooks/useWallet.ts +69 -0
  42. package/src/lib/api.ts +71 -0
  43. package/src/lib/wallet.ts +88 -0
  44. package/src/services/commitMemories.ts +153 -0
  45. package/src/services/signerApi.ts +67 -0
  46. package/src/services/types.ts +22 -0
  47. package/src/stores/appStore.ts +18 -0
  48. package/src/stores/createStore.ts +41 -0
  49. package/src/stores/slices/memoryCacheSlice.ts +29 -0
  50. package/src/stores/slices/pendingMemorySlice.ts +21 -0
  51. package/src/stores/slices/walletSlice.ts +24 -0
  52. package/src/styles/base.css +61 -0
  53. package/src/styles/buttons.css +53 -0
  54. package/src/styles/data-display.css +485 -0
  55. package/src/styles/forms.css +86 -0
  56. package/src/styles/landing.css +75 -0
  57. package/src/styles/layout.css +111 -0
  58. package/src/styles/navigation.css +121 -0
  59. package/src/styles/overlays.css +65 -0
  60. package/src/styles/tokens.css +26 -0
  61. package/src/styles/utilities.css +358 -0
  62. package/src/utils/errors.ts +5 -0
  63. package/src/utils/format.ts +37 -0
  64. package/tsconfig.json +44 -0
@@ -0,0 +1,53 @@
1
+ .btn {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 8px;
6
+ padding: 10px 16px;
7
+ border-radius: 7px;
8
+ font-size: 13.5px;
9
+ font-weight: 500;
10
+ font-family: var(--font-sans), Inter, sans-serif;
11
+ border: 1px solid transparent;
12
+ background: transparent;
13
+ color: var(--text);
14
+ cursor: pointer;
15
+ text-decoration: none;
16
+ transition: background 0.12s ease, border-color 0.12s ease, color 0.15s ease;
17
+ }
18
+
19
+ .btn:disabled {
20
+ opacity: 0.45;
21
+ cursor: not-allowed;
22
+ }
23
+
24
+ .btn--primary {
25
+ background: var(--accent);
26
+ color: #0a0a0a;
27
+ border-color: var(--accent);
28
+ }
29
+
30
+ .btn--primary:hover:not(:disabled) {
31
+ background: var(--accent-hover);
32
+ border-color: var(--accent-hover);
33
+ }
34
+
35
+ .btn--ghost {
36
+ background: transparent;
37
+ color: var(--text);
38
+ border-color: var(--border-hover);
39
+ }
40
+
41
+ .btn--ghost:hover:not(:disabled) {
42
+ border-color: var(--text-dim);
43
+ color: var(--ink);
44
+ }
45
+
46
+ .btn--sm {
47
+ padding: 6px 12px;
48
+ font-size: 12px;
49
+ }
50
+
51
+ .btn--icon {
52
+ padding: 8px;
53
+ }
@@ -0,0 +1,485 @@
1
+ .tile {
2
+ border: 1px solid var(--border-strong);
3
+ border-radius: 10px;
4
+ padding: 22px 24px;
5
+ background: rgba(30, 30, 30, 0.5);
6
+ backdrop-filter: blur(2px);
7
+ }
8
+
9
+ .tile__label {
10
+ font-size: 12px;
11
+ color: var(--text-dim);
12
+ margin-bottom: 6px;
13
+ font-family: var(--font-mono), ui-monospace, monospace;
14
+ letter-spacing: 0.04em;
15
+ }
16
+
17
+ .tile__value {
18
+ font-family: var(--font-display), var(--font-sans), sans-serif;
19
+ font-size: 28px;
20
+ font-weight: 500;
21
+ color: var(--ink);
22
+ line-height: 1;
23
+ }
24
+
25
+ .tile__value--accent {
26
+ color: var(--accent);
27
+ }
28
+
29
+ .tile__value--mono {
30
+ font-family: var(--font-mono), ui-monospace, monospace;
31
+ font-size: 15px;
32
+ padding-top: 4px;
33
+ }
34
+
35
+ .tile__meta {
36
+ font-size: 13px;
37
+ color: var(--text-dim);
38
+ margin-top: 10px;
39
+ }
40
+
41
+ .stat-grid {
42
+ display: grid;
43
+ grid-template-columns: repeat(4, 1fr);
44
+ border: 1px solid var(--border-strong);
45
+ border-radius: 10px;
46
+ overflow: hidden;
47
+ margin-bottom: 28px;
48
+ background: rgba(30, 30, 30, 0.5);
49
+ backdrop-filter: blur(2px);
50
+ }
51
+
52
+ .stat-grid__cell {
53
+ padding: 18px 20px;
54
+ border-right: 1px solid var(--border-strong);
55
+ }
56
+
57
+ .stat-grid__cell:last-child {
58
+ border-right: none;
59
+ }
60
+
61
+ .stat-grid__label {
62
+ font-size: 12px;
63
+ color: var(--text-dim);
64
+ margin-bottom: 6px;
65
+ }
66
+
67
+ .stat-grid__value {
68
+ font-family: var(--font-display), var(--font-sans), sans-serif;
69
+ font-size: 24px;
70
+ font-weight: 500;
71
+ color: var(--ink);
72
+ line-height: 1;
73
+ }
74
+
75
+ .stat-grid__value--accent {
76
+ color: var(--accent);
77
+ }
78
+
79
+ .stat-grid__value--mono {
80
+ font-family: var(--font-mono), ui-monospace, monospace;
81
+ font-size: 14px;
82
+ padding-top: 4px;
83
+ }
84
+
85
+ .list {
86
+ border: 1px solid var(--border-strong);
87
+ border-radius: 10px;
88
+ overflow: hidden;
89
+ background: rgba(30, 30, 30, 0.5);
90
+ backdrop-filter: blur(2px);
91
+ }
92
+
93
+ .list__head {
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ padding: 12px 20px;
98
+ border-bottom: 1px solid var(--border-strong);
99
+ background: rgba(34, 34, 34, 0.7);
100
+ font-family: var(--font-mono), ui-monospace, monospace;
101
+ font-size: 11px;
102
+ color: var(--text-dim);
103
+ letter-spacing: 0.04em;
104
+ }
105
+
106
+ .list__row {
107
+ display: grid;
108
+ grid-template-columns: 18px 1fr auto;
109
+ gap: 18px;
110
+ padding: 18px 20px;
111
+ border-bottom: 1px solid var(--border);
112
+ transition: background 0.12s ease;
113
+ }
114
+
115
+ .list__row:last-child {
116
+ border-bottom: none;
117
+ }
118
+
119
+ .list__row:hover {
120
+ background: rgba(34, 34, 34, 0.6);
121
+ }
122
+
123
+ .list__row.is-selected {
124
+ background: rgba(28, 36, 32, 0.75);
125
+ }
126
+
127
+ .list__row--simple {
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: space-between;
131
+ gap: 16px;
132
+ }
133
+
134
+ /* ------ Memory drafts ------ */
135
+
136
+ .candidate-list {
137
+ display: grid;
138
+ gap: 14px;
139
+ }
140
+
141
+ .candidate-list__toolbar {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: space-between;
145
+ gap: 12px;
146
+ padding: 4px 2px;
147
+ color: var(--text-dim);
148
+ font-family: var(--font-mono), ui-monospace, monospace;
149
+ font-size: 11px;
150
+ letter-spacing: 0.04em;
151
+ }
152
+
153
+ .candidate-list__select-all {
154
+ display: inline-flex;
155
+ align-items: center;
156
+ gap: 10px;
157
+ cursor: pointer;
158
+ color: var(--text-muted);
159
+ text-transform: none;
160
+ }
161
+
162
+ .candidate-list__select-all .check {
163
+ margin-top: 0;
164
+ }
165
+
166
+ .candidate-list__sort {
167
+ color: var(--text-faint);
168
+ }
169
+
170
+ .candidate-list__items {
171
+ display: grid;
172
+ gap: 10px;
173
+ }
174
+
175
+ .candidate {
176
+ display: grid;
177
+ grid-template-columns: 22px minmax(0, 1fr);
178
+ gap: 14px;
179
+ padding: 16px 18px;
180
+ border: 1px solid var(--border-strong);
181
+ border-radius: 12px;
182
+ background: rgba(32, 32, 32, 0.55);
183
+ transition: border-color 0.15s ease, background 0.15s ease, transform 0.15s ease;
184
+ }
185
+
186
+ .candidate:hover {
187
+ border-color: var(--border-hover);
188
+ background: rgba(40, 40, 40, 0.75);
189
+ }
190
+
191
+ .candidate.is-selected {
192
+ border-color: rgba(110, 231, 183, 0.42);
193
+ background: linear-gradient(180deg, rgba(110, 231, 183, 0.06), transparent 60%),
194
+ rgba(34, 44, 38, 0.85);
195
+ }
196
+
197
+ .candidate__gutter {
198
+ padding-top: 2px;
199
+ }
200
+
201
+ .candidate__body {
202
+ display: grid;
203
+ gap: 12px;
204
+ min-width: 0;
205
+ }
206
+
207
+ .candidate__head {
208
+ display: flex;
209
+ align-items: flex-start;
210
+ justify-content: space-between;
211
+ gap: 12px;
212
+ min-width: 0;
213
+ }
214
+
215
+ .candidate__tags {
216
+ display: flex;
217
+ flex-wrap: wrap;
218
+ align-items: center;
219
+ gap: 6px;
220
+ min-width: 0;
221
+ }
222
+
223
+ .candidate__attribution {
224
+ display: inline-flex;
225
+ align-items: center;
226
+ gap: 8px;
227
+ flex: none;
228
+ font-family: var(--font-mono), ui-monospace, monospace;
229
+ font-size: 11px;
230
+ color: var(--text-dim);
231
+ white-space: nowrap;
232
+ }
233
+
234
+ .candidate__agent {
235
+ position: relative;
236
+ padding-right: 9px;
237
+ }
238
+
239
+ .candidate__agent::after {
240
+ content: "";
241
+ position: absolute;
242
+ right: 0;
243
+ top: 50%;
244
+ width: 1px;
245
+ height: 10px;
246
+ margin-top: -5px;
247
+ background: var(--border-strong);
248
+ }
249
+
250
+ .candidate__time {
251
+ color: var(--text-faint);
252
+ }
253
+
254
+ .kind-pill {
255
+ display: inline-flex;
256
+ align-items: center;
257
+ gap: 6px;
258
+ padding: 3px 9px;
259
+ border-radius: 999px;
260
+ background: rgba(255, 255, 255, 0.04);
261
+ border: 1px solid var(--border-strong);
262
+ color: var(--text);
263
+ font-family: var(--font-mono), ui-monospace, monospace;
264
+ font-size: 11px;
265
+ letter-spacing: 0.01em;
266
+ text-transform: lowercase;
267
+ }
268
+
269
+ .kind-pill__dot {
270
+ width: 6px;
271
+ height: 6px;
272
+ border-radius: 999px;
273
+ background: var(--text-muted);
274
+ }
275
+
276
+ .kind-pill--preference .kind-pill__dot,
277
+ .kind-pill--style .kind-pill__dot {
278
+ background: #6ee7b7;
279
+ }
280
+
281
+ .kind-pill--decision .kind-pill__dot {
282
+ background: #93c5fd;
283
+ }
284
+
285
+ .kind-pill--constraint .kind-pill__dot,
286
+ .kind-pill--warning .kind-pill__dot {
287
+ background: #fbbf24;
288
+ }
289
+
290
+ .kind-pill--instruction .kind-pill__dot {
291
+ background: #c4b5fd;
292
+ }
293
+
294
+ .kind-pill--project .kind-pill__dot,
295
+ .kind-pill--task_context .kind-pill__dot {
296
+ background: #67e8f9;
297
+ }
298
+
299
+ .kind-pill--relationship .kind-pill__dot {
300
+ background: #f9a8d4;
301
+ }
302
+
303
+ .kind-pill--fact .kind-pill__dot {
304
+ background: var(--text-muted);
305
+ }
306
+
307
+ .scope-chip,
308
+ .tag-chip {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ padding: 3px 8px;
312
+ border-radius: 6px;
313
+ background: rgba(255, 255, 255, 0.03);
314
+ border: 1px solid var(--border);
315
+ color: var(--text-muted);
316
+ font-family: var(--font-mono), ui-monospace, monospace;
317
+ font-size: 10.5px;
318
+ letter-spacing: 0.02em;
319
+ }
320
+
321
+ .tag-chip {
322
+ color: var(--text-dim);
323
+ }
324
+
325
+ .tag-chip--muted {
326
+ color: var(--text-faint);
327
+ background: transparent;
328
+ }
329
+
330
+ .candidate-scope {
331
+ display: grid;
332
+ gap: 8px;
333
+ padding: 10px 12px;
334
+ border: 1px solid var(--border);
335
+ border-radius: 8px;
336
+ background: rgba(255, 255, 255, 0.018);
337
+ }
338
+
339
+ .candidate-scope__head {
340
+ display: flex;
341
+ align-items: center;
342
+ justify-content: space-between;
343
+ gap: 10px;
344
+ }
345
+
346
+ .candidate-scope__value {
347
+ color: var(--text-muted);
348
+ font-family: var(--font-mono), ui-monospace, monospace;
349
+ font-size: 11px;
350
+ }
351
+
352
+ .scope-segment {
353
+ display: grid;
354
+ grid-template-columns: repeat(3, minmax(0, 1fr));
355
+ gap: 4px;
356
+ }
357
+
358
+ .scope-segment__button {
359
+ min-height: 30px;
360
+ border: 1px solid var(--border);
361
+ border-radius: 6px;
362
+ background: rgba(255, 255, 255, 0.025);
363
+ color: var(--text-dim);
364
+ font: 600 11px var(--font-mono), ui-monospace, monospace;
365
+ cursor: pointer;
366
+ }
367
+
368
+ .scope-segment__button:hover {
369
+ border-color: var(--border-hover);
370
+ color: var(--text);
371
+ }
372
+
373
+ .scope-segment__button.is-active {
374
+ border-color: rgba(110, 231, 183, 0.5);
375
+ background: rgba(110, 231, 183, 0.09);
376
+ color: var(--text);
377
+ }
378
+
379
+ .candidate-scope__project {
380
+ display: grid;
381
+ grid-template-columns: 70px minmax(0, 1fr);
382
+ align-items: center;
383
+ gap: 8px;
384
+ color: var(--text-dim);
385
+ font-family: var(--font-mono), ui-monospace, monospace;
386
+ font-size: 11px;
387
+ }
388
+
389
+ .candidate-scope__project input {
390
+ width: 100%;
391
+ min-width: 0;
392
+ border: 1px solid var(--border);
393
+ border-radius: 6px;
394
+ background: rgba(0, 0, 0, 0.2);
395
+ color: var(--text);
396
+ padding: 7px 9px;
397
+ font: 500 12px var(--font-mono), ui-monospace, monospace;
398
+ }
399
+
400
+ .candidate-scope__reason {
401
+ margin: 0;
402
+ color: var(--text-muted);
403
+ font-family: var(--font-mono), ui-monospace, monospace;
404
+ font-size: 12px;
405
+ line-height: 1.45;
406
+ }
407
+
408
+ .candidate__reason {
409
+ display: grid;
410
+ gap: 4px;
411
+ padding: 10px 12px;
412
+ border-left: 2px solid var(--border-hover);
413
+ background: rgba(255, 255, 255, 0.015);
414
+ border-radius: 0 8px 8px 0;
415
+ }
416
+
417
+ .candidate__reason-label {
418
+ font-family: var(--font-mono), ui-monospace, monospace;
419
+ font-size: 10px;
420
+ letter-spacing: 0.06em;
421
+ text-transform: uppercase;
422
+ color: var(--text-faint);
423
+ }
424
+
425
+ .candidate__reason p {
426
+ margin: 0;
427
+ font-size: 12.5px;
428
+ line-height: 1.5;
429
+ color: var(--text-muted);
430
+ font-family: var(--font-mono), ui-monospace, monospace;
431
+ }
432
+
433
+ .candidate__foot {
434
+ display: flex;
435
+ align-items: center;
436
+ justify-content: space-between;
437
+ gap: 16px;
438
+ flex-wrap: wrap;
439
+ padding-top: 4px;
440
+ }
441
+
442
+ .candidate__scores {
443
+ display: grid;
444
+ gap: 6px;
445
+ min-width: 0;
446
+ flex: 1 1 240px;
447
+ }
448
+
449
+ .score {
450
+ display: grid;
451
+ grid-template-columns: 78px 1fr 32px;
452
+ align-items: center;
453
+ gap: 10px;
454
+ font-size: 11px;
455
+ font-family: var(--font-mono), ui-monospace, monospace;
456
+ }
457
+
458
+ .score__label {
459
+ color: var(--text-dim);
460
+ letter-spacing: 0.02em;
461
+ }
462
+
463
+ .score__value {
464
+ color: var(--text-muted);
465
+ text-align: right;
466
+ }
467
+
468
+ .score .bar {
469
+ width: 100%;
470
+ height: 5px;
471
+ border-radius: 3px;
472
+ }
473
+
474
+ .score .bar__fill {
475
+ border-radius: 3px;
476
+ }
477
+
478
+ .candidate__actions {
479
+ display: inline-flex;
480
+ gap: 6px;
481
+ }
482
+
483
+ .candidate__actions .row-action {
484
+ opacity: 1;
485
+ }
@@ -0,0 +1,86 @@
1
+ .check {
2
+ width: 16px;
3
+ height: 16px;
4
+ border-radius: 4px;
5
+ border: 1px solid var(--border-hover);
6
+ background: transparent;
7
+ margin-top: 2px;
8
+ cursor: pointer;
9
+ display: grid;
10
+ place-items: center;
11
+ appearance: none;
12
+ flex-shrink: 0;
13
+ transition: background 0.12s ease, border-color 0.12s ease;
14
+ }
15
+
16
+ .check:hover {
17
+ border-color: var(--text-dim);
18
+ }
19
+
20
+ .check:checked {
21
+ background: var(--accent);
22
+ border-color: var(--accent);
23
+ }
24
+
25
+ .check:checked::after {
26
+ content: "";
27
+ width: 8px;
28
+ height: 4px;
29
+ border-left: 1.5px solid #0a0a0a;
30
+ border-bottom: 1.5px solid #0a0a0a;
31
+ transform: rotate(-45deg) translate(1px, -1px);
32
+ }
33
+
34
+ .candidate-text {
35
+ display: block;
36
+ width: 100%;
37
+ min-height: 60px;
38
+ background: transparent;
39
+ border: 1px dashed var(--border-strong);
40
+ border-radius: 8px;
41
+ padding: 10px 12px;
42
+ color: var(--ink);
43
+ font-family: var(--font-sans), Inter, sans-serif;
44
+ font-size: 14.5px;
45
+ line-height: 1.55;
46
+ resize: vertical;
47
+ transition: border-color 0.15s ease;
48
+ }
49
+
50
+ .candidate-text:hover {
51
+ border-color: var(--text-dim);
52
+ }
53
+
54
+ .candidate-text:focus {
55
+ border-color: var(--accent);
56
+ border-style: solid;
57
+ outline: none;
58
+ }
59
+
60
+ .field-v2 {
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: 8px;
64
+ margin-top: 16px;
65
+ }
66
+
67
+ .field-v2__label {
68
+ font-size: 13px;
69
+ color: var(--text-muted);
70
+ }
71
+
72
+ .field-v2__input {
73
+ height: 40px;
74
+ border: 1px solid var(--border-hover);
75
+ border-radius: 7px;
76
+ padding: 0 12px;
77
+ background: var(--bg);
78
+ color: var(--ink);
79
+ font-family: var(--font-sans), Inter, sans-serif;
80
+ font-size: 13.5px;
81
+ }
82
+
83
+ .field-v2__input:focus {
84
+ outline: none;
85
+ border-color: var(--accent);
86
+ }
@@ -0,0 +1,75 @@
1
+ .terminal-cmd {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: space-between;
5
+ gap: 12px;
6
+ padding: 12px 14px 12px 16px;
7
+ border: 1px solid var(--border-strong);
8
+ border-radius: 8px;
9
+ background: rgba(30, 30, 30, 0.7);
10
+ backdrop-filter: blur(2px);
11
+ font-family: var(--font-mono), ui-monospace, monospace;
12
+ font-size: 13px;
13
+ color: var(--text);
14
+ width: fit-content;
15
+ max-width: 100%;
16
+ }
17
+
18
+ .terminal-cmd__main {
19
+ display: inline-flex;
20
+ align-items: center;
21
+ gap: 10px;
22
+ min-width: 0;
23
+ }
24
+
25
+ .terminal-cmd code {
26
+ min-width: 0;
27
+ overflow-wrap: anywhere;
28
+ }
29
+
30
+ .terminal-cmd__prompt {
31
+ color: var(--text-faint);
32
+ }
33
+
34
+ .copy-value--terminal {
35
+ flex: 0 0 auto;
36
+ width: 28px;
37
+ min-height: 24px;
38
+ padding: 0 0 0 10px;
39
+ border-left: 1px solid var(--border-strong);
40
+ color: var(--text-dim);
41
+ justify-content: flex-end;
42
+ }
43
+
44
+ .copy-value--terminal .copy-value__icon {
45
+ display: grid;
46
+ place-items: center;
47
+ width: 18px;
48
+ height: 18px;
49
+ border-radius: 5px;
50
+ transition: background 0.12s ease, color 0.15s ease;
51
+ }
52
+
53
+ .copy-value--terminal:hover .copy-value__icon {
54
+ background: rgba(255, 255, 255, 0.06);
55
+ color: var(--ink);
56
+ }
57
+
58
+ .copy-value--terminal.copy-value--copied .copy-value__icon {
59
+ background: var(--accent-soft);
60
+ color: var(--accent);
61
+ }
62
+
63
+ .copy-value--terminal .copy-value__text {
64
+ color: var(--text-muted);
65
+ font-family: var(--font-sans), Inter, sans-serif;
66
+ font-size: 10.5px;
67
+ line-height: 1;
68
+ text-transform: uppercase;
69
+ letter-spacing: 0.04em;
70
+ }
71
+
72
+ .copy-value--terminal:hover .copy-value__text,
73
+ .copy-value--terminal.copy-value--copied .copy-value__text {
74
+ color: var(--accent);
75
+ }