@try-works/dsh-recursive-mode 0.1.12 → 0.1.13

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.
@@ -1,27 +1,137 @@
1
1
  /**
2
- * One-shot board/inspector stylesheet injection (run 15). The client bundle is a
3
- * plain CJS closure with NO CSS pipeline (tsdown has no CSS handling), so we
4
- * inject a single <style data-dsh-recursive> element into document.head and
5
- * style via class names + the shell's --dsw-* theme tokens. That unlocks hover,
6
- * grid layout, and light/dark/skin theme followingimpossible with inline
7
- * styles. Idempotent: guarded by document.querySelector, so every registration
8
- * reuses the one element; the returned disposer removes it.
2
+ * One-shot board/inspector stylesheet injection (run 15 + run 16 / Paper).
3
+ * The client bundle is a plain CJS closure with NO CSS pipeline (tsdown), so we
4
+ * inject a single <style data-dsh-recursive> element into document.head.
5
+ *
6
+ * Run 16 (Paper): the design is ported 1:1 DEFAULT LIGHT theme, dark via a
7
+ * data-theme attribute on the .rec-board / .rec-inspector root. Raw --rm3-*
8
+ * tokens live on the scoped roots; semantic --board-* aliases remap under
9
+ * [data-theme='dark']. EVERY component rule consumes ONLY --board-* aliases
10
+ * (never --rm3-* directly). Idempotent injection; disposer removes the element.
9
11
  */
10
12
 
