@svadmin/lite 0.1.0 → 0.2.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.
- package/README.md +49 -6
- package/package.json +5 -1
- package/src/components/LiteArrayField.svelte +112 -0
- package/src/components/LiteAuditLog.svelte +104 -0
- package/src/components/LiteBreadcrumbs.svelte +39 -0
- package/src/components/LiteChatDialog.svelte +101 -0
- package/src/components/LiteConfirmDialog.svelte +60 -0
- package/src/components/LiteEmptyState.svelte +39 -0
- package/src/components/LiteLayout.svelte +58 -10
- package/src/components/LitePermissionMatrix.svelte +147 -0
- package/src/components/LiteShow.svelte +3 -38
- package/src/components/LiteShowField.svelte +51 -0
- package/src/components/LiteStatsCard.svelte +70 -0
- package/src/components/LiteTabs.svelte +57 -0
- package/src/components/advanced/LiteAutoSaveIndicator.svelte +26 -0
- package/src/components/advanced/LiteDraggableHeader.svelte +33 -0
- package/src/components/advanced/LiteDrawerForm.svelte +42 -0
- package/src/components/advanced/LiteInlineEdit.svelte +32 -0
- package/src/components/advanced/LiteModalForm.svelte +44 -0
- package/src/components/advanced/LiteToast.svelte +34 -0
- package/src/components/advanced/LiteUndoableNotification.svelte +25 -0
- package/src/components/advanced/LiteVirtualTable.svelte +44 -0
- package/src/components/advanced/index.ts +8 -0
- package/src/components/buttons/LiteCloneButton.svelte +33 -0
- package/src/components/buttons/LiteCreateButton.svelte +31 -0
- package/src/components/buttons/LiteDeleteButton.svelte +57 -0
- package/src/components/buttons/LiteEditButton.svelte +33 -0
- package/src/components/buttons/LiteExportButton.svelte +31 -0
- package/src/components/buttons/LiteImportButton.svelte +50 -0
- package/src/components/buttons/LiteListButton.svelte +31 -0
- package/src/components/buttons/LiteRefreshButton.svelte +27 -0
- package/src/components/buttons/LiteSaveButton.svelte +27 -0
- package/src/components/buttons/LiteShowButton.svelte +33 -0
- package/src/components/buttons/index.ts +10 -0
- package/src/components/fields/LiteBooleanField.svelte +41 -0
- package/src/components/fields/LiteDateField.svelte +51 -0
- package/src/components/fields/LiteEmailField.svelte +40 -0
- package/src/components/fields/LiteFileField.svelte +53 -0
- package/src/components/fields/LiteImageField.svelte +57 -0
- package/src/components/fields/LiteJsonField.svelte +43 -0
- package/src/components/fields/LiteMarkdownField.svelte +33 -0
- package/src/components/fields/LiteMultiSelectField.svelte +57 -0
- package/src/components/fields/LiteNumberField.svelte +34 -0
- package/src/components/fields/LiteRelationField.svelte +66 -0
- package/src/components/fields/LiteRichTextField.svelte +45 -0
- package/src/components/fields/LiteSelectField.svelte +47 -0
- package/src/components/fields/LiteTagField.svelte +44 -0
- package/src/components/fields/LiteTextField.svelte +34 -0
- package/src/components/fields/LiteUrlField.svelte +40 -0
- package/src/components/fields/index.ts +15 -0
- package/src/components/layout/LiteAuthenticated.svelte +23 -0
- package/src/components/layout/LiteCanAccess.svelte +27 -0
- package/src/components/layout/LiteCatchAllNavigate.svelte +20 -0
- package/src/components/layout/LiteErrorBoundary.svelte +20 -0
- package/src/components/layout/LiteErrorComponent.svelte +37 -0
- package/src/components/layout/LiteHeader.svelte +19 -0
- package/src/components/layout/LiteNavigateToResource.svelte +25 -0
- package/src/components/layout/LiteSidebar.svelte +93 -0
- package/src/components/layout/index.ts +8 -0
- package/src/components/pages/LiteCreatePage.svelte +39 -0
- package/src/components/pages/LiteEditPage.svelte +54 -0
- package/src/components/pages/LiteForgotPasswordPage.svelte +60 -0
- package/src/components/pages/LiteListPage.svelte +77 -0
- package/src/components/pages/LiteProfilePage.svelte +61 -0
- package/src/components/pages/LiteRegisterPage.svelte +64 -0
- package/src/components/pages/LiteShowPage.svelte +61 -0
- package/src/components/pages/LiteUpdatePasswordPage.svelte +51 -0
- package/src/components/pages/index.ts +8 -0
- package/src/components/widgets/LiteAnomalyBadge.svelte +40 -0
- package/src/components/widgets/LiteBarChart.svelte +45 -0
- package/src/components/widgets/LiteInsightCard.svelte +28 -0
- package/src/components/widgets/LiteLineChart.svelte +48 -0
- package/src/components/widgets/LitePieChart.svelte +44 -0
- package/src/components/widgets/index.ts +5 -0
- package/src/index.ts +28 -0
- package/src/lite.css +372 -124
package/src/lite.css
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @svadmin/lite — IE11 Compatible CSS
|
|
2
|
+
* @svadmin/lite — IE11+ Compatible CSS
|
|
3
|
+
*
|
|
4
|
+
* Baseline: IE11 (standard flexbox, no CSS Variables, no Grid)
|
|
5
|
+
* Color system: Aligned with @svadmin/ui (Indigo primary / Slate neutrals)
|
|
3
6
|
*
|
|
4
7
|
* RULES:
|
|
5
8
|
* - No CSS variables (var(--x))
|
|
6
|
-
* - No color-mix(), :is(), :where()
|
|
7
|
-
* - No CSS Grid (
|
|
8
|
-
* - No gap
|
|
9
|
-
* - No backdrop-filter
|
|
10
|
-
* -
|
|
9
|
+
* - No color-mix(), :is(), :where(), :has(), :focus-visible
|
|
10
|
+
* - No CSS Grid (flexbox only)
|
|
11
|
+
* - No flexbox `gap` (use margins)
|
|
12
|
+
* - No backdrop-filter, appearance
|
|
13
|
+
* - No oklch() / hsl() — hardcoded hex only
|
|
14
|
+
* - All colors directly aligned with @svadmin/ui Shadcn Slate/Indigo palette
|
|
11
15
|
*/
|
|
12
16
|
|
|
13
17
|
/* ─── Reset & Base ─────────────────────────────────────────── */
|
|
@@ -18,79 +22,126 @@
|
|
|
18
22
|
html, body {
|
|
19
23
|
margin: 0;
|
|
20
24
|
padding: 0;
|
|
21
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
25
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
22
26
|
font-size: 14px;
|
|
23
27
|
line-height: 1.5;
|
|
24
|
-
color: #
|
|
25
|
-
background: #
|
|
28
|
+
color: #0f172a; /* slate-900 — aligned with --foreground */
|
|
29
|
+
background: #f8fafc; /* slate-50 — aligned with --background */
|
|
30
|
+
-webkit-font-smoothing: antialiased;
|
|
31
|
+
-moz-osx-font-smoothing: grayscale;
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
a {
|
|
29
|
-
color: #
|
|
35
|
+
color: #4f46e5; /* indigo-600 — aligned with --primary */
|
|
30
36
|
text-decoration: none;
|
|
37
|
+
transition: color 0.15s ease;
|
|
31
38
|
}
|
|
32
39
|
a:hover {
|
|
40
|
+
color: #4338ca; /* indigo-700 */
|
|
33
41
|
text-decoration: underline;
|
|
34
42
|
}
|
|
35
43
|
|
|
36
44
|
/* ─── Layout ───────────────────────────────────────────────── */
|
|
37
45
|
.lite-wrapper {
|
|
38
|
-
display: -webkit-box;
|
|
39
|
-
display: -ms-flexbox;
|
|
40
46
|
display: flex;
|
|
41
47
|
min-height: 100vh;
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
.lite-sidebar {
|
|
45
|
-
width:
|
|
46
|
-
background: #
|
|
47
|
-
color: #
|
|
51
|
+
width: 230px;
|
|
52
|
+
background: #ffffff;
|
|
53
|
+
color: #0f172a;
|
|
48
54
|
padding: 16px 0;
|
|
49
|
-
-ms-flex-negative: 0;
|
|
50
55
|
flex-shrink: 0;
|
|
56
|
+
border-right: 1px solid #e2e8f0;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
.lite-sidebar-brand {
|
|
54
60
|
padding: 0 16px 16px;
|
|
55
|
-
font-size:
|
|
56
|
-
font-weight:
|
|
57
|
-
color: #
|
|
58
|
-
|
|
61
|
+
font-size: 16px;
|
|
62
|
+
font-weight: 700;
|
|
63
|
+
color: #0f172a;
|
|
64
|
+
letter-spacing: -0.025em;
|
|
65
|
+
border-bottom: 1px solid #f1f5f9;
|
|
59
66
|
margin-bottom: 8px;
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
.lite-sidebar a {
|
|
63
70
|
display: block;
|
|
71
|
+
position: relative;
|
|
64
72
|
padding: 8px 16px;
|
|
65
|
-
color: #
|
|
73
|
+
color: #64748b;
|
|
66
74
|
font-size: 13px;
|
|
75
|
+
font-weight: 500;
|
|
76
|
+
transition: background 0.15s ease, color 0.15s ease;
|
|
77
|
+
}
|
|
78
|
+
.lite-sidebar a:hover {
|
|
79
|
+
background: #f8fafc;
|
|
80
|
+
color: #0f172a;
|
|
81
|
+
text-decoration: none;
|
|
67
82
|
}
|
|
68
|
-
.lite-sidebar a:hover,
|
|
69
83
|
.lite-sidebar a.active {
|
|
70
|
-
background: #
|
|
71
|
-
color: #
|
|
84
|
+
background: #f8fafc;
|
|
85
|
+
color: #0f172a;
|
|
72
86
|
text-decoration: none;
|
|
73
87
|
}
|
|
88
|
+
.lite-sidebar a.active::before {
|
|
89
|
+
content: '';
|
|
90
|
+
position: absolute;
|
|
91
|
+
left: 0;
|
|
92
|
+
top: 50%;
|
|
93
|
+
transform: translateY(-50%);
|
|
94
|
+
width: 3px;
|
|
95
|
+
height: 60%;
|
|
96
|
+
border-radius: 0 3px 3px 0;
|
|
97
|
+
background: #4f46e5;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* ─── Multi-Level Menu (details/summary) ──────────────────── */
|
|
101
|
+
.lite-menu-group {
|
|
102
|
+
margin: 0;
|
|
103
|
+
border: none;
|
|
104
|
+
}
|
|
105
|
+
.lite-menu-group summary {
|
|
106
|
+
list-style: none;
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
padding: 8px 16px;
|
|
109
|
+
color: #64748b;
|
|
110
|
+
font-size: 11px;
|
|
111
|
+
font-weight: 700;
|
|
112
|
+
text-transform: uppercase;
|
|
113
|
+
letter-spacing: 0.06em;
|
|
114
|
+
transition: color 0.15s ease, background 0.15s ease;
|
|
115
|
+
}
|
|
116
|
+
.lite-menu-group summary::-webkit-details-marker {
|
|
117
|
+
display: none;
|
|
118
|
+
}
|
|
119
|
+
.lite-menu-group summary:hover {
|
|
120
|
+
color: #0f172a;
|
|
121
|
+
background: #f8fafc;
|
|
122
|
+
}
|
|
123
|
+
.lite-menu-group[open] > summary {
|
|
124
|
+
color: #0f172a;
|
|
125
|
+
}
|
|
126
|
+
.lite-menu-group[open] > summary::after {
|
|
127
|
+
content: " \25BE";
|
|
128
|
+
}
|
|
129
|
+
.lite-menu-group:not([open]) > summary::after {
|
|
130
|
+
content: " \25B8";
|
|
131
|
+
}
|
|
74
132
|
|
|
75
133
|
.lite-main {
|
|
76
|
-
-webkit-box-flex: 1;
|
|
77
|
-
-ms-flex: 1;
|
|
78
134
|
flex: 1;
|
|
79
|
-
padding:
|
|
135
|
+
padding: 28px 32px;
|
|
80
136
|
min-width: 0;
|
|
137
|
+
background: #f8fafc;
|
|
81
138
|
}
|
|
82
139
|
|
|
83
140
|
.lite-header {
|
|
84
|
-
display: -webkit-box;
|
|
85
|
-
display: -ms-flexbox;
|
|
86
141
|
display: flex;
|
|
87
|
-
-webkit-box-align: center;
|
|
88
|
-
-ms-flex-align: center;
|
|
89
142
|
align-items: center;
|
|
90
|
-
-webkit-box-pack: justify;
|
|
91
|
-
-ms-flex-pack: justify;
|
|
92
143
|
justify-content: space-between;
|
|
93
|
-
margin-bottom:
|
|
144
|
+
margin-bottom: 24px;
|
|
94
145
|
}
|
|
95
146
|
|
|
96
147
|
.lite-header h1 {
|
|
@@ -98,16 +149,22 @@ a:hover {
|
|
|
98
149
|
font-weight: 600;
|
|
99
150
|
margin: 0;
|
|
100
151
|
color: #0f172a;
|
|
152
|
+
letter-spacing: -0.025em;
|
|
101
153
|
}
|
|
102
154
|
|
|
103
155
|
/* ─── Cards ────────────────────────────────────────────────── */
|
|
104
156
|
.lite-card {
|
|
105
157
|
background: #fff;
|
|
106
158
|
border: 1px solid #e2e8f0;
|
|
107
|
-
border-radius:
|
|
108
|
-
padding:
|
|
159
|
+
border-radius: 8px;
|
|
160
|
+
padding: 24px;
|
|
109
161
|
margin-bottom: 16px;
|
|
110
|
-
box-shadow: 0
|
|
162
|
+
box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 4px 16px -4px rgba(0, 0, 0, 0.02);
|
|
163
|
+
transition: box-shadow 0.2s ease, transform 0.2s ease;
|
|
164
|
+
}
|
|
165
|
+
.lite-card:hover {
|
|
166
|
+
box-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.08), 0 8px 24px -6px rgba(0, 0, 0, 0.04);
|
|
167
|
+
transform: translateY(-1px);
|
|
111
168
|
}
|
|
112
169
|
|
|
113
170
|
/* ─── Table ────────────────────────────────────────────────── */
|
|
@@ -116,26 +173,28 @@ a:hover {
|
|
|
116
173
|
border-collapse: collapse;
|
|
117
174
|
background: #fff;
|
|
118
175
|
border: 1px solid #e2e8f0;
|
|
119
|
-
border-radius:
|
|
176
|
+
border-radius: 8px;
|
|
120
177
|
}
|
|
121
178
|
|
|
122
179
|
.lite-table th {
|
|
123
180
|
text-align: left;
|
|
124
|
-
padding: 10px
|
|
181
|
+
padding: 10px 14px;
|
|
125
182
|
font-weight: 600;
|
|
126
|
-
font-size:
|
|
183
|
+
font-size: 11px;
|
|
127
184
|
text-transform: uppercase;
|
|
128
185
|
letter-spacing: 0.05em;
|
|
129
|
-
color: #64748b;
|
|
130
|
-
background: #f8fafc;
|
|
131
|
-
border-bottom:
|
|
186
|
+
color: #64748b; /* slate-500 — aligned with --muted-foreground */
|
|
187
|
+
background: #f8fafc; /* slate-50 */
|
|
188
|
+
border-bottom: 1px solid #e2e8f0;
|
|
132
189
|
}
|
|
133
190
|
|
|
134
191
|
.lite-table th a {
|
|
135
192
|
color: #64748b;
|
|
193
|
+
transition: color 0.15s ease;
|
|
136
194
|
}
|
|
137
195
|
.lite-table th a:hover {
|
|
138
196
|
color: #0f172a;
|
|
197
|
+
text-decoration: none;
|
|
139
198
|
}
|
|
140
199
|
.lite-table th .sort-indicator {
|
|
141
200
|
font-size: 10px;
|
|
@@ -143,14 +202,15 @@ a:hover {
|
|
|
143
202
|
}
|
|
144
203
|
|
|
145
204
|
.lite-table td {
|
|
146
|
-
padding: 10px
|
|
147
|
-
border-bottom: 1px solid #f1f5f9;
|
|
148
|
-
color: #334155;
|
|
205
|
+
padding: 10px 14px;
|
|
206
|
+
border-bottom: 1px solid #f1f5f9; /* slate-100 — softer row divider */
|
|
207
|
+
color: #334155; /* slate-700 */
|
|
149
208
|
font-size: 13px;
|
|
209
|
+
transition: background 0.12s ease;
|
|
150
210
|
}
|
|
151
211
|
|
|
152
212
|
.lite-table tr:hover td {
|
|
153
|
-
background: #
|
|
213
|
+
background: #f8f7fd;
|
|
154
214
|
}
|
|
155
215
|
|
|
156
216
|
.lite-table td.actions {
|
|
@@ -161,125 +221,283 @@ a:hover {
|
|
|
161
221
|
/* ─── Buttons ──────────────────────────────────────────────── */
|
|
162
222
|
.lite-btn {
|
|
163
223
|
display: inline-block;
|
|
164
|
-
padding:
|
|
224
|
+
padding: 7px 16px;
|
|
165
225
|
font-size: 13px;
|
|
166
226
|
font-weight: 500;
|
|
167
|
-
border: 1px solid #
|
|
168
|
-
border-radius:
|
|
227
|
+
border: 1px solid #e2e8f0;
|
|
228
|
+
border-radius: 6px;
|
|
169
229
|
background: #fff;
|
|
170
|
-
color: #
|
|
230
|
+
color: #334155;
|
|
171
231
|
cursor: pointer;
|
|
172
232
|
text-decoration: none;
|
|
173
233
|
vertical-align: middle;
|
|
174
234
|
line-height: 1.5;
|
|
235
|
+
transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.1s cubic-bezier(0.16, 1, 0.3, 1);
|
|
175
236
|
}
|
|
176
237
|
.lite-btn:hover {
|
|
177
|
-
background: #
|
|
238
|
+
background: #f8fafc;
|
|
239
|
+
border-color: #cbd5e1;
|
|
178
240
|
text-decoration: none;
|
|
179
241
|
}
|
|
242
|
+
.lite-btn:focus {
|
|
243
|
+
outline: none;
|
|
244
|
+
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15); /* indigo ring */
|
|
245
|
+
}
|
|
246
|
+
.lite-btn:active:not(:disabled) {
|
|
247
|
+
transform: scale(0.97);
|
|
248
|
+
}
|
|
180
249
|
|
|
181
250
|
.lite-btn-primary {
|
|
182
|
-
background: #
|
|
183
|
-
border-color: #
|
|
251
|
+
background: #4f46e5; /* indigo-600 */
|
|
252
|
+
border-color: #4f46e5;
|
|
184
253
|
color: #fff;
|
|
185
254
|
}
|
|
186
255
|
.lite-btn-primary:hover {
|
|
187
|
-
background: #
|
|
256
|
+
background: #4338ca; /* indigo-700 */
|
|
257
|
+
border-color: #4338ca;
|
|
258
|
+
}
|
|
259
|
+
.lite-btn-primary:focus {
|
|
260
|
+
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.3);
|
|
188
261
|
}
|
|
189
262
|
|
|
190
263
|
.lite-btn-danger {
|
|
191
264
|
background: #fff;
|
|
192
|
-
border-color: #
|
|
193
|
-
color: #dc2626;
|
|
265
|
+
border-color: #fecaca; /* red-200 */
|
|
266
|
+
color: #dc2626; /* red-600 */
|
|
194
267
|
}
|
|
195
268
|
.lite-btn-danger:hover {
|
|
196
|
-
background: #fef2f2;
|
|
269
|
+
background: #fef2f2; /* red-50 */
|
|
270
|
+
border-color: #fca5a5;
|
|
271
|
+
}
|
|
272
|
+
.lite-btn-danger:focus {
|
|
273
|
+
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
|
|
197
274
|
}
|
|
198
275
|
|
|
199
276
|
.lite-btn-sm {
|
|
200
|
-
padding: 3px
|
|
277
|
+
padding: 3px 10px;
|
|
201
278
|
font-size: 12px;
|
|
279
|
+
border-radius: 4px;
|
|
202
280
|
}
|
|
203
281
|
|
|
204
|
-
/* ─── Forms
|
|
282
|
+
/* ─── Forms — Text Inputs ─────────────────────────────────── */
|
|
205
283
|
.lite-form-group {
|
|
206
|
-
margin-bottom:
|
|
284
|
+
margin-bottom: 18px;
|
|
207
285
|
}
|
|
208
286
|
|
|
209
287
|
.lite-form-group label {
|
|
210
288
|
display: block;
|
|
211
289
|
font-size: 13px;
|
|
212
290
|
font-weight: 500;
|
|
213
|
-
color: #
|
|
214
|
-
margin-bottom:
|
|
291
|
+
color: #334155;
|
|
292
|
+
margin-bottom: 6px;
|
|
215
293
|
}
|
|
216
294
|
|
|
217
295
|
.lite-form-group label .required {
|
|
218
|
-
color: #
|
|
296
|
+
color: #ef4444; /* red-500 */
|
|
219
297
|
margin-left: 2px;
|
|
220
298
|
}
|
|
221
299
|
|
|
222
300
|
.lite-input {
|
|
223
301
|
display: block;
|
|
224
302
|
width: 100%;
|
|
225
|
-
padding: 8px
|
|
303
|
+
padding: 8px 12px;
|
|
226
304
|
font-size: 14px;
|
|
227
|
-
|
|
228
|
-
border
|
|
305
|
+
font-family: inherit;
|
|
306
|
+
border: 1px solid #cbd5e1; /* slate-300 — slightly more visible */
|
|
307
|
+
border-radius: 6px;
|
|
229
308
|
background: #fff;
|
|
230
|
-
color: #
|
|
309
|
+
color: #0f172a;
|
|
310
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
231
311
|
}
|
|
232
312
|
.lite-input:focus {
|
|
233
313
|
outline: none;
|
|
234
|
-
border-color: #
|
|
235
|
-
box-shadow: 0 0 0
|
|
314
|
+
border-color: #4f46e5;
|
|
315
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(79, 70, 229, 0.3);
|
|
236
316
|
}
|
|
237
317
|
|
|
238
318
|
.lite-input-error {
|
|
239
|
-
border-color: #
|
|
319
|
+
border-color: #ef4444;
|
|
320
|
+
}
|
|
321
|
+
.lite-input-error:focus {
|
|
322
|
+
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.12);
|
|
240
323
|
}
|
|
241
324
|
|
|
242
325
|
.lite-error-text {
|
|
243
|
-
color: #
|
|
326
|
+
color: #ef4444;
|
|
244
327
|
font-size: 12px;
|
|
245
328
|
margin-top: 4px;
|
|
246
329
|
}
|
|
247
330
|
|
|
331
|
+
textarea.lite-input {
|
|
332
|
+
min-height: 100px;
|
|
333
|
+
resize: vertical;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* ─── Forms — Custom Select ───────────────────────────────── */
|
|
248
337
|
.lite-select {
|
|
249
338
|
display: block;
|
|
250
339
|
width: 100%;
|
|
251
|
-
padding: 8px
|
|
340
|
+
padding: 8px 36px 8px 12px;
|
|
252
341
|
font-size: 14px;
|
|
253
|
-
|
|
254
|
-
border
|
|
342
|
+
font-family: inherit;
|
|
343
|
+
border: 1px solid #cbd5e1;
|
|
344
|
+
border-radius: 6px;
|
|
255
345
|
background: #fff;
|
|
346
|
+
color: #0f172a;
|
|
347
|
+
cursor: pointer;
|
|
348
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
349
|
+
/* Custom dropdown arrow via base64 SVG chevron */
|
|
350
|
+
background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%2364748b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
351
|
+
background-repeat: no-repeat;
|
|
352
|
+
background-position: right 12px center;
|
|
353
|
+
background-size: 10px 6px;
|
|
354
|
+
}
|
|
355
|
+
/* IE11: hide the native dropdown arrow */
|
|
356
|
+
.lite-select::-ms-expand {
|
|
357
|
+
display: none;
|
|
256
358
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
359
|
+
.lite-select:focus {
|
|
360
|
+
outline: none;
|
|
361
|
+
border-color: #4f46e5;
|
|
362
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(79, 70, 229, 0.3);
|
|
261
363
|
}
|
|
262
364
|
|
|
263
|
-
/* Checkbox */
|
|
365
|
+
/* ─── Forms — Custom Checkbox ─────────────────────────────── */
|
|
264
366
|
.lite-checkbox-group {
|
|
265
|
-
display: -webkit-box;
|
|
266
|
-
display: -ms-flexbox;
|
|
267
367
|
display: flex;
|
|
268
|
-
-
|
|
269
|
-
|
|
270
|
-
align-items: center;
|
|
368
|
+
align-items: flex-start;
|
|
369
|
+
position: relative;
|
|
271
370
|
}
|
|
272
|
-
.lite-checkbox-group input {
|
|
273
|
-
|
|
371
|
+
.lite-checkbox-group input[type="checkbox"] {
|
|
372
|
+
/* Visually hide the native checkbox, but remain accessible */
|
|
373
|
+
position: absolute;
|
|
374
|
+
opacity: 0;
|
|
375
|
+
width: 0;
|
|
376
|
+
height: 0;
|
|
377
|
+
pointer-events: none;
|
|
378
|
+
}
|
|
379
|
+
.lite-checkbox-group label {
|
|
380
|
+
display: inline-block;
|
|
381
|
+
position: relative;
|
|
382
|
+
padding-left: 28px;
|
|
383
|
+
cursor: pointer;
|
|
384
|
+
font-size: 14px;
|
|
385
|
+
color: #334155;
|
|
386
|
+
line-height: 20px;
|
|
387
|
+
margin-bottom: 0;
|
|
388
|
+
-webkit-user-select: none;
|
|
389
|
+
-moz-user-select: none;
|
|
390
|
+
-ms-user-select: none;
|
|
391
|
+
user-select: none;
|
|
392
|
+
}
|
|
393
|
+
/* Unchecked box */
|
|
394
|
+
.lite-checkbox-group label::before {
|
|
395
|
+
content: '';
|
|
396
|
+
position: absolute;
|
|
397
|
+
left: 0;
|
|
398
|
+
top: 0;
|
|
399
|
+
width: 18px;
|
|
400
|
+
height: 18px;
|
|
401
|
+
border: 2px solid #cbd5e1;
|
|
402
|
+
border-radius: 4px;
|
|
403
|
+
background: #fff;
|
|
404
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
405
|
+
}
|
|
406
|
+
/* Checkmark (hidden by default) */
|
|
407
|
+
.lite-checkbox-group label::after {
|
|
408
|
+
content: '';
|
|
409
|
+
position: absolute;
|
|
410
|
+
left: 6px;
|
|
411
|
+
top: 2px;
|
|
412
|
+
width: 6px;
|
|
413
|
+
height: 10px;
|
|
414
|
+
border: solid #fff;
|
|
415
|
+
border-width: 0 2px 2px 0;
|
|
416
|
+
transform: rotate(45deg);
|
|
417
|
+
opacity: 0;
|
|
418
|
+
transition: opacity 0.1s ease;
|
|
419
|
+
}
|
|
420
|
+
/* Checked state */
|
|
421
|
+
.lite-checkbox-group input[type="checkbox"]:checked + label::before {
|
|
422
|
+
background: #4f46e5;
|
|
423
|
+
border-color: #4f46e5;
|
|
424
|
+
}
|
|
425
|
+
.lite-checkbox-group input[type="checkbox"]:checked + label::after {
|
|
426
|
+
opacity: 1;
|
|
427
|
+
}
|
|
428
|
+
/* Focus ring on keyboard navigation */
|
|
429
|
+
.lite-checkbox-group input[type="checkbox"]:focus + label::before {
|
|
430
|
+
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/* ─── Forms — Custom Radio ────────────────────────────────── */
|
|
434
|
+
.lite-radio-group {
|
|
435
|
+
display: flex;
|
|
436
|
+
align-items: flex-start;
|
|
437
|
+
position: relative;
|
|
438
|
+
}
|
|
439
|
+
.lite-radio-group input[type="radio"] {
|
|
440
|
+
position: absolute;
|
|
441
|
+
opacity: 0;
|
|
442
|
+
width: 0;
|
|
443
|
+
height: 0;
|
|
444
|
+
pointer-events: none;
|
|
445
|
+
}
|
|
446
|
+
.lite-radio-group label {
|
|
447
|
+
display: inline-block;
|
|
448
|
+
position: relative;
|
|
449
|
+
padding-left: 28px;
|
|
450
|
+
cursor: pointer;
|
|
451
|
+
font-size: 14px;
|
|
452
|
+
color: #334155;
|
|
453
|
+
line-height: 20px;
|
|
454
|
+
margin-bottom: 0;
|
|
455
|
+
-webkit-user-select: none;
|
|
456
|
+
-moz-user-select: none;
|
|
457
|
+
-ms-user-select: none;
|
|
458
|
+
user-select: none;
|
|
459
|
+
}
|
|
460
|
+
/* Unchecked circle */
|
|
461
|
+
.lite-radio-group label::before {
|
|
462
|
+
content: '';
|
|
463
|
+
position: absolute;
|
|
464
|
+
left: 0;
|
|
465
|
+
top: 0;
|
|
466
|
+
width: 18px;
|
|
467
|
+
height: 18px;
|
|
468
|
+
border: 2px solid #cbd5e1;
|
|
469
|
+
border-radius: 50%;
|
|
470
|
+
background: #fff;
|
|
471
|
+
transition: border-color 0.15s ease;
|
|
472
|
+
}
|
|
473
|
+
/* Inner dot (hidden by default) */
|
|
474
|
+
.lite-radio-group label::after {
|
|
475
|
+
content: '';
|
|
476
|
+
position: absolute;
|
|
477
|
+
left: 5px;
|
|
478
|
+
top: 5px;
|
|
479
|
+
width: 8px;
|
|
480
|
+
height: 8px;
|
|
481
|
+
border-radius: 50%;
|
|
482
|
+
background: #4f46e5;
|
|
483
|
+
opacity: 0;
|
|
484
|
+
transition: opacity 0.1s ease;
|
|
485
|
+
}
|
|
486
|
+
/* Checked state */
|
|
487
|
+
.lite-radio-group input[type="radio"]:checked + label::before {
|
|
488
|
+
border-color: #4f46e5;
|
|
489
|
+
}
|
|
490
|
+
.lite-radio-group input[type="radio"]:checked + label::after {
|
|
491
|
+
opacity: 1;
|
|
492
|
+
}
|
|
493
|
+
/* Focus ring */
|
|
494
|
+
.lite-radio-group input[type="radio"]:focus + label::before {
|
|
495
|
+
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
|
|
274
496
|
}
|
|
275
497
|
|
|
276
498
|
/* ─── Pagination ───────────────────────────────────────────── */
|
|
277
499
|
.lite-pagination {
|
|
278
|
-
display: -webkit-box;
|
|
279
|
-
display: -ms-flexbox;
|
|
280
500
|
display: flex;
|
|
281
|
-
-webkit-box-align: center;
|
|
282
|
-
-ms-flex-align: center;
|
|
283
501
|
align-items: center;
|
|
284
502
|
margin-top: 16px;
|
|
285
503
|
}
|
|
@@ -289,41 +507,40 @@ textarea.lite-input {
|
|
|
289
507
|
display: inline-block;
|
|
290
508
|
padding: 6px 12px;
|
|
291
509
|
margin-right: 4px;
|
|
292
|
-
border: 1px solid #
|
|
293
|
-
border-radius:
|
|
510
|
+
border: 1px solid #e2e8f0;
|
|
511
|
+
border-radius: 6px;
|
|
294
512
|
font-size: 13px;
|
|
295
|
-
color: #
|
|
513
|
+
color: #334155;
|
|
514
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
296
515
|
}
|
|
297
516
|
.lite-pagination a:hover {
|
|
298
|
-
background: #
|
|
517
|
+
background: #f1f5f9;
|
|
518
|
+
border-color: #cbd5e1;
|
|
299
519
|
text-decoration: none;
|
|
300
520
|
}
|
|
301
521
|
.lite-pagination span.active {
|
|
302
|
-
background: #
|
|
303
|
-
border-color: #
|
|
522
|
+
background: #4f46e5;
|
|
523
|
+
border-color: #4f46e5;
|
|
304
524
|
color: #fff;
|
|
305
525
|
}
|
|
306
526
|
.lite-pagination span.disabled {
|
|
307
|
-
color: #
|
|
527
|
+
color: #94a3b8;
|
|
308
528
|
cursor: default;
|
|
529
|
+
background: #f8fafc;
|
|
309
530
|
}
|
|
310
531
|
|
|
311
532
|
.lite-pagination-info {
|
|
312
533
|
margin-left: auto;
|
|
313
534
|
font-size: 13px;
|
|
314
|
-
color: #
|
|
535
|
+
color: #64748b;
|
|
315
536
|
}
|
|
316
537
|
|
|
317
538
|
/* ─── Search Bar ───────────────────────────────────────────── */
|
|
318
539
|
.lite-search {
|
|
319
|
-
display: -webkit-box;
|
|
320
|
-
display: -ms-flexbox;
|
|
321
540
|
display: flex;
|
|
322
541
|
margin-bottom: 16px;
|
|
323
542
|
}
|
|
324
543
|
.lite-search input {
|
|
325
|
-
-webkit-box-flex: 1;
|
|
326
|
-
-ms-flex: 1;
|
|
327
544
|
flex: 1;
|
|
328
545
|
margin-right: 8px;
|
|
329
546
|
}
|
|
@@ -331,19 +548,20 @@ textarea.lite-input {
|
|
|
331
548
|
/* ─── Alerts / Messages ────────────────────────────────────── */
|
|
332
549
|
.lite-alert {
|
|
333
550
|
padding: 12px 16px;
|
|
334
|
-
border-radius:
|
|
551
|
+
border-radius: 6px;
|
|
335
552
|
margin-bottom: 16px;
|
|
336
553
|
font-size: 13px;
|
|
554
|
+
font-weight: 500;
|
|
337
555
|
}
|
|
338
556
|
.lite-alert-success {
|
|
339
|
-
background: #f0fdf4;
|
|
340
|
-
border: 1px solid #bbf7d0;
|
|
341
|
-
color: #166534;
|
|
557
|
+
background: #f0fdf4; /* green-50 */
|
|
558
|
+
border: 1px solid #bbf7d0; /* green-200 */
|
|
559
|
+
color: #166534; /* green-800 */
|
|
342
560
|
}
|
|
343
561
|
.lite-alert-error {
|
|
344
|
-
background: #fef2f2;
|
|
345
|
-
border: 1px solid #fecaca;
|
|
346
|
-
color: #991b1b;
|
|
562
|
+
background: #fef2f2; /* red-50 */
|
|
563
|
+
border: 1px solid #fecaca; /* red-200 */
|
|
564
|
+
color: #991b1b; /* red-900 */
|
|
347
565
|
}
|
|
348
566
|
|
|
349
567
|
/* ─── Delete Confirmation ──────────────────────────────────── */
|
|
@@ -367,40 +585,41 @@ textarea.lite-input {
|
|
|
367
585
|
top: 100%;
|
|
368
586
|
z-index: 10;
|
|
369
587
|
background: #fff;
|
|
370
|
-
border: 1px solid #
|
|
371
|
-
border-radius:
|
|
372
|
-
padding:
|
|
373
|
-
box-shadow:
|
|
588
|
+
border: 1px solid #e2e8f0;
|
|
589
|
+
border-radius: 8px;
|
|
590
|
+
padding: 14px;
|
|
591
|
+
box-shadow:
|
|
592
|
+
0 4px 6px rgba(15, 23, 42, 0.05),
|
|
593
|
+
0 10px 20px rgba(15, 23, 42, 0.08);
|
|
374
594
|
white-space: nowrap;
|
|
375
595
|
margin-top: 4px;
|
|
376
596
|
}
|
|
377
597
|
|
|
378
598
|
/* ─── Login Page ───────────────────────────────────────────── */
|
|
379
599
|
.lite-login-wrapper {
|
|
380
|
-
display: -webkit-box;
|
|
381
|
-
display: -ms-flexbox;
|
|
382
600
|
display: flex;
|
|
383
|
-
-webkit-box-align: center;
|
|
384
|
-
-ms-flex-align: center;
|
|
385
601
|
align-items: center;
|
|
386
|
-
-webkit-box-pack: center;
|
|
387
|
-
-ms-flex-pack: center;
|
|
388
602
|
justify-content: center;
|
|
389
603
|
min-height: 100vh;
|
|
390
604
|
background: #f1f5f9;
|
|
391
605
|
}
|
|
392
606
|
|
|
393
607
|
.lite-login-card {
|
|
394
|
-
width:
|
|
608
|
+
width: 400px;
|
|
395
609
|
max-width: 90%;
|
|
396
610
|
}
|
|
611
|
+
.lite-login-card .lite-card {
|
|
612
|
+
box-shadow:
|
|
613
|
+
0 4px 6px rgba(15, 23, 42, 0.04),
|
|
614
|
+
0 10px 30px rgba(15, 23, 42, 0.06);
|
|
615
|
+
}
|
|
397
616
|
|
|
398
617
|
/* ─── Badge / Tag ──────────────────────────────────────────── */
|
|
399
618
|
.lite-badge {
|
|
400
619
|
display: inline-block;
|
|
401
620
|
padding: 2px 8px;
|
|
402
621
|
font-size: 11px;
|
|
403
|
-
font-weight:
|
|
622
|
+
font-weight: 600;
|
|
404
623
|
border-radius: 12px;
|
|
405
624
|
background: #f1f5f9;
|
|
406
625
|
color: #475569;
|
|
@@ -414,29 +633,58 @@ textarea.lite-input {
|
|
|
414
633
|
border-color: #bbf7d0;
|
|
415
634
|
}
|
|
416
635
|
|
|
636
|
+
.lite-badge-danger {
|
|
637
|
+
background: #fef2f2;
|
|
638
|
+
color: #dc2626;
|
|
639
|
+
border-color: #fecaca;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
.lite-badge-warning {
|
|
643
|
+
background: #fffbeb;
|
|
644
|
+
color: #92400e;
|
|
645
|
+
border-color: #fde68a;
|
|
646
|
+
}
|
|
647
|
+
|
|
417
648
|
/* ─── Boolean indicator ────────────────────────────────────── */
|
|
418
649
|
.lite-bool {
|
|
419
650
|
display: inline-block;
|
|
420
651
|
width: 10px;
|
|
421
652
|
height: 10px;
|
|
422
653
|
border-radius: 50%;
|
|
423
|
-
background: #
|
|
654
|
+
background: #cbd5e1;
|
|
424
655
|
}
|
|
425
656
|
.lite-bool-true {
|
|
426
657
|
background: #22c55e;
|
|
427
658
|
}
|
|
428
659
|
|
|
660
|
+
/* ─── Utility classes ──────────────────────────────────────── */
|
|
661
|
+
.lite-text-muted {
|
|
662
|
+
color: #64748b;
|
|
663
|
+
}
|
|
664
|
+
.lite-text-sm {
|
|
665
|
+
font-size: 12px;
|
|
666
|
+
}
|
|
667
|
+
.lite-mt-0 { margin-top: 0; }
|
|
668
|
+
.lite-mb-lg { margin-bottom: 24px; }
|
|
669
|
+
|
|
429
670
|
/* ─── Responsive ───────────────────────────────────────────── */
|
|
430
671
|
@media (max-width: 768px) {
|
|
431
672
|
.lite-sidebar {
|
|
432
673
|
display: none;
|
|
433
674
|
}
|
|
434
675
|
.lite-main {
|
|
435
|
-
padding:
|
|
676
|
+
padding: 16px;
|
|
436
677
|
}
|
|
437
678
|
.lite-table {
|
|
438
679
|
font-size: 12px;
|
|
439
680
|
}
|
|
681
|
+
.lite-header {
|
|
682
|
+
flex-direction: column;
|
|
683
|
+
align-items: flex-start;
|
|
684
|
+
}
|
|
685
|
+
.lite-header h1 {
|
|
686
|
+
margin-bottom: 12px;
|
|
687
|
+
}
|
|
440
688
|
}
|
|
441
689
|
|
|
442
690
|
/* ─── Print ────────────────────────────────────────────────── */
|