@lchase/kiln 0.10.0 → 0.12.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,558 +1,288 @@
1
1
  /* kiln-serve */
2
- /* Tokens and layout from the factory dashboard (plugins/factory/dashboard). Dark only. */
3
2
  :root {
4
- --bg: #1c2023;
5
- --panel: #24292d;
6
- --card: #24292d;
7
- --card-hover: #2d3338;
8
- --line: #2d3338;
9
- --line-strong: #4a5259;
10
- --ink: #fcfcfd;
11
- --muted: #b7bcc1;
12
- --faint: #888e92;
13
- --live: #4bc4c9;
14
- --pass: #90cea7;
15
- --changes: #ffcc61;
16
- --human: #ff6300;
17
- --merged: #a794ff;
18
- --must: #f7a89c;
19
- --primary: #5405bd;
20
- --code: #beb3ff;
21
- --code-bg: #2d3338;
22
- --shadow: 0 4px 8px -2px #00000066, 0 8px 16px 0 #00000059;
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;
12
+ --live: #3dd6c6;
13
+ --pass: #8dcea8;
14
+ --changes: #e6c36a;
15
+ --human: #ff7a45;
16
+ --merged: #b4a4ff;
17
+ --primary: #6d4aff;
18
+ --code: #c4b8ff;
19
+ --code-bg: #2a303a;
23
20
  --mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
21
+ --nav: 232px;
22
+ --rail: 280px;
24
23
  }
25
24
  * { box-sizing: border-box; }
26
25
  [hidden] { display: none !important; }
27
- html, body { margin: 0; }
26
+ html, body { margin: 0; height: 100%; }
28
27
  html { background: var(--bg); }
29
28
  body {
30
29
  min-height: 100vh;
31
- display: flex;
32
- flex-direction: column;
33
30
  background: var(--bg);
34
31
  color: var(--ink);
35
32
  font: 14px/20px Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
36
33
  -webkit-font-smoothing: antialiased;
37
- padding-bottom: 80px;
38
34
  }
39
- button { font: inherit; color: inherit; }
40
- a { color: var(--code); }
35
+ button, input, select, textarea { font: inherit; color: inherit; }
36
+ a { color: var(--code); text-decoration: none; }
37
+ a:hover { text-decoration: underline; }
38
+ 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; }
41
41
 
42
- header {
42
+ .shell { display: grid; grid-template-columns: var(--nav) minmax(0, 1fr); min-height: 100vh; }
43
+ .nav {
44
+ position: sticky;
45
+ top: 0;
46
+ height: 100vh;
47
+ overflow: auto;
48
+ background: var(--panel);
49
+ border-right: 1px solid var(--line);
50
+ padding: 16px 12px 24px;
43
51
  display: flex;
44
- align-items: center;
45
- justify-content: space-between;
46
- gap: 16px;
47
- flex-wrap: wrap;
48
- min-height: 56px;
49
- padding: 0 24px;
50
- border-bottom: 1px solid var(--line);
52
+ flex-direction: column;
53
+ gap: 12px;
51
54
  }
52
- .brand { display: flex; align-items: center; gap: 12px; }
55
+ .brand { display: flex; align-items: center; gap: 10px; padding: 0 6px; }
56
+ .brand h1 { margin: 0; font-size: 16px; line-height: 20px; }
53
57
  .logo {
54
- width: 28px;
55
- height: 28px;
56
- border-radius: 50%;
57
- background: var(--primary);
58
- display: inline-flex;
59
- align-items: center;
60
- justify-content: center;
61
- }
62
- .ver { font-size: 12px; line-height: 16px; color: var(--faint); align-self: flex-end; margin: 0 0 4px -4px; }
63
- h1 { margin: 0; font-size: 18px; line-height: 24px; font-weight: 500; }
64
- .spend { font-family: var(--mono); font-size: 12px; line-height: 16px; color: var(--muted); }
65
- .pause { margin: 0; }
66
- .pause button, .d-actions .revise input {
67
- font: inherit;
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
68
  color: var(--ink);
69
69
  background: var(--card);
70
70
  border: 1px solid var(--line-strong);
71
71
  border-radius: 6px;
72
- padding: 6px 10px;
72
+ padding: 4px 8px;
73
+ cursor: pointer;
73
74
  }
74
75
  .pause button[aria-pressed="true"] { color: var(--human); }
75
- .d-actions .revise { display: flex; gap: 8px; align-items: center; }
76
- .d-actions .revise input { min-width: 16rem; }
77
- .status { margin-left: auto; font-family: var(--mono); font-size: 12px; line-height: 16px; color: var(--muted); }
78
- .status::before {
79
- content: "";
80
- display: inline-block;
81
- width: 8px;
82
- height: 8px;
83
- border-radius: 50%;
84
- background: var(--live);
85
- margin-right: 8px;
86
- vertical-align: 0;
87
- animation: pulse 1.6s ease-in-out infinite;
88
- }
89
- .status.err { color: var(--human); }
90
- .status.err::before { background: var(--human); animation: none; }
91
-
92
- .repos { display: flex; gap: 8px; flex-wrap: wrap; padding: 12px 24px 0; }
93
- .repo-f {
94
- display: inline-flex;
95
- align-items: center;
96
- gap: 6px;
97
- height: 28px;
98
- padding: 0 12px;
99
- border: 1px solid var(--line-strong);
100
- border-radius: 4px;
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;
82
+ }
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;
89
+ }
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;
101
94
  background: none;
