trekoon 0.2.7 → 0.2.9

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.
Files changed (45) hide show
  1. package/README.md +60 -0
  2. package/docs/commands.md +100 -0
  3. package/docs/quickstart.md +74 -1
  4. package/package.json +2 -1
  5. package/src/board/assets/app.js +589 -0
  6. package/src/board/assets/components/ClampedText.js +31 -0
  7. package/src/board/assets/components/Component.js +271 -0
  8. package/src/board/assets/components/ConfirmDialog.js +81 -0
  9. package/src/board/assets/components/EpicRow.js +64 -0
  10. package/src/board/assets/components/EpicsOverview.js +80 -0
  11. package/src/board/assets/components/Inspector.js +335 -0
  12. package/src/board/assets/components/Notice.js +80 -0
  13. package/src/board/assets/components/SubtaskModal.js +100 -0
  14. package/src/board/assets/components/TaskCard.js +82 -0
  15. package/src/board/assets/components/TaskModal.js +99 -0
  16. package/src/board/assets/components/TopBar.js +167 -0
  17. package/src/board/assets/components/Workspace.js +308 -0
  18. package/src/board/assets/components/assetMap.js +80 -0
  19. package/src/board/assets/components/helpers.js +244 -0
  20. package/src/board/assets/fonts/inter-latin.woff2 +0 -0
  21. package/src/board/assets/fonts/material-symbols-rounded.woff2 +0 -0
  22. package/src/board/assets/index.html +39 -0
  23. package/src/board/assets/main.js +11 -0
  24. package/src/board/assets/manifest.json +12 -0
  25. package/src/board/assets/runtime/delegation.js +309 -0
  26. package/src/board/assets/state/actions.js +454 -0
  27. package/src/board/assets/state/api.js +281 -0
  28. package/src/board/assets/state/store.js +472 -0
  29. package/src/board/assets/state/url.js +184 -0
  30. package/src/board/assets/state/utils.js +222 -0
  31. package/src/board/assets/styles/board.css +1811 -0
  32. package/src/board/assets/styles/fonts.css +22 -0
  33. package/src/board/install.ts +196 -0
  34. package/src/board/open-browser.ts +131 -0
  35. package/src/board/routes.ts +308 -0
  36. package/src/board/server.ts +185 -0
  37. package/src/board/snapshot.ts +277 -0
  38. package/src/board/types.ts +43 -0
  39. package/src/commands/board.ts +158 -0
  40. package/src/commands/help.ts +21 -0
  41. package/src/commands/init.ts +29 -0
  42. package/src/domain/mutation-service.ts +40 -0
  43. package/src/domain/tracker-domain.ts +11 -3
  44. package/src/runtime/cli-shell.ts +5 -0
  45. package/src/storage/path.ts +36 -0
