@aaspai/react 0.0.0 → 0.0.2

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.
Files changed (55) hide show
  1. package/README.md +720 -8
  2. package/dist/atoms.cjs +3565 -0
  3. package/dist/atoms.cjs.map +1 -0
  4. package/dist/atoms.d.cts +255 -0
  5. package/dist/atoms.d.ts +255 -0
  6. package/dist/atoms.js +3530 -0
  7. package/dist/atoms.js.map +1 -0
  8. package/dist/components.cjs +5397 -0
  9. package/dist/components.cjs.map +1 -0
  10. package/dist/components.d.cts +362 -0
  11. package/dist/components.d.ts +362 -0
  12. package/dist/components.js +5344 -0
  13. package/dist/components.js.map +1 -0
  14. package/dist/forms.cjs +3928 -0
  15. package/dist/forms.cjs.map +1 -0
  16. package/dist/forms.d.cts +135 -0
  17. package/dist/forms.d.ts +135 -0
  18. package/dist/forms.js +3903 -0
  19. package/dist/forms.js.map +1 -0
  20. package/dist/hooks.cjs +74 -0
  21. package/dist/hooks.cjs.map +1 -0
  22. package/dist/hooks.d.cts +138 -0
  23. package/dist/hooks.d.ts +138 -0
  24. package/dist/hooks.js +70 -0
  25. package/dist/hooks.js.map +1 -0
  26. package/dist/index.cjs +6030 -0
  27. package/dist/index.cjs.map +1 -0
  28. package/dist/index.d.cts +248 -0
  29. package/dist/index.d.ts +248 -0
  30. package/dist/index.js +5952 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/lib.cjs +139 -0
  33. package/dist/lib.cjs.map +1 -0
  34. package/dist/lib.d.cts +111 -0
  35. package/dist/lib.d.ts +111 -0
  36. package/dist/lib.js +128 -0
  37. package/dist/lib.js.map +1 -0
  38. package/dist/navigation.cjs +56 -0
  39. package/dist/navigation.cjs.map +1 -0
  40. package/dist/navigation.d.cts +65 -0
  41. package/dist/navigation.d.ts +65 -0
  42. package/dist/navigation.js +51 -0
  43. package/dist/navigation.js.map +1 -0
  44. package/dist/styles.css +839 -0
  45. package/dist/types.cjs +4 -0
  46. package/dist/types.cjs.map +1 -0
  47. package/dist/types.d.cts +17 -0
  48. package/dist/types.d.ts +17 -0
  49. package/dist/types.js +3 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +67 -28
  52. package/index.cjs +0 -10
  53. package/index.d.ts +0 -6
  54. package/index.js +0 -5
  55. package/styles.css +0 -1
