@lchase/kiln 0.15.0 → 0.17.0

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.
package/assets/serve.css CHANGED
@@ -1,26 +1,398 @@
1
1
  /* kiln-serve */
2
+ /* tokens:start */
2
3
  :root {
3
- --bg: #16181d;
4
- --panel: #1c1f26;
5
- --card: #22262e;
6
- --card-hover: #2a303a;
7
- --line: #2c323c;
8
- --line-strong: #3d4551;
9
- --ink: #f4f5f7;
10
- --muted: #a7b0bb;
11
- --faint: #7c8694;
4
+ --font-sans: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
5
+ --font-mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
6
+ --mono: var(--font-mono);
7
+ --text-xs: 12px;
8
+ --text-sm: 14px;
9
+ --text-md: 16px;
10
+ --text-lg: 20px;
11
+ --text-xl: 28px;
12
+ --leading-xs: 16px;
13
+ --leading-sm: 20px;
14
+ --leading-md: 24px;
15
+ --leading-lg: 28px;
16
+ --leading-xl: 36px;
17
+ --space-2xs: 2px;
18
+ --space-1: 4px;
19
+ --space-2: 8px;
20
+ --space-3: 12px;
21
+ --space-4: 16px;
22
+ --space-5: 24px;
23
+ --space-6: 32px;
24
+ --space-7: 48px;
25
+ --space-8: 64px;
26
+ --hairline: 1px;
27
+ --track: 2px;
28
+ --radius-sm: 2px;
29
+ --radius-md: 4px;
30
+ --radius-lg: 6px;
31
+ --radius-pill: 999px;
32
+ --radius-full: 50%;
33
+ --nav-width: 232px;
34
+ --rail-width: 280px;
35
+ --nav: var(--nav-width);
36
+ --rail: var(--rail-width);
37
+ --drawer-width: 560px;
38
+ --content-max: 1120px;
39
+ --form-max: 640px;
40
+ --gutter: var(--space-5);
41
+ --drawer-pad: var(--space-5);
42
+ --control-h: 32px;
43
+ --hit: 44px;
44
+ --logo: 28px;
45
+ --dot: 8px;
46
+ --icon: 16px;
47
+ --icon-stroke: 2;
48
+ --badge: 20px;
49
+ --focus-width: 2px;
50
+ --focus-offset: 2px;
51
+ --col-min: 180px;
52
+ --col-slim: 40px;
53
+ --board-min: 920px;
54
+ --board-min-narrow: 720px;
55
+ --breakpoint-nav: 960px;
56
+ --fs-max: 220px;
57
+ --after-max: 160px;
58
+ --preview-max: 200px;
59
+ --field-min: 88px;
60
+ --prose-max: 220px;
61
+ --disabled: 0.45;
62
+ }
63
+ /* tokens:end */
64
+
65
+ /* theme:kiln */
66
+ /* Kiln's own warmed neutral. Surfaces are the Tailwind Stone ramp. Accent and state colors are Kiln's. */
67
+ :where(:root),
68
+ [data-theme="kiln"] {
69
+ color-scheme: dark;
70
+ --bg: #0c0a09;
71
+ --panel: #1c1917;
72
+ --card: #292524;
73
+ --card-hover: #44403c;
74
+ --line: #44403c;
75
+ --line-strong: #57534e;
76
+ --ink: #e7e5e4;
77
+ --muted: #a8a29e;
78
+ --faint: #78716c;
12
79
  --live: #3dd6c6;
13
80
  --pass: #8dcea8;
14
81
  --changes: #e6c36a;
15
82
  --human: #ff7a45;
16
- --merged: #b4a4ff;
17
83
  --primary: #6d4aff;
18
- --code: #c4b8ff;
19
- --code-bg: #2a303a;
20
- --mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
21
- --nav: 232px;
22
- --rail: 280px;
84
+ --code: #d6d3d1;
85
+ --code-bg: #1c1917;
86
+ --on-primary: #ffffff;
87
+ --scrim: rgba(12, 10, 9, 0.72);
88
+ --focus: #d6d3d1;
89
+ --state-queued: #78716c;
90
+ --state-running: #3dd6c6;
91
+ --state-needs-you: #ff7a45;
92
+ --state-needs-hand: #e6c36a;
93
+ --state-done: #8dcea8;
94
+ --state-failed: #f07178;
95
+ --state-cancelled: #78716c;
96
+ }
97
+ /* theme:end */
98
+
99
+ /* theme:nord */
100
+ /* Nord polar night, snow storm, frost, and aurora. https://www.nordtheme.com/docs/colors-and-palettes */
101
+ [data-theme="nord"] {
102
+ color-scheme: dark;
103
+ --bg: #2e3440;
104
+ --panel: #3b4252;
105
+ --card: #434c5e;
106
+ --card-hover: #4c566a;
107
+ --line: #4c566a;
108
+ --line-strong: #d8dee9;
109
+ --ink: #eceff4;
110
+ --muted: #e5e9f0;
111
+ --faint: #d8dee9;
112
+ --live: #8fbcbb;
113
+ --pass: #a3be8c;
114
+ --changes: #ebcb8b;
115
+ --human: #d08770;
116
+ --primary: #88c0d0;
117
+ --code: #81a1c1;
118
+ --code-bg: #3b4252;
119
+ --on-primary: #2e3440;
120
+ --scrim: rgba(46, 52, 64, 0.72);
121
+ --focus: #eceff4;
122
+ --state-queued: #d8dee9;
123
+ --state-running: #8fbcbb;
124
+ --state-needs-you: #d08770;
125
+ --state-needs-hand: #ebcb8b;
126
+ --state-done: #a3be8c;
127
+ --state-failed: #bf616a;
128
+ --state-cancelled: #d8dee9;
23
129
  }
