@tea-agent/loop-agent 0.17.0 → 0.17.2

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.
@@ -12,6 +12,7 @@
12
12
  --hairline-strong: #cfcdc4;
13
13
  --orange: #f54e00;
14
14
  --orange-active: #d04200;
15
+ --orange-soft: color-mix(in srgb, var(--orange) 12%, white);
15
16
  --blue: #3f6ea4;
16
17
  --green: #1f8a65;
17
18
  --amber: #a66a00;
@@ -29,11 +30,15 @@
29
30
  --space-8: 32px;
30
31
  --space-10: 40px;
31
32
  --space-12: 48px;
32
- --radius-sm: 4px;
33
- --radius-md: 6px;
34
- --radius-lg: 8px;
33
+ --radius-sm: 6px;
34
+ --radius-md: 8px;
35
+ --radius-lg: 12px;
36
+ --radius-pill: 999px;
35
37
  --transition-fast: 160ms ease;
36
- --transition-base: 240ms ease;
38
+ --transition-base: 220ms ease;
39
+ --shadow-panel: 0 1px 2px rgb(38 37 30 / 4%), 0 8px 24px rgb(38 37 30 / 3%);
40
+ --shadow-soft: 0 10px 30px rgb(38 37 30 / 6%);
41
+ color-scheme: light;
37
42
  }
38
43
 
39
44
  * {
@@ -41,17 +46,30 @@
41
46
  }
42
47
 
43
48
  html {
44
- background: var(--canvas);
49
+ background:
50
+ radial-gradient(1200px 480px at 8% -10%, rgb(241 216 203 / 45%), transparent 55%),
51
+ radial-gradient(900px 420px at 100% 0%, rgb(216 234 213 / 35%), transparent 50%),
52
+ var(--canvas);
53
+ min-height: 100%;
45
54
  scroll-behavior: smooth;
46
55
  }
47
56
 
48
57
  body {
49
58
  min-width: 320px;
50
59
  margin: 0;
51
- background: var(--canvas);
60
+ min-height: 100vh;
61
+ background: transparent;
52
62
  color: var(--ink);
63
+ /* Keep system-ui first for shell contract tests; Chinese fonts follow. */
53
64
  font-family:
54
- system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
65
+ system-ui,
66
+ -apple-system,
67
+ "Segoe UI",
68
+ "PingFang SC",
69
+ "Hiragino Sans GB",
70
+ "Noto Sans SC",
71
+ BlinkMacSystemFont,
72
+ sans-serif;
55
73
  font-size: 14px;
56
74
  line-height: 1.5;
57
75
  }
@@ -111,35 +129,43 @@ td:first-child,
111
129
  top: 0;
112
130
  z-index: 30;
113
131
  display: grid;
114
- grid-template-columns: auto auto 1fr;
132
+ grid-template-columns: auto 1fr auto;
115
133
  grid-template-areas: "brand nav status" "crumb crumb crumb";
116
- column-gap: var(--space-6);
134
+ column-gap: var(--space-5);
117
135
  align-items: center;
118
- min-height: 76px;
119
- margin-bottom: var(--space-8);
136
+ min-height: 72px;
137
+ margin-bottom: var(--space-6);
120
138
  padding: 14px 0 12px;
121
- background: color-mix(in srgb, var(--canvas) 94%, transparent);
139
+ background: color-mix(in srgb, var(--canvas) 82%, transparent);
122
140
  border-bottom: 1px solid var(--hairline);
123
- backdrop-filter: blur(10px);
141
+ backdrop-filter: blur(12px);
124
142
  }
125
143
 
126
144
  .logo {
127
145
  grid-area: brand;
128
146
  display: inline-flex;
129
147
  align-items: center;
130
- gap: 9px;
148
+ gap: 10px;
131
149
  color: var(--ink);
132
- font-size: 16px;
150
+ font-size: 15px;
133
151
  font-weight: 650;
134
- letter-spacing: 0;
152
+ letter-spacing: -0.01em;
135
153
  text-decoration: none;
136
154
  }
137
155
 
138
156
  .logo > i {
139
- color: var(--orange);
140
- font-size: 20px;
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ width: 32px;
161
+ height: 32px;
162
+ border-radius: var(--radius-md);
163
+ background: var(--orange-soft);
164
+ color: var(--orange-active);
165
+ font-size: 18px;
141
166
  font-weight: 400;
142
167
  }
168
+
143
169
  .logo:hover {
144
170
  color: var(--orange-active);
145
171
  }
@@ -147,18 +173,25 @@ td:first-child,
147
173
  .top-nav {
148
174
  grid-area: nav;
149
175
  display: inline-flex;
176
+ flex-wrap: wrap;
150
177
  align-items: center;
151
178
  gap: 4px;
179
+ justify-self: start;
180
+ padding: 5px;
181
+ border: 1px solid var(--hairline);
182
+ border-radius: var(--radius-pill);
183
+ background: color-mix(in srgb, var(--surface) 88%, transparent);
184
+ box-shadow: var(--shadow-panel);
152
185
  }
153
186
 
154
187
  .nav-link {
155
188
  display: inline-flex;
156
189
  align-items: center;
157
190
  gap: 7px;
158
- min-height: 36px;
159
- padding: 0 10px;
191
+ min-height: 34px;
192
+ padding: 0 14px;
160
193
  border: 1px solid transparent;
161
- border-radius: var(--radius-sm);
194
+ border-radius: var(--radius-pill);
162
195
  color: var(--body);
163
196
  font-size: 13px;
164
197
  font-weight: 600;
@@ -166,24 +199,34 @@ td:first-child,
166
199
  transition:
167
200
  border-color var(--transition-fast),
168
201
  background-color var(--transition-fast),
169
- color var(--transition-fast);
202
+ color var(--transition-fast),
203
+ box-shadow var(--transition-fast);
170
204
  }
171
205
 
172
206
  .nav-link > i {
173
- font-size: 16px;
207
+ font-size: 15px;
174
208
  font-weight: 400;
175
209
  }
