@necrolab/dashboard 0.5.12 → 0.5.13

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 (54) hide show
  1. package/.playwright-mcp/verification-accounts-desktop.png +0 -0
  2. package/.playwright-mcp/verification-tasks-desktop.png +0 -0
  3. package/.playwright-mcp/verification-tasks-mobile.png +0 -0
  4. package/README.md +21 -0
  5. package/docs/plans/2026-02-08-tailwind-consolidation-results.md +476 -0
  6. package/docs/plans/2026-02-08-tailwind-consolidation.md +2416 -0
  7. package/package.json +1 -1
  8. package/src/App.vue +2 -163
  9. package/src/assets/css/components/buttons.scss +43 -95
  10. package/src/assets/css/components/forms.scss +10 -28
  11. package/src/assets/css/components/search-groups.scss +80 -0
  12. package/src/assets/css/components/tables.scss +0 -8
  13. package/src/assets/css/main.scss +2 -43
  14. package/src/components/Editors/Account/Account.vue +14 -220
  15. package/src/components/Editors/Account/AccountCreator.vue +0 -4
  16. package/src/components/Editors/Account/AccountView.vue +0 -1
  17. package/src/components/Editors/Account/CreateAccount.vue +36 -107
  18. package/src/components/Editors/Profile/CreateProfile.vue +46 -135
  19. package/src/components/Editors/Profile/Profile.vue +10 -213
  20. package/src/components/Editors/Profile/ProfileView.vue +0 -1
  21. package/src/components/Filter/Filter.vue +14 -17
  22. package/src/components/Filter/FilterPreview.vue +0 -6
  23. package/src/components/Table/Row.vue +1 -1
  24. package/src/components/Table/Table.vue +2 -16
  25. package/src/components/Tasks/CreateTaskAXS.vue +45 -104
  26. package/src/components/Tasks/CreateTaskTM.vue +58 -96
  27. package/src/components/Tasks/Task.vue +22 -209
  28. package/src/components/Tasks/TaskView.vue +5 -4
  29. package/src/components/Tasks/ViewTask.vue +201 -214
  30. package/src/components/icons/Copy.vue +6 -0
  31. package/src/components/icons/index.js +3 -1
  32. package/src/components/ui/ActionButtonGroup.vue +70 -0
  33. package/src/components/ui/FormField.vue +74 -0
  34. package/src/components/ui/InfoRow.vue +98 -0
  35. package/src/components/ui/Modal.vue +6 -47
  36. package/src/components/ui/Navbar.vue +15 -43
  37. package/src/components/ui/ReconnectIndicator.vue +4 -4
  38. package/src/components/ui/SectionCard.vue +24 -0
  39. package/src/components/ui/Splash.vue +1 -6
  40. package/src/components/ui/StatusBadge.vue +37 -0
  41. package/src/components/ui/controls/CountryChooser.vue +14 -58
  42. package/src/components/ui/controls/atomic/Dropdown.vue +16 -24
  43. package/src/components/ui/controls/atomic/MultiDropdown.vue +7 -1
  44. package/src/components/ui/controls/atomic/Switch.vue +13 -29
  45. package/src/composables/useCopyToClipboard.js +25 -0
  46. package/src/composables/useRowSelection.js +48 -0
  47. package/src/views/Accounts.vue +0 -81
  48. package/src/views/Console.vue +4 -21
  49. package/src/views/Editor.vue +48 -138
  50. package/src/views/FilterBuilder.vue +0 -23
  51. package/src/views/Login.vue +14 -63
  52. package/src/views/Profiles.vue +0 -82
  53. package/src/views/Tasks.vue +3 -24
  54. package/tailwind.config.js +47 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@necrolab/dashboard",
3
- "version": "0.5.12",
3
+ "version": "0.5.13",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "rm -rf dist && npx workbox-cli generateSW workbox-config.cjs && vite build",
package/src/App.vue CHANGED
@@ -1,15 +1,5 @@
1
1
  <template>