130
+ /* theme:end */
131
+
132
+ /* theme:gruvbox-dark */
133
+ /* Gruvbox dark, medium contrast. Bright accents. https://github.com/morhetz/gruvbox */
134
+ [data-theme="gruvbox-dark"] {
135
+ color-scheme: dark;
136
+ --bg: #1d2021;
137
+ --panel: #282828;
138
+ --card: #3c3836;
139
+ --card-hover: #504945;
140
+ --line: #504945;
141
+ --line-strong: #665c54;
142
+ --ink: #ebdbb2;
143
+ --muted: #bdae93;
144
+ --faint: #a89984;
145
+ --live: #8ec07c;
146
+ --pass: #b8bb26;
147
+ --changes: #fabd2f;
148
+ --human: #fe8019;
149
+ --primary: #fe8019;
150
+ --code: #83a598;
151
+ --code-bg: #282828;
152
+ --on-primary: #1d2021;
153
+ --scrim: rgba(29, 32, 33, 0.72);
154
+ --focus: #ebdbb2;
155
+ --state-queued: #a89984;
156
+ --state-running: #8ec07c;
157
+ --state-needs-you: #fe8019;
158
+ --state-needs-hand: #fabd2f;
159
+ --state-done: #b8bb26;
160
+ --state-failed: #fb4934;
161
+ --state-cancelled: #928374;
162
+ }
163
+ /* theme:end */
164
+
165
+ /* theme:gruvbox-light */
166
+ /* Gruvbox light. Faded accents. https://github.com/morhetz/gruvbox */
167
+ [data-theme="gruvbox-light"] {
168
+ color-scheme: light;
169
+ --bg: #fbf1c7;
170
+ --panel: #f2e5bc;
171
+ --card: #ebdbb2;
172
+ --card-hover: #d5c4a1;
173
+ --line: #d5c4a1;
174
+ --line-strong: #bdae93;
175
+ --ink: #3c3836;
176
+ --muted: #665c54;
177
+ --faint: #7c6f64;
178
+ --live: #076678;
179
+ --pass: #79740e;
180
+ --changes: #b57614;
181
+ --human: #af3a03;
182
+ --primary: #af3a03;
183
+ --code: #076678;
184
+ --code-bg: #f9f5d7;
185
+ --on-primary: #fbf1c7;
186
+ --scrim: rgba(40, 40, 40, 0.45);
187
+ --focus: #282828;
188
+ --state-queued: #7c6f64;
189
+ --state-running: #076678;
190
+ --state-needs-you: #af3a03;
191
+ --state-needs-hand: #b57614;
192
+ --state-done: #79740e;
193
+ --state-failed: #9d0006;
194
+ --state-cancelled: #928374;
195
+ }
196
+ /* theme:end */
197
+
198
+ /* theme:catppuccin-mocha */
199
+ /* Catppuccin Mocha, palette 1.8.0. Mauve is the accent. https://catppuccin.com/palette */
200
+ [data-theme="catppuccin-mocha"] {
201
+ color-scheme: dark;
202
+ --bg: #1e1e2e;
203
+ --panel: #181825;
204
+ --card: #313244;
205
+ --card-hover: #45475a;
206
+ --line: #45475a;
207
+ --line-strong: #585b70;
208
+ --ink: #cdd6f4;
209
+ --muted: #bac2de;
210
+ --faint: #9399b2;
211
+ --live: #94e2d5;
212
+ --pass: #a6e3a1;
213
+ --changes: #f9e2af;
214
+ --human: #fab387;
215
+ --primary: #cba6f7;
216
+ --code: #b4befe;
217
+ --code-bg: #11111b;
218
+ --on-primary: #11111b;
219
+ --scrim: rgba(17, 17, 27, 0.72);
220
+ --focus: #cdd6f4;
221
+ --state-queued: #9399b2;
222
+ --state-running: #94e2d5;
223
+ --state-needs-you: #fab387;
224
+ --state-needs-hand: #f9e2af;
225
+ --state-done: #a6e3a1;
226
+ --state-failed: #f38ba8;
227
+ --state-cancelled: #7f849c;
228
+ }
229
+ /* theme:end */
230
+
231
+ /* theme:catppuccin-macchiato */
232
+ /* Catppuccin Macchiato, palette 1.8.0. Mauve is the accent. */
233
+ [data-theme="catppuccin-macchiato"] {
234
+ color-scheme: dark;
235
+ --bg: #24273a;
236
+ --panel: #1e2030;
237
+ --card: #363a4f;
238
+ --card-hover: #494d64;
239
+ --line: #494d64;
240
+ --line-strong: #5b6078;
241
+ --ink: #cad3f5;
242
+ --muted: #b8c0e0;
243
+ --faint: #939ab7;
244
+ --live: #8bd5ca;
245
+ --pass: #a6da95;
246
+ --changes: #eed49f;
247
+ --human: #f5a97f;
248
+ --primary: #c6a0f6;
249
+ --code: #b7bdf8;
250
+ --code-bg: #181926;
251
+ --on-primary: #181926;
252
+ --scrim: rgba(24, 25, 38, 0.72);
253
+ --focus: #cad3f5;
254
+ --state-queued: #939ab7;
255
+ --state-running: #8bd5ca;
256
+ --state-needs-you: #f5a97f;
257
+ --state-needs-hand: #eed49f;
258
+ --state-done: #a6da95;
259
+ --state-failed: #ed8796;
260
+ --state-cancelled: #8087a2;
261
+ }
262
+ /* theme:end */
263
+
264
+ /* theme:catppuccin-frappe */
265
+ /* Catppuccin Frappé, palette 1.8.0. Mauve is the accent. */
266
+ [data-theme="catppuccin-frappe"] {
267
+ color-scheme: dark;
268
+ --bg: #303446;
269
+ --panel: #292c3c;
270
+ --card: #414559;
271
+ --card-hover: #51576d;
272
+ --line: #51576d;
273
+ --line-strong: #626880;
274
+ --ink: #c6d0f5;
275
+ --muted: #b5bfe2;
276
+ --faint: #949cbb;
277
+ --live: #81c8be;
278
+ --pass: #a6d189;
279
+ --changes: #e5c890;
280
+ --human: #ef9f76;
281
+ --primary: #ca9ee6;
282
+ --code: #babbf1;
283
+ --code-bg: #232634;
284
+ --on-primary: #232634;
285
+ --scrim: rgba(35, 38, 52, 0.72);
286
+ --focus: #c6d0f5;
287
+ --state-queued: #949cbb;
288
+ --state-running: #81c8be;
289
+ --state-needs-you: #ef9f76;
290
+ --state-needs-hand: #e5c890;
291
+ --state-done: #a6d189;
292
+ --state-failed: #e78284;
293
+ --state-cancelled: #838ba7;
294
+ }
295
+ /* theme:end */
296
+
297
+ /* theme:catppuccin-latte */
298
+ /* Catppuccin Latte, palette 1.8.0. Mauve is the accent. */
299
+ [data-theme="catppuccin-latte"] {
300
+ color-scheme: light;
301
+ --bg: #eff1f5;
302
+ --panel: #e6e9ef;
303
+ --card: #ccd0da;
304
+ --card-hover: #bcc0cc;
305
+ --line: #bcc0cc;
306
+ --line-strong: #acb0be;
307
+ --ink: #4c4f69;
308
+ --muted: #5c5f77;
309
+ --faint: #7c7f93;
310
+ --live: #179299;
311
+ --pass: #40a02b;
312
+ --changes: #df8e1d;
313
+ --human: #fe640b;
314
+ --primary: #8839ef;
315
+ --code: #1e66f5;
316
+ --code-bg: #dce0e8;
317
+ --on-primary: #eff1f5;
318
+ --scrim: rgba(76, 79, 105, 0.45);
319
+ --focus: #4c4f69;
320
+ --state-queued: #7c7f93;
321
+ --state-running: #179299;
322
+ --state-needs-you: #fe640b;
323
+ --state-needs-hand: #df8e1d;
324
+ --state-done: #40a02b;
325
+ --state-failed: #d20f39;
326
+ --state-cancelled: #8c8fa1;
327
+ }
328
+ /* theme:end */
329
+
330
+ /* theme:monospace-dark */
331
+ /* Monospace Dark. Keksi's VS Code theme, via the Orca port's published UI colors. */
332
+ [data-theme="monospace-dark"] {
333
+ color-scheme: dark;
334
+ --bg: #171f2b;
335
+ --panel: #10151d;
336
+ --card: #242e3f;
337
+ --card-hover: #1f2939;
338
+ --line: #333e4f;
339
+ --line-strong: #333e4f;
340
+ --ink: #d9dfe7;
341
+ --muted: #8b98a9;
342
+ --faint: #7f8d9f;
343
+ --live: #25a6e9;
344
+ --pass: #17b877;
345
+ --changes: #ffa23e;
346
+ --human: #ffa23e;
347
+ --primary: #a87ffb;
348
+ --code: #92a9ff;
349
+ --code-bg: #10151d;
350
+ --on-primary: #10151d;
351
+ --scrim: rgba(16, 21, 29, 0.72);
352
+ --focus: #d9dfe7;
353
+ --state-queued: #8b98a9;
354
+ --state-running: #25a6e9;
355
+ --state-needs-you: #ffa23e;
356
+ --state-needs-hand: #ffd395;
357
+ --state-done: #17b877;
358
+ --state-failed: #fd8da3;
359
+ --state-cancelled: #7f8d9f;
360
+ }
361
+ /* theme:end */
362
+
363
+ /* theme:monospace-light */
364
+ /* Monospace Light. Keksi's VS Code theme, via the Orca port's published UI colors. */
365
+ [data-theme="monospace-light"] {
366
+ color-scheme: light;
367
+ --bg: #ffffff;
368
+ --panel: #f4f7fd;
369
+ --card: #fafbfe;
370
+ --card-hover: #d9dfe7;
371
+ --line: #d9dfe7;
372
+ --line-strong: #bfc7d2;
373
+ --ink: #1f2939;
374
+ --muted: #5d6a7d;
375
+ --faint: #637083;
376
+ --live: #0075a2;
377
+ --pass: #007b49;
378
+ --changes: #a65921;
379
+ --human: #d07826;
380
+ --primary: #6f4cde;
381
+ --code: #264dcb;
382
+ --code-bg: #f4f7fd;
383
+ --on-primary: #ffffff;
384
+ --scrim: rgba(31, 41, 57, 0.45);
385
+ --focus: #1f2939;
386
+ --state-queued: #5d6a7d;
387
+ --state-running: #0075a2;
388
+ --state-needs-you: #d07826;
389
+ --state-needs-hand: #a65921;
390
+ --state-done: #007b49;
391
+ --state-failed: #c43058;
392
+ --state-cancelled: #637083;
393
+ }
394
+ /* theme:end */
395
+
24
396
  * { box-sizing: border-box; }
25
397
  [hidden] { display: none !important; }
26
398
  html, body { margin: 0; height: 100%; }
@@ -29,385 +401,696 @@ body {
29
401
  min-height: 100vh;
30
402
  background: var(--bg);
31
403
  color: var(--ink);
32
- font: 14px/20px Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
404
+ font: var(--text-sm)/var(--leading-sm) var(--font-sans);
33
405
  -webkit-font-smoothing: antialiased;
34
406
  }