11
13
  const BOARD_CSS = `
12
- /* dsh-recursive board + inspector (theme-token driven, .rec-* scoped) */
14
+ /* ===== dsh-recursive Paper theme (run 16) ===== */
15
+
16
+ /* Raw tokens: light (default) + dark + shared, scoped to the board/inspector. */
17
+ .rec-board, .rec-inspector {
18
+ /* light */
19
+ --rm3-light-background: #FFFFFF;
20
+ --rm3-light-foreground: #111111;
21
+ --rm3-light-card: #FFFFFF;
22
+ --rm3-light-muted: #FAFAFA;
23
+ --rm3-light-muted-foreground: #666666;
24
+ --rm3-light-accent: #F5F5F5;
25
+ --rm3-light-border: #EAEAEA;
26
+ --rm3-light-success: #27A644;
27
+ --rm3-light-warning: #B67A11;
28
+ --rm3-light-error: #D84F6A;
29
+ --rm3-light-advisory: #9664E8;
30
+ --rm3-light-info: #3F87F5;
31
+ --rm3-light-destructive: #B4261A;
32
+ /* dark */
33
+ --rm3-background: #0A0A0A;
34
+ --rm3-foreground: #EDEDED;
35
+ --rm3-card: #0F0F0F;
36
+ --rm3-muted: #141414;
37
+ --rm3-muted-foreground: #9A9A9A;
38
+ --rm3-accent: #1A1A1A;
39
+ --rm3-border: #1F1F1F;
40
+ --rm3-success: #27A644;
41
+ --rm3-warning: #D9A441;
42
+ --rm3-error: #E06C89;
43
+ --rm3-advisory: #B479FF;
44
+ --rm3-info: #6EA8FF;
45
+ /* shared */
46
+ --rm3-font-sans: 'Geist', ui-sans-serif, system-ui, sans-serif;
47
+ --rm3-font-mono: 'Geist Mono', ui-monospace, Menlo, monospace;
48
+ --rm3-text-xs: 12px;
49
+ --rm3-text-sm: 14px;
50
+ --rm3-text-md: 16px;
51
+ --rm3-text-lg: 20px;
52
+ --rm3-text-xl: 28px;
53
+ --rm3-font-weight-regular: 400;
54
+ --rm3-font-weight-medium: 500;
55
+ --rm3-font-weight-semibold: 600;
56
+ --rm3-radius-sm: 5px;
57
+ --rm3-radius-md: 6px;
58
+ --rm3-radius-lg: 8px;
59
+ --rm3-radius-xl: 11px;
60
+ --rm3-space-8: 8px;
61
+ --rm3-space-12: 12px;
62
+ --rm3-space-16: 16px;
63
+ --rm3-space-24: 24px;
64
+ --rm3-space-32: 32px;
65
+ --rm3-tracking-tight: -0.02em;
66
+ --rm3-tracking-mono: 0.02em;
67
+
68
+ /* Semantic aliases (LIGHT default) */
69
+ --board-bg: var(--rm3-light-background);
70
+ --board-fg: var(--rm3-light-foreground);
71
+ --board-card: var(--rm3-light-card);
72
+ --board-muted: var(--rm3-light-muted);
73
+ --board-muted-fg: var(--rm3-light-muted-foreground);
74
+ --board-accent: var(--rm3-light-accent);
75
+ --board-border: var(--rm3-light-border);
76
+ --board-success: var(--rm3-light-success);
77
+ --board-warning: var(--rm3-light-warning);
78
+ --board-error: var(--rm3-light-error);
79
+ --board-advisory: var(--rm3-light-advisory);
80
+ --board-info: var(--rm3-light-info);
81
+ --board-destructive: var(--rm3-light-destructive);
82
+ --board-font-sans: var(--rm3-font-sans);
83
+ --board-font-mono: var(--rm3-font-mono);
84
+ --board-text-xs: var(--rm3-text-xs);
85
+ --board-text-sm: var(--rm3-text-sm);
86
+ --board-text-md: var(--rm3-text-md);
87
+ --board-text-lg: var(--rm3-text-lg);
88
+ --board-text-xl: var(--rm3-text-xl);
89
+ --board-fw-regular: var(--rm3-font-weight-regular);
90
+ --board-fw-medium: var(--rm3-font-weight-medium);
91
+ --board-fw-semibold: var(--rm3-font-weight-semibold);
92
+ --board-radius-sm: var(--rm3-radius-sm);
93
+ --board-radius-md: var(--rm3-radius-md);
94
+ --board-radius-lg: var(--rm3-radius-lg);
95
+ --board-radius-xl: var(--rm3-radius-xl);
96
+ --board-space-8: var(--rm3-space-8);
97
+ --board-space-12: var(--rm3-space-12);
98
+ --board-space-16: var(--rm3-space-16);
99
+ --board-space-24: var(--rm3-space-24);
100
+ --board-space-32: var(--rm3-space-32);
101
+ --board-tracking-tight: var(--rm3-tracking-tight);
102
+ --board-tracking-mono: var(--rm3-tracking-mono);
103
+ }
104
+
105
+ /* Semantic aliases remapped for DARK. */
106
+ .rec-board[data-theme='dark'], .rec-inspector[data-theme='dark'] {
107
+ --board-bg: var(--rm3-background);
108
+ --board-fg: var(--rm3-foreground);
109
+ --board-card: var(--rm3-card);
110
+ --board-muted: var(--rm3-muted);
111
+ --board-muted-fg: var(--rm3-muted-foreground);
112
+ --board-accent: var(--rm3-accent);
113
+ --board-border: var(--rm3-border);
114
+ --board-success: var(--rm3-success);
115
+ --board-warning: var(--rm3-warning);
116
+ --board-error: var(--rm3-error);
117
+ --board-advisory: var(--rm3-advisory);
118
+ --board-info: var(--rm3-info);
119
+ --board-destructive: var(--rm3-error);
120
+ }
121
+
122
+ /* ===== Board ===== */
13
123
  .rec-board {
14
124
  position: fixed;
15
125
  inset: 0;
16
126
  z-index: 9999;
17
- background: var(--dsw-alias-bg-base);
18
- color: var(--dsw-alias-label-primary);
19
- font-family: var(--dsw-font-family);
20
127
  display: flex;
21
128
  flex-direction: column;
22
129
  box-sizing: border-box;
23
- padding: 14px 16px 16px;
24
- gap: 12px;
130
+ padding: var(--board-space-16);
131
+ gap: var(--board-space-12);
132
+ background: var(--board-bg);
133
+ color: var(--board-fg);
134
+ font-family: var(--board-font-sans);
25
135
  pointer-events: auto;
26
136
  overflow: hidden;
27
137
  }
@@ -29,86 +139,119 @@ const BOARD_CSS = `
29
139
  .rec-board-header {
30
140
  display: flex;
31
141
  align-items: center;
32
- gap: 10px;
142
+ gap: var(--board-space-12);
33
143
  flex: none;
34
144
  }
35
145
 
