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