@webority/theme 0.53.1 → 0.54.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 (62) hide show
  1. package/dist/purge-safelist.json +339 -3
  2. package/dist/webority-theme.css +1 -1
  3. package/package.json +1 -1
  4. package/scss/_components.scss +27 -4
  5. package/scss/_marketing.scss +5 -0
  6. package/scss/_variables.scss +5 -4
  7. package/scss/_wui-aliases.scss +14 -0
  8. package/scss/_wui-components.scss +29 -0
  9. package/scss/wui/_avatar-picker.scss +1 -1
  10. package/scss/wui/_calendar.scss +5 -5
  11. package/scss/wui/_card.scss +2 -2
  12. package/scss/wui/_carousel.scss +182 -0
  13. package/scss/wui/_chart.scss +2 -2
  14. package/scss/wui/_choice.scss +88 -8
  15. package/scss/wui/_code-block.scss +138 -0
  16. package/scss/wui/_command-palette.scss +99 -1
  17. package/scss/wui/_comment-thread.scss +268 -0
  18. package/scss/wui/_context-menu.scss +2 -2
  19. package/scss/wui/_controls.scss +14 -12
  20. package/scss/wui/_data.scss +407 -14
  21. package/scss/wui/_disclosure.scss +2 -2
  22. package/scss/wui/_display.scss +13 -9
  23. package/scss/wui/_dock.scss +2 -2
  24. package/scss/wui/_drawer.scss +198 -0
  25. package/scss/wui/_file-viewer.scss +6 -6
  26. package/scss/wui/_groups.scss +111 -0
  27. package/scss/wui/_hover-card.scss +55 -0
  28. package/scss/wui/_illustration.scss +76 -0
  29. package/scss/wui/_image-crop.scss +6 -6
  30. package/scss/wui/_inline-edit.scss +131 -0
  31. package/scss/wui/_interaction.scss +286 -0
  32. package/scss/wui/_kanban.scss +6 -6
  33. package/scss/wui/_lightbox.scss +169 -0
  34. package/scss/wui/_media.scss +8 -5
  35. package/scss/wui/_mention-input.scss +88 -0
  36. package/scss/wui/_menubar.scss +110 -0
  37. package/scss/wui/_navigation-menu.scss +172 -0
  38. package/scss/wui/_navigation.scss +109 -6
  39. package/scss/wui/_notification-center.scss +251 -0
  40. package/scss/wui/_onboarding-checklist.scss +199 -0
  41. package/scss/wui/_overlays.scss +7 -11
  42. package/scss/wui/_rating.scss +87 -0
  43. package/scss/wui/_record-pager.scss +27 -0
  44. package/scss/wui/_relative-time.scss +10 -0
  45. package/scss/wui/_resizable.scss +98 -0
  46. package/scss/wui/_rich-text.scss +2 -2
  47. package/scss/wui/_rolling-number.scss +60 -0
  48. package/scss/wui/_sections.scss +315 -0
  49. package/scss/wui/_shell-parts.scss +12 -3
  50. package/scss/wui/_shell.scss +6 -6
  51. package/scss/wui/_shortcuts.scss +143 -0
  52. package/scss/wui/_show-more.scss +30 -0
  53. package/scss/wui/_sortable.scss +2 -2
  54. package/scss/wui/_split-view.scss +321 -0
  55. package/scss/wui/_toolbar.scss +4 -4
  56. package/scss/wui/_tour.scss +2 -2
  57. package/scss/wui/_tree.scss +2 -2
  58. package/scss/wui/_truncate.scss +32 -0
  59. package/scss/wui/_typography.scss +14 -0
  60. package/scss/wui/_utilities.scss +8 -8
  61. package/scss/wui/_whats-new.scss +147 -0
  62. package/scss/wui/_workspace.scss +2 -2
