@necrolab/dashboard 0.4.33 → 0.4.35

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 (48) hide show
  1. package/.claude/settings.local.json +7 -1
  2. package/index.html +5 -3
  3. package/package.json +1 -1
  4. package/src/App.vue +0 -8
  5. package/src/assets/css/_input.scss +7 -7
  6. package/src/assets/css/main.scss +91 -20
  7. package/src/assets/img/background.svg +2 -2
  8. package/src/assets/img/background.svg.backup +11 -0
  9. package/src/assets/img/logo_icon.png +0 -0
  10. package/src/components/Editors/Account/Account.vue +87 -12
  11. package/src/components/Editors/Account/AccountCreator.vue +5 -5
  12. package/src/components/Editors/Account/AccountView.vue +1 -0
  13. package/src/components/Editors/Account/CreateAccount.vue +10 -4
  14. package/src/components/Editors/Profile/CreateProfile.vue +133 -39
  15. package/src/components/Editors/Profile/Profile.vue +87 -12
  16. package/src/components/Editors/Profile/ProfileView.vue +1 -0
  17. package/src/components/Filter/Filter.vue +23 -23
  18. package/src/components/Filter/FilterPreview.vue +2 -2
  19. package/src/components/Filter/PriceSortToggle.vue +8 -6
  20. package/src/components/Table/Table.vue +3 -1
  21. package/src/components/Tasks/Controls/DesktopControls.vue +3 -3
  22. package/src/components/Tasks/Controls/MobileControls.vue +1 -1
  23. package/src/components/Tasks/CreateTaskTM.vue +4 -6
  24. package/src/components/Tasks/Stats.vue +26 -6
  25. package/src/components/Tasks/Task.vue +178 -32
  26. package/src/components/Tasks/TaskView.vue +85 -18
  27. package/src/components/Tasks/Utilities.vue +4 -5
  28. package/src/components/icons/Bag.vue +1 -1
  29. package/src/components/icons/Loyalty.vue +1 -1
  30. package/src/components/icons/Stadium.vue +1 -1
  31. package/src/components/ui/Modal.vue +12 -1
  32. package/src/components/ui/Navbar.vue +1 -1
  33. package/src/components/ui/ReconnectIndicator.vue +1 -1
  34. package/src/components/ui/controls/atomic/Checkbox.vue +119 -9
  35. package/src/components/ui/controls/atomic/Dropdown.vue +8 -7
  36. package/src/components/ui/controls/atomic/MultiDropdown.vue +2 -1
  37. package/src/stores/sampleData.js +60 -94
  38. package/src/stores/ui.js +1 -1
  39. package/src/utils/debug.js +1 -1
  40. package/src/views/Accounts.vue +9 -4
  41. package/src/views/Console.vue +16 -9
  42. package/src/views/Editor.vue +7 -7
  43. package/src/views/FilterBuilder.vue +40 -22
  44. package/src/views/Profiles.vue +4 -4
  45. package/src/views/Tasks.vue +32 -53
  46. package/tailwind.config.js +62 -14
  47. package/vite.config.js +2 -1
  48. package/src/assets/img/logo_icon_2.png +0 -0
@@ -44,6 +44,11 @@
44
44
  <input
45
45
  class="h-10 w-44 text-white text-sm p-2 bg-dark-500 flex items-center relative border-2 border-dark-550"
46
46
  placeholder="Search Email"
47
+ autocomplete="new-password"
48
+ data-dashlane-rid=""
49
+ data-dashlane-label=""
50
+ data-dashlane-classification=""
51
+ data-form-type="other"
47
52
  v-model="ui.search.accounts.query"
48
53
  />
49
54
 
@@ -75,14 +80,14 @@
75
80
 
76
81
  <div class="ml-auto gap-2 hidden lg:flex">
77
82
  <div
78
- class="bg-dark-400 border border-light-300 justify-between px-4 w-44 flex text-white text-xs font-medium items-center rounded-md ml-auto h-10"
83
+ class="bg-dark-400 border border-dark-650 justify-between px-4 w-44 flex text-white text-xs font-medium items-center rounded-md ml-auto h-10"
79
84
  >
