vibeops-tracker 0.1.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.
@@ -0,0 +1,420 @@
1
+ :root {
2
+ --bg: #0f1115;
3
+ --panel: #161a22;
4
+ --panel-2: #1c212c;
5
+ --border: #2a3140;
6
+ --text: #e5e9f0;
7
+ --muted: #8b94a7;
8
+ --accent: #6366f1;
9
+ --sev1: #6b7280;
10
+ --sev2: #3b82f6;
11
+ --sev3: #f59e0b;
12
+ --sev4: #f97316;
13
+ --sev5: #ef4444;
14
+ }
15
+
16
+ * { box-sizing: border-box; }
17
+
18
+ body {
19
+ margin: 0;
20
+ background: var(--bg);
21
+ color: var(--text);
22
+ font: 14px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
23
+ }
24
+
25
+ #topbar {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 14px;
29
+ padding: 12px 20px;
30
+ border-bottom: 1px solid var(--border);
31
+ background: var(--panel);
32
+ position: sticky;
33
+ top: 0;
34
+ z-index: 10;
35
+ }
36
+
37
+ #topbar h1 { font-size: 16px; margin: 0; font-weight: 700; letter-spacing: .02em; }
38
+
39
+ #project-select {
40
+ background: var(--panel-2);
41
+ color: var(--text);
42
+ border: 1px solid var(--border);
43
+ border-radius: 8px;
44
+ padding: 6px 10px;
45
+ font-size: 14px;
46
+ }
47
+
48
+ #issue-count { color: var(--muted); font-size: 13px; }
49
+
50
+ #search {
51
+ background: var(--panel-2);
52
+ color: var(--text);
53
+ border: 1px solid var(--border);
54
+ border-radius: 8px;
55
+ padding: 6px 12px;
56
+ font-size: 13px;
57
+ width: 220px;
58
+ }
59
+ #search:focus { outline: 2px solid var(--accent); outline-offset: -1px; }
60
+
61
+ #view-toggle { display: flex; margin-left: auto; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
62
+ .toggle-btn {
63
+ background: var(--panel-2);
64
+ color: var(--muted);
65
+ border: none;
66
+ padding: 7px 14px;
67
+ font-size: 13px;
68
+ cursor: pointer;
69
+ }
70
+ .toggle-btn.on { background: var(--accent); color: #fff; font-weight: 600; }
71
+
72
+ #help-link { text-decoration: none; display: inline-block; }
73
+
74
+ .col-head-right { display: flex; align-items: center; gap: 8px; }
75
+ .sweep-btn {
76
+ background: var(--panel-2);
77
+ color: var(--muted);
78
+ border: 1px solid var(--border);
79
+ border-radius: 999px;
80
+ padding: 2px 10px;
81
+ font-size: 11px;
82
+ cursor: pointer;
83
+ text-transform: none;
84
+ letter-spacing: 0;
85
+ }
86
+ .sweep-btn:hover { border-color: var(--accent); color: var(--text); }
87
+
88
+ #board.archive { display: block; }
89
+ .archive-list { display: flex; flex-direction: column; gap: 8px; max-width: 860px; margin: 0 auto; }
90
+ .archive-row {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 12px;
94
+ background: var(--panel);
95
+ border: 1px solid var(--border);
96
+ border-radius: 10px;
97
+ padding: 10px 14px;
98
+ cursor: pointer;
99
+ }
100
+ .archive-row:hover { border-color: var(--accent); }
101
+ .archive-title { font-weight: 600; flex: 1; overflow-wrap: anywhere; }
102
+ .archive-row .card-meta { margin-left: auto; flex-shrink: 0; }
103
+
104
+ .pill-closed { background: #374151; color: #d1d5db; }
105
+
106
+ .section-resolution .prose { border-left: 3px solid #14532d; }
107
+ .modified-files { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
108
+
109
+ .modal-backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, .5); z-index: 30; }
110
+ .modal {
111
+ position: fixed;
112
+ top: 50%;
113
+ left: 50%;
114
+ transform: translate(-50%, -50%);
115
+ width: min(460px, 92vw);
116
+ max-height: 88vh;
117
+ overflow-y: auto;
118
+ background: var(--panel);
119
+ border: 1px solid var(--border);
120
+ border-radius: 12px;
121
+ z-index: 31;
122
+ }
123
+ .modal-head { display: flex; justify-content: space-between; align-items: center; padding: 14px 16px; border-bottom: 1px solid var(--border); }
124
+ .modal-body { padding: 14px 16px; display: flex; flex-direction: column; gap: 12px; }
125
+ .modal-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--border); }
126
+
127
+ .form-row { display: flex; flex-direction: column; gap: 5px; }
128
+ .form-label { font-size: 11px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
129
+ .form-pills { display: flex; gap: 6px; flex-wrap: wrap; }
130
+ .form-pill {
131
+ border: 1px solid var(--border);
132
+ background: var(--panel-2);
133
+ color: var(--muted);
134
+ border-radius: 999px;
135
+ padding: 4px 12px;
136
+ cursor: pointer;
137
+ font-size: 13px;
138
+ }
139
+ .form-pill.on { background: var(--accent); border-color: var(--accent); color: #fff; }
140
+ .sev-dot {
141
+ width: 28px;
142
+ height: 28px;
143
+ border-radius: 50%;
144
+ border: 1px solid var(--border);
145
+ background: var(--panel-2);
146
+ color: var(--muted);
147
+ cursor: pointer;
148
+ font-size: 12px;
149
+ }
150
+ .sev-dot.on { background: var(--sev5); border-color: var(--sev5); color: #fff; }
151
+ .form-input {
152
+ background: var(--panel-2);
153
+ color: var(--text);
154
+ border: 1px solid var(--border);
155
+ border-radius: 8px;
156
+ padding: 8px 10px;
157
+ font-size: 13px;
158
+ font-family: inherit;
159
+ resize: vertical;
160
+ }
161
+ .form-input:focus { outline: 2px solid var(--accent); outline-offset: -1px; }
162
+ .form-error { color: var(--sev5); font-size: 13px; min-height: 16px; }
163
+
164
+ #board {
165
+ display: grid;
166
+ grid-template-columns: repeat(4, 1fr);
167
+ gap: 14px;
168
+ padding: 16px 20px;
169
+ align-items: start;
170
+ min-height: calc(100vh - 60px);
171
+ }
172
+
173
+ .col {
174
+ background: var(--panel);
175
+ border: 1px solid var(--border);
176
+ border-radius: 12px;
177
+ display: flex;
178
+ flex-direction: column;
179
+ max-height: calc(100vh - 92px);
180
+ }
181
+
182
+ .col-head {
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: space-between;
186
+ padding: 10px 12px;
187
+ border-bottom: 1px solid var(--border);
188
+ font-weight: 600;
189
+ font-size: 13px;
190
+ text-transform: uppercase;
191
+ letter-spacing: .05em;
192
+ color: var(--muted);
193
+ }
194
+
195
+ .col-count {
196
+ background: var(--panel-2);
197
+ border-radius: 999px;
198
+ padding: 1px 9px;
199
+ font-size: 12px;
200
+ }
201
+
202
+ .col-cards {
203
+ padding: 10px;
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: 8px;
207
+ overflow-y: auto;
208
+ min-height: 60px;
209
+ flex: 1;
210
+ }
211
+
212
+ .col-cards.drag-over { outline: 2px dashed var(--accent); outline-offset: -6px; border-radius: 10px; }
213
+
214
+ .empty { color: var(--muted); font-size: 13px; text-align: center; padding: 14px 0; }
215
+
216
+ .card {
217
+ background: var(--panel-2);
218
+ border: 1px solid var(--border);
219
+ border-radius: 10px;
220
+ padding: 10px 12px;
221
+ cursor: pointer;
222
+ transition: border-color .12s;
223
+ }
224
+
225
+ .card:hover { border-color: var(--accent); }
226
+ .card.dragging { opacity: .45; }
227
+ .card.drop-before { box-shadow: 0 -3px 0 0 var(--accent); }
228
+
229
+ .card-top { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
230
+ .card-id { color: var(--muted); font-size: 12px; font-family: ui-monospace, monospace; }
231
+ .card-title { font-weight: 600; font-size: 14px; margin-bottom: 6px; overflow-wrap: anywhere; }
232
+ .card-meta { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
233
+
234
+ .pill {
235
+ border-radius: 999px;
236
+ padding: 2px 9px;
237
+ font-size: 11px;
238
+ font-weight: 600;
239
+ text-transform: uppercase;
240
+ letter-spacing: .03em;
241
+ }
242
+
243
+ .pill-type-bug { background: #7f1d1d; color: #fecaca; }
244
+ .pill-type-improvement { background: #1e3a5f; color: #bfdbfe; }
245
+ .pill-type-feature { background: #14532d; color: #bbf7d0; }
246
+ .pill-type-other { background: #374151; color: #d1d5db; }
247
+
248
+ .pill-sev { color: #fff; }
249
+ .pill-sev-1 { background: var(--sev1); }
250
+ .pill-sev-2 { background: var(--sev2); }
251
+ .pill-sev-3 { background: var(--sev3); }
252
+ .pill-sev-4 { background: var(--sev4); }
253
+ .pill-sev-5 { background: var(--sev5); }
254
+
255
+ /* Editable pill: a native <select> styled as a colored pill with a caret.
256
+ Placed after the color rules so its caret background-image wins over their
257
+ `background` shorthand while the color is preserved. */
258
+ .pill-select {
259
+ appearance: none;
260
+ -webkit-appearance: none;
261
+ border: none;
262
+ cursor: pointer;
263
+ font: inherit;
264
+ font-size: 11px;
265
+ font-weight: 600;
266
+ line-height: 1.4;
267
+ text-transform: uppercase;
268
+ letter-spacing: .03em;
269
+ padding: 2px 22px 2px 10px;
270
+ /* Two-tone chevron: a dark halo so it reads on light severity pills (amber/orange),
271
+ a white core so it reads on the dark type pills. */
272
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5l3 3 3-3' fill='none' stroke='%23000000' stroke-opacity='0.55' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M3 4.5l3 3 3-3' fill='none' stroke='%23ffffff' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
273
+ background-repeat: no-repeat;
274
+ background-position: right 6px center;
275
+ background-size: 11px;
276
+ }
277
+ .pill-select:hover { filter: brightness(1.14); }
278
+ .pill-select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
279
+ .pill-select option { background: var(--panel-2); color: var(--text); text-transform: none; }
280
+
281
+ .tag {
282
+ background: var(--panel);
283
+ border: 1px solid var(--border);
284
+ color: var(--muted);
285
+ border-radius: 999px;
286
+ padding: 1px 8px;
287
+ font-size: 11px;
288
+ }
289
+
290
+ .card-age { color: var(--muted); font-size: 11px; margin-left: auto; }
291
+
292
+ #drawer-backdrop {
293
+ position: fixed;
294
+ inset: 0;
295
+ background: rgba(0, 0, 0, .45);
296
+ z-index: 20;
297
+ }
298
+
299
+ #drawer {
300
+ position: fixed;
301
+ top: 0;
302
+ right: 0;
303
+ bottom: 0;
304
+ width: min(560px, 94vw);
305
+ background: var(--panel);
306
+ border-left: 1px solid var(--border);
307
+ z-index: 21;
308
+ overflow-y: auto;
309
+ padding: 18px 20px 40px;
310
+ }
311
+
312
+ .drawer-head { display: flex; align-items: flex-start; gap: 10px; }
313
+ .drawer-head h2 { font-size: 17px; margin: 2px 0 4px; overflow-wrap: anywhere; }
314
+ .drawer-id { color: var(--muted); font-family: ui-monospace, monospace; font-size: 13px; }
315
+ .drawer-close {
316
+ margin-left: auto;
317
+ background: none;
318
+ color: var(--muted);
319
+ border: none;
320
+ font-size: 22px;
321
+ cursor: pointer;
322
+ }
323
+ .drawer-close:hover { color: var(--text); }
324
+
325
+ .drawer-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 10px 0 4px; }
326
+
327
+ .drawer-actions { display: flex; gap: 8px; margin: 14px 0; align-items: center; }
328
+
329
+ .btn {
330
+ background: var(--panel-2);
331
+ color: var(--text);
332
+ border: 1px solid var(--border);
333
+ border-radius: 8px;
334
+ padding: 7px 12px;
335
+ font-size: 13px;
336
+ cursor: pointer;
337
+ }
338
+ .btn:hover { border-color: var(--accent); }
339
+ .btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
340
+
341
+ #status-select {
342
+ background: var(--panel-2);
343
+ color: var(--text);
344
+ border: 1px solid var(--border);
345
+ border-radius: 8px;
346
+ padding: 7px 10px;
347
+ font-size: 13px;
348
+ }
349
+
350
+ .section { margin-top: 16px; }
351
+ .section h3 {
352
+ font-size: 12px;
353
+ text-transform: uppercase;
354
+ letter-spacing: .05em;
355
+ color: var(--muted);
356
+ margin: 0 0 6px;
357
+ }
358
+ .section .prose { white-space: pre-wrap; overflow-wrap: anywhere; background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
359
+
360
+ .ctx-list { margin: 0; padding-left: 18px; color: var(--text); }
361
+ .ctx-list li { margin: 2px 0; overflow-wrap: anywhere; }
362
+
363
+ details.ctx-json { margin-top: 8px; }
364
+ details.ctx-json summary { cursor: pointer; color: var(--muted); font-size: 13px; }
365
+ details.ctx-json pre {
366
+ background: #0b0d11;
367
+ border: 1px solid var(--border);
368
+ border-radius: 10px;
369
+ padding: 10px;
370
+ overflow-x: auto;
371
+ font-size: 12px;
372
+ max-height: 320px;
373
+ overflow-y: auto;
374
+ }
375
+
376
+ .comment { border-left: 3px solid var(--border); padding: 6px 10px; margin: 8px 0; }
377
+ .comment-head { color: var(--muted); font-size: 12px; margin-bottom: 3px; }
378
+ .comment-body { white-space: pre-wrap; overflow-wrap: anywhere; }
379
+
380
+ .comment-form { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
381
+ .comment-form textarea, .comment-form input {
382
+ background: var(--panel-2);
383
+ color: var(--text);
384
+ border: 1px solid var(--border);
385
+ border-radius: 8px;
386
+ padding: 8px 10px;
387
+ font-size: 13px;
388
+ font-family: inherit;
389
+ }
390
+ .comment-form textarea { min-height: 70px; resize: vertical; }
391
+ .comment-form .row { display: flex; gap: 8px; }
392
+ .comment-form input { width: 140px; }
393
+ .comment-form button { align-self: flex-end; }
394
+
395
+ .danger-zone { border-top: 1px solid var(--border); margin-top: 22px; padding-top: 14px; }
396
+ .danger-zone h3 { color: var(--sev5); opacity: .85; }
397
+ .btn-danger { background: #3a1717; border-color: #7f1d1d; color: #fecaca; }
398
+ .btn-danger:hover { background: #7f1d1d; border-color: var(--sev5); color: #fff; }
399
+ .btn-danger:disabled { opacity: .6; cursor: wait; }
400
+ .danger-confirm { display: flex; flex-direction: column; gap: 10px; }
401
+ .danger-warn { color: var(--sev5); font-size: 13px; line-height: 1.5; }
402
+ .danger-btns { display: flex; gap: 8px; }
403
+
404
+ .hint {
405
+ color: var(--muted);
406
+ max-width: 640px;
407
+ margin: 60px auto;
408
+ text-align: center;
409
+ grid-column: 1 / -1;
410
+ }
411
+ .hint code {
412
+ display: block;
413
+ background: var(--panel-2);
414
+ border: 1px solid var(--border);
415
+ border-radius: 8px;
416
+ padding: 10px;
417
+ margin-top: 10px;
418
+ font-size: 12px;
419
+ overflow-wrap: anywhere;
420
+ }