36
146
  .rec-board-title {
37
147
  margin: 0;
38
- font-size: 16px;
39
- font-weight: 700;
40
- color: var(--dsw-alias-label-primary);
148
+ font-size: 22px;
149
+ font-weight: var(--board-fw-semibold);
150
+ letter-spacing: var(--board-tracking-tight);
151
+ color: var(--board-fg);
41
152
  white-space: nowrap;
42
153
  }
43
154
 
155
+ .rec-board-path {
156
+ flex: none;
157
+ font-family: var(--board-font-mono);
158
+ font-size: var(--board-text-xs);
159
+ letter-spacing: var(--board-tracking-mono);
160
+ color: var(--board-muted-fg);
161
+ overflow: hidden;
162
+ text-overflow: ellipsis;
163
+ white-space: nowrap;
164
+ max-width: 40%;
165
+ }
166
+
44
167
  .rec-board-count {
45
168
  flex: none;
46
- font-size: 12px;
47
- color: var(--dsw-alias-label-tertiary);
48
- background: var(--dsw-alias-interactive-bg-hover);
49
- border-radius: 999px;
50
- padding: 1px 8px;
169
+ font-size: var(--board-text-xs);
170
+ font-weight: var(--board-fw-medium);
171
+ color: var(--board-muted-fg);
172
+ background: var(--board-muted);
173
+ border-radius: 9999px;
174
+ padding: 4px 10px;
51
175
  }
52
176
 
53
177
  .rec-board-empty {
54
178
  margin: 0;
55
- padding: 40px;
179
+ padding: var(--board-space-32);
56
180
  text-align: center;
57
- color: var(--dsw-alias-label-tertiary);
181
+ color: var(--board-muted-fg);
58
182
  }
59
183
 
60
184
  .rec-close {
61
- position: absolute;
62
- top: 14px;
63
- right: 16px;
64
- z-index: 1;
65
185
  display: inline-flex;
66
186
  align-items: center;
67
187
  justify-content: center;
68
- width: 26px;
69
- height: 26px;
188
+ width: 28px;
189
+ height: 28px;
70
190
  padding: 0;
191
+ margin-left: auto;
192
+ flex: none;
71
193
  background: transparent;
72
- border: 1px solid var(--dsw-alias-border-l2);
73
- border-radius: 6px;
74
- color: var(--dsw-alias-label-secondary);
194
+ border: 1px solid var(--board-border);
195
+ border-radius: var(--board-radius-md);
196
+ color: var(--board-muted-fg);
75
197
  cursor: pointer;
76
- font-size: 15px;
198
+ font-size: var(--board-text-md);
77
199
  line-height: 1;
78
200
  }
79
201
 
80
202
  .rec-close:hover {
81
- background: var(--dsw-alias-interactive-bg-hover);
82
- color: var(--dsw-alias-label-primary);
203
+ background: var(--board-accent);
204
+ color: var(--board-fg);
205
+ }
206
+
207
+ .rec-theme-toggle {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ width: 28px;
212
+ height: 28px;
213
+ padding: 0;
214
+ flex: none;
215
+ background: transparent;
216
+ border: 1px solid var(--board-border);
217
+ border-radius: var(--board-radius-md);
218
+ color: var(--board-muted-fg);
219
+ cursor: pointer;
220
+ font-size: var(--board-text-md);
221
+ line-height: 1;
222
+ }
223
+
224
+ .rec-theme-toggle:hover {
225
+ background: var(--board-accent);
226
+ color: var(--board-fg);
83
227
  }
84
228
 
85
229
  .rec-columns {
86
230
  display: grid;
87
231
  grid-auto-flow: column;
88
- grid-auto-columns: minmax(240px, 1fr);
89
- gap: 12px;
232
+ grid-auto-columns: minmax(220px, 1fr);
233
+ gap: var(--board-space-12);
90
234
  flex: 1;
91
235
  min-height: 0;
92
236
  overflow-x: auto;
93
237
  overflow-y: hidden;
94
238
  overscroll-behavior-inline: contain;
95
239
  padding-bottom: 6px;
96
- scrollbar-color: var(--dsw-alias-border-l3) var(--dsw-alias-interactive-bg-hover);
240
+ scrollbar-color: var(--board-border) var(--board-accent);
97
241
  scrollbar-width: thin;
98
242
  }
99
243
 