80
85
  <p>Privacy</p>
81
86
  <Switch class="scale-75" v-model="privacy" />
82
87
  </div>
83
88
  <button
84
89
  :disabled="ui.disabledButtons['create-accounts']"
85
- class="bg-dark-400 disabled:opacity-70 smooth-hover border border-light-300 hover:border-light-400 w-44 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
90
+ class="bg-dark-400 disabled:opacity-70 smooth-hover border border-dark-650 hover:border-dark-700 w-44 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
86
91
  @click="ui.toggleModal('account-creator')"
87
92
  >
88
93
  Create Accounts <PlayIcon class="ml-2" />
@@ -90,7 +95,7 @@
90
95
 
91
96
  <button
92
97
  :disabled="ui.disabledButtons['add-accounts']"
93
- class="bg-dark-400 disabled:opacity-70 smooth-hover border border-light-300 hover:border-light-400 w-44 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
98
+ class="bg-dark-400 disabled:opacity-70 smooth-hover border border-dark-650 hover:border-dark-700 w-44 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
94
99
  @click="ui.toggleModal('create-account')"
95
100
  >
96
101
  Add Account
@@ -113,7 +118,7 @@
113
118
  .custom-dropdown-content {
114
119
  top: 2.6rem !important;
115
120
  left: -13px;
116
- @apply border border-light-300;
121
+ @apply border border-dark-650;
117
122
  }
118
123
 
119
124
  /* Search dropdown should always be h-10 and have no left corners */
@@ -90,15 +90,22 @@
90
90
 
91
91
  @apply w-full focus:outline-none text-white;
92
92
  }
93
- // $border: 1px;
94
- // &:before {
95
- // content: "";
96
- // @apply absolute top-0 left-0 right-0 bottom-0 opacity-60;
97
- // z-index: -2;
98
- // margin: -$border;
99
- // border-radius: inherit;
100
- // background: radial-gradient(rgba(96, 66, 255, 0.6), rgba(255, 255, 255, 0));
101
- // }
93
+ }
94
+
95
+ // iPhone vertical (portrait) optimization for console
96
+ @media (max-width: 480px) and (orientation: portrait) {
97
+ .console {
98
+ height: calc(100vh - 20rem);
99
+ @apply p-1 text-xs;
100
+
101
+ pre {
102
+ line-height: 1.2;
103
+ }
104
+
105
+ code {
106
+ font-size: 0.7rem !important;
107
+ }
108
+ }
102
109
  }
103
110
 
104
111
  .text-xxs {
@@ -95,7 +95,7 @@
95
95
  <p class="text-red-400 text-bold">{{ errorMessage }}</p>
96
96
  </div>
97
97
  </transition>
98
- <div class="border border-light-300 my-8" />
98
+ <div class="border border-dark-650 my-8" />
99
99
 
100
100
  <h5 class="text-white text-xl font-bold flex gap-x-3 mb-3">Proxy Editor</h5>
101
101
  <div class="flex justify-between items-center mb-4 relative z-60">
@@ -541,7 +541,7 @@ loadProxyLists();
541
541
  border-radius: 8px;
542
542
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
543
543
  overflow: hidden;
544
- background-color: #1a1a2e;
544
+ background-color: #2e2f34;
545
545
  }
546
546
 