102
- color: var(--muted);
103
- font: 12px/16px var(--mono);
104
- cursor: pointer;
105
- }
106
- .repo-f:hover { background: var(--card-hover); color: var(--ink); }
107
- .repo-f[aria-pressed="true"] {
108
- border-color: transparent;
109
- background: color-mix(in srgb, var(--merged) 22%, transparent);
110
- color: var(--ink);
111
- }
112
- .repo-f .n { color: var(--faint); }
113
-
114
- .board {
115
- flex: 1;
116
- display: grid;
117
- grid-template-columns: var(--cols, repeat(8, minmax(0, 1fr)));
118
- gap: 16px;
119
- padding: 24px;
120
- align-items: start;
121
- }
122
- .col { min-width: 0; }
123
- .col-head {
124
- display: flex;
125
- align-items: baseline;
126
- gap: 8px;
127
- padding: 0 0 8px;
128
- border-bottom: 1px solid var(--line);
129
- margin-bottom: 12px;
130
- }
131
- .col-head h2 { margin: 0; font-size: 14px; line-height: 20px; font-weight: 500; white-space: nowrap; }
132
- .col-head .who {
133
- font-family: var(--mono);
134
- font-size: 12px;
135
- line-height: 16px;
136
- color: var(--faint);
137
- white-space: nowrap;
138
- overflow: hidden;
139
- text-overflow: ellipsis;
140
- }
141
- .col-head .count { margin-left: auto; font-family: var(--mono); font-size: 12px; color: var(--muted); }
142
- .col.human h2 { color: var(--human); }
143
- .col.merged h2 { color: var(--merged); }
144
- .col.queued h2 { color: var(--muted); }
145
- .col.queued .who,
146
- .col.queued .count { color: var(--faint); }
147
- .col:not(.slim) .slim-face { display: none; }
148
- .col.slim {
149
- align-self: stretch;
150
- min-height: 320px;
151
- display: flex;
152
- flex-direction: column;
153
- align-items: center;
154
- gap: 12px;
155
- padding: 12px 0;
156
- border: 1px solid var(--line);
157
- border-radius: 4px;
158
- }
159
- .col.slim .full { display: none; }
160
- .col.slim .slim-face { display: flex; flex-direction: column; align-items: center; gap: 12px; }
161
- .col.slim .v { writing-mode: vertical-rl; display: flex; align-items: center; gap: 8px; }
162
- .col.slim h2 { margin: 0; font-size: 14px; line-height: 20px; font-weight: 500; white-space: nowrap; }
163
- .col.slim .who { font-family: var(--mono); font-size: 12px; line-height: 16px; color: var(--faint); white-space: nowrap; }
164
- .col.slim .count { font-family: var(--mono); font-size: 12px; color: var(--muted); }
165
- .empty {
166
- color: var(--faint);
167
- font-size: 12px;
168
- line-height: 16px;
169
- padding: 20px 12px;
170
- border: 1px dashed var(--line);
171
- border-radius: 4px;
172
- text-align: center;
173
- }
174
-
175
- .card {
176
- display: block;
177
- width: 100%;
95
+ border: 1px solid var(--line-strong);
96
+ border-radius: 6px;
97
+ padding: 6px 8px;
178
98
  text-align: left;
179
99
  cursor: pointer;
180
- background: var(--card);
181
- border: 1px solid var(--line-strong);
182
- border-radius: 4px;
183
- padding: 12px;
184
- margin-bottom: 12px;
185
- }
186
- .card:hover { border-color: var(--faint); box-shadow: var(--shadow); }
187
- .card:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--merged); }
188
- .card.human { border: 2px solid var(--human); padding: 11px; }
189
- .card.merged { background: var(--bg); border-color: var(--line); }
190
- .card.merged .title { color: var(--muted); }
191
- .card.queued,
192
- .card.retrying { background: var(--bg); border-color: var(--line); }
193
- .card.queued .title,
194
- .card.retrying .title { color: var(--muted); font-weight: 400; }
195
- .card.queued .num,
196
- .card.queued .branch,
197
- .card.queued .note,
198
- .card.queued .deps,
199
- .card.retrying .num,
200
- .card.retrying .branch,
201
- .card.retrying .note,
202
- .card.retrying .deps,
203
- .card.retrying .meta { color: var(--faint); }
204
- .card.queued:hover,
205
- .card.retrying:hover { border-color: var(--line-strong); }
206
- .card.fresh { border-color: var(--live); box-shadow: 0 0 0 1px var(--live); }
207
- .card-top { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
208
- .num {
209
- font-family: var(--mono);
210
- font-size: 12px;
211
- line-height: 16px;
212
100
  color: var(--muted);
213
- white-space: nowrap;
214
- overflow: hidden;
215
- text-overflow: ellipsis;
216
101
  }
217
- .card-top .num { flex: 1; min-width: 0; }
218
- .pulse {
219
- width: 8px;
220
- height: 8px;
221
- border-radius: 50%;
222
- background: var(--live);
223
- flex: none;
224
- animation: pulse 1.6s ease-in-out infinite;
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; border-top: 1px solid var(--line); }
112
+ .job {
113
+ display: grid;
114
+ grid-template-columns: minmax(0, 1fr) auto;
115
+ gap: 12px;
116
+ padding: 12px 4px;
117
+ border-bottom: 1px solid var(--line);
225
118
  }
119
+ .job.human { box-shadow: inset 2px 0 0 var(--human); }
120
+ .job.retrying { box-shadow: inset 2px 0 0 var(--changes); }
121
+ .job-top { display: flex; align-items: baseline; gap: 8px; }
122
+ .job-title { color: var(--ink); font-size: 15px; line-height: 22px; }
123
+ .job-title:hover { color: var(--code); }
124
+ .job-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 2px; }
125
+ .num { font-family: var(--mono); font-size: 12px; color: var(--faint); }
126
+ .reason { margin: 6px 0 0; }
226
127
  .flag {
227
- margin-left: auto;
228
- padding: 0 6px;
229
- border-radius: 4px;
230
- background: color-mix(in srgb, var(--human) 18%, transparent);
128
+ font: 11px/16px var(--mono);
231
129
  color: var(--human);
232
- font-size: 11px;
233
- font-weight: 500;
234
- letter-spacing: .02em;
235
130
  text-transform: uppercase;
236
- white-space: nowrap;
131
+ letter-spacing: .04em;
237
132
  }
