omnira-ui 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.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/cli/omnira-init.mjs +260 -0
  4. package/cli/presets.mjs +386 -0
  5. package/components/ui/AppStoreButton/AppStoreButton.module.css +87 -0
  6. package/components/ui/AppStoreButton/AppStoreButton.tsx +114 -0
  7. package/components/ui/AppStoreButton/index.ts +2 -0
  8. package/components/ui/Avatar/Avatar.module.css +76 -0
  9. package/components/ui/Avatar/Avatar.tsx +102 -0
  10. package/components/ui/Avatar/index.ts +2 -0
  11. package/components/ui/Badge/Badge.module.css +120 -0
  12. package/components/ui/Badge/Badge.tsx +25 -0
  13. package/components/ui/Badge/index.ts +2 -0
  14. package/components/ui/BadgeGroup/BadgeGroup.module.css +214 -0
  15. package/components/ui/BadgeGroup/BadgeGroup.tsx +88 -0
  16. package/components/ui/BadgeGroup/index.ts +2 -0
  17. package/components/ui/Browser/Browser.module.css +105 -0
  18. package/components/ui/Browser/Browser.tsx +54 -0
  19. package/components/ui/Browser/index.ts +2 -0
  20. package/components/ui/Button/Button.module.css +188 -0
  21. package/components/ui/Button/Button.tsx +74 -0
  22. package/components/ui/Button/index.ts +2 -0
  23. package/components/ui/ButtonUtility/ButtonUtility.module.css +154 -0
  24. package/components/ui/ButtonUtility/ButtonUtility.tsx +65 -0
  25. package/components/ui/ButtonUtility/index.ts +2 -0
  26. package/components/ui/Card/Card.module.css +80 -0
  27. package/components/ui/Card/Card.tsx +39 -0
  28. package/components/ui/Card/index.ts +2 -0
  29. package/components/ui/Checkbox/Checkbox.module.css +92 -0
  30. package/components/ui/Checkbox/Checkbox.tsx +95 -0
  31. package/components/ui/Checkbox/index.ts +2 -0
  32. package/components/ui/Collapse/Collapse.module.css +60 -0
  33. package/components/ui/Collapse/Collapse.tsx +100 -0
  34. package/components/ui/Collapse/index.ts +2 -0
  35. package/components/ui/CreditCard/CreditCard.module.css +117 -0
  36. package/components/ui/CreditCard/CreditCard.tsx +86 -0
  37. package/components/ui/CreditCard/index.ts +2 -0
  38. package/components/ui/Dropdown/Dropdown.module.css +269 -0
  39. package/components/ui/Dropdown/Dropdown.tsx +419 -0
  40. package/components/ui/Dropdown/index.ts +31 -0
  41. package/components/ui/GridLines/GridLines.module.css +95 -0
  42. package/components/ui/GridLines/GridLines.tsx +10 -0
  43. package/components/ui/GridLines/index.ts +1 -0
  44. package/components/ui/Illustration/Illustration.module.css +10 -0
  45. package/components/ui/Illustration/Illustration.tsx +96 -0
  46. package/components/ui/Illustration/index.ts +2 -0
  47. package/components/ui/Input/Input.module.css +217 -0
  48. package/components/ui/Input/Input.tsx +93 -0
  49. package/components/ui/Input/index.ts +2 -0
  50. package/components/ui/Phone/Phone.module.css +104 -0
  51. package/components/ui/Phone/Phone.tsx +54 -0
  52. package/components/ui/Phone/index.ts +2 -0
  53. package/components/ui/PinInput/PinInput.module.css +104 -0
  54. package/components/ui/PinInput/PinInput.tsx +210 -0
  55. package/components/ui/PinInput/index.ts +1 -0
  56. package/components/ui/ProgressBar/ProgressBar.module.css +180 -0
  57. package/components/ui/ProgressBar/ProgressBar.tsx +206 -0
  58. package/components/ui/ProgressBar/index.ts +2 -0
  59. package/components/ui/QRCode/QRCode.module.css +13 -0
  60. package/components/ui/QRCode/QRCode.tsx +128 -0
  61. package/components/ui/QRCode/index.ts +2 -0
  62. package/components/ui/RadioButton/RadioButton.module.css +92 -0
  63. package/components/ui/RadioButton/RadioButton.tsx +134 -0
  64. package/components/ui/RadioButton/index.ts +2 -0
  65. package/components/ui/RadioGroup/RadioGroup.module.css +382 -0
  66. package/components/ui/RadioGroup/RadioGroup.tsx +292 -0
  67. package/components/ui/RadioGroup/index.ts +1 -0
  68. package/components/ui/Rating/Rating.module.css +99 -0
  69. package/components/ui/Rating/Rating.tsx +123 -0
  70. package/components/ui/Rating/index.ts +2 -0
  71. package/components/ui/Select/Select.module.css +371 -0
  72. package/components/ui/Select/Select.tsx +507 -0
  73. package/components/ui/Select/index.ts +2 -0
  74. package/components/ui/SidebarNavigation/SidebarDual.tsx +71 -0
  75. package/components/ui/SidebarNavigation/SidebarFeatureCard.module.css +351 -0
  76. package/components/ui/SidebarNavigation/SidebarFeatureCard.tsx +388 -0
  77. package/components/ui/SidebarNavigation/SidebarNavigation.module.css +610 -0
  78. package/components/ui/SidebarNavigation/SidebarParts.tsx +215 -0
  79. package/components/ui/SidebarNavigation/SidebarSectionDividers.tsx +46 -0
  80. package/components/ui/SidebarNavigation/SidebarSectionHeadings.tsx +52 -0
  81. package/components/ui/SidebarNavigation/SidebarSimple.tsx +46 -0
  82. package/components/ui/SidebarNavigation/SidebarSlim.tsx +48 -0
  83. package/components/ui/SidebarNavigation/index.ts +29 -0
  84. package/components/ui/SidebarNavigation/types.ts +27 -0
  85. package/components/ui/Slider/Slider.module.css +93 -0
  86. package/components/ui/Slider/Slider.tsx +118 -0
  87. package/components/ui/Slider/index.ts +2 -0
  88. package/components/ui/SocialButton/SocialButton.module.css +223 -0
  89. package/components/ui/SocialButton/SocialButton.tsx +185 -0
  90. package/components/ui/SocialButton/index.ts +2 -0
  91. package/components/ui/Tag/Tag.module.css +203 -0
  92. package/components/ui/Tag/Tag.tsx +161 -0
  93. package/components/ui/Tag/index.ts +2 -0
  94. package/components/ui/TextEditor/TextEditor.module.css +182 -0
  95. package/components/ui/TextEditor/TextEditor.tsx +323 -0
  96. package/components/ui/TextEditor/index.ts +1 -0
  97. package/components/ui/Textarea/Textarea.module.css +75 -0
  98. package/components/ui/Textarea/Textarea.tsx +59 -0
  99. package/components/ui/Textarea/index.ts +2 -0
  100. package/components/ui/Toggle/Toggle.module.css +118 -0
  101. package/components/ui/Toggle/Toggle.tsx +77 -0
  102. package/components/ui/Toggle/index.ts +2 -0
  103. package/components/ui/Tooltip/Tooltip.module.css +95 -0
  104. package/components/ui/Tooltip/Tooltip.tsx +55 -0
  105. package/components/ui/Tooltip/index.ts +2 -0
  106. package/components/ui/VideoPlayer/VideoPlayer.module.css +120 -0
  107. package/components/ui/VideoPlayer/VideoPlayer.tsx +229 -0
  108. package/components/ui/VideoPlayer/index.ts +2 -0
  109. package/lib/cn.ts +3 -0
  110. package/lib/copy-to-clipboard.ts +21 -0
  111. package/package.json +61 -0