547
547
  .editor-wrapper {
@@ -617,10 +617,10 @@ loadProxyLists();
617
617
 
618
618
  /* Proxy editor container */
619
619
  .proxy-editor-container {
620
- @apply w-full overflow-hidden rounded-lg border border-dark-550;
620
+ @apply w-full overflow-hidden rounded-lg border border-dark-600;
621
621
  height: 400px;
622
622
  max-height: 60vh;
623
- background-color: #1a1a2e;
623
+ background-color: #2e2f34;
624
624
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
625
625
  }
626
626
 
@@ -640,7 +640,7 @@ loadProxyLists();
640
640
  .proxy-editor {
641
641
  @apply w-full h-full resize-none focus:outline-none;
642
642
  background-color: transparent;
643
- color: #f8f8f2;
643
+ color: #e2e2e5;
644
644
  font-family: "JetBrains Mono", "Fira Code", "Menlo", "Monaco", "Courier New", monospace;
645
645
  padding: 12px;
646
646
  border: none;
@@ -655,8 +655,8 @@ loadProxyLists();
655
655
  }
656
656
 
657
657
  .proxy-editor-container:focus-within {
658
- border-color: #6272a4;
659
- box-shadow: 0 0 0 2px rgba(98, 114, 164, 0.25);
658
+ border-color: #5d7cc0;
659
+ box-shadow: 0 0 0 2px rgba(93, 124, 192, 0.25);
660
660
  }
661
661
 
662
662
  /* Prism.js dark theme */
@@ -1,14 +1,14 @@
1
1
  <template>
2
2
  <div class="filter-builder-container w-full min-h-0 flex flex-col overflow-hidden">
3
3
  <!-- Heading -->
4
- <div class="flex-between pt-5 pb-2 mx-4 mt-2">
4
+ <div class="flex-between pt-4 pb-1 px-4 mt-1">
5
5
  <div class="flex-center gap-4">
6
6
  <FilterIcon class="cursor-pointer smooth-hover text-white" />
7
7
  <h4 class="text-heading">Filter creator</h4>
8
8
  </div>
9
9
  <div class="flex items-center">
10
10
  <input
11
- class="h-10 text-white text-sm p-2 bg-dark-500 w-48 flex items-center rounded-l relative border-2 border-dark-550"
11
+ class="h-10 text-white text-sm p-2 bg-dark-500 w-48 flex items-center rounded-l rounded-r-none relative border-2 border-dark-550"
12
12
  placeholder="Event ID"
13
13
  v-model="eventId"
14
14
  />
@@ -21,7 +21,7 @@
21
21
  </div>
22
22
  </div>
23
23
 
24
- <div class="card-dark mx-4 mb-3 p-3 overflow-hidden">
24
+ <div class="card-dark mb-2 p-3 overflow-hidden">
25
25
  <div class="w-full h-full">
26
26
  <!-- Main -->
27
27
  <div class="grid grid-cols-1 lg:grid-cols-5 gap-3 lg:gap-4 w-full h-full">
@@ -90,17 +90,11 @@
90
90
  />
91
91
  </div>
92
92
  <div class="flex gap-2 items-center">
93
- <button
94
- class="header-btn save-btn"
95
- @click="saveFilter"
96
- >
93
+ <button class="header-btn save-btn" @click="saveFilter">
97
94
  <EditIcon class="w-4 h-4" />
98
95
  <span class="lg:block hidden">Save</span>
99
96
  </button>
100
- <button
101
- class="header-btn clear-btn"
102
- @click="filterBuilder.reset(false)"
103
- >
97
+ <button class="header-btn clear-btn" @click="filterBuilder.reset(false)">
104
98
  <TrashIcon class="w-4 h-4" />
105
99
  <span class="lg:block hidden">Clear</span>
106
100
  </button>
@@ -137,21 +131,24 @@
137
131
  </template>
138
132
  </draggable>
139
133
  </div>
140
- <div v-else class="empty-state flex flex-col items-center justify-center py-8 text-center">
134
+ <div
135
+ v-else
136
+ class="empty-state flex flex-col items-center justify-center py-8 text-center"
137
+ >
141
138
  <FilterIcon class="w-12 h-12 text-dark-400 mb-3 opacity-50" />
142
139
  <p class="text-dark-400 text-sm">No filters yet</p>
143
140
  <p class="text-dark-500 text-xs mt-1">Click on the map to create filters</p>
144
141
  </div>
145
142
  </div>
146
143
  </Table>
147
- <div class="flex items-center justify-between text-white gap-2 mt-1 mb-4 md:mb-0 flex-shrink-0">
144
+ <div class="flex items-center justify-between text-white gap-2 mt-1 mb-2 md:mb-0 flex-shrink-0">
148
145
  <button
149
146
  @click="addWildcardFilter"
150
147
  :disabled="hasWildcardFilter"
151
148
  :class="[
152
149
  'border-2 rounded border-dark-550 px-2 h-7 text-xs bg-dark-500 overflow-hidden shadow transition-all duration-200',
153
- hasWildcardFilter
154
- ? 'text-gray opacity-50 cursor-not-allowed'
150
+ hasWildcardFilter
151
+ ? 'text-gray opacity-50 cursor-not-allowed'
155
152
  : 'text-gray smooth-hover hover:bg-dark-400 hover:border-light-300'
156
153
  ]"
