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,435 @@
1
+
2
+
3
+ /* Account/profile/user primitives -- profile panels, user cards, account switchers, user footers */
4
+
5
+
6
+
7
+ /* Profile panel */
8
+ .ak-profile-panel {
9
+ position: fixed;
10
+ width: 16rem;
11
+ background: var(--color-ak-bg);
12
+ border: 1px solid var(--color-ak-border);
13
+ border-radius: var(--radius-ak-lg);
14
+ box-shadow: var(--shadow-ak-lg);
15
+ opacity: 0; visibility: hidden;
16
+ transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1),
17
+ visibility 150ms cubic-bezier(0.4, 0, 0.2, 1);
18
+ z-index: var(--z-ak-modal);
19
+ }
20
+ .ak-profile-panel-open,
21
+ .ak-profile-panel.ak-open { opacity: 1; visibility: visible; }
22
+
23
+ /* Profile trigger */
24
+ .ak-profile-trigger {
25
+ display: flex;
26
+ align-items: center;
27
+ gap: 0.75rem;
28
+ padding: 0.5rem 0.75rem;
29
+ border-radius: var(--radius-ak-md);
30
+ cursor: pointer;
31
+ border: none;
32
+ background: none;
33
+ font-family: inherit;
34
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
35
+ }
36
+ .ak-profile-trigger:hover { background: var(--color-ak-active); }
37
+ .ak-profile-trigger:focus { outline: none; }
38
+ .ak-profile-trigger:focus-visible {
39
+ outline: 2px solid var(--color-ak-border-focus);
40
+ outline-offset: 2px;
41
+ }
42
+
43
+ /* Profile card */
44
+ .ak-profile-card {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 0.75rem;
48
+ padding: 0.75rem;
49
+ border-radius: var(--radius-ak-md);
50
+ cursor: pointer;
51
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
52
+ }
53
+ .ak-profile-card:hover { background: var(--color-ak-hover); }
54
+ .ak-profile-card:focus { outline: none; }
55
+ .ak-profile-card:focus-visible {
56
+ outline: 2px solid var(--color-ak-border-focus);
57
+ outline-offset: 2px;
58
+ }
59
+
60
+ /* Profile info (name/role shown when expanded) */
61
+ .ak-profile-info {
62
+ display: none;
63
+ flex-direction: column;
64
+ min-width: 0;
65
+ }
66
+ .ak-profile-info-name {
67
+ font-size: var(--text-ak-sm);
68
+ font-weight: 600;
69
+ color: var(--color-ak-text);
70
+ white-space: nowrap;
71
+ overflow: hidden;
72
+ text-overflow: ellipsis;
73
+ }
74
+ .ak-profile-info-role {
75
+ font-size: var(--text-ak-xs);
76
+ color: var(--color-ak-text-muted);
77
+ }
78
+
79
+ /* Profile menu items */
80
+ .ak-profile-menu-item {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 0.75rem;
84
+ padding: 0.5rem 0.75rem;
85
+ min-height: 2.25rem;
86
+ cursor: pointer;
87
+ text-decoration: none;
88
+ color: var(--color-ak-text-secondary);
89
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
90
+ }
91
+ .ak-profile-menu-item:hover { background: var(--color-ak-hover); }
92
+ .ak-profile-menu-item:focus { outline: none; }
93
+ .ak-profile-menu-item:focus-visible {
94
+ outline: 2px solid var(--color-ak-border-focus);
95
+ outline-offset: -2px;
96
+ }
97
+ .ak-profile-menu-item--danger { color: var(--color-ak-danger-text); }
98
+ .ak-profile-menu-divider {
99
+ height: 1px;
100
+ background: var(--color-ak-border);
101
+ margin: 0.25rem 0;
102
+ }
103
+ .ak-profile-divider {
104
+ height: 1px;
105
+ background: var(--color-ak-border);
106
+ }
107
+
108
+ /* Profile avatar / header */
109
+ .ak-profile-avatar {
110
+ width: 2rem;
111
+ height: 2rem;
112
+ border-radius: var(--radius-ak-full);
113
+ overflow: hidden;
114
+ flex-shrink: 0;
115
+ }
116
+ .ak-profile-header {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 0.75rem;
120
+ }
121
+ .ak-profile-name {
122
+ font-size: var(--text-ak-sm);
123
+ font-weight: 600;
124
+ color: var(--color-ak-text);
125
+ }
126
+ .ak-profile-status {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 0.375rem;
130
+ }
131
+ .ak-profile-status-text {
132
+ font-size: var(--text-ak-xs);
133
+ color: var(--color-ak-text-muted);
134
+ }
135
+ .ak-profile-bio {
136
+ font-size: var(--text-ak-sm);
137
+ color: var(--color-ak-text-secondary);
138
+ line-height: 1.5;
139
+ }
140
+ .ak-profile-stat {
141
+ display: flex;
142
+ flex-direction: column;
143
+ align-items: center;
144
+ }
145
+ .ak-profile-stat strong {
146
+ font-weight: 600;
147
+ color: var(--color-ak-text);
148
+ }
149
+
150
+ /* Account switcher */
151
+ .ak-account-switcher {
152
+ position: relative;
153
+ }
154
+ .ak-account-trigger {
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ min-height: 2.5rem;
159
+ border: none;
160
+ background: none;
161
+ cursor: pointer;
162
+ font-family: inherit;
163
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
164
+ }
165
+ .ak-account-trigger i {
166
+ font-size: var(--size-ak-icon-sm);
167
+ transition: transform var(--duration-ak-base) var(--ease-ak-default);
168
+ }
169
+ .ak-account-trigger:hover { background: var(--color-ak-hover); }
170
+ .ak-account-trigger:focus { outline: none; }
171
+ .ak-account-trigger:focus-visible {
172
+ outline: 2px solid var(--color-ak-border-focus);
173
+ outline-offset: 2px;
174
+ }
175
+ .ak-account-left {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 0.625rem;
179
+ min-width: 0;
180
+ }
181
+ .ak-account-chevron { display: none; }
182
+ .ak-account-wrap {
183
+ position: relative;
184
+ }
185
+ .ak-account-dropdown {
186
+ position: absolute;
187
+ bottom: 100%;
188
+ left: 0;
189
+ right: 0;
190
+ margin-bottom: 0.5rem;
191
+ background: var(--color-ak-bg);
192
+ border: 1px solid var(--color-ak-border);
193
+ border-radius: var(--radius-ak-lg);
194
+ box-shadow: var(--shadow-ak-lg);
195
+ overflow: hidden;
196
+ transform: translateY(8px);
197
+ opacity: 0;
198
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default),
199
+ transform var(--duration-ak-base) var(--ease-ak-default);
200
+ z-index: var(--z-ak-dropdown);
201
+ }
202
+ .ak-account-dropdown-open,
203
+ .ak-account-dropdown.ak-open {
204
+ transform: translateY(0);
205
+ opacity: 1;
206
+ }
207
+ .ak-account-option {
208
+ display: flex;
209
+ align-items: center;
210
+ gap: 0.75rem;
211
+ width: 100%;
212
+ padding: 0.75rem;
213
+ min-height: 3rem;
214
+ border: none;
215
+ background: none;
216
+ cursor: pointer;
217
+ text-align: left;
218
+ font-family: inherit;
219
+ font-size: 1rem;
220
+ color: var(--color-ak-text-secondary);
221
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
222
+ }
223
+ .ak-account-option:hover { background: var(--color-ak-hover); }
224
+ .ak-account-option:focus { outline: none; }
225
+ .ak-account-option:focus-visible {
226
+ outline: 2px solid var(--color-ak-border-focus);
227
+ outline-offset: -2px;
228
+ }
229
+ .ak-account-option[aria-selected="true"] {
230
+ background: var(--color-ak-active);
231
+ color: var(--color-ak-text);
232
+ }
233
+ .ak-account-option-avatar {
234
+ width: 2.5rem;
235
+ height: 2.5rem;
236
+ background: var(--color-ak-surface-2);
237
+ border-radius: var(--radius-ak-full);
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ font-size: 1rem;
242
+ font-weight: 600;
243
+ color: var(--color-ak-text-secondary);
244
+ flex-shrink: 0;
245
+ }
246
+ .ak-account-option-name {
247
+ font-size: var(--text-ak-sm);
248
+ font-weight: 500;
249
+ color: var(--color-ak-text);
250
+ }
251
+ .ak-account-option-email {
252
+ font-size: var(--text-ak-xs);
253
+ color: var(--color-ak-text-muted);
254
+ }
255
+ .ak-account-option-check {
256
+ margin-left: auto;
257
+ color: var(--color-ak-primary);
258
+ opacity: 0;
259
+ }
260
+ .ak-account-option[aria-selected="true"] .ak-account-option-check {
261
+ opacity: 1;
262
+ }
263
+
264
+ /* User card */
265
+ .ak-user-card {
266
+ display: flex;
267
+ align-items: center;
268
+ gap: 0.75rem;
269
+ padding: 0.5rem 0.75rem;
270
+ border-radius: var(--radius-ak-md);
271
+ cursor: pointer;
272
+ text-decoration: none;
273
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
274
+ }
275
+ .ak-user-card:hover { background: var(--color-ak-hover); }
276
+ .ak-user-card:focus { outline: none; }
277
+ .ak-user-card:focus-visible {
278
+ outline: 2px solid var(--color-ak-border-focus);
279
+ outline-offset: 2px;
280
+ }
281
+ .ak-user-card__info {
282
+ display: flex;
283
+ flex-direction: column;
284
+ min-width: 0;
285
+ }
286
+ .ak-user-card__name {
287
+ font-weight: 600;
288
+ color: var(--color-ak-text);
289
+ white-space: nowrap;
290
+ overflow: hidden;
291
+ text-overflow: ellipsis;
292
+ }
293
+ .ak-user-card__email {
294
+ font-size: var(--text-ak-xs);
295
+ color: var(--color-ak-text-secondary);
296
+ white-space: nowrap;
297
+ overflow: hidden;
298
+ text-overflow: ellipsis;
299
+ }
300
+ .ak-user-card__name-row {
301
+ display: flex;
302
+ align-items: center;
303
+ gap: 0.375rem;
304
+ }
305
+ .ak-user-card--md .ak-user-card__name { font-size: var(--text-ak-base); }
306
+ .ak-user-card--md .ak-user-card__email { font-size: var(--text-ak-sm); }
307
+ .ak-user-card--lg .ak-user-card__name { font-size: var(--text-ak-base); }
308
+ .ak-user-card--lg .ak-user-card__email { font-size: var(--text-ak-sm); }
309
+ .ak-user-card--xl .ak-user-card__name { font-size: var(--text-ak-lg); }
310
+ .ak-user-card--xl .ak-user-card__email { font-size: var(--text-ak-base); }
311
+ .ak-user-card--2xl .ak-user-card__name { font-size: var(--text-ak-xl); font-weight: 700; letter-spacing: -0.01em; }
312
+ .ak-user-card--2xl .ak-user-card__email { font-size: var(--text-ak-lg); }
313
+ .ak-user-card--2xl { gap: 1rem; padding: 0.75rem; }
314
+ .ak-user-card--3xl .ak-user-card__name { font-size: var(--text-ak-2xl); font-weight: 700; letter-spacing: -0.02em; }
315
+ .ak-user-card--3xl .ak-user-card__email { font-size: var(--text-ak-xl); }
316
+ .ak-user-card--3xl { gap: 1.25rem; padding: 1rem; }
317
+
318
+ /* User footer (sidebar bottom user section) */
319
+ .ak-user-footer {
320
+ display: flex;
321
+ align-items: center;
322
+ gap: 0.75rem;
323
+ padding: 0.5rem 0.75rem;
324
+ cursor: pointer;
325
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
326
+ }
327
+ .ak-user-footer:hover { background: var(--color-ak-hover); }
328
+ .ak-user-footer:focus { outline: none; }
329
+ .ak-user-footer:focus-visible {
330
+ outline: 2px solid var(--color-ak-border-focus);
331
+ outline-offset: 2px;
332
+ }
333
+ .ak-user-footer-row {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ }
338
+ .ak-user-info {
339
+ display: flex;
340
+ flex-direction: column;
341
+ min-width: 0;
342
+ }
343
+ .ak-user-name {
344
+ font-size: var(--text-ak-sm);
345
+ font-weight: 600;
346
+ color: var(--color-ak-text);
347
+ white-space: nowrap;
348
+ overflow: hidden;
349
+ text-overflow: ellipsis;
350
+ }
351
+ .ak-user-email {
352
+ font-size: var(--text-ak-xs);
353
+ color: var(--color-ak-text-muted);
354
+ white-space: nowrap;
355
+ overflow: hidden;
356
+ text-overflow: ellipsis;
357
+ }
358
+ .ak-user-role {
359
+ font-size: var(--text-ak-xs);
360
+ color: var(--color-ak-text-muted);
361
+ }
362
+ .ak-user-avatar {
363
+ width: 2rem;
364
+ height: 2rem;
365
+ border-radius: var(--radius-ak-full);
366
+ overflow: hidden;
367
+ flex-shrink: 0;
368
+ }
369
+ .ak-user-avatar-status {
370
+ position: absolute;
371
+ bottom: 0;
372
+ right: 0;
373
+ width: 10px;
374
+ height: 10px;
375
+ border-radius: var(--radius-ak-full);
376
+ border: 2px solid var(--color-ak-bg);
377
+ }
378
+ .ak-user-chevron {
379
+ color: var(--color-ak-text-muted);
380
+ }
381
+ .ak-user-chevrons {
382
+ display: flex;
383
+ flex-direction: column;
384
+ color: var(--color-ak-text-muted);
385
+ }
386
+ .ak-user-chevrons i {
387
+ font-size: var(--size-ak-icon-sm);
388
+ line-height: 0.5;
389
+ }
390
+ .ak-user-trigger {
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 0.5rem;
394
+ padding: 0.375rem;
395
+ border-radius: var(--radius-ak-md);
396
+ cursor: pointer;
397
+ border: none;
398
+ background: none;
399
+ transition: background-color var(--duration-ak-fast) var(--ease-ak-default);
400
+ }
401
+ .ak-user-trigger:hover { background: var(--color-ak-hover); }
402
+ .ak-user-trigger:focus { outline: none; }
403
+ .ak-user-trigger:focus-visible {
404
+ outline: 2px solid var(--color-ak-border-focus);
405
+ outline-offset: 2px;
406
+ }
407
+ .ak-user-status-dot {
408
+ position: absolute;
409
+ bottom: 0;
410
+ right: 0;
411
+ width: 8px;
412
+ height: 8px;
413
+ border-radius: var(--radius-ak-full);
414
+ border: 2px solid var(--color-ak-bg);
415
+ }
416
+
417
+ /* Profile panel typography */
418
+ [data-ak-profile-panel] > div:first-child p:first-child {
419
+ font-size: var(--text-ak-base);
420
+ font-weight: 600;
421
+ line-height: var(--leading-ak-tight);
422
+ letter-spacing: var(--tracking-ak-normal);
423
+ }
424
+ [data-ak-profile-panel] > div:first-child p:last-child {
425
+ font-size: var(--text-ak-base);
426
+ line-height: var(--leading-ak-tight);
427
+ letter-spacing: var(--tracking-ak-normal);
428
+ }
429
+ [data-ak-profile-item] {
430
+ font-size: var(--text-ak-base);
431
+ line-height: var(--leading-ak-tight);
432
+ letter-spacing: var(--tracking-ak-normal);
433
+ }
434
+
435
+
@@ -0,0 +1,136 @@
1
+
2
+
3
+ /* Animation primitives -- scroll fade, slideover, stagger, loading dots, keyframes */
4
+
5
+
6
+
7
+ /* -- Active press feedback --
8
+ Subtle scale-down on press. Adds tactile feel to buttons and cards.
9
+ Usage: <button class="ak-press"> */
10
+ .ak-press {
11
+ transition: transform var(--duration-ak-fast, 110ms) var(--ease-ak-default, ease);
12
+ }
13
+ .ak-press:active {
14
+ transform: scale(0.98);
15
+ }
16
+
17
+
18
+ /* Scroll fade indicator */
19
+ .ak-scroll-fade {
20
+ position: absolute;
21
+ left: 0;
22
+ right: 0;
23
+ height: 2rem;
24
+ pointer-events: none;
25
+ z-index: 1;
26
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default);
27
+ }
28
+ .ak-scroll-fade-hidden {
29
+ opacity: 0;
30
+ }
31
+
32
+ /* Scroll arrows */
33
+ .ak-scroll-arrow {
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ position: absolute;
38
+ z-index: 2;
39
+ cursor: pointer;
40
+ transition: opacity var(--duration-ak-fast) var(--ease-ak-default);
41
+ }
42
+ .ak-scroll-arrow-hidden { opacity: 0; pointer-events: none; }
43
+ .ak-scroll-arrow:hover { opacity: 1; }
44
+
45
+ /* Slideover panel */
46
+ .ak-slideover {
47
+ position: fixed;
48
+ top: 0;
49
+ right: 0;
50
+ bottom: 0;
51
+ z-index: var(--z-ak-modal);
52
+ transform: translateX(100%);
53
+ transition: transform 240ms cubic-bezier(0.4, 0, 0.2, 1);
54
+ }
55
+ .ak-slideover-open { transform: translateX(0); }
56
+ .ak-slideover-overlay {
57
+ position: fixed;
58
+ inset: 0;
59
+ z-index: var(--z-ak-overlay);
60
+ background: var(--color-ak-overlay);
61
+ opacity: 0;
62
+ visibility: hidden;
63
+ transition: opacity 240ms cubic-bezier(0.4, 0, 0.2, 1),
64
+ visibility 240ms cubic-bezier(0.4, 0, 0.2, 1);
65
+ }
66
+ .ak-slideover-overlay-open { opacity: 1; visibility: visible; }
67
+
68
+ /* .ak-open state class (generic visibility toggle) */
69
+ .ak-open {
70
+ opacity: 1;
71
+ visibility: visible;
72
+ }
73
+
74
+ /* Stagger animation items */
75
+ .ak-stagger-item {
76
+ opacity: 0;
77
+ transform: translateY(8px);
78
+ transition: opacity var(--duration-ak-base) var(--ease-ak-default),
79
+ transform var(--duration-ak-base) var(--ease-ak-default);
80
+ }
81
+
82
+ /* Loading dots */
83
+ .ak-loading-dot {
84
+ width: 8px;
85
+ height: 8px;
86
+ border-radius: var(--radius-ak-full);
87
+ background: var(--color-ak-text-muted);
88
+ animation: ak-bounce 1.2s ease-in-out infinite;
89
+ }
90
+ .ak-loading-dot:nth-child(2) { animation-delay: 150ms; }
91
+ .ak-loading-dot:nth-child(3) { animation-delay: 300ms; }
92
+
93
+ /* Floating / drifting animations */
94
+ .ak-float { animation: ak-float 6s ease-in-out infinite; }
95
+ .ak-float-delayed { animation: ak-float-delayed 7s ease-in-out infinite 1.8s; }
96
+ .ak-drift { animation: ak-drift 26s linear infinite; }
97
+ .ak-drift-reverse { animation: ak-drift-reverse 20s linear infinite; }
98
+ .ak-pulse-ring { animation: ak-pulse-ring 3s cubic-bezier(0.215, 0.61, 0.355, 1) infinite; }
99
+
100
+ /* Keyframes */
101
+ @keyframes ak-bounce {
102
+ 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
103
+ 40% { transform: scale(1); opacity: 1; }
104
+ }
105
+ @keyframes ak-float {
106
+ 0%, 100% { transform: translateY(0); }
107
+ 50% { transform: translateY(-10px); }
108
+ }
109
+ @keyframes ak-float-delayed {
110
+ 0%, 100% { transform: translateY(0); }
111
+ 50% { transform: translateY(-8px); }
112
+ }
113
+ @keyframes ak-drift {
114
+ 0% { transform: translate(0, 0); }
115
+ 25% { transform: translate(10px, -10px); }
116
+ 50% { transform: translate(-5px, -20px); }
117
+ 75% { transform: translate(-15px, -5px); }
118
+ 100% { transform: translate(0, 0); }
119
+ }
120
+ @keyframes ak-drift-reverse {
121
+ 0% { transform: translate(0, 0); }
122
+ 25% { transform: translate(-10px, 10px); }
123
+ 50% { transform: translate(5px, 20px); }
124
+ 75% { transform: translate(15px, 5px); }
125
+ 100% { transform: translate(0, 0); }
126
+ }
127
+ @keyframes ak-pulse-ring {
128
+ 0% { transform: scale(0.8); opacity: 0.5; }
129
+ 50% { transform: scale(1); opacity: 0.2; }
130
+ 100% { transform: scale(0.8); opacity: 0.5; }
131
+ }
132
+ @keyframes ak-shimmer {
133
+ 100% { transform: translateX(100%); }
134
+ }
135
+
136
+