238
- .repo { margin: -2px 0 6px; }
239
- .title { font-size: 14px; line-height: 20px; margin: 0 0 6px; font-weight: 500; }
240
- .branch {
241
- font-family: var(--mono);
242
- font-size: 12px;
243
- line-height: 16px;
244
- color: var(--faint);
245
- white-space: nowrap;
246
- overflow: hidden;
247
- text-overflow: ellipsis;
248
- }
249
- .rounds { margin-top: 12px; display: grid; gap: 4px; }
250
- .round { display: grid; grid-template-columns: 20px repeat(4, minmax(0, 1fr)); gap: 4px; align-items: center; }
251
- .round .r { font-family: var(--mono); font-size: 11px; color: var(--faint); }
252
- .chip {
253
- text-align: center;
254
- font-family: var(--mono);
255
- font-size: 11px;
256
- line-height: 16px;
257
- padding: 1px 0;
258
- border-radius: 4px;
259
- border: 1px dashed var(--line-strong);
133
+ .note, blockquote.note {
134
+ margin: 6px 0 0;
260
135
  color: var(--muted);
261
- }
262
- .chip.wait { animation: pulse 1.6s ease-in-out infinite; }
263
- .chip.PASS { border-color: transparent; color: var(--pass); background: color-mix(in srgb, var(--pass) 18%, transparent); }
264
- .chip.CHANGES { border-color: transparent; color: var(--changes); background: color-mix(in srgb, var(--changes) 18%, transparent); }
265
- .note {
266
- margin-top: 8px;
267
- padding-top: 8px;
268
- border-top: 1px solid var(--line-strong);
136
+ font-family: var(--mono);
269
137
  font-size: 12px;
270
138
  line-height: 16px;
271
- color: var(--muted);
272
- overflow-wrap: anywhere;
273
- }
274
- .deps { margin: 8px 0 0; font-family: var(--mono); font-size: 12px; line-height: 16px; color: var(--muted); overflow-wrap: anywhere; }
275
- .meta { margin-top: 8px; font-family: var(--mono); font-size: 12px; line-height: 16px; color: var(--muted); overflow-wrap: anywhere; }
276
- .meta time { font-family: inherit; }
277
- @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .3; } }
278
- @media (prefers-reduced-motion: reduce) {
279
- .pulse, .chip.wait, .status::before { animation: none; }
280
- }
281
-
282
- .toolbar {
283
- position: fixed;
284
- left: 50%;
285
- bottom: 16px;
286
- transform: translateX(-50%);
287
- display: flex;
288
- gap: 4px;
289
- padding: 6px;
290
- background: var(--panel);
291
- border: 1px solid var(--line-strong);
292
- border-radius: 12px;
293
- box-shadow: var(--shadow);
294
- z-index: 2;
295
- }
296
- .tool {
297
- position: relative;
298
- width: 40px;
299
- height: 40px;
300
- display: inline-flex;
301
- align-items: center;
302
- justify-content: center;
303
- border: 0;
304
- border-radius: 8px;
305
- background: none;
306
- color: var(--muted);
307
- cursor: pointer;
308
- }
309
- .tool:hover, .tool:focus-visible { background: var(--card-hover); color: var(--ink); }
310
- .tool svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
311
- .tool::after {
312
- content: attr(data-tip);
313
- position: absolute;
314
- bottom: calc(100% + 12px);
315
- left: 50%;
316
- transform: translateX(-50%);
317
- padding: 4px 8px;
318
- border-radius: 4px;
319
- background: var(--ink);
320
- color: var(--bg);
321
- font: 12px/16px var(--mono);
322
- white-space: nowrap;
323
- opacity: 0;
324
- pointer-events: none;
325
- }
326
- .tool:hover::after, .tool:focus-visible::after { opacity: 1; }
327
- .toolbar .sep { width: 1px; margin: 6px 4px; background: var(--line-strong); }
139
+ white-space: pre-wrap;
140
+ }
141
+ .links { margin: 6px 0 0; display: flex; gap: 10px; }
142
+ .deps { margin: 6px 0 0; }
143
+ .evidence { margin-top: 8px; display: flex; flex-direction: column; gap: 8px; }
144
+ .evidence .text, .phase .text, .timeline .text, .changes .text { max-height: 180px; overflow: auto; }
145
+ .feedback { margin: 6px 0 0; padding-left: 18px; }
146
+ .repo-block { margin-bottom: 24px; }
147
+ .repo-block h3 { margin-bottom: 0; }
148
+ .empty { color: var(--faint); margin: 12px 0; }
149
+ .tabs { display: flex; gap: 4px; margin: 12px 0 16px; }
150
+ .tabs a {
151
+ padding: 4px 10px; border-radius: 6px; color: var(--muted); text-decoration: none;
152
+ }
153
+ .tabs a[aria-current="page"] { background: var(--card); color: var(--ink); }
154
+ .phases, .timeline, .commits, .runs, .ledger { list-style: none; margin: 0; padding: 0; }
155
+ .phase, .timeline li {
156
+ border-left: 2px solid var(--line-strong);
157
+ padding: 0 0 16px 14px;
158
+ margin-left: 6px;
159
+ }
160
+ .phase.completed { border-color: var(--pass); }
161
+ .phase.failed { border-color: var(--human); }
162
+ .phase header, .timeline li { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
163
+ .step { font-weight: 500; }
164
+ .outcome, .ev { font-family: var(--mono); font-size: 12px; color: var(--faint); }
165
+ .verdict {
166
+ display: inline-flex; margin: 8px 0 0; padding: 2px 8px; border-radius: 4px;
167
+ font-family: var(--mono); font-size: 12px; color: var(--changes);
168
+ background: color-mix(in srgb, var(--changes) 18%, transparent);
169
+ }
170
+ .rail {
171
+ position: sticky; top: 16px;
172
+ background: var(--panel); border: 1px solid var(--line); border-radius: 10px; padding: 14px 14px 6px;
173
+ }
174
+ .rail dl { margin: 0; }
175
+ .rail div { padding: 8px 0; border-top: 1px solid var(--line); }
176
+ .rail dt { color: var(--faint); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; }
177
+ .rail dd { margin: 2px 0 0; }
178
+ .mono, code { font-family: var(--mono); font-size: 12px; }
179
+ table { width: 100%; border-collapse: collapse; }
180
+ td { padding: 6px 0; border-bottom: 1px solid var(--line); }
181
+ td.num { text-align: right; font-family: var(--mono); }
182
+ .stat { margin: 0 0 22px; }
183
+ .k { color: var(--faint); font-family: var(--mono); font-size: 12px; margin-right: 6px; }
184
+ .config-error { margin: 0 0 12px; color: var(--human); }
185
+ .back { display: inline-block; margin-bottom: 12px; }
186
+ .page { padding: 24px; }
187
+ .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; }
188
+ .commits li { padding: 6px 0; border-bottom: 1px solid var(--line); }
189
+ .runs li, .ledger li { padding: 6px 0; border-bottom: 1px solid var(--line); }
328
190
 