@@ -0,0 +1,839 @@
1
+ /**
2
+ * AASPAI React Component Library Styles
3
+ * Traditional CSS with scoped class names (no Tailwind)
4
+ */
5
+
6
+ /* ============================================
7
+ FONTS
8
+ ============================================ */
9
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap');
10
+ @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap');
11
+
12
+ /* ============================================
13
+ CSS VARIABLES
14
+ ============================================ */
15
+ :root {
16
+ /* Colors */
17
+ --if-color-primary: #000000;
18
+ --if-color-primary-hover: #1f1f1f;
19
+ --if-color-text: #000000;
20
+ --if-color-text-secondary: #828282;
21
+ --if-color-text-muted: #a3a3a3;
22
+ --if-color-border: #d4d4d4;
23
+ --if-color-border-focus: #000000;
24
+ --if-color-bg-white: #ffffff;
25
+ --if-color-bg-light: #fafafa;
26
+ --if-color-bg-hover: #f9fafb;
27
+ --if-color-error: #dc2626;
28
+ --if-color-error-bg: #fee2e2;
29
+ --if-color-success: #16a34a;
30
+
31
+ /* Spacing */
32
+ --if-space-1: 0.25rem; /* 4px */
33
+ --if-space-2: 0.5rem; /* 8px */
34
+ --if-space-3: 0.75rem; /* 12px */
35
+ --if-space-4: 1rem; /* 16px */
36
+ --if-space-6: 1.5rem; /* 24px */
37
+ --if-space-8: 2rem; /* 32px */
38
+
39
+ /* Border Radius */
40
+ --if-radius-xs: 0.125rem; /* 2px */
41
+ --if-radius-sm: 0.25rem; /* 4px */
42
+ --if-radius-md: 0.375rem; /* 6px */
43
+ --if-radius-lg: 0.5rem; /* 8px */
44
+ --if-radius-xl: 0.75rem; /* 12px */
45
+
46
+ /* Typography */
47
+ --if-font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
48
+ --if-font-family-manrope:
49
+ 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
50
+ --if-font-size-xs: 0.75rem; /* 12px */
51
+ --if-font-size-sm: 0.875rem; /* 14px */
52
+ --if-font-size-base: 1rem; /* 16px */
53
+ --if-font-size-lg: 1.125rem; /* 18px */
54
+ --if-font-size-xl: 1.25rem; /* 20px */
55
+ --if-font-size-2xl: 1.5rem; /* 24px */
56
+
57
+ /* Shadows */
58
+ --if-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
59
+ --if-shadow-md: 0 1px 2px 0 rgba(0, 0, 0, 0.1);
60
+ --if-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
61
+
62
+ /* Transitions */
63
+ --if-transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
64
+ --if-transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
65
+ }
66
+
67
+ /* ============================================
68
+ AUTH CONTAINER
69
+ ============================================ */
70
+ .if-authContainer {
71
+ width: 100%;
72
+ max-width: 400px;
73
+ border-radius: var(--if-radius-xl);
74
+ overflow: hidden;
75
+ box-shadow: var(--if-shadow-lg);
76
+ }
77
+
78
+ .if-authCard {
79
+ background-color: var(--if-color-bg-white);
80
+ padding: var(--if-space-6);
81
+ display: flex;
82
+ flex-direction: column;
83
+ justify-content: center;
84
+ align-items: stretch;
85
+ gap: var(--if-space-6);
86
+ }
87
+
88
+ /* ============================================
89
+ AUTH HEADER
90
+ ============================================ */
91
+ .if-authHeader {
92
+ display: flex;
93
+ flex-direction: column;
94
+ justify-content: flex-start;
95
+ align-items: flex-start;
96
+ gap: var(--if-space-2);
97
+ }
98
+
99
+ .if-authHeader-title {
100
+ font-size: var(--if-font-size-2xl);
101
+ font-weight: 600;
102
+ color: var(--if-color-text);
103
+ line-height: 2rem;
104
+ margin: 0;
105
+ font-family: var(--if-font-family);
106
+ }
107
+
108
+ .if-authHeader-subtitle {
109
+ font-size: var(--if-font-size-sm);
110
+ font-weight: 400;
111
+ color: var(--if-color-text-secondary);
112
+ line-height: 1.5rem;
113
+ margin: 0;
114
+ font-family: var(--if-font-family);
115
+ }
116
+
117
+ /* ============================================
118
+ FORM FIELD
119
+ ============================================ */
120
+ .if-formField {
121
+ display: flex;
122
+ flex-direction: column;
123
+ justify-content: center;
124
+ align-items: stretch;
125
+ gap: var(--if-space-1);
126
+ }
127
+
128
+ .if-formField-label {
129
+ font-size: var(--if-font-size-sm);
130
+ font-weight: 400;
131
+ color: var(--if-color-text);
132
+ line-height: 1.5rem;
133
+ font-family: var(--if-font-family);
134
+ }
135
+
136
+ .if-formField-input {
137
+ width: 100%;
138
+ display: flex;
139
+ align-items: center;
140
+ gap: var(--if-space-2);
141
+ align-self: stretch;
142
+ padding: var(--if-space-2) var(--if-space-3);
143
+ border-radius: var(--if-radius-sm);
144
+ border: 1px solid var(--if-color-border);
145
+ background-color: var(--if-color-bg-white);
146
+ font-size: var(--if-font-size-sm);
147
+ font-weight: 400;
148
+ line-height: 1.25rem;
149
+ color: var(--if-color-text);
150
+ font-family: var(--if-font-family);
151
+ transition: border-color var(--if-transition-base);
152
+ }
153
+
154
+ .if-formField-input::placeholder {
155
+ color: var(--if-color-text-muted);
156
+ font-size: var(--if-font-size-sm);
157
+ font-weight: 400;
158
+ }
159
+
160
+ .if-formField-input:focus {
161
+ outline: none;
162
+ border-color: var(--if-color-border-focus);
163
+ }
164
+
165
+ /* ============================================
166
+ PASSWORD FIELD
167
+ ============================================ */
168
+ .if-passwordField {
169
+ display: flex;
170
+ flex-direction: column;
171
+ justify-content: center;
172
+ align-items: stretch;
173
+ gap: var(--if-space-1);
174
+ }
175
+
176
+ .if-passwordField-labelRow {
177
+ display: flex;
178
+ justify-content: space-between;
179
+ align-items: center;
180
+ }
181
+
182
+ .if-passwordField-label {
183
+ font-size: var(--if-font-size-sm);
184
+ font-weight: 400;
185
+ color: var(--if-color-text);
186
+ line-height: 1.5rem;
187
+ font-family: var(--if-font-family);
188
+ }
189
+
190
+ .if-passwordField-forgotLink {
191
+ font-size: var(--if-font-size-sm);
192
+ font-weight: 400;
193
+ color: var(--if-color-text-secondary);
194
+ text-decoration: none;
195
+ transition: color var(--if-transition-fast);
196
+ font-family: var(--if-font-family);
197
+ }
198
+
199
+ .if-passwordField-inputWrapper {
200
+ position: relative;
201
+ width: 100%;
202
+ }
203
+
204
+ .if-passwordField-input {
205
+ width: 100%;
206
+ display: flex;
207
+ align-items: center;
208
+ align-self: stretch;
209
+ padding: var(--if-space-2) var(--if-space-3);
210
+ padding-right: 2.5rem; /* Space for toggle button */
211
+ border-radius: var(--if-radius-sm);
212
+ border: 1px solid var(--if-color-border);
213
+ background-color: var(--if-color-bg-white);
214
+ font-size: var(--if-font-size-sm);
215
+ font-weight: 400;
216
+ line-height: 1.25rem;
217
+ color: var(--if-color-text);
218
+ font-family: var(--if-font-family);
219
+ transition: border-color var(--if-transition-base);
220
+ }
221
+
222
+ .if-passwordField-input::placeholder {
223
+ color: var(--if-color-text-muted);
224
+ }
225
+
226
+ .if-passwordField-input:focus {
227
+ outline: none;
228
+ border-color: var(--if-color-border-focus);
229
+ }
230
+
231
+ .if-passwordField-toggleButton {
232
+ position: absolute;
233
+ right: var(--if-space-1);
234
+ top: 50%;
235
+ transform: translateY(-50%);
236
+ background: none;
237
+ border: none;
238
+ cursor: pointer;
239
+ padding: var(--if-space-1);
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ color: var(--if-color-text-secondary);
244
+ transition: color var(--if-transition-fast);
245
+ }
246
+
247
+ /* ============================================
248
+ SUBMIT BUTTON
249
+ ============================================ */
250
+ .if-submitButton {
251
+ border-radius: var(--if-radius-sm);
252
+ background-color: var(--if-color-primary);
253
+ height: 2.5rem;
254
+ width: 100%;
255
+ display: flex;
256
+ margin-top: var(--if-space-4);
257
+ padding: var(--if-space-2) var(--if-space-4);
258
+ justify-content: center;
259
+ align-items: center;
260
+ gap: 0.625rem;
261
+ align-self: stretch;
262
+ color: var(--if-color-bg-white);
263
+ font-weight: 600;
264
+ font-family: var(--if-font-family-manrope);
265
+ font-size: var(--if-font-size-base);
266
+ line-height: normal;
267
+ border: none;
268
+ cursor: pointer;
269
+ transition: background-color var(--if-transition-base);
270
+ }
271
+
272
+ .if-submitButton:hover:not(:disabled) {
273
+ background-color: var(--if-color-primary-hover);
274
+ }
275
+
276
+ .if-submitButton:disabled {
277
+ opacity: 0.5;
278
+ cursor: not-allowed;
279
+ }
280
+
281
+ .if-submitButton-icon {
282
+ width: 1.25rem;
283
+ height: 1.25rem;
284
+ }
285
+
286
+ /* Spinner animation */
287
+ @keyframes if-spin {
288
+ from {
289
+ transform: rotate(0deg);
290
+ }
291
+ to {
292
+ transform: rotate(360deg);
293
+ }
294
+ }
295
+
296
+ .if-submitButton-spinner {
297
+ animation: if-spin 1s linear infinite;
298
+ }
299
+
300
+ /* ============================================
301
+ OAUTH BUTTON
302
+ ============================================ */
303
+ .if-oauthButton {
304
+ display: flex;
305
+ width: 100%;
306
+ height: 2.25rem;
307
+ padding: var(--if-space-2) var(--if-space-3);
308
+ flex-direction: row;
309
+ justify-content: center;
310
+ align-items: center;
311
+ gap: var(--if-space-3);
312
+ border-radius: var(--if-radius-md);
313
+ border: 1px solid #e4e4e7;
314
+ background-color: var(--if-color-bg-white);
315
+ box-shadow: var(--if-shadow-md);
316
+ color: #09090b;
317
+ text-align: center;
318
+ font-size: var(--if-font-size-sm);
319
+ font-weight: 500;
320
+ line-height: 1.25rem;
321
+ cursor: pointer;
322
+ transition: all var(--if-transition-base);
323
+ font-family: var(--if-font-family);
324
+ }
325
+
326
+ .if-oauthButton:hover:not(:disabled) {
327
+ background-color: var(--if-color-bg-hover);
328
+ border-color: #9ca3af;
329
+ }
330
+
331
+ .if-oauthButton:disabled {
332
+ opacity: 0.6;
333
+ cursor: not-allowed;
334
+ }
335
+
336
+ .if-oauthButton-icon {
337
+ display: flex;
338
+ align-items: center;
339
+ justify-content: center;
340
+ flex-shrink: 0;
341
+ width: 1.125rem;
342
+ height: 1.125rem;
343
+ }
344
+
345
+ .if-oauthButton-full {
346
+ justify-content: center;
347
+ }
348
+
349
+ .if-oauthButton-short {
350
+ justify-content: center;
351
+ padding: var(--if-space-2);
352
+ gap: var(--if-space-2);
353
+ }
354
+
355
+ .if-oauthButton-icon-only {
356
+ justify-content: center;
357
+ gap: 0;
358
+ }
359
+
360
+ /* ============================================
361
+ OAUTH PROVIDERS CONTAINER
362
+ ============================================ */
363
+ .if-oauthProviders {
364
+ display: flex;
365
+ flex-direction: column;
366
+ gap: var(--if-space-3);
367
+ width: 100%;
368
+ }
369
+
370
+ /* ============================================
371
+ AUTH LINK
372
+ ============================================ */
373
+ .if-authLink {
374
+ display: flex;
375
+ justify-content: center;
376
+ align-items: center;
377
+ gap: var(--if-space-1);
378
+ font-size: var(--if-font-size-sm);
379
+ color: var(--if-color-text-secondary);
380
+ font-family: var(--if-font-family);
381
+ }
382
+
383
+ .if-authLink-text {
384
+ font-weight: 400;
385
+ }
386
+
387
+ .if-authLink-link {
388
+ font-weight: 600;
389
+ color: var(--if-color-text);
390
+ text-decoration: none;
391
+ transition: opacity var(--if-transition-fast);
392
+ }
393
+
394
+ /* ============================================
395
+ AUTH DIVIDER
396
+ ============================================ */
397
+ .if-authDivider {
398
+ display: flex;
399
+ align-items: center;
400
+ text-align: center;
401
+ width: 100%;
402
+ gap: var(--if-space-3);
403
+ }
404
+
405
+ .if-authDivider-line {
406
+ flex: 1;
407
+ border-top: 1px solid var(--if-color-border);
408
+ }
409
+
410
+ .if-authDivider-text {
411
+ font-size: var(--if-font-size-sm);
412
+ color: var(--if-color-text-secondary);
413
+ font-weight: 400;
414
+ font-family: var(--if-font-family-manrope);
415
+ }
416
+
417
+ /* ============================================
418
+ ERROR BANNER
419
+ ============================================ */
420
+ .if-errorBanner {
421
+ padding: var(--if-space-3);
422
+ background-color: var(--if-color-error-bg);
423
+ border-radius: var(--if-radius-md);
424
+ border: 1px solid var(--if-color-error);
425
+ }
426
+
427
+ .if-errorBanner-content {
428
+ display: flex;
429
+ align-items: center;
430
+ gap: var(--if-space-2);
431
+ }
432
+
433
+ .if-errorBanner-icon {
434
+ width: 1.5rem;
435
+ height: 1.5rem;
436
+ flex-shrink: 0;
437
+ color: var(--if-color-error);
438
+ }
439
+
440
+ .if-errorBanner-text {
441
+ font-size: var(--if-font-size-sm);
442
+ color: var(--if-color-error);
443
+ font-weight: 400;
444
+ font-family: var(--if-font-family);
445
+ margin: 0;
446
+ }
447
+
448
+ /* ============================================
449
+ AUTH BRANDING
450
+ ============================================ */
451
+ .if-authBranding {
452
+ background-color: var(--if-color-bg-light);
453
+ padding: var(--if-space-4) var(--if-space-2);
454
+ display: flex;
455
+ flex-direction: row;
456
+ justify-content: center;
457
+ align-items: center;
458
+ gap: var(--if-space-1);
459
+ }
460
+
461
+ .if-authBranding-text {
462
+ font-size: var(--if-font-size-xs);
463
+ font-weight: 500;
464
+ color: var(--if-color-text);
465
+ font-family: var(--if-font-family-manrope);
466
+ margin: 0;
467
+ }
468
+
469
+ /* ============================================
470
+ VERIFICATION CODE INPUT
471
+ ============================================ */
472
+ .if-verificationCode-inputContainer {
473
+ display: flex;
474
+ gap: var(--if-space-3);
475
+ justify-content: center;
476
+ }
477
+
478
+ .if-verificationCode-input {
479
+ width: 3rem;
480
+ height: 3rem;
481
+ text-align: center;
482
+ font-size: var(--if-font-size-base);
483
+ font-weight: 600;
484
+ border: 1px solid var(--if-color-border);
485
+ border-radius: var(--if-radius-sm);
486
+ background-color: var(--if-color-bg-white);
487
+ color: var(--if-color-text);
488
+ transition: border-color var(--if-transition-base);
489
+ font-family: var(--if-font-family-manrope);
490
+ }
491
+
492
+ .if-verificationCode-input:focus {
493
+ outline: none;
494
+ border-color: var(--if-color-border-focus);
495
+ }
496
+
497
+ /* ============================================
498
+ VERIFICATION STEP
499
+ ============================================ */
500
+ .if-verificationStep {
501
+ display: flex;
502
+ flex-direction: column;
503
+ gap: var(--if-space-6);
504
+ align-items: stretch;
505
+ }
506
+
507
+ .if-verificationStep-descriptionContainer {
508
+ width: 100%;
509
+ background-color: #f5f5f5;
510
+ border-radius: var(--if-radius-lg);
511
+ padding: var(--if-space-3) var(--if-space-3) var(--if-space-6) var(--if-space-3);
512
+ display: flex;
513
+ flex-direction: column;
514
+ gap: var(--if-space-3);
515
+ }
516
+
517
+ .if-verificationStep-descriptionTitle {
518
+ color: var(--black, #000);
519
+ font-family: var(--if-font-family);
520
+ font-size: var(--if-font-size-base);
521
+ font-style: normal;
522
+ font-weight: 600;
523
+ line-height: 24px;
524
+ }
525
+
526
+ .if-verificationStep-description,
527
+ .if-verificationStep-codeDescription {
528
+ font-size: var(--if-font-size-sm);
529
+ color: #525252;
530
+ text-align: left;
531
+ font-family: var(--if-font-family);
532
+ margin: 0;
533
+ }
534
+
535
+ .if-verificationLink-email,
536
+ .if-verificationCode-email {
537
+ font-weight: 500;
538
+ color: var(--if-color-text);
539
+ }
540
+
541
+ .if-verificationStep-codeContainer {
542
+ width: 100%;
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 40px;
546
+ }
547
+
548
+ .if-verificationStep-codeInputWrapper {
549
+ display: flex;
550
+ flex-direction: column;
551
+ gap: var(--if-space-6);
552
+ }
553
+
554
+ .if-verificationStep-verifyingText {
555
+ font-size: var(--if-font-size-sm);
556
+ color: var(--if-color-text-secondary);
557
+ text-align: center;
558
+ font-family: var(--if-font-family);
559
+ }
560
+
561
+ .if-verificationStep-resendContainer {
562
+ width: 100%;
563
+ font-size: var(--if-font-size-sm);
564
+ text-align: center;
565
+ color: var(--if-color-text-secondary);
566
+ font-family: var(--if-font-family);
567
+ }
568
+
569
+ .if-verificationStep-resendButton {
570
+ color: var(--if-color-text);
571
+ font-weight: 500;
572
+ transition: all var(--if-transition-base);
573
+ background: none;
574
+ border: none;
575
+ padding: 0;
576
+ font-family: var(--if-font-family);
577
+ font-size: var(--if-font-size-sm);
578
+ }
579
+
580
+ .if-verificationStep-resendButton:not(:disabled) {
581
+ cursor: pointer;
582
+ }
583
+
584
+ .if-verificationStep-resendButton:disabled {
585
+ cursor: not-allowed;
586
+ opacity: 0.5;
587
+ }
588
+
589
+ /* ============================================
590
+ PASSWORD STRENGTH INDICATOR
591
+ ============================================ */
592
+ .if-passwordStrength {
593
+ margin-top: var(--if-space-2);
594
+ }
595
+
596
+ .if-passwordStrength-fill {
597
+ height: 100%;
598
+ transition:
599
+ width var(--if-transition-base),
600
+ background-color var(--if-transition-base);
601
+ }
602
+
603
+ .if-passwordStrength-text {
604
+ font-size: var(--if-font-size-xs);
605
+ color: var(--if-color-text-secondary);
606
+ font-family: var(--if-font-family);
607
+ }
608
+
609
+ .if-passwordStrength-requirements {
610
+ display: flex;
611
+ flex-direction: column;
612
+ gap: var(--if-space-2);
613
+ font-size: var(--if-font-size-sm);
614
+ color: #525252;
615
+ font-family: var(--if-font-family);
616
+ }
617
+
618
+ .if-passwordStrength-requirement {
619
+ display: flex;
620
+ align-items: center;
621
+ gap: var(--if-space-2);
622
+ }
623
+
624
+ /* ============================================
625
+ FORM CONTAINER
626
+ ============================================ */
627
+ .if-form {
628
+ display: flex;
629
+ flex-direction: column;
630
+ align-items: stretch;
631
+ justify-content: center;
632
+ gap: var(--if-space-6);
633
+ }
634
+
635
+ /* ============================================
636
+ USER BUTTON
637
+ ============================================ */
638
+ .if-userButton-container {
639
+ position: relative;
640
+ display: inline-block;
641
+ }
642
+
643
+ .if-userButton {
644
+ display: flex;
645
+ align-items: center;
646
+ justify-content: center;
647
+ gap: var(--if-space-2);
648
+ padding: var(--if-space-2);
649
+ border-radius: 9999px;
650
+ background-color: transparent;
651
+ border: none;
652
+ cursor: pointer;
653
+ transition: all var(--if-transition-base);
654
+ }
655
+
656
+ .if-userButton:hover {
657
+ opacity: 0.8;
658
+ }
659
+
660
+ .if-userButton-detailed {
661
+ background-color: var(--if-color-bg-white);
662
+ border: 1px solid var(--if-color-border);
663
+ border-radius: var(--if-radius-sm);
664
+ padding: var(--if-space-2);
665
+ }
666
+
667
+ .if-userButton-detailed:hover {
668
+ background-color: var(--if-color-bg-light);
669
+ opacity: 1;
670
+ }
671
+
672
+ .if-userButton-avatar {
673
+ width: 2rem;
674
+ height: 2rem;
675
+ border-radius: 9999px;
676
+ background-color: var(--if-color-primary);
677
+ color: var(--if-color-bg-white);
678
+ display: flex;
679
+ align-items: center;
680
+ justify-content: center;
681
+ font-weight: 600;
682
+ font-size: var(--if-font-size-sm);
683
+ font-family: var(--if-font-family);
684
+ overflow: hidden;
685
+ }
686
+
687
+ .if-userButton-avatarImage {
688
+ border-radius: 9999px;
689
+ object-fit: cover;
690
+ width: 100%;
691
+ height: 100%;
692
+ }
693
+
694
+ .if-userButton-avatarInitials {
695
+ color: var(--if-color-bg-white);
696
+ font-weight: 600;
697
+ font-size: var(--if-font-size-sm);
698
+ }
699
+
700
+ .if-userButton-info {
701
+ display: flex;
702
+ flex-direction: column;
703
+ align-items: flex-start;
704
+ gap: 0.125rem;
705
+ }
706
+
707
+ .if-userButton-name {
708
+ font-size: var(--if-font-size-sm);
709
+ font-weight: 600;
710
+ color: var(--if-color-text);
711
+ line-height: 1.25rem;
712
+ text-align: left;
713
+ font-family: var(--if-font-family);
714
+ }
715
+
716
+ .if-userButton-email {
717
+ font-size: var(--if-font-size-xs);
718
+ color: var(--if-color-text-secondary);
719
+ line-height: 1rem;
720
+ text-align: left;
721
+ font-family: var(--if-font-family);
722
+ }
723
+
724
+ .if-userButton-menu {
725
+ position: absolute;
726
+ margin-top: var(--if-space-2);
727
+ background-color: var(--if-color-bg-white);
728
+ border: 1px solid var(--if-color-border);
729
+ border-radius: var(--if-radius-md);
730
+ box-shadow: var(--if-shadow-lg);
731
+ padding: var(--if-space-2);
732
+ min-width: 200px;
733
+ z-index: 50;
734
+ }
735
+
736
+ .if-userButton-menuItem {
737
+ display: flex;
738
+ align-items: center;
739
+ gap: var(--if-space-2);
740
+ padding: var(--if-space-2);
741
+ border-radius: var(--if-radius-sm);
742
+ cursor: pointer;
743
+ transition: background-color var(--if-transition-fast);
744
+ font-size: var(--if-font-size-sm);
745
+ color: var(--if-color-text);
746
+ font-family: var(--if-font-family);
747
+ background: none;
748
+ border: none;
749
+ width: 100%;
750
+ text-align: left;
751
+ }
752
+
753
+ .if-userButton-menuItem:hover {
754
+ background-color: var(--if-color-bg-light);
755
+ }
756
+
757
+ .if-userButton-menuItem-signout {
758
+ color: var(--if-color-error);
759
+ }
760
+
761
+ .if-userButton-menuItem-icon {
762
+ width: 1.25rem;
763
+ height: 1.25rem;
764
+ }
765
+
766
+ /* ============================================
767
+ EMAIL VERIFICATION STATUS
768
+ ============================================ */
769
+ .if-verifyStatus-container {
770
+ width: 100%;
771
+ display: flex;
772
+ flex-direction: column;
773
+ align-items: center;
774
+ justify-content: center;
775
+ gap: var(--if-space-6);
776
+ }
777
+
778
+ .if-verifyStatus-container-stretch {
779
+ width: 100%;
780
+ display: flex;
781
+ flex-direction: column;
782
+ align-items: stretch;
783
+ justify-content: center;
784
+ gap: var(--if-space-6);
785
+ }
786
+
787
+ .if-verifyStatus-spinner {
788
+ border-radius: 9999px;
789
+ height: 3rem;
790
+ width: 3rem;
791
+ border-bottom: 2px solid var(--if-color-primary);
792
+ }
793
+
794
+ .if-verifyStatus-successContent {
795
+ display: flex;
796
+ flex-direction: column;
797
+ align-items: center;
798
+ gap: var(--if-space-4);
799
+ }
800
+
801
+ .if-verifyStatus-successIcon {
802
+ width: 4rem;
803
+ height: 4rem;
804
+ border-radius: 9999px;
805
+ background-color: #d1fae5;
806
+ display: flex;
807
+ align-items: center;
808
+ justify-content: center;
809
+ }
810
+
811
+ .if-verifyStatus-successIconSvg {
812
+ width: 2rem;
813
+ height: 2rem;
814
+ color: #059669;
815
+ }
816
+
817
+ .if-verifyStatus-textCenter {
818
+ text-align: center;
819
+ }
820
+
821
+ /* ============================================
822
+ UTILITY CLASSES
823
+ ============================================ */
824
+ .if-hidden {
825
+ display: none;
826
+ }
827
+
828
+ .if-visuallyHidden {
829
+ position: absolute;
830
+ width: 1px;
831
+ height: 1px;
832
+ padding: 0;
833
+ margin: -1px;
834
+ overflow: hidden;
835
+ clip: rect(0, 0, 0, 0);
836
+ white-space: nowrap;
837
+ border-width: 0;
838
+ }
839
+