@@ -0,0 +1,110 @@
1
+ // ── Menubar ──
2
+ // AppMenubar / <app-menubar> (a <wui-menubar> element): an application menubar (File, Edit, View).
3
+ // A top menu is a Bootstrap .dropdown-menu with .dropdown-item rows, so the look, the danger tone
4
+ // and the icon treatment come from the shared dropdown styles; this partial adds the bar, the
5
+ // triggers and the placement. The element shows a panel with [data-open] (never `.show`, which a
6
+ // React re-render would reset). A top panel is placed by the element with position: fixed, so it
7
+ // escapes any clipping ancestor; a submenu is absolute against its row and flips to the left at
8
+ // the viewport edge through [data-side="start"]. Every colour is a theme token.
9
+ //
10
+ // Part of the wui-components layer, see _wui-components.scss for load order.
11
+
12
+ wui-menubar {
13
+ display: flex;
14
+ flex-wrap: wrap;
15
+ align-items: center;
16
+ gap: 2px;
17
+ min-width: 0;
18
+ }
19
+
20
+ .wui-menubar-trigger {
21
+ padding: 6px 10px;
22
+ border: 0;
23
+ border-radius: var(--wui-radius-sm);
24
+ background: transparent;
25
+ color: var(--color-text);
26
+ font: inherit;
27
+ font-size: 14px;
28
+ font-weight: 500;
29
+ line-height: 1.2;
30
+ white-space: nowrap;
31
+ cursor: pointer;
32
+
33
+ &:hover,
34
+ &[aria-expanded="true"] {
35
+ background: var(--color-bg-muted);
36
+ }
37
+ &:focus-visible {
38
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
39
+ outline-offset: 1px;
40
+ }
41
+ &[aria-disabled="true"] {
42
+ background: transparent;
43
+ color: var(--color-text-subtle);
44
+ cursor: default;
45
+ }
46
+ }
47
+
48
+ .dropdown-menu.wui-menubar-panel {
49
+ position: fixed;
50
+ // Above a modal, like every other portalled menu (see --wui-z-* in _tokens.scss).
51
+ z-index: var(--wui-z-menu);
52
+ min-width: 14rem;
53
+ outline: none;
54
+ transform-origin: top left;
55
+
56
+ &[data-open] {
57
+ display: block;
58
+ animation: var(--wui-menu-anim) var(--wui-menu-anim-duration) var(--wui-menu-anim-ease);
59
+ }
60
+ &.drop-up {
61
+ --wui-menu-drop: 6px;
62
+
63
+ transform-origin: bottom left;
64
+ }
65
+
66
+ .dropdown-item:focus-visible {
67
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
68
+ outline-offset: var(--wui-focus-ring-inset);
69
+ }
70
+ // Listed but unchoosable: quiet, and no hover tint.
71
+ .dropdown-item[aria-disabled="true"] {
72
+ color: var(--color-text-subtle);
73
+ cursor: default;
74
+ background: transparent;
75
+ }
76
+ // The row whose submenu is open keeps its tint while focus is inside the submenu.
77
+ .dropdown-item[aria-expanded="true"] {
78
+ background: var(--color-bg-muted);
79
+ }
80
+ }
81
+
82
+ .wui-menubar-sub {
83
+ position: relative;
84
+ }
85
+ .dropdown-menu.wui-menubar-subpanel {
86
+ // The element sets --wui-menubar-sub-offset when the submenu would run past the bottom edge.
87
+ position: absolute;
88
+ top: calc(var(--wui-menubar-sub-offset, 0px) - 5px);
89
+ right: auto;
90
+ bottom: auto;
91
+ left: 100%;
92
+ transform-origin: top left;
93
+
94
+ &[data-side="start"] {
95
+ right: 100%;
96
+ left: auto;
97
+ transform-origin: top right;
98
+ }
99
+ }
100
+ // The submenu marker; a shortcut chip never sits on the same row.
101
+ .wui-menubar-subtrigger > .wui-menubar-chevron {
102
+ flex: none;
103
+ margin-left: auto;
104
+ }
105
+
106
+ @media (prefers-reduced-motion: reduce) {
107
+ .dropdown-menu.wui-menubar-panel[data-open] {
108
+ animation: none;
109
+ }
110
+ }
@@ -0,0 +1,172 @@
1
+ // ── Navigation menu ──
2
+ // AppNavigationMenu / <app-navigation-menu> (a <wui-navigation-menu> element): a site's top
3
+ // navigation. An entry is a link or a button that discloses a panel of links; the panel opens on
4
+ // click and keyboard (never on hover) and the element marks it with [data-open] and, when it would
5
+ // leave the viewport on the right, [data-align="end"]. From the md tier up the entries sit in a
6
+ // row and a panel floats under its entry; below it the entries stack and a panel is part of the
7
+ // page flow, so nothing is placed by script on a phone. Every colour is a theme token.
8
+ //
9
+ // Part of the wui-components layer, see _wui-components.scss for load order.
10
+
11
+ wui-navigation-menu {
12
+ display: block;
13
+ }
14
+
15
+ .wui-nav-menu-list {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: 2px;
19
+ margin: 0;
20
+ padding: 0;
21
+ list-style: none;
22
+ }
23
+ .wui-nav-menu-item {
24
+ position: relative;
25
+ }
26
+
27
+ .wui-nav-menu-trigger,
28
+ .wui-nav-menu-toplink {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 6px;
32
+ width: 100%;
33
+ padding: 8px 12px;
34
+ border: 0;
35
+ border-radius: var(--wui-radius-sm);
36
+ background: transparent;
37
+ color: var(--color-text);
38
+ font: inherit;
39
+ font-size: 14px;
40
+ font-weight: 500;
41
+ line-height: 1.2;
42
+ text-align: start;
43
+ text-decoration: none;
44
+ white-space: nowrap;
45
+ cursor: pointer;
46
+
47
+ &:hover,
48
+ &[aria-expanded="true"] {
49
+ background: var(--color-bg-muted);
50
+ color: var(--color-text);
51
+ }
52
+ &:focus-visible {
53
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
54
+ outline-offset: 1px;
55
+ }
56
+ &[aria-current="page"] {
57
+ color: var(--color-primary-ink);
58
+ }
59
+ }
60
+ .wui-nav-menu-trigger > .wui-nav-menu-chevron {
61
+ flex: none;
62
+ margin-left: auto;
63
+ transition: rotate 150ms var(--wui-ease-out-quart);
64
+ }
65
+ .wui-nav-menu-trigger[aria-expanded="true"] > .wui-nav-menu-chevron {
66
+ rotate: 180deg;
67
+ }
68
+
69
+ .wui-nav-menu-panel {
70
+ display: none;
71
+ padding: 4px 0 4px 12px;
72
+
73
+ &[data-open] {
74
+ display: block;
75
+ }
76
+ }
77
+ .wui-nav-menu-links {
78
+ display: grid;
79
+ gap: 2px;
80
+ margin: 0;
81
+ padding: 0;
82
+ list-style: none;
83
+ }
84
+
85
+ .wui-nav-menu-link {
86
+ display: flex;
87
+ align-items: flex-start;
88
+ gap: 10px;
89
+ padding: 8px 10px;
90
+ border-radius: var(--wui-radius-sm);
91
+ color: var(--color-text);
92
+ text-decoration: none;
93
+
94
+ &:hover {
95
+ background: var(--color-bg-muted);
96
+ color: var(--color-text);
97
+ }
98
+ &:focus-visible {
99
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
100
+ outline-offset: var(--wui-focus-ring-inset);
101
+ }
102
+ &[aria-current="page"] .wui-nav-menu-link-label {
103
+ color: var(--color-primary-ink);
104
+ }
105
+ > .wui-icon {
106
+ flex: none;
107
+ margin-top: 2px;
108
+ color: var(--color-text-muted);
109
+ }
110
+ }
111
+ .wui-nav-menu-link-text {
112
+ display: grid;
113
+ gap: 2px;
114
+ min-width: 0;
115
+ }
116
+ .wui-nav-menu-link-label {
117
+ font-size: 14px;
118
+ font-weight: 600;
119
+ }
120
+ .wui-nav-menu-link-desc {
121
+ color: var(--color-text-muted);
122
+ font-size: 13px;
123
+ line-height: 1.4;
124
+ }
125
+
126
+ @include media-breakpoint-up(md) {
127
+ .wui-nav-menu-list {
128
+ flex-direction: row;
129
+ align-items: center;
130
+ }
131
+ .wui-nav-menu-trigger,
132
+ .wui-nav-menu-toplink {
133
+ width: auto;
134
+ }
135
+ .wui-nav-menu-trigger > .wui-nav-menu-chevron {
136
+ margin-left: 0;
137
+ }
138
+ .wui-nav-menu-panel {
139
+ position: absolute;
140
+ top: calc(100% + 6px);
141
+ left: 0;
142
+ z-index: var(--wui-z-dropdown);
143
+ width: max-content;
144
+ min-width: 16rem;
145
+ max-width: min(36rem, calc(100vw - 16px));
146
+ padding: 8px;
147
+ border: 1px solid var(--color-border);
148
+ border-radius: var(--wui-radius);
149
+ corner-shape: squircle;
150
+ background: var(--color-surface);
151
+ box-shadow: var(--wui-shadow-overlay);
152
+ transform-origin: top left;
153
+
154
+ &[data-open] {
155
+ animation: var(--wui-menu-anim) var(--wui-menu-anim-duration) var(--wui-menu-anim-ease);
156
+ }
157
+ &[data-align="end"] {
158
+ right: 0;
159
+ left: auto;
160
+ transform-origin: top right;
161
+ }
162
+ }
163
+ }
164
+
165
+ @media (prefers-reduced-motion: reduce) {
166
+ .wui-nav-menu-panel[data-open] {
167
+ animation: none;
168
+ }
169
+ .wui-nav-menu-trigger > .wui-nav-menu-chevron {
170
+ transition: none;
171
+ }
172
+ }
@@ -277,8 +277,8 @@
277
277
  pointer-events: none;
