trekoon 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +14 -14
  2. package/docs/commands.md +9 -11
  3. package/docs/quickstart.md +10 -12
  4. package/package.json +23 -1
  5. package/src/board/assets/app.js +469 -1377
  6. package/src/board/assets/components/ClampedText.js +1 -1
  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 +43 -26
  10. package/src/board/assets/components/EpicsOverview.js +52 -11
  11. package/src/board/assets/components/Inspector.js +335 -0
  12. package/src/board/assets/components/Notice.js +87 -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 +319 -0
  18. package/src/board/assets/components/assetMap.js +29 -14
  19. package/src/board/assets/components/helpers.js +261 -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 +20 -57
  23. package/src/board/assets/main.js +2 -18
  24. package/src/board/assets/runtime/clipboard.js +34 -0
  25. package/src/board/assets/runtime/delegation.js +342 -0
  26. package/src/board/assets/state/actions.js +204 -16
  27. package/src/board/assets/state/api.js +201 -46
  28. package/src/board/assets/state/store.js +418 -117
  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 +933 -129
  32. package/src/board/assets/styles/fonts.css +22 -0
  33. package/src/board/routes.ts +15 -6
  34. package/src/board/server.ts +1 -0
  35. package/src/board/assets/components/AppShell.js +0 -17
  36. package/src/board/assets/components/BoardTopbar.js +0 -78
  37. package/src/board/assets/components/WorkspaceHeader.js +0 -70
  38. package/src/board/assets/utils/dom.js +0 -308
