taskproof 0.3.0__py3-none-any.whl
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.
- taskproof/__init__.py +23 -0
- taskproof/__main__.py +8 -0
- taskproof/adapters/__init__.py +101 -0
- taskproof/adapters/base.py +228 -0
- taskproof/adapters/claude.py +46 -0
- taskproof/adapters/codex.py +140 -0
- taskproof/adapters/custom.py +61 -0
- taskproof/adapters/gemini.py +45 -0
- taskproof/adapters/opencode.py +46 -0
- taskproof/api/__init__.py +1 -0
- taskproof/api/server.py +822 -0
- taskproof/cli.py +1400 -0
- taskproof/concurrency.py +329 -0
- taskproof/dispatch.py +2289 -0
- taskproof/errors.py +55 -0
- taskproof/ledger.py +185 -0
- taskproof/models.py +155 -0
- taskproof/registry.py +1585 -0
- taskproof/schemas/result.json +58 -0
- taskproof/sql/schema.sql +70 -0
- taskproof/storage.py +372 -0
- taskproof/verify.py +615 -0
- taskproof/web/assets/MatrixView-BM8nu9s2.css +446 -0
- taskproof/web/assets/MatrixView-BM8nu9s2.css.gz +0 -0
- taskproof/web/assets/MatrixView-BMsawnxh.js +475 -0
- taskproof/web/assets/MatrixView-BMsawnxh.js.gz +0 -0
- taskproof/web/assets/ProjectsView-BcXcx5Gw.js +302 -0
- taskproof/web/assets/ProjectsView-BcXcx5Gw.js.gz +0 -0
- taskproof/web/assets/ProjectsView-CqNFL-fi.css +23 -0
- taskproof/web/assets/SettingsView-D_-waf0s.js +585 -0
- taskproof/web/assets/SettingsView-D_-waf0s.js.gz +0 -0
- taskproof/web/assets/SettingsView-aqTS3ubB.css +19 -0
- taskproof/web/assets/TaskDrawer-6JoGTH0s.js +597 -0
- taskproof/web/assets/TaskDrawer-6JoGTH0s.js.gz +0 -0
- taskproof/web/assets/TaskDrawer-N299VKzd.css +465 -0
- taskproof/web/assets/TaskDrawer-N299VKzd.css.gz +0 -0
- taskproof/web/assets/TasksView-BWhSHCHi.js +114 -0
- taskproof/web/assets/TasksView-BWhSHCHi.js.gz +0 -0
- taskproof/web/assets/TasksView-Bn08731V.css +30 -0
- taskproof/web/assets/icon-Dw-ohsdc.png +0 -0
- taskproof/web/assets/index-B-PLdDbR.js +75421 -0
- taskproof/web/assets/index-B-PLdDbR.js.gz +0 -0
- taskproof/web/assets/index-NKj7kbYl.css +1234 -0
- taskproof/web/assets/index-NKj7kbYl.css.gz +0 -0
- taskproof/web/index.html +23 -0
- taskproof-0.3.0.dist-info/METADATA +470 -0
- taskproof-0.3.0.dist-info/RECORD +51 -0
- taskproof-0.3.0.dist-info/WHEEL +5 -0
- taskproof-0.3.0.dist-info/entry_points.txt +2 -0
- taskproof-0.3.0.dist-info/licenses/LICENSE +201 -0
- taskproof-0.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
|
|
2
|
+
.tp-card[data-v-695467c5] {
|
|
3
|
+
display: block;
|
|
4
|
+
width: 100%;
|
|
5
|
+
position: relative;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
text-align: left;
|
|
8
|
+
background-color: var(--panel);
|
|
9
|
+
background-image: linear-gradient(var(--w), var(--w));
|
|
10
|
+
border: 1px solid var(--rule);
|
|
11
|
+
border-left: 3px solid var(--c);
|
|
12
|
+
border-radius: var(--r-card);
|
|
13
|
+
padding: 8px 10px 9px 11px;
|
|
14
|
+
color: var(--ink);
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
font: inherit;
|
|
17
|
+
}
|
|
18
|
+
.tp-card + .tp-card[data-v-695467c5] {
|
|
19
|
+
margin-top: 6px;
|
|
20
|
+
}
|
|
21
|
+
.tp-card[data-v-695467c5]:hover {
|
|
22
|
+
background-image: linear-gradient(var(--w), var(--w)), linear-gradient(var(--rule-2), var(--rule-2));
|
|
23
|
+
}
|
|
24
|
+
.tp-card[aria-expanded='true'][data-v-695467c5] {
|
|
25
|
+
box-shadow: 0 0 0 2px var(--accent);
|
|
26
|
+
}
|
|
27
|
+
.tp-card[data-v-695467c5]:focus-visible {
|
|
28
|
+
outline: 2px solid var(--accent);
|
|
29
|
+
outline-offset: 1px;
|
|
30
|
+
}
|
|
31
|
+
.line-1[data-v-695467c5] {
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: 7px;
|
|
35
|
+
}
|
|
36
|
+
.cid[data-v-695467c5] {
|
|
37
|
+
font: 10px/1 var(--mono);
|
|
38
|
+
color: var(--ink-3);
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
text-overflow: ellipsis;
|
|
41
|
+
white-space: nowrap;
|
|
42
|
+
}
|
|
43
|
+
.tail[data-v-695467c5] {
|
|
44
|
+
margin-left: auto;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
gap: 5px;
|
|
48
|
+
flex: none;
|
|
49
|
+
}
|
|
50
|
+
.stamp[data-v-695467c5] {
|
|
51
|
+
font: 600 9.5px/1 var(--mono);
|
|
52
|
+
color: var(--ink-3);
|
|
53
|
+
border: 1px solid var(--rule);
|
|
54
|
+
border-radius: 5px;
|
|
55
|
+
padding: 2px 5px;
|
|
56
|
+
}
|
|
57
|
+
.stamp.good[data-v-695467c5] {
|
|
58
|
+
color: var(--ok);
|
|
59
|
+
border-color: transparent;
|
|
60
|
+
background: var(--w-done);
|
|
61
|
+
}
|
|
62
|
+
.stamp.bad[data-v-695467c5] {
|
|
63
|
+
color: var(--c-failed);
|
|
64
|
+
border-color: transparent;
|
|
65
|
+
background: var(--w-failed);
|
|
66
|
+
}
|
|
67
|
+
/* The chevron is the disclosure affordance: it turns to point down while the
|
|
68
|
+
drawer is open. */
|
|
69
|
+
.chev[data-v-695467c5] {
|
|
70
|
+
font: 8px/1 var(--sans);
|
|
71
|
+
color: var(--ink-4);
|
|
72
|
+
transition: transform 0.15s;
|
|
73
|
+
}
|
|
74
|
+
.tp-card[aria-expanded='true'] .chev[data-v-695467c5] {
|
|
75
|
+
transform: rotate(90deg);
|
|
76
|
+
color: var(--ink-2);
|
|
77
|
+
}
|
|
78
|
+
.line-2[data-v-695467c5] {
|
|
79
|
+
display: -webkit-box;
|
|
80
|
+
margin-top: 5px;
|
|
81
|
+
font-size: 12px;
|
|
82
|
+
line-height: 1.45;
|
|
83
|
+
-webkit-line-clamp: 2;
|
|
84
|
+
-webkit-box-orient: vertical;
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
color: var(--ink);
|
|
87
|
+
}
|
|
88
|
+
.tp-card[data-status='done'] .line-2[data-v-695467c5] {
|
|
89
|
+
color: var(--ink-2);
|
|
90
|
+
}
|
|
91
|
+
.meta[data-v-695467c5] {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-wrap: wrap;
|
|
94
|
+
gap: 10px;
|
|
95
|
+
margin-top: 7px;
|
|
96
|
+
font: 9.5px/1 var(--mono);
|
|
97
|
+
color: var(--ink-4);
|
|
98
|
+
}
|
|
99
|
+
@media (prefers-reduced-motion: reduce) {
|
|
100
|
+
.chev[data-v-695467c5] {
|
|
101
|
+
transition: none;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.matrix-view[data-v-6af3c04d] {
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
min-height: 0;
|
|
109
|
+
flex: 1;
|
|
110
|
+
}
|
|
111
|
+
/* The matrix row: the project multi-select and the time range. Both scope the
|
|
112
|
+
whole board, six status columns (泳道) at once; there is no third control in
|
|
113
|
+
the normal state. */
|
|
114
|
+
.boardbar[data-v-6af3c04d] {
|
|
115
|
+
flex: none;
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
gap: 14px;
|
|
119
|
+
padding: 7px 16px;
|
|
120
|
+
border-bottom: 1px solid var(--rule-2);
|
|
121
|
+
font: 12px/1 var(--sans);
|
|
122
|
+
color: var(--ink-3);
|
|
123
|
+
}
|
|
124
|
+
.boardbar .fld[data-v-6af3c04d] {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 7px;
|
|
128
|
+
}
|
|
129
|
+
.boardbar .sel[data-v-6af3c04d] {
|
|
130
|
+
width: 128px;
|
|
131
|
+
}
|
|
132
|
+
.boardbar .sel-projects[data-v-6af3c04d] {
|
|
133
|
+
width: 240px;
|
|
134
|
+
}
|
|
135
|
+
/* The right-hand cluster: the hidden-column undo, then the capped warning.
|
|
136
|
+
Both are notes, not filters, so they ride at the far end of the row rather
|
|
137
|
+
than sitting inline with the two scoping controls. */
|
|
138
|
+
.boardbar .rest[data-v-6af3c04d] {
|
|
139
|
+
display: inline-flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
gap: 14px;
|
|
142
|
+
margin-left: auto;
|
|
143
|
+
}
|
|
144
|
+
/* The undo for hidden columns: not a filter, an escape hatch. It reads as a
|
|
145
|
+
button because clicking it brings every hidden column back. */
|
|
146
|
+
.boardbar .hidden-lanes[data-v-6af3c04d] {
|
|
147
|
+
display: inline-flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
padding: 4px 10px;
|
|
150
|
+
border: 1px solid var(--rule);
|
|
151
|
+
border-radius: var(--r-ctl);
|
|
152
|
+
background: var(--panel);
|
|
153
|
+
color: var(--ink-2);
|
|
154
|
+
font: 11.5px/1 var(--sans);
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
}
|
|
157
|
+
.boardbar .hidden-lanes[data-v-6af3c04d]:hover {
|
|
158
|
+
background: var(--raise);
|
|
159
|
+
}
|
|
160
|
+
/* The capped warning is a note, not an alarm: the amber of "incomplete", not
|
|
161
|
+
the red of "failed". While the budget can still rise it carries its own
|
|
162
|
+
"继续取回" so the reader can pull the older window; once the cap is reached
|
|
163
|
+
that button would be a dead click, so the note states the limit instead. */
|
|
164
|
+
.boardbar .cap[data-v-6af3c04d] {
|
|
165
|
+
display: inline-flex;
|
|
166
|
+
align-items: center;
|
|
167
|
+
gap: 10px;
|
|
168
|
+
font: 11.5px/1.2 var(--sans);
|
|
169
|
+
color: var(--c-timeout);
|
|
170
|
+
}
|
|
171
|
+
.boardbar .cap .grow[data-v-6af3c04d] {
|
|
172
|
+
flex: none;
|
|
173
|
+
padding: 4px 10px;
|
|
174
|
+
border: 1px solid var(--rule);
|
|
175
|
+
border-radius: var(--r-ctl);
|
|
176
|
+
background: var(--panel);
|
|
177
|
+
color: inherit;
|
|
178
|
+
font: 11.5px/1 var(--sans);
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
}
|
|
181
|
+
.boardbar .cap .grow[data-v-6af3c04d]:hover {
|
|
182
|
+
background: var(--raise);
|
|
183
|
+
}
|
|
184
|
+
.matrix[data-v-6af3c04d] {
|
|
185
|
+
flex: 1;
|
|
186
|
+
overflow: auto;
|
|
187
|
+
min-width: 0;
|
|
188
|
+
/* No top padding: a scroll container's padding-top is not covered by a
|
|
189
|
+
`top: 0` sticky header, so cards used to scroll through that strip. The
|
|
190
|
+
10px breathing room now lives in `.hd`'s own top padding, under its
|
|
191
|
+
opaque background. */
|
|
192
|
+
padding: 0 0 24px;
|
|
193
|
+
}
|
|
194
|
+
/* The column count is the *visible* column count -- `grid-template-columns`
|
|
195
|
+
is written from `lanes` (see `gridTracks`), so it rises and falls with the
|
|
196
|
+
show/hide switches. This must never be re-pinned to a literal: a track count
|
|
197
|
+
that disagrees with the header/cell loop pushes each project's lane into the
|
|
198
|
+
next column and the rows interleave, silently. 列数 = 可见列数. */
|
|
199
|
+
.grid[data-v-6af3c04d] {
|
|
200
|
+
display: grid;
|
|
201
|
+
align-content: start;
|
|
202
|
+
min-height: 100%;
|
|
203
|
+
padding: 0 10px;
|
|
204
|
+
}
|
|
205
|
+
.hd[data-v-6af3c04d] {
|
|
206
|
+
position: sticky;
|
|
207
|
+
top: 0;
|
|
208
|
+
z-index: 3;
|
|
209
|
+
display: flex;
|
|
210
|
+
flex-wrap: wrap;
|
|
211
|
+
align-content: flex-start;
|
|
212
|
+
justify-content: space-between;
|
|
213
|
+
align-items: center;
|
|
214
|
+
gap: 8px;
|
|
215
|
+
padding: 18px 10px 9px;
|
|
216
|
+
font: 500 12px/1 var(--sans);
|
|
217
|
+
color: var(--ink-2);
|
|
218
|
+
background: var(--bg);
|
|
219
|
+
}
|
|
220
|
+
/* The pinned band has to be opaque all the way down to the first card, not
|
|
221
|
+
just to the header's own box: a sliver of card scrolling up between the
|
|
222
|
+
header's lower edge and the first card reads as the header being
|
|
223
|
+
see-through (the TP-card40 穿透). `::after` extends the band across that
|
|
224
|
+
seam and -- because a pseudo-element is hit-tested as the box that owns it
|
|
225
|
+
-- every pixel of the seam answers `.hd` (or the `.fold` it carries) rather
|
|
226
|
+
than a card. `background: inherit` keeps the zebra columns' tint, and the
|
|
227
|
+
band's bottom rule moves here so the seam reads as part of the header. */
|
|
228
|
+
.hd[data-v-6af3c04d]::after {
|
|
229
|
+
content: '';
|
|
230
|
+
position: absolute;
|
|
231
|
+
left: 0;
|
|
232
|
+
right: 0;
|
|
233
|
+
top: 100%;
|
|
234
|
+
height: 10px;
|
|
235
|
+
background: inherit;
|
|
236
|
+
border-bottom: 1px solid var(--rule-2);
|
|
237
|
+
}
|
|
238
|
+
.hd .lb[data-v-6af3c04d] {
|
|
239
|
+
display: inline-flex;
|
|
240
|
+
align-items: center;
|
|
241
|
+
gap: 7px;
|
|
242
|
+
}
|
|
243
|
+
.hd .rt[data-v-6af3c04d] {
|
|
244
|
+
display: inline-flex;
|
|
245
|
+
align-items: center;
|
|
246
|
+
gap: 6px;
|
|
247
|
+
}
|
|
248
|
+
/* The band must answer as the header itself: the label and tally are
|
|
249
|
+
decoration, so they do not intercept a hit -- only the hide switch does. The
|
|
250
|
+
chip is a real control in `.hdctl`, not part of this decoration layer. */
|
|
251
|
+
.hd .lb[data-v-6af3c04d],
|
|
252
|
+
.hd .rt[data-v-6af3c04d] {
|
|
253
|
+
pointer-events: none;
|
|
254
|
+
}
|
|
255
|
+
.hd .rt .lane-hide[data-v-6af3c04d] {
|
|
256
|
+
pointer-events: auto;
|
|
257
|
+
}
|
|
258
|
+
.hd .rt .lane-hide[data-v-6af3c04d] * {
|
|
259
|
+
pointer-events: none;
|
|
260
|
+
}
|
|
261
|
+
/* The per-column hide switch. Same shape in every header, so the row reads as
|
|
262
|
+
one control repeated, not a menu. It is the header's own column it hides. */
|
|
263
|
+
.hd .lane-hide[data-v-6af3c04d] {
|
|
264
|
+
flex: none;
|
|
265
|
+
display: inline-flex;
|
|
266
|
+
align-items: center;
|
|
267
|
+
justify-content: center;
|
|
268
|
+
width: 20px;
|
|
269
|
+
height: 20px;
|
|
270
|
+
padding: 0;
|
|
271
|
+
border: 1px solid transparent;
|
|
272
|
+
border-radius: 5px;
|
|
273
|
+
background: transparent;
|
|
274
|
+
color: var(--ink-4);
|
|
275
|
+
cursor: pointer;
|
|
276
|
+
}
|
|
277
|
+
.hd .lane-hide[data-v-6af3c04d]:hover {
|
|
278
|
+
border-color: var(--rule);
|
|
279
|
+
background: var(--panel);
|
|
280
|
+
color: var(--ink-2);
|
|
281
|
+
}
|
|
282
|
+
/* The corner is the lane column's own header, so it is sticky on BOTH axes:
|
|
283
|
+
it rides with the header row vertically and with the lane column
|
|
284
|
+
horizontally. It therefore has to outrank both -- z 4 sits above the
|
|
285
|
+
header's 3 and the lane's 2 -- and carry its own opaque background, so
|
|
286
|
+
neither the first lane cell nor the first status column can show through
|
|
287
|
+
the intersection. The background is the prototype's corner colour (--bg). */
|
|
288
|
+
.hd.corner[data-v-6af3c04d] {
|
|
289
|
+
position: sticky;
|
|
290
|
+
top: 0;
|
|
291
|
+
left: 0;
|
|
292
|
+
z-index: 4;
|
|
293
|
+
justify-content: flex-start;
|
|
294
|
+
padding-left: 4px;
|
|
295
|
+
color: var(--ink-3);
|
|
296
|
+
font-size: 11.5px;
|
|
297
|
+
background: var(--bg);
|
|
298
|
+
}
|
|
299
|
+
/* Column zebra: every other status column carries a faint tint, on both the
|
|
300
|
+
header and the cells, so the band runs the full height and neighbouring
|
|
301
|
+
columns cannot be read into each other. */
|
|
302
|
+
.zcol[data-v-6af3c04d] {
|
|
303
|
+
background-color: var(--zebra);
|
|
304
|
+
}
|
|
305
|
+
.lane[data-v-6af3c04d] {
|
|
306
|
+
position: sticky;
|
|
307
|
+
left: 0;
|
|
308
|
+
z-index: 2;
|
|
309
|
+
padding: 12px 12px 12px 4px;
|
|
310
|
+
background-color: var(--bg);
|
|
311
|
+
border-right: 1px solid var(--rule-2);
|
|
312
|
+
border-bottom: 1px solid var(--rule);
|
|
313
|
+
}
|
|
314
|
+
.lane .name[data-v-6af3c04d] {
|
|
315
|
+
font: 600 12.5px/1 var(--mono);
|
|
316
|
+
color: var(--ink);
|
|
317
|
+
}
|
|
318
|
+
.lane .pth[data-v-6af3c04d] {
|
|
319
|
+
margin-top: 5px;
|
|
320
|
+
font: 10.5px/1.35 var(--mono);
|
|
321
|
+
color: var(--ink-4);
|
|
322
|
+
overflow-wrap: anywhere;
|
|
323
|
+
}
|
|
324
|
+
.lane .tally[data-v-6af3c04d] {
|
|
325
|
+
display: flex;
|
|
326
|
+
flex-wrap: wrap;
|
|
327
|
+
gap: 8px;
|
|
328
|
+
margin-top: 7px;
|
|
329
|
+
font: 10.5px/1 var(--mono);
|
|
330
|
+
color: var(--ink-3);
|
|
331
|
+
}
|
|
332
|
+
.lane .tally .bad[data-v-6af3c04d] {
|
|
333
|
+
color: var(--c-failed);
|
|
334
|
+
font-weight: 600;
|
|
335
|
+
}
|
|
336
|
+
/* Row separator: the lane and the cells each draw their own bottom border, and
|
|
337
|
+
because they share a grid row the two lines meet into one. */
|
|
338
|
+
.mcell[data-v-6af3c04d] {
|
|
339
|
+
min-height: 26px;
|
|
340
|
+
padding: 10px 6px;
|
|
341
|
+
border-bottom: 1px solid var(--rule);
|
|
342
|
+
}
|
|
343
|
+
.mcell .dash[data-v-6af3c04d] {
|
|
344
|
+
padding-top: 2px;
|
|
345
|
+
font: 11px/1 var(--mono);
|
|
346
|
+
color: var(--ink-4);
|
|
347
|
+
opacity: 0.4;
|
|
348
|
+
}
|
|
349
|
+
/* The per-column control band: the chip is the only thing on this full-width
|
|
350
|
+
line under the label row, so the header keeps one self-describing number. */
|
|
351
|
+
.hdctl[data-v-6af3c04d] {
|
|
352
|
+
flex: 1 0 100%;
|
|
353
|
+
display: flex;
|
|
354
|
+
align-items: center;
|
|
355
|
+
min-width: 0;
|
|
356
|
+
}
|
|
357
|
+
/* Do not style Element Plus's internal `.el-tooltip__trigger` to lay out this
|
|
358
|
+
control: that class also lands on .cap-chip, and its extra class selector
|
|
359
|
+
outranks .cap-chip's own display rule. Own the full-width layout here. */
|
|
360
|
+
.cap-dd[data-v-6af3c04d] {
|
|
361
|
+
display: block;
|
|
362
|
+
width: 100%;
|
|
363
|
+
min-width: 0;
|
|
364
|
+
}
|
|
365
|
+
/* Every column's chip. Its own click stops, but the Element Plus trigger still
|
|
366
|
+
sees the same click and opens the menu. */
|
|
367
|
+
.cap-chip[data-v-6af3c04d] {
|
|
368
|
+
display: inline-flex;
|
|
369
|
+
align-items: center;
|
|
370
|
+
justify-content: space-between;
|
|
371
|
+
gap: 8px;
|
|
372
|
+
width: 100%;
|
|
373
|
+
min-width: 0;
|
|
374
|
+
padding: 8px 9px;
|
|
375
|
+
border: 1px solid var(--rule);
|
|
376
|
+
border-radius: var(--r-ctl);
|
|
377
|
+
background: var(--panel);
|
|
378
|
+
color: var(--ink-2);
|
|
379
|
+
font: 11.5px/1 var(--sans);
|
|
380
|
+
text-align: left;
|
|
381
|
+
cursor: pointer;
|
|
382
|
+
}
|
|
383
|
+
.cap-chip[data-v-6af3c04d]:hover,
|
|
384
|
+
.cap-chip[data-v-6af3c04d]:focus-visible {
|
|
385
|
+
border-color: var(--rule-2);
|
|
386
|
+
background: var(--raise);
|
|
387
|
+
color: var(--ink);
|
|
388
|
+
}
|
|
389
|
+
.cap-chip-label[data-v-6af3c04d] {
|
|
390
|
+
flex: 1 1 auto;
|
|
391
|
+
min-width: 0;
|
|
392
|
+
overflow: hidden;
|
|
393
|
+
text-overflow: ellipsis;
|
|
394
|
+
white-space: nowrap;
|
|
395
|
+
}
|
|
396
|
+
.cap-caret[data-v-6af3c04d] {
|
|
397
|
+
flex: none;
|
|
398
|
+
color: var(--ink-4);
|
|
399
|
+
display: inline-flex;
|
|
400
|
+
align-items: center;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.cap-menu-popper {
|
|
404
|
+
min-width: 176px;
|
|
405
|
+
}
|
|
406
|
+
.cap-menu-popper .el-dropdown-menu__item {
|
|
407
|
+
justify-content: space-between;
|
|
408
|
+
gap: 16px;
|
|
409
|
+
min-height: 30px;
|
|
410
|
+
padding: 7px 10px;
|
|
411
|
+
font: 12px/1.2 var(--sans);
|
|
412
|
+
}
|
|
413
|
+
.cap-menu-popper .el-dropdown-menu__item.cap-menu-title {
|
|
414
|
+
color: var(--ink-4);
|
|
415
|
+
font-size: 10.5px;
|
|
416
|
+
cursor: default;
|
|
417
|
+
}
|
|
418
|
+
.cap-menu-popper .cap-check {
|
|
419
|
+
flex: none;
|
|
420
|
+
color: var(--accent);
|
|
421
|
+
font-weight: 700;
|
|
422
|
+
}
|
|
423
|
+
.sel-projects-popper .sel-head {
|
|
424
|
+
display: flex;
|
|
425
|
+
gap: 6px;
|
|
426
|
+
padding: 6px 8px;
|
|
427
|
+
border-bottom: 1px solid var(--rule-2);
|
|
428
|
+
}
|
|
429
|
+
.sel-projects-popper .sel-head button {
|
|
430
|
+
flex: 1;
|
|
431
|
+
font: 11.5px/1 var(--sans);
|
|
432
|
+
color: var(--accent);
|
|
433
|
+
background: var(--panel);
|
|
434
|
+
border: 1px solid var(--rule);
|
|
435
|
+
border-radius: var(--r-ctl);
|
|
436
|
+
padding: 5px 8px;
|
|
437
|
+
cursor: pointer;
|
|
438
|
+
}
|
|
439
|
+
.sel-projects-popper .sel-head button:hover:not(:disabled) {
|
|
440
|
+
background: var(--raise);
|
|
441
|
+
}
|
|
442
|
+
.sel-projects-popper .sel-head button:disabled {
|
|
443
|
+
color: var(--ink-4);
|
|
444
|
+
opacity: 0.6;
|
|
445
|
+
cursor: default;
|
|
446
|
+
}
|
|
Binary file
|