taskunity 2026.1__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.
@@ -0,0 +1,1394 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --bg: #eef1f7;
4
+ --bg-soft: #f7f9fc;
5
+ --card: #ffffff;
6
+ --text: #161d2b;
7
+ --muted: #6a7280;
8
+ --line: #e3e8f0;
9
+ --line-soft: #eef1f7;
10
+ --accent: #3567e0;
11
+ --accent-soft: #eaf0fd;
12
+ --accent-strong: #2954c8;
13
+ --backlog: #8992a3;
14
+ --working: #3567e0;
15
+ --blocked: #d05a48;
16
+ --done: #2f9e5f;
17
+ --radius: 14px;
18
+ --radius-sm: 10px;
19
+ --radius-pill: 999px;
20
+ --shadow-sm: 0 1px 2px rgba(20, 30, 50, .05), 0 1px 3px rgba(20, 30, 50, .04);
21
+ --shadow-md: 0 4px 14px rgba(20, 30, 50, .08);
22
+ --shadow-lg: 0 18px 44px rgba(20, 30, 50, .16);
23
+ --ring: 0 0 0 3px rgba(53, 103, 224, .22);
24
+ }
25
+ html[data-theme="light"] {
26
+ color-scheme: light;
27
+ }
28
+ html[data-theme="dark"] {
29
+ color-scheme: dark;
30
+ --bg: #0f1117;
31
+ --bg-soft: #161b26;
32
+ --card: #1c2333;
33
+ --text: #e4e9f3;
34
+ --muted: #7d8799;
35
+ --line: #2a3347;
36
+ --line-soft: #1e2638;
37
+ --accent: #4d7ef7;
38
+ --accent-soft: #1a2d5a;
39
+ --accent-strong: #6b95fa;
40
+ --backlog: #636d82;
41
+ --working: #4d7ef7;
42
+ --blocked: #d96b5a;
43
+ --done: #3ab56e;
44
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px rgba(0, 0, 0, .25);
45
+ --shadow-md: 0 4px 14px rgba(0, 0, 0, .4);
46
+ --shadow-lg: 0 18px 44px rgba(0, 0, 0, .55);
47
+ }
48
+ @media (prefers-color-scheme: dark) {
49
+ html:not([data-theme]) {
50
+ color-scheme: dark;
51
+ --bg: #0f1117;
52
+ --bg-soft: #161b26;
53
+ --card: #1c2333;
54
+ --text: #e4e9f3;
55
+ --muted: #7d8799;
56
+ --line: #2a3347;
57
+ --line-soft: #1e2638;
58
+ --accent: #4d7ef7;
59
+ --accent-soft: #1a2d5a;
60
+ --accent-strong: #6b95fa;
61
+ --backlog: #636d82;
62
+ --working: #4d7ef7;
63
+ --blocked: #d96b5a;
64
+ --done: #3ab56e;
65
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px rgba(0, 0, 0, .25);
66
+ --shadow-md: 0 4px 14px rgba(0, 0, 0, .4);
67
+ --shadow-lg: 0 18px 44px rgba(0, 0, 0, .55);
68
+ }
69
+ }
70
+ * { box-sizing: border-box; }
71
+ body {
72
+ margin: 0;
73
+ font-family: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
74
+ background:
75
+ radial-gradient(1100px 520px at 100% -10%, rgba(53, 103, 224, .07), transparent 60%),
76
+ radial-gradient(900px 480px at -5% 0%, rgba(118, 92, 214, .05), transparent 55%),
77
+ var(--bg);
78
+ color: var(--text);
79
+ -webkit-font-smoothing: antialiased;
80
+ text-rendering: optimizeLegibility;
81
+ }
82
+ html[data-theme="dark"] body {
83
+ background: var(--bg);
84
+ }
85
+ @media (prefers-color-scheme: dark) {
86
+ html:not([data-theme]) body {
87
+ background: var(--bg);
88
+ }
89
+ }
90
+ .topbar {
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: space-between;
94
+ gap: 1rem;
95
+ padding: .85rem 1.4rem;
96
+ background: rgba(255, 255, 255, .82);
97
+ backdrop-filter: saturate(160%) blur(10px);
98
+ border-bottom: 1px solid var(--line);
99
+ position: sticky;
100
+ top: 0;
101
+ z-index: 10;
102
+ }
103
+ html[data-theme="dark"] .topbar {
104
+ background: rgba(15, 17, 23, .88);
105
+ }
106
+ @media (prefers-color-scheme: dark) {
107
+ html:not([data-theme]) .topbar {
108
+ background: rgba(15, 17, 23, .88);
109
+ }
110
+ }
111
+ .topbar .brand { display: flex; align-items: center; gap: .8rem; }
112
+ .topbar .brand-mark {
113
+ width: 38px;
114
+ height: 38px;
115
+ border-radius: 11px;
116
+ background: linear-gradient(135deg, var(--accent), #6f8df0);
117
+ color: #fff;
118
+ display: grid;
119
+ place-items: center;
120
+ font-weight: 800;
121
+ font-size: 1.1rem;
122
+ box-shadow: var(--shadow-md);
123
+ flex: none;
124
+ }
125
+ h1, h2, h3, p { margin-top: 0; }
126
+ .topbar h1 { font-size: 1.15rem; margin-bottom: .1rem; letter-spacing: -.01em; }
127
+ .topbar p { margin-bottom: 0; color: var(--muted); font-size: .85rem; }
128
+ .settings-btn {
129
+ display: inline-flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ width: 2.1rem;
133
+ height: 2.1rem;
134
+ border-radius: var(--radius-sm);
135
+ background: transparent;
136
+ border: 1px solid var(--line);
137
+ color: var(--muted);
138
+ box-shadow: var(--shadow-sm);
139
+ padding: 0;
140
+ font-size: 1rem;
141
+ }
142
+ .settings-btn:hover { filter: none; background: var(--bg-soft); color: var(--text); }
143
+ .settings-popup {
144
+ position: absolute;
145
+ top: calc(100% + .5rem);
146
+ right: 0;
147
+ width: 200px;
148
+ background: var(--card);
149
+ border: 1px solid var(--line);
150
+ border-radius: var(--radius);
151
+ box-shadow: var(--shadow-lg);
152
+ padding: .75rem;
153
+ z-index: 100;
154
+ display: grid;
155
+ gap: .5rem;
156
+ }
157
+ .settings-popup[hidden] { display: none; }
158
+ .settings-popup-title {
159
+ font-size: .7rem;
160
+ font-weight: 700;
161
+ text-transform: uppercase;
162
+ letter-spacing: .04em;
163
+ color: var(--muted);
164
+ margin-bottom: .25rem;
165
+ }
166
+ .theme-options {
167
+ display: grid;
168
+ grid-template-columns: repeat(3, 1fr);
169
+ gap: .35rem;
170
+ }
171
+ .theme-option {
172
+ display: flex;
173
+ flex-direction: column;
174
+ align-items: center;
175
+ gap: .3rem;
176
+ padding: .45rem .2rem;
177
+ border: 1px solid var(--line);
178
+ border-radius: var(--radius-sm);
179
+ background: var(--bg-soft);
180
+ color: var(--muted);
181
+ font-size: .72rem;
182
+ font-weight: 650;
183
+ cursor: pointer;
184
+ box-shadow: none;
185
+ transition: background .12s, border-color .12s, color .12s;
186
+ }
187
+ .theme-option:hover { filter: none; background: var(--accent-soft); color: var(--accent); }
188
+ .theme-option.active { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
189
+ .settings-anchor { position: relative; }
190
+ .new-task-form { display: flex; gap: .5rem; }
191
+ input, select, textarea, button {
192
+ font: inherit;
193
+ border: 1px solid var(--line);
194
+ border-radius: var(--radius-sm);
195
+ padding: .55rem .7rem;
196
+ transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
197
+ }
198
+ input:focus, select:focus, textarea:focus {
199
+ outline: none;
200
+ border-color: var(--accent);
201
+ box-shadow: var(--ring);
202
+ }
203
+ button {
204
+ cursor: pointer;
205
+ border-color: transparent;
206
+ background: var(--accent);
207
+ color: white;
208
+ font-weight: 650;
209
+ box-shadow: var(--shadow-sm);
210
+ transition: background .15s ease, transform .08s ease, box-shadow .15s ease, filter .15s ease;
211
+ }
212
+ button:hover { filter: brightness(0.96); }
213
+ button:active { transform: translateY(1px); }
214
+ button:focus-visible { outline: none; box-shadow: var(--ring); }
215
+ .layout {
216
+ display: grid;
217
+ grid-template-columns: minmax(0, 1fr) 10px var(--side-pane-width, 430px);
218
+ column-gap: .55rem;
219
+ row-gap: 1.1rem;
220
+ padding: 1.1rem 1.4rem;
221
+ align-items: start;
222
+ }
223
+ .content { min-width: 0; }
224
+ .pane-resizer {
225
+ align-self: stretch;
226
+ width: 10px;
227
+ min-height: 10rem;
228
+ border: 0;
229
+ border-radius: var(--radius-pill);
230
+ background: transparent;
231
+ box-shadow: none;
232
+ cursor: col-resize;
233
+ position: sticky;
234
+ top: 5rem;
235
+ z-index: 6;
236
+ }
237
+ .pane-resizer::before {
238
+ content: "";
239
+ display: block;
240
+ width: 3px;
241
+ height: 100%;
242
+ margin: 0 auto;
243
+ border-radius: 999px;
244
+ background: color-mix(in srgb, var(--line) 75%, var(--accent) 25%);
245
+ opacity: 0;
246
+ transition: background .12s ease, opacity .12s ease;
247
+ }
248
+ .pane-resizer:hover::before,
249
+ .pane-resizer:focus-visible::before,
250
+ .layout.resizing .pane-resizer::before {
251
+ background: var(--accent);
252
+ opacity: 1;
253
+ }
254
+ .summary-grid {
255
+ display: grid;
256
+ grid-template-columns: repeat(4, minmax(0, 1fr));
257
+ gap: .85rem;
258
+ margin-bottom: 1.1rem;
259
+ }
260
+ .summary-card, .panel, .side-panel {
261
+ background: var(--card);
262
+ border: 1px solid var(--line);
263
+ border-radius: var(--radius);
264
+ box-shadow: var(--shadow-sm);
265
+ }
266
+ .summary-card {
267
+ padding: .95rem 1.05rem;
268
+ position: relative;
269
+ overflow: hidden;
270
+ transition: box-shadow .18s ease, transform .18s ease;
271
+ }
272
+ .summary-card::before {
273
+ content: "";
274
+ position: absolute;
275
+ left: 0; top: 0; bottom: 0;
276
+ width: 3px;
277
+ background: var(--accent);
278
+ opacity: .85;
279
+ }
280
+ .summary-card:nth-child(2)::before { background: var(--done); }
281
+ .summary-card:nth-child(3)::before { background: var(--working); }
282
+ .summary-card:nth-child(4)::before { background: var(--blocked); }
283
+ .summary-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); }
284
+ .summary-card .label { display: block; color: var(--muted); font-size: .76rem; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
285
+ .summary-card strong { font-size: 1.7rem; letter-spacing: -.02em; color: var(--accent); }
286
+ .summary-card:nth-child(2) strong { color: var(--done); }
287
+ .summary-card:nth-child(3) strong { color: var(--working); }
288
+ .summary-card:nth-child(4) strong { color: var(--blocked); }
289
+ .panel { padding: 1.1rem 1.15rem; margin-bottom: 1.1rem; }
290
+ .panel-heading {
291
+ display: flex;
292
+ align-items: center;
293
+ justify-content: space-between;
294
+ gap: 1rem;
295
+ margin-bottom: .85rem;
296
+ }
297
+ .panel-heading h2 { margin: 0; font-size: 1.02rem; letter-spacing: -.01em; }
298
+ .panel-heading span, .muted, .hint { color: var(--muted); }
299
+ .progress {
300
+ height: .75rem;
301
+ background: var(--line-soft);
302
+ border-radius: var(--radius-pill);
303
+ overflow: hidden;
304
+ }
305
+ .progress div { height: 100%; background: var(--done); }
306
+ .board {
307
+ display: grid;
308
+ grid-template-columns: repeat(4, minmax(0, 1fr));
309
+ gap: .85rem;
310
+ }
311
+ .column {
312
+ background: var(--bg-soft);
313
+ border: 1px solid var(--line-soft);
314
+ border-radius: var(--radius);
315
+ padding: .7rem;
316
+ min-height: 12rem;
317
+ }
318
+ .column h3 {
319
+ display: flex;
320
+ justify-content: space-between;
321
+ align-items: center;
322
+ color: var(--muted);
323
+ font-size: .76rem;
324
+ text-transform: uppercase;
325
+ letter-spacing: .05em;
326
+ margin-bottom: .55rem;
327
+ }
328
+ .column h3 span {
329
+ background: var(--card);
330
+ border: 1px solid var(--line);
331
+ border-radius: var(--radius-pill);
332
+ min-width: 1.4rem;
333
+ text-align: center;
334
+ padding: .05rem .4rem;
335
+ font-size: .72rem;
336
+ }
337
+ .task-card {
338
+ display: block;
339
+ width: 100%;
340
+ text-align: left;
341
+ background: var(--card);
342
+ color: var(--text);
343
+ border: 1px solid var(--line);
344
+ border-radius: var(--radius-sm);
345
+ margin-bottom: .6rem;
346
+ padding: .8rem;
347
+ box-shadow: var(--shadow-sm);
348
+ transition: box-shadow .16s ease, transform .12s ease, border-color .16s ease;
349
+ }
350
+ .task-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); border-color: color-mix(in srgb, var(--accent) 35%, var(--line)); }
351
+ .timeline-row:hover { border-color: var(--line); }
352
+ .task-card strong, .task-card small { display: block; }
353
+ .task-card strong { font-size: .9rem; line-height: 1.25; }
354
+ .task-card small { color: var(--muted); margin-top: .18rem; font-size: .76rem; }
355
+ .task-card p { color: var(--muted); font-size: .8rem; margin: .4rem 0; }
356
+ .meta { display: flex; flex-wrap: wrap; gap: .35rem; }
357
+ .meta span {
358
+ background: #eef2f8;
359
+ border-radius: 999px;
360
+ padding: .15rem .45rem;
361
+ color: var(--muted);
362
+ font-size: .75rem;
363
+ }
364
+ .meta span.project { background: var(--accent-soft); color: var(--accent); font-weight: 650; }
365
+ .mini-progress {
366
+ height: .35rem;
367
+ background: #e9edf4;
368
+ border-radius: 999px;
369
+ overflow: hidden;
370
+ margin-top: .55rem;
371
+ }
372
+ .mini-progress div { height: 100%; background: var(--working); }
373
+ .filter-bar {
374
+ display: flex;
375
+ flex-wrap: wrap;
376
+ align-items: center;
377
+ gap: .55rem;
378
+ margin-bottom: .9rem;
379
+ }
380
+ .filter-bar .spacer { flex: 1; }
381
+ .filter-menu { position: relative; }
382
+ .filter-menu > summary {
383
+ list-style: none;
384
+ display: inline-flex;
385
+ align-items: center;
386
+ gap: .4rem;
387
+ background: var(--card);
388
+ border: 1px solid var(--line);
389
+ border-radius: var(--radius-sm);
390
+ padding: .45rem .8rem;
391
+ font-size: .85rem;
392
+ font-weight: 650;
393
+ color: var(--text);
394
+ cursor: pointer;
395
+ user-select: none;
396
+ box-shadow: var(--shadow-sm);
397
+ transition: background .14s ease, border-color .14s ease;
398
+ }
399
+ .filter-menu > summary::-webkit-details-marker { display: none; }
400
+ .filter-menu > summary:hover { background: var(--bg-soft); }
401
+ .filter-menu[open] > summary { border-color: var(--accent); color: var(--accent); }
402
+ .filter-menu > summary svg { color: var(--accent); }
403
+ .filter-pop {
404
+ position: absolute;
405
+ z-index: 30;
406
+ top: calc(100% + .45rem);
407
+ left: 0;
408
+ width: 340px;
409
+ max-width: 94vw;
410
+ background: var(--card);
411
+ border: 1px solid var(--line);
412
+ border-radius: var(--radius);
413
+ box-shadow: var(--shadow-lg);
414
+ padding: 1rem;
415
+ display: grid;
416
+ gap: 1rem;
417
+ }
418
+ .add-filter { display: grid; gap: .35rem; }
419
+ .add-filter + .add-filter { border-top: 1px solid var(--line); padding-top: .85rem; }
420
+ .add-label { font-size: .7rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-weight: 700; }
421
+ .add-row { display: flex; gap: .45rem; flex-wrap: wrap; align-items: center; }
422
+ .add-row input, .add-row select { flex: 1 1 8rem; min-width: 0; padding: .45rem .55rem; font-size: .85rem; }
423
+ .add-row button { flex: 1 1 100%; padding: .5rem .7rem; font-size: .82rem; }
424
+ .project-checks { display: grid; gap: .3rem; max-height: 220px; overflow-y: auto; }
425
+ .project-check { display: flex; align-items: center; gap: .45rem; font-size: .85rem; cursor: pointer; }
426
+ .project-check input { margin: 0; }
427
+ .swatch { width: .8rem; height: .8rem; border-radius: 50%; flex: none; box-shadow: inset 0 0 0 1px rgba(0,0,0,.12); }
428
+ .project-picker { position: relative; display: grid; }
429
+ .project-dd { position: relative; }
430
+ .project-dd > summary {
431
+ list-style: none;
432
+ display: flex;
433
+ align-items: center;
434
+ justify-content: space-between;
435
+ gap: .5rem;
436
+ width: 100%;
437
+ padding: .55rem .7rem;
438
+ border: 1px solid var(--line);
439
+ border-radius: var(--radius-sm);
440
+ background: var(--card);
441
+ font-size: .92rem;
442
+ font-weight: 400;
443
+ cursor: pointer;
444
+ user-select: none;
445
+ transition: border-color .15s ease, box-shadow .15s ease;
446
+ }
447
+ .project-dd > summary::-webkit-details-marker { display: none; }
448
+ .project-dd[open] > summary { border-color: var(--accent); box-shadow: var(--ring); }
449
+ .project-dd-current { display: inline-flex; align-items: center; gap: .5rem; min-width: 0; }
450
+ .project-dd-current .muted { font-weight: 400; }
451
+ .project-dd .chev { color: var(--muted); font-size: .7rem; transition: transform .15s ease; }
452
+ .project-dd[open] .chev { transform: rotate(180deg); }
453
+ .project-dd-menu {
454
+ position: absolute;
455
+ z-index: 40;
456
+ top: calc(100% + .35rem);
457
+ left: 0;
458
+ right: 0;
459
+ background: var(--card);
460
+ border: 1px solid var(--line);
461
+ border-radius: var(--radius-sm);
462
+ box-shadow: var(--shadow-lg);
463
+ padding: .35rem;
464
+ display: grid;
465
+ gap: .1rem;
466
+ max-height: 260px;
467
+ overflow-y: auto;
468
+ }
469
+ .project-dd-item {
470
+ display: flex;
471
+ align-items: center;
472
+ gap: .55rem;
473
+ width: 100%;
474
+ text-align: left;
475
+ background: transparent;
476
+ color: var(--text);
477
+ border: 0;
478
+ border-radius: 8px;
479
+ padding: .5rem .55rem;
480
+ font-size: .9rem;
481
+ font-weight: 400;
482
+ box-shadow: none;
483
+ }
484
+ .project-dd-item:hover { background: var(--bg-soft); }
485
+ .project-dd-item.selected { background: var(--accent-soft); color: var(--accent-strong); font-weight: 600; }
486
+ .project-dd-new { border-top: 1px solid var(--line-soft); margin-top: .25rem; padding-top: .35rem; }
487
+ .project-dd-input { width: 100%; font-size: .88rem; padding: .45rem .55rem; }
488
+ .sort-form { display: inline-flex; align-items: center; }
489
+ .sort-label { display: inline-flex; align-items: center; gap: .4rem; font-size: .78rem; color: var(--muted); font-weight: 650; }
490
+ .sort-label select { padding: .35rem .5rem; font-size: .82rem; border-radius: .5rem; border: 1px solid var(--line); }
491
+ .priority-tag { display: inline-block; font-size: .72rem; font-weight: 650; text-transform: capitalize; padding: .12rem .5rem; border-radius: var(--radius-pill); background: var(--line-soft); color: var(--muted); }
492
+ .priority-tag.high { background: #fdeede; color: #b5651d; }
493
+ .priority-tag.critical { background: #fbe2dd; color: var(--blocked); }
494
+ .priority-tag.low { background: var(--line-soft); color: #8992a3; }
495
+ .task-id-footer { margin-top: 1rem; padding-top: .75rem; border-top: 1px solid var(--line); font-size: .78rem; color: var(--muted); }
496
+ .project-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: .85rem; margin-bottom: 1.25rem; }
497
+ .project-card { border: 1px solid var(--line); border-left: 4px solid var(--accent); border-radius: var(--radius-sm); padding: .8rem .9rem; background: var(--card); box-shadow: var(--shadow-sm); transition: box-shadow .16s ease, transform .12s ease; }
498
+ .project-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); }
499
+ .project-card-head { display: flex; align-items: center; gap: .45rem; margin-bottom: .35rem; }
500
+ .project-card p { margin: 0 0 .5rem; font-size: .82rem; color: var(--text); }
501
+ .project-card p.muted { color: var(--muted); font-style: italic; }
502
+ .project-edit summary { font-size: .78rem; color: var(--accent); cursor: pointer; }
503
+ .project-form { display: grid; gap: .55rem; margin-top: .5rem; }
504
+ .project-form label { display: grid; gap: .25rem; font-size: .78rem; font-weight: 650; color: var(--muted); }
505
+ .project-form input { padding: .4rem .55rem; font-size: .85rem; border: 1px solid var(--line); border-radius: .5rem; }
506
+ .project-form input[type="color"] { padding: .1rem; height: 2.1rem; width: 100%; }
507
+ .project-form button { justify-self: start; padding: .45rem .9rem; }
508
+ .project-form-row { display: grid; grid-template-columns: 1fr auto; gap: .55rem; }
509
+ .new-project { max-width: 460px; border-top: 1px solid var(--line); padding-top: 1rem; }
510
+ .pills { display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
511
+ .no-filters { font-size: .82rem; }
512
+ .pill {
513
+ display: inline-flex;
514
+ align-items: center;
515
+ gap: .35rem;
516
+ background: var(--accent-soft);
517
+ color: var(--accent-strong);
518
+ border: 1px solid #d4e0fa;
519
+ border-radius: var(--radius-pill);
520
+ padding: .28rem .35rem .28rem .7rem;
521
+ font-size: .8rem;
522
+ font-weight: 600;
523
+ cursor: pointer;
524
+ box-shadow: none;
525
+ transition: background .14s ease, border-color .14s ease;
526
+ }
527
+ .pill:hover { background: #dce7fc; }
528
+ .pill .x {
529
+ display: inline-flex;
530
+ align-items: center;
531
+ justify-content: center;
532
+ width: 1.05rem;
533
+ height: 1.05rem;
534
+ border-radius: var(--radius-pill);
535
+ background: rgba(41, 84, 200, .14);
536
+ font-size: .9rem;
537
+ line-height: 1;
538
+ }
539
+ .pill.clear { background: transparent; border-color: var(--line); color: var(--muted); padding: .28rem .7rem; }
540
+ .pill.clear:hover { background: #f0f3f9; }
541
+ .btn-link {
542
+ display: inline-block;
543
+ text-decoration: none;
544
+ background: var(--card);
545
+ color: var(--text);
546
+ border: 1px solid var(--line);
547
+ border-radius: var(--radius-sm);
548
+ padding: .45rem .8rem;
549
+ font-weight: 650;
550
+ font-size: .82rem;
551
+ box-shadow: var(--shadow-sm);
552
+ transition: background .14s ease, box-shadow .14s ease, transform .1s ease;
553
+ }
554
+ .btn-link:hover { background: var(--bg-soft); box-shadow: var(--shadow-md); }
555
+ .git-chip {
556
+ display: inline-flex;
557
+ align-items: center;
558
+ gap: .4rem;
559
+ padding: .32rem .55rem;
560
+ border: 1px solid var(--line);
561
+ border-radius: var(--radius-pill);
562
+ background: var(--card);
563
+ box-shadow: var(--shadow-sm);
564
+ font-size: .78rem;
565
+ color: var(--text);
566
+ }
567
+ .git-chip svg { color: var(--muted); flex: none; }
568
+ .git-chip.untracked { color: var(--muted); }
569
+ .git-branch { font-weight: 650; font-variant-numeric: tabular-nums; }
570
+ .git-badge {
571
+ display: inline-flex;
572
+ align-items: center;
573
+ font-size: .7rem;
574
+ font-weight: 700;
575
+ padding: .05rem .4rem;
576
+ border-radius: var(--radius-pill);
577
+ background: var(--bg-soft);
578
+ color: var(--muted);
579
+ font-variant-numeric: tabular-nums;
580
+ }
581
+ .git-badge.ahead { background: var(--accent-soft); color: var(--accent); }
582
+ .git-badge.behind { background: #fdeede; color: #b06a16; }
583
+ .git-badge.dirty { background: #fceae7; color: var(--blocked); }
584
+ .git-badge.ok { background: #e6f5ec; color: var(--done); }
585
+ .git-badge.warn { background: var(--bg-soft); color: var(--muted); }
586
+ .git-sync-form { display: inline; margin: 0; }
587
+ .git-sync-btn {
588
+ background: var(--accent);
589
+ color: #fff;
590
+ border: none;
591
+ border-radius: var(--radius-pill);
592
+ padding: .26rem .7rem;
593
+ font-size: .74rem;
594
+ font-weight: 700;
595
+ box-shadow: var(--shadow-sm);
596
+ }
597
+ .git-sync-btn.secondary {
598
+ background: var(--bg-soft);
599
+ color: var(--text);
600
+ border: 1px solid var(--line);
601
+ }
602
+ .git-toast {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: .75rem;
606
+ margin: .6rem 0 0;
607
+ padding: .55rem .65rem .55rem .85rem;
608
+ border: 1px solid var(--line);
609
+ border-left: 3px solid var(--accent);
610
+ border-radius: var(--radius-sm);
611
+ background: linear-gradient(180deg, var(--accent-soft), var(--card));
612
+ color: var(--text);
613
+ font-size: .84rem;
614
+ box-shadow: var(--shadow-sm);
615
+ animation: toastIn .25s ease both, toastOut .4s ease 6s forwards;
616
+ }
617
+ .git-toast-msg { flex: 1; }
618
+ .git-toast-close {
619
+ flex: none;
620
+ width: 1.5rem;
621
+ height: 1.5rem;
622
+ padding: 0;
623
+ border: none;
624
+ border-radius: var(--radius-pill);
625
+ background: transparent;
626
+ color: var(--muted);
627
+ font-size: 1.1rem;
628
+ line-height: 1;
629
+ box-shadow: none;
630
+ }
631
+ .git-toast-close:hover { filter: none; background: rgba(20, 30, 50, .08); color: var(--text); }
632
+ @keyframes toastIn {
633
+ from { opacity: 0; transform: translateY(-6px); }
634
+ to { opacity: 1; transform: translateY(0); }
635
+ }
636
+ @keyframes toastOut {
637
+ to { opacity: 0; transform: translateY(-6px); height: 0; margin: 0; padding-top: 0; padding-bottom: 0; border-width: 0; }
638
+ }
639
+ .view-bar {
640
+ display: flex;
641
+ flex-wrap: wrap;
642
+ align-items: center;
643
+ justify-content: space-between;
644
+ gap: .65rem;
645
+ margin-bottom: 1rem;
646
+ }
647
+ .view-switch { display: inline-flex; gap: 0; flex-wrap: wrap; background: var(--bg-soft); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: .22rem; box-shadow: inset 0 1px 2px rgba(20,30,50,.04); }
648
+ .view-switch button {
649
+ background: transparent;
650
+ color: var(--muted);
651
+ border: 0;
652
+ padding: .42rem .9rem;
653
+ font-size: .84rem;
654
+ font-weight: 650;
655
+ border-radius: 8px;
656
+ box-shadow: none;
657
+ }
658
+ .view-switch button:hover { color: var(--text); }
659
+ .view-switch button.active { background: var(--accent-soft); color: var(--accent); box-shadow: var(--shadow-sm); }
660
+ .new-task-form { display: flex; gap: .5rem; }
661
+ .task-table { width: 100%; border-collapse: collapse; font-size: .88rem; }
662
+ .task-table th {
663
+ text-align: left;
664
+ font-size: .7rem;
665
+ text-transform: uppercase;
666
+ letter-spacing: .04em;
667
+ color: var(--muted);
668
+ padding: .4rem .55rem;
669
+ border-bottom: 1px solid var(--line);
670
+ }
671
+ .task-table th:first-child { padding-left: 0; }
672
+ .task-table th:last-child { padding-right: 0; }
673
+ .task-table td { padding: .5rem .55rem; border-bottom: 1px solid var(--line); vertical-align: middle; }
674
+ .task-row { cursor: pointer; transition: background .12s ease; }
675
+ .task-row:hover td { background: var(--accent-soft); }
676
+ .table-sort {
677
+ width: 100%;
678
+ display: inline-flex;
679
+ align-items: center;
680
+ justify-content: space-between;
681
+ gap: .35rem;
682
+ background: transparent;
683
+ color: var(--muted);
684
+ border: 0;
685
+ box-shadow: none;
686
+ padding: 0;
687
+ font-size: .72rem;
688
+ text-transform: uppercase;
689
+ letter-spacing: .04em;
690
+ }
691
+ .table-sort.active { color: var(--accent); }
692
+ .table-sort:hover { filter: none; color: var(--accent-strong); }
693
+ .task-table .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; color: var(--muted); font-size: .8rem; white-space: nowrap; }
694
+ .task-table .project { background: var(--accent-soft); color: var(--accent); border-radius: var(--radius-pill); padding: .12rem .5rem; font-size: .75rem; font-weight: 650; }
695
+ .task-table .mini-progress { width: 100px; margin: 0; }
696
+ .status-pill {
697
+ display: inline-block;
698
+ border-radius: 999px;
699
+ padding: .12rem .55rem;
700
+ font-size: .74rem;
701
+ font-weight: 650;
702
+ color: #fff;
703
+ background: var(--backlog);
704
+ }
705
+ .status-pill.working { background: var(--working); }
706
+ .status-pill.blocked { background: var(--blocked); }
707
+ .status-pill.done { background: var(--done); }
708
+ .calendar-headline { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; margin-bottom: .6rem; }
709
+ .schedule-range { color: var(--muted); font-size: .82rem; margin: 0; font-weight: 700; }
710
+ .calendar-subtle { color: var(--muted); font-size: .82rem; margin: 0; }
711
+ .calendar-nav {
712
+ display: inline-flex;
713
+ align-items: center;
714
+ gap: .45rem;
715
+ margin-right: auto;
716
+ flex-wrap: wrap;
717
+ }
718
+ .calendar-nav-btn,
719
+ .calendar-jump button {
720
+ display: inline-flex;
721
+ align-items: center;
722
+ justify-content: center;
723
+ min-width: 2.1rem;
724
+ min-height: 2.1rem;
725
+ border-radius: var(--radius-sm);
726
+ border: 1px solid var(--line);
727
+ background: var(--card);
728
+ color: var(--text);
729
+ text-decoration: none;
730
+ box-shadow: var(--shadow-sm);
731
+ }
732
+ .calendar-jump {
733
+ display: inline-flex;
734
+ align-items: center;
735
+ gap: .45rem;
736
+ padding: .25rem .35rem;
737
+ border: 1px solid var(--line);
738
+ border-radius: var(--radius-sm);
739
+ background: var(--card);
740
+ box-shadow: var(--shadow-sm);
741
+ }
742
+ .calendar-jump-field { display: inline-flex; align-items: center; gap: .35rem; font-size: .76rem; color: var(--muted); font-weight: 650; }
743
+ .calendar-jump-field span { text-transform: uppercase; letter-spacing: .04em; }
744
+ .calendar-jump-field select,
745
+ .calendar-jump-field input { padding: .35rem .45rem; font-size: .82rem; border-radius: .5rem; }
746
+ .calendar-carousel { display: grid; gap: 3px; }
747
+ .calendar { display: grid; gap: 3px; }
748
+ .cal-head, .cal-week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
749
+ .cal-head div { font-size: .68rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); text-align: center; padding: .2rem 0; }
750
+ .cal-day {
751
+ min-height: 5.5rem;
752
+ border: 1px solid var(--line);
753
+ border-radius: .5rem;
754
+ padding: .3rem;
755
+ background: #fff;
756
+ display: flex;
757
+ flex-direction: column;
758
+ gap: .2rem;
759
+ }
760
+ .cal-day.out { background: #f3f5f9; }
761
+ .cal-day.muted-day { opacity: .72; }
762
+ .cal-day.out .cal-date { opacity: .5; }
763
+ .cal-day.today { outline: 2px solid var(--accent); }
764
+ .cal-date { font-size: .7rem; color: var(--muted); }
765
+ .cal-task {
766
+ display: block;
767
+ width: 100%;
768
+ font-size: .7rem;
769
+ padding: .18rem .35rem;
770
+ text-align: left;
771
+ border-radius: .35rem;
772
+ background: var(--backlog);
773
+ color: #fff;
774
+ white-space: nowrap;
775
+ overflow: hidden;
776
+ text-overflow: ellipsis;
777
+ border: 0;
778
+ }
779
+ .cal-task.working { background: var(--working); }
780
+ .cal-task.blocked { background: var(--blocked); }
781
+ .cal-task.done { background: var(--done); }
782
+ .task-card.working { border-left: 5px solid var(--working); }
783
+ .task-card.blocked { border-left: 5px solid var(--blocked); }
784
+ .task-card.done { border-left: 5px solid var(--done); }
785
+ .task-card.backlog { border-left: 5px solid var(--backlog); }
786
+ .timeline { display: grid; gap: .4rem; }
787
+ .timeline-row {
788
+ display: grid;
789
+ grid-template-columns: 220px 1fr;
790
+ align-items: center;
791
+ gap: .7rem;
792
+ background: transparent;
793
+ color: var(--text);
794
+ border: 0;
795
+ padding: .3rem;
796
+ text-align: left;
797
+ }
798
+ .timeline-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
799
+ .timeline-title .project { display: block; color: var(--accent); font-size: .72rem; font-weight: 650; }
800
+ .timeline-deps { display: block; color: var(--muted); font-size: .68rem; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
801
+ .timeline-track {
802
+ position: relative;
803
+ height: 1.1rem;
804
+ background: #eef2f8;
805
+ border-radius: 999px;
806
+ overflow: hidden;
807
+ }
808
+ .timeline-bar {
809
+ position: absolute;
810
+ top: 0;
811
+ bottom: 0;
812
+ border-radius: 999px;
813
+ background: var(--backlog);
814
+ }
815
+ .timeline-bar.working { background: var(--working); }
816
+ .timeline-bar.blocked { background: var(--blocked); }
817
+ .timeline-bar.done { background: var(--done); }
818
+ .timeline-dep-mark {
819
+ position: absolute;
820
+ top: 0;
821
+ bottom: 0;
822
+ width: 2px;
823
+ margin-left: -1px;
824
+ background: repeating-linear-gradient(180deg, rgba(22,29,43,.85) 0, rgba(22,29,43,.85) 3px, transparent 3px, transparent 6px);
825
+ z-index: 2;
826
+ }
827
+ .dep-picker { display: grid; gap: .4rem; }
828
+ .dep-chips { display: flex; flex-wrap: wrap; gap: .35rem; }
829
+ .dep-chip {
830
+ display: inline-flex;
831
+ align-items: center;
832
+ gap: .3rem;
833
+ background: var(--accent-soft);
834
+ color: var(--accent);
835
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--line));
836
+ border-radius: var(--radius-pill);
837
+ padding: .18rem .25rem .18rem .6rem;
838
+ font-size: .78rem;
839
+ font-weight: 600;
840
+ }
841
+ .dep-chip-x {
842
+ flex: none;
843
+ width: 1.15rem;
844
+ height: 1.15rem;
845
+ padding: 0;
846
+ border: none;
847
+ border-radius: var(--radius-pill);
848
+ background: transparent;
849
+ color: var(--accent);
850
+ font-size: .95rem;
851
+ line-height: 1;
852
+ box-shadow: none;
853
+ }
854
+ .dep-chip-x:hover { filter: none; background: rgba(53, 103, 224, .18); }
855
+ .dep-search { position: relative; }
856
+ .dep-search-input { width: 100%; }
857
+ .dep-menu {
858
+ position: absolute;
859
+ z-index: 30;
860
+ top: calc(100% + .3rem);
861
+ left: 0;
862
+ right: 0;
863
+ max-height: 16rem;
864
+ overflow-y: auto;
865
+ background: var(--card);
866
+ border: 1px solid var(--line);
867
+ border-radius: var(--radius-sm);
868
+ box-shadow: var(--shadow-lg);
869
+ padding: .3rem;
870
+ display: grid;
871
+ gap: .15rem;
872
+ }
873
+ .dep-menu[hidden] { display: none; }
874
+ .dep-option {
875
+ display: grid;
876
+ gap: .15rem;
877
+ text-align: left;
878
+ background: transparent;
879
+ color: var(--text);
880
+ border: none;
881
+ border-radius: var(--radius-sm);
882
+ padding: .45rem .55rem;
883
+ box-shadow: none;
884
+ }
885
+ .dep-option[hidden] { display: none; }
886
+ .dep-option:hover { filter: none; background: var(--bg-soft); }
887
+ .dep-option-title { font-weight: 600; font-size: .86rem; }
888
+ .dep-option-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; font-size: .72rem; color: var(--muted); }
889
+ .dep-status { font-weight: 700; text-transform: capitalize; }
890
+ .dep-status.working { color: var(--working); }
891
+ .dep-status.blocked { color: var(--blocked); }
892
+ .dep-status.done { color: var(--done); }
893
+ .dep-status.backlog { color: var(--backlog); }
894
+ .dep-proj { color: var(--text); }
895
+ .dep-id { margin-left: auto; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .68rem; color: var(--muted); }
896
+ .dep-empty { padding: .5rem .55rem; font-size: .82rem; }
897
+ .side-panel {
898
+ position: sticky;
899
+ top: 5rem;
900
+ max-height: calc(100vh - 6rem);
901
+ overflow: hidden;
902
+ box-shadow: var(--shadow-md);
903
+ }
904
+ .panel-scroll { overflow-y: auto; max-height: calc(100vh - 6rem); padding: 0 1rem 1rem; }
905
+ .empty-panel { padding: 1.25rem 1rem; color: var(--muted); }
906
+ .empty-panel h2 { margin: 0 0 .35rem; font-size: 1.05rem; font-weight: 650; color: var(--text); }
907
+ .empty-panel p { margin: 0; font-size: .88rem; }
908
+ .sticky {
909
+ position: sticky;
910
+ top: 0;
911
+ background: var(--card);
912
+ margin: 0 -1rem;
913
+ padding: 1rem 1rem .7rem;
914
+ border-bottom: 1px solid var(--line);
915
+ box-shadow: 0 6px 14px -10px rgba(20, 30, 50, .25);
916
+ z-index: 5;
917
+ }
918
+ .task-form, .inline-form { display: grid; gap: 1rem; }
919
+ .raw-json-form { display: grid; gap: .7rem; margin-top: .75rem; }
920
+ .raw-json-form textarea { width: 100%; min-width: 0; }
921
+ .raw-json-form button { justify-self: start; }
922
+ .task-form label, .inline-form label { display: grid; gap: .35rem; font-weight: 500; font-size: .92rem; }
923
+ .task-form > label, .task-form .form-grid label, .field-label {
924
+ font-size: .72rem;
925
+ font-weight: 600;
926
+ text-transform: uppercase;
927
+ letter-spacing: .045em;
928
+ color: var(--muted);
929
+ }
930
+ .task-form input, .task-form select, .task-form textarea, .inline-form textarea { width: 100%; font-weight: 400; color: var(--text); }
931
+ .task-form textarea { line-height: 1.5; }
932
+ .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .8rem; }
933
+ .subsection { border-top: 1px solid var(--line); padding-top: 1.1rem; margin-top: 1.1rem; }
934
+ .subsection > h3, .notes-head h3 {
935
+ font-size: .8rem;
936
+ font-weight: 700;
937
+ text-transform: uppercase;
938
+ letter-spacing: .04em;
939
+ color: var(--muted);
940
+ }
941
+ .checklist-section { display: grid; gap: .7rem; }
942
+ .checklist-head {
943
+ display: flex;
944
+ align-items: center;
945
+ justify-content: space-between;
946
+ gap: .7rem;
947
+ }
948
+ .checklist-head h3 { margin: 0; }
949
+ .checklist-items {
950
+ list-style: none;
951
+ margin: 0;
952
+ padding: 0;
953
+ display: grid;
954
+ gap: .4rem;
955
+ }
956
+ .checklist-item {
957
+ display: grid;
958
+ grid-template-columns: minmax(0, 1fr) auto;
959
+ gap: .45rem;
960
+ align-items: center;
961
+ }
962
+ .checklist-toggle-form,
963
+ .checklist-delete-form { margin: 0; }
964
+ .check-toggle {
965
+ width: 100%;
966
+ display: inline-grid;
967
+ grid-template-columns: auto minmax(0, 1fr);
968
+ gap: .55rem;
969
+ align-items: center;
970
+ text-align: left;
971
+ background: var(--bg-soft);
972
+ border: 1px solid var(--line);
973
+ color: var(--text);
974
+ box-shadow: none;
975
+ padding: .45rem .6rem;
976
+ }
977
+ .check-toggle:hover { filter: none; border-color: color-mix(in srgb, var(--line) 55%, var(--accent)); }
978
+ .check-mark {
979
+ width: 1.2rem;
980
+ height: 1.2rem;
981
+ border: 1px solid color-mix(in srgb, var(--line) 60%, var(--accent));
982
+ border-radius: .3rem;
983
+ display: inline-flex;
984
+ align-items: center;
985
+ justify-content: center;
986
+ font-weight: 700;
987
+ color: var(--accent);
988
+ background: #fff;
989
+ }
990
+ .check-text { min-width: 0; word-break: break-word; }
991
+ .checklist-item.done .check-toggle {
992
+ background: color-mix(in srgb, var(--done) 10%, #fff);
993
+ border-color: color-mix(in srgb, var(--done) 35%, var(--line));
994
+ }
995
+ .checklist-item.done .check-mark {
996
+ background: color-mix(in srgb, var(--done) 22%, #fff);
997
+ border-color: color-mix(in srgb, var(--done) 48%, var(--line));
998
+ color: var(--done);
999
+ }
1000
+ .checklist-item.done .check-text {
1001
+ color: color-mix(in srgb, var(--text) 65%, var(--muted));
1002
+ text-decoration: line-through;
1003
+ }
1004
+ .check-delete {
1005
+ width: 1.9rem;
1006
+ height: 1.9rem;
1007
+ padding: 0;
1008
+ border-radius: .5rem;
1009
+ background: transparent;
1010
+ color: var(--muted);
1011
+ border: 1px solid var(--line);
1012
+ box-shadow: none;
1013
+ font-size: 1.1rem;
1014
+ line-height: 1;
1015
+ }
1016
+ .check-delete:hover {
1017
+ filter: none;
1018
+ color: var(--danger);
1019
+ border-color: color-mix(in srgb, var(--danger) 45%, var(--line));
1020
+ background: color-mix(in srgb, var(--danger) 8%, #fff);
1021
+ }
1022
+ .checklist-add-form {
1023
+ display: grid;
1024
+ grid-template-columns: minmax(0, 1fr) auto;
1025
+ gap: .5rem;
1026
+ }
1027
+ .markdown { line-height: 1.5; font-size: .9rem; }
1028
+ .markdown p { margin: 0 0 .5rem; }
1029
+ .markdown p:last-child { margin-bottom: 0; }
1030
+ .note { border: 1px solid var(--line); border-radius: var(--radius-sm); padding: .75rem .85rem; margin-bottom: .6rem; background: var(--bg-soft); }
1031
+ .note small { display: block; margin-bottom: .35rem; font-size: .72rem; font-weight: 600; letter-spacing: .02em; color: var(--muted); font-variant-numeric: tabular-nums; }
1032
+ .notes-head { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: .65rem; }
1033
+ .notes-head h3 { display: flex; align-items: center; gap: .45rem; margin: 0; }
1034
+ .notes-count-badge { font-size: .7rem; font-weight: 700; color: var(--accent); background: var(--accent-soft); border-radius: var(--radius-pill); padding: .08rem .48rem; letter-spacing: 0; }
1035
+ .notes-list { display: grid; gap: .5rem; max-height: 22rem; overflow-y: auto; margin-bottom: .9rem; }
1036
+ .notes-list .note { margin-bottom: 0; }
1037
+ .note-add { margin-top: .2rem; }
1038
+ .activity-timeline {
1039
+ display: grid;
1040
+ gap: .65rem;
1041
+ max-height: 28rem;
1042
+ overflow-y: auto;
1043
+ margin-bottom: .9rem;
1044
+ }
1045
+ .activity-item {
1046
+ display: grid;
1047
+ grid-template-columns: auto minmax(0, 1fr);
1048
+ gap: .7rem;
1049
+ align-items: start;
1050
+ padding: .75rem .85rem;
1051
+ border: 1px solid var(--line);
1052
+ border-radius: var(--radius-sm);
1053
+ background: var(--bg-soft);
1054
+ }
1055
+ .activity-item-icon {
1056
+ width: 2rem;
1057
+ height: 2rem;
1058
+ display: inline-flex;
1059
+ align-items: center;
1060
+ justify-content: center;
1061
+ border-radius: 999px;
1062
+ background: var(--card);
1063
+ border: 1px solid var(--line);
1064
+ font-size: 1rem;
1065
+ }
1066
+ .activity-item-body { min-width: 0; display: grid; gap: .4rem; }
1067
+ .activity-item-meta {
1068
+ display: flex;
1069
+ flex-wrap: wrap;
1070
+ align-items: center;
1071
+ gap: .45rem;
1072
+ font-size: .74rem;
1073
+ color: var(--muted);
1074
+ font-variant-numeric: tabular-nums;
1075
+ }
1076
+ .activity-item-type {
1077
+ font-weight: 700;
1078
+ text-transform: uppercase;
1079
+ letter-spacing: .04em;
1080
+ }
1081
+ .activity-progress {
1082
+ font-size: .92rem;
1083
+ font-weight: 650;
1084
+ color: var(--text);
1085
+ }
1086
+ .activity-asset {
1087
+ margin: 0;
1088
+ padding: .55rem .65rem;
1089
+ }
1090
+ .activity-composer {
1091
+ display: grid;
1092
+ gap: .7rem;
1093
+ }
1094
+ .composer-switch {
1095
+ display: inline-flex;
1096
+ gap: .4rem;
1097
+ align-items: center;
1098
+ }
1099
+ .composer-tab {
1100
+ background: var(--bg-soft);
1101
+ color: var(--muted);
1102
+ border: 1px solid var(--line);
1103
+ box-shadow: none;
1104
+ }
1105
+ .composer-tab.active {
1106
+ background: var(--accent-soft);
1107
+ color: var(--accent);
1108
+ border-color: var(--accent);
1109
+ }
1110
+ .composer-tab:hover { filter: none; color: var(--text); }
1111
+ .attachments { display: grid; gap: .6rem; }
1112
+ .attachment { border: 1px solid var(--line); border-radius: var(--radius-sm); padding: .55rem; }
1113
+ .attachment img { display: block; max-width: 100%; border-radius: .45rem; margin-bottom: .4rem; }
1114
+ .attachment-list { list-style: none; margin: 0 0 .85rem; padding: 0; display: grid; gap: .5rem; }
1115
+ .attachment-item { display: flex; gap: .7rem; align-items: center; border: 1px solid var(--line); border-radius: var(--radius-sm); padding: .55rem .65rem; background: var(--bg-soft); transition: border-color .12s, box-shadow .12s; }
1116
+ .attachment-item:hover { border-color: var(--line); box-shadow: var(--shadow-sm); }
1117
+ .attachment-thumb { flex: none; }
1118
+ .attachment-thumb img { display: block; width: 42px; height: 42px; object-fit: cover; border-radius: .5rem; margin-bottom: 0; }
1119
+ .attachment-icon { flex: none; font-size: 1.3rem; line-height: 1; }
1120
+ .attachment-info { display: grid; gap: .18rem; min-width: 0; flex: 1; }
1121
+ .attachment-name { font-size: .88rem; font-weight: 650; word-break: break-word; }
1122
+ .attachment-desc { margin: 0; font-size: .8rem; color: var(--text); }
1123
+ .attachment-meta { display: flex; gap: .8rem; align-items: center; font-size: .73rem; color: var(--muted); font-variant-numeric: tabular-nums; }
1124
+ .attachment-dl { color: var(--accent); font-weight: 650; }
1125
+ .attachment-form { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
1126
+ .attachment-form input[type="text"] { flex: 1; min-width: 140px; }
1127
+ .attachment-form input[type="file"] {
1128
+ flex: 1 1 100%;
1129
+ font-size: .82rem;
1130
+ color: var(--muted);
1131
+ border: 1px dashed var(--line);
1132
+ border-radius: var(--radius-sm);
1133
+ padding: .4rem;
1134
+ background: var(--bg-soft);
1135
+ }
1136
+ input[type="file"]::file-selector-button {
1137
+ margin-right: .65rem;
1138
+ padding: .4rem .8rem;
1139
+ border: 1px solid var(--line);
1140
+ border-radius: var(--radius-pill);
1141
+ background: var(--card);
1142
+ color: var(--text);
1143
+ font: inherit;
1144
+ font-size: .8rem;
1145
+ font-weight: 600;
1146
+ cursor: pointer;
1147
+ box-shadow: var(--shadow-sm);
1148
+ transition: background .12s, border-color .12s, color .12s;
1149
+ }
1150
+ input[type="file"]::file-selector-button:hover {
1151
+ background: var(--accent-soft);
1152
+ border-color: var(--accent);
1153
+ color: var(--accent);
1154
+ }
1155
+ .complete-btn { background: var(--done); white-space: nowrap; }
1156
+ .reopen-btn { background: var(--card); color: var(--text); border: 1px solid var(--line); white-space: nowrap; }
1157
+ .burndown-canvas {
1158
+ width: 100%;
1159
+ min-height: 180px;
1160
+ background: var(--bg-soft);
1161
+ border: 1px solid var(--line);
1162
+ border-radius: var(--radius-sm);
1163
+ padding: .35rem;
1164
+ }
1165
+ .code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .85rem; }
1166
+ .danger-zone { border-top: 1px solid var(--line); margin-top: 1rem; padding-top: 1rem; }
1167
+ .danger-zone button { background: var(--blocked); }
1168
+ @media (max-width: 1050px) {
1169
+ .layout { grid-template-columns: 1fr; }
1170
+ .pane-resizer { display: none; }
1171
+ .side-panel { position: static; max-height: none; }
1172
+ .panel-scroll { max-height: none; }
1173
+ .board, .summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1174
+ }
1175
+ @media (max-width: 700px) {
1176
+ .topbar, .new-task-form { flex-direction: column; align-items: stretch; }
1177
+ .board, .summary-grid { grid-template-columns: 1fr; }
1178
+ .timeline-row { grid-template-columns: 1fr; }
1179
+ .layout { padding: .5rem; }
1180
+ }
1181
+
1182
+ /* --- Milestones --- */
1183
+ .ms-status {
1184
+ display: inline-block;
1185
+ font-size: .68rem;
1186
+ font-weight: 700;
1187
+ text-transform: capitalize;
1188
+ letter-spacing: .02em;
1189
+ padding: .1rem .45rem;
1190
+ border-radius: var(--radius-pill);
1191
+ background: var(--bg-soft);
1192
+ color: var(--muted);
1193
+ border: 1px solid var(--line);
1194
+ }
1195
+ .ms-status.active { background: color-mix(in srgb, var(--working) 14%, white); color: var(--working); border-color: color-mix(in srgb, var(--working) 35%, var(--line)); }
1196
+ .ms-status.done { background: color-mix(in srgb, var(--done) 14%, white); color: var(--done); border-color: color-mix(in srgb, var(--done) 35%, var(--line)); }
1197
+ .ms-status.planned { background: var(--bg-soft); color: var(--muted); }
1198
+
1199
+ .milestone-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: .8rem; }
1200
+ .milestone-card {
1201
+ display: flex;
1202
+ flex-direction: column;
1203
+ background: var(--card);
1204
+ border: 1px solid var(--line);
1205
+ border-left: 4px solid var(--ms-color, var(--accent));
1206
+ border-radius: var(--radius);
1207
+ overflow: hidden;
1208
+ box-shadow: var(--shadow-sm);
1209
+ }
1210
+ .milestone-open {
1211
+ flex: 1;
1212
+ display: grid;
1213
+ gap: .5rem;
1214
+ text-align: left;
1215
+ background: transparent;
1216
+ color: var(--text);
1217
+ border: none;
1218
+ border-radius: 0;
1219
+ padding: .9rem 1rem;
1220
+ box-shadow: none;
1221
+ }
1222
+ .milestone-open:hover { filter: none; background: var(--bg-soft); }
1223
+ .mc-head { display: flex; align-items: center; gap: .45rem; }
1224
+ .mc-head strong { flex: 1; font-size: 1rem; }
1225
+ .mc-flag { color: var(--ms-color, var(--accent)); font-size: .8rem; }
1226
+ .mc-summary { margin: 0; color: var(--muted); font-size: .85rem; }
1227
+ .mc-projects { display: flex; flex-wrap: wrap; gap: .3rem; }
1228
+ .mc-progress, .mb-progress {
1229
+ height: .5rem;
1230
+ border-radius: 999px;
1231
+ background: #eef2f8;
1232
+ overflow: hidden;
1233
+ }
1234
+ .mc-progress > div, .mb-progress > div { height: 100%; background: var(--accent); border-radius: 999px; }
1235
+ .mc-stats { display: flex; flex-wrap: wrap; gap: .6rem; font-size: .76rem; color: var(--muted); }
1236
+ .mc-target { margin-left: auto; }
1237
+ .mc-foot { border-top: 1px solid var(--line); padding: .4rem 1rem; display: flex; justify-content: flex-end; }
1238
+ .new-milestone-form { margin-top: 1.1rem; border-top: 1px solid var(--line); padding-top: 1rem; display: grid; gap: .6rem; }
1239
+ .new-milestone-form h3 { margin: 0; font-size: .95rem; }
1240
+
1241
+ /* Milestone rollup banner */
1242
+ .milestone-banner {
1243
+ background: var(--card);
1244
+ border: 1px solid var(--line);
1245
+ border-left: 4px solid var(--ms-color, var(--accent));
1246
+ border-radius: var(--radius);
1247
+ padding: .9rem 1rem;
1248
+ margin-bottom: 1rem;
1249
+ display: grid;
1250
+ gap: .7rem;
1251
+ box-shadow: var(--shadow-sm);
1252
+ }
1253
+ .mb-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
1254
+ .mb-title { display: flex; align-items: flex-start; gap: .55rem; }
1255
+ .mb-flag { color: var(--ms-color, var(--accent)); font-size: 1rem; line-height: 1.4; }
1256
+ .mb-title h2 { margin: 0; font-size: 1.1rem; }
1257
+ .mb-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin-top: .25rem; font-size: .78rem; color: var(--muted); }
1258
+ .mb-actions { display: flex; align-items: center; gap: .5rem; }
1259
+ .mb-rollup { display: grid; gap: .45rem; }
1260
+ .mb-stats { display: flex; flex-wrap: wrap; gap: .9rem; font-size: .8rem; color: var(--muted); }
1261
+ .mb-stats .done strong { color: var(--done); }
1262
+ .mb-stats .working strong { color: var(--working); }
1263
+ .mb-stats .blocked strong { color: var(--blocked); }
1264
+
1265
+ /* Milestone detail panel */
1266
+ .ms-projects { display: grid; gap: .5rem; }
1267
+ .ms-proj-chips { display: flex; flex-wrap: wrap; gap: .35rem; }
1268
+ .ms-proj-chip {
1269
+ display: inline-flex;
1270
+ align-items: center;
1271
+ gap: .35rem;
1272
+ padding: .25rem .35rem .25rem .5rem;
1273
+ font-size: .82rem;
1274
+ background: var(--bg-soft);
1275
+ border: 1px solid var(--line);
1276
+ border-radius: 999px;
1277
+ }
1278
+ .ms-proj-x {
1279
+ display: inline-flex;
1280
+ align-items: center;
1281
+ justify-content: center;
1282
+ width: 1.1rem;
1283
+ height: 1.1rem;
1284
+ padding: 0;
1285
+ font-size: .85rem;
1286
+ line-height: 1;
1287
+ color: var(--muted);
1288
+ background: transparent;
1289
+ border: none;
1290
+ border-radius: 50%;
1291
+ box-shadow: none;
1292
+ }
1293
+ .ms-proj-x:hover { filter: none; background: rgba(0, 0, 0, .08); color: var(--text); }
1294
+ .ms-proj-select { width: 100%; max-width: 16rem; }
1295
+ .ms-color-input { width: 100%; height: 2.2rem; padding: 2px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--card); cursor: pointer; }
1296
+ .ms-task-box {
1297
+ margin-top: .3rem;
1298
+ display: flex;
1299
+ flex-direction: column;
1300
+ border: 1px solid var(--line);
1301
+ border-radius: var(--radius-sm);
1302
+ overflow: hidden;
1303
+ }
1304
+ .ms-task-list { list-style: none; margin: 0; padding: .4rem; display: grid; gap: .4rem; max-height: 16rem; overflow-y: auto; }
1305
+ .ms-empty { padding: .4rem .2rem; }
1306
+ .ms-new-task-bar {
1307
+ flex: none;
1308
+ border-top: 1px solid var(--line);
1309
+ background: var(--bg-soft);
1310
+ padding: .4rem;
1311
+ }
1312
+ .ms-new-task-btn {
1313
+ width: 100%;
1314
+ background: transparent;
1315
+ color: var(--accent);
1316
+ border: 1px dashed color-mix(in srgb, var(--accent) 45%, var(--line));
1317
+ border-radius: var(--radius-sm);
1318
+ padding: .45rem;
1319
+ font-weight: 600;
1320
+ font-size: .85rem;
1321
+ box-shadow: none;
1322
+ }
1323
+ .ms-new-task-btn:hover { filter: none; background: var(--accent-soft); border-style: solid; }
1324
+ .ms-task {
1325
+ display: flex;
1326
+ align-items: stretch;
1327
+ gap: .35rem;
1328
+ border: 1px solid var(--line);
1329
+ border-radius: var(--radius-sm);
1330
+ background: var(--bg-soft);
1331
+ overflow: hidden;
1332
+ }
1333
+ .ms-task-open {
1334
+ flex: 1;
1335
+ display: grid;
1336
+ gap: .2rem;
1337
+ text-align: left;
1338
+ background: transparent;
1339
+ color: var(--text);
1340
+ border: none;
1341
+ border-radius: 0;
1342
+ padding: .45rem .55rem;
1343
+ box-shadow: none;
1344
+ }
1345
+ .ms-task-open:hover { filter: none; background: var(--card); }
1346
+ .ms-task-title { font-weight: 600; font-size: .86rem; }
1347
+ .ms-task-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem; font-size: .72rem; }
1348
+ .ms-task-remove {
1349
+ flex: none;
1350
+ width: 1.8rem;
1351
+ background: transparent;
1352
+ color: var(--muted);
1353
+ border: none;
1354
+ border-left: 1px solid var(--line);
1355
+ border-radius: 0;
1356
+ font-size: 1rem;
1357
+ box-shadow: none;
1358
+ }
1359
+ .ms-task-remove:hover { filter: none; background: color-mix(in srgb, var(--blocked) 15%, white); color: var(--blocked); }
1360
+ .ms-missing { font-size: .78rem; }
1361
+ .ms-add { margin: .4rem 0 .2rem; }
1362
+ .ms-add-search { position: relative; }
1363
+ .ms-add-input { width: 100%; }
1364
+ .ms-add-menu {
1365
+ position: absolute;
1366
+ z-index: 30;
1367
+ top: calc(100% + .3rem);
1368
+ left: 0;
1369
+ right: 0;
1370
+ max-height: 16rem;
1371
+ overflow-y: auto;
1372
+ background: var(--card);
1373
+ border: 1px solid var(--line);
1374
+ border-radius: var(--radius-sm);
1375
+ box-shadow: var(--shadow-lg);
1376
+ padding: .3rem;
1377
+ display: grid;
1378
+ gap: .15rem;
1379
+ }
1380
+ .ms-add-menu[hidden] { display: none; }
1381
+ .ms-add-option {
1382
+ display: grid;
1383
+ gap: .15rem;
1384
+ text-align: left;
1385
+ background: transparent;
1386
+ color: var(--text);
1387
+ border: none;
1388
+ border-radius: var(--radius-sm);
1389
+ padding: .45rem .55rem;
1390
+ box-shadow: none;
1391
+ }
1392
+ .ms-add-option[hidden] { display: none; }
1393
+ .ms-add-option:hover { filter: none; background: var(--bg-soft); }
1394
+ .ms-new-task { margin-top: .9rem; }