2
- <div class="layout">
3
- <!-- iPhone Landscape Lock Overlay -->
4
- <div v-if="!isIpadOS() && isIOS()" class="iphone-landscape-lock">
5
- <div class="rotate-message">
6
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="rotate-icon">
7
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" />
8
- </svg>
9
- <p class="rotate-text">Please rotate your device to portrait mode</p>
10
- </div>
11
- </div>
12
-
2
+ <div class="layout min-h-screen h-screen">
13
3
  <transition name="fade">
14
4
  <Splash v-if="isLoading" />
15
5
  </transition>
@@ -60,10 +50,7 @@
60
50
  <component
61
51
  :is="Component"
62
52
  :key="route.path"
63
- :class="[
64
- 'component-container pb-2 mt-0 lg:mt-4 ios-wrapper',
65
- { 'w-full': landscapeIos }
66
- ]" />
53
+ class="component-container w-full mx-auto px-3 xs:px-3 md:px-2 lg:px-6 xl:px-10 pb-2 mt-0 lg:mt-4 ios-wrapper" />
67
54
  </transition>
68
55
  </router-view>
69
56
  </div>
@@ -84,7 +71,6 @@ const ui = useUIStore();
84
71
  const router = useRouter();
85
72
  const isLoading = ref(false);
86
73
  const spinner = storeToRefs(ui).showSpinner;
87
- const landscapeIos = ref(false);
88
74
 