@@ -0,0 +1,1811 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ color-scheme: dark;
9
+ --board-bg: #0b0d12;
10
+ --board-bg-alt: #10131b;
11
+ --board-shell: rgba(15, 18, 24, 0.88);
12
+ --board-surface: #141922;
13
+ --board-surface-2: #191f2b;
14
+ --board-surface-3: #202636;
15
+ --board-border: rgba(255, 255, 255, 0.1);
16
+ --board-border-strong: rgba(167, 139, 250, 0.38);
17
+ --board-text: #f5f7fb;
18
+ --board-text-muted: #b6becc;
19
+ --board-text-soft: #8891a1;
20
+ --board-accent: #8b5cf6;
21
+ --board-accent-strong: #9f75ff;
22
+ --board-accent-soft: rgba(139, 92, 246, 0.15);
23
+ --board-success: #22c55e;
24
+ --board-warning: #f59e0b;
25
+ --board-danger: #ef4444;
26
+ --board-info: #38bdf8;
27
+ --board-shadow: 0 24px 80px rgba(0, 0, 0, 0.42);
28
+ --board-glow: rgba(139, 92, 246, 0.18);
29
+ }
30
+
31
+ :root[data-theme="light"] {
32
+ color-scheme: light;
33
+ --board-bg: #f4f6fb;
34
+ --board-bg-alt: #edf1f7;
35
+ --board-shell: rgba(255, 255, 255, 0.82);
36
+ --board-surface: #ffffff;
37
+ --board-surface-2: #f8faff;
38
+ --board-surface-3: #eef2ff;
39
+ --board-border: rgba(15, 23, 42, 0.1);
40
+ --board-border-strong: rgba(124, 58, 237, 0.28);
41
+ --board-text: #111827;
42
+ --board-text-muted: #4b5563;
43
+ --board-text-soft: #6b7280;
44
+ --board-accent: #7c3aed;
45
+ --board-accent-strong: #6d28d9;
46
+ --board-accent-soft: rgba(124, 58, 237, 0.12);
47
+ --board-success: #16a34a;
48
+ --board-warning: #d97706;
49
+ --board-danger: #dc2626;
50
+ --board-info: #0284c7;
51
+ --board-shadow: 0 24px 60px rgba(15, 23, 42, 0.12);
52
+ --board-glow: rgba(124, 58, 237, 0.1);
53
+ }
54
+
55
+ html,
56
+ body,
57
+ #app {
58
+ height: 100%;
59
+ min-height: 100%;
60
+ }
61
+
62
+ body {
63
+ margin: 0;
64
+ min-height: 100dvh;
65
+ font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
66
+ background-color: var(--board-bg-alt);
67
+ background-image:
68
+ radial-gradient(circle at top left, var(--board-glow), transparent 28%),
69
+ linear-gradient(180deg, var(--board-bg), var(--board-bg-alt));
70
+ background-attachment: fixed;
71
+ color: var(--board-text);
72
+ }
73
+
74
+ :where(button, select, input, summary, a, [role="button"], [role="tab"]):focus-visible {
75
+ outline: none;
76
+ box-shadow:
77
+ 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent),
78
+ 0 0 0 4px var(--board-border-strong),
79
+ 0 10px 24px color-mix(in srgb, var(--board-accent) 18%, transparent);
80
+ }
81
+
82
+ html.board-scroll-locked,
83
+ body.board-scroll-locked {
84
+ overflow: hidden;
85
+ }
86
+
87
+ .board-shell-v2 {
88
+ display: grid;
89
+ min-height: 100vh;
90
+ min-height: 100dvh;
91
+ padding: 12px;
92
+ }
93
+
94
+ .board-shell-v2__frame {
95
+ display: grid;
96
+ grid-template-rows: auto minmax(0, 1fr);
97
+ gap: 12px;
98
+ width: min(1600px, 100%);
99
+ min-height: calc(100vh - 24px);
100
+ min-height: calc(100dvh - 24px);
101
+ margin: 0 auto;
102
+ }
103
+
104
+ .board-shell-v2__runtime {
105
+ min-height: 0;
106
+ }
107
+
108
+ .board-shell-v2__runtime-shell {
109
+ display: grid;
110
+ min-height: 0;
111
+ }
112
+
113
+ .board-layout--workspace {
114
+ align-content: start;
115
+ min-height: 0;
116
+ }
117
+
118
+ .board-layout [data-scroll-surface] {
119
+ min-height: 0;
120
+ }
121
+
122
+ .board-layout[data-scroll-owner="inspector"] [data-scroll-surface="inspector"],
123
+ .board-layout[data-scroll-owner="task-modal"] [data-scroll-surface="task-modal"],
124
+ .board-layout[data-scroll-owner="subtask-modal"] [data-scroll-surface="subtask-modal"] {
125
+ overflow-y: auto;
126
+ overscroll-behavior: contain;
127
+ -webkit-overflow-scrolling: touch;
128
+ }
129
+
130
+ .board-layout[data-scroll-owner="inspector"] [data-scroll-surface="workspace"],
131
+ .board-layout[data-scroll-owner="task-modal"] [data-scroll-surface="workspace"],
132
+ .board-layout[data-scroll-owner="subtask-modal"] [data-scroll-surface="workspace"] {
133
+ overflow: hidden;
134
+ }
135
+
136
+ .board-layout--workspace .board-root--tasks {
137
+ min-height: 0;
138
+ }
139
+
140
+ .board-layout--workspace .board-workspace {
141
+ min-height: 0;
142
+ }
143
+
144
+ .board-layout--workspace .board-drawer__body,
145
+ .board-layout--workspace .board-modal__body {
146
+ overscroll-behavior: contain;
147
+ }
148
+
149
+ .board-layout .board-workspace,
150
+ .board-layout .board-content,
151
+ .board-layout .board-kanban,
152
+ .board-layout .board-column__tasks,
153
+ .board-layout .board-list__rows {
154
+ overflow: visible;
155
+ overscroll-behavior: auto;
156
+ }
157
+
158
+ .board-layout--workspace .board-content {
159
+ display: grid;
160
+ align-content: start;
161
+ margin-top: 14px;
162
+ }
163
+
164
+ .board-layout--workspace .board-kanban {
165
+ grid-template-columns: repeat(2, minmax(0, 1fr));
166
+ }
167
+
168
+ .board-layout--workspace .board-drawer {
169
+ position: static;
170
+ inset: auto;
171
+ width: auto;
172
+ max-height: none;
173
+ }
174
+
175
+ .board-detail-surface-frame {
176
+ min-width: 0;
177
+ }
178
+
179
+ .board-root {
180
+ align-content: start;
181
+ }
182
+
183
+ .board-detail-surface {
184
+ min-height: 0;
185
+ }
186
+
187
+ .board-detail-surface__header {
188
+ position: sticky;
189
+ top: 0;
190
+ z-index: 2;
191
+ background: var(--board-surface);
192
+ }
193
+
194
+ .board-detail-surface__body {
195
+ scrollbar-gutter: stable;
196
+ }
197
+
198
+ .board-detail-surface__stack {
199
+ display: grid;
200
+ align-content: start;
201
+ gap: 16px;
202
+ }
203
+
204
+ .board-detail-card {
205
+ min-width: 0;
206
+ }
207
+
208
+ .board-detail-summary-grid {
209
+ align-items: start;
210
+ }
211
+
212
+ .board-detail-summary-row {
213
+ display: flex;
214
+ align-items: center;
215
+ justify-content: space-between;
216
+ gap: 12px;
217
+ }
218
+
219
+ .board-detail-copy {
220
+ max-width: 78ch;
221
+ }
222
+
223
+ .board-detail-copy--compact {
224
+ max-width: 68ch;
225
+ }
226
+
227
+ .board-detail-copy br {
228
+ content: "";
229
+ }
230
+
231
+ .board-detail-nested {
232
+ gap: 0;
233
+ }
234
+
235
+ .board-related-item {
236
+ min-width: 0;
237
+ }
238
+
239
+ .board-related-item__description {
240
+ display: -webkit-box;
241
+ overflow: hidden;
242
+ -webkit-box-orient: vertical;
243
+ -webkit-line-clamp: 3;
244
+ white-space: pre-wrap;
245
+ word-break: break-word;
246
+ }
247
+
248
+ .board-task-modal {
249
+ width: min(60vw, 1100px);
250
+ max-width: 80vw;
251
+ }
252
+
253
+ .board-task-modal:focus,
254
+ .board-modal[role="dialog"]:focus,
255
+ [data-overlay-root][role="alertdialog"]:focus {
256
+ outline: none;
257
+ }
258
+
259
+ .board-modal--sheet {
260
+ width: min(80vw, 960px);
261
+ }
262
+
263
+ .board-button--destructive {
264
+ border-color: color-mix(in srgb, var(--board-danger) 58%, var(--board-border));
265
+ background:
266
+ linear-gradient(135deg, color-mix(in srgb, var(--board-danger) 88%, #f97316 12%), color-mix(in srgb, var(--board-danger) 68%, #7f1d1d 32%));
267
+ color: #fff;
268
+ box-shadow:
269
+ inset 0 1px 0 rgba(255, 255, 255, 0.14),
270
+ 0 14px 28px rgba(127, 29, 29, 0.26);
271
+ }
272
+
273
+ .board-button--destructive:hover {
274
+ border-color: color-mix(in srgb, var(--board-danger) 74%, white 8%);
275
+ background:
276
+ linear-gradient(135deg, color-mix(in srgb, var(--board-danger) 100%, #fb7185 10%), color-mix(in srgb, var(--board-danger) 78%, #991b1b 22%));
277
+ }
278
+
279
+ .board-button--destructive:focus-visible {
280
+ outline: none;
281
+ box-shadow:
282
+ 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent),
283
+ 0 0 0 4px color-mix(in srgb, var(--board-danger) 42%, white 12%),
284
+ 0 14px 28px rgba(127, 29, 29, 0.26);
285
+ }
286
+
287
+
288
+ .board-layout--overview .board-table {
289
+ min-height: 0;
290
+ }
291
+
292
+ .board-overview--dense {
293
+ display: grid;
294
+ gap: 14px;
295
+ }
296
+
297
+ .board-overview__header {
298
+ display: grid;
299
+ gap: 12px;
300
+ padding-bottom: 12px;
301
+ border-bottom: 1px solid var(--board-border);
302
+ }
303
+
304
+ .board-overview__title {
305
+ margin: 8px 0 0;
306
+ font-size: clamp(1.4rem, 1.8vw, 1.9rem);
307
+ line-height: 1.1;
308
+ }
309
+
310
+ .board-overview__summary {
311
+ margin: 6px 0 0;
312
+ max-width: 64ch;
313
+ font-size: 0.88rem;
314
+ line-height: 1.45;
315
+ color: var(--board-text-muted);
316
+ }
317
+
318
+ .board-overview__legend {
319
+ gap: 8px;
320
+ }
321
+
322
+ .board-table--epics {
323
+ gap: 8px;
324
+ }
325
+
326
+ .board-table__header--epics {
327
+ grid-template-columns: minmax(0, 2.1fr) 120px 190px 110px 88px;
328
+ gap: 10px;
329
+ padding: 0 6px 6px;
330
+ }
331
+
332
+ .board-table__rows--epics {
333
+ display: grid;
334
+ gap: 10px;
335
+ }
336
+
337
+ .board-epic-row {
338
+ display: grid;
339
+ grid-template-columns: minmax(0, 2.1fr) 120px 190px 110px 88px;
340
+ gap: 10px;
341
+ width: 100%;
342
+ padding: 12px 14px;
343
+ border: 1px solid var(--board-border);
344
+ border-radius: 22px;
345
+ background:
346
+ linear-gradient(135deg, color-mix(in srgb, var(--board-accent-soft) 52%, transparent), transparent 52%),
347
+ rgba(255, 255, 255, 0.025);
348
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
349
+ text-align: left;
350
+ color: inherit;
351
+ cursor: pointer;
352
+ transition:
353
+ transform 0.2s ease,
354
+ border-color 0.2s ease,
355
+ background 0.2s ease,
356
+ box-shadow 0.2s ease;
357
+ }
358
+
359
+ .board-epic-row:hover {
360
+ border-color: var(--board-border-strong);
361
+ background:
362
+ linear-gradient(135deg, color-mix(in srgb, var(--board-accent-soft) 72%, transparent), transparent 54%),
363
+ rgba(255, 255, 255, 0.045);
364
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.18);
365
+ transform: translateY(-1px);
366
+ }
367
+
368
+ .board-epic-row--selected {
369
+ border-color: var(--board-border-strong);
370
+ background:
371
+ linear-gradient(135deg, color-mix(in srgb, var(--board-accent) 22%, transparent), transparent 58%),
372
+ var(--board-accent-soft);
373
+ box-shadow:
374
+ inset 0 0 0 1px color-mix(in srgb, var(--board-accent) 18%, transparent),
375
+ 0 18px 40px rgba(0, 0, 0, 0.18);
376
+ }
377
+
378
+ .board-epic-row__summary {
379
+ display: grid;
380
+ gap: 6px;
381
+ min-width: 0;
382
+ }
383
+
384
+ .board-epic-row__title-row {
385
+ display: flex;
386
+ flex-wrap: wrap;
387
+ align-items: center;
388
+ gap: 8px;
389
+ }
390
+
391
+ .board-epic-row__title {
392
+ display: block;
393
+ min-width: 0;
394
+ font-size: 0.98rem;
395
+ line-height: 1.4;
396
+ color: var(--board-text);
397
+ }
398
+
399
+ .board-epic-row:focus-visible,
400
+ .board-clamped-text__summary:focus-visible {
401
+ outline: 2px solid var(--board-border-strong);
402
+ outline-offset: 4px;
403
+ border-radius: 12px;
404
+ }
405
+
406
+ .board-epic-row__description {
407
+ min-width: 0;
408
+ line-height: 1.6;
409
+ overflow-wrap: anywhere;
410
+ }
411
+
412
+ .board-epic-row__status,
413
+ .board-epic-row__action-wrap {
414
+ display: flex;
415
+ align-items: center;
416
+ }
417
+
418
+ .board-epic-row__counts,
419
+ .board-epic-row__updated {
420
+ display: grid;
421
+ align-content: start;
422
+ gap: 6px;
423
+ }
424
+
425
+ .board-epic-row__counts {
426
+ grid-template-columns: repeat(2, minmax(0, max-content));
427
+ }
428
+
429
+ .board-epic-row__updated {
430
+ font-size: 0.84rem;
431
+ color: var(--board-text-muted);
432
+ }
433
+
434
+ .board-epic-row__label {
435
+ font-size: 0.68rem;
436
+ font-weight: 700;
437
+ letter-spacing: 0.12em;
438
+ text-transform: uppercase;
439
+ color: var(--board-text-soft);
440
+ }
441
+
442
+ .board-epic-row__action {
443
+ display: inline-flex;
444
+ align-items: center;
445
+ gap: 6px;
446
+ min-height: 34px;
447
+ padding: 0 12px;
448
+ border: 1px solid color-mix(in srgb, var(--board-accent) 28%, var(--board-border));
449
+ border-radius: 999px;
450
+ background: color-mix(in srgb, var(--board-accent-soft) 88%, transparent);
451
+ font-size: 0.84rem;
452
+ font-weight: 700;
453
+ color: var(--board-accent);
454
+ }
455
+
456
+ .board-clamped-text {
457
+ min-width: 0;
458
+ }
459
+
460
+ .board-clamped-text__summary {
461
+ display: grid;
462
+ gap: 4px;
463
+ list-style: none;
464
+ cursor: pointer;
465
+ }
466
+
467
+ .board-clamped-text__summary::-webkit-details-marker {
468
+ display: none;
469
+ }
470
+
471
+ .board-clamped-text__preview,
472
+ .board-clamped-text__body {
473
+ white-space: pre-wrap;
474
+ word-break: break-word;
475
+ }
476
+
477
+ .board-clamped-text__preview {
478
+ display: -webkit-box;
479
+ overflow: hidden;
480
+ -webkit-box-orient: vertical;
481
+ }
482
+
483
+ .board-clamped-text__preview--2 {
484
+ -webkit-line-clamp: 2;
485
+ }
486
+
487
+ .board-clamped-text__toggle {
488
+ display: inline-flex;
489
+ align-items: center;
490
+ gap: 4px;
491
+ font-size: 0.78rem;
492
+ font-weight: 600;
493
+ color: var(--board-accent);
494
+ }
495
+
496
+ .board-clamped-text__toggle-less,
497
+ .board-clamped-text__body,
498
+ .board-clamped-text[open] .board-clamped-text__toggle-more {
499
+ display: none;
500
+ }
501
+
502
+ .board-clamped-text[open] .board-clamped-text__toggle-less,
503
+ .board-clamped-text[open] .board-clamped-text__body {
504
+ display: block;
505
+ }
506
+
507
+ .board-clamped-text[open] .board-clamped-text__preview {
508
+ display: none;
509
+ }
510
+
511
+ .board-clamped-text__body {
512
+ margin-top: 6px;
513
+ font-size: 0.9rem;
514
+ line-height: 1.6;
515
+ color: var(--board-text-muted);
516
+ }
517
+
518
+ .board-kanban--dense {
519
+ display: grid;
520
+ align-content: start;
521
+ gap: 12px;
522
+ }
523
+
524
+ .board-column--dense {
525
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
526
+ }
527
+
528
+ .board-column__header {
529
+ min-width: 0;
530
+ }
531
+
532
+ .board-column__count {
533
+ white-space: nowrap;
534
+ }
535
+
536
+ .board-task-card {
537
+ min-width: 0;
538
+ }
539
+
540
+ .board-task-card__body,
541
+ .board-task-card__footer,
542
+ .board-list-row__summary,
543
+ .board-list-row__meta {
544
+ min-width: 0;
545
+ }
546
+
547
+ .board-task-card__title,
548
+ .board-list-row__title {
549
+ display: -webkit-box;
550
+ overflow: hidden;
551
+ -webkit-box-orient: vertical;
552
+ -webkit-line-clamp: 2;
553
+ word-break: break-word;
554
+ }
555
+
556
+ .board-task-card__description .board-clamped-text__summary,
557
+ .board-list-row__description .board-clamped-text__summary {
558
+ gap: 3px;
559
+ }
560
+
561
+ .board-task-card__description .board-clamped-text__preview,
562
+ .board-list-row__description .board-clamped-text__preview,
563
+ .board-task-card__description .board-clamped-text__body,
564
+ .board-list-row__description .board-clamped-text__body {
565
+ font-size: inherit;
566
+ line-height: inherit;
567
+ color: inherit;
568
+ }
569
+
570
+ .board-task-card__description .board-clamped-text__toggle,
571
+ .board-list-row__description .board-clamped-text__toggle {
572
+ font-size: 0.72rem;
573
+ }
574
+
575
+ .board-task-card__cue,
576
+ .board-list-row__cue {
577
+ white-space: nowrap;
578
+ }
579
+
580
+ .board-list--dense {
581
+ gap: 12px;
582
+ }
583
+
584
+ .board-list-row {
585
+ min-width: 0;
586
+ }
587
+
588
+ .board-list-row__summary-head {
589
+ min-width: 0;
590
+ }
591
+
592
+ .board-list-row__updated {
593
+ white-space: nowrap;
594
+ }
595
+
596
+ .board-shell-topbar {
597
+ position: sticky;
598
+ top: 12px;
599
+ z-index: 20;
600
+ display: flex;
601
+ flex-wrap: wrap;
602
+ align-items: center;
603
+ gap: 10px;
604
+ padding: 8px 12px;
605
+ border: 1px solid var(--board-border);
606
+ border-radius: 16px;
607
+ background: color-mix(in srgb, var(--board-shell) 94%, transparent);
608
+ box-shadow: var(--board-shadow);
609
+ backdrop-filter: blur(18px);
610
+ }
611
+
612
+ .board-shell-topbar__identity {
613
+ display: flex;
614
+ align-items: center;
615
+ gap: 10px;
616
+ min-width: 0;
617
+ }
618
+
619
+ .board-shell-topbar__brand-mark {
620
+ display: inline-flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ width: 32px;
624
+ height: 32px;
625
+ flex-shrink: 0;
626
+ border-radius: 10px;
627
+ background: var(--board-accent-soft);
628
+ color: var(--board-accent);
629
+ box-shadow: inset 0 0 0 1px var(--board-border-strong);
630
+ }
631
+
632
+ .board-shell-topbar__title-row {
633
+ display: flex;
634
+ align-items: center;
635
+ gap: 6px;
636
+ }
637
+
638
+ .board-shell-topbar__title-row h1 {
639
+ margin: 0;
640
+ font-size: 0.95rem;
641
+ font-weight: 700;
642
+ line-height: 1.2;
643
+ white-space: nowrap;
644
+ }
645
+
646
+ .board-shell-topbar__context {
647
+ margin: 0;
648
+ font-size: 0.72rem;
649
+ line-height: 1.3;
650
+ color: var(--board-text-soft);
651
+ white-space: nowrap;
652
+ overflow: hidden;
653
+ text-overflow: ellipsis;
654
+ max-width: 28ch;
655
+ }
656
+
657
+ .board-shell-topbar__nav,
658
+ .board-shell-topbar__tools,
659
+ .board-shell-topbar__actions {
660
+ display: flex;
661
+ align-items: center;
662
+ gap: 6px;
663
+ }
664
+
665
+ .board-shell-topbar__nav {
666
+ min-width: 0;
667
+ }
668
+
669
+ .board-shell-topbar__nav-item {
670
+ display: inline-flex;
671
+ align-items: center;
672
+ gap: 5px;
673
+ min-height: 32px;
674
+ padding: 0 10px;
675
+ border: 1px solid var(--board-border);
676
+ border-radius: 999px;
677
+ background: rgba(255, 255, 255, 0.03);
678
+ color: var(--board-text-muted);
679
+ font-size: 0.8rem;
680
+ font-weight: 600;
681
+ cursor: pointer;
682
+ white-space: nowrap;
683
+ transition:
684
+ border-color 0.15s ease,
685
+ background-color 0.15s ease,
686
+ color 0.15s ease,
687
+ box-shadow 0.15s ease;
688
+ }
689
+
690
+ .board-shell-topbar__nav-item.is-active {
691
+ border-color: var(--board-border-strong);
692
+ background: var(--board-accent-soft);
693
+ color: var(--board-text);
694
+ }
695
+
696
+ .board-shell-topbar__nav-item[disabled] {
697
+ opacity: 0.45;
698
+ cursor: not-allowed;
699
+ }
700
+
701
+ .board-shell-topbar__tools {
702
+ flex: 1;
703
+ justify-content: flex-end;
704
+ min-width: 0;
705
+ }
706
+
707
+ .board-shell-topbar__actions {
708
+ flex-shrink: 0;
709
+ }
710
+
711
+ .board-shell-topbar__search {
712
+ display: flex;
713
+ align-items: center;
714
+ gap: 8px;
715
+ min-height: 32px;
716
+ min-width: 0;
717
+ flex: 1 1 180px;
718
+ max-width: 320px;
719
+ padding: 0 10px;
720
+ border: 1px solid var(--board-border);
721
+ border-radius: 10px;
722
+ background: var(--board-surface-2);
723
+ color: var(--board-text-muted);
724
+ font-size: 0.82rem;
725
+ }
726
+
727
+ .board-shell-topbar__search:focus-within {
728
+ border-color: var(--board-border-strong);
729
+ box-shadow:
730
+ inset 0 0 0 1px color-mix(in srgb, var(--board-accent) 24%, transparent),
731
+ 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent),
732
+ 0 0 0 4px var(--board-border-strong);
733
+ }
734
+
735
+ .board-shell-topbar__search-label,
736
+ .board-shell-topbar__assistive-copy,
737
+ .board-wh__control-text {
738
+ position: absolute;
739
+ width: 1px;
740
+ height: 1px;
741
+ padding: 0;
742
+ margin: -1px;
743
+ overflow: hidden;
744
+ clip: rect(0, 0, 0, 0);
745
+ white-space: nowrap;
746
+ border: 0;
747
+ }
748
+
749
+ .board-shell-topbar__search input {
750
+ width: 100%;
751
+ min-width: 0;
752
+ border: 0;
753
+ background: transparent;
754
+ color: var(--board-text);
755
+ font-size: 0.82rem;
756
+ outline: none;
757
+ }
758
+
759
+ .board-shell-topbar__search-kbd {
760
+ display: inline-flex;
761
+ align-items: center;
762
+ justify-content: center;
763
+ min-width: 20px;
764
+ height: 20px;
765
+ border: 1px solid var(--board-border);
766
+ border-radius: 6px;
767
+ background: rgba(255, 255, 255, 0.04);
768
+ color: var(--board-text-soft);
769
+ font-size: 0.65rem;
770
+ font-weight: 600;
771
+ }
772
+
773
+ .board-shell-topbar__icon-btn {
774
+ display: inline-flex;
775
+ align-items: center;
776
+ justify-content: center;
777
+ width: 32px;
778
+ height: 32px;
779
+ border: 1px solid var(--board-border);
780
+ border-radius: 999px;
781
+ background: rgba(255, 255, 255, 0.03);
782
+ color: var(--board-text-muted);
783
+ cursor: pointer;
784
+ transition: border-color 0.15s, color 0.15s;
785
+ }
786
+
787
+ .board-shell-topbar__icon-btn:hover {
788
+ border-color: var(--board-border-strong);
789
+ color: var(--board-text);
790
+ }
791
+
792
+ .board-shell-topbar__icon-btn:disabled,
793
+ .board-shell-topbar__meta summary:disabled,
794
+ .board-view-switch__tab:disabled,
795
+ .board-wh__notes-btn:disabled,
796
+ .board-wh__controls select:disabled {
797
+ opacity: 0.45;
798
+ cursor: not-allowed;
799
+ box-shadow: none;
800
+ }
801
+
802
+ .board-shell-topbar__meta {
803
+ position: relative;
804
+ }
805
+
806
+ .board-shell-topbar__meta summary {
807
+ display: inline-flex;
808
+ align-items: center;
809
+ justify-content: center;
810
+ width: 32px;
811
+ height: 32px;
812
+ border: 1px solid var(--board-border);
813
+ border-radius: 999px;
814
+ background: rgba(255, 255, 255, 0.03);
815
+ color: var(--board-text-muted);
816
+ cursor: pointer;
817
+ list-style: none;
818
+ }
819
+
820
+ .board-shell-topbar__meta summary::-webkit-details-marker {
821
+ display: none;
822
+ }
823
+
824
+ .board-shell-topbar__meta[open] > div {
825
+ position: absolute;
826
+ right: 0;
827
+ top: calc(100% + 8px);
828
+ width: min(360px, 88vw);
829
+ padding: 14px;
830
+ border: 1px solid var(--board-border);
831
+ border-radius: 16px;
832
+ background: var(--board-surface);
833
+ box-shadow: var(--board-shadow);
834
+ }
835
+
836
+ .board-shell-topbar__meta-title {
837
+ margin: 0 0 10px;
838
+ font-size: 0.92rem;
839
+ font-weight: 600;
840
+ color: var(--board-text);
841
+ }
842
+
843
+ .board-shell-topbar__meta-section + .board-shell-topbar__meta-section {
844
+ margin-top: 12px;
845
+ padding-top: 12px;
846
+ border-top: 1px solid var(--board-border);
847
+ }
848
+
849
+ .board-shell-topbar__meta-section strong {
850
+ display: block;
851
+ margin: 0 0 4px;
852
+ font-size: 0.78rem;
853
+ font-weight: 600;
854
+ letter-spacing: 0.04em;
855
+ text-transform: uppercase;
856
+ color: var(--board-text-soft);
857
+ }
858
+
859
+ .board-shell-topbar__meta p {
860
+ margin: 0;
861
+ color: var(--board-text-muted);
862
+ font-size: 0.84rem;
863
+ line-height: 1.5;
864
+ }
865
+
866
+ .board-shell-topbar__meta-scope {
867
+ margin-top: 6px !important;
868
+ color: var(--board-text) !important;
869
+ font-size: 0.88rem !important;
870
+ font-weight: 500;
871
+ line-height: 1.45;
872
+ word-break: break-word;
873
+ }
874
+
875
+ .board-workspace-header {
876
+ display: grid;
877
+ gap: 8px;
878
+ padding-bottom: 12px;
879
+ border-bottom: 1px solid var(--board-border);
880
+ }
881
+
882
+ .board-detail-surface__context {
883
+ max-width: 56ch;
884
+ }
885
+
886
+ /* ── Row 1: title + inline controls ── */
887
+ .board-wh__row-1 {
888
+ display: flex;
889
+ flex-wrap: wrap;
890
+ align-items: center;
891
+ gap: 10px;
892
+ min-width: 0;
893
+ }
894
+
895
+ .board-wh__title {
896
+ margin: 0;
897
+ font-size: clamp(1rem, 1.6vw, 1.35rem);
898
+ font-weight: 700;
899
+ line-height: 1.2;
900
+ color: var(--board-text);
901
+ overflow: hidden;
902
+ text-overflow: ellipsis;
903
+ white-space: nowrap;
904
+ min-width: 0;
905
+ max-width: 50ch;
906
+ }
907
+
908
+ .board-wh__controls {
909
+ display: flex;
910
+ flex-wrap: wrap;
911
+ align-items: center;
912
+ gap: 6px;
913
+ margin-left: auto;
914
+ }
915
+
916
+ .board-wh__control-label {
917
+ display: inline-flex;
918
+ align-items: center;
919
+ min-width: 0;
920
+ }
921
+
922
+ .board-wh__sep {
923
+ width: 1px;
924
+ height: 18px;
925
+ background: var(--board-border);
926
+ flex-shrink: 0;
927
+ }
928
+
929
+ .board-wh__inline-label {
930
+ display: inline-flex;
931
+ align-items: center;
932
+ min-width: 0;
933
+ max-width: 260px;
934
+ }
935
+
936
+ .board-wh__inline-label select {
937
+ max-width: 260px;
938
+ text-overflow: ellipsis;
939
+ }
940
+
941
+ /* ── Row 2: meta chips + view toggle ── */
942
+ .board-wh__row-2 {
943
+ display: flex;
944
+ flex-wrap: wrap;
945
+ align-items: center;
946
+ justify-content: space-between;
947
+ gap: 10px 14px;
948
+ }
949
+
950
+ .board-wh__meta {
951
+ display: flex;
952
+ flex-wrap: wrap;
953
+ align-items: center;
954
+ gap: 6px;
955
+ }
956
+
957
+ .board-wh__actions {
958
+ display: flex;
959
+ flex-wrap: wrap;
960
+ align-items: center;
961
+ justify-content: flex-end;
962
+ gap: 8px;
963
+ margin-left: auto;
964
+ }
965
+
966
+ .board-wh__action-group {
967
+ display: inline-flex;
968
+ flex-wrap: wrap;
969
+ align-items: center;
970
+ gap: 8px;
971
+ }
972
+
973
+ .board-view-switch {
974
+ display: inline-flex;
975
+ align-items: center;
976
+ gap: 2px;
977
+ min-height: 36px;
978
+ padding: 3px;
979
+ border: 1px solid var(--board-border);
980
+ border-radius: 10px;
981
+ background: rgba(255, 255, 255, 0.03);
982
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025);
983
+ }
984
+
985
+ .board-view-switch__tab {
986
+ display: inline-flex;
987
+ align-items: center;
988
+ justify-content: center;
989
+ gap: 7px;
990
+ min-height: 28px;
991
+ min-width: 0;
992
+ padding: 0 10px;
993
+ border: 1px solid transparent;
994
+ border-radius: 8px;
995
+ background: transparent;
996
+ color: var(--board-text-muted);
997
+ font-size: 0.75rem;
998
+ font-weight: 600;
999
+ letter-spacing: 0.01em;
1000
+ white-space: nowrap;
1001
+ cursor: pointer;
1002
+ touch-action: manipulation;
1003
+ transition:
1004
+ background-color 0.18s ease,
1005
+ border-color 0.18s ease,
1006
+ color 0.18s ease,
1007
+ box-shadow 0.18s ease;
1008
+ }
1009
+
1010
+ .board-view-switch__tab:hover {
1011
+ background: rgba(255, 255, 255, 0.045);
1012
+ color: var(--board-text);
1013
+ }
1014
+
1015
+ .board-view-switch__tab:focus-visible {
1016
+ outline: none;
1017
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent), 0 0 0 4px var(--board-border-strong);
1018
+ }
1019
+
1020
+ .board-view-switch__tab--active {
1021
+ border-color: color-mix(in srgb, var(--board-border-strong) 60%, var(--board-border));
1022
+ background: color-mix(in srgb, var(--board-accent-soft) 55%, rgba(255, 255, 255, 0.03));
1023
+ color: var(--board-text);
1024
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
1025
+ }
1026
+
1027
+ .board-view-switch__tab--active:hover {
1028
+ background: color-mix(in srgb, var(--board-accent-soft) 65%, rgba(255, 255, 255, 0.03));
1029
+ }
1030
+
1031
+ .board-view-switch__icon {
1032
+ width: 16px;
1033
+ height: 16px;
1034
+ flex-shrink: 0;
1035
+ color: color-mix(in srgb, var(--board-text-muted) 82%, white);
1036
+ transition: color 0.18s ease;
1037
+ }
1038
+
1039
+ .board-view-switch__tab:hover .board-view-switch__icon,
1040
+ .board-view-switch__tab--active .board-view-switch__icon {
1041
+ color: var(--board-accent);
1042
+ }
1043
+
1044
+ .board-view-switch__label {
1045
+ line-height: 1;
1046
+ }
1047
+
1048
+ .board-wh__notes-btn {
1049
+ display: inline-flex;
1050
+ align-items: center;
1051
+ justify-content: center;
1052
+ gap: 6px;
1053
+ min-height: 36px;
1054
+ padding: 0 10px;
1055
+ border: 1px solid var(--board-border);
1056
+ border-radius: 10px;
1057
+ background: rgba(255, 255, 255, 0.03);
1058
+ color: var(--board-text-muted);
1059
+ font-size: 0.75rem;
1060
+ font-weight: 600;
1061
+ white-space: nowrap;
1062
+ cursor: pointer;
1063
+ touch-action: manipulation;
1064
+ transition:
1065
+ border-color 0.15s ease,
1066
+ background-color 0.15s ease,
1067
+ color 0.15s ease,
1068
+ box-shadow 0.15s ease;
1069
+ }
1070
+
1071
+ .board-wh__notes-btn:hover {
1072
+ border-color: var(--board-border-strong);
1073
+ background: rgba(255, 255, 255, 0.045);
1074
+ color: var(--board-text);
1075
+ }
1076
+
1077
+ .board-wh__notes-btn:focus-visible {
1078
+ outline: none;
1079
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent), 0 0 0 4px var(--board-border-strong);
1080
+ }
1081
+
1082
+ .board-wh__notes-btn--active {
1083
+ border-color: color-mix(in srgb, var(--board-border-strong) 60%, var(--board-border));
1084
+ background: color-mix(in srgb, var(--board-accent-soft) 55%, rgba(255, 255, 255, 0.03));
1085
+ color: var(--board-text);
1086
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
1087
+ }
1088
+
1089
+ /* ── Notes panel (full-width collapsible) ── */
1090
+ .board-wh__notes-panel {
1091
+ padding: 14px;
1092
+ border: 1px solid var(--board-border);
1093
+ border-radius: 14px;
1094
+ background: rgba(255, 255, 255, 0.02);
1095
+ max-height: 260px;
1096
+ overflow-y: auto;
1097
+ overscroll-behavior: contain;
1098
+ }
1099
+
1100
+ .board-wh__notes-body {
1101
+ white-space: pre-wrap;
1102
+ word-break: break-word;
1103
+ font-size: 0.84rem;
1104
+ line-height: 1.6;
1105
+ color: var(--board-text-muted);
1106
+ }
1107
+
1108
+ .board-epic-row__updated,
1109
+ .board-task-card__title,
1110
+ .board-list-row__title,
1111
+ .board-list-row__updated,
1112
+ .board-task-card__description,
1113
+ .board-list-row__description,
1114
+ .board-related-item__description,
1115
+ .board-detail-copy,
1116
+ .board-shell-topbar__identity,
1117
+ .board-shell-topbar__title-row {
1118
+ overflow-wrap: anywhere;
1119
+ }
1120
+
1121
+ @media (max-width: 1280px) {
1122
+ .board-layout--workspace .board-root--tasks {
1123
+ grid-template-columns: minmax(0, 1fr);
1124
+ }
1125
+
1126
+ .board-task-modal {
1127
+ width: min(88vw, 980px);
1128
+ }
1129
+
1130
+ .board-modal--sheet {
1131
+ width: min(88vw, 820px);
1132
+ }
1133
+
1134
+ .board-shell-topbar__context {
1135
+ display: none;
1136
+ }
1137
+
1138
+ .board-layout--workspace .board-kanban {
1139
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1140
+ }
1141
+ }
1142
+
1143
+ @media (max-width: 900px) {
1144
+ .board-layout {
1145
+ gap: 12px;
1146
+ }
1147
+
1148
+ .board-shell-v2 {
1149
+ padding: 10px;
1150
+ }
1151
+
1152
+ .board-shell-topbar__tools {
1153
+ flex-wrap: wrap;
1154
+ }
1155
+
1156
+ .board-workspace {
1157
+ padding: 16px;
1158
+ }
1159
+
1160
+ .board-workspace-header {
1161
+ gap: 12px;
1162
+ padding-bottom: 12px;
1163
+ }
1164
+
1165
+ .board-wh__title {
1166
+ max-width: 100%;
1167
+ white-space: normal;
1168
+ -webkit-line-clamp: 2;
1169
+ display: -webkit-box;
1170
+ -webkit-box-orient: vertical;
1171
+ overflow: hidden;
1172
+ }
1173
+
1174
+ .board-layout--workspace {
1175
+ max-height: none;
1176
+ }
1177
+
1178
+ .board-layout--workspace .board-root--tasks {
1179
+ grid-template-columns: minmax(0, 1fr);
1180
+ }
1181
+
1182
+ .board-task-modal,
1183
+ .board-modal--sheet {
1184
+ width: min(100vw - 16px, 920px);
1185
+ max-height: calc(100dvh - 16px);
1186
+ padding: 0;
1187
+ border-radius: 28px;
1188
+ }
1189
+
1190
+ .board-task-modal .board-detail-surface,
1191
+ .board-modal--sheet .board-detail-surface {
1192
+ background: var(--board-surface);
1193
+ }
1194
+
1195
+ .board-detail-surface__header {
1196
+ padding-bottom: 14px;
1197
+ }
1198
+
1199
+ .board-detail-surface__body {
1200
+ padding-top: 14px;
1201
+ }
1202
+
1203
+ .board-detail-card {
1204
+ border-radius: 20px;
1205
+ }
1206
+
1207
+ .board-task-card,
1208
+ .board-list-row {
1209
+ border-radius: 20px;
1210
+ }
1211
+
1212
+
1213
+ .board-layout--workspace .board-kanban {
1214
+ grid-template-columns: minmax(0, 1fr);
1215
+ }
1216
+
1217
+ .board-column__header,
1218
+ .board-list-row__summary-head {
1219
+ flex-direction: column;
1220
+ align-items: flex-start;
1221
+ }
1222
+
1223
+ .board-list-row__updated {
1224
+ white-space: normal;
1225
+ }
1226
+
1227
+ .board-table__header--epics,
1228
+ .board-epic-row {
1229
+ grid-template-columns: minmax(0, 1fr);
1230
+ }
1231
+
1232
+ .board-epic-row {
1233
+ gap: 8px;
1234
+ padding: 12px;
1235
+ }
1236
+
1237
+ .board-epic-row__status,
1238
+ .board-epic-row__action-wrap {
1239
+ justify-content: flex-start;
1240
+ }
1241
+
1242
+ .board-epic-row__counts {
1243
+ grid-template-columns: repeat(2, minmax(0, max-content));
1244
+ }
1245
+ }
1246
+
1247
+ @media (max-width: 1100px) {
1248
+ .board-table__header--epics,
1249
+ .board-list__header {
1250
+ display: none !important;
1251
+ }
1252
+
1253
+ .board-epic-row,
1254
+ .board-list-row {
1255
+ grid-template-columns: minmax(0, 1fr);
1256
+ }
1257
+
1258
+ .board-epic-row__status,
1259
+ .board-epic-row__action-wrap {
1260
+ justify-content: flex-start;
1261
+ }
1262
+
1263
+ .board-column__count,
1264
+ .board-task-card__cue,
1265
+ .board-list-row__cue,
1266
+ .board-list-row__updated {
1267
+ white-space: normal;
1268
+ }
1269
+ }
1270
+
1271
+ @media (max-width: 640px) {
1272
+ .board-wh__row-2 {
1273
+ align-items: flex-start;
1274
+ }
1275
+
1276
+ .board-wh__actions {
1277
+ width: 100%;
1278
+ margin-left: 0;
1279
+ justify-content: flex-start;
1280
+ }
1281
+
1282
+ .board-wh__action-group {
1283
+ width: 100%;
1284
+ justify-content: flex-start;
1285
+ }
1286
+
1287
+ .board-view-switch {
1288
+ max-width: 100%;
1289
+ }
1290
+
1291
+ .board-view-switch__tab {
1292
+ min-width: 38px;
1293
+ padding: 0 9px;
1294
+ }
1295
+
1296
+ .board-view-switch__label {
1297
+ display: none;
1298
+ }
1299
+
1300
+ .board-shell-topbar {
1301
+ padding: 8px 10px;
1302
+ border-radius: 14px;
1303
+ }
1304
+
1305
+ .board-shell-topbar {
1306
+ display: grid;
1307
+ grid-template-columns: 1fr auto;
1308
+ gap: 8px;
1309
+ align-items: center;
1310
+ }
1311
+
1312
+ .board-shell-topbar__identity {
1313
+ min-width: 0;
1314
+ }
1315
+
1316
+ .board-shell-topbar__nav {
1317
+ grid-column: 1 / -1;
1318
+ order: 3;
1319
+ }
1320
+
1321
+ .board-shell-topbar__tools {
1322
+ grid-column: 1 / -1;
1323
+ order: 4;
1324
+ display: grid;
1325
+ grid-template-columns: 1fr auto;
1326
+ gap: 8px;
1327
+ align-items: center;
1328
+ }
1329
+
1330
+ .board-shell-topbar__search {
1331
+ max-width: none;
1332
+ }
1333
+
1334
+ .board-detail-surface__title-row,
1335
+ .board-detail-summary-row {
1336
+ flex-direction: column;
1337
+ align-items: flex-start;
1338
+ }
1339
+
1340
+ .board-task-modal,
1341
+ .board-modal--sheet {
1342
+ width: 100%;
1343
+ max-height: 100dvh;
1344
+ border-radius: 24px;
1345
+ }
1346
+
1347
+ .board-task-modal-backdrop,
1348
+ .board-modal-backdrop {
1349
+ padding: 0;
1350
+ align-items: stretch;
1351
+ }
1352
+
1353
+ .board-task-modal,
1354
+ .board-modal--sheet,
1355
+ .board-task-modal .board-detail-surface,
1356
+ .board-modal--sheet .board-detail-surface {
1357
+ min-height: 100dvh;
1358
+ border-radius: 0;
1359
+ }
1360
+
1361
+ .board-workspace {
1362
+ padding: 14px;
1363
+ }
1364
+
1365
+ .board-content {
1366
+ margin-top: 10px;
1367
+ }
1368
+
1369
+
1370
+ .board-layout--workspace {
1371
+ height: 100%;
1372
+ min-height: 0;
1373
+ }
1374
+
1375
+ .board-layout--workspace .board-content {
1376
+ margin-top: 12px;
1377
+ }
1378
+
1379
+ .board-layout--workspace .board-kanban {
1380
+ grid-template-columns: minmax(0, 1fr);
1381
+ }
1382
+
1383
+ .board-task-card__header,
1384
+ .board-task-card__footer,
1385
+ .board-list-row__meta {
1386
+ gap: 8px;
1387
+ }
1388
+
1389
+ .board-task-card,
1390
+ .board-list-row,
1391
+ .board-column {
1392
+ padding: 12px;
1393
+ }
1394
+ }
1395
+
1396
+ @media (min-width: 1440px) {
1397
+ .board-layout--workspace .board-kanban {
1398
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1399
+ }
1400
+ }
1401
+
1402
+ @media (min-width: 1100px) and (max-width: 1439px) {
1403
+ .board-layout--workspace .board-kanban {
1404
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1405
+ }
1406
+ }
1407
+
1408
+ /* ───── Material Symbols icon base ───── */
1409
+
1410
+ .material-symbols-rounded {
1411
+ font-family: "Material Symbols Rounded";
1412
+ font-weight: 400;
1413
+ font-style: normal;
1414
+ font-size: 20px;
1415
+ line-height: 1;
1416
+ letter-spacing: normal;
1417
+ text-transform: none;
1418
+ display: inline-block;
1419
+ white-space: nowrap;
1420
+ direction: ltr;
1421
+ font-variation-settings:
1422
+ "FILL" 0,
1423
+ "wght" 400,
1424
+ "GRAD" 0,
1425
+ "opsz" 20;
1426
+ }
1427
+
1428
+ /* ───── Tailwind utility replacements ───── */
1429
+
1430
+ /* --- Display & Box Model --- */
1431
+ .block { display: block; }
1432
+ .inline-flex { display: inline-flex; }
1433
+ .flex { display: flex; }
1434
+ .grid { display: grid; }
1435
+ .hidden { display: none; }
1436
+
1437
+ /* --- Flex --- */
1438
+ .flex-col { flex-direction: column; }
1439
+ .flex-1 { flex: 1 1 0%; }
1440
+ .flex-wrap { flex-wrap: wrap; }
1441
+ .shrink-0 { flex-shrink: 0; }
1442
+
1443
+ /* --- Grid --- */
1444
+ .grid-rows-\[auto_1fr\] { grid-template-rows: auto minmax(0, 1fr); }
1445
+ .grid-rows-\[1fr\] { grid-template-rows: minmax(0, 1fr); }
1446
+
1447
+ /* --- Alignment --- */
1448
+ .items-start { align-items: flex-start; }
1449
+ .items-center { align-items: center; }
1450
+ .justify-center { justify-content: center; }
1451
+ .justify-between { justify-content: space-between; }
1452
+ .justify-end { justify-content: flex-end; }
1453
+ .content-start { align-content: flex-start; }
1454
+ .place-items-center { place-items: center; }
1455
+
1456
+ /* --- Gap --- */
1457
+ .gap-2 { gap: 0.5rem; }
1458
+ .gap-2\.5 { gap: 0.625rem; }
1459
+ .gap-3 { gap: 0.75rem; }
1460
+ .gap-4 { gap: 1rem; }
1461
+ .gap-5 { gap: 1.25rem; }
1462
+
1463
+ /* --- Position --- */
1464
+ .fixed { position: fixed; }
1465
+ .inset-0 { inset: 0; }
1466
+ .inset-4 { inset: 1rem; }
1467
+
1468
+ /* --- Overflow --- */
1469
+ .overflow-hidden { overflow: hidden; }
1470
+ .overflow-auto { overflow: auto; }
1471
+ .overflow-y-auto { overflow-y: auto; }
1472
+ .overscroll-contain { overscroll-behavior: contain; }
1473
+
1474
+ /* --- Width --- */
1475
+ .w-full { width: 100%; }
1476
+ .w-10 { width: 2.5rem; }
1477
+ .w-14 { width: 3.5rem; }
1478
+ .max-w-\[1600px\] { max-width: 1600px; }
1479
+ .max-w-4xl { max-width: 56rem; }
1480
+ .max-w-2xl { max-width: 42rem; }
1481
+
1482
+ /* --- Height --- */
1483
+ .h-full { height: 100%; }
1484
+ .h-10 { height: 2.5rem; }
1485
+ .h-14 { height: 3.5rem; }
1486
+ .min-h-screen { min-height: 100vh; }
1487
+ .min-h-0 { min-height: 0; }
1488
+ .min-w-0 { min-width: 0; }
1489
+ .min-h-\[20rem\] { min-height: 20rem; }
1490
+ .min-h-\[96px\] { min-height: 96px; }
1491
+ .min-h-\[144px\] { min-height: 144px; }
1492
+ .min-h-\[180px\] { min-height: 180px; }
1493
+ .max-h-\[calc\(100dvh-2rem\)\] { max-height: calc(100dvh - 2rem); }
1494
+
1495
+ /* --- Margin --- */
1496
+ .mx-auto { margin-inline: auto; }
1497
+ .mb-5 { margin-bottom: 1.25rem; }
1498
+ .mt-0\.5 { margin-top: 0.125rem; }
1499
+ .mt-1 { margin-top: 0.25rem; }
1500
+ .mt-2 { margin-top: 0.5rem; }
1501
+ .mt-3 { margin-top: 0.75rem; }
1502
+ .mt-4 { margin-top: 1rem; }
1503
+ .mt-6 { margin-top: 1.5rem; }
1504
+
1505
+ /* --- Padding --- */
1506
+ .p-1 { padding: 0.25rem; }
1507
+ .p-3 { padding: 0.75rem; }
1508
+ .p-4 { padding: 1rem; }
1509
+ .p-5 { padding: 1.25rem; }
1510
+ .p-8 { padding: 2rem; }
1511
+ .px-0 { padding-inline: 0; }
1512
+ .px-1 { padding-inline: 0.25rem; }
1513
+ .px-2 { padding-inline: 0.5rem; }
1514
+ .px-2\.5 { padding-inline: 0.625rem; }
1515
+ .px-3\.5 { padding-inline: 0.875rem; }
1516
+ .px-4 { padding-inline: 1rem; }
1517
+ .px-5 { padding-inline: 1.25rem; }
1518
+ .py-1 { padding-block: 0.25rem; }
1519
+ .py-2 { padding-block: 0.5rem; }
1520
+ .py-2\.5 { padding-block: 0.625rem; }
1521
+ .py-3 { padding-block: 0.75rem; }
1522
+ .py-4 { padding-block: 1rem; }
1523
+ .py-6 { padding-block: 1.5rem; }
1524
+ .py-10 { padding-block: 2.5rem; }
1525
+ .pb-3 { padding-bottom: 0.75rem; }
1526
+ .pb-4 { padding-bottom: 1rem; }
1527
+ .pb-5 { padding-bottom: 1.25rem; }
1528
+ .pt-5 { padding-top: 1.25rem; }
1529
+ .pr-1 { padding-right: 0.25rem; }
1530
+
1531
+ /* --- Space --- */
1532
+ .space-y-3 > :not(:first-child) { margin-top: 0.75rem; }
1533
+ .space-y-4 > :not(:first-child) { margin-top: 1rem; }
1534
+
1535
+ /* --- Typography — Size --- */
1536
+ .text-xs { font-size: 0.75rem; line-height: 1rem; }
1537
+ .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
1538
+ .text-base { font-size: 1rem; line-height: 1.5rem; }
1539
+ .text-lg { font-size: 1.125rem; line-height: 1.75rem; }
1540
+ .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
1541
+ .text-2xl { font-size: 1.5rem; line-height: 2rem; }
1542
+ .text-3xl { font-size: 1.875rem; line-height: 2.25rem; }
1543
+ .text-\[10px\] { font-size: 10px; }
1544
+ .text-\[11px\] { font-size: 11px; }
1545
+ .text-\[0\.95rem\] { font-size: 0.95rem; }
1546
+ .text-\[0\.98rem\] { font-size: 0.98rem; }
1547
+ .text-\[16px\] { font-size: 16px; }
1548
+ .text-\[18px\] { font-size: 18px; }
1549
+ .text-\[20px\] { font-size: 20px; }
1550
+ .text-\[22px\] { font-size: 22px; }
1551
+
1552
+ /* --- Typography — Weight --- */
1553
+ .font-medium { font-weight: 500; }
1554
+ .font-semibold { font-weight: 600; }
1555
+
1556
+ /* --- Typography — Transform & Spacing --- */
1557
+ .uppercase { text-transform: uppercase; }
1558
+ .tracking-tight { letter-spacing: -0.025em; }
1559
+ .tracking-\[0\.14em\] { letter-spacing: 0.14em; }
1560
+ .tracking-\[0\.16em\] { letter-spacing: 0.16em; }
1561
+ .tracking-\[0\.18em\] { letter-spacing: 0.18em; }
1562
+
1563
+ /* --- Typography — Line Height --- */
1564
+ .leading-5 { line-height: 1.25rem; }
1565
+ .leading-6 { line-height: 1.5rem; }
1566
+ .leading-7 { line-height: 1.75rem; }
1567
+ .leading-snug { line-height: 1.375; }
1568
+
1569
+ /* --- Typography — Alignment --- */
1570
+ .text-center { text-align: center; }
1571
+ .text-left { text-align: left; }
1572
+
1573
+ /* --- Text Color --- */
1574
+ .text-white { color: #fff; }
1575
+ .text-amber-300 { color: #fcd34d; }
1576
+ .text-sky-300 { color: #7dd3fc; }
1577
+ .text-emerald-300 { color: #6ee7b7; }
1578
+ .text-red-300 { color: #fca5a5; }
1579
+ .text-\[var\(--board-text\)\] { color: var(--board-text); }
1580
+ .text-\[var\(--board-text-muted\)\] { color: var(--board-text-muted); }
1581
+ .text-\[var\(--board-text-soft\)\] { color: var(--board-text-soft); }
1582
+ .text-\[var\(--board-accent\)\] { color: var(--board-accent); }
1583
+
1584
+ /* --- Background --- */
1585
+ .bg-white\/\[0\.02\] { background-color: rgba(255, 255, 255, 0.02); }
1586
+ .bg-white\/\[0\.03\] { background-color: rgba(255, 255, 255, 0.03); }
1587
+ .bg-white\/\[0\.04\] { background-color: rgba(255, 255, 255, 0.04); }
1588
+ .bg-white\/\[0\.05\] { background-color: rgba(255, 255, 255, 0.05); }
1589
+ .bg-white\/\[0\.06\] { background-color: rgba(255, 255, 255, 0.06); }
1590
+ .bg-white\/\[0\.08\] { background-color: rgba(255, 255, 255, 0.08); }
1591
+ .bg-white\/5 { background-color: rgba(255, 255, 255, 0.05); }
1592
+ .bg-amber-500\/10 { background-color: rgba(245, 158, 11, 0.1); }
1593
+ .bg-sky-400\/10 { background-color: rgba(56, 189, 248, 0.1); }
1594
+ .bg-emerald-500\/10 { background-color: rgba(16, 185, 129, 0.1); }
1595
+ .bg-red-500\/10 { background-color: rgba(239, 68, 68, 0.1); }
1596
+ .bg-slate-950\/70 { background-color: rgba(2, 6, 23, 0.7); }
1597
+ .bg-\[var\(--board-surface\)\] { background-color: var(--board-surface); }
1598
+ .bg-\[var\(--board-surface-2\)\] { background-color: var(--board-surface-2); }
1599
+ .bg-\[var\(--board-surface-3\)\] { background-color: var(--board-surface-3); }
1600
+ .bg-\[var\(--board-accent\)\] { background-color: var(--board-accent); }
1601
+ .bg-\[var\(--board-accent-soft)\]\/40 { background-color: color-mix(in srgb, var(--board-accent-soft) 40%, transparent); }
1602
+ .bg-\[var\(--board-accent-soft\)\] { background-color: var(--board-accent-soft); }
1603
+
1604
+ /* --- Border --- */
1605
+ .border { border-width: 1px; border-style: solid; }
1606
+ .border-b { border-bottom-width: 1px; border-bottom-style: solid; }
1607
+ .border-dashed { border-style: dashed; }
1608
+ .border-white\/10 { border-color: rgba(255, 255, 255, 0.1); }
1609
+ .border-amber-500\/20 { border-color: rgba(245, 158, 11, 0.2); }
1610
+ .border-sky-400\/20 { border-color: rgba(56, 189, 248, 0.2); }
1611
+ .border-emerald-500\/20 { border-color: rgba(16, 185, 129, 0.2); }
1612
+ .border-\[var\(--board-border\)\] { border-color: var(--board-border); }
1613
+ .border-\[var\(--board-border-strong\)\] { border-color: var(--board-border-strong); }
1614
+ .border-\[var\(--board-accent\)\] { border-color: var(--board-accent); }
1615
+
1616
+ /* --- Border Radius --- */
1617
+ .rounded-lg { border-radius: 0.5rem; }
1618
+ .rounded-2xl { border-radius: 1rem; }
1619
+ .rounded-3xl { border-radius: 1.5rem; }
1620
+ .rounded-full { border-radius: 9999px; }
1621
+ .rounded-\[22px\] { border-radius: 22px; }
1622
+ .rounded-\[24px\] { border-radius: 24px; }
1623
+ .rounded-\[28px\] { border-radius: 28px; }
1624
+ .rounded-\[32px\] { border-radius: 32px; }
1625
+
1626
+ /* --- Ring & Outline --- */
1627
+ .ring-1 { box-shadow: 0 0 0 1px var(--tw-ring-color, currentColor); }
1628
+ .ring-red-500\/20 { --tw-ring-color: rgba(239, 68, 68, 0.2); box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.2); }
1629
+ .ring-emerald-500\/20 { --tw-ring-color: rgba(16, 185, 129, 0.2); box-shadow: 0 0 0 1px rgba(16, 185, 129, 0.2); }
1630
+ .ring-\[var\(--board-border-strong\)\] { --tw-ring-color: var(--board-border-strong); }
1631
+ .ring-1.ring-\[var\(--board-border-strong\)\] { box-shadow: 0 0 0 1px var(--board-border-strong); }
1632
+
1633
+ /* --- Shadow (including custom Tailwind theme values) --- */
1634
+ .shadow-sm { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); }
1635
+ .shadow-panel { box-shadow: var(--board-shadow); }
1636
+ .shadow-lift { box-shadow: 0 18px 52px rgba(0, 0, 0, 0.34); }
1637
+ .shadow-focus { box-shadow: 0 0 0 1px var(--board-border-strong), 0 16px 40px rgba(88, 28, 135, 0.2); }
1638
+ .shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.18\)\] { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18); }
1639
+ .shadow-\[inset_0_0_0_1px_var\(--board-border-strong\)\] { box-shadow: inset 0 0 0 1px var(--board-border-strong); }
1640
+
1641
+ /* --- Transition --- */
1642
+ .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
1643
+ .duration-200 { transition-duration: 200ms; }
1644
+
1645
+ /* --- Cursor & Interactivity --- */
1646
+ .cursor-pointer { cursor: pointer; }
1647
+ .list-none { list-style: none; }
1648
+
1649
+ /* --- Backdrop --- */
1650
+ .backdrop-blur-md { backdrop-filter: blur(12px); }
1651
+ .backdrop-blur-xl { backdrop-filter: blur(24px); }
1652
+
1653
+ /* --- Z-Index --- */
1654
+ .z-30 { z-index: 30; }
1655
+ .z-40 { z-index: 40; }
1656
+ .z-50 { z-index: 50; }
1657
+
1658
+ /* --- Hover states --- */
1659
+ .hover\:bg-white\/\[0\.04\]:hover { background-color: rgba(255, 255, 255, 0.04); }
1660
+ .hover\:bg-white\/\[0\.06\]:hover { background-color: rgba(255, 255, 255, 0.06); }
1661
+ .hover\:bg-white\/\[0\.08\]:hover { background-color: rgba(255, 255, 255, 0.08); }
1662
+ .hover\:border-\[var\(--board-border-strong\)\]:hover { border-color: var(--board-border-strong); }
1663
+ .hover\:border-\[var\(--board-accent-strong\)\]:hover { border-color: var(--board-accent-strong); }
1664
+ .hover\:bg-\[var\(--board-accent-strong\)\]:hover { background-color: var(--board-accent-strong); }
1665
+ .hover\:shadow-lift:hover { box-shadow: 0 18px 52px rgba(0, 0, 0, 0.34); }
1666
+ .hover\:text-\[var\(--board-text\)\]:hover { color: var(--board-text); }
1667
+ .hover\:-translate-y-0\.5:hover { transform: translateY(-0.125rem); }
1668
+
1669
+ /* --- Focus states --- */
1670
+ .focus-visible\:outline-none:focus-visible { outline: none; }
1671
+ .focus-visible\:ring-2:focus-visible { box-shadow: 0 0 0 2px var(--tw-ring-offset-color, var(--board-bg)), 0 0 0 4px var(--tw-ring-color, var(--board-border-strong)); }
1672
+ .focus-visible\:ring-\[var\(--board-border-strong\)\]:focus-visible { --tw-ring-color: var(--board-border-strong); }
1673
+ .focus-visible\:ring-offset-2:focus-visible { --tw-ring-offset-width: 2px; }
1674
+ .focus-visible\:ring-offset-\[var\(--board-bg\)\]:focus-visible { --tw-ring-offset-color: var(--board-bg); }
1675
+ .focus-visible\:ring-offset-\[var\(--board-surface\)\]:focus-visible { --tw-ring-offset-color: var(--board-surface); }
1676
+ .focus\:border-\[var\(--board-border-strong\)\]:focus { border-color: var(--board-border-strong); }
1677
+ .focus\:outline-none:focus { outline: none; }
1678
+ .focus\:ring-2:focus { box-shadow: 0 0 0 2px var(--board-bg), 0 0 0 4px var(--board-accent-soft); }
1679
+ .focus\:ring-\[var\(--board-accent-soft\)\]:focus { --tw-ring-color: var(--board-accent-soft); }
1680
+
1681
+ /* --- Disabled states --- */
1682
+ .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; }
1683
+ .disabled\:opacity-60:disabled { opacity: 0.6; }
1684
+
1685
+ /* --- Placeholder --- */
1686
+ .placeholder\:text-\[var\(--board-text-soft\)\]::placeholder { color: var(--board-text-soft); }
1687
+
1688
+ /* ───── Responsive breakpoints ───── */
1689
+
1690
+ @media (min-width: 640px) {
1691
+ .sm\:flex-row { flex-direction: row; }
1692
+ .sm\:items-start { align-items: flex-start; }
1693
+ .sm\:justify-between { justify-content: space-between; }
1694
+ .sm\:mt-0 { margin-top: 0; }
1695
+ .sm\:p-5 { padding: 1.25rem; }
1696
+ .sm\:p-6 { padding: 1.5rem; }
1697
+ .sm\:px-6 { padding-inline: 1.5rem; }
1698
+ .sm\:py-6 { padding-block: 1.5rem; }
1699
+ .sm\:text-base { font-size: 1rem; line-height: 1.5rem; }
1700
+ .sm\:text-\[0\.95rem\] { font-size: 0.95rem; }
1701
+ .sm\:text-\[0\.98rem\] { font-size: 0.98rem; }
1702
+ }
1703
+
1704
+ @media (min-width: 768px) {
1705
+ .md\:grid { display: grid; }
1706
+ .md\:grid-cols-\[minmax\(0\,1fr\)_auto\] { grid-template-columns: minmax(0, 1fr) auto; }
1707
+ .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1708
+ .md\:items-start { align-items: flex-start; }
1709
+ }
1710
+
1711
+ @media (min-width: 1024px) {
1712
+ .lg\:grid { display: grid; }
1713
+ .lg\:grid-cols-\[minmax\(0\,2fr\)_150px_minmax\(0\,210px\)_150px\] { grid-template-columns: minmax(0, 2fr) 150px minmax(0, 210px) 150px; }
1714
+ .lg\:items-start { align-items: flex-start; }
1715
+ .lg\:p-4 { padding: 1rem; }
1716
+ }
1717
+
1718
+ @media (min-width: 1280px) {
1719
+ .xl\:gap-5 { gap: 1.25rem; }
1720
+ .xl\:grid { display: grid; }
1721
+ .xl\:grid-rows-\[auto_1fr\] { grid-template-rows: auto minmax(0, 1fr); }
1722
+ .xl\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
1723
+ .xl\:inset-auto { inset: auto; }
1724
+ .xl\:max-h-none { max-height: none; }
1725
+ .xl\:min-w-\[240px\] { min-width: 240px; }
1726
+ .xl\:p-5 { padding: 1.25rem; }
1727
+ .xl\:px-8 { padding-inline: 2rem; }
1728
+ .xl\:static { position: static; }
1729
+ }
1730
+
1731
+ /* ───── Tabular nums & text-wrap (subtask db57f841) ───── */
1732
+
1733
+ .board-epic-row__updated,
1734
+ .board-column__count,
1735
+ .board-task-card__eyebrow,
1736
+ .board-list-row__updated {
1737
+ font-variant-numeric: tabular-nums;
1738
+ }
1739
+
1740
+ h1, h2, h3, p {
1741
+ text-wrap: pretty;
1742
+ }
1743
+
1744
+ /* ───── Touch-action on interactive elements (subtask f19f9e1b) ───── */
1745
+
1746
+ button,
1747
+ a,
1748
+ summary,
1749
+ select,
1750
+ input,
1751
+ textarea,
1752
+ [role="button"],
1753
+ [tabindex="0"],
1754
+ [draggable="true"] {
1755
+ touch-action: manipulation;
1756
+ }
1757
+
1758
+ /* ───── Prefers-reduced-motion (subtask aabc7808) ───── */
1759
+
1760
+ @media (prefers-reduced-motion: reduce) {
1761
+ *,
1762
+ *::before,
1763
+ *::after {
1764
+ animation-duration: 0.01ms !important;
1765
+ animation-iteration-count: 1 !important;
1766
+ transition-duration: 0.01ms !important;
1767
+ scroll-behavior: auto !important;
1768
+ }
1769
+ }
1770
+
1771
+ /* ───── Skip link ───── */
1772
+
1773
+ .sr-only {
1774
+ position: absolute;
1775
+ width: 1px;
1776
+ height: 1px;
1777
+ padding: 0;
1778
+ margin: -1px;
1779
+ overflow: hidden;
1780
+ clip: rect(0, 0, 0, 0);
1781
+ white-space: nowrap;
1782
+ border-width: 0;
1783
+ }
1784
+
1785
+ .focus\:not-sr-only:focus {
1786
+ position: fixed;
1787
+ width: auto;
1788
+ height: auto;
1789
+ padding: 0;
1790
+ margin: 0;
1791
+ overflow: visible;
1792
+ clip: auto;
1793
+ white-space: normal;
1794
+ }
1795
+
1796
+ .focus\:fixed:focus { position: fixed; }
1797
+ .focus\:top-2:focus { top: 0.5rem; }
1798
+ .focus\:left-2:focus { left: 0.5rem; }
1799
+ .focus\:z-50:focus { z-index: 50; }
1800
+ .focus\:rounded-lg:focus { border-radius: 0.5rem; }
1801
+ .focus\:bg-\[var\(--board-accent\)\]:focus { background-color: var(--board-accent); }
1802
+ .focus\:px-4:focus { padding-inline: 1rem; }
1803
+ .focus\:py-2:focus { padding-block: 0.5rem; }
1804
+ .focus\:text-white:focus { color: #fff; }
1805
+
1806
+ /* ───── Important overrides for compact form selects ───── */
1807
+
1808
+ .\!py-1 { padding-block: 0.25rem !important; }
1809
+ .\!px-2 { padding-inline: 0.5rem !important; }
1810
+ .\!text-xs { font-size: 0.75rem !important; line-height: 1rem !important; }
1811
+ .\!min-h-0 { min-height: 0 !important; }