astralkit 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,557 @@
1
+
2
+
3
+ /* Mobile primitives -- overlays, sheets, drawers, bars, tabs, takeovers, mobile nav */
4
+
5
+
6
+
7
+ /* Mobile overlay transition */
8
+ .ak-mobile-overlay {
9
+ position: fixed; inset: 0;
10
+ z-index: var(--z-ak-overlay);
11
+ background: var(--color-ak-overlay);
12
+ opacity: 0; visibility: hidden;
13
+ transition: opacity 240ms cubic-bezier(0.4, 0, 0.2, 1),
14
+ visibility 240ms cubic-bezier(0.4, 0, 0.2, 1);
15
+ }
16
+ .ak-mobile-overlay-open { opacity: 1; visibility: visible; }
17
+
18
+ /* Mobile sheet transition */
19
+ .ak-mobile-sheet {
20
+ position: fixed;
21
+ bottom: 0; left: 0; right: 0;
22
+ z-index: var(--z-ak-modal);
23
+ max-height: 85vh;
24
+ overflow-y: auto;
25
+ border-radius: var(--radius-ak-lg) var(--radius-ak-lg) 0 0;
26
+ transform: translateY(100%);
27
+ transition: transform 240ms cubic-bezier(0.4, 0, 0.2, 1);
28
+ }
29
+ .ak-mobile-sheet-open,
30
+ .ak-mobile-sheet.ak-open { transform: translateY(0); }
31
+ .ak-mobile-sheet-handle {
32
+ display: flex;
33
+ justify-content: center;
34
+ padding-top: var(--spacing-ak-1);
35
+ touch-action: none;
36
+ -webkit-user-select: none;
37
+ user-select: none;
38
+ cursor: grab;
39
+ }
40
+ .ak-mobile-sheet-handle:active { cursor: grabbing; }
41
+ .ak-mobile-sheet-handle::before {
42
+ content: "";
43
+ display: block;
44
+ width: var(--size-ak-sheet-handle-width);
45
+ height: var(--size-ak-sheet-handle-height);
46
+ background: var(--color-ak-sheet-handle);
47
+ border-radius: var(--radius-ak-full);
48
+ }
49
+
50
+ /* Mobile bar labels */
51
+ .ak-mobile-label { font-size: var(--text-ak-base); font-weight: 600; line-height: 1.25; letter-spacing: var(--tracking-ak-normal); }
52
+
53
+ /* Mobile bar (bottom navigation) */
54
+ .ak-mobile-bar {
55
+ position: fixed;
56
+ bottom: 0;
57
+ left: 0;
58
+ right: 0;
59
+ z-index: var(--z-ak-sticky);
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: space-around;
63
+ height: var(--spacing-ak-mobile-bar, 3.5rem);
64
+ background: var(--color-ak-bg);
65
+ border-top: 1px solid var(--color-ak-border);
66
+ }
67
+ .ak-mobile-tab {
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ gap: 0.125rem;
72
+ padding: 0.375rem;
73
+ color: var(--color-ak-text-muted);
74
+ cursor: pointer;
75
+ text-decoration: none;
76
+ transition: color var(--duration-ak-fast) var(--ease-ak-default);
77
+ }
78
+ .ak-mobile-tab-active::after {
79
+ content: '';
80
+ display: block;
81
+ width: 4px;
82
+ height: 4px;
83
+ border-radius: var(--radius-ak-full);
84
+ background: var(--color-ak-primary);
85
+ }
86
+ .ak-mobile-tabbar {
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: space-around;
90
+ }
91
+ .ak-mobile-tabs {
92
+ display: flex;
93
+ overflow-x: auto;
94
+ -webkit-overflow-scrolling: touch;
95
+ }
96
+ .ak-mobile-tabs::-webkit-scrollbar { display: none; }
97
+
98
+ /* Mobile backdrop */
99
+ .ak-mobile-backdrop {
100
+ position: fixed;
101
+ inset: 0;
102
+ z-index: var(--z-ak-overlay);
103
+ background: var(--color-ak-overlay);
104
+ opacity: 0;
105
+ transition: opacity 240ms cubic-bezier(0.4, 0, 0.2, 1);
106
+ }
107
+ .ak-mobile-backdrop.ak-open { opacity: 1; }
108
+
109
+ /* Mobile drawer */
110
+ .ak-mobile-drawer {
111
+ position: fixed;
112
+ top: 0;
113
+ left: 0;
114
+ bottom: 0;
115
+ z-index: var(--z-ak-modal);
116
+ width: 20rem;
117
+ max-width: 85vw;
118
+ background: var(--color-ak-bg);
119
+ transform: translateX(-100%);
120
+ transition: transform 240ms cubic-bezier(0.4, 0, 0.2, 1);
121
+ overflow-y: auto;
122
+ }
123
+ .ak-mobile-drawer.ak-open { transform: translateX(0); }
124
+ .ak-mobile-drawer-header {
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: space-between;
128
+ padding: 1rem;
129
+ }
130
+ .ak-mobile-drawer-body {
131
+ display: flex;
132
+ flex-direction: column;
133
+ }
134
+
135
+ /* Mobile nav */
136
+ .ak-mobile-nav {
137
+ display: flex;
138
+ flex-direction: column;
139
+ }
140
+ .ak-mobile-nav-link {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 0.75rem;
144
+ padding: 0.75rem 1rem;
145
+ color: var(--color-ak-text-secondary);
146
+ cursor: pointer;
147
+ text-decoration: none;
148
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default),
149
+ color var(--duration-ak-fast) var(--ease-ak-default);
150
+ }
151
+ .ak-mobile-nav-link i {
152
+ font-size: var(--size-ak-icon-lg);
153
+ }
154
+ .ak-mobile-nav-link:hover { background: var(--color-ak-hover); }
155
+ .ak-mobile-nav-link:focus { outline: none; }
156
+ .ak-mobile-nav-link:focus-visible {
157
+ outline: 2px solid var(--color-ak-border-focus);
158
+ outline-offset: -2px;
159
+ }
160
+ .ak-mobile-nav-link[aria-current="page"] {
161
+ color: var(--color-ak-text);
162
+ font-weight: 600;
163
+ }
164
+ .ak-mobile-nav-link[aria-current="page"] i {
165
+ color: var(--color-ak-text);
166
+ }
167
+ .ak-mobile-nav-label {
168
+ font-size: var(--text-ak-xs);
169
+ font-weight: 600;
170
+ letter-spacing: 0.05em;
171
+ text-transform: uppercase;
172
+ color: var(--color-ak-text-muted);
173
+ padding: 0.75rem 1rem 0.25rem;
174
+ }
175
+ .ak-mobile-nav-badge {
176
+ font-size: var(--text-ak-xs);
177
+ font-weight: 600;
178
+ padding: 0.125rem 0.375rem;
179
+ border-radius: var(--radius-ak-full);
180
+ background: var(--color-ak-primary);
181
+ color: var(--color-ak-on-primary);
182
+ }
183
+ .ak-mobile-nav-section {
184
+ display: flex;
185
+ flex-direction: column;
186
+ }
187
+
188
+ /* Mobile trigger / close */
189
+ .ak-mobile-trigger {
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ border: none;
194
+ background: none;
195
+ cursor: pointer;
196
+ color: var(--color-ak-text);
197
+ }
198
+ .ak-mobile-trigger i {
199
+ font-size: var(--size-ak-icon-lg);
200
+ }
201
+ .ak-mobile-trigger:focus { outline: none; }
202
+ .ak-mobile-trigger:focus-visible {
203
+ outline: 2px solid var(--color-ak-border-focus);
204
+ outline-offset: 2px;
205
+ }
206
+ .ak-mobile-close {
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ border: none;
211
+ background: none;
212
+ cursor: pointer;
213
+ color: var(--color-ak-text-muted);
214
+ transition: color var(--duration-ak-fast) var(--ease-ak-default);
215
+ }
216
+ .ak-mobile-close i {
217
+ font-size: var(--size-ak-icon-lg);
218
+ }
219
+ .ak-mobile-close:hover { color: var(--color-ak-text); }
220
+ .ak-mobile-close:focus { outline: none; }
221
+ .ak-mobile-close:focus-visible {
222
+ outline: 2px solid var(--color-ak-border-focus);
223
+ outline-offset: 2px;
224
+ }
225
+
226
+ /* Mobile user card */
227
+ .ak-mobile-user {
228
+ display: flex;
229
+ align-items: center;
230
+ gap: 0.75rem;
231
+ }
232
+ .ak-mobile-user-avatar {
233
+ width: 2.5rem;
234
+ height: 2.5rem;
235
+ border-radius: var(--radius-ak-full);
236
+ overflow: hidden;
237
+ flex-shrink: 0;
238
+ }
239
+ .ak-mobile-user-name {
240
+ font-size: var(--text-ak-sm);
241
+ font-weight: 600;
242
+ color: var(--color-ak-text);
243
+ }
244
+ .ak-mobile-user-email {
245
+ font-size: var(--text-ak-xs);
246
+ color: var(--color-ak-text-muted);
247
+ }
248
+ .ak-mobile-user-role {
249
+ font-size: var(--text-ak-xs);
250
+ color: var(--color-ak-text-muted);
251
+ }
252
+ .ak-mobile-user-card {
253
+ display: flex;
254
+ align-items: center;
255
+ gap: 0.75rem;
256
+ padding: 0.75rem 1rem;
257
+ }
258
+ .ak-mobile-user-avatar-status {
259
+ position: absolute;
260
+ bottom: 0;
261
+ right: 0;
262
+ width: 10px;
263
+ height: 10px;
264
+ border-radius: var(--radius-ak-full);
265
+ border: 2px solid var(--color-ak-bg);
266
+ }
267
+
268
+ /* Mobile theme controls */
269
+ .ak-mobile-theme-row {
270
+ display: flex;
271
+ gap: 0.5rem;
272
+ }
273
+ .ak-mobile-theme-label {
274
+ font-size: var(--text-ak-xs);
275
+ color: var(--color-ak-text-muted);
276
+ }
277
+ .ak-mobile-theme-btn {
278
+ display: flex;
279
+ align-items: center;
280
+ justify-content: center;
281
+ width: 2.5rem;
282
+ height: 2.5rem;
283
+ border-radius: var(--radius-ak-md);
284
+ border: 1px solid var(--color-ak-border);
285
+ background: none;
286
+ color: var(--color-ak-text-secondary);
287
+ cursor: pointer;
288
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default),
289
+ border-color var(--duration-ak-fast) var(--ease-ak-default);
290
+ }
291
+ .ak-mobile-theme-btn i {
292
+ font-size: var(--size-ak-icon-md);
293
+ }
294
+ .ak-mobile-theme-btn:focus { outline: none; }
295
+ .ak-mobile-theme-btn:focus-visible {
296
+ outline: 2px solid var(--color-ak-border-focus);
297
+ outline-offset: 2px;
298
+ }
299
+ .ak-mobile-theme-btn[aria-pressed="true"] {
300
+ background: var(--color-ak-active);
301
+ border-color: var(--color-ak-text);
302
+ color: var(--color-ak-text);
303
+ }
304
+ .ak-mobile-theme-section {
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: 0.5rem;
308
+ padding: 0.75rem 1rem;
309
+ }
310
+ .ak-mobile-theme-active {
311
+ background: var(--color-ak-active);
312
+ color: var(--color-ak-text);
313
+ }
314
+ .ak-mobile-theme-btns {
315
+ display: flex;
316
+ gap: 0.5rem;
317
+ }
318
+
319
+ /* Mobile handle */
320
+ .ak-mobile-handle {
321
+ display: flex;
322
+ justify-content: center;
323
+ padding: 0.5rem 0;
324
+ }
325
+
326
+ /* Mobile sub-navigation */
327
+ .ak-mobile-sub-link {
328
+ position: relative;
329
+ display: flex;
330
+ align-items: center;
331
+ gap: 0.5rem;
332
+ padding: 0.5rem 0.75rem;
333
+ border-radius: var(--radius-ak-md);
334
+ font-size: var(--text-ak-sm);
335
+ color: var(--color-ak-text-secondary);
336
+ cursor: pointer;
337
+ text-decoration: none;
338
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
339
+ }
340
+ .ak-mobile-sub-link::before {
341
+ content: '';
342
+ width: 6px;
343
+ height: 6px;
344
+ border-radius: var(--radius-ak-full);
345
+ background: var(--color-ak-border);
346
+ flex-shrink: 0;
347
+ }
348
+ .ak-mobile-sub-link:hover { background: var(--color-ak-hover); }
349
+ .ak-mobile-sub-link:hover::before { background: var(--color-ak-text-muted); }
350
+ .ak-mobile-sub-link:focus { outline: none; }
351
+ .ak-mobile-sub-link:focus-visible {
352
+ outline: 2px solid var(--color-ak-border-focus);
353
+ outline-offset: -2px;
354
+ }
355
+ .ak-mobile-sub-link[aria-current="page"] {
356
+ color: var(--color-ak-text);
357
+ }
358
+ .ak-mobile-sub-link[aria-current="page"]::before {
359
+ background: var(--color-ak-primary);
360
+ }
361
+ .ak-mobile-sub-list {
362
+ display: flex;
363
+ flex-direction: column;
364
+ gap: 0.125rem;
365
+ padding-left: 2rem;
366
+ }
367
+ .ak-mobile-section-label {
368
+ font-size: var(--text-ak-xs);
369
+ font-weight: 600;
370
+ letter-spacing: 0.05em;
371
+ text-transform: uppercase;
372
+ color: var(--color-ak-text-muted);
373
+ padding: 0.75rem 1rem 0.25rem;
374
+ }
375
+
376
+ /* Mobile brand */
377
+ .ak-mobile-brand {
378
+ display: flex;
379
+ align-items: center;
380
+ gap: 0.5rem;
381
+ }
382
+ .ak-mobile-brand-mark {
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ }
387
+ .ak-mobile-brand-name {
388
+ font-size: 1.125rem;
389
+ font-weight: 700;
390
+ color: var(--color-ak-text);
391
+ }
392
+
393
+ /* Mobile misc */
394
+ .ak-mobile-divider {
395
+ height: 1px;
396
+ background: var(--color-ak-border);
397
+ }
398
+ .ak-mobile-badge {
399
+ font-size: var(--text-ak-xs);
400
+ font-weight: 600;
401
+ padding: 0.125rem 0.375rem;
402
+ border-radius: var(--radius-ak-full);
403
+ }
404
+ .ak-mobile-topbar {
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: space-between;
408
+ }
409
+ .ak-mobile-header {
410
+ display: flex;
411
+ align-items: center;
412
+ justify-content: space-between;
413
+ }
414
+
415
+ /* Mobile takeover (full-screen nav) */
416
+ .ak-mobile-takeover {
417
+ position: fixed;
418
+ inset: 0;
419
+ z-index: var(--z-ak-modal);
420
+ background: var(--color-ak-bg);
421
+ opacity: 0;
422
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default);
423
+ }
424
+ .ak-mobile-takeover.ak-open { opacity: 1; }
425
+ .ak-mobile-takeover .ak-stagger-item {
426
+ opacity: 0;
427
+ transform: translateY(8px);
428
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default),
429
+ transform var(--duration-ak-base) var(--ease-ak-default);
430
+ }
431
+ .ak-mobile-takeover.ak-open .ak-stagger-item {
432
+ opacity: 1;
433
+ transform: translateY(0);
434
+ }
435
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(1) { transition-delay: 50ms; }
436
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(2) { transition-delay: 100ms; }
437
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(3) { transition-delay: 150ms; }
438
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(4) { transition-delay: 200ms; }
439
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(5) { transition-delay: 250ms; }
440
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(6) { transition-delay: 300ms; }
441
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(7) { transition-delay: 350ms; }
442
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(8) { transition-delay: 400ms; }
443
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(9) { transition-delay: 450ms; }
444
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(10) { transition-delay: 500ms; }
445
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(11) { transition-delay: 550ms; }
446
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(12) { transition-delay: 600ms; }
447
+ .ak-mobile-takeover.ak-open .ak-stagger-item:nth-child(13) { transition-delay: 650ms; }
448
+
449
+ /* Mobile panel (profile/detail) */
450
+ .ak-mobile-panel {
451
+ position: fixed;
452
+ top: 0;
453
+ right: 0;
454
+ bottom: 0;
455
+ z-index: var(--z-ak-modal);
456
+ width: 20rem;
457
+ max-width: 85vw;
458
+ background: var(--color-ak-bg);
459
+ transform: translateX(100%);
460
+ transition: transform 240ms cubic-bezier(0.4, 0, 0.2, 1);
461
+ overflow-y: auto;
462
+ }
463
+ .ak-mobile-panel.ak-open { transform: translateX(0); }
464
+ .ak-mobile-panel-backdrop {
465
+ position: fixed;
466
+ inset: 0;
467
+ z-index: var(--z-ak-overlay);
468
+ background: var(--color-ak-overlay);
469
+ opacity: 0;
470
+ transition: opacity 240ms cubic-bezier(0.4, 0, 0.2, 1);
471
+ }
472
+ .ak-mobile-panel-backdrop.ak-open { opacity: 1; }
473
+ .ak-mobile-panel-header {
474
+ display: flex;
475
+ align-items: center;
476
+ justify-content: space-between;
477
+ padding: 1rem;
478
+ }
479
+ .ak-mobile-panel-title {
480
+ font-size: var(--text-ak-lg);
481
+ font-weight: 600;
482
+ color: var(--color-ak-text);
483
+ }
484
+ .ak-mobile-panel-body {
485
+ display: flex;
486
+ flex-direction: column;
487
+ }
488
+
489
+ /* More sheet (mobile) */
490
+ .ak-more-sheet {
491
+ position: fixed;
492
+ bottom: calc(var(--spacing-ak-mobile-bar, 3.5rem) + 0.5rem);
493
+ right: 0.5rem;
494
+ left: 0.5rem;
495
+ border-radius: var(--radius-ak-lg);
496
+ z-index: var(--z-ak-popover, 1500);
497
+ transform: translateY(0.5rem);
498
+ opacity: 0;
499
+ visibility: hidden;
500
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default),
501
+ transform var(--duration-ak-base) var(--ease-ak-default),
502
+ visibility 0s linear var(--duration-ak-base);
503
+ }
504
+ .ak-more-sheet-open {
505
+ transform: translateY(0);
506
+ opacity: 1;
507
+ visibility: visible;
508
+ transition-delay: 0s;
509
+ }
510
+
511
+ /* More menu (popup from mobile bar) */
512
+ .ak-more-menu {
513
+ position: fixed;
514
+ background: var(--color-ak-bg);
515
+ border: 1px solid var(--color-ak-border);
516
+ border-radius: var(--radius-ak-lg);
517
+ box-shadow: var(--shadow-ak-lg);
518
+ opacity: 0;
519
+ visibility: hidden;
520
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default),
521
+ visibility 0s linear var(--duration-ak-base);
522
+ z-index: var(--z-ak-dropdown);
523
+ }
524
+ .ak-more-menu-open,
525
+ .ak-more-menu.ak-open {
526
+ opacity: 1;
527
+ visibility: visible;
528
+ transition-delay: 0s;
529
+ }
530
+ .ak-more-menu-item {
531
+ display: flex;
532
+ align-items: center;
533
+ gap: 0.75rem;
534
+ width: 100%;
535
+ min-height: 3.5rem;
536
+ padding: 0 1rem;
537
+ background: none;
538
+ border: none;
539
+ font-family: inherit;
540
+ font-size: 1rem;
541
+ color: var(--color-ak-text);
542
+ cursor: pointer;
543
+ text-decoration: none;
544
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
545
+ }
546
+ .ak-more-menu-item i {
547
+ font-size: 1.375rem;
548
+ color: var(--color-ak-text-secondary);
549
+ }
550
+ .ak-more-menu-item:hover { background: var(--color-ak-hover); }
551
+ .ak-more-menu-item:focus { outline: none; }
552
+ .ak-more-menu-item:focus-visible {
553
+ outline: 2px solid var(--color-ak-border-focus);
554
+ outline-offset: -2px;
555
+ }
556
+
557
+