89
75
  function isIOS() {
90
76
  if (/iPad|iPhone|iPod/.test(navigator.platform)) {
@@ -98,33 +84,6 @@ function isIpadOS() {
98
84
  return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform);
99
85
  }
100
86
 
101
- // Lock iPhone (not iPad) to portrait orientation only
102
- function lockOrientationToPortrait() {
103
- if (isIOS() && !isIpadOS()) {
104
- // Try to lock orientation using Screen Orientation API
105
- if (screen.orientation && screen.orientation.lock) {
106
- screen.orientation.lock('portrait').catch(() => {
107
- // Silently fail if not supported or in browser (vs PWA)
108
- });
109
- }
110
-
111
- // Also prevent landscape handling
112
- const preventLandscape = () => {
113
- if (window.innerWidth > window.innerHeight) {
114
- // Force dimensions to portrait if somehow in landscape
115
- document.documentElement.style.setProperty('width', window.innerHeight + 'px');
116
- document.documentElement.style.setProperty('height', window.innerWidth + 'px');
117
- }
118
- };
119
-
120
- window.addEventListener('orientationchange', preventLandscape);
121
- window.addEventListener('resize', preventLandscape);
122
- }
123
- }
124
-
125
- // Run orientation lock on mount
126
- lockOrientationToPortrait();
127
-
128
87
  // Prevent pinch-to-zoom gestures
129
88
  let lastTouchDistance = 0;
130
89
 
@@ -162,28 +121,6 @@ document.addEventListener('touchend', (e) => {
162
121
  lastTouchEnd = now;
163
122
  }, { passive: false });
164
123
 
165
- // Handle orientation changes for iOS devices
166
- const handleOrientationChange = () => {
167
- if (isIOS()) {
168
- if (isIpadOS()) {
169
- // For iPad, we want to allow proper viewport resizing
170
- landscapeIos.value = window.matchMedia("(orientation: landscape)").matches;
171
- document.documentElement.style.setProperty("width", "100%", "important");
172
- document.body.style.setProperty("width", "100%", "important");
173
- } else {
174
- // For iPhone, maintain the current behavior
175
- landscapeIos.value = window.matchMedia("(orientation: landscape)").matches;
176
- }
177
- }
178
- };
179
-
180
- // Initial orientation check
181
- handleOrientationChange();
182
-
183
- // Listen for orientation changes
184
- window.matchMedia("(orientation: portrait)").addEventListener("change", handleOrientationChange);
185
- window.matchMedia("(orientation: landscape)").addEventListener("change", handleOrientationChange);
186
-
187
124
  if (!window.location.href.includes(":5173")) ui.startSpinner("Loading...");
188
125
 
189
126
  // Ensure notch handling runs when Vue app mounts
@@ -673,33 +610,6 @@ watch(
673
610
  const layout = computed(() => router.currentRoute.value.meta.layout);
674
611
  </script>
675
612
  <style lang="scss">
676
- // Ultra bulletproof scroll prevention and zoom prevention
677
- html,
678
- body {
679
- overflow: hidden !important;
680
- overscroll-behavior: none !important;
681
- width: 100% !important;
682
- height: 100% !important;
683
- touch-action: none !important;
684
- // Prevent zoom on desktop
685
- zoom: 1;
686
- -moz-transform: scale(1);
687
- -moz-transform-origin: 0 0;
688
- }
689
-
690
- #app {
691
- overflow: hidden !important;
692
- overscroll-behavior: none !important;
693
- width: 100% !important;
694
- height: 100vh !important;
695
- touch-action: none !important;
696
- }
697
-
698
- // Prevent zoom but allow scrolling on specific elements
699
- * {
700
- touch-action: manipulation !important;
701
- }
702
-
703
613
  // Override for scrollable containers - allow proper touch scrolling
704
614
  .table-component,
705
615
  .stop-pan,
@@ -728,73 +638,6 @@ body {
728
638
  z-index: 1;
729
639
  }
730
640
 
731
- .layout {
732
- @apply flex flex-col;
733
- min-height: 90vh;
734
- overflow: hidden !important;
735
- height: 100vh !important;
736
- }
737
-
738
- // iPhone landscape lock overlay
739
- .iphone-landscape-lock {
740
- position: fixed;
741
- inset: 0;
742
- background: oklch(0.1822 0 0);
743
- z-index: 99999;
744
- align-items: center;
745
- justify-content: center;
746
- display: flex;
747
- opacity: 1;
748
- transition: opacity 0.1s ease-out;
749
-
750
- // Hide in portrait mode
751
- @media (max-device-width: 430px) and (orientation: portrait) {
752
- opacity: 0;
753
- pointer-events: none;
754
- }
755
-
756
- // Show immediately in landscape
757
- @media (max-device-width: 430px) and (orientation: landscape) {
758
- opacity: 1;
759
- pointer-events: all;
760
- }
761
-
762
- // Hide completely on iPad and desktop
763
- @media (min-device-width: 431px) {
764
- display: none;
765
- }
766
-
767
- .rotate-message {
768
- text-align: center;
769
- padding: 2rem;
770
-
771
- .rotate-icon {
772
- width: 64px;
773
- height: 64px;
774
- margin: 0 auto 1rem;
775
- color: oklch(0.72 0.15 145);
776
- animation: rotate-pulse 2s ease-in-out infinite;
777
- }
778
-
779
- .rotate-text {
780
- color: oklch(0.9 0 0);
781
- font-size: 1.125rem;
782
- font-weight: 500;
783
- }
784
- }
785
- }
786
-
787
- @keyframes rotate-pulse {
788
- 0%, 100% {
789
- transform: rotate(0deg) scale(1);
790
- opacity: 1;
791
- }
792
- 50% {
793
- transform: rotate(90deg) scale(1.1);
794
- opacity: 0.8;
795
- }
796
- }
797
-
798
641
  .router-wrapper {
799
642
  @apply pt-5;
800
643
  transition: margin 0.25s;
@@ -805,10 +648,6 @@ body {
805
648
  transition: margin 0.25s;
806
649
  }
807
650
 
808
- .component-container {
809
- @apply w-full mx-auto px-4 xs:px-4 md:px-2 lg:px-6 xl:px-10;
810
- }
811
-
812
651
  // Page navigation transitions
813
652
  .page-transition-enter-active {
814
653
  transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
@@ -5,65 +5,50 @@
5
5
  /* Primary Button - Solid green with clean shadow */
6
6
  .btn-primary {
7
7
  @apply font-medium transition-all duration-150;
8
- background-color: oklch(0.72 0.15 145);
9
- color: oklch(1 0 0);
10
- padding: 0.5rem 1rem;
11
- border-radius: 0.375rem;
12
- box-shadow: 0 1px 2px oklch(0 0 0 / 0.1);
13
- border: 2px solid oklch(0.72 0.15 145);
8
+ @apply bg-accent-green text-white;
9
+ @apply px-4 py-2 rounded-md;
10
+ @apply shadow-sm border-2 border-accent-green;
14
11
 
15
12
  &:hover {
16
- background-color: oklch(0.68 0.15 145);
17
- border-color: oklch(0.68 0.15 145);
13
+ @apply bg-green-400 border-green-400;
18
14
  }
19
15
 
20
16
  &:active {
21
- background-color: oklch(0.64 0.15 145);
22
- border-color: oklch(0.72 0.15 145);
23
- outline: 1px solid oklch(0.72 0.15 145);
24
- outline-offset: 0;
17
+ @apply bg-green-500 border-accent-green;
18
+ @apply outline outline-1 outline-accent-green outline-offset-0;
25
19
  }
26
20
  }
27
21
 
28
22
  /* Secondary Button - Transparent with green border, fills on hover */
29
23
  .btn-secondary {
30
24
  @apply font-medium transition-all duration-150;
31
- background-color: transparent;
32
- color: oklch(0.72 0.15 145);
33
- padding: 0.5rem 1rem;
34
- border-radius: 0.375rem;
35
- border: 2px solid oklch(0.72 0.15 145);
25
+ @apply bg-transparent text-accent-green;
26
+ @apply px-4 py-2 rounded-md;
27
+ @apply border-2 border-accent-green;
36
28
 
37
29
  &:hover {
38
- background-color: oklch(0.72 0.15 145);
39
- color: oklch(1 0 0);
40
- border-color: oklch(0.72 0.15 145);
30
+ @apply bg-accent-green text-white border-accent-green;
41
31
  }
42
32
 
43
33
  &:active {
44
- background-color: oklch(0.68 0.15 145);
45
- border-color: oklch(0.72 0.15 145);
46
- outline: 1px solid oklch(0.72 0.15 145);
47
- outline-offset: 0;
34
+ @apply bg-green-400 border-accent-green;
35
+ @apply outline outline-1 outline-accent-green outline-offset-0;
48
36
  }
49
37
  }
50
38
 
51
39
  /* Ghost Button - No border, muted text, subtle hover */
52
40
  .btn-ghost {
53
41
  @apply font-medium transition-all duration-150;
54
- background-color: transparent;
55
- color: oklch(0.82 0 0);
56
- padding: 0.5rem 1rem;
57
- border-radius: 0.375rem;
58
- border: none;
42
+ @apply bg-transparent text-light-400;
43
+ @apply px-4 py-2 rounded-md;
44
+ @apply border-none;
59
45
 
60
46
  &:hover {
61
- background-color: oklch(0.22 0 0);
62
- color: oklch(0.90 0 0);
47
+ @apply bg-dark-450 text-light-300;
63
48
  }
64
49
 
65
50
  &:active {
66
- background-color: oklch(0.19 0 0);
51
+ @apply bg-dark-350;
67
52
  }
68
53
  }
69
54
 
@@ -71,114 +56,85 @@
71
56
  .btn-danger,
72
57
  .btn-destructive {
73
58
  @apply font-medium transition-all duration-150;
74
- background-color: oklch(0.60 0.20 25);
75
- color: oklch(1 0 0);
76
- padding: 0.5rem 1rem;
77
- border-radius: 0.375rem;
78
- box-shadow: 0 1px 2px oklch(0 0 0 / 0.1);
79
- border: none;
59
+ @apply bg-error-500 text-white;
60
+ @apply px-4 py-2 rounded-md;
61
+ @apply shadow-sm border-none;
80
62
 
81
63
  &:hover {
82
- background-color: oklch(0.56 0.20 25);
64
+ @apply bg-error-400;
83
65
  }
84
66
 
85
67
  &:active {
86
- background-color: oklch(0.52 0.20 25);
68
+ @apply bg-red-500;
87
69
  }
88
70
  }
89
71
 
90
72
  /* Icon Button - Clean hover states */
91
73
  .btn-icon {
92
74
  @apply flex items-center justify-center transition-all duration-150;
93
- padding: 0.25rem;
94
- border-radius: 0.375rem;
95
- background-color: transparent;
96
- color: oklch(0.82 0 0);
97
- border: none;
75
+ @apply p-1 rounded-md;
76
+ @apply bg-transparent text-light-400;
77
+ @apply border-none;
98
78
 
99
79
  &:hover {
100
- background-color: oklch(0.22 0 0);
101
- color: oklch(1 0 0);
80
+ @apply bg-dark-450 text-white;
102
81
  }
103
82
 
104
83
  &:active {
105
- background-color: oklch(0.19 0 0);
84
+ @apply bg-dark-350;
106
85
  }
107
86
  }
108
87
 
109
88
  /* Action Button - Similar to secondary but with specific sizing */
110
89
  .btn-action {
111
90
  @apply font-medium flex items-center justify-center gap-x-2 transition-all duration-150;
112
- background-color: transparent;
113
- color: oklch(0.72 0.15 145);
114
- padding: 0 1rem;
115
- height: 2.5rem;
116
- border-radius: 0.375rem;
117
- border: 2px solid oklch(0.72 0.15 145);
118
- font-size: 0.75rem;
91
+ @apply bg-transparent text-accent-green;
92
+ @apply px-4 h-10 rounded-md;
93
+ @apply border-2 border-accent-green;
94
+ @apply text-xs;
119
95
 
120
96
  &:hover {
121
- background-color: oklch(0.72 0.15 145);
122
- color: oklch(1 0 0);
123
- border-color: oklch(0.72 0.15 145);
97
+ @apply bg-accent-green text-white border-accent-green;
124
98
  }
125
99
 
126
100
  &:active {
127
- background-color: oklch(0.68 0.15 145);
128
- border-color: oklch(0.72 0.15 145);
129
- outline: 1px solid oklch(0.72 0.15 145);
130
- outline-offset: 0;
101
+ @apply bg-green-400 border-accent-green;
102
+ @apply outline outline-1 outline-accent-green outline-offset-0;
131
103
  }
132
104
  }
133
105
 
134
106
  /* Default Button - Base styling */
135
107
  .button-default {
136
108
  @apply font-medium transition-all duration-150 flex items-center justify-center gap-x-2;
137
- height: 3.5rem;
138
- border-radius: 0.5rem;
139
- color: oklch(1 0 0);
140
- border: 2px solid oklch(0.2809 0 0);
141
- font-size: 0.875rem;
142
- padding: 0 1.5rem;
143
- width: 12rem;
109
+ @apply h-14 rounded-lg text-white border-2 border-dark-600 text-sm px-6 w-48;
144
110
 
145
111
  svg {
146
- width: 16px;
147
- height: 16px;
148
- flex-shrink: 0;
112
+ @apply w-4 h-4 flex-shrink-0;
149
113
  }
150
114
 
151
115
  @media (max-width: 768px) {
152
- height: 3rem;
153
- font-size: 0.875rem;
154
- font-weight: 500;
155
- width: 100%;
156
- max-width: 100%;
116
+ @apply h-12 text-sm font-medium w-full max-w-full;
157
117
 
158
118
  svg {
159
- width: 16px;
160
- height: 16px;
119
+ @apply w-4 h-4;
161
120
  }
162
121
  }
163
122
 
164
123
  @media (max-width: 480px) {
165
- height: 3.25rem;
166
- font-size: 0.9375rem;
124
+ @apply h-[3.25rem] text-[0.9375rem];
167
125
 
168
126
  svg {
169
- width: 16px;
170
- height: 16px;
127
+ @apply w-4 h-4;
171
128
  }
172
129
  }
173
130
 
174
131
  &:hover {
175
- border-color: oklch(0.72 0.15 145);
132
+ @apply border-accent-green;
176
133
  }
177
134
 
178
135
  &:active, &:focus {
179
- border-color: oklch(0.72 0.15 145);
180
- outline: 1px solid oklch(0.72 0.15 145);
181
- outline-offset: 0;
136
+ @apply border-accent-green;
137
+ @apply outline outline-1 outline-accent-green outline-offset-0;
182
138
  }
183
139
  }
184
140
 
@@ -206,11 +162,3 @@
206
162
  border-radius: 8px;
207
163
  }
208
164
  }
209
-
210
- @screen mobile-landscape {
211
- .btn-action {
212
- @apply text-base px-8 h-14;
213
- min-height: 56px;
214
- font-weight: 600;
215
- }
216
- }
@@ -3,20 +3,18 @@
3
3
  ========================================================================== */
4
4
 
5
5
  .input-default {
6
- @apply flex items-center bg-clip-padding relative box-border px-3 py-2 border-2 h-10;
6
+ @apply relative box-border flex h-10 items-center border-2 bg-clip-padding px-3 py-2;
7
7
  background: oklch(0.19 0 0);
8
8
  border-color: oklch(0.26 0 0);
9
9
  border-radius: 0.5rem;
10
10
  transition: border-color 0.15s ease;
11
11
 
12
12
  &:hover {
13
- border-color: oklch(0.30 0 0);
13
+ border-color: oklch(0.3 0 0);
14
14
  }
15
15
 
16
16
  &:focus-within {
17
17
  border-color: oklch(0.72 0.15 145);
18
- outline: 1px solid oklch(0.72 0.15 145);
19
- outline-offset: 0;
20
18
  }
21
19
 
22
20
  input {
@@ -29,7 +27,7 @@
29
27
  }
30
28
 
31
29
  &::placeholder {
32
- color: oklch(0.50 0 0);
30
+ color: oklch(0.5 0 0);
33
31
  }
34
32
 
35
33
  // Hide default number input spinners - use custom .input-incrementer instead
@@ -45,7 +43,8 @@
45
43
  }
46
44
 
47
45
  .input-incrementer {
48
- @apply flex flex-col ml-2 gap-0.5;
46
+ @apply flex flex-col gap-0.5;
47
+ margin-left: 0.5rem;
49
48
 
50
49
  button {
51
50
  @apply w-6 h-4 flex items-center justify-center text-white transition-all duration-200 rounded-sm;
@@ -67,19 +66,10 @@
67
66
  transform: translateY(0);
68
67
  }
69
68
 
70
- &:first-child {
71
- border-radius: 4px 4px 2px 2px;
72
- }
73
-
74
- &:last-child {
75
- border-radius: 2px 2px 4px 4px;
69
+ svg {
70
+ @apply h-3 w-3;
76
71
  }
77
72
  }
78
-
79
- svg {
80
- @apply w-2.5 h-2.5;
81
- filter: drop-shadow(0 1px 1px oklch(0 0 0 / 0.3));
82
- }
83
73
  }
84
74
  }
