astralkit 0.7.0 → 0.8.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.
@@ -1,220 +1,220 @@
1
-
2
-
3
- /* Layout primitives -- stack, cluster, center, sidebar, grid, surfaces, skeleton, card shell, scrollbar */
4
-
5
-
6
-
7
- /* ================================================================
8
- Layout Primitives
9
- Breakpoint-free, intrinsic responsive patterns.
10
- Based on Every Layout (Heydon Pickering & Andy Bell).
11
- ================================================================ */
12
-
13
- /* Stack -- vertical spacing between children */
14
- .ak-stack {
15
- display: flex;
16
- flex-direction: column;
17
- gap: var(--ak-stack-gap, var(--spacing-ak-fl-sm));
18
- }
19
-
20
- /* Cluster -- horizontal wrapping group */
21
- .ak-cluster {
22
- display: flex;
23
- flex-wrap: wrap;
24
- gap: var(--ak-cluster-gap, var(--spacing-ak-fl-xs));
25
- align-items: var(--ak-cluster-align, center);
26
- }
27
-
28
- /* Center -- horizontally centered content with max-width */
29
- .ak-center {
30
- box-sizing: content-box;
31
- max-inline-size: var(--ak-center-max, 75rem);
32
- margin-inline: auto;
33
- padding-inline: var(--ak-center-gutter, var(--spacing-ak-fl-sm));
34
- }
35
-
36
- /* Sidebar layout -- two-panel: fixed sidebar + flexible main */
37
- .ak-sidebar {
38
- display: flex;
39
- flex-wrap: wrap;
40
- gap: var(--ak-sidebar-gap, var(--spacing-ak-fl-md));
41
- }
42
- .ak-sidebar > :first-child {
43
- flex-basis: var(--ak-sidebar-width, 18rem);
44
- flex-grow: 1;
45
- }
46
- .ak-sidebar > :last-child {
47
- flex-basis: 0;
48
- flex-grow: 999;
49
- min-inline-size: var(--ak-sidebar-threshold, 50%);
50
- }
51
-
52
- /* Switcher -- horizontal that flips to vertical */
53
- .ak-switcher {
54
- display: flex;
55
- flex-wrap: wrap;
56
- gap: var(--ak-switcher-gap, var(--spacing-ak-fl-sm));
57
- }
58
- .ak-switcher > * {
59
- flex-basis: calc((var(--ak-switcher-threshold, 30rem) - 100%) * 999);
60
- flex-grow: 1;
61
- }
62
-
63
- /* Cover -- fills viewport, centers primary content */
64
- .ak-cover {
65
- display: flex;
66
- flex-direction: column;
67
- min-block-size: var(--ak-cover-min, 100dvh);
68
- padding: var(--ak-cover-padding, var(--spacing-ak-fl-md));
69
- }
70
- .ak-cover > * { margin-block: auto; }
71
- .ak-cover > :first-child:not(.ak-cover-center) { margin-block-start: 0; }
72
- .ak-cover > :last-child:not(.ak-cover-center) { margin-block-end: 0; }
73
-
74
- /* Auto-Responsive Grid (RAM pattern) */
75
- .ak-grid {
76
- display: grid;
77
- gap: var(--ak-grid-gap, var(--spacing-ak-fl-sm));
78
- grid-template-columns: repeat(
79
- auto-fill,
80
- minmax(min(var(--ak-grid-min, 280px), 100%), 1fr)
81
- );
82
- }
83
-
84
- /* Container query helper */
85
- .ak-container {
86
- container-type: inline-size;
87
- }
88
- .ak-container-named {
89
- container-type: inline-size;
90
- container-name: var(--ak-container-name, content);
91
- }
92
-
93
- /* Raised card / panel surface */
94
- .ak-surface-raised {
95
- background: var(--ak-surface-raised-bg, var(--color-ak-surface-raised));
96
- border: 1px solid var(--ak-surface-raised-border, var(--color-ak-border));
97
- box-shadow: var(--ak-surface-raised-shadow, var(--shadow-ak-md));
98
- }
99
- /* Glass-like elevated surface */
100
- .ak-surface-glass {
101
- background: var(--ak-surface-glass-bg, var(--color-ak-surface-glass));
102
- border: 1px solid var(--ak-surface-glass-border, var(--color-ak-border-subtle));
103
- backdrop-filter: blur(var(--ak-surface-glass-blur, 12px));
104
- }
105
- /* Highlight overlay for premium surfaces */
106
- .ak-sheen {
107
- position: relative;
108
- }
109
- .ak-sheen::before {
110
- content: "";
111
- position: absolute;
112
- inset: 0;
113
- border-radius: inherit;
114
- background: linear-gradient(
115
- 145deg,
116
- var(--ak-sheen-highlight, var(--color-ak-highlight-soft)),
117
- rgba(255, 255, 255, 0) 65%
118
- );
119
- opacity: var(--ak-sheen-opacity, 1);
120
- pointer-events: none;
121
- }
122
- .ak-sheen-strong {
123
- --ak-sheen-highlight: var(--color-ak-highlight-strong);
124
- }
125
-
126
- /* Skeleton loading */
127
- .ak-skeleton {
128
- position: relative;
129
- overflow: hidden;
130
- background: linear-gradient(
131
- 180deg,
132
- var(--ak-skeleton-base, var(--color-ak-skeleton-base)),
133
- var(--ak-skeleton-base-end, var(--color-ak-surface-2))
134
- );
135
- border-radius: var(--ak-skeleton-radius, var(--radius-ak-md));
136
- color: transparent !important;
137
- user-select: none;
138
- }
139
- .ak-skeleton::after {
140
- content: "";
141
- position: absolute;
142
- inset: 0;
143
- transform: translateX(-100%);
144
- background: linear-gradient(
145
- 90deg,
146
- rgba(255, 255, 255, 0),
147
- var(--ak-skeleton-shine, var(--color-ak-skeleton-shine)),
148
- rgba(255, 255, 255, 0)
149
- );
150
- animation: ak-skeleton-shimmer var(--duration-ak-skeleton) ease-in-out infinite;
151
- }
152
- @media (prefers-reduced-motion: reduce) {
153
- .ak-skeleton::after { animation: none; }
154
- }
155
- .ak-skeleton-pill { border-radius: var(--radius-ak-full); }
156
- .ak-skeleton-circle { border-radius: var(--radius-ak-full); }
157
-
158
- /* Card shell scaffold */
159
- .ak-card-shell {
160
- position: relative;
161
- overflow: hidden;
162
- border: 1px solid var(--ak-card-shell-border, var(--color-ak-border));
163
- border-radius: var(--ak-card-shell-radius, var(--radius-ak-lg));
164
- background: var(--ak-card-shell-bg, var(--color-ak-surface-raised));
165
- box-shadow: var(--ak-card-shell-shadow, var(--shadow-ak-md));
166
- transition:
167
- transform var(--duration-ak-base) var(--ease-ak-default),
168
- box-shadow var(--duration-ak-base) var(--ease-ak-default),
169
- border-color var(--duration-ak-base) var(--ease-ak-default);
170
- }
171
- .ak-card-shell-interactive:hover,
172
- .ak-card-shell-interactive:focus-within {
173
- transform: translateY(var(--ak-card-shell-lift, -2px));
174
- border-color: var(--ak-card-shell-border-hover, var(--color-ak-border-strong));
175
- box-shadow: var(--ak-card-shell-shadow-hover, var(--shadow-ak-lg));
176
- }
177
- .ak-card-shell-inner {
178
- position: relative;
179
- z-index: 1;
180
- display: flex;
181
- flex-direction: column;
182
- gap: var(--ak-card-shell-gap, var(--spacing-ak-3));
183
- }
184
- .ak-card-shell-header {
185
- display: grid;
186
- grid-template-columns: minmax(0, 1fr) auto;
187
- align-items: start;
188
- gap: var(--ak-card-shell-header-gap, var(--spacing-ak-2));
189
- }
190
-
191
- /* Scrollbar */
192
- .ak-scrollbar {
193
- scrollbar-width: thin;
194
- scrollbar-color: var(--color-ak-border-strong) transparent;
195
- }
196
- .ak-scrollbar::-webkit-scrollbar { width: 6px; height: 6px; }
197
- .ak-scrollbar::-webkit-scrollbar-track { background: transparent; }
198
- .ak-scrollbar::-webkit-scrollbar-thumb {
199
- background: var(--color-ak-border-strong);
200
- border-radius: var(--radius-ak-full);
201
- }
202
-
203
- /* Grid tile */
204
- .ak-grid-tile {
205
- border: 1px solid var(--color-ak-border);
206
- border-radius: var(--radius-ak-lg);
207
- padding: var(--spacing-ak-3);
208
- transition: border-color var(--duration-ak-fast) var(--ease-ak-default);
209
- }
210
- .ak-grid-tile:hover { border-color: var(--color-ak-border-strong); }
211
-
212
- /* CTA wrap */
213
- .ak-cta-wrap {
214
- display: flex;
215
- flex-wrap: wrap;
216
- gap: var(--spacing-ak-2);
217
- align-items: center;
218
- }
219
-
220
-
1
+
2
+
3
+ /* Layout primitives -- stack, cluster, center, sidebar, grid, surfaces, skeleton, card shell, scrollbar */
4
+
5
+
6
+
7
+ /* ================================================================
8
+ Layout Primitives
9
+ Breakpoint-free, intrinsic responsive patterns.
10
+ Based on Every Layout (Heydon Pickering & Andy Bell).
11
+ ================================================================ */
12
+
13
+ /* Stack -- vertical spacing between children */
14
+ .ak-stack {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--ak-stack-gap, var(--spacing-ak-fl-sm));
18
+ }
19
+
20
+ /* Cluster -- horizontal wrapping group */
21
+ .ak-cluster {
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+ gap: var(--ak-cluster-gap, var(--spacing-ak-fl-xs));
25
+ align-items: var(--ak-cluster-align, center);
26
+ }
27
+
28
+ /* Center -- horizontally centered content with max-width */
29
+ .ak-center {
30
+ box-sizing: content-box;
31
+ max-inline-size: var(--ak-center-max, 75rem);
32
+ margin-inline: auto;
33
+ padding-inline: var(--ak-center-gutter, var(--spacing-ak-fl-sm));
34
+ }
35
+
36
+ /* Sidebar layout -- two-panel: fixed sidebar + flexible main */
37
+ .ak-sidebar {
38
+ display: flex;
39
+ flex-wrap: wrap;
40
+ gap: var(--ak-sidebar-gap, var(--spacing-ak-fl-md));
41
+ }
42
+ .ak-sidebar > :first-child {
43
+ flex-basis: var(--ak-sidebar-width, 18rem);
44
+ flex-grow: 1;
45
+ }
46
+ .ak-sidebar > :last-child {
47
+ flex-basis: 0;
48
+ flex-grow: 999;
49
+ min-inline-size: var(--ak-sidebar-threshold, 50%);
50
+ }
51
+
52
+ /* Switcher -- horizontal that flips to vertical */
53
+ .ak-switcher {
54
+ display: flex;
55
+ flex-wrap: wrap;
56
+ gap: var(--ak-switcher-gap, var(--spacing-ak-fl-sm));
57
+ }
58
+ .ak-switcher > * {
59
+ flex-basis: calc((var(--ak-switcher-threshold, 30rem) - 100%) * 999);
60
+ flex-grow: 1;
61
+ }
62
+
63
+ /* Cover -- fills viewport, centers primary content */
64
+ .ak-cover {
65
+ display: flex;
66
+ flex-direction: column;
67
+ min-block-size: var(--ak-cover-min, 100dvh);
68
+ padding: var(--ak-cover-padding, var(--spacing-ak-fl-md));
69
+ }
70
+ .ak-cover > * { margin-block: auto; }
71
+ .ak-cover > :first-child:not(.ak-cover-center) { margin-block-start: 0; }
72
+ .ak-cover > :last-child:not(.ak-cover-center) { margin-block-end: 0; }
73
+
74
+ /* Auto-Responsive Grid (RAM pattern) */
75
+ .ak-grid {
76
+ display: grid;
77
+ gap: var(--ak-grid-gap, var(--spacing-ak-fl-sm));
78
+ grid-template-columns: repeat(
79
+ auto-fill,
80
+ minmax(min(var(--ak-grid-min, 280px), 100%), 1fr)
81
+ );
82
+ }
83
+
84
+ /* Container query helper */
85
+ .ak-container {
86
+ container-type: inline-size;
87
+ }
88
+ .ak-container-named {
89
+ container-type: inline-size;
90
+ container-name: var(--ak-container-name, content);
91
+ }
92
+
93
+ /* Raised card / panel surface */
94
+ .ak-surface-raised {
95
+ background: var(--ak-surface-raised-bg, var(--color-ak-surface-raised));
96
+ border: 1px solid var(--ak-surface-raised-border, var(--color-ak-border));
97
+ box-shadow: var(--ak-surface-raised-shadow, var(--shadow-ak-md));
98
+ }
99
+ /* Glass-like elevated surface */
100
+ .ak-surface-glass {
101
+ background: var(--ak-surface-glass-bg, var(--color-ak-surface-glass));
102
+ border: 1px solid var(--ak-surface-glass-border, var(--color-ak-border-subtle));
103
+ backdrop-filter: blur(var(--ak-surface-glass-blur, 12px));
104
+ }
105
+ /* Highlight overlay for premium surfaces */
106
+ .ak-sheen {
107
+ position: relative;
108
+ }
109
+ .ak-sheen::before {
110
+ content: "";
111
+ position: absolute;
112
+ inset: 0;
113
+ border-radius: inherit;
114
+ background: linear-gradient(
115
+ 145deg,
116
+ var(--ak-sheen-highlight, var(--color-ak-highlight-soft)),
117
+ rgba(255, 255, 255, 0) 65%
118
+ );
119
+ opacity: var(--ak-sheen-opacity, 1);
120
+ pointer-events: none;
121
+ }
122
+ .ak-sheen-strong {
123
+ --ak-sheen-highlight: var(--color-ak-highlight-strong);
124
+ }
125
+
126
+ /* Skeleton loading */
127
+ .ak-skeleton {
128
+ position: relative;
129
+ overflow: hidden;
130
+ background: linear-gradient(
131
+ 180deg,
132
+ var(--ak-skeleton-base, var(--color-ak-skeleton-base)),
133
+ var(--ak-skeleton-base-end, var(--color-ak-surface-2))
134
+ );
135
+ border-radius: var(--ak-skeleton-radius, var(--radius-ak-md));
136
+ color: transparent !important;
137
+ user-select: none;
138
+ }
139
+ .ak-skeleton::after {
140
+ content: "";
141
+ position: absolute;
142
+ inset: 0;
143
+ transform: translateX(-100%);
144
+ background: linear-gradient(
145
+ 90deg,
146
+ rgba(255, 255, 255, 0),
147
+ var(--ak-skeleton-shine, var(--color-ak-skeleton-shine)),
148
+ rgba(255, 255, 255, 0)
149
+ );
150
+ animation: ak-skeleton-shimmer var(--duration-ak-skeleton) ease-in-out infinite;
151
+ }
152
+ @media (prefers-reduced-motion: reduce) {
153
+ .ak-skeleton::after { animation: none; }
154
+ }
155
+ .ak-skeleton-pill { border-radius: var(--radius-ak-full); }
156
+ .ak-skeleton-circle { border-radius: var(--radius-ak-full); }
157
+
158
+ /* Card shell scaffold */
159
+ .ak-card-shell {
160
+ position: relative;
161
+ overflow: hidden;
162
+ border: 1px solid var(--ak-card-shell-border, var(--color-ak-border));
163
+ border-radius: var(--ak-card-shell-radius, var(--radius-ak-lg));
164
+ background: var(--ak-card-shell-bg, var(--color-ak-surface-raised));
165
+ box-shadow: var(--ak-card-shell-shadow, var(--shadow-ak-md));
166
+ transition:
167
+ transform var(--duration-ak-base) var(--ease-ak-default),
168
+ box-shadow var(--duration-ak-base) var(--ease-ak-default),
169
+ border-color var(--duration-ak-base) var(--ease-ak-default);
170
+ }
171
+ .ak-card-shell-interactive:hover,
172
+ .ak-card-shell-interactive:focus-within {
173
+ transform: translateY(var(--ak-card-shell-lift, -2px));
174
+ border-color: var(--ak-card-shell-border-hover, var(--color-ak-border-strong));
175
+ box-shadow: var(--ak-card-shell-shadow-hover, var(--shadow-ak-lg));
176
+ }
177
+ .ak-card-shell-inner {
178
+ position: relative;
179
+ z-index: 1;
180
+ display: flex;
181
+ flex-direction: column;
182
+ gap: var(--ak-card-shell-gap, var(--spacing-ak-6));
183
+ }
184
+ .ak-card-shell-header {
185
+ display: grid;
186
+ grid-template-columns: minmax(0, 1fr) auto;
187
+ align-items: start;
188
+ gap: var(--ak-card-shell-header-gap, var(--spacing-ak-4));
189
+ }
190
+
191
+ /* Scrollbar */
192
+ .ak-scrollbar {
193
+ scrollbar-width: thin;
194
+ scrollbar-color: var(--color-ak-border-strong) transparent;
195
+ }
196
+ .ak-scrollbar::-webkit-scrollbar { width: 6px; height: 6px; }
197
+ .ak-scrollbar::-webkit-scrollbar-track { background: transparent; }
198
+ .ak-scrollbar::-webkit-scrollbar-thumb {
199
+ background: var(--color-ak-border-strong);
200
+ border-radius: var(--radius-ak-full);
201
+ }
202
+
203
+ /* Grid tile */
204
+ .ak-grid-tile {
205
+ border: 1px solid var(--color-ak-border);
206
+ border-radius: var(--radius-ak-lg);
207
+ padding: var(--spacing-ak-6);
208
+ transition: border-color var(--duration-ak-fast) var(--ease-ak-default);
209
+ }
210
+ .ak-grid-tile:hover { border-color: var(--color-ak-border-strong); }
211
+
212
+ /* CTA wrap */
213
+ .ak-cta-wrap {
214
+ display: flex;
215
+ flex-wrap: wrap;
216
+ gap: var(--spacing-ak-4);
217
+ align-items: center;
218
+ }
219
+
220
+