100
244
  .rec-columns::-webkit-scrollbar { height: 10px; }
101
- .rec-columns::-webkit-scrollbar-track { background: var(--dsw-alias-interactive-bg-hover); border-radius: 999px; }
102
- .rec-columns::-webkit-scrollbar-thumb { background: var(--dsw-alias-border-l3); background-clip: content-box; border: 2px solid transparent; border-radius: 999px; }
103
- .rec-columns::-webkit-scrollbar-thumb:hover { background: var(--dsw-alias-border-l3); background-clip: content-box; }
245
+ .rec-columns::-webkit-scrollbar-track { background: var(--board-accent); border-radius: 999px; }
246
+ .rec-columns::-webkit-scrollbar-thumb { background: var(--board-border); border-radius: 999px; }
104
247
 
105
248
  .rec-column {
106
249
  display: flex;
107
250
  flex-direction: column;
108
251
  min-height: 0;
109
- background: var(--dsw-alias-bg-layer-2);
110
- border: 1px solid var(--dsw-alias-border-l1);
111
- border-radius: 12px;
252
+ background: var(--board-muted);
253
+ border: 1px solid var(--board-border);
254
+ border-radius: var(--board-radius-xl);
112
255
  overflow: hidden;
113
256
  }
114
257
 
@@ -116,7 +259,7 @@ const BOARD_CSS = `
116
259
  display: flex;
117
260
  align-items: center;
118
261
  gap: 6px;
119
- padding: 10px 12px;
262
+ padding: var(--board-space-12);
120
263
  flex: none;
121
264
  }
122
265
 
@@ -124,8 +267,8 @@ const BOARD_CSS = `
124
267
  margin: 0;
125
268
  flex: 1;
126
269
  font-size: 13px;
127
- font-weight: 700;
128
- color: var(--dsw-alias-label-primary);
270
+ font-weight: var(--board-fw-semibold);
271
+ color: var(--board-fg);
129
272
  overflow: hidden;
130
273
  text-overflow: ellipsis;
131
274
  white-space: nowrap;
