@necrolab/dashboard 0.4.220 → 0.5.1

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 (140) hide show
  1. package/.prettierrc +27 -1
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +64 -2
  4. package/artwork/image.png +0 -0
  5. package/backend/api.js +26 -24
  6. package/backend/auth.js +2 -2
  7. package/backend/batching.js +1 -1
  8. package/backend/endpoints.js +8 -11
  9. package/backend/index.js +2 -2
  10. package/backend/mock-data.js +27 -36
  11. package/backend/mock-src/classes/logger.js +5 -7
  12. package/backend/mock-src/classes/utils.js +3 -2
  13. package/backend/mock-src/ticketmaster.js +4 -4
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +0 -1
  16. package/dev-server.js +134 -0
  17. package/exit +209 -0
  18. package/index.html +78 -8
  19. package/index.js +1 -1
  20. package/jsconfig.json +16 -0
  21. package/package.json +39 -25
  22. package/postcss.config.js +1 -1
  23. package/postinstall.js +124 -20
  24. package/public/android-chrome-192x192.png +0 -0
  25. package/public/android-chrome-512x512.png +0 -0
  26. package/public/apple-touch-icon.png +0 -0
  27. package/public/favicon-16x16.png +0 -0
  28. package/public/favicon-32x32.png +0 -0
  29. package/public/favicon.ico +0 -0
  30. package/public/img/logo_trans.png +0 -0
  31. package/public/img/necro_logo.png +0 -0
  32. package/public/manifest.json +16 -10
  33. package/run +176 -9
  34. package/src/App.vue +498 -85
  35. package/src/assets/css/base/reset.scss +43 -0
  36. package/src/assets/css/base/scroll.scss +114 -0
  37. package/src/assets/css/base/typography.scss +37 -0
  38. package/src/assets/css/components/buttons.scss +216 -0
  39. package/src/assets/css/components/forms.scss +221 -0
  40. package/src/assets/css/components/modals.scss +13 -0
  41. package/src/assets/css/components/tables.scss +27 -0
  42. package/src/assets/css/components/toasts.scss +100 -0
  43. package/src/assets/css/main.scss +201 -122
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/background.svg.backup +11 -0
  46. package/src/assets/img/logo_trans.png +0 -0
  47. package/src/components/Auth/LoginForm.vue +62 -11
  48. package/src/components/Editors/Account/Account.vue +116 -40
  49. package/src/components/Editors/Account/AccountCreator.vue +88 -39
  50. package/src/components/Editors/Account/AccountView.vue +102 -34
  51. package/src/components/Editors/Account/CreateAccount.vue +80 -32
  52. package/src/components/Editors/Profile/CreateProfile.vue +269 -83
  53. package/src/components/Editors/Profile/Profile.vue +132 -47
  54. package/src/components/Editors/Profile/ProfileCountryChooser.vue +82 -20
  55. package/src/components/Editors/Profile/ProfileView.vue +89 -32
  56. package/src/components/Editors/TagLabel.vue +67 -6
  57. package/src/components/Editors/TagToggle.vue +7 -2
  58. package/src/components/Filter/Filter.vue +288 -71
  59. package/src/components/Filter/FilterPreview.vue +202 -31
  60. package/src/components/Filter/PriceSortToggle.vue +76 -6
  61. package/src/components/Table/Header.vue +1 -1
  62. package/src/components/Table/Row.vue +1 -1
  63. package/src/components/Table/Table.vue +19 -2
  64. package/src/components/Tasks/CheckStock.vue +6 -8
  65. package/src/components/Tasks/Controls/DesktopControls.vue +27 -17
  66. package/src/components/Tasks/Controls/MobileControls.vue +8 -45
  67. package/src/components/Tasks/CreateTaskAXS.vue +80 -72
  68. package/src/components/Tasks/CreateTaskTM.vue +95 -141
  69. package/src/components/Tasks/MassEdit.vue +4 -6
  70. package/src/components/Tasks/QuickSettings.vue +199 -30
  71. package/src/components/Tasks/ScrapeVenue.vue +5 -6
  72. package/src/components/Tasks/Stats.vue +50 -24
  73. package/src/components/Tasks/Task.vue +384 -179
  74. package/src/components/Tasks/TaskLabel.vue +2 -2
  75. package/src/components/Tasks/TaskView.vue +136 -48
  76. package/src/components/Tasks/Utilities.vue +25 -10
  77. package/src/components/Tasks/ViewTask.vue +321 -0
  78. package/src/components/icons/Bag.vue +1 -1
  79. package/src/components/icons/Check.vue +5 -0
  80. package/src/components/icons/Close.vue +21 -0
  81. package/src/components/icons/CloseX.vue +5 -0
  82. package/src/components/icons/Eye.vue +6 -0
  83. package/src/components/icons/Key.vue +21 -0
  84. package/src/components/icons/Loyalty.vue +1 -1
  85. package/src/components/icons/Mail.vue +2 -2
  86. package/src/components/icons/Pencil.vue +21 -0
  87. package/src/components/icons/Play.vue +2 -2
  88. package/src/components/icons/Profile.vue +18 -0
  89. package/src/components/icons/Reload.vue +4 -5
  90. package/src/components/icons/Sandclock.vue +2 -2
  91. package/src/components/icons/Sell.vue +21 -0
  92. package/src/components/icons/Spinner.vue +42 -0
  93. package/src/components/icons/SquareCheck.vue +18 -0
  94. package/src/components/icons/SquareUncheck.vue +18 -0
  95. package/src/components/icons/Stadium.vue +1 -1
  96. package/src/components/icons/Wildcard.vue +18 -0
  97. package/src/components/icons/index.js +26 -1
  98. package/src/components/ui/Modal.vue +107 -13
  99. package/src/components/ui/Navbar.vue +175 -40
  100. package/src/components/ui/ReconnectIndicator.vue +351 -55
  101. package/src/components/ui/Splash.vue +5 -35
  102. package/src/components/ui/controls/CountryChooser.vue +200 -62
  103. package/src/components/ui/controls/atomic/Checkbox.vue +119 -10
  104. package/src/components/ui/controls/atomic/Dropdown.vue +216 -39
  105. package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
  106. package/src/components/ui/controls/atomic/MultiDropdown.vue +300 -37
  107. package/src/components/ui/controls/atomic/Switch.vue +53 -25
  108. package/src/composables/useClickOutside.js +21 -0
  109. package/src/composables/useDropdownPosition.js +174 -0
  110. package/src/libs/Filter.js +60 -24
  111. package/src/registerServiceWorker.js +1 -1
  112. package/src/stores/connection.js +4 -4
  113. package/src/stores/sampleData.js +172 -199
  114. package/src/stores/ui.js +55 -20
  115. package/src/stores/utils.js +30 -4
  116. package/src/types/index.js +41 -0
  117. package/src/utils/debug.js +1 -0
  118. package/src/views/Accounts.vue +116 -50
  119. package/src/views/Console.vue +394 -79
  120. package/src/views/Editor.vue +1176 -123
  121. package/src/views/FilterBuilder.vue +528 -250
  122. package/src/views/Login.vue +76 -14
  123. package/src/views/Profiles.vue +119 -34
  124. package/src/views/Tasks.vue +266 -98
  125. package/static/offline.html +192 -50
  126. package/switch-branch.sh +41 -0
  127. package/tailwind.config.js +119 -27
  128. package/vite.config.js +73 -16
  129. package/workbox-config.cjs +63 -0
  130. package/ICONS.md +0 -21
  131. package/public/img/background.svg +0 -14
  132. package/public/img/logo.png +0 -0
  133. package/public/img/logo_icon.png +0 -0
  134. package/public/img/logo_icon_2.png +0 -0
  135. package/src/assets/css/_input.scss +0 -143
  136. package/src/assets/img/logo.png +0 -0
  137. package/src/assets/img/logo_icon.png +0 -0
  138. package/src/assets/img/logo_icon_2.png +0 -0
  139. package/vue.config.js +0 -32
  140. package/workbox-config.js +0 -7