329
191
  .scrim { position: fixed; inset: 0; background: rgba(0, 0, 0, .5); opacity: 0; pointer-events: none; transition: opacity .2s; z-index: 3; }
330
192
  .drawer {
331
- position: fixed;
332
- top: 0;
333
- right: 0;
334
- bottom: 0;
335
- width: min(900px, 100vw);
336
- background: var(--panel);
337
- border-left: 1px solid var(--line-strong);
338
- box-shadow: 0 12px 16px -4px #00000080, 0 24px 32px 0 #00000080;
339
- transform: translateX(100%);
340
- transition: transform .22s ease;
341
- z-index: 4;
193
+ position: fixed; top: 0; right: 0; bottom: 0; width: min(560px, 100vw);
194
+ background: var(--panel); border-left: 1px solid var(--line-strong);
195
+ transform: translateX(100%); transition: transform .22s ease; z-index: 4;
342
196
  }
343
197
  body.open .scrim { opacity: 1; pointer-events: auto; }
344
198
  body.open .drawer { transform: none; }
345
- .sheet { height: 100%; display: grid; grid-template-rows: auto minmax(0, 1fr); }
346
- .d-head { padding: 20px 24px 16px; border-bottom: 1px solid var(--line-strong); position: relative; }
347
- .d-head h3 { margin: 4px 48px 4px 0; font-size: 22px; line-height: 28px; font-weight: 500; }
348
- .d-head .num { white-space: normal; overflow: visible; text-overflow: unset; }
199
+ .sheet { height: 100%; }
200
+ .d-head { padding: 20px 24px 16px; border-bottom: 1px solid var(--line); position: relative; }
201
+ .d-head h3 { margin: 4px 48px 4px 0; font-size: 22px; line-height: 28px; color: var(--ink); text-transform: none; letter-spacing: 0; }
349
202
  .close {
350
- position: absolute;
351
- top: 12px;
352
- right: 16px;
353
- width: 44px;
354
- height: 44px;
355
- border-radius: 50%;
356
- border: 0;
357
- background: none;
358
- cursor: pointer;
359
- color: var(--ink);
360
- font-size: 24px;
361
- line-height: 1;
203
+ position: absolute; top: 12px; right: 16px; width: 44px; height: 44px; border-radius: 50%;
204
+ border: 0; background: none; cursor: pointer; color: var(--ink); font-size: 24px;
362
205
  }