@@ -133,77 +276,71 @@ const BOARD_CSS = `
133
276
 
134
277
  .rec-column-count {
135
278
  flex: none;
136
- font-size: 12px;
137
- color: var(--dsw-alias-label-tertiary);
138
- background: var(--dsw-alias-interactive-bg-hover);
139
- border-radius: 999px;
279
+ font-size: var(--board-text-xs);
280
+ font-weight: var(--board-fw-medium);
281
+ color: var(--board-muted-fg);
282
+ background: var(--board-accent);
283
+ border-radius: 9999px;
140
284
  padding: 1px 8px;
141
285
  }
142
286
 
143
287
  .rec-status-dot {
144
- width: 8px;
145
- height: 8px;
288
+ width: 6px;
289
+ height: 6px;
146
290
  border-radius: 50%;
147
291
  flex: none;
148
292
  }
149
293
 
150
- .rec-status-dot[data-status='new'] { background: var(--dsw-alias-label-tertiary); }
151
- .rec-status-dot[data-status='active'] { background: var(--dsw-alias-state-business-primary); }
152
- .rec-status-dot[data-status='paused'] { background: var(--dsw-alias-state-warn-primary); }
153
- .rec-status-dot[data-status='blocked'] { background: var(--dsw-alias-state-error-primary); }
154
- .rec-status-dot[data-status='complete'] { background: var(--dsw-alias-state-success-primary); }
294
+ .rec-status-dot[data-status='new'] { background: var(--board-muted-fg); }
295
+ .rec-status-dot[data-status='active'] { background: var(--board-info); }
296
+ .rec-status-dot[data-status='paused'] { background: var(--board-warning); }
297
+ .rec-status-dot[data-status='blocked'] { background: var(--board-error); }
298
+ .rec-status-dot[data-status='complete'] { background: var(--board-success); }
155
299
 
156
300
  .rec-cards {
157
301
  display: flex;
158
302
  flex-direction: column;
159
- gap: 8px;
160
- padding: 2px 8px 10px;
303
+ gap: var(--board-space-8);
304
+ padding: 10px;
161
305
  overflow-y: auto;
162
306
  flex: 1;
163
307
  min-height: 0;
164
308
  }
165
309
 
166
310
  .rec-column-empty {
167
- padding: 24px 8px;
311
+ padding: var(--board-space-24) var(--board-space-8);
168
312
  text-align: center;
169
- font-size: 12px;
170
- color: var(--dsw-alias-label-tertiary);
313
+ font-size: var(--board-text-xs);
314
+ color: var(--board-muted-fg);
171
315
  }
172
316
 
173
317
  .rec-card {
174
318
  display: flex;
175
319
  flex-direction: column;
176
- gap: 6px;
177
- padding: 10px 12px;
320
+ gap: var(--board-space-8);
321
+ padding: var(--board-space-12) 14px;
178
322
  text-align: left;
179
- background: var(--dsw-alias-bg-base);
180
- border: 1px solid var(--dsw-alias-border-l2);
181
- border-radius: 10px;
323
+ background: var(--board-card);
324
+ border: 1px solid var(--board-border);
325
+ border-radius: var(--board-radius-lg);
182
326
  cursor: pointer;
183
- color: var(--dsw-alias-label-primary);
327
+ color: var(--board-fg);
184
328
  font-family: inherit;
185
329
  transition: box-shadow 120ms ease, border-color 120ms ease, transform 120ms ease;
186
330
  }
187
331
 
188
332
  .rec-card:hover {
189
- box-shadow: var(--dsw-shadow-lv2);
190
- border-color: var(--dsw-alias-border-l3);
333
+ border-color: var(--board-info);
191
334
  transform: translateY(-1px);
192
335
  }
193
336
 
194
337
  .rec-card:active {
195
- box-shadow: var(--dsw-shadow-lv1);
196
338
  transform: translateY(0);
197
339
  }
198
340
 
199
- .rec-card[data-state='active'] { border-color: var(--dsw-alias-state-business-primary); }
200
- .rec-card[data-state='paused'] { border-color: var(--dsw-alias-state-warn-primary); }
201
- .rec-card[data-state='blocked'] { border-color: var(--dsw-alias-state-error-primary); }
202
- .rec-card[data-state='complete'] { border-color: var(--dsw-alias-state-success-primary); }
203
-
204
341
  .rec-card-title {
205
342
  font-size: 13px;
206
- font-weight: 600;
343
+ font-weight: var(--board-fw-semibold);
207
344
  line-height: 1.35;
208
345
  overflow: hidden;
209
346
  display: -webkit-box;
@@ -213,52 +350,55 @@ const BOARD_CSS = `
213
350
 
214
351
  .rec-card-progress {
215
352
  height: 6px;
216
- background: var(--dsw-alias-interactive-bg-hover);
353
+ background: var(--board-accent);
217
354
  border-radius: 3px;
218
355
  overflow: hidden;
219
356
  }
220
357
 
221
358
  .rec-card-progress-fill {
222
359
  height: 100%;
223
- background: var(--dsw-alias-state-business-primary);
360
+ background: var(--board-info);
224
361
  }
225
362
 
226
363
  .rec-card-meta {
227
364
  display: flex;
228
365
  align-items: center;
229
- gap: 8px;
230
- font-size: 11px;
231
- color: var(--dsw-alias-label-tertiary);
366
+ gap: var(--board-space-8);
232
367
  }
233
368
 
234
369
  .rec-card-phase {
235
370
  flex: 1;
371
+ font-family: var(--board-font-mono);
372
+ font-size: var(--board-text-xs);
373
+ letter-spacing: var(--board-tracking-mono);
374
+ color: var(--board-muted-fg);
236
375
  overflow: hidden;
237
376
  text-overflow: ellipsis;
238
377
  white-space: nowrap;
239
378
  }
240
379
 