407
+ :focus-visible {
408
+ outline: var(--focus-width) solid var(--focus);
409
+ outline-offset: var(--focus-offset);
410
+ }
35
411
  button, input, select, textarea { font: inherit; color: inherit; }
36
412
  a { color: var(--code); text-decoration: none; }
37
413
  a:hover { text-decoration: underline; }
38
414
  h1, h2, h3 { font-weight: 500; }
39
- h2 { margin: 0; font-size: 18px; line-height: 24px; }
40
- h3 { margin: 0 0 8px; font-size: 13px; line-height: 18px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
415
+ h2 { margin: 0; font-size: var(--text-lg); line-height: var(--leading-lg); }
416
+ h3 {
417
+ margin: 0 0 var(--space-2);
418
+ font-size: var(--text-xs);
419
+ line-height: var(--leading-xs);
420
+ color: var(--muted);
421
+ text-transform: uppercase;
422
+ letter-spacing: .04em;
423
+ }
41
424
 
42
425
  .shell { display: grid; grid-template-columns: var(--nav) minmax(0, 1fr); min-height: 100vh; }
43
426
  .nav {
44
427
  position: sticky;
45
428
  top: 0;
46
429
  height: 100vh;
47
- overflow: auto;
430
+ overflow: hidden;
48
431
  background: var(--panel);
49
- border-right: 1px solid var(--line);
50
- padding: 16px 12px 24px;
432
+ border-right: var(--hairline) solid var(--line);
433
+ padding: var(--space-4) var(--space-3) var(--space-5);
434
+ display: flex;
435
+ flex-direction: column;
436
+ gap: var(--space-3);
437
+ }
438
+ .nav-scroll {
439
+ flex: 1 1 auto;
440
+ min-height: 0;
441
+ overflow: auto;
51
442
  display: flex;
52
443
  flex-direction: column;
53
- gap: 12px;
444
+ gap: var(--space-3);
54
445
  }
55
- .brand { display: flex; align-items: center; gap: 10px; padding: 0 6px; }
56
- .brand h1 { margin: 0; font-size: 16px; line-height: 20px; }
446
+ .brand { display: flex; align-items: center; gap: var(--space-3); padding: 0 var(--space-2); }
447
+ .brand h1 { margin: 0; font-size: var(--text-md); line-height: var(--leading-sm); }
57
448
  .logo {
58
- width: 28px; height: 28px; border-radius: 8px; background: var(--primary);
59
- display: inline-flex; align-items: center; justify-content: center; flex: none;
449
+ width: var(--logo);
450
+ height: var(--logo);
451
+ border-radius: var(--radius-md);
452
+ background: var(--primary);
453
+ color: var(--on-primary);
454
+ display: inline-flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ flex: none;
60
458
  }
61
- .ver { display: block; font-size: 11px; line-height: 14px; color: var(--faint); }
62
- .runstate { display: flex; align-items: center; gap: 8px; padding: 0 6px; font-family: var(--mono); font-size: 12px; }
63
- .live-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--live); box-shadow: 0 0 0 3px color-mix(in srgb, var(--live) 25%, transparent); }
64
- .live-dot.paused { background: var(--human); box-shadow: 0 0 0 3px color-mix(in srgb, var(--human) 25%, transparent); }
65
- .pause { margin: 0 0 0 auto; }
66
- .pause button {
67
- font: 12px/16px var(--mono);
459
+ .logo svg { width: var(--icon); height: var(--icon); }
460
+ .icon {
461
+ width: var(--icon);
462
+ height: var(--icon);
463
+ flex: none;
464
+ stroke: currentColor;
465
+ fill: none;
466
+ stroke-width: var(--icon-stroke);
467
+ stroke-linecap: round;
468
+ stroke-linejoin: round;
469
+ }
470
+ #notify .icon-bell,
471
+ #pause-toggle .icon-play { display: none; }
472
+ #notify[data-state="on"] .icon-bell { display: block; }
473
+ #notify[data-state="on"] .icon-bell-off { display: none; }
474
+ #pause-toggle[aria-pressed="true"] .icon-pause { display: none; }
475
+ #pause-toggle[aria-pressed="true"] .icon-play { display: block; }
476
+ .ver { display: block; font-size: var(--text-xs); line-height: var(--leading-xs); color: var(--faint); }
477
+ .runstate {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: var(--space-2);
481
+ padding: 0 var(--space-2);
482
+ font-family: var(--font-mono);
483
+ font-size: var(--text-xs);
484
+ }
485
+ .live-dot {
486
+ width: var(--dot);
487
+ height: var(--dot);
488
+ border-radius: var(--radius-full);
489
+ background: var(--state-running);
490
+ }
491
+ .live-dot.paused { background: var(--state-needs-you); }
492
+ .spend-row {
493
+ display: flex;
494
+ flex-wrap: wrap;
495
+ align-items: baseline;
496
+ gap: var(--space-2);
497
+ margin: 0;
498
+ padding: 0 var(--space-2);
499
+ }
500
+ .spend, .cap {
501
+ font-family: var(--font-mono);
502
+ font-size: var(--text-xs);
503
+ line-height: var(--leading-xs);
504
+ color: var(--muted);
505
+ }
506
+ .cap { color: var(--state-needs-you); }
507
+ .side { display: flex; flex-direction: column; gap: var(--space-2xs); }
508
+ .side-foot {
509
+ flex: none;
510
+ display: flex;
511
+ flex-direction: column;
512
+ gap: var(--space-2);
513
+ padding-top: var(--space-3);
514
+ border-top: var(--hairline) solid var(--line);
515
+ }
516
+ .nav-link, .nav-sub {
517
+ display: flex;
518
+ align-items: center;
519
+ justify-content: space-between;
520
+ gap: var(--space-2);
521
+ padding: var(--space-2);
522
+ border-radius: var(--radius-md);
523
+ color: var(--muted);
524
+ text-decoration: none;
525
+ }
526
+ .nav-label {
527
+ display: inline-flex;
528
+ align-items: center;
529
+ gap: var(--space-2);
530
+ min-width: 0;
531
+ }
532
+ .nav-sub { padding-left: calc(var(--icon) + var(--space-4)); font-size: var(--text-sm); }
533
+ .nav-link:hover, .nav-sub:hover { background: var(--card); color: var(--ink); text-decoration: none; }
534
+ .nav-link[aria-current="page"], .nav-sub[aria-current="page"] {
535
+ background: var(--card-hover);
68
536
  color: var(--ink);
537
+ }
538
+ .badge {
539
+ min-width: var(--badge);
540
+ height: var(--badge);
541
+ padding: 0 var(--space-1);
542
+ border-radius: var(--radius-pill);
543
+ background: var(--card);
544
+ color: var(--muted);
545
+ font: var(--text-xs)/var(--badge) var(--font-mono);
546
+ text-align: center;
547
+ }
548
+ .nav-link[aria-current="page"] .badge { background: var(--line-strong); color: var(--ink); }
549
+ .unseen { margin: 0 var(--space-2) var(--space-2); color: var(--state-needs-hand); font-size: var(--text-xs); line-height: var(--leading-xs); }
550
+
551
+ .pause button,
552
+ .add,
553
+ .tool-link,
554
+ .btn,
555
+ .pick,
556
+ .seg button,
557
+ .fs-up,
558
+ .fs-use,
559
+ .trigger button,
560
+ .d-actions button,
561
+ .d-actions .revise input,
562
+ .repo-f,
563
+ .wf-f {
564
+ height: var(--control-h);
565
+ padding: 0 var(--space-3);
566
+ border: var(--hairline) solid var(--line-strong);
567
+ border-radius: var(--radius-sm);
69
568
  background: var(--card);
70
- border: 1px solid var(--line-strong);
71
- border-radius: 6px;
72
- padding: 4px 8px;
569
+ color: var(--ink);
73
570
  cursor: pointer;
74
571
  }
75
- .pause button[aria-pressed="true"] { color: var(--human); }
76
- .spend, .cap { font-family: var(--mono); font-size: 11px; line-height: 16px; color: var(--muted); padding: 0 6px; }
77
- .cap { color: var(--human); }
78
- .side { display: flex; flex-direction: column; gap: 2px; }
79
- .nav-link, .nav-sub {
80
- display: flex; align-items: center; justify-content: space-between; gap: 8px;
81
- padding: 6px 8px; border-radius: 6px; color: var(--ink); text-decoration: none;
572
+ .pause button {
573
+ display: inline-flex;
574
+ align-items: center;
575
+ gap: var(--space-1);
576
+ font: var(--text-xs)/var(--leading-xs) var(--font-mono);
82
577
  }
83
- .nav-sub { padding-left: 18px; color: var(--muted); font-size: 13px; }
84
- .nav-link:hover, .nav-sub:hover { background: var(--card); text-decoration: none; }
85
- .nav-link[aria-current="page"], .nav-sub[aria-current="page"] { background: var(--card-hover); }
86
- .badge {
87
- min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
88
- background: var(--card); color: var(--muted); font: 11px/18px var(--mono); text-align: center;
578
+ .pause { margin: 0 0 0 auto; }
579
+ .pause button[aria-pressed="true"] { color: var(--state-needs-you); }
580
+ .add { margin-top: var(--space-1); text-align: left; }
581
+ .add, .btn.primary, .d-actions .approve button {
582
+ background: var(--primary);
583
+ color: var(--on-primary);
584
+ border-color: transparent;
585
+ font-weight: 500;
89
586
  }
90
- .nav-link[aria-current="page"] .badge { background: var(--human); color: #1a100c; }
91
- .unseen { margin: 0 8px 6px; color: var(--changes); font-size: 12px; line-height: 16px; }
92
- .add, .tool-link {
93
- margin-top: 4px;
94
- background: none;
95
- border: 1px solid var(--line-strong);
96
- border-radius: 6px;
97
- padding: 6px 8px;
587
+ .notify { display: flex; flex-direction: column; gap: var(--space-1); }
588
+ .tool-link {
589
+ display: flex;
590
+ align-items: center;
591
+ gap: var(--space-2);
592
+ width: 100%;
593
+ margin: 0;
98
594
  text-align: left;
99
- cursor: pointer;
595
+ background: none;
596
+ color: var(--muted);
597
+ }
598
+ .tool-link:hover { color: var(--ink); background: var(--card); }
599
+ .tool-link[data-state="on"] { color: var(--ink); }
600
+ .tool-link:disabled, .tool-link:disabled:hover {
601
+ color: var(--muted);
602
+ background: none;
603
+ cursor: not-allowed;
604
+ opacity: var(--disabled);
605
+ }
606
+ .notify-note {
607
+ margin: 0;
608
+ padding: 0 var(--space-1);
609
+ color: var(--muted);
610
+ font-size: var(--text-xs);
611
+ line-height: var(--leading-xs);
612
+ }
613
+ .pick, .seg button, .fs-up, .fs-use, .repo-f, .wf-f {
614
+ background: none;
100
615
  color: var(--muted);
616
+ font: var(--text-xs)/var(--leading-xs) var(--font-mono);
617
+ }
618
+ .repo-f, .wf-f { background: var(--card); border-radius: var(--radius-pill); }
619
+ .pick:hover, .seg button:hover, .fs-up:hover, .fs-use:hover, .fs-item:hover,
620
+ .repo-f:hover, .wf-f:hover, .btn:hover, .trigger button:hover, .d-actions button:hover {
621
+ background: var(--card-hover);
622
+ color: var(--ink);
623
+ }
624
+ .pick[aria-pressed="true"], .seg button[aria-pressed="true"],
625
+ .repo-f[aria-pressed="true"], .wf-f[aria-pressed="true"] {
626
+ border-color: var(--line-strong);
627
+ background: var(--card-hover);
628
+ color: var(--ink);
629
+ }
630
+ .btn.primary:hover, .add:hover, .d-actions .approve button:hover {
631
+ background: var(--primary);
632
+ color: var(--on-primary);
633
+ }
634
+ .btn:disabled, .btn:disabled:hover {
635
+ opacity: var(--disabled);
636
+ cursor: not-allowed;
637
+ }
638
+ .btn.primary:disabled, .btn.primary:disabled:hover {
639
+ background: var(--card);
640
+ color: var(--faint);
641
+ border-color: var(--line-strong);
642
+ opacity: 1;
643
+ }
644
+
645
+ .workspace, .detail-main { min-width: 0; }
646
+ .main {
647
+ padding: var(--space-5) var(--gutter) var(--space-8);
648
+ max-width: var(--content-max);
649
+ min-width: 0;
650
+ }
651
+ .detail { display: grid; grid-template-columns: minmax(0, 1fr) var(--rail); gap: var(--space-5); align-items: start; }
652
+ .list-head { margin-bottom: var(--space-4); }
653
+ .list-head .meta, .meta, .hint, .ran, .outcome, .ev { color: var(--muted); }
654
+ .meta, .hint, .ran, .outcome, .ev, .num, .k, .saved, .form-error, .field-error {
655
+ margin: 0;
656
+ font-size: var(--text-xs);
657
+ line-height: var(--leading-xs);
658
+ }
659
+ .k { color: var(--faint); font-family: var(--font-mono); margin-right: var(--space-2); }
660
+ .jobs, .intake-body, .fs, .field { display: flex; flex-direction: column; min-width: 0; }
661
+ .jobs { gap: var(--space-3); }
662
+ .job, .card, .trigger, .stat-grid .stat {
663
+ background: var(--card);
664
+ border: var(--hairline) solid var(--line);
665
+ border-radius: var(--radius-lg);
101
666
  }
102
- .add { background: var(--primary); color: white; border-color: transparent; }
103
- .tool-link { margin-top: auto; }
104
- .workspace { min-width: 0; }
105
- .main { padding: 20px 28px 64px; min-width: 0; }
106
- .detail { display: grid; grid-template-columns: minmax(0, 1fr) var(--rail); gap: 28px; align-items: start; }
107
- .detail-main { min-width: 0; }
108
- .list-head { margin-bottom: 16px; }
109
- .list-head .meta, .meta { color: var(--muted); }
110
- .meta { margin: 0; font-size: 12px; line-height: 16px; }
111
- .jobs { display: flex; flex-direction: column; gap: 10px; }
112
667
  .job {
113
668
  display: flex;
114
669
  flex-direction: column;
115
- gap: 8px;
116
- padding: 14px 16px 12px;
117
- background: var(--card);
118
- border: 1px solid var(--line);
119
- border-radius: 10px;
670
+ gap: var(--space-2);
671
+ padding: var(--space-4);
120
672
  }
121
- .job.human { box-shadow: inset 3px 0 0 var(--human); }
122
- .job.retrying { box-shadow: inset 3px 0 0 var(--changes); }
123
673
  .job .d-actions {
124
- margin: 4px -16px -12px;
125
- padding: 10px 16px;
126
- border-top: 1px solid var(--line);
127
- background: color-mix(in srgb, var(--bg) 55%, transparent);
128
- border-radius: 0 0 10px 10px;
674
+ margin: var(--space-2) 0 0;
675
+ padding: var(--space-3) 0 0;
676
+ border-top: var(--hairline) solid var(--line);
677
+ background: none;
129
678
  }
130
- .job.decision .approve button {
131
- background: var(--primary);
132
- color: white;
133
- border-color: transparent;
134
- font-weight: 500;
679
+ .job-top, .head-row, .phase header, .timeline li, .col .full, .state-group h3 {
680
+ display: flex;
681
+ flex-wrap: wrap;
682
+ gap: var(--space-2);
683
+ align-items: baseline;
135
684
  }
136
- .job-top { display: flex; align-items: baseline; gap: 8px; }
137
- .job-title { color: var(--ink); font-size: 15px; line-height: 22px; }
685
+ .head-row, .col .full { align-items: center; justify-content: space-between; }
686
+ .job-title { color: var(--ink); font-size: var(--text-md); line-height: var(--leading-md); }
687
+ .card .job-title { display: block; font-size: var(--text-sm); line-height: var(--leading-sm); }
138
688
  .job-title:hover { color: var(--code); }
139
- .job-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 2px; }
140
- .num { font-family: var(--mono); font-size: 12px; color: var(--faint); }
141
- .reason { margin: 6px 0 0; }
142
- .flag {
143
- font: 11px/16px var(--mono);
144
- color: var(--human);
145
- text-transform: uppercase;
146
- letter-spacing: .04em;
147
- }
689
+ .job-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-2xs); }
690
+ .card .job-meta { margin-top: var(--space-2); }
691
+ .num { font-family: var(--font-mono); color: var(--faint); }
692
+ .reason, .note, blockquote.note, .deps, .pr-line, .links, .ask, .ran, .feedback { margin: var(--space-2) 0 0; }
148
693
  .note, blockquote.note {
149
- margin: 6px 0 0;
150
694
  color: var(--muted);
151
- font-family: var(--mono);
152
- font-size: 12px;
153
- line-height: 16px;
695
+ font-family: var(--font-mono);
696
+ font-size: var(--text-xs);
697
+ line-height: var(--leading-xs);
154
698
  white-space: pre-wrap;
155
699
  }
156
- .links { margin: 6px 0 0; display: flex; gap: 10px; }
157
- .deps { margin: 6px 0 0; }
158
- .ask { margin: 8px 0 0; font-size: 15px; line-height: 22px; }
159
- .ran { margin: 4px 0 0; color: var(--muted); font-size: 12px; line-height: 16px; }
160
- .ticks { display: flex; flex-wrap: wrap; gap: 6px; list-style: none; margin: 10px 0 0; padding: 0; }
161
- .tick {
162
- display: inline-flex; align-items: center; gap: 4px;
163
- padding: 2px 8px; border-radius: 999px; background: var(--code-bg);
164
- font: 11px/16px var(--mono); color: var(--faint);
165
- }
166
- .tick.done { color: var(--pass); }
167
- .tick.running { color: var(--live); }
168
- .tick.failed { color: var(--human); }
169
- .mark { font-size: 11px; }
170
- .chip {
171
- display: inline-flex; align-items: center; height: 18px; padding: 0 7px;
172
- border-radius: 999px; background: var(--code-bg); color: var(--muted);
173
- font: 11px/18px var(--mono);
174
- }
175
- .chip.running, .chip.ok { color: var(--live); }
176
- .chip.needs-you { color: var(--human); }
177
- .chip.needs-hand, .chip.failed { color: var(--changes); }
178
- .chip.done { color: var(--pass); }
179
- .chip.queued { color: var(--faint); }
180
- .prose { margin-top: 10px; }
700
+ .links { display: flex; gap: var(--space-3); }
701
+ .ask { font-size: var(--text-md); line-height: var(--leading-md); }
702
+ .flag {
703
+ font-size: var(--text-xs);
704
+ line-height: var(--leading-xs);
705
+ color: var(--muted);
706
+ }
707
+ .ticks { display: flex; flex-wrap: wrap; gap: var(--space-2); list-style: none; margin: var(--space-3) 0 0; padding: 0; }
708
+ .tick, .chip {
709
+ display: inline-flex;
710
+ align-items: center;
711
+ gap: var(--space-1);
712
+ height: var(--badge);
713
+ padding: 0 var(--space-2);
714
+ border-radius: var(--radius-pill);
715
+ background: var(--code-bg);
716
+ color: var(--muted);
717
+ font: var(--text-xs)/var(--badge) var(--font-mono);
718
+ }
719
+ .tick.done, .chip.done, .phase.done, .phase.completed { color: var(--state-done); }
720
+ .tick.running, .chip.running, .chip.ok, .phase.running { color: var(--state-running); }
721
+ .tick.failed, .chip.failed, .phase.failed { color: var(--state-failed); }
722
+ .chip.needs-you { color: var(--state-needs-you); }
723
+ .chip.needs-hand { color: var(--state-needs-hand); }
724
+ .chip.queued { color: var(--state-queued); }
725
+ .chip.cancelled { color: var(--state-cancelled); }
726
+ .phase.done, .phase.completed { border-color: var(--state-done); }
727
+ .phase.running { border-color: var(--state-running); }
728
+ .phase.failed { border-color: var(--state-failed); }
729
+
730
+ .prose { margin-top: var(--space-3); }
181
731
  .prose h1, .prose h2, .prose h3 {
182
- margin: 12px 0 6px; color: var(--ink); font-size: 15px; line-height: 22px;
183
- text-transform: none; letter-spacing: 0;
184
- }
185
- .prose p { margin: 8px 0; }
186
- .prose ul, .prose ol { margin: 8px 0; padding-left: 1.2rem; }
187
- .prose li { margin: 2px 0; }
188
- .prose pre {
189
- margin: 8px 0; padding: 8px 10px; overflow: auto; border-radius: 6px; background: var(--bg);
190
- }
191
- .prose code { font-family: var(--mono); font-size: 12px; }
192
- .prose a { color: var(--code); }
193
- .findings { margin-top: 12px; }
194
- .finding-group { margin: 0 0 10px; }
195
- .finding-group h3 { margin: 0 0 4px; }
196
- .finding-group ul { list-style: none; margin: 0; padding: 0; }
732
+ margin: var(--space-3) 0 var(--space-2);
733
+ color: var(--ink);
734
+ font-size: var(--text-md);
735
+ line-height: var(--leading-md);
736
+ text-transform: none;
737
+ letter-spacing: 0;
738
+ }
739
+ .prose p, .prose ul, .prose ol, .prose pre { margin: var(--space-2) 0; }
740
+ .prose ul, .prose ol, .notes, .feedback { padding-left: var(--space-5); }
741
+ .prose li { margin: var(--space-2xs) 0; }
742
+ .prose pre, .text {
743
+ padding: var(--space-2) var(--space-3);
744
+ overflow: auto;
745
+ border-radius: var(--radius-sm);
746
+ background: var(--bg);
747
+ font-family: var(--font-mono);
748
+ font-size: var(--text-xs);
749
+ line-height: var(--leading-xs);
750
+ }
751
+ .text {
752
+ white-space: pre-wrap;
753
+ overflow-wrap: anywhere;
754
+ background: var(--card);
755
+ margin: var(--space-2) 0 0;
756
+ }
757
+ .prose code, .mono, code { font-family: var(--font-mono); font-size: var(--text-xs); }
758
+ .prose a, .finding-group code { color: var(--code); }
759
+ .findings { margin-top: var(--space-3); }
760
+ .finding-group { margin: 0 0 var(--space-3); }
761
+ .finding-group h3 { margin: 0 0 var(--space-1); }
762
+ .finding-group ul, .phases, .timeline, .commits, .runs, .ledger, .trigger .recent { list-style: none; margin: 0; padding: 0; }
197
763
  .finding-group li {
198
- display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 8px;
199
- padding: 6px 0; border-top: 1px solid var(--line); font-size: 13px; line-height: 18px;
200
- }
201
- .finding-group code { color: var(--code); }
202
- .notes { margin: 8px 0 0; padding-left: 18px; }
203
- .pr-line { margin: 8px 0 0; }
204
- .raw, .log { margin-top: 10px; }
205
- .raw summary, .log summary { cursor: pointer; color: var(--muted); font-size: 12px; }
206
- .head-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
207
- #compact {
208
- width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--line-strong);
209
- background: var(--card); color: var(--ink); cursor: pointer;
764
+ display: grid;
765
+ grid-template-columns: auto minmax(0, 1fr);
766
+ gap: var(--space-2);
767
+ padding: var(--space-2) 0;
768
+ border-top: var(--hairline) solid var(--line);
769
+ font-size: var(--text-sm);
770
+ line-height: var(--leading-xs);
210
771
  }