363
206
  .close:hover { background: var(--card-hover); }
364
- .d-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
207
+ .d-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; align-items: center; }
365
208
  .d-actions form { margin: 0; }
366
- .d-actions button {
367
- height: 28px;
368
- padding: 0 12px;
369
- border-radius: 4px;
370
- border: 1px solid var(--line-strong);
371
- background: transparent;
372
- color: var(--ink);
373
- font: 12px/16px var(--mono);
374
- cursor: pointer;
209
+ .d-actions button, .d-actions .revise input {
210
+ height: 28px; padding: 0 12px; border-radius: 4px; border: 1px solid var(--line-strong);
211
+ background: var(--card); color: var(--ink); cursor: pointer;
375
212
  }
376
- .d-actions button:hover { background: var(--card-hover); }
377
- .d-actions .approve button { color: var(--pass); border-color: transparent; background: color-mix(in srgb, var(--pass) 18%, transparent); }
378
- .d-actions .reject button { color: var(--human); border-color: transparent; background: color-mix(in srgb, var(--human) 18%, transparent); }
379
- .d-body { display: grid; grid-template-columns: 200px minmax(0, 1fr); min-height: 0; }
380
- .files { border-right: 1px solid var(--line-strong); padding: 16px 12px; overflow-y: auto; }
381
- .group {
382
- font-size: 12px;
383
- line-height: 16px;
384
- font-weight: 500;
385
- text-transform: uppercase;
386
- letter-spacing: .02em;
387
- color: var(--faint);
388
- margin: 16px 0 4px;
389
- padding: 0 12px;
390
- }
391
- .group:first-child { margin-top: 0; }
392
- .file {
393
- display: flex;
394
- align-items: center;
395
- gap: 10px;
396
- width: 100%;
397
- text-align: left;
398
- text-decoration: none;
399
- background: none;
400
- border: 0;
401
- border-radius: 4px;
402
- padding: 6px 12px;
403
- cursor: pointer;
404
- font-family: var(--mono);
405
- font-size: 13px;
406
- line-height: 20px;
407
- color: var(--ink);
408
- }
409
- .file:hover { background: var(--card-hover); }
410
- .file.on { background: var(--code-bg); }
411
- .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--faint); flex: none; }
412
- .dot.good { background: var(--pass); }
413
- .dot.warn { background: var(--changes); }
414
- .dot.stop { background: var(--human); }
415
- .doc { overflow-y: auto; padding: 24px 32px 64px; min-width: 0; }
416
- .src { display: none; }
417
-
418
- .md { max-width: 660px; line-height: 20px; }
419
- .md h1, .md h2, .md h3 { line-height: 1.3; margin: 1.5em 0 .5em; font-weight: 500; }
420
- .md h1 { font-size: 18px; }
421
- .md h2 { font-size: 12px; text-transform: uppercase; letter-spacing: .02em; color: var(--muted); }
422
- .md h3 { font-size: 13px; color: var(--muted); }
423
- .md > :first-child { margin-top: 0; }
424
- .md p, .md ul, .md ol, .md pre, .md table { margin: 0 0 1em; }
425
- .md ul, .md ol { padding-left: 1.3em; }
426
- .md li { margin: .25em 0; }
427
- .md code { font-family: var(--mono); font-size: 13px; background: var(--code-bg); color: var(--code); padding: 1px 6px; border-radius: 4px; }
428
- .md pre { background: var(--bg); border: 1px solid var(--line-strong); border-radius: 4px; padding: 12px 16px; overflow-x: auto; }
429
- .md pre code { background: none; color: var(--ink); padding: 0; }
430
- .md table { border-collapse: collapse; font-size: 13px; }
431
- .md th, .md td { border: 1px solid var(--line-strong); padding: 6px 10px; text-align: left; }
432
- .verdict {
433
- display: inline-flex;
434
- align-items: center;
435
- height: 24px;
436
- font-family: var(--mono);
437
- font-size: 12px;
438
- font-weight: 500;
439
- letter-spacing: .02em;
440
- padding: 0 10px;
441
- border-radius: 4px;
442
- margin-bottom: 16px;
443
- }
444
- .verdict.good { color: var(--pass); background: color-mix(in srgb, var(--pass) 18%, transparent); }
445
- .verdict.warn { color: var(--changes); background: color-mix(in srgb, var(--changes) 18%, transparent); }
446
- .verdict.stop { color: var(--human); background: color-mix(in srgb, var(--human) 18%, transparent); }
447
-
448
- .config-error { margin: 0; padding: 8px 24px 0; color: var(--human); }
213
+ .d-actions .revise { display: flex; gap: 8px; align-items: center; }
214
+ .d-actions .revise input { min-width: 16rem; background: var(--bg); }
215
+ .d-actions .approve button { color: var(--pass); background: color-mix(in srgb, var(--pass) 18%, transparent); border-color: transparent; }
216
+ .d-actions .reject button { color: var(--human); background: color-mix(in srgb, var(--human) 18%, transparent); border-color: transparent; }
449
217
  .sheet.intake { height: 100%; display: flex; flex-direction: column; }
