seaverse-auth-sdk 0.1.0

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,944 @@
1
+ /* ============================================================
2
+ Auth Modal - SeaVerse SDK
3
+ Split Screen Design with Mesh Gradient & Glassmorphism
4
+ ============================================================ */
5
+
6
+ :root {
7
+ --font-display: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
8
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
9
+ --color-neon-green: #10b981;
10
+ --color-text-primary: #ffffff;
11
+ --color-text-secondary: #a1a1aa;
12
+ --color-text-tertiary: #71717a;
13
+ --gradient-neon: linear-gradient(135deg, #10b981 0%, #06b6d4 100%);
14
+ }
15
+
16
+ .auth-modal {
17
+ position: fixed;
18
+ inset: 0;
19
+ z-index: 9999;
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ padding: 20px;
24
+ animation: modalFadeIn 0.3s ease-out;
25
+ overflow: hidden;
26
+ }
27
+
28
+ .auth-modal.hidden {
29
+ display: none;
30
+ }
31
+
32
+ @keyframes modalFadeIn {
33
+ from {
34
+ opacity: 0;
35
+ }
36
+ to {
37
+ opacity: 1;
38
+ }
39
+ }
40
+
41
+ .auth-modal-backdrop {
42
+ position: absolute;
43
+ inset: 0;
44
+ background: rgba(0, 0, 0, 0.85);
45
+ backdrop-filter: blur(8px);
46
+ -webkit-backdrop-filter: blur(8px);
47
+ }
48
+
49
+ .auth-modal-content {
50
+ position: relative;
51
+ z-index: 10;
52
+ display: grid;
53
+ grid-template-columns: 1fr 1fr;
54
+ width: 100%;
55
+ max-width: 900px;
56
+ max-height: 90vh;
57
+ background: #0d0d0d;
58
+ border: 1px solid rgba(255, 255, 255, 0.08);
59
+ border-radius: 20px;
60
+ box-shadow: 0 25px 80px rgba(0, 0, 0, 0.8);
61
+ overflow: hidden;
62
+ animation: modalSlideUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
63
+ transition: max-width 0.3s ease;
64
+ }
65
+
66
+ /* Login modal - auto width based on content */
67
+ .auth-modal-content:has(#loginForm:not(.hidden)) {
68
+ grid-template-columns: 1fr auto;
69
+ max-width: none;
70
+ width: auto;
71
+ }
72
+
73
+ .auth-modal-content:has(#loginForm:not(.hidden)) .auth-modal-right {
74
+ width: auto;
75
+ min-width: 0;
76
+ }
77
+
78
+ /* Success message modal - hide left panel */
79
+ .auth-modal-content:has(#authMessage:not(.hidden)) {
80
+ grid-template-columns: 1fr;
81
+ max-width: 480px;
82
+ }
83
+
84
+ .auth-modal-content:has(#authMessage:not(.hidden)) .auth-modal-left {
85
+ display: none;
86
+ }
87
+
88
+ @keyframes modalSlideUp {
89
+ from {
90
+ opacity: 0;
91
+ transform: translateY(30px) scale(0.96);
92
+ }
93
+ to {
94
+ opacity: 1;
95
+ transform: translateY(0) scale(1);
96
+ }
97
+ }
98
+
99
+ /* Left Panel - Branding (Mesh Gradient & Glassmorphism) */
100
+ .auth-modal-left {
101
+ position: relative;
102
+ display: flex;
103
+ flex-direction: column;
104
+ padding: 32px;
105
+ background: #000;
106
+ overflow: hidden;
107
+ border-right: 1px solid rgba(255, 255, 255, 0.05);
108
+ }
109
+
110
+ /* Mesh Gradient Layer */
111
+ .auth-modal-left::before {
112
+ content: '';
113
+ position: absolute;
114
+ inset: -50%;
115
+ width: 200%;
116
+ height: 200%;
117
+ background:
118
+ radial-gradient(at 0% 0%, rgba(99, 102, 241, 0.3) 0px, transparent 50%),
119
+ radial-gradient(at 50% 0%, rgba(139, 92, 246, 0.3) 0px, transparent 50%),
120
+ radial-gradient(at 100% 0%, rgba(236, 72, 153, 0.3) 0px, transparent 50%),
121
+ radial-gradient(at 0% 50%, rgba(16, 185, 129, 0.3) 0px, transparent 50%),
122
+ radial-gradient(at 100% 50%, rgba(244, 63, 94, 0.3) 0px, transparent 50%),
123
+ radial-gradient(at 0% 100%, rgba(236, 72, 153, 0.3) 0px, transparent 50%),
124
+ radial-gradient(at 100% 100%, rgba(139, 92, 246, 0.3) 0px, transparent 50%);
125
+ filter: blur(80px);
126
+ animation: meshRotate 20s linear infinite;
127
+ opacity: 0.6;
128
+ }
129
+
130
+ @keyframes meshRotate {
131
+ 0% { transform: rotate(0deg); }
132
+ 100% { transform: rotate(360deg); }
133
+ }
134
+
135
+ /* Glassmorphism Overlay (Noise Texture) */
136
+ .auth-modal-left::after {
137
+ content: '';
138
+ position: absolute;
139
+ inset: 0;
140
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.05'/%3E%3C/svg%3E");
141
+ opacity: 0.4;
142
+ mix-blend-mode: overlay;
143
+ pointer-events: none;
144
+ }
145
+
146
+ .auth-modal-logo {
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 10px;
150
+ z-index: 10;
151
+ position: relative;
152
+ }
153
+
154
+ .auth-modal-logo .logo-icon {
155
+ width: 28px;
156
+ height: 28px;
157
+ filter: drop-shadow(0 0 10px rgba(16, 185, 129, 0.3));
158
+ }
159
+
160
+ .auth-modal-logo .logo-text {
161
+ font-family: var(--font-display);
162
+ font-size: 18px;
163
+ font-weight: 700;
164
+ color: #fff;
165
+ text-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
166
+ }
167
+
168
+ .auth-modal-decoration {
169
+ position: absolute;
170
+ inset: 0;
171
+ overflow: hidden;
172
+ pointer-events: none;
173
+ }
174
+
175
+ /* Breathing Light Orb */
176
+ .auth-modal-decoration .glow-orb-1 {
177
+ position: absolute;
178
+ width: 400px;
179
+ height: 400px;
180
+ top: 50%;
181
+ left: 50%;
182
+ transform: translate(-50%, -50%);
183
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.05) 0%, transparent 70%);
184
+ border-radius: 50%;
185
+ filter: blur(60px);
186
+ animation: breathe 8s ease-in-out infinite;
187
+ pointer-events: none;
188
+ }
189
+
190
+ @keyframes breathe {
191
+ 0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.5; }
192
+ 50% { transform: translate(-50%, -50%) scale(1.2); opacity: 0.8; }
193
+ }
194
+
195
+ .auth-modal-decoration .glow-orb-2 {
196
+ position: absolute;
197
+ width: 300px;
198
+ height: 300px;
199
+ top: 20%;
200
+ right: -10%;
201
+ background: radial-gradient(circle, rgba(139, 92, 246, 0.08) 0%, transparent 70%);
202
+ border-radius: 50%;
203
+ filter: blur(50px);
204
+ animation: breathe 10s ease-in-out infinite;
205
+ animation-delay: 2s;
206
+ pointer-events: none;
207
+ }
208
+
209
+ .auth-modal-branding {
210
+ margin-top: auto;
211
+ margin-bottom: 48px;
212
+ z-index: 10;
213
+ position: relative;
214
+ }
215
+
216
+ .auth-modal-branding .branding-title {
217
+ font-family: var(--font-display);
218
+ font-size: 36px;
219
+ font-weight: 700;
220
+ line-height: 1.15;
221
+ margin-bottom: 12px;
222
+ color: #ffffff;
223
+ letter-spacing: -0.02em;
224
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
225
+ }
226
+
227
+ .auth-modal-branding .branding-subtitle {
228
+ font-size: 14px;
229
+ color: rgba(255, 255, 255, 0.8);
230
+ max-width: 260px;
231
+ line-height: 1.6;
232
+ }
233
+
234
+ /* Right Panel - Forms */
235
+ .auth-modal-right {
236
+ position: relative;
237
+ display: flex;
238
+ flex-direction: column;
239
+ padding: 56px 48px 42px 48px;
240
+ background: #121212;
241
+ overflow-y: auto;
242
+ max-height: 90vh;
243
+ }
244
+
245
+ .auth-modal-right::-webkit-scrollbar {
246
+ width: 6px;
247
+ }
248
+
249
+ .auth-modal-right::-webkit-scrollbar-track {
250
+ background: transparent;
251
+ }
252
+
253
+ .auth-modal-right::-webkit-scrollbar-thumb {
254
+ background: rgba(255, 255, 255, 0.1);
255
+ border-radius: 3px;
256
+ }
257
+
258
+ .auth-modal-close {
259
+ position: absolute;
260
+ top: 16px;
261
+ right: 16px;
262
+ width: 36px;
263
+ height: 36px;
264
+ display: flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ background: transparent;
268
+ border: none;
269
+ color: rgba(255, 255, 255, 0.5);
270
+ cursor: pointer;
271
+ transition: all 0.2s ease;
272
+ z-index: 20;
273
+ border-radius: 8px;
274
+ }
275
+
276
+ .auth-modal-close:hover {
277
+ background: rgba(255, 255, 255, 0.1);
278
+ color: #ffffff;
279
+ }
280
+
281
+ .auth-form-view {
282
+ animation: formFadeIn 0.3s ease-out;
283
+ }
284
+
285
+ /* Login form - input width */
286
+ #loginForm .form-input {
287
+ width: 360px;
288
+ }
289
+
290
+ @keyframes formFadeIn {
291
+ from {
292
+ opacity: 0;
293
+ transform: translateY(10px);
294
+ }
295
+ to {
296
+ opacity: 1;
297
+ transform: translateY(0);
298
+ }
299
+ }
300
+
301
+ .auth-form-view.hidden {
302
+ display: none;
303
+ }
304
+
305
+ .auth-form-header {
306
+ margin-bottom: 28px;
307
+ text-align: center;
308
+ }
309
+
310
+ .auth-form-title {
311
+ font-family: var(--font-display);
312
+ font-size: 26px;
313
+ font-weight: 700;
314
+ margin-bottom: 8px;
315
+ color: #ffffff;
316
+ letter-spacing: -0.02em;
317
+ }
318
+
319
+ .auth-form-subtitle {
320
+ font-size: 14px;
321
+ color: var(--color-text-secondary);
322
+ }
323
+
324
+ /* Form Elements */
325
+ .auth-form {
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: 16px;
329
+ }
330
+
331
+ .form-group {
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: 6px;
335
+ }
336
+
337
+ .form-label {
338
+ font-size: 12px;
339
+ font-weight: 500;
340
+ color: var(--color-text-primary);
341
+ letter-spacing: 0.02em;
342
+ text-transform: uppercase;
343
+ opacity: 0.9;
344
+ }
345
+
346
+ .form-input {
347
+ width: 100%;
348
+ height: 40px;
349
+ padding: 0 14px;
350
+ font-family: var(--font-sans);
351
+ font-size: 14px;
352
+ color: var(--color-text-primary);
353
+ background: rgba(30, 30, 30, 0.8);
354
+ border: 1px solid rgba(255, 255, 255, 0.1);
355
+ border-radius: 8px;
356
+ outline: none;
357
+ transition: all 0.2s ease;
358
+ }
359
+
360
+ .form-input::placeholder {
361
+ color: rgba(255, 255, 255, 0.35);
362
+ }
363
+
364
+ .form-input:hover {
365
+ border-color: rgba(255, 255, 255, 0.15);
366
+ }
367
+
368
+ .form-input:focus {
369
+ border-color: #10b981;
370
+ box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.15);
371
+ background: rgba(30, 30, 30, 0.9);
372
+ }
373
+
374
+ .form-input:invalid:not(:placeholder-shown) {
375
+ border-color: #ff006e;
376
+ }
377
+
378
+ /* Password Input with Toggle */
379
+ .input-with-icon {
380
+ position: relative;
381
+ display: flex;
382
+ align-items: center;
383
+ }
384
+
385
+ .input-with-icon .form-input {
386
+ padding-right: 40px;
387
+ }
388
+
389
+ .input-icon-btn {
390
+ position: absolute;
391
+ right: 8px;
392
+ background: transparent;
393
+ border: none;
394
+ color: rgba(255, 255, 255, 0.4);
395
+ cursor: pointer;
396
+ padding: 6px;
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: center;
400
+ transition: color 0.2s ease;
401
+ border-radius: 4px;
402
+ }
403
+
404
+ .input-icon-btn:hover {
405
+ color: rgba(255, 255, 255, 0.7);
406
+ background: rgba(255, 255, 255, 0.05);
407
+ }
408
+
409
+ .input-icon-btn .hidden {
410
+ display: none;
411
+ }
412
+
413
+ /* Password Strength Indicator */
414
+ .strength-text {
415
+ font-size: 12px;
416
+ color: var(--color-text-tertiary);
417
+ font-weight: 500;
418
+ display: flex;
419
+ align-items: center;
420
+ gap: 6px;
421
+ margin-top: 4px;
422
+ }
423
+
424
+ /* Form Group Header - Label + Forgot Password */
425
+ .form-group-header {
426
+ display: flex;
427
+ align-items: center;
428
+ justify-content: space-between;
429
+ margin-bottom: 8px;
430
+ }
431
+
432
+ .form-group-header .form-label {
433
+ margin-bottom: 0;
434
+ }
435
+
436
+ /* Forgot Password Link */
437
+ .forgot-password-link {
438
+ font-size: 13px;
439
+ font-weight: 500;
440
+ color: rgba(255, 255, 255, 0.5);
441
+ text-decoration: none;
442
+ transition: all 0.25s ease;
443
+ position: relative;
444
+ }
445
+
446
+ .forgot-password-link::after {
447
+ content: '';
448
+ position: absolute;
449
+ bottom: -2px;
450
+ left: 0;
451
+ width: 0;
452
+ height: 1px;
453
+ background: #10b981;
454
+ transition: width 0.3s ease;
455
+ }
456
+
457
+ .forgot-password-link:hover {
458
+ color: #10b981;
459
+ }
460
+
461
+ .forgot-password-link:hover::after {
462
+ width: 100%;
463
+ }
464
+
465
+ /* Links */
466
+ .link-primary {
467
+ color: var(--color-neon-green);
468
+ text-decoration: none;
469
+ font-weight: 600;
470
+ transition: all 0.2s ease;
471
+ position: relative;
472
+ text-shadow: 0 0 10px rgba(0, 255, 136, 0.3);
473
+ }
474
+
475
+ .link-primary::after {
476
+ content: '';
477
+ position: absolute;
478
+ bottom: -2px;
479
+ left: 0;
480
+ width: 100%;
481
+ height: 1px;
482
+ background: var(--color-neon-green);
483
+ transform: scaleX(0);
484
+ transform-origin: right;
485
+ transition: transform 0.3s ease;
486
+ }
487
+
488
+ .link-primary:hover {
489
+ color: #00ff88;
490
+ text-shadow: 0 0 20px rgba(0, 255, 136, 0.5);
491
+ }
492
+
493
+ .link-primary:hover::after {
494
+ transform: scaleX(1);
495
+ transform-origin: left;
496
+ }
497
+
498
+ /* Buttons */
499
+ .btn-auth-primary {
500
+ width: 100%;
501
+ height: 44px;
502
+ padding: 0 24px;
503
+ font-family: var(--font-sans);
504
+ font-size: 14px;
505
+ font-weight: 600;
506
+ color: #000;
507
+ background: var(--gradient-neon);
508
+ border: none;
509
+ border-radius: 10px;
510
+ cursor: pointer;
511
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
512
+ position: relative;
513
+ overflow: hidden;
514
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.25);
515
+ display: flex;
516
+ align-items: center;
517
+ justify-content: center;
518
+ gap: 8px;
519
+ margin-top: 8px;
520
+ }
521
+
522
+ .btn-auth-primary::before {
523
+ content: '';
524
+ position: absolute;
525
+ inset: 0;
526
+ background: linear-gradient(135deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%);
527
+ opacity: 0;
528
+ transition: opacity 0.3s ease;
529
+ }
530
+
531
+ .btn-auth-primary:hover {
532
+ transform: translateY(-2px);
533
+ box-shadow: 0 8px 20px rgba(16, 185, 129, 0.35);
534
+ }
535
+
536
+ .btn-auth-primary:hover::before {
537
+ opacity: 1;
538
+ }
539
+
540
+ .btn-auth-primary:active {
541
+ transform: translateY(0);
542
+ box-shadow: 0 2px 8px rgba(16, 185, 129, 0.25);
543
+ }
544
+
545
+ .btn-auth-primary:disabled {
546
+ opacity: 0.6;
547
+ cursor: not-allowed;
548
+ transform: none;
549
+ }
550
+
551
+ .btn-auth-primary .btn-text {
552
+ position: relative;
553
+ z-index: 2;
554
+ }
555
+
556
+ .btn-auth-primary .btn-loader {
557
+ position: relative;
558
+ z-index: 2;
559
+ display: flex;
560
+ align-items: center;
561
+ justify-content: center;
562
+ }
563
+
564
+ .btn-auth-primary .btn-loader.hidden {
565
+ display: none;
566
+ }
567
+
568
+ /* Spinner */
569
+ .spinner {
570
+ width: 20px;
571
+ height: 20px;
572
+ fill: none;
573
+ stroke-width: 3;
574
+ animation: spin 0.8s linear infinite;
575
+ }
576
+
577
+ @keyframes spin {
578
+ to { transform: rotate(360deg); }
579
+ }
580
+
581
+ .spinner-track {
582
+ stroke: rgba(0, 0, 0, 0.2);
583
+ }
584
+
585
+ .spinner-circle {
586
+ stroke: #000;
587
+ stroke-dasharray: 50;
588
+ stroke-dashoffset: 50;
589
+ animation: spinDash 1.2s ease-in-out infinite;
590
+ }
591
+
592
+ @keyframes spinDash {
593
+ 0% {
594
+ stroke-dashoffset: 50;
595
+ }
596
+ 50% {
597
+ stroke-dashoffset: 12.5;
598
+ }
599
+ 100% {
600
+ stroke-dashoffset: 50;
601
+ }
602
+ }
603
+
604
+ /* Forgot Password Icon Container */
605
+ .forgot-password-icon {
606
+ position: relative;
607
+ width: 100px;
608
+ height: 100px;
609
+ margin: 0 auto 24px;
610
+ display: flex;
611
+ align-items: center;
612
+ justify-content: center;
613
+ }
614
+
615
+ .forgot-password-icon .icon-glow {
616
+ position: absolute;
617
+ inset: -10px;
618
+ background: radial-gradient(circle, rgba(16, 185, 129, 0.25) 0%, transparent 70%);
619
+ border-radius: 50%;
620
+ animation: pulseGlow 3s ease-in-out infinite;
621
+ filter: blur(15px);
622
+ }
623
+
624
+ @keyframes pulseGlow {
625
+ 0%, 100% { opacity: 0.5; transform: scale(0.95); }
626
+ 50% { opacity: 0.8; transform: scale(1.05); }
627
+ }
628
+
629
+ .forgot-password-icon .icon-lock {
630
+ position: relative;
631
+ z-index: 2;
632
+ color: #10b981;
633
+ filter: drop-shadow(0 0 10px rgba(16, 185, 129, 0.4));
634
+ animation: floatIcon 4s ease-in-out infinite;
635
+ }
636
+
637
+ @keyframes floatIcon {
638
+ 0%, 100% { transform: translateY(0); }
639
+ 50% { transform: translateY(-6px); }
640
+ }
641
+
642
+ /* Forgot Password Button */
643
+ .btn-forgot-password {
644
+ display: flex;
645
+ align-items: center;
646
+ justify-content: center;
647
+ gap: 8px;
648
+ }
649
+
650
+ .btn-forgot-password .btn-arrow {
651
+ transition: transform 0.3s ease;
652
+ }
653
+
654
+ .btn-forgot-password:hover .btn-arrow {
655
+ transform: translateX(4px);
656
+ }
657
+
658
+ /* Back to Login Link */
659
+ .auth-footer {
660
+ margin-top: 24px;
661
+ text-align: center;
662
+ }
663
+
664
+ .forgot-footer {
665
+ display: flex;
666
+ justify-content: center;
667
+ }
668
+
669
+ .back-to-login {
670
+ display: inline-flex;
671
+ align-items: center;
672
+ gap: 8px;
673
+ font-size: 14px;
674
+ font-weight: 500;
675
+ color: var(--color-text-secondary);
676
+ text-decoration: none;
677
+ transition: all 0.2s ease;
678
+ padding: 8px 12px;
679
+ border-radius: 6px;
680
+ }
681
+
682
+ .back-to-login:hover {
683
+ color: var(--color-neon-green);
684
+ background: rgba(16, 185, 129, 0.05);
685
+ }
686
+
687
+ .back-to-login svg {
688
+ transition: transform 0.3s ease;
689
+ }
690
+
691
+ .back-to-login:hover svg {
692
+ transform: translateX(-4px);
693
+ }
694
+
695
+ /* Success Message */
696
+ .auth-message-content {
697
+ display: flex;
698
+ flex-direction: column;
699
+ align-items: center;
700
+ text-align: center;
701
+ padding: 24px;
702
+ }
703
+
704
+ .message-icon {
705
+ width: 80px;
706
+ height: 80px;
707
+ display: flex;
708
+ align-items: center;
709
+ justify-content: center;
710
+ margin-bottom: 24px;
711
+ border-radius: 50%;
712
+ background: rgba(16, 185, 129, 0.1);
713
+ color: #10b981;
714
+ }
715
+
716
+ .message-icon svg {
717
+ filter: drop-shadow(0 0 10px rgba(16, 185, 129, 0.3));
718
+ animation: successPulse 2s ease-in-out infinite;
719
+ }
720
+
721
+ @keyframes successPulse {
722
+ 0%, 100% { transform: scale(1); }
723
+ 50% { transform: scale(1.05); }
724
+ }
725
+
726
+ .message-title {
727
+ font-family: var(--font-display);
728
+ font-size: 24px;
729
+ font-weight: 700;
730
+ margin-bottom: 12px;
731
+ color: #ffffff;
732
+ }
733
+
734
+ .message-text {
735
+ font-size: 14px;
736
+ color: var(--color-text-secondary);
737
+ margin-bottom: 24px;
738
+ line-height: 1.6;
739
+ }
740
+
741
+ /* Divider */
742
+ .divider {
743
+ position: relative;
744
+ text-align: center;
745
+ margin: 24px 0 20px 0;
746
+ font-size: 11px;
747
+ font-weight: 600;
748
+ color: var(--color-text-tertiary);
749
+ letter-spacing: 0.08em;
750
+ display: flex;
751
+ align-items: center;
752
+ gap: 12px;
753
+ }
754
+
755
+ .divider::before,
756
+ .divider::after {
757
+ content: '';
758
+ flex: 1;
759
+ height: 1px;
760
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
761
+ }
762
+
763
+ /* Social Buttons Grid (2 columns for Google + GitHub) */
764
+ .social-buttons-grid {
765
+ display: grid;
766
+ grid-template-columns: 1fr 1fr;
767
+ gap: 12px;
768
+ margin-bottom: 12px;
769
+ }
770
+
771
+ /* Social Button Base Styles */
772
+ .btn-social {
773
+ height: 44px;
774
+ padding: 0 16px;
775
+ font-family: var(--font-sans);
776
+ font-size: 14px;
777
+ font-weight: 500;
778
+ color: var(--color-text-primary);
779
+ background: rgba(30, 30, 30, 0.8);
780
+ border: 1px solid rgba(255, 255, 255, 0.1);
781
+ border-radius: 10px;
782
+ cursor: pointer;
783
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
784
+ display: flex;
785
+ align-items: center;
786
+ justify-content: center;
787
+ gap: 10px;
788
+ position: relative;
789
+ overflow: hidden;
790
+ }
791
+
792
+ .btn-social::before {
793
+ content: '';
794
+ position: absolute;
795
+ inset: 0;
796
+ background: linear-gradient(135deg, transparent 0%, rgba(255, 255, 255, 0.05) 50%, transparent 100%);
797
+ opacity: 0;
798
+ transition: opacity 0.3s ease;
799
+ }
800
+
801
+ .btn-social:hover {
802
+ border-color: rgba(255, 255, 255, 0.2);
803
+ background: rgba(40, 40, 40, 0.9);
804
+ transform: translateY(-2px);
805
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
806
+ }
807
+
808
+ .btn-social:hover::before {
809
+ opacity: 1;
810
+ }
811
+
812
+ .btn-social:active {
813
+ transform: translateY(0);
814
+ }
815
+
816
+ .btn-social svg {
817
+ width: 20px;
818
+ height: 20px;
819
+ flex-shrink: 0;
820
+ }
821
+
822
+ .btn-social span {
823
+ position: relative;
824
+ z-index: 2;
825
+ white-space: nowrap;
826
+ }
827
+
828
+ /* Full Width Social Button (Discord) */
829
+ .btn-social-full {
830
+ width: 100%;
831
+ height: 44px;
832
+ padding: 0 16px;
833
+ font-family: var(--font-sans);
834
+ font-size: 14px;
835
+ font-weight: 500;
836
+ color: var(--color-text-primary);
837
+ background: rgba(30, 30, 30, 0.8);
838
+ border: 1px solid rgba(255, 255, 255, 0.1);
839
+ border-radius: 10px;
840
+ cursor: pointer;
841
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
842
+ display: flex;
843
+ align-items: center;
844
+ justify-content: center;
845
+ gap: 10px;
846
+ position: relative;
847
+ overflow: hidden;
848
+ }
849
+
850
+ .btn-social-full::before {
851
+ content: '';
852
+ position: absolute;
853
+ inset: 0;
854
+ background: linear-gradient(135deg, transparent 0%, rgba(255, 255, 255, 0.05) 50%, transparent 100%);
855
+ opacity: 0;
856
+ transition: opacity 0.3s ease;
857
+ }
858
+
859
+ .btn-social-full:hover {
860
+ border-color: rgba(255, 255, 255, 0.2);
861
+ background: rgba(40, 40, 40, 0.9);
862
+ transform: translateY(-2px);
863
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
864
+ }
865
+
866
+ .btn-social-full:hover::before {
867
+ opacity: 1;
868
+ }
869
+
870
+ .btn-social-full:active {
871
+ transform: translateY(0);
872
+ }
873
+
874
+ .btn-social-full svg {
875
+ width: 20px;
876
+ height: 20px;
877
+ flex-shrink: 0;
878
+ }
879
+
880
+ .btn-social-full span {
881
+ position: relative;
882
+ z-index: 2;
883
+ }
884
+
885
+ /* Responsive Design for Modal */
886
+ @media (max-width: 768px) {
887
+ .auth-modal-content {
888
+ grid-template-columns: 1fr;
889
+ max-width: 100%;
890
+ max-height: 100vh;
891
+ border-radius: 0;
892
+ }
893
+
894
+ .auth-modal-left {
895
+ display: none;
896
+ }
897
+
898
+ .auth-modal-right {
899
+ max-height: 100vh;
900
+ padding: 24px;
901
+ }
902
+
903
+ .auth-form-title {
904
+ font-size: 22px;
905
+ }
906
+
907
+ #loginForm .form-input {
908
+ width: 100%;
909
+ }
910
+
911
+ .btn-auth-primary {
912
+ height: 48px;
913
+ font-size: 15px;
914
+ }
915
+
916
+ .social-buttons-grid {
917
+ grid-template-columns: 1fr;
918
+ gap: 10px;
919
+ }
920
+
921
+ .btn-social,
922
+ .btn-social-full {
923
+ height: 48px;
924
+ }
925
+ }
926
+
927
+ @media (max-width: 480px) {
928
+ .auth-modal {
929
+ padding: 0;
930
+ }
931
+
932
+ .auth-modal-content {
933
+ border-radius: 0;
934
+ max-height: 100vh;
935
+ }
936
+
937
+ .auth-modal-right {
938
+ padding: 20px 16px;
939
+ }
940
+
941
+ .auth-form-header {
942
+ margin-bottom: 20px;
943
+ }
944
+ }