@necrolab/dashboard 0.5.12 → 0.5.14
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.
- package/.playwright-mcp/verification-accounts-desktop.png +0 -0
- package/.playwright-mcp/verification-tasks-desktop.png +0 -0
- package/.playwright-mcp/verification-tasks-mobile.png +0 -0
- package/README.md +21 -0
- package/docs/plans/2026-02-08-tailwind-consolidation-results.md +476 -0
- package/docs/plans/2026-02-08-tailwind-consolidation.md +2416 -0
- package/package.json +1 -1
- package/src/App.vue +2 -163
- package/src/assets/css/components/buttons.scss +43 -95
- package/src/assets/css/components/forms.scss +10 -28
- package/src/assets/css/components/search-groups.scss +80 -0
- package/src/assets/css/components/tables.scss +0 -8
- package/src/assets/css/main.scss +2 -43
- package/src/components/Editors/Account/Account.vue +14 -220
- package/src/components/Editors/Account/AccountCreator.vue +0 -4
- package/src/components/Editors/Account/AccountView.vue +0 -1
- package/src/components/Editors/Account/CreateAccount.vue +36 -107
- package/src/components/Editors/Profile/CreateProfile.vue +46 -135
- package/src/components/Editors/Profile/Profile.vue +10 -213
- package/src/components/Editors/Profile/ProfileView.vue +0 -1
- package/src/components/Filter/Filter.vue +14 -17
- package/src/components/Filter/FilterPreview.vue +0 -6
- package/src/components/Table/Row.vue +1 -1
- package/src/components/Table/Table.vue +2 -16
- package/src/components/Tasks/CreateTaskAXS.vue +45 -104
- package/src/components/Tasks/CreateTaskTM.vue +58 -96
- package/src/components/Tasks/Task.vue +22 -209
- package/src/components/Tasks/TaskView.vue +5 -4
- package/src/components/Tasks/ViewTask.vue +201 -214
- package/src/components/icons/Copy.vue +6 -0
- package/src/components/icons/index.js +3 -1
- package/src/components/ui/ActionButtonGroup.vue +70 -0
- package/src/components/ui/FormField.vue +74 -0
- package/src/components/ui/InfoRow.vue +100 -0
- package/src/components/ui/Modal.vue +6 -47
- package/src/components/ui/Navbar.vue +15 -43
- package/src/components/ui/ReconnectIndicator.vue +4 -4
- package/src/components/ui/SectionCard.vue +24 -0
- package/src/components/ui/Splash.vue +1 -6
- package/src/components/ui/StatusBadge.vue +37 -0
- package/src/components/ui/controls/CountryChooser.vue +14 -58
- package/src/components/ui/controls/atomic/Dropdown.vue +16 -24
- package/src/components/ui/controls/atomic/MultiDropdown.vue +7 -1
- package/src/components/ui/controls/atomic/Switch.vue +13 -29
- package/src/composables/useCopyToClipboard.js +25 -0
- package/src/composables/useRowSelection.js +48 -0
- package/src/views/Accounts.vue +0 -81
- package/src/views/Console.vue +4 -21
- package/src/views/Editor.vue +48 -138
- package/src/views/FilterBuilder.vue +0 -23
- package/src/views/Login.vue +14 -63
- package/src/views/Profiles.vue +0 -82
- package/src/views/Tasks.vue +3 -24
- package/tailwind.config.js +47 -5
package/src/views/Editor.vue
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<!-- Admin Editor Section - Hidden when proxy editor is open -->
|
|
11
11
|
<div v-if="ui.profile.admin" class="admin-editor-section" :class="{ 'landscape-hidden': currentProxyList }">
|
|
12
12
|
<h5 class="text-white text-xl font-bold flex gap-x-3 mb-3">Admin Editor</h5>
|
|
13
|
-
<div class="flex-
|
|
13
|
+
<div class="flex flex-wrap items-center gap-3 w-full">
|
|
14
14
|
<div class="w-full lg:w-64 flex flex-shrink-0 dropdown-container z-dropdown-high">
|
|
15
15
|
<div class="relative flex-grow">
|
|
16
16
|
<Dropdown
|
|
@@ -30,11 +30,9 @@
|
|
|
30
30
|
</button>
|
|
31
31
|
</div>
|
|
32
32
|
<!-- Admin editor buttons moved here -->
|
|
33
|
-
<div
|
|
34
|
-
v-if="textEditorVisible"
|
|
35
|
-
class="flex flex-wrap gap-responsive justify-center lg:justify-end editor-buttons-responsive">
|
|
33
|
+
<div v-if="textEditorVisible" class="flex gap-1.5 ml-auto">
|
|
36
34
|
<button
|
|
37
|
-
class="
|
|
35
|
+
class="button-default bg-dark-400"
|
|
38
36
|
@click="format()"
|
|
39
37
|
v-if="isJsonFile()"
|
|
40
38
|
title="Format JSON">
|
|
@@ -53,9 +51,8 @@
|
|
|
53
51
|
<path d="M21 14H3" />
|
|
54
52
|
<path d="M21 18H7" />
|
|
55
53
|
</svg>
|
|
56
|
-
<span class="hidden sm:inline">Format</span>
|
|
57
54
|
</button>
|
|
58
|
-
<button class="
|
|
55
|
+
<button class="button-default bg-dark-400" @click="saveAll" title="Save File">
|
|
59
56
|
<svg
|
|
60
57
|
xmlns="http://www.w3.org/2000/svg"
|
|
61
58
|
width="16"
|
|
@@ -70,9 +67,8 @@
|
|
|
70
67
|
<polyline points="17 21 17 13 7 13 7 21" />
|
|
71
68
|
<polyline points="7 3 7 8 15 8" />
|
|
72
69
|
</svg>
|
|
73
|
-
<span class="hidden sm:inline">Save File</span>
|
|
74
70
|
</button>
|
|
75
|
-
<button class="
|
|
71
|
+
<button class="button-default bg-dark-400" @click="closeFile" title="Close File">
|
|
76
72
|
<svg
|
|
77
73
|
xmlns="http://www.w3.org/2000/svg"
|
|
78
74
|
width="16"
|
|
@@ -86,7 +82,6 @@
|
|
|
86
82
|
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
87
83
|
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
88
84
|
</svg>
|
|
89
|
-
<span class="hidden sm:inline">Close File</span>
|
|
90
85
|
</button>
|
|
91
86
|
</div>
|
|
92
87
|
</div>
|
|
@@ -139,7 +134,7 @@
|
|
|
139
134
|
<!-- Proxy Editor Section - Hidden when admin editor is open -->
|
|
140
135
|
<div class="proxy-editor-section" :class="{ 'landscape-hidden': textEditorVisible }">
|
|
141
136
|
<h5 class="text-white text-xl font-bold flex gap-x-3 mb-3">Proxy Editor</h5>
|
|
142
|
-
<div class="flex-
|
|
137
|
+
<div class="flex flex-wrap items-center gap-3 w-full mb-1">
|
|
143
138
|
<div class="w-full lg:w-64 flex flex-shrink-0 dropdown-container z-dropdown">
|
|
144
139
|
<div class="relative flex-grow">
|
|
145
140
|
<Dropdown
|
|
@@ -153,10 +148,8 @@
|
|
|
153
148
|
</div>
|
|
154
149
|
</div>
|
|
155
150
|
<!-- Proxy save button moved here -->
|
|
156
|
-
<div
|
|
157
|
-
|
|
158
|
-
class="flex flex-wrap gap-responsive justify-center lg:justify-end editor-buttons-responsive">
|
|
159
|
-
<button class="btn-action flex-shrink-0" @click="saveProxies" title="Save Proxies">
|
|
151
|
+
<div v-if="currentProxyList" class="flex gap-1.5 ml-auto">
|
|
152
|
+
<button class="button-default bg-dark-400" @click="saveProxies" title="Save Proxies">
|
|
160
153
|
<svg
|
|
161
154
|
xmlns="http://www.w3.org/2000/svg"
|
|
162
155
|
width="16"
|
|
@@ -171,9 +164,8 @@
|
|
|
171
164
|
<polyline points="17 21 17 13 7 13 7 21" />
|
|
172
165
|
<polyline points="7 3 7 8 15 8" />
|
|
173
166
|
</svg>
|
|
174
|
-
<span class="hidden sm:inline">Save Proxies</span>
|
|
175
167
|
</button>
|
|
176
|
-
<button class="
|
|
168
|
+
<button class="button-default bg-dark-400" @click="closeProxyFile" title="Close File">
|
|
177
169
|
<svg
|
|
178
170
|
xmlns="http://www.w3.org/2000/svg"
|
|
179
171
|
width="16"
|
|
@@ -187,7 +179,6 @@
|
|
|
187
179
|
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
188
180
|
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
189
181
|
</svg>
|
|
190
|
-
<span class="hidden sm:inline">Close File</span>
|
|
191
182
|
</button>
|
|
192
183
|
</div>
|
|
193
184
|
</div>
|
|
@@ -599,27 +590,10 @@ loadProxyLists();
|
|
|
599
590
|
z-index: 150;
|
|
600
591
|
}
|
|
601
592
|
|
|
602
|
-
/* ==========================================================================
|
|
603
|
-
CARD CONTAINER RESPONSIVENESS
|
|
604
|
-
Component-scoped definition (not global utility)
|
|
605
|
-
========================================================================== */
|
|
606
|
-
|
|
607
|
-
.card-dark {
|
|
608
|
-
max-height: calc(100vh - 100px) !important;
|
|
609
|
-
overflow-y: auto !important;
|
|
610
|
-
-webkit-overflow-scrolling: touch !important;
|
|
611
|
-
margin-bottom: 0.5rem !important;
|
|
612
|
-
padding-bottom: 0.5rem !important;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
593
|
/* ==========================================================================
|
|
616
594
|
ADMIN EDITOR SECTION CONDITIONAL VISIBILITY
|
|
617
595
|
========================================================================== */
|
|
618
596
|
|
|
619
|
-
.admin-editor-section {
|
|
620
|
-
/* Default: always visible */
|
|
621
|
-
}
|
|
622
|
-
|
|
623
597
|
/* Hide admin editor when proxy editor is open - ALL SCREEN SIZES */
|
|
624
598
|
.admin-editor-section.landscape-hidden {
|
|
625
599
|
display: none !important;
|
|
@@ -629,30 +603,15 @@ loadProxyLists();
|
|
|
629
603
|
PROXY EDITOR SECTION CONDITIONAL VISIBILITY
|
|
630
604
|
========================================================================== */
|
|
631
605
|
|
|
632
|
-
.proxy-editor-section {
|
|
633
|
-
/* Default: always visible */
|
|
634
|
-
}
|
|
635
|
-
|
|
636
606
|
/* Hide proxy editor when admin editor is open - ALL SCREEN SIZES */
|
|
637
607
|
.proxy-editor-section.landscape-hidden {
|
|
638
608
|
display: none !important;
|
|
639
609
|
}
|
|
640
610
|
|
|
641
|
-
/* Ensure card has proper bottom margin when sections are hidden */
|
|
642
|
-
.proxy-editor-section.landscape-hidden ~ .card-dark,
|
|
643
|
-
.admin-editor-section.landscape-hidden ~ .card-dark {
|
|
644
|
-
margin-bottom: 1rem !important;
|
|
645
|
-
}
|
|
646
|
-
|
|
647
611
|
/* ==========================================================================
|
|
648
612
|
SECTION HEADERS
|
|
649
613
|
========================================================================== */
|
|
650
614
|
|
|
651
|
-
.admin-editor-section h5,
|
|
652
|
-
.proxy-editor-section h5 {
|
|
653
|
-
/* Remove the gradient underline styling */
|
|
654
|
-
}
|
|
655
|
-
|
|
656
615
|
/* ==========================================================================
|
|
657
616
|
ADMIN FILE DROPDOWN STYLING
|
|
658
617
|
========================================================================== */
|
|
@@ -758,7 +717,6 @@ loadProxyLists();
|
|
|
758
717
|
color: transparent !important;
|
|
759
718
|
z-index: 2;
|
|
760
719
|
position: relative;
|
|
761
|
-
background-color: transparent;
|
|
762
720
|
caret-color: #ffffff; /* Keep cursor visible */
|
|
763
721
|
|
|
764
722
|
/* Selection styling */
|
|
@@ -769,7 +727,6 @@ loadProxyLists();
|
|
|
769
727
|
|
|
770
728
|
.proxy-editor {
|
|
771
729
|
@apply w-full h-full resize-none focus:outline-none;
|
|
772
|
-
background-color: transparent;
|
|
773
730
|
color: oklch(0.90 0 0); /* Keep normal text color for proxy editor */
|
|
774
731
|
/* Ensure proxy editor takes full height */
|
|
775
732
|
flex: 1;
|
|
@@ -960,21 +917,6 @@ pre[class*="language-"] {
|
|
|
960
917
|
word-break: break-word;
|
|
961
918
|
}
|
|
962
919
|
|
|
963
|
-
/* ==========================================================================
|
|
964
|
-
CONSOLE STYLES
|
|
965
|
-
========================================================================== */
|
|
966
|
-
|
|
967
|
-
.console {
|
|
968
|
-
@apply bg-dark-400 p-7 rounded relative border-dark-550 border-2;
|
|
969
|
-
|
|
970
|
-
textarea {
|
|
971
|
-
background: transparent;
|
|
972
|
-
resize: none;
|
|
973
|
-
height: calc(100vh - 450px);
|
|
974
|
-
@apply w-full focus:outline-none text-xs text-white;
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
|
|
978
920
|
/* ==========================================================================
|
|
979
921
|
SECTION DIVIDER
|
|
980
922
|
========================================================================== */
|
|
@@ -1001,21 +943,12 @@ pre[class*="language-"] {
|
|
|
1001
943
|
@apply flex flex-wrap items-center gap-4;
|
|
1002
944
|
}
|
|
1003
945
|
|
|
946
|
+
|
|
1004
947
|
/* ==========================================================================
|
|
1005
948
|
MOBILE RESPONSIVE STYLES (max-width: 767px)
|
|
1006
949
|
========================================================================== */
|
|
1007
950
|
|
|
1008
951
|
@media (max-width: 767px) {
|
|
1009
|
-
/* Card container - increased height to use more available space */
|
|
1010
|
-
.card-dark {
|
|
1011
|
-
max-height: calc(100vh - 100px) !important; /* Increased from 120px */
|
|
1012
|
-
overflow-y: auto !important;
|
|
1013
|
-
-webkit-overflow-scrolling: touch !important;
|
|
1014
|
-
margin-bottom: 0.5rem !important; /* Reduced from 1rem */
|
|
1015
|
-
/* Reduced bottom padding to minimize empty space */
|
|
1016
|
-
padding-bottom: 0.5rem !important; /* Reduced from 1.5rem */
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
952
|
/* Layout adjustments - almost no gap between dropdown and buttons */
|
|
1020
953
|
.flex-responsive-wrap {
|
|
1021
954
|
@apply flex-col items-stretch !important;
|
|
@@ -1027,32 +960,19 @@ pre[class*="language-"] {
|
|
|
1027
960
|
@apply flex justify-center !important;
|
|
1028
961
|
}
|
|
1029
962
|
|
|
1030
|
-
/*
|
|
1031
|
-
.btn-action {
|
|
1032
|
-
height: 32px !important;
|
|
1033
|
-
min-height: 32px !important;
|
|
1034
|
-
padding: 0 8px !important;
|
|
1035
|
-
font-size: 12px !important;
|
|
1036
|
-
|
|
1037
|
-
svg {
|
|
1038
|
-
width: 14px !important;
|
|
1039
|
-
height: 14px !important;
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
/* Editor container heights - reduced for better mobile experience */
|
|
963
|
+
/* Editor container heights - fill available space on mobile */
|
|
1044
964
|
.editor-container,
|
|
1045
965
|
.proxy-editor-container {
|
|
1046
|
-
height:
|
|
1047
|
-
max-height:
|
|
1048
|
-
min-height:
|
|
966
|
+
height: calc(100vh - 380px) !important; /* Fill viewport minus header/controls */
|
|
967
|
+
max-height: 60vh !important; /* Allow more height */
|
|
968
|
+
min-height: 300px !important; /* Ensure minimum usable height */
|
|
1049
969
|
}
|
|
1050
970
|
|
|
1051
971
|
/* Reduce editor height when JSON error is showing in portrait */
|
|
1052
972
|
.editor-container.has-error {
|
|
1053
|
-
height:
|
|
1054
|
-
max-height:
|
|
1055
|
-
min-height:
|
|
973
|
+
height: calc(100vh - 460px) !important; /* Account for error message */
|
|
974
|
+
max-height: 50vh !important;
|
|
975
|
+
min-height: 250px !important;
|
|
1056
976
|
}
|
|
1057
977
|
|
|
1058
978
|
/* Error message spacing on mobile */
|
|
@@ -1123,17 +1043,6 @@ pre[class*="language-"] {
|
|
|
1123
1043
|
========================================================================== */
|
|
1124
1044
|
|
|
1125
1045
|
@media (max-height: 500px) and (orientation: landscape) and (min-width: 568px) {
|
|
1126
|
-
/* Make card fit in landscape mode with reduced bottom spacing */
|
|
1127
|
-
.card-dark {
|
|
1128
|
-
max-height: calc(100vh - 80px) !important; /* Increased from 60px to 80px */
|
|
1129
|
-
overflow-y: auto !important;
|
|
1130
|
-
-webkit-overflow-scrolling: touch !important;
|
|
1131
|
-
margin-bottom: 0.5rem !important; /* Reduced from 1rem */
|
|
1132
|
-
padding: 8px !important;
|
|
1133
|
-
/* Reduced bottom padding to minimize empty space */
|
|
1134
|
-
padding-bottom: 0.5rem !important; /* Reduced from 1.5rem */
|
|
1135
|
-
}
|
|
1136
|
-
|
|
1137
1046
|
/* Truncate card cleanly when admin editor is open */
|
|
1138
1047
|
.admin-editor-section:not(.landscape-hidden) + .section-divider + .proxy-editor-section.landscape-hidden {
|
|
1139
1048
|
display: none !important;
|
|
@@ -1174,16 +1083,8 @@ pre[class*="language-"] {
|
|
|
1174
1083
|
gap: 6px !important;
|
|
1175
1084
|
}
|
|
1176
1085
|
|
|
1177
|
-
/*
|
|
1178
|
-
.
|
|
1179
|
-
min-height: 28px !important;
|
|
1180
|
-
height: 28px !important;
|
|
1181
|
-
padding: 0 6px !important;
|
|
1182
|
-
font-size: 11px !important;
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
|
-
/* Hide button text to save space */
|
|
1186
|
-
.btn-action span {
|
|
1086
|
+
/* Hide button text to save space in landscape mode */
|
|
1087
|
+
.button-default span {
|
|
1187
1088
|
display: none !important;
|
|
1188
1089
|
}
|
|
1189
1090
|
|
|
@@ -1273,14 +1174,6 @@ pre[class*="language-"] {
|
|
|
1273
1174
|
========================================================================== */
|
|
1274
1175
|
|
|
1275
1176
|
@media (max-height: 400px) and (orientation: landscape) {
|
|
1276
|
-
.card-dark {
|
|
1277
|
-
max-height: calc(100vh - 70px) !important; /* Increased from 60px */
|
|
1278
|
-
padding: 6px !important;
|
|
1279
|
-
margin-bottom: 0.5rem !important; /* Reduced from 1rem */
|
|
1280
|
-
/* Reduced bottom padding to minimize empty space */
|
|
1281
|
-
padding-bottom: 0.5rem !important; /* Reduced from 1.5rem */
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
1177
|
.editor-container,
|
|
1285
1178
|
.proxy-editor-container {
|
|
1286
1179
|
height: 140px !important; /* Increased from 100px */
|
|
@@ -1351,21 +1244,38 @@ pre[class*="language-"] {
|
|
|
1351
1244
|
}
|
|
1352
1245
|
}
|
|
1353
1246
|
|
|
1354
|
-
/*
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1247
|
+
/* ==========================================================================
|
|
1248
|
+
MOBILE & TABLET - COMPACT EDITOR BUTTONS FOR ONE-ROW LAYOUT
|
|
1249
|
+
========================================================================== */
|
|
1250
|
+
|
|
1251
|
+
/* Icon-sized buttons - compact for all screens */
|
|
1252
|
+
.button-default {
|
|
1253
|
+
@apply h-7 w-7 p-0; // 28x28px on desktop/tablet
|
|
1254
|
+
min-width: 28px !important;
|
|
1255
|
+
max-width: 28px !important;
|
|
1256
|
+
width: 28px !important;
|
|
1257
|
+
height: 28px !important;
|
|
1258
|
+
padding: 0 !important;
|
|
1259
|
+
border-radius: 6px;
|
|
1260
|
+
|
|
1261
|
+
svg {
|
|
1262
|
+
@apply w-4 h-4; // 16x16px icons
|
|
1263
|
+
}
|
|
1359
1264
|
}
|
|
1360
1265
|
|
|
1361
|
-
/*
|
|
1362
|
-
|
|
1363
|
-
.
|
|
1364
|
-
|
|
1266
|
+
/* Even more compact on mobile */
|
|
1267
|
+
@media (max-width: 640px) {
|
|
1268
|
+
.button-default {
|
|
1269
|
+
@apply h-6 w-6; // 24x24px on mobile
|
|
1270
|
+
min-width: 24px !important;
|
|
1271
|
+
max-width: 24px !important;
|
|
1272
|
+
width: 24px !important;
|
|
1273
|
+
height: 24px !important;
|
|
1365
1274
|
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1275
|
+
svg {
|
|
1276
|
+
@apply w-3.5 h-3.5; // 14x14px icons
|
|
1277
|
+
}
|
|
1369
1278
|
}
|
|
1370
1279
|
}
|
|
1280
|
+
|
|
1371
1281
|
</style>
|
|
@@ -486,11 +486,6 @@ watch(renderSeats, async () => {
|
|
|
486
486
|
</script>
|
|
487
487
|
|
|
488
488
|
<style scoped>
|
|
489
|
-
.slider-dim {
|
|
490
|
-
width: 60px;
|
|
491
|
-
height: 30px;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
489
|
.compact-filter {
|
|
495
490
|
font-size: 0.75rem;
|
|
496
491
|
padding: 0.25rem !important;
|
|
@@ -598,22 +593,10 @@ watch(renderSeats, async () => {
|
|
|
598
593
|
overflow: hidden;
|
|
599
594
|
}
|
|
600
595
|
|
|
601
|
-
/* Component-scoped definition (not global utility) */
|
|
602
|
-
.card-dark {
|
|
603
|
-
height: calc(100vh - 175px);
|
|
604
|
-
min-height: 500px;
|
|
605
|
-
overflow: hidden;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
596
|
@media (max-width: 768px) {
|
|
609
597
|
.filter-builder-container {
|
|
610
598
|
overflow: auto;
|
|
611
599
|
}
|
|
612
|
-
|
|
613
|
-
.card-dark {
|
|
614
|
-
height: auto;
|
|
615
|
-
overflow: auto;
|
|
616
|
-
}
|
|
617
600
|
}
|
|
618
601
|
|
|
619
602
|
/* Mobile portrait header spacing fixes */
|
|
@@ -630,12 +613,6 @@ watch(renderSeats, async () => {
|
|
|
630
613
|
min-height: 100vh;
|
|
631
614
|
overflow: auto;
|
|
632
615
|
}
|
|
633
|
-
|
|
634
|
-
.card-dark {
|
|
635
|
-
height: auto;
|
|
636
|
-
min-height: 500px;
|
|
637
|
-
overflow: auto;
|
|
638
|
-
}
|
|
639
616
|
}
|
|
640
617
|
|
|
641
618
|
/* Desktop: enforce grid column constraints */
|
package/src/views/Login.vue
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="login-container" v-once>
|
|
3
|
-
<div class="login-card">
|
|
4
|
-
<div class="mb-10 flex justify-center">
|
|
5
|
-
<img src="@/assets/img/logo_trans.png" class="mb-3 h-16 object-cover" alt="Logo: NecroLab" />
|
|
2
|
+
<div class="login-container flex min-h-screen flex-col items-center px-4 mt-[3vh] landscape:mt-[1vh] landscape:justify-start landscape:min-h-dvh" v-once>
|
|
3
|
+
<div class="login-card w-full max-w-[420px] rounded-lg border border-dark-650 bg-dark-400 p-7 backdrop-blur-[10px] shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]">
|
|
4
|
+
<div class="mb-10 flex justify-center landscape:mb-2">
|
|
5
|
+
<img src="@/assets/img/logo_trans.png" class="mb-3 h-16 object-cover landscape:h-10" alt="Logo: NecroLab" />
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
8
|
<LoginForm />
|
|
@@ -13,76 +13,27 @@
|
|
|
13
13
|
import LoginForm from "@/components/Auth/LoginForm.vue";
|
|
14
14
|
</script>
|
|
15
15
|
<style lang="scss" scoped>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Mobile devices
|
|
21
|
-
@media (max-width: 480px) {
|
|
16
|
+
/* Mobile-specific overrides (max-width: 480px) */
|
|
17
|
+
@media (max-width: 480px) {
|
|
18
|
+
.login-container {
|
|
22
19
|
margin-top: 2vh;
|
|
23
20
|
}
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
@media (orientation: landscape) {
|
|
27
|
-
margin-top: 1vh;
|
|
28
|
-
justify-content: flex-start;
|
|
29
|
-
min-height: 100vh;
|
|
30
|
-
min-height: 100dvh;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.login-card {
|
|
35
|
-
@apply rounded-lg border border-dark-650 bg-dark-400 shadow-xl;
|
|
36
|
-
backdrop-filter: blur(10px);
|
|
37
|
-
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
|
38
|
-
width: 100%;
|
|
39
|
-
max-width: 420px;
|
|
40
|
-
padding: 1.75rem;
|
|
41
|
-
|
|
42
|
-
// Mobile devices
|
|
43
|
-
@media (max-width: 480px) {
|
|
22
|
+
.login-card {
|
|
44
23
|
max-width: 380px;
|
|
45
24
|
padding: 1.5rem;
|
|
46
25
|
}
|
|
47
26
|
|
|
48
|
-
|
|
49
|
-
@media (orientation: landscape) {
|
|
50
|
-
padding: 1.25rem;
|
|
51
|
-
margin: 0.25rem 0;
|
|
52
|
-
|
|
53
|
-
h2 {
|
|
54
|
-
@apply mb-2 text-lg;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.flex.justify-center {
|
|
58
|
-
@apply mb-2;
|
|
59
|
-
|
|
60
|
-
img {
|
|
61
|
-
@apply h-10;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Logo responsive sizing
|
|
68
|
-
.login-card img {
|
|
69
|
-
@media (max-width: 480px) {
|
|
27
|
+
.login-card img {
|
|
70
28
|
@apply h-12;
|
|
71
29
|
}
|
|
72
|
-
|
|
73
|
-
@media (orientation: landscape) {
|
|
74
|
-
@apply h-10;
|
|
75
|
-
}
|
|
76
30
|
}
|
|
77
31
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
@media (orientation: landscape) {
|
|
85
|
-
@apply mb-2 text-base;
|
|
32
|
+
/* Landscape overrides */
|
|
33
|
+
@media (orientation: landscape) {
|
|
34
|
+
.login-card {
|
|
35
|
+
padding: 1.25rem;
|
|
36
|
+
margin: 0.25rem 0;
|
|
86
37
|
}
|
|
87
38
|
}
|
|
88
39
|
</style>
|
package/src/views/Profiles.vue
CHANGED
|
@@ -117,12 +117,6 @@
|
|
|
117
117
|
</div>
|
|
118
118
|
</template>
|
|
119
119
|
<style lang="scss" scoped>
|
|
120
|
-
.custom-dropdown-content {
|
|
121
|
-
top: 2.6rem !important;
|
|
122
|
-
left: -13px;
|
|
123
|
-
@apply border border-dark-650;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
120
|
/* Page buttons styling - match Tasks page */
|
|
127
121
|
button.bg-dark-400,
|
|
128
122
|
button.bg-green-400,
|
|
@@ -134,82 +128,6 @@ button.bg-red-400 {
|
|
|
134
128
|
border-color: oklch(0.72 0.15 145) !important;
|
|
135
129
|
}
|
|
136
130
|
}
|
|
137
|
-
|
|
138
|
-
/* Unified search component group */
|
|
139
|
-
.unified-search-group {
|
|
140
|
-
border: 2px solid oklch(0.2809 0 0);
|
|
141
|
-
border-radius: 0.5rem;
|
|
142
|
-
overflow: hidden;
|
|
143
|
-
background: oklch(0.2603 0 0);
|
|
144
|
-
transition: all 0.15s ease;
|
|
145
|
-
display: flex;
|
|
146
|
-
|
|
147
|
-
:deep(.tag-toggle),
|
|
148
|
-
:deep(.dropdown),
|
|
149
|
-
input {
|
|
150
|
-
border: none !important;
|
|
151
|
-
border-width: 0 !important;
|
|
152
|
-
border-radius: 0 !important;
|
|
153
|
-
height: 40px !important;
|
|
154
|
-
background: transparent !important;
|
|
155
|
-
box-shadow: none !important;
|
|
156
|
-
min-width: fit-content !important;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
:deep(.tag-toggle) {
|
|
160
|
-
padding: 0;
|
|
161
|
-
border: 0 solid transparent !important;
|
|
162
|
-
border-top: 0 !important;
|
|
163
|
-
border-bottom: 0 !important;
|
|
164
|
-
border-left: 0 !important;
|
|
165
|
-
border-right: 0 !important;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
:deep(.tag-toggle button) {
|
|
169
|
-
font-size: 0.875rem;
|
|
170
|
-
padding: 0.5rem 0.75rem;
|
|
171
|
-
min-width: fit-content;
|
|
172
|
-
border: 0 solid transparent !important;
|
|
173
|
-
border-top: 0 !important;
|
|
174
|
-
border-bottom: 0 !important;
|
|
175
|
-
border-left: 0 !important;
|
|
176
|
-
border-right: 0 !important;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
:deep(.dropdown) {
|
|
180
|
-
width: 120px !important;
|
|
181
|
-
min-width: 120px !important;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
:deep(.dropdown-display) {
|
|
185
|
-
padding: 0 0.75rem;
|
|
186
|
-
font-size: 0.875rem;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
input {
|
|
190
|
-
padding-left: 0.75rem;
|
|
191
|
-
padding-right: 0.75rem;
|
|
192
|
-
flex: 1;
|
|
193
|
-
|
|
194
|
-
&::placeholder {
|
|
195
|
-
color: oklch(0.50 0 0);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
&:focus {
|
|
199
|
-
outline: none !important;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
&:hover {
|
|
204
|
-
border-color: oklch(0.30 0 0);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
&:focus-within {
|
|
208
|
-
border-color: oklch(0.72 0.15 145);
|
|
209
|
-
outline: 1px solid oklch(0.72 0.15 145);
|
|
210
|
-
outline-offset: 0;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
131
|
</style>
|
|
214
132
|
<script setup>
|
|
215
133
|
import { computed, ref, watch } from "vue";
|
package/src/views/Tasks.vue
CHANGED
|
@@ -41,11 +41,6 @@
|
|
|
41
41
|
<div class="mb-1 flex items-center justify-between gap-2 md:hidden">
|
|
42
42
|
<Stats class="stats-component flex-1" />
|
|
43
43
|
<div class="flex items-center gap-2">
|
|
44
|
-
<div
|
|
45
|
-
class="flex h-8 items-center justify-between rounded-md border border-dark-650 bg-dark-400 px-2 text-xs font-medium text-white">
|
|
46
|
-
<p class="text-[10px]">Name</p>
|
|
47
|
-
<Switch class="scale-75" v-model="preferEventName" />
|
|
48
|
-
</div>
|
|
49
44
|
<PriceSortToggle
|
|
50
45
|
class="h-8 min-w-20 max-w-28 flex-shrink-0"
|
|
51
46
|
:options="['All', 'Checkout']"
|
|
@@ -138,18 +133,10 @@
|
|
|
138
133
|
// Add padding in PWA mode to prevent content hiding under navbar
|
|
139
134
|
.tasks-header {
|
|
140
135
|
@media (display-mode: standalone) {
|
|
141
|
-
padding-top: 3.5rem
|
|
136
|
+
padding-top: 3.5rem;
|
|
142
137
|
}
|
|
143
138
|
}
|
|
144
139
|
|
|
145
|
-
// Bottom padding now handled globally in App.vue component-container
|
|
146
|
-
|
|
147
|
-
.custom-dropdown-content {
|
|
148
|
-
top: 2.6rem !important;
|
|
149
|
-
left: -13px;
|
|
150
|
-
@apply border border-dark-650;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
140
|
/* ==========================================================================
|
|
154
141
|
TASKS PAGE RESPONSIVE LAYOUT - MOBILE FIRST
|
|
155
142
|
========================================================================== */
|
|
@@ -167,7 +154,7 @@
|
|
|
167
154
|
.event-dropdown {
|
|
168
155
|
min-width: 0;
|
|
169
156
|
/* Match PriceSortToggle height instead of input-default */
|
|
170
|
-
height: 40px
|
|
157
|
+
height: 40px;
|
|
171
158
|
}
|
|
172
159
|
|
|
173
160
|
.event-dropdown .dropdown-value {
|
|
@@ -179,10 +166,6 @@
|
|
|
179
166
|
|
|
180
167
|
/* Small mobile screens (portrait) */
|
|
181
168
|
@media (max-width: 480px) and (orientation: portrait) {
|
|
182
|
-
.event-dropdown {
|
|
183
|
-
height: 40px !important; /* Match PriceSortToggle height exactly */
|
|
184
|
-
}
|
|
185
|
-
|
|
186
169
|
.event-dropdown .dropdown-value {
|
|
187
170
|
max-width: calc(100vw - 140px);
|
|
188
171
|
font-size: 0.875rem;
|
|
@@ -195,10 +178,6 @@
|
|
|
195
178
|
|
|
196
179
|
/* Extra small screens */
|
|
197
180
|
@media (max-width: 375px) and (orientation: portrait) {
|
|
198
|
-
.event-dropdown {
|
|
199
|
-
height: 40px !important; /* Maintain 40px height to match PriceSortToggle */
|
|
200
|
-
}
|
|
201
|
-
|
|
202
181
|
.event-dropdown .dropdown-value {
|
|
203
182
|
max-width: calc(100vw - 120px);
|
|
204
183
|
font-size: 0.8rem;
|
|
@@ -214,7 +193,7 @@
|
|
|
214
193
|
}
|
|
215
194
|
|
|
216
195
|
.pb-2 {
|
|
217
|
-
padding-top: 1rem
|
|
196
|
+
padding-top: 1rem;
|
|
218
197
|
padding-bottom: 0.25rem;
|
|
219
198
|
margin-bottom: 0.25rem;
|
|
220
199
|
}
|