450
218
  .intake-form {
451
- flex: 1;
452
- min-height: 0;
453
- overflow: auto;
454
- display: flex;
455
- flex-direction: column;
456
- gap: 14px;
457
- padding: 16px 24px 48px;
458
- max-width: 560px;
219
+ flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 14px;
220
+ padding: 16px 0 48px; max-width: 640px;
459
221
  }
460
222
  .intake-form .field { display: flex; flex-direction: column; gap: 6px; margin: 0; border: 0; padding: 0; min-width: 0; }
461
- .intake-form .k, .intake-form legend.k {
462
- font-family: var(--mono);
463
- font-size: 12px;
464
- line-height: 16px;
465
- color: var(--muted);
466
- padding: 0;
467
- }
468
- .intake-form select,
469
- .intake-form input[type="text"],
470
- .intake-form input[type="number"],
471
- .intake-form textarea {
472
- width: 100%;
473
- font: 14px/20px Roboto, sans-serif;
474
- color: var(--ink);
475
- background: var(--bg);
476
- border: 1px solid var(--line-strong);
477
- border-radius: 4px;
478
- padding: 8px 10px;
223
+ .intake-form .k, .intake-form legend.k { font-family: var(--mono); font-size: 12px; color: var(--muted); padding: 0; }
224
+ .intake-form select, .intake-form input[type="text"], .intake-form input[type="number"], .intake-form textarea {
225
+ width: 100%; font: 14px/20px Roboto, sans-serif; color: var(--ink); background: var(--bg);
226
+ border: 1px solid var(--line-strong); border-radius: 4px; padding: 8px 10px;
479
227
  }
480
228
  .intake-form textarea { resize: vertical; min-height: 88px; }
481
229
  .picks, .seg { display: flex; flex-wrap: wrap; gap: 6px; }
482
230
  .pick, .seg button, .fs-up, .fs-use {
483
- height: 28px;
484
- padding: 0 12px;
485
- border: 1px solid var(--line-strong);
486
- border-radius: 4px;
487
- background: none;
488
- color: var(--muted);
489
- font: 12px/16px var(--mono);
490
- cursor: pointer;
231
+ height: 28px; padding: 0 12px; border: 1px solid var(--line-strong); border-radius: 4px;
232
+ background: none; color: var(--muted); font: 12px/16px var(--mono); cursor: pointer;
491
233
  }
492
234
  .pick[aria-pressed="true"], .seg button[aria-pressed="true"] {
493
- border-color: transparent;
494
- background: color-mix(in srgb, var(--merged) 22%, transparent);
495
- color: var(--ink);
235
+ border-color: transparent; background: color-mix(in srgb, var(--merged) 22%, transparent); color: var(--ink);
496
236
  }
497
237
  .pick:hover, .seg button:hover, .fs-up:hover, .fs-use:hover, .fs-item:hover { background: var(--card-hover); color: var(--ink); }
498
238
  .fs { display: flex; flex-direction: column; gap: 8px; }
499
239
  .fs-list { display: flex; flex-direction: column; max-height: 220px; overflow: auto; border: 1px solid var(--line); border-radius: 4px; }
500
240
  .fs-item {
501
- text-align: left;
502
- background: none;
503
- border: 0;
504
- border-bottom: 1px solid var(--line);
505
- color: var(--ink);
506
- font: 12px/16px var(--mono);
507
- padding: 6px 10px;
508
- cursor: pointer;
241
+ text-align: left; background: none; border: 0; border-bottom: 1px solid var(--line);
242
+ color: var(--ink); font: 12px/16px var(--mono); padding: 6px 10px; cursor: pointer;
509
243
  }
510
244
  .fs-item:last-child { border-bottom: 0; }
511
245
  #after-list { max-height: 140px; overflow: auto; }
512
246
  .after { display: flex; gap: 8px; align-items: baseline; margin: 4px 0; font-size: 13px; cursor: pointer; }
513
247
  .after .num { font-family: var(--mono); font-size: 12px; color: var(--muted); }
514
- .form-error { margin: 0; color: var(--human); font-size: 12px; line-height: 16px; }
248
+ .form-error, .field-error { margin: 0; color: var(--human); font-size: 12px; line-height: 16px; }
515
249
  .intake-form .preview { margin: 0; max-height: 200px; overflow: auto; }
516
- .intake-form .d-actions button[type="submit"] {
517
- color: var(--ink);
518
- background: var(--primary);
519
- border-color: transparent;
520
- }
521
- #settings-form { max-width: 640px; }
250
+ .intake-form .d-actions button[type="submit"] { color: white; background: var(--primary); border-color: transparent; }
522
251
  #settings-path { margin: 0; }
523
- .saved { margin: 0; color: var(--pass); font-family: var(--mono); font-size: 12px; line-height: 16px; }
252
+ .saved { margin: 0; color: var(--pass); font-family: var(--mono); font-size: 12px; }
524
253
  .hint { margin: 0; color: var(--faint); font-size: 12px; line-height: 16px; }
525
- .field-error { margin: 0; color: var(--human); font-size: 12px; line-height: 16px; }
526
254
  .path-row { display: flex; gap: 8px; align-items: center; }
527
255
  .path-row input { flex: 1; min-width: 0; }
528
- .repo-row {
529
- display: flex;
530
- justify-content: space-between;
531
- gap: 12px;
532
- align-items: flex-start;
533
- padding: 10px 0;
534
- border-bottom: 1px solid var(--line);
535
- }
256
+ .repo-row { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; padding: 10px 0; border-bottom: 1px solid var(--line); }
536
257
  .repo-row .num { font-family: var(--mono); font-size: 13px; }
537
258
  .repo-row .d-actions { margin-top: 0; flex: none; }
538
- #repo-editor { padding-top: 8px; }
539
259
  #settings-error { white-space: pre-wrap; }
540
- .back { display: inline-block; margin: 24px 24px 0; }
541
- .page { padding: 0 24px 48px; }
542
- .text { font-family: var(--mono); font-size: 13px; white-space: pre-wrap; overflow-wrap: anywhere; }
543
-
544
- @media (max-width: 1100px) {
545
- .board { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 24px; }
546
- .col.slim { align-self: start; min-height: 0; flex-direction: row; padding: 8px 12px; }
547
- .col.slim .slim-face { flex-direction: row; }
548
- .col.slim .v { writing-mode: horizontal-tb; }
260
+ .trigger {
261
+ border: 1px solid var(--line);
262
+ background: var(--card);
263
+ border-radius: 10px;
264
+ padding: 14px 16px;
265
+ margin: 0 0 12px;
266
+ }
267
+ .trigger h3 { margin: 0 0 4px; color: var(--ink); font-size: 15px; letter-spacing: 0; text-transform: none; }
268
+ .trigger .err { margin: 6px 0 0; color: var(--human); font-family: var(--mono); font-size: 12px; line-height: 16px; }
269
+ .trigger button {
270
+ margin-top: 10px;
271
+ background: var(--card-hover);
272
+ border: 1px solid var(--line-strong);
273
+ border-radius: 6px;
274
+ padding: 4px 10px;
275
+ cursor: pointer;
549
276
  }
550
- @media (max-width: 640px) {
551
- header, .repos { padding-left: 16px; padding-right: 16px; }
552
- .board { grid-template-columns: 1fr; padding: 16px; }
553
- .d-body { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr); }
554
- .files { border-right: 0; border-bottom: 1px solid var(--line-strong); display: flex; gap: 4px; overflow-x: auto; padding: 8px; }
555
- .group { display: none; }
556
- .file { width: auto; white-space: nowrap; }
557
- .doc { padding: 16px; }
277
+ .trigger .recent { list-style: none; margin: 10px 0 0; padding: 0; }
278
+ .trigger .recent li { margin: 4px 0; font-size: 12px; line-height: 16px; color: var(--muted); }
279
+ .trigger .ev { font-family: var(--mono); color: var(--ink); }
280
+
281
+ @media (max-width: 960px) {
282
+ .shell { grid-template-columns: 1fr; }
283
+ .nav { position: relative; height: auto; border-right: 0; border-bottom: 1px solid var(--line); }
284
+ .detail { grid-template-columns: 1fr; }
285
+ .rail { position: static; }
286
+ .d-actions .revise input { min-width: 0; width: 100%; }
287
+ .job { grid-template-columns: 1fr; }
558
288
  }