278
278
  }
279
279
  .app-tab:focus-visible {
280
- outline: 2px solid var(--color-primary);
281
- outline-offset: -2px;
280
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
281
+ outline-offset: var(--wui-focus-ring-inset);
282
282
  border-radius: var(--radius-sm);
283
283
  }
284
284
  // A destructive tab reads as destructive whether or not it is the active one.
@@ -469,8 +469,8 @@
469
469
  height: var(--wui-tab-h, 0);
470
470
  transform: translateY(var(--wui-tab-y, 0));
471
471
  transition:
472
- transform 0.42s var(--wui-ease-elastic),
473
- height 0.42s var(--wui-ease-elastic),
472
+ transform 0.42s var(--wui-ease-out-quart),
473
+ height 0.42s var(--wui-ease-out-quart),
474
474
  opacity 0.15s ease;
475
475
  }
476
476
  // Vertical pills: the moving pill fills the row width.
@@ -499,14 +499,117 @@
499
499
  background: var(--color-bg-muted);
500
500
  }
501
501
  .app-tabs-scroll-btn:focus-visible {
502
- outline: 2px solid var(--color-primary);
503
- outline-offset: 2px;
502
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
503
+ outline-offset: var(--wui-focus-ring-offset);
504
504
  }
505
505
  .app-tabs-wrap.is-overflow-start .app-tabs-scroll-btn.prev,
