@ansiversa/components 0.0.8 → 0.0.10

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 (2) hide show
  1. package/package.json +3 -2
  2. package/src/styles/global.css +1112 -0
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@ansiversa/components",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "Shared UI components and layouts for the Ansiversa ecosystem",
5
5
  "type": "module",
6
6
  "exports": {
7
- ".": "./index.ts"
7
+ ".": "./index.ts",
8
+ "./styles/global.css": "./src/styles/global.css"
8
9
  },
9
10
  "files": [
10
11
  "src",
@@ -0,0 +1,1112 @@
1
+ @import "tailwindcss";
2
+
3
+ /* =========================================
4
+ Ansiversa Design Tokens
5
+ ========================================= */
6
+
7
+ :root {
8
+ color-scheme: dark;
9
+
10
+ /* Brand Colors */
11
+ --av-bg: #020617;
12
+ --av-bg-elevated: #020617;
13
+ --av-surface: #020617;
14
+ --av-surface-soft: #020617;
15
+
16
+ --av-primary: #00eaff;
17
+ --av-primary-soft: rgba(0, 234, 255, 0.16);
18
+ --av-primary-strong: #00f5ff;
19
+
20
+ --av-secondary: #7a00ff;
21
+ --av-secondary-soft: rgba(122, 0, 255, 0.2);
22
+
23
+ --av-accent: #22c55e; /* success */
24
+
25
+ --av-border-subtle: rgba(148, 163, 184, 0.25);
26
+ --av-border-strong: rgba(148, 163, 184, 0.45);
27
+
28
+ --av-text: #e5e7eb;
29
+ --av-text-muted: #9ca3af;
30
+ --av-text-soft: #6b7280;
31
+ --av-text-strong: #f9fafb;
32
+
33
+ --ans-primary: hsl(260, 100%, 70%); /* example */
34
+
35
+ --ans-primary-rgb: 140, 100, 255; /* MUST match your primary color */
36
+
37
+
38
+ /* Layout & Radius */
39
+ --av-radius-xs: 0.375rem;
40
+ --av-radius-sm: 0.75rem;
41
+ --av-radius-md: 1rem;
42
+ --av-radius-lg: 1.5rem;
43
+ --av-radius-full: 999px;
44
+
45
+ /* Shadows */
46
+ --av-shadow-soft: 0 18px 45px rgba(15, 23, 42, 0.85);
47
+ --av-shadow-glow: 0 0 40px rgba(0, 234, 255, 0.25),
48
+ 0 0 55px rgba(122, 0, 255, 0.2);
49
+
50
+ /* Typography */
51
+ --av-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text",
52
+ "Inter", "Segoe UI", sans-serif;
53
+ --av-font-mono: "JetBrains Mono", "Fira Code", ui-monospace, SFMono-Regular,
54
+ Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
55
+
56
+ /* Animation */
57
+ --av-transition-fast: 150ms ease-out;
58
+ --av-transition-normal: 220ms ease-out;
59
+ }
60
+
61
+ /* =========================================
62
+ Base Layer
63
+ ========================================= */
64
+
65
+ @layer base {
66
+ *,
67
+ *::before,
68
+ *::after {
69
+ box-sizing: border-box;
70
+ }
71
+
72
+ html,
73
+ body {
74
+ padding: 0;
75
+ margin: 0;
76
+ }
77
+
78
+ html {
79
+ scroll-behavior: smooth;
80
+ overflow-x: hidden;
81
+ }
82
+
83
+ body {
84
+ min-height: 100vh;
85
+ overflow-x: hidden;
86
+ background-color: var(--av-bg);
87
+ color: var(--av-text);
88
+ font-family: var(--av-font-sans);
89
+ text-rendering: geometricPrecision;
90
+ -webkit-font-smoothing: antialiased;
91
+ -moz-osx-font-smoothing: grayscale;
92
+
93
+ background-image:
94
+ radial-gradient(circle at top left, rgba(0, 234, 255, 0.12), transparent 55%),
95
+ radial-gradient(circle at bottom right, rgba(122, 0, 255, 0.16), transparent 60%),
96
+ radial-gradient(circle at top right, rgba(15, 23, 42, 0.9), rgba(2, 6, 23, 1));
97
+ background-attachment: fixed;
98
+
99
+ scrollbar-width: thin;
100
+ scrollbar-color: rgba(148, 163, 184, 0.6) transparent;
101
+ }
102
+
103
+ body::-webkit-scrollbar {
104
+ width: 8px;
105
+ }
106
+
107
+ body::-webkit-scrollbar-track {
108
+ background: transparent;
109
+ }
110
+
111
+ body::-webkit-scrollbar-thumb {
112
+ border-radius: 999px;
113
+ background: linear-gradient(
114
+ 180deg,
115
+ rgba(148, 163, 184, 0.4),
116
+ rgba(148, 163, 184, 0.1)
117
+ );
118
+ }
119
+
120
+ h1,
121
+ h2,
122
+ h3,
123
+ h4,
124
+ h5,
125
+ h6 {
126
+ margin: 0;
127
+ font-weight: 600;
128
+ letter-spacing: -0.03em;
129
+ color: var(--av-text-strong);
130
+ }
131
+
132
+ h1 {
133
+ font-size: clamp(2.4rem, 4vw, 3.4rem);
134
+ }
135
+
136
+ h2 {
137
+ font-size: clamp(1.9rem, 3vw, 2.4rem);
138
+ }
139
+
140
+ h3 {
141
+ font-size: clamp(1.5rem, 2.4vw, 1.9rem);
142
+ }
143
+
144
+ p {
145
+ margin: 0;
146
+ color: var(--av-text-muted);
147
+ line-height: 1.7;
148
+ font-size: 0.98rem;
149
+ }
150
+
151
+ a {
152
+ color: var(--av-primary);
153
+ text-decoration: none;
154
+ transition: color var(--av-transition-fast), opacity var(--av-transition-fast);
155
+ }
156
+
157
+ a:hover {
158
+ color: var(--av-primary-strong);
159
+ }
160
+
161
+ button,
162
+ input,
163
+ textarea,
164
+ select {
165
+ font-family: inherit;
166
+ }
167
+
168
+ button {
169
+ cursor: pointer;
170
+ }
171
+
172
+ :focus-visible {
173
+ outline: 2px solid rgba(56, 189, 248, 0.8);
174
+ outline-offset: 3px;
175
+ }
176
+
177
+ img {
178
+ max-width: 100%;
179
+ height: auto;
180
+ display: block;
181
+ }
182
+
183
+ * {
184
+ -webkit-tap-highlight-color: transparent;
185
+ }
186
+
187
+ [x-cloak] {
188
+ display: none !important;
189
+ }
190
+ }
191
+
192
+ /* =========================================
193
+ Components Layer
194
+ (Bootstrap-like, but Ansiversa-flavoured)
195
+ ========================================= */
196
+
197
+ @layer components {
198
+ /* Layout / Grid ---------------------------------- */
199
+
200
+ .av-page {
201
+ @apply min-h-screen flex flex-col;
202
+ }
203
+
204
+ .av-container {
205
+ @apply max-w-screen-xl mx-auto px-4;
206
+ }
207
+
208
+ .av-container-narrow {
209
+ @apply max-w-2xl;
210
+ }
211
+
212
+ .av-container-wide {
213
+ @apply max-w-7xl;
214
+ }
215
+
216
+ .av-container-full {
217
+ @apply w-full max-w-none;
218
+ }
219
+
220
+ .av-main {
221
+ @apply flex-1;
222
+ }
223
+
224
+ /* Brand / Logo ------------------------------------ */
225
+
226
+ .av-navbar-brand {
227
+ @apply flex items-center gap-3 text-slate-100 no-underline;
228
+ }
229
+
230
+ .av-navbar-brand__logo {
231
+ @apply h-10 w-10 overflow-hidden rounded-full border border-slate-800/70 bg-slate-900/70 p-0.5 shadow-inner;
232
+ }
233
+
234
+ .av-navbar-brand__logo img {
235
+ @apply h-full w-full rounded-full object-cover;
236
+ }
237
+
238
+ .av-navbar-brand__meta {
239
+ @apply flex flex-col leading-tight;
240
+ }
241
+
242
+ .av-navbar-brand__title {
243
+ @apply text-xl font-semibold tracking-tight leading-none;
244
+ }
245
+
246
+ .av-navbar-brand__subtitle {
247
+ @apply text-[0.65rem] text-slate-400 uppercase tracking-[0.18em];
248
+ }
249
+
250
+ .av-navbar-actions {
251
+ @apply flex items-center gap-2;
252
+ }
253
+
254
+ .av-icon {
255
+ @apply h-4 w-4;
256
+ fill: #fff;
257
+ stroke: #fff;
258
+ }
259
+
260
+ /* Mobile: only icons */
261
+ .av-nav-icon {
262
+ @apply inline-flex items-center justify-center md:hidden;
263
+ }
264
+
265
+ /* Desktop: show text */
266
+ .av-nav-label {
267
+ @apply hidden md:inline;
268
+ }
269
+
270
+ /* Hero / Sections / Grid -------------------------- */
271
+
272
+ .av-hero {
273
+ @apply py-16 md:py-24;
274
+ }
275
+
276
+ .av-hero__grid {
277
+ @apply grid gap-12 lg:grid-cols-2 items-center;
278
+ }
279
+
280
+ .av-hero__content {
281
+ @apply space-y-4 max-w-2xl;
282
+ }
283
+
284
+ .av-hero__content--narrow {
285
+ @apply max-w-3xl mx-auto text-center space-y-6;
286
+ }
287
+
288
+ .av-cta-row {
289
+ @apply mt-8 flex flex-wrap items-center justify-center gap-3;
290
+ }
291
+
292
+ .av-section {
293
+ @apply border-t border-slate-900/60;
294
+ }
295
+
296
+ .av-section + .av-section {
297
+ @apply border-t-0;
298
+ }
299
+
300
+ .av-section .av-container {
301
+ @apply py-10 md:py-14;
302
+ }
303
+
304
+ .av-section-header {
305
+ @apply max-w-2xl space-y-3 mb-8;
306
+ }
307
+
308
+ .av-section-title {
309
+ @apply text-2xl md:text-3xl font-semibold text-slate-100;
310
+ }
311
+
312
+ .av-section-lead {
313
+ @apply text-sm md:text-base text-slate-400;
314
+ }
315
+
316
+ .av-section-grid {
317
+ @apply grid gap-5 md:gap-6 md:grid-cols-3;
318
+ }
319
+
320
+ .av-row {
321
+ @apply flex flex-wrap -mx-3;
322
+ }
323
+
324
+ .av-col {
325
+ @apply px-3;
326
+ }
327
+
328
+ .av-col-6 {
329
+ @apply px-3 w-full md:w-1/2;
330
+ }
331
+
332
+ .av-col-4 {
333
+ @apply px-3 w-full md:w-1/3;
334
+ }
335
+
336
+ .av-col-3 {
337
+ @apply px-3 w-full md:w-1/4;
338
+ }
339
+
340
+ /* Steps / Timeline-ish ---------------------------- */
341
+
342
+ .av-card-heading {
343
+ @apply text-sm font-semibold text-slate-100 mb-2;
344
+ }
345
+
346
+ .av-steps {
347
+ @apply space-y-4;
348
+ }
349
+
350
+ .av-step {
351
+ @apply flex items-start gap-4 rounded-2xl border border-slate-800/70 bg-slate-950/80 p-4 md:p-5;
352
+ }
353
+
354
+ .av-step-number {
355
+ @apply flex h-7 w-7 items-center justify-center rounded-full bg-cyan-500/20 text-xs font-semibold text-cyan-300;
356
+ }
357
+
358
+ .av-step-body p {
359
+ @apply text-sm text-slate-400;
360
+ }
361
+
362
+ /* Pricing Grid ------------------------------------ */
363
+
364
+ .av-pricing-grid {
365
+ @apply grid gap-7 md:grid-cols-3;
366
+ }
367
+
368
+ .av-pricing-section {
369
+ @apply py-16 border-t border-slate-800/80;
370
+ }
371
+
372
+ .av-pricing-table-wrapper {
373
+ @apply overflow-x-auto mt-10;
374
+ }
375
+
376
+ .av-pricing-table {
377
+ width: 100%;
378
+ border-collapse: collapse;
379
+ min-width: 720px;
380
+ font-size: 0.9rem;
381
+ }
382
+
383
+ .av-pricing-table th,
384
+ .av-pricing-table td {
385
+ @apply border border-slate-800/80 p-3 text-left align-top;
386
+ }
387
+
388
+ .av-pricing-table th {
389
+ @apply bg-slate-900/80 text-slate-200;
390
+ }
391
+
392
+ .av-pricing-table tbody tr:nth-child(even) {
393
+ @apply bg-slate-900/40;
394
+ }
395
+
396
+ .av-pricing-chip {
397
+ @apply inline-flex items-center rounded-full bg-slate-900/80 px-3 py-1 text-[0.7rem] uppercase tracking-[0.18em] text-slate-400;
398
+ }
399
+
400
+ /* Founder / About Layout -------------------------- */
401
+
402
+ .av-founder-layout {
403
+ @apply flex flex-col gap-6 md:flex-row md:items-start;
404
+ }
405
+
406
+ .av-founder-photo-wrap {
407
+ @apply w-full md:w-1/3;
408
+ }
409
+
410
+ .av-founder-photo {
411
+ @apply w-full rounded-2xl object-cover;
412
+ box-shadow: var(--av-shadow-soft);
413
+ }
414
+
415
+ .av-founder-copy {
416
+ @apply w-full md:w-2/3 space-y-4;
417
+ }
418
+
419
+ .av-quote {
420
+ @apply border-l-4 pl-4 pr-4 py-3 rounded-xl text-base leading-relaxed;
421
+
422
+ /* Background + border */
423
+ background-color: rgba(255, 255, 255, 0.08);
424
+ border-color: var(--av-primary);
425
+
426
+ /* Contrast-safe text */
427
+ color: var(--av-text);
428
+ }
429
+
430
+ /* Typography helpers ------------------------------ */
431
+
432
+ .av-gradient-text {
433
+ /* Fallback */
434
+ color: var(--av-text-strong);
435
+
436
+ /* Gradient text for modern browsers */
437
+ background-image: linear-gradient(to right, #22d3ee, #a855f7);
438
+ background-clip: text;
439
+ -webkit-background-clip: text;
440
+ color: transparent;
441
+ -webkit-text-fill-color: transparent;
442
+ }
443
+
444
+ .av-caption {
445
+ @apply text-[0.78rem] text-slate-500;
446
+ }
447
+
448
+ .av-kicker {
449
+ @apply inline-flex items-center gap-2 rounded-full border border-slate-700/80
450
+ bg-slate-900/80 px-3 py-1 text-[0.7rem] uppercase tracking-[0.18em] text-slate-400;
451
+ }
452
+
453
+ .av-mono {
454
+ font-family: var(--av-font-mono);
455
+ }
456
+
457
+ /* Card (like Bootstrap .card) --------------------- */
458
+
459
+ .av-card {
460
+ @apply relative rounded-2xl border border-slate-800/70
461
+ bg-slate-950/80 p-6 md:p-7 shadow-xl backdrop-blur-xl;
462
+ }
463
+
464
+ .av-card-soft {
465
+ @apply rounded-xl border border-slate-800/60
466
+ bg-slate-950/60 p-4 md:p-5;
467
+ }
468
+
469
+ .av-card-header {
470
+ @apply mb-3 flex items-center justify-between gap-2;
471
+ }
472
+
473
+ .av-card-title {
474
+ @apply text-sm font-semibold text-slate-100;
475
+ }
476
+
477
+ .av-card-subtitle {
478
+ @apply text-xs text-slate-400;
479
+ }
480
+
481
+ .av-card-body {
482
+ @apply text-sm text-slate-300;
483
+ }
484
+
485
+ /* Buttons (Bootstrap-ish) ------------------------- */
486
+
487
+ .av-btn {
488
+ @apply inline-flex items-center justify-center gap-2 rounded-full px-4 py-2
489
+ text-xs md:text-sm font-medium transition-all duration-150 ease-out;
490
+ }
491
+
492
+ .av-btn-primary {
493
+ @apply inline-flex items-center justify-center gap-2 rounded-full px-4 py-2
494
+ text-xs md:text-sm font-medium transition-all duration-150 ease-out
495
+ border border-cyan-400/80
496
+ bg-cyan-500/20
497
+ text-slate-50
498
+ shadow-[0_0_30px_rgba(34,211,238,0.35)];
499
+ }
500
+
501
+ .av-btn-primary:hover {
502
+ @apply bg-cyan-500/30 border-cyan-200;
503
+ transform: translateY(-1px) scale(1.01);
504
+ }
505
+
506
+ .av-btn-ghost {
507
+ @apply inline-flex items-center justify-center gap-2 rounded-full px-4 py-2
508
+ text-xs md:text-sm font-medium transition-all duration-150 ease-out
509
+ border border-slate-700/70
510
+ bg-slate-900/70
511
+ text-slate-300;
512
+ }
513
+
514
+ .av-btn-ghost:hover {
515
+ @apply bg-slate-900 text-slate-50 border-slate-500;
516
+ }
517
+
518
+ .av-btn-outline {
519
+ @apply inline-flex items-center justify-center gap-2 rounded-full px-4 py-2
520
+ text-xs md:text-sm font-medium transition-all duration-150 ease-out
521
+ border border-cyan-400/70
522
+ bg-transparent
523
+ text-cyan-300;
524
+ }
525
+
526
+ .av-btn-outline:hover {
527
+ @apply bg-cyan-500/15 text-cyan-100 border-cyan-200;
528
+ }
529
+
530
+ .av-btn-sm {
531
+ @apply px-3 py-1.5 text-[0.7rem];
532
+ }
533
+
534
+ .av-btn-lg {
535
+ @apply px-5 py-2.5 text-sm;
536
+ }
537
+
538
+ .av-btn-block {
539
+ @apply w-full justify-center;
540
+ }
541
+
542
+ /* Forms ------------------------------------------- */
543
+
544
+ .av-form-group {
545
+ @apply space-y-1.5;
546
+ }
547
+
548
+ .av-label {
549
+ @apply text-xs font-medium text-slate-300;
550
+ }
551
+
552
+ .av-form-text {
553
+ @apply text-[0.75rem] text-slate-500;
554
+ }
555
+
556
+ .av-input,
557
+ .av-select,
558
+ .av-textarea {
559
+ @apply w-full rounded-lg border border-slate-700
560
+ bg-slate-950/60 px-3 py-2.5 text-sm text-slate-100
561
+ placeholder:text-slate-500
562
+ focus-visible:outline-none
563
+ focus-visible:ring-2 focus-visible:ring-cyan-400/80;
564
+ }
565
+
566
+ .av-input-sm {
567
+ @apply px-2.5 py-1.5 text-xs;
568
+ }
569
+
570
+ .av-textarea {
571
+ @apply min-h-[96px] resize-y;
572
+ }
573
+
574
+ .av-checkbox,
575
+ .av-radio {
576
+ @apply h-3.5 w-3.5 rounded border border-slate-600 bg-slate-950/60
577
+ text-cyan-400
578
+ focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/70;
579
+ }
580
+
581
+ .av-inline-check {
582
+ @apply inline-flex items-center gap-2 cursor-pointer select-none;
583
+ }
584
+
585
+ .av-form-row {
586
+ @apply flex items-center justify-between;
587
+ }
588
+
589
+ .av-form-hint {
590
+ @apply text-xs text-slate-400;
591
+ }
592
+
593
+ /* Navbar / Nav ------------------------------------ */
594
+
595
+ .av-navbar {
596
+ @apply border-b border-slate-800/60 bg-slate-950/60 backdrop-blur-xl;
597
+ }
598
+
599
+ .av-navbar-inner {
600
+ @apply w-full max-w-5xl mx-auto px-5 flex items-center justify-between py-3 gap-4;
601
+ }
602
+
603
+ .av-nav {
604
+ @apply flex items-center gap-4 text-xs md:text-sm;
605
+ }
606
+
607
+ .av-nav-link {
608
+ @apply text-slate-400 hover:text-slate-100 transition-colors;
609
+ }
610
+
611
+ .av-nav-link-active {
612
+ @apply text-slate-50;
613
+ }
614
+
615
+ /* Badges / Pills ---------------------------------- */
616
+
617
+ .av-badge {
618
+ @apply inline-flex items-center rounded-full border border-slate-700/70
619
+ bg-slate-900/80 px-2.5 py-0.5 text-[0.7rem] text-slate-300;
620
+ }
621
+
622
+ .av-badge-primary {
623
+ @apply inline-flex items-center rounded-full border border-cyan-400/80
624
+ bg-cyan-500/15 px-2.5 py-0.5 text-[0.7rem] text-cyan-100;
625
+ }
626
+
627
+ .av-badge-secondary {
628
+ @apply inline-flex items-center rounded-full border border-purple-500/80
629
+ bg-purple-500/15 px-2.5 py-0.5 text-[0.7rem] text-purple-100;
630
+ }
631
+
632
+ .av-badge-soft {
633
+ @apply inline-flex items-center rounded-full border border-slate-700/50
634
+ bg-slate-900/70 px-2.5 py-0.5 text-[0.7rem] text-slate-300;
635
+ }
636
+
637
+ /* Alerts ------------------------------------------ */
638
+
639
+ .av-alert {
640
+ @apply rounded-lg border px-3.5 py-2.5 text-xs md:text-sm flex items-start gap-3;
641
+ }
642
+
643
+ .av-alert-info {
644
+ @apply rounded-lg border px-3.5 py-2.5 text-xs md:text-sm flex items-start gap-3
645
+ border-cyan-400/40 bg-cyan-500/10 text-cyan-50;
646
+ }
647
+
648
+ .av-alert-success {
649
+ @apply rounded-lg border px-3.5 py-2.5 text-xs md:text-sm flex items-start gap-3
650
+ border-emerald-400/40 bg-emerald-500/10 text-emerald-50;
651
+ }
652
+
653
+ .av-alert-warning {
654
+ @apply rounded-lg border px-3.5 py-2.5 text-xs md:text-sm flex items-start gap-3
655
+ border-amber-400/50 bg-amber-500/10 text-amber-50;
656
+ }
657
+
658
+ .av-alert-danger {
659
+ @apply rounded-lg border px-3.5 py-2.5 text-xs md:text-sm flex items-start gap-3
660
+ border-rose-500/60 bg-rose-500/10 text-rose-50;
661
+ }
662
+
663
+ /* Tables ------------------------------------------ */
664
+
665
+ .av-table {
666
+ @apply w-full border-collapse text-sm text-left text-slate-300;
667
+ }
668
+
669
+ .av-table thead {
670
+ @apply text-xs uppercase tracking-[0.12em] text-slate-500;
671
+ }
672
+
673
+ .av-table thead tr {
674
+ @apply border-b border-slate-800;
675
+ }
676
+
677
+ .av-table th,
678
+ .av-table td {
679
+ @apply px-3 py-2.5 align-middle;
680
+ }
681
+
682
+ .av-table tbody tr {
683
+ @apply border-b border-slate-900/80;
684
+ }
685
+
686
+ .av-table tbody tr:hover {
687
+ @apply bg-slate-900/60;
688
+ }
689
+
690
+ /* Divider / Lines --------------------------------- */
691
+
692
+ .av-divider {
693
+ @apply w-full h-px bg-gradient-to-r from-transparent via-slate-700 to-transparent my-7;
694
+ }
695
+
696
+ /* Hero overlay card option ------------------------ */
697
+
698
+ .av-hero-card {
699
+ @apply relative rounded-2xl border border-slate-800/70
700
+ bg-slate-950/80 p-6 md:p-7 shadow-xl backdrop-blur-xl max-w-2xl;
701
+ }
702
+
703
+ /* Auth layouts ------------------------------------ */
704
+
705
+ .av-card-auth {
706
+ @apply max-w-md w-full mx-auto;
707
+ }
708
+
709
+ .av-auth-back {
710
+ @apply mt-8 flex justify-center;
711
+ }
712
+
713
+ .av-auth-back__button {
714
+ @apply text-sm;
715
+ }
716
+
717
+ .av-auth-stack-xs {
718
+ @apply space-y-1;
719
+ }
720
+
721
+ .av-auth-stack-sm {
722
+ @apply space-y-2;
723
+ }
724
+
725
+ .av-auth-stack-md {
726
+ @apply space-y-3;
727
+ }
728
+
729
+ .av-auth-stack-lg {
730
+ @apply space-y-4;
731
+ }
732
+
733
+ .av-auth-stack-xl {
734
+ @apply space-y-6;
735
+ }
736
+
737
+ .av-auth-title {
738
+ @apply text-xl font-semibold tracking-tight text-slate-100;
739
+ }
740
+
741
+ .av-auth-subtitle {
742
+ @apply text-sm text-slate-400;
743
+ }
744
+
745
+ .av-auth-grid {
746
+ @apply grid gap-3 sm:grid-cols-2;
747
+ }
748
+
749
+ .av-feature-list {
750
+ @apply grid gap-3 text-sm text-slate-400;
751
+ }
752
+
753
+ .av-feature-item {
754
+ @apply flex items-center gap-2;
755
+ }
756
+
757
+ .av-feature-dot {
758
+ @apply h-1 w-1 rounded-full;
759
+ }
760
+
761
+ .av-feature-dot--primary {
762
+ @apply bg-cyan-400/80;
763
+ }
764
+
765
+ .av-feature-dot--secondary {
766
+ @apply bg-purple-500/80;
767
+ }
768
+
769
+ .av-muted-link {
770
+ @apply text-cyan-300 hover:text-cyan-100;
771
+ }
772
+
773
+ /* Signout specifics ------------------------------- */
774
+
775
+ .av-auth-signout {
776
+ @apply flex justify-center;
777
+ }
778
+
779
+ .av-auth-signout__card {
780
+ @apply w-full max-w-2xl space-y-6;
781
+ }
782
+
783
+ .av-auth-signout__header {
784
+ @apply flex items-center gap-3;
785
+ }
786
+
787
+ .av-auth-signout__logo {
788
+ @apply h-12 w-12 rounded-xl bg-white/10 p-2 flex items-center justify-center shadow-lg;
789
+ }
790
+
791
+ .av-auth-signout__brand {
792
+ @apply flex flex-col;
793
+ }
794
+
795
+ .av-auth-signout__brand-title {
796
+ @apply uppercase tracking-[0.18em] text-sm font-semibold text-slate-100;
797
+ }
798
+
799
+ .av-auth-signout__brand-subtitle {
800
+ @apply text-xs text-slate-400;
801
+ }
802
+
803
+ .av-auth-signout__status {
804
+ @apply ml-auto inline-flex items-center gap-2 text-xs text-slate-400;
805
+ }
806
+
807
+ .av-auth-signout__status-dot {
808
+ @apply h-2 w-2 rounded-full bg-green-400 animate-pulse;
809
+ }
810
+
811
+ .av-auth-signout__badge {
812
+ @apply inline-flex items-center gap-2 px-4 py-2 rounded-full border border-white/10 bg-white/5 text-sm;
813
+ }
814
+
815
+ .av-auth-signout__heading {
816
+ @apply text-3xl font-semibold text-slate-100;
817
+ }
818
+
819
+ .av-auth-signout__copy {
820
+ @apply text-slate-400 leading-relaxed;
821
+ }
822
+
823
+ .av-auth-signout__actions {
824
+ @apply flex flex-wrap gap-3 pt-2;
825
+ }
826
+
827
+ .av-auth-signout__primary-action {
828
+ @apply text-black;
829
+ }
830
+
831
+ .av-auth-signout__status-grid {
832
+ @apply grid grid-cols-1 sm:grid-cols-2 gap-3 pt-4;
833
+ }
834
+
835
+ .av-auth-signout__status-card {
836
+ @apply flex items-start gap-3 p-3 rounded-xl border border-white/5 bg-white/5;
837
+ }
838
+
839
+ .av-auth-signout__status-indicator {
840
+ @apply h-2.5 w-2.5 rounded-full bg-[var(--ans-primary)] shadow;
841
+ }
842
+
843
+ .av-auth-signout__status-title {
844
+ @apply block text-sm text-white;
845
+ }
846
+
847
+ .av-auth-signout__status-description {
848
+ @apply block text-xs text-slate-400;
849
+ }
850
+
851
+ .av-auth-signout__footer {
852
+ @apply pt-2 text-xs text-slate-400 flex justify-between;
853
+ }
854
+
855
+ .av-auth-signout__footer-links {
856
+ @apply space-x-3;
857
+ }
858
+
859
+ /* User menu / avatar ------------------------------ */
860
+
861
+ .av-user-menu-wrapper {
862
+ @apply relative;
863
+ }
864
+
865
+ .av-user-avatar-button {
866
+ @apply inline-flex h-9 w-9 items-center justify-center rounded-full border border-slate-700 bg-slate-900 text-slate-100 shadow-sm hover:border-slate-500 transition;
867
+ }
868
+
869
+ .av-user-avatar-circle {
870
+ @apply text-sm font-medium;
871
+ }
872
+
873
+ .av-user-menu {
874
+ @apply absolute right-0 mt-3 w-64 rounded-2xl border border-slate-800 bg-slate-950/95 p-3 shadow-xl backdrop-blur;
875
+ z-index: 40;
876
+ }
877
+
878
+ .av-user-menu-header {
879
+ @apply flex items-center gap-3 pb-3;
880
+ }
881
+
882
+ .av-user-menu-avatar {
883
+ @apply flex h-9 w-9 items-center justify-center rounded-full bg-slate-800 text-slate-100 text-sm font-medium;
884
+ }
885
+
886
+ .av-user-menu-meta {
887
+ @apply flex flex-col;
888
+ }
889
+
890
+ .av-user-menu-name {
891
+ @apply text-sm font-semibold text-slate-100;
892
+ }
893
+
894
+ .av-user-menu-email {
895
+ @apply text-xs text-slate-400;
896
+ }
897
+
898
+ .av-user-menu-divider {
899
+ @apply my-2 h-px bg-slate-800;
900
+ }
901
+
902
+ .av-nav-user-menu {
903
+ @apply flex flex-col gap-1;
904
+ }
905
+
906
+ .av-user-menu-item,
907
+ .av-dropdown-item {
908
+ @apply flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm text-slate-200 hover:bg-slate-900 cursor-pointer;
909
+ }
910
+
911
+ .av-user-menu-item--danger {
912
+ @apply text-red-400 hover:bg-red-950/40;
913
+ }
914
+
915
+ /* Auth brand tweaks ------------------------------- */
916
+
917
+ .av-auth-brand--center {
918
+ justify-content: center;
919
+ text-align: center;
920
+ }
921
+
922
+ .av-auth-brand img {
923
+ filter: drop-shadow(0 0 12px rgba(255, 255, 255, 0.25))
924
+ drop-shadow(0 0 24px rgba(255, 255, 255, 0.15));
925
+ transition: transform 0.25s ease, filter 0.25s ease;
926
+ }
927
+
928
+ .av-auth-brand:hover img {
929
+ transform: scale(1.05);
930
+ filter: drop-shadow(0 0 16px rgba(255, 255, 255, 0.35))
931
+ drop-shadow(0 0 28px rgba(255, 255, 255, 0.25));
932
+ }
933
+
934
+ /* Footer ------------------------------------------ */
935
+
936
+ .av-footer {
937
+ @apply mt-10 border-t border-slate-800/70;
938
+ }
939
+
940
+ .av-footer-inner {
941
+ @apply w-full max-w-5xl mx-auto px-5 py-6 flex flex-col sm:flex-row items-center justify-between gap-3;
942
+ }
943
+
944
+ .av-footer-meta {
945
+ @apply flex items-center gap-4 text-[0.78rem] text-slate-500;
946
+ }
947
+
948
+ .av-footer-separator {
949
+ @apply text-slate-600 hidden sm:inline;
950
+ }
951
+
952
+ .av-footer-quote {
953
+ @apply text-[0.78rem] text-slate-500 hidden sm:inline;
954
+ }
955
+ }
956
+
957
+ /* =========================================
958
+ Utilities Layer
959
+ ========================================= */
960
+
961
+ @layer utilities {
962
+ .av-shadow-soft {
963
+ box-shadow: var(--av-shadow-soft);
964
+ }
965
+
966
+ .av-shadow-glow {
967
+ box-shadow: var(--av-shadow-glow);
968
+ }
969
+
970
+ .av-text-soft {
971
+ color: var(--av-text-soft);
972
+ }
973
+
974
+ .av-text-muted {
975
+ color: var(--av-text-muted);
976
+ }
977
+
978
+ .av-text-strong {
979
+ color: var(--av-text-strong);
980
+ }
981
+
982
+ .av-bg-surface {
983
+ background-color: var(--av-surface);
984
+ }
985
+
986
+ .av-bg-surface-soft {
987
+ background-color: var(--av-surface-soft);
988
+ }
989
+
990
+ .av-border-subtle {
991
+ border-color: var(--av-border-subtle);
992
+ }
993
+
994
+ .av-border-strong {
995
+ border-color: var(--av-border-strong);
996
+ }
997
+
998
+ .av-text-center {
999
+ @apply text-center;
1000
+ }
1001
+
1002
+ .av-nowrap {
1003
+ @apply whitespace-nowrap;
1004
+ }
1005
+
1006
+ /* --- USER AVATAR BUTTON --- */
1007
+ .av-user-avatar-button {
1008
+ position: relative;
1009
+ display: inline-flex;
1010
+ align-items: center;
1011
+ justify-content: center;
1012
+ width: 38px;
1013
+ height: 38px;
1014
+ border-radius: 50%;
1015
+ border: none;
1016
+ background: transparent;
1017
+ cursor: pointer;
1018
+ transition: all 0.25s ease;
1019
+ }
1020
+
1021
+ /* Avatar circle */
1022
+ .av-user-avatar-circle {
1023
+ width: 100%;
1024
+ height: 100%;
1025
+ border-radius: 50%;
1026
+ background: rgba(255, 255, 255, 0.12);
1027
+ backdrop-filter: blur(8px);
1028
+ border: 1px solid rgba(255,255,255,0.25);
1029
+
1030
+ display: flex;
1031
+ align-items: center;
1032
+ justify-content: center;
1033
+ font-weight: 600;
1034
+ color: #fff;
1035
+ font-size: 0.9rem;
1036
+
1037
+ transition: all 0.3s ease;
1038
+ position: relative;
1039
+ }
1040
+
1041
+ /* Glow ring */
1042
+ .av-user-avatar-button::before {
1043
+ content: "";
1044
+ position: absolute;
1045
+ inset: 0;
1046
+ border-radius: 50%;
1047
+ background: radial-gradient(
1048
+ circle at center,
1049
+ rgba(var(--ans-primary-rgb), 0.6),
1050
+ rgba(var(--ans-primary-rgb), 0.15) 40%,
1051
+ transparent 70%
1052
+ );
1053
+ opacity: 0;
1054
+ transform: scale(0.7);
1055
+ transition: all 0.35s ease;
1056
+ pointer-events: none;
1057
+ }
1058
+
1059
+ /* Hover state */
1060
+ .av-user-avatar-button:hover::before {
1061
+ opacity: 1;
1062
+ transform: scale(1);
1063
+ }
1064
+
1065
+ .av-user-avatar-button:hover .av-user-avatar-circle {
1066
+ background: rgba(255, 255, 255, 0.18);
1067
+ border-color: rgba(255,255,255,0.35);
1068
+ }
1069
+
1070
+ /* Active (click) */
1071
+ .av-user-avatar-button:active::before {
1072
+ transform: scale(0.9);
1073
+ }
1074
+
1075
+ .av-user-avatar-button:active .av-user-avatar-circle {
1076
+ transform: scale(0.96);
1077
+ }
1078
+
1079
+
1080
+ .av-input-wrapper {
1081
+ position: relative;
1082
+ }
1083
+
1084
+ .av-input-password-container {
1085
+ position: relative;
1086
+ }
1087
+
1088
+ .av-password-toggle {
1089
+ position: absolute;
1090
+ right: 0.75rem;
1091
+ top: 50%;
1092
+ transform: translateY(-50%);
1093
+ background: transparent;
1094
+ border: none;
1095
+ padding: 0;
1096
+ cursor: pointer;
1097
+ color: var(--av-text-soft);
1098
+ }
1099
+
1100
+ .av-password-toggle:hover {
1101
+ color: var(--av-text);
1102
+ }
1103
+
1104
+ .av-password-icon {
1105
+ width: 20px;
1106
+ height: 20px;
1107
+ stroke-width: 1.75;
1108
+ }
1109
+
1110
+ }
1111
+
1112
+