trekoon 0.2.8 → 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 (34) hide show
  1. package/package.json +1 -1
  2. package/src/board/assets/app.js +468 -1377
  3. package/src/board/assets/components/ClampedText.js +1 -1
  4. package/src/board/assets/components/Component.js +271 -0
  5. package/src/board/assets/components/ConfirmDialog.js +81 -0
  6. package/src/board/assets/components/EpicRow.js +23 -21
  7. package/src/board/assets/components/EpicsOverview.js +48 -11
  8. package/src/board/assets/components/Inspector.js +335 -0
  9. package/src/board/assets/components/Notice.js +80 -0
  10. package/src/board/assets/components/SubtaskModal.js +100 -0
  11. package/src/board/assets/components/TaskCard.js +82 -0
  12. package/src/board/assets/components/TaskModal.js +99 -0
  13. package/src/board/assets/components/TopBar.js +167 -0
  14. package/src/board/assets/components/Workspace.js +308 -0
  15. package/src/board/assets/components/assetMap.js +29 -14
  16. package/src/board/assets/components/helpers.js +244 -0
  17. package/src/board/assets/fonts/inter-latin.woff2 +0 -0
  18. package/src/board/assets/fonts/material-symbols-rounded.woff2 +0 -0
  19. package/src/board/assets/index.html +20 -57
  20. package/src/board/assets/main.js +2 -18
  21. package/src/board/assets/runtime/delegation.js +309 -0
  22. package/src/board/assets/state/actions.js +136 -16
  23. package/src/board/assets/state/api.js +201 -46
  24. package/src/board/assets/state/store.js +417 -117
  25. package/src/board/assets/state/url.js +184 -0
  26. package/src/board/assets/state/utils.js +222 -0
  27. package/src/board/assets/styles/board.css +811 -127
  28. package/src/board/assets/styles/fonts.css +22 -0
  29. package/src/board/routes.ts +15 -6
  30. package/src/board/server.ts +1 -0
  31. package/src/board/assets/components/AppShell.js +0 -17
  32. package/src/board/assets/components/BoardTopbar.js +0 -78
  33. package/src/board/assets/components/WorkspaceHeader.js +0 -70
  34. 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;
@@ -634,6 +680,11 @@ body {
634
680
  font-weight: 600;
635
681
  cursor: pointer;
636
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;
637
688
  }
638
689
 