210
+
176
211
  .nav-link:hover,
177
212
  .nav-link:focus-visible {
178
- border-color: var(--hairline-strong);
213
+ border-color: transparent;
179
214
  background: var(--surface);
180
215
  color: var(--ink);
181
216
  outline: none;
182
217
  }
218
+
183
219
  .nav-link-active {
184
- border-color: var(--orange);
185
- background: var(--surface);
186
- color: var(--ink);
220
+ border-color: transparent;
221
+ background: var(--ink);
222
+ color: #fff;
223
+ box-shadow: none;
224
+ }
225
+
226
+ .nav-link-active:hover,
227
+ .nav-link-active:focus-visible {
228
+ background: var(--ink);
229
+ color: #fff;
187
230
  }
188
231
 
189
232
  .header-meta {
@@ -191,15 +234,21 @@ td:first-child,
191
234
  display: inline-flex;
192
235
  justify-self: end;
193
236
  align-items: center;
194
- gap: 7px;
237
+ gap: 8px;
238
+ min-height: 34px;
239
+ padding: 0 12px;
240
+ border: 1px solid var(--hairline);
241
+ border-radius: var(--radius-pill);
242
+ background: var(--surface);
195
243
  color: var(--muted);
196
244
  font-size: 12px;
197
245
  font-variant-numeric: tabular-nums;
246
+ box-shadow: var(--shadow-panel);
198
247
  }
199
248
 
200
249
  .header-meta > i {
201
- color: var(--green);
202
- font-size: 16px;
250
+ color: color-mix(in srgb, var(--green) 70%, white);
251
+ font-size: 14px;
203
252
  }
204
253
 
205
254
  .breadcrumb {
@@ -247,20 +296,26 @@ td:first-child,
247
296
  }
248
297
 
249
298
  .view-kicker {
299
+ display: inline-flex;
300
+ align-items: center;
301
+ width: fit-content;
250
302
  margin: 0;
251
- color: var(--orange);
303
+ padding: 4px 10px;
304
+ border-radius: var(--radius-pill);
305
+ background: var(--orange-soft);
306
+ color: var(--orange-active);
252
307
  font-size: 11px;
253
308
  font-weight: 700;
254
- letter-spacing: 0.08em;
309
+ letter-spacing: 0.04em;
255
310
  }
256
311
 
257
312
  .view h2 {
258
313
  margin: 0;
259
314
  color: var(--ink);
260
- font-size: 28px;
261
- font-weight: 500;
262
- line-height: 1.16;
263
- letter-spacing: 0;
315
+ font-size: clamp(24px, 3vw, 30px);
316
+ font-weight: 650;
317
+ line-height: 1.15;
318
+ letter-spacing: -0.02em;
264
319
  }
265
320
 