211
- #compact svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 1.8; }
212
- .filters { display: flex; flex-wrap: wrap; gap: 16px; margin: 0 0 14px; }
213
- .filter { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
214
- .repo-f, .wf-f {
215
- height: 28px; padding: 0 12px; border: 1px solid var(--line-strong); border-radius: 999px;
216
- background: var(--card); color: var(--muted); font: 12px/16px var(--mono); cursor: pointer;
772
+ .raw, .log { margin-top: var(--space-3); }
773
+ .raw summary, .log summary { cursor: pointer; color: var(--muted); font-size: var(--text-xs); }
774
+ #compact {
775
+ width: var(--control-h);
776
+ height: var(--control-h);
777
+ border-radius: var(--radius-md);
778
+ border: var(--hairline) solid var(--line-strong);
779
+ background: var(--card);
780
+ color: var(--ink);
781
+ cursor: pointer;
217
782
  }
218
- .repo-f[aria-pressed="true"], .wf-f[aria-pressed="true"] {
219
- border-color: transparent; background: color-mix(in srgb, var(--merged) 28%, var(--card)); color: var(--ink);
783
+ #compact svg { width: var(--icon); height: var(--icon); stroke: currentColor; fill: none; stroke-width: 1.8; }
784
+ .filters { display: flex; flex-wrap: wrap; gap: var(--space-4); margin: 0 0 var(--space-4); max-width: 100%; }
785
+ .filter, .picks, .seg, .path-row, .d-actions, .form-footer {
786
+ display: flex;
787
+ flex-wrap: wrap;
788
+ align-items: center;
789
+ gap: var(--space-2);
790
+ min-width: 0;
791
+ max-width: 100%;
220
792
  }
221
- .repo-f:hover, .wf-f:hover { color: var(--ink); }
222
- .board-scroll { overflow-x: auto; padding-bottom: 8px; }
793
+ .board-scroll { overflow-x: auto; padding-bottom: var(--space-2); max-width: 100%; }
223
794
  .board {
224
795
  display: grid;
225
- grid-template-columns: var(--cols, repeat(5, minmax(180px, 1fr)));
226
- gap: 12px;
796
+ grid-template-columns: var(--cols, repeat(5, minmax(var(--col-min), 1fr)));
797
+ gap: var(--space-3);
227
798
  align-items: start;
228
- min-width: 920px;
799
+ min-width: var(--board-min);
229
800
  }
230
- .col {
801
+ .col, .rail {
231
802
  background: var(--panel);
232
- border: 1px solid var(--line);
233
- border-radius: 10px;
234
- padding: 10px;
235
- min-height: 140px;
236
- }
237
- .col .full { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
238
- .col h2 { font-size: 13px; line-height: 18px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
239
- .col .count { font: 11px/16px var(--mono); color: var(--faint); }
803
+ border: var(--hairline) solid var(--line);
804
+ border-radius: var(--radius-lg);
805
+ }
806
+ .col { padding: var(--space-3); min-height: var(--fs-max); }
807
+ .col h2, .col .count, .slim-face {
808
+ font-size: var(--text-xs);
809
+ line-height: var(--leading-xs);
810
+ color: var(--muted);
811
+ letter-spacing: .04em;
812
+ text-transform: uppercase;
813
+ }
814
+ .col h2 { font-size: var(--text-xs); }
815
+ .col .count { font-family: var(--font-mono); color: var(--faint); text-transform: none; letter-spacing: 0; }
240
816
  .slim-face { display: none; }
241
- .col.slim { min-height: 160px; padding: 8px; }
817
+ .col.slim { min-height: var(--col-min); padding: var(--space-2); }
242
818
  .col.slim .full, .col.slim .card, .col.slim .empty { display: none; }
243
819
  .col.slim .slim-face {
244
- display: flex; align-items: center; gap: 8px; writing-mode: vertical-rl; transform: rotate(180deg);
245
- color: var(--muted); font-size: 12px; letter-spacing: .04em; text-transform: uppercase;
246
- }
247
- .card {
248
- display: block;
249
- margin-top: 8px;
250
- padding: 10px 12px;
251
- background: var(--card);
252
- border: 1px solid var(--line);
253
- border-radius: 8px;
820
+ display: flex;
821
+ align-items: center;
822
+ gap: var(--space-2);
823
+ writing-mode: vertical-rl;
824
+ transform: rotate(180deg);
254
825
  }
255
- .card .job-title { display: block; color: var(--ink); font-size: 14px; line-height: 20px; }
256
- .card .job-meta { margin-top: 6px; }
826
+ .card { display: block; margin-top: var(--space-2); padding: var(--space-3); }
257
827
  .card:hover { background: var(--card-hover); }
258
- .state-group { margin: 0 0 18px; }
259
- .state-group h3 { display: flex; align-items: center; gap: 8px; }
260
- .stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin: 0 0 18px; }
261
- .stat-grid .stat {
262
- margin: 0; padding: 14px; background: var(--card); border: 1px solid var(--line); border-radius: 10px;
263
- }
264
- .stat-num { margin: 0; font-size: 28px; line-height: 34px; font-weight: 500; }
265
- .run-group { margin: 0 0 18px; }
266
- .run-group h3 { color: var(--ink); text-transform: none; letter-spacing: 0; font-size: 13px; }
267
- .phase .text, .timeline .text, .changes .text, .raw .text, .log .text { max-height: 220px; overflow: auto; }
268
- .feedback { margin: 6px 0 0; padding-left: 18px; }
269
- .repo-block { margin-bottom: 24px; }
270
- .repo-block h3 { margin-bottom: 0; }
271
- .empty { color: var(--faint); margin: 12px 0; }
272
- .tabs { display: flex; gap: 4px; margin: 12px 0 16px; }
273
- .tabs a {
274
- padding: 4px 10px; border-radius: 6px; color: var(--muted); text-decoration: none;
828
+ .state-group, .run-group, .stat, .repo-block { margin: 0 0 var(--space-5); }
829
+ .stat-grid {
830
+ display: grid;
831
+ grid-template-columns: repeat(auto-fit, minmax(var(--col-min), 1fr));
832
+ gap: var(--space-3);
833
+ margin: 0 0 var(--space-5);
275
834
  }
835
+ .stat-grid .stat { margin: 0; padding: var(--space-4); }
836
+ .stat-num { margin: 0; font-size: var(--text-xl); line-height: var(--leading-xl); font-weight: 500; }
837
+ .run-group h3 { color: var(--ink); text-transform: none; letter-spacing: 0; font-size: var(--text-sm); }
838
+ .phase .text, .timeline .text, .changes .text, .raw .text, .log .text { max-height: var(--prose-max); overflow: auto; }
839
+ .repo-block h3 { margin-bottom: 0; }
840
+ .empty { color: var(--faint); margin: var(--space-3) 0; }
841
+ .tabs { display: flex; gap: var(--space-1); margin: var(--space-3) 0 var(--space-4); }
842
+ .tabs a { padding: var(--space-1) var(--space-3); border-radius: var(--radius-md); color: var(--muted); text-decoration: none; }
276
843
  .tabs a[aria-current="page"] { background: var(--card); color: var(--ink); }
277
- .phases, .timeline, .commits, .runs, .ledger { list-style: none; margin: 0; padding: 0; }
278
844
  .phase, .timeline li {
279
- border-left: 2px solid var(--line-strong);
280
- padding: 0 0 16px 14px;
281
- margin-left: 6px;
282
- }
283
- .phase.done, .phase.completed { border-color: var(--pass); }
284
- .phase.running { border-color: var(--live); }
285
- .phase.failed { border-color: var(--human); }
286
- .phase header, .timeline li { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
845
+ border-left: var(--track) solid var(--line-strong);
846
+ padding: 0 0 var(--space-4) var(--space-4);
847
+ margin-left: var(--space-2);
848
+ }
287
849
  .step { font-weight: 500; }
288
- .outcome, .ev { font-family: var(--mono); font-size: 12px; color: var(--faint); }
850
+ .outcome, .ev { font-family: var(--font-mono); color: var(--faint); }
289
851
  .verdict {
290
- display: inline-flex; margin: 8px 0 0; padding: 2px 8px; border-radius: 4px;
291
- font-family: var(--mono); font-size: 12px; color: var(--changes);
292
- background: color-mix(in srgb, var(--changes) 18%, transparent);
293
- }
294
- .rail {
295
- position: sticky; top: 16px;
296
- background: var(--panel); border: 1px solid var(--line); border-radius: 10px; padding: 14px 14px 6px;
852
+ display: inline-flex;
853
+ margin: var(--space-2) 0 0;
854
+ padding: var(--space-2xs) var(--space-2);
855
+ border-radius: var(--radius-sm);
856
+ font-family: var(--font-mono);
857
+ font-size: var(--text-xs);
858
+ color: var(--state-needs-hand);
859
+ background: none;
297
860
  }
861
+ .rail { position: sticky; top: var(--space-4); padding: var(--space-4) var(--space-4) var(--space-2); }
298
862
  .rail dl { margin: 0; }
299
- .rail div { padding: 8px 0; border-top: 1px solid var(--line); }
300
- .rail dt { color: var(--faint); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; }
301
- .rail dd { margin: 2px 0 0; }
302
- .mono, code { font-family: var(--mono); font-size: 12px; }
863
+ .rail div, td, .commits li, .runs li, .ledger li, .repo-row {
864
+ padding: var(--space-2) 0;
865
+ border-top: var(--hairline) solid var(--line);
866
+ }
867
+ td, .commits li, .runs li, .ledger li { border-top: 0; border-bottom: var(--hairline) solid var(--line); }
868
+ .rail dt { color: var(--faint); font-size: var(--text-xs); letter-spacing: .04em; text-transform: uppercase; }
869
+ .rail dd { margin: var(--space-2xs) 0 0; }
303
870
  table { width: 100%; border-collapse: collapse; }
304
- td { padding: 6px 0; border-bottom: 1px solid var(--line); }
305
- td.num { text-align: right; font-family: var(--mono); }
306
- .stat { margin: 0 0 22px; }
307
- .k { color: var(--faint); font-family: var(--mono); font-size: 12px; margin-right: 6px; }
308
- .config-error { margin: 0 0 12px; color: var(--human); }
309
- .back { display: inline-block; margin-bottom: 12px; }
310
- .page { padding: 24px; }
311
- .text { font-family: var(--mono); font-size: 12px; line-height: 18px; white-space: pre-wrap; overflow-wrap: anywhere; background: var(--card); border-radius: 6px; padding: 8px 10px; margin: 8px 0 0; }
312
- .commits li { padding: 6px 0; border-bottom: 1px solid var(--line); }
313
- .runs li, .ledger li { padding: 6px 0; border-bottom: 1px solid var(--line); }
871
+ td.num { text-align: right; font-family: var(--font-mono); }
872
+ .config-error, .form-error, .field-error, .trigger .err { color: var(--state-failed); }
873
+ .trigger .err { margin: var(--space-2) 0 0; font-family: var(--font-mono); white-space: pre-wrap; }
874
+ #settings-error { white-space: pre-wrap; }
875
+ .back { display: inline-block; margin-bottom: var(--space-3); }
876
+ .page { padding: var(--gutter); max-width: var(--content-max); }
877
+ time[data-time="rel"] { color: var(--muted); }
878
+ time + time { margin-left: var(--space-2); }
314
879
 
315
- .scrim { position: fixed; inset: 0; background: rgba(0, 0, 0, .5); opacity: 0; pointer-events: none; transition: opacity .2s; z-index: 3; }
880
+ .scrim {
881
+ position: fixed;
882
+ inset: 0;
883
+ background: var(--scrim);
884
+ opacity: 0;
885
+ pointer-events: none;
886
+ transition: opacity .2s;
887
+ z-index: 3;
888
+ }
316
889
  .drawer {
317
- position: fixed; top: 0; right: 0; bottom: 0; width: min(560px, 100vw);
318
- background: var(--panel); border-left: 1px solid var(--line-strong);
319
- transform: translateX(100%); transition: transform .22s ease; z-index: 4;
890
+ position: fixed;
891
+ top: 0;
892
+ right: 0;
893
+ bottom: 0;
894
+ display: flex;
895
+ flex-direction: column;
896
+ width: min(var(--drawer-width), 100vw);
897
+ background: var(--panel);
898
+ border-left: var(--hairline) solid var(--line-strong);
899
+ transform: translateX(100%);
900
+ transition: transform .22s ease;
901
+ z-index: 4;
902
+ overflow: hidden;
320
903
  }
321
904
  body.open .scrim { opacity: 1; pointer-events: auto; }
322
905
  body.open .drawer { transform: none; }
323
906
  .sheet { height: 100%; }
324
- .d-head { padding: 20px 24px 16px; border-bottom: 1px solid var(--line); position: relative; }
325
- .d-head h3 { margin: 4px 48px 4px 0; font-size: 22px; line-height: 28px; color: var(--ink); text-transform: none; letter-spacing: 0; }
907
+ .d-head {
908
+ padding: var(--drawer-pad);
909
+ border-bottom: var(--hairline) solid var(--line);
910
+ position: relative;
911
+ flex: none;
912
+ }
913
+ .d-head h3 {
914
+ margin: var(--space-1) var(--hit) var(--space-1) 0;
915
+ font-size: var(--text-lg);
916
+ line-height: var(--leading-lg);
917
+ color: var(--ink);
918
+ text-transform: none;
919
+ letter-spacing: 0;
920
+ }
326
921
  .close {
327
- position: absolute; top: 12px; right: 16px; width: 44px; height: 44px; border-radius: 50%;
328
- border: 0; background: none; cursor: pointer; color: var(--ink); font-size: 24px;
922
+ position: absolute;
923
+ top: var(--space-3);
924
+ right: var(--space-3);
925
+ width: var(--hit);
926
+ height: var(--hit);
927
+ border-radius: var(--radius-full);
928
+ border: 0;
929
+ background: none;
930
+ cursor: pointer;
931
+ color: var(--ink);
932
+ font-size: var(--text-lg);
329
933
  }
330
934
  .close:hover { background: var(--card-hover); }
331
- .d-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; align-items: center; }
332
- .d-actions form { margin: 0; }
333
- .d-actions button, .d-actions .revise input {
334
- height: 28px; padding: 0 12px; border-radius: 4px; border: 1px solid var(--line-strong);
335
- background: var(--card); color: var(--ink); cursor: pointer;
336
- }
337
- .d-actions .revise { display: flex; gap: 8px; align-items: center; }
935
+ .d-actions { margin-top: var(--space-2); }
936
+ .d-actions form, .form-footer { margin: 0; }
937
+ .d-actions .revise { display: flex; gap: var(--space-2); align-items: center; }
338
938
  .d-actions .revise input { min-width: 16rem; background: var(--bg); }
339
- .d-actions .approve button { color: var(--pass); background: color-mix(in srgb, var(--pass) 18%, transparent); border-color: transparent; }
340
- .d-actions .reject button { color: var(--human); background: color-mix(in srgb, var(--human) 18%, transparent); border-color: transparent; }
341
- .sheet.intake { height: 100%; display: flex; flex-direction: column; }
939
+
940
+ .sheet.intake { flex: 1; min-height: 0; height: auto; overflow: hidden; display: flex; flex-direction: column; }
342
941
  .intake-form {
343
- flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 14px;
344
- padding: 16px 0 48px; max-width: 640px;
345
- }
346
- .intake-form .field { display: flex; flex-direction: column; gap: 6px; margin: 0; border: 0; padding: 0; min-width: 0; }
347
- .intake-form .k, .intake-form legend.k { font-family: var(--mono); font-size: 12px; color: var(--muted); padding: 0; }
348
- .intake-form select, .intake-form input[type="text"], .intake-form input[type="number"], .intake-form textarea {
349
- width: 100%; font: 14px/20px Roboto, sans-serif; color: var(--ink); background: var(--bg);
350
- border: 1px solid var(--line-strong); border-radius: 4px; padding: 8px 10px;
351
- }
352
- .intake-form textarea { resize: vertical; min-height: 88px; }
353
- .picks, .seg { display: flex; flex-wrap: wrap; gap: 6px; }
354
- .pick, .seg button, .fs-up, .fs-use {
355
- height: 28px; padding: 0 12px; border: 1px solid var(--line-strong); border-radius: 4px;
356
- background: none; color: var(--muted); font: 12px/16px var(--mono); cursor: pointer;
357
- }
358
- .pick[aria-pressed="true"], .seg button[aria-pressed="true"] {
359
- border-color: transparent; background: color-mix(in srgb, var(--merged) 22%, transparent); color: var(--ink);
360
- }
361
- .pick:hover, .seg button:hover, .fs-up:hover, .fs-use:hover, .fs-item:hover { background: var(--card-hover); color: var(--ink); }
362
- .fs { display: flex; flex-direction: column; gap: 8px; }
363
- .fs-list { display: flex; flex-direction: column; max-height: 220px; overflow: auto; border: 1px solid var(--line); border-radius: 4px; }
942
+ display: flex;
943
+ flex-direction: column;
944
+ gap: var(--space-4);
945
+ max-width: var(--form-max);
946
+ min-width: 0;
947
+ }
948
+ .sheet.intake .intake-form { flex: 1; min-height: 0; max-width: none; gap: 0; }
949
+ .intake-body {
950
+ flex: 1;
951
+ min-height: 0;
952
+ overflow: auto;
953
+ gap: var(--space-4);
954
+ padding: var(--space-4) var(--drawer-pad) var(--space-5);
955
+ }
956
+ .field { gap: var(--space-2); margin: 0; border: 0; padding: 0; }
957
+ .field .k, .field legend.k, .intake-form .k, .intake-form legend.k { color: var(--muted); padding: 0; margin: 0; }
958
+ .field input[type="text"],
959
+ .field input[type="number"],
960
+ .field textarea,
961
+ .field select,
962
+ .combo-input {
963
+ width: 100%;
964
+ font: var(--text-sm)/var(--leading-sm) var(--font-sans);
965
+ color: var(--ink);
966
+ background: var(--bg);
967
+ border: var(--hairline) solid var(--line-strong);
968
+ border-radius: var(--radius-md);
969
+ padding: var(--space-2) var(--space-3);
970
+ }
971
+ .field textarea, .intake-form textarea { resize: vertical; min-height: var(--field-min); }
972
+ .combo { position: relative; display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
973
+ .combo-list {
974
+ list-style: none;
975
+ margin: 0;
976
+ padding: var(--space-1);
977
+ max-height: var(--fs-max);
978
+ overflow: auto;
979
+ border: var(--hairline) solid var(--line-strong);
980
+ border-radius: var(--radius-sm);
981
+ background: var(--bg);
982
+ }
983
+ .combo-list [role="option"] {
984
+ padding: var(--space-2) var(--space-3);
985
+ border-radius: var(--radius-sm);
986
+ cursor: pointer;
987
+ font-family: var(--font-mono);
988
+ font-size: var(--text-xs);
989
+ line-height: var(--leading-xs);
990
+ }
991
+ .combo-list [role="option"]:hover,
992
+ .combo-list [role="option"].active,
993
+ .combo-list [role="option"][aria-selected="true"] {
994
+ background: var(--card-hover);
995
+ color: var(--ink);
996
+ }
997
+ .combo-list .empty { margin: 0; padding: var(--space-2) var(--space-3); }
998
+ .fs-list {
999
+ display: flex;
1000
+ flex-direction: column;
1001
+ max-height: var(--fs-max);
1002
+ overflow: auto;
1003
+ border: var(--hairline) solid var(--line);
1004
+ border-radius: var(--radius-sm);
1005
+ }
364
1006
  .fs-item {
365
- text-align: left; background: none; border: 0; border-bottom: 1px solid var(--line);
366
- color: var(--ink); font: 12px/16px var(--mono); padding: 6px 10px; cursor: pointer;
1007
+ text-align: left;
1008
+ background: none;
1009
+ border: 0;
1010
+ border-bottom: var(--hairline) solid var(--line);
1011
+ color: var(--ink);
1012
+ font: var(--text-xs)/var(--leading-xs) var(--font-mono);
1013
+ padding: var(--space-2) var(--space-3);
1014
+ cursor: pointer;
367
1015
  }
368
1016
  .fs-item:last-child { border-bottom: 0; }
369
- #after-list { max-height: 140px; overflow: auto; }
370
- .after { display: flex; gap: 8px; align-items: baseline; margin: 4px 0; font-size: 13px; cursor: pointer; }
371
- .after .num { font-family: var(--mono); font-size: 12px; color: var(--muted); }
372
- .form-error, .field-error { margin: 0; color: var(--human); font-size: 12px; line-height: 16px; }
373
- .intake-form .preview { margin: 0; max-height: 200px; overflow: auto; }
374
- .intake-form .d-actions button[type="submit"] { color: white; background: var(--primary); border-color: transparent; }
375
- #settings-path { margin: 0; }
376
- .saved { margin: 0; color: var(--pass); font-family: var(--mono); font-size: 12px; }
377
- .hint { margin: 0; color: var(--faint); font-size: 12px; line-height: 16px; }
378
- .path-row { display: flex; gap: 8px; align-items: center; }
379
- .path-row input { flex: 1; min-width: 0; }
380
- .repo-row { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; padding: 10px 0; border-bottom: 1px solid var(--line); }
381
- .repo-row .num { font-family: var(--mono); font-size: 13px; }
1017
+ #after-list { max-height: var(--after-max); overflow: auto; }
1018
+ .after { display: flex; gap: var(--space-2); align-items: baseline; margin: var(--space-1) 0; font-size: var(--text-sm); cursor: pointer; }
1019
+ .after .num { color: var(--muted); }
1020
+ .intake-form .preview { margin: 0; max-height: var(--preview-max); overflow: auto; }
1021
+ .path-row { flex-wrap: nowrap; }
1022
+ .field .path-row input[type="text"] { width: auto; flex: 1; min-width: 0; }
1023
+ .repo-row { justify-content: space-between; gap: var(--space-3); align-items: flex-start; }
1024
+ .repo-row .num { font-size: var(--text-sm); }
382
1025
  .repo-row .d-actions { margin-top: 0; flex: none; }
383
- #settings-error { white-space: pre-wrap; }
384
- .trigger {
385
- border: 1px solid var(--line);
1026
+ .saved { color: var(--state-done); font-family: var(--font-mono); }
1027
+ .hint { color: var(--faint); }
1028
+ .trigger { padding: var(--space-4); margin: 0 0 var(--space-3); }
1029
+ .trigger h3 {
1030
+ margin: 0 0 var(--space-1);
1031
+ color: var(--ink);
1032
+ font-size: var(--text-md);
1033
+ letter-spacing: 0;
1034
+ text-transform: none;
1035
+ }
1036
+ .trigger button { margin-top: var(--space-3); }
1037
+ .trigger .recent { margin-top: var(--space-3); }
1038
+ .trigger .recent li { margin: var(--space-1) 0; font-size: var(--text-xs); line-height: var(--leading-xs); color: var(--muted); }
1039
+ .trigger .ev { color: var(--ink); }
1040
+ .themes {
1041
+ display: grid;
1042
+ grid-template-columns: repeat(auto-fill, minmax(var(--col-min), 1fr));
1043
+ gap: var(--space-3);
1044
+ }
1045
+ .theme {
1046
+ display: flex;
1047
+ flex-direction: column;
1048
+ align-items: stretch;
1049
+ gap: var(--space-2);
1050
+ height: auto;
1051
+ margin: 0;
1052
+ padding: var(--space-2);
1053
+ border: var(--hairline) solid var(--line);
1054
+ border-radius: var(--radius-lg);
386
1055
  background: var(--card);
387
- border-radius: 10px;
388
- padding: 14px 16px;
389
- margin: 0 0 12px;
390
- }
391
- .trigger h3 { margin: 0 0 4px; color: var(--ink); font-size: 15px; letter-spacing: 0; text-transform: none; }
392
- .trigger .err { margin: 6px 0 0; color: var(--human); font-family: var(--mono); font-size: 12px; line-height: 16px; }
393
- .trigger button {
394
- margin-top: 10px;
395
- background: var(--card-hover);
396
- border: 1px solid var(--line-strong);
397
- border-radius: 6px;
398
- padding: 4px 10px;
1056
+ color: var(--ink);
1057
+ text-align: left;
399
1058
  cursor: pointer;
400
1059
  }
401
- .trigger .recent { list-style: none; margin: 10px 0 0; padding: 0; }
402
- .trigger .recent li { margin: 4px 0; font-size: 12px; line-height: 16px; color: var(--muted); }
403
- .trigger .ev { font-family: var(--mono); color: var(--ink); }
1060
+ .theme:hover { background: var(--card-hover); }
1061
+ .theme[aria-pressed="true"] { border-color: var(--ink); }
1062
+ .theme-swatch {
1063
+ display: grid;
1064
+ grid-template-columns: 1.4fr 1fr 1fr auto;
1065
+ height: var(--space-7);
1066
+ overflow: hidden;
1067
+ border: var(--hairline) solid var(--line);
1068
+ border-radius: var(--radius-sm);
1069
+ }
1070
+ .theme-swatch .swatch { display: block; min-width: 0; }
1071
+ .theme-swatch .bg { background: var(--bg); }
1072
+ .theme-swatch .panel { background: var(--panel); }
1073
+ .theme-swatch .card { background: var(--card); }
1074
+ .theme-swatch .accent { width: var(--space-4); background: var(--primary); }
1075
+ .theme-label { font-size: var(--text-xs); line-height: var(--leading-xs); color: var(--ink); }
1076
+ .form-footer { justify-content: flex-end; }
1077
+ .sheet .form-footer {
1078
+ position: sticky;
1079
+ bottom: 0;
1080
+ flex: none;
1081
+ margin-top: 0;
1082
+ padding: var(--space-4) var(--drawer-pad);
1083
+ background: var(--panel);
1084
+ border-top: var(--hairline) solid var(--line);
1085
+ }
1086
+ .sheet .form-footer #preview-job { margin-right: auto; }
404
1087
 
405
1088
  @media (max-width: 960px) {
406
1089
  .shell { grid-template-columns: 1fr; }
407
- .nav { position: relative; height: auto; border-right: 0; border-bottom: 1px solid var(--line); }
1090
+ .nav { position: relative; height: auto; overflow: visible; border-right: 0; border-bottom: var(--hairline) solid var(--line); }
1091
+ .nav-scroll { overflow: visible; }
408
1092
  .detail { grid-template-columns: 1fr; }
409
1093
  .rail { position: static; }
410
1094
  .d-actions .revise input { min-width: 0; width: 100%; }
411
- .job { grid-template-columns: 1fr; }
412
- .board { min-width: 720px; }
1095
+ .board { min-width: var(--board-min-narrow); }
413
1096
  }