157
154
  :title="hasWildcardFilter ? 'Wildcard filter already exists' : 'Add wildcard filter'"
@@ -349,9 +346,7 @@ const shownFilters = ref("All");
349
346
  const filterBuilder = ref(new FilterBuilder());
350
347
 
351
348
  const hasWildcardFilter = computed(() => {
352
- return filterBuilder.value.filters.some(filter =>
353
- filter.buyAny && filterBuilder.value.isForCurrentEvent(filter)
354
- );
349
+ return filterBuilder.value.filters.some((filter) => filter.buyAny && filterBuilder.value.isForCurrentEvent(filter));
355
350
  });
356
351
 
357
352
  const addWildcardFilter = () => {
@@ -646,13 +641,13 @@ watch(renderSeats, async () => {
646
641
  /* Dragging states for better UX */
647
642
  .sortable-ghost {
648
643
  @apply opacity-30;
649
- border: 1px solid #4A4A61;
650
- background-color: rgba(74, 74, 97, 0.1);
644
+ border: 1px solid #44454b;
645
+ background-color: rgba(68, 69, 75, 0.1);
651
646
  }
652
647
 
653
648
  .sortable-chosen .drag-handle {
654
- border: 1px solid #4A4A61;
655
- background-color: rgba(74, 74, 97, 0.2);
649
+ border: 1px solid #44454b;
650
+ background-color: rgba(68, 69, 75, 0.2);
656
651
  }
657
652
 
658
653
  .sortable-drag {
@@ -699,6 +694,29 @@ watch(renderSeats, async () => {
699
694
  }
700
695
 
701
696
  .card-dark {
697
+ height: auto;
698
+ overflow: auto;
699
+ }
700
+ }
701
+
702
+ /* Mobile portrait header spacing fixes */
703
+ @media (max-width: 640px) {
704
+ .filter-builder-container .flex-center {
705
+ gap: 0.5rem;
706
+ }
707
+ }
708
+
709
+ /* iPhone landscape and tablet portrait mode fixes */
710
+ @media (max-width: 1023px) and (max-height: 768px) {
711
+ .filter-builder-container {
712
+ height: auto;
713
+ min-height: 100vh;
714
+ overflow: auto;
715
+ }
716
+
717
+ .card-dark {
718
+ height: auto;
719
+ min-height: 500px;
702
720
  overflow: auto;
703
721
  }
704
722
  }
@@ -68,7 +68,7 @@
68
68
  @change="(f) => (ui.search.profiles.tag = f)"
69
69
  /> -->
70
70
  <Dropdown
71
- class="rounded-r-lg w-32 bg-dark-500 relative z-50 border-2 border-dark-550 search-dropdown"
71
+ class="rounded-r-lg w-32 bg-dark-500 relative z-50 border-2 border-dark-600 search-dropdown"
72
72
  style="margin-left: 0 !important; border-width: 2px !important"
73
73
  rightAmount="right-1"
74
74
  default="Any"
@@ -81,7 +81,7 @@
81
81
 
82
82
  <div class="gap-3 lg:flex hidden">
83
83
  <div
84
- class="bg-dark-400 border border-light-300 justify-between px-4 w-36 flex text-white text-xs font-medium items-center rounded-md ml-auto h-10"
84
+ class="bg-dark-400 border border-dark-650 justify-between px-4 w-36 flex text-white text-xs font-medium items-center rounded-md ml-auto h-10"
85
85
  >
86
86
  <p>Privacy</p>
87
87
  <Switch class="scale-75" v-model="privacy" />
@@ -102,7 +102,7 @@
102
102
  </button>
103
103
  <button
104
104
  :disabled="ui.disabledButtons['add-profiles']"
105
- class="bg-dark-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-xs font-medium justify-center items-center rounded-md border border-light-300 hover:border-light-400 ml-auto h-10"
105
+ class="bg-dark-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-xs font-medium justify-center items-center rounded-md border border-dark-650 hover:border-dark-700 ml-auto h-10"
106
106
  @click="ui.toggleModal('create-profile')"
107
107
  >
108
108
  Add Profile
@@ -124,7 +124,7 @@
124
124
  .custom-dropdown-content {
125
125
  top: 2.6rem !important;
126
126
  left: -13px;
127
- @apply border border-light-300;
127
+ @apply border border-dark-650;
128
128
  }
129
129
 
130
130
  /* Search dropdown should always be h-10 and have no left corners */
@@ -1,7 +1,6 @@
1
1
  <template>
2
- <div>
2
+ <div class="tasks-page">
3
3
  <div class="flex-between pt-5 pb-2">
4
- <!-- Heading -->
5
4
  <div class="flex-center gap-4">
6
5
  <GearIcon class="w-5 cursor-pointer smooth-hover" @click="ui.toggleModal('quick-settings')" />
7
6
  <h4 class="text-heading">
@@ -11,14 +10,10 @@
11
10
  </div>
12
11
  <ul class="mobile-icons mobile-header-controls">
13
12
  <li>
14
- <button @click="ui.startTasks()">
15
- <PlayIcon class="w-4 h-4" />
16
- </button>
13
+ <button @click="ui.startTasks()"><PlayIcon class="w-4 h-4" /></button>
17
14
  </li>
18
15
  <li>
19
- <button @click="ui.stopTasks()">
20
- <PauseIcon class="w-4 h-4" />
21
- </button>
16
+ <button @click="ui.stopTasks()"><PauseIcon class="w-4 h-4" /></button>
22
17
  </li>
23
18
  <li>
24
19
  <button
@@ -30,17 +25,14 @@
30
25
  </button>
31
26
  </li>
32
27
  <li>
33
- <button @click="ui.deleteTasks()">
34
- <TrashIcon class="h-3.5 w-3.5" />
35
- </button>
28
+ <button @click="ui.deleteTasks()"><TrashIcon class="h-3.5 w-3.5" /></button>
36
29
  </li>
37
30
  </ul>
38
31
  </div>
39
32
 
40
33
  <Stats />
41
34
 
42
- <!-- Controls -->
43
- <div class="controls-wrapper mb-6">
35
+ <div class="controls-wrapper lg:mb-6 mb-3">
44
36
  <DesktopControls
45
37
  class="desktop-controls-hide"
46
38
  @stopAll="ui.stopTasks()"
@@ -48,49 +40,35 @@
48
40
  @deleteAll="ui.deleteTasks()"
49
41
  />
50
42
  </div>
51
- <div class="flex items-center justify-between gap-2 mb-2">
52
- <div class="flex items-center gap-2">
53
- <div
54
- v-if="uniqEventIds.length > 1"
55
- class="min-w-32 max-w-72 md:max-w-48"
56
- >
57
- <Dropdown
58
- :onClick="(f) => ui.setCurrentEvent(f)"
59
- default="All events"
60
- :chosen="ui.currentEvent"
61
- :options="uniqEventIds"
62
- :allowDefault="true"
63
- class="input-default w-full hover:bg-dark-400 h-10"
64
- rightAmount="right-2"
65
- />
66
- </div>
67
- <PriceSortToggle
68
- class="min-w-24 max-w-28"
69
- :options="['All', 'Checkout']"
70
- :darker="true"
71
- :current="ui.taskFilter"
72
- @change="(e) => ui.setTaskFilter(e)"
43
+
44
+ <div class="flex items-center justify-between gap-2 lg:mb-2 mb-1">
45
+ <div v-if="uniqEventIds.length > 1" class="flex-1 md:min-w-96 md:max-w-96 md:flex-none">
46
+ <Dropdown
47
+ :onClick="(f) => ui.setCurrentEvent(f)"
48
+ default="All events"
49
+ :chosen="ui.currentEvent"
50
+ :options="uniqEventIds"
51
+ :allowDefault="true"
52
+ class="input-default w-full hover:bg-dark-400 h-10"
53
+ rightAmount="right-2"
73
54
  />
74
55
  </div>
75
- <div class="flex gap-x-3">
76
- <button @click="ui.expandTasks()" class="bg-dark-400 smooth-hover w-36 border border-light-300 hover:border-light-400 text-white h-10 rounded-md text-xs flex items-center justify-center font-medium px-4">
77
- Expand <ExpandIcon class="ml-2" />
78
- </button>
79
- <button @click="ui.foldTasks()" class="bg-dark-400 smooth-hover w-36 border border-light-300 hover:border-light-400 text-white h-10 rounded-md text-xs flex items-center justify-center font-medium px-4">
80
- Fold <ShrinkIcon class="ml-2" />
81
- </button>
82
- </div>
56
+ <PriceSortToggle
57
+ class="min-w-24 max-w-28 flex-shrink-0"
58
+ :options="['All', 'Checkout']"
59
+ :darker="true"
60
+ :current="ui.taskFilter"
61
+ @change="(e) => ui.setTaskFilter(e)"
62
+ />
83
63
  </div>
84
64
 
85
- <!-- Tasks (Table) -->
86
- <TaskView class="mb-6" :tasks="ui.tasks" />
87
- <!-- Utilities -->
88
- <Utilities />
89
- <!-- Modal -->
65
+ <TaskView class="lg:mb-6 mb-3" :tasks="ui.tasks" />
66
+
67
+ <Utilities class="utilities-section" />
68
+
90
69
  <transition-group name="fade" mode="out-in">
91
70
  <CreateTaskTM v-if="ui.currentModule == 'TM' && activeModal === 'create-task'" @new="ui.addNewTask" />
92
71
  <CreateTaskAXS v-if="ui.currentModule == 'AXS' && activeModal === 'create-task'" @new="ui.addNewTask" />
93
-
94
72
  <CheckStock v-if="activeModal === 'check-stock'" />
95
73
  <ScrapeVenue v-if="activeModal === 'scrape-venue'" />
96
74
  <MassEditPresaleCode v-if="activeModal === 'mass-edit-presale-code'" />
@@ -102,7 +80,7 @@
102
80
  .custom-dropdown-content {
103
81
  top: 2.6rem !important;
104
82
  left: -13px;
105
- @apply border border-light-300;
83
+ @apply border border-dark-650;
106
84
  }
107
85
 
108
86
  .desktop-controls-hide {
@@ -117,7 +95,7 @@
117
95
  .desktop-controls-hide {
118
96
  display: flex !important;
119
97
  }
120
-
98
+
121
99
  .mobile-header-controls {
122
100
  display: none !important;
123
101
  }
@@ -136,9 +114,10 @@ import MassEditPresaleCode from "@/components/Tasks/MassEdit.vue";
136
114
  import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
137
115
  import Stats from "@/components/Tasks/Stats.vue";
138
116
  import { useUIStore } from "@/stores/ui";
139
- import { TrashIcon, GearIcon, PlusIcon, PlayIcon, PauseIcon, ExpandIcon, ShrinkIcon } from "@/components/icons";
117
+ import { TrashIcon, GearIcon, PlusIcon, PlayIcon, PauseIcon } from "@/components/icons";
140
118
  import QuickSettings from "@/components/Tasks/QuickSettings.vue";
141
119
  import PriceSortToggle from "@/components/Filter/PriceSortToggle.vue";
120
+
142
121
  const ui = useUIStore();
143
122
  const activeModal = computed(() => ui.activeModal);
144
123
  const taskCount = computed(() => Object.keys(ui.getSelectedTasks()).length);
@@ -149,7 +128,7 @@ const uniqEventIds = computed(() => {
149
128
  ...new Set(
150
129
  Object.values(ui.tasks)
151
130
  .filter((t) => t.siteId === ui.currentCountry.siteId && !t.eventId.includes("@"))
152
- .map((v) => v.eventId)
131
+ .map((v) => `${v.eventName} (${v.eventId})`)
153
132
  )
154
133
  ];
155
134
  return ids;
@@ -4,29 +4,77 @@ module.exports = {
4
4
  theme: {
5
5
  colors: {
6
6
  transparent: "transparent",
7
- white: "#FFFFFF",
7
+ white: "#ffffff",
8
+ pure: "#ffffff",
8
9
  lightgray: "#e5e7eb",
9
10
  green: {
10
- 400: "#44b744",
11
- 500: "#22c55e"
11
+ 300: "#4ade80",
12
+ 400: "#22c55e",
13
+ 500: "#16a34a"
12
14
  },
13
15
  red: {
14
- 300: "#F87171",
15
- 400: "#EE8282"
16
+ 300: "#f87171",
17
+ 400: "#ef4444",
18
+ 500: "#dc2626"
19
+ },
20
+ blue: {
21
+ 300: "#60a5fa",
22
+ 400: "#3b82f6",
23
+ 500: "#2563eb"
24
+ },
25
+ yellow: {
26
+ 300: "#fbbf24",
27
+ 400: "#f59e0b",
28
+ 500: "#d97706"
16
29
  },
17
30
  dark: {
18
- 300: "#1B1C2B",
19
- 400: "#2D2F4A",
20
- 500: "#202036",
21
- 550: "#292a43",
22
- 600: "#25263c"
31
+ 50: "#f8fafc",
32
+ 100: "#f1f5f9",
33
+ 200: "#e2e8f0",
34
+ 300: "#1a1b1e", // Deep charcoal base
35
+ 400: "#242529", // Card backgrounds
36
+ 500: "#2e2f34", // Input backgrounds
37
+ 550: "#35363c", // Subtle elevation
38
+ 600: "#3d3e44", // Borders
39
+ 650: "#44454b", // Hover states
40
+ 700: "#4b4c53", // Active states
41
+ 750: "#52535a", // Selected states
42
+ 800: "#13141a", // Deep background
43
+ 850: "#0d0e14", // Deepest background
44
+ 900: "#06070d" // Ultra deep
23
45
  },
24
46
  light: {
25
- 300: "#4A4A61",
26
- 400: "#A7A8AF"
47
+ 100: "#f6f8fa",
48
+ 200: "#e1e4e8",
49
+ 300: "#e2e2e5", // Primary text
50
+ 400: "#d0d0d3", // Secondary text
51
+ 500: "#a0a0a6", // Muted text
52
+ 600: "#71717a", // Disabled text
53
+ 700: "#57575f", // Very muted
54
+ 800: "#3e3e46", // Dark muted
55
+ 900: "#27272d" // Darkest muted
56
+ },
57
+ gray: {
58
+ 50: "#f9fafb",
59
+ 100: "#f3f4f6",
60
+ 200: "#e5e7eb",
61
+ 300: "#d1d5db",
62
+ 400: "#9ca3af",
63
+ 500: "#6b7280",
64
+ 600: "#4b5563",
65
+ 700: "#374151",
66
+ 800: "#1f2937",
67
+ 900: "#111827"
68
+ },
69
+ accent: {
70
+ blue: "#5d7cc0",
71
+ purple: "#b794c0",
72
+ pink: "#d16d9e",
73
+ orange: "#d4976e",
74
+ yellow: "#e6d192",
75
+ green: "#88c999"
27
76
  },
28
- gray: "#9CA3AF",
29
- border: "#29293F"
77
+ border: "#3d3e44"
30
78
  },
31
79
  screens: {
32
80
  xs: "500px",
package/vite.config.js CHANGED
@@ -58,6 +58,7 @@ export default defineConfig({
58
58
  port: 5173,
59
59
  strictPort: true,
60
60
  host: true,
61
- cors: true
61
+ cors: true,
62
+ hmr: false
62
63
  }
63
64
  });
Binary file