@insforge/nextjs 0.4.0 → 0.6.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.
package/src/styles.css CHANGED
@@ -1,551 +1,737 @@
1
- /**
2
- * InsForge Next.js Component Library Styles
3
- * A standalone CSS file for auth components - no Tailwind required!
4
- */
5
-
6
- /* Font Face Declaration */
7
- @font-face {
8
- font-family: 'Manrope';
9
- src: url('./fonts/Manrope-VariableFont_wght.ttf') format('truetype');
10
- font-weight: 100 900;
11
- font-style: normal;
12
- font-display: swap;
13
- }
14
-
15
- /* CSS Variables */
16
- :root {
17
- --font-manrope: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
18
- }
19
-
20
- /* Reset and Base Styles */
21
- .insforge-auth-container * {
22
- box-sizing: border-box;
23
- }
24
-
25
- /* Main Container - App handles layout, we just provide the card */
26
- .insforge-auth-container {
27
- width: 100%;
28
- max-width: 400px;
29
- background: white;
30
- }
31
-
32
- .insforge-branding {
33
- padding: 8px 8px 16px 8px;
34
- display: flex;
35
- flex-direction: row;
36
- justify-content: center;
37
- align-items: center;
38
- gap: 4px;
39
- }
40
-
41
- .insforge-branding-text {
42
- color: var(--black, #000);
43
- font-family: var(--font-manrope);
44
- font-size: 12px;
45
- font-style: normal;
46
- font-weight: 400;
47
- line-height: normal;
48
- }
49
-
50
- /* Form Card */
51
- .insforge-auth-card {
52
- width: 100%;
53
- border-radius: 12px;
54
- box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.25);
55
- }
56
-
57
- .insforge-auth-content {
58
- padding: 24px 24px 40px 24px;
59
- display: flex;
60
- flex-direction: column;
61
- justify-content: center;
62
- align-items: stretch;
63
- gap: 24px;
64
- }
65
-
66
- /* Header */
67
- .insforge-auth-header {
68
- display: flex;
69
- flex-direction: column;
70
- justify-content: start;
71
- align-items: start;
72
- gap: 8px;
73
- }
74
-
75
- .insforge-auth-title {
76
- color: #000;
77
- font-family: Inter;
78
- font-size: 32px;
79
- font-style: normal;
80
- font-weight: 400;
81
- line-height: 48px;
82
- }
83
-
84
- .insforge-auth-subtitle {
85
- color: #828282;
86
- font-family: Inter;
87
- font-size: 14px;
88
- font-style: normal;
89
- font-weight: 400;
90
- line-height: 24px;
91
- }
92
-
93
- /* Error Banner */
94
- .insforge-error-banner {
95
- display: flex;
96
- align-items: center;
97
- gap: 0.75rem;
98
- padding: 1rem;
99
- margin-bottom: 1.5rem;
100
- background-color: #fef2f2;
101
- border: 1px solid #fecaca;
102
- border-radius: 0.5rem;
103
- color: #dc2626;
104
- font-size: 0.875rem;
105
- line-height: 1.25rem;
106
- }
107
-
108
- .insforge-error-icon {
109
- flex-shrink: 0;
110
- width: 1.25rem;
111
- height: 1.25rem;
112
- }
113
-
114
- /* Form Elements */
115
- .insforge-form {
116
- display: flex;
117
- flex-direction: column;
118
- justify-content: center;
119
- align-items: stretch;
120
- gap: 24px;
121
- }
122
-
123
- .insforge-form-group {
124
- display: flex;
125
- flex-direction: column;
126
- justify-content: center;
127
- align-items: stretch;
128
- gap: 4px;
129
- }
130
-
131
- .insforge-form-label-row {
132
- display: flex;
133
- justify-content: space-between;
134
- align-items: center;
135
- }
136
-
137
- .insforge-form-label {
138
- color: #000;
139
- font-family: Inter;
140
- font-size: 14px;
141
- font-style: normal;
142
- font-weight: 400;
143
- line-height: 24px;
144
- }
145
-
146
- .insforge-form-link {
147
- color: #828282;
148
- text-align: right;
149
- font-family: Inter;
150
- font-size: 14px;
151
- font-style: normal;
152
- font-weight: 400;
153
- line-height: 24px;
154
- }
155
-
156
- .insforge-form-link:hover {
157
- color: #828282;
158
- text-decoration: underline;
159
- }
160
-
161
- /* Input Container for Password (with icon) */
162
- .insforge-input-wrapper {
163
- position: relative;
164
- }
165
-
166
- .insforge-input {
167
- width: 100%;
168
- display: flex;
169
- padding: 8px 8px 10px 12px;
170
- align-items: center;
171
- gap: 8px;
172
- align-self: stretch;
173
- border-radius: 4px;
174
- border: 1px solid #BCBCBC;
175
- background: #FFF;
176
- font-family: Inter;
177
- font-size: 16px;
178
- font-style: normal;
179
- font-weight: 400;
180
- line-height: 20px;
181
- }
182
-
183
- .insforge-input::placeholder {
184
- color: #A6A6A6;
185
- }
186
-
187
- .insforge-input:focus {
188
- outline: none;
189
- }
190
-
191
- .insforge-input-with-icon {
192
- padding-right: 3rem;
193
- }
194
-
195
- .insforge-input-icon-btn {
196
- position: absolute;
197
- right: 8px;
198
- top: 50%;
199
- transform: translateY(-50%);
200
- background: transparent;
201
- border: none;
202
- color: #A6A6A6;
203
- cursor: pointer;
204
- transition: color 0.2s;
205
- display: flex;
206
- align-items: center;
207
- justify-content: center;
208
- }
209
-
210
- .insforge-input-icon-btn:hover {
211
- color: #6b7280;
212
- }
213
-
214
- /* Primary Button */
215
- .insforge-btn-primary {
216
- border-radius: 4px;
217
- background: #000;
218
- width: 100%;
219
- display: flex;
220
- padding: 12px 16px;
221
- justify-content: center;
222
- align-items: center;
223
- gap: 10px;
224
- align-self: stretch;
225
- color: #FFF;
226
- font-family: Manrope;
227
- font-size: 16px;
228
- font-style: normal;
229
- font-weight: 600;
230
- line-height: normal;
231
- border: none;
232
- cursor: pointer;
233
- }
234
-
235
- .insforge-btn-primary:hover {
236
- background: #303030;
237
- }
238
-
239
- .insforge-btn-primary:disabled {
240
- opacity: 0.5;
241
- cursor: not-allowed;
242
- }
243
-
244
- .insforge-btn-primary .insforge-btn-loader {
245
- display: none;
246
- animation: insforge-spin 1s linear infinite;
247
- }
248
-
249
- .insforge-btn-primary[data-loading] .insforge-btn-loader {
250
- display: block;
251
- }
252
-
253
- /* Text Link Section */
254
- .insforge-text-center {
255
- text-align: center;
256
- margin: -12px 0 0 0;
257
- color: #828282;
258
- font-family: Inter;
259
- font-size: 14px;
260
- font-style: normal;
261
- font-weight: 400;
262
- line-height: 24px;
263
- }
264
-
265
- .insforge-link-primary {
266
- color: #2563EB;
267
- font-family: Inter;
268
- font-size: 14px;
269
- font-style: normal;
270
- font-weight: 400;
271
- line-height: 24px;
272
- }
273
-
274
- .insforge-link-primary:hover {
275
- text-decoration: underline;
276
- }
277
-
278
- /* Divider */
279
- .insforge-divider {
280
- display: flex;
281
- justify-content: center;
282
- align-items: center;
283
- gap: 24px;
284
- align-self: stretch;
285
- }
286
-
287
- .insforge-divider::before,
288
- .insforge-divider::after {
289
- content: '';
290
- flex: 1;
291
- height: 1px;
292
- background: #C6C6C6;
293
- }
294
-
295
- .insforge-divider-text {
296
- color: #C6C6C6;
297
- font-family: Manrope;
298
- font-size: 14px;
299
- font-style: normal;
300
- font-weight: 600;
301
- line-height: normal;
302
- }
303
-
304
- /* OAuth Section */
305
- .insforge-oauth-container {
306
- display: flex;
307
- flex-direction: column;
308
- align-items: stretch;
309
- gap: 12px;
310
- }
311
-
312
- /* OAuth Button */
313
- .insforge-oauth-btn {
314
- display: flex;
315
- height: 36px;
316
- padding: 8px 12px;
317
- flex-direction: row;
318
- justify-content: center;
319
- align-items: center;
320
- gap: 12px;
321
- border-radius: 6px;
322
- border: 1px solid #E4E4E7;
323
- background: #FFF;
324
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.10);
325
- color: #09090B;
326
- text-align: center;
327
- font-family: Inter;
328
- font-size: 14px;
329
- font-style: normal;
330
- font-weight: 500;
331
- line-height: 20px;
332
- cursor: pointer;
333
- }
334
-
335
- .insforge-oauth-btn:hover {
336
- background: #f9fafb;
337
- border-color: #9ca3af;
338
- }
339
-
340
- .insforge-oauth-btn:disabled {
341
- opacity: 0.6;
342
- cursor: not-allowed;
343
- }
344
-
345
- .insforge-oauth-icon {
346
- display: flex;
347
- align-items: center;
348
- justify-content: center;
349
- flex-shrink: 0;
350
- }
351
-
352
- .insforge-oauth-loader {
353
- display: none;
354
- animation: insforge-spin 1s linear infinite;
355
- }
356
-
357
- .insforge-oauth-btn[data-loading] .insforge-oauth-icon {
358
- display: none;
359
- }
360
-
361
- .insforge-oauth-btn[data-loading] .insforge-oauth-loader {
362
- display: block;
363
- }
364
-
365
- /* Spin Animation */
366
- @keyframes insforge-spin {
367
- from {
368
- transform: rotate(0deg);
369
- }
370
- to {
371
- transform: rotate(360deg);
372
- }
373
- }
374
-
375
- /* UserButton Styles */
376
- .insforge-user-button-container {
377
- position: relative;
378
- display: inline-block;
379
- }
380
-
381
- .insforge-user-button {
382
- padding: 0.25rem;
383
- background: transparent;
384
- border: none;
385
- border-radius: 9999px;
386
- cursor: pointer;
387
- transition: all 0.2s;
388
- display: flex;
389
- align-items: center;
390
- justify-content: center;
391
- gap: 0.5rem;
392
- }
393
-
394
- .insforge-user-button:hover {
395
- background: rgba(0, 0, 0, 0.05);
396
- }
397
-
398
- .insforge-user-button-detailed {
399
- border-radius: 0.5rem;
400
- padding: 0.5rem;
401
- }
402
-
403
- .insforge-user-button-info {
404
- display: flex;
405
- flex-direction: column;
406
- align-items: flex-start;
407
- gap: 0.125rem;
408
- }
409
-
410
- .insforge-user-button-name {
411
- font-size: 0.875rem;
412
- font-weight: 600;
413
- color: #111827;
414
- line-height: 1.25rem;
415
- text-align: left;
416
- }
417
-
418
- .insforge-user-button-email {
419
- font-size: 0.75rem;
420
- color: #6b7280;
421
- line-height: 1rem;
422
- text-align: left;
423
- }
424
-
425
- .insforge-user-avatar {
426
- width: 2.5rem;
427
- height: 2.5rem;
428
- border-radius: 9999px;
429
- object-fit: cover;
430
- }
431
-
432
- .insforge-user-avatar-placeholder {
433
- display: flex;
434
- align-items: center;
435
- justify-content: center;
436
- width: 2.5rem;
437
- height: 2.5rem;
438
- background: #3b82f6;
439
- color: white;
440
- font-weight: 600;
441
- font-size: 0.875rem;
442
- border-radius: 9999px;
443
- }
444
-
445
- .insforge-user-dropdown {
446
- position: absolute;
447
- top: 100%;
448
- right: 0;
449
- margin-top: 0.5rem;
450
- min-width: 10rem;
451
- background: white;
452
- border: 1px solid #e5e7eb;
453
- border-radius: 0.5rem;
454
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
455
- z-index: 50;
456
- overflow: hidden;
457
- padding: 0.25rem;
458
- }
459
-
460
- .insforge-sign-out-button {
461
- display: flex;
462
- align-items: center;
463
- justify-content: flex-start;
464
- gap: 0.5rem;
465
- width: 100%;
466
- padding: 0.5rem 0.75rem;
467
- font-size: 0.875rem;
468
- font-family: inherit;
469
- color: #dc2626;
470
- background: transparent;
471
- border: none;
472
- border-radius: 0.375rem;
473
- cursor: pointer;
474
- transition: background 0.2s;
475
- text-align: left;
476
- }
477
-
478
- .insforge-sign-out-button:hover {
479
- background: #fef2f2;
480
- }
481
-
482
- /* Loading State */
483
- .insforge-loading {
484
- display: flex;
485
- justify-content: center;
486
- align-items: center;
487
- padding: 2rem;
488
- color: #6b7280;
489
- font-size: 0.875rem;
490
- }
491
-
492
- /* Password Strength Indicator */
493
- .insforge-password-strength {
494
- display: flex;
495
- flex-direction: column;
496
- gap: 0.25rem;
497
- margin-top: 0.5rem;
498
- }
499
-
500
- .insforge-password-requirement {
501
- height: 1.5rem;
502
- display: flex;
503
- align-items: center;
504
- gap: 0.25rem;
505
- }
506
-
507
- .insforge-password-check {
508
- width: 1.25rem;
509
- height: 1.25rem;
510
- border-radius: 9999px;
511
- display: flex;
512
- border-width: 2px;
513
- border-style: solid;
514
- align-items: center;
515
- justify-content: center;
516
- transition: all 0.2s ease-in-out;
517
- background-color: transparent;
518
- border-color: #a3a3a3;
519
- flex-shrink: 0;
520
- }
521
-
522
- .insforge-password-check-valid {
523
- background-color: #22c55e;
524
- border-color: transparent;
525
- }
526
-
527
- .insforge-password-check-icon {
528
- color: #fff;
529
- stroke-width: 3;
530
- }
531
-
532
- .insforge-password-requirement-label {
533
- color:#000;
534
- font-family: Inter;
535
- font-size: 14px;
536
- font-style: normal;
537
- font-weight: 400;
538
- line-height: 24px;
539
- }
540
-
541
- /* Responsive adjustments */
542
- @media (max-width: 640px) {
543
- .insforge-auth-card {
544
- padding: 2rem 1.5rem;
545
- }
546
-
547
- .insforge-auth-title {
548
- font-size: 1.75rem;
549
- }
550
- }
551
-
1
+ /**
2
+ * InsForge Next.js Component Library Styles
3
+ * A standalone CSS file for auth components - no Tailwind required!
4
+ */
5
+
6
+ /* Font Face Declaration */
7
+ @font-face {
8
+ font-family: 'Manrope';
9
+ src: url('./fonts/Manrope-VariableFont_wght.ttf') format('truetype');
10
+ font-weight: 100 900;
11
+ font-style: normal;
12
+ font-display: swap;
13
+ }
14
+
15
+ /* CSS Variables */
16
+ :root {
17
+ --font-manrope: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
18
+ }
19
+
20
+ /* Reset and Base Styles */
21
+ .insforge-auth-container * {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ /* Main Container - App handles layout, we just provide the card */
26
+ .insforge-auth-container {
27
+ width: 100%;
28
+ max-width: 400px;
29
+ background: white;
30
+ }
31
+
32
+ .insforge-branding {
33
+ background: #FAFAFA;
34
+ padding: 8px 8px 16px 8px;
35
+ display: flex;
36
+ flex-direction: row;
37
+ justify-content: center;
38
+ align-items: center;
39
+ gap: 4px;
40
+ }
41
+
42
+ .insforge-branding-text {
43
+ color: #000;
44
+ font-family: var(--font-manrope);
45
+ font-size: 12px;
46
+ font-style: normal;
47
+ font-weight: 400;
48
+ line-height: normal;
49
+ }
50
+
51
+ /* Form Card */
52
+ .insforge-auth-card {
53
+ width: 100%;
54
+ border-radius: 12px;
55
+ overflow: hidden;
56
+ box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.25);
57
+ }
58
+
59
+ .insforge-auth-content {
60
+ padding: 24px;
61
+ display: flex;
62
+ flex-direction: column;
63
+ justify-content: center;
64
+ align-items: stretch;
65
+ gap: 24px;
66
+ }
67
+
68
+ /* Header */
69
+ .insforge-auth-header {
70
+ display: flex;
71
+ flex-direction: column;
72
+ justify-content: start;
73
+ align-items: start;
74
+ gap: 8px;
75
+ }
76
+
77
+ .insforge-auth-title {
78
+ color: #000;
79
+ font-family: Inter;
80
+ font-size: 24px;
81
+ font-style: normal;
82
+ font-weight: 600;
83
+ line-height: 32px; /* 133.333% */
84
+ }
85
+
86
+ .insforge-auth-subtitle {
87
+ color: #828282;
88
+ font-family: Inter;
89
+ font-size: 14px;
90
+ font-style: normal;
91
+ font-weight: 400;
92
+ line-height: 24px; /* 171.429% */
93
+ }
94
+
95
+ /* Error Banner */
96
+ .insforge-error-banner {
97
+ display: flex;
98
+ padding: 8px 8px 8px 12px;
99
+ margin-bottom: 16px;
100
+ align-items: center;
101
+ gap: 8px;
102
+ align-self: stretch;
103
+ border-radius: 4px;
104
+ border: 2px solid #DC2626;
105
+ background: #FEF2F2;
106
+ color: #DC2626;
107
+ font-family: Inter;
108
+ font-size: 14px;
109
+ font-style: normal;
110
+ font-weight: 400;
111
+ line-height: 20px; /* 142.857% */
112
+ }
113
+
114
+ .insforge-error-icon {
115
+ color: #EF4444;
116
+ flex-shrink: 0;
117
+ width: 24px;
118
+ height: 24px;
119
+ }
120
+
121
+ /* Form Elements */
122
+ .insforge-form {
123
+ display: flex;
124
+ flex-direction: column;
125
+ justify-content: center;
126
+ align-items: stretch;
127
+ gap: 24px;
128
+ }
129
+
130
+ .insforge-form-group {
131
+ display: flex;
132
+ flex-direction: column;
133
+ justify-content: center;
134
+ align-items: stretch;
135
+ gap: 4px;
136
+ }
137
+
138
+ .insforge-form-label-row {
139
+ display: flex;
140
+ justify-content: space-between;
141
+ align-items: center;
142
+ }
143
+
144
+ .insforge-form-label {
145
+ color: #000;
146
+ font-family: Inter;
147
+ font-size: 14px;
148
+ font-style: normal;
149
+ font-weight: 400;
150
+ line-height: 24px;
151
+ }
152
+
153
+ .insforge-form-link {
154
+ color: #828282;
155
+ text-align: right;
156
+ font-family: Inter;
157
+ font-size: 14px;
158
+ font-style: normal;
159
+ font-weight: 400;
160
+ line-height: 24px;
161
+ }
162
+
163
+ .insforge-form-link:hover {
164
+ color: #828282;
165
+ text-decoration: underline;
166
+ }
167
+
168
+ /* Input Container for Password (with icon) */
169
+ .insforge-input-wrapper {
170
+ position: relative;
171
+ }
172
+
173
+ .insforge-input {
174
+ width: 100%;
175
+ display: flex;
176
+ padding: 8px 8px 10px 12px;
177
+ align-items: center;
178
+ gap: 8px;
179
+ align-self: stretch;
180
+ border-radius: 4px;
181
+ border: 1px solid #BCBCBC;
182
+ background: #FFF;
183
+ font-family: Inter;
184
+ font-size: 16px;
185
+ font-style: normal;
186
+ font-weight: 400;
187
+ line-height: 20px;
188
+ }
189
+
190
+ .insforge-input::placeholder {
191
+ color: #A6A6A6;
192
+ }
193
+
194
+ .insforge-input:focus {
195
+ outline: none;
196
+ }
197
+
198
+ .insforge-input-with-icon {
199
+ padding-right: 3rem;
200
+ }
201
+
202
+ .insforge-input-icon-btn {
203
+ position: absolute;
204
+ right: 8px;
205
+ top: 50%;
206
+ transform: translateY(-50%);
207
+ background: transparent;
208
+ border: none;
209
+ color: #A6A6A6;
210
+ cursor: pointer;
211
+ transition: color 0.2s;
212
+ display: flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ }
216
+
217
+ .insforge-input-icon-btn:hover {
218
+ color: #6b7280;
219
+ }
220
+
221
+ /* Primary Button */
222
+ .insforge-btn-primary {
223
+ border-radius: 4px;
224
+ background: #000;
225
+ width: 100%;
226
+ display: flex;
227
+ margin: 16px 0 0 0;
228
+ padding: 8px 16px;
229
+ justify-content: center;
230
+ align-items: center;
231
+ gap: 10px;
232
+ align-self: stretch;
233
+ color: #FFF;
234
+ font-family: Manrope;
235
+ font-size: 16px;
236
+ font-style: normal;
237
+ font-weight: 600;
238
+ line-height: normal;
239
+ border: none;
240
+ cursor: pointer;
241
+ }
242
+
243
+ .insforge-btn-primary:hover {
244
+ background: #303030;
245
+ }
246
+
247
+ .insforge-btn-primary:disabled {
248
+ opacity: 0.5;
249
+ cursor: not-allowed;
250
+ }
251
+
252
+ .insforge-btn-primary .insforge-btn-loader {
253
+ display: none;
254
+ animation: insforge-spin 1s linear infinite;
255
+ }
256
+
257
+ .insforge-btn-primary[data-loading] .insforge-btn-loader {
258
+ display: block;
259
+ }
260
+
261
+ .insforge-btn-primary .insforge-btn-check {
262
+ display: none;
263
+ }
264
+
265
+ .insforge-btn-primary[data-confirmed] .insforge-btn-check {
266
+ display: block;
267
+ }
268
+
269
+ /* Text Link Section */
270
+ .insforge-text-center {
271
+ text-align: center;
272
+ color: #828282;
273
+ font-family: Inter;
274
+ font-size: 14px;
275
+ font-style: normal;
276
+ font-weight: 400;
277
+ line-height: 24px;
278
+ }
279
+
280
+ .insforge-link-primary {
281
+ color: #000;
282
+ font-family: Inter;
283
+ font-size: 14px;
284
+ font-style: normal;
285
+ font-weight: 500;
286
+ line-height: 24px;
287
+ }
288
+
289
+ /* Divider */
290
+ .insforge-divider {
291
+ display: flex;
292
+ justify-content: center;
293
+ align-items: center;
294
+ gap: 24px;
295
+ align-self: stretch;
296
+ }
297
+
298
+ .insforge-divider::before,
299
+ .insforge-divider::after {
300
+ content: '';
301
+ flex: 1;
302
+ height: 1px;
303
+ background: #C6C6C6;
304
+ }
305
+
306
+ .insforge-divider-text {
307
+ color: #C6C6C6;
308
+ font-family: Manrope;
309
+ font-size: 14px;
310
+ font-style: normal;
311
+ font-weight: 600;
312
+ line-height: normal;
313
+ }
314
+
315
+ /* OAuth Section */
316
+ .insforge-oauth-container {
317
+ display: grid;
318
+ gap: 12px;
319
+ width: 100%;
320
+ }
321
+
322
+ /* ============================================================================
323
+ SMART OAUTH GRID LAYOUT SYSTEM
324
+ Pattern: 1→1x1, 2→1x2, 3→1x3, 4→2x2, 5+→auto (3 per row, last row centered)
325
+ ============================================================================ */
326
+
327
+ /* 1 provider: single column, full width - displays "Continue with Provider" */
328
+ .insforge-oauth-container[data-provider-count="1"] {
329
+ grid-template-columns: 1fr;
330
+ }
331
+
332
+ /* 2 providers: two columns - displays "Provider" */
333
+ .insforge-oauth-container[data-provider-count="2"] {
334
+ grid-template-columns: repeat(2, 1fr);
335
+ }
336
+
337
+ /* 3 providers: three columns - icon only */
338
+ .insforge-oauth-container[data-provider-count="3"] {
339
+ grid-template-columns: repeat(3, 1fr);
340
+ }
341
+
342
+ /* 4 providers: 2x2 grid - displays "Provider" */
343
+ .insforge-oauth-container[data-provider-count="4"] {
344
+ grid-template-columns: repeat(2, 1fr);
345
+ }
346
+
347
+ /* 5+ providers: Universal 6-column grid system
348
+ - Grid columns managed by OAuthProviderList component via inline styles
349
+ - This provides precise control over button positioning */
350
+ .insforge-oauth-container:not([data-provider-count="1"]):not([data-provider-count="2"]):not([data-provider-count="3"]):not([data-provider-count="4"]) {
351
+ grid-template-columns: repeat(6, 1fr);
352
+ }
353
+
354
+ /* OAuth Button */
355
+ .insforge-oauth-btn {
356
+ display: flex;
357
+ width: 100%;
358
+ height: 36px;
359
+ padding: 8px 12px;
360
+ flex-direction: row;
361
+ justify-content: center;
362
+ align-items: center;
363
+ gap: 12px;
364
+ border-radius: 6px;
365
+ border: 1px solid #E4E4E7;
366
+ background: #FFF;
367
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.10);
368
+ color: #09090B;
369
+ text-align: center;
370
+ font-family: Inter;
371
+ font-size: 14px;
372
+ font-style: normal;
373
+ font-weight: 500;
374
+ line-height: 20px;
375
+ cursor: pointer;
376
+ transition: all 0.2s ease;
377
+ }
378
+
379
+ /* Full mode: show icon + "Continue with Provider" */
380
+ .insforge-oauth-btn[data-display-mode="full"] {
381
+ justify-content: center;
382
+ }
383
+
384
+ /* Short mode: show icon + "Provider" */
385
+ .insforge-oauth-btn[data-display-mode="short"] {
386
+ justify-content: center;
387
+ padding: 8px;
388
+ gap: 8px;
389
+ }
390
+
391
+ /* Icon only mode: show only icon */
392
+ .insforge-oauth-btn[data-display-mode="icon"] {
393
+ justify-content: center;
394
+ gap: 0;
395
+ }
396
+
397
+ .insforge-oauth-btn[data-display-mode="icon"] .insforge-oauth-icon {
398
+ display: flex;
399
+ align-items: center;
400
+ justify-content: center;
401
+ }
402
+
403
+ .insforge-oauth-btn:hover {
404
+ background: #f9fafb;
405
+ border-color: #9ca3af;
406
+ }
407
+
408
+ .insforge-oauth-btn:disabled {
409
+ opacity: 0.6;
410
+ cursor: not-allowed;
411
+ }
412
+
413
+ .insforge-oauth-icon {
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ flex-shrink: 0;
418
+ }
419
+
420
+ .insforge-oauth-loader {
421
+ display: none;
422
+ animation: insforge-spin 1s linear infinite;
423
+ }
424
+
425
+ .insforge-oauth-btn[data-loading] .insforge-oauth-icon {
426
+ display: none;
427
+ }
428
+
429
+ .insforge-oauth-btn[data-loading] .insforge-oauth-loader {
430
+ display: block;
431
+ }
432
+
433
+ /* Spin Animation */
434
+ @keyframes insforge-spin {
435
+ from {
436
+ transform: rotate(0deg);
437
+ }
438
+ to {
439
+ transform: rotate(360deg);
440
+ }
441
+ }
442
+
443
+ /* UserButton Styles */
444
+ .insforge-user-button-container {
445
+ position: relative;
446
+ display: inline-block;
447
+ }
448
+
449
+ .insforge-user-button {
450
+ padding: 0.25rem;
451
+ background: transparent;
452
+ border: none;
453
+ border-radius: 9999px;
454
+ cursor: pointer;
455
+ transition: all 0.2s;
456
+ display: flex;
457
+ align-items: center;
458
+ justify-content: center;
459
+ gap: 0.5rem;
460
+ }
461
+
462
+ .insforge-user-button:hover {
463
+ background: rgba(0, 0, 0, 0.05);
464
+ }
465
+
466
+ .insforge-user-button-detailed {
467
+ border-radius: 0.5rem;
468
+ padding: 0.5rem;
469
+ }
470
+
471
+ .insforge-user-button-info {
472
+ display: flex;
473
+ flex-direction: column;
474
+ align-items: flex-start;
475
+ gap: 0.125rem;
476
+ }
477
+
478
+ .insforge-user-button-name {
479
+ font-size: 0.875rem;
480
+ font-weight: 600;
481
+ color: #111827;
482
+ line-height: 1.25rem;
483
+ text-align: left;
484
+ }
485
+
486
+ .insforge-user-button-email {
487
+ font-size: 0.75rem;
488
+ color: #6b7280;
489
+ line-height: 1rem;
490
+ text-align: left;
491
+ }
492
+
493
+ .insforge-user-avatar {
494
+ width: 2.5rem;
495
+ height: 2.5rem;
496
+ border-radius: 9999px;
497
+ object-fit: cover;
498
+ }
499
+
500
+ .insforge-user-avatar-placeholder {
501
+ display: flex;
502
+ align-items: center;
503
+ justify-content: center;
504
+ width: 2.5rem;
505
+ height: 2.5rem;
506
+ background: #3b82f6;
507
+ color: white;
508
+ font-weight: 600;
509
+ font-size: 0.875rem;
510
+ border-radius: 9999px;
511
+ }
512
+
513
+ .insforge-user-dropdown {
514
+ position: absolute;
515
+ top: 100%;
516
+ right: 0;
517
+ margin-top: 0.5rem;
518
+ min-width: 10rem;
519
+ background: white;
520
+ border: 1px solid #e5e7eb;
521
+ border-radius: 0.5rem;
522
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
523
+ z-index: 50;
524
+ overflow: hidden;
525
+ padding: 0.25rem;
526
+ }
527
+
528
+ .insforge-sign-out-button {
529
+ display: flex;
530
+ align-items: center;
531
+ justify-content: flex-start;
532
+ gap: 0.5rem;
533
+ width: 100%;
534
+ padding: 0.5rem 0.75rem;
535
+ font-size: 0.875rem;
536
+ font-family: inherit;
537
+ color: #dc2626;
538
+ background: transparent;
539
+ border: none;
540
+ border-radius: 0.375rem;
541
+ cursor: pointer;
542
+ transition: background 0.2s;
543
+ text-align: left;
544
+ }
545
+
546
+ .insforge-sign-out-button:hover {
547
+ background: #fef2f2;
548
+ }
549
+
550
+ /* Loading State */
551
+ .insforge-loading {
552
+ display: flex;
553
+ justify-content: center;
554
+ align-items: center;
555
+ padding: 2rem;
556
+ color: #6b7280;
557
+ font-size: 0.875rem;
558
+ }
559
+
560
+ /* Password Strength Indicator */
561
+ .insforge-password-strength {
562
+ display: flex;
563
+ flex-direction: column;
564
+ gap: 0.25rem;
565
+ margin-top: 0.5rem;
566
+ }
567
+
568
+ .insforge-password-requirement {
569
+ height: 1.5rem;
570
+ display: flex;
571
+ align-items: center;
572
+ gap: 0.25rem;
573
+ }
574
+
575
+ .insforge-password-check {
576
+ width: 1.25rem;
577
+ height: 1.25rem;
578
+ border-radius: 9999px;
579
+ display: flex;
580
+ border-width: 2px;
581
+ border-style: solid;
582
+ align-items: center;
583
+ justify-content: center;
584
+ transition: all 0.2s ease-in-out;
585
+ background-color: transparent;
586
+ border-color: #a3a3a3;
587
+ flex-shrink: 0;
588
+ }
589
+
590
+ .insforge-password-check-valid {
591
+ background-color: #22c55e;
592
+ border-color: transparent;
593
+ }
594
+
595
+ .insforge-password-check-icon {
596
+ color: #fff;
597
+ stroke-width: 3;
598
+ }
599
+
600
+ .insforge-password-requirement-label {
601
+ color:#000;
602
+ font-family: Inter;
603
+ font-size: 14px;
604
+ font-style: normal;
605
+ font-weight: 400;
606
+ line-height: 24px;
607
+ }
608
+
609
+ /* Verification Code Input */
610
+ .insforge-verification-code-container {
611
+ display: flex;
612
+ flex-direction: column;
613
+ justify-content: center;
614
+ align-items: center;
615
+ gap: 24px;
616
+ }
617
+
618
+ .insforge-verification-instructions {
619
+ color: #525252;
620
+ font-family: Inter;
621
+ font-size: 14px;
622
+ font-style: normal;
623
+ font-weight: 400;
624
+ line-height: 20px;
625
+ }
626
+
627
+ .insforge-verification-instructions > span {
628
+ color: #000;
629
+ font-family: Inter;
630
+ font-size: 14px;
631
+ font-style: normal;
632
+ font-weight: 600;
633
+ line-height: 20px;
634
+ }
635
+
636
+ .insforge-verification-code-inputs {
637
+ display: flex;
638
+ flex-direction: row;
639
+ gap: 12px;
640
+ justify-content: center;
641
+ align-items: center;
642
+ }
643
+
644
+ .insforge-verification-code-input {
645
+ width: 100%;
646
+ height: 48px;
647
+ padding: 8px 12px;
648
+ border-radius: 4px;
649
+ border: 1px solid #E0E0E0;
650
+ background: #FFF;
651
+ text-align: center;
652
+ font-size: 16px;
653
+ font-style: normal;
654
+ line-height: 20px;
655
+ font-weight: 600;
656
+ font-family: var(--font-manrope);
657
+ color: #000;
658
+ transition: all 0.2s ease-in-out;
659
+ outline: none;
660
+ }
661
+
662
+ .insforge-verification-code-input:focus {
663
+ border-color: #000;
664
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
665
+ }
666
+
667
+ .insforge-verification-code-input:disabled {
668
+ background-color: #F5F5F5;
669
+ cursor: not-allowed;
670
+ opacity: 0.6;
671
+ }
672
+
673
+ /* Verification Instructions */
674
+ .insforge-verification-instructions {
675
+ color: #4F4F4F;
676
+ font-family: Inter;
677
+ font-size: 14px;
678
+ font-style: normal;
679
+ font-weight: 400;
680
+ line-height: 24px;
681
+ margin-bottom: 8px;
682
+ }
683
+
684
+ .insforge-verification-email {
685
+ color: #000;
686
+ font-weight: 600;
687
+ }
688
+
689
+ .insforge-resend-code {
690
+ color: #525252;
691
+ font-family: Inter;
692
+ font-size: 14px;
693
+ font-style: normal;
694
+ font-weight: 400;
695
+ line-height: 24px;
696
+ text-align: center;
697
+ }
698
+
699
+ .insforge-resend-link {
700
+ color: #000;
701
+ font-family: Inter;
702
+ font-size: 14px;
703
+ font-style: normal;
704
+ font-weight: 500;
705
+ line-height: 24px;
706
+ }
707
+
708
+ .insforge-resend-link:hover {
709
+ text-decoration: underline;
710
+ }
711
+
712
+ .insforge-resend-link:disabled {
713
+ opacity: 0.5;
714
+ cursor: not-allowed;
715
+ }
716
+
717
+ /* Responsive adjustments */
718
+ @media (max-width: 640px) {
719
+ .insforge-auth-card {
720
+ padding: 2rem 1.5rem;
721
+ }
722
+
723
+ .insforge-auth-title {
724
+ font-size: 1.75rem;
725
+ }
726
+
727
+ .insforge-verification-code-container {
728
+ gap: 8px;
729
+ }
730
+
731
+ .insforge-verification-code-input {
732
+ width: 40px;
733
+ height: 48px;
734
+ font-size: 20px;
735
+ }
736
+ }
737
+