@@ -0,0 +1,43 @@
1
+ /* ==========================================================================
2
+ GLOBAL RESETS
3
+ ========================================================================== */
4
+
5
+ input,
6
+ textarea,
7
+ select,
8
+ button {
9
+ -webkit-tap-highlight-color: transparent;
10
+ -webkit-touch-callout: none;
11
+ outline: none;
12
+ }
13
+
14
+ input,
15
+ textarea,
16
+ select {
17
+ -webkit-appearance: none;
18
+ -moz-appearance: none;
19
+ appearance: none;
20
+ }
21
+
22
+ input:focus,
23
+ textarea:focus,
24
+ select:focus {
25
+ outline: none !important;
26
+ -webkit-tap-highlight-color: transparent !important;
27
+ box-shadow: none !important;
28
+ }
29
+
30
+ /* Remove number input spinners */
31
+ input[type="number"] {
32
+ -moz-appearance: textfield;
33
+ }
34
+
35
+ input[type="number"]::-webkit-outer-spin-button,
36
+ input[type="number"]::-webkit-inner-spin-button {
37
+ -webkit-appearance: none;
38
+ margin: 0;
39
+ }
40
+
41
+ img {
42
+ pointer-events: none;
43
+ }
@@ -0,0 +1,114 @@
1
+ /* ==========================================================================
2
+ SCROLL BEHAVIOR & TOUCH HANDLING
3
+ ========================================================================== */
4
+
5
+ html {
6
+ overflow: hidden !important;
7
+ overscroll-behavior: none !important;
8
+ height: 100% !important;
9
+ width: 100% !important;
10
+ }
11
+
12
+ * {
13
+ @apply hidden-scrollbars;
14
+ -webkit-user-select: none;
15
+ -moz-user-select: none;
16
+ -ms-user-select: none;
17
+ user-select: none;
18
+ overscroll-behavior: none !important;
19
+ }
20
+
21
+ textarea,
22
+ .code-editor,
23
+ .proxy-editor {
24
+ -webkit-user-select: text !important;
25
+ -moz-user-select: text !important;
26
+ -ms-user-select: text !important;
27
+ user-select: text !important;
28
+ overscroll-behavior: auto !important;
29
+ touch-action: pan-y !important;
30
+ }
31
+
32
+ .dropdown-menu,
33
+ .dropdown-menu *,
34
+ .dropdown-content-portal,
35
+ .dropdown-content-portal *,
36
+ .option-list,
37
+ .option-list *,
38
+ .console,
39
+ .console * {
40
+ overscroll-behavior: auto !important;
41
+ touch-action: pan-y !important;
42
+ -webkit-overflow-scrolling: touch !important;
43
+ }
44
+
45
+ /* Specific overrides for dropdown content portals */
46
+ .dropdown-content-portal {
47
+ overflow: auto !important;
48
+ overflow-y: auto !important;
49
+ overscroll-behavior: auto !important;
50
+ touch-action: pan-y !important;
51
+ -webkit-overflow-scrolling: touch !important;
52
+ scroll-behavior: smooth !important;
53
+ }
54
+
55
+ .dropdown-content-portal * {
56
+ overflow: auto !important;
57
+ overscroll-behavior: auto !important;
58
+ touch-action: pan-y !important;
59
+ -webkit-overflow-scrolling: touch !important;
60
+ user-select: auto !important;
61
+ -webkit-user-select: auto !important;
62
+ -moz-user-select: auto !important;
63
+ -ms-user-select: auto !important;
64
+ }
65
+
66
+ /* Ultra-specific overrides to beat the global * selector */
67
+ body .dropdown-content-portal,
68
+ html .dropdown-content-portal,
69
+ div .dropdown-content-portal {
70
+ overflow: auto !important;
71
+ overflow-y: auto !important;
72
+ overscroll-behavior: auto !important;
73
+ touch-action: pan-y !important;
74
+ -webkit-overflow-scrolling: touch !important;
75
+ }
76
+
77
+ /* Force scrolling on teleported dropdown content */
78
+ body > .dropdown-content-portal,
79
+ [data-v-app] .dropdown-content-portal {
80
+ overflow: auto !important;
81
+ overflow-y: auto !important;
82
+ overscroll-behavior: auto !important;
83
+ touch-action: pan-y !important;
84
+ -webkit-overflow-scrolling: touch !important;
85
+ }
86
+
87
+ .code-editor,
88
+ .proxy-editor,
89
+ .editor-container,
90
+ .proxy-editor-container {
91
+ overscroll-behavior: auto !important;
92
+ touch-action: pan-y !important;
93
+ -webkit-overflow-scrolling: touch !important;
94
+ }
95
+
96
+ /* ==========================================================================
97
+ SCROLLBAR UTILITIES
98
+ ========================================================================== */
99
+
100
+ .hidden-scrollbars {
101
+ scrollbar-width: none;
102
+ -ms-overflow-style: none;
103
+
104
+ &::-webkit-scrollbar {
105
+ display: none;
106
+ }
107
+ }
108
+
109
+ .editor-scrollable {
110
+ overflow: auto !important;
111
+ -webkit-overflow-scrolling: touch !important;
112
+ touch-action: auto !important;
113
+ overscroll-behavior: auto !important;
114
+ }
@@ -0,0 +1,37 @@
1
+ /* ==========================================================================
2
+ TYPOGRAPHY
3
+ ========================================================================== */
4
+
5
+ body {
6
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
7
+ -webkit-font-smoothing: antialiased;
8
+ -moz-osx-font-smoothing: grayscale;
9
+ }
10
+
11
+ :root {
12
+ touch-action: pan-x pan-y;
13
+ height: 100%;
14
+ --toastify-toast-width: 520px;
15
+
16
+ /* OKLCH Color System - Supabase-inspired */
17
+ --bg-base: oklch(0.1822 0 0);
18
+ --bg-elevated: oklch(0.2046 0 0);
19
+ --bg-input: oklch(0.2603 0 0);
20
+ --bg-hover: oklch(0.2809 0 0);
21
+ --accent-green: oklch(0.72 0.15 145);
22
+ --border-base: oklch(0.2809 0 0);
23
+ --text-primary: oklch(0.9851 0 0);
24
+ --text-secondary: oklch(0.7122 0 0);
25
+ --text-muted: oklch(0.55 0 0);
26
+ }
27
+
28
+ .editor-base {
29
+ font-family: "JetBrains Mono", "Fira Code", "Menlo", "Monaco", "Courier New", monospace;
30
+ font-size: 14px;
31
+ line-height: 1.6;
32
+ tab-size: 4;
33
+ background-color: transparent;
34
+ border: none;
35
+ outline: none;
36
+ resize: none;
37
+ }
@@ -0,0 +1,216 @@
1
+ /* ==========================================================================
2
+ BUTTON COMPONENTS - Shadcn-Inspired Design
3
+ ========================================================================== */
4
+
5
+ /* Primary Button - Solid green with clean shadow */
6
+ .btn-primary {
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);
14
+
15
+ &:hover {
16
+ background-color: oklch(0.68 0.15 145);
17
+ border-color: oklch(0.68 0.15 145);
18
+ }
19
+
20
+ &: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;
25
+ }
26
+ }
27
+
28
+ /* Secondary Button - Transparent with green border, fills on hover */
29
+ .btn-secondary {
30
+ @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);
36
+
37
+ &: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);
41
+ }
42
+
43
+ &: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;
48
+ }
49
+ }
50
+
51
+ /* Ghost Button - No border, muted text, subtle hover */
52
+ .btn-ghost {
53
+ @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;
59
+
60
+ &:hover {
61
+ background-color: oklch(0.22 0 0);
62
+ color: oklch(0.90 0 0);
63
+ }
64
+
65
+ &:active {
66
+ background-color: oklch(0.19 0 0);
67
+ }
68
+ }
69
+
70
+ /* Destructive Button - Red with clean shadow */
71
+ .btn-danger,
72
+ .btn-destructive {
73
+ @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;
80
+
81
+ &:hover {
82
+ background-color: oklch(0.56 0.20 25);
83
+ }
84
+
85
+ &:active {
86
+ background-color: oklch(0.52 0.20 25);
87
+ }
88
+ }
89
+
90
+ /* Icon Button - Clean hover states */
91
+ .btn-icon {
92
+ @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;
98
+
99
+ &:hover {
100
+ background-color: oklch(0.22 0 0);
101
+ color: oklch(1 0 0);
102
+ }
103
+
104
+ &:active {
105
+ background-color: oklch(0.19 0 0);
106
+ }
107
+ }
108
+
109
+ /* Action Button - Similar to secondary but with specific sizing */
110
+ .btn-action {
111
+ @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;
119
+
120
+ &: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);
124
+ }
125
+
126
+ &: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;
131
+ }
132
+ }
133
+
134
+ /* Default Button - Base styling */
135
+ .button-default {
136
+ @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;
144
+
145
+ svg {
146
+ width: 16px;
147
+ height: 16px;
148
+ flex-shrink: 0;
149
+ }
150
+
151
+ @media (max-width: 768px) {
152
+ height: 3.75rem;
153
+ font-size: 1rem;
154
+ font-weight: 600;
155
+ width: 100%;
156
+ max-width: 100%;
157
+
158
+ svg {
159
+ width: 18px;
160
+ height: 18px;
161
+ }
162
+ }
163
+
164
+ @media (max-width: 480px) {
165
+ height: 4.5rem;
166
+ font-size: 1.125rem;
167
+
168
+ svg {
169
+ width: 20px;
170
+ height: 20px;
171
+ }
172
+ }
173
+
174
+ &:hover {
175
+ border-color: oklch(0.72 0.15 145);
176
+ }
177
+
178
+ &: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;
182
+ }
183
+ }
184
+
185
+ /* ==========================================================================
186
+ RESPONSIVE ADJUSTMENTS
187
+ ========================================================================== */
188
+
189
+ @screen md {
190
+ .btn-primary,
191
+ .btn-secondary {
192
+ @apply text-sm px-3 py-1.5;
193
+ }
194
+
195
+ .btn-action {
196
+ @apply text-sm px-6 h-12;
197
+ min-height: 48px;
198
+ }
199
+ }
200
+
201
+ @screen mobile-portrait {
202
+ .btn-action {
203
+ @apply text-base px-8 h-14;
204
+ min-height: 56px;
205
+ font-weight: 600;
206
+ border-radius: 8px;
207
+ }
208
+ }
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
+ }
@@ -0,0 +1,221 @@
1
+ /* ==========================================================================
2
+ FORM INPUT COMPONENTS
3
+ ========================================================================== */
4
+
5
+ .input-default {
6
+ @apply flex items-center bg-clip-padding relative box-border px-3 py-2 border-2 h-10;
7
+ background: oklch(0.19 0 0);
8
+ border-color: oklch(0.26 0 0);
9
+ border-radius: 0.5rem;
10
+ transition: border-color 0.15s ease;
11
+
12
+ &:hover {
13
+ border-color: oklch(0.30 0 0);
14
+ }
15
+
16
+ &:focus-within {
17
+ border-color: oklch(0.72 0.15 145);
18
+ outline: 1px solid oklch(0.72 0.15 145);
19
+ outline-offset: 0;
20
+ }
21
+
22
+ input {
23
+ @apply h-full w-full text-sm;
24
+ background: transparent;
25
+ color: oklch(0.95 0 0);
26
+
27
+ &:focus {
28
+ outline: none;
29
+ }
30
+
31
+ &::placeholder {
32
+ color: oklch(0.50 0 0);
33
+ }
34
+ }
35
+
36
+ .input-incrementer {
37
+ @apply flex flex-col ml-2 gap-0.5;
38
+
39
+ button {
40
+ @apply w-6 h-4 flex items-center justify-center text-white transition-all duration-200 rounded-sm;
41
+ background: linear-gradient(135deg, oklch(0.19 0 0) 0%, oklch(0.20 0 0) 100%);
42
+ border: 1px solid oklch(0.22 0 0);
43
+ box-shadow: 0 1px 2px oklch(0 0 0 / 0.2);
44
+
45
+ &:hover {
46
+ background: linear-gradient(135deg, oklch(0.20 0 0) 0%, oklch(0.23 0 0) 100%);
47
+ border-color: oklch(0.28 0 0);
48
+ box-shadow: 0 2px 4px oklch(0 0 0 / 0.3);
49
+ transform: translateY(-0.5px);
50
+ }
51
+
52
+ &:active {
53
+ background: linear-gradient(135deg, oklch(0.15 0 0) 0%, oklch(0.19 0.02 264) 100%);
54
+ border-color: oklch(0.26 0 0);
55
+ box-shadow: inset 0 1px 2px oklch(0 0 0 / 0.3);
56
+ transform: translateY(0);
57
+ }
58
+
59
+ &:first-child {
60
+ border-radius: 4px 4px 2px 2px;
61
+ }
62
+
63
+ &:last-child {
64
+ border-radius: 2px 2px 4px 4px;
65
+ }
66
+ }
67
+
68
+ svg {
69
+ @apply w-2.5 h-2.5;
70
+ filter: drop-shadow(0 1px 1px oklch(0 0 0 / 0.3));
71
+ }
72
+ }
73
+ }
74
+
75
+ .input-wrapper {
76
+ @apply mb-4;
77
+ }
78
+
79
+ .input-wrapper label {
80
+ @apply text-white font-medium mb-2 block;
81
+ font-size: 16px;
82
+ }
83
+
84
+ /* ==========================================================================
85
+ ANT DESIGN SELECT OVERRIDES
86
+ ========================================================================== */
87
+
88
+ .ant-select-dropdown {
89
+ z-index: 10000 !important;
90
+ position: relative;
91
+ background: oklch(0.15 0 0) !important; /* Card backgrounds */
92
+ border-radius: 0.5rem !important;
93
+ }
94
+
95
+ .ant-select {
96
+ @apply flex items-center bg-clip-padding relative box-border px-1 py-1 border-2 h-10 !important;
97
+ background: oklch(0.19 0 0); /* Input background */
98
+ border-color: oklch(0.26 0 0); /* Default border */
99
+ border-radius: 0.375rem; /* Consistent with buttons */
100
+ height: fit-content;
101
+ transition: border-color 0.15s ease;
102
+
103
+ &:hover {
104
+ border-color: oklch(0.30 0 0); /* Hover border */
105
+ }
106
+
107
+ &.ant-select-focused {
108
+ border-color: oklch(0.72 0.15 145) !important; /* Focus border - cyan */
109
+ outline: 1px solid oklch(0.72 0.15 145) !important; /* Cyan outline, no offset */
110
+ outline-offset: 0 !important;
111
+ }
112
+
113
+ .ant-select-selector {
114
+ @apply h-full w-full text-xs text-white !important;
115
+ background: transparent;
116
+ background-color: transparent !important;
117
+ border: 0 !important;
118
+ box-shadow: 0 0 0 !important;
119
+
120
+ &:focus {
121
+ outline: none !important;
122
+ }
123
+
124
+ &:before {
125
+ content: "";
126
+ position: absolute;
127
+ background: oklch(0.82 0 0);
128
+ height: 0.25rem;
129
+ width: 0.25rem;
130
+ right: 0.25rem;
131
+ border-radius: 9999px;
132
+ }
133
+ }
134
+ }
135
+
136
+ .ant-select-multiple .ant-select-selection-item {
137
+ @apply items-center gap-x-4 !important;
138
+ background: oklch(0.15 0 0); /* Card backgrounds */
139
+ padding-inline-end: 15px;
140
+ padding-inline-start: 15px;
141
+ border-radius: 10px;
142
+ height: 40px;
143
+ border: 0;
144
+ color: oklch(0.98 0 0); /* White text */
145
+
146
+ &-remove > .anticon {
147
+ vertical-align: 0.05rem;
148
+ }
149
+ }
150
+
151
+ .ant-select-selection-item-remove > .anticon svg {
152
+ color: oklch(0.98 0 0); /* White */
153
+
154
+ path {
155
+ fill: currentColor;
156
+ }
157
+ }
158
+
159
+ .ant-select-item-option {
160
+ &-selected:not(.ant-select-item-option-disabled) {
161
+ @apply text-white !important;
162
+ background: oklch(0.72 0.15 145 / 0.15) !important; /* Cyan accent with transparency */
163
+
164
+ .ant-select-item-option-state {
165
+ color: oklch(0.72 0.15 145) !important; /* Cyan accent for checkmark */
166
+
167
+ svg {
168
+ margin-top: -1.5px;
169
+ }
170
+ }
171
+ }
172
+
173
+ &-active:not(.ant-select-item-option-disabled) {
174
+ background: oklch(0.19 0 0); /* Input background on hover */
175
+ }
176
+
177
+ &-content {
178
+ color: oklch(0.98 0 0) !important; /* White text */
179
+ }
180
+ }
181
+
182
+ /* ==========================================================================
183
+ RESPONSIVE ADJUSTMENTS
184
+ ========================================================================== */
185
+
186
+ @screen md {
187
+ .input-default {
188
+ height: 40px;
189
+
190
+ input {
191
+ font-size: 12px;
192
+ }
193
+
194
+ .input-incrementer button {
195
+ @apply w-5 h-3;
196
+
197
+ svg {
198
+ @apply w-2 h-2;
199
+ }
200
+ }
201
+ }
202
+
203
+ .input-wrapper label {
204
+ font-size: 15px;
205
+ }
206
+
207
+ .ant-select {
208
+ height: fit-content;
209
+ min-height: 40px;
210
+ padding: 0;
211
+
212
+ &-show-search:not(.ant-select-customize-input) .ant-select-selector {
213
+ font-size: 12px;
214
+ }
215
+
216
+ &-multiple .ant-select-selection-item {
217
+ height: 25px;
218
+ font-size: 10px;
219
+ }
220
+ }
221
+ }
@@ -0,0 +1,13 @@
1
+ /* ==========================================================================
2
+ MODAL COMPONENTS
3
+ ========================================================================== */
4
+
5
+ .modal-mask {
6
+ background-color: oklch(0 0 0 / 0.75);
7
+ backdrop-filter: blur(4px);
8
+ }
9
+
10
+ .component-modal {
11
+ background-color: oklch(0.15 0 0);
12
+ border: 1px solid oklch(0.26 0 0);
13
+ }
@@ -0,0 +1,27 @@
1
+ /* ==========================================================================
2
+ TABLE COMPONENTS
3
+ ========================================================================== */
4
+
5
+ .table-row-even {
6
+ background-color: oklch(0.1822 0 0);
7
+ }
8
+
9
+ .table-row-odd {
10
+ background-color: oklch(0.2046 0 0);
11
+ }
12
+
13
+ .table-component {
14
+ @apply w-full rounded-lg;
15
+ border: 1px solid oklch(0.26 0 0);
16
+ overflow: visible !important;
17
+ background-color: oklch(0.2046 0 0);
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
+ }