profileShare

rasmusjy / splitapp-backend-microservices

Read-only snapshot

No repository description.

main default branch 501 files Expires Sep 13, 2026, 9:06 AM
admin.css 8,954 bytes
1 /* Admin area styles — sidebar layout, metric cards, badges */
2
3 :root {
4 --admin-sidebar-width: 256px;
5 --admin-sidebar-bg: #1f2430;
6 --admin-sidebar-bg-hover: #2a3040;
7 --admin-sidebar-text: #cbd1dc;
8 --admin-sidebar-text-muted: #7b8596;
9 --admin-sidebar-active: #e8604c;
10 --admin-topbar-height: 62px;
11 --admin-bg: #f5f6fa;
12 --admin-card-border: #e6e8ef;
13 --admin-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.06);
14 --admin-shadow-md: 0 6px 24px -8px rgba(15, 23, 42, 0.12);
15 }
16
17 .admin-body {
18 background: var(--admin-bg);
19 font-family: 'Inter', system-ui, sans-serif;
20 }
21
22 .admin-shell {
23 display: flex;
24 min-height: 100vh;
25 }
26
27 /* === SIDEBAR === */
28 .admin-sidebar {
29 width: var(--admin-sidebar-width);
30 background: var(--admin-sidebar-bg);
31 color: var(--admin-sidebar-text);
32 display: flex;
33 flex-direction: column;
34 position: fixed;
35 top: 0;
36 left: 0;
37 bottom: 0;
38 z-index: 1040;
39 transition: transform 0.25s ease;
40 }
41
42 .admin-sidebar-brand {
43 padding: 1.25rem 1.25rem 1rem;
44 border-bottom: 1px solid rgba(255, 255, 255, 0.06);
45 display: flex;
46 align-items: center;
47 gap: 0.55rem;
48 color: #fff;
49 font-weight: 700;
50 font-size: 1.15rem;
51 }
52
53 .admin-sidebar-brand i {
54 color: var(--admin-sidebar-active);
55 font-size: 1.35rem;
56 }
57
58 .admin-sidebar-brand-sub {
59 margin-left: auto;
60 font-size: 0.65rem;
61 letter-spacing: 0.18em;
62 text-transform: uppercase;
63 color: var(--admin-sidebar-text-muted);
64 font-weight: 600;
65 }
66
67 .admin-sidebar-nav {
68 flex: 1;
69 overflow-y: auto;
70 padding: 0.75rem 0.5rem 1rem;
71 }
72
73 .admin-nav-section {
74 font-size: 0.68rem;
75 letter-spacing: 0.16em;
76 text-transform: uppercase;
77 color: var(--admin-sidebar-text-muted);
78 padding: 1rem 0.8rem 0.35rem;
79 font-weight: 600;
80 }
81
82 .admin-nav-link {
83 display: flex;
84 align-items: center;
85 gap: 0.7rem;
86 padding: 0.55rem 0.8rem;
87 margin: 0.1rem 0;
88 color: var(--admin-sidebar-text);
89 text-decoration: none;
90 border-radius: 8px;
91 font-size: 0.92rem;
92 transition: background 0.15s, color 0.15s;
93 }
94
95 .admin-nav-link i {
96 font-size: 1.05rem;
97 width: 1.1rem;
98 text-align: center;
99 color: var(--admin-sidebar-text-muted);
100 }
101
102 .admin-nav-link:hover {
103 background: var(--admin-sidebar-bg-hover);
104 color: #fff;
105 text-decoration: none;
106 }
107
108 .admin-nav-link:hover i {
109 color: #fff;
110 }
111
112 .admin-nav-link.active {
113 background: var(--admin-sidebar-active);
114 color: #fff;
115 font-weight: 600;
116 }
117
118 .admin-nav-link.active i {
119 color: #fff;
120 }
121
122 .admin-sidebar-footer {
123 padding: 0.9rem 1rem 1.2rem;
124 border-top: 1px solid rgba(255, 255, 255, 0.06);
125 }
126
127 .admin-back-link {
128 color: var(--admin-sidebar-text-muted);
129 text-decoration: none;
130 font-size: 0.88rem;
131 display: inline-flex;
132 align-items: center;
133 gap: 0.4rem;
134 }
135
136 .admin-back-link:hover {
137 color: #fff;
138 }
139
140 /* === MAIN AREA === */
141 .admin-main {
142 margin-left: var(--admin-sidebar-width);
143 flex: 1;
144 display: flex;
145 flex-direction: column;
146 min-width: 0;
147 }
148
149 .admin-topbar {
150 height: var(--admin-topbar-height);
151 background: #fff;
152 border-bottom: 1px solid var(--admin-card-border);
153 display: flex;
154 align-items: center;
155 padding: 0 1.5rem;
156 gap: 1rem;
157 position: sticky;
158 top: 0;
159 z-index: 1030;
160 }
161
162 .admin-topbar-toggle {
163 background: transparent;
164 border: none;
165 font-size: 1.4rem;
166 color: #334155;
167 }
168
169 .admin-topbar-title {
170 font-size: 1.05rem;
171 font-weight: 600;
172 color: #334155;
173 display: flex;
174 align-items: center;
175 gap: 0.5rem;
176 }
177
178 .admin-topbar-title i {
179 color: var(--admin-sidebar-active);
180 }
181
182 .admin-topbar-actions {
183 margin-left: auto;
184 display: flex;
185 align-items: center;
186 gap: 1rem;
187 }
188
189 .admin-content {
190 padding: 1.5rem 1.75rem 2.5rem;
191 flex: 1;
192 }
193
194 .admin-footer {
195 padding: 1rem 1.75rem;
196 font-size: 0.82rem;
197 color: #64748b;
198 border-top: 1px solid var(--admin-card-border);
199 background: #fff;
200 display: flex;
201 justify-content: space-between;
202 align-items: center;
203 flex-wrap: wrap;
204 gap: 0.5rem;
205 }
206
207 /* === PAGE HEADERS === */
208 .admin-page-header {
209 display: flex;
210 justify-content: space-between;
211 align-items: flex-start;
212 gap: 1rem;
213 margin-bottom: 1.5rem;
214 flex-wrap: wrap;
215 }
216
217 .admin-page-header h1 {
218 margin: 0 0 0.25rem;
219 font-size: 1.65rem;
220 font-weight: 700;
221 color: #0f172a;
222 }
223
224 .admin-page-header .lead {
225 margin: 0;
226 color: #64748b;
227 font-size: 0.95rem;
228 }
229
230 /* === CARDS === */
231 .admin-card {
232 background: #fff;
233 border: 1px solid var(--admin-card-border);
234 border-radius: 12px;
235 box-shadow: var(--admin-shadow-sm);
236 margin-bottom: 1rem;
237 overflow: hidden;
238 }
239
240 .admin-card-header {
241 padding: 0.9rem 1.15rem;
242 border-bottom: 1px solid var(--admin-card-border);
243 display: flex;
244 align-items: center;
245 justify-content: space-between;
246 gap: 0.5rem;
247 font-weight: 600;
248 color: #334155;
249 }
250
251 .admin-card-header i {
252 color: var(--admin-sidebar-active);
253 margin-right: 0.4rem;
254 }
255
256 .admin-card-body {
257 padding: 1.15rem;
258 }
259
260 /* === METRIC CARDS === */
261 .admin-metric {
262 background: #fff;
263 border: 1px solid var(--admin-card-border);
264 border-radius: 12px;
265 padding: 1.1rem 1.25rem;
266 box-shadow: var(--admin-shadow-sm);
267 display: flex;
268 align-items: center;
269 gap: 1rem;
270 height: 100%;
271 transition: transform 0.15s, box-shadow 0.15s;
272 }
273
274 .admin-metric:hover {
275 transform: translateY(-2px);
276 box-shadow: var(--admin-shadow-md);
277 }
278
279 .admin-metric-icon {
280 width: 48px;
281 height: 48px;
282 border-radius: 10px;
283 display: flex;
284 align-items: center;
285 justify-content: center;
286 font-size: 1.4rem;
287 color: #fff;
288 flex-shrink: 0;
289 }
290
291 .admin-metric-icon.bg-primary { background: #3b82f6; }
292 .admin-metric-icon.bg-success { background: #10b981; }
293 .admin-metric-icon.bg-warning { background: #f59e0b; }
294 .admin-metric-icon.bg-danger { background: #ef4444; }
295 .admin-metric-icon.bg-info { background: #06b6d4; }
296 .admin-metric-icon.bg-purple { background: #8b5cf6; }
297
298 .admin-metric-value {
299 font-size: 1.65rem;
300 font-weight: 700;
301 color: #0f172a;
302 line-height: 1.1;
303 }
304
305 .admin-metric-label {
306 color: #64748b;
307 font-size: 0.85rem;
308 margin-top: 0.15rem;
309 }
310
311 /* === TABLES === */
312 .admin-table {
313 margin-bottom: 0;
314 }
315
316 .admin-table thead th {
317 background: #f8fafc;
318 border-bottom: 2px solid var(--admin-card-border);
319 color: #475569;
320 font-size: 0.82rem;
321 text-transform: uppercase;
322 letter-spacing: 0.04em;
323 font-weight: 600;
324 padding: 0.75rem 1rem;
325 }
326
327 .admin-table tbody td {
328 padding: 0.75rem 1rem;
329 vertical-align: middle;
330 border-color: #f1f5f9;
331 }
332
333 .admin-table tbody tr:hover {
334 background: #f8fafc;
335 }
336
337 /* === BADGES === */
338 .badge.status-active { background-color: #10b981; }
339 .badge.status-settled { background-color: #3b82f6; }
340 .badge.status-archived { background-color: #64748b; }
341 .badge.status-pending { background-color: #f59e0b; color: #fff; }
342 .badge.status-inprogress { background-color: #06b6d4; color: #fff; }
343 .badge.status-completed { background-color: #10b981; }
344 .badge.status-accepted { background-color: #10b981; }
345 .badge.status-declined { background-color: #ef4444; }
346 .badge.status-expired { background-color: #64748b; }
347 .badge.status-markedpaid { background-color: #06b6d4; color: #fff; }
348 .badge.status-confirmed { background-color: #10b981; }
349
350 /* === ACTION BUTTONS === */
351 .admin-action-group {
352 display: inline-flex;
353 gap: 0.25rem;
354 }
355
356 .admin-action-group .btn {
357 padding: 0.3rem 0.55rem;
358 border-radius: 6px;
359 font-size: 0.82rem;
360 }
361
362 /* === TIMELINE / FEED === */
363 .admin-feed {
364 list-style: none;
365 margin: 0;
366 padding: 0;
367 }
368
369 .admin-feed-item {
370 display: flex;
371 gap: 0.85rem;
372 padding: 0.7rem 0;
373 border-bottom: 1px solid #f1f5f9;
374 }
375
376 .admin-feed-item:last-child {
377 border-bottom: none;
378 }
379
380 .admin-feed-icon {
381 width: 34px;
382 height: 34px;
383 border-radius: 50%;
384 display: flex;
385 align-items: center;
386 justify-content: center;
387 color: #fff;
388 font-size: 0.9rem;
389 flex-shrink: 0;
390 }
391
392 .admin-feed-body {
393 flex: 1;
394 min-width: 0;
395 }
396
397 .admin-feed-message {
398 color: #334155;
399 font-size: 0.9rem;
400 }
401
402 .admin-feed-date {
403 color: #94a3b8;
404 font-size: 0.78rem;
405 margin-top: 0.1rem;
406 }
407
408 /* === EMPTY STATE === */
409 .admin-empty {
410 text-align: center;
411 padding: 2.5rem 1rem;
412 color: #94a3b8;
413 }
414
415 .admin-empty i {
416 font-size: 2.4rem;
417 display: block;
418 margin-bottom: 0.5rem;
419 color: #cbd5e1;
420 }
421
422 /* === RESPONSIVE === */
423 @media (max-width: 767.98px) {
424 .admin-sidebar {
425 transform: translateX(-100%);
426 }
427
428 body.admin-sidebar-open .admin-sidebar {
429 transform: translateX(0);
430 }
431
432 .admin-main {
433 margin-left: 0;
434 }
435
436 .admin-content {
437 padding: 1rem;
438 }
439 }
440