source: frontend/src/App.css@ 09e02d7

Last change on this file since 09e02d7 was 09e02d7, checked in by Nikola Sarafimov <sarafimov.nikola12345@…>, 4 days ago

Final room reservation system implementation

  • Property mode set to 100644
File size: 40.2 KB
Line 
1:root {
2 --sidebar: #101827;
3 --sidebar-2: #1d2b46;
4 --bg: #eef3ff;
5 --surface: rgba(255, 255, 255, 0.78);
6 --surface-strong: #ffffff;
7 --line: rgba(148, 163, 184, 0.25);
8 --line-strong: rgba(148, 163, 184, 0.42);
9 --text: #0f172a;
10 --muted: #64748b;
11 --soft: #94a3b8;
12 --blue: #2563eb;
13 --violet: #7c3aed;
14 --green: #16a34a;
15 --red: #dc2626;
16 --amber: #f59e0b;
17 --cyan: #0891b2;
18 --shadow: 0 24px 70px rgba(15, 23, 42, 0.14);
19 --shadow-soft: 0 14px 35px rgba(15, 23, 42, 0.09);
20 --radius: 28px;
21 --sidebar-width: 320px;
22}
23
24/* Base */
25
26* {
27 box-sizing: border-box;
28}
29
30html {
31 min-height: 100%;
32 background: var(--bg);
33}
34
35body {
36 min-height: 100vh;
37 margin: 0;
38 color: var(--text);
39 font-family:
40 Inter,
41 ui-sans-serif,
42 system-ui,
43 -apple-system,
44 BlinkMacSystemFont,
45 "Segoe UI",
46 Arial,
47 sans-serif;
48 background:
49 radial-gradient(circle at 72% 4%, rgba(124, 58, 237, 0.16), transparent 32%),
50 radial-gradient(circle at 30% 0%, rgba(37, 99, 235, 0.14), transparent 30%),
51 linear-gradient(135deg, #f8fbff 0%, #eef3ff 44%, #f8fbff 100%);
52}
53
54button,
55input,
56select,
57textarea {
58 font: inherit;
59}
60
61button {
62 cursor: pointer;
63}
64
65img {
66 max-width: 100%;
67}
68
69button:disabled {
70 cursor: not-allowed;
71 opacity: 0.65;
72}
73
74/* Shared buttons, badges and helpers */
75
76.primary,
77.secondary,
78.landing-primary,
79.landing-secondary {
80 display: inline-flex;
81 align-items: center;
82 justify-content: center;
83 gap: 9px;
84 border-radius: 16px;
85 min-height: 48px;
86 padding: 12px 17px;
87 font-weight: 950;
88 transition:
89 transform 0.22s ease,
90 box-shadow 0.22s ease,
91 border-color 0.22s ease,
92 background 0.22s ease;
93}
94
95.primary,
96.landing-primary {
97 border: 0;
98 color: #ffffff;
99 background: linear-gradient(135deg, var(--blue), var(--violet));
100 box-shadow: 0 18px 36px rgba(37, 99, 235, 0.28);
101}
102
103.secondary {
104 color: var(--text);
105 background: linear-gradient(180deg, #ffffff, #e9eef8);
106 border: 1px solid var(--line-strong);
107}
108
109.landing-secondary {
110 color: #ffffff;
111 background: rgba(255, 255, 255, 0.08);
112 border: 1px solid rgba(255, 255, 255, 0.16);
113 backdrop-filter: blur(18px);
114}
115
116.primary:hover,
117.secondary:hover,
118.landing-primary:hover,
119.landing-secondary:hover {
120 transform: translateY(-2px);
121}
122
123.full {
124 width: 100%;
125}
126
127.avatar,
128.user-mini-avatar {
129 display: grid;
130 place-items: center;
131 color: #ffffff;
132 font-weight: 950;
133 background: linear-gradient(135deg, var(--blue), var(--violet));
134}
135
136.avatar {
137 width: 48px;
138 height: 48px;
139 border-radius: 16px;
140}
141
142.avatar.small {
143 width: 40px;
144 height: 40px;
145 border-radius: 14px;
146}
147
148.badge {
149 display: inline-flex;
150 align-items: center;
151 width: fit-content;
152 border-radius: 999px;
153 padding: 6px 10px;
154 font-size: 11px;
155 font-weight: 950;
156 text-transform: uppercase;
157 letter-spacing: 0.07em;
158 color: #1e40af;
159 background: #dbeafe;
160}
161
162.badge.admin,
163.badge.approver {
164 color: #5b21b6;
165 background: #ede9fe;
166}
167
168.badge.regular {
169 color: #155e75;
170 background: #cffafe;
171}
172
173.badge.pending {
174 color: #92400e;
175 background: #fef3c7;
176}
177
178.badge.approved {
179 color: #166534;
180 background: #dcfce7;
181}
182
183.badge.rejected {
184 color: #991b1b;
185 background: #fee2e2;
186}
187
188.logo-home-button {
189 border: 0;
190 padding: 0;
191 margin: 0;
192 background: transparent;
193 cursor: pointer;
194 display: inline-flex;
195 align-items: center;
196 justify-content: center;
197}
198
199.logo-home-button img {
200 transition:
201 transform 0.22s ease,
202 filter 0.22s ease,
203 opacity 0.22s ease;
204}
205
206.logo-home-button:hover img {
207 transform: translateY(-2px) scale(1.03);
208 opacity: 0.96;
209}
210
211.logo-home-button:focus-visible {
212 outline: 2px solid rgba(147, 197, 253, 0.8);
213 outline-offset: 6px;
214 border-radius: 18px;
215}
216
217/* Public landing */
218
219.landing-page {
220 height: 100vh;
221 min-height: 100vh;
222 position: relative;
223 overflow: hidden;
224 padding: 28px;
225 display: flex;
226 flex-direction: column;
227 background:
228 radial-gradient(circle at 10% 10%, rgba(37, 99, 235, 0.24), transparent 30%),
229 radial-gradient(circle at 85% 15%, rgba(124, 58, 237, 0.22), transparent 28%),
230 linear-gradient(135deg, #08111f 0%, #0f172a 45%, #172554 100%);
231 color: #ffffff;
232}
233
234.landing-orb {
235 position: absolute;
236 border-radius: 999px;
237 filter: blur(38px);
238 opacity: 0.45;
239 pointer-events: none;
240}
241
242.orb-one {
243 width: 360px;
244 height: 360px;
245 left: -100px;
246 top: 140px;
247 background: var(--blue);
248}
249
250.orb-two {
251 width: 420px;
252 height: 420px;
253 right: -140px;
254 top: -120px;
255 background: var(--violet);
256}
257
258.orb-three {
259 width: 300px;
260 height: 300px;
261 right: 18%;
262 bottom: -130px;
263 background: var(--cyan);
264}
265
266.landing-header {
267 position: relative;
268 z-index: 2;
269 width: 100%;
270 max-width: 1240px;
271 margin: 0 auto;
272 display: flex;
273 justify-content: space-between;
274 align-items: center;
275 flex-shrink: 0;
276}
277
278.landing-brand img {
279 width: 240px;
280 display: block;
281 filter:
282 drop-shadow(0 18px 32px rgba(0, 0, 0, 0.55))
283 drop-shadow(0 0 26px rgba(147, 197, 253, 0.34));
284}
285
286.landing-header-actions,
287.landing-actions {
288 display: flex;
289 flex-wrap: wrap;
290 gap: 12px;
291}
292
293.ghost-button,
294.landing-small-primary {
295 border-radius: 999px;
296 padding: 11px 18px;
297 color: #ffffff;
298 font-weight: 900;
299 transition: 0.22s ease;
300}
301
302.ghost-button {
303 border: 1px solid rgba(255, 255, 255, 0.18);
304 background: rgba(255, 255, 255, 0.08);
305 backdrop-filter: blur(18px);
306}
307
308.landing-small-primary {
309 border: 0;
310 background: linear-gradient(135deg, var(--blue), var(--violet));
311 box-shadow: 0 18px 36px rgba(37, 99, 235, 0.3);
312}
313
314.ghost-button:hover,
315.landing-small-primary:hover {
316 transform: translateY(-2px);
317}
318
319.landing-main {
320 position: relative;
321 z-index: 2;
322 width: 100%;
323 max-width: 1240px;
324 flex: 1;
325 min-height: 0;
326 margin: 0 auto;
327 display: grid;
328 grid-template-columns: 1.05fr 0.95fr;
329 gap: 48px;
330 align-items: center;
331}
332
333.landing-eyebrow {
334 display: inline-flex;
335 align-items: center;
336 gap: 8px;
337 color: #93c5fd;
338 text-transform: uppercase;
339 letter-spacing: 0.12em;
340 font-size: 12px;
341 font-weight: 950;
342 margin-bottom: 16px;
343}
344
345.landing-hero-content h1 {
346 margin: 0;
347 max-width: 760px;
348 font-size: clamp(48px, 6.4vw, 86px);
349 line-height: 0.92;
350 letter-spacing: -0.085em;
351}
352
353.landing-hero-content p {
354 max-width: 680px;
355 margin: 24px 0 0;
356 color: #cbd5e1;
357 font-size: 18px;
358 line-height: 1.75;
359}
360
361.landing-actions {
362 margin-top: 34px;
363}
364
365.landing-primary,
366.landing-secondary {
367 min-height: 54px;
368 border-radius: 18px;
369 padding: 14px 22px;
370}
371
372/* Landing preview card */
373
374.landing-preview-card {
375 border-radius: 34px;
376 padding: 28px;
377 min-height: 430px;
378 background: linear-gradient(135deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.075));
379 border: 1px solid rgba(255, 255, 255, 0.18);
380 box-shadow:
381 0 38px 100px rgba(0, 0, 0, 0.38),
382 inset 0 1px 0 rgba(255, 255, 255, 0.09);
383 backdrop-filter: blur(26px);
384}
385
386.preview-topbar {
387 display: flex;
388 gap: 8px;
389 margin-bottom: 24px;
390}
391
392.preview-topbar span {
393 width: 12px;
394 height: 12px;
395 border-radius: 999px;
396 background: rgba(255, 255, 255, 0.35);
397}
398
399.preview-header {
400 display: flex;
401 justify-content: space-between;
402 gap: 18px;
403 align-items: flex-start;
404}
405
406.preview-header span {
407 color: #cbd5e1;
408 font-size: 13px;
409}
410
411.preview-header h3 {
412 margin: 5px 0 0;
413 font-size: 30px;
414 letter-spacing: -0.06em;
415}
416
417.preview-live {
418 display: inline-flex;
419 align-items: center;
420 gap: 8px;
421 border-radius: 999px;
422 padding: 8px 12px;
423 background: rgba(34, 197, 94, 0.14);
424 color: #bbf7d0;
425 font-weight: 900;
426}
427
428.status-dot {
429 width: 9px;
430 height: 9px;
431 background: #22c55e;
432 border-radius: 50%;
433 box-shadow: 0 0 18px #22c55e;
434}
435
436.preview-stats {
437 display: grid;
438 grid-template-columns: repeat(3, 1fr);
439 gap: 14px;
440 margin-top: 26px;
441}
442
443.preview-stats div {
444 padding: 18px;
445 border-radius: 24px;
446 background: linear-gradient(135deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.07));
447 border: 1px solid rgba(255, 255, 255, 0.14);
448 transition:
449 transform 0.22s ease,
450 background 0.22s ease;
451}
452
453.preview-stats div:hover {
454 transform: translateY(-3px);
455 background: linear-gradient(135deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.09));
456}
457
458.preview-stats svg {
459 color: #93c5fd;
460 margin-bottom: 14px;
461}
462
463.preview-stats strong {
464 display: block;
465}
466
467.preview-stats span {
468 display: block;
469 margin-top: 4px;
470 color: #cbd5e1;
471 font-size: 12px;
472}
473
474.preview-flow {
475 margin-top: 24px;
476 display: grid;
477 gap: 12px;
478}
479
480.flow-item {
481 display: flex;
482 align-items: center;
483 gap: 10px;
484 border-radius: 18px;
485 padding: 13px;
486 background: rgba(255, 255, 255, 0.085);
487 color: #e2e8f0;
488}
489
490.flow-item svg {
491 color: #22c55e;
492}
493
494/* Auth screens */
495
496.auth-page,
497.register-page {
498 min-height: 100vh;
499 height: 100vh;
500 overflow: hidden;
501 display: grid;
502 place-items: center;
503 padding: 32px;
504 position: relative;
505 background:
506 radial-gradient(circle at 12% 18%, rgba(37, 99, 235, 0.26), transparent 30%),
507 radial-gradient(circle at 84% 12%, rgba(124, 58, 237, 0.28), transparent 30%),
508 radial-gradient(circle at 55% 92%, rgba(8, 145, 178, 0.18), transparent 28%),
509 linear-gradient(135deg, #07111f 0%, #0f172a 48%, #172554 100%);
510 color: #ffffff;
511}
512
513.auth-card,
514.register-card {
515 position: relative;
516 z-index: 2;
517 color: #ffffff;
518 border: 1px solid rgba(255, 255, 255, 0.16);
519 box-shadow:
520 0 40px 120px rgba(0, 0, 0, 0.42),
521 inset 0 1px 0 rgba(255, 255, 255, 0.08);
522 backdrop-filter: blur(26px);
523}
524
525.auth-card {
526 width: min(1060px, calc(100vw - 52px));
527 min-height: 560px;
528 display: grid;
529 grid-template-columns: 0.92fr 1.08fr;
530 overflow: hidden;
531 border-radius: 38px;
532 background: linear-gradient(135deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.075));
533}
534
535.auth-left-panel,
536.auth-right-panel {
537 position: relative;
538 z-index: 1;
539}
540
541.auth-left-panel {
542 padding: 72px 44px 44px;
543 display: flex;
544 flex-direction: column;
545 justify-content: center;
546 gap: 36px;
547 background: linear-gradient(180deg, rgba(15, 23, 42, 0.32), rgba(15, 23, 42, 0.12));
548 border-right: 1px solid rgba(255, 255, 255, 0.12);
549}
550
551.auth-logo img {
552 width: 270px;
553 display: block;
554 filter:
555 drop-shadow(0 22px 44px rgba(0, 0, 0, 0.34))
556 drop-shadow(0 0 18px rgba(147, 197, 253, 0.16));
557}
558
559.auth-left-copy h2,
560.register-left h1 {
561 margin: 0;
562 line-height: 0.98;
563 letter-spacing: -0.075em;
564}
565
566.auth-left-copy h2 {
567 max-width: 360px;
568 font-size: 42px;
569}
570
571.auth-left-copy p,
572.register-left p {
573 color: #cbd5e1;
574 line-height: 1.7;
575}
576
577.auth-left-copy p {
578 max-width: 380px;
579 margin: 18px 0 0;
580}
581
582.auth-right-panel {
583 padding: 76px 52px 48px;
584 display: flex;
585 flex-direction: column;
586 justify-content: center;
587}
588
589.auth-form-header {
590 display: flex;
591 align-items: center;
592 gap: 18px;
593 margin-bottom: 34px;
594}
595
596.auth-icon-badge {
597 width: 62px;
598 height: 62px;
599 display: grid;
600 place-items: center;
601 border-radius: 20px;
602 color: #ffffff;
603 background: linear-gradient(135deg, var(--blue), var(--violet));
604 box-shadow: 0 22px 44px rgba(37, 99, 235, 0.34);
605}
606
607.auth-form-header h1 {
608 margin: 0;
609 font-size: 52px;
610 line-height: 1;
611 letter-spacing: -0.08em;
612}
613
614.auth-form-header p {
615 margin: 8px 0 0;
616 color: #cbd5e1;
617 line-height: 1.5;
618}
619
620.login-form.polished,
621.register-form {
622 display: grid;
623 gap: 18px;
624}
625
626.login-form.polished label,
627.register-form label {
628 display: grid;
629 gap: 9px;
630 color: rgba(241, 245, 249, 0.92);
631 font-size: 13px;
632 font-weight: 950;
633 letter-spacing: -0.01em;
634}
635
636.login-form.polished input,
637.login-form.polished select,
638.register-form input,
639.register-form select {
640 width: 100%;
641 min-height: 62px;
642 border: 1px solid rgba(148, 163, 184, 0.24);
643 border-radius: 22px;
644 padding: 0 20px;
645 color: #f8fafc;
646 font-size: 15px;
647 font-weight: 850;
648 outline: none;
649 background: linear-gradient(135deg, rgba(15, 23, 42, 0.72), rgba(30, 41, 59, 0.58));
650 box-shadow:
651 inset 0 1px 0 rgba(255, 255, 255, 0.08),
652 0 18px 38px rgba(0, 0, 0, 0.18);
653 transition:
654 border-color 0.22s ease,
655 box-shadow 0.22s ease,
656 background 0.22s ease,
657 transform 0.22s ease;
658}
659
660.login-form.polished input::placeholder,
661.register-form input::placeholder {
662 color: rgba(203, 213, 225, 0.72);
663 font-weight: 800;
664}
665
666.login-form.polished input:hover,
667.register-form input:hover {
668 border-color: rgba(191, 219, 254, 0.4);
669 background: linear-gradient(135deg, rgba(15, 23, 42, 0.82), rgba(30, 41, 59, 0.66));
670}
671
672.login-form.polished input:focus,
673.login-form.polished select:focus,
674.register-form input:focus,
675.register-form select:focus {
676 border-color: rgba(139, 92, 246, 0.92);
677 background: linear-gradient(135deg, rgba(15, 23, 42, 0.92), rgba(30, 41, 59, 0.78));
678 box-shadow:
679 0 0 0 5px rgba(99, 102, 241, 0.18),
680 0 18px 46px rgba(37, 99, 235, 0.24),
681 inset 0 1px 0 rgba(255, 255, 255, 0.1);
682 transform: translateY(-1px);
683}
684
685.login-form.polished input:-webkit-autofill,
686.register-form input:-webkit-autofill {
687 -webkit-text-fill-color: #f8fafc;
688 caret-color: #f8fafc;
689 transition: background-color 9999s ease-in-out 0s;
690 box-shadow:
691 0 0 0 1000px rgba(15, 23, 42, 0.92) inset,
692 0 0 0 5px rgba(99, 102, 241, 0.12);
693}
694
695.auth-submit {
696 min-height: 58px;
697 border-radius: 18px;
698 margin-top: 4px;
699 font-size: 15px;
700}
701
702.auth-back-button,
703.auth-link-button {
704 border: 0;
705 background: transparent;
706 color: #bfdbfe;
707 font-weight: 950;
708 transition: 0.2s ease;
709}
710
711.auth-back-button {
712 position: absolute;
713 top: 26px;
714 left: 30px;
715 z-index: 5;
716 width: fit-content;
717 padding: 0;
718}
719
720.auth-back-button:hover {
721 color: #ffffff;
722 transform: translateX(-3px);
723}
724
725.auth-link-button {
726 justify-self: center;
727 width: fit-content;
728 padding: 2px 0;
729}
730
731.auth-link-button:hover {
732 color: #ffffff;
733}
734
735.register-card {
736 width: min(1020px, calc(100% - 32px));
737 display: grid;
738 grid-template-columns: 0.95fr 1.05fr;
739 gap: 34px;
740 padding: 42px;
741 border-radius: 36px;
742 background: rgba(255, 255, 255, 0.095);
743}
744
745.register-left {
746 display: grid;
747 align-content: center;
748 gap: 28px;
749}
750
751.register-logo-button {
752 width: fit-content;
753}
754
755.register-left img {
756 width: 240px;
757 filter: drop-shadow(0 24px 42px rgba(0, 0, 0, 0.25));
758}
759
760.register-left h1 {
761 font-size: 54px;
762 letter-spacing: -0.08em;
763}
764
765.register-left p {
766 margin: 0;
767}
768
769/* Application shell */
770
771.app-shell {
772 display: flex;
773 min-height: 100vh;
774}
775
776.sidebar {
777 position: fixed;
778 inset: 0 auto 0 0;
779 width: var(--sidebar-width);
780 padding: 28px;
781 color: #ffffff;
782 background:
783 radial-gradient(circle at 80% 110%, rgba(124, 58, 237, 0.35), transparent 38%),
784 linear-gradient(180deg, var(--sidebar), var(--sidebar-2));
785 box-shadow: 25px 0 70px rgba(15, 23, 42, 0.28);
786 display: flex;
787 flex-direction: column;
788 z-index: 20;
789}
790
791.brand {
792 display: flex;
793 justify-content: center;
794 margin-bottom: 50px;
795 padding: 0;
796 background: transparent;
797 border: none;
798 box-shadow: none;
799}
800
801.brand-logo {
802 width: 215px;
803 height: auto;
804 background: transparent;
805 border: 0;
806 box-shadow: none;
807 overflow: visible;
808}
809
810.brand-logo img {
811 width: 100%;
812 height: auto;
813 display: block;
814 object-fit: contain;
815 filter: drop-shadow(0 18px 32px rgba(0, 0, 0, 0.2));
816}
817
818.nav-menu {
819 display: flex;
820 flex-direction: column;
821 gap: 11px;
822}
823
824.nav-menu button {
825 position: relative;
826 display: flex;
827 align-items: center;
828 gap: 13px;
829 border: 0;
830 border-radius: 18px;
831 padding: 15px 16px;
832 color: #dbeafe;
833 background: transparent;
834 font-weight: 850;
835 transition:
836 transform 0.22s ease,
837 background 0.22s ease,
838 box-shadow 0.22s ease;
839}
840
841.nav-menu button:hover {
842 transform: translateX(5px);
843 background: rgba(255, 255, 255, 0.08);
844}
845
846.nav-menu button.active {
847 color: #ffffff;
848 background: linear-gradient(135deg, var(--blue), var(--violet));
849 box-shadow: 0 18px 36px rgba(37, 99, 235, 0.33);
850}
851
852.nav-menu button.active::after {
853 content: "";
854 position: absolute;
855 right: 14px;
856 width: 8px;
857 height: 8px;
858 border-radius: 999px;
859 background: #ffffff;
860 box-shadow: 0 0 18px #ffffff;
861}
862
863.sidebar-footer {
864 margin-top: auto;
865 display: grid;
866 gap: 12px;
867}
868
869.connection-card,
870.user-card {
871 display: flex;
872 align-items: center;
873 gap: 12px;
874 border: 1px solid rgba(255, 255, 255, 0.12);
875 background: rgba(255, 255, 255, 0.075);
876 border-radius: 20px;
877 padding: 14px;
878 backdrop-filter: blur(18px);
879}
880
881.connection-card strong,
882.user-card strong {
883 display: block;
884 font-size: 13px;
885}
886
887.connection-card span,
888.user-card span {
889 display: block;
890 color: #cbd5e1;
891 font-size: 12px;
892}
893
894.icon-button {
895 margin-left: auto;
896 border: 0;
897 border-radius: 12px;
898 width: 36px;
899 height: 36px;
900 color: #ffffff;
901 background: rgba(255, 255, 255, 0.1);
902 transition:
903 transform 0.2s ease,
904 background 0.2s ease;
905}
906
907.icon-button:hover {
908 transform: translateY(-2px);
909 background: rgba(255, 255, 255, 0.18);
910}
911
912.main-area {
913 width: calc(100% - var(--sidebar-width));
914 margin-left: var(--sidebar-width);
915 padding: 30px 38px 50px;
916}
917
918.topbar {
919 height: 82px;
920 margin-bottom: 26px;
921 padding: 0 4px;
922 display: flex;
923 justify-content: space-between;
924 align-items: center;
925}
926
927.topbar-label {
928 color: var(--muted);
929 font-size: 12px;
930 text-transform: uppercase;
931 font-weight: 900;
932 letter-spacing: 0.1em;
933}
934
935.topbar h2 {
936 margin: 5px 0 0;
937 font-size: 28px;
938 letter-spacing: -0.05em;
939}
940
941.topbar-actions {
942 display: flex;
943 align-items: center;
944 gap: 12px;
945}
946
947.status-pill,
948.top-user {
949 display: flex;
950 align-items: center;
951 gap: 10px;
952 border: 1px solid var(--line);
953 background: rgba(255, 255, 255, 0.72);
954 border-radius: 999px;
955 padding: 10px 14px;
956 box-shadow: var(--shadow-soft);
957 backdrop-filter: blur(16px);
958}
959
960.top-user strong {
961 display: block;
962 font-size: 13px;
963}
964
965.top-user span {
966 display: block;
967 color: var(--muted);
968 font-size: 12px;
969}
970
971/* Shared page components */
972
973.hero {
974 position: relative;
975 overflow: hidden;
976 border: 1px solid var(--line);
977 background:
978 radial-gradient(circle at 92% 0%, rgba(37, 99, 235, 0.14), transparent 24%),
979 linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.62));
980 box-shadow: var(--shadow-soft);
981 border-radius: 32px;
982 padding: 28px 34px;
983 margin-bottom: 28px;
984 backdrop-filter: blur(20px);
985}
986
987.eyebrow,
988.dashboard-eyebrow {
989 display: inline-flex;
990 align-items: center;
991 gap: 8px;
992 color: var(--blue);
993 text-transform: uppercase;
994 letter-spacing: 0.1em;
995 font-size: 12px;
996 font-weight: 950;
997}
998
999.eyebrow {
1000 margin-bottom: 12px;
1001}
1002
1003.hero h1 {
1004 margin: 0;
1005 font-size: clamp(36px, 4vw, 58px);
1006 line-height: 0.98;
1007 letter-spacing: -0.075em;
1008}
1009
1010.hero p {
1011 max-width: 760px;
1012 color: var(--muted);
1013 font-size: 16px;
1014 line-height: 1.7;
1015 margin: 16px 0 0;
1016}
1017
1018.panel,
1019.stat-card,
1020.action-card,
1021.room-card,
1022.approval-card,
1023.result-card {
1024 border: 1px solid var(--line);
1025 background: var(--surface);
1026 box-shadow: var(--shadow-soft);
1027 backdrop-filter: blur(18px);
1028}
1029
1030.panel {
1031 border-radius: 28px;
1032 padding: 24px;
1033}
1034
1035.panel-header h3 {
1036 margin: 0;
1037 font-size: 20px;
1038 letter-spacing: -0.04em;
1039}
1040
1041.panel-header p {
1042 margin: 6px 0 0;
1043 color: var(--muted);
1044 font-size: 14px;
1045}
1046
1047.stats-grid {
1048 display: grid;
1049 grid-template-columns: repeat(5, minmax(150px, 1fr));
1050 gap: 18px;
1051 margin-bottom: 26px;
1052}
1053
1054.stat-card {
1055 position: relative;
1056 overflow: hidden;
1057 border-radius: 26px;
1058 padding: 22px;
1059 min-height: 170px;
1060}
1061
1062.stat-card::after {
1063 content: "";
1064 position: absolute;
1065 right: -35px;
1066 top: -35px;
1067 width: 110px;
1068 height: 110px;
1069 border-radius: 999px;
1070 opacity: 0.18;
1071}
1072
1073.stat-card.blue::after,
1074.dashboard-stat-card.blue::after {
1075 background: #93c5fd;
1076}
1077
1078.stat-card.violet::after,
1079.stat-card.purple::after,
1080.dashboard-stat-card.purple::after {
1081 background: #c4b5fd;
1082}
1083
1084.stat-card.cyan::after,
1085.dashboard-stat-card.cyan::after {
1086 background: #67e8f9;
1087}
1088
1089.stat-card.amber::after,
1090.stat-card.orange::after,
1091.dashboard-stat-card.orange::after {
1092 background: #fde68a;
1093}
1094
1095.stat-card.green::after,
1096.dashboard-stat-card.green::after {
1097 background: #86efac;
1098}
1099
1100.stat-icon,
1101.stat-icon-wrap {
1102 display: grid;
1103 place-items: center;
1104 color: #ffffff;
1105 background: linear-gradient(135deg, var(--blue), var(--violet));
1106}
1107
1108.stat-icon {
1109 width: 48px;
1110 height: 48px;
1111 border-radius: 16px;
1112 margin-bottom: 18px;
1113}
1114
1115.stat-card span {
1116 display: block;
1117 color: var(--muted);
1118 text-transform: uppercase;
1119 font-size: 12px;
1120 letter-spacing: 0.09em;
1121 font-weight: 950;
1122 margin-bottom: 10px;
1123}
1124
1125.stat-card strong {
1126 font-size: 42px;
1127 line-height: 1;
1128 letter-spacing: -0.07em;
1129}
1130
1131.action-grid {
1132 display: grid;
1133 grid-template-columns: repeat(2, minmax(190px, 1fr));
1134 gap: 14px;
1135 margin-top: 20px;
1136}
1137
1138.action-card {
1139 text-align: left;
1140 border-radius: 22px;
1141 padding: 20px;
1142 color: var(--text);
1143 transition:
1144 transform 0.22s ease,
1145 box-shadow 0.22s ease;
1146}
1147
1148.action-card:hover {
1149 transform: translateY(-3px);
1150 box-shadow: var(--shadow);
1151}
1152
1153.action-card svg {
1154 color: var(--blue);
1155 margin-bottom: 16px;
1156}
1157
1158.action-card strong {
1159 display: block;
1160 font-size: 16px;
1161 margin-bottom: 8px;
1162}
1163
1164.action-card span {
1165 color: var(--muted);
1166 font-size: 13px;
1167 line-height: 1.5;
1168}
1169
1170/* Dashboard */
1171
1172.premium-dashboard {
1173 display: grid;
1174 gap: 26px;
1175 padding-bottom: 44px;
1176}
1177
1178.dashboard-hero-compact {
1179 min-height: 190px;
1180 border-radius: 36px;
1181 padding: 34px 38px;
1182 display: flex;
1183 align-items: center;
1184 justify-content: flex-start;
1185 gap: 32px;
1186 background:
1187 radial-gradient(circle at 92% 10%, rgba(129, 140, 248, 0.2), transparent 34%),
1188 linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(248, 250, 252, 0.78));
1189 border: 1px solid rgba(148, 163, 184, 0.18);
1190 box-shadow:
1191 0 28px 80px rgba(15, 23, 42, 0.1),
1192 inset 0 1px 0 rgba(255, 255, 255, 0.85);
1193}
1194
1195.dashboard-eyebrow {
1196 margin-bottom: 16px;
1197 letter-spacing: 0.12em;
1198}
1199
1200.dashboard-hero-compact h1 {
1201 margin: 0;
1202 color: var(--text);
1203 font-size: clamp(38px, 4vw, 64px);
1204 line-height: 0.96;
1205 letter-spacing: -0.065em;
1206}
1207
1208.dashboard-hero-compact p {
1209 margin: 18px 0 0;
1210 max-width: 780px;
1211 color: var(--muted);
1212 font-size: 17px;
1213 line-height: 1.65;
1214 font-weight: 650;
1215}
1216
1217.dashboard-hero-status {
1218 display: grid;
1219 gap: 14px;
1220 min-width: 220px;
1221}
1222
1223.status-pill.success {
1224 display: inline-flex;
1225 align-items: center;
1226 gap: 10px;
1227 justify-content: center;
1228 border-radius: 999px;
1229 padding: 13px 18px;
1230 background: rgba(255, 255, 255, 0.78);
1231 border: 1px solid rgba(226, 232, 240, 0.95);
1232 color: var(--text);
1233 font-weight: 900;
1234 box-shadow: 0 18px 44px rgba(15, 23, 42, 0.08);
1235}
1236
1237.status-pill.success span {
1238 width: 10px;
1239 height: 10px;
1240 border-radius: 999px;
1241 background: #22c55e;
1242 box-shadow: 0 0 0 6px rgba(34, 197, 94, 0.14);
1243}
1244
1245.user-mini-card {
1246 display: flex;
1247 align-items: center;
1248 gap: 12px;
1249 border-radius: 24px;
1250 padding: 13px 15px;
1251 background: rgba(255, 255, 255, 0.82);
1252 border: 1px solid rgba(226, 232, 240, 0.95);
1253 box-shadow: 0 18px 44px rgba(15, 23, 42, 0.08);
1254}
1255
1256.user-mini-avatar {
1257 width: 42px;
1258 height: 42px;
1259 border-radius: 16px;
1260}
1261
1262.user-mini-card strong {
1263 display: block;
1264 color: var(--text);
1265 font-weight: 950;
1266}
1267
1268.user-mini-card small {
1269 color: var(--muted);
1270 font-weight: 800;
1271}
1272
1273.dashboard-stat-grid {
1274 display: grid;
1275 grid-template-columns: repeat(5, minmax(0, 1fr));
1276 gap: 20px;
1277}
1278
1279.dashboard-stat-card {
1280 position: relative;
1281 overflow: hidden;
1282 min-height: 178px;
1283 border-radius: 30px;
1284 padding: 24px;
1285 background:
1286 radial-gradient(circle at 88% 0%, rgba(99, 102, 241, 0.17), transparent 30%),
1287 rgba(255, 255, 255, 0.88);
1288 border: 1px solid rgba(226, 232, 240, 0.92);
1289 box-shadow: 0 26px 62px rgba(15, 23, 42, 0.1);
1290}
1291
1292.dashboard-stat-card::after {
1293 content: "";
1294 position: absolute;
1295 right: -30px;
1296 top: -34px;
1297 width: 105px;
1298 height: 105px;
1299 border-radius: 999px;
1300 opacity: 0.42;
1301}
1302
1303.stat-icon-wrap {
1304 width: 54px;
1305 height: 54px;
1306 border-radius: 18px;
1307 box-shadow: 0 16px 34px rgba(37, 99, 235, 0.28);
1308 margin-bottom: 24px;
1309}
1310
1311.dashboard-stat-card span {
1312 display: block;
1313 color: var(--muted);
1314 font-size: 13px;
1315 font-weight: 950;
1316 letter-spacing: 0.12em;
1317 text-transform: uppercase;
1318}
1319
1320.dashboard-stat-card strong {
1321 display: block;
1322 margin-top: 8px;
1323 color: var(--text);
1324 font-size: 44px;
1325 line-height: 1;
1326 letter-spacing: -0.055em;
1327}
1328
1329.dashboard-stat-card p {
1330 margin: 9px 0 0;
1331 color: var(--muted);
1332 font-size: 14px;
1333 font-weight: 750;
1334}
1335
1336.dashboard-main-grid {
1337 display: grid;
1338 grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
1339 gap: 24px;
1340}
1341
1342.dashboard-panel {
1343 border-radius: 32px;
1344 padding: 28px;
1345 background: rgba(255, 255, 255, 0.84);
1346 border: 1px solid rgba(226, 232, 240, 0.94);
1347 box-shadow: 0 26px 70px rgba(15, 23, 42, 0.1);
1348}
1349
1350.panel-heading h2 {
1351 margin: 0;
1352 color: var(--text);
1353 font-size: 24px;
1354 letter-spacing: -0.04em;
1355}
1356
1357.panel-heading p {
1358 margin: 8px 0 0;
1359 color: var(--muted);
1360 font-weight: 650;
1361}
1362
1363.quick-action-grid {
1364 margin-top: 24px;
1365 display: grid;
1366 grid-template-columns: repeat(2, minmax(0, 1fr));
1367 gap: 16px;
1368}
1369
1370.quick-action-grid button {
1371 min-height: 138px;
1372 text-align: left;
1373 border: 1px solid rgba(226, 232, 240, 0.95);
1374 border-radius: 24px;
1375 padding: 22px;
1376 background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(248, 250, 252, 0.82));
1377 box-shadow: 0 18px 42px rgba(15, 23, 42, 0.07);
1378 transition:
1379 transform 0.22s ease,
1380 box-shadow 0.22s ease,
1381 border-color 0.22s ease;
1382}
1383
1384.quick-action-grid button:hover {
1385 transform: translateY(-4px);
1386 border-color: rgba(96, 165, 250, 0.72);
1387 box-shadow: 0 28px 64px rgba(37, 99, 235, 0.12);
1388}
1389
1390.quick-action-grid svg {
1391 color: var(--blue);
1392 margin-bottom: 22px;
1393}
1394
1395.quick-action-grid strong {
1396 display: block;
1397 color: var(--text);
1398 font-size: 17px;
1399 font-weight: 950;
1400 letter-spacing: -0.02em;
1401}
1402
1403.quick-action-grid span {
1404 display: block;
1405 margin-top: 9px;
1406 color: var(--muted);
1407 line-height: 1.5;
1408 font-weight: 650;
1409}
1410
1411.status-stack {
1412 display: grid;
1413 gap: 16px;
1414 margin-top: 24px;
1415}
1416
1417.status-card {
1418 display: flex;
1419 gap: 18px;
1420 align-items: center;
1421 border-radius: 26px;
1422 padding: 22px;
1423 border: 1px solid rgba(226, 232, 240, 0.9);
1424}
1425
1426.status-card.database {
1427 background: linear-gradient(135deg, rgba(238, 242, 255, 0.95), rgba(245, 243, 255, 0.85));
1428}
1429
1430.status-card.role {
1431 background: linear-gradient(135deg, rgba(236, 253, 245, 0.95), rgba(240, 253, 250, 0.86));
1432}
1433
1434.status-card svg {
1435 color: var(--blue);
1436 flex-shrink: 0;
1437}
1438
1439.status-card span {
1440 color: var(--muted);
1441 font-weight: 800;
1442}
1443
1444.status-card strong {
1445 display: block;
1446 margin-top: 4px;
1447 color: var(--text);
1448 font-size: 17px;
1449 font-weight: 950;
1450 letter-spacing: 0.08em;
1451}
1452
1453.status-card p {
1454 margin: 5px 0 0;
1455 color: var(--muted);
1456 font-weight: 650;
1457}
1458
1459/* Workspace pages */
1460
1461.workspace-grid {
1462 display: grid;
1463 grid-template-columns: 430px 1fr;
1464 gap: 22px;
1465 align-items: start;
1466}
1467
1468.page-form {
1469 display: grid;
1470 gap: 18px;
1471}
1472
1473.form-grid {
1474 display: grid;
1475 grid-template-columns: 1fr 1fr;
1476 gap: 14px;
1477}
1478
1479.page-form label {
1480 display: grid;
1481 gap: 8px;
1482 color: #334155;
1483 font-size: 13px;
1484 font-weight: 900;
1485}
1486
1487.page-form input,
1488.page-form select,
1489.page-form textarea {
1490 border: 1px solid var(--line-strong);
1491 border-radius: 16px;
1492 padding: 13px 14px;
1493 color: var(--text);
1494 outline: none;
1495 background: rgba(255, 255, 255, 0.92);
1496 transition:
1497 border-color 0.2s ease,
1498 box-shadow 0.2s ease,
1499 background 0.2s ease;
1500}
1501
1502.page-form input:focus,
1503.page-form select:focus,
1504.page-form textarea:focus {
1505 border-color: var(--blue);
1506 box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.12);
1507 background: #ffffff;
1508}
1509
1510.section-title {
1511 display: flex;
1512 align-items: flex-start;
1513 gap: 13px;
1514 margin-bottom: 4px;
1515}
1516
1517.section-title svg {
1518 color: var(--blue);
1519 flex-shrink: 0;
1520}
1521
1522.section-title h3 {
1523 margin: 0;
1524 font-size: 20px;
1525 letter-spacing: -0.04em;
1526}
1527
1528.section-title p {
1529 margin: 6px 0 0;
1530 color: var(--muted);
1531 font-size: 14px;
1532 line-height: 1.5;
1533}
1534
1535.room-grid,
1536.approval-grid {
1537 display: grid;
1538 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1539 gap: 16px;
1540}
1541
1542.room-card,
1543.approval-card,
1544.result-card {
1545 border-radius: 24px;
1546 padding: 20px;
1547}
1548
1549.room-card-top,
1550.approval-card-top {
1551 display: flex;
1552 justify-content: space-between;
1553 align-items: center;
1554}
1555
1556.room-card svg {
1557 color: var(--blue);
1558}
1559
1560.room-card h3,
1561.approval-card h3 {
1562 margin: 18px 0 6px;
1563 font-size: 24px;
1564 letter-spacing: -0.05em;
1565}
1566
1567.room-card p,
1568.approval-card p {
1569 color: var(--muted);
1570 margin: 0 0 16px;
1571}
1572
1573.room-meta,
1574.approval-meta {
1575 display: flex;
1576 justify-content: space-between;
1577 margin-top: 12px;
1578 color: var(--muted);
1579 gap: 16px;
1580}
1581
1582.approval-meta.column {
1583 display: grid;
1584}
1585
1586.room-meta strong,
1587.approval-meta strong {
1588 color: var(--text);
1589 text-align: right;
1590}
1591
1592.approval-meta.column strong {
1593 text-align: left;
1594 margin-top: 4px;
1595}
1596
1597.room-card small {
1598 display: block;
1599 color: var(--soft);
1600 margin-top: 14px;
1601}
1602
1603.empty-state {
1604 border: 1px solid var(--line);
1605 border-radius: 22px;
1606 padding: 22px;
1607 color: var(--muted);
1608 background: rgba(255, 255, 255, 0.68);
1609}
1610
1611.empty-state.small {
1612 padding: 14px;
1613}
1614
1615.wizard-steps {
1616 display: grid;
1617 grid-template-columns: repeat(4, 1fr);
1618 gap: 14px;
1619 margin-bottom: 24px;
1620}
1621
1622.step {
1623 border: 1px solid var(--line);
1624 background: rgba(255, 255, 255, 0.7);
1625 border-radius: 20px;
1626 padding: 14px 16px;
1627 min-height: 78px;
1628 box-shadow: var(--shadow-soft);
1629}
1630
1631.step span {
1632 display: block;
1633 color: var(--blue);
1634 font-size: 12px;
1635 font-weight: 950;
1636}
1637
1638.step strong {
1639 display: block;
1640 margin-top: 4px;
1641}
1642
1643.requester-card {
1644 display: flex;
1645 align-items: center;
1646 gap: 13px;
1647 padding: 16px;
1648 border-radius: 22px;
1649 background: rgba(37, 99, 235, 0.06);
1650 border: 1px solid rgba(37, 99, 235, 0.14);
1651}
1652
1653.requester-card span {
1654 display: block;
1655 color: var(--muted);
1656 font-size: 13px;
1657}
1658
1659.requester-card strong {
1660 display: block;
1661}
1662
1663.equipment-box {
1664 display: grid;
1665 gap: 14px;
1666 padding: 18px;
1667 border: 1px dashed rgba(37, 99, 235, 0.35);
1668 border-radius: 22px;
1669 background: rgba(37, 99, 235, 0.04);
1670}
1671
1672.equipment-box h4 {
1673 margin: 0;
1674}
1675
1676.selected-list {
1677 display: grid;
1678 gap: 8px;
1679 list-style: none;
1680 padding: 0;
1681 margin: 0;
1682}
1683
1684.selected-list li {
1685 display: flex;
1686 justify-content: space-between;
1687 align-items: center;
1688 border: 1px solid var(--line);
1689 border-radius: 16px;
1690 background: #ffffff;
1691 padding: 10px 12px;
1692}
1693
1694.selected-list li button {
1695 border: 0;
1696 border-radius: 999px;
1697 padding: 7px 10px;
1698 color: #991b1b;
1699 background: #fee2e2;
1700 font-weight: 900;
1701}
1702
1703.result-card {
1704 margin-top: 22px;
1705 background: #f0fdf4;
1706 border-color: rgba(34, 197, 94, 0.3);
1707}
1708
1709.result-card h3 {
1710 margin-top: 0;
1711 color: #166534;
1712}
1713
1714.result-card pre {
1715 background: rgba(255, 255, 255, 0.74);
1716 border-radius: 18px;
1717 padding: 16px;
1718 overflow-x: auto;
1719}
1720
1721.approval-actions {
1722 display: grid;
1723 grid-template-columns: 1fr 1fr;
1724 gap: 10px;
1725 margin-top: 20px;
1726}
1727
1728.success-button,
1729.danger-button {
1730 display: inline-flex;
1731 align-items: center;
1732 justify-content: center;
1733 gap: 9px;
1734 border: 0;
1735 border-radius: 16px;
1736 min-height: 48px;
1737 padding: 12px 17px;
1738 color: #ffffff;
1739 font-weight: 950;
1740 transition: transform 0.22s ease;
1741}
1742
1743.success-button {
1744 background: linear-gradient(135deg, #16a34a, #22c55e);
1745}
1746
1747.danger-button {
1748 background: linear-gradient(135deg, #dc2626, #f43f5e);
1749}
1750
1751.success-button:hover,
1752.danger-button:hover {
1753 transform: translateY(-2px);
1754}
1755
1756/* Reports and admin */
1757
1758.report-actions {
1759 display: grid;
1760 grid-template-columns: repeat(2, minmax(260px, 1fr));
1761 gap: 14px;
1762 margin-bottom: 24px;
1763}
1764
1765.table-panel {
1766 margin-top: 24px;
1767}
1768
1769.table-panel h3 {
1770 margin-top: 0;
1771}
1772
1773.table-wrapper {
1774 overflow-x: auto;
1775 margin-top: 15px;
1776 border-radius: 20px;
1777 border: 1px solid var(--line);
1778}
1779
1780table {
1781 width: 100%;
1782 border-collapse: collapse;
1783 min-width: 900px;
1784 background: #ffffff;
1785}
1786
1787th,
1788td {
1789 padding: 14px 16px;
1790 border-bottom: 1px solid #e5e7eb;
1791 text-align: left;
1792 font-size: 14px;
1793}
1794
1795th {
1796 color: #475569;
1797 background: #f8fafc;
1798 text-transform: uppercase;
1799 letter-spacing: 0.08em;
1800 font-size: 12px;
1801}
1802
1803tr:hover td {
1804 background: #f8fbff;
1805}
1806
1807.admin-grid {
1808 display: grid;
1809 grid-template-columns: repeat(3, 1fr);
1810 gap: 22px;
1811}
1812
1813.stats-grid.compact {
1814 grid-template-columns: repeat(3, minmax(170px, 1fr));
1815}
1816
1817.mini-list {
1818 display: grid;
1819 gap: 10px;
1820}
1821
1822.mini-list-item {
1823 display: flex;
1824 justify-content: space-between;
1825 align-items: center;
1826 gap: 12px;
1827 border: 1px solid var(--line);
1828 background: rgba(255, 255, 255, 0.75);
1829 border-radius: 18px;
1830 padding: 13px;
1831}
1832
1833.mini-list-item strong {
1834 display: block;
1835}
1836
1837.mini-list-item span {
1838 display: block;
1839 color: var(--muted);
1840 font-size: 13px;
1841 margin-top: 3px;
1842}
1843
1844/* Responsive */
1845
1846@media (max-width: 1400px) {
1847 .dashboard-stat-grid {
1848 grid-template-columns: repeat(3, minmax(0, 1fr));
1849 }
1850
1851 .dashboard-main-grid {
1852 grid-template-columns: 1fr;
1853 }
1854}
1855
1856@media (max-width: 1180px) {
1857 .landing-page {
1858 height: auto;
1859 min-height: 100vh;
1860 overflow: auto;
1861 }
1862
1863 .landing-main,
1864 .dashboard-grid,
1865 .workspace-grid,
1866 .admin-grid {
1867 grid-template-columns: 1fr;
1868 }
1869
1870 .stats-grid {
1871 grid-template-columns: repeat(2, 1fr);
1872 }
1873
1874 .stats-grid.compact {
1875 grid-template-columns: 1fr;
1876 }
1877}
1878
1879@media (max-width: 900px) {
1880 .app-shell {
1881 flex-direction: column;
1882 }
1883
1884 .sidebar {
1885 position: static;
1886 width: 100%;
1887 min-height: auto;
1888 }
1889
1890 .brand {
1891 margin-bottom: 26px;
1892 }
1893
1894 .nav-menu {
1895 display: grid;
1896 grid-template-columns: 1fr 1fr;
1897 }
1898
1899 .main-area {
1900 width: 100%;
1901 margin-left: 0;
1902 padding: 22px;
1903 }
1904
1905 .topbar {
1906 flex-direction: column;
1907 align-items: flex-start;
1908 height: auto;
1909 gap: 14px;
1910 }
1911
1912 .topbar-actions {
1913 flex-wrap: wrap;
1914 }
1915
1916 .dashboard-hero-compact {
1917 flex-direction: column;
1918 align-items: flex-start;
1919 padding: 28px;
1920 }
1921
1922 .dashboard-stat-grid,
1923 .quick-action-grid,
1924 .action-grid,
1925 .stats-grid,
1926 .preview-stats,
1927 .form-grid,
1928 .wizard-steps,
1929 .report-actions {
1930 grid-template-columns: 1fr;
1931 }
1932
1933 .auth-page,
1934 .register-page {
1935 height: auto;
1936 overflow: auto;
1937 }
1938
1939 .auth-card,
1940 .register-card {
1941 grid-template-columns: 1fr;
1942 min-height: auto;
1943 }
1944
1945 .auth-left-panel {
1946 padding: 72px 32px 32px;
1947 border-right: none;
1948 border-bottom: 1px solid rgba(255, 255, 255, 0.12);
1949 }
1950
1951 .auth-right-panel {
1952 padding: 36px 32px;
1953 }
1954
1955 .auth-form-header h1,
1956 .register-left h1 {
1957 font-size: 42px;
1958 }
1959
1960 .landing-header {
1961 gap: 18px;
1962 align-items: flex-start;
1963 flex-direction: column;
1964 }
1965
1966 .landing-hero-content h1 {
1967 font-size: 48px;
1968 }
1969}
1970
1971@media (max-width: 620px) {
1972 .landing-page,
1973 .auth-page,
1974 .register-page {
1975 padding: 20px;
1976 }
1977
1978 .landing-brand img,
1979 .brand-logo {
1980 width: 190px;
1981 }
1982
1983 .landing-header-actions {
1984 width: 100%;
1985 }
1986
1987 .ghost-button,
1988 .landing-small-primary {
1989 flex: 1;
1990 }
1991
1992 .landing-preview-card,
1993 .auth-card,
1994 .register-card,
1995 .dashboard-hero-compact,
1996 .dashboard-panel,
1997 .hero,
1998 .panel {
1999 border-radius: 26px;
2000 }
2001
2002 .dashboard-hero-compact h1,
2003 .hero h1 {
2004 font-size: 36px;
2005 letter-spacing: -0.06em;
2006 }
2007
2008 .dashboard-stat-card strong {
2009 font-size: 38px;
2010 }
2011
2012 table {
2013 min-width: 720px;
2014 }
2015}
2016
2017/* Reports page refinement */
2018
2019.reports-page-pro {
2020 display: grid;
2021 gap: 26px;
2022 padding-bottom: 44px;
2023}
2024
2025.reports-hero-pro {
2026 min-height: 210px;
2027 border-radius: 36px;
2028 padding: 36px 38px;
2029 display: grid;
2030 grid-template-columns: minmax(0, 1fr) 420px;
2031 gap: 34px;
2032 align-items: center;
2033 background:
2034 radial-gradient(circle at 92% 10%, rgba(129, 140, 248, 0.2), transparent 34%),
2035 linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(248, 250, 252, 0.78));
2036 border: 1px solid rgba(148, 163, 184, 0.18);
2037 box-shadow:
2038 0 28px 80px rgba(15, 23, 42, 0.1),
2039 inset 0 1px 0 rgba(255, 255, 255, 0.85);
2040}
2041
2042.reports-hero-pro h1 {
2043 margin: 0;
2044 color: #0f172a;
2045 font-size: clamp(42px, 4.7vw, 72px);
2046 line-height: 0.94;
2047 letter-spacing: -0.075em;
2048}
2049
2050.reports-hero-pro p {
2051 margin: 18px 0 0;
2052 max-width: 780px;
2053 color: #64748b;
2054 font-size: 17px;
2055 line-height: 1.65;
2056 font-weight: 650;
2057}
2058
2059.reports-hero-metrics {
2060 display: grid;
2061 grid-template-columns: 1fr;
2062 gap: 12px;
2063}
2064
2065.reports-hero-metrics div {
2066 border-radius: 22px;
2067 padding: 16px 18px;
2068 background: rgba(255, 255, 255, 0.82);
2069 border: 1px solid rgba(226, 232, 240, 0.92);
2070 box-shadow: 0 18px 44px rgba(15, 23, 42, 0.08);
2071}
2072
2073.reports-hero-metrics strong {
2074 display: block;
2075 color: #0f172a;
2076 font-size: 25px;
2077 line-height: 1;
2078 letter-spacing: -0.045em;
2079}
2080
2081.reports-hero-metrics span {
2082 display: block;
2083 margin-top: 5px;
2084 color: #64748b;
2085 font-size: 13px;
2086 font-weight: 850;
2087}
2088
2089.reports-command-grid {
2090 display: grid;
2091 grid-template-columns: repeat(2, minmax(0, 1fr));
2092 gap: 24px;
2093}
2094
2095.report-command-card {
2096 text-align: left;
2097 min-height: 340px;
2098 border: 1px solid rgba(226, 232, 240, 0.94);
2099 border-radius: 32px;
2100 padding: 28px;
2101 background:
2102 radial-gradient(circle at 94% 8%, rgba(124, 58, 237, 0.12), transparent 28%),
2103 linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(248, 250, 252, 0.82));
2104 box-shadow: 0 26px 70px rgba(15, 23, 42, 0.1);
2105 transition:
2106 transform 0.22s ease,
2107 box-shadow 0.22s ease,
2108 border-color 0.22s ease;
2109}
2110
2111.report-command-card:hover {
2112 transform: translateY(-6px);
2113 border-color: rgba(96, 165, 250, 0.72);
2114 box-shadow: 0 34px 90px rgba(37, 99, 235, 0.14);
2115}
2116
2117.report-command-top {
2118 display: flex;
2119 align-items: center;
2120 gap: 14px;
2121}
2122
2123.report-command-icon {
2124 width: 54px;
2125 height: 54px;
2126 border-radius: 18px;
2127 display: grid;
2128 place-items: center;
2129 color: #ffffff;
2130 background: linear-gradient(135deg, #2563eb, #7c3aed);
2131 box-shadow: 0 16px 34px rgba(37, 99, 235, 0.28);
2132}
2133
2134.report-command-top span {
2135 color: #2563eb;
2136 font-size: 12px;
2137 font-weight: 950;
2138 letter-spacing: 0.12em;
2139 text-transform: uppercase;
2140}
2141
2142.report-command-card h2 {
2143 margin: 24px 0 0;
2144 color: #0f172a;
2145 font-size: 30px;
2146 letter-spacing: -0.055em;
2147}
2148
2149.report-command-card p {
2150 margin: 12px 0 0;
2151 max-width: 620px;
2152 color: #64748b;
2153 font-size: 15px;
2154 line-height: 1.65;
2155 font-weight: 650;
2156}
2157
2158.report-point-list {
2159 display: grid;
2160 gap: 10px;
2161 margin-top: 22px;
2162}
2163
2164.report-point-list div {
2165 display: flex;
2166 align-items: center;
2167 gap: 10px;
2168 color: #334155;
2169 font-size: 14px;
2170 font-weight: 800;
2171}
2172
2173.report-point-list svg {
2174 color: #22c55e;
2175 flex-shrink: 0;
2176}
2177
2178.report-command-footer {
2179 margin-top: 26px;
2180 padding-top: 20px;
2181 border-top: 1px solid rgba(226, 232, 240, 0.9);
2182 display: flex;
2183 justify-content: space-between;
2184 align-items: center;
2185 color: #2563eb;
2186 font-weight: 950;
2187}
2188
2189.report-command-footer span {
2190 display: inline-flex;
2191 align-items: center;
2192 gap: 8px;
2193}
2194
2195.reports-empty-panel {
2196 min-height: 170px;
2197 display: flex;
2198 align-items: center;
2199 gap: 20px;
2200 border-radius: 32px;
2201 padding: 28px;
2202 background: rgba(255, 255, 255, 0.84);
2203 border: 1px solid rgba(226, 232, 240, 0.94);
2204 box-shadow: 0 26px 70px rgba(15, 23, 42, 0.1);
2205}
2206
2207.reports-empty-icon {
2208 width: 62px;
2209 height: 62px;
2210 border-radius: 22px;
2211 display: grid;
2212 place-items: center;
2213 color: #ffffff;
2214 background: linear-gradient(135deg, #2563eb, #7c3aed);
2215 box-shadow: 0 16px 34px rgba(37, 99, 235, 0.28);
2216 flex-shrink: 0;
2217}
2218
2219.reports-empty-panel h2 {
2220 margin: 0;
2221 color: #0f172a;
2222 font-size: 24px;
2223 letter-spacing: -0.045em;
2224}
2225
2226.reports-empty-panel p {
2227 max-width: 720px;
2228 margin: 8px 0 0;
2229 color: #64748b;
2230 line-height: 1.65;
2231 font-weight: 650;
2232}
2233
2234.report-output-panel {
2235 margin-top: 0;
2236}
2237
2238.report-table-header {
2239 display: flex;
2240 align-items: flex-start;
2241 justify-content: space-between;
2242 gap: 22px;
2243}
2244
2245.report-row-count {
2246 min-width: 120px;
2247 border-radius: 22px;
2248 padding: 14px 16px;
2249 background: #eff6ff;
2250 border: 1px solid #dbeafe;
2251 text-align: center;
2252}
2253
2254.report-row-count strong {
2255 display: block;
2256 color: #2563eb;
2257 font-size: 28px;
2258 line-height: 1;
2259}
2260
2261.report-row-count span {
2262 display: block;
2263 margin-top: 5px;
2264 color: #64748b;
2265 font-size: 12px;
2266 font-weight: 850;
2267}
2268
2269.spin-icon {
2270 animation: spin 0.8s linear infinite;
2271}
2272
2273@keyframes spin {
2274 to {
2275 transform: rotate(360deg);
2276 }
2277}
2278
2279@media (max-width: 1200px) {
2280 .reports-hero-pro {
2281 grid-template-columns: 1fr;
2282 }
2283
2284 .reports-hero-metrics {
2285 grid-template-columns: repeat(3, 1fr);
2286 }
2287
2288 .reports-command-grid {
2289 grid-template-columns: 1fr;
2290 }
2291}
2292
2293@media (max-width: 760px) {
2294 .reports-hero-metrics {
2295 grid-template-columns: 1fr;
2296 }
2297
2298 .reports-empty-panel,
2299 .report-table-header {
2300 flex-direction: column;
2301 }
2302
2303 .report-row-count {
2304 width: 100%;
2305 }
2306}
Note: See TracBrowser for help on using the repository browser.