639
690
  .board-shell-topbar__nav-item.is-active {
@@ -643,7 +694,8 @@ body {
643
694
  }
644
695
 
645
696
  .board-shell-topbar__nav-item[disabled] {
646
- display: none;
697
+ opacity: 0.45;
698
+ cursor: not-allowed;
647
699
  }
648
700
 
649
701
  .board-shell-topbar__tools {
@@ -672,6 +724,28 @@ body {
672
724
  font-size: 0.82rem;
673
725
  }
674
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
+
675
749
  .board-shell-topbar__search input {
676
750
  width: 100%;
677
751
  min-width: 0;
@@ -696,6 +770,35 @@ body {
696
770
  font-weight: 600;
697
771
  }
698
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
+
699
802
  .board-shell-topbar__meta {
700
803
  position: relative;
701
804
  }
@@ -722,99 +825,284 @@ body {
722
825
  position: absolute;
723
826
  right: 0;
724
827
  top: calc(100% + 8px);
725
- width: min(280px, 80vw);
726
- padding: 12px;
828
+ width: min(360px, 88vw);
829
+ padding: 14px;
727
830
  border: 1px solid var(--board-border);
728
831
  border-radius: 16px;
729
832
  background: var(--board-surface);
730
833
  box-shadow: var(--board-shadow);
731
834
  }
732
835
 
733
- .board-shell-topbar__meta p,
734
- .board-workspace-header__details p {
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 {
735
860
  margin: 0;
736
861
  color: var(--board-text-muted);
737
862
  font-size: 0.84rem;
738
863
  line-height: 1.5;
739
864
  }
740
865
 
741
- .board-workspace-header {
742
- gap: 14px;
743
- padding-bottom: 14px;
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;
744
873
  }
745
874
 
746
- .board-workspace-header__intro {
875
+ .board-workspace-header {
747
876
  display: grid;
748
- grid-template-columns: minmax(0, 1fr) minmax(220px, 360px);
749
- align-items: start;
750
- gap: 12px;
877
+ gap: 8px;
878
+ padding-bottom: 12px;
879
+ border-bottom: 1px solid var(--board-border);
751
880
  }
752
881
 
753
- .board-workspace-header__title-block {
754
- min-width: 0;
882
+ .board-detail-surface__context {
883
+ max-width: 56ch;
755
884
  }
756
885
 
757
- .board-workspace-header__title-row {
886
+ /* ── Row 1: title + inline controls ── */
887
+ .board-wh__row-1 {
758
888
  display: flex;
759
889
  flex-wrap: wrap;
760
890
  align-items: center;
761
891
  gap: 10px;
762
- margin-top: 8px;
892
+ min-width: 0;
763
893
  }
764
894
 
765
- .board-workspace-header__title-row h2 {
895
+ .board-wh__title {
766
896
  margin: 0;
767
- font-size: clamp(1.5rem, 2vw, 2rem);
768
- line-height: 1.1;
769
- overflow-wrap: anywhere;
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;
770
906
  }
771
907
 
772
- .board-detail-surface__context {
773
- max-width: 56ch;
908
+ .board-wh__controls {
909
+ display: flex;
910
+ flex-wrap: wrap;
911
+ align-items: center;
912
+ gap: 6px;
913
+ margin-left: auto;
774
914
  }
775
915
 
776
- .board-workspace-header__details {
916
+ .board-wh__control-label {
917
+ display: inline-flex;
918
+ align-items: center;
777
919
  min-width: 0;
778
- max-width: 360px;
779
- justify-self: end;
780
920
  }
781
921
 
782
- .board-workspace-header__details summary {
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 {
783
930
  display: inline-flex;
784
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;
785
962
  gap: 8px;
786
- min-height: 34px;
787
- padding: 0 12px;
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;
788
979
  border: 1px solid var(--board-border);
789
- border-radius: 999px;
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;
790
1057
  background: rgba(255, 255, 255, 0.03);
791
1058
  color: var(--board-text-muted);
1059
+ font-size: 0.75rem;
1060
+ font-weight: 600;
1061
+ white-space: nowrap;
792
1062
  cursor: pointer;
793
- list-style: none;
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;
794
1069
  }
795
1070
 
796
- .board-workspace-header__details summary::-webkit-details-marker {
797
- display: none;
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);
798
1075
  }
799
1076
 
800
- .board-workspace-header__details[open] p {
801
- margin-top: 10px;
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);
802
1080
  }
803
1081
 
804
- .board-workspace-header__toolbar {
805
- gap: 12px;
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);
806
1087
  }
807
1088
 
808
- .board-workspace-header__controls {
809
- display: grid;
810
- gap: 10px;
811
- justify-items: end;
812
- min-width: 0;
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;
813
1098
  }
814
1099
 
815
- .board-workspace-header__legend {
816
- flex-wrap: wrap;
817
- justify-content: flex-end;
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);
818
1106
  }
819
1107
 
820
1108
  .board-epic-row__updated,
@@ -826,9 +1114,7 @@ body {
826
1114
  .board-related-item__description,
827
1115
  .board-detail-copy,
828
1116
  .board-shell-topbar__identity,
829
- .board-shell-topbar__title-row,
830
- .board-workspace-header__title-block,
831
- .board-workspace-header__details p {
1117
+ .board-shell-topbar__title-row {
832
1118
  overflow-wrap: anywhere;
833
1119
  }
834
1120
 
@@ -837,10 +1123,6 @@ body {
837
1123
  grid-template-columns: minmax(0, 1fr);
838
1124
  }
839
1125
 
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
1126
  .board-task-modal {
845
1127
  width: min(88vw, 980px);
846
1128
  }
@@ -849,10 +1131,6 @@ body {
849
1131
  width: min(88vw, 820px);
850
1132
  }
851
1133
 
852
- .board-layout--workspace .board-root--detail.board-root--detail-open .board-sidebar {
853
- display: none;
854
- }
855
-
856
1134
  .board-shell-topbar__context {
857
1135
  display: none;
858
1136
  }
@@ -871,17 +1149,8 @@ body {
871
1149
  padding: 10px;
872
1150
  }
873
1151
 
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;
1152
+ .board-shell-topbar__tools {
1153
+ flex-wrap: wrap;
885
1154
  }
886
1155
 
887
1156
  .board-workspace {
@@ -893,28 +1162,23 @@ body {
893
1162
  padding-bottom: 12px;
894
1163
  }
895
1164
 
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);
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;
902
1172
  }
903
1173
 
904
1174
  .board-layout--workspace {
905
1175
  max-height: none;
906
1176
  }
907
1177
 
908
- .board-layout--workspace .board-root--tasks,
909
- .board-layout--workspace .board-root--detail.board-root--detail-open {
1178
+ .board-layout--workspace .board-root--tasks {
910
1179
  grid-template-columns: minmax(0, 1fr);
911
1180
  }
912
1181
 
913
- .board-layout--workspace .board-sidebar,
914
- .board-layout--workspace .board-drawer {
915
- display: none;
916
- }
917
-
918
1182
  .board-task-modal,
919
1183
  .board-modal--sheet {
920
1184
  width: min(100vw - 16px, 920px);
@@ -981,23 +1245,6 @@ body {
981
1245
  }
982
1246
 
983
1247
  @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
1248
  .board-table__header--epics,
1002
1249
  .board-list__header {
1003
1250
  display: none !important;
@@ -1022,17 +1269,65 @@ body {
1022
1269
  }
1023
1270
 
1024
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
+
1025
1300
  .board-shell-topbar {
1026
1301
  padding: 8px 10px;
1027
1302
  border-radius: 14px;
1028
1303
  }
1029
1304
 
1305
+ .board-shell-topbar {
1306
+ display: grid;
1307
+ grid-template-columns: 1fr auto;
1308
+ gap: 8px;
1309
+ align-items: center;
1310
+ }
1311
+
1030
1312
  .board-shell-topbar__identity {
1031
- flex: 1 1 100%;
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;
1032
1328
  }
1033
1329
 
1034
1330
  .board-shell-topbar__search {
1035
- flex-basis: 100%;
1036
1331
  max-width: none;
1037
1332
  }
1038
1333
 
@@ -1072,10 +1367,6 @@ body {
1072
1367
  }
1073
1368
 
1074
1369
 
1075
- .board-workspace-header__details {
1076
- min-width: 0;
1077
- }
1078
-
1079
1370
  .board-layout--workspace {
1080
1371
  height: 100%;
1081
1372
  min-height: 0;
@@ -1103,18 +1394,6 @@ body {
1103
1394
  }
1104
1395
 
1105
1396
  @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
1397
  .board-layout--workspace .board-kanban {
1119
1398
  grid-template-columns: repeat(4, minmax(0, 1fr));
1120
1399
  }
@@ -1125,3 +1404,408 @@ body {
1125
1404
  grid-template-columns: repeat(3, minmax(0, 1fr));
1126
1405
  }
1127
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; }