506
506
  .app-tabs-wrap.is-overflow-end .app-tabs-scroll-btn.next {
507
507
  display: inline-flex;
508
508
  }
509
509
 
510
+ // ── Overflow menu (<wui-overflow>) — items that do not fit move into a "More" menu. ──
511
+ // Used by AppTabs `overflow="menu"` and AppChipGroup `overflow="menu"`; the element hides an
512
+ // item with [data-wui-overflow-hidden] and owns the More button and its menu.
513
+ .wui-overflow {
514
+ display: flex;
515
+ align-items: center;
516
+ gap: 4px;
517
+ min-width: 0;
518
+ max-width: 100%;
519
+ }
520
+ .wui-overflow > [data-wui-overflow-list] {
521
+ flex: 1 1 auto;
522
+ min-width: 0;
523
+ }
524
+ [data-wui-overflow-hidden] {
525
+ display: none !important;
526
+ }
527
+ .wui-overflow-more {
528
+ flex: none;
529
+ display: inline-flex;
530
+ align-items: center;
531
+ gap: 6px;
532
+ height: 28px;
533
+ padding: 0 10px;
534
+ border: 1px solid var(--color-border);
535
+ border-radius: 999px;
536
+ background: var(--color-surface);
537
+ color: var(--color-text-muted);
538
+ font-family: inherit;
539
+ font-size: 13px;
540
+ font-weight: 500;
541
+ line-height: 1;
542
+ white-space: nowrap;
543
+ cursor: pointer;
544
+ }
545
+ .wui-overflow-more[hidden],
546
+ .wui-overflow-menu[hidden] {
547
+ display: none;
548
+ }
549
+ .wui-overflow-more::after {
550
+ content: "";
551
+ width: 6px;
552
+ height: 6px;
553
+ margin-top: -3px;
554
+ border-right: 1.5px solid currentColor;
555
+ border-bottom: 1.5px solid currentColor;
556
+ transform: rotate(45deg);
557
+ }
558
+ .wui-overflow-more:hover,
559
+ .wui-overflow-more[aria-expanded="true"] {
560
+ color: var(--color-text);
561
+ background: var(--color-bg-muted);
562
+ }
563
+ .wui-overflow-more:focus-visible {
564
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
565
+ outline-offset: var(--wui-focus-ring-offset);
566
+ }
567
+ .wui-overflow-menu {
568
+ z-index: var(--wui-z-dropdown);
569
+ display: flex;
570
+ flex-direction: column;
571
+ min-width: 160px;
572
+ max-width: min(320px, calc(100vw - 8px));
573
+ padding: 4px;
574
+ border: 1px solid var(--color-border);
575
+ border-radius: var(--radius);
576
+ background: var(--color-surface);
577
+ box-shadow: var(--wui-shadow-overlay);
578
+ }
579
+ .wui-overflow-item {
580
+ display: block;
581
+ width: 100%;
582
+ padding: 8px 10px;
583
+ border: 0;
584
+ border-radius: var(--radius-sm);
585
+ background: transparent;
586
+ color: var(--color-text);
587
+ font-family: inherit;
588
+ font-size: 14px;
589
+ text-align: left;
590
+ white-space: nowrap;
591
+ overflow: hidden;
592
+ text-overflow: ellipsis;
593
+ cursor: pointer;
594
+ }
595
+ .wui-overflow-item:hover,
596
+ .wui-overflow-item:focus-visible {
597
+ background: var(--color-bg-muted);
598
+ }
599
+ // Inset: the menu scrolls, so an outer ring would be clipped at its edges.
600
+ .wui-overflow-item:focus-visible {
601
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
602
+ outline-offset: var(--wui-focus-ring-inset);
603
+ }
604
+ .wui-overflow-item[aria-checked="true"] {
605
+ color: var(--color-primary-ink);
606
+ font-weight: 600;
607
+ }
608
+ .wui-overflow-item[aria-disabled="true"] {
609
+ color: var(--color-text-subtle);
610
+ cursor: not-allowed;
611
+ }
612
+
510
613
  // ── Motion off — no slide, no overshoot; the bar just fades in place. ──