@@ -1,3 +1,9 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
1
7
  :root {
2
8
  color-scheme: dark;
3
9
  --board-bg: #0b0d12;
@@ -56,13 +62,28 @@ body,
56
62
  body {
57
63
  margin: 0;
58
64
  min-height: 100dvh;
59
- font-family: "Instrument Sans", "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;
60
- background:
65
+ font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
66
+ background-color: var(--board-bg-alt);
67
+ background-image:
61
68
  radial-gradient(circle at top left, var(--board-glow), transparent 28%),
62
69
  linear-gradient(180deg, var(--board-bg), var(--board-bg-alt));
70
+ background-attachment: fixed;
63
71
  color: var(--board-text);
64
72
  }
65
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
+
66
87
  .board-shell-v2 {
67
88
  display: grid;
68
89
  min-height: 100vh;
@@ -116,13 +137,7 @@ body {
116
137
  min-height: 0;
117
138
  }
118
139
 
119
- .board-layout--workspace .board-root--detail {
120
- grid-template-columns: minmax(0, 1fr);
121
- }
122
-
123
- .board-layout--workspace .board-workspace,
124
- .board-layout--workspace .board-sidebar,
125
- .board-layout--workspace .board-drawer {
140
+ .board-layout--workspace .board-workspace {
126
141
  min-height: 0;
127
142
  }
128
143
 
@@ -131,13 +146,11 @@ body {
131
146
  overscroll-behavior: contain;
132
147
  }
133
148
 
134
- .board-layout .board-sidebar,
135
149
  .board-layout .board-workspace,
136
150
  .board-layout .board-content,
137
151
  .board-layout .board-kanban,
138
152
  .board-layout .board-column__tasks,
139
- .board-layout .board-list__rows,
140
- .board-layout .board-sidebar__list {
153
+ .board-layout .board-list__rows {
141
154
  overflow: visible;
142
155
  overscroll-behavior: auto;
143
156
  }
@@ -228,16 +241,49 @@ body {
228
241
  overflow: hidden;
229
242
  -webkit-box-orient: vertical;
230
243
  -webkit-line-clamp: 3;
244
+ white-space: pre-wrap;
245
+ word-break: break-word;
231
246
  }
232
247
 
233
248
  .board-task-modal {
234
- width: min(80vw, 1100px);
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;
235
257
  }
236
258
 
237
259
  .board-modal--sheet {
238
260
  width: min(80vw, 960px);
239
261
  }
240
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
+
241
287
 
242
288
  .board-layout--overview .board-table {
243
289
  min-height: 0;
@@ -335,11 +381,165 @@ body {
335
381
  min-width: 0;
336
382
  }
337
383
 
338
- .board-epic-row__title-row {
384
+ .board-epic-row__meta-row {
339
385
  display: flex;
340
386
  flex-wrap: wrap;
341
387
  align-items: center;
342
- gap: 8px;
388
+ gap: 6px;
389
+ }
390
+
391
+ .board-copy-btn,
392
+ .board-wh__notes-btn {
393
+ display: inline-flex;
394
+ align-items: center;
395
+ justify-content: center;
396
+ gap: 6px;
397
+ min-height: 36px;
398
+ padding: 0 10px;
399
+ border: 1px solid var(--board-border);
400
+ border-radius: 10px;
401
+ background: rgba(255, 255, 255, 0.03);
402
+ color: var(--board-text-muted);
403
+ font-size: 0.75rem;
404
+ font-weight: 600;
405
+ white-space: nowrap;
406
+ cursor: pointer;
407
+ touch-action: manipulation;
408
+ transition:
409
+ border-color 0.15s ease,
410
+ background-color 0.15s ease,
411
+ color 0.15s ease,
412
+ box-shadow 0.15s ease;
413
+ }
414
+
415
+ .board-copy-btn:hover,
416
+ .board-wh__notes-btn:hover {
417
+ border-color: var(--board-border-strong);
418
+ background: rgba(255, 255, 255, 0.045);
419
+ color: var(--board-text);
420
+ }
421
+
422
+ .board-copy-btn:focus-visible,
423
+ .board-wh__notes-btn:focus-visible {
424
+ outline: none;
425
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent), 0 0 0 4px var(--board-border-strong);
426
+ }
427
+
428
+ .board-copy-btn--active {
429
+ border-color: color-mix(in srgb, var(--board-success) 26%, var(--board-border-strong));
430
+ background: color-mix(in srgb, var(--board-success) 12%, rgba(255, 255, 255, 0.05));
431
+ color: var(--board-text);
432
+ }
433
+
434
+ .board-copy-btn--active:hover {
435
+ border-color: color-mix(in srgb, var(--board-success) 36%, var(--board-border-strong));
436
+ background: color-mix(in srgb, var(--board-success) 16%, rgba(255, 255, 255, 0.06));
437
+ }
438
+
439
+ .board-inline-icon {
440
+ display: block;
441
+ width: 16px;
442
+ height: 16px;
443
+ flex-shrink: 0;
444
+ }
445
+
446
+ .board-inline-icon--sm {
447
+ width: 14px;
448
+ height: 14px;
449
+ }
450
+
451
+ .board-copy-btn--icon {
452
+ min-height: 30px;
453
+ width: 30px;
454
+ padding: 0;
455
+ border-radius: 999px;
456
+ flex-shrink: 0;
457
+ }
458
+
459
+ .board-copy-btn--epic-row {
460
+ min-height: 24px;
461
+ width: 24px;
462
+ }
463
+
464
+ .board-copy-btn--epic-row .board-inline-icon--sm {
465
+ width: 12px;
466
+ height: 12px;
467
+ }
468
+
469
+ .board-copy-btn__label {
470
+ line-height: 1;
471
+ }
472
+
473
+ .board-toast-region {
474
+ position: fixed;
475
+ right: 16px;
476
+ bottom: 16px;
477
+ z-index: 30;
478
+ width: min(100vw - 24px, 380px);
479
+ pointer-events: none;
480
+ }
481
+
482
+ .board-toast {
483
+ display: flex;
484
+ align-items: flex-start;
485
+ gap: 12px;
486
+ width: 100%;
487
+ padding: 12px 14px;
488
+ border: 1px solid var(--board-border);
489
+ border-radius: 18px;
490
+ background: color-mix(in srgb, var(--board-shell) 94%, transparent);
491
+ box-shadow: var(--board-shadow);
492
+ backdrop-filter: blur(18px);
493
+ pointer-events: auto;
494
+ }
495
+
496
+ .board-toast--success {
497
+ border-color: color-mix(in srgb, var(--board-success) 24%, var(--board-border));
498
+ }
499
+
500
+ .board-toast--error {
501
+ border-color: color-mix(in srgb, var(--board-danger) 28%, var(--board-border));
502
+ }
503
+
504
+ .board-toast__icon {
505
+ display: inline-flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ width: 34px;
509
+ height: 34px;
510
+ border-radius: 999px;
511
+ flex-shrink: 0;
512
+ }
513
+
514
+ .board-toast__icon--success {
515
+ background: color-mix(in srgb, var(--board-success) 16%, transparent);
516
+ color: color-mix(in srgb, var(--board-success) 78%, white);
517
+ }
518
+
519
+ .board-toast__icon--error {
520
+ background: color-mix(in srgb, var(--board-danger) 14%, transparent);
521
+ color: color-mix(in srgb, var(--board-danger) 72%, white);
522
+ }
523
+
524
+ .board-toast__content {
525
+ min-width: 0;
526
+ }
527
+
528
+ .board-toast__title {
529
+ margin: 0;
530
+ font-size: 0.72rem;
531
+ font-weight: 700;
532
+ line-height: 1.2;
533
+ letter-spacing: 0.12em;
534
+ text-transform: uppercase;
535
+ color: var(--board-text-soft);
536
+ }
537
+
538
+ .board-toast__message {
539
+ margin: 4px 0 0;
540
+ font-size: 0.9rem;
541
+ line-height: 1.45;
542
+ color: var(--board-text-muted);
343
543
  }
344
544
 
345
545
  .board-epic-row__title {
@@ -634,6 +834,11 @@ body {
634
834
  font-weight: 600;
635
835
  cursor: pointer;
636
836
  white-space: nowrap;
837
+ transition:
838
+ border-color 0.15s ease,
839
+ background-color 0.15s ease,
840
+ color 0.15s ease,
841
+ box-shadow 0.15s ease;
637
842
  }
638
843
 
639
844
  .board-shell-topbar__nav-item.is-active {
@@ -643,7 +848,8 @@ body {
643
848
  }
644
849
 
645
850
  .board-shell-topbar__nav-item[disabled] {
646
- display: none;
851
+ opacity: 0.45;
852
+ cursor: not-allowed;
647
853
  }
648
854
 
649
855
  .board-shell-topbar__tools {
@@ -672,6 +878,28 @@ body {
672
878
  font-size: 0.82rem;
673
879
  }
674
880
 
881
+ .board-shell-topbar__search:focus-within {
882
+ border-color: var(--board-border-strong);
883
+ box-shadow:
884
+ inset 0 0 0 1px color-mix(in srgb, var(--board-accent) 24%, transparent),
885
+ 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent),
886
+ 0 0 0 4px var(--board-border-strong);
887
+ }
888
+
889
+ .board-shell-topbar__search-label,
890
+ .board-shell-topbar__assistive-copy,
891
+ .board-wh__control-text {
892
+ position: absolute;
893
+ width: 1px;
894
+ height: 1px;
895
+ padding: 0;
896
+ margin: -1px;
897
+ overflow: hidden;
898
+ clip: rect(0, 0, 0, 0);
899
+ white-space: nowrap;
900
+ border: 0;
901
+ }
902
+
675
903
  .board-shell-topbar__search input {
676
904
  width: 100%;
677
905
  min-width: 0;
@@ -696,6 +924,35 @@ body {
696
924
  font-weight: 600;
697
925
  }
698
926
 
927
+ .board-shell-topbar__icon-btn {
928
+ display: inline-flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 32px;
932
+ height: 32px;
933
+ border: 1px solid var(--board-border);
934
+ border-radius: 999px;
935
+ background: rgba(255, 255, 255, 0.03);
936
+ color: var(--board-text-muted);
937
+ cursor: pointer;
938
+ transition: border-color 0.15s, color 0.15s;
939
+ }
940
+
941
+ .board-shell-topbar__icon-btn:hover {
942
+ border-color: var(--board-border-strong);
943
+ color: var(--board-text);
944
+ }
945
+
946
+ .board-shell-topbar__icon-btn:disabled,
947
+ .board-shell-topbar__meta summary:disabled,
948
+ .board-view-switch__tab:disabled,
949
+ .board-wh__notes-btn:disabled,
950
+ .board-wh__controls select:disabled {
951
+ opacity: 0.45;
952
+ cursor: not-allowed;
953
+ box-shadow: none;
954
+ }
955
+
699
956
  .board-shell-topbar__meta {
700
957
  position: relative;
701
958
  }
@@ -722,99 +979,250 @@ body {
722
979
  position: absolute;
723
980
  right: 0;
724
981
  top: calc(100% + 8px);
725
- width: min(280px, 80vw);
726
- padding: 12px;
982
+ width: min(360px, 88vw);
983
+ padding: 14px;
727
984
  border: 1px solid var(--board-border);
728
985
  border-radius: 16px;
729
986
  background: var(--board-surface);
730
987
  box-shadow: var(--board-shadow);
731
988
  }
732
989
 
733
- .board-shell-topbar__meta p,
734
- .board-workspace-header__details p {
990
+ .board-shell-topbar__meta-title {
991
+ margin: 0 0 10px;
992
+ font-size: 0.92rem;
993
+ font-weight: 600;
994
+ color: var(--board-text);
995
+ }
996
+
997
+ .board-shell-topbar__meta-section + .board-shell-topbar__meta-section {
998
+ margin-top: 12px;
999
+ padding-top: 12px;
1000
+ border-top: 1px solid var(--board-border);
1001
+ }
1002
+
1003
+ .board-shell-topbar__meta-section strong {
1004
+ display: block;
1005
+ margin: 0 0 4px;
1006
+ font-size: 0.78rem;
1007
+ font-weight: 600;
1008
+ letter-spacing: 0.04em;
1009
+ text-transform: uppercase;
1010
+ color: var(--board-text-soft);
1011
+ }
1012
+
1013
+ .board-shell-topbar__meta p {
735
1014
  margin: 0;
736
1015
  color: var(--board-text-muted);
737
1016
  font-size: 0.84rem;
738
1017
  line-height: 1.5;
739
1018
  }
740
1019
 
741
- .board-workspace-header {
742
- gap: 14px;
743
- padding-bottom: 14px;
1020
+ .board-shell-topbar__meta-scope {
1021
+ margin-top: 6px !important;
1022
+ color: var(--board-text) !important;
1023
+ font-size: 0.88rem !important;
1024
+ font-weight: 500;
1025
+ line-height: 1.45;
1026
+ word-break: break-word;
744
1027
  }
745
1028
 
746
- .board-workspace-header__intro {
1029
+ .board-workspace-header {
747
1030
  display: grid;
748
- grid-template-columns: minmax(0, 1fr) minmax(220px, 360px);
749
- align-items: start;
750
- gap: 12px;
1031
+ gap: 8px;
1032
+ padding-bottom: 12px;
1033
+ border-bottom: 1px solid var(--board-border);
751
1034
  }
752
1035
 
753
- .board-workspace-header__title-block {
754
- min-width: 0;
1036
+ .board-detail-surface__context {
1037
+ max-width: 56ch;
755
1038
  }
756
1039
 
757
- .board-workspace-header__title-row {
1040
+ /* ── Row 1: title + inline controls ── */
1041
+ .board-wh__row-1 {
758
1042
  display: flex;
759
1043
  flex-wrap: wrap;
760
1044
  align-items: center;
761
1045
  gap: 10px;
762
- margin-top: 8px;
1046
+ min-width: 0;
763
1047
  }
764
1048
 
765
- .board-workspace-header__title-row h2 {
1049
+ .board-wh__title {
766
1050
  margin: 0;
767
- font-size: clamp(1.5rem, 2vw, 2rem);
768
- line-height: 1.1;
769
- overflow-wrap: anywhere;
1051
+ font-size: clamp(1rem, 1.6vw, 1.35rem);
1052
+ font-weight: 700;
1053
+ line-height: 1.2;
1054
+ color: var(--board-text);
1055
+ overflow: hidden;
1056
+ text-overflow: ellipsis;
1057
+ white-space: nowrap;
1058
+ min-width: 0;
1059
+ max-width: 50ch;
770
1060
  }
771
1061
 
772
- .board-detail-surface__context {
773
- max-width: 56ch;
1062
+ .board-wh__controls {
1063
+ display: flex;
1064
+ flex-wrap: wrap;
1065
+ align-items: center;
1066
+ gap: 6px;
1067
+ margin-left: auto;
774
1068
  }
775
1069
 
776
- .board-workspace-header__details {
1070
+ .board-wh__control-label {
1071
+ display: inline-flex;
1072
+ align-items: center;
777
1073
  min-width: 0;
778
- max-width: 360px;
779
- justify-self: end;
780
1074
  }
781
1075
 
782
- .board-workspace-header__details summary {
1076
+ .board-wh__sep {
1077
+ width: 1px;
1078
+ height: 18px;
1079
+ background: var(--board-border);
1080
+ flex-shrink: 0;
1081
+ }
1082
+
1083
+ .board-wh__inline-label {
1084
+ display: inline-flex;
1085
+ align-items: center;
1086
+ min-width: 0;
1087
+ max-width: 260px;
1088
+ }
1089
+
1090
+ .board-wh__inline-label select {
1091
+ max-width: 260px;
1092
+ text-overflow: ellipsis;
1093
+ }
1094
+
1095
+ /* ── Row 2: meta chips + view toggle ── */
1096
+ .board-wh__row-2 {
1097
+ display: flex;
1098
+ flex-wrap: wrap;
1099
+ align-items: center;
1100
+ justify-content: space-between;
1101
+ gap: 10px 14px;
1102
+ }
1103
+
1104
+ .board-wh__meta {
1105
+ display: flex;
1106
+ flex-wrap: wrap;
1107
+ align-items: center;
1108
+ gap: 6px;
1109
+ }
1110
+
1111
+ .board-wh__actions {
1112
+ display: flex;
1113
+ flex-wrap: wrap;
1114
+ align-items: center;
1115
+ justify-content: flex-end;
1116
+ gap: 8px;
1117
+ margin-left: auto;
1118
+ }
1119
+
1120
+ .board-wh__action-group {
783
1121
  display: inline-flex;
1122
+ flex-wrap: wrap;
784
1123
  align-items: center;
785
1124
  gap: 8px;
786
- min-height: 34px;
787
- padding: 0 12px;
1125
+ }
1126
+
1127
+ .board-view-switch {
1128
+ display: inline-flex;
1129
+ align-items: center;
1130
+ gap: 2px;
1131
+ min-height: 36px;
1132
+ padding: 3px;
788
1133
  border: 1px solid var(--board-border);
789
- border-radius: 999px;
1134
+ border-radius: 10px;
790
1135
  background: rgba(255, 255, 255, 0.03);
1136
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025);
1137
+ }
1138
+
1139
+ .board-view-switch__tab {
1140
+ display: inline-flex;
1141
+ align-items: center;
1142
+ justify-content: center;
1143
+ gap: 7px;
1144
+ min-height: 28px;
1145
+ min-width: 0;
1146
+ padding: 0 10px;
1147
+ border: 1px solid transparent;
1148
+ border-radius: 8px;
1149
+ background: transparent;
791
1150
  color: var(--board-text-muted);
1151
+ font-size: 0.75rem;
1152
+ font-weight: 600;
1153
+ letter-spacing: 0.01em;
1154
+ white-space: nowrap;
792
1155
  cursor: pointer;
793
- list-style: none;
1156
+ touch-action: manipulation;
1157
+ transition:
1158
+ background-color 0.18s ease,
1159
+ border-color 0.18s ease,
1160
+ color 0.18s ease,
1161
+ box-shadow 0.18s ease;
794
1162
  }
795
1163
 
796
- .board-workspace-header__details summary::-webkit-details-marker {
797
- display: none;
1164
+ .board-view-switch__tab:hover {
1165
+ background: rgba(255, 255, 255, 0.045);
1166
+ color: var(--board-text);
798
1167
  }
799
1168
 
800
- .board-workspace-header__details[open] p {
801
- margin-top: 10px;
1169
+ .board-view-switch__tab:focus-visible {
1170
+ outline: none;
1171
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--board-bg) 78%, transparent), 0 0 0 4px var(--board-border-strong);
802
1172
  }
803
1173
 
804
- .board-workspace-header__toolbar {
805
- gap: 12px;
1174
+ .board-view-switch__tab--active {
1175
+ border-color: color-mix(in srgb, var(--board-border-strong) 60%, var(--board-border));
1176
+ background: color-mix(in srgb, var(--board-accent-soft) 55%, rgba(255, 255, 255, 0.03));
1177
+ color: var(--board-text);
1178
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
806
1179
  }
807
1180
 
808
- .board-workspace-header__controls {
809
- display: grid;
810
- gap: 10px;
811
- justify-items: end;
812
- min-width: 0;
1181
+ .board-view-switch__tab--active:hover {
1182
+ background: color-mix(in srgb, var(--board-accent-soft) 65%, rgba(255, 255, 255, 0.03));
813
1183
  }
814
1184
 
815
- .board-workspace-header__legend {
816
- flex-wrap: wrap;
817
- justify-content: flex-end;
1185
+ .board-view-switch__icon {
1186
+ width: 16px;
1187
+ height: 16px;
1188
+ flex-shrink: 0;
1189
+ color: color-mix(in srgb, var(--board-text-muted) 82%, white);
1190
+ transition: color 0.18s ease;
1191
+ }
1192
+
1193
+ .board-view-switch__tab:hover .board-view-switch__icon,
1194
+ .board-view-switch__tab--active .board-view-switch__icon {
1195
+ color: var(--board-accent);
1196
+ }
1197
+
1198
+ .board-view-switch__label {
1199
+ line-height: 1;
1200
+ }
1201
+
1202
+ .board-wh__notes-btn--active {
1203
+ border-color: color-mix(in srgb, var(--board-border-strong) 60%, var(--board-border));
1204
+ background: color-mix(in srgb, var(--board-accent-soft) 55%, rgba(255, 255, 255, 0.03));
1205
+ color: var(--board-text);
1206
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
1207
+ }
1208
+
1209
+ /* ── Notes panel (full-width collapsible) ── */
1210
+ .board-wh__notes-panel {
1211
+ padding: 14px;
1212
+ border: 1px solid var(--board-border);
1213
+ border-radius: 14px;
1214
+ background: rgba(255, 255, 255, 0.02);
1215
+ max-height: 260px;
1216
+ overflow-y: auto;
1217
+ overscroll-behavior: contain;
1218
+ }
1219
+
1220
+ .board-wh__notes-body {
1221
+ white-space: pre-wrap;
1222
+ word-break: break-word;
1223
+ font-size: 0.84rem;
1224
+ line-height: 1.6;
1225
+ color: var(--board-text-muted);
818
1226
  }
819
1227
 
820
1228
  .board-epic-row__updated,
@@ -826,9 +1234,7 @@ body {
826
1234
  .board-related-item__description,
827
1235
  .board-detail-copy,
828
1236
  .board-shell-topbar__identity,
829
- .board-shell-topbar__title-row,
830
- .board-workspace-header__title-block,
831
- .board-workspace-header__details p {
1237
+ .board-shell-topbar__title-row {
832
1238
  overflow-wrap: anywhere;
833
1239
  }
834
1240
 
@@ -837,10 +1243,6 @@ body {
837
1243
  grid-template-columns: minmax(0, 1fr);
838
1244
  }
839
1245
 
840
- .board-layout--workspace .board-root--detail.board-root--detail-open {
841
- grid-template-columns: minmax(0, 1.1fr) minmax(300px, 340px);
842
- }
843
-
844
1246
  .board-task-modal {
845
1247
  width: min(88vw, 980px);
846
1248
  }
@@ -849,10 +1251,6 @@ body {
849
1251
  width: min(88vw, 820px);
850
1252
  }
851
1253
 
852
- .board-layout--workspace .board-root--detail.board-root--detail-open .board-sidebar {
853
- display: none;
854
- }
855
-
856
1254
  .board-shell-topbar__context {
857
1255
  display: none;
858
1256
  }
@@ -871,17 +1269,8 @@ body {
871
1269
  padding: 10px;
872
1270
  }
873
1271
 
874
- .board-shell-topbar__tools,
875
- .board-workspace-header__intro,
876
- .board-workspace-header__toolbar {
877
- display: grid;
878
- justify-items: stretch;
879
- }
880
-
881
- .board-workspace-header__controls,
882
- .board-workspace-header__legend {
883
- justify-items: start;
884
- justify-content: flex-start;
1272
+ .board-shell-topbar__tools {
1273
+ flex-wrap: wrap;
885
1274
  }
886
1275
 
887
1276
  .board-workspace {
@@ -893,28 +1282,23 @@ body {
893
1282
  padding-bottom: 12px;
894
1283
  }
895
1284
 
896
- .board-workspace-header__title-row {
897
- gap: 8px;
898
- }
899
-
900
- .board-workspace-header__title-row h2 {
901
- font-size: clamp(1.25rem, 4.2vw, 1.6rem);
1285
+ .board-wh__title {
1286
+ max-width: 100%;
1287
+ white-space: normal;
1288
+ -webkit-line-clamp: 2;
1289
+ display: -webkit-box;
1290
+ -webkit-box-orient: vertical;
1291
+ overflow: hidden;
902
1292
  }
903
1293
 
904
1294
  .board-layout--workspace {
905
1295
  max-height: none;
906
1296
  }
907
1297
 
908
- .board-layout--workspace .board-root--tasks,
909
- .board-layout--workspace .board-root--detail.board-root--detail-open {
1298
+ .board-layout--workspace .board-root--tasks {
910
1299
  grid-template-columns: minmax(0, 1fr);
911
1300
  }
912
1301
 
913
- .board-layout--workspace .board-sidebar,
914
- .board-layout--workspace .board-drawer {
915
- display: none;
916
- }
917
-
918
1302
  .board-task-modal,
919
1303
  .board-modal--sheet {
920
1304
  width: min(100vw - 16px, 920px);
@@ -981,23 +1365,6 @@ body {
981
1365
  }
982
1366
 
983
1367
  @media (max-width: 1100px) {
984
- .board-workspace-header__intro,
985
- .board-workspace-header__toolbar {
986
- grid-template-columns: minmax(0, 1fr);
987
- justify-items: stretch;
988
- }
989
-
990
- .board-workspace-header__details {
991
- max-width: none;
992
- justify-self: stretch;
993
- }
994
-
995
- .board-workspace-header__controls,
996
- .board-workspace-header__legend {
997
- justify-items: start;
998
- justify-content: flex-start;
999
- }
1000
-
1001
1368
  .board-table__header--epics,
1002
1369
  .board-list__header {
1003
1370
  display: none !important;
@@ -1022,17 +1389,65 @@ body {
1022
1389
  }
1023
1390
 
1024
1391
  @media (max-width: 640px) {
1392
+ .board-wh__row-2 {
1393
+ align-items: flex-start;
1394
+ }
1395
+
1396
+ .board-wh__actions {
1397
+ width: 100%;
1398
+ margin-left: 0;
1399
+ justify-content: flex-start;
1400
+ }
1401
+
1402
+ .board-wh__action-group {
1403
+ width: 100%;
1404
+ justify-content: flex-start;
1405
+ }
1406
+
1407
+ .board-view-switch {
1408
+ max-width: 100%;
1409
+ }
1410
+
1411
+ .board-view-switch__tab {
1412
+ min-width: 38px;
1413
+ padding: 0 9px;
1414
+ }
1415
+
1416
+ .board-view-switch__label {
1417
+ display: none;
1418
+ }
1419
+
1025
1420
  .board-shell-topbar {
1026
1421
  padding: 8px 10px;
1027
1422
  border-radius: 14px;
1028
1423
  }
1029
1424
 
1425
+ .board-shell-topbar {
1426
+ display: grid;
1427
+ grid-template-columns: 1fr auto;
1428
+ gap: 8px;
1429
+ align-items: center;
1430
+ }
1431
+
1030
1432
  .board-shell-topbar__identity {
1031
- flex: 1 1 100%;
1433
+ min-width: 0;
1434
+ }
1435
+
1436
+ .board-shell-topbar__nav {
1437
+ grid-column: 1 / -1;
1438
+ order: 3;
1439
+ }
1440
+
1441
+ .board-shell-topbar__tools {
1442
+ grid-column: 1 / -1;
1443
+ order: 4;
1444
+ display: grid;
1445
+ grid-template-columns: 1fr auto;
1446
+ gap: 8px;
1447
+ align-items: center;
1032
1448
  }
1033
1449
 
1034
1450
  .board-shell-topbar__search {
1035
- flex-basis: 100%;
1036
1451
  max-width: none;
1037
1452
  }
1038
1453
 
@@ -1072,10 +1487,6 @@ body {
1072
1487
  }
1073
1488
 
1074
1489
 
1075
- .board-workspace-header__details {
1076
- min-width: 0;
1077
- }
1078
-
1079
1490
  .board-layout--workspace {
1080
1491
  height: 100%;
1081
1492
  min-height: 0;
@@ -1103,18 +1514,6 @@ body {
1103
1514
  }
1104
1515
 
1105
1516
  @media (min-width: 1440px) {
1106
- .board-layout--workspace .board-root--tasks {
1107
- grid-template-columns: minmax(220px, 260px) minmax(0, 1fr);
1108
- }
1109
-
1110
- .board-layout--workspace .board-root--detail.board-root--detail-open {
1111
- grid-template-columns: minmax(220px, 260px) minmax(0, 1fr) minmax(320px, 380px);
1112
- }
1113
-
1114
- .board-layout--workspace .board-root--detail.board-root--detail-open .board-sidebar {
1115
- display: grid;
1116
- }
1117
-
1118
1517
  .board-layout--workspace .board-kanban {
1119
1518
  grid-template-columns: repeat(4, minmax(0, 1fr));
1120
1519
  }
@@ -1125,3 +1524,408 @@ body {
1125
1524
  grid-template-columns: repeat(3, minmax(0, 1fr));
1126
1525
  }
1127
1526
  }
1527
+
1528
+ /* ───── Material Symbols icon base ───── */
1529
+
1530
+ .material-symbols-rounded {
1531
+ font-family: "Material Symbols Rounded";
1532
+ font-weight: 400;
1533
+ font-style: normal;
1534
+ font-size: 20px;
1535
+ line-height: 1;
1536
+ letter-spacing: normal;
1537
+ text-transform: none;
1538
+ display: inline-block;
1539
+ white-space: nowrap;
1540
+ direction: ltr;
1541
+ font-variation-settings:
1542
+ "FILL" 0,
1543
+ "wght" 400,
1544
+ "GRAD" 0,
1545
+ "opsz" 20;
1546
+ }
1547
+
1548
+ /* ───── Tailwind utility replacements ───── */
1549
+
1550
+ /* --- Display & Box Model --- */
1551
+ .block { display: block; }
1552
+ .inline-flex { display: inline-flex; }
1553
+ .flex { display: flex; }
1554
+ .grid { display: grid; }
1555
+ .hidden { display: none; }
1556
+
1557
+ /* --- Flex --- */
1558
+ .flex-col { flex-direction: column; }
1559
+ .flex-1 { flex: 1 1 0%; }
1560
+ .flex-wrap { flex-wrap: wrap; }
1561
+ .shrink-0 { flex-shrink: 0; }
1562
+
1563
+ /* --- Grid --- */
1564
+ .grid-rows-\[auto_1fr\] { grid-template-rows: auto minmax(0, 1fr); }
1565
+ .grid-rows-\[1fr\] { grid-template-rows: minmax(0, 1fr); }
1566
+
1567
+ /* --- Alignment --- */
1568
+ .items-start { align-items: flex-start; }
1569
+ .items-center { align-items: center; }
1570
+ .justify-center { justify-content: center; }
1571
+ .justify-between { justify-content: space-between; }
1572
+ .justify-end { justify-content: flex-end; }
1573
+ .content-start { align-content: flex-start; }
1574
+ .place-items-center { place-items: center; }
1575
+
1576
+ /* --- Gap --- */
1577
+ .gap-2 { gap: 0.5rem; }
1578
+ .gap-2\.5 { gap: 0.625rem; }
1579
+ .gap-3 { gap: 0.75rem; }
1580
+ .gap-4 { gap: 1rem; }
1581
+ .gap-5 { gap: 1.25rem; }
1582
+
1583
+ /* --- Position --- */
1584
+ .fixed { position: fixed; }
1585
+ .inset-0 { inset: 0; }
1586
+ .inset-4 { inset: 1rem; }
1587
+
1588
+ /* --- Overflow --- */
1589
+ .overflow-hidden { overflow: hidden; }
1590
+ .overflow-auto { overflow: auto; }
1591
+ .overflow-y-auto { overflow-y: auto; }
1592
+ .overscroll-contain { overscroll-behavior: contain; }
1593
+
1594
+ /* --- Width --- */
1595
+ .w-full { width: 100%; }
1596
+ .w-10 { width: 2.5rem; }
1597
+ .w-14 { width: 3.5rem; }
1598
+ .max-w-\[1600px\] { max-width: 1600px; }
1599
+ .max-w-4xl { max-width: 56rem; }
1600
+ .max-w-2xl { max-width: 42rem; }
1601
+
1602
+ /* --- Height --- */
1603
+ .h-full { height: 100%; }
1604
+ .h-10 { height: 2.5rem; }
1605
+ .h-14 { height: 3.5rem; }
1606
+ .min-h-screen { min-height: 100vh; }
1607
+ .min-h-0 { min-height: 0; }
1608
+ .min-w-0 { min-width: 0; }
1609
+ .min-h-\[20rem\] { min-height: 20rem; }
1610
+ .min-h-\[96px\] { min-height: 96px; }
1611
+ .min-h-\[144px\] { min-height: 144px; }
1612
+ .min-h-\[180px\] { min-height: 180px; }
1613
+ .max-h-\[calc\(100dvh-2rem\)\] { max-height: calc(100dvh - 2rem); }
1614
+
1615
+ /* --- Margin --- */
1616
+ .mx-auto { margin-inline: auto; }
1617
+ .mb-5 { margin-bottom: 1.25rem; }
1618
+ .mt-0\.5 { margin-top: 0.125rem; }
1619
+ .mt-1 { margin-top: 0.25rem; }
1620
+ .mt-2 { margin-top: 0.5rem; }
1621
+ .mt-3 { margin-top: 0.75rem; }
1622
+ .mt-4 { margin-top: 1rem; }
1623
+ .mt-6 { margin-top: 1.5rem; }
1624
+
1625
+ /* --- Padding --- */
1626
+ .p-1 { padding: 0.25rem; }
1627
+ .p-3 { padding: 0.75rem; }
1628
+ .p-4 { padding: 1rem; }
1629
+ .p-5 { padding: 1.25rem; }
1630
+ .p-8 { padding: 2rem; }
1631
+ .px-0 { padding-inline: 0; }
1632
+ .px-1 { padding-inline: 0.25rem; }
1633
+ .px-2 { padding-inline: 0.5rem; }
1634
+ .px-2\.5 { padding-inline: 0.625rem; }
1635
+ .px-3\.5 { padding-inline: 0.875rem; }
1636
+ .px-4 { padding-inline: 1rem; }
1637
+ .px-5 { padding-inline: 1.25rem; }
1638
+ .py-1 { padding-block: 0.25rem; }
1639
+ .py-2 { padding-block: 0.5rem; }
1640
+ .py-2\.5 { padding-block: 0.625rem; }
1641
+ .py-3 { padding-block: 0.75rem; }
1642
+ .py-4 { padding-block: 1rem; }
1643
+ .py-6 { padding-block: 1.5rem; }
1644
+ .py-10 { padding-block: 2.5rem; }
1645
+ .pb-3 { padding-bottom: 0.75rem; }
1646
+ .pb-4 { padding-bottom: 1rem; }
1647
+ .pb-5 { padding-bottom: 1.25rem; }
1648
+ .pt-5 { padding-top: 1.25rem; }
1649
+ .pr-1 { padding-right: 0.25rem; }
1650
+
1651
+ /* --- Space --- */
1652
+ .space-y-3 > :not(:first-child) { margin-top: 0.75rem; }
1653
+ .space-y-4 > :not(:first-child) { margin-top: 1rem; }
1654
+
1655
+ /* --- Typography — Size --- */
1656
+ .text-xs { font-size: 0.75rem; line-height: 1rem; }
1657
+ .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
1658
+ .text-base { font-size: 1rem; line-height: 1.5rem; }
1659
+ .text-lg { font-size: 1.125rem; line-height: 1.75rem; }
1660
+ .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
1661
+ .text-2xl { font-size: 1.5rem; line-height: 2rem; }
1662
+ .text-3xl { font-size: 1.875rem; line-height: 2.25rem; }
1663
+ .text-\[10px\] { font-size: 10px; }
1664
+ .text-\[11px\] { font-size: 11px; }
1665
+ .text-\[0\.95rem\] { font-size: 0.95rem; }
1666
+ .text-\[0\.98rem\] { font-size: 0.98rem; }
1667
+ .text-\[16px\] { font-size: 16px; }
1668
+ .text-\[18px\] { font-size: 18px; }
1669
+ .text-\[20px\] { font-size: 20px; }
1670
+ .text-\[22px\] { font-size: 22px; }
1671
+
1672
+ /* --- Typography — Weight --- */
1673
+ .font-medium { font-weight: 500; }
1674
+ .font-semibold { font-weight: 600; }
1675
+
1676
+ /* --- Typography — Transform & Spacing --- */
1677
+ .uppercase { text-transform: uppercase; }
1678
+ .tracking-tight { letter-spacing: -0.025em; }
1679
+ .tracking-\[0\.14em\] { letter-spacing: 0.14em; }
1680
+ .tracking-\[0\.16em\] { letter-spacing: 0.16em; }
1681
+ .tracking-\[0\.18em\] { letter-spacing: 0.18em; }
1682
+
1683
+ /* --- Typography — Line Height --- */
1684
+ .leading-5 { line-height: 1.25rem; }
1685
+ .leading-6 { line-height: 1.5rem; }
1686
+ .leading-7 { line-height: 1.75rem; }
1687
+ .leading-snug { line-height: 1.375; }
1688
+
1689
+ /* --- Typography — Alignment --- */
1690
+ .text-center { text-align: center; }
1691
+ .text-left { text-align: left; }
1692
+
1693
+ /* --- Text Color --- */
1694
+ .text-white { color: #fff; }
1695
+ .text-amber-300 { color: #fcd34d; }
1696
+ .text-sky-300 { color: #7dd3fc; }
1697
+ .text-emerald-300 { color: #6ee7b7; }
1698
+ .text-red-300 { color: #fca5a5; }
1699
+ .text-\[var\(--board-text\)\] { color: var(--board-text); }
1700
+ .text-\[var\(--board-text-muted\)\] { color: var(--board-text-muted); }
1701
+ .text-\[var\(--board-text-soft\)\] { color: var(--board-text-soft); }
1702
+ .text-\[var\(--board-accent\)\] { color: var(--board-accent); }
1703
+
1704
+ /* --- Background --- */
1705
+ .bg-white\/\[0\.02\] { background-color: rgba(255, 255, 255, 0.02); }
1706
+ .bg-white\/\[0\.03\] { background-color: rgba(255, 255, 255, 0.03); }
1707
+ .bg-white\/\[0\.04\] { background-color: rgba(255, 255, 255, 0.04); }
1708
+ .bg-white\/\[0\.05\] { background-color: rgba(255, 255, 255, 0.05); }
1709
+ .bg-white\/\[0\.06\] { background-color: rgba(255, 255, 255, 0.06); }
1710
+ .bg-white\/\[0\.08\] { background-color: rgba(255, 255, 255, 0.08); }
1711
+ .bg-white\/5 { background-color: rgba(255, 255, 255, 0.05); }
1712
+ .bg-amber-500\/10 { background-color: rgba(245, 158, 11, 0.1); }
1713
+ .bg-sky-400\/10 { background-color: rgba(56, 189, 248, 0.1); }
1714
+ .bg-emerald-500\/10 { background-color: rgba(16, 185, 129, 0.1); }
1715
+ .bg-red-500\/10 { background-color: rgba(239, 68, 68, 0.1); }
1716
+ .bg-slate-950\/70 { background-color: rgba(2, 6, 23, 0.7); }
1717
+ .bg-\[var\(--board-surface\)\] { background-color: var(--board-surface); }
1718
+ .bg-\[var\(--board-surface-2\)\] { background-color: var(--board-surface-2); }
1719
+ .bg-\[var\(--board-surface-3\)\] { background-color: var(--board-surface-3); }
1720
+ .bg-\[var\(--board-accent\)\] { background-color: var(--board-accent); }
1721
+ .bg-\[var\(--board-accent-soft)\]\/40 { background-color: color-mix(in srgb, var(--board-accent-soft) 40%, transparent); }
1722
+ .bg-\[var\(--board-accent-soft\)\] { background-color: var(--board-accent-soft); }
1723
+
1724
+ /* --- Border --- */
1725
+ .border { border-width: 1px; border-style: solid; }
1726
+ .border-b { border-bottom-width: 1px; border-bottom-style: solid; }
1727
+ .border-dashed { border-style: dashed; }
1728
+ .border-white\/10 { border-color: rgba(255, 255, 255, 0.1); }
1729
+ .border-amber-500\/20 { border-color: rgba(245, 158, 11, 0.2); }
1730
+ .border-sky-400\/20 { border-color: rgba(56, 189, 248, 0.2); }
1731
+ .border-emerald-500\/20 { border-color: rgba(16, 185, 129, 0.2); }
1732
+ .border-\[var\(--board-border\)\] { border-color: var(--board-border); }
1733
+ .border-\[var\(--board-border-strong\)\] { border-color: var(--board-border-strong); }
1734
+ .border-\[var\(--board-accent\)\] { border-color: var(--board-accent); }
1735
+
1736
+ /* --- Border Radius --- */
1737
+ .rounded-lg { border-radius: 0.5rem; }
1738
+ .rounded-2xl { border-radius: 1rem; }
1739
+ .rounded-3xl { border-radius: 1.5rem; }
1740
+ .rounded-full { border-radius: 9999px; }
1741
+ .rounded-\[22px\] { border-radius: 22px; }
1742
+ .rounded-\[24px\] { border-radius: 24px; }
1743
+ .rounded-\[28px\] { border-radius: 28px; }
1744
+ .rounded-\[32px\] { border-radius: 32px; }
1745
+
1746
+ /* --- Ring & Outline --- */
1747
+ .ring-1 { box-shadow: 0 0 0 1px var(--tw-ring-color, currentColor); }
1748
+ .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); }
1749
+ .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); }
1750
+ .ring-\[var\(--board-border-strong\)\] { --tw-ring-color: var(--board-border-strong); }
1751
+ .ring-1.ring-\[var\(--board-border-strong\)\] { box-shadow: 0 0 0 1px var(--board-border-strong); }
1752
+
1753
+ /* --- Shadow (including custom Tailwind theme values) --- */
1754
+ .shadow-sm { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); }
1755
+ .shadow-panel { box-shadow: var(--board-shadow); }
1756
+ .shadow-lift { box-shadow: 0 18px 52px rgba(0, 0, 0, 0.34); }
1757
+ .shadow-focus { box-shadow: 0 0 0 1px var(--board-border-strong), 0 16px 40px rgba(88, 28, 135, 0.2); }
1758
+ .shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.18\)\] { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18); }
1759
+ .shadow-\[inset_0_0_0_1px_var\(--board-border-strong\)\] { box-shadow: inset 0 0 0 1px var(--board-border-strong); }
1760
+
1761
+ /* --- Transition --- */
1762
+ .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; }
1763
+ .duration-200 { transition-duration: 200ms; }
1764
+
1765
+ /* --- Cursor & Interactivity --- */
1766
+ .cursor-pointer { cursor: pointer; }
1767
+ .list-none { list-style: none; }
1768
+
1769
+ /* --- Backdrop --- */
1770
+ .backdrop-blur-md { backdrop-filter: blur(12px); }
1771
+ .backdrop-blur-xl { backdrop-filter: blur(24px); }
1772
+
1773
+ /* --- Z-Index --- */
1774
+ .z-30 { z-index: 30; }
1775
+ .z-40 { z-index: 40; }
1776
+ .z-50 { z-index: 50; }
1777
+
1778
+ /* --- Hover states --- */
1779
+ .hover\:bg-white\/\[0\.04\]:hover { background-color: rgba(255, 255, 255, 0.04); }
1780
+ .hover\:bg-white\/\[0\.06\]:hover { background-color: rgba(255, 255, 255, 0.06); }
1781
+ .hover\:bg-white\/\[0\.08\]:hover { background-color: rgba(255, 255, 255, 0.08); }
1782
+ .hover\:border-\[var\(--board-border-strong\)\]:hover { border-color: var(--board-border-strong); }
1783
+ .hover\:border-\[var\(--board-accent-strong\)\]:hover { border-color: var(--board-accent-strong); }
1784
+ .hover\:bg-\[var\(--board-accent-strong\)\]:hover { background-color: var(--board-accent-strong); }
1785
+ .hover\:shadow-lift:hover { box-shadow: 0 18px 52px rgba(0, 0, 0, 0.34); }
1786
+ .hover\:text-\[var\(--board-text\)\]:hover { color: var(--board-text); }
1787
+ .hover\:-translate-y-0\.5:hover { transform: translateY(-0.125rem); }
1788
+
1789
+ /* --- Focus states --- */
1790
+ .focus-visible\:outline-none:focus-visible { outline: none; }
1791
+ .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)); }
1792
+ .focus-visible\:ring-\[var\(--board-border-strong\)\]:focus-visible { --tw-ring-color: var(--board-border-strong); }
1793
+ .focus-visible\:ring-offset-2:focus-visible { --tw-ring-offset-width: 2px; }
1794
+ .focus-visible\:ring-offset-\[var\(--board-bg\)\]:focus-visible { --tw-ring-offset-color: var(--board-bg); }
1795
+ .focus-visible\:ring-offset-\[var\(--board-surface\)\]:focus-visible { --tw-ring-offset-color: var(--board-surface); }
1796
+ .focus\:border-\[var\(--board-border-strong\)\]:focus { border-color: var(--board-border-strong); }
1797
+ .focus\:outline-none:focus { outline: none; }
1798
+ .focus\:ring-2:focus { box-shadow: 0 0 0 2px var(--board-bg), 0 0 0 4px var(--board-accent-soft); }
1799
+ .focus\:ring-\[var\(--board-accent-soft\)\]:focus { --tw-ring-color: var(--board-accent-soft); }
1800
+
1801
+ /* --- Disabled states --- */
1802
+ .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; }
1803
+ .disabled\:opacity-60:disabled { opacity: 0.6; }
1804
+
1805
+ /* --- Placeholder --- */
1806
+ .placeholder\:text-\[var\(--board-text-soft\)\]::placeholder { color: var(--board-text-soft); }
1807
+
1808
+ /* ───── Responsive breakpoints ───── */
1809
+
1810
+ @media (min-width: 640px) {
1811
+ .sm\:flex-row { flex-direction: row; }
1812
+ .sm\:items-start { align-items: flex-start; }
1813
+ .sm\:justify-between { justify-content: space-between; }
1814
+ .sm\:mt-0 { margin-top: 0; }
1815
+ .sm\:p-5 { padding: 1.25rem; }
1816
+ .sm\:p-6 { padding: 1.5rem; }
1817
+ .sm\:px-6 { padding-inline: 1.5rem; }
1818
+ .sm\:py-6 { padding-block: 1.5rem; }
1819
+ .sm\:text-base { font-size: 1rem; line-height: 1.5rem; }
1820
+ .sm\:text-\[0\.95rem\] { font-size: 0.95rem; }
1821
+ .sm\:text-\[0\.98rem\] { font-size: 0.98rem; }
1822
+ }
1823
+
1824
+ @media (min-width: 768px) {
1825
+ .md\:grid { display: grid; }
1826
+ .md\:grid-cols-\[minmax\(0\,1fr\)_auto\] { grid-template-columns: minmax(0, 1fr) auto; }
1827
+ .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1828
+ .md\:items-start { align-items: flex-start; }
1829
+ }
1830
+
1831
+ @media (min-width: 1024px) {
1832
+ .lg\:grid { display: grid; }
1833
+ .lg\:grid-cols-\[minmax\(0\,2fr\)_150px_minmax\(0\,210px\)_150px\] { grid-template-columns: minmax(0, 2fr) 150px minmax(0, 210px) 150px; }
1834
+ .lg\:items-start { align-items: flex-start; }
1835
+ .lg\:p-4 { padding: 1rem; }
1836
+ }
1837
+
1838
+ @media (min-width: 1280px) {
1839
+ .xl\:gap-5 { gap: 1.25rem; }
1840
+ .xl\:grid { display: grid; }
1841
+ .xl\:grid-rows-\[auto_1fr\] { grid-template-rows: auto minmax(0, 1fr); }
1842
+ .xl\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
1843
+ .xl\:inset-auto { inset: auto; }
1844
+ .xl\:max-h-none { max-height: none; }
1845
+ .xl\:min-w-\[240px\] { min-width: 240px; }
1846
+ .xl\:p-5 { padding: 1.25rem; }
1847
+ .xl\:px-8 { padding-inline: 2rem; }
1848
+ .xl\:static { position: static; }
1849
+ }
1850
+
1851
+ /* ───── Tabular nums & text-wrap (subtask db57f841) ───── */
1852
+
1853
+ .board-epic-row__updated,
1854
+ .board-column__count,
1855
+ .board-task-card__eyebrow,
1856
+ .board-list-row__updated {
1857
+ font-variant-numeric: tabular-nums;
1858
+ }
1859
+
1860
+ h1, h2, h3, p {
1861
+ text-wrap: pretty;
1862
+ }
1863
+
1864
+ /* ───── Touch-action on interactive elements (subtask f19f9e1b) ───── */
1865
+
1866
+ button,
1867
+ a,
1868
+ summary,
1869
+ select,
1870
+ input,
1871
+ textarea,
1872
+ [role="button"],
1873
+ [tabindex="0"],
1874
+ [draggable="true"] {
1875
+ touch-action: manipulation;
1876
+ }
1877
+
1878
+ /* ───── Prefers-reduced-motion (subtask aabc7808) ───── */
1879
+
1880
+ @media (prefers-reduced-motion: reduce) {
1881
+ *,
1882
+ *::before,
1883
+ *::after {
1884
+ animation-duration: 0.01ms !important;
1885
+ animation-iteration-count: 1 !important;
1886
+ transition-duration: 0.01ms !important;
1887
+ scroll-behavior: auto !important;
1888
+ }
1889
+ }
1890
+
1891
+ /* ───── Skip link ───── */
1892
+
1893
+ .sr-only {
1894
+ position: absolute;
1895
+ width: 1px;
1896
+ height: 1px;
1897
+ padding: 0;
1898
+ margin: -1px;
1899
+ overflow: hidden;
1900
+ clip: rect(0, 0, 0, 0);
1901
+ white-space: nowrap;
1902
+ border-width: 0;
1903
+ }
1904
+
1905
+ .focus\:not-sr-only:focus {
1906
+ position: fixed;
1907
+ width: auto;
1908
+ height: auto;
1909
+ padding: 0;
1910
+ margin: 0;
1911
+ overflow: visible;
1912
+ clip: auto;
1913
+ white-space: normal;
1914
+ }
1915
+
1916
+ .focus\:fixed:focus { position: fixed; }
1917
+ .focus\:top-2:focus { top: 0.5rem; }
1918
+ .focus\:left-2:focus { left: 0.5rem; }
1919
+ .focus\:z-50:focus { z-index: 50; }
1920
+ .focus\:rounded-lg:focus { border-radius: 0.5rem; }
1921
+ .focus\:bg-\[var\(--board-accent\)\]:focus { background-color: var(--board-accent); }
1922
+ .focus\:px-4:focus { padding-inline: 1rem; }
1923
+ .focus\:py-2:focus { padding-block: 0.5rem; }
1924
+ .focus\:text-white:focus { color: #fff; }
1925
+
1926
+ /* ───── Important overrides for compact form selects ───── */
1927
+
1928
+ .\!py-1 { padding-block: 0.25rem !important; }
1929
+ .\!px-2 { padding-inline: 0.5rem !important; }
1930
+ .\!text-xs { font-size: 0.75rem !important; line-height: 1rem !important; }
1931
+ .\!min-h-0 { min-height: 0 !important; }