astralkit 0.3.0 → 0.3.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.
@@ -1,557 +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
-
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
+