511
614
  @media (prefers-reduced-motion: reduce) {
512
615
  .app-tab-indicator,
@@ -0,0 +1,251 @@
1
+ // ── Notification centre ──
2
+ // AppNotificationCenter / <app-notification-center> (a <wui-notification-center> element): a bell
3
+ // with an unread count that opens a panel of notifications grouped by day. The element shows the
4
+ // panel from the host's [open] attribute, so a React re-render never resets it. Every colour,
5
+ // radius and shadow is a theme token.
6
+ //
7
+ // Part of the wui-components layer, see _wui-components.scss for load order.
8
+
9
+ .wui-notification-center {
10
+ position: relative;
11
+ display: inline-flex;
12
+ }
13
+ .wui-notification-center-trigger {
14
+ position: relative;
15
+ }
16
+ // White on the strong danger fill, ringed in the surface colour so it reads as sitting on the bell.
17
+ .wui-notification-center-count {
18
+ position: absolute;
19
+ top: 2px;
20
+ right: 0;
21
+ box-sizing: content-box;
22
+ min-width: 18px;
23
+ height: 18px;
24
+ padding: 0 5px;
25
+ border: 2px solid var(--color-surface);
26
+ border-radius: 999px;
27
+ background: var(--color-danger-strong);
28
+ color: var(--color-progress-label);
29
+ font-size: 11px;
30
+ font-weight: 700;
31
+ line-height: 18px;
32
+ text-align: center;
33
+ pointer-events: none;
34
+ }
35
+ .wui-notification-center-count[hidden] {
36
+ display: none;
37
+ }
38
+
39
+ // Read by screen readers, never seen: the count announcement and the "Unread: " prefix, which
40
+ // the element finds by these names.
41
+ .wui-notification-center-live,
42
+ .wui-notification-center-unread-label {
43
+ position: absolute;
44
+ width: 1px;
45
+ height: 1px;
46
+ margin: -1px;
47
+ padding: 0;
48
+ overflow: hidden;
49
+ clip-path: inset(50%);
50
+ white-space: nowrap;
51
+ border: 0;
52
+ }
53
+
54
+ .wui-notification-center-panel {
55
+ position: absolute;
56
+ top: calc(100% + 6px);
57
+ right: 0;
58
+ z-index: var(--wui-z-dropdown);
59
+ display: none;
60
+ width: 380px;
61
+ max-width: calc(100vw - 24px);
62
+ overflow: hidden;
63
+ border: 1px solid var(--color-border);
64
+ border-radius: var(--wui-radius-lg);
65
+ background: var(--color-surface);
66
+ box-shadow: var(--wui-shadow-overlay);
67
+ // Focus lands on the panel itself when it opens; the controls inside carry the visible focus.
68
+ outline: none;
69
+ transform-origin: top right;
70
+ }
71
+ .wui-notification-center[open] > .wui-notification-center-panel {
72
+ display: block;
73
+ animation: var(--wui-menu-anim) var(--wui-menu-anim-duration) var(--wui-menu-anim-ease);
74
+ }
75
+ @media (prefers-reduced-motion: reduce) {
76
+ .wui-notification-center[open] > .wui-notification-center-panel {
77
+ animation: none;
78
+ }
79
+ }
80
+
81
+ .wui-notification-center-head {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: space-between;
85
+ gap: 12px;
86
+ padding: 10px 16px;
87
+ border-bottom: 1px solid var(--color-border);
88
+ }
89
+ .wui-notification-center-title {
90
+ margin: 0;
91
+ font-size: 1rem;
92
+ font-weight: 600;
93
+ color: var(--color-text);
94
+ }
95
+ .wui-notification-center-markall {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ min-height: 44px;
99
+ padding: 0 4px;
100
+ border: 0;
101
+ border-radius: var(--wui-radius-sm);
102
+ background: none;
103
+ color: var(--color-primary-ink);
104
+ font: inherit;
105
+ font-size: 14px;
106
+ font-weight: 500;
107
+ cursor: pointer;
108
+ }
109
+ .wui-notification-center-markall:hover {
110
+ text-decoration: underline;
111
+ }
112
+ .wui-notification-center-markall:disabled {
113
+ opacity: 0.6;
114
+ cursor: default;
115
+ text-decoration: none;
116
+ }
117
+
118
+ .wui-notification-center-list {
119
+ max-height: min(440px, 60vh);
120
+ overflow-y: auto;
121
+ scrollbar-width: thin;
122
+ scrollbar-color: var(--wui-scrollbar) transparent;
123
+ }
124
+ .wui-notification-center-day {
125
+ position: sticky;
126
+ top: 0;
127
+ z-index: 1;
128
+ margin: 0;
129
+ padding: 8px 16px 6px;
130
+ background: var(--color-bg-muted);
131
+ color: var(--color-text-muted);
132
+ font-size: 12px;
133
+ font-weight: 600;
134
+ letter-spacing: 0.02em;
135
+ text-transform: uppercase;
136
+ }
137
+ .wui-notification-center-items {
138
+ margin: 0;
139
+ padding: 0;
140
+ list-style: none;
141
+ }
142
+ .wui-notification-center-item {
143
+ display: flex;
144
+ gap: 12px;
145
+ width: 100%;
146
+ min-height: 44px;
147
+ padding: 12px 16px;
148
+ border: 0;
149
+ border-bottom: 1px solid var(--color-border-light);
150
+ background: transparent;
151
+ color: var(--color-text-body);
152
+ font: inherit;
153
+ text-align: left;
154
+ text-decoration: none;
155
+ cursor: pointer;
156
+ }
157
+ .wui-notification-center-item:hover {
158
+ background: var(--color-bg-muted);
159
+ text-decoration: none;
160
+ }
161
+ .wui-notification-center-item:focus-visible {
162
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
163
+ outline-offset: var(--wui-focus-ring-inset);
164
+ }
165
+ .wui-notification-center-items > li:last-child > .wui-notification-center-item {
166
+ border-bottom: 0;
167
+ }
168
+ .wui-notification-center-dot {
169
+ flex: none;
170
+ width: 8px;
171
+ height: 8px;
172
+ margin-top: 6px;
173
+ border-radius: 50%;
174
+ background: var(--color-primary);
175
+ }
176
+ .wui-notification-center-item-read .wui-notification-center-dot {
177
+ visibility: hidden;
178
+ }
179
+ .wui-notification-center-icon {
180
+ flex: none;
181
+ color: var(--color-text-subtle);
182
+ }
183
+ .wui-notification-center-body {
184
+ display: flex;
185
+ flex-direction: column;
186
+ gap: 2px;
187
+ min-width: 0;
188
+ }
189
+ .wui-notification-center-item-title {
190
+ font-size: 14px;
191
+ font-weight: 600;
192
+ color: var(--color-text);
193
+ overflow-wrap: anywhere;
194
+ }
195
+ .wui-notification-center-item-read .wui-notification-center-item-title {
196
+ font-weight: 400;
197
+ }
198
+ .wui-notification-center-item-text {
199
+ font-size: 13px;
200
+ color: var(--color-text-muted);
201
+ overflow-wrap: anywhere;
202
+ }
203
+ .wui-notification-center-when {
204
+ font-size: 12px;
205
+ font-variant-numeric: tabular-nums;
206
+ color: var(--color-text-muted);
207
+ }
208
+ .wui-notification-center-empty {
209
+ margin: 0;
210
+ padding: 28px 16px;
211
+ font-size: 14px;
212
+ color: var(--color-text-muted);
213
+ text-align: center;
214
+ }
215
+ .wui-notification-center-foot {
216
+ display: flex;
217
+ align-items: center;
218
+ justify-content: center;
219
+ min-height: 44px;
220
+ border-top: 1px solid var(--color-border);
221
+ color: var(--color-primary-ink);
222
+ font-size: 14px;
223
+ font-weight: 500;
224
+ text-decoration: none;
225
+ }
226
+ .wui-notification-center-foot:hover {
227
+ background: var(--color-bg-muted);
228
+ }
229
+ .wui-notification-center-foot:focus-visible,
230
+ .wui-notification-center-markall:focus-visible {
231
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
232
+ outline-offset: var(--wui-focus-ring-inset);
233
+ }
234
+
235
+ // A 380px card would overflow a 375px phone: below md the panel is a sheet inset 12px.
236
+ @include media-breakpoint-down(md) {
237
+ .wui-notification-center {
238
+ position: static;
239
+ }
240
+ .wui-notification-center-panel {
241
+ position: fixed;
242
+ top: 72px;
243
+ right: 12px;
244
+ left: 12px;
245
+ width: auto;
246
+ max-width: none;
247
+ }
248
+ .wui-notification-center-list {
249
+ max-height: calc(100dvh - 72px - 12px - 120px);
250
+ }
251
+ }