241
- .rec-badge {
380
+ /* ===== Solid status pill (Paper StatusPill) ===== */
381
+ .rec-pill {
242
382
  flex: none;
243
- padding: 2px 10px;
244
- font-size: 12px;
245
- border-radius: 999px;
246
- border: 1px solid var(--dsw-alias-border-l2);
247
- color: var(--dsw-alias-label-secondary);
383
+ border-radius: 9999px;
384
+ padding: 4px 10px;
385
+ font-size: var(--board-text-xs);
386
+ font-weight: var(--board-fw-medium);
387
+ line-height: 1;
388
+ border: none;
389
+ background: var(--board-muted-fg);
390
+ color: var(--board-bg);
248
391
  }
249
392
 
250
- .rec-badge[data-status='active'] { color: var(--dsw-alias-state-business-primary); border-color: var(--dsw-alias-state-business-primary); }
251
- .rec-badge[data-status='paused'] { color: var(--dsw-alias-state-warn-primary); border-color: var(--dsw-alias-state-warn-primary); }
252
- .rec-badge[data-status='blocked'] { color: var(--dsw-alias-state-error-primary); border-color: var(--dsw-alias-state-error-primary); }
253
- .rec-badge[data-status='complete'] { color: var(--dsw-alias-state-success-primary); border-color: var(--dsw-alias-state-success-primary); }
254
- .rec-badge[data-status='new'] { color: var(--dsw-alias-label-tertiary); }
393
+ .rec-pill[data-pill='locked'] { background: var(--board-success); color: var(--board-bg); }
394
+ .rec-pill[data-pill='in-progress'] { background: var(--board-info); color: var(--board-bg); }
395
+ .rec-pill[data-pill='paused'] { background: var(--board-warning); color: var(--board-bg); }
396
+ .rec-pill[data-pill='blocked'] { background: var(--board-error); color: var(--board-bg); }
397
+ .rec-pill[data-pill='tampered'] { background: var(--board-error); color: var(--board-bg); }
398
+ .rec-pill[data-pill='advisory'] { background: var(--board-advisory); color: var(--board-bg); }
399
+ .rec-pill[data-pill='neutral'] { background: var(--board-muted-fg); color: var(--board-bg); }
255
400
 
256
- .rec-badge-tamper {
257
- color: var(--dsw-alias-state-error-primary);
258
- border-color: var(--dsw-alias-state-error-primary);
259
- }
260
-
261
- /* inspector: centered modal-style detail */
401
+ /* ===== Inspector: centered modal detail ===== */
262
402
  .rec-inspector {
263
403
  position: fixed;
264
404
  inset: 0;
@@ -266,7 +406,7 @@ const BOARD_CSS = `
266
406
  display: flex;
267
407
  align-items: center;
268
408
  justify-content: center;
269
- background: var(--dsw-alias-bg-mask-1);
409
+ background: rgba(0, 0, 0, 0.4);
270
410
  pointer-events: auto;
271
411
  }
272
412
 
@@ -275,20 +415,21 @@ const BOARD_CSS = `
275
415
  flex-direction: column;
276
416
  width: min(640px, calc(100vw - 48px));
277
417
  max-height: calc(100vh - 80px);
278
- background: var(--dsw-alias-bg-base);
279
- border: 1px solid var(--dsw-alias-border-l2);
418
+ background: var(--board-bg);
419
+ border: 1px solid var(--board-border);
280
420
  border-radius: 14px;
281
- box-shadow: var(--dsw-shadow-lv3);
282
- color: var(--dsw-alias-label-primary);
421
+ box-shadow: 0 24px 64px rgba(0, 0, 0, 0.24);
422
+ color: var(--board-fg);
423
+ font-family: var(--board-font-sans);
283
424
  overflow: hidden;
284
425
  }
285
426
 
286
427
  .rec-detail-header {
287
428
  display: flex;
288
429
  align-items: center;
289
- gap: 10px;
290
- padding: 14px 18px;
291
- border-bottom: 1px solid var(--dsw-alias-separator-primary);
430
+ gap: var(--board-space-12);
431
+ padding: var(--board-space-16) var(--board-space-16);
432
+ border-bottom: 1px solid var(--board-border);
292
433
  flex: none;
293
434
  }
294
435
 
@@ -296,7 +437,8 @@ const BOARD_CSS = `
296
437
  margin: 0;
297
438
  flex: 1;
298
439
  font-size: 15px;
299
- font-weight: 700;
440
+ font-weight: var(--board-fw-semibold);
441
+ letter-spacing: var(--board-tracking-tight);
300
442
  overflow-wrap: anywhere;
301
443
  }
302
444
 
@@ -304,26 +446,26 @@ const BOARD_CSS = `
304
446
  display: inline-flex;
305
447
  align-items: center;
306
448
  gap: 4px;
307
- padding: 5px 12px;
308
- font-size: 12px;
309
- color: var(--dsw-alias-label-primary);
449
+ padding: 5px var(--board-space-12);
450
+ font-size: var(--board-text-xs);
451
+ color: var(--board-fg);
310
452
  background: transparent;
311
- border: 1px solid var(--dsw-alias-border-l2);
312
- border-radius: 8px;
453
+ border: 1px solid var(--board-border);
454
+ border-radius: var(--board-radius-lg);
313
455
  cursor: pointer;
314
456
  white-space: nowrap;
315
457
  }