266
321
  .view-heading > p:last-child {
@@ -271,14 +326,15 @@ td:first-child,
271
326
 
272
327
  .panel {
273
328
  min-width: 0;
274
- background: var(--surface);
329
+ background: color-mix(in srgb, var(--surface) 96%, transparent);
275
330
  border: 1px solid var(--hairline);
276
331
  border-radius: var(--radius-lg);
277
332
  padding: var(--space-5);
333
+ box-shadow: var(--shadow-panel);
278
334
  }
279
335
 
280
336
  .panel-primary {
281
- border-color: var(--hairline-strong);
337
+ border-color: var(--hairline);
282
338
  box-shadow: var(--shadow-panel);
283
339
  }
284
340
  .panel-features {
@@ -292,6 +348,7 @@ td:first-child,
292
348
  .panel-table {
293
349
  overflow: hidden;
294
350
  padding: 0;
351
+ box-shadow: var(--shadow-panel);
295
352
  }
296
353
  .panel-output {
297
354
  background: #fbfbf9;
@@ -366,18 +423,20 @@ td:first-child,
366
423
  }
367
424
  .pool-refresh-btn {
368
425
  appearance: none;
369
- border: 1px solid var(--hairline-strong);
370
- border-radius: var(--radius-md);
426
+ border: 1px solid var(--hairline);
427
+ border-radius: var(--radius-pill);
371
428
  background: var(--surface);
372
429
  color: var(--ink);
373
430
  font-size: 13px;
374
431
  font-weight: 700;
375
432
  padding: 8px 14px;
376
433
  cursor: pointer;
434
+ box-shadow: var(--shadow-panel);
377
435
  }
378
436
  .pool-refresh-btn:hover {
379
437
  border-color: var(--orange);
380
438
  color: var(--orange-active);
439
+ background: var(--orange-soft);
381
440
  }
382
441
  .pool-auto-refresh-label {
383
442
  display: inline-flex;
@@ -403,15 +462,16 @@ td:first-child,
403
462
  border-radius: var(--radius-md);
404
463
  background: var(--canvas-soft);
405
464
  border-left: 3px solid var(--hairline-strong);
465
+ box-shadow: none;
406
466
  }
407
467
  .pool-ops-card-attention {
408
- border-left-color: var(--red);
409
- border-color: color-mix(in srgb, var(--red) 35%, var(--hairline));
410
- background: #fff8f9;
468
+ border-left-color: color-mix(in srgb, var(--red) 70%, var(--hairline));
469
+ border-color: var(--hairline);
470
+ background: color-mix(in srgb, var(--red) 4%, var(--surface));
411
471
  }
412
472
  .pool-ops-card-ready {
413
- border-left-color: var(--orange);
414
- background: #fffaf5;
473
+ border-left-color: color-mix(in srgb, var(--orange) 70%, var(--hairline));
474
+ background: color-mix(in srgb, var(--orange) 4%, var(--surface));
415
475
  }
416
476
  .pool-ops-card-title {
417
477
  margin-bottom: 6px;
@@ -605,8 +665,9 @@ td:first-child,
605
665
  grid-template-columns: repeat(5, minmax(0, 1fr));
606
666
  overflow: visible;
607
667
  border: 1px solid var(--hairline);
608
- border-radius: var(--radius-md);
668
+ border-radius: var(--radius-lg);
609
669
  background: var(--surface);
670
+ box-shadow: var(--shadow-panel);
610
671
  height: 100%;
611
672
  }
612
673
 
@@ -683,10 +744,10 @@ td:first-child,
683
744
  color: var(--muted);
684
745
  }
685
746
  .kpi-card.kpi-risk .kpi-value {
686
- color: var(--amber);
747
+ color: color-mix(in srgb, var(--amber) 80%, var(--ink));
687
748
  }
688
749
  .kpi-card.kpi-danger .kpi-value {
689
- color: var(--red);
750
+ color: color-mix(in srgb, var(--red) 78%, var(--ink));
690
751
  }
691
752
  .kpi-value-with-link {
692
753
  display: flex;
@@ -823,16 +884,15 @@ td:first-child,
823
884
  align-items: start;
824
885
  column-gap: var(--space-3);
825
886
  row-gap: 4px;
826
- padding: 14px;
827
- padding-left: 12px;
828
- border: 1px solid color-mix(in srgb, var(--red) 35%, var(--hairline));
829
- border-left: 3px solid var(--red);
887
+ padding: 14px 16px;
888
+ border: 1px solid var(--hairline);
889
+ border-left: 3px solid color-mix(in srgb, var(--red) 55%, var(--hairline));
830
890
  border-radius: var(--radius-md);
831
- background: #fff8f9;
891
+ background: color-mix(in srgb, var(--red) 4%, var(--surface));
832
892
  }
833
893
  .risk-block-label {
834
894
  grid-area: label;
835
- color: var(--ink);
895
+ color: var(--muted);
836
896
  font-size: 11px;
837
897
  font-weight: 700;
838
898
  letter-spacing: 0.04em;
@@ -841,15 +901,18 @@ td:first-child,
841
901
  .risk-total {
842
902
  grid-area: total;
843
903
  margin: 0;
844
- color: var(--red);
845
- font-size: 32px;
846
- font-weight: 500;
904
+ color: var(--ink);
905
+ font-size: 28px;
906
+ font-weight: 650;
847
907
  line-height: 1;
848
908
  font-variant-numeric: tabular-nums;
849
909
  align-self: center;
850
910
  text-align: right;
851
911
  min-width: 1.5ch;
852
912
  }
913
+ .risk-block:not(:has(.risk-empty)) .risk-total {
914
+ color: color-mix(in srgb, var(--red) 82%, var(--ink));
915
+ }
853
916
  .risk-summary {
854
917
  grid-area: summary;
855
918
  margin: 0;
@@ -871,13 +934,15 @@ td:first-child,
871
934
  align-items: flex-start;
872
935
  gap: var(--space-3);
873
936
  padding: 14px 16px;
874
- border: 1px solid color-mix(in srgb, var(--red) 50%, var(--hairline));
937
+ border: 1px solid var(--hairline);
938
+ border-left: 3px solid color-mix(in srgb, var(--red) 55%, var(--hairline));
875
939
  border-radius: var(--radius-lg);
876
- background: #fff8f9;
940
+ background: color-mix(in srgb, var(--red) 4%, var(--surface));
941
+ box-shadow: var(--shadow-panel);
877
942
  }
878
943
  .projection-fault > i {
879
- color: var(--red);
880
- font-size: 20px;
944
+ color: color-mix(in srgb, var(--red) 75%, var(--ink));
945
+ font-size: 18px;
881
946
  line-height: 1.4;
882
947
  }
883
948
  .projection-fault-body {
@@ -936,21 +1001,24 @@ td:first-child,
936
1001
  gap: 10px;
937
1002
  }
938
1003
  .active-dag-card {
939
- padding: 14px;
1004
+ padding: 14px 16px;
940
1005
  border: 1px solid var(--hairline);
941
1006
  border-radius: var(--radius-md);
942
- background: var(--canvas-soft);
1007
+ background: var(--surface);
943
1008
  border-left: 3px solid var(--hairline-strong);
944
- padding-left: 12px;
1009
+ box-shadow: var(--shadow-panel);
1010
+ transition:
1011
+ border-color var(--transition-fast),
1012
+ box-shadow var(--transition-fast);
945
1013
  }
946
1014
  .active-dag-card-running {
947
- border-left-color: var(--orange);
948
- background: #fffaf5;
1015
+ border-left-color: color-mix(in srgb, var(--orange) 70%, var(--hairline));
1016
+ background: color-mix(in srgb, var(--orange) 4%, var(--surface));
949
1017
  }
950
1018
  .active-dag-card-attention {
951
- border-left-color: var(--red);
952
- border-color: color-mix(in srgb, var(--red) 35%, var(--hairline));
953
- background: #fff8f9;
1019
+ border-left-color: color-mix(in srgb, var(--red) 55%, var(--hairline));
1020
+ border-color: var(--hairline);
1021
+ background: color-mix(in srgb, var(--red) 4%, var(--surface));
954
1022
  }
955
1023
  .active-dag-header {
956
1024
  display: flex;
@@ -986,14 +1054,20 @@ td:first-child,
986
1054
  grid-template-columns: minmax(120px, 0.9fr) minmax(88px, 0.55fr) minmax(0, 1.6fr) auto;
987
1055
  align-items: center;
988
1056
  gap: var(--space-3);
989
- padding: 10px 12px;
1057
+ padding: 12px 14px;
990
1058
  border: 1px solid var(--hairline);
991
1059
  border-radius: var(--radius-md);
992
1060
  background: var(--surface);
1061
+ box-shadow: var(--shadow-panel);
993
1062
  cursor: pointer;
1063
+ transition:
1064
+ border-color var(--transition-fast),
1065
+ background-color var(--transition-fast),
1066
+ transform var(--transition-fast);
994
1067
  }
995
1068
  .feature-decision-row:hover {
996
- border-color: var(--hairline-strong);
1069
+ border-color: color-mix(in srgb, var(--orange) 35%, var(--hairline));
1070
+ background: color-mix(in srgb, var(--orange) 3%, var(--surface));
997
1071
  }
998
1072
  .feature-decision-id {
999
1073
  min-width: 0;
@@ -1014,7 +1088,7 @@ td:first-child,
1014
1088
  white-space: nowrap;
1015
1089
  }
1016
1090
  .feature-decision-open {
1017
- color: var(--ink);
1091
+ color: var(--orange-active);
1018
1092
  font-size: 12px;
1019
1093
  font-weight: 700;
1020
1094
  white-space: nowrap;
@@ -1052,7 +1126,7 @@ table {
1052
1126
  }
1053
1127
  th,
1054
1128
  td {
1055
- padding: 11px 14px;
1129
+ padding: 12px 14px;
1056
1130
  border-bottom: 1px solid var(--hairline);
1057
1131
  text-align: left;
1058
1132
  vertical-align: top;
@@ -1061,10 +1135,11 @@ th {
1061
1135
  position: sticky;
1062
1136
  top: 0;
1063
1137
  z-index: 2;
1064
- background: var(--surface-muted);
1065
- color: var(--body);
1138
+ background: color-mix(in srgb, var(--canvas-soft) 88%, var(--surface));
1139
+ color: var(--muted);
1066
1140
  font-size: 11px;
1067
1141
  font-weight: 700;
1142
+ letter-spacing: 0.02em;
1068
1143
  }
1069
1144
  td {
1070
1145
  color: var(--body);
@@ -1076,25 +1151,25 @@ tbody tr {
1076
1151
  transition: background-color var(--transition-fast);
1077
1152
  }
1078
1153
  tbody tr:hover {
1079
- background: #fff8f4;
1154
+ background: color-mix(in srgb, var(--orange) 4%, var(--surface));
1080
1155
  }
1081
1156
  tr.clickable {
1082
1157
  cursor: pointer;
1083
1158
  }
1084
1159
  tr.clickable:focus-within {
1085
- outline: 2px solid var(--orange);
1160
+ outline: 2px solid color-mix(in srgb, var(--orange) 55%, transparent);
1086
1161
  outline-offset: -2px;
1087
1162
  }
1088
1163
 
1089
1164
  .badge {
1090
1165
  display: inline-flex;
1091
1166
  align-items: center;
1092
- min-height: 22px;
1093
- padding: 2px 7px;
1094
- border: 1px solid currentColor;
1095
- border-radius: 999px;
1096
- background: transparent;
1097
- color: var(--muted);
1167
+ min-height: 24px;
1168
+ padding: 2px 10px;
1169
+ border: 1px solid transparent;
1170
+ border-radius: var(--radius-pill);
1171
+ background: var(--surface-muted);
1172
+ color: var(--body);
1098
1173
  font-size: 11px;
1099
1174
  font-weight: 700;
1100
1175
  line-height: 1.2;
@@ -1106,23 +1181,23 @@ tr.clickable:focus-within {
1106
1181
  .badge-completed,
1107
1182
  .badge-done,
1108
1183
  .liveness-active {
1109
- color: var(--green);
1110
- background: #f2faf5;
1184
+ color: color-mix(in srgb, var(--green) 78%, var(--ink));
1185
+ background: color-mix(in srgb, var(--mint) 45%, var(--surface));
1111
1186
  }
1112
1187
  .badge-failed,
1113
1188
  .badge-error,
1114
1189
  .liveness-stale {
1115
- color: var(--red);
1116
- background: #fff5f7;
1190
+ color: color-mix(in srgb, var(--red) 78%, var(--ink));
1191
+ background: color-mix(in srgb, var(--red) 8%, var(--surface));
1117
1192
  }
1118
1193
  .badge-partial-failed {
1119
- color: #9a3a4f;
1120
- background: #fff7f8;
1194
+ color: color-mix(in srgb, var(--red) 70%, var(--ink));
1195
+ background: color-mix(in srgb, var(--red) 6%, var(--surface));
1121
1196
  }
1122
1197
  .badge-running,
1123
1198
  .badge-started {
1124
1199
  color: var(--orange-active);
1125
- background: #fff5ed;
1200
+ background: var(--orange-soft);
1126
1201
  }
1127
1202
  .badge-pending,
1128
1203
  .badge-queued,
@@ -1134,8 +1209,8 @@ tr.clickable:focus-within {
1134
1209
  .badge-skipped,
1135
1210
  .badge-reused,
1136
1211
  .liveness-quiet {
1137
- color: var(--blue);
1138
- background: #f2f6fb;
1212
+ color: color-mix(in srgb, var(--blue) 75%, var(--ink));
1213
+ background: color-mix(in srgb, var(--blue) 8%, var(--surface));
1139
1214
  }
1140
1215
  .liveness-timeout-risk {
1141
1216
  color: var(--amber);
@@ -1159,8 +1234,10 @@ tr.clickable:focus-within {
1159
1234
  min-width: 0;
1160
1235
  padding: 0;
1161
1236
  overflow: hidden;
1162
- border-color: var(--hairline-strong);
1163
- box-shadow: 0 20px 48px rgba(38, 37, 30, 0.16);
1237
+ border: 1px solid var(--hairline);
1238
+ border-radius: var(--radius-lg);
1239
+ background: var(--surface);
1240
+ box-shadow: var(--shadow-soft);
1164
1241
  opacity: 0;
1165
1242
  pointer-events: none;
1166
1243
  transform: translateX(calc(100% + 24px));
@@ -1225,9 +1302,9 @@ body.is-resizing-dag-graph {
1225
1302
  grid-template-columns: minmax(0, 1fr) auto;
1226
1303
  gap: var(--space-3);
1227
1304
  align-items: start;
1228
- padding: var(--space-4) var(--space-4) var(--space-3);
1305
+ padding: var(--space-4) var(--space-5) var(--space-3);
1229
1306
  border-bottom: 1px solid var(--hairline);
1230
- background: var(--canvas-soft);
1307
+ background: color-mix(in srgb, var(--canvas-soft) 80%, var(--surface));
1231
1308
  }
1232
1309
  .dag-inspector-title {
1233
1310
  display: grid;
@@ -1255,8 +1332,8 @@ body.is-resizing-dag-graph {
1255
1332
  place-items: center;
1256
1333
  width: 32px;
1257
1334
  height: 32px;
1258
- border: 1px solid var(--hairline-strong);
1259
- border-radius: var(--radius-sm);
1335
+ border: 1px solid var(--hairline);
1336
+ border-radius: var(--radius-md);
1260
1337
  background: var(--surface);
1261
1338
  color: var(--body);
1262
1339
  cursor: pointer;
@@ -1265,19 +1342,27 @@ body.is-resizing-dag-graph {
1265
1342
  .dag-inspector-close:focus-visible {
1266
1343
  border-color: var(--orange);
1267
1344
  color: var(--orange-active);
1345
+ background: var(--orange-soft);
1268
1346
  outline: none;
1269
1347
  }
1270
1348
  .dag-inspector-tabs {
1271
1349
  display: flex;
1272
1350
  grid-column: 1 / -1;
1273
1351
  gap: 4px;
1274
- margin-top: 2px;
1352
+ margin-top: 4px;
1353
+ padding: 4px;
1354
+ border: 1px solid var(--hairline);
1355
+ border-radius: var(--radius-pill);
1356
+ background: var(--surface);
1357
+ width: fit-content;
1358
+ max-width: 100%;
1359
+ flex-wrap: wrap;
1275
1360
  }
1276
1361
  .dag-inspector-tab {
1277
- min-height: 32px;
1278
- padding: 0 10px;
1362
+ min-height: 30px;
1363
+ padding: 0 12px;
1279
1364
  border: 1px solid transparent;
1280
- border-radius: var(--radius-sm);
1365
+ border-radius: var(--radius-pill);
1281
1366
  background: transparent;
1282
1367
  color: var(--muted);
1283
1368
  font-size: 12px;
@@ -1290,9 +1375,9 @@ body.is-resizing-dag-graph {
1290
1375
  outline: none;
1291
1376
  }
1292
1377
  .dag-inspector-tab[aria-selected="true"] {
1293
- border-color: color-mix(in srgb, var(--orange) 55%, var(--hairline));
1294
- background: #fff5ed;
1295
- color: var(--orange-active);
1378
+ border-color: transparent;
1379
+ background: var(--ink);
1380
+ color: #fff;
1296
1381
  }
1297
1382
  .dag-inspector-content {
1298
1383
  min-height: 0;
@@ -1322,19 +1407,21 @@ body.is-resizing-dag-graph {
1322
1407
  }
1323
1408
  .dag-graph-reset {
1324
1409
  min-height: 32px;
1325
- padding: 0 10px;
1326
- border: 1px solid var(--hairline-strong);
1327
- border-radius: var(--radius-sm);
1410
+ padding: 0 12px;
1411
+ border: 1px solid var(--hairline);
1412
+ border-radius: var(--radius-pill);
1328
1413
  background: var(--surface);
1329
1414
  color: var(--ink);
1330
1415
  font-size: 12px;
1331
1416
  font-weight: 650;
1332
1417
  cursor: pointer;
1418
+ box-shadow: var(--shadow-panel);
1333
1419
  }
1334
1420
  .dag-graph-reset:hover,
1335
1421
  .dag-graph-reset:focus-visible {
1336
1422
  border-color: var(--orange);
1337
1423
  color: var(--orange-active);
1424
+ background: var(--orange-soft);
1338
1425
  outline: none;
1339
1426
  }
1340
1427
  .dag-graph-viewport {
@@ -1342,23 +1429,26 @@ body.is-resizing-dag-graph {
1342
1429
  max-height: 560px;
1343
1430
  overflow: auto;
1344
1431
  border: 1px solid var(--hairline);
1345
- border-radius: var(--radius-md);
1346
- background: var(--canvas-soft);
1432
+ border-radius: var(--radius-lg);
1433
+ background:
1434
+ radial-gradient(800px 280px at 0% 0%, rgb(241 216 203 / 28%), transparent 55%),
1435
+ var(--canvas-soft);
1347
1436
  scroll-behavior: auto;
1437
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 60%);
1348
1438
  }
1349
1439
  .dag-graph {
1350
1440
  display: block;
1351
1441
  }
1352
1442
  .dag-edge {
1353
1443
  fill: none;
1354
- stroke: var(--hairline-strong);
1355
- stroke-width: 2;
1444
+ stroke: color-mix(in srgb, var(--hairline-strong) 80%, var(--muted));
1445
+ stroke-width: 1.75;
1356
1446
  transition:
1357
1447
  opacity var(--transition-fast),
1358
1448
  stroke var(--transition-fast);
1359
1449
  }
1360
1450
  #dag-arrow path {
1361
- fill: var(--hairline-strong);
1451
+ fill: color-mix(in srgb, var(--hairline-strong) 80%, var(--muted));
1362
1452
  }
1363
1453
  .dag-graph-node {
1364
1454
  cursor: pointer;
@@ -1366,8 +1456,9 @@ body.is-resizing-dag-graph {
1366
1456
  }
1367
1457
  .dag-graph-node rect {
1368
1458
  fill: var(--surface);
1369
- stroke: var(--hairline-strong);
1459
+ stroke: var(--hairline);
1370
1460
  stroke-width: 1.5;
1461
+ filter: drop-shadow(0 1px 2px rgb(38 37 30 / 4%));
1371
1462
  }
1372
1463
  .dag-graph-node:hover rect,
1373
1464
  .dag-graph-node:focus-visible rect {
@@ -1379,17 +1470,18 @@ body.is-resizing-dag-graph {
1379
1470
  }
1380
1471
  .dag-graph-node.selected rect {
1381
1472
  stroke: var(--orange);
1382
- stroke-width: 3;
1473
+ stroke-width: 2.5;
1474
+ fill: color-mix(in srgb, var(--orange) 6%, var(--surface));
1383
1475
  }
1384
1476
  .dag-graph-node.status-running rect,
1385
1477
  .dag-graph-node.status-started rect {
1386
1478
  stroke: var(--orange);
1387
- fill: #fff7f0;
1479
+ fill: color-mix(in srgb, var(--orange) 8%, var(--surface));
1388
1480
  }
1389
1481
  .dag-graph-node.status-failed rect,
1390
1482
  .dag-graph-node.status-error rect {
1391
- stroke: var(--red);
1392
- fill: #fff7f8;
1483
+ stroke: color-mix(in srgb, var(--red) 70%, var(--hairline));
1484
+ fill: color-mix(in srgb, var(--red) 6%, var(--surface));
1393
1485
  }
1394
1486
  .dag-graph-node.status-succeeded:hover rect,
1395
1487
  .dag-graph-node.status-succeeded:focus-visible rect,
@@ -1399,15 +1491,15 @@ body.is-resizing-dag-graph {
1399
1491
  .dag-graph-node.status-completed:focus-visible rect,
1400
1492
  .dag-graph-node.status-done:hover rect,
1401
1493
  .dag-graph-node.status-done:focus-visible rect {
1402
- stroke: var(--green);
1403
- fill: #f2faf5;
1494
+ stroke: color-mix(in srgb, var(--green) 70%, var(--hairline));
1495
+ fill: color-mix(in srgb, var(--mint) 40%, var(--surface));
1404
1496
  }
1405
1497
  .dag-graph-node.selected.status-succeeded rect,
1406
1498
  .dag-graph-node.selected.status-finished rect,
1407
1499
  .dag-graph-node.selected.status-completed rect,
1408
1500
  .dag-graph-node.selected.status-done rect {
1409
- stroke: var(--green);
1410
- fill: #f2faf5;
1501
+ stroke: color-mix(in srgb, var(--green) 70%, var(--hairline));
1502
+ fill: color-mix(in srgb, var(--mint) 40%, var(--surface));
1411
1503
  }
1412
1504
  .dag-graph-node.status-skipped rect {
1413
1505
  stroke-dasharray: 5 4;
@@ -1861,16 +1953,16 @@ body.is-resizing-dag-graph {
1861
1953
  .spec-evidence-list li > i { flex-shrink: 0; margin-top: 2px; color: var(--muted); font-size: 13px; }
1862
1954
  .spec-evidence-list code { font-size: 11px; }
1863
1955
  .spec-evidence-time { margin-left: auto; color: var(--muted); font-size: 10px; font-variant-numeric: tabular-nums; white-space: nowrap; }
1864
- .spec-evidence-warning { display: flex; align-items: flex-start; gap: 8px; margin-top: var(--space-4); padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--amber) 50%, var(--hairline)); border-radius: var(--radius-sm); background: #fff8e7; color: var(--body); font-size: 12px; line-height: 1.6; }
1956
+ .spec-evidence-warning { display: flex; align-items: flex-start; gap: 8px; margin-top: var(--space-4); padding: 10px 12px; border: 1px solid var(--hairline); border-left: 3px solid color-mix(in srgb, var(--amber) 60%, var(--hairline)); border-radius: var(--radius-md); background: color-mix(in srgb, var(--amber) 8%, var(--surface)); color: var(--body); font-size: 12px; line-height: 1.6; }
1865
1957
  .spec-evidence-warning > i { flex-shrink: 0; margin-top: 2px; color: var(--amber); }
1866
- .spec-evidence-file-btn { display: flex; align-items: flex-start; gap: 6px; width: 100%; padding: 4px 0; background: none; border: none; text-align: left; cursor: pointer; color: inherit; font: inherit; line-height: 1.5; overflow-wrap: anywhere; border-radius: var(--radius-sm); }
1867
- .spec-evidence-file-btn:hover, .spec-evidence-file-btn:focus-visible { background: color-mix(in srgb, var(--accent, #2563eb) 8%, transparent); outline: none; }
1868
- .spec-evidence-file-btn:focus-visible { box-shadow: 0 0 0 2px var(--accent, #2563eb); }
1958
+ .spec-evidence-file-btn { display: flex; align-items: flex-start; gap: 6px; width: 100%; padding: 6px 8px; background: none; border: none; text-align: left; cursor: pointer; color: inherit; font: inherit; line-height: 1.5; overflow-wrap: anywhere; border-radius: var(--radius-md); }
1959
+ .spec-evidence-file-btn:hover, .spec-evidence-file-btn:focus-visible { background: var(--orange-soft); outline: none; }
1960
+ .spec-evidence-file-btn:focus-visible { box-shadow: 0 0 0 2px color-mix(in srgb, var(--orange) 35%, transparent); }
1869
1961
  .spec-evidence-detail { display: grid; gap: var(--space-3); }
1870
- .spec-evidence-back { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border: 1px solid var(--hairline); border-radius: var(--radius-sm); background: var(--surface, #fff); color: var(--ink); font-size: 12px; cursor: pointer; }
1871
- .spec-evidence-back:hover, .spec-evidence-back:focus-visible { background: color-mix(in srgb, var(--accent, #2563eb) 8%, var(--surface, #fff)); }
1962
+ .spec-evidence-back { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--hairline); border-radius: var(--radius-pill); background: var(--surface); color: var(--ink); font-size: 12px; font-weight: 650; cursor: pointer; }
1963
+ .spec-evidence-back:hover, .spec-evidence-back:focus-visible { background: var(--orange-soft); border-color: var(--orange); color: var(--orange-active); outline: none; }
1872
1964
  .spec-evidence-detail-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; color: var(--body); }
1873
- .spec-evidence-detail-content { min-height: 0; max-width: 100%; margin: 0; padding: var(--space-3); border: 1px solid var(--hairline); border-radius: var(--radius-sm); background: var(--surface, #fff); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; line-height: 1.6; }
1965
+ .spec-evidence-detail-content { min-height: 0; max-width: 100%; margin: 0; padding: var(--space-3); border: 1px solid var(--hairline); border-radius: var(--radius-md); background: var(--canvas-soft); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; line-height: 1.6; }
1874
1966
  .spec-evidence-detail-error { margin: 0; color: var(--red, #c00); font-size: 12px; }
1875
1967
  .spec-evidence-detail-truncated { margin: 0; color: var(--muted); font-size: 11px; }
1876
1968
 
@@ -1956,22 +2048,26 @@ body.is-resizing-dag-graph {
1956
2048
  place-items: center;
1957
2049
  width: 16px;
1958
2050
  height: 16px;
1959
- border: 1px solid var(--hairline-strong);
2051
+ border: 1.5px solid var(--hairline-strong);
1960
2052
  border-radius: 50%;
1961
2053
  color: var(--muted);
1962
2054
  font-size: 10px;
2055
+ background: var(--surface);
1963
2056
  }
1964
2057
  .step-marker.succeeded {
1965
- border-color: var(--green);
1966
- color: var(--green);
2058
+ border-color: color-mix(in srgb, var(--green) 55%, var(--hairline));
2059
+ color: color-mix(in srgb, var(--green) 75%, var(--ink));
2060
+ background: color-mix(in srgb, var(--mint) 40%, var(--surface));
1967
2061
  }
1968
2062
  .step-marker.running {
1969
2063
  border-color: var(--orange);
1970
2064
  color: var(--orange-active);
2065
+ background: var(--orange-soft);
1971
2066
  }
1972
2067
  .step-marker.failed {
1973
- border-color: var(--red);
1974
- color: var(--red);
2068
+ border-color: color-mix(in srgb, var(--red) 55%, var(--hairline));
2069
+ color: color-mix(in srgb, var(--red) 75%, var(--ink));
2070
+ background: color-mix(in srgb, var(--red) 8%, var(--surface));
1975
2071
  }
1976
2072
  .step-name {
1977
2073
  min-width: 0;
@@ -2053,7 +2149,8 @@ body.is-resizing-dag-graph {
2053
2149
  .dag-run-timeline-item:focus-visible {
2054
2150
  margin-inline: -8px;
2055
2151
  padding-inline: 8px;
2056
- background: #fff8f4;
2152
+ background: color-mix(in srgb, var(--orange) 4%, transparent);
2153
+ border-radius: var(--radius-md);
2057
2154
  outline: none;
2058
2155
  }
2059
2156
  .dag-run-timeline-rail {
@@ -2070,16 +2167,17 @@ body.is-resizing-dag-graph {
2070
2167
  border: 2px solid var(--surface);
2071
2168
  border-radius: 50%;
2072
2169
  background: var(--muted-soft);
2170
+ box-shadow: 0 0 0 1px var(--hairline);
2073
2171
  }
2074
2172
  .dag-run-timeline-dot.status-finished,
2075
2173
  .dag-run-timeline-dot.status-succeeded,
2076
2174
  .dag-run-timeline-dot.status-completed {
2077
- background: var(--green);
2175
+ background: color-mix(in srgb, var(--green) 75%, white);
2078
2176
  }
2079
2177
  .dag-run-timeline-dot.status-failed,
2080
2178
  .dag-run-timeline-dot.status-error,
2081
2179
  .dag-run-timeline-dot.status-partial_failed {
2082
- background: var(--red);
2180
+ background: color-mix(in srgb, var(--red) 75%, white);
2083
2181
  }
2084
2182
  .dag-run-timeline-dot.status-running,
2085
2183
  .dag-run-timeline-dot.status-started {
@@ -2107,8 +2205,8 @@ body.is-resizing-dag-graph {
2107
2205
 
2108
2206
  #failures-list .row-failed td:first-child,
2109
2207
  #failures-list .row-blocked td:first-child {
2110
- color: var(--red);
2111
- font-weight: 700;
2208
+ color: color-mix(in srgb, var(--red) 72%, var(--ink));
2209
+ font-weight: 650;
2112
2210
  }
2113
2211
 
2114
2212
  @media (max-width: 1320px) {
@@ -2154,7 +2252,7 @@ body.is-resizing-dag-graph {
2154
2252
  width: min(100% - 32px, 1680px);
2155
2253
  }
2156
2254
  .site-header {
2157
- grid-template-columns: auto auto 1fr;
2255
+ grid-template-columns: auto 1fr auto;
2158
2256
  grid-template-areas: "brand nav status" "crumb crumb crumb";
2159
2257
  row-gap: 8px;
2160
2258
  }
@@ -2267,54 +2365,61 @@ body.is-resizing-dag-graph {
2267
2365
 
2268
2366
  /* R3: object relation bar + recommended commands (copy-only) */
2269
2367
  .object-relations-panel {
2270
- padding: var(--space-3) var(--space-4);
2368
+ padding: var(--space-4) var(--space-5);
2369
+ background: color-mix(in srgb, var(--canvas-soft) 70%, var(--surface));
2271
2370
  }
2272
2371
 
2273
2372
  .object-relation-bar {
2274
2373
  display: flex;
2275
2374
  flex-wrap: wrap;
2276
2375
  align-items: center;
2277
- gap: var(--space-2);
2278
- font-size: 0.9rem;
2376
+ gap: var(--space-2) var(--space-3);
2377
+ font-size: 13px;
2279
2378
  }
2280
2379
 
2281
2380
  .object-relation-item {
2282
2381
  display: inline-flex;
2283
2382
  align-items: baseline;
2284
- gap: 0.25rem;
2383
+ gap: 0.35rem;
2384
+ padding: 4px 10px;
2385
+ border: 1px solid var(--hairline);
2386
+ border-radius: var(--radius-pill);
2387
+ background: var(--surface);
2285
2388
  }
2286
2389
 
2287
2390
  .object-relation-label {
2288
- color: var(--muted, #6b6560);
2289
- font-weight: 600;
2290
- font-size: 0.75rem;
2291
- text-transform: uppercase;
2292
- letter-spacing: 0.04em;
2391
+ color: var(--muted);
2392
+ font-weight: 650;
2393
+ font-size: 11px;
2394
+ letter-spacing: 0.02em;
2293
2395
  }
2294
2396
 
2295
2397
  .object-relation-sep {
2296
- color: var(--muted, #6b6560);
2297
- opacity: 0.7;
2398
+ color: var(--muted-soft);
2399
+ opacity: 0.8;
2298
2400
  user-select: none;
2299
2401
  }
2300
2402
 
2301
2403
  .object-link {
2302
- color: var(--accent, #8a5a2b);
2404
+ color: var(--orange-active);
2303
2405
  text-decoration: none;
2304
2406
  word-break: break-all;
2407
+ font-weight: 600;
2305
2408
  }
2306
2409
 
2307
2410
  .object-link:hover,
2308
2411
  .object-link:focus-visible {
2309
2412
  text-decoration: underline;
2413
+ text-underline-offset: 2px;
2310
2414
  }
2311
2415
 
2312
2416
  .recommended-command {
2313
- border: 1px solid var(--border, #e2ddd4);
2314
- border-radius: 8px;
2315
- padding: var(--space-3);
2417
+ border: 1px solid var(--hairline);
2418
+ border-radius: var(--radius-lg);
2419
+ padding: var(--space-4);
2316
2420
  margin: var(--space-2) 0;
2317
- background: #fbf9f4;
2421
+ background: var(--surface);
2422
+ box-shadow: var(--shadow-panel);
2318
2423
  }
2319
2424
 
2320
2425
  .recommended-command-head {
@@ -2326,14 +2431,15 @@ body.is-resizing-dag-graph {
2326
2431
  }
2327
2432
 
2328
2433
  .recommended-command-kind {
2329
- font-size: 0.75rem;
2330
- font-weight: 600;
2331
- color: var(--muted, #6b6560);
2434
+ font-size: 11px;
2435
+ font-weight: 700;
2436
+ color: var(--orange-active);
2437
+ letter-spacing: 0.03em;
2332
2438
  text-transform: uppercase;
2333
2439
  }
2334
2440
 
2335
2441
  .recommended-command-label {
2336
- font-weight: 600;
2442
+ font-weight: 650;
2337
2443
  }
2338
2444
 
2339
2445
  .recommended-command-body {
@@ -2345,36 +2451,44 @@ body.is-resizing-dag-graph {
2345
2451
 
2346
2452
  .recommended-command-text {
2347
2453
  flex: 1 1 12rem;
2348
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2349
- font-size: 0.85rem;
2454
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
2455
+ font-size: 12px;
2350
2456
  word-break: break-all;
2351
- background: #f0ebe3;
2352
- padding: 0.35rem 0.5rem;
2353
- border-radius: 4px;
2457
+ background: var(--canvas-soft);
2458
+ border: 1px solid var(--hairline);
2459
+ padding: 0.45rem 0.65rem;
2460
+ border-radius: var(--radius-md);
2354
2461
  }
2355
2462
 
2356
2463
  button.copy-command {
2357
2464
  appearance: none;
2358
- border: 1px solid var(--border, #d4cdc2);
2359
- background: #fff;
2360
- border-radius: 6px;
2361
- padding: 0.35rem 0.75rem;
2465
+ border: 1px solid var(--hairline);
2466
+ background: var(--surface);
2467
+ border-radius: var(--radius-md);
2468
+ padding: 0.4rem 0.85rem;
2469
+ color: var(--ink);
2470
+ font-size: 12px;
2471
+ font-weight: 650;
2362
2472
  cursor: pointer;
2363
- font-size: 0.85rem;
2364
2473
  }
2365
2474
 
2366
2475
  button.copy-command:hover,
2367
2476
  button.copy-command:focus-visible {
2368
- border-color: var(--accent, #8a5a2b);
2477
+ border-color: var(--orange);
2478
+ color: var(--orange-active);
2479
+ background: var(--orange-soft);
2480
+ outline: none;
2369
2481
  }
2370
2482
 
2371
2483
  .executed-facts {
2372
- border-left: 3px solid #6b8f71;
2484
+ border-left: 3px solid color-mix(in srgb, var(--green) 55%, var(--hairline));
2485
+ padding-left: var(--space-3);
2373
2486
  }
2374
2487
 
2375
2488
  .advisory-note {
2376
2489
  margin: 0 0 var(--space-2);
2377
2490
  font-size: 0.85rem;
2491
+ color: var(--muted);
2378
2492
  }
2379
2493
 
2380
2494
  .blocking-list {
@@ -2388,7 +2502,7 @@ button.copy-command:focus-visible {
2388
2502
 
2389
2503
  .blocking-meta {
2390
2504
  font-size: 0.85rem;
2391
- color: var(--muted, #6b6560);
2505
+ color: var(--muted);
2392
2506
  margin: 0.15rem 0 0.35rem;
2393
2507
  }
2394
2508
 
@@ -2396,18 +2510,19 @@ button.copy-command:focus-visible {
2396
2510
 
2397
2511
  /* R5: unified view states + information hierarchy */
2398
2512
  .view-state {
2399
- border-radius: var(--radius, 8px);
2400
- padding: var(--space-3, 0.75rem) var(--space-4, 1rem);
2401
- margin: 0 0 var(--space-3, 0.75rem);
2513
+ border-radius: var(--radius-lg);
2514
+ padding: var(--space-5) var(--space-6);
2515
+ margin: 0 0 var(--space-3);
2516
+ box-shadow: var(--shadow-panel);
2402
2517
  }
2403
2518
  .view-state-loading {
2404
- border: 1px dashed var(--border, #e2dcd4);
2405
- background: var(--surface-muted, #f7f4ef);
2406
- color: var(--muted, #6b6560);
2519
+ border: 1px dashed var(--hairline-strong);
2520
+ background: var(--canvas-soft);
2521
+ color: var(--muted);
2407
2522
  }
2408
2523
  .view-state-empty {
2409
- border: 1px solid var(--border, #e2dcd4);
2410
- background: var(--surface, #fffdf9);
2524
+ border: 1px solid var(--hairline);
2525
+ background: var(--surface);
2411
2526
  }
2412
2527
  .view-state-degraded {
2413
2528
  /* projection-fault styles also apply */