85
75
 
@@ -88,7 +78,7 @@
88
78
  }
89
79
 
90
80
  .input-wrapper label {
91
- @apply text-white font-medium mb-2 block;
81
+ @apply mb-2 block font-medium text-white;
92
82
  font-size: 16px;
93
83
  }
94
84
 
@@ -104,7 +94,7 @@
104
94
  }
105
95
 
106
96
  .ant-select {
107
- @apply flex items-center bg-clip-padding relative box-border px-1 py-1 border-2 h-10 !important;
97
+ @apply relative box-border flex h-10 items-center border-2 bg-clip-padding px-1 py-1 !important;
108
98
  background: oklch(0.19 0 0); /* Input background */
109
99
  border-color: oklch(0.26 0 0); /* Default border */
110
100
  border-radius: 0.375rem; /* Consistent with buttons */
@@ -112,7 +102,7 @@
112
102
  transition: border-color 0.15s ease;
113
103
 
114
104
  &:hover {
115
- border-color: oklch(0.30 0 0); /* Hover border */
105
+ border-color: oklch(0.3 0 0); /* Hover border */
116
106
  }
117
107
 
118
108
  &.ant-select-focused {
@@ -201,14 +191,6 @@
201
191
  input {
202
192
  font-size: 12px;
203
193
  }
204
-
205
- .input-incrementer button {
206
- @apply w-5 h-3;
207
-
208
- svg {
209
- @apply w-2 h-2;
210
- }
211
- }
212
194
  }
213
195
 
214
196
  .input-wrapper label {
@@ -0,0 +1,80 @@
1
+ /* ==========================================================================
2
+ UNIFIED SEARCH GROUP COMPONENTS
3
+ Shared styling for the combined search/filter/dropdown input groups
4
+ used on Accounts and Profiles pages.
5
+ ========================================================================== */
6
+
7
+ .unified-search-group {
8
+ border: 2px solid oklch(0.2809 0 0);
9
+ border-radius: 0.5rem;
10
+ overflow: hidden;
11
+ background: oklch(0.2603 0 0);
12
+ transition: all 0.15s ease;
13
+ display: flex;
14
+
15
+ .tag-toggle,
16
+ .dropdown,
17
+ input {
18
+ border: none !important;
19
+ border-width: 0 !important;
20
+ border-radius: 0 !important;
21
+ height: 40px !important;
22
+ background: transparent !important;
23
+ box-shadow: none !important;
24
+ min-width: fit-content !important;
25
+ }
26
+
27
+ .tag-toggle {
28
+ padding: 0;
29
+ border: 0 solid transparent !important;
30
+ border-top: 0 !important;
31
+ border-bottom: 0 !important;
32
+ border-left: 0 !important;
33
+ border-right: 0 !important;
34
+ }
35
+
36
+ .tag-toggle button {
37
+ font-size: 0.875rem;
38
+ padding: 0.5rem 0.75rem;
39
+ min-width: fit-content;
40
+ border: 0 solid transparent !important;
41
+ border-top: 0 !important;
42
+ border-bottom: 0 !important;
43
+ border-left: 0 !important;
44
+ border-right: 0 !important;
45
+ }
46
+
47
+ .dropdown {
48
+ width: 120px !important;
49
+ min-width: 120px !important;
50
+ }
51
+
52
+ .dropdown-display {
53
+ padding: 0 0.75rem;
54
+ font-size: 0.875rem;
55
+ }
56
+
57
+ input {
58
+ padding-left: 0.75rem;
59
+ padding-right: 0.75rem;
60
+ flex: 1;
61
+
62
+ &::placeholder {
63
+ color: oklch(0.50 0 0);
64
+ }
65
+
66
+ &:focus {
67
+ outline: none !important;
68
+ }
69
+ }
70
+
71
+ &:hover {
72
+ border-color: oklch(0.30 0 0);
73
+ }
74
+
75
+ &:focus-within {
76
+ border-color: oklch(0.72 0.15 145);
77
+ outline: 1px solid oklch(0.72 0.15 145);
78
+ outline-offset: 0;
79
+ }
80
+ }
@@ -16,12 +16,4 @@
16
16
  overflow: visible !important;
17
17
  background-color: oklch(0.2046 0 0);
18
18
  box-shadow: 0 4px 12px oklch(0 0 0 / 0.2);
19
-
20
- &:hover {
21
- background-color: oklch(0.2046 0 0);
22
- }
23
-
24
- tr:hover {
25
- background-color: oklch(0.2046 0 0);
26
- }
27
19
  }