316
458
 
317
459
  .rec-back:hover {
318
- background: var(--dsw-alias-interactive-bg-hover);
460
+ background: var(--board-accent);
319
461
  }
320
462
 
321
463
  .rec-detail-body {
322
- padding: 14px 18px;
464
+ padding: var(--board-space-16);
323
465
  overflow-y: auto;
324
466
  display: flex;
325
467
  flex-direction: column;
326
- gap: 16px;
468
+ gap: var(--board-space-16);
327
469
  flex: 1;
328
470
  }
329
471
 
@@ -335,43 +477,70 @@ const BOARD_CSS = `
335
477
 
336
478
  .rec-detail-section h3 {
337
479
  margin: 0;
338
- font-size: 12px;
339
- font-weight: 700;
340
- color: var(--dsw-alias-label-tertiary);
480
+ font-size: var(--board-text-xs);
481
+ font-weight: var(--board-fw-semibold);
482
+ color: var(--board-muted-fg);
483
+ }
484
+
485
+ .rec-detail-text {
486
+ margin: 0;
487
+ font-size: var(--board-text-sm);
488
+ color: var(--board-muted-fg);
341
489
  }
342
490
 
343
491
  .rec-phase-row {
344
492
  display: flex;
345
493
  align-items: center;
346
- gap: 10px;
347
- padding: 8px 10px;
348
- border: 1px solid var(--dsw-alias-border-l1);
349
- border-radius: 8px;
494
+ gap: var(--board-space-12);
495
+ padding: var(--board-space-8) var(--board-space-12);
496
+ border: 1px solid var(--board-border);
497
+ border-radius: var(--board-radius-lg);
350
498
  font-size: 13px;
351
499
  }
352
500
 
353
501
  .rec-phase-id {
354
502
  min-width: 48px;
355
- font-family: var(--dsw-font-markdown-code-block-small);
356
- color: var(--dsw-alias-state-business-primary);
503
+ font-family: var(--board-font-mono);
504
+ font-size: var(--board-text-xs);
505
+ letter-spacing: var(--board-tracking-mono);
506
+ color: var(--board-info);
357
507
  }
358
508
 
359
509
  .rec-phase-name {
360
510
  flex: 1;
361
- color: var(--dsw-alias-label-primary);
511
+ color: var(--board-fg);
362
512
  overflow: hidden;
363
513
  text-overflow: ellipsis;
364
514
  white-space: nowrap;
365
515
  }
366
516
 
367
517
  .rec-lockhash {
368
- font-family: var(--dsw-font-markdown-code-block-small);
518
+ font-family: var(--board-font-mono);
369
519
  font-size: 11px;
370
- color: var(--dsw-alias-label-tertiary);
520
+ letter-spacing: var(--board-tracking-mono);
521
+ color: var(--board-muted-fg);
522
+ }
523
+
524
+ /* ===== Strip (session dock) — keeps the shell --dsw-* theme ===== */
525
+ .rec-badge {
526
+ flex: none;
527
+ padding: 2px 10px;
528
+ font-size: 12px;
529
+ border-radius: 999px;
530
+ border: 1px solid var(--dsw-alias-border-l2);
531
+ color: var(--dsw-alias-label-secondary);
532
+ }
533
+ .rec-badge-tamper {
534
+ color: var(--dsw-alias-state-error-primary);
535
+ border-color: var(--dsw-alias-state-error-primary);
536
+ }
537
+ .rec-badge-gate {
538
+ color: var(--dsw-alias-state-warn-primary);
539
+ border-color: var(--dsw-alias-state-warn-primary);
371
540
  }
372
541
 
373
542
  @media (prefers-reduced-motion: reduce) {
374
- .rec-card, .rec-back, .rec-close { transition: none; }
543
+ .rec-card, .rec-back, .rec-close, .rec-theme-toggle { transition: none; }
375
544
  }
376
545
  `
377
546