@@ -0,0 +1,610 @@
1
+ /* ── Sidebar Shell ── */
2
+ .sidebar {
3
+ display: flex;
4
+ flex-direction: column;
5
+ width: 280px;
6
+ min-height: 680px;
7
+ border-radius: var(--radius-xl);
8
+ background: var(--color-bg-card);
9
+ border: 1px solid var(--color-border-standard);
10
+ backdrop-filter: var(--blur-standard);
11
+ padding: 16px 12px;
12
+ gap: 4px;
13
+ overflow-y: auto;
14
+ }
15
+
16
+ .sidebarSlim {
17
+ width: 64px;
18
+ align-items: center;
19
+ padding: 16px 8px;
20
+ overflow: visible;
21
+ }
22
+
23
+ .sidebarDual {
24
+ width: 320px;
25
+ flex-direction: row;
26
+ padding: 0;
27
+ gap: 0;
28
+ }
29
+
30
+ /* ── Dual sidebar rail ── */
31
+ .dualRail {
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ gap: 4px;
36
+ padding: 16px 8px;
37
+ width: 56px;
38
+ flex-shrink: 0;
39
+ border-right: 1px solid var(--color-border-standard);
40
+ }
41
+
42
+ .dualRailItem {
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ width: 40px;
47
+ height: 40px;
48
+ border-radius: var(--radius-md);
49
+ background: transparent;
50
+ border: none;
51
+ color: var(--color-text-tertiary);
52
+ cursor: pointer;
53
+ transition: all 0.2s ease;
54
+ }
55
+
56
+ .dualRailItem:hover {
57
+ background: var(--color-bg-hover);
58
+ color: var(--color-text-primary);
59
+ }
60
+
61
+ .dualRailItemActive {
62
+ background: var(--color-bg-lime-subtle);
63
+ color: var(--color-lime);
64
+ }
65
+
66
+ .dualContent {
67
+ display: flex;
68
+ flex-direction: column;
69
+ flex: 1;
70
+ padding: 16px 12px;
71
+ gap: 4px;
72
+ overflow-y: auto;
73
+ }
74
+
75
+ /* ── Nav Item ── */
76
+ .navItem {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 10px;
80
+ padding: 8px 12px;
81
+ border-radius: var(--radius-md);
82
+ font-size: 14px;
83
+ font-weight: 500;
84
+ color: var(--color-text-secondary);
85
+ text-decoration: none;
86
+ cursor: pointer;
87
+ transition: all 0.2s ease;
88
+ border: none;
89
+ background: transparent;
90
+ width: 100%;
91
+ text-align: left;
92
+ }
93
+
94
+ .navItem:hover {
95
+ background: var(--color-bg-hover);
96
+ color: var(--color-text-primary);
97
+ }
98
+
99
+ .navItemActive {
100
+ background: var(--color-bg-lime-subtle);
101
+ color: var(--color-lime);
102
+ font-weight: 600;
103
+ }
104
+
105
+ .navItemIcon {
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ flex-shrink: 0;
110
+ width: 20px;
111
+ height: 20px;
112
+ }
113
+
114
+ .navItemLabel {
115
+ flex: 1;
116
+ white-space: nowrap;
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ }
120
+
121
+ .navItemBadge {
122
+ flex-shrink: 0;
123
+ margin-left: auto;
124
+ }
125
+
126
+ .navItemChevron {
127
+ flex-shrink: 0;
128
+ display: flex;
129
+ align-items: center;
130
+ transition: transform 0.2s ease;
131
+ color: var(--color-text-tertiary);
132
+ }
133
+
134
+ .navItemChevronOpen {
135
+ transform: rotate(180deg);
136
+ }
137
+
138
+ /* ── Slim nav item ── */
139
+ .navItemSlim {
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ width: 40px;
144
+ height: 40px;
145
+ border-radius: var(--radius-md);
146
+ background: transparent;
147
+ border: none;
148
+ color: var(--color-text-tertiary);
149
+ cursor: pointer;
150
+ transition: all 0.2s ease;
151
+ position: relative;
152
+ }
153
+
154
+ .navItemSlim:hover {
155
+ background: var(--color-bg-hover);
156
+ color: var(--color-text-primary);
157
+ }
158
+
159
+ .navItemSlimActive {
160
+ background: var(--color-bg-lime-subtle);
161
+ color: var(--color-lime);
162
+ }
163
+
164
+ .slimTooltip {
165
+ position: absolute;
166
+ left: calc(100% + 8px);
167
+ top: 50%;
168
+ transform: translateY(-50%) translateX(4px);
169
+ padding: 6px 12px;
170
+ border-radius: var(--radius-sm);
171
+ background: var(--color-bg-elevated);
172
+ border: 1px solid var(--color-border-standard);
173
+ box-shadow: var(--shadow-card);
174
+ font-size: 12px;
175
+ font-weight: 600;
176
+ color: var(--color-text-primary);
177
+ white-space: nowrap;
178
+ pointer-events: none;
179
+ opacity: 0;
180
+ transition: opacity 0.15s ease, transform 0.15s ease;
181
+ z-index: 20;
182
+ }
183
+
184
+ .navItemSlim:hover .slimTooltip {
185
+ opacity: 1;
186
+ transform: translateY(-50%) translateX(0);
187
+ }
188
+
189
+ /* ── Sub items ── */
190
+ .subItems {
191
+ display: flex;
192
+ flex-direction: column;
193
+ gap: 2px;
194
+ padding-left: 30px;
195
+ margin-top: 2px;
196
+ margin-bottom: 4px;
197
+ }
198
+
199
+ .subItem {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 8px;
203
+ padding: 6px 12px;
204
+ border-radius: var(--radius-sm);
205
+ font-size: 13px;
206
+ font-weight: 500;
207
+ color: var(--color-text-tertiary);
208
+ text-decoration: none;
209
+ cursor: pointer;
210
+ transition: all 0.2s ease;
211
+ }
212
+
213
+ .subItem:hover {
214
+ background: var(--color-bg-hover);
215
+ color: var(--color-text-primary);
216
+ }
217
+
218
+ .subItemActive {
219
+ color: var(--color-lime);
220
+ font-weight: 600;
221
+ }
222
+
223
+ .subItemBadge {
224
+ margin-left: auto;
225
+ font-size: 11px;
226
+ font-weight: 700;
227
+ color: var(--color-text-tertiary);
228
+ background: var(--color-bg-elevated);
229
+ border: 1px solid var(--color-border-standard);
230
+ border-radius: var(--radius-full);
231
+ padding: 1px 8px;
232
+ min-width: 22px;
233
+ text-align: center;
234
+ }
235
+
236
+ /* ── Divider ── */
237
+ .divider {
238
+ height: 1px;
239
+ background: var(--color-border-standard);
240
+ margin: 8px 0;
241
+ border: none;
242
+ }
243
+
244
+ /* ── Section heading ── */
245
+ .sectionHeading {
246
+ font-size: 11px;
247
+ font-weight: 700;
248
+ text-transform: uppercase;
249
+ letter-spacing: 0.06em;
250
+ color: var(--color-text-tertiary);
251
+ padding: 12px 12px 4px;
252
+ user-select: none;
253
+ }
254
+
255
+ /* ── Logo / Brand ── */
256
+ .brand {
257
+ display: flex;
258
+ align-items: center;
259
+ gap: 10px;
260
+ padding: 4px 12px 12px;
261
+ margin-bottom: 4px;
262
+ border-bottom: 1px solid var(--color-border-standard);
263
+ }
264
+
265
+ .brandLogo {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ width: 32px;
270
+ height: 32px;
271
+ border-radius: var(--radius-md);
272
+ background: var(--color-bg-lime-subtle);
273
+ border: 1px solid var(--color-border-lime-subtle);
274
+ font-family: var(--font-display);
275
+ font-size: 14px;
276
+ font-weight: 800;
277
+ color: var(--color-lime);
278
+ flex-shrink: 0;
279
+ }
280
+
281
+ .brandName {
282
+ font-family: var(--font-display);
283
+ font-size: 15px;
284
+ font-weight: 700;
285
+ color: var(--color-text-primary);
286
+ letter-spacing: -0.01em;
287
+ }
288
+
289
+ /* ── Search bar ── */
290
+ .searchBar {
291
+ display: flex;
292
+ align-items: center;
293
+ gap: 8px;
294
+ padding: 8px 12px;
295
+ border-radius: var(--radius-md);
296
+ background: var(--color-bg-input);
297
+ border: 1px solid var(--color-border-standard);
298
+ margin-bottom: 8px;
299
+ cursor: text;
300
+ }
301
+
302
+ .searchIcon {
303
+ display: flex;
304
+ align-items: center;
305
+ flex-shrink: 0;
306
+ color: var(--color-text-tertiary);
307
+ }
308
+
309
+ .searchText {
310
+ flex: 1;
311
+ font-size: 13px;
312
+ color: var(--color-text-tertiary);
313
+ }
314
+
315
+ .searchShortcut {
316
+ font-size: 11px;
317
+ font-weight: 600;
318
+ color: var(--color-text-tertiary);
319
+ background: var(--color-bg-elevated);
320
+ border: 1px solid var(--color-border-standard);
321
+ border-radius: var(--radius-sm);
322
+ padding: 2px 6px;
323
+ flex-shrink: 0;
324
+ }
325
+
326
+ /* ── External link icon ── */
327
+ .externalIcon {
328
+ display: flex;
329
+ align-items: center;
330
+ flex-shrink: 0;
331
+ color: var(--color-text-tertiary);
332
+ margin-left: auto;
333
+ }
334
+
335
+ /* ── Footer area ── */
336
+ .sidebarFooter {
337
+ margin-top: auto;
338
+ padding-top: 8px;
339
+ border-top: 1px solid var(--color-border-standard);
340
+ }
341
+
342
+ /* ── User card ── */
343
+ .userCardWrap {
344
+ margin-top: auto;
345
+ padding: 8px 4px 4px;
346
+ position: relative;
347
+ }
348
+
349
+ .userCard {
350
+ display: flex;
351
+ align-items: center;
352
+ gap: 10px;
353
+ padding: 12px;
354
+ cursor: pointer;
355
+ transition: background 0.15s ease;
356
+ border-radius: var(--radius-md);
357
+ border: 1px solid var(--color-border-standard);
358
+ background: var(--color-bg-card);
359
+ }
360
+
361
+ .userCard:hover {
362
+ background: var(--color-bg-hover);
363
+ }
364
+
365
+ /* ── User card popup ── */
366
+ .userPopup {
367
+ position: absolute;
368
+ bottom: calc(100% + 4px);
369
+ left: 4px;
370
+ right: 4px;
371
+ border-radius: var(--radius-lg);
372
+ background: var(--color-bg-secondary);
373
+ border: 1px solid var(--color-border-standard);
374
+ box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.5);
375
+ padding: 4px;
376
+ z-index: 50;
377
+ animation: popupSlideUp 0.15s ease;
378
+ }
379
+
380
+ @keyframes popupSlideUp {
381
+ from { opacity: 0; transform: translateY(4px); }
382
+ to { opacity: 1; transform: translateY(0); }
383
+ }
384
+
385
+ .popupItem {
386
+ display: flex;
387
+ align-items: center;
388
+ gap: 10px;
389
+ padding: 8px 12px;
390
+ border-radius: var(--radius-sm);
391
+ font-size: 13px;
392
+ font-weight: 500;
393
+ color: var(--color-text-secondary);
394
+ cursor: pointer;
395
+ transition: background 0.15s ease;
396
+ border: none;
397
+ background: transparent;
398
+ width: 100%;
399
+ text-align: left;
400
+ text-decoration: none;
401
+ }
402
+
403
+ .popupItem:hover {
404
+ background: var(--color-bg-hover);
405
+ color: var(--color-text-primary);
406
+ }
407
+
408
+ .popupItemIcon {
409
+ display: flex;
410
+ align-items: center;
411
+ flex-shrink: 0;
412
+ color: var(--color-text-tertiary);
413
+ }
414
+
415
+ .popupItemShortcut {
416
+ margin-left: auto;
417
+ font-size: 11px;
418
+ font-weight: 600;
419
+ color: var(--color-text-tertiary);
420
+ }
421
+
422
+ .popupDivider {
423
+ height: 1px;
424
+ background: var(--color-border-standard);
425
+ margin: 4px 0;
426
+ border: none;
427
+ }
428
+
429
+ .popupSectionLabel {
430
+ font-size: 11px;
431
+ font-weight: 700;
432
+ color: var(--color-text-tertiary);
433
+ text-transform: uppercase;
434
+ letter-spacing: 0.05em;
435
+ padding: 8px 12px 4px;
436
+ }
437
+
438
+ .popupAccountRow {
439
+ display: flex;
440
+ align-items: center;
441
+ gap: 10px;
442
+ padding: 8px 12px;
443
+ border-radius: var(--radius-sm);
444
+ cursor: pointer;
445
+ transition: background 0.15s ease;
446
+ border: none;
447
+ background: transparent;
448
+ width: 100%;
449
+ text-align: left;
450
+ }
451
+
452
+ .popupAccountRow:hover {
453
+ background: var(--color-bg-hover);
454
+ }
455
+
456
+ .popupAccountAvatar {
457
+ width: 32px;
458
+ height: 32px;
459
+ border-radius: 50%;
460
+ background: var(--color-bg-lime-subtle);
461
+ border: 1px solid var(--color-border-lime-subtle);
462
+ display: flex;
463
+ align-items: center;
464
+ justify-content: center;
465
+ flex-shrink: 0;
466
+ font-size: 11px;
467
+ font-weight: 700;
468
+ color: var(--color-lime);
469
+ }
470
+
471
+ .popupAccountInfo {
472
+ display: flex;
473
+ flex-direction: column;
474
+ gap: 1px;
475
+ flex: 1;
476
+ min-width: 0;
477
+ }
478
+
479
+ .popupAccountName {
480
+ font-size: 13px;
481
+ font-weight: 600;
482
+ color: var(--color-text-primary);
483
+ }
484
+
485
+ .popupAccountEmail {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: 4px;
489
+ font-size: 11px;
490
+ color: var(--color-text-tertiary);
491
+ }
492
+
493
+ .popupRadio {
494
+ width: 16px;
495
+ height: 16px;
496
+ border-radius: 50%;
497
+ border: 2px solid var(--color-border-standard);
498
+ flex-shrink: 0;
499
+ display: flex;
500
+ align-items: center;
501
+ justify-content: center;
502
+ margin-left: auto;
503
+ }
504
+
505
+ .popupRadioActive {
506
+ border-color: var(--color-lime);
507
+ background: var(--color-lime);
508
+ }
509
+
510
+ .popupRadioActive::after {
511
+ content: "";
512
+ width: 6px;
513
+ height: 6px;
514
+ border-radius: 50%;
515
+ background: var(--color-lime-text);
516
+ }
517
+
518
+ .popupItemDanger {
519
+ color: #ef4444;
520
+ }
521
+
522
+ .popupItemDanger:hover {
523
+ background: rgba(239, 68, 68, 0.08);
524
+ color: #ef4444;
525
+ }
526
+
527
+ .userAvatar {
528
+ width: 36px;
529
+ height: 36px;
530
+ border-radius: 50%;
531
+ background: var(--color-bg-lime-subtle);
532
+ border: 1px solid var(--color-border-lime-subtle);
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ flex-shrink: 0;
537
+ font-size: 13px;
538
+ font-weight: 700;
539
+ color: var(--color-lime);
540
+ }
541
+
542
+ .userInfo {
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 1px;
546
+ flex: 1;
547
+ min-width: 0;
548
+ }
549
+
550
+ .userName {
551
+ font-size: 13px;
552
+ font-weight: 600;
553
+ color: var(--color-text-primary);
554
+ white-space: nowrap;
555
+ overflow: hidden;
556
+ text-overflow: ellipsis;
557
+ }
558
+
559
+ .userEmail {
560
+ display: flex;
561
+ align-items: center;
562
+ gap: 4px;
563
+ font-size: 11px;
564
+ color: var(--color-text-tertiary);
565
+ white-space: nowrap;
566
+ overflow: hidden;
567
+ text-overflow: ellipsis;
568
+ }
569
+
570
+ .userOnlineDot {
571
+ width: 6px;
572
+ height: 6px;
573
+ border-radius: 50%;
574
+ background: #22c55e;
575
+ flex-shrink: 0;
576
+ }
577
+
578
+ .userChevron {
579
+ display: flex;
580
+ align-items: center;
581
+ flex-shrink: 0;
582
+ color: var(--color-text-tertiary);
583
+ }
584
+
585
+ /* ── Feature card slot ── */
586
+ .featureCard {
587
+ margin-top: auto;
588
+ padding: 16px;
589
+ border-radius: var(--radius-lg);
590
+ background: var(--color-bg-elevated);
591
+ border: 1px solid var(--color-border-standard);
592
+ }
593
+
594
+ /* ── Flush variant for dashboard previews ── */
595
+ .sidebarFlush {
596
+ min-height: 780px;
597
+ margin: 5px 0 5px 5px;
598
+ border-radius: var(--radius-lg);
599
+ }
600
+
601
+ @media (max-width: 767px) {
602
+ .sidebar {
603
+ width: 100%;
604
+ min-height: auto;
605
+ }
606
+
607
+ .sidebarDual {
608
+ width: 100%;
609
+ }
610
+ }