deevoauth 1.4.5

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.
@@ -0,0 +1,1041 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
2
+
3
+ /* ================================================
4
+ DEEVO DESIGN SYSTEM — "Etheric Identity"
5
+ ================================================ */
6
+
7
+ :root {
8
+ /* Core Palette */
9
+ --primary: #c6bfff;
10
+ --primary-container: #6c5ce7;
11
+ --primary-glow: rgba(108, 92, 231, 0.15);
12
+ --secondary: #c7c3e2;
13
+ --secondary-container: #484660;
14
+ --tertiary: #c5c0ff;
15
+ --tertiary-container: #6d66c4;
16
+
17
+ /* Surfaces */
18
+ --background: #0A0A1A;
19
+ --surface: #121222;
20
+ --surface-dim: #121222;
21
+ --surface-bright: #38374a;
22
+ --surface-container-lowest: #0c0c1d;
23
+ --surface-container-low: #1a1a2b;
24
+ --surface-container: #1e1e2f;
25
+ --surface-container-high: #29283a;
26
+ --surface-container-highest: #333345;
27
+
28
+ /* On-colors */
29
+ --on-background: #e3e0f8;
30
+ --on-surface: #e3e0f8;
31
+ --on-surface-variant: #c8c4d7;
32
+ --on-primary: #2900a0;
33
+ --on-primary-container: #faf6ff;
34
+ --outline: #928ea0;
35
+ --outline-variant: #474554;
36
+
37
+ /* Feedback */
38
+ --error: #ffb4ab;
39
+ --error-container: #93000a;
40
+ --on-error: #690005;
41
+ --success: #4ECDC4;
42
+ --success-glow: rgba(78, 205, 196, 0.15);
43
+
44
+ /* Typography */
45
+ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
46
+ --font-size-xs: 0.75rem;
47
+ --font-size-sm: 0.875rem;
48
+ --font-size-md: 1rem;
49
+ --font-size-lg: 1.125rem;
50
+ --font-size-xl: 1.25rem;
51
+ --font-size-2xl: 1.5rem;
52
+ --font-size-3xl: 2rem;
53
+ --font-size-4xl: 2.5rem;
54
+ --font-size-5xl: 3.5rem;
55
+
56
+ /* Spacing */
57
+ --space-1: 0.25rem;
58
+ --space-2: 0.5rem;
59
+ --space-3: 0.75rem;
60
+ --space-4: 1rem;
61
+ --space-5: 1.25rem;
62
+ --space-6: 1.5rem;
63
+ --space-8: 2rem;
64
+ --space-10: 2.5rem;
65
+ --space-12: 3rem;
66
+ --space-16: 4rem;
67
+ --space-20: 5rem;
68
+ --space-24: 6rem;
69
+
70
+ /* Border Radius */
71
+ --radius-sm: 0.5rem;
72
+ --radius-md: 0.75rem;
73
+ --radius-lg: 1rem;
74
+ --radius-xl: 1.25rem;
75
+ --radius-2xl: 1.5rem;
76
+ --radius-full: 9999px;
77
+
78
+ /* Transitions */
79
+ --transition-fast: 150ms ease;
80
+ --transition-base: 300ms ease;
81
+ --transition-slow: 500ms ease;
82
+
83
+ /* Shadows */
84
+ --shadow-ambient: 0 0 48px rgba(227, 224, 248, 0.04);
85
+ --shadow-glow: 0 0 20px var(--primary-glow);
86
+ --shadow-card: 0 8px 32px rgba(0, 0, 0, 0.3);
87
+ }
88
+
89
+ /* ================================================
90
+ GLOBAL RESET & BASE
91
+ ================================================ */
92
+
93
+ *, *::before, *::after {
94
+ margin: 0;
95
+ padding: 0;
96
+ box-sizing: border-box;
97
+ }
98
+
99
+ html {
100
+ font-size: 16px;
101
+ scroll-behavior: smooth;
102
+ -webkit-font-smoothing: antialiased;
103
+ -moz-osx-font-smoothing: grayscale;
104
+ }
105
+
106
+ body {
107
+ font-family: var(--font-family);
108
+ background-color: var(--background);
109
+ color: var(--on-surface);
110
+ line-height: 1.6;
111
+ min-height: 100vh;
112
+ overflow-x: hidden;
113
+ }
114
+
115
+ a {
116
+ color: var(--primary);
117
+ text-decoration: none;
118
+ transition: color var(--transition-fast);
119
+ }
120
+
121
+ a:hover {
122
+ color: var(--tertiary);
123
+ }
124
+
125
+ img {
126
+ max-width: 100%;
127
+ display: block;
128
+ }
129
+
130
+ input, button, textarea, select {
131
+ font-family: inherit;
132
+ font-size: inherit;
133
+ }
134
+
135
+ /* ================================================
136
+ ANIMATED BACKGROUND
137
+ ================================================ */
138
+
139
+ .bg-animated {
140
+ position: fixed;
141
+ inset: 0;
142
+ z-index: 0;
143
+ overflow: hidden;
144
+ pointer-events: none;
145
+ }
146
+
147
+ .bg-animated::before,
148
+ .bg-animated::after {
149
+ content: '';
150
+ position: absolute;
151
+ border-radius: 50%;
152
+ filter: blur(120px);
153
+ opacity: 0.07;
154
+ animation: pulse 8s ease-in-out infinite alternate;
155
+ }
156
+
157
+ .bg-animated::before {
158
+ width: 600px;
159
+ height: 600px;
160
+ background: var(--primary-container);
161
+ top: -200px;
162
+ right: -100px;
163
+ }
164
+
165
+ .bg-animated::after {
166
+ width: 500px;
167
+ height: 500px;
168
+ background: var(--tertiary-container);
169
+ bottom: -150px;
170
+ left: -100px;
171
+ animation-delay: 4s;
172
+ }
173
+
174
+ @keyframes pulse {
175
+ 0% { transform: scale(1); opacity: 0.05; }
176
+ 100% { transform: scale(1.15); opacity: 0.1; }
177
+ }
178
+
179
+ /* ================================================
180
+ GLASS CARD
181
+ ================================================ */
182
+
183
+ .glass-card {
184
+ background: rgba(30, 30, 47, 0.6);
185
+ backdrop-filter: blur(24px);
186
+ -webkit-backdrop-filter: blur(24px);
187
+ border: 1px solid rgba(71, 69, 84, 0.15);
188
+ border-radius: var(--radius-2xl);
189
+ box-shadow: var(--shadow-card);
190
+ position: relative;
191
+ overflow: hidden;
192
+ }
193
+
194
+ .glass-card::before {
195
+ content: '';
196
+ position: absolute;
197
+ inset: 0;
198
+ background: linear-gradient(180deg, rgba(198, 191, 255, 0.03) 0%, transparent 40%);
199
+ border-radius: inherit;
200
+ pointer-events: none;
201
+ }
202
+
203
+ /* ================================================
204
+ BUTTONS
205
+ ================================================ */
206
+
207
+ .btn {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ gap: var(--space-3);
212
+ padding: var(--space-4) var(--space-8);
213
+ border: none;
214
+ border-radius: var(--radius-md);
215
+ font-weight: 600;
216
+ font-size: var(--font-size-sm);
217
+ letter-spacing: 0.03em;
218
+ cursor: pointer;
219
+ transition: all var(--transition-base);
220
+ position: relative;
221
+ overflow: hidden;
222
+ text-decoration: none;
223
+ line-height: 1.4;
224
+ }
225
+
226
+ .btn:disabled {
227
+ opacity: 0.5;
228
+ cursor: not-allowed;
229
+ }
230
+
231
+ /* Primary (Gradient) */
232
+ .btn-primary {
233
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-container) 100%);
234
+ color: var(--on-primary);
235
+ box-shadow: var(--shadow-glow);
236
+ }
237
+
238
+ .btn-primary:hover:not(:disabled) {
239
+ transform: translateY(-2px);
240
+ box-shadow: 0 0 30px var(--primary-glow), 0 8px 24px rgba(0,0,0,0.3);
241
+ }
242
+
243
+ .btn-primary:active:not(:disabled) {
244
+ transform: translateY(0);
245
+ }
246
+
247
+ /* Secondary (Ghost) */
248
+ .btn-secondary {
249
+ background: var(--surface-container-high);
250
+ color: var(--on-surface);
251
+ border: 1px solid rgba(71, 69, 84, 0.15);
252
+ }
253
+
254
+ .btn-secondary:hover:not(:disabled) {
255
+ background: var(--surface-bright);
256
+ transform: translateY(-1px);
257
+ }
258
+
259
+ /* Social Login */
260
+ .btn-social {
261
+ background: var(--surface-container-high);
262
+ color: var(--on-surface-variant);
263
+ border: 1px solid rgba(71, 69, 84, 0.15);
264
+ width: 100%;
265
+ padding: var(--space-4);
266
+ }
267
+
268
+ .btn-social:hover:not(:disabled) {
269
+ background: var(--surface-bright);
270
+ color: var(--on-surface);
271
+ }
272
+
273
+ .btn-social svg {
274
+ width: 20px;
275
+ height: 20px;
276
+ flex-shrink: 0;
277
+ }
278
+
279
+ /* Danger */
280
+ .btn-danger {
281
+ background: var(--error-container);
282
+ color: var(--error);
283
+ }
284
+
285
+ .btn-danger:hover:not(:disabled) {
286
+ opacity: 0.9;
287
+ }
288
+
289
+ /* Ghost / Link */
290
+ .btn-ghost {
291
+ background: transparent;
292
+ color: var(--on-surface-variant);
293
+ padding: var(--space-2) var(--space-4);
294
+ }
295
+
296
+ .btn-ghost:hover:not(:disabled) {
297
+ color: var(--on-surface);
298
+ background: rgba(255,255,255,0.04);
299
+ }
300
+
301
+ /* Full Width variant */
302
+ .btn-full {
303
+ width: 100%;
304
+ }
305
+
306
+ /* ================================================
307
+ FORM INPUTS
308
+ ================================================ */
309
+
310
+ .form-group {
311
+ display: flex;
312
+ flex-direction: column;
313
+ gap: var(--space-2);
314
+ }
315
+
316
+ .form-label {
317
+ font-size: var(--font-size-sm);
318
+ font-weight: 500;
319
+ color: var(--on-surface-variant);
320
+ letter-spacing: 0.01em;
321
+ }
322
+
323
+ .form-input {
324
+ width: 100%;
325
+ padding: var(--space-4);
326
+ background: var(--surface-container-highest);
327
+ border: 1px solid transparent;
328
+ border-radius: var(--radius-md);
329
+ color: var(--on-surface);
330
+ font-size: var(--font-size-md);
331
+ transition: all var(--transition-base);
332
+ outline: none;
333
+ }
334
+
335
+ .form-input::placeholder {
336
+ color: var(--outline);
337
+ }
338
+
339
+ .form-input:focus {
340
+ background: var(--surface-bright);
341
+ border-color: rgba(198, 191, 255, 0.3);
342
+ box-shadow: 0 0 0 3px rgba(108, 92, 231, 0.1);
343
+ }
344
+
345
+ .form-input:hover:not(:focus) {
346
+ background: rgba(51, 51, 69, 0.8);
347
+ }
348
+
349
+ .form-error {
350
+ font-size: var(--font-size-xs);
351
+ color: var(--error);
352
+ }
353
+
354
+ /* ================================================
355
+ DIVIDER
356
+ ================================================ */
357
+
358
+ .divider {
359
+ display: flex;
360
+ align-items: center;
361
+ gap: var(--space-4);
362
+ color: var(--outline);
363
+ font-size: var(--font-size-sm);
364
+ }
365
+
366
+ .divider::before,
367
+ .divider::after {
368
+ content: '';
369
+ flex: 1;
370
+ height: 1px;
371
+ background: rgba(71, 69, 84, 0.3);
372
+ }
373
+
374
+ /* ================================================
375
+ NAVBAR
376
+ ================================================ */
377
+
378
+ .navbar {
379
+ position: sticky;
380
+ top: 0;
381
+ z-index: 100;
382
+ background: rgba(10, 10, 26, 0.8);
383
+ backdrop-filter: blur(16px);
384
+ -webkit-backdrop-filter: blur(16px);
385
+ border-bottom: 1px solid rgba(71, 69, 84, 0.1);
386
+ padding: 0 var(--space-8);
387
+ height: 72px;
388
+ display: flex;
389
+ align-items: center;
390
+ justify-content: space-between;
391
+ }
392
+
393
+ .navbar-brand {
394
+ display: flex;
395
+ align-items: center;
396
+ gap: var(--space-3);
397
+ text-decoration: none;
398
+ color: var(--on-surface);
399
+ }
400
+
401
+ .navbar-logo {
402
+ width: 40px;
403
+ height: 40px;
404
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-container) 100%);
405
+ border-radius: var(--radius-md);
406
+ display: flex;
407
+ align-items: center;
408
+ justify-content: center;
409
+ font-weight: 700;
410
+ font-size: var(--font-size-lg);
411
+ color: var(--on-primary);
412
+ flex-shrink: 0;
413
+ }
414
+
415
+ .navbar-title {
416
+ font-size: var(--font-size-lg);
417
+ font-weight: 600;
418
+ letter-spacing: -0.02em;
419
+ }
420
+
421
+ .navbar-actions {
422
+ display: flex;
423
+ align-items: center;
424
+ gap: var(--space-3);
425
+ }
426
+
427
+ /* ================================================
428
+ USER AVATAR
429
+ ================================================ */
430
+
431
+ .avatar {
432
+ width: 40px;
433
+ height: 40px;
434
+ border-radius: var(--radius-full);
435
+ overflow: hidden;
436
+ border: 2px solid rgba(198, 191, 255, 0.2);
437
+ flex-shrink: 0;
438
+ cursor: pointer;
439
+ transition: border-color var(--transition-fast);
440
+ }
441
+
442
+ .avatar:hover {
443
+ border-color: var(--primary);
444
+ }
445
+
446
+ .avatar img {
447
+ width: 100%;
448
+ height: 100%;
449
+ object-fit: cover;
450
+ }
451
+
452
+ .avatar-placeholder {
453
+ width: 100%;
454
+ height: 100%;
455
+ background: linear-gradient(135deg, var(--primary-container), var(--tertiary-container));
456
+ display: flex;
457
+ align-items: center;
458
+ justify-content: center;
459
+ color: white;
460
+ font-weight: 600;
461
+ font-size: var(--font-size-md);
462
+ }
463
+
464
+ .avatar-lg {
465
+ width: 80px;
466
+ height: 80px;
467
+ border-width: 3px;
468
+ }
469
+
470
+ .avatar-lg .avatar-placeholder {
471
+ font-size: var(--font-size-2xl);
472
+ }
473
+
474
+ /* ================================================
475
+ CHIPS / BADGES
476
+ ================================================ */
477
+
478
+ .chip {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ gap: var(--space-1);
482
+ padding: var(--space-1) var(--space-3);
483
+ border-radius: var(--radius-full);
484
+ font-size: var(--font-size-xs);
485
+ font-weight: 500;
486
+ }
487
+
488
+ .chip-success {
489
+ background: rgba(78, 205, 196, 0.15);
490
+ color: var(--success);
491
+ }
492
+
493
+ .chip-warning {
494
+ background: rgba(255, 180, 171, 0.15);
495
+ color: var(--error);
496
+ }
497
+
498
+ .chip-info {
499
+ background: rgba(198, 191, 255, 0.15);
500
+ color: var(--primary);
501
+ }
502
+
503
+ /* ================================================
504
+ ALERT BOXES
505
+ ================================================ */
506
+
507
+ .alert {
508
+ padding: var(--space-4);
509
+ border-radius: var(--radius-md);
510
+ font-size: var(--font-size-sm);
511
+ display: flex;
512
+ align-items: flex-start;
513
+ gap: var(--space-3);
514
+ }
515
+
516
+ .alert-error {
517
+ background: rgba(147, 0, 10, 0.2);
518
+ color: var(--error);
519
+ border: 1px solid rgba(255, 180, 171, 0.1);
520
+ }
521
+
522
+ .alert-success {
523
+ background: rgba(78, 205, 196, 0.1);
524
+ color: var(--success);
525
+ border: 1px solid rgba(78, 205, 196, 0.1);
526
+ }
527
+
528
+ .alert-info {
529
+ background: rgba(108, 92, 231, 0.1);
530
+ color: var(--primary);
531
+ border: 1px solid rgba(198, 191, 255, 0.1);
532
+ }
533
+
534
+ /* ================================================
535
+ PAGE LAYOUTS
536
+ ================================================ */
537
+
538
+ .page-center {
539
+ min-height: 100vh;
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: center;
543
+ padding: var(--space-6);
544
+ position: relative;
545
+ }
546
+
547
+ .page-content {
548
+ max-width: 1200px;
549
+ margin: 0 auto;
550
+ padding: var(--space-8);
551
+ }
552
+
553
+ /* ================================================
554
+ AUTH CARD LAYOUT
555
+ ================================================ */
556
+
557
+ .auth-container {
558
+ width: 100%;
559
+ max-width: 420px;
560
+ position: relative;
561
+ z-index: 1;
562
+ }
563
+
564
+ .auth-card {
565
+ padding: var(--space-12) var(--space-10);
566
+ }
567
+
568
+ .auth-logo {
569
+ width: 56px;
570
+ height: 56px;
571
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-container) 100%);
572
+ border-radius: var(--radius-lg);
573
+ display: flex;
574
+ align-items: center;
575
+ justify-content: center;
576
+ margin: 0 auto var(--space-8);
577
+ box-shadow: var(--shadow-glow);
578
+ }
579
+
580
+ .auth-logo span {
581
+ font-size: var(--font-size-2xl);
582
+ font-weight: 700;
583
+ color: white;
584
+ }
585
+
586
+ .auth-header {
587
+ text-align: center;
588
+ margin-bottom: var(--space-10);
589
+ }
590
+
591
+ .auth-header h1 {
592
+ font-size: var(--font-size-2xl);
593
+ font-weight: 600;
594
+ letter-spacing: -0.02em;
595
+ margin-bottom: var(--space-2);
596
+ color: var(--on-surface);
597
+ }
598
+
599
+ .auth-header p {
600
+ font-size: var(--font-size-sm);
601
+ color: var(--on-surface-variant);
602
+ }
603
+
604
+ .auth-form {
605
+ display: flex;
606
+ flex-direction: column;
607
+ gap: var(--space-5);
608
+ }
609
+
610
+ .auth-footer {
611
+ text-align: center;
612
+ margin-top: var(--space-8);
613
+ font-size: var(--font-size-sm);
614
+ color: var(--on-surface-variant);
615
+ }
616
+
617
+ .auth-footer a {
618
+ font-weight: 500;
619
+ }
620
+
621
+ /* ================================================
622
+ PASSWORD STRENGTH
623
+ ================================================ */
624
+
625
+ .password-strength {
626
+ display: flex;
627
+ gap: var(--space-1);
628
+ margin-top: var(--space-1);
629
+ }
630
+
631
+ .password-strength-bar {
632
+ flex: 1;
633
+ height: 3px;
634
+ border-radius: var(--radius-full);
635
+ background: var(--surface-container-highest);
636
+ transition: background var(--transition-base);
637
+ }
638
+
639
+ .password-strength-bar.active-weak {
640
+ background: var(--error);
641
+ }
642
+
643
+ .password-strength-bar.active-medium {
644
+ background: #f0c040;
645
+ }
646
+
647
+ .password-strength-bar.active-strong {
648
+ background: var(--success);
649
+ }
650
+
651
+ /* ================================================
652
+ DASHBOARD
653
+ ================================================ */
654
+
655
+ .dashboard-grid {
656
+ display: grid;
657
+ grid-template-columns: 1fr;
658
+ gap: var(--space-6);
659
+ max-width: 800px;
660
+ margin: var(--space-8) auto;
661
+ padding: 0 var(--space-6);
662
+ }
663
+
664
+ .section-card {
665
+ padding: var(--space-8);
666
+ }
667
+
668
+ .section-title {
669
+ font-size: var(--font-size-lg);
670
+ font-weight: 600;
671
+ letter-spacing: -0.02em;
672
+ margin-bottom: var(--space-6);
673
+ color: var(--on-surface);
674
+ }
675
+
676
+ .profile-header {
677
+ display: flex;
678
+ align-items: center;
679
+ gap: var(--space-6);
680
+ margin-bottom: var(--space-6);
681
+ }
682
+
683
+ .profile-info h2 {
684
+ font-size: var(--font-size-xl);
685
+ font-weight: 600;
686
+ letter-spacing: -0.02em;
687
+ }
688
+
689
+ .profile-info p {
690
+ font-size: var(--font-size-sm);
691
+ color: var(--on-surface-variant);
692
+ }
693
+
694
+ .app-list {
695
+ display: flex;
696
+ flex-direction: column;
697
+ gap: var(--space-3);
698
+ }
699
+
700
+ .app-item {
701
+ display: flex;
702
+ align-items: center;
703
+ justify-content: space-between;
704
+ padding: var(--space-4);
705
+ background: var(--surface-container-low);
706
+ border-radius: var(--radius-md);
707
+ transition: background var(--transition-base);
708
+ }
709
+
710
+ .app-item:hover {
711
+ background: var(--surface-container);
712
+ }
713
+
714
+ .app-item-info {
715
+ display: flex;
716
+ flex-direction: column;
717
+ gap: var(--space-1);
718
+ }
719
+
720
+ .app-item-name {
721
+ font-weight: 500;
722
+ font-size: var(--font-size-md);
723
+ }
724
+
725
+ .app-item-scope {
726
+ font-size: var(--font-size-xs);
727
+ color: var(--on-surface-variant);
728
+ }
729
+
730
+ /* ================================================
731
+ CONSENT SCREEN
732
+ ================================================ */
733
+
734
+ .consent-card {
735
+ padding: var(--space-10);
736
+ max-width: 480px;
737
+ text-align: center;
738
+ }
739
+
740
+ .consent-app-icon {
741
+ width: 64px;
742
+ height: 64px;
743
+ border-radius: var(--radius-lg);
744
+ background: var(--surface-container-high);
745
+ display: flex;
746
+ align-items: center;
747
+ justify-content: center;
748
+ margin: 0 auto var(--space-6);
749
+ font-size: var(--font-size-2xl);
750
+ }
751
+
752
+ .consent-permissions {
753
+ text-align: left;
754
+ margin: var(--space-6) 0;
755
+ }
756
+
757
+ .consent-permission-item {
758
+ display: flex;
759
+ align-items: center;
760
+ gap: var(--space-3);
761
+ padding: var(--space-3) 0;
762
+ font-size: var(--font-size-sm);
763
+ color: var(--on-surface-variant);
764
+ }
765
+
766
+ .consent-permission-item svg {
767
+ color: var(--success);
768
+ flex-shrink: 0;
769
+ }
770
+
771
+ .consent-actions {
772
+ display: flex;
773
+ gap: var(--space-3);
774
+ margin-top: var(--space-6);
775
+ }
776
+
777
+ .consent-actions .btn {
778
+ flex: 1;
779
+ }
780
+
781
+ /* ================================================
782
+ HERO SECTION
783
+ ================================================ */
784
+
785
+ .hero {
786
+ min-height: calc(100vh - 72px);
787
+ display: flex;
788
+ flex-direction: column;
789
+ align-items: center;
790
+ justify-content: center;
791
+ text-align: center;
792
+ padding: var(--space-16) var(--space-8);
793
+ position: relative;
794
+ }
795
+
796
+ .hero h1 {
797
+ font-size: var(--font-size-5xl);
798
+ font-weight: 800;
799
+ letter-spacing: -0.03em;
800
+ line-height: 1.1;
801
+ margin-bottom: var(--space-6);
802
+ background: linear-gradient(135deg, var(--on-surface) 30%, var(--primary) 100%);
803
+ -webkit-background-clip: text;
804
+ -webkit-text-fill-color: transparent;
805
+ background-clip: text;
806
+ }
807
+
808
+ .hero p {
809
+ font-size: var(--font-size-lg);
810
+ color: var(--on-surface-variant);
811
+ max-width: 560px;
812
+ margin: 0 auto var(--space-10);
813
+ line-height: 1.7;
814
+ }
815
+
816
+ .hero-cta {
817
+ display: flex;
818
+ gap: var(--space-4);
819
+ justify-content: center;
820
+ flex-wrap: wrap;
821
+ }
822
+
823
+ /* ================================================
824
+ FEATURE CARDS
825
+ ================================================ */
826
+
827
+ .features {
828
+ padding: var(--space-20) var(--space-8);
829
+ max-width: 1100px;
830
+ margin: 0 auto;
831
+ }
832
+
833
+ .features-grid {
834
+ display: grid;
835
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
836
+ gap: var(--space-6);
837
+ }
838
+
839
+ .feature-card {
840
+ padding: var(--space-8);
841
+ text-align: center;
842
+ transition: transform var(--transition-base);
843
+ }
844
+
845
+ .feature-card:hover {
846
+ transform: translateY(-4px);
847
+ }
848
+
849
+ .feature-icon {
850
+ width: 56px;
851
+ height: 56px;
852
+ border-radius: var(--radius-lg);
853
+ background: rgba(108, 92, 231, 0.1);
854
+ display: flex;
855
+ align-items: center;
856
+ justify-content: center;
857
+ margin: 0 auto var(--space-5);
858
+ font-size: 24px;
859
+ }
860
+
861
+ .feature-card h3 {
862
+ font-size: var(--font-size-lg);
863
+ font-weight: 600;
864
+ letter-spacing: -0.01em;
865
+ margin-bottom: var(--space-3);
866
+ }
867
+
868
+ .feature-card p {
869
+ font-size: var(--font-size-sm);
870
+ color: var(--on-surface-variant);
871
+ line-height: 1.7;
872
+ }
873
+
874
+ /* ================================================
875
+ FOOTER
876
+ ================================================ */
877
+
878
+ .footer {
879
+ padding: var(--space-12) var(--space-8);
880
+ border-top: 1px solid rgba(71, 69, 84, 0.1);
881
+ text-align: center;
882
+ color: var(--on-surface-variant);
883
+ font-size: var(--font-size-sm);
884
+ }
885
+
886
+ .footer-brand {
887
+ display: flex;
888
+ align-items: center;
889
+ justify-content: center;
890
+ gap: var(--space-2);
891
+ margin-bottom: var(--space-4);
892
+ }
893
+
894
+ .footer-links {
895
+ display: flex;
896
+ justify-content: center;
897
+ gap: var(--space-6);
898
+ margin-bottom: var(--space-4);
899
+ }
900
+
901
+ /* ================================================
902
+ SPINNER / LOADING
903
+ ================================================ */
904
+
905
+ .spinner {
906
+ width: 20px;
907
+ height: 20px;
908
+ border: 2px solid transparent;
909
+ border-top-color: currentColor;
910
+ border-radius: 50%;
911
+ animation: spin 0.6s linear infinite;
912
+ }
913
+
914
+ @keyframes spin {
915
+ to { transform: rotate(360deg); }
916
+ }
917
+
918
+ .loading-overlay {
919
+ position: fixed;
920
+ inset: 0;
921
+ z-index: 9999;
922
+ background: var(--background);
923
+ display: flex;
924
+ align-items: center;
925
+ justify-content: center;
926
+ flex-direction: column;
927
+ gap: var(--space-4);
928
+ }
929
+
930
+ /* ================================================
931
+ USER MENU DROPDOWN
932
+ ================================================ */
933
+
934
+ .user-menu {
935
+ position: relative;
936
+ }
937
+
938
+ .user-menu-dropdown {
939
+ position: absolute;
940
+ top: calc(100% + var(--space-2));
941
+ right: 0;
942
+ min-width: 220px;
943
+ background: rgba(30, 30, 47, 0.95);
944
+ backdrop-filter: blur(16px);
945
+ -webkit-backdrop-filter: blur(16px);
946
+ border: 1px solid rgba(71, 69, 84, 0.2);
947
+ border-radius: var(--radius-lg);
948
+ padding: var(--space-2);
949
+ box-shadow: 0 16px 48px rgba(0,0,0,0.4);
950
+ opacity: 0;
951
+ visibility: hidden;
952
+ transform: translateY(-8px);
953
+ transition: all var(--transition-fast);
954
+ }
955
+
956
+ .user-menu-dropdown.open {
957
+ opacity: 1;
958
+ visibility: visible;
959
+ transform: translateY(0);
960
+ }
961
+
962
+ .user-menu-item {
963
+ display: flex;
964
+ align-items: center;
965
+ gap: var(--space-3);
966
+ padding: var(--space-3) var(--space-4);
967
+ border-radius: var(--radius-sm);
968
+ font-size: var(--font-size-sm);
969
+ color: var(--on-surface-variant);
970
+ cursor: pointer;
971
+ transition: all var(--transition-fast);
972
+ border: none;
973
+ background: none;
974
+ width: 100%;
975
+ text-align: left;
976
+ }
977
+
978
+ .user-menu-item:hover {
979
+ background: var(--surface-container-high);
980
+ color: var(--on-surface);
981
+ }
982
+
983
+ .user-menu-divider {
984
+ height: 1px;
985
+ background: rgba(71, 69, 84, 0.2);
986
+ margin: var(--space-2) 0;
987
+ }
988
+
989
+ /* ================================================
990
+ RESPONSIVE
991
+ ================================================ */
992
+
993
+ @media (max-width: 768px) {
994
+ .hero h1 {
995
+ font-size: var(--font-size-3xl);
996
+ }
997
+
998
+ .hero p {
999
+ font-size: var(--font-size-md);
1000
+ }
1001
+
1002
+ .auth-card {
1003
+ padding: var(--space-8) var(--space-6);
1004
+ }
1005
+
1006
+ .navbar {
1007
+ padding: 0 var(--space-4);
1008
+ }
1009
+
1010
+ .features-grid {
1011
+ grid-template-columns: 1fr;
1012
+ }
1013
+
1014
+ .profile-header {
1015
+ flex-direction: column;
1016
+ text-align: center;
1017
+ }
1018
+
1019
+ .consent-actions {
1020
+ flex-direction: column;
1021
+ }
1022
+
1023
+ .hero-cta {
1024
+ flex-direction: column;
1025
+ align-items: center;
1026
+ }
1027
+ }
1028
+
1029
+ @media (max-width: 480px) {
1030
+ .hero h1 {
1031
+ font-size: var(--font-size-2xl);
1032
+ }
1033
+
1034
+ .auth-card {
1035
+ padding: var(--space-6) var(--space-4);
1036
+ }
1037
+
1038
+ .section-card {
1039
+ padding: var(--space-5);
1040
+ }
1041
+ }